<?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>222322</bug_id>
          
          <creation_ts>2021-02-23 10:20:37 -0800</creation_ts>
          <short_desc>[GStreamer][Playbin3] Stream collection handling fixes</short_desc>
          <delta_ts>2021-03-01 02:07:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>aboya</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1732585</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-23 10:20:37 -0800</bug_when>
    <thetext>Our internal list of tracks mapping the stream collection contents can currently easily become inconsistent with the actual collection contents. We tried to orphan obsolete tracks but even so, this is messing up track indexes. It would be simpler to re-create our internal list whenever a new collection is received.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732592</commentid>
    <comment_count>1</comment_count>
      <attachid>421326</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-23 10:35:08 -0800</bug_when>
    <thetext>Created attachment 421326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732860</commentid>
    <comment_count>2</comment_count>
      <attachid>421326</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-24 06:56:58 -0800</bug_when>
    <thetext>Comment on attachment 421326
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1567
&gt; +    GST_DEBUG_OBJECT(pipeline(), &quot;phil Collection %p len: %u&quot;, collection.get(), numStreams);

I&apos;ll reword this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733283</commentid>
    <comment_count>3</comment_count>
      <attachid>421326</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-02-25 04:14:51 -0800</bug_when>
    <thetext>Comment on attachment 421326
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1465
&gt; +void MediaPlayerPrivateGStreamer::updateTracks(const GRefPtr&lt;GstStreamCollection&gt; streamCollection)

Did you mean `const GRefPtr&lt;GstStreamCollection&gt;?`

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1477
&gt; +    // consistent with the collection contents, we can&apos;t reuse our old tracks.

Can you elaborate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733290</commentid>
    <comment_count>4</comment_count>
      <attachid>421326</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-02-25 04:56:52 -0800</bug_when>
    <thetext>Comment on attachment 421326
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:448
&gt; +    void updateTracks(const GRefPtr&lt;GstStreamCollection&gt;);

This should be a const GRefPtr&amp;

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:513
&gt; +    const char* sourceType = &quot;&quot;;

We could better initialize to &quot;unknown&quot;. DEBUG below could be more informative in case we don&apos;t hit the assert in a release build.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:556
&gt; -static void webkitMediaStreamSrcPostStreamCollection(WebKitMediaStreamSrc* self)
&gt; +void webkitMediaStreamSrcPostStreamCollection(WebKitMediaStreamSrc* self)

