GStreamer 1.28.0 new stable feature release

Tim-Philipp Müller via gstreamer-devel <[email protected]> Tue, 27 Jan 2026 19:52:57 +0000
Newsgroups gmane.comp.video.gstreamer.devel
Message-ID <[email protected]>
--=-2hMMLyDE6idd8OOuPThp
Content-Type: multipart/mixed; boundary="=-CT+CEBDQK8dK3UNdR+qK"

--=-CT+CEBDQK8dK3UNdR+qK
Content-Type: multipart/alternative; boundary="=-d2FarJdXHUXvnPe3fuON"

--=-d2FarJdXHUXvnPe3fuON
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

The GStreamer team is thrilled to announce a new major feature release
of your favourite cross-platform multimedia framework!

The 1.28 release series adds new features on top of the 1.26 series and
is part of the API and ABI-stable 1.x release series.

As always, this release is again packed with new features, bug fixes
and many other improvements.

Release notes=C2=A0with details about changes and fixed bugs can be found
at:

   https://gstreamer.freedesktop.org/releases/1.28/


Highlights:

 * AMD HIP plugin and integration helper library
 * Vulkan Video AV1 and VP9 decoding, H.264 encoding, and 10-bit
   support for H.265 decoder
 * waylandsink: Parse and set the HDR10 metadata and other color
   management improvements
 * Audio source separation element based on demucs in Rust
 * Analytics combiner and splitter elements plus batch meta to batch
   buffers from one or more streams
 * LiteRT inference element; move modelinfo to analytics lib; add
   script to help with modelinfo generation and upgrade
 * Add general classifier tensor-decoder, facedetector, and more
   analytics convenience API
 * New tensordecodebin element to auto-plug compatible tensor decoders
   based on their caps and many other additions and improvements
 * Add a burn-based YOLOX inference element and a YOLOX tensor decoder
   in Rust
 * applemedia: VideoToolbox VP9 and AV1 hardware-accelerated decoding
   support, and 10-bit HEVC encoding
 * Add new GIF decoder element in Rust with looping support
 * input-selector: implements a two-phase sinkpad switch now to avoid
   races when switching input pads
 * The inter wormhole sink and source elements gained a way to forward
   upstream events to the producer as well as new fine-tuning
   properties
 * webrtcsink: add renegotiation support and support for va hardware
   encoders
 * webrtc WHEP client and server signaller
 * New ST-2038 ancillary data combiner and extractor elements
 * fallbacksrc gained support for encoded streams
 * flv: enhanced rtmp H.265 video support, and support for multitrack
   audio
 * glupload: Implement udmabuf uploader to share buffers between
   software decoders/sources and GPUs, display engines (wayland), and
   other dma devices
 * video: Add crop, scale, rotate, flip, shear and more GstMeta
   transformation
 * New task pool GstContext to share a thread pool amongst elements for
   better resource management and performance, especially for video
   conversion and compositing
 * New Deepgram speech-to-text transcription plugin and many other
   translation and transcription improvements
 * Speech synthesizers: expose new "compress" overflow mode that can
   speed up audio while preserving pitch
 * ElevenLabs voice cloning element and support for Speechmatics
   speaker identification API
 * textaccumulate: new element for speech synthesis or translation
   preprocessing
 * New vmaf element to calculate perceptual video quality assessment
   scores using Netflix's VMAF framework
 * decodebin3: expose KLV, ID3 PES and ST-2038 ancillary data streams
   with new metadata GstStream type
 * New MPEG-H audio decoding plugin plus MP4 demuxing support
 * LCEVC: Add autoplugging decoding support for LCEVC H265 and H266
   video streams and LCEVC H.265 and H.266 encoders
 * RTP "robust MPEG audio", raw audio (L8, L16, L24), and SMPTE ST291
   ancillary metadata payloaders/depayloaders in Rust
 * Add a Rust-based icecastsink element with AAC support
 * The Windows IPC plugin gained support for passing generic data in
   addition to raw audio/video, and various properties
 * New D3D12 interlace and overlay compositor elements, plus many other
   D3D12 improvements
 * Blackmagic Decklink elements gained support for capturing and
   outputting all types of VANC via GstAncillaryMeta
 * GstLogContext API to reduce log spam in several components and
   `GST_DEBUG_ONCE` (etc) convenience macros to log things only once
 * hlssink3, hlscmafsink: Support the use of a single media file, plus
   I-frame only playlist support
 * Webkit: New wpe2 plugin making use of the "WPE Platform API"
 * MPEG-TS demuxer can now disable skew corrections
 * New Qt6 QML render source element
 * qml6gloverlay: support directly passing a QQuickItem for QML the
   render tree
 * unifxfdsink: Add a property to allow copying to make sink usable
   with more upstream elements
 * dots-viewer: Improve dot file generation and interactivity
 * Python bindings: more syntactic sugar, analytics API improvements
   and type annotations
 * cerbero: add support for Python wheel packaging, Windows ARM64, new
   iOS xcframework, Gtk4 on macOS and Windows, and more plugins
 * Smaller binary sizes of Rust plugins in Windows and Android binary
   packages
 * Peel: New C++ bindings for GStreamer
 * Lots of new plugins, features, performance improvements and bug
   fixes
 * Countless bug fixes, build fixes, memory leak fixes, and other
   stability and reliability improvements

