)]}'
{
  "log": [
    {
      "commit": "bb1ba8ed1414ec6a239cea265d4e9c7e23b9c6a3",
      "tree": "f8e3f861410b818bb917cb4da4b86be33cc68bee",
      "parents": [
        "fa9db747cba33e349064b3e7ff53cfa135ac9505",
        "857c32b056b697abc88b80a5ebf7498f07e7ab9d"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Tue Nov 03 09:32:26 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 09:32:26 2026 -0500"
      },
      "message": "GUACAMOLE-2350: Merge add RDP support for back and forward mouse button flags."
    },
    {
      "commit": "fa9db747cba33e349064b3e7ff53cfa135ac9505",
      "tree": "cdf23eb1e8770be6a90fc5e9fe38a1e678cb4448",
      "parents": [
        "f93f17436b68577586888ed969528b9043df8a4c",
        "9321c7dd503855f899e24426cc65665192c00279"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Tue Nov 03 09:15:59 2026 -0500"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Tue Nov 03 09:15:59 2026 -0500"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "9321c7dd503855f899e24426cc65665192c00279",
      "tree": "b08582a20cdc0365466770234983aac82c3736bd",
      "parents": [
        "3b89b6fbb289300ed31d2ae04ae93c92d0f1899a",
        "fd14231909bee35250da58bb0802d236da76a00e"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Tue Nov 03 09:10:59 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 09:10:59 2026 -0500"
      },
      "message": "GUACAMOLE-2323: Merge prevent RDP reconnect loop on user-initiated disconnect."
    },
    {
      "commit": "857c32b056b697abc88b80a5ebf7498f07e7ab9d",
      "tree": "5f60d542ece26c14f3bf19acd037c356e6502887",
      "parents": [
        "f93f17436b68577586888ed969528b9043df8a4c"
      ],
      "author": {
        "name": "Brad Schroth",
        "email": "2342157+bferd@users.noreply.github.com",
        "time": "Tue Nov 03 08:51:10 2026 -0500"
      },
      "committer": {
        "name": "Brad Schroth",
        "email": "2342157+bferd@users.noreply.github.com",
        "time": "Tue Nov 03 08:51:10 2026 -0500"
      },
      "message": "GUACAMOLE-2350: Add back and forward mouse button flags and send them to RDP as extended mouse events.\n"
    },
    {
      "commit": "fd14231909bee35250da58bb0802d236da76a00e",
      "tree": "b08582a20cdc0365466770234983aac82c3736bd",
      "parents": [
        "3b89b6fbb289300ed31d2ae04ae93c92d0f1899a"
      ],
      "author": {
        "name": "jd52ru",
        "email": "jd52ru@gmail.com",
        "time": "Sat Oct 24 15:56:50 2026 +0300"
      },
      "committer": {
        "name": "jd52ru",
        "email": "jd52ru@gmail.com",
        "time": "Tue Nov 03 14:28:59 2026 +0300"
      },
      "message": "GUACAMOLE-2323: Prevent RDP reconnect loop on user-initiated disconnect\n"
    },
    {
      "commit": "f93f17436b68577586888ed969528b9043df8a4c",
      "tree": "5ddd45f74ea0e8c0f7792b92cdba15182101ec9e",
      "parents": [
        "2020bae94ecf373951cba7378002e841206cb521",
        "8b14025d47118ef13656ca2ffbdf26fe90342b3c"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Nov 02 16:14:32 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 16:14:32 2026 -0500"
      },
      "message": "GUACAMOLE-1938: Merge server-side fixes for RDP/DNS errors"
    },
    {
      "commit": "2020bae94ecf373951cba7378002e841206cb521",
      "tree": "5963e77d0db153797f35347b7702e043fb6021c1",
      "parents": [
        "28ca57bb5e81f9340efe9682cf7f1dfcf4ba7e7f",
        "9c36de6639678c408e6736d97230f22ddd458256"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Nov 02 13:14:14 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 13:14:14 2026 -0500"
      },
      "message": "GUACAMOLE-2337: Merge avoid recombining absorbed display operations"
    },
    {
      "commit": "28ca57bb5e81f9340efe9682cf7f1dfcf4ba7e7f",
      "tree": "bd69dc40a8b3b9add83c23c74f8cf775d9fb2392",
      "parents": [
        "750579450440a32e21e0cf5c1d6be27240de9e3c",
        "6f069e524e785f432b3f3575a600480f4cfce0a4"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Nov 02 13:10:37 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 13:10:37 2026 -0500"
      },
      "message": "GUACAMOLE-2349: Merge use frame duration to reduce guacenc output size."
    },
    {
      "commit": "750579450440a32e21e0cf5c1d6be27240de9e3c",
      "tree": "8a543bcf7646a017f2cc2b51ede99637036b63bd",
      "parents": [
        "9feca19f45427b364b226e594fa3a0963cae9d2d",
        "3b89b6fbb289300ed31d2ae04ae93c92d0f1899a"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Nov 02 12:52:50 2026 -0500"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Nov 02 12:52:50 2026 -0500"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "3b89b6fbb289300ed31d2ae04ae93c92d0f1899a",
      "tree": "70580501fa2e652586ad648723ffc1eec65dc552",
      "parents": [
        "cec7ae9088bf269ab9ab5e0c317ab922a9af6404",
        "75b7f39525e6dba261b4d1f7cf5cc98f96581745"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Nov 02 12:50:24 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 12:50:24 2026 -0500"
      },
      "message": "GUACAMOLE-2348: Merge correct Latin American RDP keymap and AltGr dead keys."
    },
    {
      "commit": "cec7ae9088bf269ab9ab5e0c317ab922a9af6404",
      "tree": "b1313057ec15400bce64a414970d98a8284c4af5",
      "parents": [
        "a492e08724438d592c4a066d5bb33233be366a18",
        "7da7d03d3d230ebfb73f2f6df5a12c6d79854155"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Nov 02 12:39:58 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 12:39:58 2026 -0500"
      },
      "message": "GUACAMOLE-2344: Merge handle terminal dimensions with no valid copy or draw range."
    },
    {
      "commit": "9feca19f45427b364b226e594fa3a0963cae9d2d",
      "tree": "7cff925f88570102fef156e26e0e37f527f4ee56",
      "parents": [
        "0ad7dc5e1b23c84124016a44f0e37144c2858a23",
        "1b7d730183660d49a35de62243161c0308aea8ca"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Nov 02 10:52:42 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 02 10:52:42 2026 -0500"
      },
      "message": "GUACAMOLE-2301: Merge serial console protocol support"
    },
    {
      "commit": "1b7d730183660d49a35de62243161c0308aea8ca",
      "tree": "7cff925f88570102fef156e26e0e37f527f4ee56",
      "parents": [
        "5e0e378a1d0af1389afe6e6198b3acc51547bfdb"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Mon Nov 02 11:39:09 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Mon Nov 02 11:39:09 2026 -0300"
      },
      "message": "GUACAMOLE-2301: Use named constants and automatic config.h inclusion.\n\n- Include config.h automatically via AM_CPPFLAGS, as the other protocol\n  plugins do, and drop the explicit includes.\n- Define the Pause, Break and Ctrl+0 keysyms that send a serial break as\n  named constants.\n- Replace the RFC2217 COM-PORT-OPTION command #defines with an enum, and\n  name the SET-PARITY and SET-CONTROL values instead of using bare numbers.\n- Document why control pipe tokens are limited to 64 bytes, and discard\n  oversized tokens entirely. Previously the buffer was reset but the rest\n  of the token kept accumulating, so the tail of an oversized token could\n  be dispatched as a command.\n"
    },
    {
      "commit": "6f069e524e785f432b3f3575a600480f4cfce0a4",
      "tree": "2b6355f183940ad165f7527d49111cc50d3bf1e4",
      "parents": [
        "5f9bb3b4f81bcfda357d09920b2c23acb739423a"
      ],
      "author": {
        "name": "kakwa",
        "email": "carpentier.pf@gmail.com",
        "time": "Fri Oct 23 14:40:10 2026 +0200"
      },
      "committer": {
        "name": "kakwa",
        "email": "carpentier.pf@gmail.com",
        "time": "Mon Nov 02 14:42:26 2026 +0100"
      },
      "message": "GUACAMOLE-2349: use frame duration to reduce guacenc output size.\n\nWith newer ffmpeg/libavutil versions, leverage frame duration to avoid\npushing the same frame over and over again.\nInstead use the guac duration (capped at 65535) to set the libav frame\nduration.\n\nThis drastically reduces the outpout video file size and encoding time\nin case of long periods of inactivities within the recording.\n"
    },
    {
      "commit": "7da7d03d3d230ebfb73f2f6df5a12c6d79854155",
      "tree": "aa13fe24984555da1acbf9d12364d3a749d3937c",
      "parents": [
        "bd2d3b3ad63458bf6634e22eff38bf2cb20e3a94"
      ],
      "author": {
        "name": "Vemula-Rohith",
        "email": "vemularohith93@gmail.com",
        "time": "Mon Oct 19 21:31:46 2026 +0530"
      },
      "committer": {
        "name": "Vemula-Rohith",
        "email": "vemularohith93@gmail.com",
        "time": "Mon Nov 02 12:00:34 2026 +0530"
      },
      "message": "GUACAMOLE-2344: Handle terminal dimensions with no valid copy or draw range.\n\nA viewport smaller than one character produced a terminal with zero rows\nor columns, after which redraws requested column ranges such as 0..-1.\nScrolling the full display by its entire height, as every linefeed does\non a one-row terminal, requested a row copy with no source rows inside\nthe display. Both reached the assertion in guac_terminal_fit_to_range(),\naborting the connection process.\n\nThe terminal is now kept at least one character in each dimension, and\nthe display copy and set operations ignore requests that have no valid\nrange within the display.\n"
    },
    {
      "commit": "75b7f39525e6dba261b4d1f7cf5cc98f96581745",
      "tree": "4cffecaccf03686815d0beeb8496b615965bbc6a",
      "parents": [
        "c38039721b62fb3572fd93d2162f6d3498b9bd08"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sun Nov 01 12:16:31 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sun Nov 01 12:16:31 2026 -0300"
      },
      "message": "GUACAMOLE-2348: Release modifiers pressed for a dead key before the base key.\n\nWhen a keysym is typed as a dead key plus a base key, modifiers pressed only\nfor the dead key (such as AltGr) stayed held for the base key. Windows does\nnot complete a dead key with AltGr+Space, so \"`\" and \"^\" on layouts with AltGr\ndead keys left the accent pending for the next letter.\n"
    },
    {
      "commit": "c38039721b62fb3572fd93d2162f6d3498b9bd08",
      "tree": "08662e317744c7c61dbfb4b401822efeff0d2f1e",
      "parents": [
        "a492e08724438d592c4a066d5bb33233be366a18"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sun Nov 01 12:16:31 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sun Nov 01 12:16:31 2026 -0300"
      },
      "message": "GUACAMOLE-2348: Match the Latin American RDP keymap to the Windows layout.\n\nThe Windows Latin American layout (KBDLA) types \"@\" with AltGr+Q (not \"€\",\nwhich it lacks), a plain \"~\" with AltGr+\"+\", has a dead circumflex on\nAltGr+\"{\" and types \"°\" with Shift+\"|\". The X11 \"latam\" layout agrees.\n"
    },
    {
      "commit": "5e0e378a1d0af1389afe6e6198b3acc51547bfdb",
      "tree": "78f8c2f295e2ba04f3d23c413bb8fad58b75a3f4",
      "parents": [
        "f4bbb4bb1dd0170b0032965110d8b21dd9f78380"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 19:49:14 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 19:49:14 2026 -0300"
      },
      "message": "GUACAMOLE-2301: Adapt serial to guac_thread and guac_client_set_info.\n\nGUACAMOLE-2283 removed guacamole/proctitle.h from libguac. Threads are now\ncreated with guac_thread_create(), which names them, and the endpoint shown\nin guacd\u0027s process title is reported through guac_client_set_info(). Local\ndevices and reverse-mode listeners are reported as the resource name, and\noutbound network connections as hostname and port.\n\nguac_thread tracks whether it was started, so the separate\nclient_thread_valid flag is no longer needed.\n\nAlso fixes early line breaks in the open() documentation of local.h,\nrfc2217.h and tcp.h.\n"
    },
    {
      "commit": "f4bbb4bb1dd0170b0032965110d8b21dd9f78380",
      "tree": "d04ace31f7a51bc22efe2aa6c60974cc2ab732b9",
      "parents": [
        "5d8434fc1d70902267caf31585dc97325c42db7d"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 15:24:35 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 19:46:10 2026 -0300"
      },
      "message": "GUACAMOLE-2301: Address review feedback on serial protocol support\n\nStyle and documentation:\n- Put each switch case on its own lines and expand one-line conditionals.\n- Complete function documentation, document every parity and flow-control\n  enum member, and note the default of each connection argument.\n- Correct docs that omitted the Telnet transport or claimed that open\n  failures abort the client; document the dtr/rts control-pipe commands.\n- Convert the open() and connect() errno chains to switch statements.\n\nlibtelnet / build:\n- Drop the TELNET_BREAK fallback (libtelnet defines it) and rename the\n  COM-PORT-OPTION number to GUAC_SERIAL_TELOPT_COMPORT, since libtelnet\n  does not define option 44.\n- Define ENABLE_SERIAL_RFC2217 from the existing ENABLE_TELNET conditional\n  rather than a separate one, report build_telnet in the configure\n  summary, and align the summary columns.\n\nSettings:\n- Parse transport-specific arguments only for the transport in use.\n- Remove the per-connection allowed-devices parameter: whoever can set\n  \"device\" can also set the allowlist, so it provides no protection. A\n  guacd-level allowlist can be proposed separately.\n- Remove the unused GUAC_SERIAL_DEFAULT_PORT.\n"
    },
    {
      "commit": "5d8434fc1d70902267caf31585dc97325c42db7d",
      "tree": "233fa328ddde3b57f1c7e1d9bd4f02ee562b878e",
      "parents": [
        "bc1c454e92bdf51e03518412e39139907879dfa2"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Fri Jul 17 12:25:34 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 19:46:10 2026 -0300"
      },
      "message": "GUACAMOLE-2301: Add \u0027telnet\u0027 network-protocol transport for serial\n\nAdd network-protocol\u003dtelnet: base RFC854 Telnet framing (IAC escaping,\nBINARY/SGA/ECHO negotiation) via libtelnet, without the RFC2217 COM-PORT\noption. Serial line settings are informational, as with raw. Intended for\nendpoints that speak plain Telnet rather than RFC2217 -- QEMU/KVM telnet:\nserial ports, VMware ESXi telnet:// virtual serial ports, and telnet-mode\nconsole servers.\n\nReuses the existing libtelnet event handler and send/recv/free, and\nacquires its socket through guac_serial_net_open_fd(), so it works in both\nforward and reverse mode. A Send Break is delivered as the Telnet BRK\ncommand. Gated on libtelnet (ENABLE_SERIAL_RFC2217) with no-op stubs when\nlibtelnet is absent.\n"
    },
    {
      "commit": "bc1c454e92bdf51e03518412e39139907879dfa2",
      "tree": "589c6c070bdebce38d02996b83e9aa51cb0935f5",
      "parents": [
        "0593d07c406d1b1aea9c3658271024ae89355207"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Fri Jul 17 12:12:15 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 19:46:10 2026 -0300"
      },
      "message": "GUACAMOLE-2301: Add serial reverse (listen) mode for inbound connections\n\nAdd a reverse/listen mode for network serial connections: instead of\ndialing out to a gateway, guacd binds a local TCP port and accepts a\nsingle inbound connection from the device (e.g. a QEMU/KVM or VMware\nvirtual serial port, or a console server configured to dial out).\n\nNetwork fd acquisition is factored into guac_serial_net_open_fd(), used\nby both the raw and RFC2217 backends, which either dials out or, when\nreverse-connect is set, binds/listens/accepts. The accepted socket feeds\nthe existing raw/RFC2217 framing unchanged, and the auto-reconnect path\nre-listens for the next inbound connection on drop.\n\nNew parameters: reverse-connect, bind-address (default 127.0.0.1),\nlisten-timeout (default 60s). In reverse mode hostname is optional.\n"
    },
    {
      "commit": "0593d07c406d1b1aea9c3658271024ae89355207",
      "tree": "3644919db07fd9bc88051773f4f49453fd5fdbb9",
      "parents": [
        "72dea2561cbbd857ca47082f26bec43f51ae13a0"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Wed Jul 15 17:01:00 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 19:46:10 2026 -0300"
      },
      "message": "GUACAMOLE-2301: Add serial reconnect, line-ending, echo, control-line, and diagnostics support\n\nImplements the reviewed serial console feature gaps on top of the initial\nserial protocol plugin:\n\n- Auto-reconnect on drop (new \"auto-reconnect\", default true): the terminal and\n  scrollback are kept alive across reconnects; a single stream object persists\n  for the session and its fd/telnet context is swapped under write_lock by\n  guac_serial_stream_reopen(), so the input thread never touches a stale fd.\n- Line-ending translation (new \"line-ending\": cr|lf|crlf, default cr) applied to\n  typed Enter and pasted text via a small cross-buffer state machine.\n- Distinct contention/error logging: EBUSY/EACCES/EPERM and TIOCEXCL-busy on\n  local devices, ECONNREFUSED/ECONNRESET on network transports.\n- Local echo (new \"local-echo\", default false).\n- Structured connect/disconnect reason logging (EOF, EIO, reset, hangup).\n- Hangup-on-close (new \"hangup-on-close\" -\u003e HUPCL) and DTR/RTS control-line\n  toggles via the serial-control pipe (dtr-on/off, rts-on/off), using\n  TIOCMBIS/TIOCMBIC locally and RFC2217 SET-CONTROL (DTR 8/9, RTS 11/12).\n- Connect status banner with an \"8N1\"-style summary and press-Enter hint.\n- Interruptible paste-delay pacing so a long paste cannot stall teardown.\n\nThe device allowlist is retained in settings and re-validated (re-realpath) on\nevery local (re)open.\n"
    },
    {
      "commit": "72dea2561cbbd857ca47082f26bec43f51ae13a0",
      "tree": "34b220186c46b50df6a0c7e28b574fa204505ace",
      "parents": [
        "0ad7dc5e1b23c84124016a44f0e37144c2858a23"
      ],
      "author": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Tue Jul 14 11:16:49 2026 -0300"
      },
      "committer": {
        "name": "Ciro Iriarte",
        "email": "ciro.iriarte@gmail.com",
        "time": "Sat Oct 31 19:46:10 2026 -0300"
      },
      "message": "GUACAMOLE-2301: Add serial console protocol (local device, ser2net raw TCP, RFC2217)\n\nAdds a new \"serial\" terminal protocol plugin for browser access to serial\nconsoles (switch/router/PDU administration). Three transports select via the\nserial-type/network-protocol parameters: a local tty device configured with\ntermios, raw TCP to a ser2net endpoint, and RFC2217 (telnet COM-PORT-OPTION,\ncompiled only when libtelnet is available via ENABLE_SERIAL_RFC2217).\n\nSupports configurable send-break (break-duration) through a client-agnostic\nserial-control pipe, paste pacing (paste-delay), and a device-path allowlist,\nreusing the shared terminal for recording/typescript/clipboard/color-scheme,\nmirroring the telnet/ipmi plugin structure.\n"
    },
    {
      "commit": "0ad7dc5e1b23c84124016a44f0e37144c2858a23",
      "tree": "0b96ccbc86ba42c220d56250263e72ed3dcfe807",
      "parents": [
        "5f9bb3b4f81bcfda357d09920b2c23acb739423a",
        "e474ca431ea3d3f163b0f09ec0e48a0c59c42314"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Sat Oct 31 08:54:26 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 31 08:54:26 2026 -0400"
      },
      "message": "GUACAMOLE-2306: Merge support for the RDPSND Wave2 (SNDC_WAVE2) PDU."
    },
    {
      "commit": "e474ca431ea3d3f163b0f09ec0e48a0c59c42314",
      "tree": "0b96ccbc86ba42c220d56250263e72ed3dcfe807",
      "parents": [
        "5f9bb3b4f81bcfda357d09920b2c23acb739423a"
      ],
      "author": {
        "name": "Mohamad Khawam",
        "email": "mk1800@rutgers.edu",
        "time": "Mon Jul 20 14:48:10 2026 -0400"
      },
      "committer": {
        "name": "Juri Stöckli",
        "email": "42550224+juristoeckli@users.noreply.github.com",
        "time": "Mon Oct 26 02:35:21 2026 +0100"
      },
      "message": "GUACAMOLE-2306: Add support for the RDPSND Wave2 (SNDC_WAVE2) PDU.\n\nModern Windows RDP servers may transmit audio using the single-PDU Wave2 (SNDC_WAVE2) form rather than the legacy WaveInfo/Wave pair. Per MS-RDPEA, a server uses Wave2 only when both the client and server advertise RDPSND protocol version 8 or higher. Guacamole previously advertised version 6 and had no SNDC_WAVE2 handler, so Wave2 could not be negotiated, and any Wave2 PDU that did arrive was silently dropped (no audio decoded and no Wave Confirmation returned, which stalls the server\u0027s audio stream).\n\nThis advertises client version 8 and adds a handler that decodes the self-contained Wave2 audio block, plays it, and acknowledges it via a Wave Confirmation PDU. The legacy WaveInfo/Wave path is retained for servers negotiating a lower version.\n\nCo-authored-by: Charles Hedrick \u003chedrick@rutgers.edu\u003e\n"
    },
    {
      "commit": "5f9bb3b4f81bcfda357d09920b2c23acb739423a",
      "tree": "3e0f3fd341b4679604f7600613781aa5d9a9a8ee",
      "parents": [
        "ecca029b13c36fc9dba0f7f6b897eaf952239c22",
        "a492e08724438d592c4a066d5bb33233be366a18"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Oct 16 20:40:35 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Oct 16 20:40:35 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "a492e08724438d592c4a066d5bb33233be366a18",
      "tree": "ec33dbbb25689630e8097995f2a4e22a471467d1",
      "parents": [
        "bd2d3b3ad63458bf6634e22eff38bf2cb20e3a94",
        "59fa92bfc8bd6df4f0392fe99dfc78b0a0457cc7"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Oct 16 20:39:57 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Oct 16 20:39:57 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch branch.\n"
    },
    {
      "commit": "59fa92bfc8bd6df4f0392fe99dfc78b0a0457cc7",
      "tree": "d2d9ae6db2e56f927614d3f6b5a3c158d354cb1b",
      "parents": [
        "56a7a88cba86365e80fe418703b8422db72e35a4",
        "0055e32c4f8719ccc766f0ab1952fe3ec1f9fa29"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Fri Oct 16 20:38:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 20:38:58 2026 -0400"
      },
      "message": "GUACAMOLE-2283: Merge refactor to minimal threading API, move process naming to guacd internals."
    },
    {
      "commit": "0055e32c4f8719ccc766f0ab1952fe3ec1f9fa29",
      "tree": "d2d9ae6db2e56f927614d3f6b5a3c158d354cb1b",
      "parents": [
        "56a7a88cba86365e80fe418703b8422db72e35a4"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sat Sep 26 20:20:30 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Tue Oct 13 11:03:12 2026 -0700"
      },
      "message": "GUACAMOLE-2283: Refactor to minimal threading API, move process naming to guacd internals.\n"
    },
    {
      "commit": "ecca029b13c36fc9dba0f7f6b897eaf952239c22",
      "tree": "717cff587bc7ca4fba2d97b53e4c10f1b6aea429",
      "parents": [
        "ae12b8e51aa6287d0eca7a50c6cac04af4a71590",
        "bd2d3b3ad63458bf6634e22eff38bf2cb20e3a94"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Tue Oct 13 07:36:47 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Tue Oct 13 07:36:47 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "bd2d3b3ad63458bf6634e22eff38bf2cb20e3a94",
      "tree": "e7e9eb49170938cbc8beb65b61c5f2eb44c460c5",
      "parents": [
        "d292bdec414ba0d860e4e531dbe9fda8e30a24c1",
        "56a7a88cba86365e80fe418703b8422db72e35a4"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Tue Oct 13 07:35:46 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Tue Oct 13 07:35:46 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch branch.\n"
    },
    {
      "commit": "56a7a88cba86365e80fe418703b8422db72e35a4",
      "tree": "9810073324045094c936a09a215ba4c34f21dde3",
      "parents": [
        "d9ec4742a454961eb40e1ee3aa6bd4d41e8a0b8d",
        "c6884bcc269faf0a7af1aeef933fc57798db3e0a"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Tue Oct 13 07:34:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 07:34:58 2026 -0400"
      },
      "message": "GUACAMOLE-2118: Merge ensure connection processes are always torn down, even if malfunctioning/blocking. "
    },
    {
      "commit": "c6884bcc269faf0a7af1aeef933fc57798db3e0a",
      "tree": "9810073324045094c936a09a215ba4c34f21dde3",
      "parents": [
        "a8e3547b779fdd9ea718b75134e8de92ef61144d"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Fri Sep 25 18:08:51 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Oct 12 17:28:10 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Migrate to re-exec after fork(), harden against unexpected behavior.\n"
    },
    {
      "commit": "a8e3547b779fdd9ea718b75134e8de92ef61144d",
      "tree": "fa4d4fa49520589aadfe666c624d7db711a630ab",
      "parents": [
        "7b41a8ee3b6b9cea8cff27d777f67803e6246296"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Fri Sep 25 18:08:51 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Oct 12 17:28:10 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Monitor all operations which must not block with watchdog.\n"
    },
    {
      "commit": "7b41a8ee3b6b9cea8cff27d777f67803e6246296",
      "tree": "3f6223d1dcf1a794fc287883ebe8a99d5cebd364",
      "parents": [
        "e9276653d3c71b8719df5ba3d6774e2ee718f421"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Fri Sep 25 18:08:50 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Oct 12 17:28:10 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Ensure socket I/O cannot block indefinitely.\n"
    },
    {
      "commit": "e9276653d3c71b8719df5ba3d6774e2ee718f421",
      "tree": "d00996e32e7d316ea2e857f5e9cb03105f40a712",
      "parents": [
        "6cdf21b32156496bf2ffa883fc4659d89fd37d08"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Fri Sep 25 18:08:50 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Oct 12 17:28:09 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Move internal struct out of public \"socket-ssl.h\" header.\n"
    },
    {
      "commit": "6cdf21b32156496bf2ffa883fc4659d89fd37d08",
      "tree": "3729c31ce84e144c61bb0272140d56651e3cd757",
      "parents": [
        "d9ec4742a454961eb40e1ee3aa6bd4d41e8a0b8d"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Fri Sep 25 18:08:50 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Oct 12 17:28:09 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Recheck guac_flag flags after pthread_cond_t timeout (per POSIX manual).\n"
    },
    {
      "commit": "9c36de6639678c408e6736d97230f22ddd458256",
      "tree": "75470492a8fe971545212472a49c705e22c37120",
      "parents": [
        "ae12b8e51aa6287d0eca7a50c6cac04af4a71590"
      ],
      "author": {
        "name": "John Tsui",
        "email": "110079544+JohnXu22786@users.noreply.github.com",
        "time": "Sat Oct 03 16:00:10 2026 +0800"
      },
      "committer": {
        "name": "John Tsui",
        "email": "110079544+JohnXu22786@users.noreply.github.com",
        "time": "Wed Oct 07 12:26:16 2026 +0800"
      },
      "message": "GUACAMOLE-2337: Skip absorbed display operations\n\nAvoid unnecessarily expanding display update regions when a cell retains a reference to an operation already absorbed into another operation.\n"
    },
    {
      "commit": "8b14025d47118ef13656ca2ffbdf26fe90342b3c",
      "tree": "a18bff09acf85ebbd967bb507717b00f937a537e",
      "parents": [
        "ae12b8e51aa6287d0eca7a50c6cac04af4a71590"
      ],
      "author": {
        "name": "Steven T. Barnhart",
        "email": "barnhart.103@osu.edu",
        "time": "Tue Sep 15 15:13:54 2026 -0400"
      },
      "committer": {
        "name": "Steven T. Barnhart",
        "email": "barnhart.103@osu.edu",
        "time": "Tue Sep 29 15:23:51 2026 -0400"
      },
      "message": "GUACAMOLE-1938: Fix RDP sign-off reconnect: abort on wait error before event processing\n"
    },
    {
      "commit": "ae12b8e51aa6287d0eca7a50c6cac04af4a71590",
      "tree": "e4d93612114675b6e642dfaf24cdfa52592f972c",
      "parents": [
        "9111f16fd1a88c4222dc825da4e8d5a25a97b232",
        "d292bdec414ba0d860e4e531dbe9fda8e30a24c1"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Sep 14 17:10:16 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Sep 14 17:10:16 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "d292bdec414ba0d860e4e531dbe9fda8e30a24c1",
      "tree": "d3463476cf9aa9eaad23a9c9db70b14466db22a3",
      "parents": [
        "85e26fb4d3da77196e6a0dfc7a70cadcf851912a",
        "d9ec4742a454961eb40e1ee3aa6bd4d41e8a0b8d"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Sep 14 17:08:53 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Sep 14 17:08:53 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch branch.\n"
    },
    {
      "commit": "d9ec4742a454961eb40e1ee3aa6bd4d41e8a0b8d",
      "tree": "90ac87bce19d801c186d018ae457fc68b95bb777",
      "parents": [
        "6fb604f9b27b2ae64a479db7bad5af3c6bf8d53e",
        "50e24ff76d3f2e9367a5f2cc52ddaa4c717ed967"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Sep 14 16:58:15 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 16:58:15 2026 -0400"
      },
      "message": "GUACAMOLE-2327: Merge correct free space reporting on large RDP redirected drives."
    },
    {
      "commit": "50e24ff76d3f2e9367a5f2cc52ddaa4c717ed967",
      "tree": "90ac87bce19d801c186d018ae457fc68b95bb777",
      "parents": [
        "6fb604f9b27b2ae64a479db7bad5af3c6bf8d53e"
      ],
      "author": {
        "name": "Ben Jefferies",
        "email": "ben.jefferies@prolific.com",
        "time": "Wed Sep 09 16:17:14 2026 +0100"
      },
      "committer": {
        "name": "Cursor Agent",
        "email": "cursoragent@cursor.com",
        "time": "Mon Sep 14 17:01:15 2026 +0000"
      },
      "message": "GUACAMOLE-2327: Use 64-bit types for RDP drive allocation-unit counts\n\nRDPDR FileFsSizeInformation writes allocation-unit counts as UINT64,\nbut guac_rdp_fs_info stored them in a 32-bit int. Filesystems with\nmore than 2^31 allocation units then overflow, which can make Windows\nreport zero free space and refuse copies onto the redirected drive.\n\nRelated: GUACAMOLE-268, GUACAMOLE-764.\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e\n"
    },
    {
      "commit": "9111f16fd1a88c4222dc825da4e8d5a25a97b232",
      "tree": "9854cf2e7cf308e56b86f30405cbd943427cf667",
      "parents": [
        "d3b7828977c63a5b197158d6cbbdaf1846b579fb",
        "85e26fb4d3da77196e6a0dfc7a70cadcf851912a"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Sep 10 21:14:43 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Sep 10 21:14:43 2026 -0700"
      },
      "message": "Merge changes from patch branch back to main.\n"
    },
    {
      "commit": "85e26fb4d3da77196e6a0dfc7a70cadcf851912a",
      "tree": "db3d816d1699a3f5501f6ecc624fe339140d07fc",
      "parents": [
        "0dff6c154899c02214dcd9daeb8ca2b5e8d04ec8",
        "6fb604f9b27b2ae64a479db7bad5af3c6bf8d53e"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Sep 10 21:14:43 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Sep 10 21:14:43 2026 -0700"
      },
      "message": "Merge 1.6.1 changes back to patch.\n"
    },
    {
      "commit": "6fb604f9b27b2ae64a479db7bad5af3c6bf8d53e",
      "tree": "e447b21da2146a18675f8b7c7a3d57b491bf14a4",
      "parents": [
        "06a094d01943a0f342612001ae8c8edd92ccff6d",
        "ab36756b596520ae2a94cd4d25e406e0b5aa820b"
      ],
      "author": {
        "name": "Mike Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Sep 10 09:41:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 09:41:09 2026 -0700"
      },
      "message": "GUACAMOLE-2328: Merge migration to initializing FreeRDP GDI within PostConnect."
    },
    {
      "commit": "ab36756b596520ae2a94cd4d25e406e0b5aa820b",
      "tree": "e447b21da2146a18675f8b7c7a3d57b491bf14a4",
      "parents": [
        "06a094d01943a0f342612001ae8c8edd92ccff6d"
      ],
      "author": {
        "name": "Stu Dixon",
        "email": "sdixon@wesdx.com",
        "time": "Thu Sep 10 10:42:29 2026 +0100"
      },
      "committer": {
        "name": "Stu Dixon",
        "email": "sdixon@wesdx.com",
        "time": "Thu Sep 10 10:46:53 2026 +0100"
      },
      "message": "GUACAMOLE-2328: Initialize the FreeRDP GDI within PostConnect, not PreConnect.\n\ngdi_init() requires that the rdpContext cache already exist. That cache is not\ncreated until the connection sequence reaches Confirm Active, which occurs after\nthe PreConnect callback has returned. Calling gdi_init() from PreConnect\ntherefore dereferences a NULL cache within gdi_init_ex(), aborting or crashing\nthe connection before any session can be established.\n\nThis is only observable with FreeRDP 3.31.0 and later. Earlier versions created\nthe cache within gdi_init_ex() itself, so the call ordering went unnoticed.\nPostConnect is where FreeRDP\u0027s own reference clients call gdi_init(), and is\nalso where the GDI is sized using the display geometry the server actually\nnegotiated rather than the geometry initially requested.\n\nThe pointer registration and update handler assignments move along with\ngdi_init(). They must follow it: gdi_init() installs FreeRDP\u0027s own BeginPaint,\nEndPaint, and DesktopResize handlers, silently replacing anything registered\nbeforehand.\n\nVerified against both FreeRDP 3.30.0 and 3.31.0, connecting to an RDP server\nthat authenticates successfully and confirming that drawing instructions\ncontinue to be produced in both cases.\n"
    },
    {
      "commit": "d3b7828977c63a5b197158d6cbbdaf1846b579fb",
      "tree": "5d41cc0ee285bd7be49afa65bf87d4a56842c5ad",
      "parents": [
        "be83001bda2e60f1356604c91144628e8150afeb",
        "0dff6c154899c02214dcd9daeb8ca2b5e8d04ec8"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Aug 28 19:42:47 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Aug 28 19:42:47 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "0dff6c154899c02214dcd9daeb8ca2b5e8d04ec8",
      "tree": "9e5569029dba8f04560c8feee12566d545b2075e",
      "parents": [
        "b3ca154bc1ad4f093803c2efb569c2d5da12d331",
        "06a094d01943a0f342612001ae8c8edd92ccff6d"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Aug 28 19:41:44 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Fri Aug 28 19:41:44 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch.\n"
    },
    {
      "commit": "06a094d01943a0f342612001ae8c8edd92ccff6d",
      "tree": "0e9baf66bc9162718458a3e65be516c3ffda562a",
      "parents": [
        "f22a2df129d9ecf279466e9bcf44cd026e23e6bd",
        "3feb20c0f5ae8476957d3a45f51addd7ea3de698"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Aug 24 19:25:54 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 19:25:54 2026 -0400"
      },
      "message": "GUACAMOLE-2319: Merge fix SFTP symlink dirs shown as files when root is not system root."
    },
    {
      "commit": "3feb20c0f5ae8476957d3a45f51addd7ea3de698",
      "tree": "0e9baf66bc9162718458a3e65be516c3ffda562a",
      "parents": [
        "f22a2df129d9ecf279466e9bcf44cd026e23e6bd"
      ],
      "author": {
        "name": "eugen-keeper",
        "email": "ehartmann@keepersecurity.com",
        "time": "Tue Aug 18 13:59:31 2026 -0400"
      },
      "committer": {
        "name": "eugen-keeper",
        "email": "ehartmann@keepersecurity.com",
        "time": "Mon Aug 24 21:44:03 2026 +0000"
      },
      "message": "GUACAMOLE-2319: Fix SFTP symlink dirs shown as files when root is not system root.\n"
    },
    {
      "commit": "be83001bda2e60f1356604c91144628e8150afeb",
      "tree": "2862223e787c3e5194e86f14c9c3f05a21c883ac",
      "parents": [
        "be607c1fc6d6d378d2f902258806b7eb6cba607a",
        "b3ca154bc1ad4f093803c2efb569c2d5da12d331"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 21:24:17 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 21:24:17 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "b3ca154bc1ad4f093803c2efb569c2d5da12d331",
      "tree": "a82e22b60f4449fb6d423eb92f5c8b11d5217094",
      "parents": [
        "d75c8284643cb8bb7b822e5296d49228e77e60fa",
        "f22a2df129d9ecf279466e9bcf44cd026e23e6bd"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 21:23:32 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 21:23:32 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch.\n"
    },
    {
      "commit": "f22a2df129d9ecf279466e9bcf44cd026e23e6bd",
      "tree": "ed3e626151e86f2c8cadefc6e939aea4a0f35153",
      "parents": [
        "f8a5f734e818cb15c65bc0ffc0147036941ddca0",
        "801c24a43548692d3c0bd38c276dad6e2c95dd38"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Thu Aug 06 21:13:33 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 21:13:33 2026 -0400"
      },
      "message": "GUACAMOLE-2314: Merge allow guacd to start when /etc/guacamole/guacd.conf doesn\u0027t exist."
    },
    {
      "commit": "be607c1fc6d6d378d2f902258806b7eb6cba607a",
      "tree": "2d84adc5b7c463516e5d76bf8bf310c1d9ba54cd",
      "parents": [
        "8a4fbe65a00016bd2469b0153179c9d21398b8a0",
        "d75c8284643cb8bb7b822e5296d49228e77e60fa"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 16:29:42 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 16:29:42 2026 -0700"
      },
      "message": "Merge changes from patch branch back to main.\n"
    },
    {
      "commit": "d75c8284643cb8bb7b822e5296d49228e77e60fa",
      "tree": "a58aad3c4bf2c1e8fef1c0d312b9ae9f8717ec17",
      "parents": [
        "325a6dfe82dd2b9711b29f21719d0aebd23a33c7",
        "f8a5f734e818cb15c65bc0ffc0147036941ddca0"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 16:29:41 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 16:29:41 2026 -0700"
      },
      "message": "Merge 1.6.1 changes back to patch.\n"
    },
    {
      "commit": "f8a5f734e818cb15c65bc0ffc0147036941ddca0",
      "tree": "42382a902a9779233e9b5ed1552a03f7f135ab62",
      "parents": [
        "f691de490cb26f030116492869176b7abc2b08c2",
        "bfc05dc4ee90792e67a646d965d45790bab1f6f0"
      ],
      "author": {
        "name": "Mike Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 16:27:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 16:27:25 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Merge automatic shutdown of user input socket at connection end."
    },
    {
      "commit": "f691de490cb26f030116492869176b7abc2b08c2",
      "tree": "60cbe05c538ec5346edb4e9c44137627c5b3912f",
      "parents": [
        "863ac868e64316edbd6898f3e481fdee72c8abfb",
        "83af0f45c3b2099297e85734d1eb4901f6d3e050"
      ],
      "author": {
        "name": "Mike Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 16:24:52 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 16:24:52 2026 -0700"
      },
      "message": "GUACAMOLE-1625: Merge automatic closure of file descriptors inherited by connection processes."
    },
    {
      "commit": "8a4fbe65a00016bd2469b0153179c9d21398b8a0",
      "tree": "bad00892378b29074c75b7a25dabff0e74ddb6ff",
      "parents": [
        "0e55d4141f5c3895bfb8368432d46ab173482564",
        "325a6dfe82dd2b9711b29f21719d0aebd23a33c7"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 14:49:37 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 14:49:37 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "325a6dfe82dd2b9711b29f21719d0aebd23a33c7",
      "tree": "d61257655e1cf50ad10b7530075477afbc6e06a4",
      "parents": [
        "e83a0af2149dc7b39af75e4e10f75856ea1a7475",
        "863ac868e64316edbd6898f3e481fdee72c8abfb"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 14:48:41 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Thu Aug 06 14:48:41 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch branch.\n"
    },
    {
      "commit": "863ac868e64316edbd6898f3e481fdee72c8abfb",
      "tree": "91f14e64b0a3cab17f14426c75028f3d774f09fb",
      "parents": [
        "a462f18722ce31c449f31b2f04bfa531825e2624",
        "4bdca4c7639e0ccc97dfbe2fe2cfc40b9ba1ced5"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Thu Aug 06 14:44:49 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 14:44:49 2026 -0400"
      },
      "message": "GUACAMOLE-2313: Merge disambiguate handling of lock modifiers and Mac-specific keys."
    },
    {
      "commit": "801c24a43548692d3c0bd38c276dad6e2c95dd38",
      "tree": "75d837bee2a7476a37c223c36c2cecb11bde5802",
      "parents": [
        "a462f18722ce31c449f31b2f04bfa531825e2624"
      ],
      "author": {
        "name": "KCM Build",
        "email": "dev@keepersecurity.com",
        "time": "Wed Aug 05 13:12:07 2026 -0400"
      },
      "committer": {
        "name": "KCM Build",
        "email": "dev@keepersecurity.com",
        "time": "Thu Aug 06 11:20:10 2026 -0400"
      },
      "message": "GUACAMOLE-2314: guacd fails to start when /etc/guacamole/guacd.conf doesn\u0027t exist.\n"
    },
    {
      "commit": "bfc05dc4ee90792e67a646d965d45790bab1f6f0",
      "tree": "45d63d032d4f0810f613c6db74147261c9afb730",
      "parents": [
        "a462f18722ce31c449f31b2f04bfa531825e2624"
      ],
      "author": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Tue Aug 04 21:19:45 2026 +0300"
      },
      "committer": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Thu Aug 06 10:48:44 2026 +0300"
      },
      "message": "GUACAMOLE-2118: Signal end of user input to connection processes.\n\nOnce no further data can be read from a user, the thread forwarding that\nuser\u0027s input simply returns, leaving its end of the socketpair shared with the\nconnection process open. A user which vanishes without sending \"disconnect\"\ntherefore leaves that process blocked awaiting input indefinitely: nothing\nfurther informs it that its last user has left, so it never stops itself and\nnever exits.\n\nThe thread reading from that process cannot detect this either, as it remains\nblocked on a socket which an idle process will never write to again, and so\nnever reaches the point at which it would close its end.\n\nShut down the write side of the socketpair when no further user input is\npossible, such that the connection process observes end of input.\n"
    },
    {
      "commit": "83af0f45c3b2099297e85734d1eb4901f6d3e050",
      "tree": "29c289e420622f8b19a370f46dd4647f1e946ce9",
      "parents": [
        "bba760afbecf59adc1bb723b4fb93bd6245aa213"
      ],
      "author": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Wed Aug 05 13:12:02 2026 +0300"
      },
      "committer": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Thu Aug 06 10:48:44 2026 +0300"
      },
      "message": "GUACAMOLE-1625: Prefer close_range() when closing inherited descriptors.\n\nTesting each descriptor individually costs a syscall per descriptor, which\nclose_range() avoids entirely. Where it is unavailable, the cost is bounded by\nclosing only those descriptors which are actually open, as the limit on the\nnumber of descriptors may be orders of magnitude greater than the number in\nuse.\n\nA C library may lack a wrapper for close_range() while the kernel still\nprovides the system call, in which case it is invoked directly. That is the\ncase for musl, and thus for the guacd Docker image.\n\nDescriptors are no longer tested to determine whether they refer to sockets.\nEvery descriptor inherited here is a socket, and neither libuuid nor OpenSSL\nretains one across the fork, both obtaining randomness through getrandom().\n"
    },
    {
      "commit": "bba760afbecf59adc1bb723b4fb93bd6245aa213",
      "tree": "37c1fbfa48eac05b347b66ae2cd9da9998da7e3a",
      "parents": [
        "a462f18722ce31c449f31b2f04bfa531825e2624"
      ],
      "author": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Tue Aug 04 21:19:31 2026 +0300"
      },
      "committer": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Thu Aug 06 10:48:44 2026 +0300"
      },
      "message": "GUACAMOLE-1625: Close sockets inherited by connection processes.\n\nConnection processes inherit every descriptor open in the parent, as\nguacd_create_proc() closes only its own end of the socketpair it shares with\nthe new child. For a busy parent, this means the parent\u0027s end of every other\nconnection\u0027s user socketpair, the parent\u0027s end of every other connection\nprocess\u0027 socketpair, and the socket guacd listens on. FD_CLOEXEC cannot help,\nas connection processes are forked but never exec\u0027d.\n\nThose inherited descriptors keep unrelated sockets referenced after the parent\nhas closed them, so their peers never observe EOF. A write which should fail\nwith EPIPE instead blocks forever, and that blocked write is performed while\nholding a read lock on the client\u0027s list of users, so guac_client_remove_user()\ncan never acquire the corresponding write lock. The count of connected users\ntherefore never reaches zero, guacd_proc_stop() is never called, and the\nprocess never exits.\n\nThe effect compounds, as the more connections are open, the more descriptors\neach new process inherits. A parent with 469 such processes was observed\nholding tens of gigabytes, with descriptor counts rising from 98 in the oldest\nprocess to 756 in the youngest, and a single socket held by 40 of 40 sampled\nprocesses.\n\nClose inherited sockets within the newly-forked process. Only sockets are\nclosed, as descriptors for anything else may be held by libraries unaware that\nthey are being closed, and reusing such a number for a later socket would\nsilently redirect their reads and writes.\n"
    },
    {
      "commit": "4bdca4c7639e0ccc97dfbe2fe2cfc40b9ba1ced5",
      "tree": "91f14e64b0a3cab17f14426c75028f3d774f09fb",
      "parents": [
        "738ebcf8a84e2d88bc874d38690ffeb7bbb5b688"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Aug 03 17:30:22 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:42 2026 -0700"
      },
      "message": "GUACAMOLE-2313: Do not scroll the terminal to the bottom for modifier keys.\n"
    },
    {
      "commit": "738ebcf8a84e2d88bc874d38690ffeb7bbb5b688",
      "tree": "4f4ed9b3cde16aa83370b93d51a0964168a25db7",
      "parents": [
        "dd2038a7cc4d461e4009d0d90463407ab6045f37"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Aug 03 01:48:47 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:41 2026 -0700"
      },
      "message": "GUACAMOLE-2313: Synchronize VNC lock key state when supported.\n"
    },
    {
      "commit": "dd2038a7cc4d461e4009d0d90463407ab6045f37",
      "tree": "42c2880b00f22be2a1279678c80e88a279909d60",
      "parents": [
        "c220d9ddaf2369f5159ae8aabbe943eb0d92a738"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Aug 03 01:41:35 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:41 2026 -0700"
      },
      "message": "GUACAMOLE-2313: Translate Command/Option keys in VNC connections to general VNC keysym conventions.\n"
    },
    {
      "commit": "c220d9ddaf2369f5159ae8aabbe943eb0d92a738",
      "tree": "282b0fc0cd2d8775f626cf4bd2a0d280d8c8e961",
      "parents": [
        "a462f18722ce31c449f31b2f04bfa531825e2624"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Mon Aug 03 01:38:13 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:41 2026 -0700"
      },
      "message": "GUACAMOLE-2313: Handle macOS Option keypresses in RDP as equivalent to AltGr.\n"
    },
    {
      "commit": "0e55d4141f5c3895bfb8368432d46ab173482564",
      "tree": "1fd99380dcc66ee57e507fc2a0c897e95f069486",
      "parents": [
        "de97609007c088b5e6afd827eff5e9076013a247",
        "e83a0af2149dc7b39af75e4e10f75856ea1a7475"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:25 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:25 2026 -0700"
      },
      "message": "Merge changes from patch branch back to main.\n"
    },
    {
      "commit": "e83a0af2149dc7b39af75e4e10f75856ea1a7475",
      "tree": "1ed718087600d2e22b8a267f2ba4c5c0e1f6343c",
      "parents": [
        "01734a39fc013910b937a738a0a92846a53c005d",
        "a462f18722ce31c449f31b2f04bfa531825e2624"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:24 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:19:24 2026 -0700"
      },
      "message": "Merge 1.6.1 changes back to patch.\n"
    },
    {
      "commit": "a462f18722ce31c449f31b2f04bfa531825e2624",
      "tree": "25d542bee3d6d1fec8db49a257286260f5efca6f",
      "parents": [
        "336d5e80219159958dfa3e1e6662aac8fdc6a7cc",
        "894cb2ec159f734a71795888e1c225759efe9ae8"
      ],
      "author": {
        "name": "Mike Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Aug 06 00:18:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 00:18:53 2026 -0700"
      },
      "message": "GUACAMOLE-2315: Merge fix for Docker libwebsockets build (disable HTTP/3)."
    },
    {
      "commit": "894cb2ec159f734a71795888e1c225759efe9ae8",
      "tree": "25d542bee3d6d1fec8db49a257286260f5efca6f",
      "parents": [
        "336d5e80219159958dfa3e1e6662aac8fdc6a7cc"
      ],
      "author": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Thu Aug 06 09:57:23 2026 +0300"
      },
      "committer": {
        "name": "Heyzi",
        "email": "aaplatonov@sberdevices.ru",
        "time": "Thu Aug 06 09:57:23 2026 +0300"
      },
      "message": "GUACAMOLE-2315: Disable HTTP/3 support when building libwebsockets.\n\nlibwebsockets 5.0.0 enables HTTP/3 by default, and HTTP/3 in turn forces\nLWS_WITH_GNUTLS on, for which the builder stage installs no packages. As the\nversion pattern for libwebsockets is unpinned, that release is selected\nautomatically and the build fails.\n\nNothing within guacd requires HTTP/3, libwebsockets being used only for\nKubernetes support. Disabling it leaves libwebsockets building against the\nOpenSSL already present in the image, and avoids pinning the version.\n"
    },
    {
      "commit": "de97609007c088b5e6afd827eff5e9076013a247",
      "tree": "c264ff36d885c301fbf7492a21223fe0de98afc0",
      "parents": [
        "6719b20d09b767d30915c5e1c626a7a72fc75a59",
        "01734a39fc013910b937a738a0a92846a53c005d"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Tue Jul 28 01:57:17 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Tue Jul 28 01:57:17 2026 -0700"
      },
      "message": "Merge changes from patch branch back to main.\n"
    },
    {
      "commit": "01734a39fc013910b937a738a0a92846a53c005d",
      "tree": "c308dbcad618f25e9cb1654e544bb82c82c51340",
      "parents": [
        "d69b3dc05673b153e7fdb51c15930210697fe7d0",
        "336d5e80219159958dfa3e1e6662aac8fdc6a7cc"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Tue Jul 28 01:57:16 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Tue Jul 28 01:57:16 2026 -0700"
      },
      "message": "Merge 1.6.1 changes back to patch.\n"
    },
    {
      "commit": "336d5e80219159958dfa3e1e6662aac8fdc6a7cc",
      "tree": "924416017fae246e051b21152862e88eccda2fc7",
      "parents": [
        "c942b8b71979e03598ac82369af82eaa1d3f0234",
        "0f11550c58d7cbdc44226ba0d5b2c1be6c8deea6"
      ],
      "author": {
        "name": "Mike Jumper",
        "email": "mjumper@apache.org",
        "time": "Tue Jul 28 01:56:47 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 01:56:47 2026 -0700"
      },
      "message": "GUACAMOLE-2273: Merge support for FreeRDP AuthenticateEx callback."
    },
    {
      "commit": "0f11550c58d7cbdc44226ba0d5b2c1be6c8deea6",
      "tree": "81110a71b8a838dc0e8046d5e106bb472566e7d8",
      "parents": [
        "b855cbc2c19d7b8fa4e47b3c50cb6e2d9b28643d"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 20 19:57:45 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 27 11:09:50 2026 -0400"
      },
      "message": "GUACAMOLE-2273: Handle FreeRDP version support for authentication reasons; support requesting gateway authentication.\n"
    },
    {
      "commit": "b855cbc2c19d7b8fa4e47b3c50cb6e2d9b28643d",
      "tree": "52688764ada3d0262aed395ef5a6a5bb0bf247e6",
      "parents": [
        "95fe75ca517bddedfe67e603dca973e532d4ea12"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Wed Jul 15 13:05:10 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 20 17:10:43 2026 -0400"
      },
      "message": "GUACAMOLE-2273: De-duplicate RDP authentication code.\n"
    },
    {
      "commit": "95fe75ca517bddedfe67e603dca973e532d4ea12",
      "tree": "070fabfaff7af059497bada8247a18b454830e06",
      "parents": [
        "09a52b64a98992a9bee9d7287d960344d9ef6b16"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun May 03 21:34:17 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Wed Jul 15 21:20:04 2026 -0400"
      },
      "message": "GUACAMOLE-2273: Implement FreeRDP AuthenticateEx callback and handle deprecation of Authenticate callback.\n"
    },
    {
      "commit": "c942b8b71979e03598ac82369af82eaa1d3f0234",
      "tree": "f150a0e7e5c0b5b7ca3cfa694a706000cb336056",
      "parents": [
        "09a52b64a98992a9bee9d7287d960344d9ef6b16",
        "5ca9f80f53705a03000f10beb88921f6cc209a23"
      ],
      "author": {
        "name": "Mike Jumper",
        "email": "mjumper@apache.org",
        "time": "Wed Jul 15 17:05:21 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 17:05:21 2026 -0700"
      },
      "message": "GUACAMOLE-2294: Merge fixes for minor, non-accumulating resource leaks in guacd/terminal/telnet."
    },
    {
      "commit": "6719b20d09b767d30915c5e1c626a7a72fc75a59",
      "tree": "0cee6e862d848dbbb2c315c1d0da5c04cd6df0c2",
      "parents": [
        "6ea0433907a499de5acff379649690255f7aa29f",
        "d69b3dc05673b153e7fdb51c15930210697fe7d0"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 13 14:46:38 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 13 14:46:38 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "d69b3dc05673b153e7fdb51c15930210697fe7d0",
      "tree": "957d9ac5be6893f8198c2413fc0ed606d6200a0c",
      "parents": [
        "969b66f87a6be5fd9787d240e0d8b1bcf70f3865",
        "09a52b64a98992a9bee9d7287d960344d9ef6b16"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 13 14:46:04 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 13 14:46:04 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch branch.\n"
    },
    {
      "commit": "5ca9f80f53705a03000f10beb88921f6cc209a23",
      "tree": "3e39ec0741eef803788d1586ae51df148b1b9884",
      "parents": [
        "55f55caffb31a9bf88823c13d070c628ac29c68a"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun Jul 05 15:21:49 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 13 14:30:57 2026 -0400"
      },
      "message": "GUACAMOLE-2294: Handle telnet regex settings leaks.\n"
    },
    {
      "commit": "55f55caffb31a9bf88823c13d070c628ac29c68a",
      "tree": "142653adc01f6912c37a4b1a9559a3f841987567",
      "parents": [
        "257d9cdb2f6894acf19e9b850c3931ff48238d3e"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun Jul 05 15:10:24 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 13 14:30:57 2026 -0400"
      },
      "message": "GUACAMOLE-2294: Reorganize config file reading to avoid resource leak.\n"
    },
    {
      "commit": "257d9cdb2f6894acf19e9b850c3931ff48238d3e",
      "tree": "b120ce5f46cf97f3b5e5c746957769f8530d727d",
      "parents": [
        "4860abef318959fd5f05041d646980699f2cc842"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun Jul 05 14:47:31 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Mon Jul 13 14:30:49 2026 -0400"
      },
      "message": "GUACAMOLE-2294: Address multiple minor resource leaks.\n"
    },
    {
      "commit": "09a52b64a98992a9bee9d7287d960344d9ef6b16",
      "tree": "ba504a94aad851a210b00e76f6f2cf63aa4bac3f",
      "parents": [
        "ca3472b23c29d516ff331d34420f3d6f0437b8b5",
        "955d2a398e81a37b0afad14e5903ec39e8eb5a39"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Mon Jul 13 14:13:44 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 14:13:44 2026 -0400"
      },
      "message": "GUACAMOLE-2118: Merge correct non-deterministic hanging behavior encountered in guac_display."
    },
    {
      "commit": "955d2a398e81a37b0afad14e5903ec39e8eb5a39",
      "tree": "ba504a94aad851a210b00e76f6f2cf63aa4bac3f",
      "parents": [
        "5a20d3e781b0756be4d3b634cbd80147783d07fc"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 00:27:43 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 21:15:09 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Resize the cell tracking array when close_raw resizes an external buffer.\n"
    },
    {
      "commit": "5a20d3e781b0756be4d3b634cbd80147783d07fc",
      "tree": "5589d072881ac172e048fa25dbaaf66859fdac3c",
      "parents": [
        "1221b59fd12f28b1d2a5db49bd51b626d340568f"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sat Jul 11 23:45:39 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 21:15:09 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Automatically detach external layer buffers when freeing layers.\n"
    },
    {
      "commit": "1221b59fd12f28b1d2a5db49bd51b626d340568f",
      "tree": "9ccd3f55881adf00179994f34f9d371eafadf9fd",
      "parents": [
        "704fdc487581195cc5bfccad1b816527c24153b2"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sat Jul 11 17:36:09 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 21:15:09 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Defer destruction of removed layers until no operations reference them.\n"
    },
    {
      "commit": "704fdc487581195cc5bfccad1b816527c24153b2",
      "tree": "3b78fcb288c444d6c206cb6712f2ac4383214161",
      "parents": [
        "ca3472b23c29d516ff331d34420f3d6f0437b8b5"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sat Jul 11 16:08:24 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 21:15:08 2026 -0700"
      },
      "message": "GUACAMOLE-2118: Correct potential infinite loop in guac_display_frame_complete().\n"
    },
    {
      "commit": "6ea0433907a499de5acff379649690255f7aa29f",
      "tree": "436b6fc82d7595b4e0adfad2975812e78f85b4e9",
      "parents": [
        "8925e510dc2c442a3c1ca33cc5cc13c61b66210f",
        "969b66f87a6be5fd9787d240e0d8b1bcf70f3865"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun Jul 12 22:48:04 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun Jul 12 22:48:04 2026 -0400"
      },
      "message": "Merge patch branch changes to main.\n"
    },
    {
      "commit": "969b66f87a6be5fd9787d240e0d8b1bcf70f3865",
      "tree": "c7a589c5793e984180eb7e1666a837b7bf9d9100",
      "parents": [
        "7da3d87b3bb416c139f21deb6b92c60fe5392d09",
        "ca3472b23c29d516ff331d34420f3d6f0437b8b5"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun Jul 12 22:46:14 2026 -0400"
      },
      "committer": {
        "name": "Virtually Nick",
        "email": "vnick@apache.org",
        "time": "Sun Jul 12 22:46:14 2026 -0400"
      },
      "message": "Merge 1.6.1 changes to patch branch.\n"
    },
    {
      "commit": "ca3472b23c29d516ff331d34420f3d6f0437b8b5",
      "tree": "5fa6965da7dc7b407ab20592239609f05e42db2b",
      "parents": [
        "a53f4cc5ff38bca698418197f6c968c23403d061",
        "6f4b4516350605f7a3135ef7db18b367d4188ae9"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Sun Jul 12 22:43:11 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 22:43:11 2026 -0400"
      },
      "message": "GUACAMOLE-2270: Merge Avoid ABBA deadlock between guac_display_dup() and frame flush."
    },
    {
      "commit": "7da3d87b3bb416c139f21deb6b92c60fe5392d09",
      "tree": "1e313361aaf3e8c8d87ca9064209cca5c7bfce79",
      "parents": [
        "0dfd36f4cb3e237523c261235b52a715f8247b4f",
        "c3c4685be6bc528870f2c2fe55e071df339280f3"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Sun Jul 12 22:41:54 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 22:41:54 2026 -0400"
      },
      "message": "GUACAMOLE-2136: Merge correct constness of results per GCC warnings."
    },
    {
      "commit": "a53f4cc5ff38bca698418197f6c968c23403d061",
      "tree": "b4c69fd3a653d85690f9eccfff2de9cf7de68074",
      "parents": [
        "2a4e793f6e3c3489df0ecccc435050b762fa155b",
        "9fe71ed8711e4e65e4448ab549c027d0ba86b801"
      ],
      "author": {
        "name": "Virtually Nick",
        "email": "necouchman@users.noreply.github.com",
        "time": "Sun Jul 12 22:36:43 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 22:36:43 2026 -0400"
      },
      "message": "GUACAMOLE-2182: Merge automatically include config.h in every relevant .c file."
    },
    {
      "commit": "9fe71ed8711e4e65e4448ab549c027d0ba86b801",
      "tree": "b4c69fd3a653d85690f9eccfff2de9cf7de68074",
      "parents": [
        "2a4e793f6e3c3489df0ecccc435050b762fa155b"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sat Jul 11 16:48:57 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 17:15:30 2026 -0700"
      },
      "message": "GUACAMOLE-2182: Automatically include config.h in every relevant .c file.\n"
    },
    {
      "commit": "c3c4685be6bc528870f2c2fe55e071df339280f3",
      "tree": "1e313361aaf3e8c8d87ca9064209cca5c7bfce79",
      "parents": [
        "0dfd36f4cb3e237523c261235b52a715f8247b4f"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sat Jul 11 16:47:30 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 17:13:36 2026 -0700"
      },
      "message": "GUACAMOLE-2136: Correct constness of results per GCC warnings.\n"
    },
    {
      "commit": "6f4b4516350605f7a3135ef7db18b367d4188ae9",
      "tree": "410a1b36adc7e8e3ed39e425c368adaec3fb2e7a",
      "parents": [
        "2a4e793f6e3c3489df0ecccc435050b762fa155b"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sat Jul 11 21:15:11 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Sun Jul 12 17:03:48 2026 -0700"
      },
      "message": "GUACAMOLE-2270: Avoid ABBA deadlock between guac_display_dup() and frame flush.\n"
    },
    {
      "commit": "8925e510dc2c442a3c1ca33cc5cc13c61b66210f",
      "tree": "2659c43636d9a2041ce3740e3e5ff43cca920375",
      "parents": [
        "d790c1a1cfb08903f5169e6a8389be0cab0cbe15",
        "0dfd36f4cb3e237523c261235b52a715f8247b4f"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Jul 09 00:32:41 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Jul 09 00:32:41 2026 -0700"
      },
      "message": "Merge changes from patch branch back to main.\n"
    },
    {
      "commit": "0dfd36f4cb3e237523c261235b52a715f8247b4f",
      "tree": "3f44079f9d3f02d9432dfe516c814bcf8aadd064",
      "parents": [
        "889ad1cddc6b58b99b3cf5895609419ff6530797",
        "2a4e793f6e3c3489df0ecccc435050b762fa155b"
      ],
      "author": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Jul 09 00:32:41 2026 -0700"
      },
      "committer": {
        "name": "Michael Jumper",
        "email": "mjumper@apache.org",
        "time": "Thu Jul 09 00:32:41 2026 -0700"
      },
      "message": "Merge 1.6.1 changes back to patch.\n"
    }
  ],
  "next": "2a4e793f6e3c3489df0ecccc435050b762fa155b"
}
