<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>200584</bug_id>
          
          <creation_ts>2019-08-09 12:07:33 -0700</creation_ts>
          <short_desc>[GStreamer][WebRTC] Handle broken data in the libwebrtc GStreamer deocoders</short_desc>
          <delta_ts>2019-08-26 23:42:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Thibault Saunier">tsaunier</reporter>
          <assigned_to name="Thibault Saunier">tsaunier</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1559969</commentid>
    <comment_count>0</comment_count>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2019-08-09 12:07:33 -0700</bug_when>
    <thetext>[GStreamer][WebRTC] Handle broken data in the libwebrtc GStreamer deocoders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559970</commentid>
    <comment_count>1</comment_count>
      <attachid>375940</attachid>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2019-08-09 12:09:26 -0700</bug_when>
    <thetext>Created attachment 375940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560226</commentid>
    <comment_count>2</comment_count>
      <attachid>375940</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-08-10 04:21:03 -0700</bug_when>
    <thetext>Comment on attachment 375940
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=375940&amp;action=review

&gt; Source/WebCore/ChangeLog:11
&gt; +        Listenning to parsers warnings and error messages (synhronously so that we react
&gt; +        right away) and requesting keyframes from the peer.
&gt; +
&gt; +        Also simplify the decoder code by trying to make decoding happen
&gt; +        in one single pass, also hidding away GStreamer threading and allowing
&gt; +        us to react as soon as the decoder/parser fails.

Fix spelling please :)

&gt; Source/WebCore/ChangeLog:23
&gt; +        * Scripts/webkitpy/style/checker.py:
&gt; +        * gstreamer/jhbuild.modules:
&gt; +        * gstreamer/patches/gst-plugins-bad-0001-h264parse-Post-a-WARNING-when-data-is-broken.patch: Added.

This seems copy/pasted from the Tools/ChangeLog, please remove

&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:103
&gt; +        auto sinkpad = gst_element_get_static_pad(capsfilter, &quot;sink&quot;);

Where is this unreffed?

&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:115
&gt; +                GError* err = nullptr;

Can you use a GUniqueOutPtr for this please?