Many thanks to everyone who contributed to this release!

Binaries for Android, iOS, Mac OS X and Windows should be available
soon.

As always, please let us know of any issues you run into by filing an
issue or Merge Request in=C2=A0GitLab [1]:

Thanks!


[1] GitLab https://gitlab.freedesktop.org/gstreamer/gstreamer/

--=-d2FarJdXHUXvnPe3fuON
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html><head><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style><style>pre,code,address {
  margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}
ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}
blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}
</style></head><body style=3D"overflow-wrap: break-word; -webkit-nbsp-mode:=
 space; line-break: after-white-space;" link=3D"#0000ff" vlink=3D"#ff0000" =
bgcolor=3D"#ffffff"><p></p><div></div><div>The GStreamer team is thrilled t=
o announce a new major feature release of your favourite cross-platform mul=
timedia framework!</div><div><br></div><div>The 1.28 release series adds ne=
w features on top of the 1.26 series and is part of the API and ABI-stable =
1.x release series.</div><div><br></div><div>As always, this release is aga=
in packed with new features, bug fixes and many other improvements.</div><d=
iv><div></div></div><div><br></div><div style=3D"caret-color: rgb(46, 52, 5=
4); color: rgb(46, 52, 54); font-family: Cantarell; font-size: 14.666667px;=
 font-style: normal; font-variant-caps: normal; font-weight: 400; letter-sp=
acing: normal; orphans: auto; text-align: start; text-indent: 0px; text-tra=
nsform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit=
-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-width: 0px; t=
ext-decoration: none;"><b>Release notes</b><span style=3D"font-weight: 400;=
"><span class=3D"Apple-converted-space">&nbsp;</span>with details about cha=
nges and fixed bugs can be found at:</span></div><div style=3D"caret-color:=
 rgb(46, 52, 54); color: rgb(46, 52, 54); font-family: Cantarell; font-size=
: 14.666667px; font-style: normal; font-variant-caps: normal; font-weight: =
400; letter-spacing: normal; orphans: auto; text-align: start; text-indent:=
 0px; text-transform: none; white-space: normal; widows: auto; word-spacing=
: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke=
-width: 0px; text-decoration: none;"><br></div><div style=3D"caret-color: r=
gb(46, 52, 54); color: rgb(46, 52, 54); font-family: Cantarell; font-size: =
14.666667px; font-style: normal; font-variant-caps: normal; font-weight: 40=
0; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0=
px; text-transform: none; white-space: normal; widows: auto; word-spacing: =
0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-w=
idth: 0px; text-decoration: none; margin-left: 3ch;"><a href=3D"https://gst=
reamer.freedesktop.org/releases/1.28/" style=3D"color: rgb(46, 52, 54);">ht=
tps://gstreamer.freedesktop.org/releases/1.28/</a></div><div><br></div><div=
><br></div><div><b>Highlights:</b></div><div><br></div><ul><li>AMD HIP plug=
in and integration helper library</li><li>Vulkan Video AV1 and VP9 decoding=
, H.264 encoding, and 10-bit support for H.265 decoder</li><li>waylandsink:=
 Parse and set the HDR10 metadata and other color management improvements</=
