all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fee6:a0c2
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: b4a4fcdb-7986-4159-a77e-04a1ab6e5995
        host_id: 4ba4344415ca7057d9956ea5de826bbc0b830981e82c0e0f191fa07b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fee6:a0c2
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.157
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.74
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fee6:a0c2
        region: null
        slot: null
      tox_environment:
        NOSE_HTML_OUT_FILE: nose_results.html
        NOSE_WITH_HTML_OUTPUT: 1
        NOSE_WITH_XUNIT: 1
      tox_envlist: test
  vars:
    tox_environment:
      NOSE_HTML_OUT_FILE: nose_results.html
      NOSE_WITH_HTML_OUTPUT: 1
      NOSE_WITH_XUNIT: 1
    tox_envlist: test
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job unittests explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/general-jobs.yaml@master#9>'
      - '<Job tox explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/python-jobs.yaml@master#1>'
      - '<Job openstack-project-manager-tox explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/openstack-project-manager/.zuul.yaml@main#7>'
      - '<Job openstack-project-manager-tox explicit: None implied: None source: osism/openstack-project-manager/.zuul.yaml@main#14>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 459da98627b44986a76371f63b82580e
      build_refs:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.2\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|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.2?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.2?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.2`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.md#Version-842)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.1...8.4.2)\n\nUnreleased\n\n-
          Fix Fish shell completion broken in `8.4.0` by {pr}`3126`. Newlines and\n
          \ tabs in option help text are now escaped, keeping the original completion\n
          \ format while still supporting multi-line help. {issue}`3502`\n  {issue}`3043`
          {pr}`3504` {pr}`3508`\n- Deprecated commands and options with empty or missing
          help text no longer\n  render a stray leading space before the `(DEPRECATED)`
          label. {pr}`3509`\n- A {class}`Group` with `invoke_without_command=True`
          marks its subcommand as\n  optional in the usage help, showing `[COMMAND]`
          instead of `COMMAND`.\n  {issue}`3059` {pr}`3507`\n- `echo_via_pager` flushes
          after each write, so passing a generator streams\n  output to the pager
          incrementally instead of staying hidden until the pipe\n  buffer fills.
          {issue}`3242` {issue}`2542` {pr}`3534`\n- `echo_via_pager` and `get_pager_file`
          no longer close a borrowed stdout\n  stream when no external pager runs,
          completing the partial\n  `I/O operation on closed file` fix from {pr}`3482`.
          {issue}`3449`\n  {pr}`3533`\n\n### [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
          2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
          and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
          scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
          of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
          Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file
          error with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nReleased
          2026-05-17\n\n- :class:`ParamType` typing improvements. :pr:`3371`\n\n  -
          :class:`ParamType` is now a generic abstract base class,\n    parameterized
          by its converted value type.\n  - :meth:`~ParamType.convert` return types
          are narrowed on all\n    concrete types (`str` for :class:`STRING`, `int`
          for\n    :class:`INT`, etc.).\n  - :meth:`~ParamType.to_info_dict` returns
          specific\n    :class:`~typing.TypedDict` subclasses instead of\n    `dict[str,
          Any]`.\n  - :class:`CompositeParamType` and the number-range base are now\n
          \   generic with abstract methods.\n- Refactor `convert_type` to extract
          type inference into a private\n  `_guess_type` helper, and add :func:`typing.overload`
          signatures.\n  :pr:`3372`\n- :class:`Parameter` typing improvements. :pr:`2805`\n\n
          \ - :class:`Parameter` is now an abstract base class, making explicit\n
          \   that it cannot be instantiated directly.\n  - :attr:`Parameter.name`
          is now `str` instead of `str | None`.\n    When `expose_value=False`, the
          name is set to `\"\"` instead\n    of `None`.\n  - The `ctx` parameter of
          :meth:`Parameter.get_error_hint` is now\n    typed as `Context | None`,
          matching the runtime behavior.\n- Split string values from `default_map`
          for parameters with `nargs > 1`\n  or :class:`Tuple` type, matching environment
          variable behavior.\n  :issue:`2745` :pr:`3364`\n- Auto-detect `type=UNPROCESSED`
          for `flag_value` of non-basic types\n  (not `str`, `int`, `float`, or `bool`),
          so programmer-provided\n  Python objects like classes and enum members are
          passed through unchanged\n  instead of being stringified. Previously `type=click.UNPROCESSED`
          had\n  to be set explicitly. :issue:`2012` :pr:`3363`\n- The error hint
          now uses :meth:`Command.get_help_option_names` to pick\n  non-shadowed help
          option names, so `Try '... -h'` no longer points to a\n  subcommand option
          that shadows `-h`. The longest surviving name is\n  shown (`--help` over
          `-h`) for readability. :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :func:`~click.formatting.wrap_text`
          now measures line width in visible\n  characters, ignoring ANSI escape sequences.
          :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage` emitting only a blank
          line when\n  called without `args`. The usage prefix and program name are
          now\n  written even when no arguments follow, and the trailing separator\n
          \ space is stripped so the line ends at the program name.\n  :issue:`3360`
          :pr:`3434`\n- Show custom error messages from types when :func:`prompt`
          with\n  `hide_input=True` fails validation, instead of always showing a\n
          \ generic message. Built-in type messages mask the input value.\n  :issue:`2809`
          :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner` with two modes:
          `sys`\n  (default) and `fd`. `fd` redirects file descriptors `1` and `2`\n
          \ via :func:`os.dup2` so output that bypasses `sys.stdout` (stale stream\n
          \ references, C extensions, subprocesses, `faulthandler`) is captured\n
          \ with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n  :issue:`2497`
          :issue:`2761` :issue:`2827` :issue:`2865` :pr:`3391`\n- Revert the `8.3.3`
          change that exposed the original file descriptor\n  via `fileno()` on the
          redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - 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/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: 09c5ffc2174a101a338033e727fffc7b304e6578
        patchset: 09c5ffc2174a101a338033e727fffc7b304e6578
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      buildset: 8399346d5ee34a708de2e686fd23def4
      buildset_refs:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.2\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|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.2?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.2?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.2`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.md#Version-842)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.1...8.4.2)\n\nUnreleased\n\n-
          Fix Fish shell completion broken in `8.4.0` by {pr}`3126`. Newlines and\n
          \ tabs in option help text are now escaped, keeping the original completion\n
          \ format while still supporting multi-line help. {issue}`3502`\n  {issue}`3043`
          {pr}`3504` {pr}`3508`\n- Deprecated commands and options with empty or missing
          help text no longer\n  render a stray leading space before the `(DEPRECATED)`
          label. {pr}`3509`\n- A {class}`Group` with `invoke_without_command=True`
          marks its subcommand as\n  optional in the usage help, showing `[COMMAND]`
          instead of `COMMAND`.\n  {issue}`3059` {pr}`3507`\n- `echo_via_pager` flushes
          after each write, so passing a generator streams\n  output to the pager
          incrementally instead of staying hidden until the pipe\n  buffer fills.
          {issue}`3242` {issue}`2542` {pr}`3534`\n- `echo_via_pager` and `get_pager_file`
          no longer close a borrowed stdout\n  stream when no external pager runs,
          completing the partial\n  `I/O operation on closed file` fix from {pr}`3482`.
          {issue}`3449`\n  {pr}`3533`\n\n### [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
          2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
          and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
          scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
          of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
          Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file
          error with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nReleased
          2026-05-17\n\n- :class:`ParamType` typing improvements. :pr:`3371`\n\n  -
          :class:`ParamType` is now a generic abstract base class,\n    parameterized
          by its converted value type.\n  - :meth:`~ParamType.convert` return types
          are narrowed on all\n    concrete types (`str` for :class:`STRING`, `int`
          for\n    :class:`INT`, etc.).\n  - :meth:`~ParamType.to_info_dict` returns
          specific\n    :class:`~typing.TypedDict` subclasses instead of\n    `dict[str,
          Any]`.\n  - :class:`CompositeParamType` and the number-range base are now\n
          \   generic with abstract methods.\n- Refactor `convert_type` to extract
          type inference into a private\n  `_guess_type` helper, and add :func:`typing.overload`
          signatures.\n  :pr:`3372`\n- :class:`Parameter` typing improvements. :pr:`2805`\n\n
          \ - :class:`Parameter` is now an abstract base class, making explicit\n
          \   that it cannot be instantiated directly.\n  - :attr:`Parameter.name`
          is now `str` instead of `str | None`.\n    When `expose_value=False`, the
          name is set to `\"\"` instead\n    of `None`.\n  - The `ctx` parameter of
          :meth:`Parameter.get_error_hint` is now\n    typed as `Context | None`,
          matching the runtime behavior.\n- Split string values from `default_map`
          for parameters with `nargs > 1`\n  or :class:`Tuple` type, matching environment
          variable behavior.\n  :issue:`2745` :pr:`3364`\n- Auto-detect `type=UNPROCESSED`
          for `flag_value` of non-basic types\n  (not `str`, `int`, `float`, or `bool`),
          so programmer-provided\n  Python objects like classes and enum members are
          passed through unchanged\n  instead of being stringified. Previously `type=click.UNPROCESSED`
          had\n  to be set explicitly. :issue:`2012` :pr:`3363`\n- The error hint
          now uses :meth:`Command.get_help_option_names` to pick\n  non-shadowed help
          option names, so `Try '... -h'` no longer points to a\n  subcommand option
          that shadows `-h`. The longest surviving name is\n  shown (`--help` over
          `-h`) for readability. :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :func:`~click.formatting.wrap_text`
          now measures line width in visible\n  characters, ignoring ANSI escape sequences.
          :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage` emitting only a blank
          line when\n  called without `args`. The usage prefix and program name are
          now\n  written even when no arguments follow, and the trailing separator\n
          \ space is stripped so the line ends at the program name.\n  :issue:`3360`
          :pr:`3434`\n- Show custom error messages from types when :func:`prompt`
          with\n  `hide_input=True` fails validation, instead of always showing a\n
          \ generic message. Built-in type messages mask the input value.\n  :issue:`2809`
          :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner` with two modes:
          `sys`\n  (default) and `fd`. `fd` redirects file descriptors `1` and `2`\n
          \ via :func:`os.dup2` so output that bypasses `sys.stdout` (stale stream\n
          \ references, C extensions, subprocesses, `faulthandler`) is captured\n
          \ with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n  :issue:`2497`
          :issue:`2761` :issue:`2827` :issue:`2865` :pr:`3391`\n- Revert the `8.3.3`
          change that exposed the original file descriptor\n  via `fileno()` on the
          redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - 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/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: 09c5ffc2174a101a338033e727fffc7b304e6578
        patchset: 09c5ffc2174a101a338033e727fffc7b304e6578
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      change: '276'
      change_message: "Update dependency click to v8.4.2\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|
        [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
        | `==8.3.2` \u2192 `==8.4.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.2?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.2?slim=true)
        |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
        [`v8.4.2`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.md#Version-842)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.4.1...8.4.2)\n\nUnreleased\n\n-
        Fix Fish shell completion broken in `8.4.0` by {pr}`3126`. Newlines and\n
        \ tabs in option help text are now escaped, keeping the original completion\n
        \ format while still supporting multi-line help. {issue}`3502`\n  {issue}`3043`
        {pr}`3504` {pr}`3508`\n- Deprecated commands and options with empty or missing
        help text no longer\n  render a stray leading space before the `(DEPRECATED)`
        label. {pr}`3509`\n- A {class}`Group` with `invoke_without_command=True` marks
        its subcommand as\n  optional in the usage help, showing `[COMMAND]` instead
        of `COMMAND`.\n  {issue}`3059` {pr}`3507`\n- `echo_via_pager` flushes after
        each write, so passing a generator streams\n  output to the pager incrementally
        instead of staying hidden until the pipe\n  buffer fills. {issue}`3242` {issue}`2542`
        {pr}`3534`\n- `echo_via_pager` and `get_pager_file` no longer close a borrowed
        stdout\n  stream when no external pager runs, completing the partial\n  `I/O
        operation on closed file` fix from {pr}`3482`. {issue}`3449`\n  {pr}`3533`\n\n###
        [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
        2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
        and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
        scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
        of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
        Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file error
        with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nReleased
        2026-05-17\n\n- :class:`ParamType` typing improvements. :pr:`3371`\n\n  -
        :class:`ParamType` is now a generic abstract base class,\n    parameterized
        by its converted value type.\n  - :meth:`~ParamType.convert` return types
        are narrowed on all\n    concrete types (`str` for :class:`STRING`, `int`
        for\n    :class:`INT`, etc.).\n  - :meth:`~ParamType.to_info_dict` returns
        specific\n    :class:`~typing.TypedDict` subclasses instead of\n    `dict[str,
        Any]`.\n  - :class:`CompositeParamType` and the number-range base are now\n
        \   generic with abstract methods.\n- Refactor `convert_type` to extract type
        inference into a private\n  `_guess_type` helper, and add :func:`typing.overload`
        signatures.\n  :pr:`3372`\n- :class:`Parameter` typing improvements. :pr:`2805`\n\n
        \ - :class:`Parameter` is now an abstract base class, making explicit\n    that
        it cannot be instantiated directly.\n  - :attr:`Parameter.name` is now `str`
        instead of `str | None`.\n    When `expose_value=False`, the name is set to
        `\"\"` instead\n    of `None`.\n  - The `ctx` parameter of :meth:`Parameter.get_error_hint`
        is now\n    typed as `Context | None`, matching the runtime behavior.\n- Split
        string values from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple`
        type, matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n-
        Auto-detect `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not
        `str`, `int`, `float`, or `bool`), so programmer-provided\n  Python objects
        like classes and enum members are passed through unchanged\n  instead of being
        stringified. Previously `type=click.UNPROCESSED` had\n  to be set explicitly.
        :issue:`2012` :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
        to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
        to a\n  subcommand option that shadows `-h`. The longest surviving name is\n
        \ shown (`--help` over `-h`) for readability. :issue:`2790` :pr:`3208`\n-
        Fix readline functionality on non-Windows platforms. Prompt text is now\n
        \ passed directly to readline instead of being printed separately, allowing\n
        \ proper backspace, line editing, and line wrapping behavior. :issue:`2968`\n
        \ :pr:`2969`\n- Use :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n
        \ replacing the `start` built-in which cannot be invoked without\n  `shell=True`.
        :issue:`3164` :pr:`3186`\n- Fix Fish shell completion errors when option help
        text contains newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand`
        exception with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
        Use :class:`ValueError` message when conversion in :class:`FuncParamType`
        would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
        file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :func:`~click.formatting.wrap_text`
        now measures line width in visible\n  characters, ignoring ANSI escape sequences.
        :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage` emitting only a blank
        line when\n  called without `args`. The usage prefix and program name are
        now\n  written even when no arguments follow, and the trailing separator\n
        \ space is stripped so the line ends at the program name.\n  :issue:`3360`
        :pr:`3434`\n- Show custom error messages from types when :func:`prompt` with\n
        \ `hide_input=True` fails validation, instead of always showing a\n  generic
        message. Built-in type messages mask the input value.\n  :issue:`2809` :pr:`3256`\n-
        Add `capture` parameter to :class:`CliRunner` with two modes: `sys`\n  (default)
        and `fd`. `fd` redirects file descriptors `1` and `2`\n  via :func:`os.dup2`
        so output that bypasses `sys.stdout` (stale stream\n  references, C extensions,
        subprocesses, `faulthandler`) is captured\n  with proper isolation. :issue:`854`
        :issue:`2412` :issue:`2468`\n  :issue:`2497` :issue:`2761` :issue:`2827` :issue:`2865`
        :pr:`3391`\n- Revert the `8.3.3` change that exposed the original file descriptor\n
        \ via `fileno()` on the redirected `CliRunner` streams in the default\n  capture
        mode. `os.dup2(w, sys.stdout.fileno())` calls inside a CLI no\n  longer mutate
        the host runner's stdout, which broke Pytest's `fd`-level\n  capture teardown.
        C-level consumers that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384`
        :pr:`3391`\n- Mark additional built-in strings with `gettext()` to extend
        translation\n  coverage. :pr:`2902`\n- Fix feature switch groups (several
        `flag_value` options sharing one\n  parameter name) silently dropping an explicit
        `default` when a sibling\n  option without an explicit default was declared
        first. Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
        always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
        an explicit\n  `default=` keyword wins over a sibling whose default was auto-derived.\n
        \ The 8.3.x first-wins fallback for remaining ties was reverted to the\n  pre-8.3.x
        last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix missing space between
        option help text and the `(DEPRECATED)`\n  label, and localize the option
        label so it matches the command label.\n  The label and the `DeprecationWarning`
        reason suffix are now produced\n  by shared helpers. :pr:`3423`\n- Document
        short option stacking (`-abc` is parsed as `-a -b -c`) and\n  clarify that
        multi-character short option names are not supported.\n  :issue:`2779` :pr:`3431`\n\n###
        [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
        Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
        At any time (no schedule defined)\n- Automerge\n  - 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/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
      change_url: https://github.com/osism/openstack-project-manager/pull/276
      child_jobs: []
      commit_id: 09c5ffc2174a101a338033e727fffc7b304e6578
      event_id: 5d490fb0-7252-11f1-87b6-5d01061f66bf
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/459da98627b44986a76371f63b82580e/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/459da98627b44986a76371f63b82580e/work/logs
        result_data_file: /var/lib/zuul/builds/459da98627b44986a76371f63b82580e/work/results.json
        src_root: /var/lib/zuul/builds/459da98627b44986a76371f63b82580e/work/src
        work_root: /var/lib/zuul/builds/459da98627b44986a76371f63b82580e/work
      include_vars: []
      items:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.2\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|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.2?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.2?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.2`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.md#Version-842)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.1...8.4.2)\n\nUnreleased\n\n-
          Fix Fish shell completion broken in `8.4.0` by {pr}`3126`. Newlines and\n
          \ tabs in option help text are now escaped, keeping the original completion\n
          \ format while still supporting multi-line help. {issue}`3502`\n  {issue}`3043`
          {pr}`3504` {pr}`3508`\n- Deprecated commands and options with empty or missing
          help text no longer\n  render a stray leading space before the `(DEPRECATED)`
          label. {pr}`3509`\n- A {class}`Group` with `invoke_without_command=True`
          marks its subcommand as\n  optional in the usage help, showing `[COMMAND]`
          instead of `COMMAND`.\n  {issue}`3059` {pr}`3507`\n- `echo_via_pager` flushes
          after each write, so passing a generator streams\n  output to the pager
          incrementally instead of staying hidden until the pipe\n  buffer fills.
          {issue}`3242` {issue}`2542` {pr}`3534`\n- `echo_via_pager` and `get_pager_file`
          no longer close a borrowed stdout\n  stream when no external pager runs,
          completing the partial\n  `I/O operation on closed file` fix from {pr}`3482`.
          {issue}`3449`\n  {pr}`3533`\n\n### [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
          2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
          and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
          scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
          of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
          Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file
          error with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nReleased
          2026-05-17\n\n- :class:`ParamType` typing improvements. :pr:`3371`\n\n  -
          :class:`ParamType` is now a generic abstract base class,\n    parameterized
          by its converted value type.\n  - :meth:`~ParamType.convert` return types
          are narrowed on all\n    concrete types (`str` for :class:`STRING`, `int`
          for\n    :class:`INT`, etc.).\n  - :meth:`~ParamType.to_info_dict` returns
          specific\n    :class:`~typing.TypedDict` subclasses instead of\n    `dict[str,
          Any]`.\n  - :class:`CompositeParamType` and the number-range base are now\n
          \   generic with abstract methods.\n- Refactor `convert_type` to extract
          type inference into a private\n  `_guess_type` helper, and add :func:`typing.overload`
          signatures.\n  :pr:`3372`\n- :class:`Parameter` typing improvements. :pr:`2805`\n\n
          \ - :class:`Parameter` is now an abstract base class, making explicit\n
          \   that it cannot be instantiated directly.\n  - :attr:`Parameter.name`
          is now `str` instead of `str | None`.\n    When `expose_value=False`, the
          name is set to `\"\"` instead\n    of `None`.\n  - The `ctx` parameter of
          :meth:`Parameter.get_error_hint` is now\n    typed as `Context | None`,
          matching the runtime behavior.\n- Split string values from `default_map`
          for parameters with `nargs > 1`\n  or :class:`Tuple` type, matching environment
          variable behavior.\n  :issue:`2745` :pr:`3364`\n- Auto-detect `type=UNPROCESSED`
          for `flag_value` of non-basic types\n  (not `str`, `int`, `float`, or `bool`),
          so programmer-provided\n  Python objects like classes and enum members are
          passed through unchanged\n  instead of being stringified. Previously `type=click.UNPROCESSED`
          had\n  to be set explicitly. :issue:`2012` :pr:`3363`\n- The error hint
          now uses :meth:`Command.get_help_option_names` to pick\n  non-shadowed help
          option names, so `Try '... -h'` no longer points to a\n  subcommand option
          that shadows `-h`. The longest surviving name is\n  shown (`--help` over
          `-h`) for readability. :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :func:`~click.formatting.wrap_text`
          now measures line width in visible\n  characters, ignoring ANSI escape sequences.
          :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage` emitting only a blank
          line when\n  called without `args`. The usage prefix and program name are
          now\n  written even when no arguments follow, and the trailing separator\n
          \ space is stripped so the line ends at the program name.\n  :issue:`3360`
          :pr:`3434`\n- Show custom error messages from types when :func:`prompt`
          with\n  `hide_input=True` fails validation, instead of always showing a\n
          \ generic message. Built-in type messages mask the input value.\n  :issue:`2809`
          :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner` with two modes:
          `sys`\n  (default) and `fd`. `fd` redirects file descriptors `1` and `2`\n
          \ via :func:`os.dup2` so output that bypasses `sys.stdout` (stale stream\n
          \ references, C extensions, subprocesses, `faulthandler`) is captured\n
          \ with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n  :issue:`2497`
          :issue:`2761` :issue:`2827` :issue:`2865` :pr:`3391`\n- Revert the `8.3.3`
          change that exposed the original file descriptor\n  via `fileno()` on the
          redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - 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/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: 09c5ffc2174a101a338033e727fffc7b304e6578
        patchset: 09c5ffc2174a101a338033e727fffc7b304e6578
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      job: openstack-project-manager-tox
      jobtags: []
      max_attempts: 3
      message: VXBkYXRlIGRlcGVuZGVuY3kgY2xpY2sgdG8gdjguNC4yCgpUaGlzIFBSIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdXBkYXRlczoKCnwgUGFja2FnZSB8IENoYW5nZSB8IFtBZ2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgW0NvbmZpZGVuY2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwKfC0tLXwtLS18LS0tfC0tLXwKfCBbY2xpY2tdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrKSAoW2NoYW5nZWxvZ10oaHR0cHM6Ly9jbGljay5wYWxsZXRzcHJvamVjdHMuY29tL3BhZ2UvY2hhbmdlcy8pKSB8IGA9PTguMy4yYCDihpIgYD09OC40LjJgIHwgIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvcHlwaS9jbGljay84LjQuMj9zbGltPXRydWUpIHwgIVtjb25maWRlbmNlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29uZmlkZW5jZS9weXBpL2NsaWNrLzguMy4yLzguNC4yP3NsaW09dHJ1ZSkgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5PnBhbGxldHMvY2xpY2sgKGNsaWNrKTwvc3VtbWFyeT4KCiMjIyBbYHY4LjQuMmBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2Jsb2IvSEVBRC9DSEFOR0VTLm1kI1ZlcnNpb24tODQyKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9jb21wYXJlLzguNC4xLi4uOC40LjIpCgpVbnJlbGVhc2VkCgotIEZpeCBGaXNoIHNoZWxsIGNvbXBsZXRpb24gYnJva2VuIGluIGA4LjQuMGAgYnkge3ByfWAzMTI2YC4gTmV3bGluZXMgYW5kCiAgdGFicyBpbiBvcHRpb24gaGVscCB0ZXh0IGFyZSBub3cgZXNjYXBlZCwga2VlcGluZyB0aGUgb3JpZ2luYWwgY29tcGxldGlvbgogIGZvcm1hdCB3aGlsZSBzdGlsbCBzdXBwb3J0aW5nIG11bHRpLWxpbmUgaGVscC4ge2lzc3VlfWAzNTAyYAogIHtpc3N1ZX1gMzA0M2Age3ByfWAzNTA0YCB7cHJ9YDM1MDhgCi0gRGVwcmVjYXRlZCBjb21tYW5kcyBhbmQgb3B0aW9ucyB3aXRoIGVtcHR5IG9yIG1pc3NpbmcgaGVscCB0ZXh0IG5vIGxvbmdlcgogIHJlbmRlciBhIHN0cmF5IGxlYWRpbmcgc3BhY2UgYmVmb3JlIHRoZSBgKERFUFJFQ0FURUQpYCBsYWJlbC4ge3ByfWAzNTA5YAotIEEge2NsYXNzfWBHcm91cGAgd2l0aCBgaW52b2tlX3dpdGhvdXRfY29tbWFuZD1UcnVlYCBtYXJrcyBpdHMgc3ViY29tbWFuZCBhcwogIG9wdGlvbmFsIGluIHRoZSB1c2FnZSBoZWxwLCBzaG93aW5nIGBbQ09NTUFORF1gIGluc3RlYWQgb2YgYENPTU1BTkRgLgogIHtpc3N1ZX1gMzA1OWAge3ByfWAzNTA3YAotIGBlY2hvX3ZpYV9wYWdlcmAgZmx1c2hlcyBhZnRlciBlYWNoIHdyaXRlLCBzbyBwYXNzaW5nIGEgZ2VuZXJhdG9yIHN0cmVhbXMKICBvdXRwdXQgdG8gdGhlIHBhZ2VyIGluY3JlbWVudGFsbHkgaW5zdGVhZCBvZiBzdGF5aW5nIGhpZGRlbiB1bnRpbCB0aGUgcGlwZQogIGJ1ZmZlciBmaWxscy4ge2lzc3VlfWAzMjQyYCB7aXNzdWV9YDI1NDJgIHtwcn1gMzUzNGAKLSBgZWNob192aWFfcGFnZXJgIGFuZCBgZ2V0X3BhZ2VyX2ZpbGVgIG5vIGxvbmdlciBjbG9zZSBhIGJvcnJvd2VkIHN0ZG91dAogIHN0cmVhbSB3aGVuIG5vIGV4dGVybmFsIHBhZ2VyIHJ1bnMsIGNvbXBsZXRpbmcgdGhlIHBhcnRpYWwKICBgSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZWAgZml4IGZyb20ge3ByfWAzNDgyYC4ge2lzc3VlfWAzNDQ5YAogIHtwcn1gMzUzM2AKCiMjIyBbYHY4LjQuMWBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2Jsb2IvSEVBRC9DSEFOR0VTLnJzdCNWZXJzaW9uLTg0MSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BhbGxldHMvY2xpY2svY29tcGFyZS84LjQuMC4uLjguNC4xKQoKUmVsZWFzZWQgMjAyNi0wNS0yMQoKLSBgZ2V0X3BhcmFtZXRlcl9zb3VyY2UoKWAgaXMgYXZhaWxhYmxlIGR1cmluZyBlYWdlciBjYWxsYmFja3MgYW5kIHR5cGUKICBjb252ZXJzaW9uIGFnYWluLiA6aXNzdWU6YDM0NThgIDppc3N1ZTpgMzQ4NGAKLSBac2ggY29tcGxldGlvbiBzY3JpcHRzIHBhcnNlIGNvcnJlY3RseSBvbiBXaW5kb3dzLiA6aXNzdWU6YDMyNzdgIDpwcjpgMzQ2NmAKLSBTaGVsbCBjb21wbGV0aW9uIG9mIGBDaG9pY2VgIGBFbnVtYCB2YWx1ZXMgcHJvZHVjZXMgYSB2YWxpZCBjb21wbGV0aW9uCiAgcmVzdWx0LiA6aXNzdWU6YDMwMTVgCi0gRml4IGVtcHR5IGJ5dGUtc3RyaW5nIGhhbmRsaW5nIGluIGVjaG8uIDppc3N1ZTpgMzQ4N2AKLSBGaXggY2xvc2VkIGZpbGUgZXJyb3Igd2l0aCBgZWNob192aWFfcGFnZXJgLiA6aXNzdWU6YDM0NDlgCgojIyMgW2B2OC40LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9ibG9iL0hFQUQvQ0hBTkdFUy5yc3QjVmVyc2lvbi04NDApCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2NvbXBhcmUvOC4zLjMuLi44LjQuMCkKClJlbGVhc2VkIDIwMjYtMDUtMTcKCi0gOmNsYXNzOmBQYXJhbVR5cGVgIHR5cGluZyBpbXByb3ZlbWVudHMuIDpwcjpgMzM3MWAKCiAgLSA6Y2xhc3M6YFBhcmFtVHlwZWAgaXMgbm93IGEgZ2VuZXJpYyBhYnN0cmFjdCBiYXNlIGNsYXNzLAogICAgcGFyYW1ldGVyaXplZCBieSBpdHMgY29udmVydGVkIHZhbHVlIHR5cGUuCiAgLSA6bWV0aDpgflBhcmFtVHlwZS5jb252ZXJ0YCByZXR1cm4gdHlwZXMgYXJlIG5hcnJvd2VkIG9uIGFsbAogICAgY29uY3JldGUgdHlwZXMgKGBzdHJgIGZvciA6Y2xhc3M6YFNUUklOR2AsIGBpbnRgIGZvcgogICAgOmNsYXNzOmBJTlRgLCBldGMuKS4KICAtIDptZXRoOmB+UGFyYW1UeXBlLnRvX2luZm9fZGljdGAgcmV0dXJucyBzcGVjaWZpYwogICAgOmNsYXNzOmB+dHlwaW5nLlR5cGVkRGljdGAgc3ViY2xhc3NlcyBpbnN0ZWFkIG9mCiAgICBgZGljdFtzdHIsIEFueV1gLgogIC0gOmNsYXNzOmBDb21wb3NpdGVQYXJhbVR5cGVgIGFuZCB0aGUgbnVtYmVyLXJhbmdlIGJhc2UgYXJlIG5vdwogICAgZ2VuZXJpYyB3aXRoIGFic3RyYWN0IG1ldGhvZHMuCi0gUmVmYWN0b3IgYGNvbnZlcnRfdHlwZWAgdG8gZXh0cmFjdCB0eXBlIGluZmVyZW5jZSBpbnRvIGEgcHJpdmF0ZQogIGBfZ3Vlc3NfdHlwZWAgaGVscGVyLCBhbmQgYWRkIDpmdW5jOmB0eXBpbmcub3ZlcmxvYWRgIHNpZ25hdHVyZXMuCiAgOnByOmAzMzcyYAotIDpjbGFzczpgUGFyYW1ldGVyYCB0eXBpbmcgaW1wcm92ZW1lbnRzLiA6cHI6YDI4MDVgCgogIC0gOmNsYXNzOmBQYXJhbWV0ZXJgIGlzIG5vdyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLCBtYWtpbmcgZXhwbGljaXQKICAgIHRoYXQgaXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS4KICAtIDphdHRyOmBQYXJhbWV0ZXIubmFtZWAgaXMgbm93IGBzdHJgIGluc3RlYWQgb2YgYHN0ciB8IE5vbmVgLgogICAgV2hlbiBgZXhwb3NlX3ZhbHVlPUZhbHNlYCwgdGhlIG5hbWUgaXMgc2V0IHRvIGAiImAgaW5zdGVhZAogICAgb2YgYE5vbmVgLgogIC0gVGhlIGBjdHhgIHBhcmFtZXRlciBvZiA6bWV0aDpgUGFyYW1ldGVyLmdldF9lcnJvcl9oaW50YCBpcyBub3cKICAgIHR5cGVkIGFzIGBDb250ZXh0IHwgTm9uZWAsIG1hdGNoaW5nIHRoZSBydW50aW1lIGJlaGF2aW9yLgotIFNwbGl0IHN0cmluZyB2YWx1ZXMgZnJvbSBgZGVmYXVsdF9tYXBgIGZvciBwYXJhbWV0ZXJzIHdpdGggYG5hcmdzID4gMWAKICBvciA6Y2xhc3M6YFR1cGxlYCB0eXBlLCBtYXRjaGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWhhdmlvci4KICA6aXNzdWU6YDI3NDVgIDpwcjpgMzM2NGAKLSBBdXRvLWRldGVjdCBgdHlwZT1VTlBST0NFU1NFRGAgZm9yIGBmbGFnX3ZhbHVlYCBvZiBub24tYmFzaWMgdHlwZXMKICAobm90IGBzdHJgLCBgaW50YCwgYGZsb2F0YCwgb3IgYGJvb2xgKSwgc28gcHJvZ3JhbW1lci1wcm92aWRlZAogIFB5dGhvbiBvYmplY3RzIGxpa2UgY2xhc3NlcyBhbmQgZW51bSBtZW1iZXJzIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQKICBpbnN0ZWFkIG9mIGJlaW5nIHN0cmluZ2lmaWVkLiBQcmV2aW91c2x5IGB0eXBlPWNsaWNrLlVOUFJPQ0VTU0VEYCBoYWQKICB0byBiZSBzZXQgZXhwbGljaXRseS4gOmlzc3VlOmAyMDEyYCA6cHI6YDMzNjNgCi0gVGhlIGVycm9yIGhpbnQgbm93IHVzZXMgOm1ldGg6YENvbW1hbmQuZ2V0X2hlbHBfb3B0aW9uX25hbWVzYCB0byBwaWNrCiAgbm9uLXNoYWRvd2VkIGhlbHAgb3B0aW9uIG5hbWVzLCBzbyBgVHJ5ICcuLi4gLWgnYCBubyBsb25nZXIgcG9pbnRzIHRvIGEKICBzdWJjb21tYW5kIG9wdGlvbiB0aGF0IHNoYWRvd3MgYC1oYC4gVGhlIGxvbmdlc3Qgc3Vydml2aW5nIG5hbWUgaXMKICBzaG93biAoYC0taGVscGAgb3ZlciBgLWhgKSBmb3IgcmVhZGFiaWxpdHkuIDppc3N1ZTpgMjc5MGAgOnByOmAzMjA4YAotIEZpeCByZWFkbGluZSBmdW5jdGlvbmFsaXR5IG9uIG5vbi1XaW5kb3dzIHBsYXRmb3Jtcy4gUHJvbXB0IHRleHQgaXMgbm93CiAgcGFzc2VkIGRpcmVjdGx5IHRvIHJlYWRsaW5lIGluc3RlYWQgb2YgYmVpbmcgcHJpbnRlZCBzZXBhcmF0ZWx5LCBhbGxvd2luZwogIHByb3BlciBiYWNrc3BhY2UsIGxpbmUgZWRpdGluZywgYW5kIGxpbmUgd3JhcHBpbmcgYmVoYXZpb3IuIDppc3N1ZTpgMjk2OGAKICA6cHI6YDI5NjlgCi0gVXNlIDpmdW5jOmBvcy5zdGFydGZpbGVgIG9uIFdpbmRvd3MgdG8gb3BlbiBVUkxzIGluIDpmdW5jOmBvcGVuX3VybGAsCiAgcmVwbGFjaW5nIHRoZSBgc3RhcnRgIGJ1aWx0LWluIHdoaWNoIGNhbm5vdCBiZSBpbnZva2VkIHdpdGhvdXQKICBgc2hlbGw9VHJ1ZWAuIDppc3N1ZTpgMzE2NGAgOnByOmAzMTg2YAotIEZpeCBGaXNoIHNoZWxsIGNvbXBsZXRpb24gZXJyb3JzIHdoZW4gb3B0aW9uIGhlbHAgdGV4dCBjb250YWlucyBuZXdsaW5lcy4KICA6aXNzdWU6YDMwNDNgIDpwcjpgMzEyNmAKLSBBZGQgOmNsYXNzOmBOb1N1Y2hDb21tYW5kYCBleGNlcHRpb24gd2l0aCBzdWdnZXN0aW9ucyBmb3IgbWlzc3BlbGxlZAogIGNvbW1hbmRzLiA6aXNzdWU6YDMxMDdgIDpwcjpgMzIyOGAKLSBVc2UgOmNsYXNzOmBWYWx1ZUVycm9yYCBtZXNzYWdlIHdoZW4gY29udmVyc2lvbiBpbiA6Y2xhc3M6YEZ1bmNQYXJhbVR5cGVgIHdvdWxkCiAgZmFpbC4gOmlzc3VlOmAzMTA1YCA6cHI6YDMyMTFgCi0gQWRkIGBjbGljay5nZXRfcGFnZXJfZmlsZWAgZm9yIGZpbGUtbGlrZSBhY2Nlc3MgdG8gYW4gb3V0cHV0CiAgcGFnZXIuIDpwcjpgMTU3MmAgOnByOmAzNDA1YAotIDpmdW5jOmB+Y2xpY2suZm9ybWF0dGluZy53cmFwX3RleHRgIG5vdyBtZWFzdXJlcyBsaW5lIHdpZHRoIGluIHZpc2libGUKICBjaGFyYWN0ZXJzLCBpZ25vcmluZyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuIDpwcjpgMzQyMGAKLSBGaXggOm1ldGg6YEhlbHBGb3JtYXR0ZXIud3JpdGVfdXNhZ2VgIGVtaXR0aW5nIG9ubHkgYSBibGFuayBsaW5lIHdoZW4KICBjYWxsZWQgd2l0aG91dCBgYXJnc2AuIFRoZSB1c2FnZSBwcmVmaXggYW5kIHByb2dyYW0gbmFtZSBhcmUgbm93CiAgd3JpdHRlbiBldmVuIHdoZW4gbm8gYXJndW1lbnRzIGZvbGxvdywgYW5kIHRoZSB0cmFpbGluZyBzZXBhcmF0b3IKICBzcGFjZSBpcyBzdHJpcHBlZCBzbyB0aGUgbGluZSBlbmRzIGF0IHRoZSBwcm9ncmFtIG5hbWUuCiAgOmlzc3VlOmAzMzYwYCA6cHI6YDM0MzRgCi0gU2hvdyBjdXN0b20gZXJyb3IgbWVzc2FnZXMgZnJvbSB0eXBlcyB3aGVuIDpmdW5jOmBwcm9tcHRgIHdpdGgKICBgaGlkZV9pbnB1dD1UcnVlYCBmYWlscyB2YWxpZGF0aW9uLCBpbnN0ZWFkIG9mIGFsd2F5cyBzaG93aW5nIGEKICBnZW5lcmljIG1lc3NhZ2UuIEJ1aWx0LWluIHR5cGUgbWVzc2FnZXMgbWFzayB0aGUgaW5wdXQgdmFsdWUuCiAgOmlzc3VlOmAyODA5YCA6cHI6YDMyNTZgCi0gQWRkIGBjYXB0dXJlYCBwYXJhbWV0ZXIgdG8gOmNsYXNzOmBDbGlSdW5uZXJgIHdpdGggdHdvIG1vZGVzOiBgc3lzYAogIChkZWZhdWx0KSBhbmQgYGZkYC4gYGZkYCByZWRpcmVjdHMgZmlsZSBkZXNjcmlwdG9ycyBgMWAgYW5kIGAyYAogIHZpYSA6ZnVuYzpgb3MuZHVwMmAgc28gb3V0cHV0IHRoYXQgYnlwYXNzZXMgYHN5cy5zdGRvdXRgIChzdGFsZSBzdHJlYW0KICByZWZlcmVuY2VzLCBDIGV4dGVuc2lvbnMsIHN1YnByb2Nlc3NlcywgYGZhdWx0aGFuZGxlcmApIGlzIGNhcHR1cmVkCiAgd2l0aCBwcm9wZXIgaXNvbGF0aW9uLiA6aXNzdWU6YDg1NGAgOmlzc3VlOmAyNDEyYCA6aXNzdWU6YDI0NjhgCiAgOmlzc3VlOmAyNDk3YCA6aXNzdWU6YDI3NjFgIDppc3N1ZTpgMjgyN2AgOmlzc3VlOmAyODY1YCA6cHI6YDMzOTFgCi0gUmV2ZXJ0IHRoZSBgOC4zLjNgIGNoYW5nZSB0aGF0IGV4cG9zZWQgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvcgogIHZpYSBgZmlsZW5vKClgIG9uIHRoZSByZWRpcmVjdGVkIGBDbGlSdW5uZXJgIHN0cmVhbXMgaW4gdGhlIGRlZmF1bHQKICBjYXB0dXJlIG1vZGUuIGBvcy5kdXAyKHcsIHN5cy5zdGRvdXQuZmlsZW5vKCkpYCBjYWxscyBpbnNpZGUgYSBDTEkgbm8KICBsb25nZXIgbXV0YXRlIHRoZSBob3N0IHJ1bm5lcidzIHN0ZG91dCwgd2hpY2ggYnJva2UgUHl0ZXN0J3MgYGZkYC1sZXZlbAogIGNhcHR1cmUgdGVhcmRvd24uIEMtbGV2ZWwgY29uc3VtZXJzIHRoYXQgbmVlZCBhIHJlYWwgYGZkYCBzaG91bGQgdXNlCiAgYGNhcHR1cmU9ImZkImAuIDppc3N1ZTpgMzM4NGAgOnByOmAzMzkxYAotIE1hcmsgYWRkaXRpb25hbCBidWlsdC1pbiBzdHJpbmdzIHdpdGggYGdldHRleHQoKWAgdG8gZXh0ZW5kIHRyYW5zbGF0aW9uCiAgY292ZXJhZ2UuIDpwcjpgMjkwMmAKLSBGaXggZmVhdHVyZSBzd2l0Y2ggZ3JvdXBzIChzZXZlcmFsIGBmbGFnX3ZhbHVlYCBvcHRpb25zIHNoYXJpbmcgb25lCiAgcGFyYW1ldGVyIG5hbWUpIHNpbGVudGx5IGRyb3BwaW5nIGFuIGV4cGxpY2l0IGBkZWZhdWx0YCB3aGVuIGEgc2libGluZwogIG9wdGlvbiB3aXRob3V0IGFuIGV4cGxpY2l0IGRlZmF1bHQgd2FzIGRlY2xhcmVkIGZpcnN0LiBBcmJpdHJhdGlvbiBpcyBub3cKICBzb3VyY2UtYXdhcmU6IGEgbW9yZSBleHBsaWNpdCA6Y2xhc3M6YFBhcmFtZXRlclNvdXJjZWAgYWx3YXlzIHdpbnMsIGFuZAogIHdpdGhpbiBgUGFyYW1ldGVyU291cmNlLkRFRkFVTFRgLCBhbiBvcHRpb24gdGhhdCByZWNlaXZlZCBhbiBleHBsaWNpdAogIGBkZWZhdWx0PWAga2V5d29yZCB3aW5zIG92ZXIgYSBzaWJsaW5nIHdob3NlIGRlZmF1bHQgd2FzIGF1dG8tZGVyaXZlZC4KICBUaGUgOC4zLnggZmlyc3Qtd2lucyBmYWxsYmFjayBmb3IgcmVtYWluaW5nIHRpZXMgd2FzIHJldmVydGVkIHRvIHRoZQogIHByZS04LjMueCBsYXN0LXdpbnMgZmFsbGJhY2suIDppc3N1ZTpgMzQwM2AgOnByOmAzNDA0YAotIEZpeCBtaXNzaW5nIHNwYWNlIGJldHdlZW4gb3B0aW9uIGhlbHAgdGV4dCBhbmQgdGhlIGAoREVQUkVDQVRFRClgCiAgbGFiZWwsIGFuZCBsb2NhbGl6ZSB0aGUgb3B0aW9uIGxhYmVsIHNvIGl0IG1hdGNoZXMgdGhlIGNvbW1hbmQgbGFiZWwuCiAgVGhlIGxhYmVsIGFuZCB0aGUgYERlcHJlY2F0aW9uV2FybmluZ2AgcmVhc29uIHN1ZmZpeCBhcmUgbm93IHByb2R1Y2VkCiAgYnkgc2hhcmVkIGhlbHBlcnMuIDpwcjpgMzQyM2AKLSBEb2N1bWVudCBzaG9ydCBvcHRpb24gc3RhY2tpbmcgKGAtYWJjYCBpcyBwYXJzZWQgYXMgYC1hIC1iIC1jYCkgYW5kCiAgY2xhcmlmeSB0aGF0IG11bHRpLWNoYXJhY3RlciBzaG9ydCBvcHRpb24gbmFtZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgOmlzc3VlOmAyNzc5YCA6cHI6YDM0MzFgCgojIyMgW2B2OC4zLjNgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9jb21wYXJlLzguMy4yLi4uOC4zLjMpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2NvbXBhcmUvOC4zLjIuLi44LjMuMykKCjwvZGV0YWlscz4KCi0tLQoKIyMjIENvbmZpZ3VyYXRpb24KCvCfk4UgKipTY2hlZHVsZSoqOiAoVVRDKQoKLSBCcmFuY2ggY3JlYXRpb24KICAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKQotIEF1dG9tZXJnZQogIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpCgrwn5qmICoqQXV0b21lcmdlKio6IERpc2FibGVkIGJ5IGNvbmZpZy4gUGxlYXNlIG1lcmdlIHRoaXMgbWFudWFsbHkgb25jZSB5b3UgYXJlIHNhdGlzZmllZC4KCuKZuyAqKlJlYmFzaW5nKio6IFdoZW5ldmVyIFBSIGJlY29tZXMgY29uZmxpY3RlZCwgb3IgeW91IHRpY2sgdGhlIHJlYmFzZS9yZXRyeSBjaGVja2JveC4KCvCflJUgKipJZ25vcmUqKjogQ2xvc2UgdGhpcyBQUiBhbmQgeW91IHdvbid0IGJlIHJlbWluZGVkIGFib3V0IHRoaXMgdXBkYXRlIGFnYWluLgoKLS0tCgogLSBbIF0gPCEtLSByZWJhc2UtY2hlY2sgLS0+SWYgeW91IHdhbnQgdG8gcmViYXNlL3JldHJ5IHRoaXMgUFIsIGNoZWNrIHRoaXMgYm94CgotLS0KClRoaXMgUFIgd2FzIGdlbmVyYXRlZCBieSBbTWVuZCBSZW5vdmF0ZV0oaHR0cHM6Ly9tZW5kLmlvL3Jlbm92YXRlLykuIFZpZXcgdGhlIFtyZXBvc2l0b3J5IGpvYiBsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vZ2l0aHViL29zaXNtL29wZW5zdGFjay1wcm9qZWN0LW1hbmFnZXIpLgo8IS0tcmVub3ZhdGUtZGVidWc6ZXlKamNtVmhkR1ZrU1c1V1pYSWlPaUkwTXk0eE16a3VOQ0lzSW5Wd1pHRjBaV1JKYmxabGNpSTZJalF6TGpJME1pNHlJaXdpZEdGeVoyVjBRbkpoYm1Ob0lqb2liV0ZwYmlJc0lteGhZbVZzY3lJNld5SnlaVzV2ZG1GMFpTSmRmUT09LS0+Cg==
      patchset: 09c5ffc2174a101a338033e727fffc7b304e6578
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 71b711c422c10c242a8f785dc6d41ed9d12e9cd3
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 242732586e2cba04d04867d3e302888c766bc231
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
          untrusted/project_0/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 242732586e2cba04d04867d3e302888c766bc231
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 71b711c422c10c242a8f785dc6d41ed9d12e9cd3
          untrusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
          untrusted/project_3/github.com/osism/openstack-project-manager:
            canonical_name: github.com/osism/openstack-project-manager
            checkout: main
            commit: 0ca6fb085fca3a850010ae74731b64a80f55f2df
        playbooks:
        - path: untrusted/project_0/github.com/osism/openinfra-zuul-jobs/playbooks/tox/run.yaml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_0/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_0/zuul-config/roles
          - checkout: master
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_0/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_2/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
      post_review: false
      post_timeout: 1800
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/openstack-project-manager
        name: osism/openstack-project-manager
        short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
      projects:
        github.com/osism/openstack-project-manager:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          checkout: main
          checkout_description: zuul branch
          commit: 0ca6fb085fca3a850010ae74731b64a80f55f2df
          name: osism/openstack-project-manager
          required: false
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
      ref: refs/pull/276/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