&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:117
&gt; +                switch (GST_MESSAGE_TYPE(message)) {
&gt; +                case GST_MESSAGE_WARNING: {

As the code is the same for warnings and errors, perhaps there&apos;s way to simplify this with a if-test instead of a switch?

&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:343
&gt; +    GstElement* m_sink;
&gt;      GstElement* m_src;

Would it be doable to make these GRefPtr&lt;GstElement&gt; ?

&gt; Tools/ChangeLog:11
&gt; +        Listenning to parsers warnings and error messages (synhronously so that we react
&gt; +        right away) and requesting keyframes from the peer.
&gt; +
&gt; +        Also simplify the decoder code by trying to make decoding happen
&gt; +        in one single pass, also hidding away GStreamer threading and allowing
&gt; +        us to react as soon as the decoder/parser fails.

No need to copy this from WebCore/ChangeLog, you can leave it empty.

&gt; Tools/ChangeLog:19
&gt; +        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
&gt; +        (WebCore::GStreamerVideoDecoder::GStreamerVideoDecoder):
&gt; +        (WebCore::GStreamerVideoDecoder::pullSample):
&gt; +        (WebCore::H264Decoder::H264Decoder):
&gt; +        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:

This seems copy/pasted from WebCore/ChangeLog, please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560392</commentid>
    <comment_count>3</comment_count>
      <attachid>376062</attachid>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2019-08-12 08:01:34 -0700</bug_when>
    <thetext>Created attachment 376062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560393</commentid>
    <comment_count>4</comment_count>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2019-08-12 08:01:46 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #2)
&gt; Comment on attachment 375940 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=375940&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        Listenning to parsers warnings and error messages (synhronously so that we react
&gt; &gt; +        right away) and requesting keyframes from the peer.
&gt; &gt; +
&gt; &gt; +        Also simplify the decoder code by trying to make decoding happen
&gt; &gt; +        in one single pass, also hidding away GStreamer threading and allowing
&gt; &gt; +        us to react as soon as the decoder/parser fails.

Done, sorry about that. 

 
&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +        * Scripts/webkitpy/style/checker.py:
&gt; &gt; +        * gstreamer/jhbuild.modules:
&gt; &gt; +        * gstreamer/patches/gst-plugins-bad-0001-h264parse-Post-a-WARNING-when-data-is-broken.patch: Added.
&gt; 
&gt; This seems copy/pasted from the Tools/ChangeLog, please remove
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:103
&gt; &gt; +        auto sinkpad = gst_element_get_static_pad(capsfilter, &quot;sink&quot;);
&gt; 
&gt; Where is this unreffed?

Using adoptGRef() now.
 
&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:115
&gt; &gt; +                GError* err = nullptr;
&gt; 
&gt; Can you use a GUniqueOutPtr for this please?

Done.

&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:117
&gt; &gt; +                switch (GST_MESSAGE_TYPE(message)) {
&gt; &gt; +                case GST_MESSAGE_WARNING: {
&gt; 
&gt; As the code is the same for warnings and errors, perhaps there&apos;s way to
&gt; simplify this with a if-test instead of a switch?

Done.

&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:343
&gt; &gt; +    GstElement* m_sink;
&gt; &gt;      GstElement* m_src;
&gt; 
&gt; Would it be doable to make these GRefPtr&lt;GstElement&gt; ?

It could but as it is own by the pipeline I am not sure what it would bring to the table?
 
&gt; &gt; Tools/ChangeLog:11
&gt; &gt; +        Listenning to parsers warnings and error messages (synhronously so that we react
&gt; &gt; +        right away) and requesting keyframes from the peer.
&gt; &gt; +
&gt; &gt; +        Also simplify the decoder code by trying to make decoding happen
&gt; &gt; +        in one single pass, also hidding away GStreamer threading and allowing
&gt; &gt; +        us to react as soon as the decoder/parser fails.
&gt; 
&gt; No need to copy this from WebCore/ChangeLog, you can leave it empty.

Done, I just rewrote the whole thing without using `prepare-changelog -g` I  have the impression is not quite right with that (or I do not understand how it is supposed to work!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560436</commentid>
    <comment_count>5</comment_count>
      <attachid>376062</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-12 09:56:08 -0700</bug_when>
    <thetext>Comment on attachment 376062
Patch

Clearing flags on attachment: 376062

Committed r248530: &lt;https://trac.webkit.org/changeset/248530&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560437</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-12 09:56:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560439</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-12 09:57:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/54213369&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564926</commentid>
    <comment_count>8</comment_count>
      <attachid>376062</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-08-26 06:35:20 -0700</bug_when>
    <thetext>Comment on attachment 376062
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=376062&amp;action=review

&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:109
&gt; +            caps = gst_caps_new_simple(Caps(), &quot;parsed&quot;, G_TYPE_BOOLEAN, TRUE, nullptr);

I think we&apos;re leaking here and in the else because we should be adopting. Am I missing anything?

&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:255
&gt; +        auto buffer = gst_sample_get_buffer(sample);

Aren&apos;t we leaking the buffer/sample here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564930</commentid>
    <comment_count>9</comment_count>
    <who name="Thibault Saunier">tsaunier</who>
    <bug_when>2019-08-26 06:52:32 -0700</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #8)
&gt; Comment on attachment 376062 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=376062&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:109
&gt; &gt; +            caps = gst_caps_new_simple(Caps(), &quot;parsed&quot;, G_TYPE_BOOLEAN, TRUE, nullptr);

Oops, indeed, the caps are leaked.

&gt; I think we&apos;re leaking here and in the else because we should be adopting. Am
&gt; I missing anything?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:255
&gt; &gt; +        auto buffer = gst_sample_get_buffer(sample);
&gt; 
&gt; Aren&apos;t we leaking the buffer/sample here?

No, get_buffer returns &quot;transfer none&quot; and the sample ownership is passed to the frame later in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564931</commentid>
    <comment_count>10</comment_count>
      <attachid>376062</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-08-26 06:56:05 -0700</bug_when>
    <thetext>Comment on attachment 376062
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=376062&amp;action=review

&gt;&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:109
&gt;&gt; +            caps = gst_caps_new_simple(Caps(), &quot;parsed&quot;, G_TYPE_BOOLEAN, TRUE, nullptr);
&gt; 
&gt; I think we&apos;re leaking here and in the else because we should be adopting. Am I missing anything?

Looks like a leak yes.

&gt;&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:255
&gt;&gt; +        auto buffer = gst_sample_get_buffer(sample);
&gt; 
&gt; Aren&apos;t we leaking the buffer/sample here?

The buffer is transfer-none. The sample is adopted in GStreamerVideoFrameLibWebRTC(). So I think we&apos;re fine there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565270</commentid>
    <comment_count>11</comment_count>
      <attachid>376062</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-08-26 23:42:32 -0700</bug_when>
    <thetext>Comment on attachment 376062
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=376062&amp;action=review

&gt;&gt;&gt;&gt; Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:255
&gt;&gt;&gt;&gt; +        auto buffer = gst_sample_get_buffer(sample);
&gt;&gt;&gt; 
&gt;&gt;&gt; Aren&apos;t we leaking the buffer/sample here?
&gt;&gt; 
&gt;&gt; No, get_buffer returns &quot;transfer none&quot; and the sample ownership is passed to the frame later in the code.
&gt; 
&gt; The buffer is transfer-none. The sample is adopted in GStreamerVideoFrameLibWebRTC(). So I think we&apos;re fine there?

Yes, we are.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375940</attachid>
            <date>2019-08-09 12:09:26 -0700</date>
            <delta_ts>2019-08-12 08:01:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200584-20190809150924.patch</filename>
            <type>text/plain</type>
            <size>17261</size>
            <attacher name="Thibault Saunier">tsaunier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE2ZTQzYmZlNDlhOWE0
ZWVmNTkwMGRhM2FlNGY1NzZkZDYxYzE2Yy4uZmFjNWIyMmNhMzNmYTZkODE1NzUwNWI0MjY3ZjU3
OTI2MDE5Yzc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE5LTA4LTA5ICBUaGli
YXVsdCBTYXVuaWVyICA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XVtXZWJSVENdIEhhbmRsZSBicm9rZW4gZGF0YSBpbiB0aGUgbGlid2VicnRjIEdTdHJlYW1lciBk
ZW9jb2RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMDU4NAorCisgICAgICAgIExpc3Rlbm5pbmcgdG8gcGFyc2VycyB3YXJuaW5ncyBhbmQgZXJy
b3IgbWVzc2FnZXMgKHN5bmhyb25vdXNseSBzbyB0aGF0IHdlIHJlYWN0CisgICAgICAgIHJpZ2h0
IGF3YXkpIGFuZCByZXF1ZXN0aW5nIGtleWZyYW1lcyBmcm9tIHRoZSBwZWVyLgorCisgICAgICAg
IEFsc28gc2ltcGxpZnkgdGhlIGRlY29kZXIgY29kZSBieSB0cnlpbmcgdG8gbWFrZSBkZWNvZGlu
ZyBoYXBwZW4KKyAgICAgICAgaW4gb25lIHNpbmdsZSBwYXNzLCBhbHNvIGhpZGRpbmcgYXdheSBH
U3RyZWFtZXIgdGhyZWFkaW5nIGFuZCBhbGxvd2luZworICAgICAgICB1cyB0byByZWFjdCBhcyBz
b29uIGFzIHRoZSBkZWNvZGVyL3BhcnNlciBmYWlscy4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9HU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lclZpZGVvRGVjb2Rlcjo6R1N0cmVhbWVyVmlkZW9EZWNvZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclZpZGVvRGVjb2Rlcjo6cHVsbFNhbXBsZSk6CisgICAgICAgIChXZWJD
b3JlOjpIMjY0RGVjb2Rlcjo6SDI2NERlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcDoKKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKyAgICAgICAgKiBnc3Ry
ZWFtZXIvamhidWlsZC5tb2R1bGVzOgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1w
bHVnaW5zLWJhZC0wMDAxLWgyNjRwYXJzZS1Qb3N0LWEtV0FSTklORy13aGVuLWRhdGEtaXMtYnJv
a2VuLnBhdGNoOiBBZGRlZC4KKwogMjAxOS0wOC0wOSAgVGhpYmF1bHQgU2F1bmllciAgPHRzYXVu
aWVyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl1bV2ViUlRDXTogb3BlbmgyNjQg
ZW5jb2RlciBiaXRyYXRlIGlzIGluIGJpdHMgcGVyIHNlY29uZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRGVj
b2RlckZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0dTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkuY3BwCmluZGV4IDcxODk1MDJiNjRk
NzI2OWU4ZTY0MGRkNDIzMTE4MmQ2ZmYxYjViYmIuLmJiN2YwYzU5Y2FmYmJjOWQ0NzI3ODQ4ZTUz
ZDlmNDc3MWM4NDkyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlk
ZW9EZWNvZGVyRmFjdG9yeS5jcHAKQEAgLTU2LDYgKzU2LDggQEAgcHVibGljOgogICAgICAgICA6
IG1fcGljdHVyZUlkKDApCiAgICAgICAgICwgbV93aWR0aCgwKQogICAgICAgICAsIG1faGVpZ2h0
KDApCisgICAgICAgICwgbV9yZXF1aXJlUGFyc2UoZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0tl
eWZyYW1lKHRydWUpCiAgICAgICAgICwgbV9maXJzdEJ1ZmZlclB0cyhHU1RfQ0xPQ0tfVElNRV9O
T05FKQogICAgICAgICAsIG1fZmlyc3RCdWZmZXJEdHMoR1NUX0NMT0NLX1RJTUVfTk9ORSkKICAg
ICB7CkBAIC04Niw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fc3JjID0gbWFr
ZUVsZW1lbnQoImFwcHNyYyIpOwogCisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IG51
bGxwdHI7CiAgICAgICAgIGF1dG8gY2Fwc2ZpbHRlciA9IENyZWF0ZUZpbHRlcigpOwogICAgICAg
ICBhdXRvIGRlY29kZXIgPSBtYWtlRWxlbWVudCgiZGVjb2RlYmluIik7CiAKQEAgLTk0LDMwICs5
Nyw2OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2hlaWdodCA9IGNvZGVjU2V0dGluZ3MtPmhl
aWdodDsKICAgICAgICAgfQogCisgICAgICAgIG1fcGlwZWxpbmUgPSBtYWtlRWxlbWVudCgicGlw
ZWxpbmUiKTsKKyAgICAgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVs
aW5lLmdldCgpKTsKKworICAgICAgICBhdXRvIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChjYXBzZmlsdGVyLCAic2luayIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRl
Y29kZXIsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKGRlY29kZWJpblBhZEFkZGVkQ2IpLCBzaW5r
cGFkKTsKICAgICAgICAgLy8gTWFrZSB0aGUgZGVjb2RlciBvdXRwdXQgInBhcnNlZCIgZnJhbWVz
IG9ubHkgYW5kIGxldCB0aGUgbWFpbiBkZWNvZGViaW4KICAgICAgICAgLy8gZG8gdGhlIHJlYWwg
ZGVjb2RpbmcuIFRoaXMgYWxsb3dzIHVzIHRvIGhhdmUgb3B0aW1pemVkIGRlY29kaW5nL3JlbmRl
cmluZwogICAgICAgICAvLyBoYXBwZW5pbmcgaW4gdGhlIG1haW4gcGlwZWxpbmUuCi0gICAgICAg
IGdfb2JqZWN0X3NldChkZWNvZGVyLCAiY2FwcyIsIGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0
cmluZyhDYXBzKCkpKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGF1dG8gc2lua3BhZCA9IGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzaW5rIik7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZGVjb2RlciwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soZGVjb2RlYmlu
UGFkQWRkZWRDYiksIHNpbmtwYWQpOworICAgICAgICBpZiAobV9yZXF1aXJlUGFyc2UpIHsKKyAg
ICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlKENhcHMoKSwgInBhcnNlZCIsIEdf
VFlQRV9CT09MRUFOLCBUUlVFLCBudWxscHRyKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0QnVz
PiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlw
ZWxpbmUuZ2V0KCkpKSk7CiAKLSAgICAgICAgbV9waXBlbGluZSA9IG1ha2VFbGVtZW50KCJwaXBl
bGluZSIpOwotICAgICAgICBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxp
bmUuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNz
aW9uKGJ1cy5nZXQoKSk7CisgICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwg
InN5bmMtbWVzc2FnZTo6d2FybmluZyIsCisgICAgICAgICAgICAgICAgR19DQUxMQkFDSygrW10o
R3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgR1N0cmVhbWVyVmlkZW9EZWNvZGVyKiBqdXN0
VGhpcykgeworICAgICAgICAgICAgICAgIEdFcnJvciogZXJyID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6IHsKKyAgICAgICAgICAgICAgICAgICAgZ3N0
X21lc3NhZ2VfcGFyc2Vfd2FybmluZyhtZXNzYWdlLCAmZXJyLCBudWxscHRyKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyciwgR1NUX1NUUkVBTV9FUlJPUiwg
R1NUX1NUUkVBTV9FUlJPUl9ERUNPREUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QoanVzdFRoaXMtPnBpcGVsaW5lKCksICItLT4gbmVlZHMga2V5ZnJhbWUgKCVz
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLT5tZXNzYWdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGp1c3RUaGlzLT5tX25lZWRzS2V5ZnJhbWUgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdfY2xlYXJfZXJyb3IoJmVycik7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7CisgICAgICAgICAgICAgICAgICAgIGdz
dF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIsIG51bGxwdHIpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLCBHU1RfU1RSRUFNX0VSUk9SLCBH
U1RfU1RSRUFNX0VSUk9SX0RFQ09ERSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9J
TkZPX09CSkVDVChqdXN0VGhpcy0+cGlwZWxpbmUoKSwgIi0tPiBuZWVkcyBrZXlmcmFtZSAoJXMp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UpOworICAgICAgICAg
ICAgICAgICAgICAgICAganVzdFRoaXMtPm1fbmVlZHNLZXlmcmFtZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ19jbGVhcl9lcnJvcigmZXJyKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9KSwgdGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvKiBGSVhNRSAtIEhvdyBjb3VsZCB3ZSBoYW5kbGUgbWlzc2luZyBrZXlmcmFtZXMg
Y2FzZSB3ZSBkbyBub3QgcGx1ZyBwYXJzZXJzID8gKi8KKyAgICAgICAgICAgIGNhcHMgPSBnc3Rf
Y2Fwc19uZXdfZW1wdHlfc2ltcGxlKENhcHMoKSk7CisgICAgICAgIH0KKyAgICAgICAgZ19vYmpl
Y3Rfc2V0KGRlY29kZXIsICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CiAKLSAgICAgICAg
YXV0byBzaW5rID0gbWFrZUVsZW1lbnQoImFwcHNpbmsiKTsKLSAgICAgICAgZ3N0X2FwcF9zaW5r
X3NldF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9TSU5LKHNpbmspLCB0cnVlKTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChzaW5rLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0sobmV3U2FtcGxlQ2Fs
bGJhY2tUcmFtcCksIHRoaXMpOwotICAgICAgICAvLyBUaGlzIGlzIGFuIGVuY29kZXIsIGV2ZXJ5
dGhpbmcgc2hvdWxkIGhhcHBlbiBhcyBmYXN0IGFzIHBvc3NpYmxlIGFuZCBub3QKKyAgICAgICAg
bV9zaW5rID0gbWFrZUVsZW1lbnQoImFwcHNpbmsiKTsKKyAgICAgICAgZ3N0X2FwcF9zaW5rX3Nl
dF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9TSU5LKG1fc2luayksIHRydWUpOworICAgICAgICAvLyBU
aGlzIGlzIGFuIGRlY29kZXIsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhcHBlbiBhcyBmYXN0IGFzIHBv
c3NpYmxlIGFuZCBub3QKICAgICAgICAgLy8gYmUgc3luY2VkIG9uIHRoZSBjbG9jay4KLSAgICAg
ICAgZ19vYmplY3Rfc2V0KHNpbmssICJzeW5jIiwgZmFsc2UsIG51bGxwdHIpOworICAgICAgICBn
X29iamVjdF9zZXQobV9zaW5rLCAic3luYyIsIGZhbHNlLCBudWxscHRyKTsKIAotICAgICAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU4ocGlwZWxpbmUoKSksIG1fc3JjLCBkZWNvZGVyLCBjYXBz
ZmlsdGVyLCBzaW5rLCBudWxscHRyKTsKKyAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklO
KHBpcGVsaW5lKCkpLCBtX3NyYywgZGVjb2RlciwgY2Fwc2ZpbHRlciwgbV9zaW5rLCBudWxscHRy
KTsKICAgICAgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rKG1fc3JjLCBkZWNvZGVyKSkgewogICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwaXBlbGluZSgpLCAiQ291bGQgbm90IGxpbmsgc3Jj
IHRvIGRlY29kZXIuIik7CiAgICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VS
Uk9SOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rKGNhcHNmaWx0
ZXIsIHNpbmspKSB7CisgICAgICAgIGlmICghZ3N0X2VsZW1lbnRfbGluayhjYXBzZmlsdGVyLCBt
X3NpbmspKSB7CiAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBpcGVsaW5lKCksICJDb3Vs
ZCBub3QgbGluayBjYXBzZmlsdGVyIHRvIHNpbmsuIik7CiAgICAgICAgICAgICByZXR1cm4gV0VC
UlRDX1ZJREVPX0NPREVDX0VSUk9SOwogICAgICAgICB9CkBAIC0xNjEsNiArMjAyLDIwIEBAIHB1
YmxpYzoKICAgICAgICAgY29uc3Qgd2VicnRjOjpDb2RlY1NwZWNpZmljSW5mbyosCiAgICAgICAg
IGludDY0X3QgcmVuZGVyVGltZU1zKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgaWYgKG1fbmVl
ZHNLZXlmcmFtZSkgeworICAgICAgICAgICAgaWYgKGlucHV0SW1hZ2UuX2ZyYW1lVHlwZSAhPSB3
ZWJydGM6OmtWaWRlb0ZyYW1lS2V5KSB7CisgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJXYWl0
aW5nIGZvciBrZXlmcmFtZSBidXQgZ290IGEgZGVsdGEgdW5pdC4uLiBhc2tpbmcgZm9yIGtleWZy
YW1lIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnB1dEltYWdlLl9jb21wbGV0ZUZyYW1l
KQorICAgICAgICAgICAgICAgIG1fbmVlZHNLZXlmcmFtZSA9IGZhbHNlOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJXYWl0aW5nIGZvciBrZXlmcmFtZSBi
dXQgZGlkbid0IGdldCBmdWxsIGZyYW1lLCBnZXR0aW5nIG91dCIpOworICAgICAgICAgICAgICAg
IHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworCiAgICAgICAgIGlmICghbV9zcmMpIHsKICAgICAgICAgICAgIEdTVF9FUlJPUigiTm8g
c291cmNlIHNldCwgY2FuJ3QgZGVjb2RlLiIpOwogCkBAIC0xNzgsMjIgKzIzMyw0NyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpbnB1dEltYWdlLl9zaXplKSk7CiAgICAgICAgIEdTVF9CVUZGRVJf
RFRTKGJ1ZmZlci5nZXQoKSkgPSAoc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oaW5wdXRJbWFnZS5UaW1l
c3RhbXAoKSkgKiBHU1RfTVNFQ09ORCkgLSBtX2ZpcnN0QnVmZmVyRHRzOwogICAgICAgICBHU1Rf
QlVGRkVSX1BUUyhidWZmZXIuZ2V0KCkpID0gKHN0YXRpY19jYXN0PGd1aW50NjQ+KHJlbmRlclRp
bWVNcykgKiBHU1RfTVNFQ09ORCkgLSBtX2ZpcnN0QnVmZmVyUHRzOwotICAgICAgICB7Ci0gICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fYnVmZmVyTWFwTG9jayk7Ci0gICAgICAg
ICAgICBJbnB1dFRpbWVzdGFtcHMgdGltZXN0YW1wcyA9IHtpbnB1dEltYWdlLlRpbWVzdGFtcCgp
LCByZW5kZXJUaW1lTXN9OwotICAgICAgICAgICAgbV9kdHNQdHNNYXBbR1NUX0JVRkZFUl9QVFMo
YnVmZmVyLmdldCgpKV0gPSB0aW1lc3RhbXBzOwotICAgICAgICB9CisgICAgICAgIElucHV0VGlt
ZXN0YW1wcyB0aW1lc3RhbXBzID0ge2lucHV0SW1hZ2UuVGltZXN0YW1wKCksIHJlbmRlclRpbWVN
c307CisgICAgICAgIG1fZHRzUHRzTWFwW0dTVF9CVUZGRVJfUFRTKGJ1ZmZlci5nZXQoKSldID0g
dGltZXN0YW1wczsKIAogICAgICAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiJSIgR19H
SU5UNjRfRk9STUFUICIgRGVjb2Rpbmc6ICUiIEdTVF9QVFJfRk9STUFULCByZW5kZXJUaW1lTXMs
IGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9zYW1w
bGVfbmV3KGJ1ZmZlci5nZXQoKSwgR2V0Q2Fwc0ZvckZyYW1lKGlucHV0SW1hZ2UpLCBudWxscHRy
LCBudWxscHRyKSk7CiAgICAgICAgIHN3aXRjaCAoZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoR1NU
X0FQUF9TUkMobV9zcmMpLCBzYW1wbGUuZ2V0KCkpKSB7CiAgICAgICAgIGNhc2UgR1NUX0ZMT1df
T0s6Ci0gICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR1NUX0ZMT1dfRkxVU0hJTkc6CiAgICAgICAgICAgICBy
ZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX1VOSU5JVElBTElaRUQ7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwogICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHB1bGxTYW1wbGUoKTsKKyAgICB9CisKKyAgICBpbnQzMl90IHB1
bGxTYW1wbGUoKQorICAgIHsKKyAgICAgICAgYXV0byBzYW1wbGUgPSBnc3RfYXBwX3NpbmtfdHJ5
X3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhtX3NpbmspLCBHU1RfU0VDT05EIC8gMzApOworICAg
ICAgICBpZiAoIXNhbXBsZSkgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJOZWVkcyBtb3JlIGRh
dGEiKTsKKyAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7CisgICAgICAg
IH0KKyAgICAgICAgYXV0byBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlKTsK
KworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZnJhbWUudGltZXN0YW1wID09IHByZXZp
c291bHkgaW5wdXRfZnJhbWUuX3RpbWVTdGFtcAorICAgICAgICAvLyBhcyBpdCBpcyByZXF1aXJl
ZCBieSB0aGUgVmlkZW9EZWNvZGVyIGJhc2VjbGFzcy4KKyAgICAgICAgYXV0byB0aW1lc3RhbXBz
ID0gbV9kdHNQdHNNYXBbR1NUX0JVRkZFUl9QVFMoYnVmZmVyKV07CisgICAgICAgIG1fZHRzUHRz
TWFwLmVyYXNlKEdTVF9CVUZGRVJfUFRTKGJ1ZmZlcikpOworCisgICAgICAgIGF1dG8gZnJhbWUo
TGliV2ViUlRDVmlkZW9GcmFtZUZyb21HU3RyZWFtZXJTYW1wbGUoc2FtcGxlLCB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzAsCisgICAgICAgICAgICB0aW1lc3RhbXBzLnRpbWVzdGFtcCwgdGltZXN0
YW1wcy5yZW5kZXJUaW1lTXMpKTsKKworICAgICAgICBHU1RfQlVGRkVSX0RUUyhidWZmZXIpID0g
R1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik91dHB1dCBkZWNvZGVkIGZyYW1lISAlZCAtPiAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgICAg
ICAgIGZyYW1lLT50aW1lc3RhbXAoKSwgYnVmZmVyKTsKKworICAgICAgICBtX2ltYWdlUmVhZHlD
Yi0+RGVjb2RlZCgqZnJhbWUuZ2V0KCksIGFic2w6Om9wdGlvbmFsPGludDMyX3Q+KCksIGFic2w6
Om9wdGlvbmFsPHVpbnQ4X3Q+KCkpOworCisgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09E
RUNfT0s7CiAgICAgfQogCiAgICAgdmlydHVhbCBHc3RDYXBzKiBHZXRDYXBzRm9yRnJhbWUoY29u
c3Qgd2VicnRjOjpFbmNvZGVkSW1hZ2UmIGltYWdlKQpAQCAtMjQ0LDMwICszMjQsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBHc3REZWNvZGVyRmFjdG9yeShDYXBzKCkpOwogICAgIH0KIAot
ICAgIEdzdEZsb3dSZXR1cm4gbmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCogc2luaykKLSAg
ICB7Ci0gICAgICAgIGF1dG8gc2FtcGxlID0gZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9B
UFBfU0lOSyhzaW5rKSk7Ci0gICAgICAgIGF1dG8gYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVm
ZmVyKHNhbXBsZSk7Ci0KLSAgICAgICAgbV9idWZmZXJNYXBMb2NrLmxvY2soKTsKLSAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyYW1lLnRpbWVzdGFtcCA9PSBwcmV2aXNvdWx5IGlucHV0
X2ZyYW1lLl90aW1lU3RhbXAKLSAgICAgICAgLy8gYXMgaXQgaXMgcmVxdWlyZWQgYnkgdGhlIFZp
ZGVvRGVjb2RlciBiYXNlY2xhc3MuCi0gICAgICAgIGF1dG8gdGltZXN0YW1wcyA9IG1fZHRzUHRz
TWFwW0dTVF9CVUZGRVJfUFRTKGJ1ZmZlcildOwotICAgICAgICBtX2R0c1B0c01hcC5lcmFzZShH
U1RfQlVGRkVSX1BUUyhidWZmZXIpKTsKLSAgICAgICAgbV9idWZmZXJNYXBMb2NrLnVubG9jaygp
OwotCi0gICAgICAgIGF1dG8gZnJhbWUoTGliV2ViUlRDVmlkZW9GcmFtZUZyb21HU3RyZWFtZXJT
YW1wbGUoc2FtcGxlLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsCi0gICAgICAgICAgICB0aW1l
c3RhbXBzLnRpbWVzdGFtcCwgdGltZXN0YW1wcy5yZW5kZXJUaW1lTXMpKTsKLQotICAgICAgICBH
U1RfQlVGRkVSX0RUUyhidWZmZXIpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgICAgR1NU
X0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIk91dHB1dCBkZWNvZGVkIGZyYW1lISAlZCAtPiAlIiBH
U1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgICAgIGZyYW1lLT50aW1lc3RhbXAoKSwgYnVmZmVyKTsK
LQotICAgICAgICBtX2ltYWdlUmVhZHlDYi0+RGVjb2RlZCgqZnJhbWUuZ2V0KCksIGFic2w6Om9w
dGlvbmFsPGludDMyX3Q+KCksIGFic2w6Om9wdGlvbmFsPHVpbnQ4X3Q+KCkpOwotCi0gICAgICAg
IHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIGNvbnN0IGdjaGFyKiBD
YXBzKCkgPSAwOwogICAgIHZpcnR1YWwgd2VicnRjOjpWaWRlb0NvZGVjVHlwZSBDb2RlY1R5cGUo
KSA9IDA7CiAgICAgY29uc3QgY2hhciogSW1wbGVtZW50YXRpb25OYW1lKCkgY29uc3QgeyByZXR1
cm4gIkdTdHJlYW1lciI7IH0KQEAgLTI3OCwyMCArMzM0LDE3IEBAIHByb3RlY3RlZDoKICAgICBn
aW50IG1fcGljdHVyZUlkOwogICAgIGdpbnQgbV93aWR0aDsKICAgICBnaW50IG1faGVpZ2h0Owor
ICAgIGJvb2wgbV9yZXF1aXJlUGFyc2UgPSBmYWxzZTsKKyAgICBib29sIG1fbmVlZHNLZXlmcmFt
ZTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFj
a1RyYW1wKEdzdEVsZW1lbnQqIHNpbmssIEdTdHJlYW1lclZpZGVvRGVjb2RlciogZW5jKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVuYy0+bmV3U2FtcGxlQ2FsbGJhY2soc2luayk7Ci0gICAgfQot
CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworICAgIEdzdEVsZW1lbnQqIG1f
c2luazsKICAgICBHc3RFbGVtZW50KiBtX3NyYzsKIAogICAgIEdzdFZpZGVvSW5mbyBtX2luZm87
CiAgICAgd2VicnRjOjpEZWNvZGVkSW1hZ2VDYWxsYmFjayogbV9pbWFnZVJlYWR5Q2I7CiAKLSAg
ICBMb2NrIG1fYnVmZmVyTWFwTG9jazsKICAgICBTdGRNYXA8R3N0Q2xvY2tUaW1lLCBJbnB1dFRp
bWVzdGFtcHM+IG1fZHRzUHRzTWFwOwogICAgIEdzdENsb2NrVGltZSBtX2ZpcnN0QnVmZmVyUHRz
OwogICAgIEdzdENsb2NrVGltZSBtX2ZpcnN0QnVmZmVyRHRzOwpAQCAtMjk5LDcgKzM1Miw3IEBA
IHByaXZhdGU6CiAKIGNsYXNzIEgyNjREZWNvZGVyIDogcHVibGljIEdTdHJlYW1lclZpZGVvRGVj
b2RlciB7CiBwdWJsaWM6Ci0gICAgSDI2NERlY29kZXIoKSB7IH0KKyAgICBIMjY0RGVjb2Rlcigp
IHsgbV9yZXF1aXJlUGFyc2UgPSB0cnVlOyB9CiAKICAgICBpbnQzMl90IEluaXREZWNvZGUoY29u
c3Qgd2VicnRjOjpWaWRlb0NvZGVjKiBjb2RlY0luZm8sIGludDMyX3QgbkNvcmVzKSBmaW5hbAog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0
b3J5LmNwcAppbmRleCBjMGJiZTM2YzBlYjBjZTUzYmFiNjIzZmY3ZTdiMTQwZjQ0NGQ0ZGVkLi42
OTk1YzYwMmNiMTc0NDdmYTc0MWQzOWQ0NDk0YzM1NjFkYzFiYjgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9F
bmNvZGVyRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCkBAIC0xOTUsNyAr
MTk1LDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0KICAgICBpbnQzMl90IEVuY29k
ZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lLAogICAgICAgICBjb25zdCB3ZWJydGM6
OkNvZGVjU3BlY2lmaWNJbmZvKiwKICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8d2VicnRjOjpG
cmFtZVR5cGU+KiBmcmFtZVR5cGVzKSBmaW5hbApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGFmMzcyMDU3ZjE0N2JhODIxMGUwNTIzNzg0YTdmMmIx
ZTg4MWE4ODUuLmIyMTk3NTcwZTE5NjdjNzczZGU4NWE4NWM4ZmIyMTdmOTEwNGU3MmMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NyBAQAorMjAxOS0wOC0wOSAgVGhpYmF1bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl1bV2ViUlRDXSBIYW5kbGUgYnJva2VuIGRhdGEgaW4gdGhl
IGxpYndlYnJ0YyBHU3RyZWFtZXIgZGVvY29kZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA1ODQKKworICAgICAgICBMaXN0ZW5uaW5nIHRvIHBh
cnNlcnMgd2FybmluZ3MgYW5kIGVycm9yIG1lc3NhZ2VzIChzeW5ocm9ub3VzbHkgc28gdGhhdCB3
ZSByZWFjdAorICAgICAgICByaWdodCBhd2F5KSBhbmQgcmVxdWVzdGluZyBrZXlmcmFtZXMgZnJv
bSB0aGUgcGVlci4KKworICAgICAgICBBbHNvIHNpbXBsaWZ5IHRoZSBkZWNvZGVyIGNvZGUgYnkg
dHJ5aW5nIHRvIG1ha2UgZGVjb2RpbmcgaGFwcGVuCisgICAgICAgIGluIG9uZSBzaW5nbGUgcGFz
cywgYWxzbyBoaWRkaW5nIGF3YXkgR1N0cmVhbWVyIHRocmVhZGluZyBhbmQgYWxsb3dpbmcKKyAg
ICAgICAgdXMgdG8gcmVhY3QgYXMgc29vbiBhcyB0aGUgZGVjb2Rlci9wYXJzZXIgZmFpbHMuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0RlY29kZXI6OkdTdHJlYW1lclZpZGVv
RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0RlY29kZXI6OnB1bGxT
YW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6SDI2NERlY29kZXI6OkgyNjREZWNvZGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNv
ZGVyRmFjdG9yeS5jcHA6CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisgICAgICAgICogZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlczoKKyAgICAgICAgKiBn
c3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwMS1oMjY0cGFyc2UtUG9zdC1hLVdB
Uk5JTkctd2hlbi1kYXRhLWlzLWJyb2tlbi5wYXRjaDogQWRkZWQuCisKIDIwMTktMDgtMDkgIENs
YXVkaW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBB
ZGQgbWlzc2luZyBzcGVsbGNoZWNraW5nIHBhY2thZ2VzIHRvIGRlcGVuZGVuY2llcyBzY3JpcHQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCA5NzZhYmM4MTFmZTNi
ZjBiOGUxNDZlYWU1NzEzMWYwNDcxOGVhZmY0Li5lYzg2ZTZiNTJjYzk5NjI3ZDhjNmM0YmE5ODEz
NmE5YWRkYjBhMGI1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBA
IC0yNTUsNiArMjU1LDEyIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAgICItcmVh
ZGFiaWxpdHkvZW51bV9jYXNpbmciLAogICAgICBdKSwKIAorICAgIChbICAjIEZpbGVzIGZvbGxv
d2luZyB1c2luZyBXZWJSVEMgb3B0aW9ubmFsIHR5cGUKKyAgICAgIG9zLnBhdGguam9pbignU291
cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbWVkaWFzdHJlYW0nLCAnbGlid2VicnRjJywg
J0dTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkuY3BwJyksCisgICAgIF0sCisgICAgIFsiLXJ1
bnRpbWUvd3RmX29wdGlvbmFsIiwKKyAgICAgXSksCisKICAgICAoWwogICAgICAgIyBUaGVyZSBp
cyBubyB3YXkgdG8gYXZvaWQgdGhlIHN5bWJvbHMgX19qaXRfZGVidWdfcmVnaXN0ZXJfY29kZQog
ICAgICAgIyBhbmQgX19qaXRfZGVidWdfZGVzY3JpcHRvciB3aGVuIGludGVncmF0aW5nIHdpdGgg
Z2RiLgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xz
L2dzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggNGExYjQzY2Q2Mjg1NTlkMDVhODYyNzQz
NzM3NWFiYjkwMjg2OGE5OS4uYTIyYjEyOTY0ZjQzZGE0ZjI2NTVmNzJmYTExZDgyM2Q4ZDQyNGI4
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29s
cy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzCkBAIC05Miw3ICs5Miw4IEBACiAgICAgICA8ZGVw
IHBhY2thZ2U9ImxpYnNydHAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8YnJhbmNoIGhh
c2g9InNoYTI1NjoyMjEzOWRlMzU2MjZhZGE2MDkwYmRmYTM0MjNiMjdiN2ZjMTVhMDE5ODMzMWQy
NWM5NWU2YjEyY2IxMDcyYjA1IiBtb2R1bGU9ImdzdC1wbHVnaW5zLWJhZC9nc3QtcGx1Z2lucy1i
YWQtJHt2ZXJzaW9ufS50YXIueHoiIHJlcG89ImdzdHJlYW1lciIgdmVyc2lvbj0iMS4xNi4wIj4K
LSAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1iYWQtZG8tbm90LXJldHJ5LWRvd25sb2Fk
cy1kdXJpbmctc2h1dGRvd24ucGF0Y2giIHN0cmlwPSIxIi8+IDwhLS0gSW4gcmV2aWV3OiBodHRw
czovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9tZXJn
ZV9yZXF1ZXN0cy80MjcgLS0+CisgICAgICA8cGF0Y2ggZmlsZT0iZ3N0LXBsdWdpbnMtYmFkLWRv
LW5vdC1yZXRyeS1kb3dubG9hZHMtZHVyaW5nLXNodXRkb3duLnBhdGNoIiBzdHJpcD0iMSIvPiA8
IS0tIE1lcmdlZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGluZzogaHR0cHM6Ly9naXRsYWIuZnJlZWRl
c2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvbWVyZ2VfcmVxdWVzdHMvNDI3IC0t
PgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJhZC0wMDAxLWgyNjRwYXJzZS1Qb3N0
LWEtV0FSTklORy13aGVuLWRhdGEtaXMtYnJva2VuLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1l
cmdlZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGluZyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5v
cmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9tZXJnZV9yZXF1ZXN0cy8zODYtLT4KICAgICA8
L2JyYW5jaD4KICAgPC9tZXNvbj4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNo
ZXMvZ3N0LXBsdWdpbnMtYmFkLTAwMDEtaDI2NHBhcnNlLVBvc3QtYS1XQVJOSU5HLXdoZW4tZGF0
YS1pcy1icm9rZW4ucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1i
YWQtMDAwMS1oMjY0cGFyc2UtUG9zdC1hLVdBUk5JTkctd2hlbi1kYXRhLWlzLWJyb2tlbi5wYXRj
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYjNiM2VlNzg5NDY0ZmZlY2VjN2FhMzYyZWMyOGFkMmIyN2JjZTExCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFk
LTAwMDEtaDI2NHBhcnNlLVBvc3QtYS1XQVJOSU5HLXdoZW4tZGF0YS1pcy1icm9rZW4ucGF0Y2gK
QEAgLTAsMCArMSwyNSBAQAorRnJvbSA0NzU2MjhjMjBlNTQ4YTE4YzU1ZTZiZDhlOWMzZTNhNzNj
ZjcxOTJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhpYmF1bHQgU2F1bmllciA8
dHNhdW5pZXJAaWdhbGlhLmNvbT4KK0RhdGU6IEZyaSwgMzEgTWF5IDIwMTkgMTA6MTI6NTQgLTA0
MDAKK1N1YmplY3Q6IFtQQVRDSF0gaDI2NHBhcnNlOiBQb3N0IGEgV0FSTklORyB3aGVuIGRhdGEg
aXMgYnJva2VuCisKKy0tLQorIGdzdC92aWRlb3BhcnNlcnMvZ3N0aDI2NHBhcnNlLmMgfCAyICsr
CisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ3N0L3Zp
ZGVvcGFyc2Vycy9nc3RoMjY0cGFyc2UuYyBiL2dzdC92aWRlb3BhcnNlcnMvZ3N0aDI2NHBhcnNl
LmMKK2luZGV4IDQxYTMxZWFmYS4uZmE2NDY3MWRlIDEwMDY0NAorLS0tIGEvZ3N0L3ZpZGVvcGFy
c2Vycy9nc3RoMjY0cGFyc2UuYworKysrIGIvZ3N0L3ZpZGVvcGFyc2Vycy9nc3RoMjY0cGFyc2Uu
YworQEAgLTEzMTMsNiArMTMxMyw4IEBAIGdzdF9oMjY0X3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0
QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAvKiBicm9rZW4gbmFsIGF0IHN0YXJ0IC0+IGFy
cmFuZ2UgdG8gc2tpcCBpdCwKKyAgICAgICAgICAqIG90aGVyd2lzZSBoYXZlIGl0IHRlcm1pbmF0
ZSBjdXJyZW50IGF1CisgICAgICAgICAgKiAoYW5kIHNvIGl0IHdpbGwgYmUgc2tpcHBlZCBvbiBu
ZXh0IGZyYW1lIHJvdW5kKSAqLworKyAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAoaDI2NHBh
cnNlLCBTVFJFQU0sIERFQ09ERSwKKysgICAgICAgICAgICAoTlVMTCksICgiQnJva2VuIGJpdCBz
dHJlYW0iKSk7CisgICAgICAgICBpZiAoY3VycmVudF9vZmYgPT0gMCkgeworICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUIChoMjY0cGFyc2UsICJza2lwcGluZyBicm9rZW4gbmFsIik7CisgICAg
ICAgICAgICpza2lwc2l6ZSA9IG5hbHUub2Zmc2V0OworLS0gCisyLjIxLjAKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376062</attachid>
            <date>2019-08-12 08:01:34 -0700</date>
            <delta_ts>2019-08-12 09:56:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200584-20190812110132.patch</filename>
            <type>text/plain</type>
            <size>16406</size>
            <attacher name="Thibault Saunier">tsaunier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc3ZTFjMGUwMmI2NGE5
M2EzYzQwYmE3NTM0NTAwMTdhYjEwNWRiNC4uNGIyNWJjZjY1ZDZlMGQ5OGNkYjk3ZjIxZmUxMzBl
NmQ4Zjk3OTYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTA4LTEyICBUaGli
YXVsdCBTYXVuaWVyICA8dHNhdW5pZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XVtXZWJSVENdIEhhbmRsZSBicm9rZW4gZGF0YSBpbiB0aGUgbGlid2VicnRjIEdTdHJlYW1lciBk
ZWNvZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAwNTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TGlzdGVuaW5nIHRvIHBhcnNlcnMgd2FybmluZ3MgYW5kIGVycm9yIG1lc3NhZ2VzIChzeW5jaHJv
bm91c2x5IHNvIHRoYXQgd2UgcmVhY3QKKyAgICAgICAgcmlnaHQgYXdheSkgYW5kIHJlcXVlc3Rp
bmcga2V5ZnJhbWVzIGZyb20gdGhlIHBlZXIuCisKKyAgICAgICAgQWxzbyBzaW1wbGlmeSB0aGUg
ZGVjb2RlciBjb2RlIGJ5IHRyeWluZyB0byBtYWtlIGRlY29kaW5nIGhhcHBlbgorICAgICAgICBp
biBvbmUgc2luZ2xlIHBhc3MsIGFsc28gaGlkaW5nIGF3YXkgR1N0cmVhbWVyIHRocmVhZGluZyBh
bmQgYWxsb3dpbmcKKyAgICAgICAgdXMgdG8gcmVhY3QgYXMgc29vbiBhcyB0aGUgZGVjb2Rlci9w
YXJzZXIgZmFpbHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
R1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJWaWRlb0RlY29kZXI6OkdTdHJlYW1lclZpZGVvRGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJWaWRlb0RlY29kZXI6OnB1bGxTYW1wbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SDI2NERlY29kZXI6OkgyNjREZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHA6CisKIDIwMTkt
MDgtMDkgIFRoaWJhdWx0IFNhdW5pZXIgIDx0c2F1bmllckBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHU3RyZWFtZXJdW1dlYlJUQ10gUmVtb3ZlIHVudXNlZCBHc3RBZGFwdGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9EZWNvZGVyRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9EZWNvZGVyRmFjdG9yeS5jcHAKaW5kZXggNzE4
OTUwMmI2NGQ3MjY5ZThlNjQwZGQ0MjMxMTgyZDZmZjFiNWJiYi4uZDk0MzZiNTk3MmUzODQ2ZDQ1
OWE1NTJhZTkwOTdlMTdkYmRmZWVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3Ry
ZWFtZXJWaWRlb0RlY29kZXJGYWN0b3J5LmNwcApAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9waWN0dXJlSWQoMCkKICAgICAgICAgLCBtX3dpZHRoKDApCiAgICAgICAgICwg
bV9oZWlnaHQoMCkKKyAgICAgICAgLCBtX3JlcXVpcmVQYXJzZShmYWxzZSkKKyAgICAgICAgLCBt
X25lZWRzS2V5ZnJhbWUodHJ1ZSkKICAgICAgICAgLCBtX2ZpcnN0QnVmZmVyUHRzKEdTVF9DTE9D
S19USU1FX05PTkUpCiAgICAgICAgICwgbV9maXJzdEJ1ZmZlckR0cyhHU1RfQ0xPQ0tfVElNRV9O
T05FKQogICAgIHsKQEAgLTg2LDYgKzg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9z
cmMgPSBtYWtlRWxlbWVudCgiYXBwc3JjIik7CiAKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBj
YXBzID0gbnVsbHB0cjsKICAgICAgICAgYXV0byBjYXBzZmlsdGVyID0gQ3JlYXRlRmlsdGVyKCk7
CiAgICAgICAgIGF1dG8gZGVjb2RlciA9IG1ha2VFbGVtZW50KCJkZWNvZGViaW4iKTsKIApAQCAt
OTQsMzAgKzk3LDYyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1faGVpZ2h0ID0gY29kZWNTZXR0
aW5ncy0+aGVpZ2h0OwogICAgICAgICB9CiAKKyAgICAgICAgbV9waXBlbGluZSA9IG1ha2VFbGVt
ZW50KCJwaXBlbGluZSIpOworICAgICAgICBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNr
KG1fcGlwZWxpbmUuZ2V0KCkpOworCisgICAgICAgIGF1dG8gc2lua3BhZCA9IGFkb3B0R1JlZihn
c3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChjYXBzZmlsdGVyLCAic2luayIpKTsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChkZWNvZGVyLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyhkZWNvZGVi
aW5QYWRBZGRlZENiKSwgc2lua3BhZC5nZXQoKSk7CiAgICAgICAgIC8vIE1ha2UgdGhlIGRlY29k
ZXIgb3V0cHV0ICJwYXJzZWQiIGZyYW1lcyBvbmx5IGFuZCBsZXQgdGhlIG1haW4gZGVjb2RlYmlu
CiAgICAgICAgIC8vIGRvIHRoZSByZWFsIGRlY29kaW5nLiBUaGlzIGFsbG93cyB1cyB0byBoYXZl
IG9wdGltaXplZCBkZWNvZGluZy9yZW5kZXJpbmcKICAgICAgICAgLy8gaGFwcGVuaW5nIGluIHRo
ZSBtYWluIHBpcGVsaW5lLgotICAgICAgICBnX29iamVjdF9zZXQoZGVjb2RlciwgImNhcHMiLCBh
ZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoQ2FwcygpKSkuZ2V0KCksIG51bGxwdHIpOwot
ICAgICAgICBhdXRvIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChjYXBzZmls
dGVyLCAic2luayIpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRlY29kZXIsICJwYWQtYWRk
ZWQiLCBHX0NBTExCQUNLKGRlY29kZWJpblBhZEFkZGVkQ2IpLCBzaW5rcGFkKTsKKyAgICAgICAg
aWYgKG1fcmVxdWlyZVBhcnNlKSB7CisgICAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3Np
bXBsZShDYXBzKCksICJwYXJzZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9n
ZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOwogCi0gICAgICAgIG1fcGlw
ZWxpbmUgPSBtYWtlRWxlbWVudCgicGlwZWxpbmUiKTsKLSAgICAgICAgY29ubmVjdFNpbXBsZUJ1
c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9idXNf
ZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbihidXMuZ2V0KCkpOworICAgICAgICAgICAgZ19z
aWduYWxfY29ubmVjdChidXMuZ2V0KCksICJzeW5jLW1lc3NhZ2U6Ondhcm5pbmciLAorICAgICAg
ICAgICAgICAgIEdfQ0FMTEJBQ0soK1tdKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdT
dHJlYW1lclZpZGVvRGVjb2RlcioganVzdFRoaXMpIHsKKyAgICAgICAgICAgICAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChHU1RfTUVTU0FH
RV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJO
SU5HOiB7CisgICAgICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcobWVz
c2FnZSwgJmVyci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIEZBTExU
SFJPVUdIOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEdTVF9NRVNT
QUdFX0VSUk9SOiB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZXJyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIo
KSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhl
cnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1JfREVDT0RFKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKGp1c3RUaGlzLT5waXBlbGlu
ZSgpLCAiLS0+IG5lZWRzIGtleWZyYW1lICglcykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVyci0+bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBqdXN0VGhpcy0+bV9u
ZWVkc0tleWZyYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0pLCB0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIEZJ
WE1FIC0gSG93IGNvdWxkIHdlIGhhbmRsZSBtaXNzaW5nIGtleWZyYW1lcyBjYXNlIHdlIGRvIG5v
dCBwbHVnIHBhcnNlcnMgPyAqLworICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0
eV9zaW1wbGUoQ2FwcygpKTsKKyAgICAgICAgfQorICAgICAgICBnX29iamVjdF9zZXQoZGVjb2Rl
ciwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKIAotICAgICAgICBhdXRvIHNpbmsgPSBt
YWtlRWxlbWVudCgiYXBwc2luayIpOwotICAgICAgICBnc3RfYXBwX3Npbmtfc2V0X2VtaXRfc2ln
bmFscyhHU1RfQVBQX1NJTksoc2luayksIHRydWUpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdTYW1wbGVDYWxsYmFja1RyYW1wKSwg
dGhpcyk7Ci0gICAgICAgIC8vIFRoaXMgaXMgYW4gZW5jb2RlciwgZXZlcnl0aGluZyBzaG91bGQg
aGFwcGVuIGFzIGZhc3QgYXMgcG9zc2libGUgYW5kIG5vdAorICAgICAgICBtX3NpbmsgPSBtYWtl
RWxlbWVudCgiYXBwc2luayIpOworICAgICAgICBnc3RfYXBwX3Npbmtfc2V0X2VtaXRfc2lnbmFs
cyhHU1RfQVBQX1NJTksobV9zaW5rKSwgdHJ1ZSk7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gZGVj
b2RlciwgZXZlcnl0aGluZyBzaG91bGQgaGFwcGVuIGFzIGZhc3QgYXMgcG9zc2libGUgYW5kIG5v
dAogICAgICAgICAvLyBiZSBzeW5jZWQgb24gdGhlIGNsb2NrLgotICAgICAgICBnX29iamVjdF9z
ZXQoc2luaywgInN5bmMiLCBmYWxzZSwgbnVsbHB0cik7CisgICAgICAgIGdfb2JqZWN0X3NldCht
X3NpbmssICJzeW5jIiwgZmFsc2UsIG51bGxwdHIpOwogCi0gICAgICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTihwaXBlbGluZSgpKSwgbV9zcmMsIGRlY29kZXIsIGNhcHNmaWx0ZXIsIHNpbmss
IG51bGxwdHIpOworICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4ocGlwZWxpbmUoKSks
IG1fc3JjLCBkZWNvZGVyLCBjYXBzZmlsdGVyLCBtX3NpbmssIG51bGxwdHIpOwogICAgICAgICBp
ZiAoIWdzdF9lbGVtZW50X2xpbmsobV9zcmMsIGRlY29kZXIpKSB7CiAgICAgICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHBpcGVsaW5lKCksICJDb3VsZCBub3QgbGluayBzcmMgdG8gZGVjb2Rlci4i
KTsKICAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmsoY2Fwc2ZpbHRlciwgc2luaykpIHsK
KyAgICAgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rKGNhcHNmaWx0ZXIsIG1fc2luaykpIHsKICAg
ICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIkNvdWxkIG5vdCBsaW5rIGNh
cHNmaWx0ZXIgdG8gc2luay4iKTsKICAgICAgICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09E
RUNfRVJST1I7CiAgICAgICAgIH0KQEAgLTE1MCw2ICsxODUsNyBAQCBwdWJsaWM6CiAKICAgICAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVf
TlVMTCk7CiAgICAgICAgICAgICBtX3NyYyA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3Npbmsg
PSBudWxscHRyOwogICAgICAgICAgICAgbV9waXBlbGluZSA9IG51bGxwdHI7CiAgICAgICAgIH0K
IApAQCAtMTYxLDYgKzE5NywyMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IHdlYnJ0Yzo6Q29k
ZWNTcGVjaWZpY0luZm8qLAogICAgICAgICBpbnQ2NF90IHJlbmRlclRpbWVNcykgb3ZlcnJpZGUK
ICAgICB7CisgICAgICAgIGlmIChtX25lZWRzS2V5ZnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChp
bnB1dEltYWdlLl9mcmFtZVR5cGUgIT0gd2VicnRjOjprVmlkZW9GcmFtZUtleSkgeworICAgICAg
ICAgICAgICAgIEdTVF9FUlJPUigiV2FpdGluZyBmb3Iga2V5ZnJhbWUgYnV0IGdvdCBhIGRlbHRh
IHVuaXQuLi4gYXNraW5nIGZvciBrZXlmcmFtZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBX
RUJSVENfVklERU9fQ09ERUNfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aW5wdXRJbWFnZS5fY29tcGxldGVGcmFtZSkKKyAgICAgICAgICAgICAgICBtX25lZWRzS2V5ZnJh
bWUgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEdTVF9FUlJP
UigiV2FpdGluZyBmb3Iga2V5ZnJhbWUgYnV0IGRpZG4ndCBnZXQgZnVsbCBmcmFtZSwgZ2V0dGlu
ZyBvdXQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9S
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKwogICAgICAgICBpZiAoIW1fc3JjKSB7CiAg
ICAgICAgICAgICBHU1RfRVJST1IoIk5vIHNvdXJjZSBzZXQsIGNhbid0IGRlY29kZS4iKTsKIApA
QCAtMTc4LDIyICsyMjgsNDcgQEAgcHVibGljOgogICAgICAgICAgICAgaW5wdXRJbWFnZS5fc2l6
ZSkpOwogICAgICAgICBHU1RfQlVGRkVSX0RUUyhidWZmZXIuZ2V0KCkpID0gKHN0YXRpY19jYXN0
PGd1aW50NjQ+KGlucHV0SW1hZ2UuVGltZXN0YW1wKCkpICogR1NUX01TRUNPTkQpIC0gbV9maXJz
dEJ1ZmZlckR0czsKICAgICAgICAgR1NUX0JVRkZFUl9QVFMoYnVmZmVyLmdldCgpKSA9IChzdGF0
aWNfY2FzdDxndWludDY0PihyZW5kZXJUaW1lTXMpICogR1NUX01TRUNPTkQpIC0gbV9maXJzdEJ1
ZmZlclB0czsKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2J1ZmZlck1hcExvY2spOwotICAgICAgICAgICAgSW5wdXRUaW1lc3RhbXBzIHRpbWVzdGFtcHMg
PSB7aW5wdXRJbWFnZS5UaW1lc3RhbXAoKSwgcmVuZGVyVGltZU1zfTsKLSAgICAgICAgICAgIG1f
ZHRzUHRzTWFwW0dTVF9CVUZGRVJfUFRTKGJ1ZmZlci5nZXQoKSldID0gdGltZXN0YW1wczsKLSAg
ICAgICAgfQorICAgICAgICBJbnB1dFRpbWVzdGFtcHMgdGltZXN0YW1wcyA9IHtpbnB1dEltYWdl
LlRpbWVzdGFtcCgpLCByZW5kZXJUaW1lTXN9OworICAgICAgICBtX2R0c1B0c01hcFtHU1RfQlVG
RkVSX1BUUyhidWZmZXIuZ2V0KCkpXSA9IHRpbWVzdGFtcHM7CiAKICAgICAgICAgR1NUX0xPR19P
QkpFQ1QocGlwZWxpbmUoKSwgIiUiIEdfR0lOVDY0X0ZPUk1BVCAiIERlY29kaW5nOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgcmVuZGVyVGltZU1zLCBidWZmZXIuZ2V0KCkpOwogICAgICAgICBhdXRvIHNh
bXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhidWZmZXIuZ2V0KCksIEdldENhcHNGb3JG
cmFtZShpbnB1dEltYWdlKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgICAgICBzd2l0Y2ggKGdz
dF9hcHBfc3JjX3B1c2hfc2FtcGxlKEdTVF9BUFBfU1JDKG1fc3JjKSwgc2FtcGxlLmdldCgpKSkg
ewogICAgICAgICBjYXNlIEdTVF9GTE9XX09LOgotICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19W
SURFT19DT0RFQ19PSzsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdTVF9GTE9X
X0ZMVVNISU5HOgogICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19VTklOSVRJ
QUxJWkVEOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURF
T19DT0RFQ19FUlJPUjsKICAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwdWxsU2FtcGxlKCk7
CisgICAgfQorCisgICAgaW50MzJfdCBwdWxsU2FtcGxlKCkKKyAgICB7CisgICAgICAgIGF1dG8g
c2FtcGxlID0gZ3N0X2FwcF9zaW5rX3RyeV9wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksobV9zaW5r
KSwgR1NUX1NFQ09ORCAvIDMwKTsKKyAgICAgICAgaWYgKCFzYW1wbGUpIHsKKyAgICAgICAgICAg
IEdTVF9FUlJPUigiTmVlZHMgbW9yZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX09LOworICAgICAgICB9CisgICAgICAgIGF1dG8gYnVmZmVyID0gZ3N0X3Nh
bXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhl
IGZyYW1lLnRpbWVzdGFtcCA9PSBwcmV2aXNvdWx5IGlucHV0X2ZyYW1lLl90aW1lU3RhbXAKKyAg
ICAgICAgLy8gYXMgaXQgaXMgcmVxdWlyZWQgYnkgdGhlIFZpZGVvRGVjb2RlciBiYXNlY2xhc3Mu
CisgICAgICAgIGF1dG8gdGltZXN0YW1wcyA9IG1fZHRzUHRzTWFwW0dTVF9CVUZGRVJfUFRTKGJ1
ZmZlcildOworICAgICAgICBtX2R0c1B0c01hcC5lcmFzZShHU1RfQlVGRkVSX1BUUyhidWZmZXIp
KTsKKworICAgICAgICBhdXRvIGZyYW1lKExpYldlYlJUQ1ZpZGVvRnJhbWVGcm9tR1N0cmVhbWVy
U2FtcGxlKHNhbXBsZSwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLAorICAgICAgICAgICAgdGlt
ZXN0YW1wcy50aW1lc3RhbXAsIHRpbWVzdGFtcHMucmVuZGVyVGltZU1zKSk7CisKKyAgICAgICAg
R1NUX0JVRkZFUl9EVFMoYnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICAgIEdT
VF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJPdXRwdXQgZGVjb2RlZCBmcmFtZSEgJWQgLT4gJSIg
R1NUX1BUUl9GT1JNQVQsCisgICAgICAgICAgICBmcmFtZS0+dGltZXN0YW1wKCksIGJ1ZmZlcik7
CisKKyAgICAgICAgbV9pbWFnZVJlYWR5Q2ItPkRlY29kZWQoKmZyYW1lLmdldCgpLCBhYnNsOjpv
cHRpb25hbDxpbnQzMl90PigpLCBhYnNsOjpvcHRpb25hbDx1aW50OF90PigpKTsKKworICAgICAg
ICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwogICAgIH0KIAogICAgIHZpcnR1YWwgR3N0
Q2FwcyogR2V0Q2Fwc0ZvckZyYW1lKGNvbnN0IHdlYnJ0Yzo6RW5jb2RlZEltYWdlJiBpbWFnZSkK
QEAgLTI0NCwzMCArMzE5LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR3N0RGVjb2RlckZh
Y3RvcnkoQ2FwcygpKTsKICAgICB9CiAKLSAgICBHc3RGbG93UmV0dXJuIG5ld1NhbXBsZUNhbGxi
YWNrKEdzdEVsZW1lbnQqIHNpbmspCi0gICAgewotICAgICAgICBhdXRvIHNhbXBsZSA9IGdzdF9h
cHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpOwotICAgICAgICBhdXRvIGJ1
ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUpOwotCi0gICAgICAgIG1fYnVmZmVy
TWFwTG9jay5sb2NrKCk7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBmcmFtZS50aW1l
c3RhbXAgPT0gcHJldmlzb3VseSBpbnB1dF9mcmFtZS5fdGltZVN0YW1wCi0gICAgICAgIC8vIGFz
IGl0IGlzIHJlcXVpcmVkIGJ5IHRoZSBWaWRlb0RlY29kZXIgYmFzZWNsYXNzLgotICAgICAgICBh
dXRvIHRpbWVzdGFtcHMgPSBtX2R0c1B0c01hcFtHU1RfQlVGRkVSX1BUUyhidWZmZXIpXTsKLSAg
ICAgICAgbV9kdHNQdHNNYXAuZXJhc2UoR1NUX0JVRkZFUl9QVFMoYnVmZmVyKSk7Ci0gICAgICAg
IG1fYnVmZmVyTWFwTG9jay51bmxvY2soKTsKLQotICAgICAgICBhdXRvIGZyYW1lKExpYldlYlJU
Q1ZpZGVvRnJhbWVGcm9tR1N0cmVhbWVyU2FtcGxlKHNhbXBsZSwgd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8wLAotICAgICAgICAgICAgdGltZXN0YW1wcy50aW1lc3RhbXAsIHRpbWVzdGFtcHMucmVu
ZGVyVGltZU1zKSk7Ci0KLSAgICAgICAgR1NUX0JVRkZFUl9EVFMoYnVmZmVyKSA9IEdTVF9DTE9D
S19USU1FX05PTkU7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJPdXRwdXQg
ZGVjb2RlZCBmcmFtZSEgJWQgLT4gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBmcmFt
ZS0+dGltZXN0YW1wKCksIGJ1ZmZlcik7Ci0KLSAgICAgICAgbV9pbWFnZVJlYWR5Q2ItPkRlY29k
ZWQoKmZyYW1lLmdldCgpLCBhYnNsOjpvcHRpb25hbDxpbnQzMl90PigpLCBhYnNsOjpvcHRpb25h
bDx1aW50OF90PigpKTsKLQotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfQotCiAg
ICAgdmlydHVhbCBjb25zdCBnY2hhciogQ2FwcygpID0gMDsKICAgICB2aXJ0dWFsIHdlYnJ0Yzo6
VmlkZW9Db2RlY1R5cGUgQ29kZWNUeXBlKCkgPSAwOwogICAgIGNvbnN0IGNoYXIqIEltcGxlbWVu
dGF0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJHU3RyZWFtZXIiOyB9CkBAIC0yNzgsMjAgKzMy
OSwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZ2ludCBtX3BpY3R1cmVJZDsKICAgICBnaW50IG1fd2lk
dGg7CiAgICAgZ2ludCBtX2hlaWdodDsKKyAgICBib29sIG1fcmVxdWlyZVBhcnNlID0gZmFsc2U7
CisgICAgYm9vbCBtX25lZWRzS2V5ZnJhbWU7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEdzdEZs
b3dSZXR1cm4gbmV3U2FtcGxlQ2FsbGJhY2tUcmFtcChHc3RFbGVtZW50KiBzaW5rLCBHU3RyZWFt
ZXJWaWRlb0RlY29kZXIqIGVuYykKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmMtPm5ld1NhbXBs
ZUNhbGxiYWNrKHNpbmspOwotICAgIH0KLQogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBl
bGluZTsKKyAgICBHc3RFbGVtZW50KiBtX3Npbms7CiAgICAgR3N0RWxlbWVudCogbV9zcmM7CiAK
ICAgICBHc3RWaWRlb0luZm8gbV9pbmZvOwogICAgIHdlYnJ0Yzo6RGVjb2RlZEltYWdlQ2FsbGJh
Y2sqIG1faW1hZ2VSZWFkeUNiOwogCi0gICAgTG9jayBtX2J1ZmZlck1hcExvY2s7CiAgICAgU3Rk
TWFwPEdzdENsb2NrVGltZSwgSW5wdXRUaW1lc3RhbXBzPiBtX2R0c1B0c01hcDsKICAgICBHc3RD
bG9ja1RpbWUgbV9maXJzdEJ1ZmZlclB0czsKICAgICBHc3RDbG9ja1RpbWUgbV9maXJzdEJ1ZmZl
ckR0czsKQEAgLTI5OSw3ICszNDcsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBIMjY0RGVjb2RlciA6
IHB1YmxpYyBHU3RyZWFtZXJWaWRlb0RlY29kZXIgewogcHVibGljOgotICAgIEgyNjREZWNvZGVy
KCkgeyB9CisgICAgSDI2NERlY29kZXIoKSB7IG1fcmVxdWlyZVBhcnNlID0gdHJ1ZTsgfQogCiAg
ICAgaW50MzJfdCBJbml0RGVjb2RlKGNvbnN0IHdlYnJ0Yzo6VmlkZW9Db2RlYyogY29kZWNJbmZv
LCBpbnQzMl90IG5Db3JlcykgZmluYWwKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFj
dG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
R1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5jcHAKaW5kZXggYzBiYmUzNmMwZWIwY2U1M2Jh
YjYyM2ZmN2U3YjE0MGY0NDRkNGRlZC4uNjk5NWM2MDJjYjE3NDQ3ZmE3NDFkMzlkNDQ5NGMzNTYx
ZGMxYmI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29k
ZXJGYWN0b3J5LmNwcApAQCAtMTk1LDcgKzE5NSw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAotCiAgICAgaW50MzJfdCBFbmNvZGUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFt
ZSwKICAgICAgICAgY29uc3Qgd2VicnRjOjpDb2RlY1NwZWNpZmljSW5mbyosCiAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6RnJhbWVUeXBlPiogZnJhbWVUeXBlcykgZmluYWwKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZjM3MjA1
N2YxNDdiYTgyMTBlMDUyMzc4NGE3ZjJiMWU4ODFhODg1Li4xYzRlOTZmNGZhM2MwMmFlYjFkNTU0
NTc3MjIzYzJkMDg3Mjk3MGQ3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMDgtMTIgIFRoaWJhdWx0IFNhdW5p
ZXIgIDx0c2F1bmllckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdW1dlYlJUQ10g
SGFuZGxlIGJyb2tlbiBkYXRhIGluIHRoZSBsaWJ3ZWJydGMgR1N0cmVhbWVyIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA1ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIGgy
NjRwYXJzZSBwYXRjaCB0byBwb3N0IFdBUk5JTkcgb24gdGhlIGJ1cyB3aGVuIGEgYnJva2VuIGZy
YW1lIGlzIGRldGVjdGVkLgorICAgICAgICBJZ25vcmUgc3R5bGUgbGlid2VicnRjIG9wdGlvbm5h
bCAnc3R5bGUgaXNzdWUnCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisgICAgICAgICogZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlczoKKyAgICAgICAgKiBn
c3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwMS1oMjY0cGFyc2UtUG9zdC1hLVdB
Uk5JTkctd2hlbi1kYXRhLWlzLWJyb2tlbi5wYXRjaDogQWRkZWQuCisKIDIwMTktMDgtMDkgIENs
YXVkaW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBB
ZGQgbWlzc2luZyBzcGVsbGNoZWNraW5nIHBhY2thZ2VzIHRvIGRlcGVuZGVuY2llcyBzY3JpcHQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCA5NzZhYmM4MTFmZTNi
ZjBiOGUxNDZlYWU1NzEzMWYwNDcxOGVhZmY0Li5lYzg2ZTZiNTJjYzk5NjI3ZDhjNmM0YmE5ODEz
NmE5YWRkYjBhMGI1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBA
IC0yNTUsNiArMjU1LDEyIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAgICItcmVh
ZGFiaWxpdHkvZW51bV9jYXNpbmciLAogICAgICBdKSwKIAorICAgIChbICAjIEZpbGVzIGZvbGxv
d2luZyB1c2luZyBXZWJSVEMgb3B0aW9ubmFsIHR5cGUKKyAgICAgIG9zLnBhdGguam9pbignU291
cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnbWVkaWFzdHJlYW0nLCAnbGlid2VicnRjJywg
J0dTdHJlYW1lclZpZGVvRGVjb2RlckZhY3RvcnkuY3BwJyksCisgICAgIF0sCisgICAgIFsiLXJ1
bnRpbWUvd3RmX29wdGlvbmFsIiwKKyAgICAgXSksCisKICAgICAoWwogICAgICAgIyBUaGVyZSBp
cyBubyB3YXkgdG8gYXZvaWQgdGhlIHN5bWJvbHMgX19qaXRfZGVidWdfcmVnaXN0ZXJfY29kZQog
ICAgICAgIyBhbmQgX19qaXRfZGVidWdfZGVzY3JpcHRvciB3aGVuIGludGVncmF0aW5nIHdpdGgg
Z2RiLgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xz
L2dzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggNGExYjQzY2Q2Mjg1NTlkMDVhODYyNzQz
NzM3NWFiYjkwMjg2OGE5OS4uYTIyYjEyOTY0ZjQzZGE0ZjI2NTVmNzJmYTExZDgyM2Q4ZDQyNGI4
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29s
cy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzCkBAIC05Miw3ICs5Miw4IEBACiAgICAgICA8ZGVw
IHBhY2thZ2U9ImxpYnNydHAiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8YnJhbmNoIGhh
c2g9InNoYTI1NjoyMjEzOWRlMzU2MjZhZGE2MDkwYmRmYTM0MjNiMjdiN2ZjMTVhMDE5ODMzMWQy
NWM5NWU2YjEyY2IxMDcyYjA1IiBtb2R1bGU9ImdzdC1wbHVnaW5zLWJhZC9nc3QtcGx1Z2lucy1i
YWQtJHt2ZXJzaW9ufS50YXIueHoiIHJlcG89ImdzdHJlYW1lciIgdmVyc2lvbj0iMS4xNi4wIj4K
LSAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1iYWQtZG8tbm90LXJldHJ5LWRvd25sb2Fk
cy1kdXJpbmctc2h1dGRvd24ucGF0Y2giIHN0cmlwPSIxIi8+IDwhLS0gSW4gcmV2aWV3OiBodHRw
czovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9tZXJn
ZV9yZXF1ZXN0cy80MjcgLS0+CisgICAgICA8cGF0Y2ggZmlsZT0iZ3N0LXBsdWdpbnMtYmFkLWRv
LW5vdC1yZXRyeS1kb3dubG9hZHMtZHVyaW5nLXNodXRkb3duLnBhdGNoIiBzdHJpcD0iMSIvPiA8
IS0tIE1lcmdlZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGluZzogaHR0cHM6Ly9naXRsYWIuZnJlZWRl
c2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvbWVyZ2VfcmVxdWVzdHMvNDI3IC0t
PgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJhZC0wMDAxLWgyNjRwYXJzZS1Qb3N0
LWEtV0FSTklORy13aGVuLWRhdGEtaXMtYnJva2VuLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1l
cmdlZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGluZyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5v
cmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9tZXJnZV9yZXF1ZXN0cy8zODYtLT4KICAgICA8
L2JyYW5jaD4KICAgPC9tZXNvbj4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNo
ZXMvZ3N0LXBsdWdpbnMtYmFkLTAwMDEtaDI2NHBhcnNlLVBvc3QtYS1XQVJOSU5HLXdoZW4tZGF0
YS1pcy1icm9rZW4ucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1i
YWQtMDAwMS1oMjY0cGFyc2UtUG9zdC1hLVdBUk5JTkctd2hlbi1kYXRhLWlzLWJyb2tlbi5wYXRj
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYjNiM2VlNzg5NDY0ZmZlY2VjN2FhMzYyZWMyOGFkMmIyN2JjZTExCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFk
LTAwMDEtaDI2NHBhcnNlLVBvc3QtYS1XQVJOSU5HLXdoZW4tZGF0YS1pcy1icm9rZW4ucGF0Y2gK
QEAgLTAsMCArMSwyNSBAQAorRnJvbSA0NzU2MjhjMjBlNTQ4YTE4YzU1ZTZiZDhlOWMzZTNhNzNj
ZjcxOTJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhpYmF1bHQgU2F1bmllciA8
dHNhdW5pZXJAaWdhbGlhLmNvbT4KK0RhdGU6IEZyaSwgMzEgTWF5IDIwMTkgMTA6MTI6NTQgLTA0
MDAKK1N1YmplY3Q6IFtQQVRDSF0gaDI2NHBhcnNlOiBQb3N0IGEgV0FSTklORyB3aGVuIGRhdGEg
aXMgYnJva2VuCisKKy0tLQorIGdzdC92aWRlb3BhcnNlcnMvZ3N0aDI2NHBhcnNlLmMgfCAyICsr
CisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ3N0L3Zp
ZGVvcGFyc2Vycy9nc3RoMjY0cGFyc2UuYyBiL2dzdC92aWRlb3BhcnNlcnMvZ3N0aDI2NHBhcnNl
LmMKK2luZGV4IDQxYTMxZWFmYS4uZmE2NDY3MWRlIDEwMDY0NAorLS0tIGEvZ3N0L3ZpZGVvcGFy
c2Vycy9nc3RoMjY0cGFyc2UuYworKysrIGIvZ3N0L3ZpZGVvcGFyc2Vycy9nc3RoMjY0cGFyc2Uu
YworQEAgLTEzMTMsNiArMTMxMyw4IEBAIGdzdF9oMjY0X3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0
QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAvKiBicm9rZW4gbmFsIGF0IHN0YXJ0IC0+IGFy
cmFuZ2UgdG8gc2tpcCBpdCwKKyAgICAgICAgICAqIG90aGVyd2lzZSBoYXZlIGl0IHRlcm1pbmF0
ZSBjdXJyZW50IGF1CisgICAgICAgICAgKiAoYW5kIHNvIGl0IHdpbGwgYmUgc2tpcHBlZCBvbiBu
ZXh0IGZyYW1lIHJvdW5kKSAqLworKyAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAoaDI2NHBh
cnNlLCBTVFJFQU0sIERFQ09ERSwKKysgICAgICAgICAgICAoTlVMTCksICgiQnJva2VuIGJpdCBz
dHJlYW0iKSk7CisgICAgICAgICBpZiAoY3VycmVudF9vZmYgPT0gMCkgeworICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUIChoMjY0cGFyc2UsICJza2lwcGluZyBicm9rZW4gbmFsIik7CisgICAg
ICAgICAgICpza2lwc2l6ZSA9IG5hbHUub2Zmc2V0OworLS0gCisyLjIxLjAKKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>