li><li>Audio source separation element based on demucs in Rust</li><li>Anal=
ytics combiner and splitter elements plus batch meta to batch buffers from =
one or more streams</li><li>LiteRT inference element; move modelinfo to ana=
lytics lib; add script to help with modelinfo generation and upgrade</li><l=
i>Add general classifier tensor-decoder, facedetector, and more analytics c=
onvenience API</li><li>New tensordecodebin element to auto-plug compatible =
tensor decoders based on their caps and many other additions and improvemen=
ts</li><li>Add a burn-based YOLOX inference element and a YOLOX tensor deco=
der in Rust</li><li>applemedia: VideoToolbox VP9 and AV1 hardware-accelerat=
ed decoding support, and 10-bit HEVC encoding</li><li>Add new GIF decoder e=
lement in Rust with looping support</li><li>input-selector: implements a tw=
o-phase sinkpad switch now to avoid races when switching input pads</li><li=
>The inter wormhole sink and source elements gained a way to forward upstre=
am events to the producer as well as new fine-tuning properties</li><li>web=
rtcsink: add renegotiation support and support for va hardware encoders</li=
><li>webrtc WHEP client and server signaller</li><li>New ST-2038 ancillary =
data combiner and extractor elements</li><li>fallbacksrc gained support for=
 encoded streams</li><li>flv: enhanced rtmp H.265 video support, and suppor=
t for multitrack audio</li><li>glupload: Implement udmabuf uploader to shar=
e buffers between software decoders/sources and GPUs, display engines (wayl=
and), and other dma devices</li><li>video: Add crop, scale, rotate, flip, s=
hear and more GstMeta transformation</li><li>New task pool GstContext to sh=
are a thread pool amongst elements for better resource management and perfo=
rmance, especially for video conversion and compositing</li><li>New Deepgra=
m speech-to-text transcription plugin and many other translation and transc=
ription improvements</li><li>Speech synthesizers: expose new "compress" ove=
rflow mode that can speed up audio while preserving pitch</li><li>ElevenLab=
s voice cloning element and support for Speechmatics speaker identification=
 API</li><li>textaccumulate: new element for speech synthesis or translatio=
n preprocessing</li><li>New vmaf element to calculate perceptual video qual=
ity assessment scores using Netflix's VMAF framework</li><li>decodebin3: ex=
pose KLV, ID3 PES and ST-2038 ancillary data streams with new metadata GstS=
tream type</li><li>New MPEG-H audio decoding plugin plus MP4 demuxing suppo=
rt</li><li>LCEVC: Add autoplugging decoding support for LCEVC H265 and H266=
 video streams and LCEVC H.265 and H.266 encoders</li><li>RTP "robust MPEG =
audio", raw audio (L8, L16, L24), and SMPTE ST291 ancillary metadata payloa=
ders/depayloaders in Rust</li><li>Add a Rust-based icecastsink element with=
 AAC support</li><li>The Windows IPC plugin gained support for passing gene=
ric data in addition to raw audio/video, and various properties</li><li>New=
 D3D12 interlace and overlay compositor elements, plus many other D3D12 imp=
rovements</li><li>Blackmagic Decklink elements gained support for capturing=
 and outputting all types of VANC via GstAncillaryMeta</li><li>GstLogContex=
t API to reduce log spam in several components and `GST_DEBUG_ONCE` (etc) c=
onvenience macros to log things only once</li><li>hlssink3, hlscmafsink: Su=
pport the use of a single media file, plus I-frame only playlist support</l=
i><li>Webkit: New wpe2 plugin making use of the "WPE Platform API"</li><li>=
MPEG-TS demuxer can now disable skew corrections</li><li>New Qt6 QML render=
 source element</li><li>qml6gloverlay: support directly passing a QQuickIte=
