all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fee6:1c50
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 89e4c703-2f28-4727-85b2-bca335f5d217
        host_id: 9a3b43c52073b98876da7433cf53a5f9772104a91b94e1d0ef2a8e4f
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fee6:1c50
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.105
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.33
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fee6:1c50
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job flake8 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#32>'
      - '<Job flake8 explicit: None implied: None source: osism/container-images/.zuul.yaml@main#2>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: e92b42c2c3c8471095f69df568d16449
      build_refs:
      - branch: main
        change: '887'
        change_message: "chore(deps): update dependency gunicorn to v25\n\nThis PR
          contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [gunicorn](https://redirect.github.com/benoitc/gunicorn) ([changelog](https://gunicorn.org/news/))
          | `==23.0.0` \u2192 `==25.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/gunicorn/25.0.3?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/gunicorn/23.0.0/25.0.3?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>benoitc/gunicorn (gunicorn)</summary>\n\n###
          [`v25.0.3`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.3)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.2...25.0.3)\n\n####
          What's Changed\n\n##### Bug Fixes\n\n- Fix RuntimeError when StopIteration
          raised in ASGI coroutine ([#&#8203;3484](https://redirect.github.com/benoitc/gunicorn/issues/3484))\n-
          Fix passing maxsplit in re.split() as positional argument (deprecated in
          Python 3.13)\n\n##### Documentation\n\n- Updated sponsorship section and
          homepage\n\n**Full Changelog**: <https://github.com/benoitc/gunicorn/compare/25.0.2...25.0.3>\n\n###
          [`v25.0.2`](https://redirect.github.com/benoitc/gunicorn/releases/tag/v25.0.2):
          Release 25.0.2\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.1...25.0.2)\n\n####
          Bug Fixes\n\n- Fix ASGI concurrent request failures through nginx proxy
          by normalizing\n  sockaddr tuples to handle both 2-tuple (IPv4) and 4-tuple
          (IPv6) formats\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
          Fix graceful disconnect handling for ASGI worker to properly handle\n  client
          disconnects without raising exceptions\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
          Fix lazy import of dirty module for gevent compatibility - prevents\n  import
          errors when concurrent.futures is imported before gevent monkey-patching\n
          \ ([PR #&#8203;3483](https://redirect.github.com/benoitc/gunicorn/pull/3483))\n\n####
          Changes\n\n- Refactor: Extract `_normalize_sockaddr` utility function for
          consistent\n  socket address handling across workers\n\n- Add license headers
          to all Python source files\n\n- Update copyright year to 2026 in LICENSE
          and NOTICE files\n\n### [`v25.0.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.1)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.0...25.0.1)\n\n####
          Bug Fixes\n\n- Fix ASGI streaming responses (SSE) hanging: add chunked transfer
          encoding for\n  HTTP/1.1 responses without Content-Length header. Without
          chunked encoding,\n  clients wait for connection close to determine end-of-response.\n\n####
          Changes\n\n- Update celery\\_alternative example to use FastAPI with native
          ASGI worker and\n  uvloop for async task execution\n\n#### Testing\n\n-
          Add ASGI compliance test suite with Docker-based integration tests covering
          HTTP,\n  WebSocket, streaming, lifespan, framework integration (Starlette,
          FastAPI),\n  HTTP/2, and concurrency scenarios\n\n### [`v25.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.0):
          Gunicorn 25.0.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.1...25.0.0)\n\n####
          New Features\n\n- **Dirty Arbiters**: Separate process pool for executing
          long-running, blocking\n  operations (AI model loading, heavy computation)
          without blocking HTTP workers\n  ([PR #&#8203;3460](https://redirect.github.com/benoitc/gunicorn/pull/3460))\n
          \ - Inspired by Erlang's dirty schedulers\n  - Asyncio-based with Unix socket
          IPC\n  - Stateful workers that persist loaded resources\n  - New settings:
          `--dirty-app`, `--dirty-workers`, `--dirty-timeout`,\n    `--dirty-threads`,
          `--dirty-graceful-timeout`\n  - Lifecycle hooks: `on_dirty_starting`, `dirty_post_fork`,\n
          \   `dirty_worker_init`, `dirty_worker_exit`\n\n- **Per-App Worker Allocation
          for Dirty Arbiters**: Control how many dirty workers\n  load each app for
          memory optimization with heavy models\n  ([PR #&#8203;3473](https://redirect.github.com/benoitc/gunicorn/pull/3473))\n
          \ - Set `workers` class attribute on DirtyApp (e.g., `workers = 2`)\n  -
          Or use config format `module:class:N` (e.g., `myapp:HeavyModel:2`)\n  -
          Requests automatically routed to workers with the target app\n  - New exception
          `DirtyNoWorkersAvailableError` for graceful error handling\n  - Example:
          8 workers \xD7 10GB model = 80GB \u2192 with `workers=2`: 20GB (75% savings)\n\n-
          **HTTP/2 Support (Beta)**: Native HTTP/2 (RFC 7540) support for improved
          performance\n  with modern clients ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
          \ - Multiplexed streams over a single connection\n  - Header compression
          (HPACK)\n  - Flow control and stream prioritization\n  - Works with gthread,
          gevent, and ASGI workers\n  - New settings: `--http-protocols`, `--http2-max-concurrent-streams`,\n
          \   `--http2-initial-window-size`, `--http2-max-frame-size`, `--http2-max-header-list-size`\n
          \ - Requires SSL/TLS and h2 library: `pip install gunicorn[http2]`\n  -
          New example: `examples/http2_gevent/` with Docker and tests\n\n- **HTTP
          103 Early Hints**: Support for RFC 8297 Early Hints to enable browsers to\n
          \ preload resources before the final response\n  ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
          \ - WSGI: `environ['wsgi.early_hints'](headers)` callback\n  - ASGI: `http.response.informational`
          message type\n  - Works with both HTTP/1.1 and HTTP/2\n\n- **uWSGI Protocol
          for ASGI Worker**: The ASGI worker now supports receiving requests\n  via
          the uWSGI binary protocol from nginx\n  ([PR #&#8203;3467](https://redirect.github.com/benoitc/gunicorn/pull/3467))\n\n####
          Bug Fixes\n\n- Fix HTTP/2 ALPN negotiation for gevent and eventlet workers
          when\n  `do_handshake_on_connect` is False (the default). The TLS handshake
          is now\n  explicitly performed before checking `selected_alpn_protocol()`.\n\n-
          Fix setproctitle initialization with systemd socket activation\n  ([#&#8203;3465](https://redirect.github.com/benoitc/gunicorn/issues/3465))\n\n-
          Fix `Expect: 100-continue` handling: ignore the header for HTTP/1.0 requests\n
          \ since 100-continue is only valid for HTTP/1.1+\n  ([PR #&#8203;3463](https://redirect.github.com/benoitc/gunicorn/pull/3463))\n\n-
          Fix missing `_expected_100_continue` attribute in UWSGIRequest\n\n- Disable
          setproctitle on macOS to prevent segfaults during process title updates\n\n-
          Publish full exception traceback when the application fails to load\n  ([#&#8203;3462](https://redirect.github.com/benoitc/gunicorn/issues/3462))\n\n-
          Fix ASGI: quick shutdown on SIGINT/SIGQUIT, graceful on SIGTERM\n\n####
          Deprecations\n\n- **Eventlet Worker**: The `eventlet` worker is deprecated
          and will be removed in\n  Gunicorn 26.0. Eventlet itself is no longer actively
          maintained.\n  Please migrate to `gevent`, `gthread`, or another supported
          worker type.\n\n#### Changes\n\n- Remove obsolete Makefile targets\n  ([PR
          #&#8203;3471](https://redirect.github.com/benoitc/gunicorn/pull/3471))\n-
          Replace RST with markdown documentation format\n\n### [`v24.1.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.1)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.0...24.1.1)\n\n####
          Bug Fixes\n\n- Fix `forwarded_allow_ips` and `proxy_allow_ips` to remain
          as strings for backward\n  compatibility with external tools like uvicorn.
          Network validation now uses strict\n  mode to detect invalid CIDR notation
          (e.g., `192.168.1.1/24` where host bits are set)\n  ([#&#8203;3458](https://redirect.github.com/benoitc/gunicorn/issues/3458),\n
          \ [PR #&#8203;3459](https://redirect.github.com/benoitc/gunicorn/pull/3459))\n\n***\n\n**Full
          Changelog**: <https://github.com/benoitc/gunicorn/compare/24.1.0...24.1.1>\n\n###
          [`v24.1.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.0):
          Gunicorn 24.1.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.0.0...24.1.0)\n\n####
          New Features\n\n- **Official Docker Image**: Gunicorn now publishes official
          Docker images to GitHub Container Registry ([PR #&#8203;3454](https://redirect.github.com/benoitc/gunicorn/pull/3454))\n
          \ - Available at `ghcr.io/benoitc/gunicorn`\n  - Based on Python 3.12 slim
          image\n  - Uses recommended worker formula (2 \xD7 CPU + 1)\n  - Configurable
          via environment variables\n\n- **PROXY Protocol v2 Support**: Extended PROXY
          protocol implementation to support the binary v2 format in addition to the
          existing text-based v1 format ([PR #&#8203;3451](https://redirect.github.com/benoitc/gunicorn/pull/3451))\n
          \ - New `--proxy-protocol` modes: `off`, `v1`, `v2`, `auto`\n  - `auto`
          mode (default when enabled) detects v1 or v2 automatically\n  - v2 binary
          format is more efficient and supports additional metadata\n  - Works with
          HAProxy, AWS NLB/ALB, and other PROXY protocol v2 sources\n\n- **CIDR Network
          Support**: `--forwarded-allow-ips` and `--proxy-allow-from` now accept CIDR
          notation (e.g., `192.168.0.0/16`) for specifying trusted networks ([PR #&#8203;3449](https://redirect.github.com/benoitc/gunicorn/pull/3449))\n\n-
          **Socket Backlog Metric**: New `gunicorn.socket.backlog` gauge metric reports
          the current socket backlog size on Linux systems ([PR #&#8203;3450](https://redirect.github.com/benoitc/gunicorn/pull/3450))\n\n-
          **InotifyReloader Enhancement**: The inotify-based reloader now watches
          newly imported modules, not just those loaded at startup ([PR #&#8203;3447](https://redirect.github.com/benoitc/gunicorn/pull/3447))\n\n####
          Bug Fixes\n\n- Fix signal handling regression where SIGCLD alias caused
          \"Unhandled signal: cld\" errors on Linux when workers fail during boot
          ([#&#8203;3453](https://redirect.github.com/benoitc/gunicorn/discussions/3453))\n-
          Fix socket blocking mode on keepalive connections preventing SSL handshake
          failures with async workers ([PR #&#8203;3452](https://redirect.github.com/benoitc/gunicorn/pull/3452))\n-
          Use smaller buffer size in `finish_body()` for faster timeout detection
          on slow or abandoned connections ([PR #&#8203;3453](https://redirect.github.com/benoitc/gunicorn/pull/3453))\n-
          Handle `SSLWantReadError` in `finish_body()` to prevent worker hangs during
          SSL renegotiation ([PR #&#8203;3448](https://redirect.github.com/benoitc/gunicorn/pull/3448))\n-
          Log SIGTERM as info level instead of warning to reduce noise in orchestrated
          environments ([PR #&#8203;3446](https://redirect.github.com/benoitc/gunicorn/pull/3446))\n-
          Print exception details to stderr when worker fails to boot ([PR #&#8203;3443](https://redirect.github.com/benoitc/gunicorn/pull/3443))\n-
          Fix `unreader.unread()` to prepend data to buffer instead of appending ([PR
          #&#8203;3442](https://redirect.github.com/benoitc/gunicorn/pull/3442))\n-
          Prevent `RecursionError` when pickling Config objects ([PR #&#8203;3441](https://redirect.github.com/benoitc/gunicorn/pull/3441))\n-
          Use proper exception chaining with `raise from` in glogging.py ([PR #&#8203;3440](https://redirect.github.com/benoitc/gunicorn/pull/3440))\n\n####
          Installation\n\n```bash\npip install gunicorn==24.1.0\n```\n\nOr use the
          official Docker image:\n\n```bash\ndocker pull ghcr.io/benoitc/gunicorn:24.1.0\n```\n\n###
          [`v24.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.0.0)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/23.0.0...24.0.0)\n\n####
          New Features\n\n- **ASGI Worker (Beta)**: Native asyncio-based ASGI support
          for running async Python frameworks like FastAPI, Starlette, and Quart without
          external dependencies\n  - HTTP/1.1 with keepalive connections\n  - WebSocket
          support\n  - Lifespan protocol for startup/shutdown hooks\n  - Optional
          uvloop for improved performance\n\n- **uWSGI Binary Protocol**: Support
          for receiving requests from nginx via `uwsgi_pass` directive\n\n- **Documentation
          Migration**: Migrated to MkDocs with Material theme\n\n#### Security\n\n-
          **eventlet**: Require eventlet >= 0.40.3 (CVE-2021-21419, CVE-2025-58068)\n-
          **gevent**: Require gevent >= 24.10.1 (CVE-2023-41419, CVE-2024-3219)\n-
          **tornado**: Require tornado >= 6.5.0 (CVE-2025-47287)\n\n#### Install\n\n```\npip
          install gunicorn==24.0.0\n```\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
          by config. Please merge this manually once you are satisfied.\n\n\u267B
          **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry
          checkbox.\n\n\U0001F515 **Ignore**: Close this PR and you won't be reminded
          about this update again.\n\n---\n\n - [ ] <!-- rebase-check -->If you want
          to rebase/retry this PR, check this box\n\n---\n\nThis PR was generated
          by [Mend Renovate](https://mend.io/renovate/). View the [repository job
          log](https://developer.mend.io/github/osism/container-images).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45NS4yIiwidXBkYXRlZEluVmVyIjoiNDIuOTUuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
        change_url: https://github.com/osism/container-images/pull/887
        commit_id: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
        patchset: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
        src_dir: src/github.com/osism/container-images
        topic: null
      buildset: c320bb7c6b2f4678a850d1f9daa7cfe1
      buildset_refs:
      - branch: main
        change: '887'
        change_message: "chore(deps): update dependency gunicorn to v25\n\nThis PR
          contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [gunicorn](https://redirect.github.com/benoitc/gunicorn) ([changelog](https://gunicorn.org/news/))
          | `==23.0.0` \u2192 `==25.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/gunicorn/25.0.3?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/gunicorn/23.0.0/25.0.3?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>benoitc/gunicorn (gunicorn)</summary>\n\n###
          [`v25.0.3`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.3)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.2...25.0.3)\n\n####
          What's Changed\n\n##### Bug Fixes\n\n- Fix RuntimeError when StopIteration
          raised in ASGI coroutine ([#&#8203;3484](https://redirect.github.com/benoitc/gunicorn/issues/3484))\n-
          Fix passing maxsplit in re.split() as positional argument (deprecated in
          Python 3.13)\n\n##### Documentation\n\n- Updated sponsorship section and
          homepage\n\n**Full Changelog**: <https://github.com/benoitc/gunicorn/compare/25.0.2...25.0.3>\n\n###
          [`v25.0.2`](https://redirect.github.com/benoitc/gunicorn/releases/tag/v25.0.2):
          Release 25.0.2\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.1...25.0.2)\n\n####
          Bug Fixes\n\n- Fix ASGI concurrent request failures through nginx proxy
          by normalizing\n  sockaddr tuples to handle both 2-tuple (IPv4) and 4-tuple
          (IPv6) formats\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
          Fix graceful disconnect handling for ASGI worker to properly handle\n  client
          disconnects without raising exceptions\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
          Fix lazy import of dirty module for gevent compatibility - prevents\n  import
          errors when concurrent.futures is imported before gevent monkey-patching\n
          \ ([PR #&#8203;3483](https://redirect.github.com/benoitc/gunicorn/pull/3483))\n\n####
          Changes\n\n- Refactor: Extract `_normalize_sockaddr` utility function for
          consistent\n  socket address handling across workers\n\n- Add license headers
          to all Python source files\n\n- Update copyright year to 2026 in LICENSE
          and NOTICE files\n\n### [`v25.0.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.1)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.0...25.0.1)\n\n####
          Bug Fixes\n\n- Fix ASGI streaming responses (SSE) hanging: add chunked transfer
          encoding for\n  HTTP/1.1 responses without Content-Length header. Without
          chunked encoding,\n  clients wait for connection close to determine end-of-response.\n\n####
          Changes\n\n- Update celery\\_alternative example to use FastAPI with native
          ASGI worker and\n  uvloop for async task execution\n\n#### Testing\n\n-
          Add ASGI compliance test suite with Docker-based integration tests covering
          HTTP,\n  WebSocket, streaming, lifespan, framework integration (Starlette,
          FastAPI),\n  HTTP/2, and concurrency scenarios\n\n### [`v25.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.0):
          Gunicorn 25.0.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.1...25.0.0)\n\n####
          New Features\n\n- **Dirty Arbiters**: Separate process pool for executing
          long-running, blocking\n  operations (AI model loading, heavy computation)
          without blocking HTTP workers\n  ([PR #&#8203;3460](https://redirect.github.com/benoitc/gunicorn/pull/3460))\n
          \ - Inspired by Erlang's dirty schedulers\n  - Asyncio-based with Unix socket
          IPC\n  - Stateful workers that persist loaded resources\n  - New settings:
          `--dirty-app`, `--dirty-workers`, `--dirty-timeout`,\n    `--dirty-threads`,
          `--dirty-graceful-timeout`\n  - Lifecycle hooks: `on_dirty_starting`, `dirty_post_fork`,\n
          \   `dirty_worker_init`, `dirty_worker_exit`\n\n- **Per-App Worker Allocation
          for Dirty Arbiters**: Control how many dirty workers\n  load each app for
          memory optimization with heavy models\n  ([PR #&#8203;3473](https://redirect.github.com/benoitc/gunicorn/pull/3473))\n
          \ - Set `workers` class attribute on DirtyApp (e.g., `workers = 2`)\n  -
          Or use config format `module:class:N` (e.g., `myapp:HeavyModel:2`)\n  -
          Requests automatically routed to workers with the target app\n  - New exception
          `DirtyNoWorkersAvailableError` for graceful error handling\n  - Example:
          8 workers \xD7 10GB model = 80GB \u2192 with `workers=2`: 20GB (75% savings)\n\n-
          **HTTP/2 Support (Beta)**: Native HTTP/2 (RFC 7540) support for improved
          performance\n  with modern clients ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
          \ - Multiplexed streams over a single connection\n  - Header compression
          (HPACK)\n  - Flow control and stream prioritization\n  - Works with gthread,
          gevent, and ASGI workers\n  - New settings: `--http-protocols`, `--http2-max-concurrent-streams`,\n
          \   `--http2-initial-window-size`, `--http2-max-frame-size`, `--http2-max-header-list-size`\n
          \ - Requires SSL/TLS and h2 library: `pip install gunicorn[http2]`\n  -
          New example: `examples/http2_gevent/` with Docker and tests\n\n- **HTTP
          103 Early Hints**: Support for RFC 8297 Early Hints to enable browsers to\n
          \ preload resources before the final response\n  ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
          \ - WSGI: `environ['wsgi.early_hints'](headers)` callback\n  - ASGI: `http.response.informational`
          message type\n  - Works with both HTTP/1.1 and HTTP/2\n\n- **uWSGI Protocol
          for ASGI Worker**: The ASGI worker now supports receiving requests\n  via
          the uWSGI binary protocol from nginx\n  ([PR #&#8203;3467](https://redirect.github.com/benoitc/gunicorn/pull/3467))\n\n####
          Bug Fixes\n\n- Fix HTTP/2 ALPN negotiation for gevent and eventlet workers
          when\n  `do_handshake_on_connect` is False (the default). The TLS handshake
          is now\n  explicitly performed before checking `selected_alpn_protocol()`.\n\n-
          Fix setproctitle initialization with systemd socket activation\n  ([#&#8203;3465](https://redirect.github.com/benoitc/gunicorn/issues/3465))\n\n-
          Fix `Expect: 100-continue` handling: ignore the header for HTTP/1.0 requests\n
          \ since 100-continue is only valid for HTTP/1.1+\n  ([PR #&#8203;3463](https://redirect.github.com/benoitc/gunicorn/pull/3463))\n\n-
          Fix missing `_expected_100_continue` attribute in UWSGIRequest\n\n- Disable
          setproctitle on macOS to prevent segfaults during process title updates\n\n-
          Publish full exception traceback when the application fails to load\n  ([#&#8203;3462](https://redirect.github.com/benoitc/gunicorn/issues/3462))\n\n-
          Fix ASGI: quick shutdown on SIGINT/SIGQUIT, graceful on SIGTERM\n\n####
          Deprecations\n\n- **Eventlet Worker**: The `eventlet` worker is deprecated
          and will be removed in\n  Gunicorn 26.0. Eventlet itself is no longer actively
          maintained.\n  Please migrate to `gevent`, `gthread`, or another supported
          worker type.\n\n#### Changes\n\n- Remove obsolete Makefile targets\n  ([PR
          #&#8203;3471](https://redirect.github.com/benoitc/gunicorn/pull/3471))\n-
          Replace RST with markdown documentation format\n\n### [`v24.1.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.1)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.0...24.1.1)\n\n####
          Bug Fixes\n\n- Fix `forwarded_allow_ips` and `proxy_allow_ips` to remain
          as strings for backward\n  compatibility with external tools like uvicorn.
          Network validation now uses strict\n  mode to detect invalid CIDR notation
          (e.g., `192.168.1.1/24` where host bits are set)\n  ([#&#8203;3458](https://redirect.github.com/benoitc/gunicorn/issues/3458),\n
          \ [PR #&#8203;3459](https://redirect.github.com/benoitc/gunicorn/pull/3459))\n\n***\n\n**Full
          Changelog**: <https://github.com/benoitc/gunicorn/compare/24.1.0...24.1.1>\n\n###
          [`v24.1.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.0):
          Gunicorn 24.1.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.0.0...24.1.0)\n\n####
          New Features\n\n- **Official Docker Image**: Gunicorn now publishes official
          Docker images to GitHub Container Registry ([PR #&#8203;3454](https://redirect.github.com/benoitc/gunicorn/pull/3454))\n
          \ - Available at `ghcr.io/benoitc/gunicorn`\n  - Based on Python 3.12 slim
          image\n  - Uses recommended worker formula (2 \xD7 CPU + 1)\n  - Configurable
          via environment variables\n\n- **PROXY Protocol v2 Support**: Extended PROXY
          protocol implementation to support the binary v2 format in addition to the
          existing text-based v1 format ([PR #&#8203;3451](https://redirect.github.com/benoitc/gunicorn/pull/3451))\n
          \ - New `--proxy-protocol` modes: `off`, `v1`, `v2`, `auto`\n  - `auto`
          mode (default when enabled) detects v1 or v2 automatically\n  - v2 binary
          format is more efficient and supports additional metadata\n  - Works with
          HAProxy, AWS NLB/ALB, and other PROXY protocol v2 sources\n\n- **CIDR Network
          Support**: `--forwarded-allow-ips` and `--proxy-allow-from` now accept CIDR
          notation (e.g., `192.168.0.0/16`) for specifying trusted networks ([PR #&#8203;3449](https://redirect.github.com/benoitc/gunicorn/pull/3449))\n\n-
          **Socket Backlog Metric**: New `gunicorn.socket.backlog` gauge metric reports
          the current socket backlog size on Linux systems ([PR #&#8203;3450](https://redirect.github.com/benoitc/gunicorn/pull/3450))\n\n-
          **InotifyReloader Enhancement**: The inotify-based reloader now watches
          newly imported modules, not just those loaded at startup ([PR #&#8203;3447](https://redirect.github.com/benoitc/gunicorn/pull/3447))\n\n####
          Bug Fixes\n\n- Fix signal handling regression where SIGCLD alias caused
          \"Unhandled signal: cld\" errors on Linux when workers fail during boot
          ([#&#8203;3453](https://redirect.github.com/benoitc/gunicorn/discussions/3453))\n-
          Fix socket blocking mode on keepalive connections preventing SSL handshake
          failures with async workers ([PR #&#8203;3452](https://redirect.github.com/benoitc/gunicorn/pull/3452))\n-
          Use smaller buffer size in `finish_body()` for faster timeout detection
          on slow or abandoned connections ([PR #&#8203;3453](https://redirect.github.com/benoitc/gunicorn/pull/3453))\n-
          Handle `SSLWantReadError` in `finish_body()` to prevent worker hangs during
          SSL renegotiation ([PR #&#8203;3448](https://redirect.github.com/benoitc/gunicorn/pull/3448))\n-
          Log SIGTERM as info level instead of warning to reduce noise in orchestrated
          environments ([PR #&#8203;3446](https://redirect.github.com/benoitc/gunicorn/pull/3446))\n-
          Print exception details to stderr when worker fails to boot ([PR #&#8203;3443](https://redirect.github.com/benoitc/gunicorn/pull/3443))\n-
          Fix `unreader.unread()` to prepend data to buffer instead of appending ([PR
          #&#8203;3442](https://redirect.github.com/benoitc/gunicorn/pull/3442))\n-
          Prevent `RecursionError` when pickling Config objects ([PR #&#8203;3441](https://redirect.github.com/benoitc/gunicorn/pull/3441))\n-
          Use proper exception chaining with `raise from` in glogging.py ([PR #&#8203;3440](https://redirect.github.com/benoitc/gunicorn/pull/3440))\n\n####
          Installation\n\n```bash\npip install gunicorn==24.1.0\n```\n\nOr use the
          official Docker image:\n\n```bash\ndocker pull ghcr.io/benoitc/gunicorn:24.1.0\n```\n\n###
          [`v24.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.0.0)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/23.0.0...24.0.0)\n\n####
          New Features\n\n- **ASGI Worker (Beta)**: Native asyncio-based ASGI support
          for running async Python frameworks like FastAPI, Starlette, and Quart without
          external dependencies\n  - HTTP/1.1 with keepalive connections\n  - WebSocket
          support\n  - Lifespan protocol for startup/shutdown hooks\n  - Optional
          uvloop for improved performance\n\n- **uWSGI Binary Protocol**: Support
          for receiving requests from nginx via `uwsgi_pass` directive\n\n- **Documentation
          Migration**: Migrated to MkDocs with Material theme\n\n#### Security\n\n-
          **eventlet**: Require eventlet >= 0.40.3 (CVE-2021-21419, CVE-2025-58068)\n-
          **gevent**: Require gevent >= 24.10.1 (CVE-2023-41419, CVE-2024-3219)\n-
          **tornado**: Require tornado >= 6.5.0 (CVE-2025-47287)\n\n#### Install\n\n```\npip
          install gunicorn==24.0.0\n```\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
          by config. Please merge this manually once you are satisfied.\n\n\u267B
          **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry
          checkbox.\n\n\U0001F515 **Ignore**: Close this PR and you won't be reminded
          about this update again.\n\n---\n\n - [ ] <!-- rebase-check -->If you want
          to rebase/retry this PR, check this box\n\n---\n\nThis PR was generated
          by [Mend Renovate](https://mend.io/renovate/). View the [repository job
          log](https://developer.mend.io/github/osism/container-images).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45NS4yIiwidXBkYXRlZEluVmVyIjoiNDIuOTUuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
        change_url: https://github.com/osism/container-images/pull/887
        commit_id: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
        patchset: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
        src_dir: src/github.com/osism/container-images
        topic: null
      change: '887'
      change_message: "chore(deps): update dependency gunicorn to v25\n\nThis PR contains
        the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
        | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
        [gunicorn](https://redirect.github.com/benoitc/gunicorn) ([changelog](https://gunicorn.org/news/))
        | `==23.0.0` \u2192 `==25.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/gunicorn/25.0.3?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/gunicorn/23.0.0/25.0.3?slim=true)
        |\n\n---\n\n### Release Notes\n\n<details>\n<summary>benoitc/gunicorn (gunicorn)</summary>\n\n###
        [`v25.0.3`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.3)\n\n[Compare
        Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.2...25.0.3)\n\n####
        What's Changed\n\n##### Bug Fixes\n\n- Fix RuntimeError when StopIteration
        raised in ASGI coroutine ([#&#8203;3484](https://redirect.github.com/benoitc/gunicorn/issues/3484))\n-
        Fix passing maxsplit in re.split() as positional argument (deprecated in Python
        3.13)\n\n##### Documentation\n\n- Updated sponsorship section and homepage\n\n**Full
        Changelog**: <https://github.com/benoitc/gunicorn/compare/25.0.2...25.0.3>\n\n###
        [`v25.0.2`](https://redirect.github.com/benoitc/gunicorn/releases/tag/v25.0.2):
        Release 25.0.2\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.1...25.0.2)\n\n####
        Bug Fixes\n\n- Fix ASGI concurrent request failures through nginx proxy by
        normalizing\n  sockaddr tuples to handle both 2-tuple (IPv4) and 4-tuple (IPv6)
        formats\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
        Fix graceful disconnect handling for ASGI worker to properly handle\n  client
        disconnects without raising exceptions\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
        Fix lazy import of dirty module for gevent compatibility - prevents\n  import
        errors when concurrent.futures is imported before gevent monkey-patching\n
        \ ([PR #&#8203;3483](https://redirect.github.com/benoitc/gunicorn/pull/3483))\n\n####
        Changes\n\n- Refactor: Extract `_normalize_sockaddr` utility function for
        consistent\n  socket address handling across workers\n\n- Add license headers
        to all Python source files\n\n- Update copyright year to 2026 in LICENSE and
        NOTICE files\n\n### [`v25.0.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.1)\n\n[Compare
        Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.0...25.0.1)\n\n####
        Bug Fixes\n\n- Fix ASGI streaming responses (SSE) hanging: add chunked transfer
        encoding for\n  HTTP/1.1 responses without Content-Length header. Without
        chunked encoding,\n  clients wait for connection close to determine end-of-response.\n\n####
        Changes\n\n- Update celery\\_alternative example to use FastAPI with native
        ASGI worker and\n  uvloop for async task execution\n\n#### Testing\n\n- Add
        ASGI compliance test suite with Docker-based integration tests covering HTTP,\n
        \ WebSocket, streaming, lifespan, framework integration (Starlette, FastAPI),\n
        \ HTTP/2, and concurrency scenarios\n\n### [`v25.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.0):
        Gunicorn 25.0.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.1...25.0.0)\n\n####
        New Features\n\n- **Dirty Arbiters**: Separate process pool for executing
        long-running, blocking\n  operations (AI model loading, heavy computation)
        without blocking HTTP workers\n  ([PR #&#8203;3460](https://redirect.github.com/benoitc/gunicorn/pull/3460))\n
        \ - Inspired by Erlang's dirty schedulers\n  - Asyncio-based with Unix socket
        IPC\n  - Stateful workers that persist loaded resources\n  - New settings:
        `--dirty-app`, `--dirty-workers`, `--dirty-timeout`,\n    `--dirty-threads`,
        `--dirty-graceful-timeout`\n  - Lifecycle hooks: `on_dirty_starting`, `dirty_post_fork`,\n
        \   `dirty_worker_init`, `dirty_worker_exit`\n\n- **Per-App Worker Allocation
        for Dirty Arbiters**: Control how many dirty workers\n  load each app for
        memory optimization with heavy models\n  ([PR #&#8203;3473](https://redirect.github.com/benoitc/gunicorn/pull/3473))\n
        \ - Set `workers` class attribute on DirtyApp (e.g., `workers = 2`)\n  - Or
        use config format `module:class:N` (e.g., `myapp:HeavyModel:2`)\n  - Requests
        automatically routed to workers with the target app\n  - New exception `DirtyNoWorkersAvailableError`
        for graceful error handling\n  - Example: 8 workers \xD7 10GB model = 80GB
        \u2192 with `workers=2`: 20GB (75% savings)\n\n- **HTTP/2 Support (Beta)**:
        Native HTTP/2 (RFC 7540) support for improved performance\n  with modern clients
        ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
        \ - Multiplexed streams over a single connection\n  - Header compression (HPACK)\n
        \ - Flow control and stream prioritization\n  - Works with gthread, gevent,
        and ASGI workers\n  - New settings: `--http-protocols`, `--http2-max-concurrent-streams`,\n
        \   `--http2-initial-window-size`, `--http2-max-frame-size`, `--http2-max-header-list-size`\n
        \ - Requires SSL/TLS and h2 library: `pip install gunicorn[http2]`\n  - New
        example: `examples/http2_gevent/` with Docker and tests\n\n- **HTTP 103 Early
        Hints**: Support for RFC 8297 Early Hints to enable browsers to\n  preload
        resources before the final response\n  ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
        \ - WSGI: `environ['wsgi.early_hints'](headers)` callback\n  - ASGI: `http.response.informational`
        message type\n  - Works with both HTTP/1.1 and HTTP/2\n\n- **uWSGI Protocol
        for ASGI Worker**: The ASGI worker now supports receiving requests\n  via
        the uWSGI binary protocol from nginx\n  ([PR #&#8203;3467](https://redirect.github.com/benoitc/gunicorn/pull/3467))\n\n####
        Bug Fixes\n\n- Fix HTTP/2 ALPN negotiation for gevent and eventlet workers
        when\n  `do_handshake_on_connect` is False (the default). The TLS handshake
        is now\n  explicitly performed before checking `selected_alpn_protocol()`.\n\n-
        Fix setproctitle initialization with systemd socket activation\n  ([#&#8203;3465](https://redirect.github.com/benoitc/gunicorn/issues/3465))\n\n-
        Fix `Expect: 100-continue` handling: ignore the header for HTTP/1.0 requests\n
        \ since 100-continue is only valid for HTTP/1.1+\n  ([PR #&#8203;3463](https://redirect.github.com/benoitc/gunicorn/pull/3463))\n\n-
        Fix missing `_expected_100_continue` attribute in UWSGIRequest\n\n- Disable
        setproctitle on macOS to prevent segfaults during process title updates\n\n-
        Publish full exception traceback when the application fails to load\n  ([#&#8203;3462](https://redirect.github.com/benoitc/gunicorn/issues/3462))\n\n-
        Fix ASGI: quick shutdown on SIGINT/SIGQUIT, graceful on SIGTERM\n\n#### Deprecations\n\n-
        **Eventlet Worker**: The `eventlet` worker is deprecated and will be removed
        in\n  Gunicorn 26.0. Eventlet itself is no longer actively maintained.\n  Please
        migrate to `gevent`, `gthread`, or another supported worker type.\n\n####
        Changes\n\n- Remove obsolete Makefile targets\n  ([PR #&#8203;3471](https://redirect.github.com/benoitc/gunicorn/pull/3471))\n-
        Replace RST with markdown documentation format\n\n### [`v24.1.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.1)\n\n[Compare
        Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.0...24.1.1)\n\n####
        Bug Fixes\n\n- Fix `forwarded_allow_ips` and `proxy_allow_ips` to remain as
        strings for backward\n  compatibility with external tools like uvicorn. Network
        validation now uses strict\n  mode to detect invalid CIDR notation (e.g.,
        `192.168.1.1/24` where host bits are set)\n  ([#&#8203;3458](https://redirect.github.com/benoitc/gunicorn/issues/3458),\n
        \ [PR #&#8203;3459](https://redirect.github.com/benoitc/gunicorn/pull/3459))\n\n***\n\n**Full
        Changelog**: <https://github.com/benoitc/gunicorn/compare/24.1.0...24.1.1>\n\n###
        [`v24.1.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.0):
        Gunicorn 24.1.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.0.0...24.1.0)\n\n####
        New Features\n\n- **Official Docker Image**: Gunicorn now publishes official
        Docker images to GitHub Container Registry ([PR #&#8203;3454](https://redirect.github.com/benoitc/gunicorn/pull/3454))\n
        \ - Available at `ghcr.io/benoitc/gunicorn`\n  - Based on Python 3.12 slim
        image\n  - Uses recommended worker formula (2 \xD7 CPU + 1)\n  - Configurable
        via environment variables\n\n- **PROXY Protocol v2 Support**: Extended PROXY
        protocol implementation to support the binary v2 format in addition to the
        existing text-based v1 format ([PR #&#8203;3451](https://redirect.github.com/benoitc/gunicorn/pull/3451))\n
        \ - New `--proxy-protocol` modes: `off`, `v1`, `v2`, `auto`\n  - `auto` mode
        (default when enabled) detects v1 or v2 automatically\n  - v2 binary format
        is more efficient and supports additional metadata\n  - Works with HAProxy,
        AWS NLB/ALB, and other PROXY protocol v2 sources\n\n- **CIDR Network Support**:
        `--forwarded-allow-ips` and `--proxy-allow-from` now accept CIDR notation
        (e.g., `192.168.0.0/16`) for specifying trusted networks ([PR #&#8203;3449](https://redirect.github.com/benoitc/gunicorn/pull/3449))\n\n-
        **Socket Backlog Metric**: New `gunicorn.socket.backlog` gauge metric reports
        the current socket backlog size on Linux systems ([PR #&#8203;3450](https://redirect.github.com/benoitc/gunicorn/pull/3450))\n\n-
        **InotifyReloader Enhancement**: The inotify-based reloader now watches newly
        imported modules, not just those loaded at startup ([PR #&#8203;3447](https://redirect.github.com/benoitc/gunicorn/pull/3447))\n\n####
        Bug Fixes\n\n- Fix signal handling regression where SIGCLD alias caused \"Unhandled
        signal: cld\" errors on Linux when workers fail during boot ([#&#8203;3453](https://redirect.github.com/benoitc/gunicorn/discussions/3453))\n-
        Fix socket blocking mode on keepalive connections preventing SSL handshake
        failures with async workers ([PR #&#8203;3452](https://redirect.github.com/benoitc/gunicorn/pull/3452))\n-
        Use smaller buffer size in `finish_body()` for faster timeout detection on
        slow or abandoned connections ([PR #&#8203;3453](https://redirect.github.com/benoitc/gunicorn/pull/3453))\n-
        Handle `SSLWantReadError` in `finish_body()` to prevent worker hangs during
        SSL renegotiation ([PR #&#8203;3448](https://redirect.github.com/benoitc/gunicorn/pull/3448))\n-
        Log SIGTERM as info level instead of warning to reduce noise in orchestrated
        environments ([PR #&#8203;3446](https://redirect.github.com/benoitc/gunicorn/pull/3446))\n-
        Print exception details to stderr when worker fails to boot ([PR #&#8203;3443](https://redirect.github.com/benoitc/gunicorn/pull/3443))\n-
        Fix `unreader.unread()` to prepend data to buffer instead of appending ([PR
        #&#8203;3442](https://redirect.github.com/benoitc/gunicorn/pull/3442))\n-
        Prevent `RecursionError` when pickling Config objects ([PR #&#8203;3441](https://redirect.github.com/benoitc/gunicorn/pull/3441))\n-
        Use proper exception chaining with `raise from` in glogging.py ([PR #&#8203;3440](https://redirect.github.com/benoitc/gunicorn/pull/3440))\n\n####
        Installation\n\n```bash\npip install gunicorn==24.1.0\n```\n\nOr use the official
        Docker image:\n\n```bash\ndocker pull ghcr.io/benoitc/gunicorn:24.1.0\n```\n\n###
        [`v24.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.0.0)\n\n[Compare
        Source](https://redirect.github.com/benoitc/gunicorn/compare/23.0.0...24.0.0)\n\n####
        New Features\n\n- **ASGI Worker (Beta)**: Native asyncio-based ASGI support
        for running async Python frameworks like FastAPI, Starlette, and Quart without
        external dependencies\n  - HTTP/1.1 with keepalive connections\n  - WebSocket
        support\n  - Lifespan protocol for startup/shutdown hooks\n  - Optional uvloop
        for improved performance\n\n- **uWSGI Binary Protocol**: Support for receiving
        requests from nginx via `uwsgi_pass` directive\n\n- **Documentation Migration**:
        Migrated to MkDocs with Material theme\n\n#### Security\n\n- **eventlet**:
        Require eventlet >= 0.40.3 (CVE-2021-21419, CVE-2025-58068)\n- **gevent**:
        Require gevent >= 24.10.1 (CVE-2023-41419, CVE-2024-3219)\n- **tornado**:
        Require tornado >= 6.5.0 (CVE-2025-47287)\n\n#### Install\n\n```\npip install
        gunicorn==24.0.0\n```\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
        **Schedule**: Branch creation - At any time (no schedule defined), Automerge
        - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
        by config. Please merge this manually once you are satisfied.\n\n\u267B **Rebasing**:
        Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515
        **Ignore**: Close this PR and you won't be reminded about this update again.\n\n---\n\n
        - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
        box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
        View the [repository job log](https://developer.mend.io/github/osism/container-images).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45NS4yIiwidXBkYXRlZEluVmVyIjoiNDIuOTUuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
      change_url: https://github.com/osism/container-images/pull/887
      child_jobs: []
      commit_id: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
      event_id: 059f9fa0-0802-11f1-995d-e0f0cb625924
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/e92b42c2c3c8471095f69df568d16449/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/e92b42c2c3c8471095f69df568d16449/work/logs
        result_data_file: /var/lib/zuul/builds/e92b42c2c3c8471095f69df568d16449/work/results.json
        src_root: /var/lib/zuul/builds/e92b42c2c3c8471095f69df568d16449/work/src
        work_root: /var/lib/zuul/builds/e92b42c2c3c8471095f69df568d16449/work
      include_vars: []
      items:
      - branch: main
        change: '887'
        change_message: "chore(deps): update dependency gunicorn to v25\n\nThis PR
          contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [gunicorn](https://redirect.github.com/benoitc/gunicorn) ([changelog](https://gunicorn.org/news/))
          | `==23.0.0` \u2192 `==25.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/gunicorn/25.0.3?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/gunicorn/23.0.0/25.0.3?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>benoitc/gunicorn (gunicorn)</summary>\n\n###
          [`v25.0.3`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.3)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.2...25.0.3)\n\n####
          What's Changed\n\n##### Bug Fixes\n\n- Fix RuntimeError when StopIteration
          raised in ASGI coroutine ([#&#8203;3484](https://redirect.github.com/benoitc/gunicorn/issues/3484))\n-
          Fix passing maxsplit in re.split() as positional argument (deprecated in
          Python 3.13)\n\n##### Documentation\n\n- Updated sponsorship section and
          homepage\n\n**Full Changelog**: <https://github.com/benoitc/gunicorn/compare/25.0.2...25.0.3>\n\n###
          [`v25.0.2`](https://redirect.github.com/benoitc/gunicorn/releases/tag/v25.0.2):
          Release 25.0.2\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.1...25.0.2)\n\n####
          Bug Fixes\n\n- Fix ASGI concurrent request failures through nginx proxy
          by normalizing\n  sockaddr tuples to handle both 2-tuple (IPv4) and 4-tuple
          (IPv6) formats\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
          Fix graceful disconnect handling for ASGI worker to properly handle\n  client
          disconnects without raising exceptions\n  ([PR #&#8203;3485](https://redirect.github.com/benoitc/gunicorn/pull/3485))\n\n-
          Fix lazy import of dirty module for gevent compatibility - prevents\n  import
          errors when concurrent.futures is imported before gevent monkey-patching\n
          \ ([PR #&#8203;3483](https://redirect.github.com/benoitc/gunicorn/pull/3483))\n\n####
          Changes\n\n- Refactor: Extract `_normalize_sockaddr` utility function for
          consistent\n  socket address handling across workers\n\n- Add license headers
          to all Python source files\n\n- Update copyright year to 2026 in LICENSE
          and NOTICE files\n\n### [`v25.0.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.1)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/25.0.0...25.0.1)\n\n####
          Bug Fixes\n\n- Fix ASGI streaming responses (SSE) hanging: add chunked transfer
          encoding for\n  HTTP/1.1 responses without Content-Length header. Without
          chunked encoding,\n  clients wait for connection close to determine end-of-response.\n\n####
          Changes\n\n- Update celery\\_alternative example to use FastAPI with native
          ASGI worker and\n  uvloop for async task execution\n\n#### Testing\n\n-
          Add ASGI compliance test suite with Docker-based integration tests covering
          HTTP,\n  WebSocket, streaming, lifespan, framework integration (Starlette,
          FastAPI),\n  HTTP/2, and concurrency scenarios\n\n### [`v25.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/25.0.0):
          Gunicorn 25.0.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.1...25.0.0)\n\n####
          New Features\n\n- **Dirty Arbiters**: Separate process pool for executing
          long-running, blocking\n  operations (AI model loading, heavy computation)
          without blocking HTTP workers\n  ([PR #&#8203;3460](https://redirect.github.com/benoitc/gunicorn/pull/3460))\n
          \ - Inspired by Erlang's dirty schedulers\n  - Asyncio-based with Unix socket
          IPC\n  - Stateful workers that persist loaded resources\n  - New settings:
          `--dirty-app`, `--dirty-workers`, `--dirty-timeout`,\n    `--dirty-threads`,
          `--dirty-graceful-timeout`\n  - Lifecycle hooks: `on_dirty_starting`, `dirty_post_fork`,\n
          \   `dirty_worker_init`, `dirty_worker_exit`\n\n- **Per-App Worker Allocation
          for Dirty Arbiters**: Control how many dirty workers\n  load each app for
          memory optimization with heavy models\n  ([PR #&#8203;3473](https://redirect.github.com/benoitc/gunicorn/pull/3473))\n
          \ - Set `workers` class attribute on DirtyApp (e.g., `workers = 2`)\n  -
          Or use config format `module:class:N` (e.g., `myapp:HeavyModel:2`)\n  -
          Requests automatically routed to workers with the target app\n  - New exception
          `DirtyNoWorkersAvailableError` for graceful error handling\n  - Example:
          8 workers \xD7 10GB model = 80GB \u2192 with `workers=2`: 20GB (75% savings)\n\n-
          **HTTP/2 Support (Beta)**: Native HTTP/2 (RFC 7540) support for improved
          performance\n  with modern clients ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
          \ - Multiplexed streams over a single connection\n  - Header compression
          (HPACK)\n  - Flow control and stream prioritization\n  - Works with gthread,
          gevent, and ASGI workers\n  - New settings: `--http-protocols`, `--http2-max-concurrent-streams`,\n
          \   `--http2-initial-window-size`, `--http2-max-frame-size`, `--http2-max-header-list-size`\n
          \ - Requires SSL/TLS and h2 library: `pip install gunicorn[http2]`\n  -
          New example: `examples/http2_gevent/` with Docker and tests\n\n- **HTTP
          103 Early Hints**: Support for RFC 8297 Early Hints to enable browsers to\n
          \ preload resources before the final response\n  ([PR #&#8203;3468](https://redirect.github.com/benoitc/gunicorn/pull/3468))\n
          \ - WSGI: `environ['wsgi.early_hints'](headers)` callback\n  - ASGI: `http.response.informational`
          message type\n  - Works with both HTTP/1.1 and HTTP/2\n\n- **uWSGI Protocol
          for ASGI Worker**: The ASGI worker now supports receiving requests\n  via
          the uWSGI binary protocol from nginx\n  ([PR #&#8203;3467](https://redirect.github.com/benoitc/gunicorn/pull/3467))\n\n####
          Bug Fixes\n\n- Fix HTTP/2 ALPN negotiation for gevent and eventlet workers
          when\n  `do_handshake_on_connect` is False (the default). The TLS handshake
          is now\n  explicitly performed before checking `selected_alpn_protocol()`.\n\n-
          Fix setproctitle initialization with systemd socket activation\n  ([#&#8203;3465](https://redirect.github.com/benoitc/gunicorn/issues/3465))\n\n-
          Fix `Expect: 100-continue` handling: ignore the header for HTTP/1.0 requests\n
          \ since 100-continue is only valid for HTTP/1.1+\n  ([PR #&#8203;3463](https://redirect.github.com/benoitc/gunicorn/pull/3463))\n\n-
          Fix missing `_expected_100_continue` attribute in UWSGIRequest\n\n- Disable
          setproctitle on macOS to prevent segfaults during process title updates\n\n-
          Publish full exception traceback when the application fails to load\n  ([#&#8203;3462](https://redirect.github.com/benoitc/gunicorn/issues/3462))\n\n-
          Fix ASGI: quick shutdown on SIGINT/SIGQUIT, graceful on SIGTERM\n\n####
          Deprecations\n\n- **Eventlet Worker**: The `eventlet` worker is deprecated
          and will be removed in\n  Gunicorn 26.0. Eventlet itself is no longer actively
          maintained.\n  Please migrate to `gevent`, `gthread`, or another supported
          worker type.\n\n#### Changes\n\n- Remove obsolete Makefile targets\n  ([PR
          #&#8203;3471](https://redirect.github.com/benoitc/gunicorn/pull/3471))\n-
          Replace RST with markdown documentation format\n\n### [`v24.1.1`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.1)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/24.1.0...24.1.1)\n\n####
          Bug Fixes\n\n- Fix `forwarded_allow_ips` and `proxy_allow_ips` to remain
          as strings for backward\n  compatibility with external tools like uvicorn.
          Network validation now uses strict\n  mode to detect invalid CIDR notation
          (e.g., `192.168.1.1/24` where host bits are set)\n  ([#&#8203;3458](https://redirect.github.com/benoitc/gunicorn/issues/3458),\n
          \ [PR #&#8203;3459](https://redirect.github.com/benoitc/gunicorn/pull/3459))\n\n***\n\n**Full
          Changelog**: <https://github.com/benoitc/gunicorn/compare/24.1.0...24.1.1>\n\n###
          [`v24.1.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.1.0):
          Gunicorn 24.1.0\n\n[Compare Source](https://redirect.github.com/benoitc/gunicorn/compare/24.0.0...24.1.0)\n\n####
          New Features\n\n- **Official Docker Image**: Gunicorn now publishes official
          Docker images to GitHub Container Registry ([PR #&#8203;3454](https://redirect.github.com/benoitc/gunicorn/pull/3454))\n
          \ - Available at `ghcr.io/benoitc/gunicorn`\n  - Based on Python 3.12 slim
          image\n  - Uses recommended worker formula (2 \xD7 CPU + 1)\n  - Configurable
          via environment variables\n\n- **PROXY Protocol v2 Support**: Extended PROXY
          protocol implementation to support the binary v2 format in addition to the
          existing text-based v1 format ([PR #&#8203;3451](https://redirect.github.com/benoitc/gunicorn/pull/3451))\n
          \ - New `--proxy-protocol` modes: `off`, `v1`, `v2`, `auto`\n  - `auto`
          mode (default when enabled) detects v1 or v2 automatically\n  - v2 binary
          format is more efficient and supports additional metadata\n  - Works with
          HAProxy, AWS NLB/ALB, and other PROXY protocol v2 sources\n\n- **CIDR Network
          Support**: `--forwarded-allow-ips` and `--proxy-allow-from` now accept CIDR
          notation (e.g., `192.168.0.0/16`) for specifying trusted networks ([PR #&#8203;3449](https://redirect.github.com/benoitc/gunicorn/pull/3449))\n\n-
          **Socket Backlog Metric**: New `gunicorn.socket.backlog` gauge metric reports
          the current socket backlog size on Linux systems ([PR #&#8203;3450](https://redirect.github.com/benoitc/gunicorn/pull/3450))\n\n-
          **InotifyReloader Enhancement**: The inotify-based reloader now watches
          newly imported modules, not just those loaded at startup ([PR #&#8203;3447](https://redirect.github.com/benoitc/gunicorn/pull/3447))\n\n####
          Bug Fixes\n\n- Fix signal handling regression where SIGCLD alias caused
          \"Unhandled signal: cld\" errors on Linux when workers fail during boot
          ([#&#8203;3453](https://redirect.github.com/benoitc/gunicorn/discussions/3453))\n-
          Fix socket blocking mode on keepalive connections preventing SSL handshake
          failures with async workers ([PR #&#8203;3452](https://redirect.github.com/benoitc/gunicorn/pull/3452))\n-
          Use smaller buffer size in `finish_body()` for faster timeout detection
          on slow or abandoned connections ([PR #&#8203;3453](https://redirect.github.com/benoitc/gunicorn/pull/3453))\n-
          Handle `SSLWantReadError` in `finish_body()` to prevent worker hangs during
          SSL renegotiation ([PR #&#8203;3448](https://redirect.github.com/benoitc/gunicorn/pull/3448))\n-
          Log SIGTERM as info level instead of warning to reduce noise in orchestrated
          environments ([PR #&#8203;3446](https://redirect.github.com/benoitc/gunicorn/pull/3446))\n-
          Print exception details to stderr when worker fails to boot ([PR #&#8203;3443](https://redirect.github.com/benoitc/gunicorn/pull/3443))\n-
          Fix `unreader.unread()` to prepend data to buffer instead of appending ([PR
          #&#8203;3442](https://redirect.github.com/benoitc/gunicorn/pull/3442))\n-
          Prevent `RecursionError` when pickling Config objects ([PR #&#8203;3441](https://redirect.github.com/benoitc/gunicorn/pull/3441))\n-
          Use proper exception chaining with `raise from` in glogging.py ([PR #&#8203;3440](https://redirect.github.com/benoitc/gunicorn/pull/3440))\n\n####
          Installation\n\n```bash\npip install gunicorn==24.1.0\n```\n\nOr use the
          official Docker image:\n\n```bash\ndocker pull ghcr.io/benoitc/gunicorn:24.1.0\n```\n\n###
          [`v24.0.0`](https://redirect.github.com/benoitc/gunicorn/releases/tag/24.0.0)\n\n[Compare
          Source](https://redirect.github.com/benoitc/gunicorn/compare/23.0.0...24.0.0)\n\n####
          New Features\n\n- **ASGI Worker (Beta)**: Native asyncio-based ASGI support
          for running async Python frameworks like FastAPI, Starlette, and Quart without
          external dependencies\n  - HTTP/1.1 with keepalive connections\n  - WebSocket
          support\n  - Lifespan protocol for startup/shutdown hooks\n  - Optional
          uvloop for improved performance\n\n- **uWSGI Binary Protocol**: Support
          for receiving requests from nginx via `uwsgi_pass` directive\n\n- **Documentation
          Migration**: Migrated to MkDocs with Material theme\n\n#### Security\n\n-
          **eventlet**: Require eventlet >= 0.40.3 (CVE-2021-21419, CVE-2025-58068)\n-
          **gevent**: Require gevent >= 24.10.1 (CVE-2023-41419, CVE-2024-3219)\n-
          **tornado**: Require tornado >= 6.5.0 (CVE-2025-47287)\n\n#### Install\n\n```\npip
          install gunicorn==24.0.0\n```\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
          by config. Please merge this manually once you are satisfied.\n\n\u267B
          **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry
          checkbox.\n\n\U0001F515 **Ignore**: Close this PR and you won't be reminded
          about this update again.\n\n---\n\n - [ ] <!-- rebase-check -->If you want
          to rebase/retry this PR, check this box\n\n---\n\nThis PR was generated
          by [Mend Renovate](https://mend.io/renovate/). View the [repository job
          log](https://developer.mend.io/github/osism/container-images).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45NS4yIiwidXBkYXRlZEluVmVyIjoiNDIuOTUuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->\n"
        change_url: https://github.com/osism/container-images/pull/887
        commit_id: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
        patchset: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
          src_dir: src/github.com/osism/container-images
        topic: null
      job: flake8
      jobtags: []
      max_attempts: 3
      message: Y2hvcmUoZGVwcyk6IHVwZGF0ZSBkZXBlbmRlbmN5IGd1bmljb3JuIHRvIHYyNQoKVGhpcyBQUiBjb250YWlucyB0aGUgZm9sbG93aW5nIHVwZGF0ZXM6Cgp8IFBhY2thZ2UgfCBDaGFuZ2UgfCBbQWdlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFtDb25maWRlbmNlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CnwtLS18LS0tfC0tLXwtLS18CnwgW2d1bmljb3JuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybikgKFtjaGFuZ2Vsb2ddKGh0dHBzOi8vZ3VuaWNvcm4ub3JnL25ld3MvKSkgfCBgPT0yMy4wLjBgIOKGkiBgPT0yNS4wLjNgIHwgIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvcHlwaS9ndW5pY29ybi8yNS4wLjM/c2xpbT10cnVlKSB8ICFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvcHlwaS9ndW5pY29ybi8yMy4wLjAvMjUuMC4zP3NsaW09dHJ1ZSkgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5PmJlbm9pdGMvZ3VuaWNvcm4gKGd1bmljb3JuKTwvc3VtbWFyeT4KCiMjIyBbYHYyNS4wLjNgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9yZWxlYXNlcy90YWcvMjUuMC4zKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9jb21wYXJlLzI1LjAuMi4uLjI1LjAuMykKCiMjIyMgV2hhdCdzIENoYW5nZWQKCiMjIyMjIEJ1ZyBGaXhlcwoKLSBGaXggUnVudGltZUVycm9yIHdoZW4gU3RvcEl0ZXJhdGlvbiByYWlzZWQgaW4gQVNHSSBjb3JvdXRpbmUgKFsjJiM4MjAzOzM0ODRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL2lzc3Vlcy8zNDg0KSkKLSBGaXggcGFzc2luZyBtYXhzcGxpdCBpbiByZS5zcGxpdCgpIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMTMpCgojIyMjIyBEb2N1bWVudGF0aW9uCgotIFVwZGF0ZWQgc3BvbnNvcnNoaXAgc2VjdGlvbiBhbmQgaG9tZXBhZ2UKCioqRnVsbCBDaGFuZ2Vsb2cqKjogPGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL2NvbXBhcmUvMjUuMC4yLi4uMjUuMC4zPgoKIyMjIFtgdjI1LjAuMmBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3JlbGVhc2VzL3RhZy92MjUuMC4yKTogUmVsZWFzZSAyNS4wLjIKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vY29tcGFyZS8yNS4wLjEuLi4yNS4wLjIpCgojIyMjIEJ1ZyBGaXhlcwoKLSBGaXggQVNHSSBjb25jdXJyZW50IHJlcXVlc3QgZmFpbHVyZXMgdGhyb3VnaCBuZ2lueCBwcm94eSBieSBub3JtYWxpemluZwogIHNvY2thZGRyIHR1cGxlcyB0byBoYW5kbGUgYm90aCAyLXR1cGxlIChJUHY0KSBhbmQgNC10dXBsZSAoSVB2NikgZm9ybWF0cwogIChbUFIgIyYjODIwMzszNDg1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0ODUpKQoKLSBGaXggZ3JhY2VmdWwgZGlzY29ubmVjdCBoYW5kbGluZyBmb3IgQVNHSSB3b3JrZXIgdG8gcHJvcGVybHkgaGFuZGxlCiAgY2xpZW50IGRpc2Nvbm5lY3RzIHdpdGhvdXQgcmFpc2luZyBleGNlcHRpb25zCiAgKFtQUiAjJiM4MjAzOzM0ODVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ4NSkpCgotIEZpeCBsYXp5IGltcG9ydCBvZiBkaXJ0eSBtb2R1bGUgZm9yIGdldmVudCBjb21wYXRpYmlsaXR5IC0gcHJldmVudHMKICBpbXBvcnQgZXJyb3JzIHdoZW4gY29uY3VycmVudC5mdXR1cmVzIGlzIGltcG9ydGVkIGJlZm9yZSBnZXZlbnQgbW9ua2V5LXBhdGNoaW5nCiAgKFtQUiAjJiM4MjAzOzM0ODNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ4MykpCgojIyMjIENoYW5nZXMKCi0gUmVmYWN0b3I6IEV4dHJhY3QgYF9ub3JtYWxpemVfc29ja2FkZHJgIHV0aWxpdHkgZnVuY3Rpb24gZm9yIGNvbnNpc3RlbnQKICBzb2NrZXQgYWRkcmVzcyBoYW5kbGluZyBhY3Jvc3Mgd29ya2VycwoKLSBBZGQgbGljZW5zZSBoZWFkZXJzIHRvIGFsbCBQeXRob24gc291cmNlIGZpbGVzCgotIFVwZGF0ZSBjb3B5cmlnaHQgeWVhciB0byAyMDI2IGluIExJQ0VOU0UgYW5kIE5PVElDRSBmaWxlcwoKIyMjIFtgdjI1LjAuMWBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3JlbGVhc2VzL3RhZy8yNS4wLjEpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL2NvbXBhcmUvMjUuMC4wLi4uMjUuMC4xKQoKIyMjIyBCdWcgRml4ZXMKCi0gRml4IEFTR0kgc3RyZWFtaW5nIHJlc3BvbnNlcyAoU1NFKSBoYW5naW5nOiBhZGQgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBmb3IKICBIVFRQLzEuMSByZXNwb25zZXMgd2l0aG91dCBDb250ZW50LUxlbmd0aCBoZWFkZXIuIFdpdGhvdXQgY2h1bmtlZCBlbmNvZGluZywKICBjbGllbnRzIHdhaXQgZm9yIGNvbm5lY3Rpb24gY2xvc2UgdG8gZGV0ZXJtaW5lIGVuZC1vZi1yZXNwb25zZS4KCiMjIyMgQ2hhbmdlcwoKLSBVcGRhdGUgY2VsZXJ5XF9hbHRlcm5hdGl2ZSBleGFtcGxlIHRvIHVzZSBGYXN0QVBJIHdpdGggbmF0aXZlIEFTR0kgd29ya2VyIGFuZAogIHV2bG9vcCBmb3IgYXN5bmMgdGFzayBleGVjdXRpb24KCiMjIyMgVGVzdGluZwoKLSBBZGQgQVNHSSBjb21wbGlhbmNlIHRlc3Qgc3VpdGUgd2l0aCBEb2NrZXItYmFzZWQgaW50ZWdyYXRpb24gdGVzdHMgY292ZXJpbmcgSFRUUCwKICBXZWJTb2NrZXQsIHN0cmVhbWluZywgbGlmZXNwYW4sIGZyYW1ld29yayBpbnRlZ3JhdGlvbiAoU3RhcmxldHRlLCBGYXN0QVBJKSwKICBIVFRQLzIsIGFuZCBjb25jdXJyZW5jeSBzY2VuYXJpb3MKCiMjIyBbYHYyNS4wLjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9yZWxlYXNlcy90YWcvMjUuMC4wKTogR3VuaWNvcm4gMjUuMC4wCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL2NvbXBhcmUvMjQuMS4xLi4uMjUuMC4wKQoKIyMjIyBOZXcgRmVhdHVyZXMKCi0gKipEaXJ0eSBBcmJpdGVycyoqOiBTZXBhcmF0ZSBwcm9jZXNzIHBvb2wgZm9yIGV4ZWN1dGluZyBsb25nLXJ1bm5pbmcsIGJsb2NraW5nCiAgb3BlcmF0aW9ucyAoQUkgbW9kZWwgbG9hZGluZywgaGVhdnkgY29tcHV0YXRpb24pIHdpdGhvdXQgYmxvY2tpbmcgSFRUUCB3b3JrZXJzCiAgKFtQUiAjJiM4MjAzOzM0NjBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ2MCkpCiAgLSBJbnNwaXJlZCBieSBFcmxhbmcncyBkaXJ0eSBzY2hlZHVsZXJzCiAgLSBBc3luY2lvLWJhc2VkIHdpdGggVW5peCBzb2NrZXQgSVBDCiAgLSBTdGF0ZWZ1bCB3b3JrZXJzIHRoYXQgcGVyc2lzdCBsb2FkZWQgcmVzb3VyY2VzCiAgLSBOZXcgc2V0dGluZ3M6IGAtLWRpcnR5LWFwcGAsIGAtLWRpcnR5LXdvcmtlcnNgLCBgLS1kaXJ0eS10aW1lb3V0YCwKICAgIGAtLWRpcnR5LXRocmVhZHNgLCBgLS1kaXJ0eS1ncmFjZWZ1bC10aW1lb3V0YAogIC0gTGlmZWN5Y2xlIGhvb2tzOiBgb25fZGlydHlfc3RhcnRpbmdgLCBgZGlydHlfcG9zdF9mb3JrYCwKICAgIGBkaXJ0eV93b3JrZXJfaW5pdGAsIGBkaXJ0eV93b3JrZXJfZXhpdGAKCi0gKipQZXItQXBwIFdvcmtlciBBbGxvY2F0aW9uIGZvciBEaXJ0eSBBcmJpdGVycyoqOiBDb250cm9sIGhvdyBtYW55IGRpcnR5IHdvcmtlcnMKICBsb2FkIGVhY2ggYXBwIGZvciBtZW1vcnkgb3B0aW1pemF0aW9uIHdpdGggaGVhdnkgbW9kZWxzCiAgKFtQUiAjJiM4MjAzOzM0NzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ3MykpCiAgLSBTZXQgYHdvcmtlcnNgIGNsYXNzIGF0dHJpYnV0ZSBvbiBEaXJ0eUFwcCAoZS5nLiwgYHdvcmtlcnMgPSAyYCkKICAtIE9yIHVzZSBjb25maWcgZm9ybWF0IGBtb2R1bGU6Y2xhc3M6TmAgKGUuZy4sIGBteWFwcDpIZWF2eU1vZGVsOjJgKQogIC0gUmVxdWVzdHMgYXV0b21hdGljYWxseSByb3V0ZWQgdG8gd29ya2VycyB3aXRoIHRoZSB0YXJnZXQgYXBwCiAgLSBOZXcgZXhjZXB0aW9uIGBEaXJ0eU5vV29ya2Vyc0F2YWlsYWJsZUVycm9yYCBmb3IgZ3JhY2VmdWwgZXJyb3IgaGFuZGxpbmcKICAtIEV4YW1wbGU6IDggd29ya2VycyDDlyAxMEdCIG1vZGVsID0gODBHQiDihpIgd2l0aCBgd29ya2Vycz0yYDogMjBHQiAoNzUlIHNhdmluZ3MpCgotICoqSFRUUC8yIFN1cHBvcnQgKEJldGEpKio6IE5hdGl2ZSBIVFRQLzIgKFJGQyA3NTQwKSBzdXBwb3J0IGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZQogIHdpdGggbW9kZXJuIGNsaWVudHMgKFtQUiAjJiM4MjAzOzM0NjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ2OCkpCiAgLSBNdWx0aXBsZXhlZCBzdHJlYW1zIG92ZXIgYSBzaW5nbGUgY29ubmVjdGlvbgogIC0gSGVhZGVyIGNvbXByZXNzaW9uIChIUEFDSykKICAtIEZsb3cgY29udHJvbCBhbmQgc3RyZWFtIHByaW9yaXRpemF0aW9uCiAgLSBXb3JrcyB3aXRoIGd0aHJlYWQsIGdldmVudCwgYW5kIEFTR0kgd29ya2VycwogIC0gTmV3IHNldHRpbmdzOiBgLS1odHRwLXByb3RvY29sc2AsIGAtLWh0dHAyLW1heC1jb25jdXJyZW50LXN0cmVhbXNgLAogICAgYC0taHR0cDItaW5pdGlhbC13aW5kb3ctc2l6ZWAsIGAtLWh0dHAyLW1heC1mcmFtZS1zaXplYCwgYC0taHR0cDItbWF4LWhlYWRlci1saXN0LXNpemVgCiAgLSBSZXF1aXJlcyBTU0wvVExTIGFuZCBoMiBsaWJyYXJ5OiBgcGlwIGluc3RhbGwgZ3VuaWNvcm5baHR0cDJdYAogIC0gTmV3IGV4YW1wbGU6IGBleGFtcGxlcy9odHRwMl9nZXZlbnQvYCB3aXRoIERvY2tlciBhbmQgdGVzdHMKCi0gKipIVFRQIDEwMyBFYXJseSBIaW50cyoqOiBTdXBwb3J0IGZvciBSRkMgODI5NyBFYXJseSBIaW50cyB0byBlbmFibGUgYnJvd3NlcnMgdG8KICBwcmVsb2FkIHJlc291cmNlcyBiZWZvcmUgdGhlIGZpbmFsIHJlc3BvbnNlCiAgKFtQUiAjJiM4MjAzOzM0NjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ2OCkpCiAgLSBXU0dJOiBgZW52aXJvblsnd3NnaS5lYXJseV9oaW50cyddKGhlYWRlcnMpYCBjYWxsYmFjawogIC0gQVNHSTogYGh0dHAucmVzcG9uc2UuaW5mb3JtYXRpb25hbGAgbWVzc2FnZSB0eXBlCiAgLSBXb3JrcyB3aXRoIGJvdGggSFRUUC8xLjEgYW5kIEhUVFAvMgoKLSAqKnVXU0dJIFByb3RvY29sIGZvciBBU0dJIFdvcmtlcioqOiBUaGUgQVNHSSB3b3JrZXIgbm93IHN1cHBvcnRzIHJlY2VpdmluZyByZXF1ZXN0cwogIHZpYSB0aGUgdVdTR0kgYmluYXJ5IHByb3RvY29sIGZyb20gbmdpbngKICAoW1BSICMmIzgyMDM7MzQ2N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vcHVsbC8zNDY3KSkKCiMjIyMgQnVnIEZpeGVzCgotIEZpeCBIVFRQLzIgQUxQTiBuZWdvdGlhdGlvbiBmb3IgZ2V2ZW50IGFuZCBldmVudGxldCB3b3JrZXJzIHdoZW4KICBgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3RgIGlzIEZhbHNlICh0aGUgZGVmYXVsdCkuIFRoZSBUTFMgaGFuZHNoYWtlIGlzIG5vdwogIGV4cGxpY2l0bHkgcGVyZm9ybWVkIGJlZm9yZSBjaGVja2luZyBgc2VsZWN0ZWRfYWxwbl9wcm90b2NvbCgpYC4KCi0gRml4IHNldHByb2N0aXRsZSBpbml0aWFsaXphdGlvbiB3aXRoIHN5c3RlbWQgc29ja2V0IGFjdGl2YXRpb24KICAoWyMmIzgyMDM7MzQ2NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vaXNzdWVzLzM0NjUpKQoKLSBGaXggYEV4cGVjdDogMTAwLWNvbnRpbnVlYCBoYW5kbGluZzogaWdub3JlIHRoZSBoZWFkZXIgZm9yIEhUVFAvMS4wIHJlcXVlc3RzCiAgc2luY2UgMTAwLWNvbnRpbnVlIGlzIG9ubHkgdmFsaWQgZm9yIEhUVFAvMS4xKwogIChbUFIgIyYjODIwMzszNDYzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0NjMpKQoKLSBGaXggbWlzc2luZyBgX2V4cGVjdGVkXzEwMF9jb250aW51ZWAgYXR0cmlidXRlIGluIFVXU0dJUmVxdWVzdAoKLSBEaXNhYmxlIHNldHByb2N0aXRsZSBvbiBtYWNPUyB0byBwcmV2ZW50IHNlZ2ZhdWx0cyBkdXJpbmcgcHJvY2VzcyB0aXRsZSB1cGRhdGVzCgotIFB1Ymxpc2ggZnVsbCBleGNlcHRpb24gdHJhY2ViYWNrIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGZhaWxzIHRvIGxvYWQKICAoWyMmIzgyMDM7MzQ2Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vaXNzdWVzLzM0NjIpKQoKLSBGaXggQVNHSTogcXVpY2sgc2h1dGRvd24gb24gU0lHSU5UL1NJR1FVSVQsIGdyYWNlZnVsIG9uIFNJR1RFUk0KCiMjIyMgRGVwcmVjYXRpb25zCgotICoqRXZlbnRsZXQgV29ya2VyKio6IFRoZSBgZXZlbnRsZXRgIHdvcmtlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KICBHdW5pY29ybiAyNi4wLiBFdmVudGxldCBpdHNlbGYgaXMgbm8gbG9uZ2VyIGFjdGl2ZWx5IG1haW50YWluZWQuCiAgUGxlYXNlIG1pZ3JhdGUgdG8gYGdldmVudGAsIGBndGhyZWFkYCwgb3IgYW5vdGhlciBzdXBwb3J0ZWQgd29ya2VyIHR5cGUuCgojIyMjIENoYW5nZXMKCi0gUmVtb3ZlIG9ic29sZXRlIE1ha2VmaWxlIHRhcmdldHMKICAoW1BSICMmIzgyMDM7MzQ3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vcHVsbC8zNDcxKSkKLSBSZXBsYWNlIFJTVCB3aXRoIG1hcmtkb3duIGRvY3VtZW50YXRpb24gZm9ybWF0CgojIyMgW2B2MjQuMS4xYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vcmVsZWFzZXMvdGFnLzI0LjEuMSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vY29tcGFyZS8yNC4xLjAuLi4yNC4xLjEpCgojIyMjIEJ1ZyBGaXhlcwoKLSBGaXggYGZvcndhcmRlZF9hbGxvd19pcHNgIGFuZCBgcHJveHlfYWxsb3dfaXBzYCB0byByZW1haW4gYXMgc3RyaW5ncyBmb3IgYmFja3dhcmQKICBjb21wYXRpYmlsaXR5IHdpdGggZXh0ZXJuYWwgdG9vbHMgbGlrZSB1dmljb3JuLiBOZXR3b3JrIHZhbGlkYXRpb24gbm93IHVzZXMgc3RyaWN0CiAgbW9kZSB0byBkZXRlY3QgaW52YWxpZCBDSURSIG5vdGF0aW9uIChlLmcuLCBgMTkyLjE2OC4xLjEvMjRgIHdoZXJlIGhvc3QgYml0cyBhcmUgc2V0KQogIChbIyYjODIwMzszNDU4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9pc3N1ZXMvMzQ1OCksCiAgW1BSICMmIzgyMDM7MzQ1OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vcHVsbC8zNDU5KSkKCioqKgoKKipGdWxsIENoYW5nZWxvZyoqOiA8aHR0cHM6Ly9naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vY29tcGFyZS8yNC4xLjAuLi4yNC4xLjE+CgojIyMgW2B2MjQuMS4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vcmVsZWFzZXMvdGFnLzI0LjEuMCk6IEd1bmljb3JuIDI0LjEuMAoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9jb21wYXJlLzI0LjAuMC4uLjI0LjEuMCkKCiMjIyMgTmV3IEZlYXR1cmVzCgotICoqT2ZmaWNpYWwgRG9ja2VyIEltYWdlKio6IEd1bmljb3JuIG5vdyBwdWJsaXNoZXMgb2ZmaWNpYWwgRG9ja2VyIGltYWdlcyB0byBHaXRIdWIgQ29udGFpbmVyIFJlZ2lzdHJ5IChbUFIgIyYjODIwMzszNDU0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0NTQpKQogIC0gQXZhaWxhYmxlIGF0IGBnaGNyLmlvL2Jlbm9pdGMvZ3VuaWNvcm5gCiAgLSBCYXNlZCBvbiBQeXRob24gMy4xMiBzbGltIGltYWdlCiAgLSBVc2VzIHJlY29tbWVuZGVkIHdvcmtlciBmb3JtdWxhICgyIMOXIENQVSArIDEpCiAgLSBDb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcwoKLSAqKlBST1hZIFByb3RvY29sIHYyIFN1cHBvcnQqKjogRXh0ZW5kZWQgUFJPWFkgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gc3VwcG9ydCB0aGUgYmluYXJ5IHYyIGZvcm1hdCBpbiBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgdGV4dC1iYXNlZCB2MSBmb3JtYXQgKFtQUiAjJiM4MjAzOzM0NTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ1MSkpCiAgLSBOZXcgYC0tcHJveHktcHJvdG9jb2xgIG1vZGVzOiBgb2ZmYCwgYHYxYCwgYHYyYCwgYGF1dG9gCiAgLSBgYXV0b2AgbW9kZSAoZGVmYXVsdCB3aGVuIGVuYWJsZWQpIGRldGVjdHMgdjEgb3IgdjIgYXV0b21hdGljYWxseQogIC0gdjIgYmluYXJ5IGZvcm1hdCBpcyBtb3JlIGVmZmljaWVudCBhbmQgc3VwcG9ydHMgYWRkaXRpb25hbCBtZXRhZGF0YQogIC0gV29ya3Mgd2l0aCBIQVByb3h5LCBBV1MgTkxCL0FMQiwgYW5kIG90aGVyIFBST1hZIHByb3RvY29sIHYyIHNvdXJjZXMKCi0gKipDSURSIE5ldHdvcmsgU3VwcG9ydCoqOiBgLS1mb3J3YXJkZWQtYWxsb3ctaXBzYCBhbmQgYC0tcHJveHktYWxsb3ctZnJvbWAgbm93IGFjY2VwdCBDSURSIG5vdGF0aW9uIChlLmcuLCBgMTkyLjE2OC4wLjAvMTZgKSBmb3Igc3BlY2lmeWluZyB0cnVzdGVkIG5ldHdvcmtzIChbUFIgIyYjODIwMzszNDQ5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0NDkpKQoKLSAqKlNvY2tldCBCYWNrbG9nIE1ldHJpYyoqOiBOZXcgYGd1bmljb3JuLnNvY2tldC5iYWNrbG9nYCBnYXVnZSBtZXRyaWMgcmVwb3J0cyB0aGUgY3VycmVudCBzb2NrZXQgYmFja2xvZyBzaXplIG9uIExpbnV4IHN5c3RlbXMgKFtQUiAjJiM4MjAzOzM0NTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ1MCkpCgotICoqSW5vdGlmeVJlbG9hZGVyIEVuaGFuY2VtZW50Kio6IFRoZSBpbm90aWZ5LWJhc2VkIHJlbG9hZGVyIG5vdyB3YXRjaGVzIG5ld2x5IGltcG9ydGVkIG1vZHVsZXMsIG5vdCBqdXN0IHRob3NlIGxvYWRlZCBhdCBzdGFydHVwIChbUFIgIyYjODIwMzszNDQ3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0NDcpKQoKIyMjIyBCdWcgRml4ZXMKCi0gRml4IHNpZ25hbCBoYW5kbGluZyByZWdyZXNzaW9uIHdoZXJlIFNJR0NMRCBhbGlhcyBjYXVzZWQgIlVuaGFuZGxlZCBzaWduYWw6IGNsZCIgZXJyb3JzIG9uIExpbnV4IHdoZW4gd29ya2VycyBmYWlsIGR1cmluZyBib290IChbIyYjODIwMzszNDUzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9kaXNjdXNzaW9ucy8zNDUzKSkKLSBGaXggc29ja2V0IGJsb2NraW5nIG1vZGUgb24ga2VlcGFsaXZlIGNvbm5lY3Rpb25zIHByZXZlbnRpbmcgU1NMIGhhbmRzaGFrZSBmYWlsdXJlcyB3aXRoIGFzeW5jIHdvcmtlcnMgKFtQUiAjJiM4MjAzOzM0NTJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ1MikpCi0gVXNlIHNtYWxsZXIgYnVmZmVyIHNpemUgaW4gYGZpbmlzaF9ib2R5KClgIGZvciBmYXN0ZXIgdGltZW91dCBkZXRlY3Rpb24gb24gc2xvdyBvciBhYmFuZG9uZWQgY29ubmVjdGlvbnMgKFtQUiAjJiM4MjAzOzM0NTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ1MykpCi0gSGFuZGxlIGBTU0xXYW50UmVhZEVycm9yYCBpbiBgZmluaXNoX2JvZHkoKWAgdG8gcHJldmVudCB3b3JrZXIgaGFuZ3MgZHVyaW5nIFNTTCByZW5lZ290aWF0aW9uIChbUFIgIyYjODIwMzszNDQ4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0NDgpKQotIExvZyBTSUdURVJNIGFzIGluZm8gbGV2ZWwgaW5zdGVhZCBvZiB3YXJuaW5nIHRvIHJlZHVjZSBub2lzZSBpbiBvcmNoZXN0cmF0ZWQgZW52aXJvbm1lbnRzIChbUFIgIyYjODIwMzszNDQ2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0NDYpKQotIFByaW50IGV4Y2VwdGlvbiBkZXRhaWxzIHRvIHN0ZGVyciB3aGVuIHdvcmtlciBmYWlscyB0byBib290IChbUFIgIyYjODIwMzszNDQzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYmVub2l0Yy9ndW5pY29ybi9wdWxsLzM0NDMpKQotIEZpeCBgdW5yZWFkZXIudW5yZWFkKClgIHRvIHByZXBlbmQgZGF0YSB0byBidWZmZXIgaW5zdGVhZCBvZiBhcHBlbmRpbmcgKFtQUiAjJiM4MjAzOzM0NDJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ0MikpCi0gUHJldmVudCBgUmVjdXJzaW9uRXJyb3JgIHdoZW4gcGlja2xpbmcgQ29uZmlnIG9iamVjdHMgKFtQUiAjJiM4MjAzOzM0NDFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ0MSkpCi0gVXNlIHByb3BlciBleGNlcHRpb24gY2hhaW5pbmcgd2l0aCBgcmFpc2UgZnJvbWAgaW4gZ2xvZ2dpbmcucHkgKFtQUiAjJiM4MjAzOzM0NDBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZW5vaXRjL2d1bmljb3JuL3B1bGwvMzQ0MCkpCgojIyMjIEluc3RhbGxhdGlvbgoKYGBgYmFzaApwaXAgaW5zdGFsbCBndW5pY29ybj09MjQuMS4wCmBgYAoKT3IgdXNlIHRoZSBvZmZpY2lhbCBEb2NrZXIgaW1hZ2U6CgpgYGBiYXNoCmRvY2tlciBwdWxsIGdoY3IuaW8vYmVub2l0Yy9ndW5pY29ybjoyNC4xLjAKYGBgCgojIyMgW2B2MjQuMC4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vcmVsZWFzZXMvdGFnLzI0LjAuMCkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Jlbm9pdGMvZ3VuaWNvcm4vY29tcGFyZS8yMy4wLjAuLi4yNC4wLjApCgojIyMjIE5ldyBGZWF0dXJlcwoKLSAqKkFTR0kgV29ya2VyIChCZXRhKSoqOiBOYXRpdmUgYXN5bmNpby1iYXNlZCBBU0dJIHN1cHBvcnQgZm9yIHJ1bm5pbmcgYXN5bmMgUHl0aG9uIGZyYW1ld29ya3MgbGlrZSBGYXN0QVBJLCBTdGFybGV0dGUsIGFuZCBRdWFydCB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcwogIC0gSFRUUC8xLjEgd2l0aCBrZWVwYWxpdmUgY29ubmVjdGlvbnMKICAtIFdlYlNvY2tldCBzdXBwb3J0CiAgLSBMaWZlc3BhbiBwcm90b2NvbCBmb3Igc3RhcnR1cC9zaHV0ZG93biBob29rcwogIC0gT3B0aW9uYWwgdXZsb29wIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZQoKLSAqKnVXU0dJIEJpbmFyeSBQcm90b2NvbCoqOiBTdXBwb3J0IGZvciByZWNlaXZpbmcgcmVxdWVzdHMgZnJvbSBuZ2lueCB2aWEgYHV3c2dpX3Bhc3NgIGRpcmVjdGl2ZQoKLSAqKkRvY3VtZW50YXRpb24gTWlncmF0aW9uKio6IE1pZ3JhdGVkIHRvIE1rRG9jcyB3aXRoIE1hdGVyaWFsIHRoZW1lCgojIyMjIFNlY3VyaXR5CgotICoqZXZlbnRsZXQqKjogUmVxdWlyZSBldmVudGxldCA+PSAwLjQwLjMgKENWRS0yMDIxLTIxNDE5LCBDVkUtMjAyNS01ODA2OCkKLSAqKmdldmVudCoqOiBSZXF1aXJlIGdldmVudCA+PSAyNC4xMC4xIChDVkUtMjAyMy00MTQxOSwgQ1ZFLTIwMjQtMzIxOSkKLSAqKnRvcm5hZG8qKjogUmVxdWlyZSB0b3JuYWRvID49IDYuNS4wIChDVkUtMjAyNS00NzI4NykKCiMjIyMgSW5zdGFsbAoKYGBgCnBpcCBpbnN0YWxsIGd1bmljb3JuPT0yNC4wLjAKYGBgCgo8L2RldGFpbHM+CgotLS0KCiMjIyBDb25maWd1cmF0aW9uCgrwn5OFICoqU2NoZWR1bGUqKjogQnJhbmNoIGNyZWF0aW9uIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpLCBBdXRvbWVyZ2UgLSBBdCBhbnkgdGltZSAobm8gc2NoZWR1bGUgZGVmaW5lZCkuCgrwn5qmICoqQXV0b21lcmdlKio6IERpc2FibGVkIGJ5IGNvbmZpZy4gUGxlYXNlIG1lcmdlIHRoaXMgbWFudWFsbHkgb25jZSB5b3UgYXJlIHNhdGlzZmllZC4KCuKZuyAqKlJlYmFzaW5nKio6IFdoZW5ldmVyIFBSIGJlY29tZXMgY29uZmxpY3RlZCwgb3IgeW91IHRpY2sgdGhlIHJlYmFzZS9yZXRyeSBjaGVja2JveC4KCvCflJUgKipJZ25vcmUqKjogQ2xvc2UgdGhpcyBQUiBhbmQgeW91IHdvbid0IGJlIHJlbWluZGVkIGFib3V0IHRoaXMgdXBkYXRlIGFnYWluLgoKLS0tCgogLSBbIF0gPCEtLSByZWJhc2UtY2hlY2sgLS0+SWYgeW91IHdhbnQgdG8gcmViYXNlL3JldHJ5IHRoaXMgUFIsIGNoZWNrIHRoaXMgYm94CgotLS0KClRoaXMgUFIgd2FzIGdlbmVyYXRlZCBieSBbTWVuZCBSZW5vdmF0ZV0oaHR0cHM6Ly9tZW5kLmlvL3Jlbm92YXRlLykuIFZpZXcgdGhlIFtyZXBvc2l0b3J5IGpvYiBsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vZ2l0aHViL29zaXNtL2NvbnRhaW5lci1pbWFnZXMpLgo8IS0tcmVub3ZhdGUtZGVidWc6ZXlKamNtVmhkR1ZrU1c1V1pYSWlPaUkwTWk0NU5TNHlJaXdpZFhCa1lYUmxaRWx1Vm1WeUlqb2lOREl1T1RVdU1pSXNJblJoY21kbGRFSnlZVzVqYUNJNkltMWhhVzRpTENKc1lXSmxiSE1pT2xzaWNtVnViM1poZEdVaVhYMD0tLT4K
      patchset: 4b79deade5086bb0aa1123bd3e92e9d5232bd53f
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: a01eed06dffe368c1d01819193bfadccb137414d
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/flake8/run.yaml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_0/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_2/openinfra-zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/container-images
        name: osism/container-images
        short_name: container-images
        src_dir: src/github.com/osism/container-images
      projects:
        github.com/osism/container-images:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          checkout: main
          checkout_description: zuul branch
          commit: 4e4e865c9485e72edf154aa10f453b8e68821c4e
          name: osism/container-images
          required: false
          short_name: container-images
          src_dir: src/github.com/osism/container-images
      ref: refs/pull/887/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