Do you need to drop the static? I does not look to me at a first glance.

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:648
&gt; +            if (!g_strcmp0(streamId, track.id().utf8().data())) {

There are String operators for this:

inline bool operator==(const String&amp; a, const char* b) { return equal(a.impl(), reinterpret_cast&lt;const LChar*&gt;(b)); }
inline bool operator==(const char* a, const String&amp; b) { return equal(reinterpret_cast&lt;const LChar*&gt;(a), b.impl()); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733291</commentid>
    <comment_count>5</comment_count>
      <attachid>421326</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-25 05:05:16 -0800</bug_when>
    <thetext>Comment on attachment 421326
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1477
&gt;&gt; +    // consistent with the collection contents, we can&apos;t reuse our old tracks.
&gt; 
&gt; Can you elaborate?

Sure! Taking the example of http/tests/media/hls/hls-audio-tracks.html, the player would receive various stream-collection messages and actually handle them from different threads, as this log shows:

0:00:00.943368778   340      0x210cde0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1597:handleSyncMessage:&lt;media-player-0&gt; Received STREAM_COLLECTION message with upstream id &quot;(null)&quot; defining the following streams:
0:00:00.943407182   340 0x7fe1e8008cc0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1597:handleSyncMessage:&lt;media-player-0&gt; Received STREAM_COLLECTION message with upstream id &quot;decodebin3&quot; defining the following streams:
0:00:00.943432352   340      0x210cde0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:handleSyncMessage:&lt;media-player-0&gt; #0 audio f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_2
0:00:00.943467669   340 0x7fe1e8008cc0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:handleSyncMessage:&lt;media-player-0&gt; #0 audio f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_1
0:00:00.943412535   340      0x1c85610 LOG        webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1800:handleMessage:&lt;media-player-0&gt; Message state-changed received from element audio-concat
0:00:00.943504040   340 0x7fe1e8008cc0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:handleSyncMessage:&lt;media-player-0&gt; #1 audio f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_2
...
0:00:00.943771346   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1500:updateTracks:&lt;media-player-0&gt; Processing a stream collection with 1 streams
0:00:00.943858510   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1521:updateTracks:&lt;media-player-0&gt; Inspecting audio track with ID f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_2
0:00:00.943910641   340      0x1c85610 DEBUG      webkitmediaplayer TrackPrivateBaseGStreamer.cpp:113:tagsChanged: Inspecting track at index 0 with tags: (NULL)
...
0:00:00.955157540   340      0x21094c0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1597:handleSyncMessage:&lt;media-player-0&gt; Received STREAM_COLLECTION message with upstream id &quot;decodebin3&quot; defining the following streams:
0:00:00.955224337   340      0x1c85610 LOG        webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1800:handleMessage:&lt;media-player-0&gt; Message state-changed received from element aconv
0:00:00.955236157   340      0x21094c0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:handleSyncMessage:&lt;media-player-0&gt; #0 video f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_0:1/00000101
0:00:00.955290618   340      0x1c85610 LOG        webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1800:handleMessage:&lt;media-player-0&gt; Message state-changed received from element aqueue
0:00:00.955316558   340      0x21094c0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:handleSyncMessage:&lt;media-player-0&gt; #1 audio f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_0:1/00000102
0:00:00.955372572   340      0x1c85610 LOG        webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1800:handleMessage:&lt;media-player-0&gt; Message state-changed received from element scaletempo0
0:00:00.955377016   340      0x21094c0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:handleSyncMessage:&lt;media-player-0&gt; #2 audio f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_1
0:00:00.955426783   340      0x1c85610 LOG        webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1800:handleMessage:&lt;media-player-0&gt; Message state-changed received from element filter-convert
0:00:00.955457383   340      0x21094c0 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1601:handleSyncMessage:&lt;media-player-0&gt; #3 audio f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_2
0:00:00.955776957   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1521:updateTracks:&lt;media-player-0&gt; Inspecting video track with ID f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_0:1/00000101
0:00:00.955839477   340      0x1c85610 DEBUG      webkitmediaplayer TrackPrivateBaseGStreamer.cpp:113:tagsChanged: Inspecting track at index 0 with tags: taglist, video-codec=(string)H.264;
0:00:00.956053700   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1521:updateTracks:&lt;media-player-0&gt; Inspecting audio track with ID f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_0:1/00000102
0:00:00.956105627   340      0x1c85610 DEBUG      webkitmediaplayer TrackPrivateBaseGStreamer.cpp:113:tagsChanged: Inspecting track at index 0 with tags: taglist, audio-codec=(string)&quot;MPEG-4\ AAC&quot;;
0:00:00.956134517   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1463:playbin3SendSelectStreamsIfAppropriate:&lt;media-player-0&gt; Checking if to send SELECT_STREAMS, m_waitingForStreamsSelectedEvent = false, haveDifferentStreamIds = true, m_currentState = READY... shouldSendSelectStreams = false
0:00:00.956173911   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1521:updateTracks:&lt;media-player-0&gt; Inspecting audio track with ID f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_1
0:00:00.956333746   340      0x1c85610 DEBUG      webkitmediaplayer TrackPrivateBaseGStreamer.cpp:113:tagsChanged: Inspecting track at index 1 with tags: taglist, private-data=(sample)00000000000daaca:None:c2VnbWVudCwgZmxhZ3M9KEdzdFNlZ21lbnRGbGFncylHU1RfU0VHTUVOVF9GTEFHX05PTkUsIHJhdGU9KGRvdWJsZSkxLCBhcHBsaWVkLXJhdGU9KGRvdWJsZSkxLCBmb3JtYXQ9KEdzdEZvcm1hdCl0aW1lLCBiYXNlPShndWludDY0KTAsIG9mZnNldD0oZ3VpbnQ2NCkwLCBzdGFydD0oZ3VpbnQ2NCkwLCBzdG9wPShndWludDY0KTE4NDQ2NzQ0MDczNzA5NTUxNjE1LCB0aW1lPShndWludDY0KTAsIHBvc2l0aW9uPShndWludDY0KTAsIGR1cmF0aW9uPShndWludDY0KTE4NDQ2NzQ0MDczNzA5NTUxNjE1OwA_:SUQzUHJpdmF0ZUZyYW1lLCBvd25lcj0oc3RyaW5nKWNvbS5hcHBsZS5zdHJlYW1pbmcudHJhbnNwb3J0U3RyZWFtVGltZXN0YW1wOwA_, nominal-bitrate=(uint)125659, audio-codec=(string)&quot;MPEG-4\ AAC&quot;, minimum-bitrate=(uint)85788, maximum-bitrate=(uint)103703, bitrate=(uint)92303;
0:00:00.956402430   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1521:updateTracks:&lt;media-player-0&gt; Inspecting audio track with ID f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_2
0:00:00.956425207   340      0x1c85610 DEBUG      webkitmediaplayer MediaPlayerPrivateGStreamer.cpp:1525:updateTracks:&lt;media-player-0&gt; audio track with ID f0963b9f548a9f7bb591f70ba2b10f0c444b9d5f65181c654403b2a206edaf76/src_2 already exists, skipping

The track orphaning code would then kick-in and try to remove the tracks no longer present in the collection, but leaving indexes unchanged, so for instance if we received an initial collection with 2 audio streams (A1, A2) and then later on A2 is removed, A3 added we would end up with a final list of (A1, A3) where A1 has an index of 0 as expected, but A3 would have an index of 2 instead of 1.

The current MediaPlayer interface for track management allows only to append a new track, you can&apos;t insert at a given index, which actually is an issue for another test I started debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733292</commentid>
    <comment_count>6</comment_count>
      <attachid>421326</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-25 05:14:56 -0800</bug_when>
    <thetext>Comment on attachment 421326
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1465
&gt;&gt; +void MediaPlayerPrivateGStreamer::updateTracks(const GRefPtr&lt;GstStreamCollection&gt; streamCollection)
&gt; 
&gt; Did you mean `const GRefPtr&lt;GstStreamCollection&gt;?`

const GRefPtr&lt;T&gt;&amp; indeed, that slipped through the crack :)

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:513
&gt;&gt; +    const char* sourceType = &quot;&quot;;
&gt; 
&gt; We could better initialize to &quot;unknown&quot;. DEBUG below could be more informative in case we don&apos;t hit the assert in a release build.

Yes good point!

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:556
&gt;&gt; +void webkitMediaStreamSrcPostStreamCollection(WebKitMediaStreamSrc* self)
&gt; 
&gt; Do you need to drop the static? I does not look to me at a first glance.

No need, good spot.

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:648
&gt;&gt; +            if (!g_strcmp0(streamId, track.id().utf8().data())) {
&gt; 
&gt; There are String operators for this:
&gt; 
&gt; inline bool operator==(const String&amp; a, const char* b) { return equal(a.impl(), reinterpret_cast&lt;const LChar*&gt;(b)); }
&gt; inline bool operator==(const char* a, const String&amp; b) { return equal(reinterpret_cast&lt;const LChar*&gt;(a), b.impl()); }

Indeed! Good cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733315</commentid>
    <comment_count>7</comment_count>
      <attachid>421522</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-25 07:06:29 -0800</bug_when>
    <thetext>Created attachment 421522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733370</commentid>
    <comment_count>8</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-02-25 09:53:30 -0800</bug_when>
    <thetext>&gt; for instance if we received an initial collection with 2 audio streams (A1, A2) and then later on A2 is removed, A3 added we would end up with a final list of (A1, A3) where A1 has an index of 0 as expected, but A3 would have an index of 2 instead of 1.

Is this something happening in actual streams or a consequence of bugs in GStreamer&apos;s handling of stream collections?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733380</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-02-25 10:08:06 -0800</bug_when>
    <thetext>afaik any demuxer can send a variable amount of stream-collection messages and decodebin3 is expected to merge them together and the &quot;app&quot; is expected to clean-up internal mappings of the collection whenever a new one is received.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734352</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-01 02:06:20 -0800</bug_when>
    <thetext>Committed r273644: &lt;https://commits.webkit.org/r273644&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 421522.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734353</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-01 02:07:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/74861022&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421326</attachid>
            <date>2021-02-23 10:35:08 -0800</date>
            <delta_ts>2021-02-25 07:06:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222322-20210223103507.patch</filename>
            <type>text/plain</type>
            <size>31194</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkxYmYzNTQ0YTQ3NTkz
OTNjZmJkNmZlYmRkMjJjNTczMzY0MzRlYi4uNzdjMjRkZDE2NjgxYzkyMjQ1YTJkNmVhNTMyM2U3
YzY4NzMzY2E4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIxLTAyLTIzICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XVtQbGF5YmluM10gU3RyZWFtIGNvbGxlY3Rpb24gaGFuZGxpbmcgZml4ZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjMyMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSB0cmFjayBvcnBoYW5pbmcg
dHJ5aW5nIHRvIGF2b2lkIHVuLW5lY2Vzc2FyeSB0cmFjayBhZGRpdGlvbi9yZW1vdmFscyB3YXMg
bWFraW5nIHRoZQorICAgICAgICB3aG9sZSB0aGluZyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgZmlu
YWwgc3RyZWFtIGNvbGxlY3Rpb24uIEFsc28gc3RyZWFtLWNvbGxlY3Rpb24gbWVzc2FnZXMKKyAg
ICAgICAgZG9uJ3QgbmVlZCB0byBiZSBoYW5kbGVkIGZyb20gYSBzeW5jaHJvbm91cyBHc3RCdXMg
aGFuZGxlciwgdGhpcyBzaG91bGQgYmUgbmVlZGVkIGZvcgorICAgICAgICBuZWVkLWNvbnRleHQg
bWVzc2FnZXMgb25seSwgc28gdGhlIGNvcnJlc3BvbmRpbmcgY29kZSBoYXMgYmVlbiByZWZhY3Rv
cmVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGFuZCBjbGVh
bnVwcyBmb3IgdGhlIG1lZGlhc3RyZWFtc3JjIGVsZW1lbnQsIG5lZWRlZCBhZnRlcgorICAgICAg
ICB0aGUgc3RyZWFtIGNvbGxlY3Rpb24gaGFuZGxpbmcgZml4ZXMuIE1vc3Qgbm90YWJseSB0aGUg
ZWxlbWVudCBub3cga2VlcHMgYW4gaW50ZXJuYWwgbGlzdCBvZgorICAgICAgICB0cmFja3MsIGlu
IGFkZGl0aW9uIHRvIG9ic2VydmluZyB0aGUgTWVkaWFTdHJlYW1Qcml2YXRlIGZvciB0b3BvbG9n
eSBjaGFuZ2VzLiBBbHNvIGl0IGVtaXRzCisgICAgICAgIGEgbmV3IHN0cmVhbSBjb2xsZWN0aW9u
IHdoZW5ldmVyIGEgbmV3IHNvdXJjZSBwYWQgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBidXQgdGhpcyBwYXRjaCBmaXhlcyBmbGFreW5lc3Mgb2YgaHR0cC90ZXN0cy9t
ZWRpYS9obHMvaGxzLWF1ZGlvLXRyYWNrcy5odG1sCisgICAgICAgIHdoZW4gdGhlIHBpcGVsaW5l
IGlzIGRyaXZlbiBieSBwbGF5YmluMy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBk
YXRlVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU5lZWRDb250ZXh0TWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
cHBlbmRQaXBlbGluZTo6aGFuZGxlTmVlZENvbnRleHRTeW5jTWVzc2FnZSk6CisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmNwcDoKKyAgICAgICAgKHN0b3BPYnNlcnZpbmdUcmFja3MpOgorICAgICAgICAod2Via2l0TWVk
aWFTdHJlYW1TcmNEaXNwb3NlKToKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFk
KToKKyAgICAgICAgKFByb2JlRGF0YTo6UHJvYmVEYXRhKToKKyAgICAgICAgKHdlYmtpdE1lZGlh
U3RyZWFtU3JjUGFkUHJvYmVDYik6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY1NldHVw
U3JjKToKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9zdFN0cmVhbUNvbGxlY3Rpb24p
OgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayk6CisgICAgICAgICh3ZWJr
aXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbSk6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNy
Y1RyYWNrRW5kZWQpOgorCiAyMDIxLTAyLTIzICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBmYXN0L21lZGlhc3RyZWFtL2NhcHR1
cmVTdHJlYW0vY2FudmFzMmQuaHRtbCBpcyBmbGFreSB0aW1pbmcgb3V0IHNpbmNlIEdTdHJlYW1l
ciAxLjE4IHVwZGF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAppbmRleCAwOTdjODMzMDVmMzBlOWI0NjU3M2I0NDA4YzNmOGU2NGEzMGYyYzhlLi5m
NzA0ZWIzNTA1ZDZkYjRjOTFlMGQyN2QwYzA4MmIyOTMxMTczYjYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTAxLDIwICsxMDEsNiBA
QAogI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAm
JiBVU0UoR1NUUkVBTUVSX01QRUdUUykKIAotI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlw
ZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtX2hh
cyMjVHlwZSA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUmVmUHRyPFR5cGUjI1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZShtYWtlV2Vha1B0cigqdGhpcyksIHR5cGUjI1RyYWNrSW5kZXgrKywgc3RyZWFtKTsgXAotICAg
ICAgICAgICAgaWYgKCF0cmFjay0+dHJhY2tJbmRleCgpKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG1fd2FudGVk
IyNUeXBlIyNTdHJlYW1JZCA9IHRyYWNrLT5pZCgpOyAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgIG1fcmVxdWVzdGVkIyNUeXBlIyNTdHJlYW1JZCA9IHRyYWNrLT5pZCgpOyAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgbV8jI3R5cGUjI1RyYWNr
cy5hZGQodHJhY2stPmlkKCksIHRyYWNrKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgbV9wbGF5ZXItPmFkZCMjVHlwZSMjVHJhY2soKnRyYWNrKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gR19TVE1UX0VORAotCiAjaWYgVVNFKEdT
VFJFQU1FUl9HTCkKICNpbmNsdWRlICJHTFZpZGVvU2lua0dTdHJlYW1lci5oIgogI2luY2x1ZGUg
IlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgpAQCAtMTQ4LDExICsxMzQsNiBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGNvbnN0IEZsb2F0U2l6ZSBzX2hvbGVQdW5jaERlZmF1
bHRGcmFtZVNpemUoMTI4MCwgNzIwKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBidXNNZXNzYWdl
Q2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2Up
OwotfQotCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCiB7CiAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwpAQCAtMjQ0LDExICsyMjUsMTAgQEAgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKICAg
ICB9CiAKICAgICBpZiAobV9waXBlbGluZSkgewotICAgICAgICBHUmVmUHRyPEdzdEJ1cz4gYnVz
ID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5l
LmdldCgpKSkpOworICAgICAgICBhdXRvIGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0
X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKICAgICAgICAgQVNTRVJUKGJ1
cyk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhidXMuZ2V0
KCksIGdwb2ludGVyKGJ1c01lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoYnVzLmdldCgpLCBHX1NJR05BTF9NQVRDSF9E
QVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKICAgICAgICAgZ3N0X2J1c19yZW1v
dmVfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7Ci0gICAgICAgIGdzdF9idXNfc2V0X3N5bmNfaGFu
ZGxlcihidXMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9waXBlbGluZS5nZXQoKSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CiAgICAgfQogCkBA
IC0xNDgyLDE2ICsxNDYyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCkKICAgICBnX2xpc3RfZnJlZV9m
dWxsKHN0cmVhbXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfZnJlZSkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotSGFzaFNldDxLPiBoYXNoU2V0
RnJvbUhhc2hNYXBLZXlzKGNvbnN0IEhhc2hNYXA8SywgVj4mIGhhc2hNYXApCi17Ci0gICAgSGFz
aFNldDxLPiBrZXlzOwotICAgIGZvciAoYXV0byYga2V5IDogaGFzaE1hcC5rZXlzKCkpCi0gICAg
ICAgIGtleXMuYWRkKGtleSk7Ci0gICAgcmV0dXJuIGtleXM7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0
aW9uPiYmIHN0cmVhbUNvbGxlY3Rpb24pCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlVHJhY2tzKGNvbnN0IEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gc3RyZWFt
Q29sbGVjdGlvbikKIHsKICAgICBBU1NFUlQoIW1faXNMZWdhY3lQbGF5YmluKTsKIApAQCAtMTUw
MiwyOSArMTQ3Myw0NiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
VHJhY2tzKEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4mJiBzdAogICAgIGJvb2wgb2xkSGFz
QXVkaW8gPSBtX2hhc0F1ZGlvOwogICAgIGJvb2wgb2xkSGFzVmlkZW8gPSBtX2hhc1ZpZGVvOwog
Ci0gICAgLy8gTmV3IHN0cmVhbSBjb2xsZWN0aW9ucyBvdmVycmlkZSBwcmV2aW91cyBvbmVzLgor
ICAgIC8vIE5ldyBzdHJlYW0gY29sbGVjdGlvbnMgb3ZlcnJpZGUgcHJldmlvdXMgb25lcyBzbyBp
biBvcmRlciB0byBrZWVwIG91ciBpbnRlcm5hbCB0cmFja3MKKyAgICAvLyBjb25zaXN0ZW50IHdp
dGggdGhlIGNvbGxlY3Rpb24gY29udGVudHMsIHdlIGNhbid0IHJldXNlIG91ciBvbGQgdHJhY2tz
LgorI2RlZmluZSBSRU1PVkVfT0xEX1RSQUNLUyh0eXBlLCBUeXBlKSBHX1NUTVRfU1RBUlQgeyAg
ICAgICAgICAgICBcCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2tJZCA6IG1fIyN0eXBl
IyNUcmFja3Mua2V5cygpKSB7ICAgIFwKKyAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtXyMjdHlw
ZSMjVHJhY2tzLmdldCh0cmFja0lkKTsgICAgICAgICAgXAorICAgICAgICAgICAgbV9wbGF5ZXIt
PnJlbW92ZSMjVHlwZSMjVHJhY2soKnRyYWNrKTsgICAgICAgICAgICAgICBcCisgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgbV8jI3R5cGUjI1RyYWNrcy5jbGVhcigpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gR19TVE1UX0VORAorCisgICAgUkVNT1ZFX09MRF9UUkFDS1MoYXVk
aW8sIEF1ZGlvKTsKKyAgICBSRU1PVkVfT0xEX1RSQUNLUyh2aWRlbywgVmlkZW8pOworICAgIFJF
TU9WRV9PTERfVFJBQ0tTKHRleHQsIFRleHQpOworCiAgICAgdW5zaWduZWQgYXVkaW9UcmFja0lu
ZGV4ID0gMDsKICAgICB1bnNpZ25lZCB2aWRlb1RyYWNrSW5kZXggPSAwOwogICAgIHVuc2lnbmVk
IHRleHRUcmFja0luZGV4ID0gMDsKLSAgICBIYXNoU2V0PEF0b21TdHJpbmc+IG9ycGhhbmVkQXVk
aW9UcmFja0lkcyA9IGhhc2hTZXRGcm9tSGFzaE1hcEtleXMobV9hdWRpb1RyYWNrcyk7Ci0gICAg
SGFzaFNldDxBdG9tU3RyaW5nPiBvcnBoYW5lZFZpZGVvVHJhY2tJZHMgPSBoYXNoU2V0RnJvbUhh
c2hNYXBLZXlzKG1fdmlkZW9UcmFja3MpOwotICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gb3JwaGFu
ZWRUZXh0VHJhY2tJZHMgPSBoYXNoU2V0RnJvbUhhc2hNYXBLZXlzKG1fdGV4dFRyYWNrcyk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEdSZWZQ
dHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShz
dHJlYW1Db2xsZWN0aW9uLmdldCgpLCBpKTsKLSAgICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9z
dHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsKLSAgICAgICAgR3N0U3RyZWFtVHlw
ZSB0eXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKIAotICAg
ICAgICBvcnBoYW5lZEF1ZGlvVHJhY2tJZHMucmVtb3ZlKHN0cmVhbUlkKTsKLSAgICAgICAgb3Jw
aGFuZWRWaWRlb1RyYWNrSWRzLnJlbW92ZShzdHJlYW1JZCk7Ci0gICAgICAgIG9ycGhhbmVkVGV4
dFRyYWNrSWRzLnJlbW92ZShzdHJlYW1JZCk7CisjZGVmaW5lIENSRUFURV9UUkFDSyh0eXBlLCBU
eXBlKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1f
aGFzIyNUeXBlID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIGlmICghdXNlTWVkaWFTb3VyY2UpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBSZWZQdHI8VHlwZSMjVHJhY2tQ
cml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFR5cGUjI1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlKG1ha2VXZWFrUHRyKCp0aGlzKSwgdHlwZSMjVHJhY2tJbmRleCwgc3RyZWFtKTsgXAorICAg
ICAgICAgICAgYXV0byB0cmFja0lkID0gdHJhY2stPmlkKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCF0eXBlIyNUcmFja0luZGV4KSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG1fd2FudGVk
IyNUeXBlIyNTdHJlYW1JZCA9IHRyYWNrSWQ7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIG1fcmVxdWVzdGVkIyNUeXBlIyNTdHJlYW1JZCA9IHRyYWNrSWQ7ICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgdHlwZSMjVHJhY2tJbmRleCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgbV8jI3R5cGUjI1RyYWNrcy5hZGQodHJhY2tJZCwgdHJhY2sp
OyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbV9wbGF5ZXItPmFkZCMjVHlw
ZSMjVHJhY2soKnRyYWNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH0gR19TVE1UX0VORAorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgIGF1dG8qIHN0cmVhbSA9IGdzdF9zdHJlYW1fY29sbGVjdGlv
bl9nZXRfc3RyZWFtKHN0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGkpOworICAgICAgICBTdHJpbmcg
c3RyZWFtSWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbSkpOworICAgICAgICBhdXRv
IHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0pOwogCiAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkluc3BlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRCAl
cyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIGlmICgodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTyAmJiBtX2F1ZGlv
VHJhY2tzLmNvbnRhaW5zKHN0cmVhbUlkKSkgfHwgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklE
RU8gJiYgbV92aWRlb1RyYWNrcy5jb250YWlucyhzdHJlYW1JZCkpCi0gICAgICAgICAgICB8fCAo
dHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUICYmIG1fdGV4dFRyYWNrcy5jb250YWlucyhzdHJl
YW1JZCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICIlcyB0cmFjayB3aXRoIElEICVzIGFscmVhZHkgZXhpc3RzLCBza2lwcGluZyIsIGdzdF9z
dHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogCiAgICAgICAgIGlmICh0eXBlICYgR1NUX1NU
UkVBTV9UWVBFX0FVRElPKQogICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKGF1ZGlvLCBBdWRpbyk7
CkBAIC0xNTM4LDE3ICsxNTI2LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnVwZGF0ZVRyYWNrcyhHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+JiYgc3QKICAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHRyYWNrIHR5cGUgZm91bmQgZm9yIHN0cmVhbSAlcyIs
IHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAotI2RlZmluZSBSRU1PVkVfT1JQSEFO
RURfVFJBQ0tTKHR5cGUsIFR5cGUpICAgICAgICAgICAgXAotICAgIGZvciAoYXV0byYgdHJhY2tJ
ZCA6IG9ycGhhbmVkIyNUeXBlIyNUcmFja0lkcykgeyAgXAotICAgICAgICBhdXRvIGl0ZXIgPSBt
XyMjdHlwZSMjVHJhY2tzLmZpbmQodHJhY2tJZCk7ICAgXAotICAgICAgICBtX3BsYXllci0+cmVt
b3ZlIyNUeXBlIyNUcmFjaygqaXRlci0+dmFsdWUpOyAgXAotICAgICAgICBtXyMjdHlwZSMjVHJh
Y2tzLnJlbW92ZShpdGVyLT5rZXkpOyAgICAgICAgICAgXAotICAgIH0KLQotICAgIFJFTU9WRV9P
UlBIQU5FRF9UUkFDS1MoYXVkaW8sIEF1ZGlvKTsKLSAgICBSRU1PVkVfT1JQSEFORURfVFJBQ0tT
KHZpZGVvLCBWaWRlbyk7Ci0gICAgUkVNT1ZFX09SUEhBTkVEX1RSQUNLUyh0ZXh0LCBUZXh0KTsK
LQogICAgIGlmIChvbGRIYXNWaWRlbyAhPSBtX2hhc1ZpZGVvIHx8IG9sZEhhc0F1ZGlvICE9IG1f
aGFzQXVkaW8pCiAgICAgICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKIApA
QCAtMTU3NCw1MiArMTU1MSwzOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlwZWxpbmUpCiAgICAgfQogCiAgICAgbV9waXBlbGlu
ZSA9IHBpcGVsaW5lOwotCi0gICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3Rf
cGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKLSAgICBn
c3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RNZXNzYWdl
KiBtZXNzYWdlLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICBhdXRvJiBwbGF5ZXIgPSAq
c3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKj4odXNlckRhdGEpOwotCi0g
ICAgICAgIGlmIChwbGF5ZXIuaGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSkpIHsKLSAgICAgICAg
ICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOwotICAgICAgICAgICAgcmV0dXJuIEdTVF9C
VVNfRFJPUDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBHU1RfQlVTX1BBU1M7Ci0gICAg
fSwgdGhpcywgbnVsbHB0cik7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN0cmVhbUNvbGxlY3Rpb25NZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NU
X01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7Ci0gICAg
ICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKLSAgICAgICAgZ3N0
X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0
UHRyKCkpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9ERUJVRwotICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJSZWNlaXZlZCBTVFJFQU1fQ09MTEVDVElPTiBtZXNzYWdlIHdpdGgg
dXBzdHJlYW0gaWQgXCIlc1wiIGRlZmluaW5nIHRoZSBmb2xsb3dpbmcgc3RyZWFtczoiLCBnc3Rf
c3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Vwc3RyZWFtX2lkKGNvbGxlY3Rpb24uZ2V0KCkpKTsKLSAg
ICAgICAgdW5zaWduZWQgbnVtU3RyZWFtcyA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6
ZShjb2xsZWN0aW9uLmdldCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bVN0cmVhbXM7IGkrKykgewotICAgICAgICAgICAgR3N0U3RyZWFtKiBzdHJlYW0gPSBnc3Rfc3Ry
ZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShjb2xsZWN0aW9uLmdldCgpLCBpKTsKLSAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIiMldSAlcyAlcyIsIGksIGdzdF9zdHJl
YW1fdHlwZV9nZXRfbmFtZShnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0pKSwgZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbSkpOwotICAgICAgICB9Ci0jZW5kaWYKKyAgICBp
ZiAobV9pc0xlZ2FjeVBsYXliaW4pCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoY29s
bGVjdGlvbikgewotICAgICAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3Rp
ZmljYXRpb246OlN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkLCBbdGhpcywgY29sbGVjdGlvbiA9IFdU
Rk1vdmUoY29sbGVjdGlvbildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+dXBk
YXRlVHJhY2tzKFdURk1vdmUoY29sbGVjdGlvbikpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0KKyAgICBBU1NFUlQoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9T
VFJFQU1fQ09MTEVDVElPTik7CisgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xs
ZWN0aW9uOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2Us
ICZjb2xsZWN0aW9uLm91dFB0cigpKTsKICNpZm5kZWYgR1NUX0RJU0FCTEVfREVCVUcKLSAgICB9
IGVsc2UgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFN
U19TRUxFQ1RFRCAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKLSAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiUmVjZWl2ZWQgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlIHNlbGVj
dGluZyB0aGUgZm9sbG93aW5nIHN0cmVhbXM6Iik7Ci0gICAgICAgIHVuc2lnbmVkIG51bVN0cmVh
bXMgPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplKG1lc3NhZ2UpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RyZWFtczsgaSsrKSB7Ci0gICAgICAg
ICAgICBHc3RTdHJlYW0qIHN0cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0
X3N0cmVhbShtZXNzYWdlLCBpKTsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIiMldSAlcyAlcyIsIGksIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZShnc3Rfc3RyZWFt
X2dldF9zdHJlYW1fdHlwZShzdHJlYW0pKSwgZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVh
bSkpOwotICAgICAgICB9Ci0jZW5kaWYKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJSZWNlaXZlZCBTVFJFQU1fQ09MTEVDVElPTiBtZXNzYWdlIHdpdGggdXBzdHJlYW0gaWQgXCIl
c1wiIGRlZmluaW5nIHRoZSBmb2xsb3dpbmcgc3RyZWFtczoiLCBnc3Rfc3RyZWFtX2NvbGxlY3Rp
b25fZ2V0X3Vwc3RyZWFtX2lkKGNvbGxlY3Rpb24uZ2V0KCkpKTsKKyAgICB1bnNpZ25lZCBudW1T
dHJlYW1zID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKGNvbGxlY3Rpb24uZ2V0KCkp
OworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgInBoaWwgQ29sbGVjdGlvbiAlcCBs
ZW46ICV1IiwgY29sbGVjdGlvbi5nZXQoKSwgbnVtU3RyZWFtcyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bVN0cmVhbXM7IGkrKykgeworICAgICAgICBHc3RTdHJlYW0qIHN0cmVh
bSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKGNvbGxlY3Rpb24uZ2V0KCksIGkp
OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICIjJXUgJXMgJXMiLCBpLCBn
c3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFt
KSksIGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKTsKICAgICB9CisjZW5kaWYKIAot
ICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpICE9IEdTVF9NRVNTQUdFX05FRURfQ09O
VEVYVCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY29sbGVjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3BsYXllciA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgY29sbGVjdGlvbiA9IFdURk1vdmUoY29sbGVjdGlvbildIHsKKyAgICAg
ICAgaWYgKHBsYXllcikKKyAgICAgICAgICAgIHBsYXllci0+dXBkYXRlVHJhY2tzKGNvbGxlY3Rp
b24pOworICAgIH0pOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFu
ZGxlTmVlZENvbnRleHRNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJU
KEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfTkVFRF9DT05URVhUKTsK
IAogICAgIGNvbnN0IGdjaGFyKiBjb250ZXh0VHlwZTsKICAgICBpZiAoIWdzdF9tZXNzYWdlX3Bh
cnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4dFR5cGUpKQpAQCAtMTg0Niw3ICsxODA5
LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0
TWVzc2FnZSogbWVzc2FnZSkKICAgICBjYXNlIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ6IHsK
ICAgICAgICAgaWYgKCFtZXNzYWdlU291cmNlSXNQbGF5YmluIHx8IG1faXNEZWxheWluZ0xvYWQp
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgdXBkYXRlU3RhdGVzKCk7CiAKICAgICAgICAg
Ly8gQ29uc3RydWN0IGEgZmlsZW5hbWUgZm9yIHRoZSBncmFwaHZpeiBkb3QgZmlsZSBvdXRwdXQu
CiAgICAgICAgIEdzdFN0YXRlIG5ld1N0YXRlOwpAQCAtMTg1Nyw2ICsxODE5LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKIAogICAgICAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmIGN1cnJlbnRTdGF0ZSA9
PSBHU1RfU1RBVEVfUEFVU0VEICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQogICAg
ICAgICAgICAgcGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlhdGUoKTsKKyAgICAg
ICAgdXBkYXRlU3RhdGVzKCk7CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTk4OSw3ICsx
OTUyLDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdl
KEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgIlJlY2VpdmVkIFNUUkVBTVNfU0VMRUNURUQsIHNldHRpbmcgbV93YWl0aW5nRm9yU3Ry
ZWFtc1NlbGVjdGVkRXZlbnQgdG8gZmFsc2UuIik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0RFQlVH
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlY2VpdmVkIFNU
UkVBTVNfU0VMRUNURUQgbWVzc2FnZSBzZWxlY3RpbmcgdGhlIGZvbGxvd2luZyBzdHJlYW1zOiIp
OworICAgICAgICB1bnNpZ25lZCBudW1TdHJlYW1zID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxl
Y3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bVN0cmVhbXM7IGkrKykgeworICAgICAgICAgICAgR3N0U3RyZWFtKiBzdHJlYW0gPSBnc3Rf
bWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zdHJlYW0obWVzc2FnZSwgaSk7CisgICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICIjJXUgJXMgJXMiLCBpLCBnc3Rfc3Ry
ZWFtX3R5cGVfZ2V0X25hbWUoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKSksIGdz
dF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlNldHRpbmcgbV93YWl0aW5n
Rm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgdG8gZmFsc2UuIik7CiAgICAgICAgIG1fd2FpdGluZ0Zv
clN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gZmFsc2U7CiAKICAgICAgICAgLy8gVW5mb3J0dW5hdGVs
eSwgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlcyBmcm9tIHBsYXliaW4zIGFyZSBoaWdobHkgdW5y
ZWxpYWJsZSwgb2Z0ZW4gb25seSBpbmNsdWRpbmcgdGhlIGF1ZGlvCkBAIC0yMDA0LDYgKzE5NzUs
OSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZBcHBy
b3ByaWF0ZSgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9T
VFJFQU1fQ09MTEVDVElPTjoKKyAgICAgICAgaGFuZGxlU3RyZWFtQ29sbGVjdGlvbk1lc3NhZ2Uo
bWVzc2FnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIlVuaGFuZGxlZCBHU3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAl
cyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSk7CiAgICAgICAgIGJyZWFrOwpAQCAt
MjczMCw5ICsyNzA0LDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAgICAgc2V0UGxheWJh
Y2tGbGFncyhwaXBlbGluZSgpKTsKIAogICAgIC8vIExldCBhbHNvIG90aGVyIGxpc3RlbmVycyBz
dWJzY3JpYmUgdG8gKGFwcGxpY2F0aW9uKSBtZXNzYWdlcyBpbiB0aGlzIGJ1cy4KLSAgICBHUmVm
UHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBF
TElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIGF1dG8gYnVzID0gYWRvcHRHUmVmKGdzdF9w
aXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIGdz
dF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbihidXMuZ2V0KCkpOwogICAgIGdzdF9i
dXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKGJ1cy5nZXQoKSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5
OjpSdW5Mb29wRGlzcGF0Y2hlcik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJt
ZXNzYWdlIiwgR19DQUxMQkFDSyhidXNNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQoYnVzLmdldCgpLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0soK1td
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHc3RNZXNzYWdlKiBtZXNzYWdl
KSB7CisgICAgICAgIHBsYXllci0+aGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKKyAgICB9KSwgdGhp
cyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGJ1cy5nZXQoKSwgInN5bmMtbWVzc2Fn
ZTo6bmVlZC1jb250ZXh0IiwgR19DQUxMQkFDSygrW10oTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UpIHsKKyAgICAgICAgcGxheWVyLT5oYW5k
bGVOZWVkQ29udGV4dE1lc3NhZ2UobWVzc2FnZSk7CisgICAgfSksIHRoaXMpOwogCiAgICAgZ19v
YmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCksIG51
bGxwdHIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgK
aW5kZXggNzkwZjY0MGQ0ZmE3MGJkNDk4ZjI0NWFmYTI2NTViNmFkOGMwNzQ4Yi4uYmUxMzA2ZjRm
YTEzN2NhMDMwMTI4NTNkYWIwNGM2N2JmMTBiOGYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMjE0LDggKzIxNCwxMCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0ZSgpOwogCiAgICAg
Ly8gQXBwZW5kIHBpcGVsaW5lIGludGVyZmFjZQotICAgIC8vIEZJWE1FOiBVc2UgdGhlIGNsaWVu
dCBpbnRlcmZhY2UgcGF0dGVybiwgQXBwZW5kUGlwZWxpbmUgZG9lcyBub3QgbmVlZCB0aGUgZnVs
bCBpbnRlcmZhY2UgdG8gdGhpcyBjbGFzcyBqdXN0IGZvciB0aGVzZSB0d28gZnVuY3Rpb25zLgot
ICAgIGJvb2wgaGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSopOworICAgIC8vIEZJWE1FOiBV
c2UgdGhlIGNsaWVudCBpbnRlcmZhY2UgcGF0dGVybiwgQXBwZW5kUGlwZWxpbmUgZG9lcyBub3Qg
bmVlZCB0aGUgZnVsbCBpbnRlcmZhY2UgdG8gdGhpcyBjbGFzcyBqdXN0IGZvciB0aGlzIGZ1bmN0
aW9uLgorICAgIGJvb2wgaGFuZGxlTmVlZENvbnRleHRNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKwor
ICAgIHZvaWQgaGFuZGxlU3RyZWFtQ29sbGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2FnZSopOwogICAg
IHZvaWQgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7CiAKICAgICB2b2lkIHRyaWdnZXJSZXBh
aW50KEdzdFNhbXBsZSopOwpAQCAtNDQzLDcgKzQ0NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGxvYWRGdWxsKGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHBpcGVsaW5lTmFtZSk7CiAKLSAgICB2b2lk
IHVwZGF0ZVRyYWNrcyhHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+JiYpOworICAgIHZvaWQg
dXBkYXRlVHJhY2tzKGNvbnN0IEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4pOwogICAgIHZv
aWQgdmlkZW9TaW5rQ2Fwc0NoYW5nZWQoR3N0UGFkKik7CiAgICAgdm9pZCB1cGRhdGVWaWRlb1Np
emVBbmRPcmllbnRhdGlvbkZyb21DYXBzKGNvbnN0IEdzdENhcHMqKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBl
bGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L0FwcGVuZFBpcGVsaW5lLmNwcAppbmRleCBiYTI4ODM5MjIzZjYzMGZiYzM4Zjk3MDIzMjFlNzFl
NWI0N2EzYjA5Li44MDk4MjMwNmRkZmVhZGI5Njk2NDliZDk4ODBmYmI0MGJmNWEyNzFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0Fw
cGVuZFBpcGVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcApAQCAtMzI5LDEyICszMjksOCBAQCBHc3RQ
YWRQcm9iZVJldHVybiBBcHBlbmRQaXBlbGluZTo6YXBwc3JjRW5kT2ZBcHBlbmRDaGVja2VyUHJv
YmUoR3N0UGFkUHJvYmVJbmZvKgogCiB2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVOZWVkQ29u
dGV4dFN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7Ci0gICAgY29uc3QgZ2NoYXIq
IGNvbnRleHRUeXBlID0gbnVsbHB0cjsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5
cGUobWVzc2FnZSwgJmNvbnRleHRUeXBlKTsKLSAgICBHU1RfVFJBQ0UoImNvbnRleHQgdHlwZTog
JXMiLCBjb250ZXh0VHlwZSk7Ci0KICAgICAvLyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlIHdpbGwgdGFrZSBjYXJlIG9mIHNldHRpbmcgdXAgZW5jcnlwdGlvbi4KLSAgICBtX3BsYXll
clByaXZhdGUtPmhhbmRsZVN5bmNNZXNzYWdlKG1lc3NhZ2UpOworICAgIG1fcGxheWVyUHJpdmF0
ZS0+aGFuZGxlTmVlZENvbnRleHRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCiB2b2lkIEFwcGVuZFBp
cGVsaW5lOjpoYW5kbGVTdGF0ZUNoYW5nZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCmluZGV4
IDE4MDM5NzU3NGNiNjdlNmQzZDViNDc0M2UyODg5OGEwM2Q3ZjUxODcuLmZjMGNmOGMwNDYxZTA5
NWM4YjEzYzFmZDY0Nzk3OWI1MThiMDczMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlLmgiCiAKICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgor
I2luY2x1ZGUgPHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw2ICs0NSw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdE1lZGlhU3RyZWFtU3JjUHVzaEF1ZGlvU2FtcGxlKFdlYktpdE1lZGlhU3RyZWFtU3JjKiwg
Y29uc3QgR1JlCiBzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1RyYWNrRW5kZWQoV2Vi
S2l0TWVkaWFTdHJlYW1TcmMqLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpOwogc3RhdGljIHZv
aWQgd2Via2l0TWVkaWFTdHJlYW1TcmNSZW1vdmVUcmFja0J5VHlwZShXZWJLaXRNZWRpYVN0cmVh
bVNyYyosIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOwogc3RhdGljIHZvaWQgd2Via2l0TWVk
aWFTdHJlYW1TcmNSZW1vdmVUcmFja09ic2VydmVyKFdlYktpdE1lZGlhU3RyZWFtU3JjKiwgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmKTsKK3N0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3Jj
UG9zdFN0cmVhbUNvbGxlY3Rpb24oV2ViS2l0TWVkaWFTdHJlYW1TcmMqKTsKIAogc3RhdGljIEdz
dFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1Q
TEFURSgidmlkZW9fc3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLAogICAgIEdT
VF9TVEFUSUNfQ0FQUygidmlkZW8veC1yYXc7dmlkZW8veC1oMjY0O3ZpZGVvL3gtdnA4IikpOwpA
QCAtMTQyLDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgR3N0RWxl
bWVudCogbV9zcmM7CisgICAgR3N0RWxlbWVudCogbV9zcmMgeyBudWxscHRyIH07CiAgICAgYm9v
bCBtX2VuYWJsZWQgeyB0cnVlIH07CiB9OwogCkBAIC0yNjMsNyArMjY1LDcgQEAgc3RydWN0IF9X
ZWJLaXRNZWRpYVN0cmVhbVNyY1ByaXZhdGUgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXRN
ZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXI+IG1lZGlhU3RyZWFtVHJhY2tPYnNlcnZlcjsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViS2l0TWVkaWFTdHJlYW1PYnNlcnZlcj4gbWVkaWFTdHJlYW1PYnNl
cnZlcjsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBzdHJlYW07Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFjazsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPj4gdHJhY2tzOwogICAgIEdVbmlxdWVQdHI8R3N0Rmxvd0NvbWJp
bmVyPiBmbG93Q29tYmluZXI7CiAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBzdHJl
YW1Db2xsZWN0aW9uOwogfTsKQEAgLTM3MywxMSArMzc1LDggQEAgc3RhdGljIHZvaWQgc3RvcE9i
c2VydmluZ1RyYWNrcyhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZikKIHsKICAgICBHU1RfT0JK
RUNUX0xPQ0soc2VsZik7CiAgICAgYXV0byogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgaWYgKHBy
aXYtPnN0cmVhbSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDogcHJpdi0+c3RyZWFtLT50
cmFja3MoKSkKLSAgICAgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tPYnNl
cnZlcihzZWxmLCAqdHJhY2spOwotICAgIH0gZWxzZSBpZiAocHJpdi0+dHJhY2spCi0gICAgICAg
IHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tPYnNlcnZlcihzZWxmLCAqcHJpdi0+dHJh
Y2spOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBwcml2LT50cmFja3MpCisgICAgICAgIHdlYmtp
dE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tPYnNlcnZlcihzZWxmLCAqdHJhY2spOwogICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNlbGYpOwogfQogCkBAIC0zOTMsNyArMzkyLDYgQEAgc3RhdGljIHZv
aWQgd2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAg
cHJpdi0+c3RyZWFtLT5yZW1vdmVPYnNlcnZlcigqcHJpdi0+bWVkaWFTdHJlYW1PYnNlcnZlcik7
CiAgICAgICAgIHByaXYtPnN0cmVhbSA9IG51bGxwdHI7CiAgICAgfQotICAgIHByaXYtPnRyYWNr
ID0gbnVsbHB0cjsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxmKTsKIAogICAgIEdTVF9DQUxM
X1BBUkVOVChHX09CSkVDVF9DTEFTUywgZGlzcG9zZSwgKG9iamVjdCkpOwpAQCAtNDQ1LDEzICs0
NDMsMTIgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNDaGFpbihH
c3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEcKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFBhZChXZWJLaXRNZWRpYVN0cmVh
bVNyYyogc2VsZiwgR3N0UGFkKiB0YXJnZXQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1w
bGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0PiYmIHRhZ3MpCitzdGF0aWMgdm9pZCB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFBhZChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0UGFkKiB0YXJn
ZXQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0
PiYmIHRhZ3MsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgc291cmNlVHlwZSkKIHsKICAgICBH
U1RfREVCVUdfT0JKRUNUKHNlbGYsICIlcyBHaG9zdGluZyAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0
X29iamVjdF9nZXRfcGF0aF9zdHJpbmcoR1NUX09CSkVDVF9DQVNUKHNlbGYpKSwgdGFyZ2V0KTsK
IAotICAgIHN0YXRpYyBBdG9taWM8dWludDMyX3Q+IG5leHRQYWRJZDsKLSAgICBhdXRvIHBhZE5h
bWUgPSBtYWtlU3RyaW5nKCJzcmNfIiwgbmV4dFBhZElkLmV4Y2hhbmdlQWRkKDEpKTsKLSAgICBh
dXRvKiBnaG9zdFBhZCA9IHdlYmtpdEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKHBhZFRl
bXBsYXRlLCBwYWROYW1lLnV0ZjgoKS5kYXRhKCksIHRhcmdldCk7CisgICAgY29uc3QgY2hhciog
cGFkTmFtZSA9IHNvdXJjZVR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8g
PyAiYXVkaW9fc3JjIiA6ICJ2aWRlb19zcmMiOworICAgIGF1dG8qIGdob3N0UGFkID0gd2Via2l0
R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUocGFkVGVtcGxhdGUsIHBhZE5hbWUsIHRhcmdl
dCk7CiAgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKGdob3N0UGFkLCBUUlVFKTsKICAgICBnc3RfZWxl
bWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksIGdob3N0UGFkKTsKIApAQCAtNDYz
LDE4ICs0NjAsMjAgQEAgc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRQYWQoV2Vi
S2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFBhZCogdGFyZ2UKIH0KIAogc3RydWN0IFByb2Jl
RGF0YSB7Ci0gICAgUHJvYmVEYXRhKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRpY1BhZFRl
bXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0PiYmIHRhZ3MsIGNvbnN0IGNo
YXIqIHRyYWNrSWQpCisgICAgUHJvYmVEYXRhKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRp
Y1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0PiYmIHRhZ3MsIGNv
bnN0IGNoYXIqIHRyYWNrSWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgc291cmNlVHlwZSkK
ICAgICAgICAgOiBlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgICwgcGFkVGVtcGxhdGUocGFkVGVt
cGxhdGUpCiAgICAgICAgICwgdGFncyhXVEZNb3ZlKHRhZ3MpKQorICAgICAgICAsIHRyYWNrSWQo
Z19zdHJkdXAodHJhY2tJZCkpCisgICAgICAgICwgc291cmNlVHlwZShzb3VyY2VUeXBlKQogICAg
IHsKLSAgICAgICAgdGhpcy0+dHJhY2tJZC5yZXNldChnX3N0cmR1cCh0cmFja0lkKSk7CiAgICAg
fQogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBlbGVtZW50OwogICAgIEdzdFN0YXRpY1BhZFRl
bXBsYXRlKiBwYWRUZW1wbGF0ZTsKICAgICBHUmVmUHRyPEdzdFRhZ0xpc3Q+IHRhZ3M7CiAgICAg
R1VuaXF1ZVB0cjxjaGFyPiB0cmFja0lkOworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUg
c291cmNlVHlwZTsKIH07CiAKIHN0YXRpYyBHc3RQYWRQcm9iZVJldHVybiB3ZWJraXRNZWRpYVN0
cmVhbVNyY1BhZFByb2JlQ2IoR3N0UGFkKiBwYWQsIEdzdFBhZFByb2JlSW5mbyogaW5mbywgUHJv
YmVEYXRhKiBkYXRhKQpAQCAtNDk2LDcgKzQ5NSwxMCBAQCBzdGF0aWMgR3N0UGFkUHJvYmVSZXR1
cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKEdzdFBhZCogcGFkLCBHc3RQYWRQcm9i
ZQogICAgICAgICBnc3RfZXZlbnRfc2V0X2dyb3VwX2lkKHN0cmVhbVN0YXJ0LCAxKTsKICAgICAg
ICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgc3RyZWFtU3RhcnQpOwogCi0gICAgICAgIHdlYmtp
dE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNlbGYsIHBhZCwgZGF0YS0+cGFkVGVtcGxhdGUsIFdURk1v
dmUoZGF0YS0+dGFncykpOworICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFBhZChzZWxm
LCBwYWQsIGRhdGEtPnBhZFRlbXBsYXRlLCBXVEZNb3ZlKGRhdGEtPnRhZ3MpLCBkYXRhLT5zb3Vy
Y2VUeXBlKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW2VsZW1lbnQgPSBkYXRh
LT5lbGVtZW50XSB7CisgICAgICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1D
b2xsZWN0aW9uKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKGVsZW1lbnQuZ2V0KCkpKTsKKyAgICAg
ICAgfSk7CiAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX1JFTU9WRTsKICAgICB9CiAgICAg
ZGVmYXVsdDoKQEAgLTUwOCwxOSArNTEwLDMxIEBAIHN0YXRpYyBHc3RQYWRQcm9iZVJldHVybiB3
ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFByb2JlQ2IoR3N0UGFkKiBwYWQsIEdzdFBhZFByb2JlCiAK
IHN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBTcmMoV2ViS2l0TWVkaWFTdHJl
YW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiB0cmFjaywgR3N0RWxlbWVudCog
ZWxlbWVudCwgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZFRlbXBsYXRlLCBib29sIG9ubHlUcmFj
aykKIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJTZXR1cCBzb3VyY2UgJSIgR1NUX1BU
Ul9GT1JNQVQgIiwgb25seSB0cmFjazogJXMiLCBlbGVtZW50LCBib29sRm9yUHJpbnRpbmcob25s
eVRyYWNrKSk7CisgICAgY29uc3QgY2hhciogc291cmNlVHlwZSA9ICIiOworICAgIHN3aXRjaCAo
dHJhY2stPnNvdXJjZSgpLnR5cGUoKSkgeworICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6QXVkaW86CisgICAgICAgIHNvdXJjZVR5cGUgPSAiYXVkaW8iOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgorICAgICAgICBz
b3VyY2VUeXBlID0gInZpZGVvIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJTZXR1cCAlcyBzb3VyY2UgZm9yIHRy
YWNrICVzLCBvbmx5IHRyYWNrOiAlcyIsIHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgpLnV0ZjgoKS5k
YXRhKCksIGJvb2xGb3JQcmludGluZyhvbmx5VHJhY2spKTsKICAgICBnc3RfYmluX2FkZChHU1Rf
QklOX0NBU1Qoc2VsZiksIGVsZW1lbnQpOwogCiAgICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNyYyIpKTsKICAgICBhdXRvIHRhZ3Mg
PSBtZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUdldFRhZ3ModHJhY2spOwogICAgIGlmICghb25seVRy
YWNrKSB7Ci0gICAgICAgIGF1dG8qIGRhdGEgPSBuZXcgUHJvYmVEYXRhKEdTVF9FTEVNRU5UX0NB
U1Qoc2VsZiksIHBhZFRlbXBsYXRlLCBXVEZNb3ZlKHRhZ3MpLCB0cmFjay0+aWQoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgYXV0byogZGF0YSA9IG5ldyBQcm9iZURhdGEoR1NUX0VMRU1FTlRf
Q0FTVChzZWxmKSwgcGFkVGVtcGxhdGUsIFdURk1vdmUodGFncyksIHRyYWNrLT5pZCgpLnV0Zjgo
KS5kYXRhKCksIHRyYWNrLT5zb3VyY2UoKS50eXBlKCkpOwogICAgICAgICBnc3RfcGFkX2FkZF9w
cm9iZShwYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLCByZWlu
dGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KHdlYmtpdE1lZGlhU3RyZWFtU3JjUGFk
UHJvYmVDYiksIGRhdGEsIFtdKGdwb2ludGVyIGRhdGEpIHsKICAgICAgICAgICAgIGRlbGV0ZSBy
ZWludGVycHJldF9jYXN0PFByb2JlRGF0YSo+KGRhdGEpOwogICAgICAgICB9KTsKICAgICB9IGVs
c2UgewogICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmUocGFkLmdldCgpLCBUUlVFKTsKLSAgICAg
ICAgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRQYWQoc2VsZiwgcGFkLmdldCgpLCBwYWRUZW1wbGF0
ZSwgV1RGTW92ZSh0YWdzKSk7CisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNl
bGYsIHBhZC5nZXQoKSwgcGFkVGVtcGxhdGUsIFdURk1vdmUodGFncyksIHRyYWNrLT5zb3VyY2Uo
KS50eXBlKCkpOwogICAgIH0KIAogICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2OwpAQCAtNTM5
LDE3ICs1NTMsMjEgQEAgc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNTZXR1cFNyYyhX
ZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW0KICAgICBnc3RfZWxlbWVudF9z
eW5jX3N0YXRlX3dpdGhfcGFyZW50KGVsZW1lbnQpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRN
ZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBz
ZWxmKQordm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKFdlYktp
dE1lZGlhU3RyZWFtU3JjKiBzZWxmKQogewogICAgIGF1dG8qIHByaXYgPSBzZWxmLT5wcml2Owot
ICAgIEFTU0VSVChwcml2LT5zdHJlYW0pOworCiAgICAgR1NUX09CSkVDVF9MT0NLKHNlbGYpOwot
ICAgIHByaXYtPnN0cmVhbUNvbGxlY3Rpb24gPSBhZG9wdEdSZWYoZ3N0X3N0cmVhbV9jb2xsZWN0
aW9uX25ldyhwcml2LT5zdHJlYW0tPmlkKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIGZvciAoYXV0
byYgdHJhY2sgOiBwcml2LT5zdHJlYW0tPnRyYWNrcygpKQorICAgIFN0cmluZyB1cHN0cmVhbUlk
OworICAgIGlmIChwcml2LT5zdHJlYW0pCisgICAgICAgIHVwc3RyZWFtSWQgPSBwcml2LT5zdHJl
YW0tPmlkKCk7CisgICAgZWxzZQorICAgICAgICB1cHN0cmVhbUlkID0gY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpOworCisgICAgcHJpdi0+c3RyZWFtQ29sbGVjdGlvbiA9IGFkb3B0R1JlZihn
c3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3KHVwc3RyZWFtSWQuYXNjaWkoKS5kYXRhKCkpKTsKKyAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogcHJpdi0+dHJhY2tzKQogICAgICAgICBnc3Rfc3RyZWFtX2Nv
bGxlY3Rpb25fYWRkX3N0cmVhbShwcml2LT5zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCB3ZWJraXRN
ZWRpYVN0cmVhbU5ldyh0cmFjay5nZXQoKSkpOwogCi0gICAgaWYgKHByaXYtPnRyYWNrKQotICAg
ICAgICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbShwcml2LT5zdHJlYW1Db2xsZWN0
aW9uLmdldCgpLCB3ZWJraXRNZWRpYVN0cmVhbU5ldyhwcml2LT50cmFjay5nZXQoKSkpOwogICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAi
UG9zdGluZyBzdHJlYW0gY29sbGVjdGlvbiIpOwpAQCAtNTY4LDggKzU4Niw3IEBAIHZvaWQgd2Vi
a2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVk
aWFTdHJlYW1UcmFja1ByCiAgICAgfSBlbHNlCiAgICAgICAgIEdTVF9JTkZPX09CSkVDVChzZWxm
LCAiVW5zdXBwb3J0ZWQgdHJhY2sgdHlwZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHRyYWNrLT50
eXBlKCkpKTsKIAotICAgIGlmICgocHJpdi0+dmlkZW9TcmMgfHwgcHJpdi0+YXVkaW9TcmMpICYm
IG9ubHlUcmFjaykKLSAgICAgICAgc2VsZi0+cHJpdi0+dHJhY2sgPSB0cmFjazsKKyAgICBzZWxm
LT5wcml2LT50cmFja3MuYXBwZW5kKHRyYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0TWVk
aWFTdHJlYW1TcmNSZW1vdmVUcmFja0J5VHlwZShXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0cmFja1R5cGUpCkBAIC01ODcsMTMgKzYwNCwxNSBA
QCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFtKFdlYktpdE1lZGlhU3RyZWFtU3Jj
KiBzZWxmLCBNZWRpYVN0cmVhbVByaXZhdAogICAgIEFTU0VSVChXRUJLSVRfSVNfTUVESUFfU1RS
RUFNX1NSQyhzZWxmKSk7CiAgICAgQVNTRVJUKCFzZWxmLT5wcml2LT5zdHJlYW0pOwogICAgIHNl
bGYtPnByaXYtPnN0cmVhbSA9IHN0cmVhbTsKLSAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RT
dHJlYW1Db2xsZWN0aW9uKHNlbGYpOwogCiAgICAgc2VsZi0+cHJpdi0+c3RyZWFtLT5hZGRPYnNl
cnZlcigqc2VsZi0+cHJpdi0+bWVkaWFTdHJlYW1PYnNlcnZlci5nZXQoKSk7CiAgICAgYXV0byB0
cmFja3MgPSBzdHJlYW0tPnRyYWNrcygpOwogICAgIGJvb2wgb25seVRyYWNrID0gdHJhY2tzLnNp
emUoKSA9PSAxOwogICAgIGZvciAoYXV0byYgdHJhY2sgOiB0cmFja3MpCiAgICAgICAgIHdlYmtp
dE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soc2VsZiwgdHJhY2suZ2V0KCksIG9ubHlUcmFjayk7CisK
KyAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKHNlbGYpOworICAg
IGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVF9DQVNUKHNlbGYpKTsKIH0KIAog
c3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoVmlkZW9TYW1wbGUoV2ViS2l0TWVk
aWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogc2FtcGxlKQpAQCAtNjE0LDE3ICs2MzMsMjIg
QEAgc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVkKFdlYktpdE1lZGlh
U3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmUKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwg
IlRyYWNrICVzIGVuZGVkIiwgdHJhY2subGFiZWwoKS51dGY4KCkuZGF0YSgpKTsKICAgICBHU1Rf
T0JKRUNUX0xPQ0soc2VsZik7Ci0gICAgZm9yIChhdXRvKiBpdGVtID0gR1NUX0VMRU1FTlRfQ0FT
VChzZWxmKS0+c3JjcGFkczsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKLSAgICAgICAgYXV0
byogY3VycmVudFBhZCA9IEdTVF9QQURfQ0FTVChpdGVtLT5kYXRhKTsKLSAgICAgICAgYXV0byBz
dHJlYW1TdGFydCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQoY3VycmVudFBh
ZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpOwotICAgICAgICBpZiAoIXN0cmVhbVN0YXJ0
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgY2hhciogc3RyZWFtSWQ7
Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFtU3RhcnQuZ2V0KCks
ICZzdHJlYW1JZCk7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHN0cmVhbUlkLCB0cmFjay5pZCgp
LnV0ZjgoKS5kYXRhKCkpKSB7Ci0gICAgICAgICAgICBwYWQgPSBjdXJyZW50UGFkOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdTVF9FTEVNRU5UX0NBU1Qo
c2VsZik7CisgICAgaWYgKGVsZW1lbnQtPm51bXBhZHMgPT0gMSkKKyAgICAgICAgcGFkID0gR1NU
X1BBRF9DQVNUKGVsZW1lbnQtPnNyY3BhZHMtPmRhdGEpOworICAgIGVsc2UgeworICAgICAgICBm
b3IgKGF1dG8qIGl0ZW0gPSBlbGVtZW50LT5zcmNwYWRzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4
dCkgeworICAgICAgICAgICAgYXV0byogY3VycmVudFBhZCA9IEdTVF9QQURfQ0FTVChpdGVtLT5k
YXRhKTsKKyAgICAgICAgICAgIGF1dG8gc3RyZWFtU3RhcnQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfc3RpY2t5X2V2ZW50KGN1cnJlbnRQYWQsIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsIDApKTsK
KyAgICAgICAgICAgIGlmICghc3RyZWFtU3RhcnQpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmVhbUlkOworICAgICAgICAgICAgZ3N0X2V2
ZW50X3BhcnNlX3N0cmVhbV9zdGFydChzdHJlYW1TdGFydC5nZXQoKSwgJnN0cmVhbUlkKTsKKyAg
ICAgICAgICAgIGlmICghZ19zdHJjbXAwKHN0cmVhbUlkLCB0cmFjay5pZCgpLnV0ZjgoKS5kYXRh
KCkpKSB7CisgICAgICAgICAgICAgICAgcGFkID0gY3VycmVudFBhZDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzZWxmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421522</attachid>
            <date>2021-02-25 07:06:29 -0800</date>
            <delta_ts>2021-03-01 02:06:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222322-20210225070627.patch</filename>
            <type>text/plain</type>
            <size>30897</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczNDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RjMzhiNmJlZjgzYjIw
NGJmOWYxYjFkOTk1ZDk4NzMxMTZiYjc4NC4uYzAyODRkYmEzOWFlMzRlYzQ5MGQwZWUyZGNjMDZm
YjVkN2U5YmM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIxLTAyLTI1ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XVtQbGF5YmluM10gU3RyZWFtIGNvbGxlY3Rpb24gaGFuZGxpbmcgZml4ZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjMyMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIFRoZSB0cmFjayBv
cnBoYW5pbmcgdHJ5aW5nIHRvIGF2b2lkIHVuLW5lY2Vzc2FyeSB0cmFjayBhZGRpdGlvbi9yZW1v
dmFscyB3YXMgbWFraW5nIHRoZQorICAgICAgICB3aG9sZSB0aGluZyBpbmNvbnNpc3RlbnQgd2l0
aCB0aGUgZmluYWwgc3RyZWFtIGNvbGxlY3Rpb24uIEFsc28gc3RyZWFtLWNvbGxlY3Rpb24gbWVz
c2FnZXMKKyAgICAgICAgZG9uJ3QgbmVlZCB0byBiZSBoYW5kbGVkIGZyb20gYSBzeW5jaHJvbm91
cyBHc3RCdXMgaGFuZGxlciwgdGhpcyBzaG91bGQgYmUgbmVlZGVkIGZvcgorICAgICAgICBuZWVk
LWNvbnRleHQgbWVzc2FnZXMgb25seSwgc28gdGhlIGNvcnJlc3BvbmRpbmcgY29kZSBoYXMgYmVl
biByZWZhY3RvcmVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRlcyBjaGFuZ2Vz
IGFuZCBjbGVhbnVwcyBmb3IgdGhlIG1lZGlhc3RyZWFtc3JjIGVsZW1lbnQsIG5lZWRlZCBhZnRl
cgorICAgICAgICB0aGUgc3RyZWFtIGNvbGxlY3Rpb24gaGFuZGxpbmcgZml4ZXMuIE1vc3Qgbm90
YWJseSB0aGUgZWxlbWVudCBub3cga2VlcHMgYW4gaW50ZXJuYWwgbGlzdCBvZgorICAgICAgICB0
cmFja3MsIGluIGFkZGl0aW9uIHRvIG9ic2VydmluZyB0aGUgTWVkaWFTdHJlYW1Qcml2YXRlIGZv
ciB0b3BvbG9neSBjaGFuZ2VzLiBBbHNvIGl0IGVtaXRzCisgICAgICAgIGEgbmV3IHN0cmVhbSBj
b2xsZWN0aW9uIHdoZW5ldmVyIGEgbmV3IHNvdXJjZSBwYWQgaGFzIGJlZW4gYWRkZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCBidXQgdGhpcyBwYXRjaCBmaXhlcyBmbGFreW5lc3Mgb2YgaHR0
cC90ZXN0cy9tZWRpYS9obHMvaGxzLWF1ZGlvLXRyYWNrcy5odG1sCisgICAgICAgIHdoZW4gdGhl
IHBpcGVsaW5lIGlzIGRyaXZlbiBieSBwbGF5YmluMy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6dXBkYXRlVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU5lZWRDb250ZXh0
TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6aGFuZGxlTmVlZENvbnRleHRTeW5jTWVzc2FnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3Ry
ZWFtU291cmNlLmNwcDoKKyAgICAgICAgKHN0b3BPYnNlcnZpbmdUcmFja3MpOgorICAgICAgICAo
d2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlKToKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFt
U3JjQWRkUGFkKToKKyAgICAgICAgKFByb2JlRGF0YTo6UHJvYmVEYXRhKToKKyAgICAgICAgKHdl
YmtpdE1lZGlhU3RyZWFtU3JjUGFkUHJvYmVDYik6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVh
bVNyY1NldHVwU3JjKToKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9zdFN0cmVhbUNv
bGxlY3Rpb24pOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayk6CisgICAg
ICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbSk6CisgICAgICAgICh3ZWJraXRNZWRp
YVN0cmVhbVNyY1RyYWNrRW5kZWQpOgorCiAyMDIxLTAyLTI1ICBXZW5zb24gSHNpZWggIDx3ZW5z
b25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIENyYXNoIGluIFZhbGlkYXRpb25C
dWJibGU6OnNob3coKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAppbmRleCAwOTdjODMzMDVmMzBlOWI0NjU3M2I0NDA4YzNmOGU2NGEzMGYyYzhlLi44
YWUwZWM0ZGZhNTRkOTI1MGE5M2FkYjVkMDQ3MzU2NGJmOGQ1ODM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTAxLDIwICsxMDEsNiBA
QAogI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAm
JiBVU0UoR1NUUkVBTUVSX01QRUdUUykKIAotI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlw
ZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtX2hh
cyMjVHlwZSA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUmVmUHRyPFR5cGUjI1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZShtYWtlV2Vha1B0cigqdGhpcyksIHR5cGUjI1RyYWNrSW5kZXgrKywgc3RyZWFtKTsgXAotICAg
ICAgICAgICAgaWYgKCF0cmFjay0+dHJhY2tJbmRleCgpKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG1fd2FudGVk
IyNUeXBlIyNTdHJlYW1JZCA9IHRyYWNrLT5pZCgpOyAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgIG1fcmVxdWVzdGVkIyNUeXBlIyNTdHJlYW1JZCA9IHRyYWNrLT5pZCgpOyAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgbV8jI3R5cGUjI1RyYWNr
cy5hZGQodHJhY2stPmlkKCksIHRyYWNrKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgbV9wbGF5ZXItPmFkZCMjVHlwZSMjVHJhY2soKnRyYWNrKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gR19TVE1UX0VORAotCiAjaWYgVVNFKEdT
VFJFQU1FUl9HTCkKICNpbmNsdWRlICJHTFZpZGVvU2lua0dTdHJlYW1lci5oIgogI2luY2x1ZGUg
IlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgpAQCAtMTQ4LDExICsxMzQsNiBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGNvbnN0IEZsb2F0U2l6ZSBzX2hvbGVQdW5jaERlZmF1
bHRGcmFtZVNpemUoMTI4MCwgNzIwKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBidXNNZXNzYWdl
Q2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2Up
OwotfQotCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCiB7CiAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwpAQCAtMjQ0LDExICsyMjUsMTAgQEAgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKICAg
ICB9CiAKICAgICBpZiAobV9waXBlbGluZSkgewotICAgICAgICBHUmVmUHRyPEdzdEJ1cz4gYnVz
ID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5l
LmdldCgpKSkpOworICAgICAgICBhdXRvIGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0
X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKICAgICAgICAgQVNTRVJUKGJ1
cyk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhidXMuZ2V0
KCksIGdwb2ludGVyKGJ1c01lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoYnVzLmdldCgpLCBHX1NJR05BTF9NQVRDSF9E
QVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKICAgICAgICAgZ3N0X2J1c19yZW1v
dmVfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7Ci0gICAgICAgIGdzdF9idXNfc2V0X3N5bmNfaGFu
ZGxlcihidXMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9waXBlbGluZS5nZXQoKSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CiAgICAgfQogCkBA
IC0xNDgyLDE2ICsxNDYyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCkKICAgICBnX2xpc3RfZnJlZV9m
dWxsKHN0cmVhbXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfZnJlZSkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotSGFzaFNldDxLPiBoYXNoU2V0
RnJvbUhhc2hNYXBLZXlzKGNvbnN0IEhhc2hNYXA8SywgVj4mIGhhc2hNYXApCi17Ci0gICAgSGFz
aFNldDxLPiBrZXlzOwotICAgIGZvciAoYXV0byYga2V5IDogaGFzaE1hcC5rZXlzKCkpCi0gICAg
ICAgIGtleXMuYWRkKGtleSk7Ci0gICAgcmV0dXJuIGtleXM7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0
aW9uPiYmIHN0cmVhbUNvbGxlY3Rpb24pCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlVHJhY2tzKGNvbnN0IEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4mIHN0cmVh
bUNvbGxlY3Rpb24pCiB7CiAgICAgQVNTRVJUKCFtX2lzTGVnYWN5UGxheWJpbik7CiAKQEAgLTE1
MDIsMjkgKzE0NzMsNDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0
ZVRyYWNrcyhHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+JiYgc3QKICAgICBib29sIG9sZEhh
c0F1ZGlvID0gbV9oYXNBdWRpbzsKICAgICBib29sIG9sZEhhc1ZpZGVvID0gbV9oYXNWaWRlbzsK
IAotICAgIC8vIE5ldyBzdHJlYW0gY29sbGVjdGlvbnMgb3ZlcnJpZGUgcHJldmlvdXMgb25lcy4K
KyAgICAvLyBOZXcgc3RyZWFtIGNvbGxlY3Rpb25zIG92ZXJyaWRlIHByZXZpb3VzIG9uZXMgc28g
aW4gb3JkZXIgdG8ga2VlcCBvdXIgaW50ZXJuYWwgdHJhY2tzCisgICAgLy8gY29uc2lzdGVudCB3
aXRoIHRoZSBjb2xsZWN0aW9uIGNvbnRlbnRzLCB3ZSBjYW4ndCByZXVzZSBvdXIgb2xkIHRyYWNr
cy4KKyNkZWZpbmUgUkVNT1ZFX09MRF9UUkFDS1ModHlwZSwgVHlwZSkgR19TVE1UX1NUQVJUIHsg
ICAgICAgICAgICAgXAorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrSWQgOiBtXyMjdHlw
ZSMjVHJhY2tzLmtleXMoKSkgeyAgICBcCisgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV8jI3R5
cGUjI1RyYWNrcy5nZXQodHJhY2tJZCk7ICAgICAgICAgIFwKKyAgICAgICAgICAgIG1fcGxheWVy
LT5yZW1vdmUjI1R5cGUjI1RyYWNrKCp0cmFjayk7ICAgICAgICAgICAgICAgXAorICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIG1fIyN0eXBlIyNUcmFja3MuY2xlYXIoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB9IEdfU1RNVF9FTkQKKworICAgIFJFTU9WRV9PTERfVFJBQ0tTKGF1
ZGlvLCBBdWRpbyk7CisgICAgUkVNT1ZFX09MRF9UUkFDS1ModmlkZW8sIFZpZGVvKTsKKyAgICBS
RU1PVkVfT0xEX1RSQUNLUyh0ZXh0LCBUZXh0KTsKKwogICAgIHVuc2lnbmVkIGF1ZGlvVHJhY2tJ
bmRleCA9IDA7CiAgICAgdW5zaWduZWQgdmlkZW9UcmFja0luZGV4ID0gMDsKICAgICB1bnNpZ25l
ZCB0ZXh0VHJhY2tJbmRleCA9IDA7Ci0gICAgSGFzaFNldDxBdG9tU3RyaW5nPiBvcnBoYW5lZEF1
ZGlvVHJhY2tJZHMgPSBoYXNoU2V0RnJvbUhhc2hNYXBLZXlzKG1fYXVkaW9UcmFja3MpOwotICAg
IEhhc2hTZXQ8QXRvbVN0cmluZz4gb3JwaGFuZWRWaWRlb1RyYWNrSWRzID0gaGFzaFNldEZyb21I
YXNoTWFwS2V5cyhtX3ZpZGVvVHJhY2tzKTsKLSAgICBIYXNoU2V0PEF0b21TdHJpbmc+IG9ycGhh
bmVkVGV4dFRyYWNrSWRzID0gaGFzaFNldEZyb21IYXNoTWFwS2V5cyhtX3RleHRUcmFja3MpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBHUmVm
UHRyPEdzdFN0cmVhbT4gc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0o
c3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgaSk7Ci0gICAgICAgIFN0cmluZyBzdHJlYW1JZChnc3Rf
c3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7Ci0gICAgICAgIEdzdFN0cmVhbVR5
cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0cmVhbS5nZXQoKSk7CiAKLSAg
ICAgICAgb3JwaGFuZWRBdWRpb1RyYWNrSWRzLnJlbW92ZShzdHJlYW1JZCk7Ci0gICAgICAgIG9y
cGhhbmVkVmlkZW9UcmFja0lkcy5yZW1vdmUoc3RyZWFtSWQpOwotICAgICAgICBvcnBoYW5lZFRl
eHRUcmFja0lkcy5yZW1vdmUoc3RyZWFtSWQpOworI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwg
VHlwZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBt
X2hhcyMjVHlwZSA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUmVmUHRyPFR5cGUjI1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNy
ZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIHR5cGUjI1RyYWNrSW5kZXgsIHN0cmVhbSk7IFwKKyAg
ICAgICAgICAgIGF1dG8gdHJhY2tJZCA9IHRyYWNrLT5pZCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghdHlwZSMjVHJhY2tJbmRleCkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBtX3dhbnRl
ZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFja0lkOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICBtX3JlcXVlc3RlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFja0lkOyAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjay0+c2V0QWN0aXZlKHRydWUpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHR5cGUjI1RyYWNrSW5kZXgrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIG1fIyN0eXBlIyNUcmFja3MuYWRkKHRyYWNrSWQsIHRyYWNr
KTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1fcGxheWVyLT5hZGQjI1R5
cGUjI1RyYWNrKCp0cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB9IEdfU1RNVF9FTkQKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICBhdXRvKiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rp
b25fZ2V0X3N0cmVhbShzdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBpKTsKKyAgICAgICAgU3RyaW5n
IHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKTsKKyAgICAgICAgYXV0
byB0eXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKTsKIAogICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJbnNwZWN0aW5nICVzIHRyYWNrIHdpdGggSUQg
JXMiLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICBpZiAoKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8gJiYgbV9hdWRp
b1RyYWNrcy5jb250YWlucyhzdHJlYW1JZCkpIHx8ICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1ZJ
REVPICYmIG1fdmlkZW9UcmFja3MuY29udGFpbnMoc3RyZWFtSWQpKQotICAgICAgICAgICAgfHwg
KHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCAmJiBtX3RleHRUcmFja3MuY29udGFpbnMoc3Ry
ZWFtSWQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiJXMgdHJhY2sgd2l0aCBJRCAlcyBhbHJlYWR5IGV4aXN0cywgc2tpcHBpbmciLCBnc3Rf
c3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KIAogICAgICAgICBpZiAodHlwZSAmIEdTVF9T
VFJFQU1fVFlQRV9BVURJTykKICAgICAgICAgICAgIENSRUFURV9UUkFDSyhhdWRpbywgQXVkaW8p
OwpAQCAtMTUzOCwxNyArMTUyNiw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp1cGRhdGVUcmFja3MoR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiYmIHN0CiAgICAgICAg
ICAgICBHU1RfV0FSTklORygiVW5rbm93biB0cmFjayB0eXBlIGZvdW5kIGZvciBzdHJlYW0gJXMi
LCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKLSNkZWZpbmUgUkVNT1ZFX09SUEhB
TkVEX1RSQUNLUyh0eXBlLCBUeXBlKSAgICAgICAgICAgIFwKLSAgICBmb3IgKGF1dG8mIHRyYWNr
SWQgOiBvcnBoYW5lZCMjVHlwZSMjVHJhY2tJZHMpIHsgIFwKLSAgICAgICAgYXV0byBpdGVyID0g
bV8jI3R5cGUjI1RyYWNrcy5maW5kKHRyYWNrSWQpOyAgIFwKLSAgICAgICAgbV9wbGF5ZXItPnJl
bW92ZSMjVHlwZSMjVHJhY2soKml0ZXItPnZhbHVlKTsgIFwKLSAgICAgICAgbV8jI3R5cGUjI1Ry
YWNrcy5yZW1vdmUoaXRlci0+a2V5KTsgICAgICAgICAgIFwKLSAgICB9Ci0KLSAgICBSRU1PVkVf
T1JQSEFORURfVFJBQ0tTKGF1ZGlvLCBBdWRpbyk7Ci0gICAgUkVNT1ZFX09SUEhBTkVEX1RSQUNL
Uyh2aWRlbywgVmlkZW8pOwotICAgIFJFTU9WRV9PUlBIQU5FRF9UUkFDS1ModGV4dCwgVGV4dCk7
Ci0KICAgICBpZiAob2xkSGFzVmlkZW8gIT0gbV9oYXNWaWRlbyB8fCBvbGRIYXNBdWRpbyAhPSBt
X2hhc0F1ZGlvKQogICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7CiAK
QEAgLTE1NzQsNTIgKzE1NTEsMzcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQogICAgIH0KIAogICAgIG1fcGlwZWxp
bmUgPSBwaXBlbGluZTsKLQotICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0
X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7Ci0gICAg
Z3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0QnVzKiwgR3N0TWVzc2Fn
ZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgYXV0byYgcGxheWVyID0g
KnN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKLQot
ICAgICAgICBpZiAocGxheWVyLmhhbmRsZVN5bmNNZXNzYWdlKG1lc3NhZ2UpKSB7Ci0gICAgICAg
ICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKLSAgICAgICAgICAgIHJldHVybiBHU1Rf
QlVTX0RST1A7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gR1NUX0JVU19QQVNTOwotICAg
IH0sIHRoaXMsIG51bGxwdHIpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZShHc3RNZXNz
YWdlKiBtZXNzYWdlKQogewotICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdT
VF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewotICAg
ICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247Ci0gICAgICAgIGdz
dF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91
dFB0cigpKTsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfREVCVUcKLSAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiUmVjZWl2ZWQgU1RSRUFNX0NPTExFQ1RJT04gbWVzc2FnZSB3aXRo
IHVwc3RyZWFtIGlkIFwiJXNcIiBkZWZpbmluZyB0aGUgZm9sbG93aW5nIHN0cmVhbXM6IiwgZ3N0
X3N0cmVhbV9jb2xsZWN0aW9uX2dldF91cHN0cmVhbV9pZChjb2xsZWN0aW9uLmdldCgpKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIG51bVN0cmVhbXMgPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Np
emUoY29sbGVjdGlvbi5nZXQoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1TdHJlYW1zOyBpKyspIHsKLSAgICAgICAgICAgIEdzdFN0cmVhbSogc3RyZWFtID0gZ3N0X3N0
cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0oY29sbGVjdGlvbi5nZXQoKSwgaSk7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICIjJXUgJXMgJXMiLCBpLCBnc3Rfc3Ry
ZWFtX3R5cGVfZ2V0X25hbWUoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKSksIGdz
dF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKTsKLSAgICAgICAgfQotI2VuZGlmCisgICAg
aWYgKG1faXNMZWdhY3lQbGF5YmluKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKGNv
bGxlY3Rpb24pIHsKLSAgICAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90
aWZpY2F0aW9uOjpTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXMsIGNvbGxlY3Rpb24gPSBX
VEZNb3ZlKGNvbGxlY3Rpb24pXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIHRoaXMtPnVw
ZGF0ZVRyYWNrcyhXVEZNb3ZlKGNvbGxlY3Rpb24pKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9CisgICAgQVNTRVJUKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0Vf
U1RSRUFNX0NPTExFQ1RJT04pOworICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29s
bGVjdGlvbjsKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdl
LCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CiAjaWZuZGVmIEdTVF9ESVNBQkxFX0RFQlVHCi0gICAg
fSBlbHNlIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVB
TVNfU0VMRUNURUQgJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIlJlY2VpdmVkIFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZSBzZWxl
Y3RpbmcgdGhlIGZvbGxvd2luZyBzdHJlYW1zOiIpOwotICAgICAgICB1bnNpZ25lZCBudW1TdHJl
YW1zID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVN0cmVhbXM7IGkrKykgewotICAgICAg
ICAgICAgR3N0U3RyZWFtKiBzdHJlYW0gPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dl
dF9zdHJlYW0obWVzc2FnZSwgaSk7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICIjJXUgJXMgJXMiLCBpLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUoZ3N0X3N0cmVh
bV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKSksIGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJl
YW0pKTsKLSAgICAgICAgfQotI2VuZGlmCisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiUmVjZWl2ZWQgU1RSRUFNX0NPTExFQ1RJT04gbWVzc2FnZSB3aXRoIHVwc3RyZWFtIGlkIFwi
JXNcIiBkZWZpbmluZyB0aGUgZm9sbG93aW5nIHN0cmVhbXM6IiwgZ3N0X3N0cmVhbV9jb2xsZWN0
aW9uX2dldF91cHN0cmVhbV9pZChjb2xsZWN0aW9uLmdldCgpKSk7CisgICAgdW5zaWduZWQgbnVt
U3RyZWFtcyA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShjb2xsZWN0aW9uLmdldCgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RyZWFtczsgaSsrKSB7CisgICAg
ICAgIEdzdFN0cmVhbSogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0o
Y29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIiMldSAlcyAlcyIsIGksIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZShnc3Rfc3RyZWFtX2dl
dF9zdHJlYW1fdHlwZShzdHJlYW0pKSwgZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbSkp
OwogICAgIH0KKyNlbmRpZgogCi0gICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgIT0g
R1NUX01FU1NBR0VfTkVFRF9DT05URVhUKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFjb2xsZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxsT25NYWluVGhyZWFkQW5k
V2FpdChbcGxheWVyID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb2xsZWN0aW9uID0gV1RGTW92ZShj
b2xsZWN0aW9uKV0geworICAgICAgICBpZiAocGxheWVyKQorICAgICAgICAgICAgcGxheWVyLT51
cGRhdGVUcmFja3MoY29sbGVjdGlvbik7CisgICAgfSk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVOZWVkQ29udGV4dE1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKK3sKKyAgICBBU1NFUlQoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVT
U0FHRV9ORUVEX0NPTlRFWFQpOwogCiAgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlOwogICAg
IGlmICghZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250ZXh0VHlw
ZSkpCkBAIC0xODQ2LDcgKzE4MDgsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIGNhc2UgR1NUX01FU1NB
R0VfU1RBVEVfQ0hBTkdFRDogewogICAgICAgICBpZiAoIW1lc3NhZ2VTb3VyY2VJc1BsYXliaW4g
fHwgbV9pc0RlbGF5aW5nTG9hZCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB1cGRhdGVT
dGF0ZXMoKTsKIAogICAgICAgICAvLyBDb25zdHJ1Y3QgYSBmaWxlbmFtZSBmb3IgdGhlIGdyYXBo
dml6IGRvdCBmaWxlIG91dHB1dC4KICAgICAgICAgR3N0U3RhdGUgbmV3U3RhdGU7CkBAIC0xODU3
LDYgKzE4MTgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogCiAgICAgICAgIGlmICghbV9pc0xlZ2FjeVBsYXli
aW4gJiYgY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbmV3U3RhdGUgPT0gR1NU
X1NUQVRFX1BMQVlJTkcpCiAgICAgICAgICAgICBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZB
cHByb3ByaWF0ZSgpOworICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKIAogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0xOTg5LDcgKzE5NTEsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgaWYgKG1f
aXNMZWdhY3lQbGF5YmluKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVjZWl2ZWQgU1RSRUFNU19TRUxFQ1RFRCwgc2V0
dGluZyBtX3dhaXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCB0byBmYWxzZS4iKTsKKyNpZm5k
ZWYgR1NUX0RJU0FCTEVfREVCVUcKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiUmVjZWl2ZWQgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlIHNlbGVjdGluZyB0aGUg
Zm9sbG93aW5nIHN0cmVhbXM6Iik7CisgICAgICAgIHVuc2lnbmVkIG51bVN0cmVhbXMgPSBnc3Rf
bWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplKG1lc3NhZ2UpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RyZWFtczsgaSsrKSB7CisgICAgICAgICAgICBHc3RT
dHJlYW0qIHN0cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbSht
ZXNzYWdlLCBpKTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIiMl
dSAlcyAlcyIsIGksIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZShnc3Rfc3RyZWFtX2dldF9zdHJl
YW1fdHlwZShzdHJlYW0pKSwgZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbSkpOworICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiU2V0dGluZyBtX3dhaXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCB0byBmYWxzZS4iKTsK
ICAgICAgICAgbV93YWl0aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgPSBmYWxzZTsKIAogICAg
ICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBTVFJFQU1TX1NFTEVDVEVEIG1lc3NhZ2VzIGZyb20gcGxh
eWJpbjMgYXJlIGhpZ2hseSB1bnJlbGlhYmxlLCBvZnRlbiBvbmx5IGluY2x1ZGluZyB0aGUgYXVk
aW8KQEAgLTIwMDQsNiArMTk3NCw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIHBsYXliaW4zU2Vu
ZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAg
ICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OOgorICAgICAgICBoYW5kbGVTdHJl
YW1Db2xsZWN0aW9uTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIEdTdHJl
YW1lciBtZXNzYWdlIHR5cGU6ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpKTsK
ICAgICAgICAgYnJlYWs7CkBAIC0yNzMwLDkgKzI3MDMsMTUgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYKICAgICBzZXRQbGF5YmFja0ZsYWdzKHBpcGVsaW5lKCkpOwogCiAgICAgLy8gTGV0IGFs
c28gb3RoZXIgbGlzdGVuZXJzIHN1YnNjcmliZSB0byAoYXBwbGljYXRpb24pIG1lc3NhZ2VzIGlu
IHRoaXMgYnVzLgotICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVs
aW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgYXV0byBi
dXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxp
bmUuZ2V0KCkpKSk7CisgICAgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKGJ1
cy5nZXQoKSk7CiAgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwoYnVzLmdldCgpLCBS
dW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1bkxvb3BEaXNwYXRjaGVyKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KGJ1cy5nZXQoKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLKGJ1c01lc3NhZ2VDYWxsYmFj
ayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChidXMuZ2V0KCksICJtZXNz
YWdlIiwgR19DQUxMQkFDSygrW10oTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIs
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UpIHsKKyAgICAgICAgcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1l
c3NhZ2UpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoYnVz
LmdldCgpLCAic3luYy1tZXNzYWdlOjpuZWVkLWNvbnRleHQiLCBHX0NBTExCQUNLKCtbXShNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR3N0TWVzc2FnZSogbWVzc2FnZSkgewor
ICAgICAgICBwbGF5ZXItPmhhbmRsZU5lZWRDb250ZXh0TWVzc2FnZShtZXNzYWdlKTsKKyAgICB9
KSwgdGhpcyk7CiAKICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBt
X3BsYXllci0+bXV0ZWQoKSwgbnVsbHB0cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA3OTBmNjQwZDRmYTcwYmQ0OThmMjQ1YWZhMjY1NWI2
YWQ4YzA3NDhiLi4zZWM3NGU2MTEwNjlkNWI4MDVhYzAzM2VmZGUwMWY1OGFmNjU1ZGMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0yMTQsOCAr
MjE0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFw
cHJvcHJpYXRlKCk7CiAKICAgICAvLyBBcHBlbmQgcGlwZWxpbmUgaW50ZXJmYWNlCi0gICAgLy8g
RklYTUU6IFVzZSB0aGUgY2xpZW50IGludGVyZmFjZSBwYXR0ZXJuLCBBcHBlbmRQaXBlbGluZSBk
b2VzIG5vdCBuZWVkIHRoZSBmdWxsIGludGVyZmFjZSB0byB0aGlzIGNsYXNzIGp1c3QgZm9yIHRo
ZXNlIHR3byBmdW5jdGlvbnMuCi0gICAgYm9vbCBoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdl
Kik7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgY2xpZW50IGludGVyZmFjZSBwYXR0ZXJuLCBBcHBl
bmRQaXBlbGluZSBkb2VzIG5vdCBuZWVkIHRoZSBmdWxsIGludGVyZmFjZSB0byB0aGlzIGNsYXNz
IGp1c3QgZm9yIHRoaXMgZnVuY3Rpb24uCisgICAgYm9vbCBoYW5kbGVOZWVkQ29udGV4dE1lc3Nh
Z2UoR3N0TWVzc2FnZSopOworCisgICAgdm9pZCBoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2Fn
ZShHc3RNZXNzYWdlKik7CiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKIAog
ICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKik7CkBAIC00NDMsNyArNDQ1LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmxTdHJpbmcpOwog
ICAgIHZvaWQgbG9hZEZ1bGwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxp
bmVOYW1lKTsKIAotICAgIHZvaWQgdXBkYXRlVHJhY2tzKEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVj
dGlvbj4mJik7CisgICAgdm9pZCB1cGRhdGVUcmFja3MoY29uc3QgR1JlZlB0cjxHc3RTdHJlYW1D
b2xsZWN0aW9uPiYpOwogICAgIHZvaWQgdmlkZW9TaW5rQ2Fwc0NoYW5nZWQoR3N0UGFkKik7CiAg
ICAgdm9pZCB1cGRhdGVWaWRlb1NpemVBbmRPcmllbnRhdGlvbkZyb21DYXBzKGNvbnN0IEdzdENh
cHMqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAppbmRleCBiYTI4ODM5MjIz
ZjYzMGZiYzM4Zjk3MDIzMjFlNzFlNWI0N2EzYjA5Li44MDk4MjMwNmRkZmVhZGI5Njk2NDliZDk4
ODBmYmI0MGJmNWEyNzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcApAQCAt
MzI5LDEyICszMjksOCBAQCBHc3RQYWRQcm9iZVJldHVybiBBcHBlbmRQaXBlbGluZTo6YXBwc3Jj
RW5kT2ZBcHBlbmRDaGVja2VyUHJvYmUoR3N0UGFkUHJvYmVJbmZvKgogCiB2b2lkIEFwcGVuZFBp
cGVsaW5lOjpoYW5kbGVOZWVkQ29udGV4dFN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2Up
CiB7Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlID0gbnVsbHB0cjsKLSAgICBnc3RfbWVz
c2FnZV9wYXJzZV9jb250ZXh0X3R5cGUobWVzc2FnZSwgJmNvbnRleHRUeXBlKTsKLSAgICBHU1Rf
VFJBQ0UoImNvbnRleHQgdHlwZTogJXMiLCBjb250ZXh0VHlwZSk7Ci0KICAgICAvLyBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlIHdpbGwgdGFrZSBjYXJlIG9mIHNldHRpbmcgdXAgZW5j
cnlwdGlvbi4KLSAgICBtX3BsYXllclByaXZhdGUtPmhhbmRsZVN5bmNNZXNzYWdlKG1lc3NhZ2Up
OworICAgIG1fcGxheWVyUHJpdmF0ZS0+aGFuZGxlTmVlZENvbnRleHRNZXNzYWdlKG1lc3NhZ2Up
OwogfQogCiB2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVTdGF0ZUNoYW5nZU1lc3NhZ2UoR3N0
TWVzc2FnZSogbWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFT
dHJlYW1Tb3VyY2UuY3BwCmluZGV4IDE4MDM5NzU3NGNiNjdlNmQzZDViNDc0M2UyODg5OGEwM2Q3
ZjUxODcuLjFjMTYwYmNlMjkyN2M4MWRkMGM3MmU1NzcwNjk3ODI5NGRlMDlkZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlLmgiCiAKICNpbmNsdWRlIDxn
c3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvV1RGR1R5cGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw2ICs0
NSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjUHVzaEF1ZGlvU2FtcGxlKFdl
YktpdE1lZGlhU3RyZWFtU3JjKiwgY29uc3QgR1JlCiBzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0
cmVhbVNyY1RyYWNrRW5kZWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqLCBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpOwogc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNSZW1vdmVUcmFja0J5
VHlwZShXZWJLaXRNZWRpYVN0cmVhbVNyYyosIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOwog
c3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNSZW1vdmVUcmFja09ic2VydmVyKFdlYktp
dE1lZGlhU3RyZWFtU3JjKiwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKTsKK3N0YXRpYyB2b2lk
IHdlYmtpdE1lZGlhU3RyZWFtU3JjUG9zdFN0cmVhbUNvbGxlY3Rpb24oV2ViS2l0TWVkaWFTdHJl
YW1TcmMqKTsKIAogc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvU3JjVGVtcGxhdGUg
PSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgidmlkZW9fc3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9Q
QURfU09NRVRJTUVTLAogICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1yYXc7dmlkZW8veC1o
MjY0O3ZpZGVvL3gtdnA4IikpOwpAQCAtMTQyLDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgR3N0RWxlbWVudCogbV9zcmM7CisgICAgR3N0RWxlbWVudCogbV9zcmMg
eyBudWxscHRyIH07CiAgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CiB9OwogCkBAIC0yNjMs
NyArMjY1LDcgQEAgc3RydWN0IF9XZWJLaXRNZWRpYVN0cmVhbVNyY1ByaXZhdGUgewogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJLaXRNZWRpYVN0cmVhbVRyYWNrT2JzZXJ2ZXI+IG1lZGlhU3RyZWFt
VHJhY2tPYnNlcnZlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0TWVkaWFTdHJlYW1PYnNl
cnZlcj4gbWVkaWFTdHJlYW1PYnNlcnZlcjsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRl
PiBzdHJlYW07Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFjazsKKyAg
ICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gdHJhY2tzOwogICAgIEdV
bmlxdWVQdHI8R3N0Rmxvd0NvbWJpbmVyPiBmbG93Q29tYmluZXI7CiAgICAgR1JlZlB0cjxHc3RT
dHJlYW1Db2xsZWN0aW9uPiBzdHJlYW1Db2xsZWN0aW9uOwogfTsKQEAgLTM3MywxMSArMzc1LDgg
QEAgc3RhdGljIHZvaWQgc3RvcE9ic2VydmluZ1RyYWNrcyhXZWJLaXRNZWRpYVN0cmVhbVNyYyog
c2VsZikKIHsKICAgICBHU1RfT0JKRUNUX0xPQ0soc2VsZik7CiAgICAgYXV0byogcHJpdiA9IHNl
bGYtPnByaXY7Ci0gICAgaWYgKHByaXYtPnN0cmVhbSkgewotICAgICAgICBmb3IgKGF1dG8mIHRy
YWNrIDogcHJpdi0+c3RyZWFtLT50cmFja3MoKSkKLSAgICAgICAgICAgIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjUmVtb3ZlVHJhY2tPYnNlcnZlcihzZWxmLCAqdHJhY2spOwotICAgIH0gZWxzZSBpZiAo
cHJpdi0+dHJhY2spCi0gICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tPYnNl
cnZlcihzZWxmLCAqcHJpdi0+dHJhY2spOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBwcml2LT50
cmFja3MpCisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjUmVtb3ZlVHJhY2tPYnNlcnZlcihz
ZWxmLCAqdHJhY2spOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOwogfQogCkBAIC0zOTMs
NyArMzkyLDYgQEAgc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNEaXNwb3NlKEdPYmpl
Y3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+c3RyZWFtLT5yZW1vdmVPYnNlcnZlcigqcHJpdi0+
bWVkaWFTdHJlYW1PYnNlcnZlcik7CiAgICAgICAgIHByaXYtPnN0cmVhbSA9IG51bGxwdHI7CiAg
ICAgfQotICAgIHByaXYtPnRyYWNrID0gbnVsbHB0cjsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
ZWxmKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZGlzcG9zZSwgKG9i
amVjdCkpOwpAQCAtNDQ1LDEzICs0NDMsMTIgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0
TWVkaWFTdHJlYW1TcmNDaGFpbihHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEcKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0Fk
ZFBhZChXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgR3N0UGFkKiB0YXJnZXQsIEdzdFN0YXRp
Y1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdMaXN0PiYmIHRhZ3MpCitz
dGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFBhZChXZWJLaXRNZWRpYVN0cmVhbVNy
Yyogc2VsZiwgR3N0UGFkKiB0YXJnZXQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0
ZSwgR1JlZlB0cjxHc3RUYWdMaXN0PiYmIHRhZ3MsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUg
c291cmNlVHlwZSkKIHsKICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICIlcyBHaG9zdGluZyAl
IiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcoR1NUX09CSkVDVF9D
QVNUKHNlbGYpKSwgdGFyZ2V0KTsKIAotICAgIHN0YXRpYyBBdG9taWM8dWludDMyX3Q+IG5leHRQ
YWRJZDsKLSAgICBhdXRvIHBhZE5hbWUgPSBtYWtlU3RyaW5nKCJzcmNfIiwgbmV4dFBhZElkLmV4
Y2hhbmdlQWRkKDEpKTsKLSAgICBhdXRvKiBnaG9zdFBhZCA9IHdlYmtpdEdzdEdob3N0UGFkRnJv
bVN0YXRpY1RlbXBsYXRlKHBhZFRlbXBsYXRlLCBwYWROYW1lLnV0ZjgoKS5kYXRhKCksIHRhcmdl
dCk7CisgICAgY29uc3QgY2hhciogcGFkTmFtZSA9IHNvdXJjZVR5cGUgPT0gUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6QXVkaW8gPyAiYXVkaW9fc3JjIiA6ICJ2aWRlb19zcmMiOworICAgIGF1
dG8qIGdob3N0UGFkID0gd2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUocGFkVGVt
cGxhdGUsIHBhZE5hbWUsIHRhcmdldCk7CiAgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKGdob3N0UGFk
LCBUUlVFKTsKICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiks
IGdob3N0UGFkKTsKIApAQCAtNDYzLDE4ICs0NjAsMjAgQEAgc3RhdGljIHZvaWQgd2Via2l0TWVk
aWFTdHJlYW1TcmNBZGRQYWQoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFBhZCogdGFy
Z2UKIH0KIAogc3RydWN0IFByb2JlRGF0YSB7Ci0gICAgUHJvYmVEYXRhKEdzdEVsZW1lbnQqIGVs
ZW1lbnQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxHc3RUYWdM
aXN0PiYmIHRhZ3MsIGNvbnN0IGNoYXIqIHRyYWNrSWQpCisgICAgUHJvYmVEYXRhKEdzdEVsZW1l
bnQqIGVsZW1lbnQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSwgR1JlZlB0cjxH
c3RUYWdMaXN0PiYmIHRhZ3MsIGNvbnN0IGNoYXIqIHRyYWNrSWQsIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgc291cmNlVHlwZSkKICAgICAgICAgOiBlbGVtZW50KGVsZW1lbnQpCiAgICAgICAg
ICwgcGFkVGVtcGxhdGUocGFkVGVtcGxhdGUpCiAgICAgICAgICwgdGFncyhXVEZNb3ZlKHRhZ3Mp
KQorICAgICAgICAsIHRyYWNrSWQoZ19zdHJkdXAodHJhY2tJZCkpCisgICAgICAgICwgc291cmNl
VHlwZShzb3VyY2VUeXBlKQogICAgIHsKLSAgICAgICAgdGhpcy0+dHJhY2tJZC5yZXNldChnX3N0
cmR1cCh0cmFja0lkKSk7CiAgICAgfQogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBlbGVtZW50
OwogICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZTsKICAgICBHUmVmUHRyPEdz
dFRhZ0xpc3Q+IHRhZ3M7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiB0cmFja0lkOworICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGUgc291cmNlVHlwZTsKIH07CiAKIHN0YXRpYyBHc3RQYWRQcm9i
ZVJldHVybiB3ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFByb2JlQ2IoR3N0UGFkKiBwYWQsIEdzdFBh
ZFByb2JlSW5mbyogaW5mbywgUHJvYmVEYXRhKiBkYXRhKQpAQCAtNDk2LDcgKzQ5NSwxMCBAQCBz
dGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gd2Via2l0TWVkaWFTdHJlYW1TcmNQYWRQcm9iZUNiKEdz
dFBhZCogcGFkLCBHc3RQYWRQcm9iZQogICAgICAgICBnc3RfZXZlbnRfc2V0X2dyb3VwX2lkKHN0
cmVhbVN0YXJ0LCAxKTsKICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgc3RyZWFtU3Rh
cnQpOwogCi0gICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFkKHNlbGYsIHBhZCwgZGF0
YS0+cGFkVGVtcGxhdGUsIFdURk1vdmUoZGF0YS0+dGFncykpOworICAgICAgICB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFBhZChzZWxmLCBwYWQsIGRhdGEtPnBhZFRlbXBsYXRlLCBXVEZNb3ZlKGRh
dGEtPnRhZ3MpLCBkYXRhLT5zb3VyY2VUeXBlKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZEFu
ZFdhaXQoW2VsZW1lbnQgPSBkYXRhLT5lbGVtZW50XSB7CisgICAgICAgICAgICB3ZWJraXRNZWRp
YVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKGVs
ZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JF
X1JFTU9WRTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTUwOCwxOSArNTEwLDMxIEBAIHN0YXRp
YyBHc3RQYWRQcm9iZVJldHVybiB3ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFByb2JlQ2IoR3N0UGFk
KiBwYWQsIEdzdFBhZFByb2JlCiAKIHN0YXRpYyB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0
dXBTcmMoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
KiB0cmFjaywgR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZFRl
bXBsYXRlLCBib29sIG9ubHlUcmFjaykKIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJT
ZXR1cCBzb3VyY2UgJSIgR1NUX1BUUl9GT1JNQVQgIiwgb25seSB0cmFjazogJXMiLCBlbGVtZW50
LCBib29sRm9yUHJpbnRpbmcob25seVRyYWNrKSk7CisgICAgY29uc3QgY2hhciogc291cmNlVHlw
ZSA9ICJ1bmtub3duIjsKKyAgICBzd2l0Y2ggKHRyYWNrLT5zb3VyY2UoKS50eXBlKCkpIHsKKyAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOgorICAgICAgICBzb3VyY2VU
eXBlID0gImF1ZGlvIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlOjpWaWRlbzoKKyAgICAgICAgc291cmNlVHlwZSA9ICJ2aWRlbyI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAiU2V0dXAgJXMgc291cmNlIGZvciB0cmFjayAlcywgb25seSB0cmFjazogJXMiLCBzb3Vy
Y2VUeXBlLCB0cmFjay0+aWQoKS51dGY4KCkuZGF0YSgpLCBib29sRm9yUHJpbnRpbmcob25seVRy
YWNrKSk7CiAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBlbGVtZW50KTsKIAog
ICAgIGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGVsZW1l
bnQsICJzcmMiKSk7CiAgICAgYXV0byB0YWdzID0gbWVkaWFTdHJlYW1UcmFja1ByaXZhdGVHZXRU
YWdzKHRyYWNrKTsKICAgICBpZiAoIW9ubHlUcmFjaykgewotICAgICAgICBhdXRvKiBkYXRhID0g
bmV3IFByb2JlRGF0YShHU1RfRUxFTUVOVF9DQVNUKHNlbGYpLCBwYWRUZW1wbGF0ZSwgV1RGTW92
ZSh0YWdzKSwgdHJhY2stPmlkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGF1dG8qIGRhdGEg
PSBuZXcgUHJvYmVEYXRhKEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksIHBhZFRlbXBsYXRlLCBXVEZN
b3ZlKHRhZ3MpLCB0cmFjay0+aWQoKS51dGY4KCkuZGF0YSgpLCB0cmFjay0+c291cmNlKCkudHlw
ZSgpKTsKICAgICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUocGFkLmdldCgpLCBHU1RfUEFEX1BST0JF
X1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxi
YWNrPih3ZWJraXRNZWRpYVN0cmVhbVNyY1BhZFByb2JlQ2IpLCBkYXRhLCBbXShncG9pbnRlciBk
YXRhKSB7CiAgICAgICAgICAgICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxQcm9iZURhdGEqPihk
YXRhKTsKICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZ3N0X3BhZF9zZXRfYWN0
aXZlKHBhZC5nZXQoKSwgVFJVRSk7Ci0gICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkUGFk
KHNlbGYsIHBhZC5nZXQoKSwgcGFkVGVtcGxhdGUsIFdURk1vdmUodGFncykpOworICAgICAgICB3
ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFBhZChzZWxmLCBwYWQuZ2V0KCksIHBhZFRlbXBsYXRlLCBX
VEZNb3ZlKHRhZ3MpLCB0cmFjay0+c291cmNlKCkudHlwZSgpKTsKICAgICB9CiAKICAgICBhdXRv
KiBwcml2ID0gc2VsZi0+cHJpdjsKQEAgLTU0MiwxNCArNTU2LDE4IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdE1lZGlhU3RyZWFtU3JjU2V0dXBTcmMoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1l
ZGlhU3RyZWFtCiBzdGF0aWMgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xs
ZWN0aW9uKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmKQogewogICAgIGF1dG8qIHByaXYgPSBz
ZWxmLT5wcml2OwotICAgIEFTU0VSVChwcml2LT5zdHJlYW0pOworCiAgICAgR1NUX09CSkVDVF9M
T0NLKHNlbGYpOwotICAgIHByaXYtPnN0cmVhbUNvbGxlY3Rpb24gPSBhZG9wdEdSZWYoZ3N0X3N0
cmVhbV9jb2xsZWN0aW9uX25ldyhwcml2LT5zdHJlYW0tPmlkKCkudXRmOCgpLmRhdGEoKSkpOwot
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBwcml2LT5zdHJlYW0tPnRyYWNrcygpKQorICAgIFN0cmlu
ZyB1cHN0cmVhbUlkOworICAgIGlmIChwcml2LT5zdHJlYW0pCisgICAgICAgIHVwc3RyZWFtSWQg
PSBwcml2LT5zdHJlYW0tPmlkKCk7CisgICAgZWxzZQorICAgICAgICB1cHN0cmVhbUlkID0gY3Jl
YXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworCisgICAgcHJpdi0+c3RyZWFtQ29sbGVjdGlvbiA9
IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3KHVwc3RyZWFtSWQuYXNjaWkoKS5k
YXRhKCkpKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogcHJpdi0+dHJhY2tzKQogICAgICAgICBn
c3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbShwcml2LT5zdHJlYW1Db2xsZWN0aW9uLmdl
dCgpLCB3ZWJraXRNZWRpYVN0cmVhbU5ldyh0cmFjay5nZXQoKSkpOwogCi0gICAgaWYgKHByaXYt
PnRyYWNrKQotICAgICAgICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbShwcml2LT5z
dHJlYW1Db2xsZWN0aW9uLmdldCgpLCB3ZWJraXRNZWRpYVN0cmVhbU5ldyhwcml2LT50cmFjay5n
ZXQoKSkpOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNlbGYpOwogCiAgICAgR1NUX0RFQlVHX09C
SkVDVChzZWxmLCAiUG9zdGluZyBzdHJlYW0gY29sbGVjdGlvbiIpOwpAQCAtNTY4LDggKzU4Niw3
IEBAIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNy
Yyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAgICAgfSBlbHNlCiAgICAgICAgIEdTVF9JTkZP
X09CSkVDVChzZWxmLCAiVW5zdXBwb3J0ZWQgdHJhY2sgdHlwZTogJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KHRyYWNrLT50eXBlKCkpKTsKIAotICAgIGlmICgocHJpdi0+dmlkZW9TcmMgfHwgcHJpdi0+
YXVkaW9TcmMpICYmIG9ubHlUcmFjaykKLSAgICAgICAgc2VsZi0+cHJpdi0+dHJhY2sgPSB0cmFj
azsKKyAgICBzZWxmLT5wcml2LT50cmFja3MuYXBwZW5kKHRyYWNrKTsKIH0KIAogc3RhdGljIHZv
aWQgd2Via2l0TWVkaWFTdHJlYW1TcmNSZW1vdmVUcmFja0J5VHlwZShXZWJLaXRNZWRpYVN0cmVh
bVNyYyogc2VsZiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0cmFja1R5cGUpCkBAIC01ODcs
MTMgKzYwNCwxNSBAQCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFtKFdlYktpdE1l
ZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVByaXZhdAogICAgIEFTU0VSVChXRUJLSVRf
SVNfTUVESUFfU1RSRUFNX1NSQyhzZWxmKSk7CiAgICAgQVNTRVJUKCFzZWxmLT5wcml2LT5zdHJl
YW0pOwogICAgIHNlbGYtPnByaXYtPnN0cmVhbSA9IHN0cmVhbTsKLSAgICB3ZWJraXRNZWRpYVN0
cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9uKHNlbGYpOwogCiAgICAgc2VsZi0+cHJpdi0+c3Ry
ZWFtLT5hZGRPYnNlcnZlcigqc2VsZi0+cHJpdi0+bWVkaWFTdHJlYW1PYnNlcnZlci5nZXQoKSk7
CiAgICAgYXV0byB0cmFja3MgPSBzdHJlYW0tPnRyYWNrcygpOwogICAgIGJvb2wgb25seVRyYWNr
ID0gdHJhY2tzLnNpemUoKSA9PSAxOwogICAgIGZvciAoYXV0byYgdHJhY2sgOiB0cmFja3MpCiAg
ICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soc2VsZiwgdHJhY2suZ2V0KCksIG9u
bHlUcmFjayk7CisKKyAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1Bvc3RTdHJlYW1Db2xsZWN0aW9u
KHNlbGYpOworICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVF9DQVNUKHNl
bGYpKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNQdXNoVmlkZW9TYW1w
bGUoV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIEdzdFNhbXBsZSogc2FtcGxlKQpAQCAtNjE0
LDE3ICs2MzMsMjIgQEAgc3RhdGljIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNUcmFja0VuZGVk
KFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmUKIAogICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc2VsZiwgIlRyYWNrICVzIGVuZGVkIiwgdHJhY2subGFiZWwoKS51dGY4KCkuZGF0YSgp
KTsKICAgICBHU1RfT0JKRUNUX0xPQ0soc2VsZik7Ci0gICAgZm9yIChhdXRvKiBpdGVtID0gR1NU
X0VMRU1FTlRfQ0FTVChzZWxmKS0+c3JjcGFkczsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsK
LSAgICAgICAgYXV0byogY3VycmVudFBhZCA9IEdTVF9QQURfQ0FTVChpdGVtLT5kYXRhKTsKLSAg
ICAgICAgYXV0byBzdHJlYW1TdGFydCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9zdGlja3lfZXZl
bnQoY3VycmVudFBhZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpOwotICAgICAgICBpZiAo
IXN0cmVhbVN0YXJ0KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgY2hh
ciogc3RyZWFtSWQ7Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFt
U3RhcnQuZ2V0KCksICZzdHJlYW1JZCk7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHN0cmVhbUlk
LCB0cmFjay5pZCgpLnV0ZjgoKS5kYXRhKCkpKSB7Ci0gICAgICAgICAgICBwYWQgPSBjdXJyZW50
UGFkOwotICAgICAgICAgICAgYnJlYWs7CisgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdTVF9F
TEVNRU5UX0NBU1Qoc2VsZik7CisgICAgaWYgKGVsZW1lbnQtPm51bXBhZHMgPT0gMSkKKyAgICAg
ICAgcGFkID0gR1NUX1BBRF9DQVNUKGVsZW1lbnQtPnNyY3BhZHMtPmRhdGEpOworICAgIGVsc2Ug
eworICAgICAgICBmb3IgKGF1dG8qIGl0ZW0gPSBlbGVtZW50LT5zcmNwYWRzOyBpdGVtOyBpdGVt
ID0gaXRlbS0+bmV4dCkgeworICAgICAgICAgICAgYXV0byogY3VycmVudFBhZCA9IEdTVF9QQURf
Q0FTVChpdGVtLT5kYXRhKTsKKyAgICAgICAgICAgIGF1dG8gc3RyZWFtU3RhcnQgPSBhZG9wdEdS
ZWYoZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KGN1cnJlbnRQYWQsIEdTVF9FVkVOVF9TVFJFQU1f
U1RBUlQsIDApKTsKKyAgICAgICAgICAgIGlmICghc3RyZWFtU3RhcnQpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmVhbUlkOworICAgICAg
ICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydChzdHJlYW1TdGFydC5nZXQoKSwgJnN0
cmVhbUlkKTsKKyAgICAgICAgICAgIGlmICh0cmFjay5pZCgpID09IHN0cmVhbUlkKSB7CisgICAg
ICAgICAgICAgICAgcGFkID0gY3VycmVudFBhZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzZWxm
KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>