m for QML the render tree</li><li>unifxfdsink: Add a property to allow copy=
ing to make sink usable with more upstream elements</li><li>dots-viewer: Im=
prove dot file generation and interactivity</li><li>Python bindings: more s=
yntactic sugar, analytics API improvements and type annotations</li><li>cer=
bero: add support for Python wheel packaging, Windows ARM64, new iOS xcfram=
ework, Gtk4 on macOS and Windows, and more plugins</li><li>Smaller binary s=
izes of Rust plugins in Windows and Android binary packages</li><li>Peel: N=
ew C++ bindings for GStreamer</li><li>Lots of new plugins, features, perfor=
mance improvements and bug fixes</li><li>Countless bug fixes, build fixes, =
memory leak fixes, and other stability and reliability improvements</li></u=
l><div><br></div><div><b>Many thanks to everyone who contributed to this re=
lease!</b></div><div><b><br></b></div><div><b>Binaries</b> for Android, iOS=
, Mac OS X and Windows should be available soon.</div><div><br></div><div>A=
s always, please let us know of any issues you run into by filing an issue =
or Merge Request in&nbsp;<a href=3D"https://gitlab.freedesktop.org/gstreame=
r/gstreamer/">GitLab</a>:</div><div><br></div><div>Thanks!</div><div><span>=
</span></div><div><br></div><div><span></span></div></body></html>

--=-d2FarJdXHUXvnPe3fuON--

--=-CT+CEBDQK8dK3UNdR+qK
Content-Disposition: attachment; filename="GStreamer-1.28.0.txt"
Content-Type: text/plain; name="GStreamer-1.28.0.txt"; charset="UTF-8"
Content-Transfer-Encoding: base64

aHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVy
LTEuMjguMC50YXIueHoKNmM4Njc2YmMzOWEyYjQxMDg0ZmQ0YjIxZDJjMzc5ODVjNjlhYzk3OWMw
M2NlNTk1NzVkYjk0NWEzYTYyM2FmZAoKaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3Jn
L3NyYy9nc3QtcGx1Z2lucy1iYXNlL2dzdC1wbHVnaW5zLWJhc2UtMS4yOC4wLnRhci54egplYWNl
NzlkNjNiZDJlZGViMjA0ODc3N2VhOWY0MzJkOGI2ZTczMzZlNjU2Y2JjMjBkYTQ1MGY2MjM1NzU4
YjMxCgpodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdv
b2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjI4LjAudGFyLnh6CmQ5NzcwMGYzNDZmZGY5ZWY1NDYxYzAz
NWUyM2VkMWNlOTE2Y2E3YTMxZDZkZGFkOTg3Zjc3NDc3NDM2MWRiNzcKCmh0dHBzOi8vZ3N0cmVh
bWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtdWdseS9nc3QtcGx1Z2lucy11Z2x5
LTEuMjguMC50YXIueHoKNzQzZjI4YjkzYzk0MWUwYWYzODVhYjE5M2EyMTUwZjlmNzliYzYyNjlh
ZGM2MzlmNjQ3NWQ5ODQ3OTRjMjE3YwoKaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3Jn
L3NyYy9nc3QtcGx1Z2lucy1iYWQvZ3N0LXBsdWdpbnMtYmFkLTEuMjguMC50YXIueHoKMzJkODI1
MDQxZTU3NzVmYzliZjllOGMzOGUzYTVjNDZjMTQ0MWVlZTY3ZjgxMTI1NzI0NTBhOWMyM2M4MzVm
MAoKaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtbGliYXYvZ3N0LWxp
YmF2LTEuMjguMC50YXIueHoKZTNjOTNkYjdkYTJkYTNiMjM3NGNjYzJlNzM5NDMxNmY5MTkyNDYw
YWJkZWE4MTY1MTY1Mjc5MWQ0NmNjYjhmYgoKaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Au
b3JnL3NyYy9nc3QtcnRzcC1zZXJ2ZXIvZ3N0LXJ0c3Atc2VydmVyLTEuMjguMC50YXIueHoKNWVk
MDkzOGVhMGZjMWRmMjcwOWNjOTM5MjQ1ZDkzMjk0ZjA5YjJkNzIyMGUxOWY3ZmNkYjMwNmNlMmI2
Y2VlNQoKaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtZWRpdGluZy1z
ZXJ2aWNlcy9nc3QtZWRpdGluZy1zZXJ2aWNlcy0xLjI4LjAudGFyLnh6CmUyYmU4NzNhNjM2Y2E3
ODFjYjFlYTM2Mzg2NzE3NGYwOGMzMTI2YTU1ZjM3ZmM2Y2Q4ZTk3NzE1YWVlZTljMDUKCmh0dHBz
Oi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXB5dGhvbi9nc3QtcHl0aG9uLTEu
MjguMC50YXIueHoKOWViYTg4MmE0MTNjZjA2YmYwNTc1ZTYzNWY3M2MwYTJkMDFmM2FiZGY3NmUx
OGY4MDRhOTBmM2ZmNmEwYWEyZAoKaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3Ny
Yy9nc3QtZGV2dG9vbHMvZ3N0LWRldnRvb2xzLTEuMjguMC50YXIueHoKMTg0YTY4YjJjOTY3MjEw
YzZkZGFjYWQ5YThlMmM3ZWJjNWU4ZGY5YjEwZmQ3YjcyYjdmNzU4MGNjMGE2MGZiMQoKaHR0cHM6
Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXItc2hhcnAvZ3N0cmVhbWVy
LXNoYXJwLTEuMjguMC50YXIueHoKNmQ3ODBkZWY4ODc4NzdhZTljMDRkMTJkYmRkNGQ1MjA3YTYx
MGE0MjZlMzVlNDk5YzgyMDM4MTQ4NGMzMDQ2YQoKaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0
b3Aub3JnL3NyYy9nc3RyZWFtZXItZG9jcy9nc3RyZWFtZXItZG9jcy0xLjI4LjAudGFyLnh6Cjg1
NjI5MWZiNTNjYjRiMDc5NzY5MDgxMGY0OGNiZmNlZDliOTNiNjNlNzVkNzY0NTRiOTE2NTQ4NGY0
OGY4NzcKCg==


--=-CT+CEBDQK8dK3UNdR+qK--

--=-2hMMLyDE6idd8OOuPThp
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEE1jcDLkW4xlhblFZWXS7ub280nXwFAml5F5kACgkQXS7ub280
nXxAKQ//dLyZ0l51zqOI0nsGzmf0TEyhymA5L+I6MTXHdu/jrKbkhH2Q35bz4xDE
obRuzPSEAlOsy5ht00XyzR2BJx+8IFl2bFHDruTArQV8F9BgQ4qp+N10lBd9AfU6
3HP91LWUAJUFkr9l7nqF4LBvYzo0FrRVhEphEIEJ6gExQO6gvu/NUCe0HvNZWmOg
/VVtGFdFlDWYuTIHM7kjIqz1KTKini+xIPOJRpSWpvo7A6ez8p+IxjR3rPkL8KWm
t9TfLVrXMiBjBi1NvUabjEkwM8i0JZ9vGS1g9iMMG3RVKY33XNXSN+Q0Cd/fs7rr
eEhIKmpeL9t/JmGOGTCn5LIEoaqCHczIYEHX5f8jr+4jlH82I79VKQYMSUs2LTTr
zZsgvGLBYtjG5A7gtB9d6WiakC4dLygM0nIKGXATceT1qRoPqyqx9dho7KTJu38w
jGdTYqnW7Wkdq8xHOwTNdjZ8V8dIlGCZMa3dN5JUhe7hLfDwZ3nyE45kmBnI7T7j
S4FQfp7WNmylm5IiZZIq6f9ighWuzAHocfCGvNnm+j6GE9Nm1kunm7UNJYR0qjdj
PrtnGQejQ0/iXgvxD1fC9jCR7tJnPJ6qg0XABXqNvrUvWOjXUZI0yTqspCmlXHrP
DZItwBWHQecQC7w3CudBP6EfrVpoFJL3W0zJFl2kQSLgI3CCRe0=
=lubO
-----END PGP SIGNATURE-----

--=-2hMMLyDE6idd8OOuPThp--