<?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>210284</bug_id>
          
          <creation_ts>2020-04-09 09:48:01 -0700</creation_ts>
          <short_desc>[GStreamer] Rework WebKitWebSrc threading</short_desc>
          <delta_ts>2020-10-05 02:07:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alicia Boya García">aboya</reporter>
          <assigned_to name="Alicia Boya García">aboya</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>crvisqr</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>menard</cc>
    
    <cc>pnormand</cc>
    
    <cc>svillar</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1639688</commentid>
    <comment_count>0</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-09 09:48:01 -0700</bug_when>
    <thetext>WebKitWebSrc as it is in master has a number of race conditions
leading to occasional starvation (due to cancelling the wrong request)
or data corruption (due to pushing data from a cancelled request).

The threading situation wasn&apos;t easy to follow, as it wasn&apos;t clear
access to what members should be protected by what mutex, in what
circumstances. Also, some parts of the design were also introducing
addicional complexity, such as the first request being sent from the
main thread whereas the rest were being sent from the streaming thread
or basesrc async start.

In response, this patch reworks all the locking in WebKitWebSrc to use
WTF::DataMutex. This ensures all accesses to its (now explicit)
protected members are locked. The two mutexes and condition variables
have been simplified into one, as there was no obvious need or benefit
for two of each in this case.

Requests have been numbered, which allows to safely and atomically
ignore results from cancelled requests, avoiding data corruption
races, and makes following them in debug logs much easier.

The conditions for making and cancelling requests have been simplified
to a simpler and safer model: There is at most only one active request
at anytime, flushes cancel the request, and the first create() call
always makes the new request (both at startup and after a flush).
Debug asserts and notes about the flow of operations during basesrc
seeks have been provided.

As this effort needed a review of the entire WebKitWebSrc, cleanups,
corrections and documentation comments have been provided where
appropriate.

This patch introduces no visible behavior changes, just stability
improvements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640230</commentid>
    <comment_count>1</comment_count>
      <attachid>396095</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-10 09:53:17 -0700</bug_when>
    <thetext>Created attachment 396095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640816</commentid>
    <comment_count>2</comment_count>
      <attachid>396095</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-04-13 02:51:11 -0700</bug_when>
    <thetext>Comment on attachment 396095
Patch

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

Other than a couple of comments, LGTM, but I would like Phil to have a look at this as well since this is a big rework.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:105
&gt; -                if (resource) {
&gt; -                    auto* client = static_cast&lt;CachedResourceStreamingClient*&gt;(resource-&gt;client());
&gt; -                    if (client)
&gt; -                        client-&gt;setSourceElement(nullptr);
&gt; -
&gt; -                    resource-&gt;setClient(nullptr);
&gt; -                }
&gt; -                loader = nullptr;
&gt; +                DataMutex&lt;WebKitWebSrcPrivate::StreamingMembers&gt;::LockedWrapper members(dataMutex);
&gt; +                ASSERT(!members-&gt;resource);
&gt; +                members-&gt;loader = nullptr;

Is this right? It looks like we are forgetting to set the client to null. Then we are also checking for resources and then we set the loader to null?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:329
&gt; -    case PROP_KEEP_ALIVE:
&gt; +    case PROP_KEEP_ALIVE: {
&gt;          src-&gt;priv-&gt;keepAlive = g_value_get_boolean(value);
&gt;          break;
&gt; +    }

This does not seem necessary.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:480
&gt; +            if (gst_pad_peer_query(GST_BASE_SRC_PAD(baseSrc), query.get())) {

You seem to be sending the context query just in one way and doc says we should send it upstream and downstream, why?

OTOH, there are no other GStreamer elements that are going to answer this message because this is a very specific request, I think we do nothing by performing a context query and can go directly to posting the message.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:826
&gt; +        RunLoop::main().dispatch([protector, resource = WTFMove(members-&gt;resource), requestNumber = members-&gt;requestNumber] {

Why don&apos;t you create the protector here? If you leave it like this, you are reffing at the beginning for the function and again here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640841</commentid>
    <comment_count>3</comment_count>
      <attachid>396095</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-04-13 06:46:05 -0700</bug_when>
    <thetext>Comment on attachment 396095
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:480
&gt;&gt; +            if (gst_pad_peer_query(GST_BASE_SRC_PAD(baseSrc), query.get())) {
&gt; 
&gt; You seem to be sending the context query just in one way and doc says we should send it upstream and downstream, why?
&gt; 
&gt; OTOH, there are no other GStreamer elements that are going to answer this message because this is a very specific request, I think we do nothing by performing a context query and can go directly to posting the message.

Well this is a src element, so there&apos;s no sink pad, hence no real upstream I suppose :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640846</commentid>
    <comment_count>4</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-04-13 07:23:33 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #3)
&gt; Well this is a src element, so there&apos;s no sink pad, hence no real upstream I
&gt; suppose :)

If I were dumber, I wouldn&apos;t have head already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641321</commentid>
    <comment_count>5</comment_count>
      <attachid>396095</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-04-14 04:52:56 -0700</bug_when>
    <thetext>Comment on attachment 396095
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:480
&gt;&gt;&gt; +            if (gst_pad_peer_query(GST_BASE_SRC_PAD(baseSrc), query.get())) {
&gt;&gt; 
&gt;&gt; You seem to be sending the context query just in one way and doc says we should send it upstream and downstream, why?
&gt;&gt; 
&gt;&gt; OTOH, there are no other GStreamer elements that are going to answer this message because this is a very specific request, I think we do nothing by performing a context query and can go directly to posting the message.
&gt; 
&gt; Well this is a src element, so there&apos;s no sink pad, hence no real upstream I suppose :)

Calvaris is right, I agree there&apos;s not much point of sending a query no one would answer anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641771</commentid>
    <comment_count>6</comment_count>
      <attachid>396095</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-15 06:56:33 -0700</bug_when>
    <thetext>Comment on attachment 396095
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:105
&gt;&gt; +                members-&gt;loader = nullptr;
&gt; 
&gt; Is this right? It looks like we are forgetting to set the client to null. Then we are also checking for resources and then we set the loader to null?

Note the ASSERT(!members-&gt;resource). Reached this point, resource is null already. We were never entering into the if. The resource is already cancelled during UnLock(), which will be called during tear down by basesrc. On the other hand, the loader is preserved in the keep-alive case.

Setting `loader` to null inside the notifyAndWait() ensures that it&apos;s destroyed from the main thread, which errs in the safe side since this is WebKit network API.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:480
&gt;&gt;&gt;&gt; +            if (gst_pad_peer_query(GST_BASE_SRC_PAD(baseSrc), query.get())) {
&gt;&gt;&gt; 
&gt;&gt;&gt; You seem to be sending the context query just in one way and doc says we should send it upstream and downstream, why?
&gt;&gt;&gt; 
&gt;&gt;&gt; OTOH, there are no other GStreamer elements that are going to answer this message because this is a very specific request, I think we do nothing by performing a context query and can go directly to posting the message.
&gt;&gt; 
&gt;&gt; Well this is a src element, so there&apos;s no sink pad, hence no real upstream I suppose :)
&gt; 
&gt; Calvaris is right, I agree there&apos;s not much point of sending a query no one would answer anyway.

We are a source element, we only have downstream indeed.

Bins catch and store contexts, so after the message has been posted once -- even in a different WebKitWebSrc in the same pipeline, the query is indeed answered. (Note this is done to satisfy adaptivedemux cases where there are several HTTP source elements hanging around.)

Also, this code is not new, it has just been reindented into `members.runUnlocked()`.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:826
&gt;&gt; +        RunLoop::main().dispatch([protector, resource = WTFMove(members-&gt;resource), requestNumber = members-&gt;requestNumber] {
&gt; 
&gt; Why don&apos;t you create the protector here? If you leave it like this, you are reffing at the beginning for the function and again here.

Inertia. I could replace it with a generalized lambda capture like [protector = WTF::ensureGRef(src)] here and in every other case in the file actually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641820</commentid>
    <comment_count>7</comment_count>
      <attachid>396541</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-15 09:02:37 -0700</bug_when>
    <thetext>Created attachment 396541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641823</commentid>
    <comment_count>8</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-15 09:11:53 -0700</bug_when>
    <thetext>The updated version removes the usage of MainThreadNotifier after I identified a race condition consequence of its usage: if two tasks to make an HTTP request are passed to notify in quick succession, MainThreadNotifier discards the newest one, never sending the request.

Removing MainThreadNotifier usages also simplifies the WebKitWebSrc private destruction code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645166</commentid>
    <comment_count>9</comment_count>
      <attachid>397449</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-24 06:26:08 -0700</bug_when>
    <thetext>Created attachment 397449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645167</commentid>
    <comment_count>10</comment_count>
      <attachid>397449</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-24 06:34:33 -0700</bug_when>
    <thetext>Comment on attachment 397449
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:446
&gt; +    if (members-&gt;readPosition == members-&gt;size) {
&gt; +        GST_TRACE_OBJECT(src, &quot;just downloaded the last chunk in the file, loadFinished() is about to be called&quot;);
&gt; +        return;
&gt; +    }

I uploaded a revision of the patch after identifying and fixing a bug, fixed by these lines of code. Before they were causing Resource cancellation, and therefore, loadFinished() wasn&apos;t called and EOS wasn&apos;t sent, causing the video not to play because as far as the queues could know in that state, they were starved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645982</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-27 06:53:49 -0700</bug_when>
    <thetext>/Volumes/Data/worker/Commit-Queue/build/LayoutTests/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645984</commentid>
    <comment_count>12</comment_count>
      <attachid>397678</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-27 07:03:53 -0700</bug_when>
    <thetext>Created attachment 397678
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645985</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-27 07:04:30 -0700</bug_when>
    <thetext>ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645995</commentid>
    <comment_count>14</comment_count>
      <attachid>397680</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-04-27 07:36:22 -0700</bug_when>
    <thetext>Created attachment 397680
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646015</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-27 08:30:07 -0700</bug_when>
    <thetext>Committed r260755: &lt;https://trac.webkit.org/changeset/260755&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397680.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650651</commentid>
    <comment_count>16</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-08 09:54:55 -0700</bug_when>
    <thetext>*** Bug 209719 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651701</commentid>
    <comment_count>17</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-12 05:41:48 -0700</bug_when>
    <thetext>*** Bug 206162 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651721</commentid>
    <comment_count>18</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-12 07:21:26 -0700</bug_when>
    <thetext>*** Bug 203194 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652548</commentid>
    <comment_count>19</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-14 01:42:32 -0700</bug_when>
    <thetext>*** Bug 204654 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694654</commentid>
    <comment_count>20</comment_count>
      <attachid>397680</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-10-05 02:07:16 -0700</bug_when>
    <thetext>Comment on attachment 397680
Patch for landing

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

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:-1090
&gt; -        if (response.httpStatusCode() == 200) {
&gt; -            // Range request didn&apos;t have a ranged response; resetting offset.
&gt; -            priv-&gt;readPosition = 0;
&gt; -        } else if (response.httpStatusCode() != 206) {

Why was this removed?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396095</attachid>
            <date>2020-04-10 09:53:17 -0700</date>
            <delta_ts>2020-04-15 09:02:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210284-20200410185315.patch</filename>
            <type>text/plain</type>
            <size>70282</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4OTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTc0ZmI3ZTFiNDhiNTQ3
YjMzZTM4ZjZmMGY5MDE0M2E1NzJjZjM4OS4uNmZkNzVkNTU3ZmFhYTg0NGY2NDk0MWE2MGE5OTlm
ZTdjYzNiYWU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA0LTA5ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBSZXdvcmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0V2ViU3JjIGFzIGl0IGlzIGluIG1hc3RlciBo
YXMgYSBudW1iZXIgb2YgcmFjZSBjb25kaXRpb25zCisgICAgICAgIGxlYWRpbmcgdG8gb2NjYXNp
b25hbCBzdGFydmF0aW9uIChkdWUgdG8gY2FuY2VsbGluZyB0aGUgd3JvbmcgcmVxdWVzdCkKKyAg
ICAgICAgb3IgZGF0YSBjb3JydXB0aW9uIChkdWUgdG8gcHVzaGluZyBkYXRhIGZyb20gYSBjYW5j
ZWxsZWQgcmVxdWVzdCkuCisKKyAgICAgICAgVGhlIHRocmVhZGluZyBzaXR1YXRpb24gd2Fzbid0
IGVhc3kgdG8gZm9sbG93LCBhcyBpdCB3YXNuJ3QgY2xlYXIKKyAgICAgICAgYWNjZXNzIHRvIHdo
YXQgbWVtYmVycyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IHdoYXQgbXV0ZXgsIGluIHdoYXQKKyAg
ICAgICAgY2lyY3Vtc3RhbmNlcy4gQWxzbywgc29tZSBwYXJ0cyBvZiB0aGUgZGVzaWduIHdlcmUg
YWxzbyBpbnRyb2R1Y2luZworICAgICAgICBhZGRpY2lvbmFsIGNvbXBsZXhpdHksIHN1Y2ggYXMg
dGhlIGZpcnN0IHJlcXVlc3QgYmVpbmcgc2VudCBmcm9tIHRoZQorICAgICAgICBtYWluIHRocmVh
ZCB3aGVyZWFzIHRoZSByZXN0IHdlcmUgYmVpbmcgc2VudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhy
ZWFkCisgICAgICAgIG9yIGJhc2VzcmMgYXN5bmMgc3RhcnQuCisKKyAgICAgICAgSW4gcmVzcG9u
c2UsIHRoaXMgcGF0Y2ggcmV3b3JrcyBhbGwgdGhlIGxvY2tpbmcgaW4gV2ViS2l0V2ViU3JjIHRv
IHVzZQorICAgICAgICBXVEY6OkRhdGFNdXRleC4gVGhpcyBlbnN1cmVzIGFsbCBhY2Nlc3NlcyB0
byBpdHMgKG5vdyBleHBsaWNpdCkKKyAgICAgICAgcHJvdGVjdGVkIG1lbWJlcnMgYXJlIGxvY2tl
ZC4gVGhlIHR3byBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVzCisgICAgICAgIGhhdmUg
YmVlbiBzaW1wbGlmaWVkIGludG8gb25lLCBhcyB0aGVyZSB3YXMgbm8gb2J2aW91cyBuZWVkIG9y
IGJlbmVmaXQKKyAgICAgICAgZm9yIHR3byBvZiBlYWNoIGluIHRoaXMgY2FzZS4KKworICAgICAg
ICBSZXF1ZXN0cyBoYXZlIGJlZW4gbnVtYmVyZWQsIHdoaWNoIGFsbG93cyB0byBzYWZlbHkgYW5k
IGF0b21pY2FsbHkKKyAgICAgICAgaWdub3JlIHJlc3VsdHMgZnJvbSBjYW5jZWxsZWQgcmVxdWVz
dHMsIGF2b2lkaW5nIGRhdGEgY29ycnVwdGlvbgorICAgICAgICByYWNlcywgYW5kIG1ha2VzIGZv
bGxvd2luZyB0aGVtIGluIGRlYnVnIGxvZ3MgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgVGhlIGNv
bmRpdGlvbnMgZm9yIG1ha2luZyBhbmQgY2FuY2VsbGluZyByZXF1ZXN0cyBoYXZlIGJlZW4gc2lt
cGxpZmllZAorICAgICAgICB0byBhIHNpbXBsZXIgYW5kIHNhZmVyIG1vZGVsOiBUaGVyZSBpcyBh
dCBtb3N0IG9ubHkgb25lIGFjdGl2ZSByZXF1ZXN0CisgICAgICAgIGF0IGFueXRpbWUsIGZsdXNo
ZXMgY2FuY2VsIHRoZSByZXF1ZXN0LCBhbmQgdGhlIGZpcnN0IGNyZWF0ZSgpIGNhbGwKKyAgICAg
ICAgYWx3YXlzIG1ha2VzIHRoZSBuZXcgcmVxdWVzdCAoYm90aCBhdCBzdGFydHVwIGFuZCBhZnRl
ciBhIGZsdXNoKS4KKyAgICAgICAgRGVidWcgYXNzZXJ0cyBhbmQgbm90ZXMgYWJvdXQgdGhlIGZs
b3cgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgYmFzZXNyYworICAgICAgICBzZWVrcyBoYXZlIGJlZW4g
cHJvdmlkZWQuCisKKyAgICAgICAgQXMgdGhpcyBlZmZvcnQgbmVlZGVkIGEgcmV2aWV3IG9mIHRo
ZSBlbnRpcmUgV2ViS2l0V2ViU3JjLCBjbGVhbnVwcywKKyAgICAgICAgY29ycmVjdGlvbnMgYW5k
IGRvY3VtZW50YXRpb24gY29tbWVudHMgaGF2ZSBiZWVuIHByb3ZpZGVkIHdoZXJlCisgICAgICAg
IGFwcHJvcHJpYXRlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB2aXNpYmxl
IGJlaGF2aW9yIGNoYW5nZXMsIGp1c3Qgc3RhYmlsaXR5CisgICAgICAgIGltcHJvdmVtZW50cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJLaXRXZWJTcmNQcml2YXRlOjp+V2ViS2l0V2Vi
U3JjUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KToKKyAgICAg
ICAgKHdlYmtpdFdlYlNyY1Jlc2V0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NvbnN0cnVjdGVk
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdl
YlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldENvbnRleHQpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjU2VuZEV2ZW50KToKKyAgICAgICAgKHJlc3RhcnRMb2FkZXJJZk5l
ZWRlZCk6CisgICAgICAgIChzdG9wTG9hZGVySWZOZWVkZWQpOgorICAgICAgICAod2ViS2l0V2Vi
U3JjQ3JlYXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY01ha2VSZXF1ZXN0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAg
ICAod2ViS2l0V2ViU3JjR2V0U2l6ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNJc1NlZWthYmxl
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0RvU2Vlayk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNR
dWVyeSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNVbkxvY2spOgorICAgICAgICAod2ViS2l0V2Vi
U3JjVW5Mb2NrU3RvcCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAod2ViS2l0U3JjUGFzc2VkQ09S
U0FjY2Vzc0NoZWNrKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUpOgorICAgICAgICAoQ2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZCk6CisgICAgICAgIChDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKToKKyAgICAg
ICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAg
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
d2ViS2l0U3JjV291bGRUYWludE9yaWdpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oOgorCiAyMDIwLTA0LTA3ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVy
XSBMb2cgYSB3YXJuaW5nIGlmIHBsYXliaW4gaXMgbm90IGZvdW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3Ry
ZWFtZXIuaAppbmRleCBkOTQwZjhjYTBmOTUwZmY0MjQzZmU0NTYyOTRjYmYzZTQ4NTJkMzRlLi4x
OTUwOWZlMWZkZjdjNjc0NzdiYjlhOGJiNjdiYmNiYmYxZTA1ZWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CiAKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgV2ViS2l0VmlkZW9TaW5rOwot
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyYyBXZWJLaXRXZWJTcmM7CitzdHJ1Y3QgV2ViS2l0
V2ViU3JjOwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHR5cGVkZWYgc3RydWN0IF9Hc3RHTERp
c3BsYXkgR3N0R0xEaXNwbGF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVh
bWVyLmNwcAppbmRleCBlOWZlYjIxMDBhN2VmNWY1YjEwYjg2M2E1NzU2ZDcwNGMzN2M1NTJhLi5j
OGQ5ODUyYjNhNzAwNWYyMDkxY2U3MmYwNDQyY2FiMjkwOTM5MzJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9l
Z2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRk
LgotICogIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICogIENvcHlyaWdodCAoQykg
MjAxOSwgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsMTEgKzM0
LDEzIEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgPGNzdGRpbnQ+
CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTXV0ZXguaD4K
ICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Cit1c2luZyBXVEY6OkRhdGFNdXRleDsKIAogLy8gTmV2ZXIgcGF1c2UgZG93bmxvYWQgb2YgbWVk
aWEgcmVzb3VyY2VzIHNtYWxsZXIgdGhhbiAyTWlCLgogI2RlZmluZSBTTUFMTF9NRURJQV9SRVNP
VVJDRV9NQVhfU0laRSAyICogMTAyNCAqIDEwMjQKQEAgLTU1LDcgKzU3LDcgQEAgY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1NZWRpYVJl
c291cmNlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk7CiBwdWJsaWM6Ci0g
ICAgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiwgUmVzb3VyY2VS
ZXF1ZXN0JiYpOworICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNy
YyosIFJlc291cmNlUmVxdWVzdCYmLCB1bnNpZ25lZCByZXF1ZXN0TnVtYmVyKTsKICAgICB2aXJ0
dWFsIH5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpOwogCiAgICAgY29uc3QgSGFzaFNl
dDxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+PiYgc2VjdXJpdHlPcmlnaW5zKCkgY29u
c3QgeyByZXR1cm4gbV9vcmlnaW5zOyB9CkBAIC04MCw2ICs4Miw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBmbG9hdCBzX3JlZHVjZUJsb2Nrc2l6ZUZhY3RvciB7IDAuNSB9Owog
ICAgIGludCBtX3JlZHVjZUJsb2Nrc2l6ZUNvdW50IHsgMCB9OwogICAgIGludCBtX2luY3JlYXNl
QmxvY2tzaXplQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9yZXF1ZXN0TnVtYmVyOwogCiAg
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NyYzsKICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1
ZXN0OwpAQCAtOTIsNjEgKzk1LDc1IEBAIGVudW0gTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlv
biB7CiAgICAgRGlzcG9zZSA9IDEgPDwgMiwKIH07CiAKLXN0cnVjdCBfV2ViS2l0V2ViU3JjUHJp
dmF0ZSB7Ci0gICAgfl9XZWJLaXRXZWJTcmNQcml2YXRlKCkKK3N0cnVjdCBXZWJLaXRXZWJTcmNQ
cml2YXRlIHsKKyAgICB+V2ViS2l0V2ViU3JjUHJpdmF0ZSgpCiAgICAgewogICAgICAgICBpZiAo
bm90aWZpZXIgJiYgbm90aWZpZXItPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbm90aWZpZXIt
Pm5vdGlmeUFuZFdhaXQoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6RGlzcG9zZSwgWyZd
IHsKLSAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byogY2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQq
PihyZXNvdXJjZS0+Y2xpZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5zZXRTb3VyY2VFbGVtZW50KG51bGxwdHIp
OwotCi0gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxvYWRlciA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJl
cnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoZGF0YU11dGV4KTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIW1lbWJlcnMtPnJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBtZW1iZXJzLT5sb2Fk
ZXIgPSBudWxscHRyOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBub3RpZmllci0+aW52
YWxpZGF0ZSgpOwogICAgICAgICAgICAgbm90aWZpZXIgPSBudWxscHRyOwogICAgICAgICB9CiAg
ICAgfQogCisgICAgLy8gQ29uc3RhbnRzIGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb246
CisgICAgUmVmUHRyPE1haW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFkU291cmNlTm90aWZpY2F0
aW9uPj4gbm90aWZpZXI7CisgICAgdW5zaWduZWQgbWluaW11bUJsb2Nrc2l6ZTsKKworICAgIC8v
IENvbmZpZ3VyYXRpb24gb2YgdGhlIGVsZW1lbnQgKHByb3BlcnRpZXMgc2V0IGJ5IHRoZSB1c2Vy
IG9mIFdlYktpdFdlYlNyYyk6CisgICAgLy8gVGhleSBjYW4gb25seSBjaGFuZ2Ugd2hlbiBzdGF0
ZSA8IFBBVVNFRC4KICAgICBDU3RyaW5nIG9yaWdpbmFsVVJJOwotICAgIENTdHJpbmcgcmVkaXJl
Y3RlZFVSSTsKICAgICBib29sIGtlZXBBbGl2ZTsKICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVy
ZT4gZXh0cmFIZWFkZXJzOwogICAgIGJvb2wgY29tcHJlc3M7CiAgICAgR1VuaXF1ZVB0cjxnY2hh
cj4gaHR0cE1ldGhvZDsKLSAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwotICAgIFJl
ZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI+IGxvYWRlcjsKLSAgICBSZWZQdHI8UGxh
dGZvcm1NZWRpYVJlc291cmNlPiByZXNvdXJjZTsKLSAgICBSZWZQdHI8TWFpblRocmVhZE5vdGlm
aWVyPE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAgICBib29sIGRp
ZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2s7Ci0gICAgYm9vbCB3ZXJlSGVhZGVyc1JlY2VpdmVkOwot
ICAgIENvbmRpdGlvbiBoZWFkZXJzQ29uZGl0aW9uOwotICAgIExvY2sgcmVzcG9uc2VMb2NrOwot
ICAgIGJvb2wgd2FzUmVzcG9uc2VSZWNlaXZlZDsKLSAgICBDb25kaXRpb24gcmVzcG9uc2VDb25k
aXRpb247Ci0gICAgYm9vbCBkb2VzSGF2ZUVPUzsKLSAgICBib29sIGlzRmx1c2hpbmcgeyBmYWxz
ZSB9OwotICAgIHVpbnQ2NF90IHJlYWRQb3NpdGlvbjsKLSAgICB1aW50NjRfdCByZXF1ZXN0ZWRQ
b3NpdGlvbjsKLSAgICB1aW50NjRfdCBzdG9wUG9zaXRpb247Ci0gICAgYm9vbCBpc0R1cmF0aW9u
U2V0OwotICAgIGJvb2wgaGF2ZVNpemU7Ci0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBib29sIGlz
U2Vla2FibGU7Ci0gICAgYm9vbCBpc1NlZWtpbmc7Ci0gICAgYm9vbCB3YXNTZWVraW5nIHsgZmFs
c2UgfTsKLSAgICB1bnNpZ25lZCBtaW5pbXVtQmxvY2tzaXplOwotICAgIExvY2sgYWRhcHRlckxv
Y2s7Ci0gICAgQ29uZGl0aW9uIGFkYXB0ZXJDb25kaXRpb247Ci0gICAgYm9vbCBpc0Rvd25sb2Fk
U3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBHUmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7Ci0g
ICAgR1JlZlB0cjxHc3RFdmVudD4gaHR0cEhlYWRlcnNFdmVudDsKLSAgICBHVW5pcXVlUHRyPEdz
dFN0cnVjdHVyZT4gaHR0cEhlYWRlcnM7Ci0gICAgV2FsbFRpbWUgZG93bmxvYWRTdGFydFRpbWUg
eyBXYWxsVGltZTo6bmFuKCkgfTsKLSAgICB1aW50NjRfdCB0b3RhbERvd25sb2FkZWRCeXRlcyB7
IDAgfTsKKworICAgIHN0cnVjdCBTdHJlYW1pbmdNZW1iZXJzIHsKKyAgICAgICAgLy8gUHJvcGVy
dGllcyBpbml0aWFsbHkgZW1wdHksIGJ1dCBzZXQgb25jZSB0aGUgZmlyc3QgSFRUUCByZXNwb25z
ZSBhcnJpdmVzOgorICAgICAgICBib29sIHdhc1Jlc3BvbnNlUmVjZWl2ZWQ7CisgICAgICAgIENT
dHJpbmcgcmVkaXJlY3RlZFVSSTsKKyAgICAgICAgYm9vbCBkaWRQYXNzQWNjZXNzQ29udHJvbENo
ZWNrOworICAgICAgICBib29sIGhhdmVTaXplOworICAgICAgICB1aW50NjRfdCBzaXplOworICAg
ICAgICBib29sIGlzU2Vla2FibGU7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gcGVuZGluZ0Nh
cHM7CisgICAgICAgIEdSZWZQdHI8R3N0TWVzc2FnZT4gcGVuZGluZ0h0dHBIZWFkZXJzTWVzc2Fn
ZTsgLy8gU2V0IGZyb20gTVQsIHNlbnQgZnJvbSBjcmVhdGUoKS4KKyAgICAgICAgR1JlZlB0cjxH
c3RFdmVudD4gcGVuZGluZ0h0dHBIZWFkZXJzRXZlbnQ7IC8vIFNldCBmcm9tIE1ULCBzZW50IGZy
b20gY3JlYXRlKCkuCisKKyAgICAgICAgLy8gUHJvcGVydGllcyB1cGRhdGVkIHdpdGggZXZlcnkg
ZG93bmxvYWRlZCBkYXRhIGJsb2NrOgorICAgICAgICBXYWxsVGltZSBkb3dubG9hZFN0YXJ0VGlt
ZSB7IFdhbGxUaW1lOjpuYW4oKSB9OworICAgICAgICB1aW50NjRfdCB0b3RhbERvd25sb2FkZWRC
eXRlcyB7IDAgfTsKKyAgICAgICAgYm9vbCBkb2VzSGF2ZUVPUzsgLy8gU2V0IGJvdGggd2hlbiB3
ZSByZWFjaCBzdG9wUG9zaXRpb24gYW5kIG9uIGVycm9ycyAoaW5jbHVkaW5nIG9uIHJlc3BvbnNl
UmVjZWl2ZWQpLgorICAgICAgICBib29sIGlzRG93bmxvYWRTdXNwZW5kZWQgeyBmYWxzZSB9OyAv
LyBTZXQgdG8gdHJ1ZSBmcm9tIHRoZSBuZXR3b3JrIGhhbmRsZXIgd2hlbiB0aGUgaGlnaCB3YXRl
ciBsZXZlbCBpcyByZWFjaGVkLgorCisgICAgICAgIC8vIE9idGFpbmVkIGJ5IG1lYW5zIG9mIEdz
dENvbnRleHQgcXVlcmllcyBiZWZvcmUgbWFraW5nIHRoZSBmaXJzdCBIVFRQIHJlcXVlc3QuCisg
ICAgICAgIC8vIFdlIHVzZSBpdCBmb3IgZ2V0dGluZyBhY2Nlc3MgdG8gV2ViS2l0IG5ldHdvcmtp
bmcgb2JqZWN0czogdGhlIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlciBmYWN0b3J5IFtjcmVh
dGVSZXNvdXJjZUxvYWRlcigpXQorICAgICAgICAvLyBhbmQgdGhlIHBsYXllciBIVFRQIHJlZmVy
cmVyIHN0cmluZy4KKyAgICAgICAgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIHBsYXllcjsKKworICAg
ICAgICAvLyBQcm9wZXJ0aWVzIHVzZWQgZm9yIEdTdHJlYW1lciBkYXRhLWZsb3cgaW4gY3JlYXRl
KCkuCisgICAgICAgIGJvb2wgaXNGbHVzaGluZyB7IGZhbHNlIH07CisgICAgICAgIENvbmRpdGlv
biByZXNwb25zZUNvbmRpdGlvbjsgLy8gTXVzdCBiZSBzaWduYWxlZCBhZnRlciBhbnkgdXBkYXRl
cyBvbiBIVFRQIHJlcXVlc3RzLCBhbmQgd2hlbiBmbHVzaGluZy4KKyAgICAgICAgR1JlZlB0cjxH
c3RBZGFwdGVyPiBhZGFwdGVyOworICAgICAgICBib29sIGlzRHVyYXRpb25TZXQ7CisgICAgICAg
IHVpbnQ2NF90IHJlYWRQb3NpdGlvbjsKKworICAgICAgICAvLyBQcm9wZXJ0aWVzIG9ubHkgc2V0
IGR1cmluZyBzZWVrLgorICAgICAgICAvLyBiYXNlc3JjIGVuc3VyZXMgdGhleSBjYW4ndCBjaGFu
Z2UgZHVyaW5nIGEgY3JlYXRlKCkgY2FsbCBieSB0YWtpbmcgdGhlIFNUUkVBTUlOR19MT0NLLgor
ICAgICAgICAvLyAoQW4gaW5pdGlhbCBzZWVrIGlzIGFsc28gZ3VhcmFudGVlZCBieSBiYXNlc3Jj
LikKKyAgICAgICAgdW5zaWduZWQgcmVxdWVzdE51bWJlciB7IDEgfTsKKyAgICAgICAgdWludDY0
X3QgcmVxdWVzdGVkUG9zaXRpb24geyAwIH07CisgICAgICAgIHVpbnQ2NF90IHN0b3BQb3NpdGlv
biB7IFVJTlQ2NF9NQVggfTsKKworICAgICAgICBib29sIGlzUmVxdWVzdFBlbmRpbmcgeyB0cnVl
IH07CisKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlcj4gbG9hZGVy
OworICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlPiByZXNvdXJjZTsKKyAgICB9
OworICAgIERhdGFNdXRleDxTdHJlYW1pbmdNZW1iZXJzPiBkYXRhTXV0ZXg7CiB9OwogCiBlbnVt
IHsKQEAgLTE2OSw5ICsxODYsOCBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNVcmlIYW5kbGVy
SW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyIGlmYWNlRGF0YSk7CiBzdGF0aWMgdm9pZCB3
ZWJLaXRXZWJTcmNDb25zdHJ1Y3RlZChHT2JqZWN0Kik7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNTZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJRCwgY29uc3QgR1ZhbHVlKiwg
R1BhcmFtU3BlYyopOwogc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjR2V0UHJvcGVydHkoR09iamVj
dCosIGd1aW50IHByb3BlcnR5SUQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKLXN0YXRpYyBHc3RT
dGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0
U3RhdGVDaGFuZ2UpOwogc3RhdGljIEdzdEZsb3dSZXR1cm4gd2ViS2l0V2ViU3JjQ3JlYXRlKEdz
dFB1c2hTcmMqLCBHc3RCdWZmZXIqKik7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjTWFr
ZVJlcXVlc3QoR3N0QmFzZVNyYyosIGJvb2wpOworc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTWFr
ZVJlcXVlc3QoV2ViS2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjU3RhcnQoR3N0QmFzZVNyYyopOwogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0
b3AoR3N0QmFzZVNyYyopOwogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0dldFNpemUoR3N0
QmFzZVNyYyosIGd1aW50NjQqIHNpemUpOwpAQCAtMTgxLDggKzE5Nyw4IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNRdWVyeShHc3RCYXNlU3JjKiwgR3N0UXVlcnkqKTsKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNVbkxvY2soR3N0QmFzZVNyYyopOwogc3RhdGljIGdib29sZWFu
IHdlYktpdFdlYlNyY1VuTG9ja1N0b3AoR3N0QmFzZVNyYyopOwogc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjU2V0Q29udGV4dChHc3RFbGVtZW50KiwgR3N0Q29udGV4dCopOwotc3RhdGljIHZvaWQg
cmVzdGFydExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyopOwotc3RhdGljIHZvaWQgc3RvcExv
YWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyopOworc3RhdGljIHZvaWQgcmVzdGFydExvYWRlcklm
TmVlZGVkKFdlYktpdFdlYlNyYyosIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJl
YW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciYpOworc3RhdGljIHZvaWQgc3RvcExvYWRlcklm
TmVlZGVkKFdlYktpdFdlYlNyYyosIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJl
YW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciYpOwogCiAjZGVmaW5lIHdlYmtpdF93ZWJfc3Jj
X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKIFdFQktJVF9ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0V2ViU3JjLCB3ZWJraXRfd2ViX3NyYywgR1NUX1RZUEVfUFVTSF9TUkMsCkBAIC0yMzAs
NyArMjQ2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfY2xhc3NfaW5pdChXZWJLaXRX
ZWJTcmNDbGFzcyoga2xhc3MpCiAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoIm1ldGhvZCIs
ICJtZXRob2QiLCAiVGhlIEhUVFAgbWV0aG9kIHRvIHVzZSAoZGVmYXVsdDogR0VUKSIsCiAgICAg
ICAgICAgICBudWxscHRyLCBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwogCi0gICAgZWtsYXNzLT5jaGFuZ2Vfc3Rh
dGUgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZSk7CiAgICAgZWts
YXNzLT5zZXRfY29udGV4dCA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY1NldENvbnRl
eHQpOwogCiAgICAgR3N0QmFzZVNyY0NsYXNzKiBiYXNlU3JjQ2xhc3MgPSBHU1RfQkFTRV9TUkNf
Q0xBU1Moa2xhc3MpOwpAQCAtMjQ3LDE4ICsyNjIsNDAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl9zcmNfY2xhc3NfaW5pdChXZWJLaXRXZWJTcmNDbGFzcyoga2xhc3MpCiAgICAgcHVzaFNyY0Ns
YXNzLT5jcmVhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJTcmNDcmVhdGUpOwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWJraXRXZWJTcmNSZXNldChXZWJLaXRXZWJTcmMqIHNyYykKLXsKLSAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworZW51bSBjbGFzcyBSZXNl
dFR5cGUgeworICAgIFNvZnQsCisgICAgSGFyZAorfTsKIAorc3RhdGljIHZvaWQgd2Via2l0V2Vi
U3JjUmVzZXQoV2ViS2l0V2ViU3JjKiBzcmMsIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRl
OjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciYgbWVtYmVycywgUmVzZXRUeXBlIHJl
c2V0VHlwZSkKK3sKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc2V0dGluZyBpbnRlcm5h
bCBzdGF0ZSIpOwotICAgIHByaXYtPmhhdmVTaXplID0gZmFsc2U7Ci0gICAgcHJpdi0+d2VyZUhl
YWRlcnNSZWNlaXZlZCA9IGZhbHNlOwotICAgIHByaXYtPmlzU2Vla2FibGUgPSBmYWxzZTsKLSAg
ICBwcml2LT5yZWFkUG9zaXRpb24gPSAwOwotICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID0g
MDsKLSAgICBwcml2LT5zdG9wUG9zaXRpb24gPSAtMTsKLSAgICBwcml2LT5zaXplID0gMDsKKyAg
ICBnc3RfYWRhcHRlcl9jbGVhcihtZW1iZXJzLT5hZGFwdGVyLmdldCgpKTsKKyAgICBtZW1iZXJz
LT5pc1JlcXVlc3RQZW5kaW5nID0gdHJ1ZTsKKworICAgIC8vIFJlc2V0IHJlcXVlc3Qgc3RhdGUu
IEFueSBwcmV2aW91cyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGxlZCBhdCB0aGlzIHBvaW50Lgor
ICAgIG1lbWJlcnMtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBtZW1iZXJzLT5k
b2VzSGF2ZUVPUyA9IGZhbHNlOworICAgIG1lbWJlcnMtPmRvd25sb2FkU3RhcnRUaW1lID0gV2Fs
bFRpbWU6Om5hbigpOworICAgIG1lbWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5dGVzID0gMDsgLy8g
UmVzZXR0ZWQgZm9yIGVhY2ggcmVxdWVzdCwgdXNlZCB0byBlc3RpbWF0ZSBkb3dubG9hZCBzcGVl
ZC4KKyAgICBtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNNZXNzYWdlID0gbnVsbHB0cjsKKyAg
ICBtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNFdmVudCA9IG51bGxwdHI7CisKKyAgICAvLyBB
ZnRlciBhIGZsdXNoLCB3ZSBoYXZlIHRvIGVtaXQgYSBzZWdtZW50IGFnYWluLgorICAgIG1lbWJl
cnMtPmlzRHVyYXRpb25TZXQgPSBmYWxzZTsKKworICAgIC8vIEhhcmQgcmVzZXQgaXMgZG9uZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIHRyYW5zaXRpb25zLgorICAgIC8vIFNvZnQg
cmVzZXQgaXMgZG9uZSBkdXJpbmcgZmx1c2hlcy4gSW4gdGhlc2UsIHdlIHByZXNlcnZlIHRoZSBz
ZWVrIHRhcmdldC4KKyAgICBpZiAocmVzZXRUeXBlID09IFJlc2V0VHlwZTo6SGFyZCkgeworICAg
ICAgICBtZW1iZXJzLT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrID0gZmFsc2U7CisgICAgICAg
IG1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkgPSBDU3RyaW5nKCk7CisgICAgICAgIG1lbWJlcnMtPmlz
U2Vla2FibGUgPSBmYWxzZTsKKyAgICAgICAgbWVtYmVycy0+aGF2ZVNpemUgPSBmYWxzZTsKKyAg
ICAgICAgbWVtYmVycy0+c2l6ZSA9IDA7CisgICAgICAgIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0
aW9uID0gMDsKKyAgICAgICAgbWVtYmVycy0+c3RvcFBvc2l0aW9uID0gVUlOVDY0X01BWDsKKyAg
ICAgICAgbWVtYmVycy0+cmVhZFBvc2l0aW9uID0gbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb247
CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNDb25zdHJ1Y3RlZChHT2JqZWN0
KiBvYmplY3QpCkBAIC0yNjksMTIgKzMwNiwxMyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmND
b25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJp
diA9IHNyYy0+cHJpdjsKIAogICAgIHByaXYtPm5vdGlmaWVyID0gTWFpblRocmVhZE5vdGlmaWVy
PE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb24+OjpjcmVhdGUoKTsKLSAgICBwcml2LT5hZGFw
dGVyID0gYWRvcHRHUmVmKGdzdF9hZGFwdGVyX25ldygpKTsKICAgICBwcml2LT5taW5pbXVtQmxv
Y2tzaXplID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1Qoc3Jj
KSk7CiAKLSAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMpOworICAgIERhdGFNdXRleDxXZWJLaXRX
ZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHBy
aXYtPmRhdGFNdXRleCk7CisgICAgbWVtYmVycy0+YWRhcHRlciA9IGFkb3B0R1JlZihnc3RfYWRh
cHRlcl9uZXcoKSk7CisgICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNldFR5
cGU6OkhhcmQpOworCiAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9hdXRvbWF0aWNfZW9zKEdTVF9CQVNF
X1NSQ19DQVNUKHNyYyksIEZBTFNFKTsKLSAgICBnc3RfYmFzZV9zcmNfc2V0X2FzeW5jKEdTVF9C
QVNFX1NSQ19DQVNUKHNyYyksIFRSVUUpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCkBAIC0yODUsOSArMzIzLDEwIEBAIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBj
b25zdCBHVmFsdWUqCiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogICAgICAgICBnc3RfdXJpX2hh
bmRsZXJfc2V0X3VyaShyZWludGVycHJldF9jYXN0PEdzdFVSSUhhbmRsZXIqPihzcmMpLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQUk9QX0tFRVBfQUxJVkU6CisgICAgY2FzZSBQUk9QX0tFRVBfQUxJVkU6IHsKICAgICAgICAg
c3JjLT5wcml2LT5rZWVwQWxpdmUgPSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgUFJPUF9FWFRSQV9IRUFERVJTOiB7CiAgICAgICAg
IGNvbnN0IEdzdFN0cnVjdHVyZSogcyA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlKHZhbHVlKTsK
ICAgICAgICAgc3JjLT5wcml2LT5leHRyYUhlYWRlcnMucmVzZXQocyA/IGdzdF9zdHJ1Y3R1cmVf
Y29weShzKSA6IG51bGxwdHIpOwpAQCAtMzE0LDkgKzM1MywxMSBAQCBzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVl
KiB2YWx1ZQogICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKICAgICAgICAgZ192YWx1ZV9zZXRfc3Ry
aW5nKHZhbHVlLCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkpOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfUkVTT0xWRURfTE9DQVRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmlu
Zyh2YWx1ZSwgcHJpdi0+cmVkaXJlY3RlZFVSSS5pc051bGwoKSA/IHByaXYtPm9yaWdpbmFsVVJJ
LmRhdGEoKSA6IHByaXYtPnJlZGlyZWN0ZWRVUkkuZGF0YSgpKTsKKyAgICBjYXNlIFBST1BfUkVT
T0xWRURfTE9DQVRJT046IHsKKyAgICAgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6
OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMocHJpdi0+ZGF0YU11dGV4
KTsKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBtZW1iZXJzLT5yZWRpcmVjdGVk
VVJJLmlzTnVsbCgpID8gcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpIDogbWVtYmVycy0+cmVkaXJl
Y3RlZFVSSS5kYXRhKCkpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBQUk9QX0tF
RVBfQUxJVkU6CiAgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmtlZXBB
bGl2ZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzQzLDIwMiArMzg0LDE5MyBAQCBzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJTcmNTZXRDb250ZXh0KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdENvbnRleHQq
IGNvbnRleHQpCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJjb250ZXh0IHR5cGU6ICVzIiwg
Z3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZShjb250ZXh0KSk7CiAgICAgaWYgKGdzdF9jb250
ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRF
WFRfVFlQRV9OQU1FKSkgewogICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVj
dHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgInBsYXll
ciIpOwotICAgICAgICBwcml2LT5wbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVy
Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0
V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhw
cml2LT5kYXRhTXV0ZXgpOworICAgICAgICBtZW1iZXJzLT5wbGF5ZXIgPSByZWludGVycHJldF9j
YXN0PE1lZGlhUGxheWVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOwogICAgIH0KICAg
ICBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5zZXRfY29udGV4dChlbGVtZW50LCBj
b250ZXh0KTsKIH0KIAotc3RhdGljIHZvaWQgcmVzdGFydExvYWRlcklmTmVlZGVkKFdlYktpdFdl
YlNyYyogc3JjKQorc3RhdGljIHZvaWQgcmVzdGFydExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNy
Yyogc3JjLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46
OkxvY2tlZFdyYXBwZXImIG1lbWJlcnMpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJp
diA9IHNyYy0+cHJpdjsKLQotICAgIGlmICghcHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCkgewor
ICAgIGlmICghbWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCkgewogICAgICAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNyYywgImRvd25sb2FkIGFscmVhZHkgYWN0aXZlIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImlzIGRvd25sb2FkIHN1c3Bl
bmRlZCAlcywgZG9lcyBoYXZlIEVPUyAlcywgZG9lcyBoYXZlIHNpemUgJXMsIGlzIHNlZWthYmxl
ICVzLCBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiAobWluICV1KSIsIGJvb2xG
b3JQcmludGluZyhwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkKSwgYm9vbEZvclByaW50aW5nKHBy
aXYtPmRvZXNIYXZlRU9TKSwgYm9vbEZvclByaW50aW5nKHByaXYtPmhhdmVTaXplKQotICAgICAg
ICAsIGJvb2xGb3JQcmludGluZyhwcml2LT5pc1NlZWthYmxlKSwgcHJpdi0+c2l6ZSwgU01BTExf
TUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUpOwotICAgIGlmIChwcml2LT5kb2VzSGF2ZUVPUyB8fCAh
cHJpdi0+aGF2ZVNpemUgfHwgIXByaXYtPmlzU2Vla2FibGUgfHwgcHJpdi0+c2l6ZSA8PSBTTUFM
TF9NRURJQV9SRVNPVVJDRV9NQVhfU0laRSkgeworICAgICAgICAiIChtaW4gJXUpIiwgYm9vbEZv
clByaW50aW5nKG1lbWJlcnMtPmlzRG93bmxvYWRTdXNwZW5kZWQpLCBib29sRm9yUHJpbnRpbmco
bWVtYmVycy0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aGF2ZVNpemUp
CisgICAgICAgICwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vla2FibGUpLCBtZW1iZXJz
LT5zaXplLCBTTUFMTF9NRURJQV9SRVNPVVJDRV9NQVhfU0laRSk7CisgICAgaWYgKG1lbWJlcnMt
PmRvZXNIYXZlRU9TIHx8ICFtZW1iZXJzLT5oYXZlU2l6ZSB8fCAhbWVtYmVycy0+aXNTZWVrYWJs
ZSB8fCBtZW1iZXJzLT5zaXplIDw9IFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFKSB7CiAg
ICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG93bmxvYWQgY2Fubm90IGJlIHN0b3BwZWQv
cmVzdGFydGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgR1NUX1RSQUNFX09CSkVD
VChzcmMsICJyZWFkIHBvc2l0aW9uICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgc3RhdGUgJXMiLCBw
cml2LT5yZWFkUG9zaXRpb24sIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKEdTVF9TVEFURShz
cmMpKSk7Ci0gICAgaWYgKCFwcml2LT5yZWFkUG9zaXRpb24gfHwgcHJpdi0+cmVhZFBvc2l0aW9u
ID09IHByaXYtPnNpemUgfHwgR1NUX1NUQVRFKHNyYykgPCBHU1RfU1RBVEVfUEFVU0VEKSB7Cisg
ICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJyZWFkIHBvc2l0aW9uICUiIEdfR1VJTlQ2NF9GT1JN
QVQgIiwgc3RhdGUgJXMiLCBtZW1iZXJzLT5yZWFkUG9zaXRpb24sIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKEdTVF9TVEFURShzcmMpKSk7CisgICAgaWYgKCFtZW1iZXJzLT5yZWFkUG9zaXRp
b24gfHwgbWVtYmVycy0+cmVhZFBvc2l0aW9uID09IG1lbWJlcnMtPnNpemUgfHwgR1NUX1NUQVRF
KHNyYykgPCBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3Jj
LCAiY2FuJ3QgcmVzdGFydCBkb3dubG9hZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgc2l6ZV90IHF1ZXVlU2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFwdGVy
LmdldCgpKTsKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInF1ZXVlIHNpemUgJXpkIChtaW4g
JTEuMGYpIiwgcXVldWVTaXplCi0gICAgICAgICwgcHJpdi0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFD
VE9SX1RIUkVTSE9MRCAqIExPV19RVUVVRV9GQUNUT1JfVEhSRVNIT0xEKTsKKyAgICBzaXplX3Qg
cXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkp
OworICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSAlenUgKG1pbiAlMS4wZiki
LCBxdWV1ZVNpemUKKyAgICAgICAgLCBtZW1iZXJzLT5zaXplICogSElHSF9RVUVVRV9GQUNUT1Jf
VEhSRVNIT0xEICogTE9XX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpOwogCi0gICAgaWYgKHF1ZXVl
U2l6ZSA+PSBwcml2LT5zaXplICogSElHSF9RVUVVRV9GQUNUT1JfVEhSRVNIT0xEICogTE9XX1FV
RVVFX0ZBQ1RPUl9USFJFU0hPTEQpIHsKKyAgICBpZiAocXVldWVTaXplID49IG1lbWJlcnMtPnNp
emUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQgKiBMT1dfUVVFVUVfRkFDVE9SX1RIUkVT
SE9MRCkgewogICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInF1ZXVlIHNpemUgYWJvdmUg
bG93IHdhdGVybWFyaywgbm90IHJlc3RhcnRpbmcgZG93bmxvYWQiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAicmVzdGFydGluZyBkb3dubG9h
ZCIpOwotICAgIHByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQgPSBmYWxzZTsKLSAgICB3ZWJLaXRX
ZWJTcmNNYWtlUmVxdWVzdChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpLCBmYWxzZSk7CisgICAgbWVt
YmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCA9IGZhbHNlOworICAgIG1lbWJlcnMtPnJlcXVlc3RO
dW1iZXIrKzsKKyAgICBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IG1lbWJlcnMtPnJlYWRQ
b3NpdGlvbjsKKyAgICB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChzcmMsIG1lbWJlcnMpOwogfQog
CiAKLXN0YXRpYyB2b2lkIHN0b3BMb2FkZXJJZk5lZWRlZChXZWJLaXRXZWJTcmMqIHNyYykKK3N0
YXRpYyB2b2lkIHN0b3BMb2FkZXJJZk5lZWRlZChXZWJLaXRXZWJTcmMqIHNyYywgRGF0YU11dGV4
PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJiBt
ZW1iZXJzKQogewotICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChwcml2LT5pc0Rvd25sb2FkU3Vz
cGVuZGVkKSB7CisgICAgaWYgKG1lbWJlcnMtPmlzRG93bmxvYWRTdXNwZW5kZWQpIHsKICAgICAg
ICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJkb3dubG9hZCBhbHJlYWR5IHN1c3BlbmRlZCIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJpcyBk
b3dubG9hZCBzdXNwZW5kZWQgJXMsIGRvZXMgaGF2ZSBzaXplICVzLCBpcyBzZWVrYWJsZSAlcywg
c2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFUICIgKG1pbiAldSkiCi0gICAgICAgICwgYm9vbEZvclBy
aW50aW5nKHByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+
aGF2ZVNpemUpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aXNTZWVrYWJsZSksIHByaXYtPnNpemUK
KyAgICAgICAgLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCks
IGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5oYXZlU2l6ZSksIGJvb2xGb3JQcmludGluZyhtZW1i
ZXJzLT5pc1NlZWthYmxlKSwgbWVtYmVycy0+c2l6ZQogICAgICAgICAsIFNNQUxMX01FRElBX1JF
U09VUkNFX01BWF9TSVpFKTsKLSAgICBpZiAoIXByaXYtPmhhdmVTaXplIHx8ICFwcml2LT5pc1Nl
ZWthYmxlIHx8IHByaXYtPnNpemUgPD0gU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUpIHsK
KyAgICBpZiAoIW1lbWJlcnMtPmlzU2Vla2FibGUgfHwgbWVtYmVycy0+c2l6ZSA8PSBTTUFMTF9N
RURJQV9SRVNPVVJDRV9NQVhfU0laRSkgewogICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywg
ImRvd25sb2FkIGNhbm5vdCBiZSBzdG9wcGVkL3Jlc3RhcnRlZCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgc2l6ZV90IHF1ZXVlU2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZShw
cml2LT5hZGFwdGVyLmdldCgpKTsKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInF1ZXVlIHNp
emUgJXpkIChtYXggJTEuMGYpIiwgcXVldWVTaXplLCBwcml2LT5zaXplICogSElHSF9RVUVVRV9G
QUNUT1JfVEhSRVNIT0xEKTsKLSAgICBpZiAocXVldWVTaXplIDw9IHByaXYtPnNpemUgKiBISUdI
X1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpIHsKKyAgICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2Fk
YXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOworICAgIEdTVF9UUkFDRV9P
QkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSAlenUgKG1heCAlMS4wZikiLCBxdWV1ZVNpemUsIG1lbWJl
cnMtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpOworICAgIGlmIChxdWV1ZVNp
emUgPD0gbWVtYmVycy0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCkgewogICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInF1ZXVlIHNpemUgdW5kZXIgaGlnaCB3YXRlcm1h
cmssIG5vdCBzdG9wcGluZyBkb3dubG9hZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJzdG9wcGluZyBkb3dubG9hZCIpOwotICAgIHByaXYt
PmlzRG93bmxvYWRTdXNwZW5kZWQgPSB0cnVlOwotICAgIHByaXYtPnJlc291cmNlLT5zdG9wKCk7
CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSJXU6IHN0b3BwaW5nIGRvd25sb2FkIiwgbWVt
YmVycy0+cmVxdWVzdE51bWJlcik7CisgICAgbWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCA9
IHRydWU7CisgICAgbWVtYmVycy0+cmVzb3VyY2UtPnN0b3AoKTsKIH0KIAogc3RhdGljIEdzdEZs
b3dSZXR1cm4gd2ViS2l0V2ViU3JjQ3JlYXRlKEdzdFB1c2hTcmMqIHB1c2hTcmMsIEdzdEJ1ZmZl
cioqIGJ1ZmZlcikKIHsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBHc3RCYXNl
U3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1QocHVzaFNyYyk7CiAgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKICAgICBXZWJLaXRXZWJTcmNQcml2
YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRl
OjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFNdXRl
eCk7CisKKyAgICAvLyBXZSBuZWVkIG1lbWJlcnMtPnBsYXllciB0byBtYWtlIHJlcXVlc3RzLiBU
aGVyZSBhcmUgdHdvIG1lY2hhbmlzbXMgZm9yIHRoaXMuCisgICAgLy8KKyAgICAvLyAxKSB3ZWJL
aXRXZWJTcmNTZXRNZWRpYVBsYXllcigpIGlzIGNhbGxlZCBieSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIgYnkgbWVhbnMgb2YgaG9va2luZyBwbGF5YmluJ3MKKyAgICAvLyAgICAic291cmNl
LXNldHVwIiBldmVudC4gVGhpcyBkb2Vzbid0IHdvcmsgZm9yIGFkZGl0aW9uYWwgV2ViS2l0V2Vi
U3JjIGVsZW1lbnRzIGNyZWF0ZWQgYnkgYWRhcHRpdmVkZW11eC4KKyAgICAvLworICAgIC8vIDIp
IEEgR3N0Q29udGV4dCBxdWVyeSBtYWRlIGhlcmUuIEJlY2F1c2Ugb2YgYSBidWcsIHRoaXMgb25s
eSB3b3JrcyBpbiBHU3RyZWFtZXIgPj0gMS4xMi4KKyAgICAvLworICAgIC8vIEFzIGEgY29tcGF0
aWJpbGl0eSB3b3JrYXJvdW5kLCB0aGUgaHR0cDogVVJJIHByb3RvY29sIGlzIG9ubHkgcmVnaXN0
ZXJlZCBmb3IgZ3N0Pj0xLjEyOyBvdGhlcndpc2UgdXNpbmcKKyAgICAvLyB3ZWJraXQraHR0cDos
IHdoaWNoIGlzIHVzZWQgYnkgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIGJ1dCBub3QgYnkg
YWRhcHRpdmVkZW11eCdzIGFkZGl0aW9uYWwgc291cmNlCisgICAgLy8gZWxlbWVudHMsIHRoZXJl
Zm9yZSB1c2luZyBzb3VwaHR0cHNyYyBpbnN0ZWFkIGFuZCBub3Qgcm91dGluZyB0cmFmZmljIHRo
cm91Z2ggdGhlIE5ldHdvcmtQcm9jZXNzLgorICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24o
MSwgMTIsIDApICYmICFtZW1iZXJzLT5wbGF5ZXIpIHsKKyAgICAgICAgbWVtYmVycy5ydW5Vbmxv
Y2tlZChbc3JjLCBiYXNlU3JjXSgpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1
ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfY29udGV4dChXRUJLSVRfV0VCX1NSQ19QTEFZ
RVJfQ09OVEVYVF9UWVBFX05BTUUpKTsKKyAgICAgICAgICAgIGlmIChnc3RfcGFkX3BlZXJfcXVl
cnkoR1NUX0JBU0VfU1JDX1BBRChiYXNlU3JjKSwgcXVlcnkuZ2V0KCkpKSB7CisgICAgICAgICAg
ICAgICAgR3N0Q29udGV4dCogY29udGV4dDsKKworICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9w
YXJzZV9jb250ZXh0KHF1ZXJ5LmdldCgpLCAmY29udGV4dCk7CisgICAgICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBjb250ZXh0KTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2Fn
ZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9tZXNzYWdlX25ld19uZWVkX2NvbnRleHQoR1NU
X09CSkVDVF9DQVNUKHNyYyksIFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVfTkFN
RSkpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKG1lbWJlcnMtPmlzRmx1c2hpbmcpCisgICAg
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUKG1lbWJlcnMtPnBsYXllcik7CiAKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInJlYWRQ
b3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiByZXF1ZXN0ZWRQb3NpdGlvbiA9ICUiIEdf
R1VJTlQ2NF9GT1JNQVQsIHByaXYtPnJlYWRQb3NpdGlvbiwgcHJpdi0+cmVxdWVzdGVkUG9zaXRp
b24pOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicmVhZFBvc2l0aW9uID0gJSIgR19HVUlO
VDY0X0ZPUk1BVCAiIHJlcXVlc3RlZFBvc2l0aW9uID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwgbWVt
YmVycy0+cmVhZFBvc2l0aW9uLCBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbik7CiAKLSAgICBp
ZiAocHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gIT0gcHJpdi0+cmVhZFBvc2l0aW9uKSB7Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgYWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVy
TG9jayk7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWtpbmcsIGZsdXNo
aW5nIGFkYXB0ZXIiKTsKLSAgICAgICAgICAgIGdzdF9hZGFwdGVyX2NsZWFyKHByaXYtPmFkYXB0
ZXIuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQ2NF90IHJlcXVlc3RlZFBvc2l0aW9u
ID0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247Ci0gICAgICAgIHdlYktpdFdlYlNyY1N0b3AoYmFz
ZVNyYyk7Ci0gICAgICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID0gcmVxdWVzdGVkUG9zaXRp
b247Ci0gICAgICAgIC8vIERvIG5vdCBub3RpZnkgYXN5bmMtY29tcGxldGlvbiwgaW4gc2Vla2lu
ZyBmbG93cywgd2Ugd2lsbAotICAgICAgICAvLyBiZSBjYWxsZWQgZnJvbSBHc3RCYXNlU3JjJ3Mg
cGVyZm9ybV9zZWVrIHZmdW5jLCB3aGljaCBob2xkcwotICAgICAgICAvLyBhIHN0cmVhbWluZyBs
b2NrIGluIG91ciBmcmFtZS4gSGVuY2UsIHdlIHdvdWxkIGRlYWRsb2NrCi0gICAgICAgIC8vIHRy
eWluZyB0byBub3RpZnkgYXN5bmMgY29tcGxldGlvbiwgc2luY2UgdGhhdCBhbHNvIHJlcXVpcmVz
Ci0gICAgICAgIC8vIHRoZSBzdHJlYW1pbmcgbG9jay4KLSAgICAgICAgd2ViS2l0V2ViU3JjTWFr
ZVJlcXVlc3QoYmFzZVNyYywgZmFsc2UpOworICAgIGlmIChtZW1iZXJzLT5pc1JlcXVlc3RQZW5k
aW5nKSB7CisgICAgICAgIG1lbWJlcnMtPmlzUmVxdWVzdFBlbmRpbmcgPSBmYWxzZTsKKyAgICAg
ICAgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3Qoc3JjLCBtZW1iZXJzKTsKICAgICB9CiAKLSAgICB7
Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPnJlc3BvbnNlTG9jayk7Ci0gICAgICAg
IHByaXYtPnJlc3BvbnNlQ29uZGl0aW9uLndhaXQocHJpdi0+cmVzcG9uc2VMb2NrLCBbcHJpdl0g
KCkgewotICAgICAgICAgICAgcmV0dXJuIHByaXYtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgfHwgcHJp
di0+aXNGbHVzaGluZzsKKyAgICAvLyBXYWl0IGZvciB0aGUgcmVzcG9uc2UgaGVhZGVycy4KKyAg
ICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlvbi53YWl0KG1lbWJlcnMubXV0ZXgoKSwgWyZdICgp
IHsKKyAgICAgICAgcmV0dXJuIG1lbWJlcnMtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgfHwgbWVtYmVy
cy0+aXNGbHVzaGluZzsKKyAgICB9KTsKKworICAgIGlmIChtZW1iZXJzLT5pc0ZsdXNoaW5nKQor
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7CisKKyAgICBpZiAobWVtYmVycy0+cGVu
ZGluZ0NhcHMpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZXR0aW5nIGNhcHM6
ICUiIEdTVF9QVFJfRk9STUFULCBtZW1iZXJzLT5wZW5kaW5nQ2Fwcy5nZXQoKSk7CisgICAgICAg
IG1lbWJlcnMucnVuVW5sb2NrZWQoW2Jhc2VTcmMsIGNhcHMgPSBtZW1iZXJzLT5wZW5kaW5nQ2Fw
cy5sZWFrUmVmKCldKCkgeworICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzKGJhc2VT
cmMsIGNhcHMpOwogICAgICAgICB9KTsKKyAgICAgICAgaWYgKG1lbWJlcnMtPmlzRmx1c2hpbmcp
CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7CisgICAgfQorCisgICAgaWYg
KG1lbWJlcnMtPmhhdmVTaXplICYmICFtZW1iZXJzLT5pc0R1cmF0aW9uU2V0KSB7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0dGluZyBkdXJhdGlvbiB0byAlIiBHX0dVSU5UNjRf
Rk9STUFULCBtZW1iZXJzLT5zaXplKTsKKyAgICAgICAgYmFzZVNyYy0+c2VnbWVudC5kdXJhdGlv
biA9IG1lbWJlcnMtPnNpemU7CisgICAgICAgIG1lbWJlcnMtPmlzRHVyYXRpb25TZXQgPSB0cnVl
OworICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMp
LCBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZChHU1RfT0JKRUNUX0NBU1Qoc3JjKSkp
OwogICAgIH0KIAorICAgIGlmIChtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNNZXNzYWdlKQor
ICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc3JjKSwgbWVtYmVy
cy0+cGVuZGluZ0h0dHBIZWFkZXJzTWVzc2FnZS5sZWFrUmVmKCkpOworICAgIGlmIChtZW1iZXJz
LT5wZW5kaW5nSHR0cEhlYWRlcnNFdmVudCkKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdT
VF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc0V2ZW50
LmxlYWtSZWYoKSk7CisKKyAgICByZXN0YXJ0TG9hZGVySWZOZWVkZWQoc3JjLCBtZW1iZXJzKTsK
KwogICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgR3N0QWRhcHRlciBtZXRob2RzIG1hcmtlZCBhcyBm
YXN0IGFueW1vcmUgYmVjYXVzZSBzb21ldGltZXMgaXQgd2FzIHNsb3dlci4gVGhlIHJlYXNvbiB3
aHkgdGhpcyB3YXMgc2xvd2VyIGlzIHRoYXQgd2UgY2FuIGJlCiAgICAgLy8gd2FpdGluZyBmb3Ig
bW9yZSAiZmFzdCIgKHRoYXQgY291bGQgYmUgcmV0cmlldmVkIHdpdGggdGhlIF9mYXN0IEFQSSkg
YnVmZmVycyB0byBiZSBhdmFpbGFibGUgZXZlbiBpbiBjYXNlcyB3aGVyZSB0aGUgcXVldWUgaXMg
bm90IGVtcHR5LiBUaGVzZQogICAgIC8vIG90aGVyIGJ1ZmZlcnMgY2FuIGJlIHJldHJpZXZlZCB3
aXRoIHRoZSAibm9uIF9mYXN0IiBBUEkuCi0gICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJmbHVz
aGluZzogJXMsIGRvZXNIYXZlRU9TOiAlcywgaXNEb3dubG9hZFN1c3BlbmRlZDogJXMiLCBib29s
Rm9yUHJpbnRpbmcocHJpdi0+aXNGbHVzaGluZykKLSAgICAgICAgLCBib29sRm9yUHJpbnRpbmco
cHJpdi0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aXNEb3dubG9hZFN1c3Bl
bmRlZCkpOwotCi0gICAgaWYgKHByaXYtPmRvZXNIYXZlRU9TKSB7Ci0gICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiRU9TIik7Ci0gICAgICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gICAg
fQorICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG9lc0hhdmVFT1M6ICVzLCBpc0Rvd25sb2Fk
U3VzcGVuZGVkOiAlcyIsIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5kb2VzSGF2ZUVPUyksIGJv
b2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSk7CiAKICAgICB1bnNp
Z25lZCBzaXplID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoYmFzZVNyYyk7Ci0gICAgc2l6
ZV90IHF1ZXVlU2l6ZTsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgYWRhcHRlckxvY2tlcihw
cml2LT5hZGFwdGVyTG9jayk7Ci0gICAgICAgIHVuc2lnbmVkIHJldHJpZXMgPSAwOwotICAgICAg
ICBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUocHJpdi0+YWRhcHRlci5nZXQoKSk7
Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZhaWxhYmxlIGJ5dGVzICUiIEdfR1NJ
WkVfRk9STUFUICIsIGJsb2NrIHNpemUgJXUiLCBxdWV1ZVNpemUsIHNpemUpOwotICAgICAgICB3
aGlsZSAoIXF1ZXVlU2l6ZSAmJiAhcHJpdi0+aXNGbHVzaGluZykgewotICAgICAgICAgICAgR1NU
X1RSQUNFX09CSkVDVChzcmMsICJsZXQncyB0cnkgdG8gcmVzdGFydCB0aGUgZG93bmxvYWQgaWYg
cG9zc2libGUgYW5kIHdhaXQgYSBiaXQgaWYgbm8gZGF0YSIpOwotICAgICAgICAgICAgcHJpdi0+
YWRhcHRlckNvbmRpdGlvbi53YWl0Rm9yKHByaXYtPmFkYXB0ZXJMb2NrLCAxX3MsIFsmXSB7Ci0g
ICAgICAgICAgICAgICAgcmVzdGFydExvYWRlcklmTmVlZGVkKHNyYyk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHByaXYtPmlzRmx1c2hpbmcgfHwgKCFwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVk
ICYmIGdzdF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFwdGVyLmdldCgpKSk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIHF1ZXVlU2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZShw
cml2LT5hZGFwdGVyLmdldCgpKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAi
YXZhaWxhYmxlICUiIEdfR1NJWkVfRk9STUFULCBxdWV1ZVNpemUpOwotICAgICAgICAgICAgaWYg
KHF1ZXVlU2l6ZSB8fCBwcml2LT5pc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBkYXRhIG9yIHdlJ3JlIGZsdXNoaW5nLiBXZSBjYW4gYnJlYWsgdGhlIGxvb3AgaGVyZS4K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
V2Ugc2hvdWxkIGtlZXAgd2FpdGluZyBidXQgd2UgY291bGQgYmUgaW4gRU9TLiBMZXQncyBjaGVj
ayB0aGUgdHdvIHBvc3NpYmlsaXRpZXM6Ci0gICAgICAgICAgICAvLyAxLiBXZSBhcmUgYXQgdGhl
IGVuZCBvZiB0aGUgZmlsZSB3aXRoIGEga25vd24gc2l6ZS4KLSAgICAgICAgICAgIC8vIDIuIFRo
ZSBkb3dubG9hZCBpcyBub3Qgc3VzcGVuZGVkIGFuZCBubyBtb3JlIGRhdGEgYXJlIGFycml2aW5n
LiBXZSBjYW5ub3Qgd2FpdCBmb3JldmVyLCAxMHgxcyBzZWVtcyBzYWZlIGFuZCBzZW5zaWJsZS4K
LSAgICAgICAgICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiBwcml2LT5yZWFkUG9zaXRpb24gPj0g
cHJpdi0+c2l6ZSkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiV2Fp
dGluZyBmb3IgZGF0YSBiZXlvbmQgdGhlIGVuZCwgc2lnbmFsbGluZyBFT1MiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
R1NUX1RSQUNFX09CSkVDVChzcmMsICJpcyBkb3dubG9hZCBzdXNwZW5kZWQ/ICVzLCBudW0gcmV0
cmllcyAldSIsIGJvb2xGb3JQcmludGluZyhwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkKSwgcmV0
cmllcyArIDEpOwotICAgICAgICAgICAgaWYgKCFwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkICYm
ICsrcmV0cmllcyA+PSAxMCkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiQWRhcHRlciBzdGlsbCBlbXB0eSBhZnRlciAxMHMgb2Ygd2FpdGluZywgYXNzdW1pbmcgRU9T
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcml2LT5pc0ZsdXNoaW5nKSB7Ci0gICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRmx1c2hpbmciKTsKLSAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX0ZMVVNISU5HOwotICAgIH0KKyAgICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJf
YXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
c3JjLCAiYXZhaWxhYmxlIGJ5dGVzICUiIEdfR1NJWkVfRk9STUFUICIsIGJsb2NrIHNpemUgJXUi
LCBxdWV1ZVNpemUsIHNpemUpOworICAgIGlmICghcXVldWVTaXplKSB7CisgICAgICAgIEdTVF9U
UkFDRV9PQkpFQ1Qoc3JjLCAibGV0J3Mgd2FpdCBmb3IgZGF0YSBvciBFT1MiKTsKKyAgICAgICAg
bWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ud2FpdChtZW1iZXJzLm11dGV4KCksIFsmXSB7Cisg
ICAgICAgICAgICByZXR1cm4gbWVtYmVycy0+aXNGbHVzaGluZyB8fCBnc3RfYWRhcHRlcl9hdmFp
bGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSkgfHwgbWVtYmVycy0+ZG9lc0hhdmVFT1M7Cisg
ICAgICAgIH0pOworICAgICAgICBpZiAobWVtYmVycy0+aXNGbHVzaGluZykKKyAgICAgICAgICAg
IHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKIAotICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiAh
cHJpdi0+aXNEdXJhdGlvblNldCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNl
dHRpbmcgZHVyYXRpb24gdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgcHJpdi0+c2l6ZSk7Ci0gICAg
ICAgIGJhc2VTcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBwcml2LT5zaXplOwotICAgICAgICBwcml2
LT5pc0R1cmF0aW9uU2V0ID0gdHJ1ZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdl
KEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQo
R1NUX09CSkVDVF9DQVNUKHNyYykpKTsKKyAgICAgICAgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJf
YXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOworICAgICAgICBHU1RfVFJBQ0VfT0JK
RUNUKHNyYywgImF2YWlsYWJsZSAlIiBHX0dTSVpFX0ZPUk1BVCwgcXVldWVTaXplKTsKICAgICB9
CiAKLSAgICBpZiAocHJpdi0+aHR0cEhlYWRlcnNFdmVudCkKLSAgICAgICAgZ3N0X3BhZF9wdXNo
X2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIHByaXYtPmh0dHBIZWFkZXJzRXZlbnQu
bGVha1JlZigpKTsKLQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHBy
aXYtPmFkYXB0ZXJMb2NrKTsKLSAgICAgICAgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxh
YmxlKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOworICAgIGlmIChxdWV1ZVNpemUpIHsKICAgICAgICAg
aWYgKHF1ZXVlU2l6ZSA8IHNpemUpIHsKICAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3Jj
LCAiRGlkIG5vdCBnZXQgdGhlICV1IGJsb2Nrc2l6ZSBieXRlcywgbGV0J3MgcHVzaCB0aGUgJSIg
R19HU0laRV9GT1JNQVQgIiBieXRlcyB3ZSBnb3QiLCBzaXplLCBxdWV1ZVNpemUpOwogICAgICAg
ICAgICAgc2l6ZSA9IHF1ZXVlU2l6ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHNyYywgIlRha2luZyAldSBieXRlcyBmcm9tIGFkYXB0ZXIiLCBzaXplKTsK
LSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgICAgICpidWZmZXIgPSBnc3RfYWRhcHRlcl90
YWtlX2J1ZmZlcihwcml2LT5hZGFwdGVyLmdldCgpLCBzaXplKTsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCpidWZmZXIpOwotCi0gICAgICAgICAgICBHU1RfQlVGRkVSX09GRlNFVCgqYnVm
ZmVyKSA9IGJhc2VTcmMtPnNlZ21lbnQucG9zaXRpb247Ci0gICAgICAgICAgICBHU1RfQlVGRkVS
X09GRlNFVF9FTkQoKmJ1ZmZlcikgPSBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSArIHNpemU7
Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIkJ1ZmZlciBib3VuZHMgc2V0IHRv
ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFULCBHU1RfQlVGRkVSX09G
RlNFVCgqYnVmZmVyKSwgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpKTsKLSAgICAgICAg
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG9lc0hhdmVFT1M6ICVzLCB3YXNTZWVraW5nOiAl
cywgc2Vla2luZzogJXMsIGJ1ZmZlciBzaXplOiAldSwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1B
VCwgYm9vbEZvclByaW50aW5nKHByaXYtPmRvZXNIYXZlRU9TKSwgYm9vbEZvclByaW50aW5nKHBy
aXYtPndhc1NlZWtpbmcpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aXNTZWVraW5nKSwgc2l6ZSwg
cHJpdi0+c2l6ZSk7Ci0gICAgICAgICAgICBpZiAocHJpdi0+aGF2ZVNpemUgJiYgR1NUX0JVRkZF
Ul9PRkZTRVRfRU5EKCpidWZmZXIpID49IHByaXYtPnNpemUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAocHJpdi0+d2FzU2Vla2luZykKLSAgICAgICAgICAgICAgICAgICAgcHJpdi0+d2FzU2Vla2lu
ZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaXYtPmlzU2Vla2FibGUpCi0g
ICAgICAgICAgICAgICAgICAgIHByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAocHJpdi0+d2FzU2Vla2luZykKLSAgICAgICAgICAgICAgICBwcml2LT53YXNT
ZWVraW5nID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJlc3RhcnRMb2FkZXJJZk5lZWRlZChzcmMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJF
bXB0eSBhZGFwdGVyISIpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIH0KKworICAgICAgICAqYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIobWVtYmVy
cy0+YWRhcHRlci5nZXQoKSwgc2l6ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpidWZmZXIp
OworCisgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUKCpidWZmZXIpID0gYmFzZVNyYy0+c2VnbWVu
dC5wb3NpdGlvbjsKKyAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpID0gR1NU
X0JVRkZFUl9PRkZTRVQoKmJ1ZmZlcikgKyBzaXplOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHNyYywgIkJ1ZmZlciBib3VuZHMgc2V0IHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dV
SU5UNjRfRk9STUFULCBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSwgR1NUX0JVRkZFUl9PRkZT
RVRfRU5EKCpidWZmZXIpKTsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJidWZmZXIg
c2l6ZTogJXUsIHRvdGFsIGNvbnRlbnQgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgc2l6ZSwg
bWVtYmVycy0+c2l6ZSk7CisKKyAgICAgICAgcmVzdGFydExvYWRlcklmTmVlZGVkKHNyYywgbWVt
YmVycyk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKICAgICB9CiAKLSAgICByZXR1cm4g
R1NUX0ZMT1dfT0s7CisgICAgLy8gSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHJlYWNoZWQgdGhpcyBw
b2ludCwgdGhlIG9ubHkgb3RoZXIgb3B0aW9uIGlzIHRoYXQgd2UgYXJlIGluIEVPUy4KKyAgICBB
U1NFUlQobWVtYmVycy0+ZG9lc0hhdmVFT1MpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
UmVhY2hlZCB0aGUgZW5kIG9mIHRoZSByZXNwb25zZSwgc2lnbmFsbGluZyBFT1MiKTsKKyAgICBy
ZXR1cm4gR1NUX0ZMT1dfRU9TOwogfQogCiBzdGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTZXRFeHRy
YUhlYWRlcihHUXVhcmsgZmllbGRJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpCkBAIC01OTMsNjAgKzYyNSwzMSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
UHJvY2Vzc0V4dHJhSGVhZGVycyhHUXVhcmsgZmllbGRJZCwgY29uc3QgR1ZhbHVlKiB2YQogfQog
CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RhcnQoR3N0QmFzZVNyYyogYmFzZVNyYykK
LXsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgQmFzZVNyYywg
ZG8gbm90IGNhbGwgaXQKLSAgICAvLyBmcm9tIG91cnNlbHZlcyB1bmxlc3MgeW91IGVuc3VyZSB0
aGUgc3RyZWFtaW5nIGxvY2sgaXMgbm90Ci0gICAgLy8gaGVsZC4gSWYgaXQgaXMsIHlvdSB3aWxs
IGRlYWRsb2NrIHRoZSBXZWJQcm9jZXNzLgotICAgIHJldHVybiB3ZWJLaXRXZWJTcmNNYWtlUmVx
dWVzdChiYXNlU3JjLCB0cnVlKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY01h
a2VSZXF1ZXN0KEdzdEJhc2VTcmMqIGJhc2VTcmMsIGJvb2wgbm90aWZ5QXN5bmNDb21wbGV0aW9u
KQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0g
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIGlmICh3ZWJr
aXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDApICYmICFwcml2LT5wbGF5ZXIpIHsKLSAgICAgICAg
R1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19jb250ZXh0
KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVfTkFNRSkpOwotICAgICAgICBpZiAo
Z3N0X3BhZF9wZWVyX3F1ZXJ5KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIHF1ZXJ5LmdldCgp
KSkgewotICAgICAgICAgICAgR3N0Q29udGV4dCogY29udGV4dDsKLQotICAgICAgICAgICAgZ3N0
X3F1ZXJ5X3BhcnNlX2NvbnRleHQocXVlcnkuZ2V0KCksICZjb250ZXh0KTsKLSAgICAgICAgICAg
IGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgY29udGV4dCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdT
VF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dChHU1RfT0JK
RUNUX0NBU1Qoc3JjKSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FKSk7
Ci0gICAgfQogCi0gICAgUkVMRUFTRV9BU1NFUlQocHJpdi0+cGxheWVyKTsKLQotICAgIHByaXYt
PndlcmVIZWFkZXJzUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICBwcml2LT53YXNSZXNwb25zZVJlY2Vp
dmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNEdXJhdGlvblNldCA9IGZhbHNlOwotICAgIHByaXYt
PmRvZXNIYXZlRU9TID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNGbHVzaGluZyA9IGZhbHNlOwotICAg
IHByaXYtPmRvd25sb2FkU3RhcnRUaW1lID0gV2FsbFRpbWU6Om5hbigpOwotCi0gICAgcHJpdi0+
ZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjayA9IGZhbHNlOwotCi0gICAgaWYgKHByaXYtPm9yaWdp
bmFsVVJJLmlzTnVsbCgpKSB7CisgICAgaWYgKHNyYy0+cHJpdi0+b3JpZ2luYWxVUkkuaXNOdWxs
KCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsK
LSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChiYXNlU3JjKTsKICAgICAgICAgcmV0dXJuIEZBTFNF
OwogICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KIAotICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRQ
b3NpdGlvbiA9PSBwcml2LT5zdG9wUG9zaXRpb24pIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJFbXB0eSBzZWdtZW50LCBzaWduYWxpbmcgRU9TIik7Ci0gICAgICAgIHByaXYtPmRv
ZXNIYXZlRU9TID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KK3N0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KFdlYktpdFdlYlNyYyogc3JjLCBEYXRhTXV0ZXg8
V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImIG1l
bWJlcnMpCit7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAot
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRmV0Y2hpbmcgJXMiLCBwcml2LT5vcmlnaW5hbFVS
SS5kYXRhKCkpOworICAgIEFTU0VSVCghcHJpdi0+b3JpZ2luYWxVUkkuaXNOdWxsKCkpOworICAg
IEFTU0VSVChtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbiAhPSBtZW1iZXJzLT5zdG9wUG9zaXRp
b24pOworCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQb3N0aW5nIHRhc2sgdG8gcmVxdWVz
dCBSJXUgJXMgcmVxdWVzdGVkUG9zaXRpb249JSIgR19HVUlOVDY0X0ZPUk1BVCAiIHN0b3BQb3Np
dGlvbj0lIiBHX0dVSU5UNjRfRk9STUFULCBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyLCBwcml2LT5v
cmlnaW5hbFVSSS5kYXRhKCksIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uLCBtZW1iZXJzLT5z
dG9wUG9zaXRpb24pOwogICAgIFVSTCB1cmwgPSBVUkwoVVJMKCksIHByaXYtPm9yaWdpbmFsVVJJ
LmRhdGEoKSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIHJlcXVl
c3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwogICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNv
b2tpZXModXJsKTsKIAotICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+
cmVmZXJyZXIoKSk7CisgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIobWVtYmVycy0+cGxheWVy
LT5yZWZlcnJlcigpKTsKIAogICAgIGlmIChwcml2LT5odHRwTWV0aG9kLmdldCgpKQogICAgICAg
ICByZXF1ZXN0LnNldEhUVFBNZXRob2QocHJpdi0+aHR0cE1ldGhvZC5nZXQoKSk7CkBAIC02NzAs
MTIgKzY3MywxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoR3N0
QmFzZVNyYyogYmFzZVNyYywgYm9vbCBub3RpZnlBc3luY0NvbQogICAgICAgICB8fCAhZ19hc2Np
aV9zdHJjYXNlY21wKCJ0cmFpbGVycy5hcHBsZS5jb20iLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRh
KCkpKQogICAgICAgICByZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoIlF1aWNrdGltZS83LjYuNiIp
OwogCi0gICAgaWYgKHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uKSB7Ci0gICAgICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gZm9ybWF0ZWRSYW5nZShnX3N0cmR1cF9wcmludGYoImJ5dGVzPSUiIEdfR1VJTlQ2
NF9GT1JNQVQgIi0iLCBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbikpOworICAgIGlmIChtZW1iZXJz
LT5yZXF1ZXN0ZWRQb3NpdGlvbikgeworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGZvcm1hdGVk
UmFuZ2UoZ19zdHJkdXBfcHJpbnRmKCJieXRlcz0lIiBHX0dVSU5UNjRfRk9STUFUICItIiwgbWVt
YmVycy0+cmVxdWVzdGVkUG9zaXRpb24pKTsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJSYW5nZSByZXF1ZXN0OiAlcyIsIGZvcm1hdGVkUmFuZ2UuZ2V0KCkpOwogICAgICAgICByZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6UmFuZ2UsIGZvcm1hdGVkUmFu
Z2UuZ2V0KCkpOwogICAgIH0KLSAgICBwcml2LT5yZWFkUG9zaXRpb24gPSBwcml2LT5yZXF1ZXN0
ZWRQb3NpdGlvbjsKKyAgICBBU1NFUlQobWVtYmVycy0+cmVhZFBvc2l0aW9uID09IG1lbWJlcnMt
PnJlcXVlc3RlZFBvc2l0aW9uKTsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUGVyc2lz
dGVudCBjb25uZWN0aW9uIHN1cHBvcnQgJXMiLCBwcml2LT5rZWVwQWxpdmUgPyAiZW5hYmxlZCIg
OiAiZGlzYWJsZWQiKTsKICAgICBpZiAoIXByaXYtPmtlZXBBbGl2ZSkKQEAgLTY4Nyw4MSArNjkw
LDUxIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChHc3RCYXNlU3Jj
KiBiYXNlU3JjLCBib29sIG5vdGlmeUFzeW5jQ29tCiAgICAgLy8gV2UgYWx3YXlzIHJlcXVlc3Qg
SWNlY2FzdC9TaG91dGNhc3QgbWV0YWRhdGEsIGp1c3QgaW4gY2FzZSAuLi4KICAgICByZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6SWN5TWV0YWRhdGEsICIxIik7CiAK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4g
cHJvdGVjdG9yID0gV1RGOjplbnN1cmVHUmVmKHNyYyk7Ci0gICAgcHJpdi0+bm90aWZpZXItPm5v
dGlmeShNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpTdGFydCwgW3Byb3RlY3RvciwgcmVx
dWVzdCA9IFdURk1vdmUocmVxdWVzdCksIHNyYywgbm90aWZ5QXN5bmNDb21wbGV0aW9uXSB7Cisg
ICAgcHJpdi0+bm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpT
dGFydCwgW3Byb3RlY3RvciwgcmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCksIHJlcXVlc3ROdW1i
ZXIgPSBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyLCBzcmNdIHsKICAgICAgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+cHJpdjsKLSAgICAgICAgaWYgKCFwcml2LT5sb2Fk
ZXIpCi0gICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBwcml2LT5wbGF5ZXItPmNyZWF0ZVJlc291
cmNlTG9hZGVyKCk7CisgICAgICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJl
YW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7Cisg
ICAgICAgIC8vIElnbm9yZSB0aGlzIHRhc2sgKG5vdCBtYWtpbmcgYW55IEhUVFAgcmVxdWVzdCkg
aWYgYnkgbm93IFdlYktpdFdlYlNyYyBzdHJlYW1pbmcgdGhyZWFkIGlzIGFscmVhZHkgd2FpdGlu
ZworICAgICAgICAvLyBmb3IgYSBkaWZmZXJlbnQgcmVxdWVzdC4gVGhlcmUgaXMgbm8gcG9pbnQg
YW55bW9yZSBpbiBzZW5kaW5nIHRoaXMgb25lLgorICAgICAgICBpZiAobWVtYmVycy0+cmVxdWVz
dE51bWJlciAhPSByZXF1ZXN0TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmICghbWVtYmVycy0+bG9hZGVyKQorICAgICAgICAgICAgbWVtYmVycy0+bG9hZGVyID0gbWVt
YmVycy0+cGxheWVyLT5jcmVhdGVSZXNvdXJjZUxvYWRlcigpOwogCiAgICAgICAgIFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZUxvYWRlcjo6TG9hZE9wdGlvbnMgbG9hZE9wdGlvbnMgPSAwOwogICAgICAg
ICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKQogICAgICAgICAgICAgbG9hZE9w
dGlvbnMgfD0gUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyOjpMb2FkT3B0aW9uOjpCdWZmZXJE
YXRhOwotICAgICAgICBwcml2LT5yZXNvdXJjZSA9IHByaXYtPmxvYWRlci0+cmVxdWVzdFJlc291
cmNlKFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgbG9hZE9wdGlvbnMpOwotICAgICAgICBpZiAo
cHJpdi0+cmVzb3VyY2UpIHsKLSAgICAgICAgICAgIHByaXYtPnJlc291cmNlLT5zZXRDbGllbnQo
bWFrZVVuaXF1ZTxDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudD4ocHJvdGVjdG9yLmdldCgp
LCBSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkpKTsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocHJvdGVjdG9yLmdldCgpLCAiU3RhcnRlZCByZXF1ZXN0Iik7Ci0gICAgICAgICAgICBpZiAo
bm90aWZ5QXN5bmNDb21wbGV0aW9uKQotICAgICAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zdGFy
dF9jb21wbGV0ZShHU1RfQkFTRV9TUkMoc3JjKSwgR1NUX0ZMT1dfT0spOworICAgICAgICBtZW1i
ZXJzLT5yZXNvdXJjZSA9IG1lbWJlcnMtPmxvYWRlci0+cmVxdWVzdFJlc291cmNlKFJlc291cmNl
UmVxdWVzdChyZXF1ZXN0KSwgbG9hZE9wdGlvbnMpOworICAgICAgICBpZiAobWVtYmVycy0+cmVz
b3VyY2UpIHsKKyAgICAgICAgICAgIG1lbWJlcnMtPnJlc291cmNlLT5zZXRDbGllbnQobWFrZVVu
aXF1ZTxDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudD4ocHJvdGVjdG9yLmdldCgpLCBSZXNv
dXJjZVJlcXVlc3QocmVxdWVzdCksIHJlcXVlc3ROdW1iZXIpKTsKKyAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAiU3RhcnRlZCByZXF1ZXN0IFIldSIsIHJlcXVl
c3ROdW1iZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChwcm90ZWN0b3IuZ2V0KCksICJGYWlsZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCIpOwot
ICAgICAgICAgICAgaWYgKG5vdGlmeUFzeW5jQ29tcGxldGlvbikKLSAgICAgICAgICAgICAgICBn
c3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUoR1NUX0JBU0VfU1JDKHNyYyksIEdTVF9GTE9XX0VS
Uk9SKTsKLSAgICAgICAgICAgIHByaXYtPmxvYWRlciA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAg
ICB9KTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmND
bG9zZVNlc3Npb24oV2ViS2l0V2ViU3JjKiBzcmMpCi17Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0
ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9y
ID0gV1RGOjplbnN1cmVHUmVmKHNyYyk7Ci0KLSAgICBwcml2LT5ub3RpZmllci0+bm90aWZ5KE1h
aW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlN0b3AsIFtwcm90ZWN0b3IsIGtlZXBBbGl2ZSA9
IHByaXYtPmtlZXBBbGl2ZV0gewotICAgICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0g
cHJvdGVjdG9yLT5wcml2OwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdG9yLmdl
dCgpLCAiU3RvcHBpbmcgcmVzb3VyY2UgbG9hZGVyIik7Ci0KLSAgICAgICAgaWYgKHByaXYtPnJl
c291cmNlKSB7Ci0gICAgICAgICAgICBwcml2LT5yZXNvdXJjZS0+c3RvcCgpOwotICAgICAgICAg
ICAgcHJpdi0+cmVzb3VyY2UtPnNldENsaWVudChudWxscHRyKTsKLSAgICAgICAgICAgIHByaXYt
PnJlc291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1lbWJlcnMtPmxvYWRlciA9IG51bGxw
dHI7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoIWtlZXBBbGl2ZSkKLSAgICAgICAgICAgIHBy
aXYtPmxvYWRlciA9IG51bGxwdHI7CiAgICAgfSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlJlc291cmNlIGxvYWRlciBzdG9wcGVkIik7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRXZWJTcmNTdG9wKEdzdEJhc2VTcmMqIGJhc2VTcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjKiBz
cmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKHByaXYtPnJlc291cmNlIHx8IChwcml2LT5sb2Fk
ZXIgJiYgIXByaXYtPmtlZXBBbGl2ZSkpCi0gICAgICAgIHdlYktpdFdlYlNyY0Nsb3NlU2Vzc2lv
bihzcmMpOwotCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGFkYXB0ZXJMb2NrZXIocHJpdi0+
YWRhcHRlckxvY2spOwotICAgICAgICBnc3RfYWRhcHRlcl9jbGVhcihwcml2LT5hZGFwdGVyLmdl
dCgpKTsKLSAgICB9Ci0KLSAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMpOwotICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiU3RvcHBlZCByZXF1ZXN0Iik7CisgICAgLy8gYmFzZXNyYyB3aWxsIGFs
d2F5cyBjYWxsIHVuTG9jaygpIGFuZCB1bkxvY2tTdG9wKCkgYmVmb3JlIGNhbGxpbmcgdGhpcy4g
U2VlIGdzdF9iYXNlX3NyY19zdG9wKCkuCisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZh
dGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5k
YXRhTXV0ZXgpOworICAgIHdlYmtpdFdlYlNyY1Jlc2V0KHNyYywgbWVtYmVycywgUmVzZXRUeXBl
OjpIYXJkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgV2ViS2l0V2ViU3Jj
Iik7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNH
ZXRTaXplKEdzdEJhc2VTcmMqIGJhc2VTcmMsIGd1aW50NjQqIHNpemUpCiB7CiAgICAgV2ViS2l0
V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2
YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+
ZGF0YU11dGV4KTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiaGF2ZVNpemU6ICVzLCBz
aXplOiAlIiBHX0dVSU5UNjRfRk9STUFULCBib29sRm9yUHJpbnRpbmcocHJpdi0+aGF2ZVNpemUp
LCBwcml2LT5zaXplKTsKLSAgICBpZiAocHJpdi0+aGF2ZVNpemUpIHsKLSAgICAgICAgKnNpemUg
PSBwcml2LT5zaXplOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiaGF2ZVNpemU6ICVzLCBz
aXplOiAlIiBHX0dVSU5UNjRfRk9STUFULCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aGF2ZVNp
emUpLCBtZW1iZXJzLT5zaXplKTsKKyAgICBpZiAobWVtYmVycy0+aGF2ZVNpemUpIHsKKyAgICAg
ICAgKnNpemUgPSBtZW1iZXJzLT5zaXplOwogICAgICAgICByZXR1cm4gVFJVRTsKICAgICB9CiAK
QEAgLTc3MSw0MCArNzQ0LDQyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNHZXRTaXpl
KEdzdEJhc2VTcmMqIGJhc2VTcmMsIGd1aW50NjQqIHNpemUpCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjSXNTZWVrYWJsZShHc3RCYXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdlYktpdFdl
YlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0KLSAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgImlzU2Vla2FibGU6ICVzIiwgYm9vbEZvclByaW50aW5nKHNyYy0+cHJpdi0+aXNT
ZWVrYWJsZSkpOwotICAgIHJldHVybiBzcmMtPnByaXYtPmlzU2Vla2FibGU7CisgICAgRGF0YU11
dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVy
IG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiaXNTZWVrYWJsZTogJXMiLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNTZWVrYWJsZSkp
OworICAgIHJldHVybiBtZW1iZXJzLT5pc1NlZWthYmxlOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0V2ViU3JjRG9TZWVrKEdzdEJhc2VTcmMqIGJhc2VTcmMsIEdzdFNlZ21lbnQqIHNlZ21l
bnQpCiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBj
cmVhdGUoKS4gSXQncyBvbmx5IGNhbGxlZCB3aGVuIHdlJ3JlIHRyYW5zaXRpb25pbmcgdG8gPj1Q
QVVTRUQgYW5kCisgICAgLy8gYmV0d2VlbiBmbHVzaGVzLiBJbiBhbnkgY2FzZSwgYmFzZXNyYyBo
b2xkcyB0aGUgU1RSRUFNX0xPQ0ssIHNvIHdlIGtub3cgY3JlYXRlKCkgaXMgbm90IHJ1bm5pbmcu
CisgICAgLy8gQWxzbywgYm90aCB3ZWJLaXRXZWJTcmNVbkxvY2soKSBhbmQgd2ViS2l0V2ViU3Jj
VW5Mb2NrU3RvcCgpIGFyZSBndWFyYW50ZWVkIHRvIGJlIGNhbGxlZCAqYmVmb3JlKiB0aGlzIGZ1
bmN0aW9uLgorICAgIC8vIFtTZWUgZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlaygpXS4KKyAgICBB
U1NFUlQoR1NUX0VMRU1FTlQoYmFzZVNyYyktPmN1cnJlbnRfc3RhdGUgPCBHU1RfU1RBVEVfUEFV
U0VEIHx8IEdTVF9QQURfSVNfRkxVU0hJTkcoYmFzZVNyYy0+c3JjcGFkKSk7CisKKyAgICAvLyBF
eGNlcHQgZm9yIHRoZSBpbml0aWFsIHNlZWssIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQg
aWYgaXNTZWVrYWJsZSgpIHJldHVybnMgdHJ1ZS4KKyAgICBBU1NFUlQoR1NUX0VMRU1FTlQoYmFz
ZVNyYyktPmN1cnJlbnRfc3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IHdlYktpdFdlYlNyY0lz
U2Vla2FibGUoYmFzZVNyYykpOworCiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VC
X1NSQyhiYXNlU3JjKTsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2
OwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPnJlc3BvbnNlTG9jayk7CisgICAgRGF0YU11
dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVy
IG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJTZWVrIHNlZ21lbnQ6ICglIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZP
Uk1BVCAiKSIsIHNlZ21lbnQtPnN0YXJ0LCBzZWdtZW50LT5zdG9wKTsKLSAgICBpZiAocHJpdi0+
cmVhZFBvc2l0aW9uID09IHNlZ21lbnQtPnN0YXJ0ICYmIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9u
ID09IHByaXYtPnJlYWRQb3NpdGlvbiAmJiBwcml2LT5zdG9wUG9zaXRpb24gPT0gc2VnbWVudC0+
c3RvcCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgdG8gY3VycmVudCBy
ZWFkL2VuZCBwb3NpdGlvbiBhbmQgbm8gc2VlayBwZW5kaW5nIik7Ci0gICAgICAgIHJldHVybiBU
UlVFOwotICAgIH0KKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgc2VnbWVudDogKCUi
IEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFUICIpIFBvc2l0aW9uIHByZXZp
b3VzIHRvIHNlZWs6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHNlZ21lbnQtPnN0YXJ0LCBzZWdtZW50
LT5zdG9wLCBtZW1iZXJzLT5yZWFkUG9zaXRpb24pOwogCi0gICAgaWYgKHByaXYtPndlcmVIZWFk
ZXJzUmVjZWl2ZWQgJiYgIXByaXYtPmlzU2Vla2FibGUpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdf
T0JKRUNUKHNyYywgIk5vdCBzZWVrYWJsZSIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAg
fQorICAgIC8vIEJlZm9yZSBhdHRlbXB0aW5nIHRvIHNlZWssIGJhc2VzcmMgd2lsbCBjYWxsIGlz
U2Vla2FibGUoKS4gSWYgaXNTZWVrYWJsZSgpIGlzIHRydWUsIGEgZmx1c2ggd2lsbCBiZSBtYWRl
IGFuZAorICAgIC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQuIGJhc2VzcmMgc3RpbGwg
Z2l2ZXMgdXMgdGhlIGNoYW5jZSBoZXJlIHRvIHJldHVybiBGQUxTRSBhbmQgY2FuY2VsIHRoZSBz
ZWVrLgorICAgIC8vIFdlIGNhbm5vdCBhZmZvcmQgdG8gcmV0dXJuIEZBTFNFIGluIHRoaXMgZnVu
Y3Rpb24gdGhvdWdoIHVubGVzcyB3ZSdyZSBnb2luZyB0byBmYWlsIG9uIHB1cnBvc2UsIHNpbmNl
IGF0IHRoaXMKKyAgICAvLyBwb2ludCB3ZSBoYXZlIGFscmVhZHkgYmVlbiBmbHVzaGVkIGFuZCBj
YW5jZWxsZWQgdGhlIEhUVFAgcmVxdWVzdCB0aGF0IHdhcyBmZWVkaW5nIHVzIGRhdGEuCiAKICAg
ICBpZiAoc2VnbWVudC0+cmF0ZSA8IDAuMCB8fCBzZWdtZW50LT5mb3JtYXQgIT0gR1NUX0ZPUk1B
VF9CWVRFUykgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qoc3JjLCAiSW52YWxpZCBzZWVr
IHNlZ21lbnQiKTsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJJbnZhbGlkIHNlZWsg
c2VnbWVudCIpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHByaXYt
PmhhdmVTaXplICYmIHNlZ21lbnQtPnN0YXJ0ID49IHByaXYtPnNpemUpCisgICAgaWYgKG1lbWJl
cnMtPmhhdmVTaXplICYmIHNlZ21lbnQtPnN0YXJ0ID49IG1lbWJlcnMtPnNpemUpCiAgICAgICAg
IEdTVF9XQVJOSU5HX09CSkVDVChzcmMsICJQb3RlbnRpYWxseSBzZWVraW5nIGJlaGluZCBlbmQg
b2YgZmlsZSwgbWlnaHQgRU9TIGltbWVkaWF0ZWx5Iik7CiAKLSAgICBwcml2LT5pc1NlZWtpbmcg
PSB0cnVlOwotICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID0gc2VnbWVudC0+c3RhcnQ7Ci0g
ICAgcHJpdi0+c3RvcFBvc2l0aW9uID0gc2VnbWVudC0+c3RvcDsKLSAgICBwcml2LT5hZGFwdGVy
Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uID0g
bWVtYmVycy0+cmVhZFBvc2l0aW9uID0gc2VnbWVudC0+c3RhcnQ7CisgICAgbWVtYmVycy0+c3Rv
cFBvc2l0aW9uID0gc2VnbWVudC0+c3RvcDsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtODE2
LDggKzc5MSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeShHc3RCYXNlU3Jj
KiBiYXNlU3JjLCBHc3RRdWVyeSogcXVlcnkpCiAKICAgICBpZiAoR1NUX1FVRVJZX1RZUEUocXVl
cnkpID09IEdTVF9RVUVSWV9VUkkpIHsKICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnks
IHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7Ci0gICAgICAgIGlmICghcHJpdi0+cmVkaXJlY3Rl
ZFVSSS5pc051bGwoKSkKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9u
KHF1ZXJ5LCBwcml2LT5yZWRpcmVjdGVkVVJJLmRhdGEoKSk7CisgICAgICAgIERhdGFNdXRleDxX
ZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1i
ZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICAgICAgaWYgKCFtZW1iZXJzLT5yZWRpcmVj
dGVkVVJJLmlzTnVsbCgpKQorICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rp
b24ocXVlcnksIG1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkuZGF0YSgpKTsKICAgICAgICAgcmVzdWx0
ID0gVFJVRTsKICAgICB9CiAKQEAgLTgzOCw1MSArODE0LDQ2IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRXZWJTcmNRdWVyeShHc3RCYXNlU3JjKiBiYXNlU3JjLCBHc3RRdWVyeSogcXVlcnkpCiBz
dGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjVW5Mb2NrKEdzdEJhc2VTcmMqIGJhc2VTcmMpCiB7
CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBM
b2NrSG9sZGVyIGxvY2tlcihzcmMtPnByaXYtPnJlc3BvbnNlTG9jayk7CisgICAgR1JlZlB0cjxX
ZWJLaXRXZWJTcmM+IHByb3RlY3RvciA9IFdURjo6ZW5zdXJlR1JlZihzcmMpOworICAgIERhdGFN
dXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBl
ciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c3JjLCAiVW5sb2NrIik7Ci0gICAgc3JjLT5wcml2LT5pc0ZsdXNoaW5nID0gdHJ1ZTsKLSAgICBz
cmMtPnByaXYtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgIHNyYy0+cHJpdi0+
YWRhcHRlckNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICBtZW1iZXJzLT5pc0ZsdXNoaW5nID0g
dHJ1ZTsKKworICAgIC8vIElmIHdlIGhhdmUgYSBuZXR3b3JrIHJlc291cmNlIHJlcXVlc3Qgb3Bl
biwgd2UgYXNrIHRoZSBtYWluIHRocmVhZCB0byBjbG9zZSBpdC4KKyAgICBpZiAobWVtYmVycy0+
cmVzb3VyY2UpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNvdXJjZSByZXF1
ZXN0IFIldSB3aWxsIGJlIHN0b3BwZWQiLCBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyKTsKKyAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0b3IsIHJlc291cmNlID0gV1RGTW92
ZShtZW1iZXJzLT5yZXNvdXJjZSksIHJlcXVlc3ROdW1iZXIgPSBtZW1iZXJzLT5yZXF1ZXN0TnVt
YmVyXSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIlN0
b3BwaW5nIHJlc291cmNlIHJlcXVlc3QgUiV1IiwgcmVxdWVzdE51bWJlcik7CisgICAgICAgICAg
ICByZXNvdXJjZS0+c3RvcCgpOworICAgICAgICAgICAgcmVzb3VyY2UtPnNldENsaWVudChudWxs
cHRyKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIEFTU0VSVCghbWVtYmVycy0+cmVzb3VyY2Up
OworCisgICAgaWYgKCFzcmMtPnByaXYtPmtlZXBBbGl2ZSkKKyAgICAgICAgbWVtYmVycy0+bG9h
ZGVyID0gbnVsbHB0cjsKKworICAgIC8vIEVuc3VyZSBhbGwgbmV0d29yayBjYWxsYmFja3MgZnJv
bSB0aGUgb2xkIHJlcXVlc3QgZG9uJ3QgZmVlZCBkYXRhIHRvIFdlYktpdFdlYlNyYyBhbnltb3Jl
LgorICAgIG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIrKzsKKworICAgIC8vIFdha2UgdXAgc3RyZWFt
aW5nIHRocmVhZC4KKyAgICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsK
KwogICAgIHJldHVybiBUUlVFOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjVW5M
b2NrU3RvcChHc3RCYXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0g
V0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoc3JjLT5wcml2
LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJl
YW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4
KTsKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlVubG9jayBzdG9wIik7Ci0gICAgc3JjLT5w
cml2LT5pc0ZsdXNoaW5nID0gZmFsc2U7CisgICAgbWVtYmVycy0+aXNGbHVzaGluZyA9IGZhbHNl
OworICAgIHdlYmtpdFdlYlNyY1Jlc2V0KHNyYywgbWVtYmVycywgUmVzZXRUeXBlOjpTb2Z0KTsK
IAogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2Vi
S2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2Ug
dHJhbnNpdGlvbikKLXsKLSAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGVs
ZW1lbnQpOwotCi0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCi0gICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICIlcyIsIGdzdF9zdGF0ZV9jaGFuZ2VfZ2V0X25hbWUodHJhbnNpdGlvbikp
OwotI2VuZGlmCi0gICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVf
Q0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICAgIHdlYktpdFdlYlNyY0Nsb3NlU2Vzc2lvbihz
cmMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RP
X1JFQURZOiB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNyYy0+cHJpdi0+cmVzcG9uc2VM
b2NrKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIGNhbmNl
bGxpbmcgbmV0d29yayByZXF1ZXN0cyIpOwotICAgICAgICBzcmMtPnByaXYtPmlzRmx1c2hpbmcg
PSB0cnVlOwotICAgICAgICBzcmMtPnByaXYtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgp
OwotICAgICAgICBzcmMtPnByaXYtPmFkYXB0ZXJDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICByZXR1cm4gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRl
KGVsZW1lbnQsIHRyYW5zaXRpb24pOwotfQotCiBzdGF0aWMgYm9vbCB1cmxIYXNTdXBwb3J0ZWRQ
cm90b2NvbChjb25zdCBVUkwmIHVybCkKIHsKICAgICByZXR1cm4gdXJsLmlzVmFsaWQoKSAmJiAo
dXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCB1cmwucHJvdG9jb2xJc0Jsb2IoKSk7CkBA
IC05MzgsNyArOTA5LDYgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RV
UklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXIKICAgICAgICAgcmV0dXJu
IEZBTFNFOwogICAgIH0KIAotICAgIHByaXYtPnJlZGlyZWN0ZWRVUkkgPSBDU3RyaW5nKCk7CiAg
ICAgcHJpdi0+b3JpZ2luYWxVUkkgPSBDU3RyaW5nKCk7CiAgICAgaWYgKCF1cmkpCiAgICAgICAg
IHJldHVybiBUUlVFOwpAQCAtOTcyLDE2ICs5NDIsMTkgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2Vi
U3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKIHZvaWQgd2ViS2l0
V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV2ViS2l0V2ViU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxh
eWVyKiBwbGF5ZXIpCiB7CiAgICAgQVNTRVJUKHBsYXllcik7Ci0gICAgc3JjLT5wcml2LT5wbGF5
ZXIgPSBwbGF5ZXI7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWlu
Z01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOwor
ICAgIG1lbWJlcnMtPnBsYXllciA9IHBsYXllcjsKIH0KIAogYm9vbCB3ZWJLaXRTcmNQYXNzZWRD
T1JTQWNjZXNzQ2hlY2soV2ViS2l0V2ViU3JjKiBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy0+cHJp
di0+ZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjazsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3Jj
UHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnBy
aXYtPmRhdGFNdXRleCk7CisgICAgcmV0dXJuIG1lbWJlcnMtPmRpZFBhc3NBY2Nlc3NDb250cm9s
Q2hlY2s7CiB9CiAKLUNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYywgUmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCkKLSAgICA6IG1fc3JjKEdTVF9FTEVNRU5UKHNyYykpCitDYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBz
cmMsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIHVuc2lnbmVkIHJlcXVlc3ROdW1iZXIpCisg
ICAgOiBtX3JlcXVlc3ROdW1iZXIocmVxdWVzdE51bWJlcikKKyAgICAsIG1fc3JjKEdTVF9FTEVN
RU5UKHNyYykpCiAgICAgLCBtX3JlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSkKIHsKIH0KQEAgLTk5
MCw2ICs5NjMsNyBAQCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6fkNhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50KCkgPSBkZWZhdWx0OwogCiB2b2lkIENhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50OjpjaGVja1VwZGF0ZUJsb2Nrc2l6ZSh1bnNpZ25lZCBieXRlc1JlYWQpCiB7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdF
QktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKICAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NU
X0JBU0VfU1JDX0NBU1Qoc3JjKTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OwpAQCAtMTAyNiwzMiArMTAwMCw0NCBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50OjpjaGVja1VwZGF0ZUJsb2Nrc2l6ZSh1bnNpZ25lZCBieXRlc1JlYWQpCiAKIHZv
aWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZv
cm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoUG9saWN5Q2hlY2tlcjo6U2hvdWxkQ29udGludWUpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgV2ViS2l0
V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBwcml2LT5kaWRQYXNzQWNjZXNzQ29u
dHJvbENoZWNrID0gcHJpdi0+cmVzb3VyY2UtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKTsK
KyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46Okxv
Y2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5kYXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5y
ZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihQb2xpY3lDaGVja2VyOjpTaG91bGRDb250aW51ZTo6Tm8pOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZWNlaXZlZCByZXNwb25zZTog
JWQiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlIldTogUmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgbV9yZXF1ZXN0TnVtYmVyLCByZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpKTsKIAorICAgIG1lbWJlcnMtPmRpZFBhc3NBY2Nlc3NDb250cm9s
Q2hlY2sgPSBtZW1iZXJzLT5yZXNvdXJjZS0+ZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjaygpOwog
ICAgIG1fb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNwb25zZS51cmwoKSkp
OwogCiAgICAgYXV0byByZXNwb25zZVVSSSA9IHJlc3BvbnNlLnVybCgpLnN0cmluZygpLnV0Zjgo
KTsKICAgICBpZiAocHJpdi0+b3JpZ2luYWxVUkkgIT0gcmVzcG9uc2VVUkkpCi0gICAgICAgIHBy
aXYtPnJlZGlyZWN0ZWRVUkkgPSBXVEZNb3ZlKHJlc3BvbnNlVVJJKTsKKyAgICAgICAgbWVtYmVy
cy0+cmVkaXJlY3RlZFVSSSA9IFdURk1vdmUocmVzcG9uc2VVUkkpOworCisgICAgLy8gbGVuZ3Ro
IHdpbGwgYmUgemVybyAodW5rbm93bikgaWYgbm8gQ29udGVudC1MZW5ndGggaXMgcHJvdmlkZWQg
b3IgdGhlIHJlc3BvbnNlIGlzIGNvbXByZXNzZWQgd2l0aCBDb250ZW50LUVuY29kaW5nLgorICAg
IHVpbnQ2NF90IGxlbmd0aCA9ICFyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRFbmNvZGluZykgPyByZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKSA6IDA7CisgICAgaWYgKGxlbmd0aCA+IDAgJiYgbWVtYmVycy0+cmVxdWVzdGVk
UG9zaXRpb24gJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDYpCisgICAgICAgIGxl
bmd0aCArPSBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbjsKIAotICAgIHVpbnQ2NF90IGxlbmd0
aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiAw
ICYmIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
PT0gMjA2KQotICAgICAgICBsZW5ndGggKz0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247CisgICAg
R1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGh0dHBIZWFkZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3X2Vt
cHR5KCJodHRwLWhlYWRlcnMiKSk7CiAKLSAgICBwcml2LT5odHRwSGVhZGVycy5yZXNldChnc3Rf
c3RydWN0dXJlX25ld19lbXB0eSgiaHR0cC1oZWFkZXJzIikpOwotICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KHByaXYtPmh0dHBIZWFkZXJzLmdldCgpLCAidXJpIiwgR19UWVBFX1NUUklORywgcHJpdi0+
b3JpZ2luYWxVUkkuZGF0YSgpLAorICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdl
dCgpLCAidXJpIiwgR19UWVBFX1NUUklORywgcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpLAogICAg
ICAgICAiaHR0cC1zdGF0dXMtY29kZSIsIEdfVFlQRV9VSU5ULCByZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpLCBudWxscHRyKTsKLSAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkp
Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHByaXYtPmh0dHBIZWFkZXJzLmdldCgpLCAicmVk
aXJlY3Rpb24tdXJpIiwgR19UWVBFX1NUUklORywgcHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCks
IG51bGxwdHIpOworICAgIGlmICghbWVtYmVycy0+cmVkaXJlY3RlZFVSSS5pc051bGwoKSkKKyAg
ICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMuZ2V0KCksICJyZWRpcmVjdGlvbi11
cmkiLCBHX1RZUEVfU1RSSU5HLCBtZW1iZXJzLT5yZWRpcmVjdGVkVVJJLmRhdGEoKSwgbnVsbHB0
cik7CisKKyAgICAvLyBQYWNrIHJlcXVlc3QgaGVhZGVycyBpbiB0aGUgaHR0cC1oZWFkZXJzIHN0
cnVjdHVyZS4KICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaGVhZGVycyhnc3Rfc3RydWN0
dXJlX25ld19lbXB0eSgicmVxdWVzdC1oZWFkZXJzIikpOwogICAgIGZvciAoY29uc3QgYXV0byYg
aGVhZGVyIDogbV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkKICAgICAgICAgZ3N0X3N0cnVj
dHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgaGVhZGVyLmtleS51dGY4KCkuZGF0YSgpLCBHX1RZUEVf
U1RSSU5HLCBoZWFkZXIudmFsdWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgR1NUX0RF
QlVHX09CSkVDVChzcmMsICJSZXF1ZXN0IGhlYWRlcnMgZ29pbmcgZG93bnN0cmVhbTogJSIgR1NU
X1BUUl9GT1JNQVQsIGhlYWRlcnMuZ2V0KCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHByaXYt
Pmh0dHBIZWFkZXJzLmdldCgpLCAicmVxdWVzdC1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJF
LCBoZWFkZXJzLmdldCgpLCBudWxscHRyKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlIl
dTogUmVxdWVzdCBoZWFkZXJzIGdvaW5nIGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBt
X3JlcXVlc3ROdW1iZXIsIGhlYWRlcnMuZ2V0KCkpOworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0
dHBIZWFkZXJzLmdldCgpLCAicmVxdWVzdC1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBo
ZWFkZXJzLmdldCgpLCBudWxscHRyKTsKKworICAgIC8vIFBhY2sgcmVzcG9uc2UgaGVhZGVycyBp
biB0aGUgaHR0cC1oZWFkZXJzIHN0cnVjdHVyZS4KICAgICBoZWFkZXJzLnJlc2V0KGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJyZXNwb25zZS1oZWFkZXJzIikpOwogICAgIGZvciAoY29uc3QgYXV0
byYgaGVhZGVyIDogcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpKSB7CiAgICAgICAgIGJvb2wg
b2sgPSBmYWxzZTsKQEAgLTEwNjEsNTcgKzEwNDcsNDMgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBj
b24KICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5n
ZXQoKSwgaGVhZGVyLmtleS51dGY4KCkuZGF0YSgpLCBHX1RZUEVfU1RSSU5HLCBoZWFkZXIudmFs
dWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CiAgICAgfQotICAgIGF1dG8gY29udGVudExlbmd0
aEZpZWxkTmFtZShodHRwSGVhZGVyTmFtZVN0cmluZyhIVFRQSGVhZGVyTmFtZTo6Q29udGVudExl
bmd0aCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZChoZWFk
ZXJzLmdldCgpLCBjb250ZW50TGVuZ3RoRmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpKQotICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChoZWFkZXJzLmdldCgpLCBjb250ZW50TGVuZ3RoRmllbGROYW1l
LnV0ZjgoKS5kYXRhKCksIEdfVFlQRV9VSU5UNjQsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5n
dGgpLCBudWxscHRyKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldChwcml2LT5odHRwSGVhZGVycy5n
ZXQoKSwgInJlc3BvbnNlLWhlYWRlcnMiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGhlYWRlcnMuZ2V0
KCksIG51bGxwdHIpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzcG9uc2UgaGVhZGVy
cyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwgaGVhZGVycy5nZXQoKSk7Cisg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSJXU6IFJlc3BvbnNlIGhlYWRlcnMgZ29pbmcgZG93
bnN0cmVhbTogJSIgR1NUX1BUUl9GT1JNQVQsIG1fcmVxdWVzdE51bWJlciwgaGVhZGVycy5nZXQo
KSk7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMuZ2V0KCksICJyZXNwb25zZS1o
ZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdldCgpLCBudWxscHRyKTsKIAot
ICAgIHByaXYtPmh0dHBIZWFkZXJzRXZlbnQgPSBhZG9wdEdSZWYoZ3N0X2V2ZW50X25ld19jdXN0
b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWSwgZ3N0X3N0cnVjdHVyZV9jb3B5
KHByaXYtPmh0dHBIZWFkZXJzLmdldCgpKSkpOwotCi0gICAgYXV0byBzY29wZUV4aXQgPSBtYWtl
U2NvcGVFeGl0KFsmXSB7Ci0gICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0
cnVjdHVyZV9jb3B5KHNyYy0+cHJpdi0+aHR0cEhlYWRlcnMuZ2V0KCkpOwotICAgICAgICBnc3Rf
ZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9u
ZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwgc3RydWN0dXJlKSk7Ci0gICAgfSk7Cisg
ICAgbWVtYmVycy0+cGVuZGluZ0h0dHBIZWFkZXJzTWVzc2FnZSA9IGFkb3B0R1JlZihnc3RfbWVz
c2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwgZ3N0X3N0cnVjdHVyZV9jb3B5
KGh0dHBIZWFkZXJzLmdldCgpKSkpOworICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc0V2
ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfY3VzdG9tKEdTVF9FVkVOVF9DVVNUT01fRE9X
TlNUUkVBTV9TVElDS1ksIGh0dHBIZWFkZXJzLnJlbGVhc2UoKSkpOwogCiAgICAgaWYgKHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9S
KHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUmVjZWl2ZWQgJWQgSFRUUCBlcnJvciBjb2RlIiwgcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRyKSk7Ci0gICAgICAgIHByaXYtPmRvZXNI
YXZlRU9TID0gdHJ1ZTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FT
VChzcmMpKTsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwg
KCJSJXU6IFJlY2VpdmVkICVkIEhUVFAgZXJyb3IgY29kZSIsIG1fcmVxdWVzdE51bWJlciwgcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRyKSk7CisgICAgICAgIG1lbWJlcnMtPmRv
ZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICAgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90
aWZ5T25lKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGljeUNoZWNrZXI6OlNob3Vs
ZENvbnRpbnVlOjpObyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+
cmVxdWVzdGVkUG9zaXRpb24pIHsKKyAgICBpZiAobWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb24p
IHsKICAgICAgICAgLy8gU2Vla2luZyAuLi4gd2UgZXhwZWN0IGEgMjA2ID09IFBBUlRJQUxfQ09O
VEVOVAotICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDApIHsKLSAg
ICAgICAgICAgIC8vIFJhbmdlIHJlcXVlc3QgZGlkbid0IGhhdmUgYSByYW5nZWQgcmVzcG9uc2U7
IHJlc2V0dGluZyBvZmZzZXQuCi0gICAgICAgICAgICBwcml2LT5yZWFkUG9zaXRpb24gPSAwOwot
ICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjA2KSB7Cisg
ICAgICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwNikgewogICAgICAgICAg
ICAgLy8gUmFuZ2UgcmVxdWVzdCBjb21wbGV0ZWx5IGZhaWxlZC4KLSAgICAgICAgICAgIEdTVF9F
TEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUmVjZWl2ZWQgdW5leHBlY3RlZCAl
ZCBIVFRQIHN0YXR1cyBjb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRy
KSk7Ci0gICAgICAgICAgICBwcml2LT5kb2VzSGF2ZUVPUyA9IHRydWU7Ci0gICAgICAgICAgICB3
ZWJLaXRXZWJTcmNTdG9wKEdTVF9CQVNFX1NSQ19DQVNUKHNyYykpOworICAgICAgICAgICAgR1NU
X0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCJSJXU6IFJlY2VpdmVkIHVuZXhw
ZWN0ZWQgJWQgSFRUUCBzdGF0dXMgY29kZSBmb3IgcmFuZ2UgcmVxdWVzdCIsIG1fcmVxdWVzdE51
bWJlciwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRyKSk7CisgICAgICAgICAg
ICBtZW1iZXJzLT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgICAgICAgICBtZW1iZXJzLT5yZXNw
b25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFBvbGljeUNoZWNrZXI6OlNob3VsZENvbnRpbnVlOjpObyk7CiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJh
bmdlIHJlcXVlc3Qgc3VjY2VlZGVkIik7Ci0gICAgICAgICAgICBwcml2LT5pc1NlZWtpbmcgPSBm
YWxzZTsKLSAgICAgICAgICAgIHByaXYtPndhc1NlZWtpbmcgPSB0cnVlOwogICAgICAgICB9Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUiV1OiBSYW5nZSByZXF1ZXN0IHN1Y2NlZWRl
ZCIsIG1fcmVxdWVzdE51bWJlcik7CiAgICAgfQogCi0gICAgcHJpdi0+aXNTZWVrYWJsZSA9IGxl
bmd0aCA+IDAgJiYgZ19hc2NpaV9zdHJjYXNlY21wKCJub25lIiwgcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBY2NlcHRSYW5nZXMpLnV0ZjgoKS5kYXRhKCkpOworICAg
IG1lbWJlcnMtPmlzU2Vla2FibGUgPSBsZW5ndGggPiAwICYmIGdfYXNjaWlfc3RyY2FzZWNtcCgi
bm9uZSIsIHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QWNjZXB0UmFu
Z2VzKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2l6ZTog
JSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBpc1NlZWthYmxlOiAlcyIsIGxlbmd0aCwgYm9vbEZvclBy
aW50aW5nKHByaXYtPmlzU2Vla2FibGUpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlIl
dTogU2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBpc1NlZWthYmxlOiAlcyIsIG1fcmVxdWVz
dE51bWJlciwgbGVuZ3RoLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNTZWVrYWJsZSkpOwog
ICAgIGlmIChsZW5ndGggPiAwKSB7Ci0gICAgICAgIGlmICghcHJpdi0+aGF2ZVNpemUgfHwgcHJp
di0+c2l6ZSAhPSBsZW5ndGgpIHsKLSAgICAgICAgICAgIHByaXYtPmhhdmVTaXplID0gdHJ1ZTsK
LSAgICAgICAgICAgIHByaXYtPnNpemUgPSBsZW5ndGg7Ci0gICAgICAgICAgICBwcml2LT5pc0R1
cmF0aW9uU2V0ID0gZmFsc2U7CisgICAgICAgIGlmICghbWVtYmVycy0+aGF2ZVNpemUgfHwgbWVt
YmVycy0+c2l6ZSAhPSBsZW5ndGgpIHsKKyAgICAgICAgICAgIG1lbWJlcnMtPmhhdmVTaXplID0g
dHJ1ZTsKKyAgICAgICAgICAgIG1lbWJlcnMtPnNpemUgPSBsZW5ndGg7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UKLSAgICAgICAgcHJpdi0+aGF2ZVNpemUgPSBmYWxzZTsKKyAgICAgICAgbWVtYmVy
cy0+aGF2ZVNpemUgPSBmYWxzZTsKIAogICAgIC8vIFNpZ25hbCB0byBkb3duc3RyZWFtIGlmIHRo
aXMgaXMgYW4gSWNlY2FzdCBzdHJlYW0uCiAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzOwpAQCAt
MTEyMywxMTQgKzEwOTUsMTA2IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6
OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uCiAgICAgICAgICAg
ICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5
IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lOVCwgbWV0YWRhdGFJbnRlcnZhbCwgbnVs
bHB0cikpOwogCiAgICAgICAgICAgICBTdHJpbmcgY29udGVudFR5cGUgPSByZXNwb25zZS5odHRw
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKTsKLSAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzcG9uc2UgQ29udGVudFR5cGU6ICVzIiwgY29udGVudFR5
cGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlIl
dTogUmVzcG9uc2UgQ29udGVudFR5cGU6ICVzIiwgbV9yZXF1ZXN0TnVtYmVyLCBjb250ZW50VHlw
ZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2Fwcy5n
ZXQoKSwgImNvbnRlbnQtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGNvbnRlbnRUeXBlLnV0ZjgoKS5k
YXRhKCksIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfQotCiAgICAgaWYgKGNhcHMpIHsKLSAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZXQgY2FwcyB0byAlIiBHU1RfUFRSX0ZPUk1B
VCwgY2Fwcy5nZXQoKSk7Ci0gICAgICAgIGdzdF9iYXNlX3NyY19zZXRfY2FwcyhHU1RfQkFTRV9T
UkNfQ0FTVChzcmMpLCBjYXBzLmdldCgpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJSJXU6IFNldCBjYXBzIHRvICUiIEdTVF9QVFJfRk9STUFULCBtX3JlcXVlc3ROdW1iZXIsIGNh
cHMuZ2V0KCkpOworICAgICAgICBtZW1iZXJzLT5wZW5kaW5nQ2FwcyA9IFdURk1vdmUoY2Fwcyk7
CiAgICAgfQogCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5yZXNwb25z
ZUxvY2spOwotICAgICAgICBwcml2LT53ZXJlSGVhZGVyc1JlY2VpdmVkID0gdHJ1ZTsKLSAgICAg
ICAgcHJpdi0+aGVhZGVyc0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAgICB9CisgICAgbWVtYmVy
cy0+d2FzUmVzcG9uc2VSZWNlaXZlZCA9IHRydWU7CisgICAgbWVtYmVycy0+cmVzcG9uc2VDb25k
aXRpb24ubm90aWZ5T25lKCk7CisKICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lDaGVja2Vy
OjpTaG91bGRDb250aW51ZTo6WWVzKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKLSAgICBHc3RC
YXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKTsKICAgICBXZWJLaXRXZWJT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAi
SGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgbGVuZ3RoKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihw
cml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpT
dHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7
CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIgIT0gbV9yZXF1ZXN0TnVtYmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHU1RfTE9HX09CSkVDVChzcmMsICJSJXU6IEhhdmUgJWQgYnl0
ZXMgb2YgZGF0YSIsIG1fcmVxdWVzdE51bWJlciwgbGVuZ3RoKTsKKwogICAgIC8vIFJvdWdoIGJh
bmR3aWR0aCBjYWxjdWxhdGlvbi4gV2UgaWdub3JlIGhlcmUgdGhlIGZpcnN0IGRhdGEgcGFja2Fn
ZSBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgdG8gcmVzZXQgdGhlIGNvdW50ZXJzIHdoZW4gd2UgaXNz
dWUgdGhlIHJlcXVlc3QgYW5kCiAgICAgLy8gdGhhdCBmaXJzdCBwYWNrYWdlIGRlbGl2ZXJ5IHdv
dWxkIGluY2x1ZGUgdGhlIHRpbWUgb2Ygc2VuZGluZyBvdXQgdGhlIHJlcXVlc3QgYW5kIGdldHRp
bmcgdGhlIGRhdGEgYmFjay4gU2luY2Ugd2UgY2FuJ3QgZGlzdGluZ3Vpc2ggdGhlCiAgICAgLy8g
c2VuZGluZyB0aW1lIGZyb20gdGhlIHJlY2VpdmluZyB0aW1lLCBpdCBpcyBiZXR0ZXIgdG8gaWdu
b3JlIGl0LgotICAgIGlmICghc3RkOjppc25hbihwcml2LT5kb3dubG9hZFN0YXJ0VGltZSkpIHsK
LSAgICAgICAgcHJpdi0+dG90YWxEb3dubG9hZGVkQnl0ZXMgKz0gbGVuZ3RoOwotICAgICAgICBk
b3VibGUgdGltZVNpbmNlU3RhcnQgPSAoV2FsbFRpbWU6Om5vdygpIC0gcHJpdi0+ZG93bmxvYWRT
dGFydFRpbWUpLnNlY29uZHMoKTsKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJkb3du
bG9hZGVkICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBieXRlcyBpbiAlZiBzZWNvbmRzID1+ICUxLjBm
IGJ5dGVzL3NlY29uZCIsIHByaXYtPnRvdGFsRG93bmxvYWRlZEJ5dGVzLCB0aW1lU2luY2VTdGFy
dAotICAgICAgICAgICAgLCB0aW1lU2luY2VTdGFydCA/IHByaXYtPnRvdGFsRG93bmxvYWRlZEJ5
dGVzIC8gdGltZVNpbmNlU3RhcnQgOiAwKTsKKyAgICBpZiAoIXN0ZDo6aXNuYW4obWVtYmVycy0+
ZG93bmxvYWRTdGFydFRpbWUpKSB7CisgICAgICAgIG1lbWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5
dGVzICs9IGxlbmd0aDsKKyAgICAgICAgZG91YmxlIHRpbWVTaW5jZVN0YXJ0ID0gKFdhbGxUaW1l
Ojpub3coKSAtIG1lbWJlcnMtPmRvd25sb2FkU3RhcnRUaW1lKS5zZWNvbmRzKCk7CisgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiUiV1OiBkb3dubG9hZGVkICUiIEdfR1VJTlQ2NF9GT1JN
QVQgIiBieXRlcyBpbiAlZiBzZWNvbmRzID1+ICUxLjBmIGJ5dGVzL3NlY29uZCIsIG1fcmVxdWVz
dE51bWJlciwgbWVtYmVycy0+dG90YWxEb3dubG9hZGVkQnl0ZXMsIHRpbWVTaW5jZVN0YXJ0Cisg
ICAgICAgICAgICAsIHRpbWVTaW5jZVN0YXJ0ID8gbWVtYmVycy0+dG90YWxEb3dubG9hZGVkQnl0
ZXMgLyB0aW1lU2luY2VTdGFydCA6IDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaXYtPmRv
d25sb2FkU3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOwotICAgICAgICBwcml2LT50b3RhbERv
d25sb2FkZWRCeXRlcyA9IDA7CisgICAgICAgIG1lbWJlcnMtPmRvd25sb2FkU3RhcnRUaW1lID0g
V2FsbFRpbWU6Om5vdygpOwogICAgIH0KIAotICAgIHVpbnQ2NF90IG5ld1Bvc2l0aW9uID0gcHJp
di0+cmVhZFBvc2l0aW9uICsgbGVuZ3RoOwotICAgIGlmIChMSUtFTFkgKHByaXYtPnJlcXVlc3Rl
ZFBvc2l0aW9uID09IHByaXYtPnJlYWRQb3NpdGlvbikpCi0gICAgICAgIHByaXYtPnJlcXVlc3Rl
ZFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0gICAgcHJpdi0+cmVhZFBvc2l0aW9uID0gbmV3UG9z
aXRpb247Ci0KLSAgICB1aW50NjRfdCBuZXdTaXplID0gMDsKLSAgICBpZiAocHJpdi0+aGF2ZVNp
emUgJiYgKG5ld1Bvc2l0aW9uID4gcHJpdi0+c2l6ZSkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJHb3QgcG9zaXRpb24gcHJldmlvdXMgZXN0aW1hdGVkIGNvbnRlbnQgc2l6ZSAo
JSIgR19HSU5UNjRfRk9STUFUICIgPiAlIiBHX0dJTlQ2NF9GT1JNQVQgIikiLCBuZXdQb3NpdGlv
biwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgIG5ld1NpemUgPSBuZXdQb3NpdGlvbjsKLSAgICB9Ci0K
LSAgICBpZiAobmV3U2l6ZSkgewotICAgICAgICBwcml2LT5zaXplID0gbmV3U2l6ZTsKLSAgICAg
ICAgYmFzZVNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IHByaXYtPnNpemU7Ci0gICAgICAgIGdzdF9l
bGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9tZXNzYWdlX25l
d19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1RfQ0FTVChzcmMpKSk7Ci0gICAgfQorICAgIG1l
bWJlcnMtPnJlYWRQb3NpdGlvbiArPSBsZW5ndGg7CisgICAgQVNTRVJUKCFtZW1iZXJzLT5oYXZl
U2l6ZSB8fCBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPD0gbWVtYmVycy0+c2l6ZSk7CiAKICAgICBn
c3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2Fn
ZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwKLSAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9uZXcoIndlYmtpdC1uZXR3b3JrLXN0YXRpc3RpY3MiLCAicmVhZC1wb3NpdGlvbiIsIEdfVFlQ
RV9VSU5UNjQsIHByaXYtPnJlYWRQb3NpdGlvbiwgInNpemUiLCBHX1RZUEVfVUlOVDY0LCBwcml2
LT5zaXplLCBudWxscHRyKSkpOworICAgICAgICBnc3Rfc3RydWN0dXJlX25ldygid2Via2l0LW5l
dHdvcmstc3RhdGlzdGljcyIsICJyZWFkLXBvc2l0aW9uIiwgR19UWVBFX1VJTlQ2NCwgbWVtYmVy
cy0+cmVhZFBvc2l0aW9uLCAic2l6ZSIsIEdfVFlQRV9VSU5UNjQsIG1lbWJlcnMtPnNpemUsIG51
bGxwdHIpKSk7CiAKICAgICBjaGVja1VwZGF0ZUJsb2Nrc2l6ZShsZW5ndGgpOwogCi0gICAgaWYg
KCFwcml2LT53YXNSZXNwb25zZVJlY2VpdmVkKQotICAgICAgICBwcml2LT53YXNSZXNwb25zZVJl
Y2VpdmVkID0gdHJ1ZTsKLSAgICBwcml2LT5yZXNwb25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsK
LQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJM
b2NrKTsKLSAgICAgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVmZmVyX25ld193cmFwcGVk
KGdfbWVtZHVwKGRhdGEsIGxlbmd0aCksIGxlbmd0aCk7Ci0gICAgICAgIGdzdF9hZGFwdGVyX3B1
c2gocHJpdi0+YWRhcHRlci5nZXQoKSwgYnVmZmVyKTsKLSAgICAgICAgc3RvcExvYWRlcklmTmVl
ZGVkKHNyYyk7Ci0gICAgICAgIHByaXYtPmFkYXB0ZXJDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0g
ICAgfQorICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21l
bWR1cChkYXRhLCBsZW5ndGgpLCBsZW5ndGgpOworICAgIGdzdF9hZGFwdGVyX3B1c2gobWVtYmVy
cy0+YWRhcHRlci5nZXQoKSwgYnVmZmVyKTsKKyAgICBzdG9wTG9hZGVySWZOZWVkZWQoc3JjLCBt
ZW1iZXJzKTsKKyAgICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0K
IAogdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNr
RmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMg
PSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1Ioc3Jj
LCBSRVNPVVJDRSwgUkVBRCwgKCIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRm
OCgpLmRhdGEoKSksIChudWxscHRyKSk7Ci0gICAgc3JjLT5wcml2LT5kb2VzSGF2ZUVPUyA9IHRy
dWU7Ci0gICAgd2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKKyAgICBE
YXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdy
YXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CisgICAgaWYgKG1lbWJlcnMtPnJl
cXVlc3ROdW1iZXIgIT0gbV9yZXF1ZXN0TnVtYmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBH
U1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBSRUFELCAoIlIldTogJXMiLCBtX3JlcXVl
c3ROdW1iZXIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksIChu
dWxscHRyKSk7CisgICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0cnVlOworICAgIG1lbWJlcnMt
PnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNl
U3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAg
RGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRX
cmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5y
ZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCFlcnJvci5pc0NhbmNlbGxhdGlvbigpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c3JjLCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIEZB
SUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSks
IChudWxscHRyKSk7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiUiV1OiBIYXZlIGZh
aWx1cmU6ICVzIiwgbV9yZXF1ZXN0TnVtYmVyLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNF
LCBGQUlMRUQsICgiUiV1OiAlcyIsIG1fcmVxdWVzdE51bWJlciwgZXJyb3IubG9jYWxpemVkRGVz
Y3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSwgKG51bGxwdHIpKTsKICAgICB9CiAKLSAgICBzcmMt
PnByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICBtZW1iZXJzLT5kb2VzSGF2ZUVPUyA9IHRy
dWU7CisgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9CiAKIHZv
aWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgV2ViS2l0
V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7Ci0gICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3Jj
UHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnBy
aXYtPmRhdGFNdXRleCk7CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIgIT0gbV9yZXF1
ZXN0TnVtYmVyKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocHJpdi0+aXNTZWVraW5nICYm
ICFwcml2LT5pc0ZsdXNoaW5nKQotICAgICAgICBwcml2LT5pc1NlZWtpbmcgPSBmYWxzZTsKKyAg
ICBtZW1iZXJzLT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgbWVtYmVycy0+cmVzcG9uc2VDb25k
aXRpb24ubm90aWZ5T25lKCk7CiB9CiAKIGJvb2wgd2ViS2l0U3JjV291bGRUYWludE9yaWdpbihX
ZWJLaXRXZWJTcmMqIHNyYywgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBX
ZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIERhdGFNdXRleDxXZWJL
aXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJz
KHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKIAotICAgIGF1dG8qIGNhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVu
dCo+KHByaXYtPnJlc291cmNlLT5jbGllbnQoKSk7CisgICAgYXV0byogY2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQgPSByZWludGVycHJldF9jYXN0PENhY2hlZFJlc291cmNlU3RyZWFtaW5n
Q2xpZW50Kj4obWVtYmVycy0+cmVzb3VyY2UtPmNsaWVudCgpKTsKICAgICBmb3IgKGF1dG8mIHJl
c3BvbnNlT3JpZ2luIDogY2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQtPnNlY3VyaXR5T3Jp
Z2lucygpKSB7CiAgICAgICAgIGlmICghb3JpZ2luLmNhbkFjY2VzcygqcmVzcG9uc2VPcmlnaW4p
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNl
R1N0cmVhbWVyLmgKaW5kZXggZjNkOThmYmVjOWI2NDIwNWJkZmI5ZTU0OTdhZTUwMjEzZTg0MTA4
MS4uYjZjNTJkYTJjZjMyOThhNmJmNzcyNTNkOTU4MWVkNjE0NGQyYThjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaApAQCAtMzksMTcgKzM5LDE1IEBAIEdfQkVH
SU5fREVDTFMKIAogI2RlZmluZSBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05B
TUUgICJ3ZWJraXQubWVkaWEtcGxheWVyIgogCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViU3Jj
ICAgICAgICBXZWJLaXRXZWJTcmM7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViU3JjQ2xhc3Mg
ICBXZWJLaXRXZWJTcmNDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRl
IFdlYktpdFdlYlNyY1ByaXZhdGU7CitzdHJ1Y3QgV2ViS2l0V2ViU3JjUHJpdmF0ZTsKIAotc3Ry
dWN0IF9XZWJLaXRXZWJTcmMgeworc3RydWN0IFdlYktpdFdlYlNyYyB7CiAgICAgR3N0UHVzaFNy
YyBwYXJlbnQ7CiAKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlICpwcml2OwogfTsKIAotc3RydWN0
IF9XZWJLaXRXZWJTcmNDbGFzcyB7CitzdHJ1Y3QgV2ViS2l0V2ViU3JjQ2xhc3MgewogICAgIEdz
dFB1c2hTcmNDbGFzcyBwYXJlbnRDbGFzczsKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlMDI2YjQ0NWE4MDZkYWM1
OWE0YjMzODFhM2Y5ZDE5Yzc0MGU2Zjk0Li5iZmViN2JmMzhkZTViZTA0YTA5MjYyYTQ5ZGEyZTA2
NzEwZDg0YTk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDQtMDkgIEFsaWNpYSBCb3lh
IEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIFJld29y
ayBXZWJLaXRXZWJTcmMgdGhyZWFkaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDk4MTEKKworICAgICAgICBBIHRlc3QgaW1wcm92ZWQgaXRzIHN0
YXR1cyBpbiBUZXN0RXhwZWN0YXRpb25zIGZyb20gdGhlIGNoYW5nZXMgbWFkZQorICAgICAgICBp
biB0aGlzIHBhdGNoLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6
CisKIDIwMjAtMDMtMjYgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGRlYnVnIG11bHRpbWVkaWEgZ2FyZGVuaW5nCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGQ2MjkwYTc3NjBkMTdl
NTBiODk2NzQyNGU1NzhlZDQ1MDk2YjIyYWQuLjMzMmJkNmVhYjgzOGJmYzc3YTc2ZGYxNmQzMWM4
M2Y4ZjFiZjhkODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
CkBAIC0xMjc4LDggKzEyNzgsNiBAQCB3ZWJraXQub3JnL2IvMjA2NjU2IGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFjYXB0dXJlLXN0cmVhbXMvTWVkaWFTdAogd2Via2l0Lm9y
Zy9iLzIwNjY1NiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhY2FwdHVyZS1z
dHJlYW1zL01lZGlhU3RyZWFtVHJhY2stZ2V0U2V0dGluZ3MuaHR0cHMuaHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzIwNjY1NiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21l
ZGlhY2FwdHVyZS1zdHJlYW1zL01lZGlhU3RyZWFtLU1lZGlhRWxlbWVudC1wcmVsb2FkLW5vbmUt
bWFudWFsLmh0dHBzLmh0bWwgWyBDcmFzaCBGYWlsdXJlIFBhc3MgXQogCi13ZWJraXQub3JnL2Iv
MjA2NjU3IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1i
ZWRkZWQtY29udGVudC90aGUtdmlkZW8tZWxlbWVudC9yZXNpemUtZHVyaW5nLXBsYXliYWNrLmh0
bWwgWyBGYWlsdXJlIF0KLQogIyBMRkMgKExheW91dEZvcm1hdGluZ0NvbnRleHQgaXMgZGlzYWJs
ZWQgYnkgZGVmYXVsdCkuCiBmYXN0L2xheW91dGZvcm1hdHRpbmdjb250ZXh0LyBbIFNraXAgXQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396541</attachid>
            <date>2020-04-15 09:02:37 -0700</date>
            <delta_ts>2020-04-24 06:26:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210284-20200415180235.patch</filename>
            <type>text/plain</type>
            <size>70534</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4OTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTc0ZmI3ZTFiNDhiNTQ3
YjMzZTM4ZjZmMGY5MDE0M2E1NzJjZjM4OS4uNmZkNzVkNTU3ZmFhYTg0NGY2NDk0MWE2MGE5OTlm
ZTdjYzNiYWU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA0LTA5ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBSZXdvcmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0V2ViU3JjIGFzIGl0IGlzIGluIG1hc3RlciBo
YXMgYSBudW1iZXIgb2YgcmFjZSBjb25kaXRpb25zCisgICAgICAgIGxlYWRpbmcgdG8gb2NjYXNp
b25hbCBzdGFydmF0aW9uIChkdWUgdG8gY2FuY2VsbGluZyB0aGUgd3JvbmcgcmVxdWVzdCkKKyAg
ICAgICAgb3IgZGF0YSBjb3JydXB0aW9uIChkdWUgdG8gcHVzaGluZyBkYXRhIGZyb20gYSBjYW5j
ZWxsZWQgcmVxdWVzdCkuCisKKyAgICAgICAgVGhlIHRocmVhZGluZyBzaXR1YXRpb24gd2Fzbid0
IGVhc3kgdG8gZm9sbG93LCBhcyBpdCB3YXNuJ3QgY2xlYXIKKyAgICAgICAgYWNjZXNzIHRvIHdo
YXQgbWVtYmVycyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IHdoYXQgbXV0ZXgsIGluIHdoYXQKKyAg
ICAgICAgY2lyY3Vtc3RhbmNlcy4gQWxzbywgc29tZSBwYXJ0cyBvZiB0aGUgZGVzaWduIHdlcmUg
YWxzbyBpbnRyb2R1Y2luZworICAgICAgICBhZGRpY2lvbmFsIGNvbXBsZXhpdHksIHN1Y2ggYXMg
dGhlIGZpcnN0IHJlcXVlc3QgYmVpbmcgc2VudCBmcm9tIHRoZQorICAgICAgICBtYWluIHRocmVh
ZCB3aGVyZWFzIHRoZSByZXN0IHdlcmUgYmVpbmcgc2VudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhy
ZWFkCisgICAgICAgIG9yIGJhc2VzcmMgYXN5bmMgc3RhcnQuCisKKyAgICAgICAgSW4gcmVzcG9u
c2UsIHRoaXMgcGF0Y2ggcmV3b3JrcyBhbGwgdGhlIGxvY2tpbmcgaW4gV2ViS2l0V2ViU3JjIHRv
IHVzZQorICAgICAgICBXVEY6OkRhdGFNdXRleC4gVGhpcyBlbnN1cmVzIGFsbCBhY2Nlc3NlcyB0
byBpdHMgKG5vdyBleHBsaWNpdCkKKyAgICAgICAgcHJvdGVjdGVkIG1lbWJlcnMgYXJlIGxvY2tl
ZC4gVGhlIHR3byBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVzCisgICAgICAgIGhhdmUg
YmVlbiBzaW1wbGlmaWVkIGludG8gb25lLCBhcyB0aGVyZSB3YXMgbm8gb2J2aW91cyBuZWVkIG9y
IGJlbmVmaXQKKyAgICAgICAgZm9yIHR3byBvZiBlYWNoIGluIHRoaXMgY2FzZS4KKworICAgICAg
ICBSZXF1ZXN0cyBoYXZlIGJlZW4gbnVtYmVyZWQsIHdoaWNoIGFsbG93cyB0byBzYWZlbHkgYW5k
IGF0b21pY2FsbHkKKyAgICAgICAgaWdub3JlIHJlc3VsdHMgZnJvbSBjYW5jZWxsZWQgcmVxdWVz
dHMsIGF2b2lkaW5nIGRhdGEgY29ycnVwdGlvbgorICAgICAgICByYWNlcywgYW5kIG1ha2VzIGZv
bGxvd2luZyB0aGVtIGluIGRlYnVnIGxvZ3MgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgVGhlIGNv
bmRpdGlvbnMgZm9yIG1ha2luZyBhbmQgY2FuY2VsbGluZyByZXF1ZXN0cyBoYXZlIGJlZW4gc2lt
cGxpZmllZAorICAgICAgICB0byBhIHNpbXBsZXIgYW5kIHNhZmVyIG1vZGVsOiBUaGVyZSBpcyBh
dCBtb3N0IG9ubHkgb25lIGFjdGl2ZSByZXF1ZXN0CisgICAgICAgIGF0IGFueXRpbWUsIGZsdXNo
ZXMgY2FuY2VsIHRoZSByZXF1ZXN0LCBhbmQgdGhlIGZpcnN0IGNyZWF0ZSgpIGNhbGwKKyAgICAg
ICAgYWx3YXlzIG1ha2VzIHRoZSBuZXcgcmVxdWVzdCAoYm90aCBhdCBzdGFydHVwIGFuZCBhZnRl
ciBhIGZsdXNoKS4KKyAgICAgICAgRGVidWcgYXNzZXJ0cyBhbmQgbm90ZXMgYWJvdXQgdGhlIGZs
b3cgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgYmFzZXNyYworICAgICAgICBzZWVrcyBoYXZlIGJlZW4g
cHJvdmlkZWQuCisKKyAgICAgICAgQXMgdGhpcyBlZmZvcnQgbmVlZGVkIGEgcmV2aWV3IG9mIHRo
ZSBlbnRpcmUgV2ViS2l0V2ViU3JjLCBjbGVhbnVwcywKKyAgICAgICAgY29ycmVjdGlvbnMgYW5k
IGRvY3VtZW50YXRpb24gY29tbWVudHMgaGF2ZSBiZWVuIHByb3ZpZGVkIHdoZXJlCisgICAgICAg
IGFwcHJvcHJpYXRlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB2aXNpYmxl
IGJlaGF2aW9yIGNoYW5nZXMsIGp1c3Qgc3RhYmlsaXR5CisgICAgICAgIGltcHJvdmVtZW50cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJLaXRXZWJTcmNQcml2YXRlOjp+V2ViS2l0V2Vi
U3JjUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KToKKyAgICAg
ICAgKHdlYmtpdFdlYlNyY1Jlc2V0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NvbnN0cnVjdGVk
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdl
YlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldENvbnRleHQpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjU2VuZEV2ZW50KToKKyAgICAgICAgKHJlc3RhcnRMb2FkZXJJZk5l
ZWRlZCk6CisgICAgICAgIChzdG9wTG9hZGVySWZOZWVkZWQpOgorICAgICAgICAod2ViS2l0V2Vi
U3JjQ3JlYXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY01ha2VSZXF1ZXN0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAg
ICAod2ViS2l0V2ViU3JjR2V0U2l6ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNJc1NlZWthYmxl
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0RvU2Vlayk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNR
dWVyeSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNVbkxvY2spOgorICAgICAgICAod2ViS2l0V2Vi
U3JjVW5Mb2NrU3RvcCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAod2ViS2l0U3JjUGFzc2VkQ09S
U0FjY2Vzc0NoZWNrKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUpOgorICAgICAgICAoQ2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZCk6CisgICAgICAgIChDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKToKKyAgICAg
ICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAg
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
d2ViS2l0U3JjV291bGRUYWludE9yaWdpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oOgorCiAyMDIwLTA0LTA3ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVy
XSBMb2cgYSB3YXJuaW5nIGlmIHBsYXliaW4gaXMgbm90IGZvdW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3Ry
ZWFtZXIuaAppbmRleCBkOTQwZjhjYTBmOTUwZmY0MjQzZmU0NTYyOTRjYmYzZTQ4NTJkMzRlLi4x
OTUwOWZlMWZkZjdjNjc0NzdiYjlhOGJiNjdiYmNiYmYxZTA1ZWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CiAKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgV2ViS2l0VmlkZW9TaW5rOwot
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyYyBXZWJLaXRXZWJTcmM7CitzdHJ1Y3QgV2ViS2l0
V2ViU3JjOwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHR5cGVkZWYgc3RydWN0IF9Hc3RHTERp
c3BsYXkgR3N0R0xEaXNwbGF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVh
bWVyLmNwcAppbmRleCBlOWZlYjIxMDBhN2VmNWY1YjEwYjg2M2E1NzU2ZDcwNGMzN2M1NTJhLi5h
ZWE1ZTYyYzQ2ZjZkMzViYjI3OGI5ODE3YjJlZjU3ZWYzNWM4Yzg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9l
Z2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRk
LgotICogIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICogIENvcHlyaWdodCAoQykg
MjAxOSwgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsNyArMjUs
NiBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRl
ck5hbWVzLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZE5vdGlmaWVyLmgiCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJQb2xpY3lDaGVja2VyLmgiCkBAIC0zNCwxMSArMzMsMTQgQEAKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFNdXRleC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5
cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwordXNpbmcgV1RGOjpEYXRhTXV0ZXg7CiAKIC8vIE5ldmVyIHBhdXNlIGRvd25sb2Fk
IG9mIG1lZGlhIHJlc291cmNlcyBzbWFsbGVyIHRoYW4gMk1pQi4KICNkZWZpbmUgU01BTExfTUVE
SUFfUkVTT1VSQ0VfTUFYX1NJWkUgMiAqIDEwMjQgKiAxMDI0CkBAIC01NSw3ICs1Nyw3IEBAIGNs
YXNzIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50IGZpbmFsIDogcHVibGljIFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZUNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQpOwogcHVi
bGljOgotICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyosIFJl
c291cmNlUmVxdWVzdCYmKTsKKyAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJL
aXRXZWJTcmMqLCBSZXNvdXJjZVJlcXVlc3QmJiwgdW5zaWduZWQgcmVxdWVzdE51bWJlcik7CiAg
ICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoKTsKIAogICAgIGNvbnN0
IEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4mIHNlY3VyaXR5T3JpZ2lu
cygpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luczsgfQpAQCAtODAsNzMgKzgyLDc5IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBzX3JlZHVjZUJsb2Nrc2l6ZUZhY3RvciB7
IDAuNSB9OwogICAgIGludCBtX3JlZHVjZUJsb2Nrc2l6ZUNvdW50IHsgMCB9OwogICAgIGludCBt
X2luY3JlYXNlQmxvY2tzaXplQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9yZXF1ZXN0TnVt
YmVyOwogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NyYzsKICAgICBSZXNvdXJjZVJlcXVl
c3QgbV9yZXF1ZXN0OwogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
Pj4gbV9vcmlnaW5zOwogfTsKIAotZW51bSBNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uIHsK
LSAgICBTdGFydCA9IDEgPDwgMCwKLSAgICBTdG9wID0gMSA8PCAxLAotICAgIERpc3Bvc2UgPSAx
IDw8IDIsCi19OwotCi1zdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewotICAgIH5fV2ViS2l0
V2ViU3JjUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBpZiAobm90aWZpZXIgJiYgbm90aWZpZXIt
PmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbm90aWZpZXItPm5vdGlmeUFuZFdhaXQoTWFpblRo
cmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6RGlzcG9zZSwgWyZdIHsKLSAgICAgICAgICAgICAgICBp
ZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogY2xpZW50ID0gc3RhdGlj
X2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQqPihyZXNvdXJjZS0+Y2xpZW50KCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQotICAgICAgICAgICAgICAgICAgICAg
ICAgY2xpZW50LT5zZXRTb3VyY2VFbGVtZW50KG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAg
ICAgIHJlc291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGxvYWRlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIG5vdGlmaWVyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBub3RpZmllciA9IG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICB9CitzdHJ1Y3QgV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CisgICAg
Ly8gQ29uc3RhbnRzIGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb246CisgICAgdW5zaWdu
ZWQgbWluaW11bUJsb2Nrc2l6ZTsKIAorICAgIC8vIENvbmZpZ3VyYXRpb24gb2YgdGhlIGVsZW1l
bnQgKHByb3BlcnRpZXMgc2V0IGJ5IHRoZSB1c2VyIG9mIFdlYktpdFdlYlNyYyk6CisgICAgLy8g
VGhleSBjYW4gb25seSBjaGFuZ2Ugd2hlbiBzdGF0ZSA8IFBBVVNFRC4KICAgICBDU3RyaW5nIG9y
aWdpbmFsVVJJOwotICAgIENTdHJpbmcgcmVkaXJlY3RlZFVSSTsKICAgICBib29sIGtlZXBBbGl2
ZTsKICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZXh0cmFIZWFkZXJzOwogICAgIGJvb2wg
Y29tcHJlc3M7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gaHR0cE1ldGhvZDsKLSAgICBXZWJDb3Jl
OjpNZWRpYVBsYXllciogcGxheWVyOwotICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VM
b2FkZXI+IGxvYWRlcjsKLSAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlPiByZXNvdXJj
ZTsKLSAgICBSZWZQdHI8TWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWRTb3VyY2VOb3RpZmlj
YXRpb24+PiBub3RpZmllcjsKLSAgICBib29sIGRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2s7Ci0g
ICAgYm9vbCB3ZXJlSGVhZGVyc1JlY2VpdmVkOwotICAgIENvbmRpdGlvbiBoZWFkZXJzQ29uZGl0
aW9uOwotICAgIExvY2sgcmVzcG9uc2VMb2NrOwotICAgIGJvb2wgd2FzUmVzcG9uc2VSZWNlaXZl
ZDsKLSAgICBDb25kaXRpb24gcmVzcG9uc2VDb25kaXRpb247Ci0gICAgYm9vbCBkb2VzSGF2ZUVP
UzsKLSAgICBib29sIGlzRmx1c2hpbmcgeyBmYWxzZSB9OwotICAgIHVpbnQ2NF90IHJlYWRQb3Np
dGlvbjsKLSAgICB1aW50NjRfdCByZXF1ZXN0ZWRQb3NpdGlvbjsKLSAgICB1aW50NjRfdCBzdG9w
UG9zaXRpb247Ci0gICAgYm9vbCBpc0R1cmF0aW9uU2V0OwotICAgIGJvb2wgaGF2ZVNpemU7Ci0g
ICAgdWludDY0X3Qgc2l6ZTsKLSAgICBib29sIGlzU2Vla2FibGU7Ci0gICAgYm9vbCBpc1NlZWtp
bmc7Ci0gICAgYm9vbCB3YXNTZWVraW5nIHsgZmFsc2UgfTsKLSAgICB1bnNpZ25lZCBtaW5pbXVt
QmxvY2tzaXplOwotICAgIExvY2sgYWRhcHRlckxvY2s7Ci0gICAgQ29uZGl0aW9uIGFkYXB0ZXJD
b25kaXRpb247Ci0gICAgYm9vbCBpc0Rvd25sb2FkU3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBH
UmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7Ci0gICAgR1JlZlB0cjxHc3RFdmVudD4gaHR0cEhl
YWRlcnNFdmVudDsKLSAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaHR0cEhlYWRlcnM7Ci0g
ICAgV2FsbFRpbWUgZG93bmxvYWRTdGFydFRpbWUgeyBXYWxsVGltZTo6bmFuKCkgfTsKLSAgICB1
aW50NjRfdCB0b3RhbERvd25sb2FkZWRCeXRlcyB7IDAgfTsKKworICAgIHN0cnVjdCBTdHJlYW1p
bmdNZW1iZXJzIHsKKyAgICAgICAgflN0cmVhbWluZ01lbWJlcnMoKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBCeSB0aGUgdGltZSB3ZSdyZSBkZXN0cm95aW5nIFdlYktpdFdlYlNyY1ByaXZh
dGUgdW5Mb2NrKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZXJlZm9yZSByZXNvdXJj
ZQorICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFyZWQuCisgICAg
ICAgICAgICBBU1NFUlQoIXJlc291cmNlKTsKKyAgICAgICAgICAgIC8vIFJlc291cmNlTG9hZGVy
IGlzIG5vdCB0aHJlYWQtc2FmZS4gSXQncyBub3QgZXZlbiBUaHJlYWRTYWZlUmVmQ291bnRlZC4g
VGhlcmVmb3JlLCB0byBiZSBzYWZlLCB3ZSB3YW50IHRoZQorICAgICAgICAgICAgLy8gdW5yZWYg
dG8gaGFwcGVuIGluIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgIGlmIChsb2FkZXIpCisg
ICAgICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtsb2FkZXIgPSBXVEZNb3Zl
KGxvYWRlcildIHsgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQcm9wZXJ0aWVzIGluaXRp
YWxseSBlbXB0eSwgYnV0IHNldCBvbmNlIHRoZSBmaXJzdCBIVFRQIHJlc3BvbnNlIGFycml2ZXM6
CisgICAgICAgIGJvb2wgd2FzUmVzcG9uc2VSZWNlaXZlZDsKKyAgICAgICAgQ1N0cmluZyByZWRp
cmVjdGVkVVJJOworICAgICAgICBib29sIGRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2s7CisgICAg
ICAgIGJvb2wgaGF2ZVNpemU7CisgICAgICAgIHVpbnQ2NF90IHNpemU7CisgICAgICAgIGJvb2wg
aXNTZWVrYWJsZTsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBwZW5kaW5nQ2FwczsKKyAgICAg
ICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBwZW5kaW5nSHR0cEhlYWRlcnNNZXNzYWdlOyAvLyBTZXQg
ZnJvbSBNVCwgc2VudCBmcm9tIGNyZWF0ZSgpLgorICAgICAgICBHUmVmUHRyPEdzdEV2ZW50PiBw
ZW5kaW5nSHR0cEhlYWRlcnNFdmVudDsgLy8gU2V0IGZyb20gTVQsIHNlbnQgZnJvbSBjcmVhdGUo
KS4KKworICAgICAgICAvLyBQcm9wZXJ0aWVzIHVwZGF0ZWQgd2l0aCBldmVyeSBkb3dubG9hZGVk
IGRhdGEgYmxvY2s6CisgICAgICAgIFdhbGxUaW1lIGRvd25sb2FkU3RhcnRUaW1lIHsgV2FsbFRp
bWU6Om5hbigpIH07CisgICAgICAgIHVpbnQ2NF90IHRvdGFsRG93bmxvYWRlZEJ5dGVzIHsgMCB9
OworICAgICAgICBib29sIGRvZXNIYXZlRU9TOyAvLyBTZXQgYm90aCB3aGVuIHdlIHJlYWNoIHN0
b3BQb3NpdGlvbiBhbmQgb24gZXJyb3JzIChpbmNsdWRpbmcgb24gcmVzcG9uc2VSZWNlaXZlZCku
CisgICAgICAgIGJvb2wgaXNEb3dubG9hZFN1c3BlbmRlZCB7IGZhbHNlIH07IC8vIFNldCB0byB0
cnVlIGZyb20gdGhlIG5ldHdvcmsgaGFuZGxlciB3aGVuIHRoZSBoaWdoIHdhdGVyIGxldmVsIGlz
IHJlYWNoZWQuCisKKyAgICAgICAgLy8gT2J0YWluZWQgYnkgbWVhbnMgb2YgR3N0Q29udGV4dCBx
dWVyaWVzIGJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IEhUVFAgcmVxdWVzdC4KKyAgICAgICAgLy8g
V2UgdXNlIGl0IGZvciBnZXR0aW5nIGFjY2VzcyB0byBXZWJLaXQgbmV0d29ya2luZyBvYmplY3Rz
OiB0aGUgUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyIGZhY3RvcnkgW2NyZWF0ZVJlc291cmNl
TG9hZGVyKCldCisgICAgICAgIC8vIGFuZCB0aGUgcGxheWVyIEhUVFAgcmVmZXJyZXIgc3RyaW5n
LgorICAgICAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOworCisgICAgICAgIC8vIFBy
b3BlcnRpZXMgdXNlZCBmb3IgR1N0cmVhbWVyIGRhdGEtZmxvdyBpbiBjcmVhdGUoKS4KKyAgICAg
ICAgYm9vbCBpc0ZsdXNoaW5nIHsgZmFsc2UgfTsKKyAgICAgICAgQ29uZGl0aW9uIHJlc3BvbnNl
Q29uZGl0aW9uOyAvLyBNdXN0IGJlIHNpZ25hbGVkIGFmdGVyIGFueSB1cGRhdGVzIG9uIEhUVFAg
cmVxdWVzdHMsIGFuZCB3aGVuIGZsdXNoaW5nLgorICAgICAgICBHUmVmUHRyPEdzdEFkYXB0ZXI+
IGFkYXB0ZXI7CisgICAgICAgIGJvb2wgaXNEdXJhdGlvblNldDsKKyAgICAgICAgdWludDY0X3Qg
cmVhZFBvc2l0aW9uOworCisgICAgICAgIC8vIFByb3BlcnRpZXMgb25seSBzZXQgZHVyaW5nIHNl
ZWsuCisgICAgICAgIC8vIGJhc2VzcmMgZW5zdXJlcyB0aGV5IGNhbid0IGNoYW5nZSBkdXJpbmcg
YSBjcmVhdGUoKSBjYWxsIGJ5IHRha2luZyB0aGUgU1RSRUFNSU5HX0xPQ0suCisgICAgICAgIC8v
IChBbiBpbml0aWFsIHNlZWsgaXMgYWxzbyBndWFyYW50ZWVkIGJ5IGJhc2VzcmMuKQorICAgICAg
ICB1bnNpZ25lZCByZXF1ZXN0TnVtYmVyIHsgMSB9OworICAgICAgICB1aW50NjRfdCByZXF1ZXN0
ZWRQb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgdWludDY0X3Qgc3RvcFBvc2l0aW9uIHsgVUlOVDY0
X01BWCB9OworCisgICAgICAgIGJvb2wgaXNSZXF1ZXN0UGVuZGluZyB7IHRydWUgfTsKKworICAg
ICAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyPiBsb2FkZXI7CisgICAgICAg
IFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IHJlc291cmNlOworICAgIH07CisgICAgRGF0
YU11dGV4PFN0cmVhbWluZ01lbWJlcnM+IGRhdGFNdXRleDsKIH07CiAKIGVudW0gewpAQCAtMTY5
LDkgKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1VyaUhhbmRsZXJJbml0KGdwb2lu
dGVyIGdJZmFjZSwgZ3BvaW50ZXIgaWZhY2VEYXRhKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1NldFByb3Bl
cnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlELCBjb25zdCBHVmFsdWUqLCBHUGFyYW1TcGVj
Kik7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQg
cHJvcGVydHlJRCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdl
UmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5n
ZSk7CiBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJLaXRXZWJTcmNDcmVhdGUoR3N0UHVzaFNyYyos
IEdzdEJ1ZmZlcioqKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChH
c3RCYXNlU3JjKiwgYm9vbCk7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChX
ZWJLaXRXZWJTcmMqLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVt
YmVycz46OkxvY2tlZFdyYXBwZXImKTsKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFy
dChHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChHc3RCYXNl
U3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShHc3RCYXNlU3JjKiwg
Z3VpbnQ2NCogc2l6ZSk7CkBAIC0xODEsOCArMTg4LDggQEAgc3RhdGljIGdib29sZWFuIHdlYktp
dFdlYlNyY1F1ZXJ5KEdzdEJhc2VTcmMqLCBHc3RRdWVyeSopOwogc3RhdGljIGdib29sZWFuIHdl
YktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2Vi
U3JjVW5Mb2NrU3RvcChHc3RCYXNlU3JjKik7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTZXRD
b250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7Ci1zdGF0aWMgdm9pZCByZXN0YXJ0TG9h
ZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKik7Ci1zdGF0aWMgdm9pZCBzdG9wTG9hZGVySWZOZWVk
ZWQoV2ViS2l0V2ViU3JjKik7CitzdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2Vi
S2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJl
cnM+OjpMb2NrZWRXcmFwcGVyJik7CitzdGF0aWMgdm9pZCBzdG9wTG9hZGVySWZOZWVkZWQoV2Vi
S2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJl
cnM+OjpMb2NrZWRXcmFwcGVyJik7CiAKICNkZWZpbmUgd2Via2l0X3dlYl9zcmNfcGFyZW50X2Ns
YXNzIHBhcmVudF9jbGFzcwogV0VCS0lUX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRXZWJT
cmMsIHdlYmtpdF93ZWJfc3JjLCBHU1RfVFlQRV9QVVNIX1NSQywKQEAgLTIzMCw3ICsyMzcsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNz
KiBrbGFzcykKICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibWV0aG9kIiwgIm1ldGhvZCIs
ICJUaGUgSFRUUCBtZXRob2QgdG8gdXNlIChkZWZhdWx0OiBHRVQpIiwKICAgICAgICAgICAgIG51
bGxwdHIsIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fU1RBVElDX1NUUklOR1MpKSk7CiAKLSAgICBla2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9E
RUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKTsKICAgICBla2xhc3MtPnNldF9j
b250ZXh0ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2ViU3JjU2V0Q29udGV4dCk7CiAKICAg
ICBHc3RCYXNlU3JjQ2xhc3MqIGJhc2VTcmNDbGFzcyA9IEdTVF9CQVNFX1NSQ19DTEFTUyhrbGFz
cyk7CkBAIC0yNDcsMTggKzI1Myw0MCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19jbGFz
c19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICBwdXNoU3JjQ2xhc3MtPmNyZWF0
ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NyZWF0ZSk7CiB9CiAKLXN0YXRpYyB2
b2lkIHdlYmtpdFdlYlNyY1Jlc2V0KFdlYktpdFdlYlNyYyogc3JjKQotewotICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CitlbnVtIGNsYXNzIFJlc2V0VHlwZSB7Cisg
ICAgU29mdCwKKyAgICBIYXJkCit9OwogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJTcmNSZXNldChX
ZWJLaXRXZWJTcmMqIHNyYywgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWlu
Z01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJiBtZW1iZXJzLCBSZXNldFR5cGUgcmVzZXRUeXBlKQor
ewogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzZXR0aW5nIGludGVybmFsIHN0YXRlIik7
Ci0gICAgcHJpdi0+aGF2ZVNpemUgPSBmYWxzZTsKLSAgICBwcml2LT53ZXJlSGVhZGVyc1JlY2Vp
dmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNTZWVrYWJsZSA9IGZhbHNlOwotICAgIHByaXYtPnJl
YWRQb3NpdGlvbiA9IDA7Ci0gICAgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gPSAwOwotICAgIHBy
aXYtPnN0b3BQb3NpdGlvbiA9IC0xOwotICAgIHByaXYtPnNpemUgPSAwOworICAgIGdzdF9hZGFw
dGVyX2NsZWFyKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOworICAgIG1lbWJlcnMtPmlzUmVxdWVz
dFBlbmRpbmcgPSB0cnVlOworCisgICAgLy8gUmVzZXQgcmVxdWVzdCBzdGF0ZS4gQW55IHByZXZp
b3VzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsbGVkIGF0IHRoaXMgcG9pbnQuCisgICAgbWVtYmVy
cy0+d2FzUmVzcG9uc2VSZWNlaXZlZCA9IGZhbHNlOworICAgIG1lbWJlcnMtPmRvZXNIYXZlRU9T
ID0gZmFsc2U7CisgICAgbWVtYmVycy0+ZG93bmxvYWRTdGFydFRpbWUgPSBXYWxsVGltZTo6bmFu
KCk7CisgICAgbWVtYmVycy0+dG90YWxEb3dubG9hZGVkQnl0ZXMgPSAwOyAvLyBSZXNldHRlZCBm
b3IgZWFjaCByZXF1ZXN0LCB1c2VkIHRvIGVzdGltYXRlIGRvd25sb2FkIHNwZWVkLgorICAgIG1l
bWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UgPSBudWxscHRyOworICAgIG1lbWJlcnMt
PnBlbmRpbmdIdHRwSGVhZGVyc0V2ZW50ID0gbnVsbHB0cjsKKworICAgIC8vIEFmdGVyIGEgZmx1
c2gsIHdlIGhhdmUgdG8gZW1pdCBhIHNlZ21lbnQgYWdhaW4uCisgICAgbWVtYmVycy0+aXNEdXJh
dGlvblNldCA9IGZhbHNlOworCisgICAgLy8gSGFyZCByZXNldCBpcyBkb25lIGR1cmluZyBpbml0
aWFsaXphdGlvbiBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuCisgICAgLy8gU29mdCByZXNldCBpcyBk
b25lIGR1cmluZyBmbHVzaGVzLiBJbiB0aGVzZSwgd2UgcHJlc2VydmUgdGhlIHNlZWsgdGFyZ2V0
LgorICAgIGlmIChyZXNldFR5cGUgPT0gUmVzZXRUeXBlOjpIYXJkKSB7CisgICAgICAgIG1lbWJl
cnMtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2sgPSBmYWxzZTsKKyAgICAgICAgbWVtYmVycy0+
cmVkaXJlY3RlZFVSSSA9IENTdHJpbmcoKTsKKyAgICAgICAgbWVtYmVycy0+aXNTZWVrYWJsZSA9
IGZhbHNlOworICAgICAgICBtZW1iZXJzLT5oYXZlU2l6ZSA9IGZhbHNlOworICAgICAgICBtZW1i
ZXJzLT5zaXplID0gMDsKKyAgICAgICAgbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb24gPSAwOwor
ICAgICAgICBtZW1iZXJzLT5zdG9wUG9zaXRpb24gPSBVSU5UNjRfTUFYOworICAgICAgICBtZW1i
ZXJzLT5yZWFkUG9zaXRpb24gPSBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbjsKKyAgICB9CiB9
CiAKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkK
QEAgLTI2OCwxMyArMjk2LDEzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0NvbnN0cnVjdGVk
KEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JD
KG9iamVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAot
ICAgIHByaXYtPm5vdGlmaWVyID0gTWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWRTb3VyY2VO
b3RpZmljYXRpb24+OjpjcmVhdGUoKTsKLSAgICBwcml2LT5hZGFwdGVyID0gYWRvcHRHUmVmKGdz
dF9hZGFwdGVyX25ldygpKTsKICAgICBwcml2LT5taW5pbXVtQmxvY2tzaXplID0gZ3N0X2Jhc2Vf
c3JjX2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKSk7CiAKLSAgICB3ZWJraXRX
ZWJTcmNSZXNldChzcmMpOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJl
YW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7Cisg
ICAgbWVtYmVycy0+YWRhcHRlciA9IGFkb3B0R1JlZihnc3RfYWRhcHRlcl9uZXcoKSk7CisgICAg
d2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNldFR5cGU6OkhhcmQpOworCiAgICAg
Z3N0X2Jhc2Vfc3JjX3NldF9hdXRvbWF0aWNfZW9zKEdTVF9CQVNFX1NSQ19DQVNUKHNyYyksIEZB
TFNFKTsKLSAgICBnc3RfYmFzZV9zcmNfc2V0X2FzeW5jKEdTVF9CQVNFX1NSQ19DQVNUKHNyYyks
IFRSVUUpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCkBAIC0zMTQsOSArMzQyLDExIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAg
Y2FzZSBQUk9QX0xPQ0FUSU9OOgogICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHBy
aXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9S
RVNPTFZFRF9MT0NBVElPTjoKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2
LT5yZWRpcmVjdGVkVVJJLmlzTnVsbCgpID8gcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpIDogcHJp
di0+cmVkaXJlY3RlZFVSSS5kYXRhKCkpOworICAgIGNhc2UgUFJPUF9SRVNPTFZFRF9MT0NBVElP
TjogeworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVt
YmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5kYXRhTXV0ZXgpOworICAgICAgICBn
X3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIG1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkg
PyBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkgOiBtZW1iZXJzLT5yZWRpcmVjdGVkVVJJLmRhdGEo
KSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFBST1BfS0VFUF9BTElWRToKICAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+a2VlcEFsaXZlKTsKICAgICAg
ICAgYnJlYWs7CkBAIC0zNDMsMjAyICszNzMsMTkzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y1NldENvbnRleHQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0Q29udGV4dCogY29udGV4dCkKICAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImNvbnRleHQgdHlwZTogJXMiLCBnc3RfY29udGV4dF9n
ZXRfY29udGV4dF90eXBlKGNvbnRleHQpKTsKICAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRl
eHRfdHlwZShjb250ZXh0LCBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUp
KSB7CiAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1
ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAicGxheWVyIik7Ci0gICAgICAg
IHByaXYtPnBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXIqPihnX3ZhbHVlX2dl
dF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRl
OjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFNdXRl
eCk7CisgICAgICAgIG1lbWJlcnMtPnBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5
ZXIqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CiAgICAgfQogICAgIEdTVF9FTEVNRU5U
X0NMQVNTKHBhcmVudF9jbGFzcyktPnNldF9jb250ZXh0KGVsZW1lbnQsIGNvbnRleHQpOwogfQog
Ci1zdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKiBzcmMpCitz
dGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKiBzcmMsIERhdGFN
dXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBl
ciYgbWVtYmVycykKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2
OwotCi0gICAgaWYgKCFwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkKSB7CisgICAgaWYgKCFtZW1i
ZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3Jj
LCAiZG93bmxvYWQgYWxyZWFkeSBhY3RpdmUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiaXMgZG93bmxvYWQgc3VzcGVuZGVkICVzLCBkb2Vz
IGhhdmUgRU9TICVzLCBkb2VzIGhhdmUgc2l6ZSAlcywgaXMgc2Vla2FibGUgJXMsIHNpemUgJSIg
R19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIChtaW4gJXUpIiwgYm9vbEZvclByaW50aW5nKHBy
aXYtPmlzRG93bmxvYWRTdXNwZW5kZWQpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+ZG9lc0hhdmVF
T1MpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aGF2ZVNpemUpCi0gICAgICAgICwgYm9vbEZvclBy
aW50aW5nKHByaXYtPmlzU2Vla2FibGUpLCBwcml2LT5zaXplLCBTTUFMTF9NRURJQV9SRVNPVVJD
RV9NQVhfU0laRSk7Ci0gICAgaWYgKHByaXYtPmRvZXNIYXZlRU9TIHx8ICFwcml2LT5oYXZlU2l6
ZSB8fCAhcHJpdi0+aXNTZWVrYWJsZSB8fCBwcml2LT5zaXplIDw9IFNNQUxMX01FRElBX1JFU09V
UkNFX01BWF9TSVpFKSB7CisgICAgICAgICIgKG1pbiAldSkiLCBib29sRm9yUHJpbnRpbmcobWVt
YmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5kb2Vz
SGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5oYXZlU2l6ZSkKKyAgICAgICAgLCBi
b29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNTZWVrYWJsZSksIG1lbWJlcnMtPnNpemUsIFNNQUxM
X01FRElBX1JFU09VUkNFX01BWF9TSVpFKTsKKyAgICBpZiAobWVtYmVycy0+ZG9lc0hhdmVFT1Mg
fHwgIW1lbWJlcnMtPmhhdmVTaXplIHx8ICFtZW1iZXJzLT5pc1NlZWthYmxlIHx8IG1lbWJlcnMt
PnNpemUgPD0gU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUpIHsKICAgICAgICAgR1NUX1RS
QUNFX09CSkVDVChzcmMsICJkb3dubG9hZCBjYW5ub3QgYmUgc3RvcHBlZC9yZXN0YXJ0ZWQiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInJlYWQg
cG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBzdGF0ZSAlcyIsIHByaXYtPnJlYWRQb3Np
dGlvbiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NUX1NUQVRFKHNyYykpKTsKLSAgICBp
ZiAoIXByaXYtPnJlYWRQb3NpdGlvbiB8fCBwcml2LT5yZWFkUG9zaXRpb24gPT0gcHJpdi0+c2l6
ZSB8fCBHU1RfU1RBVEUoc3JjKSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICBHU1RfVFJBQ0Vf
T0JKRUNUKHNyYywgInJlYWQgcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBzdGF0ZSAl
cyIsIG1lbWJlcnMtPnJlYWRQb3NpdGlvbiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NU
X1NUQVRFKHNyYykpKTsKKyAgICBpZiAoIW1lbWJlcnMtPnJlYWRQb3NpdGlvbiB8fCBtZW1iZXJz
LT5yZWFkUG9zaXRpb24gPT0gbWVtYmVycy0+c2l6ZSB8fCBHU1RfU1RBVEUoc3JjKSA8IEdTVF9T
VEFURV9QQVVTRUQpIHsKICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJjYW4ndCByZXN0
YXJ0IGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzaXplX3QgcXVl
dWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOwotICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSAlemQgKG1pbiAlMS4wZikiLCBxdWV1
ZVNpemUKLSAgICAgICAgLCBwcml2LT5zaXplICogSElHSF9RVUVVRV9GQUNUT1JfVEhSRVNIT0xE
ICogTE9XX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpOworICAgIHNpemVfdCBxdWV1ZVNpemUgPSBn
c3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSk7CisgICAgR1NUX1RS
QUNFX09CSkVDVChzcmMsICJxdWV1ZSBzaXplICV6dSAobWluICUxLjBmKSIsIHF1ZXVlU2l6ZQor
ICAgICAgICAsIG1lbWJlcnMtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQgKiBM
T1dfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CiAKLSAgICBpZiAocXVldWVTaXplID49IHByaXYt
PnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQgKiBMT1dfUVVFVUVfRkFDVE9SX1RI
UkVTSE9MRCkgeworICAgIGlmIChxdWV1ZVNpemUgPj0gbWVtYmVycy0+c2l6ZSAqIEhJR0hfUVVF
VUVfRkFDVE9SX1RIUkVTSE9MRCAqIExPV19RVUVVRV9GQUNUT1JfVEhSRVNIT0xEKSB7CiAgICAg
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSBhYm92ZSBsb3cgd2F0ZXJtYXJr
LCBub3QgcmVzdGFydGluZyBkb3dubG9hZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJyZXN0YXJ0aW5nIGRvd25sb2FkIik7Ci0gICAgcHJp
di0+aXNEb3dubG9hZFN1c3BlbmRlZCA9IGZhbHNlOwotICAgIHdlYktpdFdlYlNyY01ha2VSZXF1
ZXN0KEdTVF9CQVNFX1NSQ19DQVNUKHNyYyksIGZhbHNlKTsKKyAgICBtZW1iZXJzLT5pc0Rvd25s
b2FkU3VzcGVuZGVkID0gZmFsc2U7CisgICAgbWVtYmVycy0+cmVxdWVzdE51bWJlcisrOworICAg
IG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uID0gbWVtYmVycy0+cmVhZFBvc2l0aW9uOworICAg
IHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KHNyYywgbWVtYmVycyk7CiB9CiAKIAotc3RhdGljIHZv
aWQgc3RvcExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyogc3JjKQorc3RhdGljIHZvaWQgc3Rv
cExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyogc3JjLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3Jj
UHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImIG1lbWJlcnMpCiB7Ci0g
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgaWYgKHByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQpIHsKKyAg
ICBpZiAobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCkgewogICAgICAgICBHU1RfVFJBQ0Vf
T0JKRUNUKHNyYywgImRvd25sb2FkIGFscmVhZHkgc3VzcGVuZGVkIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImlzIGRvd25sb2FkIHN1c3Bl
bmRlZCAlcywgZG9lcyBoYXZlIHNpemUgJXMsIGlzIHNlZWthYmxlICVzLCBzaXplICUiIEdfR1VJ
TlQ2NF9GT1JNQVQgIiAobWluICV1KSIKLSAgICAgICAgLCBib29sRm9yUHJpbnRpbmcocHJpdi0+
aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQcmludGluZyhwcml2LT5oYXZlU2l6ZSksIGJv
b2xGb3JQcmludGluZyhwcml2LT5pc1NlZWthYmxlKSwgcHJpdi0+c2l6ZQorICAgICAgICAsIGJv
b2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSwgYm9vbEZvclByaW50
aW5nKG1lbWJlcnMtPmhhdmVTaXplKSwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vla2Fi
bGUpLCBtZW1iZXJzLT5zaXplCiAgICAgICAgICwgU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJ
WkUpOwotICAgIGlmICghcHJpdi0+aGF2ZVNpemUgfHwgIXByaXYtPmlzU2Vla2FibGUgfHwgcHJp
di0+c2l6ZSA8PSBTTUFMTF9NRURJQV9SRVNPVVJDRV9NQVhfU0laRSkgeworICAgIGlmICghbWVt
YmVycy0+aXNTZWVrYWJsZSB8fCBtZW1iZXJzLT5zaXplIDw9IFNNQUxMX01FRElBX1JFU09VUkNF
X01BWF9TSVpFKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG93bmxvYWQgY2Fu
bm90IGJlIHN0b3BwZWQvcmVzdGFydGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIu
Z2V0KCkpOwotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSAlemQgKG1heCAl
MS4wZikiLCBxdWV1ZVNpemUsIHByaXYtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hP
TEQpOwotICAgIGlmIChxdWV1ZVNpemUgPD0gcHJpdi0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFDVE9S
X1RIUkVTSE9MRCkgeworICAgIHNpemVfdCBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFi
bGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSk7CisgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJx
dWV1ZSBzaXplICV6dSAobWF4ICUxLjBmKSIsIHF1ZXVlU2l6ZSwgbWVtYmVycy0+c2l6ZSAqIEhJ
R0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CisgICAgaWYgKHF1ZXVlU2l6ZSA8PSBtZW1iZXJz
LT5zaXplICogSElHSF9RVUVVRV9GQUNUT1JfVEhSRVNIT0xEKSB7CiAgICAgICAgIEdTVF9UUkFD
RV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSB1bmRlciBoaWdoIHdhdGVybWFyaywgbm90IHN0b3Bw
aW5nIGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHU1RfREVCVUdf
T0JKRUNUKHNyYywgInN0b3BwaW5nIGRvd25sb2FkIik7Ci0gICAgcHJpdi0+aXNEb3dubG9hZFN1
c3BlbmRlZCA9IHRydWU7Ci0gICAgcHJpdi0+cmVzb3VyY2UtPnN0b3AoKTsKKyAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlIldTogc3RvcHBpbmcgZG93bmxvYWQiLCBtZW1iZXJzLT5yZXF1ZXN0
TnVtYmVyKTsKKyAgICBtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkID0gdHJ1ZTsKKyAgICBt
ZW1iZXJzLT5yZXNvdXJjZS0+c3RvcCgpOwogfQogCiBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJL
aXRXZWJTcmNDcmVhdGUoR3N0UHVzaFNyYyogcHVzaFNyYywgR3N0QnVmZmVyKiogYnVmZmVyKQog
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIEdzdEJhc2VTcmMqIGJhc2VTcmMg
PSBHU1RfQkFTRV9TUkNfQ0FTVChwdXNoU3JjKTsKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdF
QktJVF9XRUJfU1JDKGJhc2VTcmMpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01l
bWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMocHJpdi0+ZGF0YU11dGV4KTsKKworICAgIC8v
IFdlIG5lZWQgbWVtYmVycy0+cGxheWVyIHRvIG1ha2UgcmVxdWVzdHMuIFRoZXJlIGFyZSB0d28g
bWVjaGFuaXNtcyBmb3IgdGhpcy4KKyAgICAvLworICAgIC8vIDEpIHdlYktpdFdlYlNyY1NldE1l
ZGlhUGxheWVyKCkgaXMgY2FsbGVkIGJ5IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBieSBt
ZWFucyBvZiBob29raW5nIHBsYXliaW4ncworICAgIC8vICAgICJzb3VyY2Utc2V0dXAiIGV2ZW50
LiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgYWRkaXRpb25hbCBXZWJLaXRXZWJTcmMgZWxlbWVudHMg
Y3JlYXRlZCBieSBhZGFwdGl2ZWRlbXV4LgorICAgIC8vCisgICAgLy8gMikgQSBHc3RDb250ZXh0
IHF1ZXJ5IG1hZGUgaGVyZS4gQmVjYXVzZSBvZiBhIGJ1ZywgdGhpcyBvbmx5IHdvcmtzIGluIEdT
dHJlYW1lciA+PSAxLjEyLgorICAgIC8vCisgICAgLy8gQXMgYSBjb21wYXRpYmlsaXR5IHdvcmth
cm91bmQsIHRoZSBodHRwOiBVUkkgcHJvdG9jb2wgaXMgb25seSByZWdpc3RlcmVkIGZvciBnc3Q+
PTEuMTI7IG90aGVyd2lzZSB1c2luZworICAgIC8vIHdlYmtpdCtodHRwOiwgd2hpY2ggaXMgdXNl
ZCBieSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgYnV0IG5vdCBieSBhZGFwdGl2ZWRlbXV4
J3MgYWRkaXRpb25hbCBzb3VyY2UKKyAgICAvLyBlbGVtZW50cywgdGhlcmVmb3JlIHVzaW5nIHNv
dXBodHRwc3JjIGluc3RlYWQgYW5kIG5vdCByb3V0aW5nIHRyYWZmaWMgdGhyb3VnaCB0aGUgTmV0
d29ya1Byb2Nlc3MuCisgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMiwgMCkgJiYg
IW1lbWJlcnMtPnBsYXllcikgeworICAgICAgICBtZW1iZXJzLnJ1blVubG9ja2VkKFtzcmMsIGJh
c2VTcmNdKCkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdS
ZWYoZ3N0X3F1ZXJ5X25ld19jb250ZXh0KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZ
UEVfTkFNRSkpOworICAgICAgICAgICAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeShHU1RfQkFTRV9T
UkNfUEFEKGJhc2VTcmMpLCBxdWVyeS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBHc3RDb250
ZXh0KiBjb250ZXh0OworCisgICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHQo
cXVlcnkuZ2V0KCksICZjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRf
Y29udGV4dChHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGNvbnRleHQpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5U
X0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dChHU1RfT0JKRUNUX0NBU1Qo
c3JjKSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FKSk7CisgICAgICAg
IH0pOworICAgICAgICBpZiAobWVtYmVycy0+aXNGbHVzaGluZykKKyAgICAgICAgICAgIHJldHVy
biBHU1RfRkxPV19GTFVTSElORzsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobWVtYmVycy0+
cGxheWVyKTsKIAotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicmVhZFBvc2l0aW9uID0gJSIg
R19HVUlOVDY0X0ZPUk1BVCAiIHJlcXVlc3RlZFBvc2l0aW9uID0gJSIgR19HVUlOVDY0X0ZPUk1B
VCwgcHJpdi0+cmVhZFBvc2l0aW9uLCBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbik7CisgICAgR1NU
X1RSQUNFX09CSkVDVChzcmMsICJyZWFkUG9zaXRpb24gPSAlIiBHX0dVSU5UNjRfRk9STUFUICIg
cmVxdWVzdGVkUG9zaXRpb24gPSAlIiBHX0dVSU5UNjRfRk9STUFULCBtZW1iZXJzLT5yZWFkUG9z
aXRpb24sIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uKTsKIAotICAgIGlmIChwcml2LT5yZXF1
ZXN0ZWRQb3NpdGlvbiAhPSBwcml2LT5yZWFkUG9zaXRpb24pIHsKLSAgICAgICAgewotICAgICAg
ICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2NrKTsKLSAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZywgZmx1c2hpbmcgYWRhcHRlciIp
OwotICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIocHJpdi0+YWRhcHRlci5nZXQoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdWludDY0X3QgcmVxdWVzdGVkUG9zaXRpb24gPSBwcml2LT5yZXF1
ZXN0ZWRQb3NpdGlvbjsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChiYXNlU3JjKTsKLSAgICAg
ICAgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gPSByZXF1ZXN0ZWRQb3NpdGlvbjsKLSAgICAgICAg
Ly8gRG8gbm90IG5vdGlmeSBhc3luYy1jb21wbGV0aW9uLCBpbiBzZWVraW5nIGZsb3dzLCB3ZSB3
aWxsCi0gICAgICAgIC8vIGJlIGNhbGxlZCBmcm9tIEdzdEJhc2VTcmMncyBwZXJmb3JtX3NlZWsg
dmZ1bmMsIHdoaWNoIGhvbGRzCi0gICAgICAgIC8vIGEgc3RyZWFtaW5nIGxvY2sgaW4gb3VyIGZy
YW1lLiBIZW5jZSwgd2Ugd291bGQgZGVhZGxvY2sKLSAgICAgICAgLy8gdHJ5aW5nIHRvIG5vdGlm
eSBhc3luYyBjb21wbGV0aW9uLCBzaW5jZSB0aGF0IGFsc28gcmVxdWlyZXMKLSAgICAgICAgLy8g
dGhlIHN0cmVhbWluZyBsb2NrLgotICAgICAgICB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChiYXNl
U3JjLCBmYWxzZSk7CisgICAgaWYgKG1lbWJlcnMtPmlzUmVxdWVzdFBlbmRpbmcpIHsKKyAgICAg
ICAgbWVtYmVycy0+aXNSZXF1ZXN0UGVuZGluZyA9IGZhbHNlOworICAgICAgICB3ZWJLaXRXZWJT
cmNNYWtlUmVxdWVzdChzcmMsIG1lbWJlcnMpOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIocHJpdi0+cmVzcG9uc2VMb2NrKTsKLSAgICAgICAgcHJpdi0+cmVzcG9u
c2VDb25kaXRpb24ud2FpdChwcml2LT5yZXNwb25zZUxvY2ssIFtwcml2XSAoKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gcHJpdi0+d2FzUmVzcG9uc2VSZWNlaXZlZCB8fCBwcml2LT5pc0ZsdXNoaW5n
OworICAgIC8vIFdhaXQgZm9yIHRoZSByZXNwb25zZSBoZWFkZXJzLgorICAgIG1lbWJlcnMtPnJl
c3BvbnNlQ29uZGl0aW9uLndhaXQobWVtYmVycy5tdXRleCgpLCBbJl0gKCkgeworICAgICAgICBy
ZXR1cm4gbWVtYmVycy0+d2FzUmVzcG9uc2VSZWNlaXZlZCB8fCBtZW1iZXJzLT5pc0ZsdXNoaW5n
OworICAgIH0pOworCisgICAgaWYgKG1lbWJlcnMtPmlzRmx1c2hpbmcpCisgICAgICAgIHJldHVy
biBHU1RfRkxPV19GTFVTSElORzsKKworICAgIGlmIChtZW1iZXJzLT5wZW5kaW5nQ2Fwcykgewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNldHRpbmcgY2FwczogJSIgR1NUX1BUUl9G
T1JNQVQsIG1lbWJlcnMtPnBlbmRpbmdDYXBzLmdldCgpKTsKKyAgICAgICAgbWVtYmVycy5ydW5V
bmxvY2tlZChbYmFzZVNyYywgY2FwcyA9IG1lbWJlcnMtPnBlbmRpbmdDYXBzLmxlYWtSZWYoKV0o
KSB7CisgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMoYmFzZVNyYywgY2Fwcyk7CiAg
ICAgICAgIH0pOworICAgICAgICBpZiAobWVtYmVycy0+aXNGbHVzaGluZykKKyAgICAgICAgICAg
IHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKICAgICB9CiAKKyAgICBpZiAobWVtYmVycy0+aGF2
ZVNpemUgJiYgIW1lbWJlcnMtPmlzRHVyYXRpb25TZXQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJTZXR0aW5nIGR1cmF0aW9uIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG1lbWJl
cnMtPnNpemUpOworICAgICAgICBiYXNlU3JjLT5zZWdtZW50LmR1cmF0aW9uID0gbWVtYmVycy0+
c2l6ZTsKKyAgICAgICAgbWVtYmVycy0+aXNEdXJhdGlvblNldCA9IHRydWU7CisgICAgICAgIGdz
dF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9tZXNzYWdl
X25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1RfQ0FTVChzcmMpKSk7CisgICAgfQorCisg
ICAgaWYgKG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UpCisgICAgICAgIGdzdF9l
bGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzcmMpLCBtZW1iZXJzLT5wZW5kaW5nSHR0
cEhlYWRlcnNNZXNzYWdlLmxlYWtSZWYoKSk7CisgICAgaWYgKG1lbWJlcnMtPnBlbmRpbmdIdHRw
SGVhZGVyc0V2ZW50KQorICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQoR1NUX0JBU0VfU1JDX1BB
RChiYXNlU3JjKSwgbWVtYmVycy0+cGVuZGluZ0h0dHBIZWFkZXJzRXZlbnQubGVha1JlZigpKTsK
KworICAgIHJlc3RhcnRMb2FkZXJJZk5lZWRlZChzcmMsIG1lbWJlcnMpOworCiAgICAgLy8gV2Ug
ZG9uJ3QgdXNlIHRoZSBHc3RBZGFwdGVyIG1ldGhvZHMgbWFya2VkIGFzIGZhc3QgYW55bW9yZSBi
ZWNhdXNlIHNvbWV0aW1lcyBpdCB3YXMgc2xvd2VyLiBUaGUgcmVhc29uIHdoeSB0aGlzIHdhcyBz
bG93ZXIgaXMgdGhhdCB3ZSBjYW4gYmUKICAgICAvLyB3YWl0aW5nIGZvciBtb3JlICJmYXN0IiAo
dGhhdCBjb3VsZCBiZSByZXRyaWV2ZWQgd2l0aCB0aGUgX2Zhc3QgQVBJKSBidWZmZXJzIHRvIGJl
IGF2YWlsYWJsZSBldmVuIGluIGNhc2VzIHdoZXJlIHRoZSBxdWV1ZSBpcyBub3QgZW1wdHkuIFRo
ZXNlCiAgICAgLy8gb3RoZXIgYnVmZmVycyBjYW4gYmUgcmV0cmlldmVkIHdpdGggdGhlICJub24g
X2Zhc3QiIEFQSS4KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImZsdXNoaW5nOiAlcywgZG9l
c0hhdmVFT1M6ICVzLCBpc0Rvd25sb2FkU3VzcGVuZGVkOiAlcyIsIGJvb2xGb3JQcmludGluZyhw
cml2LT5pc0ZsdXNoaW5nKQotICAgICAgICAsIGJvb2xGb3JQcmludGluZyhwcml2LT5kb2VzSGF2
ZUVPUyksIGJvb2xGb3JQcmludGluZyhwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkKSk7Ci0KLSAg
ICBpZiAocHJpdi0+ZG9lc0hhdmVFT1MpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJFT1MiKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgICB9CisgICAgR1NUX1RS
QUNFX09CSkVDVChzcmMsICJkb2VzSGF2ZUVPUzogJXMsIGlzRG93bmxvYWRTdXNwZW5kZWQ6ICVz
IiwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmRvZXNIYXZlRU9TKSwgYm9vbEZvclByaW50aW5n
KG1lbWJlcnMtPmlzRG93bmxvYWRTdXNwZW5kZWQpKTsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBn
c3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZShiYXNlU3JjKTsKLSAgICBzaXplX3QgcXVldWVTaXpl
OwotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJM
b2NrKTsKLSAgICAgICAgdW5zaWduZWQgcmV0cmllcyA9IDA7Ci0gICAgICAgIHF1ZXVlU2l6ZSA9
IGdzdF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFwdGVyLmdldCgpKTsKLSAgICAgICAgR1NU
X1RSQUNFX09CSkVDVChzcmMsICJhdmFpbGFibGUgYnl0ZXMgJSIgR19HU0laRV9GT1JNQVQgIiwg
YmxvY2sgc2l6ZSAldSIsIHF1ZXVlU2l6ZSwgc2l6ZSk7Ci0gICAgICAgIHdoaWxlICghcXVldWVT
aXplICYmICFwcml2LT5pc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHNyYywgImxldCdzIHRyeSB0byByZXN0YXJ0IHRoZSBkb3dubG9hZCBpZiBwb3NzaWJsZSBhbmQg
d2FpdCBhIGJpdCBpZiBubyBkYXRhIik7Ci0gICAgICAgICAgICBwcml2LT5hZGFwdGVyQ29uZGl0
aW9uLndhaXRGb3IocHJpdi0+YWRhcHRlckxvY2ssIDFfcywgWyZdIHsKLSAgICAgICAgICAgICAg
ICByZXN0YXJ0TG9hZGVySWZOZWVkZWQoc3JjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJp
di0+aXNGbHVzaGluZyB8fCAoIXByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQgJiYgZ3N0X2FkYXB0
ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIu
Z2V0KCkpOwotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJhdmFpbGFibGUgJSIg
R19HU0laRV9GT1JNQVQsIHF1ZXVlU2l6ZSk7Ci0gICAgICAgICAgICBpZiAocXVldWVTaXplIHx8
IHByaXYtPmlzRmx1c2hpbmcpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGRhdGEgb3Ig
d2UncmUgZmx1c2hpbmcuIFdlIGNhbiBicmVhayB0aGUgbG9vcCBoZXJlLgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQga2Vl
cCB3YWl0aW5nIGJ1dCB3ZSBjb3VsZCBiZSBpbiBFT1MuIExldCdzIGNoZWNrIHRoZSB0d28gcG9z
c2liaWxpdGllczoKLSAgICAgICAgICAgIC8vIDEuIFdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBm
aWxlIHdpdGggYSBrbm93biBzaXplLgotICAgICAgICAgICAgLy8gMi4gVGhlIGRvd25sb2FkIGlz
IG5vdCBzdXNwZW5kZWQgYW5kIG5vIG1vcmUgZGF0YSBhcmUgYXJyaXZpbmcuIFdlIGNhbm5vdCB3
YWl0IGZvcmV2ZXIsIDEweDFzIHNlZW1zIHNhZmUgYW5kIHNlbnNpYmxlLgotICAgICAgICAgICAg
aWYgKHByaXYtPmhhdmVTaXplICYmIHByaXYtPnJlYWRQb3NpdGlvbiA+PSBwcml2LT5zaXplKSB7
Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJXYWl0aW5nIGZvciBkYXRh
IGJleW9uZCB0aGUgZW5kLCBzaWduYWxsaW5nIEVPUyIpOwotICAgICAgICAgICAgICAgIHJldHVy
biBHU1RfRkxPV19FT1M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JK
RUNUKHNyYywgImlzIGRvd25sb2FkIHN1c3BlbmRlZD8gJXMsIG51bSByZXRyaWVzICV1IiwgYm9v
bEZvclByaW50aW5nKHByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQpLCByZXRyaWVzICsgMSk7Ci0g
ICAgICAgICAgICBpZiAoIXByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQgJiYgKytyZXRyaWVzID49
IDEwKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJBZGFwdGVyIHN0
aWxsIGVtcHR5IGFmdGVyIDEwcyBvZiB3YWl0aW5nLCBhc3N1bWluZyBFT1MiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHByaXYtPmlzRmx1c2hpbmcpIHsKLSAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJGbHVzaGluZyIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7
Ci0gICAgfQorICAgIHNpemVfdCBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVt
YmVycy0+YWRhcHRlci5nZXQoKSk7CisgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJhdmFpbGFi
bGUgYnl0ZXMgJSIgR19HU0laRV9GT1JNQVQgIiwgYmxvY2sgc2l6ZSAldSIsIHF1ZXVlU2l6ZSwg
c2l6ZSk7CisgICAgaWYgKCFxdWV1ZVNpemUpIHsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChz
cmMsICJsZXQncyB3YWl0IGZvciBkYXRhIG9yIEVPUyIpOworICAgICAgICBtZW1iZXJzLT5yZXNw
b25zZUNvbmRpdGlvbi53YWl0KG1lbWJlcnMubXV0ZXgoKSwgWyZdIHsKKyAgICAgICAgICAgIHJl
dHVybiBtZW1iZXJzLT5pc0ZsdXNoaW5nIHx8IGdzdF9hZGFwdGVyX2F2YWlsYWJsZShtZW1iZXJz
LT5hZGFwdGVyLmdldCgpKSB8fCBtZW1iZXJzLT5kb2VzSGF2ZUVPUzsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGlmIChtZW1iZXJzLT5pc0ZsdXNoaW5nKQorICAgICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX0ZMVVNISU5HOwogCi0gICAgaWYgKHByaXYtPmhhdmVTaXplICYmICFwcml2LT5pc0R1cmF0
aW9uU2V0KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0dGluZyBkdXJhdGlv
biB0byAlIiBHX0dVSU5UNjRfRk9STUFULCBwcml2LT5zaXplKTsKLSAgICAgICAgYmFzZVNyYy0+
c2VnbWVudC5kdXJhdGlvbiA9IHByaXYtPnNpemU7Ci0gICAgICAgIHByaXYtPmlzRHVyYXRpb25T
ZXQgPSB0cnVlOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRf
Q0FTVChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZChHU1RfT0JKRUNUX0NB
U1Qoc3JjKSkpOworICAgICAgICBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVt
YmVycy0+YWRhcHRlci5nZXQoKSk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZh
aWxhYmxlICUiIEdfR1NJWkVfRk9STUFULCBxdWV1ZVNpemUpOwogICAgIH0KIAotICAgIGlmIChw
cml2LT5odHRwSGVhZGVyc0V2ZW50KQotICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQoR1NUX0JB
U0VfU1JDX1BBRChiYXNlU3JjKSwgcHJpdi0+aHR0cEhlYWRlcnNFdmVudC5sZWFrUmVmKCkpOwot
Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGFkYXB0ZXJMb2NrZXIocHJpdi0+YWRhcHRlckxv
Y2spOwotICAgICAgICBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUocHJpdi0+YWRh
cHRlci5nZXQoKSk7CisgICAgaWYgKHF1ZXVlU2l6ZSkgewogICAgICAgICBpZiAocXVldWVTaXpl
IDwgc2l6ZSkgewogICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJEaWQgbm90IGdl
dCB0aGUgJXUgYmxvY2tzaXplIGJ5dGVzLCBsZXQncyBwdXNoIHRoZSAlIiBHX0dTSVpFX0ZPUk1B
VCAiIGJ5dGVzIHdlIGdvdCIsIHNpemUsIHF1ZXVlU2l6ZSk7CiAgICAgICAgICAgICBzaXplID0g
cXVldWVTaXplOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
c3JjLCAiVGFraW5nICV1IGJ5dGVzIGZyb20gYWRhcHRlciIsIHNpemUpOwotICAgICAgICBpZiAo
c2l6ZSkgewotICAgICAgICAgICAgKmJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKHBy
aXYtPmFkYXB0ZXIuZ2V0KCksIHNpemUpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoKmJ1
ZmZlcik7Ci0KLSAgICAgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUKCpidWZmZXIpID0gYmFzZVNy
Yy0+c2VnbWVudC5wb3NpdGlvbjsKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCgq
YnVmZmVyKSA9IEdTVF9CVUZGRVJfT0ZGU0VUKCpidWZmZXIpICsgc2l6ZTsKLSAgICAgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiQnVmZmVyIGJvdW5kcyBzZXQgdG8gJSIgR19HVUlOVDY0
X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQsIEdTVF9CVUZGRVJfT0ZGU0VUKCpidWZmZXIp
LCBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKmJ1ZmZlcikpOwotICAgICAgICAgICAgR1NUX1RSQUNF
X09CSkVDVChzcmMsICJkb2VzSGF2ZUVPUzogJXMsIHdhc1NlZWtpbmc6ICVzLCBzZWVraW5nOiAl
cywgYnVmZmVyIHNpemU6ICV1LCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFULCBib29sRm9yUHJp
bnRpbmcocHJpdi0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+d2FzU2Vla2lu
ZyksIGJvb2xGb3JQcmludGluZyhwcml2LT5pc1NlZWtpbmcpLCBzaXplLCBwcml2LT5zaXplKTsK
LSAgICAgICAgICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiBHU1RfQlVGRkVSX09GRlNFVF9FTkQo
KmJ1ZmZlcikgPj0gcHJpdi0+c2l6ZSkgewotICAgICAgICAgICAgICAgIGlmIChwcml2LT53YXNT
ZWVraW5nKQotICAgICAgICAgICAgICAgICAgICBwcml2LT53YXNTZWVraW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZiAocHJpdi0+aXNTZWVrYWJsZSkKLSAgICAgICAgICAgICAg
ICAgICAgcHJpdi0+ZG9lc0hhdmVFT1MgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChw
cml2LT53YXNTZWVraW5nKQotICAgICAgICAgICAgICAgIHByaXYtPndhc1NlZWtpbmcgPSBmYWxz
ZTsKLQotICAgICAgICAgICAgcmVzdGFydExvYWRlcklmTmVlZGVkKHNyYyk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkVtcHR5IGFkYXB0ZXIh
Iik7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorCisgICAg
ICAgICpidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcihtZW1iZXJzLT5hZGFwdGVyLmdl
dCgpLCBzaXplKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKmJ1ZmZlcik7CisKKyAgICAgICAg
R1NUX0JVRkZFUl9PRkZTRVQoKmJ1ZmZlcikgPSBiYXNlU3JjLT5zZWdtZW50LnBvc2l0aW9uOwor
ICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKmJ1ZmZlcikgPSBHU1RfQlVGRkVSX09GRlNF
VCgqYnVmZmVyKSArIHNpemU7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiQnVmZmVy
IGJvdW5kcyBzZXQgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQs
IEdTVF9CVUZGRVJfT0ZGU0VUKCpidWZmZXIpLCBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKmJ1ZmZl
cikpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImJ1ZmZlciBzaXplOiAldSwgdG90
YWwgY29udGVudCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFULCBzaXplLCBtZW1iZXJzLT5zaXpl
KTsKKworICAgICAgICByZXN0YXJ0TG9hZGVySWZOZWVkZWQoc3JjLCBtZW1iZXJzKTsKKyAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOwogICAgIH0KIAotICAgIHJldHVybiBHU1RfRkxPV19PSzsK
KyAgICAvLyBJZiB0aGUgcXVldWUgaXMgZW1wdHkgcmVhY2hlZCB0aGlzIHBvaW50LCB0aGUgb25s
eSBvdGhlciBvcHRpb24gaXMgdGhhdCB3ZSBhcmUgaW4gRU9TLgorICAgIEFTU0VSVChtZW1iZXJz
LT5kb2VzSGF2ZUVPUyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZWFjaGVkIHRoZSBl
bmQgb2YgdGhlIHJlc3BvbnNlLCBzaWduYWxsaW5nIEVPUyIpOworICAgIHJldHVybiBHU1RfRkxP
V19FT1M7CiB9CiAKIHN0YXRpYyBib29sIHdlYktpdFdlYlNyY1NldEV4dHJhSGVhZGVyKEdRdWFy
ayBmaWVsZElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKQEAgLTU5
Myw2MCArNjE0LDMxIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNQcm9jZXNzRXh0cmFI
ZWFkZXJzKEdRdWFyayBmaWVsZElkLCBjb25zdCBHVmFsdWUqIHZhCiB9CiAKIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTdGFydChHc3RCYXNlU3JjKiBiYXNlU3JjKQotewotICAgIC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBCYXNlU3JjLCBkbyBub3QgY2FsbCBp
dAotICAgIC8vIGZyb20gb3Vyc2VsdmVzIHVubGVzcyB5b3UgZW5zdXJlIHRoZSBzdHJlYW1pbmcg
bG9jayBpcyBub3QKLSAgICAvLyBoZWxkLiBJZiBpdCBpcywgeW91IHdpbGwgZGVhZGxvY2sgdGhl
IFdlYlByb2Nlc3MuCi0gICAgcmV0dXJuIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KGJhc2VTcmMs
IHRydWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoR3N0
QmFzZVNyYyogYmFzZVNyYywgYm9vbCBub3RpZnlBc3luY0NvbXBsZXRpb24pCiB7CiAgICAgV2Vi
S2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBXZWJLaXRXZWJT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKHdlYmtpdEdzdENoZWNrVmVy
c2lvbigxLCAxMiwgMCkgJiYgIXByaXYtPnBsYXllcikgewotICAgICAgICBHUmVmUHRyPEdzdFF1
ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2NvbnRleHQoV0VCS0lUX1dFQl9T
UkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FKSk7Ci0gICAgICAgIGlmIChnc3RfcGFkX3BlZXJf
cXVlcnkoR1NUX0JBU0VfU1JDX1BBRChiYXNlU3JjKSwgcXVlcnkuZ2V0KCkpKSB7Ci0gICAgICAg
ICAgICBHc3RDb250ZXh0KiBjb250ZXh0OwotCi0gICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2Vf
Y29udGV4dChxdWVyeS5nZXQoKSwgJmNvbnRleHQpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X2NvbnRleHQoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBjb250ZXh0KTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FT
VChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfbmVlZF9jb250ZXh0KEdTVF9PQkpFQ1RfQ0FTVChzcmMp
LCBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUpKTsKLSAgICB9Ci0KLSAg
ICBSRUxFQVNFX0FTU0VSVChwcml2LT5wbGF5ZXIpOwotCi0gICAgcHJpdi0+d2VyZUhlYWRlcnNS
ZWNlaXZlZCA9IGZhbHNlOwotICAgIHByaXYtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgPSBmYWxzZTsK
LSAgICBwcml2LT5pc0R1cmF0aW9uU2V0ID0gZmFsc2U7Ci0gICAgcHJpdi0+ZG9lc0hhdmVFT1Mg
PSBmYWxzZTsKLSAgICBwcml2LT5pc0ZsdXNoaW5nID0gZmFsc2U7Ci0gICAgcHJpdi0+ZG93bmxv
YWRTdGFydFRpbWUgPSBXYWxsVGltZTo6bmFuKCk7CiAKLSAgICBwcml2LT5kaWRQYXNzQWNjZXNz
Q29udHJvbENoZWNrID0gZmFsc2U7Ci0KLSAgICBpZiAocHJpdi0+b3JpZ2luYWxVUkkuaXNOdWxs
KCkpIHsKKyAgICBpZiAoc3JjLT5wcml2LT5vcmlnaW5hbFVSSS5pc051bGwoKSkgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIk5vIFVSSSBwcm92aWRlZCIpOwotICAgICAgICB3ZWJL
aXRXZWJTcmNTdG9wKGJhc2VTcmMpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQorICAg
IHJldHVybiBUUlVFOworfQogCi0gICAgaWYgKHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID09IHBy
aXYtPnN0b3BQb3NpdGlvbikgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkVtcHR5
IHNlZ21lbnQsIHNpZ25hbGluZyBFT1MiKTsKLSAgICAgICAgcHJpdi0+ZG9lc0hhdmVFT1MgPSB0
cnVlOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQorc3RhdGljIHZvaWQgd2ViS2l0V2Vi
U3JjTWFrZVJlcXVlc3QoV2ViS2l0V2ViU3JjKiBzcmMsIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQ
cml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciYgbWVtYmVycykKK3sKKyAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgQVNTRVJUKCFw
cml2LT5vcmlnaW5hbFVSSS5pc051bGwoKSk7CisgICAgQVNTRVJUKG1lbWJlcnMtPnJlcXVlc3Rl
ZFBvc2l0aW9uICE9IG1lbWJlcnMtPnN0b3BQb3NpdGlvbik7CiAKLSAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgIkZldGNoaW5nICVzIiwgcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpKTsKKyAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlBvc3RpbmcgdGFzayB0byByZXF1ZXN0IFIldSAlcyByZXF1
ZXN0ZWRQb3NpdGlvbj0lIiBHX0dVSU5UNjRfRk9STUFUICIgc3RvcFBvc2l0aW9uPSUiIEdfR1VJ
TlQ2NF9GT1JNQVQsIG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIsIHByaXYtPm9yaWdpbmFsVVJJLmRh
dGEoKSwgbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb24sIG1lbWJlcnMtPnN0b3BQb3NpdGlvbik7
CiAgICAgVVJMIHVybCA9IFVSTChVUkwoKSwgcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpKTsKIAog
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7CiAgICAgcmVxdWVzdC5zZXRBbGxvd0Nv
b2tpZXModHJ1ZSk7CiAgICAgcmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyh1cmwpOwog
Ci0gICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIocHJpdi0+cGxheWVyLT5yZWZlcnJlcigpKTsK
KyAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihtZW1iZXJzLT5wbGF5ZXItPnJlZmVycmVyKCkp
OwogCiAgICAgaWYgKHByaXYtPmh0dHBNZXRob2QuZ2V0KCkpCiAgICAgICAgIHJlcXVlc3Quc2V0
SFRUUE1ldGhvZChwcml2LT5odHRwTWV0aG9kLmdldCgpKTsKQEAgLTY3MCwxMiArNjYyLDEyIEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChHc3RCYXNlU3JjKiBiYXNl
U3JjLCBib29sIG5vdGlmeUFzeW5jQ29tCiAgICAgICAgIHx8ICFnX2FzY2lpX3N0cmNhc2VjbXAo
InRyYWlsZXJzLmFwcGxlLmNvbSIsIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSkpCiAgICAgICAg
IHJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudCgiUXVpY2t0aW1lLzcuNi42Iik7CiAKLSAgICBpZiAo
cHJpdi0+cmVxdWVzdGVkUG9zaXRpb24pIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBmb3Jt
YXRlZFJhbmdlKGdfc3RyZHVwX3ByaW50ZigiYnl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIs
IHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uKSk7CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3RlZFBv
c2l0aW9uKSB7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZm9ybWF0ZWRSYW5nZShnX3N0cmR1
cF9wcmludGYoImJ5dGVzPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0iLCBtZW1iZXJzLT5yZXF1ZXN0
ZWRQb3NpdGlvbikpOwogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJhbmdlIHJlcXVl
c3Q6ICVzIiwgZm9ybWF0ZWRSYW5nZS5nZXQoKSk7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpSYW5nZSwgZm9ybWF0ZWRSYW5nZS5nZXQoKSk7CiAg
ICAgfQotICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uOwor
ICAgIEFTU0VSVChtZW1iZXJzLT5yZWFkUG9zaXRpb24gPT0gbWVtYmVycy0+cmVxdWVzdGVkUG9z
aXRpb24pOwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQZXJzaXN0ZW50IGNvbm5lY3Rp
b24gc3VwcG9ydCAlcyIsIHByaXYtPmtlZXBBbGl2ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIp
OwogICAgIGlmICghcHJpdi0+a2VlcEFsaXZlKQpAQCAtNjg3LDgxICs2NzksNTIgQEAgc3RhdGlj
IGdib29sZWFuIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KEdzdEJhc2VTcmMqIGJhc2VTcmMsIGJv
b2wgbm90aWZ5QXN5bmNDb20KICAgICAvLyBXZSBhbHdheXMgcmVxdWVzdCBJY2VjYXN0L1Nob3V0
Y2FzdCBtZXRhZGF0YSwganVzdCBpbiBjYXNlIC4uLgogICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpJY3lNZXRhZGF0YSwgIjEiKTsKIAotICAgIEdSZWZQdHI8
V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKTsKLSAgICBwcml2
LT5ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlN0YXJ0LCBb
cHJvdGVjdG9yLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KSwgc3JjLCBub3RpZnlBc3luY0Nv
bXBsZXRpb25dIHsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3Byb3RlY3RvciA9IFdURjo6ZW5zdXJlR1JlZihzcmMpLCByZXF1ZXN0
ID0gV1RGTW92ZShyZXF1ZXN0KSwgcmVxdWVzdE51bWJlciA9IG1lbWJlcnMtPnJlcXVlc3ROdW1i
ZXIsIHNyY10gewogICAgICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gcHJvdGVjdG9y
LT5wcml2OwotICAgICAgICBpZiAoIXByaXYtPmxvYWRlcikKLSAgICAgICAgICAgIHByaXYtPmxv
YWRlciA9IHByaXYtPnBsYXllci0+Y3JlYXRlUmVzb3VyY2VMb2FkZXIoKTsKKyAgICAgICAgRGF0
YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFw
cGVyIG1lbWJlcnMocHJpdi0+ZGF0YU11dGV4KTsKKyAgICAgICAgLy8gSWdub3JlIHRoaXMgdGFz
ayAobm90IG1ha2luZyBhbnkgSFRUUCByZXF1ZXN0KSBpZiBieSBub3cgV2ViS2l0V2ViU3JjIHN0
cmVhbWluZyB0aHJlYWQgaXMgYWxyZWFkeSB3YWl0aW5nCisgICAgICAgIC8vIGZvciBhIGRpZmZl
cmVudCByZXF1ZXN0LiBUaGVyZSBpcyBubyBwb2ludCBhbnltb3JlIGluIHNlbmRpbmcgdGhpcyBv
bmUuCisgICAgICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IHJlcXVlc3ROdW1iZXIp
IHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAiU2tpcHBp
bmcgUiV1LCBjdXJyZW50IHJlcXVlc3QgbnVtYmVyIGlzICV1IiwgcmVxdWVzdE51bWJlciwgbWVt
YmVycy0+cmVxdWVzdE51bWJlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW1lbWJlcnMtPmxvYWRlcikKKyAgICAgICAgICAgIG1lbWJlcnMtPmxvYWRl
ciA9IG1lbWJlcnMtPnBsYXllci0+Y3JlYXRlUmVzb3VyY2VMb2FkZXIoKTsKIAogICAgICAgICBQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI6OkxvYWRPcHRpb25zIGxvYWRPcHRpb25zID0gMDsK
ICAgICAgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Jsb2IoKSkKICAgICAgICAgICAg
IGxvYWRPcHRpb25zIHw9IFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlcjo6TG9hZE9wdGlvbjo6
QnVmZmVyRGF0YTsKLSAgICAgICAgcHJpdi0+cmVzb3VyY2UgPSBwcml2LT5sb2FkZXItPnJlcXVl
c3RSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIGxvYWRPcHRpb25zKTsKLSAgICAg
ICAgaWYgKHByaXYtPnJlc291cmNlKSB7Ci0gICAgICAgICAgICBwcml2LT5yZXNvdXJjZS0+c2V0
Q2xpZW50KG1ha2VVbmlxdWU8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ+KHByb3RlY3Rv
ci5nZXQoKSwgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpKSk7Ci0gICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIlN0YXJ0ZWQgcmVxdWVzdCIpOwotICAgICAgICAg
ICAgaWYgKG5vdGlmeUFzeW5jQ29tcGxldGlvbikKLSAgICAgICAgICAgICAgICBnc3RfYmFzZV9z
cmNfc3RhcnRfY29tcGxldGUoR1NUX0JBU0VfU1JDKHNyYyksIEdTVF9GTE9XX09LKTsKKyAgICAg
ICAgbWVtYmVycy0+cmVzb3VyY2UgPSBtZW1iZXJzLT5sb2FkZXItPnJlcXVlc3RSZXNvdXJjZShS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIGxvYWRPcHRpb25zKTsKKyAgICAgICAgaWYgKG1lbWJl
cnMtPnJlc291cmNlKSB7CisgICAgICAgICAgICBtZW1iZXJzLT5yZXNvdXJjZS0+c2V0Q2xpZW50
KG1ha2VVbmlxdWU8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ+KHByb3RlY3Rvci5nZXQo
KSwgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCByZXF1ZXN0TnVtYmVyKSk7CisgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIlN0YXJ0ZWQgcmVxdWVzdCBSJXUi
LCByZXF1ZXN0TnVtYmVyKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAiRmFpbGVkIHRvIHNldHVwIHN0cmVhbWluZyBjbGll
bnQiKTsKLSAgICAgICAgICAgIGlmIChub3RpZnlBc3luY0NvbXBsZXRpb24pCi0gICAgICAgICAg
ICAgICAgZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlKEdTVF9CQVNFX1NSQyhzcmMpLCBHU1Rf
RkxPV19FUlJPUik7Ci0gICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBudWxscHRyOworICAgICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJGYWlsZWQgdG8gc2V0dXAg
c3RyZWFtaW5nIGNsaWVudCB0byBoYW5kbGUgUiV1IiwgcmVxdWVzdE51bWJlcik7CisgICAgICAg
ICAgICBtZW1iZXJzLT5sb2FkZXIgPSBudWxscHRyOwogICAgICAgICB9CiAgICAgfSk7Ci0KLSAg
ICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjQ2xvc2VTZXNzaW9u
KFdlYktpdFdlYlNyYyogc3JjKQotewotICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHByb3RlY3RvciA9IFdURjo6ZW5z
dXJlR1JlZihzcmMpOwotCi0gICAgcHJpdi0+bm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkU291
cmNlTm90aWZpY2F0aW9uOjpTdG9wLCBbcHJvdGVjdG9yLCBrZWVwQWxpdmUgPSBwcml2LT5rZWVw
QWxpdmVdIHsKLSAgICAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+
cHJpdjsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIlN0b3Bw
aW5nIHJlc291cmNlIGxvYWRlciIpOwotCi0gICAgICAgIGlmIChwcml2LT5yZXNvdXJjZSkgewot
ICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnN0b3AoKTsKLSAgICAgICAgICAgIHByaXYtPnJl
c291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgICAgICBwcml2LT5yZXNvdXJjZSA9
IG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWtlZXBBbGl2ZSkKLSAgICAgICAg
ICAgIHByaXYtPmxvYWRlciA9IG51bGxwdHI7Ci0gICAgfSk7Ci0KLSAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgIlJlc291cmNlIGxvYWRlciBzdG9wcGVkIik7CiB9CiAKIHN0YXRpYyBnYm9vbGVh
biB3ZWJLaXRXZWJTcmNTdG9wKEdzdEJhc2VTcmMqIGJhc2VTcmMpCiB7CiAgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBXZWJLaXRXZWJTcmNQcml2
YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKHByaXYtPnJlc291cmNlIHx8IChwcml2
LT5sb2FkZXIgJiYgIXByaXYtPmtlZXBBbGl2ZSkpCi0gICAgICAgIHdlYktpdFdlYlNyY0Nsb3Nl
U2Vzc2lvbihzcmMpOwotCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGFkYXB0ZXJMb2NrZXIo
cHJpdi0+YWRhcHRlckxvY2spOwotICAgICAgICBnc3RfYWRhcHRlcl9jbGVhcihwcml2LT5hZGFw
dGVyLmdldCgpKTsKLSAgICB9Ci0KLSAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMpOwotICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RvcHBlZCByZXF1ZXN0Iik7CisgICAgLy8gYmFzZXNyYyB3
aWxsIGFsd2F5cyBjYWxsIHVuTG9jaygpIGFuZCB1bkxvY2tTdG9wKCkgYmVmb3JlIGNhbGxpbmcg
dGhpcy4gU2VlIGdzdF9iYXNlX3NyY19zdG9wKCkuCisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNy
Y1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5w
cml2LT5kYXRhTXV0ZXgpOworICAgIHdlYmtpdFdlYlNyY1Jlc2V0KHNyYywgbWVtYmVycywgUmVz
ZXRUeXBlOjpIYXJkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgV2ViS2l0
V2ViU3JjIik7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRX
ZWJTcmNHZXRTaXplKEdzdEJhc2VTcmMqIGJhc2VTcmMsIGd1aW50NjQqIHNpemUpCiB7CiAgICAg
V2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBXZWJLaXRX
ZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIERhdGFNdXRleDxXZWJLaXRXZWJT
cmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+
cHJpdi0+ZGF0YU11dGV4KTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiaGF2ZVNpemU6
ICVzLCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFULCBib29sRm9yUHJpbnRpbmcocHJpdi0+aGF2
ZVNpemUpLCBwcml2LT5zaXplKTsKLSAgICBpZiAocHJpdi0+aGF2ZVNpemUpIHsKLSAgICAgICAg
KnNpemUgPSBwcml2LT5zaXplOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiaGF2ZVNpemU6
ICVzLCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFULCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+
aGF2ZVNpemUpLCBtZW1iZXJzLT5zaXplKTsKKyAgICBpZiAobWVtYmVycy0+aGF2ZVNpemUpIHsK
KyAgICAgICAgKnNpemUgPSBtZW1iZXJzLT5zaXplOwogICAgICAgICByZXR1cm4gVFJVRTsKICAg
ICB9CiAKQEAgLTc3MSw0MCArNzM0LDQyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNH
ZXRTaXplKEdzdEJhc2VTcmMqIGJhc2VTcmMsIGd1aW50NjQqIHNpemUpCiBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjSXNTZWVrYWJsZShHc3RCYXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdl
YktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0KLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgImlzU2Vla2FibGU6ICVzIiwgYm9vbEZvclByaW50aW5nKHNyYy0+cHJp
di0+aXNTZWVrYWJsZSkpOwotICAgIHJldHVybiBzcmMtPnByaXYtPmlzU2Vla2FibGU7CisgICAg
RGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRX
cmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3JjLCAiaXNTZWVrYWJsZTogJXMiLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNTZWVr
YWJsZSkpOworICAgIHJldHVybiBtZW1iZXJzLT5pc1NlZWthYmxlOwogfQogCiBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0V2ViU3JjRG9TZWVrKEdzdEJhc2VTcmMqIGJhc2VTcmMsIEdzdFNlZ21lbnQq
IHNlZ21lbnQpCiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUg
d2l0aCBjcmVhdGUoKS4gSXQncyBvbmx5IGNhbGxlZCB3aGVuIHdlJ3JlIHRyYW5zaXRpb25pbmcg
dG8gPj1QQVVTRUQgYW5kCisgICAgLy8gYmV0d2VlbiBmbHVzaGVzLiBJbiBhbnkgY2FzZSwgYmFz
ZXNyYyBob2xkcyB0aGUgU1RSRUFNX0xPQ0ssIHNvIHdlIGtub3cgY3JlYXRlKCkgaXMgbm90IHJ1
bm5pbmcuCisgICAgLy8gQWxzbywgYm90aCB3ZWJLaXRXZWJTcmNVbkxvY2soKSBhbmQgd2ViS2l0
V2ViU3JjVW5Mb2NrU3RvcCgpIGFyZSBndWFyYW50ZWVkIHRvIGJlIGNhbGxlZCAqYmVmb3JlKiB0
aGlzIGZ1bmN0aW9uLgorICAgIC8vIFtTZWUgZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlaygpXS4K
KyAgICBBU1NFUlQoR1NUX0VMRU1FTlQoYmFzZVNyYyktPmN1cnJlbnRfc3RhdGUgPCBHU1RfU1RB
VEVfUEFVU0VEIHx8IEdTVF9QQURfSVNfRkxVU0hJTkcoYmFzZVNyYy0+c3JjcGFkKSk7CisKKyAg
ICAvLyBFeGNlcHQgZm9yIHRoZSBpbml0aWFsIHNlZWssIHRoaXMgZnVuY3Rpb24gaXMgb25seSBj
YWxsZWQgaWYgaXNTZWVrYWJsZSgpIHJldHVybnMgdHJ1ZS4KKyAgICBBU1NFUlQoR1NUX0VMRU1F
TlQoYmFzZVNyYyktPmN1cnJlbnRfc3RhdGUgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IHdlYktpdFdl
YlNyY0lzU2Vla2FibGUoYmFzZVNyYykpOworCiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPnJlc3BvbnNlTG9jayk7CisgICAg
RGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRX
cmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOwogCi0gICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJTZWVrIHNlZ21lbnQ6ICglIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlO
VDY0X0ZPUk1BVCAiKSIsIHNlZ21lbnQtPnN0YXJ0LCBzZWdtZW50LT5zdG9wKTsKLSAgICBpZiAo
cHJpdi0+cmVhZFBvc2l0aW9uID09IHNlZ21lbnQtPnN0YXJ0ICYmIHByaXYtPnJlcXVlc3RlZFBv
c2l0aW9uID09IHByaXYtPnJlYWRQb3NpdGlvbiAmJiBwcml2LT5zdG9wUG9zaXRpb24gPT0gc2Vn
bWVudC0+c3RvcCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgdG8gY3Vy
cmVudCByZWFkL2VuZCBwb3NpdGlvbiBhbmQgbm8gc2VlayBwZW5kaW5nIik7Ci0gICAgICAgIHJl
dHVybiBUUlVFOwotICAgIH0KKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgc2VnbWVu
dDogKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFUICIpIFBvc2l0aW9u
IHByZXZpb3VzIHRvIHNlZWs6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHNlZ21lbnQtPnN0YXJ0LCBz
ZWdtZW50LT5zdG9wLCBtZW1iZXJzLT5yZWFkUG9zaXRpb24pOwogCi0gICAgaWYgKHByaXYtPndl
cmVIZWFkZXJzUmVjZWl2ZWQgJiYgIXByaXYtPmlzU2Vla2FibGUpIHsKLSAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKHNyYywgIk5vdCBzZWVrYWJsZSIpOwotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQorICAgIC8vIEJlZm9yZSBhdHRlbXB0aW5nIHRvIHNlZWssIGJhc2VzcmMgd2lsbCBj
YWxsIGlzU2Vla2FibGUoKS4gSWYgaXNTZWVrYWJsZSgpIGlzIHRydWUsIGEgZmx1c2ggd2lsbCBi
ZSBtYWRlIGFuZAorICAgIC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQuIGJhc2VzcmMg
c3RpbGwgZ2l2ZXMgdXMgdGhlIGNoYW5jZSBoZXJlIHRvIHJldHVybiBGQUxTRSBhbmQgY2FuY2Vs
IHRoZSBzZWVrLgorICAgIC8vIFdlIGNhbm5vdCBhZmZvcmQgdG8gcmV0dXJuIEZBTFNFIGluIHRo
aXMgZnVuY3Rpb24gdGhvdWdoIHVubGVzcyB3ZSdyZSBnb2luZyB0byBmYWlsIG9uIHB1cnBvc2Us
IHNpbmNlIGF0IHRoaXMKKyAgICAvLyBwb2ludCB3ZSBoYXZlIGFscmVhZHkgYmVlbiBmbHVzaGVk
IGFuZCBjYW5jZWxsZWQgdGhlIEhUVFAgcmVxdWVzdCB0aGF0IHdhcyBmZWVkaW5nIHVzIGRhdGEu
CiAKICAgICBpZiAoc2VnbWVudC0+cmF0ZSA8IDAuMCB8fCBzZWdtZW50LT5mb3JtYXQgIT0gR1NU
X0ZPUk1BVF9CWVRFUykgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qoc3JjLCAiSW52YWxp
ZCBzZWVrIHNlZ21lbnQiKTsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJJbnZhbGlk
IHNlZWsgc2VnbWVudCIpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgaWYg
KHByaXYtPmhhdmVTaXplICYmIHNlZ21lbnQtPnN0YXJ0ID49IHByaXYtPnNpemUpCisgICAgaWYg
KG1lbWJlcnMtPmhhdmVTaXplICYmIHNlZ21lbnQtPnN0YXJ0ID49IG1lbWJlcnMtPnNpemUpCiAg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChzcmMsICJQb3RlbnRpYWxseSBzZWVraW5nIGJlaGlu
ZCBlbmQgb2YgZmlsZSwgbWlnaHQgRU9TIGltbWVkaWF0ZWx5Iik7CiAKLSAgICBwcml2LT5pc1Nl
ZWtpbmcgPSB0cnVlOwotICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID0gc2VnbWVudC0+c3Rh
cnQ7Ci0gICAgcHJpdi0+c3RvcFBvc2l0aW9uID0gc2VnbWVudC0+c3RvcDsKLSAgICBwcml2LT5h
ZGFwdGVyQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0
aW9uID0gbWVtYmVycy0+cmVhZFBvc2l0aW9uID0gc2VnbWVudC0+c3RhcnQ7CisgICAgbWVtYmVy
cy0+c3RvcFBvc2l0aW9uID0gc2VnbWVudC0+c3RvcDsKICAgICByZXR1cm4gVFJVRTsKIH0KIApA
QCAtODE2LDggKzc4MSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeShHc3RC
YXNlU3JjKiBiYXNlU3JjLCBHc3RRdWVyeSogcXVlcnkpCiAKICAgICBpZiAoR1NUX1FVRVJZX1RZ
UEUocXVlcnkpID09IEdTVF9RVUVSWV9VUkkpIHsKICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmko
cXVlcnksIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7Ci0gICAgICAgIGlmICghcHJpdi0+cmVk
aXJlY3RlZFVSSS5pc051bGwoKSkKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpX3JlZGly
ZWN0aW9uKHF1ZXJ5LCBwcml2LT5yZWRpcmVjdGVkVVJJLmRhdGEoKSk7CisgICAgICAgIERhdGFN
dXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBl
ciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICAgICAgaWYgKCFtZW1iZXJzLT5y
ZWRpcmVjdGVkVVJJLmlzTnVsbCgpKQorICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmlfcmVk
aXJlY3Rpb24ocXVlcnksIG1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkuZGF0YSgpKTsKICAgICAgICAg
cmVzdWx0ID0gVFJVRTsKICAgICB9CiAKQEAgLTgzOCw1MSArODA0LDQ1IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNRdWVyeShHc3RCYXNlU3JjKiBiYXNlU3JjLCBHc3RRdWVyeSogcXVl
cnkpCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjVW5Mb2NrKEdzdEJhc2VTcmMqIGJhc2VT
cmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsK
LSAgICBMb2NrSG9sZGVyIGxvY2tlcihzcmMtPnByaXYtPnJlc3BvbnNlTG9jayk7CisgICAgRGF0
YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFw
cGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOwogCiAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJVbmxvY2siKTsKLSAgICBzcmMtPnByaXYtPmlzRmx1c2hpbmcgPSB0cnVlOwotICAg
IHNyYy0+cHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgc3JjLT5wcml2
LT5hZGFwdGVyQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIG1lbWJlcnMtPmlzRmx1c2hpbmcg
PSB0cnVlOworCisgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldHdvcmsgcmVzb3VyY2UgcmVxdWVzdCBv
cGVuLCB3ZSBhc2sgdGhlIG1haW4gdGhyZWFkIHRvIGNsb3NlIGl0LgorICAgIGlmIChtZW1iZXJz
LT5yZXNvdXJjZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc291cmNlIHJl
cXVlc3QgUiV1IHdpbGwgYmUgc3RvcHBlZCIsIG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIpOworICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RvciA9IFdURjo6ZW5zdXJlR1Jl
ZihzcmMpLCByZXNvdXJjZSA9IFdURk1vdmUobWVtYmVycy0+cmVzb3VyY2UpLCByZXF1ZXN0TnVt
YmVyID0gbWVtYmVycy0+cmVxdWVzdE51bWJlcl0geworICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwcm90ZWN0b3IuZ2V0KCksICJTdG9wcGluZyByZXNvdXJjZSByZXF1ZXN0IFIldSIsIHJl
cXVlc3ROdW1iZXIpOworICAgICAgICAgICAgcmVzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgICAg
IHJlc291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBB
U1NFUlQoIW1lbWJlcnMtPnJlc291cmNlKTsKKworICAgIGlmICghc3JjLT5wcml2LT5rZWVwQWxp
dmUpCisgICAgICAgIG1lbWJlcnMtPmxvYWRlciA9IG51bGxwdHI7CisKKyAgICAvLyBFbnN1cmUg
YWxsIG5ldHdvcmsgY2FsbGJhY2tzIGZyb20gdGhlIG9sZCByZXF1ZXN0IGRvbid0IGZlZWQgZGF0
YSB0byBXZWJLaXRXZWJTcmMgYW55bW9yZS4KKyAgICBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyKys7
CisKKyAgICAvLyBXYWtlIHVwIHN0cmVhbWluZyB0aHJlYWQuCisgICAgbWVtYmVycy0+cmVzcG9u
c2VDb25kaXRpb24ubm90aWZ5T25lKCk7CisKICAgICByZXR1cm4gVFJVRTsKIH0KIAogc3RhdGlj
IGdib29sZWFuIHdlYktpdFdlYlNyY1VuTG9ja1N0b3AoR3N0QmFzZVNyYyogYmFzZVNyYykKIHsK
ICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGJhc2VTcmMpOwotICAgIExv
Y2tIb2xkZXIgbG9ja2VyKHNyYy0+cHJpdi0+cmVzcG9uc2VMb2NrKTsKKyAgICBEYXRhTXV0ZXg8
V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVt
YmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJV
bmxvY2sgc3RvcCIpOwotICAgIHNyYy0+cHJpdi0+aXNGbHVzaGluZyA9IGZhbHNlOworICAgIG1l
bWJlcnMtPmlzRmx1c2hpbmcgPSBmYWxzZTsKKyAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMsIG1l
bWJlcnMsIFJlc2V0VHlwZTo6U29mdCk7CiAKICAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGlj
IEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQq
IGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gICAgV2ViS2l0V2ViU3Jj
KiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhlbGVtZW50KTsKLQotI2lmIEdTVF9DSEVDS19WRVJTSU9O
KDEsIDE0LCAwKQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiJXMiLCBnc3Rfc3RhdGVfY2hh
bmdlX2dldF9uYW1lKHRyYW5zaXRpb24pKTsKLSNlbmRpZgotICAgIHN3aXRjaCAodHJhbnNpdGlv
bikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgICB3
ZWJLaXRXZWJTcmNDbG9zZVNlc3Npb24oc3JjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
U1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWTogewotICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihzcmMtPnByaXYtPnJlc3BvbnNlTG9jayk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c3JjLCAiUEFVU0VELT5SRUFEWSBjYW5jZWxsaW5nIG5ldHdvcmsgcmVxdWVzdHMiKTsKLSAgICAg
ICAgc3JjLT5wcml2LT5pc0ZsdXNoaW5nID0gdHJ1ZTsKLSAgICAgICAgc3JjLT5wcml2LT5yZXNw
b25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAgICAgICAgc3JjLT5wcml2LT5hZGFwdGVyQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdTVF9FTEVNRU5UX0NMQVNTKHBh
cmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKLX0KLQogc3Rh
dGljIGJvb2wgdXJsSGFzU3VwcG9ydGVkUHJvdG9jb2woY29uc3QgVVJMJiB1cmwpCiB7CiAgICAg
cmV0dXJuIHVybC5pc1ZhbGlkKCkgJiYgKHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwg
dXJsLnByb3RvY29sSXNCbG9iKCkpOwpAQCAtOTM4LDcgKzg5OCw2IEBAIHN0YXRpYyBnYm9vbGVh
biB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIq
IHVyaSwgR0VyCiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKLSAgICBwcml2LT5yZWRp
cmVjdGVkVVJJID0gQ1N0cmluZygpOwogICAgIHByaXYtPm9yaWdpbmFsVVJJID0gQ1N0cmluZygp
OwogICAgIGlmICghdXJpKQogICAgICAgICByZXR1cm4gVFJVRTsKQEAgLTk3MiwxNiArOTMxLDE5
IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyIGdJZmFj
ZSwgZ3BvaW50ZXIpCiB2b2lkIHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKFdlYktpdFdlYlNy
Yyogc3JjLCBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyKQogewogICAgIEFTU0VSVChwbGF5
ZXIpOwotICAgIHNyYy0+cHJpdi0+cGxheWVyID0gcGxheWVyOworICAgIERhdGFNdXRleDxXZWJL
aXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJz
KHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICBtZW1iZXJzLT5wbGF5ZXIgPSBwbGF5ZXI7CiB9
CiAKIGJvb2wgd2ViS2l0U3JjUGFzc2VkQ09SU0FjY2Vzc0NoZWNrKFdlYktpdFdlYlNyYyogc3Jj
KQogewotICAgIHJldHVybiBzcmMtPnByaXYtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2s7Cisg
ICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2Nr
ZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIHJldHVybiBtZW1i
ZXJzLT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrOwogfQogCi1DYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBz
cmMsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCi0gICAgOiBtX3NyYyhHU1RfRUxFTUVOVChz
cmMpKQorQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OkNhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCB1
bnNpZ25lZCByZXF1ZXN0TnVtYmVyKQorICAgIDogbV9yZXF1ZXN0TnVtYmVyKHJlcXVlc3ROdW1i
ZXIpCisgICAgLCBtX3NyYyhHU1RfRUxFTUVOVChzcmMpKQogICAgICwgbV9yZXF1ZXN0KFdURk1v
dmUocmVxdWVzdCkpCiB7CiB9CkBAIC05OTAsNiArOTUyLDcgQEAgQ2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpID0gZGVmYXVsdDsK
IAogdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3Np
emUodW5zaWduZWQgYnl0ZXNSZWFkKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CiAgICAg
R3N0QmFzZVNyYyogYmFzZVNyYyA9IEdTVF9CQVNFX1NSQ19DQVNUKHNyYyk7CiAgICAgV2ViS2l0
V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKQEAgLTEwMjYsMzIgKzk4OSw0NCBAQCB2
b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpjaGVja1VwZGF0ZUJsb2Nrc2l6ZSh1
bnNpZ25lZCBieXRlc1JlYWQpCiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6
OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUG9saWN5Q2hlY2tlcjo6
U2hvdWxkQ29udGludWUpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3Ny
Yy5nZXQoKSk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAg
ICBwcml2LT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrID0gcHJpdi0+cmVzb3VyY2UtPmRpZFBh
c3NBY2Nlc3NDb250cm9sQ2hlY2soKTsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0
ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5kYXRhTXV0
ZXgpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikg
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lDaGVja2VyOjpTaG91bGRDb250aW51
ZTo6Tm8pOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJSZWNlaXZlZCByZXNwb25zZTogJWQiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsK
KyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlIldTogUmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwg
bV9yZXF1ZXN0TnVtYmVyLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKIAorICAgIG1lbWJl
cnMtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2sgPSBtZW1iZXJzLT5yZXNvdXJjZS0+ZGlkUGFz
c0FjY2Vzc0NvbnRyb2xDaGVjaygpOwogICAgIG1fb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZShyZXNwb25zZS51cmwoKSkpOwogCiAgICAgYXV0byByZXNwb25zZVVSSSA9IHJlc3Bv
bnNlLnVybCgpLnN0cmluZygpLnV0ZjgoKTsKICAgICBpZiAocHJpdi0+b3JpZ2luYWxVUkkgIT0g
cmVzcG9uc2VVUkkpCi0gICAgICAgIHByaXYtPnJlZGlyZWN0ZWRVUkkgPSBXVEZNb3ZlKHJlc3Bv
bnNlVVJJKTsKKyAgICAgICAgbWVtYmVycy0+cmVkaXJlY3RlZFVSSSA9IFdURk1vdmUocmVzcG9u
c2VVUkkpOworCisgICAgLy8gbGVuZ3RoIHdpbGwgYmUgemVybyAodW5rbm93bikgaWYgbm8gQ29u
dGVudC1MZW5ndGggaXMgcHJvdmlkZWQgb3IgdGhlIHJlc3BvbnNlIGlzIGNvbXByZXNzZWQgd2l0
aCBDb250ZW50LUVuY29kaW5nLgorICAgIHVpbnQ2NF90IGxlbmd0aCA9ICFyZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRFbmNvZGluZykg
PyByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSA6IDA7CisgICAgaWYgKGxlbmd0aCA+
IDAgJiYgbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb24gJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA9PSAyMDYpCisgICAgICAgIGxlbmd0aCArPSBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlv
bjsKIAotICAgIHVpbnQ2NF90IGxlbmd0aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCgpOwotICAgIGlmIChsZW5ndGggPiAwICYmIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uICYmIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjA2KQotICAgICAgICBsZW5ndGggKz0gcHJpdi0+
cmVxdWVzdGVkUG9zaXRpb247CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGh0dHBIZWFk
ZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJodHRwLWhlYWRlcnMiKSk7CiAKLSAgICBwcml2
LT5odHRwSGVhZGVycy5yZXNldChnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiaHR0cC1oZWFkZXJz
IikpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHByaXYtPmh0dHBIZWFkZXJzLmdldCgpLCAidXJp
IiwgR19UWVBFX1NUUklORywgcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpLAorICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAidXJpIiwgR19UWVBFX1NUUklORywgcHJpdi0+
b3JpZ2luYWxVUkkuZGF0YSgpLAogICAgICAgICAiaHR0cC1zdGF0dXMtY29kZSIsIEdfVFlQRV9V
SU5ULCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpLCBudWxscHRyKTsKLSAgICBpZiAoIXByaXYt
PnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHByaXYt
Pmh0dHBIZWFkZXJzLmdldCgpLCAicmVkaXJlY3Rpb24tdXJpIiwgR19UWVBFX1NUUklORywgcHJp
di0+cmVkaXJlY3RlZFVSSS5kYXRhKCksIG51bGxwdHIpOworICAgIGlmICghbWVtYmVycy0+cmVk
aXJlY3RlZFVSSS5pc051bGwoKSkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRl
cnMuZ2V0KCksICJyZWRpcmVjdGlvbi11cmkiLCBHX1RZUEVfU1RSSU5HLCBtZW1iZXJzLT5yZWRp
cmVjdGVkVVJJLmRhdGEoKSwgbnVsbHB0cik7CisKKyAgICAvLyBQYWNrIHJlcXVlc3QgaGVhZGVy
cyBpbiB0aGUgaHR0cC1oZWFkZXJzIHN0cnVjdHVyZS4KICAgICBHVW5pcXVlUHRyPEdzdFN0cnVj
dHVyZT4gaGVhZGVycyhnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgicmVxdWVzdC1oZWFkZXJzIikp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogbV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVs
ZHMoKSkKICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgaGVhZGVyLmtl
eS51dGY4KCkuZGF0YSgpLCBHX1RZUEVfU1RSSU5HLCBoZWFkZXIudmFsdWUudXRmOCgpLmRhdGEo
KSwgbnVsbHB0cik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXF1ZXN0IGhlYWRlcnMg
Z29pbmcgZG93bnN0cmVhbTogJSIgR1NUX1BUUl9GT1JNQVQsIGhlYWRlcnMuZ2V0KCkpOwotICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KHByaXYtPmh0dHBIZWFkZXJzLmdldCgpLCAicmVxdWVzdC1oZWFk
ZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdldCgpLCBudWxscHRyKTsKKyAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlIldTogUmVxdWVzdCBoZWFkZXJzIGdvaW5nIGRvd25zdHJl
YW06ICUiIEdTVF9QVFJfRk9STUFULCBtX3JlcXVlc3ROdW1iZXIsIGhlYWRlcnMuZ2V0KCkpOwor
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAicmVxdWVzdC1oZWFkZXJz
IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdldCgpLCBudWxscHRyKTsKKworICAgIC8v
IFBhY2sgcmVzcG9uc2UgaGVhZGVycyBpbiB0aGUgaHR0cC1oZWFkZXJzIHN0cnVjdHVyZS4KICAg
ICBoZWFkZXJzLnJlc2V0KGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJyZXNwb25zZS1oZWFkZXJz
IikpOwogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpKSB7CiAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKQEAgLTEwNjEsNTcgKzEwMzYsNDMg
QEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb24KICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ3N0
X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgaGVhZGVyLmtleS51dGY4KCkuZGF0YSgpLCBH
X1RZUEVfU1RSSU5HLCBoZWFkZXIudmFsdWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CiAgICAg
fQotICAgIGF1dG8gY29udGVudExlbmd0aEZpZWxkTmFtZShodHRwSGVhZGVyTmFtZVN0cmluZyhI
VFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKCFnc3Rf
c3RydWN0dXJlX2hhc19maWVsZChoZWFkZXJzLmdldCgpLCBjb250ZW50TGVuZ3RoRmllbGROYW1l
LnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChoZWFkZXJzLmdldCgp
LCBjb250ZW50TGVuZ3RoRmllbGROYW1lLnV0ZjgoKS5kYXRhKCksIEdfVFlQRV9VSU5UNjQsIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpLCBudWxscHRyKTsKLSAgICBnc3Rfc3RydWN0dXJl
X3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInJlc3BvbnNlLWhlYWRlcnMiLCBHU1RfVFlQ
RV9TVFJVQ1RVUkUsIGhlYWRlcnMuZ2V0KCksIG51bGxwdHIpOwotICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3JjLCAiUmVzcG9uc2UgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgaGVhZGVycy5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSJXU6IFJl
c3BvbnNlIGhlYWRlcnMgZ29pbmcgZG93bnN0cmVhbTogJSIgR1NUX1BUUl9GT1JNQVQsIG1fcmVx
dWVzdE51bWJlciwgaGVhZGVycy5nZXQoKSk7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhl
YWRlcnMuZ2V0KCksICJyZXNwb25zZS1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFk
ZXJzLmdldCgpLCBudWxscHRyKTsKIAotICAgIHByaXYtPmh0dHBIZWFkZXJzRXZlbnQgPSBhZG9w
dEdSZWYoZ3N0X2V2ZW50X25ld19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NU
SUNLWSwgZ3N0X3N0cnVjdHVyZV9jb3B5KHByaXYtPmh0dHBIZWFkZXJzLmdldCgpKSkpOwotCi0g
ICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAgICAgIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5KHNyYy0+cHJpdi0+aHR0cEhlYWRl
cnMuZ2V0KCkpOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRf
Q0FTVChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwg
c3RydWN0dXJlKSk7Ci0gICAgfSk7CisgICAgbWVtYmVycy0+cGVuZGluZ0h0dHBIZWFkZXJzTWVz
c2FnZSA9IGFkb3B0R1JlZihnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qo
c3JjKSwgZ3N0X3N0cnVjdHVyZV9jb3B5KGh0dHBIZWFkZXJzLmdldCgpKSkpOworICAgIG1lbWJl
cnMtPnBlbmRpbmdIdHRwSGVhZGVyc0V2ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfY3Vz
dG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9TVElDS1ksIGh0dHBIZWFkZXJzLnJlbGVh
c2UoKSkpOwogCiAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSB7Ci0g
ICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUmVjZWl2ZWQg
JWQgSFRUUCBlcnJvciBjb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRy
KSk7Ci0gICAgICAgIHByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKLSAgICAgICAgd2ViS2l0V2Vi
U3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJS
T1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCJSJXU6IFJlY2VpdmVkICVkIEhUVFAgZXJyb3IgY29k
ZSIsIG1fcmVxdWVzdE51bWJlciwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRy
KSk7CisgICAgICAgIG1lbWJlcnMtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICAgICAgbWVtYmVy
cy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFBvbGljeUNoZWNrZXI6OlNob3VsZENvbnRpbnVlOjpObyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAocHJpdi0+cmVxdWVzdGVkUG9zaXRpb24pIHsKKyAgICBpZiAobWVt
YmVycy0+cmVxdWVzdGVkUG9zaXRpb24pIHsKICAgICAgICAgLy8gU2Vla2luZyAuLi4gd2UgZXhw
ZWN0IGEgMjA2ID09IFBBUlRJQUxfQ09OVEVOVAotICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSA9PSAyMDApIHsKLSAgICAgICAgICAgIC8vIFJhbmdlIHJlcXVlc3QgZGlkbid0
IGhhdmUgYSByYW5nZWQgcmVzcG9uc2U7IHJlc2V0dGluZyBvZmZzZXQuCi0gICAgICAgICAgICBw
cml2LT5yZWFkUG9zaXRpb24gPSAwOwotICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmh0dHBT
dGF0dXNDb2RlKCkgIT0gMjA2KSB7CisgICAgICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpICE9IDIwNikgewogICAgICAgICAgICAgLy8gUmFuZ2UgcmVxdWVzdCBjb21wbGV0ZWx5IGZh
aWxlZC4KLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQs
ICgiUmVjZWl2ZWQgdW5leHBlY3RlZCAlZCBIVFRQIHN0YXR1cyBjb2RlIiwgcmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSksIChudWxscHRyKSk7Ci0gICAgICAgICAgICBwcml2LT5kb2VzSGF2ZUVP
UyA9IHRydWU7Ci0gICAgICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKEdTVF9CQVNFX1NSQ19DQVNU
KHNyYykpOworICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVB
RCwgKCJSJXU6IFJlY2VpdmVkIHVuZXhwZWN0ZWQgJWQgSFRUUCBzdGF0dXMgY29kZSBmb3IgcmFu
Z2UgcmVxdWVzdCIsIG1fcmVxdWVzdE51bWJlciwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSks
IChudWxscHRyKSk7CisgICAgICAgICAgICBtZW1iZXJzLT5kb2VzSGF2ZUVPUyA9IHRydWU7Cisg
ICAgICAgICAgICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGljeUNoZWNrZXI6OlNob3VsZENvbnRpbnVlOjpO
byk7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlJhbmdlIHJlcXVlc3Qgc3VjY2VlZGVkIik7Ci0gICAgICAg
ICAgICBwcml2LT5pc1NlZWtpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIHByaXYtPndhc1NlZWtp
bmcgPSB0cnVlOwogICAgICAgICB9CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUiV1
OiBSYW5nZSByZXF1ZXN0IHN1Y2NlZWRlZCIsIG1fcmVxdWVzdE51bWJlcik7CiAgICAgfQogCi0g
ICAgcHJpdi0+aXNTZWVrYWJsZSA9IGxlbmd0aCA+IDAgJiYgZ19hc2NpaV9zdHJjYXNlY21wKCJu
b25lIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpBY2NlcHRSYW5n
ZXMpLnV0ZjgoKS5kYXRhKCkpOworICAgIG1lbWJlcnMtPmlzU2Vla2FibGUgPSBsZW5ndGggPiAw
ICYmIGdfYXNjaWlfc3RyY2FzZWNtcCgibm9uZSIsIHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6QWNjZXB0UmFuZ2VzKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiU2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBpc1NlZWthYmxl
OiAlcyIsIGxlbmd0aCwgYm9vbEZvclByaW50aW5nKHByaXYtPmlzU2Vla2FibGUpKTsKKyAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlIldTogU2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBp
c1NlZWthYmxlOiAlcyIsIG1fcmVxdWVzdE51bWJlciwgbGVuZ3RoLCBib29sRm9yUHJpbnRpbmco
bWVtYmVycy0+aXNTZWVrYWJsZSkpOwogICAgIGlmIChsZW5ndGggPiAwKSB7Ci0gICAgICAgIGlm
ICghcHJpdi0+aGF2ZVNpemUgfHwgcHJpdi0+c2l6ZSAhPSBsZW5ndGgpIHsKLSAgICAgICAgICAg
IHByaXYtPmhhdmVTaXplID0gdHJ1ZTsKLSAgICAgICAgICAgIHByaXYtPnNpemUgPSBsZW5ndGg7
Ci0gICAgICAgICAgICBwcml2LT5pc0R1cmF0aW9uU2V0ID0gZmFsc2U7CisgICAgICAgIGlmICgh
bWVtYmVycy0+aGF2ZVNpemUgfHwgbWVtYmVycy0+c2l6ZSAhPSBsZW5ndGgpIHsKKyAgICAgICAg
ICAgIG1lbWJlcnMtPmhhdmVTaXplID0gdHJ1ZTsKKyAgICAgICAgICAgIG1lbWJlcnMtPnNpemUg
PSBsZW5ndGg7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgcHJpdi0+aGF2ZVNpemUg
PSBmYWxzZTsKKyAgICAgICAgbWVtYmVycy0+aGF2ZVNpemUgPSBmYWxzZTsKIAogICAgIC8vIFNp
Z25hbCB0byBkb3duc3RyZWFtIGlmIHRoaXMgaXMgYW4gSWNlY2FzdCBzdHJlYW0uCiAgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBjYXBzOwpAQCAtMTEyMywxMTQgKzEwODQsMTA2IEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJl
c291cmNlJiwgY29uCiAgICAgICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19z
aW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lO
VCwgbWV0YWRhdGFJbnRlcnZhbCwgbnVsbHB0cikpOwogCiAgICAgICAgICAgICBTdHJpbmcgY29u
dGVudFR5cGUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRl
bnRUeXBlKTsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzcG9uc2UgQ29u
dGVudFR5cGU6ICVzIiwgY29udGVudFR5cGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlIldTogUmVzcG9uc2UgQ29udGVudFR5cGU6ICVzIiwgbV9y
ZXF1ZXN0TnVtYmVyLCBjb250ZW50VHlwZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGdz
dF9jYXBzX3NldF9zaW1wbGUoY2Fwcy5nZXQoKSwgImNvbnRlbnQtdHlwZSIsIEdfVFlQRV9TVFJJ
TkcsIGNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwogICAgICAgICB9CiAgICAg
fQotCiAgICAgaWYgKGNhcHMpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZXQg
Y2FwcyB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7Ci0gICAgICAgIGdzdF9iYXNl
X3NyY19zZXRfY2FwcyhHU1RfQkFTRV9TUkNfQ0FTVChzcmMpLCBjYXBzLmdldCgpKTsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSJXU6IFNldCBjYXBzIHRvICUiIEdTVF9QVFJfRk9S
TUFULCBtX3JlcXVlc3ROdW1iZXIsIGNhcHMuZ2V0KCkpOworICAgICAgICBtZW1iZXJzLT5wZW5k
aW5nQ2FwcyA9IFdURk1vdmUoY2Fwcyk7CiAgICAgfQogCi0gICAgewotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihwcml2LT5yZXNwb25zZUxvY2spOwotICAgICAgICBwcml2LT53ZXJlSGVhZGVy
c1JlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgcHJpdi0+aGVhZGVyc0NvbmRpdGlvbi5ub3RpZnlP
bmUoKTsKLSAgICB9CisgICAgbWVtYmVycy0+d2FzUmVzcG9uc2VSZWNlaXZlZCA9IHRydWU7Cisg
ICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CisKICAgICBjb21wbGV0
aW9uSGFuZGxlcihQb2xpY3lDaGVja2VyOjpTaG91bGRDb250aW51ZTo6WWVzKTsKIH0KIAogdm9p
ZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JD
KG1fc3JjLmdldCgpKTsKLSAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NB
U1Qoc3JjKTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0g
ICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgbGVuZ3RoKTsK
LSAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRl
eDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBt
ZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIg
IT0gbV9yZXF1ZXN0TnVtYmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfTE9HX09CSkVD
VChzcmMsICJSJXU6IEhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIG1fcmVxdWVzdE51bWJlciwgbGVu
Z3RoKTsKKwogICAgIC8vIFJvdWdoIGJhbmR3aWR0aCBjYWxjdWxhdGlvbi4gV2UgaWdub3JlIGhl
cmUgdGhlIGZpcnN0IGRhdGEgcGFja2FnZSBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgdG8gcmVzZXQg
dGhlIGNvdW50ZXJzIHdoZW4gd2UgaXNzdWUgdGhlIHJlcXVlc3QgYW5kCiAgICAgLy8gdGhhdCBm
aXJzdCBwYWNrYWdlIGRlbGl2ZXJ5IHdvdWxkIGluY2x1ZGUgdGhlIHRpbWUgb2Ygc2VuZGluZyBv
dXQgdGhlIHJlcXVlc3QgYW5kIGdldHRpbmcgdGhlIGRhdGEgYmFjay4gU2luY2Ugd2UgY2FuJ3Qg
ZGlzdGluZ3Vpc2ggdGhlCiAgICAgLy8gc2VuZGluZyB0aW1lIGZyb20gdGhlIHJlY2VpdmluZyB0
aW1lLCBpdCBpcyBiZXR0ZXIgdG8gaWdub3JlIGl0LgotICAgIGlmICghc3RkOjppc25hbihwcml2
LT5kb3dubG9hZFN0YXJ0VGltZSkpIHsKLSAgICAgICAgcHJpdi0+dG90YWxEb3dubG9hZGVkQnl0
ZXMgKz0gbGVuZ3RoOwotICAgICAgICBkb3VibGUgdGltZVNpbmNlU3RhcnQgPSAoV2FsbFRpbWU6
Om5vdygpIC0gcHJpdi0+ZG93bmxvYWRTdGFydFRpbWUpLnNlY29uZHMoKTsKLSAgICAgICAgR1NU
X1RSQUNFX09CSkVDVChzcmMsICJkb3dubG9hZGVkICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBieXRl
cyBpbiAlZiBzZWNvbmRzID1+ICUxLjBmIGJ5dGVzL3NlY29uZCIsIHByaXYtPnRvdGFsRG93bmxv
YWRlZEJ5dGVzLCB0aW1lU2luY2VTdGFydAotICAgICAgICAgICAgLCB0aW1lU2luY2VTdGFydCA/
IHByaXYtPnRvdGFsRG93bmxvYWRlZEJ5dGVzIC8gdGltZVNpbmNlU3RhcnQgOiAwKTsKKyAgICBp
ZiAoIXN0ZDo6aXNuYW4obWVtYmVycy0+ZG93bmxvYWRTdGFydFRpbWUpKSB7CisgICAgICAgIG1l
bWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5dGVzICs9IGxlbmd0aDsKKyAgICAgICAgZG91YmxlIHRp
bWVTaW5jZVN0YXJ0ID0gKFdhbGxUaW1lOjpub3coKSAtIG1lbWJlcnMtPmRvd25sb2FkU3RhcnRU
aW1lKS5zZWNvbmRzKCk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiUiV1OiBkb3du
bG9hZGVkICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBieXRlcyBpbiAlZiBzZWNvbmRzID1+ICUxLjBm
IGJ5dGVzL3NlY29uZCIsIG1fcmVxdWVzdE51bWJlciwgbWVtYmVycy0+dG90YWxEb3dubG9hZGVk
Qnl0ZXMsIHRpbWVTaW5jZVN0YXJ0CisgICAgICAgICAgICAsIHRpbWVTaW5jZVN0YXJ0ID8gbWVt
YmVycy0+dG90YWxEb3dubG9hZGVkQnl0ZXMgLyB0aW1lU2luY2VTdGFydCA6IDApOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHByaXYtPmRvd25sb2FkU3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygp
OwotICAgICAgICBwcml2LT50b3RhbERvd25sb2FkZWRCeXRlcyA9IDA7CisgICAgICAgIG1lbWJl
cnMtPmRvd25sb2FkU3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOwogICAgIH0KIAotICAgIHVp
bnQ2NF90IG5ld1Bvc2l0aW9uID0gcHJpdi0+cmVhZFBvc2l0aW9uICsgbGVuZ3RoOwotICAgIGlm
IChMSUtFTFkgKHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID09IHByaXYtPnJlYWRQb3NpdGlvbikp
Ci0gICAgICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0gICAgcHJp
di0+cmVhZFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0KLSAgICB1aW50NjRfdCBuZXdTaXplID0g
MDsKLSAgICBpZiAocHJpdi0+aGF2ZVNpemUgJiYgKG5ld1Bvc2l0aW9uID4gcHJpdi0+c2l6ZSkp
IHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJHb3QgcG9zaXRpb24gcHJldmlvdXMg
ZXN0aW1hdGVkIGNvbnRlbnQgc2l6ZSAoJSIgR19HSU5UNjRfRk9STUFUICIgPiAlIiBHX0dJTlQ2
NF9GT1JNQVQgIikiLCBuZXdQb3NpdGlvbiwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgIG5ld1NpemUg
PSBuZXdQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZSkgewotICAgICAgICBwcml2
LT5zaXplID0gbmV3U2l6ZTsKLSAgICAgICAgYmFzZVNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IHBy
aXYtPnNpemU7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9D
QVNUKHNyYyksIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1RfQ0FT
VChzcmMpKSk7Ci0gICAgfQorICAgIG1lbWJlcnMtPnJlYWRQb3NpdGlvbiArPSBsZW5ndGg7Cisg
ICAgQVNTRVJUKCFtZW1iZXJzLT5oYXZlU2l6ZSB8fCBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPD0g
bWVtYmVycy0+c2l6ZSk7CiAKICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1F
TlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qoc3Jj
KSwKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcoIndlYmtpdC1uZXR3b3JrLXN0YXRpc3RpY3Mi
LCAicmVhZC1wb3NpdGlvbiIsIEdfVFlQRV9VSU5UNjQsIHByaXYtPnJlYWRQb3NpdGlvbiwgInNp
emUiLCBHX1RZUEVfVUlOVDY0LCBwcml2LT5zaXplLCBudWxscHRyKSkpOworICAgICAgICBnc3Rf
c3RydWN0dXJlX25ldygid2Via2l0LW5ldHdvcmstc3RhdGlzdGljcyIsICJyZWFkLXBvc2l0aW9u
IiwgR19UWVBFX1VJTlQ2NCwgbWVtYmVycy0+cmVhZFBvc2l0aW9uLCAic2l6ZSIsIEdfVFlQRV9V
SU5UNjQsIG1lbWJlcnMtPnNpemUsIG51bGxwdHIpKSk7CiAKICAgICBjaGVja1VwZGF0ZUJsb2Nr
c2l6ZShsZW5ndGgpOwogCi0gICAgaWYgKCFwcml2LT53YXNSZXNwb25zZVJlY2VpdmVkKQotICAg
ICAgICBwcml2LT53YXNSZXNwb25zZVJlY2VpdmVkID0gdHJ1ZTsKLSAgICBwcml2LT5yZXNwb25z
ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBhZGFw
dGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2NrKTsKLSAgICAgICAgR3N0QnVmZmVyKiBidWZmZXIg
PSBnc3RfYnVmZmVyX25ld193cmFwcGVkKGdfbWVtZHVwKGRhdGEsIGxlbmd0aCksIGxlbmd0aCk7
Ci0gICAgICAgIGdzdF9hZGFwdGVyX3B1c2gocHJpdi0+YWRhcHRlci5nZXQoKSwgYnVmZmVyKTsK
LSAgICAgICAgc3RvcExvYWRlcklmTmVlZGVkKHNyYyk7Ci0gICAgICAgIHByaXYtPmFkYXB0ZXJD
b25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgfQorICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0
X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChkYXRhLCBsZW5ndGgpLCBsZW5ndGgpOworICAg
IGdzdF9hZGFwdGVyX3B1c2gobWVtYmVycy0+YWRhcHRlci5nZXQoKSwgYnVmZmVyKTsKKyAgICBz
dG9wTG9hZGVySWZOZWVkZWQoc3JjLCBtZW1iZXJzKTsKKyAgICBtZW1iZXJzLT5yZXNwb25zZUNv
bmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNv
bnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7Ci0g
ICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCIlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksIChudWxscHRyKSk7Ci0gICAgc3Jj
LT5wcml2LT5kb2VzSGF2ZUVPUyA9IHRydWU7Ci0gICAgd2ViS2l0V2ViU3JjU3RvcChHU1RfQkFT
RV9TUkNfQ0FTVChzcmMpKTsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3Ry
ZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRl
eCk7CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIgIT0gbV9yZXF1ZXN0TnVtYmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBS
RUFELCAoIlIldTogJXMiLCBtX3JlcXVlc3ROdW1iZXIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0
aW9uKCkudXRmOCgpLmRhdGEoKSksIChudWxscHRyKSk7CisgICAgbWVtYmVycy0+ZG9lc0hhdmVF
T1MgPSB0cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwog
fQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKFBsYXRm
b3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogeworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VC
X1NSQyhtX3NyYy5nZXQoKSk7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0
ZXgpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFlcnJvci5pc0NhbmNlbGxhdGlvbigpKSB7Ci0g
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIEdTVF9FTEVNRU5U
X0VSUk9SKHNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXplZERlc2Ny
aXB0aW9uKCkudXRmOCgpLmRhdGEoKSksIChudWxscHRyKSk7CisgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc3JjLCAiUiV1OiBIYXZlIGZhaWx1cmU6ICVzIiwgbV9yZXF1ZXN0TnVtYmVyLCBlcnJv
ci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBHU1RfRUxF
TUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBGQUlMRUQsICgiUiV1OiAlcyIsIG1fcmVxdWVzdE51
bWJlciwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSwgKG51bGxw
dHIpKTsKICAgICB9CiAKLSAgICBzcmMtPnByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICBt
ZW1iZXJzLT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRp
b24ubm90aWZ5T25lKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6
OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKQogeworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3Ny
Yy5nZXQoKSk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAg
ICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tl
ZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CisgICAgaWYgKG1lbWJlcnMt
PnJlcXVlc3ROdW1iZXIgIT0gbV9yZXF1ZXN0TnVtYmVyKQorICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAocHJpdi0+aXNTZWVraW5nICYmICFwcml2LT5pc0ZsdXNoaW5nKQotICAgICAgICBwcml2
LT5pc1NlZWtpbmcgPSBmYWxzZTsKKyAgICBtZW1iZXJzLT5kb2VzSGF2ZUVPUyA9IHRydWU7Cisg
ICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9CiAKIGJvb2wgd2Vi
S2l0U3JjV291bGRUYWludE9yaWdpbihXZWJLaXRXZWJTcmMqIHNyYywgY29uc3QgU2VjdXJpdHlP
cmlnaW4mIG9yaWdpbikKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJz
Pjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKIAotICAgIGF1
dG8qIGNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCo+KHByaXYtPnJlc291cmNlLT5jbGllbnQoKSk7Cisg
ICAgYXV0byogY2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQgPSByZWludGVycHJldF9jYXN0
PENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Kj4obWVtYmVycy0+cmVzb3VyY2UtPmNsaWVu
dCgpKTsKICAgICBmb3IgKGF1dG8mIHJlc3BvbnNlT3JpZ2luIDogY2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQtPnNlY3VyaXR5T3JpZ2lucygpKSB7CiAgICAgICAgIGlmICghb3JpZ2luLmNh
bkFjY2VzcygqcmVzcG9uc2VPcmlnaW4pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgKaW5kZXggZjNkOThmYmVjOWI2NDIw
NWJkZmI5ZTU0OTdhZTUwMjEzZTg0MTA4MS4uYjZjNTJkYTJjZjMyOThhNmJmNzcyNTNkOTU4MWVk
NjE0NGQyYThjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaApA
QCAtMzksMTcgKzM5LDE1IEBAIEdfQkVHSU5fREVDTFMKIAogI2RlZmluZSBXRUJLSVRfV0VCX1NS
Q19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUgICJ3ZWJraXQubWVkaWEtcGxheWVyIgogCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViU3JjICAgICAgICBXZWJLaXRXZWJTcmM7Ci10eXBlZGVmIHN0
cnVjdCBfV2ViS2l0V2ViU3JjQ2xhc3MgICBXZWJLaXRXZWJTcmNDbGFzczsKLXR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIFdlYktpdFdlYlNyY1ByaXZhdGU7CitzdHJ1Y3QgV2Vi
S2l0V2ViU3JjUHJpdmF0ZTsKIAotc3RydWN0IF9XZWJLaXRXZWJTcmMgeworc3RydWN0IFdlYktp
dFdlYlNyYyB7CiAgICAgR3N0UHVzaFNyYyBwYXJlbnQ7CiAKICAgICBXZWJLaXRXZWJTcmNQcml2
YXRlICpwcml2OwogfTsKIAotc3RydWN0IF9XZWJLaXRXZWJTcmNDbGFzcyB7CitzdHJ1Y3QgV2Vi
S2l0V2ViU3JjQ2xhc3MgewogICAgIEdzdFB1c2hTcmNDbGFzcyBwYXJlbnRDbGFzczsKIH07CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMDI2YjQ0NWE4MDZkYWM1OWE0YjMzODFhM2Y5ZDE5Yzc0MGU2Zjk0Li5iZmViN2Jm
MzhkZTViZTA0YTA5MjYyYTQ5ZGEyZTA2NzEwZDg0YTk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMjAtMDQtMDkgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHU3RyZWFtZXJdIFJld29yayBXZWJLaXRXZWJTcmMgdGhyZWFkaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk4MTEKKworICAgICAg
ICBBIHRlc3QgaW1wcm92ZWQgaXRzIHN0YXR1cyBpbiBUZXN0RXhwZWN0YXRpb25zIGZyb20gdGhl
IGNoYW5nZXMgbWFkZQorICAgICAgICBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjAtMDMtMjYgIEFsaWNpYSBCb3lhIEdhcmPD
rWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGRlYnVnIG11
bHRpbWVkaWEgZ2FyZGVuaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zCmluZGV4IGQ2MjkwYTc3NjBkMTdlNTBiODk2NzQyNGU1NzhlZDQ1MDk2YjIyYWQuLjMzMmJk
NmVhYjgzOGJmYzc3YTc2ZGYxNmQzMWM4M2Y4ZjFiZjhkODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMjc4LDggKzEyNzgsNiBAQCB3ZWJraXQub3Jn
L2IvMjA2NjU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFjYXB0dXJlLXN0
cmVhbXMvTWVkaWFTdAogd2Via2l0Lm9yZy9iLzIwNjY1NiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL21lZGlhY2FwdHVyZS1zdHJlYW1zL01lZGlhU3RyZWFtVHJhY2stZ2V0U2V0dGlu
Z3MuaHR0cHMuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIwNjY1NiBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhY2FwdHVyZS1zdHJlYW1zL01lZGlhU3RyZWFtLU1l
ZGlhRWxlbWVudC1wcmVsb2FkLW5vbmUtbWFudWFsLmh0dHBzLmh0bWwgWyBDcmFzaCBGYWlsdXJl
IFBhc3MgXQogCi13ZWJraXQub3JnL2IvMjA2NjU3IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC90aGUtdmlkZW8tZWxlbWVudC9y
ZXNpemUtZHVyaW5nLXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KLQogIyBMRkMgKExheW91dEZv
cm1hdGluZ0NvbnRleHQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuCiBmYXN0L2xheW91dGZvcm1h
dHRpbmdjb250ZXh0LyBbIFNraXAgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397449</attachid>
            <date>2020-04-24 06:26:08 -0700</date>
            <delta_ts>2020-04-27 07:03:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210284-20200424152606.patch</filename>
            <type>text/plain</type>
            <size>70746</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQ2Y2NkOWJmNTYzMDBj
YjkzZDk2NWI4NDg0ODA1MDQ1ZTcyY2E0ZS4uYWY5ZDVjZGNlZmY1NWViNDExZmE0OGI4MGE4MDNi
MTk2MDBhYmU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA0LTA5ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBSZXdvcmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0V2ViU3JjIGFzIGl0IGlzIGluIG1hc3RlciBo
YXMgYSBudW1iZXIgb2YgcmFjZSBjb25kaXRpb25zCisgICAgICAgIGxlYWRpbmcgdG8gb2NjYXNp
b25hbCBzdGFydmF0aW9uIChkdWUgdG8gY2FuY2VsbGluZyB0aGUgd3JvbmcgcmVxdWVzdCkKKyAg
ICAgICAgb3IgZGF0YSBjb3JydXB0aW9uIChkdWUgdG8gcHVzaGluZyBkYXRhIGZyb20gYSBjYW5j
ZWxsZWQgcmVxdWVzdCkuCisKKyAgICAgICAgVGhlIHRocmVhZGluZyBzaXR1YXRpb24gd2Fzbid0
IGVhc3kgdG8gZm9sbG93LCBhcyBpdCB3YXNuJ3QgY2xlYXIKKyAgICAgICAgYWNjZXNzIHRvIHdo
YXQgbWVtYmVycyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IHdoYXQgbXV0ZXgsIGluIHdoYXQKKyAg
ICAgICAgY2lyY3Vtc3RhbmNlcy4gQWxzbywgc29tZSBwYXJ0cyBvZiB0aGUgZGVzaWduIHdlcmUg
YWxzbyBpbnRyb2R1Y2luZworICAgICAgICBhZGRpY2lvbmFsIGNvbXBsZXhpdHksIHN1Y2ggYXMg
dGhlIGZpcnN0IHJlcXVlc3QgYmVpbmcgc2VudCBmcm9tIHRoZQorICAgICAgICBtYWluIHRocmVh
ZCB3aGVyZWFzIHRoZSByZXN0IHdlcmUgYmVpbmcgc2VudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhy
ZWFkCisgICAgICAgIG9yIGJhc2VzcmMgYXN5bmMgc3RhcnQuCisKKyAgICAgICAgSW4gcmVzcG9u
c2UsIHRoaXMgcGF0Y2ggcmV3b3JrcyBhbGwgdGhlIGxvY2tpbmcgaW4gV2ViS2l0V2ViU3JjIHRv
IHVzZQorICAgICAgICBXVEY6OkRhdGFNdXRleC4gVGhpcyBlbnN1cmVzIGFsbCBhY2Nlc3NlcyB0
byBpdHMgKG5vdyBleHBsaWNpdCkKKyAgICAgICAgcHJvdGVjdGVkIG1lbWJlcnMgYXJlIGxvY2tl
ZC4gVGhlIHR3byBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVzCisgICAgICAgIGhhdmUg
YmVlbiBzaW1wbGlmaWVkIGludG8gb25lLCBhcyB0aGVyZSB3YXMgbm8gb2J2aW91cyBuZWVkIG9y
IGJlbmVmaXQKKyAgICAgICAgZm9yIHR3byBvZiBlYWNoIGluIHRoaXMgY2FzZS4KKworICAgICAg
ICBSZXF1ZXN0cyBoYXZlIGJlZW4gbnVtYmVyZWQsIHdoaWNoIGFsbG93cyB0byBzYWZlbHkgYW5k
IGF0b21pY2FsbHkKKyAgICAgICAgaWdub3JlIHJlc3VsdHMgZnJvbSBjYW5jZWxsZWQgcmVxdWVz
dHMsIGF2b2lkaW5nIGRhdGEgY29ycnVwdGlvbgorICAgICAgICByYWNlcywgYW5kIG1ha2VzIGZv
bGxvd2luZyB0aGVtIGluIGRlYnVnIGxvZ3MgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgVGhlIGNv
bmRpdGlvbnMgZm9yIG1ha2luZyBhbmQgY2FuY2VsbGluZyByZXF1ZXN0cyBoYXZlIGJlZW4gc2lt
cGxpZmllZAorICAgICAgICB0byBhIHNpbXBsZXIgYW5kIHNhZmVyIG1vZGVsOiBUaGVyZSBpcyBh
dCBtb3N0IG9ubHkgb25lIGFjdGl2ZSByZXF1ZXN0CisgICAgICAgIGF0IGFueXRpbWUsIGZsdXNo
ZXMgY2FuY2VsIHRoZSByZXF1ZXN0LCBhbmQgdGhlIGZpcnN0IGNyZWF0ZSgpIGNhbGwKKyAgICAg
ICAgYWx3YXlzIG1ha2VzIHRoZSBuZXcgcmVxdWVzdCAoYm90aCBhdCBzdGFydHVwIGFuZCBhZnRl
ciBhIGZsdXNoKS4KKyAgICAgICAgRGVidWcgYXNzZXJ0cyBhbmQgbm90ZXMgYWJvdXQgdGhlIGZs
b3cgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgYmFzZXNyYworICAgICAgICBzZWVrcyBoYXZlIGJlZW4g
cHJvdmlkZWQuCisKKyAgICAgICAgQXMgdGhpcyBlZmZvcnQgbmVlZGVkIGEgcmV2aWV3IG9mIHRo
ZSBlbnRpcmUgV2ViS2l0V2ViU3JjLCBjbGVhbnVwcywKKyAgICAgICAgY29ycmVjdGlvbnMgYW5k
IGRvY3VtZW50YXRpb24gY29tbWVudHMgaGF2ZSBiZWVuIHByb3ZpZGVkIHdoZXJlCisgICAgICAg
IGFwcHJvcHJpYXRlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB2aXNpYmxl
IGJlaGF2aW9yIGNoYW5nZXMsIGp1c3Qgc3RhYmlsaXR5CisgICAgICAgIGltcHJvdmVtZW50cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJLaXRXZWJTcmNQcml2YXRlOjp+V2ViS2l0V2Vi
U3JjUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KToKKyAgICAg
ICAgKHdlYmtpdFdlYlNyY1Jlc2V0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NvbnN0cnVjdGVk
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdl
YlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldENvbnRleHQpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjU2VuZEV2ZW50KToKKyAgICAgICAgKHJlc3RhcnRMb2FkZXJJZk5l
ZWRlZCk6CisgICAgICAgIChzdG9wTG9hZGVySWZOZWVkZWQpOgorICAgICAgICAod2ViS2l0V2Vi
U3JjQ3JlYXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY01ha2VSZXF1ZXN0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAg
ICAod2ViS2l0V2ViU3JjR2V0U2l6ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNJc1NlZWthYmxl
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0RvU2Vlayk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNR
dWVyeSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNVbkxvY2spOgorICAgICAgICAod2ViS2l0V2Vi
U3JjVW5Mb2NrU3RvcCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAod2ViS2l0U3JjUGFzc2VkQ09S
U0FjY2Vzc0NoZWNrKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUpOgorICAgICAgICAoQ2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZCk6CisgICAgICAgIChDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKToKKyAgICAg
ICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAg
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
d2ViS2l0U3JjV291bGRUYWludE9yaWdpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oOgorCiAyMDIwLTA0LTIzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBnZXREaXNwbGF5TWVkaWEg
aXMgbm90IHJlc3BlY3RpbmcgYXNwZWN0IHJhdGlvIHdpdGggbWF4IGNvbnN0cmFpbnRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuaAppbmRleCBkOTQwZjhjYTBmOTUwZmY0MjQzZmU0NTYyOTRjYmYz
ZTQ4NTJkMzRlLi4xOTUwOWZlMWZkZjdjNjc0NzdiYjlhOGJiNjdiYmNiYmYxZTA1ZWRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgV2ViS2l0
VmlkZW9TaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyYyBXZWJLaXRXZWJTcmM7Citz
dHJ1Y3QgV2ViS2l0V2ViU3JjOwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHR5cGVkZWYgc3Ry
dWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcAppbmRleCBlOWZlYjIxMDBhN2VmNWY1YjEwYjg2M2E1NzU2ZDcw
NGMzN2M1NTJhLi43ZjdlMjQ4ZjkwYTQxMzFmNzgwZGYxZWE3MjczMGQzZDA3NWE3MDU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNl
YmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHlyaWdodCAoQykgMjAxMyBD
b2xsYWJvcmEgTHRkLgotICogIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICogIENv
cHlyaWdodCAoQykgMjAxOSwgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZE5vdGlmaWVyLmgiCiAj
aW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VM
b2FkZXIuaCIKICNpbmNsdWRlICJQb2xpY3lDaGVja2VyLmgiCkBAIC0zNCwxMSArMzMsMTQgQEAK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNs
dWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFNdXRleC5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvV1RGR1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgV1RGOjpEYXRhTXV0ZXg7CiAKIC8vIE5ldmVyIHBh
dXNlIGRvd25sb2FkIG9mIG1lZGlhIHJlc291cmNlcyBzbWFsbGVyIHRoYW4gMk1pQi4KICNkZWZp
bmUgU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUgMiAqIDEwMjQgKiAxMDI0CkBAIC01NSw3
ICs1Nyw3IEBAIGNsYXNzIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50IGZpbmFsIDogcHVi
bGljIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQpOwogcHVibGljOgotICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktp
dFdlYlNyYyosIFJlc291cmNlUmVxdWVzdCYmKTsKKyAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudChXZWJLaXRXZWJTcmMqLCBSZXNvdXJjZVJlcXVlc3QmJiwgdW5zaWduZWQgcmVxdWVz
dE51bWJlcik7CiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoKTsK
IAogICAgIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4mIHNl
Y3VyaXR5T3JpZ2lucygpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luczsgfQpAQCAtODAsNzMgKzgy
LDc5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBzX3JlZHVjZUJsb2Nr
c2l6ZUZhY3RvciB7IDAuNSB9OwogICAgIGludCBtX3JlZHVjZUJsb2Nrc2l6ZUNvdW50IHsgMCB9
OwogICAgIGludCBtX2luY3JlYXNlQmxvY2tzaXplQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQg
bV9yZXF1ZXN0TnVtYmVyOwogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NyYzsKICAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPj4gbV9vcmlnaW5zOwogfTsKIAotZW51bSBNYWluVGhyZWFkU291cmNlTm90
aWZpY2F0aW9uIHsKLSAgICBTdGFydCA9IDEgPDwgMCwKLSAgICBTdG9wID0gMSA8PCAxLAotICAg
IERpc3Bvc2UgPSAxIDw8IDIsCi19OwotCi1zdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewot
ICAgIH5fV2ViS2l0V2ViU3JjUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBpZiAobm90aWZpZXIg
JiYgbm90aWZpZXItPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbm90aWZpZXItPm5vdGlmeUFu
ZFdhaXQoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6RGlzcG9zZSwgWyZdIHsKLSAgICAg
ICAgICAgICAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogY2xp
ZW50ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQqPihyZXNvdXJj
ZS0+Y2xpZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpZW50LT5zZXRTb3VyY2VFbGVtZW50KG51bGxwdHIpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJlc291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGxvYWRlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIG5vdGlmaWVyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBub3Rp
ZmllciA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9CitzdHJ1Y3QgV2ViS2l0V2ViU3JjUHJp
dmF0ZSB7CisgICAgLy8gQ29uc3RhbnRzIGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb246
CisgICAgdW5zaWduZWQgbWluaW11bUJsb2Nrc2l6ZTsKIAorICAgIC8vIENvbmZpZ3VyYXRpb24g
b2YgdGhlIGVsZW1lbnQgKHByb3BlcnRpZXMgc2V0IGJ5IHRoZSB1c2VyIG9mIFdlYktpdFdlYlNy
Yyk6CisgICAgLy8gVGhleSBjYW4gb25seSBjaGFuZ2Ugd2hlbiBzdGF0ZSA8IFBBVVNFRC4KICAg
ICBDU3RyaW5nIG9yaWdpbmFsVVJJOwotICAgIENTdHJpbmcgcmVkaXJlY3RlZFVSSTsKICAgICBi
b29sIGtlZXBBbGl2ZTsKICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZXh0cmFIZWFkZXJz
OwogICAgIGJvb2wgY29tcHJlc3M7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gaHR0cE1ldGhvZDsK
LSAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwotICAgIFJlZlB0cjxQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VMb2FkZXI+IGxvYWRlcjsKLSAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291
cmNlPiByZXNvdXJjZTsKLSAgICBSZWZQdHI8TWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWRT
b3VyY2VOb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAgICBib29sIGRpZFBhc3NBY2Nlc3NDb250
cm9sQ2hlY2s7Ci0gICAgYm9vbCB3ZXJlSGVhZGVyc1JlY2VpdmVkOwotICAgIENvbmRpdGlvbiBo
ZWFkZXJzQ29uZGl0aW9uOwotICAgIExvY2sgcmVzcG9uc2VMb2NrOwotICAgIGJvb2wgd2FzUmVz
cG9uc2VSZWNlaXZlZDsKLSAgICBDb25kaXRpb24gcmVzcG9uc2VDb25kaXRpb247Ci0gICAgYm9v
bCBkb2VzSGF2ZUVPUzsKLSAgICBib29sIGlzRmx1c2hpbmcgeyBmYWxzZSB9OwotICAgIHVpbnQ2
NF90IHJlYWRQb3NpdGlvbjsKLSAgICB1aW50NjRfdCByZXF1ZXN0ZWRQb3NpdGlvbjsKLSAgICB1
aW50NjRfdCBzdG9wUG9zaXRpb247Ci0gICAgYm9vbCBpc0R1cmF0aW9uU2V0OwotICAgIGJvb2wg
aGF2ZVNpemU7Ci0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBib29sIGlzU2Vla2FibGU7Ci0gICAg
Ym9vbCBpc1NlZWtpbmc7Ci0gICAgYm9vbCB3YXNTZWVraW5nIHsgZmFsc2UgfTsKLSAgICB1bnNp
Z25lZCBtaW5pbXVtQmxvY2tzaXplOwotICAgIExvY2sgYWRhcHRlckxvY2s7Ci0gICAgQ29uZGl0
aW9uIGFkYXB0ZXJDb25kaXRpb247Ci0gICAgYm9vbCBpc0Rvd25sb2FkU3VzcGVuZGVkIHsgZmFs
c2UgfTsKLSAgICBHUmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7Ci0gICAgR1JlZlB0cjxHc3RF
dmVudD4gaHR0cEhlYWRlcnNFdmVudDsKLSAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaHR0
cEhlYWRlcnM7Ci0gICAgV2FsbFRpbWUgZG93bmxvYWRTdGFydFRpbWUgeyBXYWxsVGltZTo6bmFu
KCkgfTsKLSAgICB1aW50NjRfdCB0b3RhbERvd25sb2FkZWRCeXRlcyB7IDAgfTsKKworICAgIHN0
cnVjdCBTdHJlYW1pbmdNZW1iZXJzIHsKKyAgICAgICAgflN0cmVhbWluZ01lbWJlcnMoKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBCeSB0aGUgdGltZSB3ZSdyZSBkZXN0cm95aW5nIFdlYktp
dFdlYlNyY1ByaXZhdGUgdW5Mb2NrKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZXJl
Zm9yZSByZXNvdXJjZQorICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNs
ZWFyZWQuCisgICAgICAgICAgICBBU1NFUlQoIXJlc291cmNlKTsKKyAgICAgICAgICAgIC8vIFJl
c291cmNlTG9hZGVyIGlzIG5vdCB0aHJlYWQtc2FmZS4gSXQncyBub3QgZXZlbiBUaHJlYWRTYWZl
UmVmQ291bnRlZC4gVGhlcmVmb3JlLCB0byBiZSBzYWZlLCB3ZSB3YW50IHRoZQorICAgICAgICAg
ICAgLy8gdW5yZWYgdG8gaGFwcGVuIGluIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgIGlm
IChsb2FkZXIpCisgICAgICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtsb2Fk
ZXIgPSBXVEZNb3ZlKGxvYWRlcildIHsgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQcm9w
ZXJ0aWVzIGluaXRpYWxseSBlbXB0eSwgYnV0IHNldCBvbmNlIHRoZSBmaXJzdCBIVFRQIHJlc3Bv
bnNlIGFycml2ZXM6CisgICAgICAgIGJvb2wgd2FzUmVzcG9uc2VSZWNlaXZlZDsKKyAgICAgICAg
Q1N0cmluZyByZWRpcmVjdGVkVVJJOworICAgICAgICBib29sIGRpZFBhc3NBY2Nlc3NDb250cm9s
Q2hlY2s7CisgICAgICAgIGJvb2wgaGF2ZVNpemU7CisgICAgICAgIHVpbnQ2NF90IHNpemU7Cisg
ICAgICAgIGJvb2wgaXNTZWVrYWJsZTsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBwZW5kaW5n
Q2FwczsKKyAgICAgICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBwZW5kaW5nSHR0cEhlYWRlcnNNZXNz
YWdlOyAvLyBTZXQgZnJvbSBNVCwgc2VudCBmcm9tIGNyZWF0ZSgpLgorICAgICAgICBHUmVmUHRy
PEdzdEV2ZW50PiBwZW5kaW5nSHR0cEhlYWRlcnNFdmVudDsgLy8gU2V0IGZyb20gTVQsIHNlbnQg
ZnJvbSBjcmVhdGUoKS4KKworICAgICAgICAvLyBQcm9wZXJ0aWVzIHVwZGF0ZWQgd2l0aCBldmVy
eSBkb3dubG9hZGVkIGRhdGEgYmxvY2s6CisgICAgICAgIFdhbGxUaW1lIGRvd25sb2FkU3RhcnRU
aW1lIHsgV2FsbFRpbWU6Om5hbigpIH07CisgICAgICAgIHVpbnQ2NF90IHRvdGFsRG93bmxvYWRl
ZEJ5dGVzIHsgMCB9OworICAgICAgICBib29sIGRvZXNIYXZlRU9TOyAvLyBTZXQgYm90aCB3aGVu
IHdlIHJlYWNoIHN0b3BQb3NpdGlvbiBhbmQgb24gZXJyb3JzIChpbmNsdWRpbmcgb24gcmVzcG9u
c2VSZWNlaXZlZCkuCisgICAgICAgIGJvb2wgaXNEb3dubG9hZFN1c3BlbmRlZCB7IGZhbHNlIH07
IC8vIFNldCB0byB0cnVlIGZyb20gdGhlIG5ldHdvcmsgaGFuZGxlciB3aGVuIHRoZSBoaWdoIHdh
dGVyIGxldmVsIGlzIHJlYWNoZWQuCisKKyAgICAgICAgLy8gT2J0YWluZWQgYnkgbWVhbnMgb2Yg
R3N0Q29udGV4dCBxdWVyaWVzIGJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IEhUVFAgcmVxdWVzdC4K
KyAgICAgICAgLy8gV2UgdXNlIGl0IGZvciBnZXR0aW5nIGFjY2VzcyB0byBXZWJLaXQgbmV0d29y
a2luZyBvYmplY3RzOiB0aGUgUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyIGZhY3RvcnkgW2Ny
ZWF0ZVJlc291cmNlTG9hZGVyKCldCisgICAgICAgIC8vIGFuZCB0aGUgcGxheWVyIEhUVFAgcmVm
ZXJyZXIgc3RyaW5nLgorICAgICAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOworCisg
ICAgICAgIC8vIFByb3BlcnRpZXMgdXNlZCBmb3IgR1N0cmVhbWVyIGRhdGEtZmxvdyBpbiBjcmVh
dGUoKS4KKyAgICAgICAgYm9vbCBpc0ZsdXNoaW5nIHsgZmFsc2UgfTsKKyAgICAgICAgQ29uZGl0
aW9uIHJlc3BvbnNlQ29uZGl0aW9uOyAvLyBNdXN0IGJlIHNpZ25hbGVkIGFmdGVyIGFueSB1cGRh
dGVzIG9uIEhUVFAgcmVxdWVzdHMsIGFuZCB3aGVuIGZsdXNoaW5nLgorICAgICAgICBHUmVmUHRy
PEdzdEFkYXB0ZXI+IGFkYXB0ZXI7CisgICAgICAgIGJvb2wgaXNEdXJhdGlvblNldDsKKyAgICAg
ICAgdWludDY0X3QgcmVhZFBvc2l0aW9uOworCisgICAgICAgIC8vIFByb3BlcnRpZXMgb25seSBz
ZXQgZHVyaW5nIHNlZWsuCisgICAgICAgIC8vIGJhc2VzcmMgZW5zdXJlcyB0aGV5IGNhbid0IGNo
YW5nZSBkdXJpbmcgYSBjcmVhdGUoKSBjYWxsIGJ5IHRha2luZyB0aGUgU1RSRUFNSU5HX0xPQ0su
CisgICAgICAgIC8vIChBbiBpbml0aWFsIHNlZWsgaXMgYWxzbyBndWFyYW50ZWVkIGJ5IGJhc2Vz
cmMuKQorICAgICAgICB1bnNpZ25lZCByZXF1ZXN0TnVtYmVyIHsgMSB9OworICAgICAgICB1aW50
NjRfdCByZXF1ZXN0ZWRQb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgdWludDY0X3Qgc3RvcFBvc2l0
aW9uIHsgVUlOVDY0X01BWCB9OworCisgICAgICAgIGJvb2wgaXNSZXF1ZXN0UGVuZGluZyB7IHRy
dWUgfTsKKworICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyPiBsb2Fk
ZXI7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IHJlc291cmNlOworICAg
IH07CisgICAgRGF0YU11dGV4PFN0cmVhbWluZ01lbWJlcnM+IGRhdGFNdXRleDsKIH07CiAKIGVu
dW0gewpAQCAtMTY5LDkgKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1VyaUhhbmRs
ZXJJbml0KGdwb2ludGVyIGdJZmFjZSwgZ3BvaW50ZXIgaWZhY2VEYXRhKTsKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdl
YlNyY1NldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlELCBjb25zdCBHVmFsdWUq
LCBHUGFyYW1TcGVjKik7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2Jq
ZWN0KiwgZ3VpbnQgcHJvcGVydHlJRCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOwotc3RhdGljIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBH
c3RTdGF0ZUNoYW5nZSk7CiBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJLaXRXZWJTcmNDcmVhdGUo
R3N0UHVzaFNyYyosIEdzdEJ1ZmZlcioqKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNN
YWtlUmVxdWVzdChHc3RCYXNlU3JjKiwgYm9vbCk7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNN
YWtlUmVxdWVzdChXZWJLaXRXZWJTcmMqLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6
U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImKTsKIHN0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRXZWJTcmNTdGFydChHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
U3RvcChHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShH
c3RCYXNlU3JjKiwgZ3VpbnQ2NCogc2l6ZSk7CkBAIC0xODEsOCArMTg4LDggQEAgc3RhdGljIGdi
b29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5KEdzdEJhc2VTcmMqLCBHc3RRdWVyeSopOwogc3RhdGlj
IGdib29sZWFuIHdlYktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjVW5Mb2NrU3RvcChHc3RCYXNlU3JjKik7CiBzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNTZXRDb250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7Ci1zdGF0aWMgdm9p
ZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKik7Ci1zdGF0aWMgdm9pZCBzdG9w
TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKik7CitzdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVy
SWZOZWVkZWQoV2ViS2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJik7CitzdGF0aWMgdm9pZCBzdG9wTG9hZGVy
SWZOZWVkZWQoV2ViS2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJik7CiAKICNkZWZpbmUgd2Via2l0X3dlYl9z
cmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwogV0VCS0lUX0RFRklORV9UWVBFX1dJVEhfQ09E
RShXZWJLaXRXZWJTcmMsIHdlYmtpdF93ZWJfc3JjLCBHU1RfVFlQRV9QVVNIX1NSQywKQEAgLTIz
MCw3ICsyMzcsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KFdlYktp
dFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibWV0aG9k
IiwgIm1ldGhvZCIsICJUaGUgSFRUUCBtZXRob2QgdG8gdXNlIChkZWZhdWx0OiBHRVQpIiwKICAg
ICAgICAgICAgIG51bGxwdHIsIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURX
UklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7CiAKLSAgICBla2xhc3MtPmNoYW5nZV9z
dGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKTsKICAgICBl
a2xhc3MtPnNldF9jb250ZXh0ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2ViU3JjU2V0Q29u
dGV4dCk7CiAKICAgICBHc3RCYXNlU3JjQ2xhc3MqIGJhc2VTcmNDbGFzcyA9IEdTVF9CQVNFX1NS
Q19DTEFTUyhrbGFzcyk7CkBAIC0yNDcsMTggKzI1Myw0MCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3NyY19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICBwdXNoU3Jj
Q2xhc3MtPmNyZWF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NyZWF0ZSk7CiB9
CiAKLXN0YXRpYyB2b2lkIHdlYmtpdFdlYlNyY1Jlc2V0KFdlYktpdFdlYlNyYyogc3JjKQotewot
ICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CitlbnVtIGNsYXNzIFJl
c2V0VHlwZSB7CisgICAgU29mdCwKKyAgICBIYXJkCit9OwogCitzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJTcmNSZXNldChXZWJLaXRXZWJTcmMqIHNyYywgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZh
dGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJiBtZW1iZXJzLCBSZXNldFR5cGUg
cmVzZXRUeXBlKQorewogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzZXR0aW5nIGludGVy
bmFsIHN0YXRlIik7Ci0gICAgcHJpdi0+aGF2ZVNpemUgPSBmYWxzZTsKLSAgICBwcml2LT53ZXJl
SGVhZGVyc1JlY2VpdmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNTZWVrYWJsZSA9IGZhbHNlOwot
ICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IDA7Ci0gICAgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24g
PSAwOwotICAgIHByaXYtPnN0b3BQb3NpdGlvbiA9IC0xOwotICAgIHByaXYtPnNpemUgPSAwOwor
ICAgIGdzdF9hZGFwdGVyX2NsZWFyKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOworICAgIG1lbWJl
cnMtPmlzUmVxdWVzdFBlbmRpbmcgPSB0cnVlOworCisgICAgLy8gUmVzZXQgcmVxdWVzdCBzdGF0
ZS4gQW55IHByZXZpb3VzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsbGVkIGF0IHRoaXMgcG9pbnQu
CisgICAgbWVtYmVycy0+d2FzUmVzcG9uc2VSZWNlaXZlZCA9IGZhbHNlOworICAgIG1lbWJlcnMt
PmRvZXNIYXZlRU9TID0gZmFsc2U7CisgICAgbWVtYmVycy0+ZG93bmxvYWRTdGFydFRpbWUgPSBX
YWxsVGltZTo6bmFuKCk7CisgICAgbWVtYmVycy0+dG90YWxEb3dubG9hZGVkQnl0ZXMgPSAwOyAv
LyBSZXNldHRlZCBmb3IgZWFjaCByZXF1ZXN0LCB1c2VkIHRvIGVzdGltYXRlIGRvd25sb2FkIHNw
ZWVkLgorICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UgPSBudWxscHRyOwor
ICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc0V2ZW50ID0gbnVsbHB0cjsKKworICAgIC8v
IEFmdGVyIGEgZmx1c2gsIHdlIGhhdmUgdG8gZW1pdCBhIHNlZ21lbnQgYWdhaW4uCisgICAgbWVt
YmVycy0+aXNEdXJhdGlvblNldCA9IGZhbHNlOworCisgICAgLy8gSGFyZCByZXNldCBpcyBkb25l
IGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuCisgICAgLy8gU29m
dCByZXNldCBpcyBkb25lIGR1cmluZyBmbHVzaGVzLiBJbiB0aGVzZSwgd2UgcHJlc2VydmUgdGhl
IHNlZWsgdGFyZ2V0LgorICAgIGlmIChyZXNldFR5cGUgPT0gUmVzZXRUeXBlOjpIYXJkKSB7Cisg
ICAgICAgIG1lbWJlcnMtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2sgPSBmYWxzZTsKKyAgICAg
ICAgbWVtYmVycy0+cmVkaXJlY3RlZFVSSSA9IENTdHJpbmcoKTsKKyAgICAgICAgbWVtYmVycy0+
aXNTZWVrYWJsZSA9IGZhbHNlOworICAgICAgICBtZW1iZXJzLT5oYXZlU2l6ZSA9IGZhbHNlOwor
ICAgICAgICBtZW1iZXJzLT5zaXplID0gMDsKKyAgICAgICAgbWVtYmVycy0+cmVxdWVzdGVkUG9z
aXRpb24gPSAwOworICAgICAgICBtZW1iZXJzLT5zdG9wUG9zaXRpb24gPSBVSU5UNjRfTUFYOwor
ICAgICAgICBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPSBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlv
bjsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0NvbnN0cnVjdGVkKEdPYmpl
Y3QqIG9iamVjdCkKQEAgLTI2OCwxMyArMjk2LDEzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdF
QktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKIAotICAgIHByaXYtPm5vdGlmaWVyID0gTWFpblRocmVhZE5vdGlmaWVyPE1haW5U
aHJlYWRTb3VyY2VOb3RpZmljYXRpb24+OjpjcmVhdGUoKTsKLSAgICBwcml2LT5hZGFwdGVyID0g
YWRvcHRHUmVmKGdzdF9hZGFwdGVyX25ldygpKTsKICAgICBwcml2LT5taW5pbXVtQmxvY2tzaXpl
ID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKSk7CiAK
LSAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMpOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQ
cml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRh
dGFNdXRleCk7CisgICAgbWVtYmVycy0+YWRhcHRlciA9IGFkb3B0R1JlZihnc3RfYWRhcHRlcl9u
ZXcoKSk7CisgICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNldFR5cGU6Okhh
cmQpOworCiAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9hdXRvbWF0aWNfZW9zKEdTVF9CQVNFX1NSQ19D
QVNUKHNyYyksIEZBTFNFKTsKLSAgICBnc3RfYmFzZV9zcmNfc2V0X2FzeW5jKEdTVF9CQVNFX1NS
Q19DQVNUKHNyYyksIFRSVUUpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTZXRQcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCkBAIC0zMTQsOSArMzQyLDExIEBAIHN0YXRpYyB2b2lkIHdlYktp
dFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUq
IHZhbHVlCiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgUFJPUF9SRVNPTFZFRF9MT0NBVElPTjoKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5n
KHZhbHVlLCBwcml2LT5yZWRpcmVjdGVkVVJJLmlzTnVsbCgpID8gcHJpdi0+b3JpZ2luYWxVUkku
ZGF0YSgpIDogcHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCkpOworICAgIGNhc2UgUFJPUF9SRVNP
TFZFRF9MT0NBVElPTjogeworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6
U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5kYXRhTXV0ZXgp
OworICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIG1lbWJlcnMtPnJlZGlyZWN0ZWRV
UkkuaXNOdWxsKCkgPyBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkgOiBtZW1iZXJzLT5yZWRpcmVj
dGVkVVJJLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFBST1BfS0VF
UF9BTElWRToKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+a2VlcEFs
aXZlKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNDMsMjAyICszNzMsMTk4IEBAIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY1NldENvbnRleHQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0Q29udGV4dCog
Y29udGV4dCkKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImNvbnRleHQgdHlwZTogJXMiLCBn
c3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlKGNvbnRleHQpKTsKICAgICBpZiAoZ3N0X2NvbnRl
eHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVY
VF9UWVBFX05BTUUpKSB7CiAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0
dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAicGxheWVy
Iik7Ci0gICAgICAgIHByaXYtPnBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXIq
PihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIERhdGFNdXRleDxXZWJLaXRX
ZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHBy
aXYtPmRhdGFNdXRleCk7CisgICAgICAgIG1lbWJlcnMtPnBsYXllciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TWVkaWFQbGF5ZXIqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CiAgICAgfQogICAg
IEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcyktPnNldF9jb250ZXh0KGVsZW1lbnQsIGNv
bnRleHQpOwogfQogCi1zdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2Vi
U3JjKiBzcmMpCitzdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3Jj
KiBzcmMsIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6
TG9ja2VkV3JhcHBlciYgbWVtYmVycykKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKCFwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkKSB7Cisg
ICAgaWYgKCFtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSB7CiAgICAgICAgIEdTVF9UUkFD
RV9PQkpFQ1Qoc3JjLCAiZG93bmxvYWQgYWxyZWFkeSBhY3RpdmUiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiaXMgZG93bmxvYWQgc3VzcGVu
ZGVkICVzLCBkb2VzIGhhdmUgRU9TICVzLCBkb2VzIGhhdmUgc2l6ZSAlcywgaXMgc2Vla2FibGUg
JXMsIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIChtaW4gJXUpIiwgYm9vbEZv
clByaW50aW5nKHByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQpLCBib29sRm9yUHJpbnRpbmcocHJp
di0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aGF2ZVNpemUpCi0gICAgICAg
ICwgYm9vbEZvclByaW50aW5nKHByaXYtPmlzU2Vla2FibGUpLCBwcml2LT5zaXplLCBTTUFMTF9N
RURJQV9SRVNPVVJDRV9NQVhfU0laRSk7Ci0gICAgaWYgKHByaXYtPmRvZXNIYXZlRU9TIHx8ICFw
cml2LT5oYXZlU2l6ZSB8fCAhcHJpdi0+aXNTZWVrYWJsZSB8fCBwcml2LT5zaXplIDw9IFNNQUxM
X01FRElBX1JFU09VUkNFX01BWF9TSVpFKSB7CisgICAgICAgICIgKG1pbiAldSkiLCBib29sRm9y
UHJpbnRpbmcobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQcmludGluZyht
ZW1iZXJzLT5kb2VzSGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5oYXZlU2l6ZSkK
KyAgICAgICAgLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNTZWVrYWJsZSksIG1lbWJlcnMt
PnNpemUsIFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFKTsKKyAgICBpZiAobWVtYmVycy0+
ZG9lc0hhdmVFT1MgfHwgIW1lbWJlcnMtPmhhdmVTaXplIHx8ICFtZW1iZXJzLT5pc1NlZWthYmxl
IHx8IG1lbWJlcnMtPnNpemUgPD0gU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUpIHsKICAg
ICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJkb3dubG9hZCBjYW5ub3QgYmUgc3RvcHBlZC9y
ZXN0YXJ0ZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBHU1RfVFJBQ0VfT0JKRUNU
KHNyYywgInJlYWQgcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBzdGF0ZSAlcyIsIHBy
aXYtPnJlYWRQb3NpdGlvbiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NUX1NUQVRFKHNy
YykpKTsKLSAgICBpZiAoIXByaXYtPnJlYWRQb3NpdGlvbiB8fCBwcml2LT5yZWFkUG9zaXRpb24g
PT0gcHJpdi0+c2l6ZSB8fCBHU1RfU1RBVEUoc3JjKSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInJlYWQgcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1B
VCAiLCBzdGF0ZSAlcyIsIG1lbWJlcnMtPnJlYWRQb3NpdGlvbiwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUoR1NUX1NUQVRFKHNyYykpKTsKKyAgICBpZiAoIW1lbWJlcnMtPnJlYWRQb3NpdGlv
biB8fCBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPT0gbWVtYmVycy0+c2l6ZSB8fCBHU1RfU1RBVEUo
c3JjKSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMs
ICJjYW4ndCByZXN0YXJ0IGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIu
Z2V0KCkpOwotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSAlemQgKG1pbiAl
MS4wZikiLCBxdWV1ZVNpemUKLSAgICAgICAgLCBwcml2LT5zaXplICogSElHSF9RVUVVRV9GQUNU
T1JfVEhSRVNIT0xEICogTE9XX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpOworICAgIHNpemVfdCBx
dWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSk7
CisgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJxdWV1ZSBzaXplICV6dSAobWluICUxLjBmKSIs
IHF1ZXVlU2l6ZQorICAgICAgICAsIG1lbWJlcnMtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9U
SFJFU0hPTEQgKiBMT1dfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CiAKLSAgICBpZiAocXVldWVT
aXplID49IHByaXYtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQgKiBMT1dfUVVF
VUVfRkFDVE9SX1RIUkVTSE9MRCkgeworICAgIGlmIChxdWV1ZVNpemUgPj0gbWVtYmVycy0+c2l6
ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCAqIExPV19RVUVVRV9GQUNUT1JfVEhSRVNI
T0xEKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSBhYm92ZSBs
b3cgd2F0ZXJtYXJrLCBub3QgcmVzdGFydGluZyBkb3dubG9hZCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJyZXN0YXJ0aW5nIGRvd25sb2Fk
Iik7Ci0gICAgcHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCA9IGZhbHNlOwotICAgIHdlYktpdFdl
YlNyY01ha2VSZXF1ZXN0KEdTVF9CQVNFX1NSQ19DQVNUKHNyYyksIGZhbHNlKTsKKyAgICBtZW1i
ZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkID0gZmFsc2U7CisgICAgbWVtYmVycy0+cmVxdWVzdE51
bWJlcisrOworICAgIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uID0gbWVtYmVycy0+cmVhZFBv
c2l0aW9uOworICAgIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KHNyYywgbWVtYmVycyk7CiB9CiAK
IAotc3RhdGljIHZvaWQgc3RvcExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyogc3JjKQorc3Rh
dGljIHZvaWQgc3RvcExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyogc3JjLCBEYXRhTXV0ZXg8
V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImIG1l
bWJlcnMpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKHByaXYtPmlzRG93bmxvYWRTdXNw
ZW5kZWQpIHsKKyAgICBpZiAobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCkgewogICAgICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImRvd25sb2FkIGFscmVhZHkgc3VzcGVuZGVkIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImlzIGRv
d25sb2FkIHN1c3BlbmRlZCAlcywgZG9lcyBoYXZlIHNpemUgJXMsIGlzIHNlZWthYmxlICVzLCBz
aXplICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAobWluICV1KSIKLSAgICAgICAgLCBib29sRm9yUHJp
bnRpbmcocHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQcmludGluZyhwcml2LT5o
YXZlU2l6ZSksIGJvb2xGb3JQcmludGluZyhwcml2LT5pc1NlZWthYmxlKSwgcHJpdi0+c2l6ZQor
ICAgICAgICAsIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSwg
Ym9vbEZvclByaW50aW5nKG1lbWJlcnMtPmhhdmVTaXplKSwgYm9vbEZvclByaW50aW5nKG1lbWJl
cnMtPmlzU2Vla2FibGUpLCBtZW1iZXJzLT5zaXplCiAgICAgICAgICwgU01BTExfTUVESUFfUkVT
T1VSQ0VfTUFYX1NJWkUpOwotICAgIGlmICghcHJpdi0+aGF2ZVNpemUgfHwgIXByaXYtPmlzU2Vl
a2FibGUgfHwgcHJpdi0+c2l6ZSA8PSBTTUFMTF9NRURJQV9SRVNPVVJDRV9NQVhfU0laRSkgewor
ICAgIGlmICghbWVtYmVycy0+aXNTZWVrYWJsZSB8fCBtZW1iZXJzLT5zaXplIDw9IFNNQUxMX01F
RElBX1JFU09VUkNFX01BWF9TSVpFKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAi
ZG93bmxvYWQgY2Fubm90IGJlIHN0b3BwZWQvcmVzdGFydGVkIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHBy
aXYtPmFkYXB0ZXIuZ2V0KCkpOwotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6
ZSAlemQgKG1heCAlMS4wZikiLCBxdWV1ZVNpemUsIHByaXYtPnNpemUgKiBISUdIX1FVRVVFX0ZB
Q1RPUl9USFJFU0hPTEQpOwotICAgIGlmIChxdWV1ZVNpemUgPD0gcHJpdi0+c2l6ZSAqIEhJR0hf
UVVFVUVfRkFDVE9SX1RIUkVTSE9MRCkgeworICAgIHNpemVfdCBxdWV1ZVNpemUgPSBnc3RfYWRh
cHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSk7CisgICAgR1NUX1RSQUNFX09C
SkVDVChzcmMsICJxdWV1ZSBzaXplICV6dSAobWF4ICUxLjBmKSIsIHF1ZXVlU2l6ZSwgbWVtYmVy
cy0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CisgICAgaWYgKHF1ZXVlU2l6
ZSA8PSBtZW1iZXJzLT5zaXplICogSElHSF9RVUVVRV9GQUNUT1JfVEhSRVNIT0xEKSB7CiAgICAg
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSB1bmRlciBoaWdoIHdhdGVybWFy
aywgbm90IHN0b3BwaW5nIGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgInN0b3BwaW5nIGRvd25sb2FkIik7Ci0gICAgcHJpdi0+
aXNEb3dubG9hZFN1c3BlbmRlZCA9IHRydWU7Ci0gICAgcHJpdi0+cmVzb3VyY2UtPnN0b3AoKTsK
KyAgICBpZiAobWVtYmVycy0+cmVhZFBvc2l0aW9uID09IG1lbWJlcnMtPnNpemUpIHsKKyAgICAg
ICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJqdXN0IGRvd25sb2FkZWQgdGhlIGxhc3QgY2h1bmsg
aW4gdGhlIGZpbGUsIGxvYWRGaW5pc2hlZCgpIGlzIGFib3V0IHRvIGJlIGNhbGxlZCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSJXU6IHN0
b3BwaW5nIGRvd25sb2FkIiwgbWVtYmVycy0+cmVxdWVzdE51bWJlcik7CisgICAgbWVtYmVycy0+
aXNEb3dubG9hZFN1c3BlbmRlZCA9IHRydWU7CisgICAgbWVtYmVycy0+cmVzb3VyY2UtPnN0b3Ao
KTsKIH0KIAogc3RhdGljIEdzdEZsb3dSZXR1cm4gd2ViS2l0V2ViU3JjQ3JlYXRlKEdzdFB1c2hT
cmMqIHB1c2hTcmMsIEdzdEJ1ZmZlcioqIGJ1ZmZlcikKIHsKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1QocHVz
aFNyYyk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsK
ICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIERhdGFNdXRl
eDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBt
ZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7CisKKyAgICAvLyBXZSBuZWVkIG1lbWJlcnMtPnBsYXll
ciB0byBtYWtlIHJlcXVlc3RzLiBUaGVyZSBhcmUgdHdvIG1lY2hhbmlzbXMgZm9yIHRoaXMuCisg
ICAgLy8KKyAgICAvLyAxKSB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcigpIGlzIGNhbGxlZCBi
eSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgYnkgbWVhbnMgb2YgaG9va2luZyBwbGF5Ymlu
J3MKKyAgICAvLyAgICAic291cmNlLXNldHVwIiBldmVudC4gVGhpcyBkb2Vzbid0IHdvcmsgZm9y
IGFkZGl0aW9uYWwgV2ViS2l0V2ViU3JjIGVsZW1lbnRzIGNyZWF0ZWQgYnkgYWRhcHRpdmVkZW11
eC4KKyAgICAvLworICAgIC8vIDIpIEEgR3N0Q29udGV4dCBxdWVyeSBtYWRlIGhlcmUuIEJlY2F1
c2Ugb2YgYSBidWcsIHRoaXMgb25seSB3b3JrcyBpbiBHU3RyZWFtZXIgPj0gMS4xMi4KKyAgICAv
LworICAgIC8vIEFzIGEgY29tcGF0aWJpbGl0eSB3b3JrYXJvdW5kLCB0aGUgaHR0cDogVVJJIHBy
b3RvY29sIGlzIG9ubHkgcmVnaXN0ZXJlZCBmb3IgZ3N0Pj0xLjEyOyBvdGhlcndpc2UgdXNpbmcK
KyAgICAvLyB3ZWJraXQraHR0cDosIHdoaWNoIGlzIHVzZWQgYnkgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyIGJ1dCBub3QgYnkgYWRhcHRpdmVkZW11eCdzIGFkZGl0aW9uYWwgc291cmNlCisg
ICAgLy8gZWxlbWVudHMsIHRoZXJlZm9yZSB1c2luZyBzb3VwaHR0cHNyYyBpbnN0ZWFkIGFuZCBu
b3Qgcm91dGluZyB0cmFmZmljIHRocm91Z2ggdGhlIE5ldHdvcmtQcm9jZXNzLgorICAgIGlmICh3
ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDApICYmICFtZW1iZXJzLT5wbGF5ZXIpIHsKKyAg
ICAgICAgbWVtYmVycy5ydW5VbmxvY2tlZChbc3JjLCBiYXNlU3JjXSgpIHsKKyAgICAgICAgICAg
IEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfY29udGV4
dChXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUpKTsKKyAgICAgICAgICAg
IGlmIChnc3RfcGFkX3BlZXJfcXVlcnkoR1NUX0JBU0VfU1JDX1BBRChiYXNlU3JjKSwgcXVlcnku
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgR3N0Q29udGV4dCogY29udGV4dDsKKworICAgICAg
ICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb250ZXh0KHF1ZXJ5LmdldCgpLCAmY29udGV4dCk7
CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlRfQ0FT
VChzcmMpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdz
dF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9tZXNzYWdl
X25ld19uZWVkX2NvbnRleHQoR1NUX09CSkVDVF9DQVNUKHNyYyksIFdFQktJVF9XRUJfU1JDX1BM
QVlFUl9DT05URVhUX1RZUEVfTkFNRSkpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKG1lbWJl
cnMtPmlzRmx1c2hpbmcpCisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKG1lbWJlcnMtPnBsYXllcik7CiAKLSAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNyYywgInJlYWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiByZXF1
ZXN0ZWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnJlYWRQb3NpdGlvbiwg
cHJpdi0+cmVxdWVzdGVkUG9zaXRpb24pOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicmVh
ZFBvc2l0aW9uID0gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHJlcXVlc3RlZFBvc2l0aW9uID0gJSIg
R19HVUlOVDY0X0ZPUk1BVCwgbWVtYmVycy0+cmVhZFBvc2l0aW9uLCBtZW1iZXJzLT5yZXF1ZXN0
ZWRQb3NpdGlvbik7CiAKLSAgICBpZiAocHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gIT0gcHJpdi0+
cmVhZFBvc2l0aW9uKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgYWRhcHRl
ckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlNlZWtpbmcsIGZsdXNoaW5nIGFkYXB0ZXIiKTsKLSAgICAgICAgICAgIGdzdF9hZGFw
dGVyX2NsZWFyKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQ2
NF90IHJlcXVlc3RlZFBvc2l0aW9uID0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247Ci0gICAgICAg
IHdlYktpdFdlYlNyY1N0b3AoYmFzZVNyYyk7Ci0gICAgICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0
aW9uID0gcmVxdWVzdGVkUG9zaXRpb247Ci0gICAgICAgIC8vIERvIG5vdCBub3RpZnkgYXN5bmMt
Y29tcGxldGlvbiwgaW4gc2Vla2luZyBmbG93cywgd2Ugd2lsbAotICAgICAgICAvLyBiZSBjYWxs
ZWQgZnJvbSBHc3RCYXNlU3JjJ3MgcGVyZm9ybV9zZWVrIHZmdW5jLCB3aGljaCBob2xkcwotICAg
ICAgICAvLyBhIHN0cmVhbWluZyBsb2NrIGluIG91ciBmcmFtZS4gSGVuY2UsIHdlIHdvdWxkIGRl
YWRsb2NrCi0gICAgICAgIC8vIHRyeWluZyB0byBub3RpZnkgYXN5bmMgY29tcGxldGlvbiwgc2lu
Y2UgdGhhdCBhbHNvIHJlcXVpcmVzCi0gICAgICAgIC8vIHRoZSBzdHJlYW1pbmcgbG9jay4KLSAg
ICAgICAgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoYmFzZVNyYywgZmFsc2UpOworICAgIGlmICht
ZW1iZXJzLT5pc1JlcXVlc3RQZW5kaW5nKSB7CisgICAgICAgIG1lbWJlcnMtPmlzUmVxdWVzdFBl
bmRpbmcgPSBmYWxzZTsKKyAgICAgICAgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3Qoc3JjLCBtZW1i
ZXJzKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPnJl
c3BvbnNlTG9jayk7Ci0gICAgICAgIHByaXYtPnJlc3BvbnNlQ29uZGl0aW9uLndhaXQocHJpdi0+
cmVzcG9uc2VMb2NrLCBbcHJpdl0gKCkgewotICAgICAgICAgICAgcmV0dXJuIHByaXYtPndhc1Jl
c3BvbnNlUmVjZWl2ZWQgfHwgcHJpdi0+aXNGbHVzaGluZzsKKyAgICAvLyBXYWl0IGZvciB0aGUg
cmVzcG9uc2UgaGVhZGVycy4KKyAgICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlvbi53YWl0KG1l
bWJlcnMubXV0ZXgoKSwgWyZdICgpIHsKKyAgICAgICAgcmV0dXJuIG1lbWJlcnMtPndhc1Jlc3Bv
bnNlUmVjZWl2ZWQgfHwgbWVtYmVycy0+aXNGbHVzaGluZzsKKyAgICB9KTsKKworICAgIGlmICht
ZW1iZXJzLT5pc0ZsdXNoaW5nKQorICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7CisK
KyAgICBpZiAobWVtYmVycy0+cGVuZGluZ0NhcHMpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJTZXR0aW5nIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBtZW1iZXJzLT5wZW5kaW5n
Q2Fwcy5nZXQoKSk7CisgICAgICAgIG1lbWJlcnMucnVuVW5sb2NrZWQoW2Jhc2VTcmMsIGNhcHMg
PSBtZW1iZXJzLT5wZW5kaW5nQ2Fwcy5sZWFrUmVmKCldKCkgeworICAgICAgICAgICAgZ3N0X2Jh
c2Vfc3JjX3NldF9jYXBzKGJhc2VTcmMsIGNhcHMpOwogICAgICAgICB9KTsKKyAgICAgICAgaWYg
KG1lbWJlcnMtPmlzRmx1c2hpbmcpCisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJ
Tkc7CiAgICAgfQogCisgICAgaWYgKG1lbWJlcnMtPmhhdmVTaXplICYmICFtZW1iZXJzLT5pc0R1
cmF0aW9uU2V0KSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0dGluZyBkdXJh
dGlvbiB0byAlIiBHX0dVSU5UNjRfRk9STUFULCBtZW1iZXJzLT5zaXplKTsKKyAgICAgICAgYmFz
ZVNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IG1lbWJlcnMtPnNpemU7CisgICAgICAgIG1lbWJlcnMt
PmlzRHVyYXRpb25TZXQgPSB0cnVlOworICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2Uo
R1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZChH
U1RfT0JKRUNUX0NBU1Qoc3JjKSkpOworICAgIH0KKworICAgIGlmIChtZW1iZXJzLT5wZW5kaW5n
SHR0cEhlYWRlcnNNZXNzYWdlKQorICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NU
X0VMRU1FTlQoc3JjKSwgbWVtYmVycy0+cGVuZGluZ0h0dHBIZWFkZXJzTWVzc2FnZS5sZWFrUmVm
KCkpOworICAgIGlmIChtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNFdmVudCkKKyAgICAgICAg
Z3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIG1lbWJlcnMtPnBl
bmRpbmdIdHRwSGVhZGVyc0V2ZW50LmxlYWtSZWYoKSk7CisKKyAgICByZXN0YXJ0TG9hZGVySWZO
ZWVkZWQoc3JjLCBtZW1iZXJzKTsKKwogICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgR3N0QWRhcHRl
ciBtZXRob2RzIG1hcmtlZCBhcyBmYXN0IGFueW1vcmUgYmVjYXVzZSBzb21ldGltZXMgaXQgd2Fz
IHNsb3dlci4gVGhlIHJlYXNvbiB3aHkgdGhpcyB3YXMgc2xvd2VyIGlzIHRoYXQgd2UgY2FuIGJl
CiAgICAgLy8gd2FpdGluZyBmb3IgbW9yZSAiZmFzdCIgKHRoYXQgY291bGQgYmUgcmV0cmlldmVk
IHdpdGggdGhlIF9mYXN0IEFQSSkgYnVmZmVycyB0byBiZSBhdmFpbGFibGUgZXZlbiBpbiBjYXNl
cyB3aGVyZSB0aGUgcXVldWUgaXMgbm90IGVtcHR5LiBUaGVzZQogICAgIC8vIG90aGVyIGJ1ZmZl
cnMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSAibm9uIF9mYXN0IiBBUEkuCi0gICAgR1NUX1RS
QUNFX09CSkVDVChzcmMsICJmbHVzaGluZzogJXMsIGRvZXNIYXZlRU9TOiAlcywgaXNEb3dubG9h
ZFN1c3BlbmRlZDogJXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aXNGbHVzaGluZykKLSAgICAg
ICAgLCBib29sRm9yUHJpbnRpbmcocHJpdi0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmco
cHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCkpOwotCi0gICAgaWYgKHByaXYtPmRvZXNIYXZlRU9T
KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRU9TIik7Ci0gICAgICAgIHJldHVy
biBHU1RfRkxPV19FT1M7Ci0gICAgfQorICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG9lc0hh
dmVFT1M6ICVzLCBpc0Rvd25sb2FkU3VzcGVuZGVkOiAlcyIsIGJvb2xGb3JQcmludGluZyhtZW1i
ZXJzLT5kb2VzSGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rvd25sb2FkU3Vz
cGVuZGVkKSk7CiAKICAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3Np
emUoYmFzZVNyYyk7Ci0gICAgc2l6ZV90IHF1ZXVlU2l6ZTsKLSAgICB7Ci0gICAgICAgIExvY2tI
b2xkZXIgYWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7Ci0gICAgICAgIHVuc2lnbmVk
IHJldHJpZXMgPSAwOwotICAgICAgICBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUo
cHJpdi0+YWRhcHRlci5nZXQoKSk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZh
aWxhYmxlIGJ5dGVzICUiIEdfR1NJWkVfRk9STUFUICIsIGJsb2NrIHNpemUgJXUiLCBxdWV1ZVNp
emUsIHNpemUpOwotICAgICAgICB3aGlsZSAoIXF1ZXVlU2l6ZSAmJiAhcHJpdi0+aXNGbHVzaGlu
ZykgewotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJsZXQncyB0cnkgdG8gcmVz
dGFydCB0aGUgZG93bmxvYWQgaWYgcG9zc2libGUgYW5kIHdhaXQgYSBiaXQgaWYgbm8gZGF0YSIp
OwotICAgICAgICAgICAgcHJpdi0+YWRhcHRlckNvbmRpdGlvbi53YWl0Rm9yKHByaXYtPmFkYXB0
ZXJMb2NrLCAxX3MsIFsmXSB7Ci0gICAgICAgICAgICAgICAgcmVzdGFydExvYWRlcklmTmVlZGVk
KHNyYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByaXYtPmlzRmx1c2hpbmcgfHwgKCFwcml2
LT5pc0Rvd25sb2FkU3VzcGVuZGVkICYmIGdzdF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFw
dGVyLmdldCgpKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHF1ZXVlU2l6ZSA9IGdz
dF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFwdGVyLmdldCgpKTsKLSAgICAgICAgICAgIEdT
VF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZhaWxhYmxlICUiIEdfR1NJWkVfRk9STUFULCBxdWV1ZVNp
emUpOwotICAgICAgICAgICAgaWYgKHF1ZXVlU2l6ZSB8fCBwcml2LT5pc0ZsdXNoaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBkYXRhIG9yIHdlJ3JlIGZsdXNoaW5nLiBXZSBjYW4g
YnJlYWsgdGhlIGxvb3AgaGVyZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGtlZXAgd2FpdGluZyBidXQgd2UgY291bGQg
YmUgaW4gRU9TLiBMZXQncyBjaGVjayB0aGUgdHdvIHBvc3NpYmlsaXRpZXM6Ci0gICAgICAgICAg
ICAvLyAxLiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aXRoIGEga25vd24gc2l6ZS4K
LSAgICAgICAgICAgIC8vIDIuIFRoZSBkb3dubG9hZCBpcyBub3Qgc3VzcGVuZGVkIGFuZCBubyBt
b3JlIGRhdGEgYXJlIGFycml2aW5nLiBXZSBjYW5ub3Qgd2FpdCBmb3JldmVyLCAxMHgxcyBzZWVt
cyBzYWZlIGFuZCBzZW5zaWJsZS4KLSAgICAgICAgICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiBw
cml2LT5yZWFkUG9zaXRpb24gPj0gcHJpdi0+c2l6ZSkgewotICAgICAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiV2FpdGluZyBmb3IgZGF0YSBiZXlvbmQgdGhlIGVuZCwgc2lnbmFs
bGluZyBFT1MiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJpcyBkb3dubG9hZCBz
dXNwZW5kZWQ/ICVzLCBudW0gcmV0cmllcyAldSIsIGJvb2xGb3JQcmludGluZyhwcml2LT5pc0Rv
d25sb2FkU3VzcGVuZGVkKSwgcmV0cmllcyArIDEpOwotICAgICAgICAgICAgaWYgKCFwcml2LT5p
c0Rvd25sb2FkU3VzcGVuZGVkICYmICsrcmV0cmllcyA+PSAxMCkgewotICAgICAgICAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiQWRhcHRlciBzdGlsbCBlbXB0eSBhZnRlciAxMHMgb2Yg
d2FpdGluZywgYXNzdW1pbmcgRU9TIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X0VPUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcml2LT5p
c0ZsdXNoaW5nKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRmx1c2hpbmciKTsK
LSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIH0KKyAgICBzaXplX3QgcXVl
dWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOwor
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZhaWxhYmxlIGJ5dGVzICUiIEdfR1NJWkVfRk9S
TUFUICIsIGJsb2NrIHNpemUgJXUiLCBxdWV1ZVNpemUsIHNpemUpOworICAgIGlmICghcXVldWVT
aXplKSB7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAibGV0J3Mgd2FpdCBmb3IgZGF0
YSBvciBFT1MiKTsKKyAgICAgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ud2FpdChtZW1i
ZXJzLm11dGV4KCksIFsmXSB7CisgICAgICAgICAgICByZXR1cm4gbWVtYmVycy0+aXNGbHVzaGlu
ZyB8fCBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSkgfHwgbWVt
YmVycy0+ZG9lc0hhdmVFT1M7CisgICAgICAgIH0pOworICAgICAgICBpZiAobWVtYmVycy0+aXNG
bHVzaGluZykKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKIAotICAgIGlm
IChwcml2LT5oYXZlU2l6ZSAmJiAhcHJpdi0+aXNEdXJhdGlvblNldCkgewotICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlNldHRpbmcgZHVyYXRpb24gdG8gJSIgR19HVUlOVDY0X0ZPUk1B
VCwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgIGJhc2VTcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBwcml2
LT5zaXplOwotICAgICAgICBwcml2LT5pc0R1cmF0aW9uU2V0ID0gdHJ1ZTsKLSAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2Vf
bmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09CSkVDVF9DQVNUKHNyYykpKTsKKyAgICAgICAgcXVl
dWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOwor
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImF2YWlsYWJsZSAlIiBHX0dTSVpFX0ZPUk1B
VCwgcXVldWVTaXplKTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+aHR0cEhlYWRlcnNFdmVudCkK
LSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIHBy
aXYtPmh0dHBIZWFkZXJzRXZlbnQubGVha1JlZigpKTsKLQotICAgIHsKLSAgICAgICAgTG9ja0hv
bGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2NrKTsKLSAgICAgICAgcXVldWVTaXpl
ID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOworICAgIGlmIChx
dWV1ZVNpemUpIHsKICAgICAgICAgaWYgKHF1ZXVlU2l6ZSA8IHNpemUpIHsKICAgICAgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiRGlkIG5vdCBnZXQgdGhlICV1IGJsb2Nrc2l6ZSBieXRl
cywgbGV0J3MgcHVzaCB0aGUgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyB3ZSBnb3QiLCBzaXpl
LCBxdWV1ZVNpemUpOwogICAgICAgICAgICAgc2l6ZSA9IHF1ZXVlU2l6ZTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlRha2luZyAldSBieXRlcyBm
cm9tIGFkYXB0ZXIiLCBzaXplKTsKLSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgICAgICpi
dWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcihwcml2LT5hZGFwdGVyLmdldCgpLCBzaXpl
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpidWZmZXIpOwotCi0gICAgICAgICAgICBH
U1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSA9IGJhc2VTcmMtPnNlZ21lbnQucG9zaXRpb247Ci0g
ICAgICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKmJ1ZmZlcikgPSBHU1RfQlVGRkVSX09G
RlNFVCgqYnVmZmVyKSArIHNpemU7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywg
IkJ1ZmZlciBib3VuZHMgc2V0IHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRf
Rk9STUFULCBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSwgR1NUX0JVRkZFUl9PRkZTRVRfRU5E
KCpidWZmZXIpKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG9lc0hhdmVF
T1M6ICVzLCB3YXNTZWVraW5nOiAlcywgc2Vla2luZzogJXMsIGJ1ZmZlciBzaXplOiAldSwgc2l6
ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKHByaXYtPmRvZXNIYXZlRU9T
KSwgYm9vbEZvclByaW50aW5nKHByaXYtPndhc1NlZWtpbmcpLCBib29sRm9yUHJpbnRpbmcocHJp
di0+aXNTZWVraW5nKSwgc2l6ZSwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgICAgICBpZiAocHJpdi0+
aGF2ZVNpemUgJiYgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpID49IHByaXYtPnNpemUp
IHsKLSAgICAgICAgICAgICAgICBpZiAocHJpdi0+d2FzU2Vla2luZykKLSAgICAgICAgICAgICAg
ICAgICAgcHJpdi0+d2FzU2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHByaXYtPmlzU2Vla2FibGUpCi0gICAgICAgICAgICAgICAgICAgIHByaXYtPmRvZXNIYXZlRU9T
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpdi0+d2FzU2Vla2luZykKLSAgICAg
ICAgICAgICAgICBwcml2LT53YXNTZWVraW5nID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJlc3Rh
cnRMb2FkZXJJZk5lZWRlZChzcmMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzcmMsICJFbXB0eSBhZGFwdGVyISIpOwotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKworICAgICAgICAqYnVmZmVyID0gZ3N0X2FkYXB0
ZXJfdGFrZV9idWZmZXIobWVtYmVycy0+YWRhcHRlci5nZXQoKSwgc2l6ZSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCpidWZmZXIpOworCisgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUKCpidWZm
ZXIpID0gYmFzZVNyYy0+c2VnbWVudC5wb3NpdGlvbjsKKyAgICAgICAgR1NUX0JVRkZFUl9PRkZT
RVRfRU5EKCpidWZmZXIpID0gR1NUX0JVRkZFUl9PRkZTRVQoKmJ1ZmZlcikgKyBzaXplOworICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIkJ1ZmZlciBib3VuZHMgc2V0IHRvICUiIEdfR1VJ
TlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFULCBHU1RfQlVGRkVSX09GRlNFVCgqYnVm
ZmVyKSwgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpKTsKKyAgICAgICAgR1NUX1RSQUNF
X09CSkVDVChzcmMsICJidWZmZXIgc2l6ZTogJXUsIHRvdGFsIGNvbnRlbnQgc2l6ZTogJSIgR19H
VUlOVDY0X0ZPUk1BVCwgc2l6ZSwgbWVtYmVycy0+c2l6ZSk7CisKKyAgICAgICAgcmVzdGFydExv
YWRlcklmTmVlZGVkKHNyYywgbWVtYmVycyk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsK
ICAgICB9CiAKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgLy8gSWYgdGhlIHF1ZXVlIGlz
IGVtcHR5IHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIG9ubHkgb3RoZXIgb3B0aW9uIGlzIHRoYXQg
d2UgYXJlIGluIEVPUy4KKyAgICBBU1NFUlQobWVtYmVycy0+ZG9lc0hhdmVFT1MpOworICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSByZXNwb25zZSwgc2ln
bmFsbGluZyBFT1MiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwogfQogCiBzdGF0aWMgYm9v
bCB3ZWJLaXRXZWJTcmNTZXRFeHRyYUhlYWRlcihHUXVhcmsgZmllbGRJZCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpCkBAIC01OTMsNjAgKzYxOSwzMSBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0V2ViU3JjUHJvY2Vzc0V4dHJhSGVhZGVycyhHUXVhcmsgZmllbGRJZCwg
Y29uc3QgR1ZhbHVlKiB2YQogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RhcnQo
R3N0QmFzZVNyYyogYmFzZVNyYykKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYnkgQmFzZVNyYywgZG8gbm90IGNhbGwgaXQKLSAgICAvLyBmcm9tIG91cnNlbHZl
cyB1bmxlc3MgeW91IGVuc3VyZSB0aGUgc3RyZWFtaW5nIGxvY2sgaXMgbm90Ci0gICAgLy8gaGVs
ZC4gSWYgaXQgaXMsIHlvdSB3aWxsIGRlYWRsb2NrIHRoZSBXZWJQcm9jZXNzLgotICAgIHJldHVy
biB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChiYXNlU3JjLCB0cnVlKTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KEdzdEJhc2VTcmMqIGJhc2VTcmMsIGJvb2wg
bm90aWZ5QXN5bmNDb21wbGV0aW9uKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lU
X1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKLQotICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDApICYmICFwcml2
LT5wbGF5ZXIpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYo
Z3N0X3F1ZXJ5X25ld19jb250ZXh0KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVf
TkFNRSkpOwotICAgICAgICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5KEdTVF9CQVNFX1NSQ19QQUQo
YmFzZVNyYyksIHF1ZXJ5LmdldCgpKSkgewotICAgICAgICAgICAgR3N0Q29udGV4dCogY29udGV4
dDsKIAotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHQocXVlcnkuZ2V0KCksICZj
b250ZXh0KTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5U
X0NBU1Qoc3JjKSwgY29udGV4dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ3N0X2Vs
ZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2VfbmV3
X25lZWRfY29udGV4dChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwgV0VCS0lUX1dFQl9TUkNfUExBWUVS
X0NPTlRFWFRfVFlQRV9OQU1FKSk7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlQocHJpdi0+
cGxheWVyKTsKLQotICAgIHByaXYtPndlcmVIZWFkZXJzUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICBw
cml2LT53YXNSZXNwb25zZVJlY2VpdmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNEdXJhdGlvblNl
dCA9IGZhbHNlOwotICAgIHByaXYtPmRvZXNIYXZlRU9TID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNG
bHVzaGluZyA9IGZhbHNlOwotICAgIHByaXYtPmRvd25sb2FkU3RhcnRUaW1lID0gV2FsbFRpbWU6
Om5hbigpOwotCi0gICAgcHJpdi0+ZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjayA9IGZhbHNlOwot
Ci0gICAgaWYgKHByaXYtPm9yaWdpbmFsVVJJLmlzTnVsbCgpKSB7CisgICAgaWYgKHNyYy0+cHJp
di0+b3JpZ2luYWxVUkkuaXNOdWxsKCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMs
ICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChiYXNlU3JjKTsK
ICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KIAotICAg
IGlmIChwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9PSBwcml2LT5zdG9wUG9zaXRpb24pIHsKLSAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJFbXB0eSBzZWdtZW50LCBzaWduYWxpbmcgRU9T
Iik7Ci0gICAgICAgIHByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotICAgIH0KK3N0YXRpYyB2b2lkIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KFdlYktpdFdl
YlNyYyogc3JjLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVy
cz46OkxvY2tlZFdyYXBwZXImIG1lbWJlcnMpCit7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRmV0Y2hpbmcg
JXMiLCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkpOworICAgIEFTU0VSVCghcHJpdi0+b3JpZ2lu
YWxVUkkuaXNOdWxsKCkpOworICAgIEFTU0VSVChtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbiAh
PSBtZW1iZXJzLT5zdG9wUG9zaXRpb24pOworCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQ
b3N0aW5nIHRhc2sgdG8gcmVxdWVzdCBSJXUgJXMgcmVxdWVzdGVkUG9zaXRpb249JSIgR19HVUlO
VDY0X0ZPUk1BVCAiIHN0b3BQb3NpdGlvbj0lIiBHX0dVSU5UNjRfRk9STUFULCBtZW1iZXJzLT5y
ZXF1ZXN0TnVtYmVyLCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCksIG1lbWJlcnMtPnJlcXVlc3Rl
ZFBvc2l0aW9uLCBtZW1iZXJzLT5zdG9wUG9zaXRpb24pOwogICAgIFVSTCB1cmwgPSBVUkwoVVJM
KCksIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwogICAgIHJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXModXJsKTsKIAotICAgIHJlcXVlc3Quc2V0SFRUUFJl
ZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisgICAgcmVxdWVzdC5zZXRIVFRQUmVm
ZXJyZXIobWVtYmVycy0+cGxheWVyLT5yZWZlcnJlcigpKTsKIAogICAgIGlmIChwcml2LT5odHRw
TWV0aG9kLmdldCgpKQogICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QocHJpdi0+aHR0cE1l
dGhvZC5nZXQoKSk7CkBAIC02NzAsMTIgKzY2NywxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjTWFrZVJlcXVlc3QoR3N0QmFzZVNyYyogYmFzZVNyYywgYm9vbCBub3RpZnlBc3luY0Nv
bQogICAgICAgICB8fCAhZ19hc2NpaV9zdHJjYXNlY21wKCJ0cmFpbGVycy5hcHBsZS5jb20iLCB1
cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICByZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoIlF1aWNrdGltZS83LjYuNiIpOwogCi0gICAgaWYgKHByaXYtPnJlcXVlc3RlZFBvc2l0aW9u
KSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZm9ybWF0ZWRSYW5nZShnX3N0cmR1cF9wcmlu
dGYoImJ5dGVzPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0iLCBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlv
bikpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbikgeworICAgICAgICBHVW5p
cXVlUHRyPGNoYXI+IGZvcm1hdGVkUmFuZ2UoZ19zdHJkdXBfcHJpbnRmKCJieXRlcz0lIiBHX0dV
SU5UNjRfRk9STUFUICItIiwgbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb24pKTsKICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJSYW5nZSByZXF1ZXN0OiAlcyIsIGZvcm1hdGVkUmFuZ2Uu
Z2V0KCkpOwogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6UmFuZ2UsIGZvcm1hdGVkUmFuZ2UuZ2V0KCkpOwogICAgIH0KLSAgICBwcml2LT5yZWFkUG9z
aXRpb24gPSBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbjsKKyAgICBBU1NFUlQobWVtYmVycy0+cmVh
ZFBvc2l0aW9uID09IG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uKTsKIAogICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiUGVyc2lzdGVudCBjb25uZWN0aW9uIHN1cHBvcnQgJXMiLCBwcml2LT5r
ZWVwQWxpdmUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKICAgICBpZiAoIXByaXYtPmtlZXBB
bGl2ZSkKQEAgLTY4Nyw4MSArNjg0LDUyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNN
YWtlUmVxdWVzdChHc3RCYXNlU3JjKiBiYXNlU3JjLCBib29sIG5vdGlmeUFzeW5jQ29tCiAgICAg
Ly8gV2UgYWx3YXlzIHJlcXVlc3QgSWNlY2FzdC9TaG91dGNhc3QgbWV0YWRhdGEsIGp1c3QgaW4g
Y2FzZSAuLi4KICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6
SWN5TWV0YWRhdGEsICIxIik7CiAKLSAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9y
ID0gV1RGOjplbnN1cmVHUmVmKHNyYyk7Ci0gICAgcHJpdi0+bm90aWZpZXItPm5vdGlmeShNYWlu
VGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpTdGFydCwgW3Byb3RlY3RvciwgcmVxdWVzdCA9IFdU
Rk1vdmUocmVxdWVzdCksIHNyYywgbm90aWZ5QXN5bmNDb21wbGV0aW9uXSB7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0
b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKSwgcmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCksIHJl
cXVlc3ROdW1iZXIgPSBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyLCBzcmNdIHsKICAgICAgICAgV2Vi
S2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+cHJpdjsKLSAgICAgICAgaWYgKCFw
cml2LT5sb2FkZXIpCi0gICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBwcml2LT5wbGF5ZXItPmNy
ZWF0ZVJlc291cmNlTG9hZGVyKCk7CisgICAgICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2
YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFN
dXRleCk7CisgICAgICAgIC8vIElnbm9yZSB0aGlzIHRhc2sgKG5vdCBtYWtpbmcgYW55IEhUVFAg
cmVxdWVzdCkgaWYgYnkgbm93IFdlYktpdFdlYlNyYyBzdHJlYW1pbmcgdGhyZWFkIGlzIGFscmVh
ZHkgd2FpdGluZworICAgICAgICAvLyBmb3IgYSBkaWZmZXJlbnQgcmVxdWVzdC4gVGhlcmUgaXMg
bm8gcG9pbnQgYW55bW9yZSBpbiBzZW5kaW5nIHRoaXMgb25lLgorICAgICAgICBpZiAobWVtYmVy
cy0+cmVxdWVzdE51bWJlciAhPSByZXF1ZXN0TnVtYmVyKSB7CisgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIlNraXBwaW5nIFIldSwgY3VycmVudCByZXF1ZXN0
IG51bWJlciBpcyAldSIsIHJlcXVlc3ROdW1iZXIsIG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtZW1iZXJzLT5s
b2FkZXIpCisgICAgICAgICAgICBtZW1iZXJzLT5sb2FkZXIgPSBtZW1iZXJzLT5wbGF5ZXItPmNy
ZWF0ZVJlc291cmNlTG9hZGVyKCk7CiAKICAgICAgICAgUGxhdGZvcm1NZWRpYVJlc291cmNlTG9h
ZGVyOjpMb2FkT3B0aW9ucyBsb2FkT3B0aW9ucyA9IDA7CiAgICAgICAgIGlmIChyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNCbG9iKCkpCiAgICAgICAgICAgICBsb2FkT3B0aW9ucyB8PSBQbGF0Zm9y
bU1lZGlhUmVzb3VyY2VMb2FkZXI6OkxvYWRPcHRpb246OkJ1ZmZlckRhdGE7Ci0gICAgICAgIHBy
aXYtPnJlc291cmNlID0gcHJpdi0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1
ZXN0KHJlcXVlc3QpLCBsb2FkT3B0aW9ucyk7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJjZSkg
ewotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVxdWVz
dChyZXF1ZXN0KSkpOwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0b3IuZ2V0
KCksICJTdGFydGVkIHJlcXVlc3QiKTsKLSAgICAgICAgICAgIGlmIChub3RpZnlBc3luY0NvbXBs
ZXRpb24pCi0gICAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlKEdTVF9C
QVNFX1NSQyhzcmMpLCBHU1RfRkxPV19PSyk7CisgICAgICAgIG1lbWJlcnMtPnJlc291cmNlID0g
bWVtYmVycy0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3Qp
LCBsb2FkT3B0aW9ucyk7CisgICAgICAgIGlmIChtZW1iZXJzLT5yZXNvdXJjZSkgeworICAgICAg
ICAgICAgbWVtYmVycy0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0KSwgcmVxdWVzdE51bWJlcikpOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90
ZWN0b3IuZ2V0KCksICJTdGFydGVkIHJlcXVlc3QgUiV1IiwgcmVxdWVzdE51bWJlcik7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByb3RlY3Rvci5nZXQo
KSwgIkZhaWxlZCB0byBzZXR1cCBzdHJlYW1pbmcgY2xpZW50Iik7Ci0gICAgICAgICAgICBpZiAo
bm90aWZ5QXN5bmNDb21wbGV0aW9uKQotICAgICAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zdGFy
dF9jb21wbGV0ZShHU1RfQkFTRV9TUkMoc3JjKSwgR1NUX0ZMT1dfRVJST1IpOwotICAgICAgICAg
ICAgcHJpdi0+bG9hZGVyID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Nsb3NlU2Vzc2lvbihXZWJL
aXRXZWJTcmMqIHNyYykKLXsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwotICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdS
ZWYoc3JjKTsKLQotICAgIHByaXYtPm5vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZFNvdXJjZU5v
dGlmaWNhdGlvbjo6U3RvcCwgW3Byb3RlY3Rvciwga2VlcEFsaXZlID0gcHJpdi0+a2VlcEFsaXZl
XSB7Ci0gICAgICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBwcm90ZWN0b3ItPnByaXY7
Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJTdG9wcGluZyBy
ZXNvdXJjZSBsb2FkZXIiKTsKLQotICAgICAgICBpZiAocHJpdi0+cmVzb3VyY2UpIHsKLSAgICAg
ICAgICAgIHByaXYtPnJlc291cmNlLT5zdG9wKCk7Ci0gICAgICAgICAgICBwcml2LT5yZXNvdXJj
ZS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UgPSBudWxs
cHRyOworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJGYWls
ZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCB0byBoYW5kbGUgUiV1IiwgcmVxdWVzdE51bWJl
cik7CisgICAgICAgICAgICBtZW1iZXJzLT5sb2FkZXIgPSBudWxscHRyOwogICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFrZWVwQWxpdmUpCi0gICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBudWxs
cHRyOwogICAgIH0pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNvdXJjZSBsb2Fk
ZXIgc3RvcHBlZCIpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChHc3RC
YXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9T
UkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
LQotICAgIGlmIChwcml2LT5yZXNvdXJjZSB8fCAocHJpdi0+bG9hZGVyICYmICFwcml2LT5rZWVw
QWxpdmUpKQotICAgICAgICB3ZWJLaXRXZWJTcmNDbG9zZVNlc3Npb24oc3JjKTsKLQotICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2NrKTsKLSAg
ICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIocHJpdi0+YWRhcHRlci5nZXQoKSk7Ci0gICAgfQotCi0g
ICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0
b3BwZWQgcmVxdWVzdCIpOworICAgIC8vIGJhc2VzcmMgd2lsbCBhbHdheXMgY2FsbCB1bkxvY2so
KSBhbmQgdW5Mb2NrU3RvcCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMuIFNlZSBnc3RfYmFzZV9zcmNf
c3RvcCgpLgorICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1i
ZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICB3
ZWJraXRXZWJTcmNSZXNldChzcmMsIG1lbWJlcnMsIFJlc2V0VHlwZTo6SGFyZCk7CisgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJTdG9wcGVkIFdlYktpdFdlYlNyYyIpOwogICAgIHJldHVybiBU
UlVFOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShHc3RCYXNlU3Jj
KiBiYXNlU3JjLCBndWludDY0KiBzaXplKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VC
S0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVt
YmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImhhdmVTaXplOiAlcywgc2l6ZTogJSIgR19HVUlOVDY0
X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKHByaXYtPmhhdmVTaXplKSwgcHJpdi0+c2l6ZSk7Ci0g
ICAgaWYgKHByaXYtPmhhdmVTaXplKSB7Ci0gICAgICAgICpzaXplID0gcHJpdi0+c2l6ZTsKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImhhdmVTaXplOiAlcywgc2l6ZTogJSIgR19HVUlOVDY0
X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmhhdmVTaXplKSwgbWVtYmVycy0+c2l6
ZSk7CisgICAgaWYgKG1lbWJlcnMtPmhhdmVTaXplKSB7CisgICAgICAgICpzaXplID0gbWVtYmVy
cy0+c2l6ZTsKICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCkBAIC03NzEsNDAgKzczOSw0
MiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShHc3RCYXNlU3JjKiBiYXNl
U3JjLCBndWludDY0KiBzaXplKQogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0lzU2Vla2Fi
bGUoR3N0QmFzZVNyYyogYmFzZVNyYykKIHsKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJ
VF9XRUJfU1JDKGJhc2VTcmMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJpc1NlZWth
YmxlOiAlcyIsIGJvb2xGb3JQcmludGluZyhzcmMtPnByaXYtPmlzU2Vla2FibGUpKTsKLSAgICBy
ZXR1cm4gc3JjLT5wcml2LT5pc1NlZWthYmxlOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQ
cml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJp
di0+ZGF0YU11dGV4KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImlzU2Vla2FibGU6ICVz
IiwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vla2FibGUpKTsKKyAgICByZXR1cm4gbWVt
YmVycy0+aXNTZWVrYWJsZTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0RvU2Vl
ayhHc3RCYXNlU3JjKiBiYXNlU3JjLCBHc3RTZWdtZW50KiBzZWdtZW50KQogeworICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY3JlYXRlKCkuIEl0J3Mgb25s
eSBjYWxsZWQgd2hlbiB3ZSdyZSB0cmFuc2l0aW9uaW5nIHRvID49UEFVU0VEIGFuZAorICAgIC8v
IGJldHdlZW4gZmx1c2hlcy4gSW4gYW55IGNhc2UsIGJhc2VzcmMgaG9sZHMgdGhlIFNUUkVBTV9M
T0NLLCBzbyB3ZSBrbm93IGNyZWF0ZSgpIGlzIG5vdCBydW5uaW5nLgorICAgIC8vIEFsc28sIGJv
dGggd2ViS2l0V2ViU3JjVW5Mb2NrKCkgYW5kIHdlYktpdFdlYlNyY1VuTG9ja1N0b3AoKSBhcmUg
Z3VhcmFudGVlZCB0byBiZSBjYWxsZWQgKmJlZm9yZSogdGhpcyBmdW5jdGlvbi4KKyAgICAvLyBb
U2VlIGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWsoKV0uCisgICAgQVNTRVJUKEdTVF9FTEVNRU5U
KGJhc2VTcmMpLT5jdXJyZW50X3N0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCBHU1RfUEFEX0lT
X0ZMVVNISU5HKGJhc2VTcmMtPnNyY3BhZCkpOworCisgICAgLy8gRXhjZXB0IGZvciB0aGUgaW5p
dGlhbCBzZWVrLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIGlzU2Vla2FibGUoKSBy
ZXR1cm5zIHRydWUuCisgICAgQVNTRVJUKEdTVF9FTEVNRU5UKGJhc2VTcmMpLT5jdXJyZW50X3N0
YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCB3ZWJLaXRXZWJTcmNJc1NlZWthYmxlKGJhc2VTcmMp
KTsKKwogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0g
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBMb2NrSG9sZGVy
IGxvY2tlcihwcml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQ
cml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJp
di0+ZGF0YU11dGV4KTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayBzZWdtZW50
OiAoJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCBzZWdtZW50
LT5zdGFydCwgc2VnbWVudC0+c3RvcCk7Ci0gICAgaWYgKHByaXYtPnJlYWRQb3NpdGlvbiA9PSBz
ZWdtZW50LT5zdGFydCAmJiBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9PSBwcml2LT5yZWFkUG9z
aXRpb24gJiYgcHJpdi0+c3RvcFBvc2l0aW9uID09IHNlZ21lbnQtPnN0b3ApIHsKLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIHRvIGN1cnJlbnQgcmVhZC9lbmQgcG9zaXRpb24g
YW5kIG5vIHNlZWsgcGVuZGluZyIpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9CisgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIHNlZ21lbnQ6ICglIiBHX0dVSU5UNjRfRk9STUFU
ICItJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSBQb3NpdGlvbiBwcmV2aW91cyB0byBzZWVrOiAlIiBH
X0dVSU5UNjRfRk9STUFULCBzZWdtZW50LT5zdGFydCwgc2VnbWVudC0+c3RvcCwgbWVtYmVycy0+
cmVhZFBvc2l0aW9uKTsKIAotICAgIGlmIChwcml2LT53ZXJlSGVhZGVyc1JlY2VpdmVkICYmICFw
cml2LT5pc1NlZWthYmxlKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChzcmMsICJOb3Qg
c2Vla2FibGUiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KKyAgICAvLyBCZWZvcmUg
YXR0ZW1wdGluZyB0byBzZWVrLCBiYXNlc3JjIHdpbGwgY2FsbCBpc1NlZWthYmxlKCkuIElmIGlz
U2Vla2FibGUoKSBpcyB0cnVlLCBhIGZsdXNoIHdpbGwgYmUgbWFkZSBhbmQKKyAgICAvLyB0aGlz
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLiBiYXNlc3JjIHN0aWxsIGdpdmVzIHVzIHRoZSBjaGFu
Y2UgaGVyZSB0byByZXR1cm4gRkFMU0UgYW5kIGNhbmNlbCB0aGUgc2Vlay4KKyAgICAvLyBXZSBj
YW5ub3QgYWZmb3JkIHRvIHJldHVybiBGQUxTRSBpbiB0aGlzIGZ1bmN0aW9uIHRob3VnaCB1bmxl
c3Mgd2UncmUgZ29pbmcgdG8gZmFpbCBvbiBwdXJwb3NlLCBzaW5jZSBhdCB0aGlzCisgICAgLy8g
cG9pbnQgd2UgaGF2ZSBhbHJlYWR5IGJlZW4gZmx1c2hlZCBhbmQgY2FuY2VsbGVkIHRoZSBIVFRQ
IHJlcXVlc3QgdGhhdCB3YXMgZmVlZGluZyB1cyBkYXRhLgogCiAgICAgaWYgKHNlZ21lbnQtPnJh
dGUgPCAwLjAgfHwgc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICAg
ICAgR1NUX1dBUk5JTkdfT0JKRUNUKHNyYywgIkludmFsaWQgc2VlayBzZWdtZW50Iik7CisgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiSW52YWxpZCBzZWVrIHNlZ21lbnQiKTsKICAgICAg
ICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiBzZWdt
ZW50LT5zdGFydCA+PSBwcml2LT5zaXplKQorICAgIGlmIChtZW1iZXJzLT5oYXZlU2l6ZSAmJiBz
ZWdtZW50LT5zdGFydCA+PSBtZW1iZXJzLT5zaXplKQogICAgICAgICBHU1RfV0FSTklOR19PQkpF
Q1Qoc3JjLCAiUG90ZW50aWFsbHkgc2Vla2luZyBiZWhpbmQgZW5kIG9mIGZpbGUsIG1pZ2h0IEVP
UyBpbW1lZGlhdGVseSIpOwogCi0gICAgcHJpdi0+aXNTZWVraW5nID0gdHJ1ZTsKLSAgICBwcml2
LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IHNlZ21lbnQtPnN0YXJ0OwotICAgIHByaXYtPnN0b3BQb3Np
dGlvbiA9IHNlZ21lbnQtPnN0b3A7Ci0gICAgcHJpdi0+YWRhcHRlckNvbmRpdGlvbi5ub3RpZnlP
bmUoKTsKKyAgICBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IG1lbWJlcnMtPnJlYWRQb3Np
dGlvbiA9IHNlZ21lbnQtPnN0YXJ0OworICAgIG1lbWJlcnMtPnN0b3BQb3NpdGlvbiA9IHNlZ21l
bnQtPnN0b3A7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTgxNiw4ICs3ODYsOSBAQCBzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnkoR3N0QmFzZVNyYyogYmFzZVNyYywgR3N0UXVl
cnkqIHF1ZXJ5KQogCiAgICAgaWYgKEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSA9PSBHU1RfUVVFUllf
VVJJKSB7CiAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBwcml2LT5vcmlnaW5hbFVS
SS5kYXRhKCkpOwotICAgICAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbihxdWVyeSwgcHJpdi0+cmVk
aXJlY3RlZFVSSS5kYXRhKCkpOworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0
ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRh
dGFNdXRleCk7CisgICAgICAgIGlmICghbWVtYmVycy0+cmVkaXJlY3RlZFVSSS5pc051bGwoKSkK
KyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uKHF1ZXJ5LCBtZW1iZXJz
LT5yZWRpcmVjdGVkVVJJLmRhdGEoKSk7CiAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgfQog
CkBAIC04MzgsNTEgKzgwOSw0NSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnko
R3N0QmFzZVNyYyogYmFzZVNyYywgR3N0UXVlcnkqIHF1ZXJ5KQogc3RhdGljIGdib29sZWFuIHdl
YktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdlYktpdFdlYlNy
Yyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
c3JjLT5wcml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2
YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+
ZGF0YU11dGV4KTsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiVW5sb2NrIik7Ci0gICAg
c3JjLT5wcml2LT5pc0ZsdXNoaW5nID0gdHJ1ZTsKLSAgICBzcmMtPnByaXYtPnJlc3BvbnNlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgIHNyYy0+cHJpdi0+YWRhcHRlckNvbmRpdGlvbi5ub3Rp
ZnlPbmUoKTsKKyAgICBtZW1iZXJzLT5pc0ZsdXNoaW5nID0gdHJ1ZTsKKworICAgIC8vIElmIHdl
IGhhdmUgYSBuZXR3b3JrIHJlc291cmNlIHJlcXVlc3Qgb3Blbiwgd2UgYXNrIHRoZSBtYWluIHRo
cmVhZCB0byBjbG9zZSBpdC4KKyAgICBpZiAobWVtYmVycy0+cmVzb3VyY2UpIHsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNvdXJjZSByZXF1ZXN0IFIldSB3aWxsIGJlIHN0b3Bw
ZWQiLCBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKSwgcmVzb3VyY2UgPSBXVEZN
b3ZlKG1lbWJlcnMtPnJlc291cmNlKSwgcmVxdWVzdE51bWJlciA9IG1lbWJlcnMtPnJlcXVlc3RO
dW1iZXJdIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAi
U3RvcHBpbmcgcmVzb3VyY2UgcmVxdWVzdCBSJXUiLCByZXF1ZXN0TnVtYmVyKTsKKyAgICAgICAg
ICAgIHJlc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICByZXNvdXJjZS0+c2V0Q2xpZW50KG51
bGxwdHIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgQVNTRVJUKCFtZW1iZXJzLT5yZXNvdXJj
ZSk7CisKKyAgICBpZiAoIXNyYy0+cHJpdi0+a2VlcEFsaXZlKQorICAgICAgICBtZW1iZXJzLT5s
b2FkZXIgPSBudWxscHRyOworCisgICAgLy8gRW5zdXJlIGFsbCBuZXR3b3JrIGNhbGxiYWNrcyBm
cm9tIHRoZSBvbGQgcmVxdWVzdCBkb24ndCBmZWVkIGRhdGEgdG8gV2ViS2l0V2ViU3JjIGFueW1v
cmUuCisgICAgbWVtYmVycy0+cmVxdWVzdE51bWJlcisrOworCisgICAgLy8gV2FrZSB1cCBzdHJl
YW1pbmcgdGhyZWFkLgorICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgp
OworCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNV
bkxvY2tTdG9wKEdzdEJhc2VTcmMqIGJhc2VTcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMg
PSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihzcmMtPnBy
aXYtPnJlc3BvbnNlTG9jayk7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0
ZXgpOwogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiVW5sb2NrIHN0b3AiKTsKLSAgICBzcmMt
PnByaXYtPmlzRmx1c2hpbmcgPSBmYWxzZTsKKyAgICBtZW1iZXJzLT5pc0ZsdXNoaW5nID0gZmFs
c2U7CisgICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNldFR5cGU6OlNvZnQp
OwogCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3
ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5n
ZSB0cmFuc2l0aW9uKQotewotICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMo
ZWxlbWVudCk7Ci0KLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIiVzIiwgZ3N0X3N0YXRlX2NoYW5nZV9nZXRfbmFtZSh0cmFuc2l0aW9u
KSk7Ci0jZW5kaWYKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFU
RV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgICAgd2ViS2l0V2ViU3JjQ2xvc2VTZXNzaW9u
KHNyYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURf
VE9fUkVBRFk6IHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc3JjLT5wcml2LT5yZXNwb25z
ZUxvY2spOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkgY2Fu
Y2VsbGluZyBuZXR3b3JrIHJlcXVlc3RzIik7Ci0gICAgICAgIHNyYy0+cHJpdi0+aXNGbHVzaGlu
ZyA9IHRydWU7Ci0gICAgICAgIHNyYy0+cHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25l
KCk7Ci0gICAgICAgIHNyYy0+cHJpdi0+YWRhcHRlckNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3Rh
dGUoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci19Ci0KIHN0YXRpYyBib29sIHVybEhhc1N1cHBvcnRl
ZFByb3RvY29sKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiB1cmwuaXNWYWxpZCgpICYm
ICh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElzQmxvYigpKTsK
QEAgLTkzOCw3ICs5MDMsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAgICByZXR1
cm4gRkFMU0U7CiAgICAgfQogCi0gICAgcHJpdi0+cmVkaXJlY3RlZFVSSSA9IENTdHJpbmcoKTsK
ICAgICBwcml2LT5vcmlnaW5hbFVSSSA9IENTdHJpbmcoKTsKICAgICBpZiAoIXVyaSkKICAgICAg
ICAgcmV0dXJuIFRSVUU7CkBAIC05NzIsMTYgKzkzNiwxOSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRX
ZWJTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQogdm9pZCB3ZWJL
aXRXZWJTcmNTZXRNZWRpYVBsYXllcihXZWJLaXRXZWJTcmMqIHNyYywgV2ViQ29yZTo6TWVkaWFQ
bGF5ZXIqIHBsYXllcikKIHsKICAgICBBU1NFUlQocGxheWVyKTsKLSAgICBzcmMtPnByaXYtPnBs
YXllciA9IHBsYXllcjsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFt
aW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7
CisgICAgbWVtYmVycy0+cGxheWVyID0gcGxheWVyOwogfQogCiBib29sIHdlYktpdFNyY1Bhc3Nl
ZENPUlNBY2Nlc3NDaGVjayhXZWJLaXRXZWJTcmMqIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLT5w
cml2LT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJT
cmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+
cHJpdi0+ZGF0YU11dGV4KTsKKyAgICByZXR1cm4gbWVtYmVycy0+ZGlkUGFzc0FjY2Vzc0NvbnRy
b2xDaGVjazsKIH0KIAotQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OkNhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBSZXNvdXJjZVJlcXVlc3QmJiBy
ZXF1ZXN0KQotICAgIDogbV9zcmMoR1NUX0VMRU1FTlQoc3JjKSkKK0NhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50OjpDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMq
IHNyYywgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgdW5zaWduZWQgcmVxdWVzdE51bWJlcikK
KyAgICA6IG1fcmVxdWVzdE51bWJlcihyZXF1ZXN0TnVtYmVyKQorICAgICwgbV9zcmMoR1NUX0VM
RU1FTlQoc3JjKSkKICAgICAsIG1fcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQogewogfQpAQCAt
OTkwLDYgKzk1Nyw3IEBAIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6OmNoZWNrVXBkYXRlQmxvY2tzaXplKHVuc2lnbmVkIGJ5dGVzUmVhZCkK
IHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktpdFdlYlNyYyogc3JjID0g
V0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwogICAgIEdzdEJhc2VTcmMqIGJhc2VTcmMgPSBH
U1RfQkFTRV9TUkNfQ0FTVChzcmMpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CkBAIC0xMDI2LDMyICs5OTQsNDQgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUodW5zaWduZWQgYnl0ZXNSZWFkKQogCiB2
b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRm
b3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFBvbGljeUNoZWNrZXI6OlNob3VsZENvbnRpbnVlKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktp
dFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwogICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0gICAgcHJpdi0+ZGlkUGFzc0FjY2Vzc0Nv
bnRyb2xDaGVjayA9IHByaXYtPnJlc291cmNlLT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCk7
CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpM
b2NrZWRXcmFwcGVyIG1lbWJlcnMocHJpdi0+ZGF0YU11dGV4KTsKKyAgICBpZiAobWVtYmVycy0+
cmVxdWVzdE51bWJlciAhPSBtX3JlcXVlc3ROdW1iZXIpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoUG9saWN5Q2hlY2tlcjo6U2hvdWxkQ29udGludWU6Ok5vKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6
ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJSJXU6IFJlY2VpdmVkIHJlc3BvbnNlOiAlZCIsIG1fcmVxdWVzdE51bWJlciwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKKyAgICBtZW1iZXJzLT5kaWRQYXNzQWNjZXNzQ29udHJv
bENoZWNrID0gbWVtYmVycy0+cmVzb3VyY2UtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKTsK
ICAgICBtX29yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzcG9uc2UudXJsKCkp
KTsKIAogICAgIGF1dG8gcmVzcG9uc2VVUkkgPSByZXNwb25zZS51cmwoKS5zdHJpbmcoKS51dGY4
KCk7CiAgICAgaWYgKHByaXYtPm9yaWdpbmFsVVJJICE9IHJlc3BvbnNlVVJJKQotICAgICAgICBw
cml2LT5yZWRpcmVjdGVkVVJJID0gV1RGTW92ZShyZXNwb25zZVVSSSk7CisgICAgICAgIG1lbWJl
cnMtPnJlZGlyZWN0ZWRVUkkgPSBXVEZNb3ZlKHJlc3BvbnNlVVJJKTsKKworICAgIC8vIGxlbmd0
aCB3aWxsIGJlIHplcm8gKHVua25vd24pIGlmIG5vIENvbnRlbnQtTGVuZ3RoIGlzIHByb3ZpZGVk
IG9yIHRoZSByZXNwb25zZSBpcyBjb21wcmVzc2VkIHdpdGggQ29udGVudC1FbmNvZGluZy4KKyAg
ICB1aW50NjRfdCBsZW5ndGggPSAhcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5z
KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50RW5jb2RpbmcpID8gcmVzcG9uc2UuZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCkgOiAwOworICAgIGlmIChsZW5ndGggPiAwICYmIG1lbWJlcnMtPnJlcXVlc3Rl
ZFBvc2l0aW9uICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjA2KQorICAgICAgICBs
ZW5ndGggKz0gbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb247CiAKLSAgICB1aW50NjRfdCBsZW5n
dGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoID4g
MCAmJiBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
ID09IDIwNikKLSAgICAgICAgbGVuZ3RoICs9IHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uOworICAg
IEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBodHRwSGVhZGVycyhnc3Rfc3RydWN0dXJlX25ld19l
bXB0eSgiaHR0cC1oZWFkZXJzIikpOwogCi0gICAgcHJpdi0+aHR0cEhlYWRlcnMucmVzZXQoZ3N0
X3N0cnVjdHVyZV9uZXdfZW1wdHkoImh0dHAtaGVhZGVycyIpKTsKLSAgICBnc3Rfc3RydWN0dXJl
X3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYt
Pm9yaWdpbmFsVVJJLmRhdGEoKSwKKyAgICBnc3Rfc3RydWN0dXJlX3NldChodHRwSGVhZGVycy5n
ZXQoKSwgInVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSwKICAg
ICAgICAgImh0dHAtc3RhdHVzLWNvZGUiLCBHX1RZUEVfVUlOVCwgcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFwcml2LT5yZWRpcmVjdGVkVVJJLmlzTnVsbCgp
KQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInJl
ZGlyZWN0aW9uLXVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYtPnJlZGlyZWN0ZWRVUkkuZGF0YSgp
LCBudWxscHRyKTsKKyAgICBpZiAoIW1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCisg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAicmVkaXJlY3Rpb24t
dXJpIiwgR19UWVBFX1NUUklORywgbWVtYmVycy0+cmVkaXJlY3RlZFVSSS5kYXRhKCksIG51bGxw
dHIpOworCisgICAgLy8gUGFjayByZXF1ZXN0IGhlYWRlcnMgaW4gdGhlIGh0dHAtaGVhZGVycyBz
dHJ1Y3R1cmUuCiAgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGhlYWRlcnMoZ3N0X3N0cnVj
dHVyZV9uZXdfZW1wdHkoInJlcXVlc3QtaGVhZGVycyIpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGhlYWRlciA6IG1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpCiAgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEoKSwgR19UWVBF
X1NUUklORywgaGVhZGVyLnZhbHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwotICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiUmVxdWVzdCBoZWFkZXJzIGdvaW5nIGRvd25zdHJlYW06ICUiIEdT
VF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldChwcml2
LT5odHRwSGVhZGVycy5nZXQoKSwgInJlcXVlc3QtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVS
RSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
JXU6IFJlcXVlc3QgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwg
bV9yZXF1ZXN0TnVtYmVyLCBoZWFkZXJzLmdldCgpKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldCho
dHRwSGVhZGVycy5nZXQoKSwgInJlcXVlc3QtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwg
aGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBQYWNrIHJlc3BvbnNlIGhlYWRlcnMg
aW4gdGhlIGh0dHAtaGVhZGVycyBzdHJ1Y3R1cmUuCiAgICAgaGVhZGVycy5yZXNldChnc3Rfc3Ry
dWN0dXJlX25ld19lbXB0eSgicmVzcG9uc2UtaGVhZGVycyIpKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGhlYWRlciA6IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkgewogICAgICAgICBib29s
IG9rID0gZmFsc2U7CkBAIC0xMDYxLDU3ICsxMDQxLDQzIEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwg
Y29uCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRlcnMu
Z2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywgaGVhZGVyLnZh
bHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwogICAgIH0KLSAgICBhdXRvIGNvbnRlbnRMZW5n
dGhGaWVsZE5hbWUoaHR0cEhlYWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRM
ZW5ndGgpLnRvU3RyaW5nKCkpOwotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQoaGVh
ZGVycy5nZXQoKSwgY29udGVudExlbmd0aEZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKSkKLSAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgY29udGVudExlbmd0aEZpZWxkTmFt
ZS51dGY4KCkuZGF0YSgpLCBHX1RZUEVfVUlOVDY0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVu
Z3RoKSwgbnVsbHB0cik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQocHJpdi0+aHR0cEhlYWRlcnMu
Z2V0KCksICJyZXNwb25zZS1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdl
dCgpLCBudWxscHRyKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc3BvbnNlIGhlYWRl
cnMgZ29pbmcgZG93bnN0cmVhbTogJSIgR1NUX1BUUl9GT1JNQVQsIGhlYWRlcnMuZ2V0KCkpOwor
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUiV1OiBSZXNwb25zZSBoZWFkZXJzIGdvaW5nIGRv
d25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBtX3JlcXVlc3ROdW1iZXIsIGhlYWRlcnMuZ2V0
KCkpOworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAicmVzcG9uc2Ut
aGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CiAK
LSAgICBwcml2LT5odHRwSGVhZGVyc0V2ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfY3Vz
dG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9TVElDS1ksIGdzdF9zdHJ1Y3R1cmVfY29w
eShwcml2LT5odHRwSGVhZGVycy5nZXQoKSkpKTsKLQotICAgIGF1dG8gc2NvcGVFeGl0ID0gbWFr
ZVNjb3BlRXhpdChbJl0gewotICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9z
dHJ1Y3R1cmVfY29weShzcmMtPnByaXYtPmh0dHBIZWFkZXJzLmdldCgpKTsKLSAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2Vf
bmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksIHN0cnVjdHVyZSkpOwotICAgIH0pOwor
ICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UgPSBhZG9wdEdSZWYoZ3N0X21l
c3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksIGdzdF9zdHJ1Y3R1cmVfY29w
eShodHRwSGVhZGVycy5nZXQoKSkpKTsKKyAgICBtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNF
dmVudCA9IGFkb3B0R1JlZihnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RP
V05TVFJFQU1fU1RJQ0tZLCBodHRwSGVhZGVycy5yZWxlYXNlKCkpKTsKIAogICAgIGlmIChyZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJP
UihzcmMsIFJFU09VUkNFLCBSRUFELCAoIlJlY2VpdmVkICVkIEhUVFAgZXJyb3IgY29kZSIsIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOwotICAgICAgICBwcml2LT5kb2Vz
SGF2ZUVPUyA9IHRydWU7Ci0gICAgICAgIHdlYktpdFdlYlNyY1N0b3AoR1NUX0JBU0VfU1JDX0NB
U1Qoc3JjKSk7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQs
ICgiUiV1OiBSZWNlaXZlZCAlZCBIVFRQIGVycm9yIGNvZGUiLCBtX3JlcXVlc3ROdW1iZXIsIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOworICAgICAgICBtZW1iZXJzLT5k
b2VzSGF2ZUVPUyA9IHRydWU7CisgICAgICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5v
dGlmeU9uZSgpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lDaGVja2VyOjpTaG91
bGRDb250aW51ZTo6Tm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHByaXYt
PnJlcXVlc3RlZFBvc2l0aW9uKSB7CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9u
KSB7CiAgICAgICAgIC8vIFNlZWtpbmcgLi4uIHdlIGV4cGVjdCBhIDIwNiA9PSBQQVJUSUFMX0NP
TlRFTlQKLSAgICAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjAwKSB7Ci0g
ICAgICAgICAgICAvLyBSYW5nZSByZXF1ZXN0IGRpZG4ndCBoYXZlIGEgcmFuZ2VkIHJlc3BvbnNl
OyByZXNldHRpbmcgb2Zmc2V0LgotICAgICAgICAgICAgcHJpdi0+cmVhZFBvc2l0aW9uID0gMDsK
LSAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwNikgewor
ICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsKICAgICAgICAg
ICAgIC8vIFJhbmdlIHJlcXVlc3QgY29tcGxldGVseSBmYWlsZWQuCi0gICAgICAgICAgICBHU1Rf
RUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBSRUFELCAoIlJlY2VpdmVkIHVuZXhwZWN0ZWQg
JWQgSFRUUCBzdGF0dXMgY29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0
cikpOwotICAgICAgICAgICAgcHJpdi0+ZG9lc0hhdmVFT1MgPSB0cnVlOwotICAgICAgICAgICAg
d2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKKyAgICAgICAgICAgIEdT
VF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUiV1OiBSZWNlaXZlZCB1bmV4
cGVjdGVkICVkIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHJhbmdlIHJlcXVlc3QiLCBtX3JlcXVlc3RO
dW1iZXIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOworICAgICAgICAg
ICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0cnVlOworICAgICAgICAgICAgbWVtYmVycy0+cmVz
cG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihQb2xpY3lDaGVja2VyOjpTaG91bGRDb250aW51ZTo6Tm8pOwogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
YW5nZSByZXF1ZXN0IHN1Y2NlZWRlZCIpOwotICAgICAgICAgICAgcHJpdi0+aXNTZWVraW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICBwcml2LT53YXNTZWVraW5nID0gdHJ1ZTsKICAgICAgICAgfQor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlIldTogUmFuZ2UgcmVxdWVzdCBzdWNjZWVk
ZWQiLCBtX3JlcXVlc3ROdW1iZXIpOwogICAgIH0KIAotICAgIHByaXYtPmlzU2Vla2FibGUgPSBs
ZW5ndGggPiAwICYmIGdfYXNjaWlfc3RyY2FzZWNtcCgibm9uZSIsIHJlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QWNjZXB0UmFuZ2VzKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBtZW1iZXJzLT5pc1NlZWthYmxlID0gbGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNhc2VjbXAo
Im5vbmUiLCByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkFjY2VwdFJh
bmdlcykudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNpemU6
ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgaXNTZWVrYWJsZTogJXMiLCBsZW5ndGgsIGJvb2xGb3JQ
cmludGluZyhwcml2LT5pc1NlZWthYmxlKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
JXU6IFNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgaXNTZWVrYWJsZTogJXMiLCBtX3JlcXVl
c3ROdW1iZXIsIGxlbmd0aCwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vla2FibGUpKTsK
ICAgICBpZiAobGVuZ3RoID4gMCkgewotICAgICAgICBpZiAoIXByaXYtPmhhdmVTaXplIHx8IHBy
aXYtPnNpemUgIT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBwcml2LT5oYXZlU2l6ZSA9IHRydWU7
Ci0gICAgICAgICAgICBwcml2LT5zaXplID0gbGVuZ3RoOwotICAgICAgICAgICAgcHJpdi0+aXNE
dXJhdGlvblNldCA9IGZhbHNlOworICAgICAgICBpZiAoIW1lbWJlcnMtPmhhdmVTaXplIHx8IG1l
bWJlcnMtPnNpemUgIT0gbGVuZ3RoKSB7CisgICAgICAgICAgICBtZW1iZXJzLT5oYXZlU2l6ZSA9
IHRydWU7CisgICAgICAgICAgICBtZW1iZXJzLT5zaXplID0gbGVuZ3RoOwogICAgICAgICB9CiAg
ICAgfSBlbHNlCi0gICAgICAgIHByaXYtPmhhdmVTaXplID0gZmFsc2U7CisgICAgICAgIG1lbWJl
cnMtPmhhdmVTaXplID0gZmFsc2U7CiAKICAgICAvLyBTaWduYWwgdG8gZG93bnN0cmVhbSBpZiB0
aGlzIGlzIGFuIEljZWNhc3Qgc3RyZWFtLgogICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKQEAg
LTExMjMsMTE0ICsxMDg5LDEwNiBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbgogICAgICAgICAg
ICAgY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWlj
eSIsICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIG1ldGFkYXRhSW50ZXJ2YWwsIG51
bGxwdHIpKTsKIAogICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSk7Ci0gICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc3BvbnNlIENvbnRlbnRUeXBlOiAlcyIsIGNvbnRlbnRU
eXBlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
JXU6IFJlc3BvbnNlIENvbnRlbnRUeXBlOiAlcyIsIG1fcmVxdWVzdE51bWJlciwgY29udGVudFR5
cGUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKGNhcHMu
Z2V0KCksICJjb250ZW50LXR5cGUiLCBHX1RZUEVfU1RSSU5HLCBjb250ZW50VHlwZS51dGY4KCku
ZGF0YSgpLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KLQogICAgIGlmIChjYXBzKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0IGNhcHMgdG8gJSIgR1NUX1BUUl9GT1JN
QVQsIGNhcHMuZ2V0KCkpOwotICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMoR1NUX0JBU0Vf
U1JDX0NBU1Qoc3JjKSwgY2Fwcy5nZXQoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiUiV1OiBTZXQgY2FwcyB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9yZXF1ZXN0TnVtYmVyLCBj
YXBzLmdldCgpKTsKKyAgICAgICAgbWVtYmVycy0+cGVuZGluZ0NhcHMgPSBXVEZNb3ZlKGNhcHMp
OwogICAgIH0KIAotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+cmVzcG9u
c2VMb2NrKTsKLSAgICAgICAgcHJpdi0+d2VyZUhlYWRlcnNSZWNlaXZlZCA9IHRydWU7Ci0gICAg
ICAgIHByaXYtPmhlYWRlcnNDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgfQorICAgIG1lbWJl
cnMtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgPSB0cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOworCiAgICAgY29tcGxldGlvbkhhbmRsZXIoUG9saWN5Q2hlY2tl
cjo6U2hvdWxkQ29udGludWU6Olllcyk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
V2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7Ci0gICAgR3N0
QmFzZVNyYyogYmFzZVNyYyA9IEdTVF9CQVNFX1NSQ19DQVNUKHNyYyk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9MT0dfT0JKRUNUKHNyYywg
IkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIGxlbmd0aCk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
cHJpdi0+cmVzcG9uc2VMb2NrKTsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6
U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5kYXRhTXV0ZXgp
OworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiUiV1OiBIYXZlICVkIGJ5
dGVzIG9mIGRhdGEiLCBtX3JlcXVlc3ROdW1iZXIsIGxlbmd0aCk7CisKICAgICAvLyBSb3VnaCBi
YW5kd2lkdGggY2FsY3VsYXRpb24uIFdlIGlnbm9yZSBoZXJlIHRoZSBmaXJzdCBkYXRhIHBhY2th
Z2UgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIHRvIHJlc2V0IHRoZSBjb3VudGVycyB3aGVuIHdlIGlz
c3VlIHRoZSByZXF1ZXN0IGFuZAogICAgIC8vIHRoYXQgZmlyc3QgcGFja2FnZSBkZWxpdmVyeSB3
b3VsZCBpbmNsdWRlIHRoZSB0aW1lIG9mIHNlbmRpbmcgb3V0IHRoZSByZXF1ZXN0IGFuZCBnZXR0
aW5nIHRoZSBkYXRhIGJhY2suIFNpbmNlIHdlIGNhbid0IGRpc3Rpbmd1aXNoIHRoZQogICAgIC8v
IHNlbmRpbmcgdGltZSBmcm9tIHRoZSByZWNlaXZpbmcgdGltZSwgaXQgaXMgYmV0dGVyIHRvIGln
bm9yZSBpdC4KLSAgICBpZiAoIXN0ZDo6aXNuYW4ocHJpdi0+ZG93bmxvYWRTdGFydFRpbWUpKSB7
Ci0gICAgICAgIHByaXYtPnRvdGFsRG93bmxvYWRlZEJ5dGVzICs9IGxlbmd0aDsKLSAgICAgICAg
ZG91YmxlIHRpbWVTaW5jZVN0YXJ0ID0gKFdhbGxUaW1lOjpub3coKSAtIHByaXYtPmRvd25sb2Fk
U3RhcnRUaW1lKS5zZWNvbmRzKCk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG93
bmxvYWRlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMgaW4gJWYgc2Vjb25kcyA9fiAlMS4w
ZiBieXRlcy9zZWNvbmQiLCBwcml2LT50b3RhbERvd25sb2FkZWRCeXRlcywgdGltZVNpbmNlU3Rh
cnQKLSAgICAgICAgICAgICwgdGltZVNpbmNlU3RhcnQgPyBwcml2LT50b3RhbERvd25sb2FkZWRC
eXRlcyAvIHRpbWVTaW5jZVN0YXJ0IDogMCk7CisgICAgaWYgKCFzdGQ6OmlzbmFuKG1lbWJlcnMt
PmRvd25sb2FkU3RhcnRUaW1lKSkgeworICAgICAgICBtZW1iZXJzLT50b3RhbERvd25sb2FkZWRC
eXRlcyArPSBsZW5ndGg7CisgICAgICAgIGRvdWJsZSB0aW1lU2luY2VTdGFydCA9IChXYWxsVGlt
ZTo6bm93KCkgLSBtZW1iZXJzLT5kb3dubG9hZFN0YXJ0VGltZSkuc2Vjb25kcygpOworICAgICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlIldTogZG93bmxvYWRlZCAlIiBHX0dVSU5UNjRfRk9S
TUFUICIgYnl0ZXMgaW4gJWYgc2Vjb25kcyA9fiAlMS4wZiBieXRlcy9zZWNvbmQiLCBtX3JlcXVl
c3ROdW1iZXIsIG1lbWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5dGVzLCB0aW1lU2luY2VTdGFydAor
ICAgICAgICAgICAgLCB0aW1lU2luY2VTdGFydCA/IG1lbWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5
dGVzIC8gdGltZVNpbmNlU3RhcnQgOiAwKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcml2LT5k
b3dubG9hZFN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKLSAgICAgICAgcHJpdi0+dG90YWxE
b3dubG9hZGVkQnl0ZXMgPSAwOworICAgICAgICBtZW1iZXJzLT5kb3dubG9hZFN0YXJ0VGltZSA9
IFdhbGxUaW1lOjpub3coKTsKICAgICB9CiAKLSAgICB1aW50NjRfdCBuZXdQb3NpdGlvbiA9IHBy
aXYtPnJlYWRQb3NpdGlvbiArIGxlbmd0aDsKLSAgICBpZiAoTElLRUxZIChwcml2LT5yZXF1ZXN0
ZWRQb3NpdGlvbiA9PSBwcml2LT5yZWFkUG9zaXRpb24pKQotICAgICAgICBwcml2LT5yZXF1ZXN0
ZWRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IG5ld1Bv
c2l0aW9uOwotCi0gICAgdWludDY0X3QgbmV3U2l6ZSA9IDA7Ci0gICAgaWYgKHByaXYtPmhhdmVT
aXplICYmIChuZXdQb3NpdGlvbiA+IHByaXYtPnNpemUpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiR290IHBvc2l0aW9uIHByZXZpb3VzIGVzdGltYXRlZCBjb250ZW50IHNpemUg
KCUiIEdfR0lOVDY0X0ZPUk1BVCAiID4gJSIgR19HSU5UNjRfRk9STUFUICIpIiwgbmV3UG9zaXRp
b24sIHByaXYtPnNpemUpOwotICAgICAgICBuZXdTaXplID0gbmV3UG9zaXRpb247Ci0gICAgfQot
Ci0gICAgaWYgKG5ld1NpemUpIHsKLSAgICAgICAgcHJpdi0+c2l6ZSA9IG5ld1NpemU7Ci0gICAg
ICAgIGJhc2VTcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBwcml2LT5zaXplOwotICAgICAgICBnc3Rf
ZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9u
ZXdfZHVyYXRpb25fY2hhbmdlZChHU1RfT0JKRUNUX0NBU1Qoc3JjKSkpOwotICAgIH0KKyAgICBt
ZW1iZXJzLT5yZWFkUG9zaXRpb24gKz0gbGVuZ3RoOworICAgIEFTU0VSVCghbWVtYmVycy0+aGF2
ZVNpemUgfHwgbWVtYmVycy0+cmVhZFBvc2l0aW9uIDw9IG1lbWJlcnMtPnNpemUpOwogCiAgICAg
Z3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3Nh
Z2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksCi0gICAgICAgIGdzdF9zdHJ1Y3R1
cmVfbmV3KCJ3ZWJraXQtbmV0d29yay1zdGF0aXN0aWNzIiwgInJlYWQtcG9zaXRpb24iLCBHX1RZ
UEVfVUlOVDY0LCBwcml2LT5yZWFkUG9zaXRpb24sICJzaXplIiwgR19UWVBFX1VJTlQ2NCwgcHJp
di0+c2l6ZSwgbnVsbHB0cikpKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcoIndlYmtpdC1u
ZXR3b3JrLXN0YXRpc3RpY3MiLCAicmVhZC1wb3NpdGlvbiIsIEdfVFlQRV9VSU5UNjQsIG1lbWJl
cnMtPnJlYWRQb3NpdGlvbiwgInNpemUiLCBHX1RZUEVfVUlOVDY0LCBtZW1iZXJzLT5zaXplLCBu
dWxscHRyKSkpOwogCiAgICAgY2hlY2tVcGRhdGVCbG9ja3NpemUobGVuZ3RoKTsKIAotICAgIGlm
ICghcHJpdi0+d2FzUmVzcG9uc2VSZWNlaXZlZCkKLSAgICAgICAgcHJpdi0+d2FzUmVzcG9uc2VS
ZWNlaXZlZCA9IHRydWU7Ci0gICAgcHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7
Ci0KLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgYWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVy
TG9jayk7Ci0gICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBl
ZChnX21lbWR1cChkYXRhLCBsZW5ndGgpLCBsZW5ndGgpOwotICAgICAgICBnc3RfYWRhcHRlcl9w
dXNoKHByaXYtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7Ci0gICAgICAgIHN0b3BMb2FkZXJJZk5l
ZWRlZChzcmMpOwotICAgICAgICBwcml2LT5hZGFwdGVyQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwot
ICAgIH0KKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQoZ19t
ZW1kdXAoZGF0YSwgbGVuZ3RoKSwgbGVuZ3RoKTsKKyAgICBnc3RfYWRhcHRlcl9wdXNoKG1lbWJl
cnMtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7CisgICAgc3RvcExvYWRlcklmTmVlZGVkKHNyYywg
bWVtYmVycyk7CisgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9
CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmFjY2Vzc0NvbnRyb2xDaGVj
a0ZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktpdFdlYlNyYyogc3Jj
ID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNy
YywgUkVTT1VSQ0UsIFJFQUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0
ZjgoKS5kYXRhKCkpLCAobnVsbHB0cikpOwotICAgIHNyYy0+cHJpdi0+ZG9lc0hhdmVFT1MgPSB0
cnVlOwotICAgIHdlYktpdFdlYlNyY1N0b3AoR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKSk7CisgICAg
RGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRX
cmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5y
ZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCJSJXU6ICVzIiwgbV9yZXF1
ZXN0TnVtYmVyLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAo
bnVsbHB0cikpOworICAgIG1lbWJlcnMtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICBtZW1iZXJz
LT5yZXNwb25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAg
IERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2Vk
V3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICBpZiAobWVtYmVycy0+
cmVxdWVzdE51bWJlciAhPSBtX3JlcXVlc3ROdW1iZXIpCisgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNyYywgIkhhdmUgZmFpbHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBG
QUlMRUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkp
LCAobnVsbHB0cikpOworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIlIldTogSGF2ZSBm
YWlsdXJlOiAlcyIsIG1fcmVxdWVzdE51bWJlciwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24o
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJD
RSwgRkFJTEVELCAoIlIldTogJXMiLCBtX3JlcXVlc3ROdW1iZXIsIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksIChudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3Jj
LT5wcml2LT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0
cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCiB2
b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1N
ZWRpYVJlc291cmNlJikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktp
dFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwotICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNy
Y1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5w
cml2LT5kYXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVx
dWVzdE51bWJlcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHByaXYtPmlzU2Vla2luZyAm
JiAhcHJpdi0+aXNGbHVzaGluZykKLSAgICAgICAgcHJpdi0+aXNTZWVraW5nID0gZmFsc2U7Cisg
ICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCiBib29sIHdlYktpdFNyY1dvdWxkVGFpbnRPcmlnaW4o
V2ViS2l0V2ViU3JjKiBzcmMsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAg
V2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBEYXRhTXV0ZXg8V2Vi
S2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVy
cyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CiAKLSAgICBhdXRvKiBjYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQqPihwcml2LT5yZXNvdXJjZS0+Y2xpZW50KCkpOworICAgIGF1dG8qIGNhY2hlZFJlc291cmNl
U3RyZWFtaW5nQ2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudCo+KG1lbWJlcnMtPnJlc291cmNlLT5jbGllbnQoKSk7CiAgICAgZm9yIChhdXRvJiBy
ZXNwb25zZU9yaWdpbiA6IGNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50LT5zZWN1cml0eU9y
aWdpbnMoKSkgewogICAgICAgICBpZiAoIW9yaWdpbi5jYW5BY2Nlc3MoKnJlc3BvbnNlT3JpZ2lu
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5oCmluZGV4IGYzZDk4ZmJlYzliNjQyMDViZGZiOWU1NDk3YWU1MDIxM2U4NDEw
ODEuLmI2YzUyZGEyY2YzMjk4YTZiZjc3MjUzZDk1ODFlZDYxNDRkMmE4YzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgKQEAgLTM5LDE3ICszOSwxNSBAQCBHX0JF
R0lOX0RFQ0xTCiAKICNkZWZpbmUgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9O
QU1FICAid2Via2l0Lm1lZGlhLXBsYXllciIKIAotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNy
YyAgICAgICAgV2ViS2l0V2ViU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyY0NsYXNz
ICAgV2ViS2l0V2ViU3JjQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0
ZSBXZWJLaXRXZWJTcmNQcml2YXRlOworc3RydWN0IFdlYktpdFdlYlNyY1ByaXZhdGU7CiAKLXN0
cnVjdCBfV2ViS2l0V2ViU3JjIHsKK3N0cnVjdCBXZWJLaXRXZWJTcmMgewogICAgIEdzdFB1c2hT
cmMgcGFyZW50OwogCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSAqcHJpdjsKIH07CiAKLXN0cnVj
dCBfV2ViS2l0V2ViU3JjQ2xhc3Mgeworc3RydWN0IFdlYktpdFdlYlNyY0NsYXNzIHsKICAgICBH
c3RQdXNoU3JjQ2xhc3MgcGFyZW50Q2xhc3M7CiB9OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2ViZjAzNjg0ZDYzMjU3
YjM5MDYzMTcwMWY5Yzc4ZTBlMjMzOTA1NS4uZTAxMDcwNmRiOTdlZjQ2MjAxZjFiZmI5ZTViMjk4
OTdkYjc2OTY2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTA5ICBBbGljaWEgQm95
YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBSZXdv
cmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA5ODExCisKKyAgICAgICAgQSB0ZXN0IGltcHJvdmVkIGl0cyBz
dGF0dXMgaW4gVGVzdEV4cGVjdGF0aW9ucyBmcm9tIHRoZSBjaGFuZ2VzIG1hZGUKKyAgICAgICAg
aW4gdGhpcyBwYXRjaC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OgorCiAyMDIwLTA0LTIzICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1dQRV0gR2FyZGVuaW5nLCB1cGRhdGUgZXhwZWN0YXRpb25zIGFmdGVyIHIyNTk3
MDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYzUxYmRk
YjllZmU0YTZhZTJmYTBlZGZhYTllZGUyNGM0Y2MyOGMwMi4uNDJmYzJkNGVmMGU5ZjZlNzk1Zjdj
Zjc3ZTJkNDQyNjk4M2E0NjExYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTEyODcsOCArMTI4Nyw2IEBAIHdlYmtpdC5vcmcvYi8yMDY2NTYgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0CiB3
ZWJraXQub3JnL2IvMjA2NjU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFj
YXB0dXJlLXN0cmVhbXMvTWVkaWFTdHJlYW1UcmFjay1nZXRTZXR0aW5ncy5odHRwcy5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjA2NjU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvbWVkaWFjYXB0dXJlLXN0cmVhbXMvTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXByZWxv
YWQtbm9uZS1tYW51YWwuaHR0cHMuaHRtbCBbIENyYXNoIEZhaWx1cmUgUGFzcyBdCiAKLXdlYmtp
dC5vcmcvYi8yMDY2NTcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS12aWRlby1lbGVtZW50L3Jlc2l6ZS1kdXJpbmctcGxh
eWJhY2suaHRtbCBbIEZhaWx1cmUgXQotCiAjIExGQyAoTGF5b3V0Rm9ybWF0aW5nQ29udGV4dCBp
cyBkaXNhYmxlZCBieSBkZWZhdWx0KS4KIGZhc3QvbGF5b3V0Zm9ybWF0dGluZ2NvbnRleHQvIFsg
U2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397678</attachid>
            <date>2020-04-27 07:03:53 -0700</date>
            <delta_ts>2020-04-27 07:36:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-210284-20200427160352.patch</filename>
            <type>text/plain</type>
            <size>70746</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQ2Y2NkOWJmNTYzMDBj
YjkzZDk2NWI4NDg0ODA1MDQ1ZTcyY2E0ZS4uYWY5ZDVjZGNlZmY1NWViNDExZmE0OGI4MGE4MDNi
MTk2MDBhYmU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA0LTA5ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBSZXdvcmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0V2ViU3JjIGFzIGl0IGlzIGluIG1hc3RlciBo
YXMgYSBudW1iZXIgb2YgcmFjZSBjb25kaXRpb25zCisgICAgICAgIGxlYWRpbmcgdG8gb2NjYXNp
b25hbCBzdGFydmF0aW9uIChkdWUgdG8gY2FuY2VsbGluZyB0aGUgd3JvbmcgcmVxdWVzdCkKKyAg
ICAgICAgb3IgZGF0YSBjb3JydXB0aW9uIChkdWUgdG8gcHVzaGluZyBkYXRhIGZyb20gYSBjYW5j
ZWxsZWQgcmVxdWVzdCkuCisKKyAgICAgICAgVGhlIHRocmVhZGluZyBzaXR1YXRpb24gd2Fzbid0
IGVhc3kgdG8gZm9sbG93LCBhcyBpdCB3YXNuJ3QgY2xlYXIKKyAgICAgICAgYWNjZXNzIHRvIHdo
YXQgbWVtYmVycyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IHdoYXQgbXV0ZXgsIGluIHdoYXQKKyAg
ICAgICAgY2lyY3Vtc3RhbmNlcy4gQWxzbywgc29tZSBwYXJ0cyBvZiB0aGUgZGVzaWduIHdlcmUg
YWxzbyBpbnRyb2R1Y2luZworICAgICAgICBhZGRpY2lvbmFsIGNvbXBsZXhpdHksIHN1Y2ggYXMg
dGhlIGZpcnN0IHJlcXVlc3QgYmVpbmcgc2VudCBmcm9tIHRoZQorICAgICAgICBtYWluIHRocmVh
ZCB3aGVyZWFzIHRoZSByZXN0IHdlcmUgYmVpbmcgc2VudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhy
ZWFkCisgICAgICAgIG9yIGJhc2VzcmMgYXN5bmMgc3RhcnQuCisKKyAgICAgICAgSW4gcmVzcG9u
c2UsIHRoaXMgcGF0Y2ggcmV3b3JrcyBhbGwgdGhlIGxvY2tpbmcgaW4gV2ViS2l0V2ViU3JjIHRv
IHVzZQorICAgICAgICBXVEY6OkRhdGFNdXRleC4gVGhpcyBlbnN1cmVzIGFsbCBhY2Nlc3NlcyB0
byBpdHMgKG5vdyBleHBsaWNpdCkKKyAgICAgICAgcHJvdGVjdGVkIG1lbWJlcnMgYXJlIGxvY2tl
ZC4gVGhlIHR3byBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVzCisgICAgICAgIGhhdmUg
YmVlbiBzaW1wbGlmaWVkIGludG8gb25lLCBhcyB0aGVyZSB3YXMgbm8gb2J2aW91cyBuZWVkIG9y
IGJlbmVmaXQKKyAgICAgICAgZm9yIHR3byBvZiBlYWNoIGluIHRoaXMgY2FzZS4KKworICAgICAg
ICBSZXF1ZXN0cyBoYXZlIGJlZW4gbnVtYmVyZWQsIHdoaWNoIGFsbG93cyB0byBzYWZlbHkgYW5k
IGF0b21pY2FsbHkKKyAgICAgICAgaWdub3JlIHJlc3VsdHMgZnJvbSBjYW5jZWxsZWQgcmVxdWVz
dHMsIGF2b2lkaW5nIGRhdGEgY29ycnVwdGlvbgorICAgICAgICByYWNlcywgYW5kIG1ha2VzIGZv
bGxvd2luZyB0aGVtIGluIGRlYnVnIGxvZ3MgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgVGhlIGNv
bmRpdGlvbnMgZm9yIG1ha2luZyBhbmQgY2FuY2VsbGluZyByZXF1ZXN0cyBoYXZlIGJlZW4gc2lt
cGxpZmllZAorICAgICAgICB0byBhIHNpbXBsZXIgYW5kIHNhZmVyIG1vZGVsOiBUaGVyZSBpcyBh
dCBtb3N0IG9ubHkgb25lIGFjdGl2ZSByZXF1ZXN0CisgICAgICAgIGF0IGFueXRpbWUsIGZsdXNo
ZXMgY2FuY2VsIHRoZSByZXF1ZXN0LCBhbmQgdGhlIGZpcnN0IGNyZWF0ZSgpIGNhbGwKKyAgICAg
ICAgYWx3YXlzIG1ha2VzIHRoZSBuZXcgcmVxdWVzdCAoYm90aCBhdCBzdGFydHVwIGFuZCBhZnRl
ciBhIGZsdXNoKS4KKyAgICAgICAgRGVidWcgYXNzZXJ0cyBhbmQgbm90ZXMgYWJvdXQgdGhlIGZs
b3cgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgYmFzZXNyYworICAgICAgICBzZWVrcyBoYXZlIGJlZW4g
cHJvdmlkZWQuCisKKyAgICAgICAgQXMgdGhpcyBlZmZvcnQgbmVlZGVkIGEgcmV2aWV3IG9mIHRo
ZSBlbnRpcmUgV2ViS2l0V2ViU3JjLCBjbGVhbnVwcywKKyAgICAgICAgY29ycmVjdGlvbnMgYW5k
IGRvY3VtZW50YXRpb24gY29tbWVudHMgaGF2ZSBiZWVuIHByb3ZpZGVkIHdoZXJlCisgICAgICAg
IGFwcHJvcHJpYXRlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB2aXNpYmxl
IGJlaGF2aW9yIGNoYW5nZXMsIGp1c3Qgc3RhYmlsaXR5CisgICAgICAgIGltcHJvdmVtZW50cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJLaXRXZWJTcmNQcml2YXRlOjp+V2ViS2l0V2Vi
U3JjUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KToKKyAgICAg
ICAgKHdlYmtpdFdlYlNyY1Jlc2V0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NvbnN0cnVjdGVk
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdl
YlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldENvbnRleHQpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjU2VuZEV2ZW50KToKKyAgICAgICAgKHJlc3RhcnRMb2FkZXJJZk5l
ZWRlZCk6CisgICAgICAgIChzdG9wTG9hZGVySWZOZWVkZWQpOgorICAgICAgICAod2ViS2l0V2Vi
U3JjQ3JlYXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY01ha2VSZXF1ZXN0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAg
ICAod2ViS2l0V2ViU3JjR2V0U2l6ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNJc1NlZWthYmxl
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0RvU2Vlayk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNR
dWVyeSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNVbkxvY2spOgorICAgICAgICAod2ViS2l0V2Vi
U3JjVW5Mb2NrU3RvcCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAod2ViS2l0U3JjUGFzc2VkQ09S
U0FjY2Vzc0NoZWNrKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUpOgorICAgICAgICAoQ2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZCk6CisgICAgICAgIChDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKToKKyAgICAg
ICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAg
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
d2ViS2l0U3JjV291bGRUYWludE9yaWdpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oOgorCiAyMDIwLTA0LTIzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBnZXREaXNwbGF5TWVkaWEg
aXMgbm90IHJlc3BlY3RpbmcgYXNwZWN0IHJhdGlvIHdpdGggbWF4IGNvbnN0cmFpbnRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuaAppbmRleCBkOTQwZjhjYTBmOTUwZmY0MjQzZmU0NTYyOTRjYmYz
ZTQ4NTJkMzRlLi4xOTUwOWZlMWZkZjdjNjc0NzdiYjlhOGJiNjdiYmNiYmYxZTA1ZWRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgV2ViS2l0
VmlkZW9TaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyYyBXZWJLaXRXZWJTcmM7Citz
dHJ1Y3QgV2ViS2l0V2ViU3JjOwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHR5cGVkZWYgc3Ry
dWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcAppbmRleCBlOWZlYjIxMDBhN2VmNWY1YjEwYjg2M2E1NzU2ZDcw
NGMzN2M1NTJhLi43ZjdlMjQ4ZjkwYTQxMzFmNzgwZGYxZWE3MjczMGQzZDA3NWE3MDU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNl
YmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHlyaWdodCAoQykgMjAxMyBD
b2xsYWJvcmEgTHRkLgotICogIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICogIENv
cHlyaWdodCAoQykgMjAxOSwgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZE5vdGlmaWVyLmgiCiAj
aW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VM
b2FkZXIuaCIKICNpbmNsdWRlICJQb2xpY3lDaGVja2VyLmgiCkBAIC0zNCwxMSArMzMsMTQgQEAK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNs
dWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFNdXRleC5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvV1RGR1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgV1RGOjpEYXRhTXV0ZXg7CiAKIC8vIE5ldmVyIHBh
dXNlIGRvd25sb2FkIG9mIG1lZGlhIHJlc291cmNlcyBzbWFsbGVyIHRoYW4gMk1pQi4KICNkZWZp
bmUgU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUgMiAqIDEwMjQgKiAxMDI0CkBAIC01NSw3
ICs1Nyw3IEBAIGNsYXNzIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50IGZpbmFsIDogcHVi
bGljIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQpOwogcHVibGljOgotICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktp
dFdlYlNyYyosIFJlc291cmNlUmVxdWVzdCYmKTsKKyAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudChXZWJLaXRXZWJTcmMqLCBSZXNvdXJjZVJlcXVlc3QmJiwgdW5zaWduZWQgcmVxdWVz
dE51bWJlcik7CiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoKTsK
IAogICAgIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4mIHNl
Y3VyaXR5T3JpZ2lucygpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luczsgfQpAQCAtODAsNzMgKzgy
LDc5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBzX3JlZHVjZUJsb2Nr
c2l6ZUZhY3RvciB7IDAuNSB9OwogICAgIGludCBtX3JlZHVjZUJsb2Nrc2l6ZUNvdW50IHsgMCB9
OwogICAgIGludCBtX2luY3JlYXNlQmxvY2tzaXplQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQg
bV9yZXF1ZXN0TnVtYmVyOwogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NyYzsKICAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPj4gbV9vcmlnaW5zOwogfTsKIAotZW51bSBNYWluVGhyZWFkU291cmNlTm90
aWZpY2F0aW9uIHsKLSAgICBTdGFydCA9IDEgPDwgMCwKLSAgICBTdG9wID0gMSA8PCAxLAotICAg
IERpc3Bvc2UgPSAxIDw8IDIsCi19OwotCi1zdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewot
ICAgIH5fV2ViS2l0V2ViU3JjUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBpZiAobm90aWZpZXIg
JiYgbm90aWZpZXItPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbm90aWZpZXItPm5vdGlmeUFu
ZFdhaXQoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6RGlzcG9zZSwgWyZdIHsKLSAgICAg
ICAgICAgICAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogY2xp
ZW50ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQqPihyZXNvdXJj
ZS0+Y2xpZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpZW50LT5zZXRTb3VyY2VFbGVtZW50KG51bGxwdHIpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJlc291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGxvYWRlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIG5vdGlmaWVyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBub3Rp
ZmllciA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9CitzdHJ1Y3QgV2ViS2l0V2ViU3JjUHJp
dmF0ZSB7CisgICAgLy8gQ29uc3RhbnRzIGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb246
CisgICAgdW5zaWduZWQgbWluaW11bUJsb2Nrc2l6ZTsKIAorICAgIC8vIENvbmZpZ3VyYXRpb24g
b2YgdGhlIGVsZW1lbnQgKHByb3BlcnRpZXMgc2V0IGJ5IHRoZSB1c2VyIG9mIFdlYktpdFdlYlNy
Yyk6CisgICAgLy8gVGhleSBjYW4gb25seSBjaGFuZ2Ugd2hlbiBzdGF0ZSA8IFBBVVNFRC4KICAg
ICBDU3RyaW5nIG9yaWdpbmFsVVJJOwotICAgIENTdHJpbmcgcmVkaXJlY3RlZFVSSTsKICAgICBi
b29sIGtlZXBBbGl2ZTsKICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZXh0cmFIZWFkZXJz
OwogICAgIGJvb2wgY29tcHJlc3M7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gaHR0cE1ldGhvZDsK
LSAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwotICAgIFJlZlB0cjxQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VMb2FkZXI+IGxvYWRlcjsKLSAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291
cmNlPiByZXNvdXJjZTsKLSAgICBSZWZQdHI8TWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWRT
b3VyY2VOb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAgICBib29sIGRpZFBhc3NBY2Nlc3NDb250
cm9sQ2hlY2s7Ci0gICAgYm9vbCB3ZXJlSGVhZGVyc1JlY2VpdmVkOwotICAgIENvbmRpdGlvbiBo
ZWFkZXJzQ29uZGl0aW9uOwotICAgIExvY2sgcmVzcG9uc2VMb2NrOwotICAgIGJvb2wgd2FzUmVz
cG9uc2VSZWNlaXZlZDsKLSAgICBDb25kaXRpb24gcmVzcG9uc2VDb25kaXRpb247Ci0gICAgYm9v
bCBkb2VzSGF2ZUVPUzsKLSAgICBib29sIGlzRmx1c2hpbmcgeyBmYWxzZSB9OwotICAgIHVpbnQ2
NF90IHJlYWRQb3NpdGlvbjsKLSAgICB1aW50NjRfdCByZXF1ZXN0ZWRQb3NpdGlvbjsKLSAgICB1
aW50NjRfdCBzdG9wUG9zaXRpb247Ci0gICAgYm9vbCBpc0R1cmF0aW9uU2V0OwotICAgIGJvb2wg
aGF2ZVNpemU7Ci0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBib29sIGlzU2Vla2FibGU7Ci0gICAg
Ym9vbCBpc1NlZWtpbmc7Ci0gICAgYm9vbCB3YXNTZWVraW5nIHsgZmFsc2UgfTsKLSAgICB1bnNp
Z25lZCBtaW5pbXVtQmxvY2tzaXplOwotICAgIExvY2sgYWRhcHRlckxvY2s7Ci0gICAgQ29uZGl0
aW9uIGFkYXB0ZXJDb25kaXRpb247Ci0gICAgYm9vbCBpc0Rvd25sb2FkU3VzcGVuZGVkIHsgZmFs
c2UgfTsKLSAgICBHUmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7Ci0gICAgR1JlZlB0cjxHc3RF
dmVudD4gaHR0cEhlYWRlcnNFdmVudDsKLSAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaHR0
cEhlYWRlcnM7Ci0gICAgV2FsbFRpbWUgZG93bmxvYWRTdGFydFRpbWUgeyBXYWxsVGltZTo6bmFu
KCkgfTsKLSAgICB1aW50NjRfdCB0b3RhbERvd25sb2FkZWRCeXRlcyB7IDAgfTsKKworICAgIHN0
cnVjdCBTdHJlYW1pbmdNZW1iZXJzIHsKKyAgICAgICAgflN0cmVhbWluZ01lbWJlcnMoKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBCeSB0aGUgdGltZSB3ZSdyZSBkZXN0cm95aW5nIFdlYktp
dFdlYlNyY1ByaXZhdGUgdW5Mb2NrKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZXJl
Zm9yZSByZXNvdXJjZQorICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNs
ZWFyZWQuCisgICAgICAgICAgICBBU1NFUlQoIXJlc291cmNlKTsKKyAgICAgICAgICAgIC8vIFJl
c291cmNlTG9hZGVyIGlzIG5vdCB0aHJlYWQtc2FmZS4gSXQncyBub3QgZXZlbiBUaHJlYWRTYWZl
UmVmQ291bnRlZC4gVGhlcmVmb3JlLCB0byBiZSBzYWZlLCB3ZSB3YW50IHRoZQorICAgICAgICAg
ICAgLy8gdW5yZWYgdG8gaGFwcGVuIGluIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgIGlm
IChsb2FkZXIpCisgICAgICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtsb2Fk
ZXIgPSBXVEZNb3ZlKGxvYWRlcildIHsgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQcm9w
ZXJ0aWVzIGluaXRpYWxseSBlbXB0eSwgYnV0IHNldCBvbmNlIHRoZSBmaXJzdCBIVFRQIHJlc3Bv
bnNlIGFycml2ZXM6CisgICAgICAgIGJvb2wgd2FzUmVzcG9uc2VSZWNlaXZlZDsKKyAgICAgICAg
Q1N0cmluZyByZWRpcmVjdGVkVVJJOworICAgICAgICBib29sIGRpZFBhc3NBY2Nlc3NDb250cm9s
Q2hlY2s7CisgICAgICAgIGJvb2wgaGF2ZVNpemU7CisgICAgICAgIHVpbnQ2NF90IHNpemU7Cisg
ICAgICAgIGJvb2wgaXNTZWVrYWJsZTsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBwZW5kaW5n
Q2FwczsKKyAgICAgICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBwZW5kaW5nSHR0cEhlYWRlcnNNZXNz
YWdlOyAvLyBTZXQgZnJvbSBNVCwgc2VudCBmcm9tIGNyZWF0ZSgpLgorICAgICAgICBHUmVmUHRy
PEdzdEV2ZW50PiBwZW5kaW5nSHR0cEhlYWRlcnNFdmVudDsgLy8gU2V0IGZyb20gTVQsIHNlbnQg
ZnJvbSBjcmVhdGUoKS4KKworICAgICAgICAvLyBQcm9wZXJ0aWVzIHVwZGF0ZWQgd2l0aCBldmVy
eSBkb3dubG9hZGVkIGRhdGEgYmxvY2s6CisgICAgICAgIFdhbGxUaW1lIGRvd25sb2FkU3RhcnRU
aW1lIHsgV2FsbFRpbWU6Om5hbigpIH07CisgICAgICAgIHVpbnQ2NF90IHRvdGFsRG93bmxvYWRl
ZEJ5dGVzIHsgMCB9OworICAgICAgICBib29sIGRvZXNIYXZlRU9TOyAvLyBTZXQgYm90aCB3aGVu
IHdlIHJlYWNoIHN0b3BQb3NpdGlvbiBhbmQgb24gZXJyb3JzIChpbmNsdWRpbmcgb24gcmVzcG9u
c2VSZWNlaXZlZCkuCisgICAgICAgIGJvb2wgaXNEb3dubG9hZFN1c3BlbmRlZCB7IGZhbHNlIH07
IC8vIFNldCB0byB0cnVlIGZyb20gdGhlIG5ldHdvcmsgaGFuZGxlciB3aGVuIHRoZSBoaWdoIHdh
dGVyIGxldmVsIGlzIHJlYWNoZWQuCisKKyAgICAgICAgLy8gT2J0YWluZWQgYnkgbWVhbnMgb2Yg
R3N0Q29udGV4dCBxdWVyaWVzIGJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IEhUVFAgcmVxdWVzdC4K
KyAgICAgICAgLy8gV2UgdXNlIGl0IGZvciBnZXR0aW5nIGFjY2VzcyB0byBXZWJLaXQgbmV0d29y
a2luZyBvYmplY3RzOiB0aGUgUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyIGZhY3RvcnkgW2Ny
ZWF0ZVJlc291cmNlTG9hZGVyKCldCisgICAgICAgIC8vIGFuZCB0aGUgcGxheWVyIEhUVFAgcmVm
ZXJyZXIgc3RyaW5nLgorICAgICAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOworCisg
ICAgICAgIC8vIFByb3BlcnRpZXMgdXNlZCBmb3IgR1N0cmVhbWVyIGRhdGEtZmxvdyBpbiBjcmVh
dGUoKS4KKyAgICAgICAgYm9vbCBpc0ZsdXNoaW5nIHsgZmFsc2UgfTsKKyAgICAgICAgQ29uZGl0
aW9uIHJlc3BvbnNlQ29uZGl0aW9uOyAvLyBNdXN0IGJlIHNpZ25hbGVkIGFmdGVyIGFueSB1cGRh
dGVzIG9uIEhUVFAgcmVxdWVzdHMsIGFuZCB3aGVuIGZsdXNoaW5nLgorICAgICAgICBHUmVmUHRy
PEdzdEFkYXB0ZXI+IGFkYXB0ZXI7CisgICAgICAgIGJvb2wgaXNEdXJhdGlvblNldDsKKyAgICAg
ICAgdWludDY0X3QgcmVhZFBvc2l0aW9uOworCisgICAgICAgIC8vIFByb3BlcnRpZXMgb25seSBz
ZXQgZHVyaW5nIHNlZWsuCisgICAgICAgIC8vIGJhc2VzcmMgZW5zdXJlcyB0aGV5IGNhbid0IGNo
YW5nZSBkdXJpbmcgYSBjcmVhdGUoKSBjYWxsIGJ5IHRha2luZyB0aGUgU1RSRUFNSU5HX0xPQ0su
CisgICAgICAgIC8vIChBbiBpbml0aWFsIHNlZWsgaXMgYWxzbyBndWFyYW50ZWVkIGJ5IGJhc2Vz
cmMuKQorICAgICAgICB1bnNpZ25lZCByZXF1ZXN0TnVtYmVyIHsgMSB9OworICAgICAgICB1aW50
NjRfdCByZXF1ZXN0ZWRQb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgdWludDY0X3Qgc3RvcFBvc2l0
aW9uIHsgVUlOVDY0X01BWCB9OworCisgICAgICAgIGJvb2wgaXNSZXF1ZXN0UGVuZGluZyB7IHRy
dWUgfTsKKworICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyPiBsb2Fk
ZXI7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IHJlc291cmNlOworICAg
IH07CisgICAgRGF0YU11dGV4PFN0cmVhbWluZ01lbWJlcnM+IGRhdGFNdXRleDsKIH07CiAKIGVu
dW0gewpAQCAtMTY5LDkgKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1VyaUhhbmRs
ZXJJbml0KGdwb2ludGVyIGdJZmFjZSwgZ3BvaW50ZXIgaWZhY2VEYXRhKTsKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdl
YlNyY1NldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlELCBjb25zdCBHVmFsdWUq
LCBHUGFyYW1TcGVjKik7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2Jq
ZWN0KiwgZ3VpbnQgcHJvcGVydHlJRCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOwotc3RhdGljIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBH
c3RTdGF0ZUNoYW5nZSk7CiBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJLaXRXZWJTcmNDcmVhdGUo
R3N0UHVzaFNyYyosIEdzdEJ1ZmZlcioqKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNN
YWtlUmVxdWVzdChHc3RCYXNlU3JjKiwgYm9vbCk7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNN
YWtlUmVxdWVzdChXZWJLaXRXZWJTcmMqLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6
U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImKTsKIHN0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRXZWJTcmNTdGFydChHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
U3RvcChHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShH
c3RCYXNlU3JjKiwgZ3VpbnQ2NCogc2l6ZSk7CkBAIC0xODEsOCArMTg4LDggQEAgc3RhdGljIGdi
b29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5KEdzdEJhc2VTcmMqLCBHc3RRdWVyeSopOwogc3RhdGlj
IGdib29sZWFuIHdlYktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjVW5Mb2NrU3RvcChHc3RCYXNlU3JjKik7CiBzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNTZXRDb250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7Ci1zdGF0aWMgdm9p
ZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKik7Ci1zdGF0aWMgdm9pZCBzdG9w
TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKik7CitzdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVy
SWZOZWVkZWQoV2ViS2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJik7CitzdGF0aWMgdm9pZCBzdG9wTG9hZGVy
SWZOZWVkZWQoV2ViS2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJik7CiAKICNkZWZpbmUgd2Via2l0X3dlYl9z
cmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwogV0VCS0lUX0RFRklORV9UWVBFX1dJVEhfQ09E
RShXZWJLaXRXZWJTcmMsIHdlYmtpdF93ZWJfc3JjLCBHU1RfVFlQRV9QVVNIX1NSQywKQEAgLTIz
MCw3ICsyMzcsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KFdlYktp
dFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibWV0aG9k
IiwgIm1ldGhvZCIsICJUaGUgSFRUUCBtZXRob2QgdG8gdXNlIChkZWZhdWx0OiBHRVQpIiwKICAg
ICAgICAgICAgIG51bGxwdHIsIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURX
UklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7CiAKLSAgICBla2xhc3MtPmNoYW5nZV9z
dGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKTsKICAgICBl
a2xhc3MtPnNldF9jb250ZXh0ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2ViU3JjU2V0Q29u
dGV4dCk7CiAKICAgICBHc3RCYXNlU3JjQ2xhc3MqIGJhc2VTcmNDbGFzcyA9IEdTVF9CQVNFX1NS
Q19DTEFTUyhrbGFzcyk7CkBAIC0yNDcsMTggKzI1Myw0MCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3NyY19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICBwdXNoU3Jj
Q2xhc3MtPmNyZWF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NyZWF0ZSk7CiB9
CiAKLXN0YXRpYyB2b2lkIHdlYmtpdFdlYlNyY1Jlc2V0KFdlYktpdFdlYlNyYyogc3JjKQotewot
ICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CitlbnVtIGNsYXNzIFJl
c2V0VHlwZSB7CisgICAgU29mdCwKKyAgICBIYXJkCit9OwogCitzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJTcmNSZXNldChXZWJLaXRXZWJTcmMqIHNyYywgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZh
dGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJiBtZW1iZXJzLCBSZXNldFR5cGUg
cmVzZXRUeXBlKQorewogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzZXR0aW5nIGludGVy
bmFsIHN0YXRlIik7Ci0gICAgcHJpdi0+aGF2ZVNpemUgPSBmYWxzZTsKLSAgICBwcml2LT53ZXJl
SGVhZGVyc1JlY2VpdmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNTZWVrYWJsZSA9IGZhbHNlOwot
ICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IDA7Ci0gICAgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24g
PSAwOwotICAgIHByaXYtPnN0b3BQb3NpdGlvbiA9IC0xOwotICAgIHByaXYtPnNpemUgPSAwOwor
ICAgIGdzdF9hZGFwdGVyX2NsZWFyKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOworICAgIG1lbWJl
cnMtPmlzUmVxdWVzdFBlbmRpbmcgPSB0cnVlOworCisgICAgLy8gUmVzZXQgcmVxdWVzdCBzdGF0
ZS4gQW55IHByZXZpb3VzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsbGVkIGF0IHRoaXMgcG9pbnQu
CisgICAgbWVtYmVycy0+d2FzUmVzcG9uc2VSZWNlaXZlZCA9IGZhbHNlOworICAgIG1lbWJlcnMt
PmRvZXNIYXZlRU9TID0gZmFsc2U7CisgICAgbWVtYmVycy0+ZG93bmxvYWRTdGFydFRpbWUgPSBX
YWxsVGltZTo6bmFuKCk7CisgICAgbWVtYmVycy0+dG90YWxEb3dubG9hZGVkQnl0ZXMgPSAwOyAv
LyBSZXNldHRlZCBmb3IgZWFjaCByZXF1ZXN0LCB1c2VkIHRvIGVzdGltYXRlIGRvd25sb2FkIHNw
ZWVkLgorICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UgPSBudWxscHRyOwor
ICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc0V2ZW50ID0gbnVsbHB0cjsKKworICAgIC8v
IEFmdGVyIGEgZmx1c2gsIHdlIGhhdmUgdG8gZW1pdCBhIHNlZ21lbnQgYWdhaW4uCisgICAgbWVt
YmVycy0+aXNEdXJhdGlvblNldCA9IGZhbHNlOworCisgICAgLy8gSGFyZCByZXNldCBpcyBkb25l
IGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuCisgICAgLy8gU29m
dCByZXNldCBpcyBkb25lIGR1cmluZyBmbHVzaGVzLiBJbiB0aGVzZSwgd2UgcHJlc2VydmUgdGhl
IHNlZWsgdGFyZ2V0LgorICAgIGlmIChyZXNldFR5cGUgPT0gUmVzZXRUeXBlOjpIYXJkKSB7Cisg
ICAgICAgIG1lbWJlcnMtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2sgPSBmYWxzZTsKKyAgICAg
ICAgbWVtYmVycy0+cmVkaXJlY3RlZFVSSSA9IENTdHJpbmcoKTsKKyAgICAgICAgbWVtYmVycy0+
aXNTZWVrYWJsZSA9IGZhbHNlOworICAgICAgICBtZW1iZXJzLT5oYXZlU2l6ZSA9IGZhbHNlOwor
ICAgICAgICBtZW1iZXJzLT5zaXplID0gMDsKKyAgICAgICAgbWVtYmVycy0+cmVxdWVzdGVkUG9z
aXRpb24gPSAwOworICAgICAgICBtZW1iZXJzLT5zdG9wUG9zaXRpb24gPSBVSU5UNjRfTUFYOwor
ICAgICAgICBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPSBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlv
bjsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0NvbnN0cnVjdGVkKEdPYmpl
Y3QqIG9iamVjdCkKQEAgLTI2OCwxMyArMjk2LDEzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdF
QktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKIAotICAgIHByaXYtPm5vdGlmaWVyID0gTWFpblRocmVhZE5vdGlmaWVyPE1haW5U
aHJlYWRTb3VyY2VOb3RpZmljYXRpb24+OjpjcmVhdGUoKTsKLSAgICBwcml2LT5hZGFwdGVyID0g
YWRvcHRHUmVmKGdzdF9hZGFwdGVyX25ldygpKTsKICAgICBwcml2LT5taW5pbXVtQmxvY2tzaXpl
ID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKSk7CiAK
LSAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMpOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQ
cml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRh
dGFNdXRleCk7CisgICAgbWVtYmVycy0+YWRhcHRlciA9IGFkb3B0R1JlZihnc3RfYWRhcHRlcl9u
ZXcoKSk7CisgICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNldFR5cGU6Okhh
cmQpOworCiAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9hdXRvbWF0aWNfZW9zKEdTVF9CQVNFX1NSQ19D
QVNUKHNyYyksIEZBTFNFKTsKLSAgICBnc3RfYmFzZV9zcmNfc2V0X2FzeW5jKEdTVF9CQVNFX1NS
Q19DQVNUKHNyYyksIFRSVUUpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTZXRQcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCkBAIC0zMTQsOSArMzQyLDExIEBAIHN0YXRpYyB2b2lkIHdlYktp
dFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUq
IHZhbHVlCiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgUFJPUF9SRVNPTFZFRF9MT0NBVElPTjoKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5n
KHZhbHVlLCBwcml2LT5yZWRpcmVjdGVkVVJJLmlzTnVsbCgpID8gcHJpdi0+b3JpZ2luYWxVUkku
ZGF0YSgpIDogcHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCkpOworICAgIGNhc2UgUFJPUF9SRVNP
TFZFRF9MT0NBVElPTjogeworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6
U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5kYXRhTXV0ZXgp
OworICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIG1lbWJlcnMtPnJlZGlyZWN0ZWRV
UkkuaXNOdWxsKCkgPyBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkgOiBtZW1iZXJzLT5yZWRpcmVj
dGVkVVJJLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFBST1BfS0VF
UF9BTElWRToKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+a2VlcEFs
aXZlKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNDMsMjAyICszNzMsMTk4IEBAIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY1NldENvbnRleHQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0Q29udGV4dCog
Y29udGV4dCkKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImNvbnRleHQgdHlwZTogJXMiLCBn
c3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlKGNvbnRleHQpKTsKICAgICBpZiAoZ3N0X2NvbnRl
eHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVY
VF9UWVBFX05BTUUpKSB7CiAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0
dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAicGxheWVy
Iik7Ci0gICAgICAgIHByaXYtPnBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXIq
PihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIERhdGFNdXRleDxXZWJLaXRX
ZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHBy
aXYtPmRhdGFNdXRleCk7CisgICAgICAgIG1lbWJlcnMtPnBsYXllciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TWVkaWFQbGF5ZXIqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CiAgICAgfQogICAg
IEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcyktPnNldF9jb250ZXh0KGVsZW1lbnQsIGNv
bnRleHQpOwogfQogCi1zdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2Vi
U3JjKiBzcmMpCitzdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3Jj
KiBzcmMsIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6
TG9ja2VkV3JhcHBlciYgbWVtYmVycykKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKCFwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkKSB7Cisg
ICAgaWYgKCFtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSB7CiAgICAgICAgIEdTVF9UUkFD
RV9PQkpFQ1Qoc3JjLCAiZG93bmxvYWQgYWxyZWFkeSBhY3RpdmUiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiaXMgZG93bmxvYWQgc3VzcGVu
ZGVkICVzLCBkb2VzIGhhdmUgRU9TICVzLCBkb2VzIGhhdmUgc2l6ZSAlcywgaXMgc2Vla2FibGUg
JXMsIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIChtaW4gJXUpIiwgYm9vbEZv
clByaW50aW5nKHByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQpLCBib29sRm9yUHJpbnRpbmcocHJp
di0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aGF2ZVNpemUpCi0gICAgICAg
ICwgYm9vbEZvclByaW50aW5nKHByaXYtPmlzU2Vla2FibGUpLCBwcml2LT5zaXplLCBTTUFMTF9N
RURJQV9SRVNPVVJDRV9NQVhfU0laRSk7Ci0gICAgaWYgKHByaXYtPmRvZXNIYXZlRU9TIHx8ICFw
cml2LT5oYXZlU2l6ZSB8fCAhcHJpdi0+aXNTZWVrYWJsZSB8fCBwcml2LT5zaXplIDw9IFNNQUxM
X01FRElBX1JFU09VUkNFX01BWF9TSVpFKSB7CisgICAgICAgICIgKG1pbiAldSkiLCBib29sRm9y
UHJpbnRpbmcobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQcmludGluZyht
ZW1iZXJzLT5kb2VzSGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5oYXZlU2l6ZSkK
KyAgICAgICAgLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNTZWVrYWJsZSksIG1lbWJlcnMt
PnNpemUsIFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFKTsKKyAgICBpZiAobWVtYmVycy0+
ZG9lc0hhdmVFT1MgfHwgIW1lbWJlcnMtPmhhdmVTaXplIHx8ICFtZW1iZXJzLT5pc1NlZWthYmxl
IHx8IG1lbWJlcnMtPnNpemUgPD0gU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUpIHsKICAg
ICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJkb3dubG9hZCBjYW5ub3QgYmUgc3RvcHBlZC9y
ZXN0YXJ0ZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBHU1RfVFJBQ0VfT0JKRUNU
KHNyYywgInJlYWQgcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBzdGF0ZSAlcyIsIHBy
aXYtPnJlYWRQb3NpdGlvbiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NUX1NUQVRFKHNy
YykpKTsKLSAgICBpZiAoIXByaXYtPnJlYWRQb3NpdGlvbiB8fCBwcml2LT5yZWFkUG9zaXRpb24g
PT0gcHJpdi0+c2l6ZSB8fCBHU1RfU1RBVEUoc3JjKSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInJlYWQgcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1B
VCAiLCBzdGF0ZSAlcyIsIG1lbWJlcnMtPnJlYWRQb3NpdGlvbiwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUoR1NUX1NUQVRFKHNyYykpKTsKKyAgICBpZiAoIW1lbWJlcnMtPnJlYWRQb3NpdGlv
biB8fCBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPT0gbWVtYmVycy0+c2l6ZSB8fCBHU1RfU1RBVEUo
c3JjKSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMs
ICJjYW4ndCByZXN0YXJ0IGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIu
Z2V0KCkpOwotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSAlemQgKG1pbiAl
MS4wZikiLCBxdWV1ZVNpemUKLSAgICAgICAgLCBwcml2LT5zaXplICogSElHSF9RVUVVRV9GQUNU
T1JfVEhSRVNIT0xEICogTE9XX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpOworICAgIHNpemVfdCBx
dWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSk7
CisgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJxdWV1ZSBzaXplICV6dSAobWluICUxLjBmKSIs
IHF1ZXVlU2l6ZQorICAgICAgICAsIG1lbWJlcnMtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9U
SFJFU0hPTEQgKiBMT1dfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CiAKLSAgICBpZiAocXVldWVT
aXplID49IHByaXYtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQgKiBMT1dfUVVF
VUVfRkFDVE9SX1RIUkVTSE9MRCkgeworICAgIGlmIChxdWV1ZVNpemUgPj0gbWVtYmVycy0+c2l6
ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCAqIExPV19RVUVVRV9GQUNUT1JfVEhSRVNI
T0xEKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSBhYm92ZSBs
b3cgd2F0ZXJtYXJrLCBub3QgcmVzdGFydGluZyBkb3dubG9hZCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJyZXN0YXJ0aW5nIGRvd25sb2Fk
Iik7Ci0gICAgcHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCA9IGZhbHNlOwotICAgIHdlYktpdFdl
YlNyY01ha2VSZXF1ZXN0KEdTVF9CQVNFX1NSQ19DQVNUKHNyYyksIGZhbHNlKTsKKyAgICBtZW1i
ZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkID0gZmFsc2U7CisgICAgbWVtYmVycy0+cmVxdWVzdE51
bWJlcisrOworICAgIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uID0gbWVtYmVycy0+cmVhZFBv
c2l0aW9uOworICAgIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KHNyYywgbWVtYmVycyk7CiB9CiAK
IAotc3RhdGljIHZvaWQgc3RvcExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyogc3JjKQorc3Rh
dGljIHZvaWQgc3RvcExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyogc3JjLCBEYXRhTXV0ZXg8
V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImIG1l
bWJlcnMpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKHByaXYtPmlzRG93bmxvYWRTdXNw
ZW5kZWQpIHsKKyAgICBpZiAobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCkgewogICAgICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImRvd25sb2FkIGFscmVhZHkgc3VzcGVuZGVkIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImlzIGRv
d25sb2FkIHN1c3BlbmRlZCAlcywgZG9lcyBoYXZlIHNpemUgJXMsIGlzIHNlZWthYmxlICVzLCBz
aXplICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAobWluICV1KSIKLSAgICAgICAgLCBib29sRm9yUHJp
bnRpbmcocHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQcmludGluZyhwcml2LT5o
YXZlU2l6ZSksIGJvb2xGb3JQcmludGluZyhwcml2LT5pc1NlZWthYmxlKSwgcHJpdi0+c2l6ZQor
ICAgICAgICAsIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSwg
Ym9vbEZvclByaW50aW5nKG1lbWJlcnMtPmhhdmVTaXplKSwgYm9vbEZvclByaW50aW5nKG1lbWJl
cnMtPmlzU2Vla2FibGUpLCBtZW1iZXJzLT5zaXplCiAgICAgICAgICwgU01BTExfTUVESUFfUkVT
T1VSQ0VfTUFYX1NJWkUpOwotICAgIGlmICghcHJpdi0+aGF2ZVNpemUgfHwgIXByaXYtPmlzU2Vl
a2FibGUgfHwgcHJpdi0+c2l6ZSA8PSBTTUFMTF9NRURJQV9SRVNPVVJDRV9NQVhfU0laRSkgewor
ICAgIGlmICghbWVtYmVycy0+aXNTZWVrYWJsZSB8fCBtZW1iZXJzLT5zaXplIDw9IFNNQUxMX01F
RElBX1JFU09VUkNFX01BWF9TSVpFKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAi
ZG93bmxvYWQgY2Fubm90IGJlIHN0b3BwZWQvcmVzdGFydGVkIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHBy
aXYtPmFkYXB0ZXIuZ2V0KCkpOwotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6
ZSAlemQgKG1heCAlMS4wZikiLCBxdWV1ZVNpemUsIHByaXYtPnNpemUgKiBISUdIX1FVRVVFX0ZB
Q1RPUl9USFJFU0hPTEQpOwotICAgIGlmIChxdWV1ZVNpemUgPD0gcHJpdi0+c2l6ZSAqIEhJR0hf
UVVFVUVfRkFDVE9SX1RIUkVTSE9MRCkgeworICAgIHNpemVfdCBxdWV1ZVNpemUgPSBnc3RfYWRh
cHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSk7CisgICAgR1NUX1RSQUNFX09C
SkVDVChzcmMsICJxdWV1ZSBzaXplICV6dSAobWF4ICUxLjBmKSIsIHF1ZXVlU2l6ZSwgbWVtYmVy
cy0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CisgICAgaWYgKHF1ZXVlU2l6
ZSA8PSBtZW1iZXJzLT5zaXplICogSElHSF9RVUVVRV9GQUNUT1JfVEhSRVNIT0xEKSB7CiAgICAg
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSB1bmRlciBoaWdoIHdhdGVybWFy
aywgbm90IHN0b3BwaW5nIGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgInN0b3BwaW5nIGRvd25sb2FkIik7Ci0gICAgcHJpdi0+
aXNEb3dubG9hZFN1c3BlbmRlZCA9IHRydWU7Ci0gICAgcHJpdi0+cmVzb3VyY2UtPnN0b3AoKTsK
KyAgICBpZiAobWVtYmVycy0+cmVhZFBvc2l0aW9uID09IG1lbWJlcnMtPnNpemUpIHsKKyAgICAg
ICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJqdXN0IGRvd25sb2FkZWQgdGhlIGxhc3QgY2h1bmsg
aW4gdGhlIGZpbGUsIGxvYWRGaW5pc2hlZCgpIGlzIGFib3V0IHRvIGJlIGNhbGxlZCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSJXU6IHN0
b3BwaW5nIGRvd25sb2FkIiwgbWVtYmVycy0+cmVxdWVzdE51bWJlcik7CisgICAgbWVtYmVycy0+
aXNEb3dubG9hZFN1c3BlbmRlZCA9IHRydWU7CisgICAgbWVtYmVycy0+cmVzb3VyY2UtPnN0b3Ao
KTsKIH0KIAogc3RhdGljIEdzdEZsb3dSZXR1cm4gd2ViS2l0V2ViU3JjQ3JlYXRlKEdzdFB1c2hT
cmMqIHB1c2hTcmMsIEdzdEJ1ZmZlcioqIGJ1ZmZlcikKIHsKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1QocHVz
aFNyYyk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsK
ICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIERhdGFNdXRl
eDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBt
ZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7CisKKyAgICAvLyBXZSBuZWVkIG1lbWJlcnMtPnBsYXll
ciB0byBtYWtlIHJlcXVlc3RzLiBUaGVyZSBhcmUgdHdvIG1lY2hhbmlzbXMgZm9yIHRoaXMuCisg
ICAgLy8KKyAgICAvLyAxKSB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcigpIGlzIGNhbGxlZCBi
eSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgYnkgbWVhbnMgb2YgaG9va2luZyBwbGF5Ymlu
J3MKKyAgICAvLyAgICAic291cmNlLXNldHVwIiBldmVudC4gVGhpcyBkb2Vzbid0IHdvcmsgZm9y
IGFkZGl0aW9uYWwgV2ViS2l0V2ViU3JjIGVsZW1lbnRzIGNyZWF0ZWQgYnkgYWRhcHRpdmVkZW11
eC4KKyAgICAvLworICAgIC8vIDIpIEEgR3N0Q29udGV4dCBxdWVyeSBtYWRlIGhlcmUuIEJlY2F1
c2Ugb2YgYSBidWcsIHRoaXMgb25seSB3b3JrcyBpbiBHU3RyZWFtZXIgPj0gMS4xMi4KKyAgICAv
LworICAgIC8vIEFzIGEgY29tcGF0aWJpbGl0eSB3b3JrYXJvdW5kLCB0aGUgaHR0cDogVVJJIHBy
b3RvY29sIGlzIG9ubHkgcmVnaXN0ZXJlZCBmb3IgZ3N0Pj0xLjEyOyBvdGhlcndpc2UgdXNpbmcK
KyAgICAvLyB3ZWJraXQraHR0cDosIHdoaWNoIGlzIHVzZWQgYnkgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyIGJ1dCBub3QgYnkgYWRhcHRpdmVkZW11eCdzIGFkZGl0aW9uYWwgc291cmNlCisg
ICAgLy8gZWxlbWVudHMsIHRoZXJlZm9yZSB1c2luZyBzb3VwaHR0cHNyYyBpbnN0ZWFkIGFuZCBu
b3Qgcm91dGluZyB0cmFmZmljIHRocm91Z2ggdGhlIE5ldHdvcmtQcm9jZXNzLgorICAgIGlmICh3
ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDApICYmICFtZW1iZXJzLT5wbGF5ZXIpIHsKKyAg
ICAgICAgbWVtYmVycy5ydW5VbmxvY2tlZChbc3JjLCBiYXNlU3JjXSgpIHsKKyAgICAgICAgICAg
IEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfY29udGV4
dChXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUpKTsKKyAgICAgICAgICAg
IGlmIChnc3RfcGFkX3BlZXJfcXVlcnkoR1NUX0JBU0VfU1JDX1BBRChiYXNlU3JjKSwgcXVlcnku
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgR3N0Q29udGV4dCogY29udGV4dDsKKworICAgICAg
ICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb250ZXh0KHF1ZXJ5LmdldCgpLCAmY29udGV4dCk7
CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlRfQ0FT
VChzcmMpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdz
dF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9tZXNzYWdl
X25ld19uZWVkX2NvbnRleHQoR1NUX09CSkVDVF9DQVNUKHNyYyksIFdFQktJVF9XRUJfU1JDX1BM
QVlFUl9DT05URVhUX1RZUEVfTkFNRSkpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKG1lbWJl
cnMtPmlzRmx1c2hpbmcpCisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKG1lbWJlcnMtPnBsYXllcik7CiAKLSAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNyYywgInJlYWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiByZXF1
ZXN0ZWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnJlYWRQb3NpdGlvbiwg
cHJpdi0+cmVxdWVzdGVkUG9zaXRpb24pOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicmVh
ZFBvc2l0aW9uID0gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHJlcXVlc3RlZFBvc2l0aW9uID0gJSIg
R19HVUlOVDY0X0ZPUk1BVCwgbWVtYmVycy0+cmVhZFBvc2l0aW9uLCBtZW1iZXJzLT5yZXF1ZXN0
ZWRQb3NpdGlvbik7CiAKLSAgICBpZiAocHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gIT0gcHJpdi0+
cmVhZFBvc2l0aW9uKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgYWRhcHRl
ckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlNlZWtpbmcsIGZsdXNoaW5nIGFkYXB0ZXIiKTsKLSAgICAgICAgICAgIGdzdF9hZGFw
dGVyX2NsZWFyKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQ2
NF90IHJlcXVlc3RlZFBvc2l0aW9uID0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247Ci0gICAgICAg
IHdlYktpdFdlYlNyY1N0b3AoYmFzZVNyYyk7Ci0gICAgICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0
aW9uID0gcmVxdWVzdGVkUG9zaXRpb247Ci0gICAgICAgIC8vIERvIG5vdCBub3RpZnkgYXN5bmMt
Y29tcGxldGlvbiwgaW4gc2Vla2luZyBmbG93cywgd2Ugd2lsbAotICAgICAgICAvLyBiZSBjYWxs
ZWQgZnJvbSBHc3RCYXNlU3JjJ3MgcGVyZm9ybV9zZWVrIHZmdW5jLCB3aGljaCBob2xkcwotICAg
ICAgICAvLyBhIHN0cmVhbWluZyBsb2NrIGluIG91ciBmcmFtZS4gSGVuY2UsIHdlIHdvdWxkIGRl
YWRsb2NrCi0gICAgICAgIC8vIHRyeWluZyB0byBub3RpZnkgYXN5bmMgY29tcGxldGlvbiwgc2lu
Y2UgdGhhdCBhbHNvIHJlcXVpcmVzCi0gICAgICAgIC8vIHRoZSBzdHJlYW1pbmcgbG9jay4KLSAg
ICAgICAgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoYmFzZVNyYywgZmFsc2UpOworICAgIGlmICht
ZW1iZXJzLT5pc1JlcXVlc3RQZW5kaW5nKSB7CisgICAgICAgIG1lbWJlcnMtPmlzUmVxdWVzdFBl
bmRpbmcgPSBmYWxzZTsKKyAgICAgICAgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3Qoc3JjLCBtZW1i
ZXJzKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPnJl
c3BvbnNlTG9jayk7Ci0gICAgICAgIHByaXYtPnJlc3BvbnNlQ29uZGl0aW9uLndhaXQocHJpdi0+
cmVzcG9uc2VMb2NrLCBbcHJpdl0gKCkgewotICAgICAgICAgICAgcmV0dXJuIHByaXYtPndhc1Jl
c3BvbnNlUmVjZWl2ZWQgfHwgcHJpdi0+aXNGbHVzaGluZzsKKyAgICAvLyBXYWl0IGZvciB0aGUg
cmVzcG9uc2UgaGVhZGVycy4KKyAgICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlvbi53YWl0KG1l
bWJlcnMubXV0ZXgoKSwgWyZdICgpIHsKKyAgICAgICAgcmV0dXJuIG1lbWJlcnMtPndhc1Jlc3Bv
bnNlUmVjZWl2ZWQgfHwgbWVtYmVycy0+aXNGbHVzaGluZzsKKyAgICB9KTsKKworICAgIGlmICht
ZW1iZXJzLT5pc0ZsdXNoaW5nKQorICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7CisK
KyAgICBpZiAobWVtYmVycy0+cGVuZGluZ0NhcHMpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJTZXR0aW5nIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBtZW1iZXJzLT5wZW5kaW5n
Q2Fwcy5nZXQoKSk7CisgICAgICAgIG1lbWJlcnMucnVuVW5sb2NrZWQoW2Jhc2VTcmMsIGNhcHMg
PSBtZW1iZXJzLT5wZW5kaW5nQ2Fwcy5sZWFrUmVmKCldKCkgeworICAgICAgICAgICAgZ3N0X2Jh
c2Vfc3JjX3NldF9jYXBzKGJhc2VTcmMsIGNhcHMpOwogICAgICAgICB9KTsKKyAgICAgICAgaWYg
KG1lbWJlcnMtPmlzRmx1c2hpbmcpCisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJ
Tkc7CiAgICAgfQogCisgICAgaWYgKG1lbWJlcnMtPmhhdmVTaXplICYmICFtZW1iZXJzLT5pc0R1
cmF0aW9uU2V0KSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0dGluZyBkdXJh
dGlvbiB0byAlIiBHX0dVSU5UNjRfRk9STUFULCBtZW1iZXJzLT5zaXplKTsKKyAgICAgICAgYmFz
ZVNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IG1lbWJlcnMtPnNpemU7CisgICAgICAgIG1lbWJlcnMt
PmlzRHVyYXRpb25TZXQgPSB0cnVlOworICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2Uo
R1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZChH
U1RfT0JKRUNUX0NBU1Qoc3JjKSkpOworICAgIH0KKworICAgIGlmIChtZW1iZXJzLT5wZW5kaW5n
SHR0cEhlYWRlcnNNZXNzYWdlKQorICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NU
X0VMRU1FTlQoc3JjKSwgbWVtYmVycy0+cGVuZGluZ0h0dHBIZWFkZXJzTWVzc2FnZS5sZWFrUmVm
KCkpOworICAgIGlmIChtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNFdmVudCkKKyAgICAgICAg
Z3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIG1lbWJlcnMtPnBl
bmRpbmdIdHRwSGVhZGVyc0V2ZW50LmxlYWtSZWYoKSk7CisKKyAgICByZXN0YXJ0TG9hZGVySWZO
ZWVkZWQoc3JjLCBtZW1iZXJzKTsKKwogICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgR3N0QWRhcHRl
ciBtZXRob2RzIG1hcmtlZCBhcyBmYXN0IGFueW1vcmUgYmVjYXVzZSBzb21ldGltZXMgaXQgd2Fz
IHNsb3dlci4gVGhlIHJlYXNvbiB3aHkgdGhpcyB3YXMgc2xvd2VyIGlzIHRoYXQgd2UgY2FuIGJl
CiAgICAgLy8gd2FpdGluZyBmb3IgbW9yZSAiZmFzdCIgKHRoYXQgY291bGQgYmUgcmV0cmlldmVk
IHdpdGggdGhlIF9mYXN0IEFQSSkgYnVmZmVycyB0byBiZSBhdmFpbGFibGUgZXZlbiBpbiBjYXNl
cyB3aGVyZSB0aGUgcXVldWUgaXMgbm90IGVtcHR5LiBUaGVzZQogICAgIC8vIG90aGVyIGJ1ZmZl
cnMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSAibm9uIF9mYXN0IiBBUEkuCi0gICAgR1NUX1RS
QUNFX09CSkVDVChzcmMsICJmbHVzaGluZzogJXMsIGRvZXNIYXZlRU9TOiAlcywgaXNEb3dubG9h
ZFN1c3BlbmRlZDogJXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aXNGbHVzaGluZykKLSAgICAg
ICAgLCBib29sRm9yUHJpbnRpbmcocHJpdi0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmco
cHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCkpOwotCi0gICAgaWYgKHByaXYtPmRvZXNIYXZlRU9T
KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRU9TIik7Ci0gICAgICAgIHJldHVy
biBHU1RfRkxPV19FT1M7Ci0gICAgfQorICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG9lc0hh
dmVFT1M6ICVzLCBpc0Rvd25sb2FkU3VzcGVuZGVkOiAlcyIsIGJvb2xGb3JQcmludGluZyhtZW1i
ZXJzLT5kb2VzSGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rvd25sb2FkU3Vz
cGVuZGVkKSk7CiAKICAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3Np
emUoYmFzZVNyYyk7Ci0gICAgc2l6ZV90IHF1ZXVlU2l6ZTsKLSAgICB7Ci0gICAgICAgIExvY2tI
b2xkZXIgYWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7Ci0gICAgICAgIHVuc2lnbmVk
IHJldHJpZXMgPSAwOwotICAgICAgICBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUo
cHJpdi0+YWRhcHRlci5nZXQoKSk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZh
aWxhYmxlIGJ5dGVzICUiIEdfR1NJWkVfRk9STUFUICIsIGJsb2NrIHNpemUgJXUiLCBxdWV1ZVNp
emUsIHNpemUpOwotICAgICAgICB3aGlsZSAoIXF1ZXVlU2l6ZSAmJiAhcHJpdi0+aXNGbHVzaGlu
ZykgewotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJsZXQncyB0cnkgdG8gcmVz
dGFydCB0aGUgZG93bmxvYWQgaWYgcG9zc2libGUgYW5kIHdhaXQgYSBiaXQgaWYgbm8gZGF0YSIp
OwotICAgICAgICAgICAgcHJpdi0+YWRhcHRlckNvbmRpdGlvbi53YWl0Rm9yKHByaXYtPmFkYXB0
ZXJMb2NrLCAxX3MsIFsmXSB7Ci0gICAgICAgICAgICAgICAgcmVzdGFydExvYWRlcklmTmVlZGVk
KHNyYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByaXYtPmlzRmx1c2hpbmcgfHwgKCFwcml2
LT5pc0Rvd25sb2FkU3VzcGVuZGVkICYmIGdzdF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFw
dGVyLmdldCgpKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHF1ZXVlU2l6ZSA9IGdz
dF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFwdGVyLmdldCgpKTsKLSAgICAgICAgICAgIEdT
VF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZhaWxhYmxlICUiIEdfR1NJWkVfRk9STUFULCBxdWV1ZVNp
emUpOwotICAgICAgICAgICAgaWYgKHF1ZXVlU2l6ZSB8fCBwcml2LT5pc0ZsdXNoaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBkYXRhIG9yIHdlJ3JlIGZsdXNoaW5nLiBXZSBjYW4g
YnJlYWsgdGhlIGxvb3AgaGVyZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGtlZXAgd2FpdGluZyBidXQgd2UgY291bGQg
YmUgaW4gRU9TLiBMZXQncyBjaGVjayB0aGUgdHdvIHBvc3NpYmlsaXRpZXM6Ci0gICAgICAgICAg
ICAvLyAxLiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aXRoIGEga25vd24gc2l6ZS4K
LSAgICAgICAgICAgIC8vIDIuIFRoZSBkb3dubG9hZCBpcyBub3Qgc3VzcGVuZGVkIGFuZCBubyBt
b3JlIGRhdGEgYXJlIGFycml2aW5nLiBXZSBjYW5ub3Qgd2FpdCBmb3JldmVyLCAxMHgxcyBzZWVt
cyBzYWZlIGFuZCBzZW5zaWJsZS4KLSAgICAgICAgICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiBw
cml2LT5yZWFkUG9zaXRpb24gPj0gcHJpdi0+c2l6ZSkgewotICAgICAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiV2FpdGluZyBmb3IgZGF0YSBiZXlvbmQgdGhlIGVuZCwgc2lnbmFs
bGluZyBFT1MiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJpcyBkb3dubG9hZCBz
dXNwZW5kZWQ/ICVzLCBudW0gcmV0cmllcyAldSIsIGJvb2xGb3JQcmludGluZyhwcml2LT5pc0Rv
d25sb2FkU3VzcGVuZGVkKSwgcmV0cmllcyArIDEpOwotICAgICAgICAgICAgaWYgKCFwcml2LT5p
c0Rvd25sb2FkU3VzcGVuZGVkICYmICsrcmV0cmllcyA+PSAxMCkgewotICAgICAgICAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiQWRhcHRlciBzdGlsbCBlbXB0eSBhZnRlciAxMHMgb2Yg
d2FpdGluZywgYXNzdW1pbmcgRU9TIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X0VPUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcml2LT5p
c0ZsdXNoaW5nKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRmx1c2hpbmciKTsK
LSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIH0KKyAgICBzaXplX3QgcXVl
dWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOwor
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZhaWxhYmxlIGJ5dGVzICUiIEdfR1NJWkVfRk9S
TUFUICIsIGJsb2NrIHNpemUgJXUiLCBxdWV1ZVNpemUsIHNpemUpOworICAgIGlmICghcXVldWVT
aXplKSB7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAibGV0J3Mgd2FpdCBmb3IgZGF0
YSBvciBFT1MiKTsKKyAgICAgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ud2FpdChtZW1i
ZXJzLm11dGV4KCksIFsmXSB7CisgICAgICAgICAgICByZXR1cm4gbWVtYmVycy0+aXNGbHVzaGlu
ZyB8fCBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSkgfHwgbWVt
YmVycy0+ZG9lc0hhdmVFT1M7CisgICAgICAgIH0pOworICAgICAgICBpZiAobWVtYmVycy0+aXNG
bHVzaGluZykKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKIAotICAgIGlm
IChwcml2LT5oYXZlU2l6ZSAmJiAhcHJpdi0+aXNEdXJhdGlvblNldCkgewotICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlNldHRpbmcgZHVyYXRpb24gdG8gJSIgR19HVUlOVDY0X0ZPUk1B
VCwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgIGJhc2VTcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBwcml2
LT5zaXplOwotICAgICAgICBwcml2LT5pc0R1cmF0aW9uU2V0ID0gdHJ1ZTsKLSAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2Vf
bmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09CSkVDVF9DQVNUKHNyYykpKTsKKyAgICAgICAgcXVl
dWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOwor
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImF2YWlsYWJsZSAlIiBHX0dTSVpFX0ZPUk1B
VCwgcXVldWVTaXplKTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+aHR0cEhlYWRlcnNFdmVudCkK
LSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIHBy
aXYtPmh0dHBIZWFkZXJzRXZlbnQubGVha1JlZigpKTsKLQotICAgIHsKLSAgICAgICAgTG9ja0hv
bGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2NrKTsKLSAgICAgICAgcXVldWVTaXpl
ID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOworICAgIGlmIChx
dWV1ZVNpemUpIHsKICAgICAgICAgaWYgKHF1ZXVlU2l6ZSA8IHNpemUpIHsKICAgICAgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiRGlkIG5vdCBnZXQgdGhlICV1IGJsb2Nrc2l6ZSBieXRl
cywgbGV0J3MgcHVzaCB0aGUgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyB3ZSBnb3QiLCBzaXpl
LCBxdWV1ZVNpemUpOwogICAgICAgICAgICAgc2l6ZSA9IHF1ZXVlU2l6ZTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlRha2luZyAldSBieXRlcyBm
cm9tIGFkYXB0ZXIiLCBzaXplKTsKLSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgICAgICpi
dWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcihwcml2LT5hZGFwdGVyLmdldCgpLCBzaXpl
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpidWZmZXIpOwotCi0gICAgICAgICAgICBH
U1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSA9IGJhc2VTcmMtPnNlZ21lbnQucG9zaXRpb247Ci0g
ICAgICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKmJ1ZmZlcikgPSBHU1RfQlVGRkVSX09G
RlNFVCgqYnVmZmVyKSArIHNpemU7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywg
IkJ1ZmZlciBib3VuZHMgc2V0IHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRf
Rk9STUFULCBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSwgR1NUX0JVRkZFUl9PRkZTRVRfRU5E
KCpidWZmZXIpKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG9lc0hhdmVF
T1M6ICVzLCB3YXNTZWVraW5nOiAlcywgc2Vla2luZzogJXMsIGJ1ZmZlciBzaXplOiAldSwgc2l6
ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKHByaXYtPmRvZXNIYXZlRU9T
KSwgYm9vbEZvclByaW50aW5nKHByaXYtPndhc1NlZWtpbmcpLCBib29sRm9yUHJpbnRpbmcocHJp
di0+aXNTZWVraW5nKSwgc2l6ZSwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgICAgICBpZiAocHJpdi0+
aGF2ZVNpemUgJiYgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpID49IHByaXYtPnNpemUp
IHsKLSAgICAgICAgICAgICAgICBpZiAocHJpdi0+d2FzU2Vla2luZykKLSAgICAgICAgICAgICAg
ICAgICAgcHJpdi0+d2FzU2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHByaXYtPmlzU2Vla2FibGUpCi0gICAgICAgICAgICAgICAgICAgIHByaXYtPmRvZXNIYXZlRU9T
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpdi0+d2FzU2Vla2luZykKLSAgICAg
ICAgICAgICAgICBwcml2LT53YXNTZWVraW5nID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJlc3Rh
cnRMb2FkZXJJZk5lZWRlZChzcmMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzcmMsICJFbXB0eSBhZGFwdGVyISIpOwotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKworICAgICAgICAqYnVmZmVyID0gZ3N0X2FkYXB0
ZXJfdGFrZV9idWZmZXIobWVtYmVycy0+YWRhcHRlci5nZXQoKSwgc2l6ZSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCpidWZmZXIpOworCisgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUKCpidWZm
ZXIpID0gYmFzZVNyYy0+c2VnbWVudC5wb3NpdGlvbjsKKyAgICAgICAgR1NUX0JVRkZFUl9PRkZT
RVRfRU5EKCpidWZmZXIpID0gR1NUX0JVRkZFUl9PRkZTRVQoKmJ1ZmZlcikgKyBzaXplOworICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIkJ1ZmZlciBib3VuZHMgc2V0IHRvICUiIEdfR1VJ
TlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFULCBHU1RfQlVGRkVSX09GRlNFVCgqYnVm
ZmVyKSwgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpKTsKKyAgICAgICAgR1NUX1RSQUNF
X09CSkVDVChzcmMsICJidWZmZXIgc2l6ZTogJXUsIHRvdGFsIGNvbnRlbnQgc2l6ZTogJSIgR19H
VUlOVDY0X0ZPUk1BVCwgc2l6ZSwgbWVtYmVycy0+c2l6ZSk7CisKKyAgICAgICAgcmVzdGFydExv
YWRlcklmTmVlZGVkKHNyYywgbWVtYmVycyk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsK
ICAgICB9CiAKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgLy8gSWYgdGhlIHF1ZXVlIGlz
IGVtcHR5IHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIG9ubHkgb3RoZXIgb3B0aW9uIGlzIHRoYXQg
d2UgYXJlIGluIEVPUy4KKyAgICBBU1NFUlQobWVtYmVycy0+ZG9lc0hhdmVFT1MpOworICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSByZXNwb25zZSwgc2ln
bmFsbGluZyBFT1MiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwogfQogCiBzdGF0aWMgYm9v
bCB3ZWJLaXRXZWJTcmNTZXRFeHRyYUhlYWRlcihHUXVhcmsgZmllbGRJZCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpCkBAIC01OTMsNjAgKzYxOSwzMSBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0V2ViU3JjUHJvY2Vzc0V4dHJhSGVhZGVycyhHUXVhcmsgZmllbGRJZCwg
Y29uc3QgR1ZhbHVlKiB2YQogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RhcnQo
R3N0QmFzZVNyYyogYmFzZVNyYykKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYnkgQmFzZVNyYywgZG8gbm90IGNhbGwgaXQKLSAgICAvLyBmcm9tIG91cnNlbHZl
cyB1bmxlc3MgeW91IGVuc3VyZSB0aGUgc3RyZWFtaW5nIGxvY2sgaXMgbm90Ci0gICAgLy8gaGVs
ZC4gSWYgaXQgaXMsIHlvdSB3aWxsIGRlYWRsb2NrIHRoZSBXZWJQcm9jZXNzLgotICAgIHJldHVy
biB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChiYXNlU3JjLCB0cnVlKTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KEdzdEJhc2VTcmMqIGJhc2VTcmMsIGJvb2wg
bm90aWZ5QXN5bmNDb21wbGV0aW9uKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lU
X1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKLQotICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDApICYmICFwcml2
LT5wbGF5ZXIpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYo
Z3N0X3F1ZXJ5X25ld19jb250ZXh0KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVf
TkFNRSkpOwotICAgICAgICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5KEdTVF9CQVNFX1NSQ19QQUQo
YmFzZVNyYyksIHF1ZXJ5LmdldCgpKSkgewotICAgICAgICAgICAgR3N0Q29udGV4dCogY29udGV4
dDsKIAotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHQocXVlcnkuZ2V0KCksICZj
b250ZXh0KTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5U
X0NBU1Qoc3JjKSwgY29udGV4dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ3N0X2Vs
ZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2VfbmV3
X25lZWRfY29udGV4dChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwgV0VCS0lUX1dFQl9TUkNfUExBWUVS
X0NPTlRFWFRfVFlQRV9OQU1FKSk7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlQocHJpdi0+
cGxheWVyKTsKLQotICAgIHByaXYtPndlcmVIZWFkZXJzUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICBw
cml2LT53YXNSZXNwb25zZVJlY2VpdmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNEdXJhdGlvblNl
dCA9IGZhbHNlOwotICAgIHByaXYtPmRvZXNIYXZlRU9TID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNG
bHVzaGluZyA9IGZhbHNlOwotICAgIHByaXYtPmRvd25sb2FkU3RhcnRUaW1lID0gV2FsbFRpbWU6
Om5hbigpOwotCi0gICAgcHJpdi0+ZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjayA9IGZhbHNlOwot
Ci0gICAgaWYgKHByaXYtPm9yaWdpbmFsVVJJLmlzTnVsbCgpKSB7CisgICAgaWYgKHNyYy0+cHJp
di0+b3JpZ2luYWxVUkkuaXNOdWxsKCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMs
ICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChiYXNlU3JjKTsK
ICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KIAotICAg
IGlmIChwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9PSBwcml2LT5zdG9wUG9zaXRpb24pIHsKLSAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJFbXB0eSBzZWdtZW50LCBzaWduYWxpbmcgRU9T
Iik7Ci0gICAgICAgIHByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotICAgIH0KK3N0YXRpYyB2b2lkIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KFdlYktpdFdl
YlNyYyogc3JjLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVy
cz46OkxvY2tlZFdyYXBwZXImIG1lbWJlcnMpCit7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRmV0Y2hpbmcg
JXMiLCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkpOworICAgIEFTU0VSVCghcHJpdi0+b3JpZ2lu
YWxVUkkuaXNOdWxsKCkpOworICAgIEFTU0VSVChtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbiAh
PSBtZW1iZXJzLT5zdG9wUG9zaXRpb24pOworCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQ
b3N0aW5nIHRhc2sgdG8gcmVxdWVzdCBSJXUgJXMgcmVxdWVzdGVkUG9zaXRpb249JSIgR19HVUlO
VDY0X0ZPUk1BVCAiIHN0b3BQb3NpdGlvbj0lIiBHX0dVSU5UNjRfRk9STUFULCBtZW1iZXJzLT5y
ZXF1ZXN0TnVtYmVyLCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCksIG1lbWJlcnMtPnJlcXVlc3Rl
ZFBvc2l0aW9uLCBtZW1iZXJzLT5zdG9wUG9zaXRpb24pOwogICAgIFVSTCB1cmwgPSBVUkwoVVJM
KCksIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwogICAgIHJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXModXJsKTsKIAotICAgIHJlcXVlc3Quc2V0SFRUUFJl
ZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisgICAgcmVxdWVzdC5zZXRIVFRQUmVm
ZXJyZXIobWVtYmVycy0+cGxheWVyLT5yZWZlcnJlcigpKTsKIAogICAgIGlmIChwcml2LT5odHRw
TWV0aG9kLmdldCgpKQogICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QocHJpdi0+aHR0cE1l
dGhvZC5nZXQoKSk7CkBAIC02NzAsMTIgKzY2NywxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjTWFrZVJlcXVlc3QoR3N0QmFzZVNyYyogYmFzZVNyYywgYm9vbCBub3RpZnlBc3luY0Nv
bQogICAgICAgICB8fCAhZ19hc2NpaV9zdHJjYXNlY21wKCJ0cmFpbGVycy5hcHBsZS5jb20iLCB1
cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICByZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoIlF1aWNrdGltZS83LjYuNiIpOwogCi0gICAgaWYgKHByaXYtPnJlcXVlc3RlZFBvc2l0aW9u
KSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZm9ybWF0ZWRSYW5nZShnX3N0cmR1cF9wcmlu
dGYoImJ5dGVzPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0iLCBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlv
bikpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbikgeworICAgICAgICBHVW5p
cXVlUHRyPGNoYXI+IGZvcm1hdGVkUmFuZ2UoZ19zdHJkdXBfcHJpbnRmKCJieXRlcz0lIiBHX0dV
SU5UNjRfRk9STUFUICItIiwgbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb24pKTsKICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJSYW5nZSByZXF1ZXN0OiAlcyIsIGZvcm1hdGVkUmFuZ2Uu
Z2V0KCkpOwogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6UmFuZ2UsIGZvcm1hdGVkUmFuZ2UuZ2V0KCkpOwogICAgIH0KLSAgICBwcml2LT5yZWFkUG9z
aXRpb24gPSBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbjsKKyAgICBBU1NFUlQobWVtYmVycy0+cmVh
ZFBvc2l0aW9uID09IG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uKTsKIAogICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiUGVyc2lzdGVudCBjb25uZWN0aW9uIHN1cHBvcnQgJXMiLCBwcml2LT5r
ZWVwQWxpdmUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKICAgICBpZiAoIXByaXYtPmtlZXBB
bGl2ZSkKQEAgLTY4Nyw4MSArNjg0LDUyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNN
YWtlUmVxdWVzdChHc3RCYXNlU3JjKiBiYXNlU3JjLCBib29sIG5vdGlmeUFzeW5jQ29tCiAgICAg
Ly8gV2UgYWx3YXlzIHJlcXVlc3QgSWNlY2FzdC9TaG91dGNhc3QgbWV0YWRhdGEsIGp1c3QgaW4g
Y2FzZSAuLi4KICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6
SWN5TWV0YWRhdGEsICIxIik7CiAKLSAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9y
ID0gV1RGOjplbnN1cmVHUmVmKHNyYyk7Ci0gICAgcHJpdi0+bm90aWZpZXItPm5vdGlmeShNYWlu
VGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpTdGFydCwgW3Byb3RlY3RvciwgcmVxdWVzdCA9IFdU
Rk1vdmUocmVxdWVzdCksIHNyYywgbm90aWZ5QXN5bmNDb21wbGV0aW9uXSB7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0
b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKSwgcmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCksIHJl
cXVlc3ROdW1iZXIgPSBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyLCBzcmNdIHsKICAgICAgICAgV2Vi
S2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+cHJpdjsKLSAgICAgICAgaWYgKCFw
cml2LT5sb2FkZXIpCi0gICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBwcml2LT5wbGF5ZXItPmNy
ZWF0ZVJlc291cmNlTG9hZGVyKCk7CisgICAgICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2
YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFN
dXRleCk7CisgICAgICAgIC8vIElnbm9yZSB0aGlzIHRhc2sgKG5vdCBtYWtpbmcgYW55IEhUVFAg
cmVxdWVzdCkgaWYgYnkgbm93IFdlYktpdFdlYlNyYyBzdHJlYW1pbmcgdGhyZWFkIGlzIGFscmVh
ZHkgd2FpdGluZworICAgICAgICAvLyBmb3IgYSBkaWZmZXJlbnQgcmVxdWVzdC4gVGhlcmUgaXMg
bm8gcG9pbnQgYW55bW9yZSBpbiBzZW5kaW5nIHRoaXMgb25lLgorICAgICAgICBpZiAobWVtYmVy
cy0+cmVxdWVzdE51bWJlciAhPSByZXF1ZXN0TnVtYmVyKSB7CisgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIlNraXBwaW5nIFIldSwgY3VycmVudCByZXF1ZXN0
IG51bWJlciBpcyAldSIsIHJlcXVlc3ROdW1iZXIsIG1lbWJlcnMtPnJlcXVlc3ROdW1iZXIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtZW1iZXJzLT5s
b2FkZXIpCisgICAgICAgICAgICBtZW1iZXJzLT5sb2FkZXIgPSBtZW1iZXJzLT5wbGF5ZXItPmNy
ZWF0ZVJlc291cmNlTG9hZGVyKCk7CiAKICAgICAgICAgUGxhdGZvcm1NZWRpYVJlc291cmNlTG9h
ZGVyOjpMb2FkT3B0aW9ucyBsb2FkT3B0aW9ucyA9IDA7CiAgICAgICAgIGlmIChyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNCbG9iKCkpCiAgICAgICAgICAgICBsb2FkT3B0aW9ucyB8PSBQbGF0Zm9y
bU1lZGlhUmVzb3VyY2VMb2FkZXI6OkxvYWRPcHRpb246OkJ1ZmZlckRhdGE7Ci0gICAgICAgIHBy
aXYtPnJlc291cmNlID0gcHJpdi0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1
ZXN0KHJlcXVlc3QpLCBsb2FkT3B0aW9ucyk7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJjZSkg
ewotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVxdWVz
dChyZXF1ZXN0KSkpOwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0b3IuZ2V0
KCksICJTdGFydGVkIHJlcXVlc3QiKTsKLSAgICAgICAgICAgIGlmIChub3RpZnlBc3luY0NvbXBs
ZXRpb24pCi0gICAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlKEdTVF9C
QVNFX1NSQyhzcmMpLCBHU1RfRkxPV19PSyk7CisgICAgICAgIG1lbWJlcnMtPnJlc291cmNlID0g
bWVtYmVycy0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3Qp
LCBsb2FkT3B0aW9ucyk7CisgICAgICAgIGlmIChtZW1iZXJzLT5yZXNvdXJjZSkgeworICAgICAg
ICAgICAgbWVtYmVycy0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0KSwgcmVxdWVzdE51bWJlcikpOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90
ZWN0b3IuZ2V0KCksICJTdGFydGVkIHJlcXVlc3QgUiV1IiwgcmVxdWVzdE51bWJlcik7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByb3RlY3Rvci5nZXQo
KSwgIkZhaWxlZCB0byBzZXR1cCBzdHJlYW1pbmcgY2xpZW50Iik7Ci0gICAgICAgICAgICBpZiAo
bm90aWZ5QXN5bmNDb21wbGV0aW9uKQotICAgICAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zdGFy
dF9jb21wbGV0ZShHU1RfQkFTRV9TUkMoc3JjKSwgR1NUX0ZMT1dfRVJST1IpOwotICAgICAgICAg
ICAgcHJpdi0+bG9hZGVyID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Nsb3NlU2Vzc2lvbihXZWJL
aXRXZWJTcmMqIHNyYykKLXsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwotICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdS
ZWYoc3JjKTsKLQotICAgIHByaXYtPm5vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZFNvdXJjZU5v
dGlmaWNhdGlvbjo6U3RvcCwgW3Byb3RlY3Rvciwga2VlcEFsaXZlID0gcHJpdi0+a2VlcEFsaXZl
XSB7Ci0gICAgICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBwcm90ZWN0b3ItPnByaXY7
Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJTdG9wcGluZyBy
ZXNvdXJjZSBsb2FkZXIiKTsKLQotICAgICAgICBpZiAocHJpdi0+cmVzb3VyY2UpIHsKLSAgICAg
ICAgICAgIHByaXYtPnJlc291cmNlLT5zdG9wKCk7Ci0gICAgICAgICAgICBwcml2LT5yZXNvdXJj
ZS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UgPSBudWxs
cHRyOworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJGYWls
ZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCB0byBoYW5kbGUgUiV1IiwgcmVxdWVzdE51bWJl
cik7CisgICAgICAgICAgICBtZW1iZXJzLT5sb2FkZXIgPSBudWxscHRyOwogICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFrZWVwQWxpdmUpCi0gICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBudWxs
cHRyOwogICAgIH0pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNvdXJjZSBsb2Fk
ZXIgc3RvcHBlZCIpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChHc3RC
YXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9T
UkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
LQotICAgIGlmIChwcml2LT5yZXNvdXJjZSB8fCAocHJpdi0+bG9hZGVyICYmICFwcml2LT5rZWVw
QWxpdmUpKQotICAgICAgICB3ZWJLaXRXZWJTcmNDbG9zZVNlc3Npb24oc3JjKTsKLQotICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2NrKTsKLSAg
ICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIocHJpdi0+YWRhcHRlci5nZXQoKSk7Ci0gICAgfQotCi0g
ICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0
b3BwZWQgcmVxdWVzdCIpOworICAgIC8vIGJhc2VzcmMgd2lsbCBhbHdheXMgY2FsbCB1bkxvY2so
KSBhbmQgdW5Mb2NrU3RvcCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMuIFNlZSBnc3RfYmFzZV9zcmNf
c3RvcCgpLgorICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1i
ZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICB3
ZWJraXRXZWJTcmNSZXNldChzcmMsIG1lbWJlcnMsIFJlc2V0VHlwZTo6SGFyZCk7CisgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJTdG9wcGVkIFdlYktpdFdlYlNyYyIpOwogICAgIHJldHVybiBU
UlVFOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShHc3RCYXNlU3Jj
KiBiYXNlU3JjLCBndWludDY0KiBzaXplKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VC
S0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVt
YmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImhhdmVTaXplOiAlcywgc2l6ZTogJSIgR19HVUlOVDY0
X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKHByaXYtPmhhdmVTaXplKSwgcHJpdi0+c2l6ZSk7Ci0g
ICAgaWYgKHByaXYtPmhhdmVTaXplKSB7Ci0gICAgICAgICpzaXplID0gcHJpdi0+c2l6ZTsKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImhhdmVTaXplOiAlcywgc2l6ZTogJSIgR19HVUlOVDY0
X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmhhdmVTaXplKSwgbWVtYmVycy0+c2l6
ZSk7CisgICAgaWYgKG1lbWJlcnMtPmhhdmVTaXplKSB7CisgICAgICAgICpzaXplID0gbWVtYmVy
cy0+c2l6ZTsKICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCkBAIC03NzEsNDAgKzczOSw0
MiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShHc3RCYXNlU3JjKiBiYXNl
U3JjLCBndWludDY0KiBzaXplKQogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0lzU2Vla2Fi
bGUoR3N0QmFzZVNyYyogYmFzZVNyYykKIHsKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJ
VF9XRUJfU1JDKGJhc2VTcmMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJpc1NlZWth
YmxlOiAlcyIsIGJvb2xGb3JQcmludGluZyhzcmMtPnByaXYtPmlzU2Vla2FibGUpKTsKLSAgICBy
ZXR1cm4gc3JjLT5wcml2LT5pc1NlZWthYmxlOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQ
cml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJp
di0+ZGF0YU11dGV4KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImlzU2Vla2FibGU6ICVz
IiwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vla2FibGUpKTsKKyAgICByZXR1cm4gbWVt
YmVycy0+aXNTZWVrYWJsZTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0RvU2Vl
ayhHc3RCYXNlU3JjKiBiYXNlU3JjLCBHc3RTZWdtZW50KiBzZWdtZW50KQogeworICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY3JlYXRlKCkuIEl0J3Mgb25s
eSBjYWxsZWQgd2hlbiB3ZSdyZSB0cmFuc2l0aW9uaW5nIHRvID49UEFVU0VEIGFuZAorICAgIC8v
IGJldHdlZW4gZmx1c2hlcy4gSW4gYW55IGNhc2UsIGJhc2VzcmMgaG9sZHMgdGhlIFNUUkVBTV9M
T0NLLCBzbyB3ZSBrbm93IGNyZWF0ZSgpIGlzIG5vdCBydW5uaW5nLgorICAgIC8vIEFsc28sIGJv
dGggd2ViS2l0V2ViU3JjVW5Mb2NrKCkgYW5kIHdlYktpdFdlYlNyY1VuTG9ja1N0b3AoKSBhcmUg
Z3VhcmFudGVlZCB0byBiZSBjYWxsZWQgKmJlZm9yZSogdGhpcyBmdW5jdGlvbi4KKyAgICAvLyBb
U2VlIGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWsoKV0uCisgICAgQVNTRVJUKEdTVF9FTEVNRU5U
KGJhc2VTcmMpLT5jdXJyZW50X3N0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCBHU1RfUEFEX0lT
X0ZMVVNISU5HKGJhc2VTcmMtPnNyY3BhZCkpOworCisgICAgLy8gRXhjZXB0IGZvciB0aGUgaW5p
dGlhbCBzZWVrLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIGlzU2Vla2FibGUoKSBy
ZXR1cm5zIHRydWUuCisgICAgQVNTRVJUKEdTVF9FTEVNRU5UKGJhc2VTcmMpLT5jdXJyZW50X3N0
YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCB3ZWJLaXRXZWJTcmNJc1NlZWthYmxlKGJhc2VTcmMp
KTsKKwogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0g
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBMb2NrSG9sZGVy
IGxvY2tlcihwcml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQ
cml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJp
di0+ZGF0YU11dGV4KTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayBzZWdtZW50
OiAoJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCBzZWdtZW50
LT5zdGFydCwgc2VnbWVudC0+c3RvcCk7Ci0gICAgaWYgKHByaXYtPnJlYWRQb3NpdGlvbiA9PSBz
ZWdtZW50LT5zdGFydCAmJiBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9PSBwcml2LT5yZWFkUG9z
aXRpb24gJiYgcHJpdi0+c3RvcFBvc2l0aW9uID09IHNlZ21lbnQtPnN0b3ApIHsKLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIHRvIGN1cnJlbnQgcmVhZC9lbmQgcG9zaXRpb24g
YW5kIG5vIHNlZWsgcGVuZGluZyIpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9CisgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIHNlZ21lbnQ6ICglIiBHX0dVSU5UNjRfRk9STUFU
ICItJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSBQb3NpdGlvbiBwcmV2aW91cyB0byBzZWVrOiAlIiBH
X0dVSU5UNjRfRk9STUFULCBzZWdtZW50LT5zdGFydCwgc2VnbWVudC0+c3RvcCwgbWVtYmVycy0+
cmVhZFBvc2l0aW9uKTsKIAotICAgIGlmIChwcml2LT53ZXJlSGVhZGVyc1JlY2VpdmVkICYmICFw
cml2LT5pc1NlZWthYmxlKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChzcmMsICJOb3Qg
c2Vla2FibGUiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KKyAgICAvLyBCZWZvcmUg
YXR0ZW1wdGluZyB0byBzZWVrLCBiYXNlc3JjIHdpbGwgY2FsbCBpc1NlZWthYmxlKCkuIElmIGlz
U2Vla2FibGUoKSBpcyB0cnVlLCBhIGZsdXNoIHdpbGwgYmUgbWFkZSBhbmQKKyAgICAvLyB0aGlz
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLiBiYXNlc3JjIHN0aWxsIGdpdmVzIHVzIHRoZSBjaGFu
Y2UgaGVyZSB0byByZXR1cm4gRkFMU0UgYW5kIGNhbmNlbCB0aGUgc2Vlay4KKyAgICAvLyBXZSBj
YW5ub3QgYWZmb3JkIHRvIHJldHVybiBGQUxTRSBpbiB0aGlzIGZ1bmN0aW9uIHRob3VnaCB1bmxl
c3Mgd2UncmUgZ29pbmcgdG8gZmFpbCBvbiBwdXJwb3NlLCBzaW5jZSBhdCB0aGlzCisgICAgLy8g
cG9pbnQgd2UgaGF2ZSBhbHJlYWR5IGJlZW4gZmx1c2hlZCBhbmQgY2FuY2VsbGVkIHRoZSBIVFRQ
IHJlcXVlc3QgdGhhdCB3YXMgZmVlZGluZyB1cyBkYXRhLgogCiAgICAgaWYgKHNlZ21lbnQtPnJh
dGUgPCAwLjAgfHwgc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICAg
ICAgR1NUX1dBUk5JTkdfT0JKRUNUKHNyYywgIkludmFsaWQgc2VlayBzZWdtZW50Iik7CisgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiSW52YWxpZCBzZWVrIHNlZ21lbnQiKTsKICAgICAg
ICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiBzZWdt
ZW50LT5zdGFydCA+PSBwcml2LT5zaXplKQorICAgIGlmIChtZW1iZXJzLT5oYXZlU2l6ZSAmJiBz
ZWdtZW50LT5zdGFydCA+PSBtZW1iZXJzLT5zaXplKQogICAgICAgICBHU1RfV0FSTklOR19PQkpF
Q1Qoc3JjLCAiUG90ZW50aWFsbHkgc2Vla2luZyBiZWhpbmQgZW5kIG9mIGZpbGUsIG1pZ2h0IEVP
UyBpbW1lZGlhdGVseSIpOwogCi0gICAgcHJpdi0+aXNTZWVraW5nID0gdHJ1ZTsKLSAgICBwcml2
LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IHNlZ21lbnQtPnN0YXJ0OwotICAgIHByaXYtPnN0b3BQb3Np
dGlvbiA9IHNlZ21lbnQtPnN0b3A7Ci0gICAgcHJpdi0+YWRhcHRlckNvbmRpdGlvbi5ub3RpZnlP
bmUoKTsKKyAgICBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IG1lbWJlcnMtPnJlYWRQb3Np
dGlvbiA9IHNlZ21lbnQtPnN0YXJ0OworICAgIG1lbWJlcnMtPnN0b3BQb3NpdGlvbiA9IHNlZ21l
bnQtPnN0b3A7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTgxNiw4ICs3ODYsOSBAQCBzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnkoR3N0QmFzZVNyYyogYmFzZVNyYywgR3N0UXVl
cnkqIHF1ZXJ5KQogCiAgICAgaWYgKEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSA9PSBHU1RfUVVFUllf
VVJJKSB7CiAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBwcml2LT5vcmlnaW5hbFVS
SS5kYXRhKCkpOwotICAgICAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbihxdWVyeSwgcHJpdi0+cmVk
aXJlY3RlZFVSSS5kYXRhKCkpOworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0
ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRh
dGFNdXRleCk7CisgICAgICAgIGlmICghbWVtYmVycy0+cmVkaXJlY3RlZFVSSS5pc051bGwoKSkK
KyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uKHF1ZXJ5LCBtZW1iZXJz
LT5yZWRpcmVjdGVkVVJJLmRhdGEoKSk7CiAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgfQog
CkBAIC04MzgsNTEgKzgwOSw0NSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnko
R3N0QmFzZVNyYyogYmFzZVNyYywgR3N0UXVlcnkqIHF1ZXJ5KQogc3RhdGljIGdib29sZWFuIHdl
YktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdlYktpdFdlYlNy
Yyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
c3JjLT5wcml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2
YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+
ZGF0YU11dGV4KTsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiVW5sb2NrIik7Ci0gICAg
c3JjLT5wcml2LT5pc0ZsdXNoaW5nID0gdHJ1ZTsKLSAgICBzcmMtPnByaXYtPnJlc3BvbnNlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgIHNyYy0+cHJpdi0+YWRhcHRlckNvbmRpdGlvbi5ub3Rp
ZnlPbmUoKTsKKyAgICBtZW1iZXJzLT5pc0ZsdXNoaW5nID0gdHJ1ZTsKKworICAgIC8vIElmIHdl
IGhhdmUgYSBuZXR3b3JrIHJlc291cmNlIHJlcXVlc3Qgb3Blbiwgd2UgYXNrIHRoZSBtYWluIHRo
cmVhZCB0byBjbG9zZSBpdC4KKyAgICBpZiAobWVtYmVycy0+cmVzb3VyY2UpIHsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNvdXJjZSByZXF1ZXN0IFIldSB3aWxsIGJlIHN0b3Bw
ZWQiLCBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKSwgcmVzb3VyY2UgPSBXVEZN
b3ZlKG1lbWJlcnMtPnJlc291cmNlKSwgcmVxdWVzdE51bWJlciA9IG1lbWJlcnMtPnJlcXVlc3RO
dW1iZXJdIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAi
U3RvcHBpbmcgcmVzb3VyY2UgcmVxdWVzdCBSJXUiLCByZXF1ZXN0TnVtYmVyKTsKKyAgICAgICAg
ICAgIHJlc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICByZXNvdXJjZS0+c2V0Q2xpZW50KG51
bGxwdHIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgQVNTRVJUKCFtZW1iZXJzLT5yZXNvdXJj
ZSk7CisKKyAgICBpZiAoIXNyYy0+cHJpdi0+a2VlcEFsaXZlKQorICAgICAgICBtZW1iZXJzLT5s
b2FkZXIgPSBudWxscHRyOworCisgICAgLy8gRW5zdXJlIGFsbCBuZXR3b3JrIGNhbGxiYWNrcyBm
cm9tIHRoZSBvbGQgcmVxdWVzdCBkb24ndCBmZWVkIGRhdGEgdG8gV2ViS2l0V2ViU3JjIGFueW1v
cmUuCisgICAgbWVtYmVycy0+cmVxdWVzdE51bWJlcisrOworCisgICAgLy8gV2FrZSB1cCBzdHJl
YW1pbmcgdGhyZWFkLgorICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgp
OworCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNV
bkxvY2tTdG9wKEdzdEJhc2VTcmMqIGJhc2VTcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMg
PSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihzcmMtPnBy
aXYtPnJlc3BvbnNlTG9jayk7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0
ZXgpOwogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiVW5sb2NrIHN0b3AiKTsKLSAgICBzcmMt
PnByaXYtPmlzRmx1c2hpbmcgPSBmYWxzZTsKKyAgICBtZW1iZXJzLT5pc0ZsdXNoaW5nID0gZmFs
c2U7CisgICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNldFR5cGU6OlNvZnQp
OwogCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3
ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5n
ZSB0cmFuc2l0aW9uKQotewotICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMo
ZWxlbWVudCk7Ci0KLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIiVzIiwgZ3N0X3N0YXRlX2NoYW5nZV9nZXRfbmFtZSh0cmFuc2l0aW9u
KSk7Ci0jZW5kaWYKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFU
RV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgICAgd2ViS2l0V2ViU3JjQ2xvc2VTZXNzaW9u
KHNyYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURf
VE9fUkVBRFk6IHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc3JjLT5wcml2LT5yZXNwb25z
ZUxvY2spOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkgY2Fu
Y2VsbGluZyBuZXR3b3JrIHJlcXVlc3RzIik7Ci0gICAgICAgIHNyYy0+cHJpdi0+aXNGbHVzaGlu
ZyA9IHRydWU7Ci0gICAgICAgIHNyYy0+cHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25l
KCk7Ci0gICAgICAgIHNyYy0+cHJpdi0+YWRhcHRlckNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3Rh
dGUoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci19Ci0KIHN0YXRpYyBib29sIHVybEhhc1N1cHBvcnRl
ZFByb3RvY29sKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiB1cmwuaXNWYWxpZCgpICYm
ICh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElzQmxvYigpKTsK
QEAgLTkzOCw3ICs5MDMsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAgICByZXR1
cm4gRkFMU0U7CiAgICAgfQogCi0gICAgcHJpdi0+cmVkaXJlY3RlZFVSSSA9IENTdHJpbmcoKTsK
ICAgICBwcml2LT5vcmlnaW5hbFVSSSA9IENTdHJpbmcoKTsKICAgICBpZiAoIXVyaSkKICAgICAg
ICAgcmV0dXJuIFRSVUU7CkBAIC05NzIsMTYgKzkzNiwxOSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRX
ZWJTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQogdm9pZCB3ZWJL
aXRXZWJTcmNTZXRNZWRpYVBsYXllcihXZWJLaXRXZWJTcmMqIHNyYywgV2ViQ29yZTo6TWVkaWFQ
bGF5ZXIqIHBsYXllcikKIHsKICAgICBBU1NFUlQocGxheWVyKTsKLSAgICBzcmMtPnByaXYtPnBs
YXllciA9IHBsYXllcjsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFt
aW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7
CisgICAgbWVtYmVycy0+cGxheWVyID0gcGxheWVyOwogfQogCiBib29sIHdlYktpdFNyY1Bhc3Nl
ZENPUlNBY2Nlc3NDaGVjayhXZWJLaXRXZWJTcmMqIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLT5w
cml2LT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJT
cmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+
cHJpdi0+ZGF0YU11dGV4KTsKKyAgICByZXR1cm4gbWVtYmVycy0+ZGlkUGFzc0FjY2Vzc0NvbnRy
b2xDaGVjazsKIH0KIAotQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OkNhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBSZXNvdXJjZVJlcXVlc3QmJiBy
ZXF1ZXN0KQotICAgIDogbV9zcmMoR1NUX0VMRU1FTlQoc3JjKSkKK0NhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50OjpDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMq
IHNyYywgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgdW5zaWduZWQgcmVxdWVzdE51bWJlcikK
KyAgICA6IG1fcmVxdWVzdE51bWJlcihyZXF1ZXN0TnVtYmVyKQorICAgICwgbV9zcmMoR1NUX0VM
RU1FTlQoc3JjKSkKICAgICAsIG1fcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQogewogfQpAQCAt
OTkwLDYgKzk1Nyw3IEBAIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6OmNoZWNrVXBkYXRlQmxvY2tzaXplKHVuc2lnbmVkIGJ5dGVzUmVhZCkK
IHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktpdFdlYlNyYyogc3JjID0g
V0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwogICAgIEdzdEJhc2VTcmMqIGJhc2VTcmMgPSBH
U1RfQkFTRV9TUkNfQ0FTVChzcmMpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CkBAIC0xMDI2LDMyICs5OTQsNDQgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUodW5zaWduZWQgYnl0ZXNSZWFkKQogCiB2
b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRm
b3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFBvbGljeUNoZWNrZXI6OlNob3VsZENvbnRpbnVlKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktp
dFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwogICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0gICAgcHJpdi0+ZGlkUGFzc0FjY2Vzc0Nv
bnRyb2xDaGVjayA9IHByaXYtPnJlc291cmNlLT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCk7
CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpM
b2NrZWRXcmFwcGVyIG1lbWJlcnMocHJpdi0+ZGF0YU11dGV4KTsKKyAgICBpZiAobWVtYmVycy0+
cmVxdWVzdE51bWJlciAhPSBtX3JlcXVlc3ROdW1iZXIpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoUG9saWN5Q2hlY2tlcjo6U2hvdWxkQ29udGludWU6Ok5vKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6
ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJSJXU6IFJlY2VpdmVkIHJlc3BvbnNlOiAlZCIsIG1fcmVxdWVzdE51bWJlciwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKKyAgICBtZW1iZXJzLT5kaWRQYXNzQWNjZXNzQ29udHJv
bENoZWNrID0gbWVtYmVycy0+cmVzb3VyY2UtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKTsK
ICAgICBtX29yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzcG9uc2UudXJsKCkp
KTsKIAogICAgIGF1dG8gcmVzcG9uc2VVUkkgPSByZXNwb25zZS51cmwoKS5zdHJpbmcoKS51dGY4
KCk7CiAgICAgaWYgKHByaXYtPm9yaWdpbmFsVVJJICE9IHJlc3BvbnNlVVJJKQotICAgICAgICBw
cml2LT5yZWRpcmVjdGVkVVJJID0gV1RGTW92ZShyZXNwb25zZVVSSSk7CisgICAgICAgIG1lbWJl
cnMtPnJlZGlyZWN0ZWRVUkkgPSBXVEZNb3ZlKHJlc3BvbnNlVVJJKTsKKworICAgIC8vIGxlbmd0
aCB3aWxsIGJlIHplcm8gKHVua25vd24pIGlmIG5vIENvbnRlbnQtTGVuZ3RoIGlzIHByb3ZpZGVk
IG9yIHRoZSByZXNwb25zZSBpcyBjb21wcmVzc2VkIHdpdGggQ29udGVudC1FbmNvZGluZy4KKyAg
ICB1aW50NjRfdCBsZW5ndGggPSAhcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5z
KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50RW5jb2RpbmcpID8gcmVzcG9uc2UuZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCkgOiAwOworICAgIGlmIChsZW5ndGggPiAwICYmIG1lbWJlcnMtPnJlcXVlc3Rl
ZFBvc2l0aW9uICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjA2KQorICAgICAgICBs
ZW5ndGggKz0gbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb247CiAKLSAgICB1aW50NjRfdCBsZW5n
dGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoID4g
MCAmJiBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
ID09IDIwNikKLSAgICAgICAgbGVuZ3RoICs9IHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uOworICAg
IEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBodHRwSGVhZGVycyhnc3Rfc3RydWN0dXJlX25ld19l
bXB0eSgiaHR0cC1oZWFkZXJzIikpOwogCi0gICAgcHJpdi0+aHR0cEhlYWRlcnMucmVzZXQoZ3N0
X3N0cnVjdHVyZV9uZXdfZW1wdHkoImh0dHAtaGVhZGVycyIpKTsKLSAgICBnc3Rfc3RydWN0dXJl
X3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYt
Pm9yaWdpbmFsVVJJLmRhdGEoKSwKKyAgICBnc3Rfc3RydWN0dXJlX3NldChodHRwSGVhZGVycy5n
ZXQoKSwgInVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSwKICAg
ICAgICAgImh0dHAtc3RhdHVzLWNvZGUiLCBHX1RZUEVfVUlOVCwgcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFwcml2LT5yZWRpcmVjdGVkVVJJLmlzTnVsbCgp
KQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInJl
ZGlyZWN0aW9uLXVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYtPnJlZGlyZWN0ZWRVUkkuZGF0YSgp
LCBudWxscHRyKTsKKyAgICBpZiAoIW1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCisg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAicmVkaXJlY3Rpb24t
dXJpIiwgR19UWVBFX1NUUklORywgbWVtYmVycy0+cmVkaXJlY3RlZFVSSS5kYXRhKCksIG51bGxw
dHIpOworCisgICAgLy8gUGFjayByZXF1ZXN0IGhlYWRlcnMgaW4gdGhlIGh0dHAtaGVhZGVycyBz
dHJ1Y3R1cmUuCiAgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGhlYWRlcnMoZ3N0X3N0cnVj
dHVyZV9uZXdfZW1wdHkoInJlcXVlc3QtaGVhZGVycyIpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGhlYWRlciA6IG1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpCiAgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEoKSwgR19UWVBF
X1NUUklORywgaGVhZGVyLnZhbHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwotICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiUmVxdWVzdCBoZWFkZXJzIGdvaW5nIGRvd25zdHJlYW06ICUiIEdT
VF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldChwcml2
LT5odHRwSGVhZGVycy5nZXQoKSwgInJlcXVlc3QtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVS
RSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
JXU6IFJlcXVlc3QgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwg
bV9yZXF1ZXN0TnVtYmVyLCBoZWFkZXJzLmdldCgpKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldCho
dHRwSGVhZGVycy5nZXQoKSwgInJlcXVlc3QtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwg
aGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBQYWNrIHJlc3BvbnNlIGhlYWRlcnMg
aW4gdGhlIGh0dHAtaGVhZGVycyBzdHJ1Y3R1cmUuCiAgICAgaGVhZGVycy5yZXNldChnc3Rfc3Ry
dWN0dXJlX25ld19lbXB0eSgicmVzcG9uc2UtaGVhZGVycyIpKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGhlYWRlciA6IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkgewogICAgICAgICBib29s
IG9rID0gZmFsc2U7CkBAIC0xMDYxLDU3ICsxMDQxLDQzIEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwg
Y29uCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRlcnMu
Z2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywgaGVhZGVyLnZh
bHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwogICAgIH0KLSAgICBhdXRvIGNvbnRlbnRMZW5n
dGhGaWVsZE5hbWUoaHR0cEhlYWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRM
ZW5ndGgpLnRvU3RyaW5nKCkpOwotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQoaGVh
ZGVycy5nZXQoKSwgY29udGVudExlbmd0aEZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKSkKLSAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgY29udGVudExlbmd0aEZpZWxkTmFt
ZS51dGY4KCkuZGF0YSgpLCBHX1RZUEVfVUlOVDY0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVu
Z3RoKSwgbnVsbHB0cik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQocHJpdi0+aHR0cEhlYWRlcnMu
Z2V0KCksICJyZXNwb25zZS1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdl
dCgpLCBudWxscHRyKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc3BvbnNlIGhlYWRl
cnMgZ29pbmcgZG93bnN0cmVhbTogJSIgR1NUX1BUUl9GT1JNQVQsIGhlYWRlcnMuZ2V0KCkpOwor
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUiV1OiBSZXNwb25zZSBoZWFkZXJzIGdvaW5nIGRv
d25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBtX3JlcXVlc3ROdW1iZXIsIGhlYWRlcnMuZ2V0
KCkpOworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAicmVzcG9uc2Ut
aGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CiAK
LSAgICBwcml2LT5odHRwSGVhZGVyc0V2ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfY3Vz
dG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9TVElDS1ksIGdzdF9zdHJ1Y3R1cmVfY29w
eShwcml2LT5odHRwSGVhZGVycy5nZXQoKSkpKTsKLQotICAgIGF1dG8gc2NvcGVFeGl0ID0gbWFr
ZVNjb3BlRXhpdChbJl0gewotICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9z
dHJ1Y3R1cmVfY29weShzcmMtPnByaXYtPmh0dHBIZWFkZXJzLmdldCgpKTsKLSAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2Vf
bmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksIHN0cnVjdHVyZSkpOwotICAgIH0pOwor
ICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UgPSBhZG9wdEdSZWYoZ3N0X21l
c3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksIGdzdF9zdHJ1Y3R1cmVfY29w
eShodHRwSGVhZGVycy5nZXQoKSkpKTsKKyAgICBtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNF
dmVudCA9IGFkb3B0R1JlZihnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RP
V05TVFJFQU1fU1RJQ0tZLCBodHRwSGVhZGVycy5yZWxlYXNlKCkpKTsKIAogICAgIGlmIChyZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJP
UihzcmMsIFJFU09VUkNFLCBSRUFELCAoIlJlY2VpdmVkICVkIEhUVFAgZXJyb3IgY29kZSIsIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOwotICAgICAgICBwcml2LT5kb2Vz
SGF2ZUVPUyA9IHRydWU7Ci0gICAgICAgIHdlYktpdFdlYlNyY1N0b3AoR1NUX0JBU0VfU1JDX0NB
U1Qoc3JjKSk7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQs
ICgiUiV1OiBSZWNlaXZlZCAlZCBIVFRQIGVycm9yIGNvZGUiLCBtX3JlcXVlc3ROdW1iZXIsIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOworICAgICAgICBtZW1iZXJzLT5k
b2VzSGF2ZUVPUyA9IHRydWU7CisgICAgICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5v
dGlmeU9uZSgpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lDaGVja2VyOjpTaG91
bGRDb250aW51ZTo6Tm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHByaXYt
PnJlcXVlc3RlZFBvc2l0aW9uKSB7CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9u
KSB7CiAgICAgICAgIC8vIFNlZWtpbmcgLi4uIHdlIGV4cGVjdCBhIDIwNiA9PSBQQVJUSUFMX0NP
TlRFTlQKLSAgICAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjAwKSB7Ci0g
ICAgICAgICAgICAvLyBSYW5nZSByZXF1ZXN0IGRpZG4ndCBoYXZlIGEgcmFuZ2VkIHJlc3BvbnNl
OyByZXNldHRpbmcgb2Zmc2V0LgotICAgICAgICAgICAgcHJpdi0+cmVhZFBvc2l0aW9uID0gMDsK
LSAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwNikgewor
ICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsKICAgICAgICAg
ICAgIC8vIFJhbmdlIHJlcXVlc3QgY29tcGxldGVseSBmYWlsZWQuCi0gICAgICAgICAgICBHU1Rf
RUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBSRUFELCAoIlJlY2VpdmVkIHVuZXhwZWN0ZWQg
JWQgSFRUUCBzdGF0dXMgY29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0
cikpOwotICAgICAgICAgICAgcHJpdi0+ZG9lc0hhdmVFT1MgPSB0cnVlOwotICAgICAgICAgICAg
d2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKKyAgICAgICAgICAgIEdT
VF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUiV1OiBSZWNlaXZlZCB1bmV4
cGVjdGVkICVkIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHJhbmdlIHJlcXVlc3QiLCBtX3JlcXVlc3RO
dW1iZXIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOworICAgICAgICAg
ICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0cnVlOworICAgICAgICAgICAgbWVtYmVycy0+cmVz
cG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihQb2xpY3lDaGVja2VyOjpTaG91bGRDb250aW51ZTo6Tm8pOwogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
YW5nZSByZXF1ZXN0IHN1Y2NlZWRlZCIpOwotICAgICAgICAgICAgcHJpdi0+aXNTZWVraW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICBwcml2LT53YXNTZWVraW5nID0gdHJ1ZTsKICAgICAgICAgfQor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlIldTogUmFuZ2UgcmVxdWVzdCBzdWNjZWVk
ZWQiLCBtX3JlcXVlc3ROdW1iZXIpOwogICAgIH0KIAotICAgIHByaXYtPmlzU2Vla2FibGUgPSBs
ZW5ndGggPiAwICYmIGdfYXNjaWlfc3RyY2FzZWNtcCgibm9uZSIsIHJlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QWNjZXB0UmFuZ2VzKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBtZW1iZXJzLT5pc1NlZWthYmxlID0gbGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNhc2VjbXAo
Im5vbmUiLCByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkFjY2VwdFJh
bmdlcykudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNpemU6
ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgaXNTZWVrYWJsZTogJXMiLCBsZW5ndGgsIGJvb2xGb3JQ
cmludGluZyhwcml2LT5pc1NlZWthYmxlKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
JXU6IFNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgaXNTZWVrYWJsZTogJXMiLCBtX3JlcXVl
c3ROdW1iZXIsIGxlbmd0aCwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vla2FibGUpKTsK
ICAgICBpZiAobGVuZ3RoID4gMCkgewotICAgICAgICBpZiAoIXByaXYtPmhhdmVTaXplIHx8IHBy
aXYtPnNpemUgIT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBwcml2LT5oYXZlU2l6ZSA9IHRydWU7
Ci0gICAgICAgICAgICBwcml2LT5zaXplID0gbGVuZ3RoOwotICAgICAgICAgICAgcHJpdi0+aXNE
dXJhdGlvblNldCA9IGZhbHNlOworICAgICAgICBpZiAoIW1lbWJlcnMtPmhhdmVTaXplIHx8IG1l
bWJlcnMtPnNpemUgIT0gbGVuZ3RoKSB7CisgICAgICAgICAgICBtZW1iZXJzLT5oYXZlU2l6ZSA9
IHRydWU7CisgICAgICAgICAgICBtZW1iZXJzLT5zaXplID0gbGVuZ3RoOwogICAgICAgICB9CiAg
ICAgfSBlbHNlCi0gICAgICAgIHByaXYtPmhhdmVTaXplID0gZmFsc2U7CisgICAgICAgIG1lbWJl
cnMtPmhhdmVTaXplID0gZmFsc2U7CiAKICAgICAvLyBTaWduYWwgdG8gZG93bnN0cmVhbSBpZiB0
aGlzIGlzIGFuIEljZWNhc3Qgc3RyZWFtLgogICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKQEAg
LTExMjMsMTE0ICsxMDg5LDEwNiBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbgogICAgICAgICAg
ICAgY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWlj
eSIsICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIG1ldGFkYXRhSW50ZXJ2YWwsIG51
bGxwdHIpKTsKIAogICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSk7Ci0gICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc3BvbnNlIENvbnRlbnRUeXBlOiAlcyIsIGNvbnRlbnRU
eXBlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
JXU6IFJlc3BvbnNlIENvbnRlbnRUeXBlOiAlcyIsIG1fcmVxdWVzdE51bWJlciwgY29udGVudFR5
cGUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKGNhcHMu
Z2V0KCksICJjb250ZW50LXR5cGUiLCBHX1RZUEVfU1RSSU5HLCBjb250ZW50VHlwZS51dGY4KCku
ZGF0YSgpLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KLQogICAgIGlmIChjYXBzKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0IGNhcHMgdG8gJSIgR1NUX1BUUl9GT1JN
QVQsIGNhcHMuZ2V0KCkpOwotICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMoR1NUX0JBU0Vf
U1JDX0NBU1Qoc3JjKSwgY2Fwcy5nZXQoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiUiV1OiBTZXQgY2FwcyB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9yZXF1ZXN0TnVtYmVyLCBj
YXBzLmdldCgpKTsKKyAgICAgICAgbWVtYmVycy0+cGVuZGluZ0NhcHMgPSBXVEZNb3ZlKGNhcHMp
OwogICAgIH0KIAotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+cmVzcG9u
c2VMb2NrKTsKLSAgICAgICAgcHJpdi0+d2VyZUhlYWRlcnNSZWNlaXZlZCA9IHRydWU7Ci0gICAg
ICAgIHByaXYtPmhlYWRlcnNDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgfQorICAgIG1lbWJl
cnMtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgPSB0cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOworCiAgICAgY29tcGxldGlvbkhhbmRsZXIoUG9saWN5Q2hlY2tl
cjo6U2hvdWxkQ29udGludWU6Olllcyk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
V2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7Ci0gICAgR3N0
QmFzZVNyYyogYmFzZVNyYyA9IEdTVF9CQVNFX1NSQ19DQVNUKHNyYyk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9MT0dfT0JKRUNUKHNyYywg
IkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIGxlbmd0aCk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
cHJpdi0+cmVzcG9uc2VMb2NrKTsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6
U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5kYXRhTXV0ZXgp
OworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiUiV1OiBIYXZlICVkIGJ5
dGVzIG9mIGRhdGEiLCBtX3JlcXVlc3ROdW1iZXIsIGxlbmd0aCk7CisKICAgICAvLyBSb3VnaCBi
YW5kd2lkdGggY2FsY3VsYXRpb24uIFdlIGlnbm9yZSBoZXJlIHRoZSBmaXJzdCBkYXRhIHBhY2th
Z2UgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIHRvIHJlc2V0IHRoZSBjb3VudGVycyB3aGVuIHdlIGlz
c3VlIHRoZSByZXF1ZXN0IGFuZAogICAgIC8vIHRoYXQgZmlyc3QgcGFja2FnZSBkZWxpdmVyeSB3
b3VsZCBpbmNsdWRlIHRoZSB0aW1lIG9mIHNlbmRpbmcgb3V0IHRoZSByZXF1ZXN0IGFuZCBnZXR0
aW5nIHRoZSBkYXRhIGJhY2suIFNpbmNlIHdlIGNhbid0IGRpc3Rpbmd1aXNoIHRoZQogICAgIC8v
IHNlbmRpbmcgdGltZSBmcm9tIHRoZSByZWNlaXZpbmcgdGltZSwgaXQgaXMgYmV0dGVyIHRvIGln
bm9yZSBpdC4KLSAgICBpZiAoIXN0ZDo6aXNuYW4ocHJpdi0+ZG93bmxvYWRTdGFydFRpbWUpKSB7
Ci0gICAgICAgIHByaXYtPnRvdGFsRG93bmxvYWRlZEJ5dGVzICs9IGxlbmd0aDsKLSAgICAgICAg
ZG91YmxlIHRpbWVTaW5jZVN0YXJ0ID0gKFdhbGxUaW1lOjpub3coKSAtIHByaXYtPmRvd25sb2Fk
U3RhcnRUaW1lKS5zZWNvbmRzKCk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG93
bmxvYWRlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMgaW4gJWYgc2Vjb25kcyA9fiAlMS4w
ZiBieXRlcy9zZWNvbmQiLCBwcml2LT50b3RhbERvd25sb2FkZWRCeXRlcywgdGltZVNpbmNlU3Rh
cnQKLSAgICAgICAgICAgICwgdGltZVNpbmNlU3RhcnQgPyBwcml2LT50b3RhbERvd25sb2FkZWRC
eXRlcyAvIHRpbWVTaW5jZVN0YXJ0IDogMCk7CisgICAgaWYgKCFzdGQ6OmlzbmFuKG1lbWJlcnMt
PmRvd25sb2FkU3RhcnRUaW1lKSkgeworICAgICAgICBtZW1iZXJzLT50b3RhbERvd25sb2FkZWRC
eXRlcyArPSBsZW5ndGg7CisgICAgICAgIGRvdWJsZSB0aW1lU2luY2VTdGFydCA9IChXYWxsVGlt
ZTo6bm93KCkgLSBtZW1iZXJzLT5kb3dubG9hZFN0YXJ0VGltZSkuc2Vjb25kcygpOworICAgICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlIldTogZG93bmxvYWRlZCAlIiBHX0dVSU5UNjRfRk9S
TUFUICIgYnl0ZXMgaW4gJWYgc2Vjb25kcyA9fiAlMS4wZiBieXRlcy9zZWNvbmQiLCBtX3JlcXVl
c3ROdW1iZXIsIG1lbWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5dGVzLCB0aW1lU2luY2VTdGFydAor
ICAgICAgICAgICAgLCB0aW1lU2luY2VTdGFydCA/IG1lbWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5
dGVzIC8gdGltZVNpbmNlU3RhcnQgOiAwKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcml2LT5k
b3dubG9hZFN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKLSAgICAgICAgcHJpdi0+dG90YWxE
b3dubG9hZGVkQnl0ZXMgPSAwOworICAgICAgICBtZW1iZXJzLT5kb3dubG9hZFN0YXJ0VGltZSA9
IFdhbGxUaW1lOjpub3coKTsKICAgICB9CiAKLSAgICB1aW50NjRfdCBuZXdQb3NpdGlvbiA9IHBy
aXYtPnJlYWRQb3NpdGlvbiArIGxlbmd0aDsKLSAgICBpZiAoTElLRUxZIChwcml2LT5yZXF1ZXN0
ZWRQb3NpdGlvbiA9PSBwcml2LT5yZWFkUG9zaXRpb24pKQotICAgICAgICBwcml2LT5yZXF1ZXN0
ZWRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IG5ld1Bv
c2l0aW9uOwotCi0gICAgdWludDY0X3QgbmV3U2l6ZSA9IDA7Ci0gICAgaWYgKHByaXYtPmhhdmVT
aXplICYmIChuZXdQb3NpdGlvbiA+IHByaXYtPnNpemUpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiR290IHBvc2l0aW9uIHByZXZpb3VzIGVzdGltYXRlZCBjb250ZW50IHNpemUg
KCUiIEdfR0lOVDY0X0ZPUk1BVCAiID4gJSIgR19HSU5UNjRfRk9STUFUICIpIiwgbmV3UG9zaXRp
b24sIHByaXYtPnNpemUpOwotICAgICAgICBuZXdTaXplID0gbmV3UG9zaXRpb247Ci0gICAgfQot
Ci0gICAgaWYgKG5ld1NpemUpIHsKLSAgICAgICAgcHJpdi0+c2l6ZSA9IG5ld1NpemU7Ci0gICAg
ICAgIGJhc2VTcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBwcml2LT5zaXplOwotICAgICAgICBnc3Rf
ZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9u
ZXdfZHVyYXRpb25fY2hhbmdlZChHU1RfT0JKRUNUX0NBU1Qoc3JjKSkpOwotICAgIH0KKyAgICBt
ZW1iZXJzLT5yZWFkUG9zaXRpb24gKz0gbGVuZ3RoOworICAgIEFTU0VSVCghbWVtYmVycy0+aGF2
ZVNpemUgfHwgbWVtYmVycy0+cmVhZFBvc2l0aW9uIDw9IG1lbWJlcnMtPnNpemUpOwogCiAgICAg
Z3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3Nh
Z2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksCi0gICAgICAgIGdzdF9zdHJ1Y3R1
cmVfbmV3KCJ3ZWJraXQtbmV0d29yay1zdGF0aXN0aWNzIiwgInJlYWQtcG9zaXRpb24iLCBHX1RZ
UEVfVUlOVDY0LCBwcml2LT5yZWFkUG9zaXRpb24sICJzaXplIiwgR19UWVBFX1VJTlQ2NCwgcHJp
di0+c2l6ZSwgbnVsbHB0cikpKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcoIndlYmtpdC1u
ZXR3b3JrLXN0YXRpc3RpY3MiLCAicmVhZC1wb3NpdGlvbiIsIEdfVFlQRV9VSU5UNjQsIG1lbWJl
cnMtPnJlYWRQb3NpdGlvbiwgInNpemUiLCBHX1RZUEVfVUlOVDY0LCBtZW1iZXJzLT5zaXplLCBu
dWxscHRyKSkpOwogCiAgICAgY2hlY2tVcGRhdGVCbG9ja3NpemUobGVuZ3RoKTsKIAotICAgIGlm
ICghcHJpdi0+d2FzUmVzcG9uc2VSZWNlaXZlZCkKLSAgICAgICAgcHJpdi0+d2FzUmVzcG9uc2VS
ZWNlaXZlZCA9IHRydWU7Ci0gICAgcHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7
Ci0KLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgYWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVy
TG9jayk7Ci0gICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBl
ZChnX21lbWR1cChkYXRhLCBsZW5ndGgpLCBsZW5ndGgpOwotICAgICAgICBnc3RfYWRhcHRlcl9w
dXNoKHByaXYtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7Ci0gICAgICAgIHN0b3BMb2FkZXJJZk5l
ZWRlZChzcmMpOwotICAgICAgICBwcml2LT5hZGFwdGVyQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwot
ICAgIH0KKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQoZ19t
ZW1kdXAoZGF0YSwgbGVuZ3RoKSwgbGVuZ3RoKTsKKyAgICBnc3RfYWRhcHRlcl9wdXNoKG1lbWJl
cnMtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7CisgICAgc3RvcExvYWRlcklmTmVlZGVkKHNyYywg
bWVtYmVycyk7CisgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9
CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmFjY2Vzc0NvbnRyb2xDaGVj
a0ZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktpdFdlYlNyYyogc3Jj
ID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNy
YywgUkVTT1VSQ0UsIFJFQUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0
ZjgoKS5kYXRhKCkpLCAobnVsbHB0cikpOwotICAgIHNyYy0+cHJpdi0+ZG9lc0hhdmVFT1MgPSB0
cnVlOwotICAgIHdlYktpdFdlYlNyY1N0b3AoR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKSk7CisgICAg
RGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRX
cmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5y
ZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCJSJXU6ICVzIiwgbV9yZXF1
ZXN0TnVtYmVyLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAo
bnVsbHB0cikpOworICAgIG1lbWJlcnMtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICBtZW1iZXJz
LT5yZXNwb25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAg
IERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2Vk
V3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICBpZiAobWVtYmVycy0+
cmVxdWVzdE51bWJlciAhPSBtX3JlcXVlc3ROdW1iZXIpCisgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNyYywgIkhhdmUgZmFpbHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBG
QUlMRUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkp
LCAobnVsbHB0cikpOworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIlIldTogSGF2ZSBm
YWlsdXJlOiAlcyIsIG1fcmVxdWVzdE51bWJlciwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24o
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJD
RSwgRkFJTEVELCAoIlIldTogJXMiLCBtX3JlcXVlc3ROdW1iZXIsIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksIChudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3Jj
LT5wcml2LT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0
cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCiB2
b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1N
ZWRpYVJlc291cmNlJikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktp
dFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwotICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNy
Y1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5w
cml2LT5kYXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVx
dWVzdE51bWJlcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHByaXYtPmlzU2Vla2luZyAm
JiAhcHJpdi0+aXNGbHVzaGluZykKLSAgICAgICAgcHJpdi0+aXNTZWVraW5nID0gZmFsc2U7Cisg
ICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCiBib29sIHdlYktpdFNyY1dvdWxkVGFpbnRPcmlnaW4o
V2ViS2l0V2ViU3JjKiBzcmMsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAg
V2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBEYXRhTXV0ZXg8V2Vi
S2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVy
cyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CiAKLSAgICBhdXRvKiBjYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQqPihwcml2LT5yZXNvdXJjZS0+Y2xpZW50KCkpOworICAgIGF1dG8qIGNhY2hlZFJlc291cmNl
U3RyZWFtaW5nQ2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudCo+KG1lbWJlcnMtPnJlc291cmNlLT5jbGllbnQoKSk7CiAgICAgZm9yIChhdXRvJiBy
ZXNwb25zZU9yaWdpbiA6IGNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50LT5zZWN1cml0eU9y
aWdpbnMoKSkgewogICAgICAgICBpZiAoIW9yaWdpbi5jYW5BY2Nlc3MoKnJlc3BvbnNlT3JpZ2lu
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5oCmluZGV4IGYzZDk4ZmJlYzliNjQyMDViZGZiOWU1NDk3YWU1MDIxM2U4NDEw
ODEuLmI2YzUyZGEyY2YzMjk4YTZiZjc3MjUzZDk1ODFlZDYxNDRkMmE4YzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgKQEAgLTM5LDE3ICszOSwxNSBAQCBHX0JF
R0lOX0RFQ0xTCiAKICNkZWZpbmUgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9O
QU1FICAid2Via2l0Lm1lZGlhLXBsYXllciIKIAotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNy
YyAgICAgICAgV2ViS2l0V2ViU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyY0NsYXNz
ICAgV2ViS2l0V2ViU3JjQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0
ZSBXZWJLaXRXZWJTcmNQcml2YXRlOworc3RydWN0IFdlYktpdFdlYlNyY1ByaXZhdGU7CiAKLXN0
cnVjdCBfV2ViS2l0V2ViU3JjIHsKK3N0cnVjdCBXZWJLaXRXZWJTcmMgewogICAgIEdzdFB1c2hT
cmMgcGFyZW50OwogCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSAqcHJpdjsKIH07CiAKLXN0cnVj
dCBfV2ViS2l0V2ViU3JjQ2xhc3Mgeworc3RydWN0IFdlYktpdFdlYlNyY0NsYXNzIHsKICAgICBH
c3RQdXNoU3JjQ2xhc3MgcGFyZW50Q2xhc3M7CiB9OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2ViZjAzNjg0ZDYzMjU3
YjM5MDYzMTcwMWY5Yzc4ZTBlMjMzOTA1NS4uZTAxMDcwNmRiOTdlZjQ2MjAxZjFiZmI5ZTViMjk4
OTdkYjc2OTY2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTA5ICBBbGljaWEgQm95
YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBSZXdv
cmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA5ODExCisKKyAgICAgICAgQSB0ZXN0IGltcHJvdmVkIGl0cyBz
dGF0dXMgaW4gVGVzdEV4cGVjdGF0aW9ucyBmcm9tIHRoZSBjaGFuZ2VzIG1hZGUKKyAgICAgICAg
aW4gdGhpcyBwYXRjaC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OgorCiAyMDIwLTA0LTIzICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1dQRV0gR2FyZGVuaW5nLCB1cGRhdGUgZXhwZWN0YXRpb25zIGFmdGVyIHIyNTk3
MDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYzUxYmRk
YjllZmU0YTZhZTJmYTBlZGZhYTllZGUyNGM0Y2MyOGMwMi4uNDJmYzJkNGVmMGU5ZjZlNzk1Zjdj
Zjc3ZTJkNDQyNjk4M2E0NjExYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTEyODcsOCArMTI4Nyw2IEBAIHdlYmtpdC5vcmcvYi8yMDY2NTYgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0CiB3
ZWJraXQub3JnL2IvMjA2NjU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFj
YXB0dXJlLXN0cmVhbXMvTWVkaWFTdHJlYW1UcmFjay1nZXRTZXR0aW5ncy5odHRwcy5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjA2NjU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvbWVkaWFjYXB0dXJlLXN0cmVhbXMvTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXByZWxv
YWQtbm9uZS1tYW51YWwuaHR0cHMuaHRtbCBbIENyYXNoIEZhaWx1cmUgUGFzcyBdCiAKLXdlYmtp
dC5vcmcvYi8yMDY2NTcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS12aWRlby1lbGVtZW50L3Jlc2l6ZS1kdXJpbmctcGxh
eWJhY2suaHRtbCBbIEZhaWx1cmUgXQotCiAjIExGQyAoTGF5b3V0Rm9ybWF0aW5nQ29udGV4dCBp
cyBkaXNhYmxlZCBieSBkZWZhdWx0KS4KIGZhc3QvbGF5b3V0Zm9ybWF0dGluZ2NvbnRleHQvIFsg
U2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397680</attachid>
            <date>2020-04-27 07:36:22 -0700</date>
            <delta_ts>2020-04-27 08:30:08 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-210284-20200427163621.patch</filename>
            <type>text/plain</type>
            <size>70803</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQ2Y2NkOWJmNTYzMDBj
YjkzZDk2NWI4NDg0ODA1MDQ1ZTcyY2E0ZS4uNTA2YWI5MWYwYzZmNzZhZDFmM2UxOTU3NWM1MmIx
YjAyNDhmYjY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA0LTA5ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBSZXdvcmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWGFi
aWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgV2ViS2l0V2ViU3JjIGFzIGl0IGlzIGlu
IG1hc3RlciBoYXMgYSBudW1iZXIgb2YgcmFjZSBjb25kaXRpb25zCisgICAgICAgIGxlYWRpbmcg
dG8gb2NjYXNpb25hbCBzdGFydmF0aW9uIChkdWUgdG8gY2FuY2VsbGluZyB0aGUgd3JvbmcgcmVx
dWVzdCkKKyAgICAgICAgb3IgZGF0YSBjb3JydXB0aW9uIChkdWUgdG8gcHVzaGluZyBkYXRhIGZy
b20gYSBjYW5jZWxsZWQgcmVxdWVzdCkuCisKKyAgICAgICAgVGhlIHRocmVhZGluZyBzaXR1YXRp
b24gd2Fzbid0IGVhc3kgdG8gZm9sbG93LCBhcyBpdCB3YXNuJ3QgY2xlYXIKKyAgICAgICAgYWNj
ZXNzIHRvIHdoYXQgbWVtYmVycyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IHdoYXQgbXV0ZXgsIGlu
IHdoYXQKKyAgICAgICAgY2lyY3Vtc3RhbmNlcy4gQWxzbywgc29tZSBwYXJ0cyBvZiB0aGUgZGVz
aWduIHdlcmUgYWxzbyBpbnRyb2R1Y2luZworICAgICAgICBhZGRpY2lvbmFsIGNvbXBsZXhpdHks
IHN1Y2ggYXMgdGhlIGZpcnN0IHJlcXVlc3QgYmVpbmcgc2VudCBmcm9tIHRoZQorICAgICAgICBt
YWluIHRocmVhZCB3aGVyZWFzIHRoZSByZXN0IHdlcmUgYmVpbmcgc2VudCBmcm9tIHRoZSBzdHJl
YW1pbmcgdGhyZWFkCisgICAgICAgIG9yIGJhc2VzcmMgYXN5bmMgc3RhcnQuCisKKyAgICAgICAg
SW4gcmVzcG9uc2UsIHRoaXMgcGF0Y2ggcmV3b3JrcyBhbGwgdGhlIGxvY2tpbmcgaW4gV2ViS2l0
V2ViU3JjIHRvIHVzZQorICAgICAgICBXVEY6OkRhdGFNdXRleC4gVGhpcyBlbnN1cmVzIGFsbCBh
Y2Nlc3NlcyB0byBpdHMgKG5vdyBleHBsaWNpdCkKKyAgICAgICAgcHJvdGVjdGVkIG1lbWJlcnMg
YXJlIGxvY2tlZC4gVGhlIHR3byBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVzCisgICAg
ICAgIGhhdmUgYmVlbiBzaW1wbGlmaWVkIGludG8gb25lLCBhcyB0aGVyZSB3YXMgbm8gb2J2aW91
cyBuZWVkIG9yIGJlbmVmaXQKKyAgICAgICAgZm9yIHR3byBvZiBlYWNoIGluIHRoaXMgY2FzZS4K
KworICAgICAgICBSZXF1ZXN0cyBoYXZlIGJlZW4gbnVtYmVyZWQsIHdoaWNoIGFsbG93cyB0byBz
YWZlbHkgYW5kIGF0b21pY2FsbHkKKyAgICAgICAgaWdub3JlIHJlc3VsdHMgZnJvbSBjYW5jZWxs
ZWQgcmVxdWVzdHMsIGF2b2lkaW5nIGRhdGEgY29ycnVwdGlvbgorICAgICAgICByYWNlcywgYW5k
IG1ha2VzIGZvbGxvd2luZyB0aGVtIGluIGRlYnVnIGxvZ3MgbXVjaCBlYXNpZXIuCisKKyAgICAg
ICAgVGhlIGNvbmRpdGlvbnMgZm9yIG1ha2luZyBhbmQgY2FuY2VsbGluZyByZXF1ZXN0cyBoYXZl
IGJlZW4gc2ltcGxpZmllZAorICAgICAgICB0byBhIHNpbXBsZXIgYW5kIHNhZmVyIG1vZGVsOiBU
aGVyZSBpcyBhdCBtb3N0IG9ubHkgb25lIGFjdGl2ZSByZXF1ZXN0CisgICAgICAgIGF0IGFueXRp
bWUsIGZsdXNoZXMgY2FuY2VsIHRoZSByZXF1ZXN0LCBhbmQgdGhlIGZpcnN0IGNyZWF0ZSgpIGNh
bGwKKyAgICAgICAgYWx3YXlzIG1ha2VzIHRoZSBuZXcgcmVxdWVzdCAoYm90aCBhdCBzdGFydHVw
IGFuZCBhZnRlciBhIGZsdXNoKS4KKyAgICAgICAgRGVidWcgYXNzZXJ0cyBhbmQgbm90ZXMgYWJv
dXQgdGhlIGZsb3cgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgYmFzZXNyYworICAgICAgICBzZWVrcyBo
YXZlIGJlZW4gcHJvdmlkZWQuCisKKyAgICAgICAgQXMgdGhpcyBlZmZvcnQgbmVlZGVkIGEgcmV2
aWV3IG9mIHRoZSBlbnRpcmUgV2ViS2l0V2ViU3JjLCBjbGVhbnVwcywKKyAgICAgICAgY29ycmVj
dGlvbnMgYW5kIGRvY3VtZW50YXRpb24gY29tbWVudHMgaGF2ZSBiZWVuIHByb3ZpZGVkIHdoZXJl
CisgICAgICAgIGFwcHJvcHJpYXRlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBu
byB2aXNpYmxlIGJlaGF2aW9yIGNoYW5nZXMsIGp1c3Qgc3RhYmlsaXR5CisgICAgICAgIGltcHJv
dmVtZW50cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dFdlYlNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJLaXRXZWJTcmNQcml2YXRlOjp+
V2ViS2l0V2ViU3JjUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdFdlYlNyY1Jlc2V0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0Nv
bnN0cnVjdGVkKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToKKyAgICAgICAg
KHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldENvbnRl
eHQpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2VuZEV2ZW50KToKKyAgICAgICAgKHJlc3RhcnRM
b2FkZXJJZk5lZWRlZCk6CisgICAgICAgIChzdG9wTG9hZGVySWZOZWVkZWQpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjQ3JlYXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAg
ICAgKHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3Ap
OgorICAgICAgICAod2ViS2l0V2ViU3JjR2V0U2l6ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNJ
c1NlZWthYmxlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0RvU2Vlayk6CisgICAgICAgICh3ZWJL
aXRXZWJTcmNRdWVyeSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNVbkxvY2spOgorICAgICAgICAo
d2ViS2l0V2ViU3JjVW5Mb2NrU3RvcCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgor
ICAgICAgICAod2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAod2ViS2l0U3Jj
UGFzc2VkQ09SU0FjY2Vzc0NoZWNrKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5n
Q2xpZW50OjpDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUpOgorICAgICAgICAo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAg
ICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZCk6CisgICAgICAg
IChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVk
KToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToK
KyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgor
ICAgICAgICAod2ViS2l0U3JjV291bGRUYWludE9yaWdpbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oOgorCiAyMDIwLTA0
LTIzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBnZXREaXNw
bGF5TWVkaWEgaXMgbm90IHJlc3BlY3RpbmcgYXNwZWN0IHJhdGlvIHdpdGggbWF4IGNvbnN0cmFp
bnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1JlZlB0ckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAppbmRleCBkOTQwZjhjYTBmOTUwZmY0MjQzZmU0
NTYyOTRjYmYzZTQ4NTJkMzRlLi4xOTUwOWZlMWZkZjdjNjc0NzdiYjlhOGJiNjdiYmNiYmYxZTA1
ZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1JlZlB0ckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1Np
bmsgV2ViS2l0VmlkZW9TaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyYyBXZWJLaXRX
ZWJTcmM7CitzdHJ1Y3QgV2ViS2l0V2ViU3JjOwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHR5
cGVkZWYgc3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
V2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCBlOWZlYjIxMDBhN2VmNWY1YjEwYjg2
M2E1NzU2ZDcwNGMzN2M1NTJhLi43ZjdlMjQ4ZjkwYTQxMzFmNzgwZGYxZWE3MjczMGQzZDA3NWE3
MDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFzdGlhbiBE
csO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHlyaWdodCAo
QykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5M
LgorICogIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgi
CiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZE5vdGlm
aWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlh
UmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJQb2xpY3lDaGVja2VyLmgiCkBAIC0zNCwxMSAr
MzMsMTQgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Y3N0ZGlu
dD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFNdXRleC5o
PgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAjaW5j
bHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgV1RGOjpEYXRhTXV0ZXg7CiAKIC8v
IE5ldmVyIHBhdXNlIGRvd25sb2FkIG9mIG1lZGlhIHJlc291cmNlcyBzbWFsbGVyIHRoYW4gMk1p
Qi4KICNkZWZpbmUgU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUgMiAqIDEwMjQgKiAxMDI0
CkBAIC01NSw3ICs1Nyw3IEBAIGNsYXNzIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50IGZp
bmFsIDogcHVibGljIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQpOwogcHVibGljOgotICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xp
ZW50KFdlYktpdFdlYlNyYyosIFJlc291cmNlUmVxdWVzdCYmKTsKKyAgICBDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqLCBSZXNvdXJjZVJlcXVlc3QmJiwgdW5zaWdu
ZWQgcmVxdWVzdE51bWJlcik7CiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQoKTsKIAogICAgIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luPj4mIHNlY3VyaXR5T3JpZ2lucygpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luczsgfQpAQCAt
ODAsNzMgKzgyLDc5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBzX3Jl
ZHVjZUJsb2Nrc2l6ZUZhY3RvciB7IDAuNSB9OwogICAgIGludCBtX3JlZHVjZUJsb2Nrc2l6ZUNv
dW50IHsgMCB9OwogICAgIGludCBtX2luY3JlYXNlQmxvY2tzaXplQ291bnQgeyAwIH07CisgICAg
dW5zaWduZWQgbV9yZXF1ZXN0TnVtYmVyOwogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Ny
YzsKICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogICAgIEhhc2hTZXQ8UmVmUHRyPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4gbV9vcmlnaW5zOwogfTsKIAotZW51bSBNYWluVGhyZWFk
U291cmNlTm90aWZpY2F0aW9uIHsKLSAgICBTdGFydCA9IDEgPDwgMCwKLSAgICBTdG9wID0gMSA8
PCAxLAotICAgIERpc3Bvc2UgPSAxIDw8IDIsCi19OwotCi1zdHJ1Y3QgX1dlYktpdFdlYlNyY1By
aXZhdGUgewotICAgIH5fV2ViS2l0V2ViU3JjUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBpZiAo
bm90aWZpZXIgJiYgbm90aWZpZXItPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbm90aWZpZXIt
Pm5vdGlmeUFuZFdhaXQoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6RGlzcG9zZSwgWyZd
IHsKLSAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byogY2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQq
PihyZXNvdXJjZS0+Y2xpZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5zZXRTb3VyY2VFbGVtZW50KG51bGxwdHIp
OwotCi0gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxvYWRlciA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIG5vdGlmaWVyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAg
ICAgICBub3RpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9CitzdHJ1Y3QgV2ViS2l0
V2ViU3JjUHJpdmF0ZSB7CisgICAgLy8gQ29uc3RhbnRzIGluaXRpYWxpemVkIGR1cmluZyBjb25z
dHJ1Y3Rpb246CisgICAgdW5zaWduZWQgbWluaW11bUJsb2Nrc2l6ZTsKIAorICAgIC8vIENvbmZp
Z3VyYXRpb24gb2YgdGhlIGVsZW1lbnQgKHByb3BlcnRpZXMgc2V0IGJ5IHRoZSB1c2VyIG9mIFdl
YktpdFdlYlNyYyk6CisgICAgLy8gVGhleSBjYW4gb25seSBjaGFuZ2Ugd2hlbiBzdGF0ZSA8IFBB
VVNFRC4KICAgICBDU3RyaW5nIG9yaWdpbmFsVVJJOwotICAgIENTdHJpbmcgcmVkaXJlY3RlZFVS
STsKICAgICBib29sIGtlZXBBbGl2ZTsKICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZXh0
cmFIZWFkZXJzOwogICAgIGJvb2wgY29tcHJlc3M7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gaHR0
cE1ldGhvZDsKLSAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwotICAgIFJlZlB0cjxQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI+IGxvYWRlcjsKLSAgICBSZWZQdHI8UGxhdGZvcm1N
ZWRpYVJlc291cmNlPiByZXNvdXJjZTsKLSAgICBSZWZQdHI8TWFpblRocmVhZE5vdGlmaWVyPE1h
aW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAgICBib29sIGRpZFBhc3NB
Y2Nlc3NDb250cm9sQ2hlY2s7Ci0gICAgYm9vbCB3ZXJlSGVhZGVyc1JlY2VpdmVkOwotICAgIENv
bmRpdGlvbiBoZWFkZXJzQ29uZGl0aW9uOwotICAgIExvY2sgcmVzcG9uc2VMb2NrOwotICAgIGJv
b2wgd2FzUmVzcG9uc2VSZWNlaXZlZDsKLSAgICBDb25kaXRpb24gcmVzcG9uc2VDb25kaXRpb247
Ci0gICAgYm9vbCBkb2VzSGF2ZUVPUzsKLSAgICBib29sIGlzRmx1c2hpbmcgeyBmYWxzZSB9Owot
ICAgIHVpbnQ2NF90IHJlYWRQb3NpdGlvbjsKLSAgICB1aW50NjRfdCByZXF1ZXN0ZWRQb3NpdGlv
bjsKLSAgICB1aW50NjRfdCBzdG9wUG9zaXRpb247Ci0gICAgYm9vbCBpc0R1cmF0aW9uU2V0Owot
ICAgIGJvb2wgaGF2ZVNpemU7Ci0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBib29sIGlzU2Vla2Fi
bGU7Ci0gICAgYm9vbCBpc1NlZWtpbmc7Ci0gICAgYm9vbCB3YXNTZWVraW5nIHsgZmFsc2UgfTsK
LSAgICB1bnNpZ25lZCBtaW5pbXVtQmxvY2tzaXplOwotICAgIExvY2sgYWRhcHRlckxvY2s7Ci0g
ICAgQ29uZGl0aW9uIGFkYXB0ZXJDb25kaXRpb247Ci0gICAgYm9vbCBpc0Rvd25sb2FkU3VzcGVu
ZGVkIHsgZmFsc2UgfTsKLSAgICBHUmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7Ci0gICAgR1Jl
ZlB0cjxHc3RFdmVudD4gaHR0cEhlYWRlcnNFdmVudDsKLSAgICBHVW5pcXVlUHRyPEdzdFN0cnVj
dHVyZT4gaHR0cEhlYWRlcnM7Ci0gICAgV2FsbFRpbWUgZG93bmxvYWRTdGFydFRpbWUgeyBXYWxs
VGltZTo6bmFuKCkgfTsKLSAgICB1aW50NjRfdCB0b3RhbERvd25sb2FkZWRCeXRlcyB7IDAgfTsK
KworICAgIHN0cnVjdCBTdHJlYW1pbmdNZW1iZXJzIHsKKyAgICAgICAgflN0cmVhbWluZ01lbWJl
cnMoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBCeSB0aGUgdGltZSB3ZSdyZSBkZXN0cm95
aW5nIFdlYktpdFdlYlNyY1ByaXZhdGUgdW5Mb2NrKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQg
YW5kIHRoZXJlZm9yZSByZXNvdXJjZQorICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUgYWxyZWFk
eSBiZWVuIGNsZWFyZWQuCisgICAgICAgICAgICBBU1NFUlQoIXJlc291cmNlKTsKKyAgICAgICAg
ICAgIC8vIFJlc291cmNlTG9hZGVyIGlzIG5vdCB0aHJlYWQtc2FmZS4gSXQncyBub3QgZXZlbiBU
aHJlYWRTYWZlUmVmQ291bnRlZC4gVGhlcmVmb3JlLCB0byBiZSBzYWZlLCB3ZSB3YW50IHRoZQor
ICAgICAgICAgICAgLy8gdW5yZWYgdG8gaGFwcGVuIGluIHRoZSBtYWluIHRocmVhZC4KKyAgICAg
ICAgICAgIGlmIChsb2FkZXIpCisgICAgICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtsb2FkZXIgPSBXVEZNb3ZlKGxvYWRlcildIHsgfSk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBQcm9wZXJ0aWVzIGluaXRpYWxseSBlbXB0eSwgYnV0IHNldCBvbmNlIHRoZSBmaXJzdCBI
VFRQIHJlc3BvbnNlIGFycml2ZXM6CisgICAgICAgIGJvb2wgd2FzUmVzcG9uc2VSZWNlaXZlZDsK
KyAgICAgICAgQ1N0cmluZyByZWRpcmVjdGVkVVJJOworICAgICAgICBib29sIGRpZFBhc3NBY2Nl
c3NDb250cm9sQ2hlY2s7CisgICAgICAgIGJvb2wgaGF2ZVNpemU7CisgICAgICAgIHVpbnQ2NF90
IHNpemU7CisgICAgICAgIGJvb2wgaXNTZWVrYWJsZTsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBz
PiBwZW5kaW5nQ2FwczsKKyAgICAgICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBwZW5kaW5nSHR0cEhl
YWRlcnNNZXNzYWdlOyAvLyBTZXQgZnJvbSBNVCwgc2VudCBmcm9tIGNyZWF0ZSgpLgorICAgICAg
ICBHUmVmUHRyPEdzdEV2ZW50PiBwZW5kaW5nSHR0cEhlYWRlcnNFdmVudDsgLy8gU2V0IGZyb20g
TVQsIHNlbnQgZnJvbSBjcmVhdGUoKS4KKworICAgICAgICAvLyBQcm9wZXJ0aWVzIHVwZGF0ZWQg
d2l0aCBldmVyeSBkb3dubG9hZGVkIGRhdGEgYmxvY2s6CisgICAgICAgIFdhbGxUaW1lIGRvd25s
b2FkU3RhcnRUaW1lIHsgV2FsbFRpbWU6Om5hbigpIH07CisgICAgICAgIHVpbnQ2NF90IHRvdGFs
RG93bmxvYWRlZEJ5dGVzIHsgMCB9OworICAgICAgICBib29sIGRvZXNIYXZlRU9TOyAvLyBTZXQg
Ym90aCB3aGVuIHdlIHJlYWNoIHN0b3BQb3NpdGlvbiBhbmQgb24gZXJyb3JzIChpbmNsdWRpbmcg
b24gcmVzcG9uc2VSZWNlaXZlZCkuCisgICAgICAgIGJvb2wgaXNEb3dubG9hZFN1c3BlbmRlZCB7
IGZhbHNlIH07IC8vIFNldCB0byB0cnVlIGZyb20gdGhlIG5ldHdvcmsgaGFuZGxlciB3aGVuIHRo
ZSBoaWdoIHdhdGVyIGxldmVsIGlzIHJlYWNoZWQuCisKKyAgICAgICAgLy8gT2J0YWluZWQgYnkg
bWVhbnMgb2YgR3N0Q29udGV4dCBxdWVyaWVzIGJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IEhUVFAg
cmVxdWVzdC4KKyAgICAgICAgLy8gV2UgdXNlIGl0IGZvciBnZXR0aW5nIGFjY2VzcyB0byBXZWJL
aXQgbmV0d29ya2luZyBvYmplY3RzOiB0aGUgUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyIGZh
Y3RvcnkgW2NyZWF0ZVJlc291cmNlTG9hZGVyKCldCisgICAgICAgIC8vIGFuZCB0aGUgcGxheWVy
IEhUVFAgcmVmZXJyZXIgc3RyaW5nLgorICAgICAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxh
eWVyOworCisgICAgICAgIC8vIFByb3BlcnRpZXMgdXNlZCBmb3IgR1N0cmVhbWVyIGRhdGEtZmxv
dyBpbiBjcmVhdGUoKS4KKyAgICAgICAgYm9vbCBpc0ZsdXNoaW5nIHsgZmFsc2UgfTsKKyAgICAg
ICAgQ29uZGl0aW9uIHJlc3BvbnNlQ29uZGl0aW9uOyAvLyBNdXN0IGJlIHNpZ25hbGVkIGFmdGVy
IGFueSB1cGRhdGVzIG9uIEhUVFAgcmVxdWVzdHMsIGFuZCB3aGVuIGZsdXNoaW5nLgorICAgICAg
ICBHUmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7CisgICAgICAgIGJvb2wgaXNEdXJhdGlvblNl
dDsKKyAgICAgICAgdWludDY0X3QgcmVhZFBvc2l0aW9uOworCisgICAgICAgIC8vIFByb3BlcnRp
ZXMgb25seSBzZXQgZHVyaW5nIHNlZWsuCisgICAgICAgIC8vIGJhc2VzcmMgZW5zdXJlcyB0aGV5
IGNhbid0IGNoYW5nZSBkdXJpbmcgYSBjcmVhdGUoKSBjYWxsIGJ5IHRha2luZyB0aGUgU1RSRUFN
SU5HX0xPQ0suCisgICAgICAgIC8vIChBbiBpbml0aWFsIHNlZWsgaXMgYWxzbyBndWFyYW50ZWVk
IGJ5IGJhc2VzcmMuKQorICAgICAgICB1bnNpZ25lZCByZXF1ZXN0TnVtYmVyIHsgMSB9OworICAg
ICAgICB1aW50NjRfdCByZXF1ZXN0ZWRQb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgdWludDY0X3Qg
c3RvcFBvc2l0aW9uIHsgVUlOVDY0X01BWCB9OworCisgICAgICAgIGJvb2wgaXNSZXF1ZXN0UGVu
ZGluZyB7IHRydWUgfTsKKworICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlTG9h
ZGVyPiBsb2FkZXI7CisgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IHJlc291
cmNlOworICAgIH07CisgICAgRGF0YU11dGV4PFN0cmVhbWluZ01lbWJlcnM+IGRhdGFNdXRleDsK
IH07CiAKIGVudW0gewpAQCAtMTY5LDkgKzE3Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y1VyaUhhbmRsZXJJbml0KGdwb2ludGVyIGdJZmFjZSwgZ3BvaW50ZXIgaWZhY2VEYXRhKTsKIHN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY1NldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlELCBjb25z
dCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9w
ZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJRCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOwot
c3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVs
ZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSk7CiBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJLaXRXZWJT
cmNDcmVhdGUoR3N0UHVzaFNyYyosIEdzdEJ1ZmZlcioqKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRXZWJTcmNNYWtlUmVxdWVzdChHc3RCYXNlU3JjKiwgYm9vbCk7CitzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNNYWtlUmVxdWVzdChXZWJLaXRXZWJTcmMqLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3Jj
UHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImKTsKIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTdGFydChHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjU3RvcChHc3RCYXNlU3JjKik7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
R2V0U2l6ZShHc3RCYXNlU3JjKiwgZ3VpbnQ2NCogc2l6ZSk7CkBAIC0xODEsOCArMTg4LDggQEAg
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5KEdzdEJhc2VTcmMqLCBHc3RRdWVyeSop
Owogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKik7CiBzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjVW5Mb2NrU3RvcChHc3RCYXNlU3JjKik7CiBzdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNTZXRDb250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7Ci1z
dGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKik7Ci1zdGF0aWMg
dm9pZCBzdG9wTG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKik7CitzdGF0aWMgdm9pZCByZXN0
YXJ0TG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1By
aXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJik7CitzdGF0aWMgdm9pZCBz
dG9wTG9hZGVySWZOZWVkZWQoV2ViS2l0V2ViU3JjKiwgRGF0YU11dGV4PFdlYktpdFdlYlNyY1By
aXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJik7CiAKICNkZWZpbmUgd2Vi
a2l0X3dlYl9zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwogV0VCS0lUX0RFRklORV9UWVBF
X1dJVEhfQ09ERShXZWJLaXRXZWJTcmMsIHdlYmtpdF93ZWJfc3JjLCBHU1RfVFlQRV9QVVNIX1NS
QywKQEAgLTIzMCw3ICsyMzcsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19jbGFzc19p
bml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygibWV0aG9kIiwgIm1ldGhvZCIsICJUaGUgSFRUUCBtZXRob2QgdG8gdXNlIChkZWZhdWx0OiBH
RVQpIiwKICAgICAgICAgICAgIG51bGxwdHIsIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BB
UkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7CiAKLSAgICBla2xhc3Mt
PmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRl
KTsKICAgICBla2xhc3MtPnNldF9jb250ZXh0ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2Vi
U3JjU2V0Q29udGV4dCk7CiAKICAgICBHc3RCYXNlU3JjQ2xhc3MqIGJhc2VTcmNDbGFzcyA9IEdT
VF9CQVNFX1NSQ19DTEFTUyhrbGFzcyk7CkBAIC0yNDcsMTggKzI1Myw0MCBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAg
ICBwdXNoU3JjQ2xhc3MtPmNyZWF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0Ny
ZWF0ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdFdlYlNyY1Jlc2V0KFdlYktpdFdlYlNyYyog
c3JjKQotewotICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CitlbnVt
IGNsYXNzIFJlc2V0VHlwZSB7CisgICAgU29mdCwKKyAgICBIYXJkCit9OwogCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJTcmNSZXNldChXZWJLaXRXZWJTcmMqIHNyYywgRGF0YU11dGV4PFdlYktpdFdl
YlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyJiBtZW1iZXJzLCBS
ZXNldFR5cGUgcmVzZXRUeXBlKQorewogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzZXR0
aW5nIGludGVybmFsIHN0YXRlIik7Ci0gICAgcHJpdi0+aGF2ZVNpemUgPSBmYWxzZTsKLSAgICBw
cml2LT53ZXJlSGVhZGVyc1JlY2VpdmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNTZWVrYWJsZSA9
IGZhbHNlOwotICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IDA7Ci0gICAgcHJpdi0+cmVxdWVzdGVk
UG9zaXRpb24gPSAwOwotICAgIHByaXYtPnN0b3BQb3NpdGlvbiA9IC0xOwotICAgIHByaXYtPnNp
emUgPSAwOworICAgIGdzdF9hZGFwdGVyX2NsZWFyKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCkpOwor
ICAgIG1lbWJlcnMtPmlzUmVxdWVzdFBlbmRpbmcgPSB0cnVlOworCisgICAgLy8gUmVzZXQgcmVx
dWVzdCBzdGF0ZS4gQW55IHByZXZpb3VzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsbGVkIGF0IHRo
aXMgcG9pbnQuCisgICAgbWVtYmVycy0+d2FzUmVzcG9uc2VSZWNlaXZlZCA9IGZhbHNlOworICAg
IG1lbWJlcnMtPmRvZXNIYXZlRU9TID0gZmFsc2U7CisgICAgbWVtYmVycy0+ZG93bmxvYWRTdGFy
dFRpbWUgPSBXYWxsVGltZTo6bmFuKCk7CisgICAgbWVtYmVycy0+dG90YWxEb3dubG9hZGVkQnl0
ZXMgPSAwOyAvLyBSZXNldHRlZCBmb3IgZWFjaCByZXF1ZXN0LCB1c2VkIHRvIGVzdGltYXRlIGRv
d25sb2FkIHNwZWVkLgorICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UgPSBu
dWxscHRyOworICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc0V2ZW50ID0gbnVsbHB0cjsK
KworICAgIC8vIEFmdGVyIGEgZmx1c2gsIHdlIGhhdmUgdG8gZW1pdCBhIHNlZ21lbnQgYWdhaW4u
CisgICAgbWVtYmVycy0+aXNEdXJhdGlvblNldCA9IGZhbHNlOworCisgICAgLy8gSGFyZCByZXNl
dCBpcyBkb25lIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuCisg
ICAgLy8gU29mdCByZXNldCBpcyBkb25lIGR1cmluZyBmbHVzaGVzLiBJbiB0aGVzZSwgd2UgcHJl
c2VydmUgdGhlIHNlZWsgdGFyZ2V0LgorICAgIGlmIChyZXNldFR5cGUgPT0gUmVzZXRUeXBlOjpI
YXJkKSB7CisgICAgICAgIG1lbWJlcnMtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgbWVtYmVycy0+cmVkaXJlY3RlZFVSSSA9IENTdHJpbmcoKTsKKyAgICAgICAg
bWVtYmVycy0+aXNTZWVrYWJsZSA9IGZhbHNlOworICAgICAgICBtZW1iZXJzLT5oYXZlU2l6ZSA9
IGZhbHNlOworICAgICAgICBtZW1iZXJzLT5zaXplID0gMDsKKyAgICAgICAgbWVtYmVycy0+cmVx
dWVzdGVkUG9zaXRpb24gPSAwOworICAgICAgICBtZW1iZXJzLT5zdG9wUG9zaXRpb24gPSBVSU5U
NjRfTUFYOworICAgICAgICBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPSBtZW1iZXJzLT5yZXF1ZXN0
ZWRQb3NpdGlvbjsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0NvbnN0cnVj
dGVkKEdPYmplY3QqIG9iamVjdCkKQEAgLTI2OCwxMyArMjk2LDEzIEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYlNyY0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJTcmMq
IHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIHByaXYtPm5vdGlmaWVyID0gTWFpblRocmVhZE5vdGlm
aWVyPE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb24+OjpjcmVhdGUoKTsKLSAgICBwcml2LT5h
ZGFwdGVyID0gYWRvcHRHUmVmKGdzdF9hZGFwdGVyX25ldygpKTsKICAgICBwcml2LT5taW5pbXVt
QmxvY2tzaXplID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1Qo
c3JjKSk7CiAKLSAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMpOworICAgIERhdGFNdXRleDxXZWJL
aXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJz
KHByaXYtPmRhdGFNdXRleCk7CisgICAgbWVtYmVycy0+YWRhcHRlciA9IGFkb3B0R1JlZihnc3Rf
YWRhcHRlcl9uZXcoKSk7CisgICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNl
dFR5cGU6OkhhcmQpOworCiAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9hdXRvbWF0aWNfZW9zKEdTVF9C
QVNFX1NSQ19DQVNUKHNyYyksIEZBTFNFKTsKLSAgICBnc3RfYmFzZV9zcmNfc2V0X2FzeW5jKEdT
VF9CQVNFX1NSQ19DQVNUKHNyYyksIFRSVUUpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCkBAIC0zMTQsOSArMzQyLDExIEBAIHN0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElE
LCBHVmFsdWUqIHZhbHVlCiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogICAgICAgICBnX3ZhbHVl
X3NldF9zdHJpbmcodmFsdWUsIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9SRVNPTFZFRF9MT0NBVElPTjoKLSAgICAgICAgZ192YWx1ZV9z
ZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5yZWRpcmVjdGVkVVJJLmlzTnVsbCgpID8gcHJpdi0+b3Jp
Z2luYWxVUkkuZGF0YSgpIDogcHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCkpOworICAgIGNhc2Ug
UFJPUF9SRVNPTFZFRF9MT0NBVElPTjogeworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3Jj
UHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5k
YXRhTXV0ZXgpOworICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIG1lbWJlcnMtPnJl
ZGlyZWN0ZWRVUkkuaXNOdWxsKCkgPyBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkgOiBtZW1iZXJz
LT5yZWRpcmVjdGVkVVJJLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNl
IFBST1BfS0VFUF9BTElWRToKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJp
di0+a2VlcEFsaXZlKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNDMsMjAyICszNzMsMTk4IEBAIHN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY1NldENvbnRleHQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0
Q29udGV4dCogY29udGV4dCkKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImNvbnRleHQgdHlw
ZTogJXMiLCBnc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlKGNvbnRleHQpKTsKICAgICBpZiAo
Z3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCBXRUJLSVRfV0VCX1NSQ19QTEFZ
RVJfQ09OVEVYVF9UWVBFX05BTUUpKSB7CiAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBn
c3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQp
LCAicGxheWVyIik7Ci0gICAgICAgIHByaXYtPnBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVk
aWFQbGF5ZXIqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIERhdGFNdXRl
eDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBt
ZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7CisgICAgICAgIG1lbWJlcnMtPnBsYXllciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXIqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CiAg
ICAgfQogICAgIEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcyktPnNldF9jb250ZXh0KGVs
ZW1lbnQsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQo
V2ViS2l0V2ViU3JjKiBzcmMpCitzdGF0aWMgdm9pZCByZXN0YXJ0TG9hZGVySWZOZWVkZWQoV2Vi
S2l0V2ViU3JjKiBzcmMsIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdN
ZW1iZXJzPjo6TG9ja2VkV3JhcHBlciYgbWVtYmVycykKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2
YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKCFwcml2LT5pc0Rvd25sb2FkU3VzcGVu
ZGVkKSB7CisgICAgaWYgKCFtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkKSB7CiAgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZG93bmxvYWQgYWxyZWFkeSBhY3RpdmUiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiaXMgZG93bmxv
YWQgc3VzcGVuZGVkICVzLCBkb2VzIGhhdmUgRU9TICVzLCBkb2VzIGhhdmUgc2l6ZSAlcywgaXMg
c2Vla2FibGUgJXMsIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIChtaW4gJXUp
IiwgYm9vbEZvclByaW50aW5nKHByaXYtPmlzRG93bmxvYWRTdXNwZW5kZWQpLCBib29sRm9yUHJp
bnRpbmcocHJpdi0+ZG9lc0hhdmVFT1MpLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aGF2ZVNpemUp
Ci0gICAgICAgICwgYm9vbEZvclByaW50aW5nKHByaXYtPmlzU2Vla2FibGUpLCBwcml2LT5zaXpl
LCBTTUFMTF9NRURJQV9SRVNPVVJDRV9NQVhfU0laRSk7Ci0gICAgaWYgKHByaXYtPmRvZXNIYXZl
RU9TIHx8ICFwcml2LT5oYXZlU2l6ZSB8fCAhcHJpdi0+aXNTZWVrYWJsZSB8fCBwcml2LT5zaXpl
IDw9IFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFKSB7CisgICAgICAgICIgKG1pbiAldSki
LCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQ
cmludGluZyhtZW1iZXJzLT5kb2VzSGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5o
YXZlU2l6ZSkKKyAgICAgICAgLCBib29sRm9yUHJpbnRpbmcobWVtYmVycy0+aXNTZWVrYWJsZSks
IG1lbWJlcnMtPnNpemUsIFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFKTsKKyAgICBpZiAo
bWVtYmVycy0+ZG9lc0hhdmVFT1MgfHwgIW1lbWJlcnMtPmhhdmVTaXplIHx8ICFtZW1iZXJzLT5p
c1NlZWthYmxlIHx8IG1lbWJlcnMtPnNpemUgPD0gU01BTExfTUVESUFfUkVTT1VSQ0VfTUFYX1NJ
WkUpIHsKICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJkb3dubG9hZCBjYW5ub3QgYmUg
c3RvcHBlZC9yZXN0YXJ0ZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNyYywgInJlYWQgcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBzdGF0
ZSAlcyIsIHByaXYtPnJlYWRQb3NpdGlvbiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NU
X1NUQVRFKHNyYykpKTsKLSAgICBpZiAoIXByaXYtPnJlYWRQb3NpdGlvbiB8fCBwcml2LT5yZWFk
UG9zaXRpb24gPT0gcHJpdi0+c2l6ZSB8fCBHU1RfU1RBVEUoc3JjKSA8IEdTVF9TVEFURV9QQVVT
RUQpIHsKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInJlYWQgcG9zaXRpb24gJSIgR19HVUlO
VDY0X0ZPUk1BVCAiLCBzdGF0ZSAlcyIsIG1lbWJlcnMtPnJlYWRQb3NpdGlvbiwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUoR1NUX1NUQVRFKHNyYykpKTsKKyAgICBpZiAoIW1lbWJlcnMtPnJl
YWRQb3NpdGlvbiB8fCBtZW1iZXJzLT5yZWFkUG9zaXRpb24gPT0gbWVtYmVycy0+c2l6ZSB8fCBH
U1RfU1RBVEUoc3JjKSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKICAgICAgICAgR1NUX1RSQUNFX09C
SkVDVChzcmMsICJjYW4ndCByZXN0YXJ0IGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYt
PmFkYXB0ZXIuZ2V0KCkpOwotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSAl
emQgKG1pbiAlMS4wZikiLCBxdWV1ZVNpemUKLSAgICAgICAgLCBwcml2LT5zaXplICogSElHSF9R
VUVVRV9GQUNUT1JfVEhSRVNIT0xEICogTE9XX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpOworICAg
IHNpemVfdCBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRl
ci5nZXQoKSk7CisgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJxdWV1ZSBzaXplICV6dSAobWlu
ICUxLjBmKSIsIHF1ZXVlU2l6ZQorICAgICAgICAsIG1lbWJlcnMtPnNpemUgKiBISUdIX1FVRVVF
X0ZBQ1RPUl9USFJFU0hPTEQgKiBMT1dfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CiAKLSAgICBp
ZiAocXVldWVTaXplID49IHByaXYtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQg
KiBMT1dfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCkgeworICAgIGlmIChxdWV1ZVNpemUgPj0gbWVt
YmVycy0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCAqIExPV19RVUVVRV9GQUNU
T1JfVEhSRVNIT0xEKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6
ZSBhYm92ZSBsb3cgd2F0ZXJtYXJrLCBub3QgcmVzdGFydGluZyBkb3dubG9hZCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJyZXN0YXJ0aW5n
IGRvd25sb2FkIik7Ci0gICAgcHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCA9IGZhbHNlOwotICAg
IHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KEdTVF9CQVNFX1NSQ19DQVNUKHNyYyksIGZhbHNlKTsK
KyAgICBtZW1iZXJzLT5pc0Rvd25sb2FkU3VzcGVuZGVkID0gZmFsc2U7CisgICAgbWVtYmVycy0+
cmVxdWVzdE51bWJlcisrOworICAgIG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uID0gbWVtYmVy
cy0+cmVhZFBvc2l0aW9uOworICAgIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KHNyYywgbWVtYmVy
cyk7CiB9CiAKIAotc3RhdGljIHZvaWQgc3RvcExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyog
c3JjKQorc3RhdGljIHZvaWQgc3RvcExvYWRlcklmTmVlZGVkKFdlYktpdFdlYlNyYyogc3JjLCBE
YXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdy
YXBwZXImIG1lbWJlcnMpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKHByaXYtPmlzRG93
bmxvYWRTdXNwZW5kZWQpIHsKKyAgICBpZiAobWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCkg
ewogICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImRvd25sb2FkIGFscmVhZHkgc3VzcGVu
ZGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNy
YywgImlzIGRvd25sb2FkIHN1c3BlbmRlZCAlcywgZG9lcyBoYXZlIHNpemUgJXMsIGlzIHNlZWth
YmxlICVzLCBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAobWluICV1KSIKLSAgICAgICAgLCBi
b29sRm9yUHJpbnRpbmcocHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCksIGJvb2xGb3JQcmludGlu
Zyhwcml2LT5oYXZlU2l6ZSksIGJvb2xGb3JQcmludGluZyhwcml2LT5pc1NlZWthYmxlKSwgcHJp
di0+c2l6ZQorICAgICAgICAsIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rvd25sb2FkU3Vz
cGVuZGVkKSwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmhhdmVTaXplKSwgYm9vbEZvclByaW50
aW5nKG1lbWJlcnMtPmlzU2Vla2FibGUpLCBtZW1iZXJzLT5zaXplCiAgICAgICAgICwgU01BTExf
TUVESUFfUkVTT1VSQ0VfTUFYX1NJWkUpOwotICAgIGlmICghcHJpdi0+aGF2ZVNpemUgfHwgIXBy
aXYtPmlzU2Vla2FibGUgfHwgcHJpdi0+c2l6ZSA8PSBTTUFMTF9NRURJQV9SRVNPVVJDRV9NQVhf
U0laRSkgeworICAgIGlmICghbWVtYmVycy0+aXNTZWVrYWJsZSB8fCBtZW1iZXJzLT5zaXplIDw9
IFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpF
Q1Qoc3JjLCAiZG93bmxvYWQgY2Fubm90IGJlIHN0b3BwZWQvcmVzdGFydGVkIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBzaXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZh
aWxhYmxlKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOwotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAi
cXVldWUgc2l6ZSAlemQgKG1heCAlMS4wZikiLCBxdWV1ZVNpemUsIHByaXYtPnNpemUgKiBISUdI
X1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQpOwotICAgIGlmIChxdWV1ZVNpemUgPD0gcHJpdi0+c2l6
ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCkgeworICAgIHNpemVfdCBxdWV1ZVNpemUg
PSBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQoKSk7CisgICAgR1NU
X1RSQUNFX09CSkVDVChzcmMsICJxdWV1ZSBzaXplICV6dSAobWF4ICUxLjBmKSIsIHF1ZXVlU2l6
ZSwgbWVtYmVycy0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCk7CisgICAgaWYg
KHF1ZXVlU2l6ZSA8PSBtZW1iZXJzLT5zaXplICogSElHSF9RVUVVRV9GQUNUT1JfVEhSRVNIT0xE
KSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicXVldWUgc2l6ZSB1bmRlciBoaWdo
IHdhdGVybWFyaywgbm90IHN0b3BwaW5nIGRvd25sb2FkIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgInN0b3BwaW5nIGRvd25sb2FkIik7Ci0g
ICAgcHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCA9IHRydWU7Ci0gICAgcHJpdi0+cmVzb3VyY2Ut
PnN0b3AoKTsKKyAgICBpZiAobWVtYmVycy0+cmVhZFBvc2l0aW9uID09IG1lbWJlcnMtPnNpemUp
IHsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJqdXN0IGRvd25sb2FkZWQgdGhlIGxh
c3QgY2h1bmsgaW4gdGhlIGZpbGUsIGxvYWRGaW5pc2hlZCgpIGlzIGFib3V0IHRvIGJlIGNhbGxl
ZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJSJXU6IHN0b3BwaW5nIGRvd25sb2FkIiwgbWVtYmVycy0+cmVxdWVzdE51bWJlcik7CisgICAg
bWVtYmVycy0+aXNEb3dubG9hZFN1c3BlbmRlZCA9IHRydWU7CisgICAgbWVtYmVycy0+cmVzb3Vy
Y2UtPnN0b3AoKTsKIH0KIAogc3RhdGljIEdzdEZsb3dSZXR1cm4gd2ViS2l0V2ViU3JjQ3JlYXRl
KEdzdFB1c2hTcmMqIHB1c2hTcmMsIEdzdEJ1ZmZlcioqIGJ1ZmZlcikKIHsKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKICAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JD
X0NBU1QocHVzaFNyYyk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhi
YXNlU3JjKTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAg
IERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2Vk
V3JhcHBlciBtZW1iZXJzKHByaXYtPmRhdGFNdXRleCk7CisKKyAgICAvLyBXZSBuZWVkIG1lbWJl
cnMtPnBsYXllciB0byBtYWtlIHJlcXVlc3RzLiBUaGVyZSBhcmUgdHdvIG1lY2hhbmlzbXMgZm9y
IHRoaXMuCisgICAgLy8KKyAgICAvLyAxKSB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcigpIGlz
IGNhbGxlZCBieSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgYnkgbWVhbnMgb2YgaG9va2lu
ZyBwbGF5YmluJ3MKKyAgICAvLyAgICAic291cmNlLXNldHVwIiBldmVudC4gVGhpcyBkb2Vzbid0
IHdvcmsgZm9yIGFkZGl0aW9uYWwgV2ViS2l0V2ViU3JjIGVsZW1lbnRzIGNyZWF0ZWQgYnkgYWRh
cHRpdmVkZW11eC4KKyAgICAvLworICAgIC8vIDIpIEEgR3N0Q29udGV4dCBxdWVyeSBtYWRlIGhl
cmUuIEJlY2F1c2Ugb2YgYSBidWcsIHRoaXMgb25seSB3b3JrcyBpbiBHU3RyZWFtZXIgPj0gMS4x
Mi4KKyAgICAvLworICAgIC8vIEFzIGEgY29tcGF0aWJpbGl0eSB3b3JrYXJvdW5kLCB0aGUgaHR0
cDogVVJJIHByb3RvY29sIGlzIG9ubHkgcmVnaXN0ZXJlZCBmb3IgZ3N0Pj0xLjEyOyBvdGhlcndp
c2UgdXNpbmcKKyAgICAvLyB3ZWJraXQraHR0cDosIHdoaWNoIGlzIHVzZWQgYnkgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyIGJ1dCBub3QgYnkgYWRhcHRpdmVkZW11eCdzIGFkZGl0aW9uYWwg
c291cmNlCisgICAgLy8gZWxlbWVudHMsIHRoZXJlZm9yZSB1c2luZyBzb3VwaHR0cHNyYyBpbnN0
ZWFkIGFuZCBub3Qgcm91dGluZyB0cmFmZmljIHRocm91Z2ggdGhlIE5ldHdvcmtQcm9jZXNzLgor
ICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDApICYmICFtZW1iZXJzLT5wbGF5
ZXIpIHsKKyAgICAgICAgbWVtYmVycy5ydW5VbmxvY2tlZChbc3JjLCBiYXNlU3JjXSgpIHsKKyAg
ICAgICAgICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9u
ZXdfY29udGV4dChXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUpKTsKKyAg
ICAgICAgICAgIGlmIChnc3RfcGFkX3BlZXJfcXVlcnkoR1NUX0JBU0VfU1JDX1BBRChiYXNlU3Jj
KSwgcXVlcnkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgR3N0Q29udGV4dCogY29udGV4dDsK
KworICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb250ZXh0KHF1ZXJ5LmdldCgpLCAm
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VM
RU1FTlRfQ0FTVChzcmMpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdz
dF9tZXNzYWdlX25ld19uZWVkX2NvbnRleHQoR1NUX09CSkVDVF9DQVNUKHNyYyksIFdFQktJVF9X
RUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVfTkFNRSkpOworICAgICAgICB9KTsKKyAgICAgICAg
aWYgKG1lbWJlcnMtPmlzRmx1c2hpbmcpCisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxV
U0hJTkc7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKG1lbWJlcnMtPnBsYXllcik7CiAKLSAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgInJlYWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JN
QVQgIiByZXF1ZXN0ZWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnJlYWRQ
b3NpdGlvbiwgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24pOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
c3JjLCAicmVhZFBvc2l0aW9uID0gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHJlcXVlc3RlZFBvc2l0
aW9uID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwgbWVtYmVycy0+cmVhZFBvc2l0aW9uLCBtZW1iZXJz
LT5yZXF1ZXN0ZWRQb3NpdGlvbik7CiAKLSAgICBpZiAocHJpdi0+cmVxdWVzdGVkUG9zaXRpb24g
IT0gcHJpdi0+cmVhZFBvc2l0aW9uKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xk
ZXIgYWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7Ci0gICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlNlZWtpbmcsIGZsdXNoaW5nIGFkYXB0ZXIiKTsKLSAgICAgICAgICAg
IGdzdF9hZGFwdGVyX2NsZWFyKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHVpbnQ2NF90IHJlcXVlc3RlZFBvc2l0aW9uID0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247
Ci0gICAgICAgIHdlYktpdFdlYlNyY1N0b3AoYmFzZVNyYyk7Ci0gICAgICAgIHByaXYtPnJlcXVl
c3RlZFBvc2l0aW9uID0gcmVxdWVzdGVkUG9zaXRpb247Ci0gICAgICAgIC8vIERvIG5vdCBub3Rp
ZnkgYXN5bmMtY29tcGxldGlvbiwgaW4gc2Vla2luZyBmbG93cywgd2Ugd2lsbAotICAgICAgICAv
LyBiZSBjYWxsZWQgZnJvbSBHc3RCYXNlU3JjJ3MgcGVyZm9ybV9zZWVrIHZmdW5jLCB3aGljaCBo
b2xkcwotICAgICAgICAvLyBhIHN0cmVhbWluZyBsb2NrIGluIG91ciBmcmFtZS4gSGVuY2UsIHdl
IHdvdWxkIGRlYWRsb2NrCi0gICAgICAgIC8vIHRyeWluZyB0byBub3RpZnkgYXN5bmMgY29tcGxl
dGlvbiwgc2luY2UgdGhhdCBhbHNvIHJlcXVpcmVzCi0gICAgICAgIC8vIHRoZSBzdHJlYW1pbmcg
bG9jay4KLSAgICAgICAgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoYmFzZVNyYywgZmFsc2UpOwor
ICAgIGlmIChtZW1iZXJzLT5pc1JlcXVlc3RQZW5kaW5nKSB7CisgICAgICAgIG1lbWJlcnMtPmlz
UmVxdWVzdFBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3Qo
c3JjLCBtZW1iZXJzKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KHByaXYtPnJlc3BvbnNlTG9jayk7Ci0gICAgICAgIHByaXYtPnJlc3BvbnNlQ29uZGl0aW9uLndh
aXQocHJpdi0+cmVzcG9uc2VMb2NrLCBbcHJpdl0gKCkgewotICAgICAgICAgICAgcmV0dXJuIHBy
aXYtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgfHwgcHJpdi0+aXNGbHVzaGluZzsKKyAgICAvLyBXYWl0
IGZvciB0aGUgcmVzcG9uc2UgaGVhZGVycy4KKyAgICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlv
bi53YWl0KG1lbWJlcnMubXV0ZXgoKSwgWyZdICgpIHsKKyAgICAgICAgcmV0dXJuIG1lbWJlcnMt
Pndhc1Jlc3BvbnNlUmVjZWl2ZWQgfHwgbWVtYmVycy0+aXNGbHVzaGluZzsKKyAgICB9KTsKKwor
ICAgIGlmIChtZW1iZXJzLT5pc0ZsdXNoaW5nKQorICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxV
U0hJTkc7CisKKyAgICBpZiAobWVtYmVycy0+cGVuZGluZ0NhcHMpIHsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzcmMsICJTZXR0aW5nIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBtZW1iZXJz
LT5wZW5kaW5nQ2Fwcy5nZXQoKSk7CisgICAgICAgIG1lbWJlcnMucnVuVW5sb2NrZWQoW2Jhc2VT
cmMsIGNhcHMgPSBtZW1iZXJzLT5wZW5kaW5nQ2Fwcy5sZWFrUmVmKCldKCkgeworICAgICAgICAg
ICAgZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzKGJhc2VTcmMsIGNhcHMpOwogICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKG1lbWJlcnMtPmlzRmx1c2hpbmcpCisgICAgICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfRkxVU0hJTkc7CiAgICAgfQogCisgICAgaWYgKG1lbWJlcnMtPmhhdmVTaXplICYmICFtZW1i
ZXJzLT5pc0R1cmF0aW9uU2V0KSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0
dGluZyBkdXJhdGlvbiB0byAlIiBHX0dVSU5UNjRfRk9STUFULCBtZW1iZXJzLT5zaXplKTsKKyAg
ICAgICAgYmFzZVNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IG1lbWJlcnMtPnNpemU7CisgICAgICAg
IG1lbWJlcnMtPmlzRHVyYXRpb25TZXQgPSB0cnVlOworICAgICAgICBnc3RfZWxlbWVudF9wb3N0
X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25f
Y2hhbmdlZChHU1RfT0JKRUNUX0NBU1Qoc3JjKSkpOworICAgIH0KKworICAgIGlmIChtZW1iZXJz
LT5wZW5kaW5nSHR0cEhlYWRlcnNNZXNzYWdlKQorICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21l
c3NhZ2UoR1NUX0VMRU1FTlQoc3JjKSwgbWVtYmVycy0+cGVuZGluZ0h0dHBIZWFkZXJzTWVzc2Fn
ZS5sZWFrUmVmKCkpOworICAgIGlmIChtZW1iZXJzLT5wZW5kaW5nSHR0cEhlYWRlcnNFdmVudCkK
KyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIG1l
bWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc0V2ZW50LmxlYWtSZWYoKSk7CisKKyAgICByZXN0YXJ0
TG9hZGVySWZOZWVkZWQoc3JjLCBtZW1iZXJzKTsKKwogICAgIC8vIFdlIGRvbid0IHVzZSB0aGUg
R3N0QWRhcHRlciBtZXRob2RzIG1hcmtlZCBhcyBmYXN0IGFueW1vcmUgYmVjYXVzZSBzb21ldGlt
ZXMgaXQgd2FzIHNsb3dlci4gVGhlIHJlYXNvbiB3aHkgdGhpcyB3YXMgc2xvd2VyIGlzIHRoYXQg
d2UgY2FuIGJlCiAgICAgLy8gd2FpdGluZyBmb3IgbW9yZSAiZmFzdCIgKHRoYXQgY291bGQgYmUg
cmV0cmlldmVkIHdpdGggdGhlIF9mYXN0IEFQSSkgYnVmZmVycyB0byBiZSBhdmFpbGFibGUgZXZl
biBpbiBjYXNlcyB3aGVyZSB0aGUgcXVldWUgaXMgbm90IGVtcHR5LiBUaGVzZQogICAgIC8vIG90
aGVyIGJ1ZmZlcnMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSAibm9uIF9mYXN0IiBBUEkuCi0g
ICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJmbHVzaGluZzogJXMsIGRvZXNIYXZlRU9TOiAlcywg
aXNEb3dubG9hZFN1c3BlbmRlZDogJXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+aXNGbHVzaGlu
ZykKLSAgICAgICAgLCBib29sRm9yUHJpbnRpbmcocHJpdi0+ZG9lc0hhdmVFT1MpLCBib29sRm9y
UHJpbnRpbmcocHJpdi0+aXNEb3dubG9hZFN1c3BlbmRlZCkpOwotCi0gICAgaWYgKHByaXYtPmRv
ZXNIYXZlRU9TKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRU9TIik7Ci0gICAg
ICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gICAgfQorICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3Jj
LCAiZG9lc0hhdmVFT1M6ICVzLCBpc0Rvd25sb2FkU3VzcGVuZGVkOiAlcyIsIGJvb2xGb3JQcmlu
dGluZyhtZW1iZXJzLT5kb2VzSGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhtZW1iZXJzLT5pc0Rv
d25sb2FkU3VzcGVuZGVkKSk7CiAKICAgICB1bnNpZ25lZCBzaXplID0gZ3N0X2Jhc2Vfc3JjX2dl
dF9ibG9ja3NpemUoYmFzZVNyYyk7Ci0gICAgc2l6ZV90IHF1ZXVlU2l6ZTsKLSAgICB7Ci0gICAg
ICAgIExvY2tIb2xkZXIgYWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7Ci0gICAgICAg
IHVuc2lnbmVkIHJldHJpZXMgPSAwOwotICAgICAgICBxdWV1ZVNpemUgPSBnc3RfYWRhcHRlcl9h
dmFpbGFibGUocHJpdi0+YWRhcHRlci5nZXQoKSk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
c3JjLCAiYXZhaWxhYmxlIGJ5dGVzICUiIEdfR1NJWkVfRk9STUFUICIsIGJsb2NrIHNpemUgJXUi
LCBxdWV1ZVNpemUsIHNpemUpOwotICAgICAgICB3aGlsZSAoIXF1ZXVlU2l6ZSAmJiAhcHJpdi0+
aXNGbHVzaGluZykgewotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJsZXQncyB0
cnkgdG8gcmVzdGFydCB0aGUgZG93bmxvYWQgaWYgcG9zc2libGUgYW5kIHdhaXQgYSBiaXQgaWYg
bm8gZGF0YSIpOwotICAgICAgICAgICAgcHJpdi0+YWRhcHRlckNvbmRpdGlvbi53YWl0Rm9yKHBy
aXYtPmFkYXB0ZXJMb2NrLCAxX3MsIFsmXSB7Ci0gICAgICAgICAgICAgICAgcmVzdGFydExvYWRl
cklmTmVlZGVkKHNyYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByaXYtPmlzRmx1c2hpbmcg
fHwgKCFwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkICYmIGdzdF9hZGFwdGVyX2F2YWlsYWJsZShw
cml2LT5hZGFwdGVyLmdldCgpKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHF1ZXVl
U2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZShwcml2LT5hZGFwdGVyLmdldCgpKTsKLSAgICAg
ICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZhaWxhYmxlICUiIEdfR1NJWkVfRk9STUFU
LCBxdWV1ZVNpemUpOwotICAgICAgICAgICAgaWYgKHF1ZXVlU2l6ZSB8fCBwcml2LT5pc0ZsdXNo
aW5nKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBkYXRhIG9yIHdlJ3JlIGZsdXNoaW5n
LiBXZSBjYW4gYnJlYWsgdGhlIGxvb3AgaGVyZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGtlZXAgd2FpdGluZyBidXQg
d2UgY291bGQgYmUgaW4gRU9TLiBMZXQncyBjaGVjayB0aGUgdHdvIHBvc3NpYmlsaXRpZXM6Ci0g
ICAgICAgICAgICAvLyAxLiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aXRoIGEga25v
d24gc2l6ZS4KLSAgICAgICAgICAgIC8vIDIuIFRoZSBkb3dubG9hZCBpcyBub3Qgc3VzcGVuZGVk
IGFuZCBubyBtb3JlIGRhdGEgYXJlIGFycml2aW5nLiBXZSBjYW5ub3Qgd2FpdCBmb3JldmVyLCAx
MHgxcyBzZWVtcyBzYWZlIGFuZCBzZW5zaWJsZS4KLSAgICAgICAgICAgIGlmIChwcml2LT5oYXZl
U2l6ZSAmJiBwcml2LT5yZWFkUG9zaXRpb24gPj0gcHJpdi0+c2l6ZSkgewotICAgICAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiV2FpdGluZyBmb3IgZGF0YSBiZXlvbmQgdGhlIGVu
ZCwgc2lnbmFsbGluZyBFT1MiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRU9T
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJpcyBk
b3dubG9hZCBzdXNwZW5kZWQ/ICVzLCBudW0gcmV0cmllcyAldSIsIGJvb2xGb3JQcmludGluZyhw
cml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkKSwgcmV0cmllcyArIDEpOwotICAgICAgICAgICAgaWYg
KCFwcml2LT5pc0Rvd25sb2FkU3VzcGVuZGVkICYmICsrcmV0cmllcyA+PSAxMCkgewotICAgICAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiQWRhcHRlciBzdGlsbCBlbXB0eSBhZnRl
ciAxMHMgb2Ygd2FpdGluZywgYXNzdW1pbmcgRU9TIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX0VPUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChwcml2LT5pc0ZsdXNoaW5nKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRmx1
c2hpbmciKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIH0KKyAgICBz
aXplX3QgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIu
Z2V0KCkpOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiYXZhaWxhYmxlIGJ5dGVzICUiIEdf
R1NJWkVfRk9STUFUICIsIGJsb2NrIHNpemUgJXUiLCBxdWV1ZVNpemUsIHNpemUpOworICAgIGlm
ICghcXVldWVTaXplKSB7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAibGV0J3Mgd2Fp
dCBmb3IgZGF0YSBvciBFT1MiKTsKKyAgICAgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24u
d2FpdChtZW1iZXJzLm11dGV4KCksIFsmXSB7CisgICAgICAgICAgICByZXR1cm4gbWVtYmVycy0+
aXNGbHVzaGluZyB8fCBnc3RfYWRhcHRlcl9hdmFpbGFibGUobWVtYmVycy0+YWRhcHRlci5nZXQo
KSkgfHwgbWVtYmVycy0+ZG9lc0hhdmVFT1M7CisgICAgICAgIH0pOworICAgICAgICBpZiAobWVt
YmVycy0+aXNGbHVzaGluZykKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsK
IAotICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiAhcHJpdi0+aXNEdXJhdGlvblNldCkgewotICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNldHRpbmcgZHVyYXRpb24gdG8gJSIgR19HVUlO
VDY0X0ZPUk1BVCwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgIGJhc2VTcmMtPnNlZ21lbnQuZHVyYXRp
b24gPSBwcml2LT5zaXplOwotICAgICAgICBwcml2LT5pc0R1cmF0aW9uU2V0ID0gdHJ1ZTsKLSAg
ICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0
X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09CSkVDVF9DQVNUKHNyYykpKTsKKyAg
ICAgICAgcXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKG1lbWJlcnMtPmFkYXB0ZXIu
Z2V0KCkpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImF2YWlsYWJsZSAlIiBHX0dT
SVpFX0ZPUk1BVCwgcXVldWVTaXplKTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+aHR0cEhlYWRl
cnNFdmVudCkKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQoYmFz
ZVNyYyksIHByaXYtPmh0dHBIZWFkZXJzRXZlbnQubGVha1JlZigpKTsKLQotICAgIHsKLSAgICAg
ICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2NrKTsKLSAgICAgICAg
cXVldWVTaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOwor
ICAgIGlmIChxdWV1ZVNpemUpIHsKICAgICAgICAgaWYgKHF1ZXVlU2l6ZSA8IHNpemUpIHsKICAg
ICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiRGlkIG5vdCBnZXQgdGhlICV1IGJsb2Nr
c2l6ZSBieXRlcywgbGV0J3MgcHVzaCB0aGUgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyB3ZSBn
b3QiLCBzaXplLCBxdWV1ZVNpemUpOwogICAgICAgICAgICAgc2l6ZSA9IHF1ZXVlU2l6ZTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlRha2luZyAl
dSBieXRlcyBmcm9tIGFkYXB0ZXIiLCBzaXplKTsKLSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAg
ICAgICAgICpidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcihwcml2LT5hZGFwdGVyLmdl
dCgpLCBzaXplKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpidWZmZXIpOwotCi0gICAg
ICAgICAgICBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSA9IGJhc2VTcmMtPnNlZ21lbnQucG9z
aXRpb247Ci0gICAgICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKmJ1ZmZlcikgPSBHU1Rf
QlVGRkVSX09GRlNFVCgqYnVmZmVyKSArIHNpemU7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JK
RUNUKHNyYywgIkJ1ZmZlciBib3VuZHMgc2V0IHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBH
X0dVSU5UNjRfRk9STUFULCBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSwgR1NUX0JVRkZFUl9P
RkZTRVRfRU5EKCpidWZmZXIpKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAi
ZG9lc0hhdmVFT1M6ICVzLCB3YXNTZWVraW5nOiAlcywgc2Vla2luZzogJXMsIGJ1ZmZlciBzaXpl
OiAldSwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKHByaXYtPmRv
ZXNIYXZlRU9TKSwgYm9vbEZvclByaW50aW5nKHByaXYtPndhc1NlZWtpbmcpLCBib29sRm9yUHJp
bnRpbmcocHJpdi0+aXNTZWVraW5nKSwgc2l6ZSwgcHJpdi0+c2l6ZSk7Ci0gICAgICAgICAgICBp
ZiAocHJpdi0+aGF2ZVNpemUgJiYgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpID49IHBy
aXYtPnNpemUpIHsKLSAgICAgICAgICAgICAgICBpZiAocHJpdi0+d2FzU2Vla2luZykKLSAgICAg
ICAgICAgICAgICAgICAgcHJpdi0+d2FzU2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHByaXYtPmlzU2Vla2FibGUpCi0gICAgICAgICAgICAgICAgICAgIHByaXYtPmRv
ZXNIYXZlRU9TID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpdi0+d2FzU2Vla2lu
ZykKLSAgICAgICAgICAgICAgICBwcml2LT53YXNTZWVraW5nID0gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIHJlc3RhcnRMb2FkZXJJZk5lZWRlZChzcmMpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJFbXB0eSBhZGFwdGVyISIpOwotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKworICAgICAgICAqYnVmZmVyID0g
Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIobWVtYmVycy0+YWRhcHRlci5nZXQoKSwgc2l6ZSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCpidWZmZXIpOworCisgICAgICAgIEdTVF9CVUZGRVJfT0ZG
U0VUKCpidWZmZXIpID0gYmFzZVNyYy0+c2VnbWVudC5wb3NpdGlvbjsKKyAgICAgICAgR1NUX0JV
RkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpID0gR1NUX0JVRkZFUl9PRkZTRVQoKmJ1ZmZlcikgKyBz
aXplOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIkJ1ZmZlciBib3VuZHMgc2V0IHRv
ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFULCBHU1RfQlVGRkVSX09G
RlNFVCgqYnVmZmVyKSwgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpKTsKKyAgICAgICAg
R1NUX1RSQUNFX09CSkVDVChzcmMsICJidWZmZXIgc2l6ZTogJXUsIHRvdGFsIGNvbnRlbnQgc2l6
ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgc2l6ZSwgbWVtYmVycy0+c2l6ZSk7CisKKyAgICAgICAg
cmVzdGFydExvYWRlcklmTmVlZGVkKHNyYywgbWVtYmVycyk7CisgICAgICAgIHJldHVybiBHU1Rf
RkxPV19PSzsKICAgICB9CiAKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgLy8gSWYgdGhl
IHF1ZXVlIGlzIGVtcHR5IHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIG9ubHkgb3RoZXIgb3B0aW9u
IGlzIHRoYXQgd2UgYXJlIGluIEVPUy4KKyAgICBBU1NFUlQobWVtYmVycy0+ZG9lc0hhdmVFT1Mp
OworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSByZXNw
b25zZSwgc2lnbmFsbGluZyBFT1MiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwogfQogCiBz
dGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTZXRFeHRyYUhlYWRlcihHUXVhcmsgZmllbGRJZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpCkBAIC01OTMsNjAgKzYxOSwzMSBA
QCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUHJvY2Vzc0V4dHJhSGVhZGVycyhHUXVhcmsg
ZmllbGRJZCwgY29uc3QgR1ZhbHVlKiB2YQogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2Vi
U3JjU3RhcnQoR3N0QmFzZVNyYyogYmFzZVNyYykKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgYnkgQmFzZVNyYywgZG8gbm90IGNhbGwgaXQKLSAgICAvLyBmcm9t
IG91cnNlbHZlcyB1bmxlc3MgeW91IGVuc3VyZSB0aGUgc3RyZWFtaW5nIGxvY2sgaXMgbm90Ci0g
ICAgLy8gaGVsZC4gSWYgaXQgaXMsIHlvdSB3aWxsIGRlYWRsb2NrIHRoZSBXZWJQcm9jZXNzLgot
ICAgIHJldHVybiB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChiYXNlU3JjLCB0cnVlKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KEdzdEJhc2VTcmMqIGJhc2VT
cmMsIGJvb2wgbm90aWZ5QXN5bmNDb21wbGV0aW9uKQogewogICAgIFdlYktpdFdlYlNyYyogc3Jj
ID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJp
diA9IHNyYy0+cHJpdjsKLQotICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDAp
ICYmICFwcml2LT5wbGF5ZXIpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBh
ZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19jb250ZXh0KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05U
RVhUX1RZUEVfTkFNRSkpOwotICAgICAgICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5KEdTVF9CQVNF
X1NSQ19QQUQoYmFzZVNyYyksIHF1ZXJ5LmdldCgpKSkgewotICAgICAgICAgICAgR3N0Q29udGV4
dCogY29udGV4dDsKIAotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHQocXVlcnku
Z2V0KCksICZjb250ZXh0KTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdT
VF9FTEVNRU5UX0NBU1Qoc3JjKSwgY29udGV4dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21l
c3NhZ2VfbmV3X25lZWRfY29udGV4dChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwgV0VCS0lUX1dFQl9T
UkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FKSk7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NF
UlQocHJpdi0+cGxheWVyKTsKLQotICAgIHByaXYtPndlcmVIZWFkZXJzUmVjZWl2ZWQgPSBmYWxz
ZTsKLSAgICBwcml2LT53YXNSZXNwb25zZVJlY2VpdmVkID0gZmFsc2U7Ci0gICAgcHJpdi0+aXNE
dXJhdGlvblNldCA9IGZhbHNlOwotICAgIHByaXYtPmRvZXNIYXZlRU9TID0gZmFsc2U7Ci0gICAg
cHJpdi0+aXNGbHVzaGluZyA9IGZhbHNlOwotICAgIHByaXYtPmRvd25sb2FkU3RhcnRUaW1lID0g
V2FsbFRpbWU6Om5hbigpOwotCi0gICAgcHJpdi0+ZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjayA9
IGZhbHNlOwotCi0gICAgaWYgKHByaXYtPm9yaWdpbmFsVVJJLmlzTnVsbCgpKSB7CisgICAgaWYg
KHNyYy0+cHJpdi0+b3JpZ2luYWxVUkkuaXNOdWxsKCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChi
YXNlU3JjKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KKyAgICByZXR1cm4gVFJVRTsK
K30KIAotICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9PSBwcml2LT5zdG9wUG9zaXRp
b24pIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJFbXB0eSBzZWdtZW50LCBzaWdu
YWxpbmcgRU9TIik7Ci0gICAgICAgIHByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIEZBTFNFOwotICAgIH0KK3N0YXRpYyB2b2lkIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0
KFdlYktpdFdlYlNyYyogc3JjLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFt
aW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXImIG1lbWJlcnMpCit7CisgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
RmV0Y2hpbmcgJXMiLCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkpOworICAgIEFTU0VSVCghcHJp
di0+b3JpZ2luYWxVUkkuaXNOdWxsKCkpOworICAgIEFTU0VSVChtZW1iZXJzLT5yZXF1ZXN0ZWRQ
b3NpdGlvbiAhPSBtZW1iZXJzLT5zdG9wUG9zaXRpb24pOworCisgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJQb3N0aW5nIHRhc2sgdG8gcmVxdWVzdCBSJXUgJXMgcmVxdWVzdGVkUG9zaXRpb249
JSIgR19HVUlOVDY0X0ZPUk1BVCAiIHN0b3BQb3NpdGlvbj0lIiBHX0dVSU5UNjRfRk9STUFULCBt
ZW1iZXJzLT5yZXF1ZXN0TnVtYmVyLCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCksIG1lbWJlcnMt
PnJlcXVlc3RlZFBvc2l0aW9uLCBtZW1iZXJzLT5zdG9wUG9zaXRpb24pOwogICAgIFVSTCB1cmwg
PSBVUkwoVVJMKCksIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAKICAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwog
ICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXModXJsKTsKIAotICAgIHJlcXVlc3Qu
c2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisgICAgcmVxdWVzdC5z
ZXRIVFRQUmVmZXJyZXIobWVtYmVycy0+cGxheWVyLT5yZWZlcnJlcigpKTsKIAogICAgIGlmIChw
cml2LT5odHRwTWV0aG9kLmdldCgpKQogICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QocHJp
di0+aHR0cE1ldGhvZC5nZXQoKSk7CkBAIC02NzAsMTIgKzY2NywxMiBAQCBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoR3N0QmFzZVNyYyogYmFzZVNyYywgYm9vbCBub3Rp
ZnlBc3luY0NvbQogICAgICAgICB8fCAhZ19hc2NpaV9zdHJjYXNlY21wKCJ0cmFpbGVycy5hcHBs
ZS5jb20iLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICByZXF1ZXN0LnNldEhU
VFBVc2VyQWdlbnQoIlF1aWNrdGltZS83LjYuNiIpOwogCi0gICAgaWYgKHByaXYtPnJlcXVlc3Rl
ZFBvc2l0aW9uKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZm9ybWF0ZWRSYW5nZShnX3N0
cmR1cF9wcmludGYoImJ5dGVzPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0iLCBwcml2LT5yZXF1ZXN0
ZWRQb3NpdGlvbikpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbikgeworICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGZvcm1hdGVkUmFuZ2UoZ19zdHJkdXBfcHJpbnRmKCJieXRl
cz0lIiBHX0dVSU5UNjRfRk9STUFUICItIiwgbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb24pKTsK
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSYW5nZSByZXF1ZXN0OiAlcyIsIGZvcm1h
dGVkUmFuZ2UuZ2V0KCkpOwogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZTo6UmFuZ2UsIGZvcm1hdGVkUmFuZ2UuZ2V0KCkpOwogICAgIH0KLSAgICBwcml2
LT5yZWFkUG9zaXRpb24gPSBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbjsKKyAgICBBU1NFUlQobWVt
YmVycy0+cmVhZFBvc2l0aW9uID09IG1lbWJlcnMtPnJlcXVlc3RlZFBvc2l0aW9uKTsKIAogICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUGVyc2lzdGVudCBjb25uZWN0aW9uIHN1cHBvcnQgJXMi
LCBwcml2LT5rZWVwQWxpdmUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKICAgICBpZiAoIXBy
aXYtPmtlZXBBbGl2ZSkKQEAgLTY4Nyw4MSArNjg0LDUyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRXZWJTcmNNYWtlUmVxdWVzdChHc3RCYXNlU3JjKiBiYXNlU3JjLCBib29sIG5vdGlmeUFzeW5j
Q29tCiAgICAgLy8gV2UgYWx3YXlzIHJlcXVlc3QgSWNlY2FzdC9TaG91dGNhc3QgbWV0YWRhdGEs
IGp1c3QgaW4gY2FzZSAuLi4KICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6SWN5TWV0YWRhdGEsICIxIik7CiAKLSAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4g
cHJvdGVjdG9yID0gV1RGOjplbnN1cmVHUmVmKHNyYyk7Ci0gICAgcHJpdi0+bm90aWZpZXItPm5v
dGlmeShNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpTdGFydCwgW3Byb3RlY3RvciwgcmVx
dWVzdCA9IFdURk1vdmUocmVxdWVzdCksIHNyYywgbm90aWZ5QXN5bmNDb21wbGV0aW9uXSB7Cisg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKSwgcmVxdWVzdCA9IFdURk1vdmUocmVx
dWVzdCksIHJlcXVlc3ROdW1iZXIgPSBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyLCBzcmNdIHsKICAg
ICAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+cHJpdjsKLSAgICAg
ICAgaWYgKCFwcml2LT5sb2FkZXIpCi0gICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBwcml2LT5w
bGF5ZXItPmNyZWF0ZVJlc291cmNlTG9hZGVyKCk7CisgICAgICAgIERhdGFNdXRleDxXZWJLaXRX
ZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHBy
aXYtPmRhdGFNdXRleCk7CisgICAgICAgIC8vIElnbm9yZSB0aGlzIHRhc2sgKG5vdCBtYWtpbmcg
YW55IEhUVFAgcmVxdWVzdCkgaWYgYnkgbm93IFdlYktpdFdlYlNyYyBzdHJlYW1pbmcgdGhyZWFk
IGlzIGFscmVhZHkgd2FpdGluZworICAgICAgICAvLyBmb3IgYSBkaWZmZXJlbnQgcmVxdWVzdC4g
VGhlcmUgaXMgbm8gcG9pbnQgYW55bW9yZSBpbiBzZW5kaW5nIHRoaXMgb25lLgorICAgICAgICBp
ZiAobWVtYmVycy0+cmVxdWVzdE51bWJlciAhPSByZXF1ZXN0TnVtYmVyKSB7CisgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIlNraXBwaW5nIFIldSwgY3VycmVu
dCByZXF1ZXN0IG51bWJlciBpcyAldSIsIHJlcXVlc3ROdW1iZXIsIG1lbWJlcnMtPnJlcXVlc3RO
dW1iZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFt
ZW1iZXJzLT5sb2FkZXIpCisgICAgICAgICAgICBtZW1iZXJzLT5sb2FkZXIgPSBtZW1iZXJzLT5w
bGF5ZXItPmNyZWF0ZVJlc291cmNlTG9hZGVyKCk7CiAKICAgICAgICAgUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyOjpMb2FkT3B0aW9ucyBsb2FkT3B0aW9ucyA9IDA7CiAgICAgICAgIGlmIChy
ZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpCiAgICAgICAgICAgICBsb2FkT3B0aW9ucyB8
PSBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI6OkxvYWRPcHRpb246OkJ1ZmZlckRhdGE7Ci0g
ICAgICAgIHByaXYtPnJlc291cmNlID0gcHJpdi0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVz
b3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBsb2FkT3B0aW9ucyk7Ci0gICAgICAgIGlmIChwcml2LT5y
ZXNvdXJjZSkgewotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5p
cXVlPENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291
cmNlUmVxdWVzdChyZXF1ZXN0KSkpOwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90
ZWN0b3IuZ2V0KCksICJTdGFydGVkIHJlcXVlc3QiKTsKLSAgICAgICAgICAgIGlmIChub3RpZnlB
c3luY0NvbXBsZXRpb24pCi0gICAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBs
ZXRlKEdTVF9CQVNFX1NSQyhzcmMpLCBHU1RfRkxPV19PSyk7CisgICAgICAgIG1lbWJlcnMtPnJl
c291cmNlID0gbWVtYmVycy0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0
KHJlcXVlc3QpLCBsb2FkT3B0aW9ucyk7CisgICAgICAgIGlmIChtZW1iZXJzLT5yZXNvdXJjZSkg
eworICAgICAgICAgICAgbWVtYmVycy0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPENh
Y2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVx
dWVzdChyZXF1ZXN0KSwgcmVxdWVzdE51bWJlcikpOworICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwcm90ZWN0b3IuZ2V0KCksICJTdGFydGVkIHJlcXVlc3QgUiV1IiwgcmVxdWVzdE51bWJl
cik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByb3Rl
Y3Rvci5nZXQoKSwgIkZhaWxlZCB0byBzZXR1cCBzdHJlYW1pbmcgY2xpZW50Iik7Ci0gICAgICAg
ICAgICBpZiAobm90aWZ5QXN5bmNDb21wbGV0aW9uKQotICAgICAgICAgICAgICAgIGdzdF9iYXNl
X3NyY19zdGFydF9jb21wbGV0ZShHU1RfQkFTRV9TUkMoc3JjKSwgR1NUX0ZMT1dfRVJST1IpOwot
ICAgICAgICAgICAgcHJpdi0+bG9hZGVyID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0pOwot
Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Nsb3NlU2Vz
c2lvbihXZWJLaXRXZWJTcmMqIHNyYykKLXsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OwotICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3IgPSBXVEY6
OmVuc3VyZUdSZWYoc3JjKTsKLQotICAgIHByaXYtPm5vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVh
ZFNvdXJjZU5vdGlmaWNhdGlvbjo6U3RvcCwgW3Byb3RlY3Rvciwga2VlcEFsaXZlID0gcHJpdi0+
a2VlcEFsaXZlXSB7Ci0gICAgICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBwcm90ZWN0
b3ItPnByaXY7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJT
dG9wcGluZyByZXNvdXJjZSBsb2FkZXIiKTsKLQotICAgICAgICBpZiAocHJpdi0+cmVzb3VyY2Up
IHsKLSAgICAgICAgICAgIHByaXYtPnJlc291cmNlLT5zdG9wKCk7Ci0gICAgICAgICAgICBwcml2
LT5yZXNvdXJjZS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAgICAgICAgcHJpdi0+cmVzb3Vy
Y2UgPSBudWxscHRyOworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0b3IuZ2V0
KCksICJGYWlsZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCB0byBoYW5kbGUgUiV1IiwgcmVx
dWVzdE51bWJlcik7CisgICAgICAgICAgICBtZW1iZXJzLT5sb2FkZXIgPSBudWxscHRyOwogICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFrZWVwQWxpdmUpCi0gICAgICAgICAgICBwcml2LT5sb2Fk
ZXIgPSBudWxscHRyOwogICAgIH0pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNv
dXJjZSBsb2FkZXIgc3RvcHBlZCIpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
U3RvcChHc3RCYXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VC
S0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKLQotICAgIGlmIChwcml2LT5yZXNvdXJjZSB8fCAocHJpdi0+bG9hZGVyICYmICFw
cml2LT5rZWVwQWxpdmUpKQotICAgICAgICB3ZWJLaXRXZWJTcmNDbG9zZVNlc3Npb24oc3JjKTsK
LQotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJM
b2NrKTsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIocHJpdi0+YWRhcHRlci5nZXQoKSk7Ci0g
ICAgfQotCi0gICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjKTsKLSAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOworICAgIC8vIGJhc2VzcmMgd2lsbCBhbHdheXMgY2Fs
bCB1bkxvY2soKSBhbmQgdW5Mb2NrU3RvcCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMuIFNlZSBnc3Rf
YmFzZV9zcmNfc3RvcCgpLgorICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJl
YW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4
KTsKKyAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMsIG1lbWJlcnMsIFJlc2V0VHlwZTo6SGFyZCk7
CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdG9wcGVkIFdlYktpdFdlYlNyYyIpOwogICAg
IHJldHVybiBUUlVFOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShH
c3RCYXNlU3JjKiBiYXNlU3JjLCBndWludDY0KiBzaXplKQogewogICAgIFdlYktpdFdlYlNyYyog
c3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3Ry
ZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRl
eCk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImhhdmVTaXplOiAlcywgc2l6ZTogJSIg
R19HVUlOVDY0X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKHByaXYtPmhhdmVTaXplKSwgcHJpdi0+
c2l6ZSk7Ci0gICAgaWYgKHByaXYtPmhhdmVTaXplKSB7Ci0gICAgICAgICpzaXplID0gcHJpdi0+
c2l6ZTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImhhdmVTaXplOiAlcywgc2l6ZTogJSIg
R19HVUlOVDY0X0ZPUk1BVCwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmhhdmVTaXplKSwgbWVt
YmVycy0+c2l6ZSk7CisgICAgaWYgKG1lbWJlcnMtPmhhdmVTaXplKSB7CisgICAgICAgICpzaXpl
ID0gbWVtYmVycy0+c2l6ZTsKICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCkBAIC03NzEs
NDAgKzczOSw0MiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShHc3RCYXNl
U3JjKiBiYXNlU3JjLCBndWludDY0KiBzaXplKQogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNy
Y0lzU2Vla2FibGUoR3N0QmFzZVNyYyogYmFzZVNyYykKIHsKICAgICBXZWJLaXRXZWJTcmMqIHNy
YyA9IFdFQktJVF9XRUJfU1JDKGJhc2VTcmMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJpc1NlZWthYmxlOiAlcyIsIGJvb2xGb3JQcmludGluZyhzcmMtPnByaXYtPmlzU2Vla2FibGUp
KTsKLSAgICByZXR1cm4gc3JjLT5wcml2LT5pc1NlZWthYmxlOworICAgIERhdGFNdXRleDxXZWJL
aXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJz
KHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImlzU2Vl
a2FibGU6ICVzIiwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vla2FibGUpKTsKKyAgICBy
ZXR1cm4gbWVtYmVycy0+aXNTZWVrYWJsZTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdl
YlNyY0RvU2VlayhHc3RCYXNlU3JjKiBiYXNlU3JjLCBHc3RTZWdtZW50KiBzZWdtZW50KQogewor
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY3JlYXRlKCku
IEl0J3Mgb25seSBjYWxsZWQgd2hlbiB3ZSdyZSB0cmFuc2l0aW9uaW5nIHRvID49UEFVU0VEIGFu
ZAorICAgIC8vIGJldHdlZW4gZmx1c2hlcy4gSW4gYW55IGNhc2UsIGJhc2VzcmMgaG9sZHMgdGhl
IFNUUkVBTV9MT0NLLCBzbyB3ZSBrbm93IGNyZWF0ZSgpIGlzIG5vdCBydW5uaW5nLgorICAgIC8v
IEFsc28sIGJvdGggd2ViS2l0V2ViU3JjVW5Mb2NrKCkgYW5kIHdlYktpdFdlYlNyY1VuTG9ja1N0
b3AoKSBhcmUgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgKmJlZm9yZSogdGhpcyBmdW5jdGlvbi4K
KyAgICAvLyBbU2VlIGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWsoKV0uCisgICAgQVNTRVJUKEdT
VF9FTEVNRU5UKGJhc2VTcmMpLT5jdXJyZW50X3N0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCBH
U1RfUEFEX0lTX0ZMVVNISU5HKGJhc2VTcmMtPnNyY3BhZCkpOworCisgICAgLy8gRXhjZXB0IGZv
ciB0aGUgaW5pdGlhbCBzZWVrLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIGlzU2Vl
a2FibGUoKSByZXR1cm5zIHRydWUuCisgICAgQVNTRVJUKEdTVF9FTEVNRU5UKGJhc2VTcmMpLT5j
dXJyZW50X3N0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCB3ZWJLaXRXZWJTcmNJc1NlZWthYmxl
KGJhc2VTcmMpKTsKKwogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFz
ZVNyYyk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBM
b2NrSG9sZGVyIGxvY2tlcihwcml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJL
aXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJz
KHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vl
ayBzZWdtZW50OiAoJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQgIiki
LCBzZWdtZW50LT5zdGFydCwgc2VnbWVudC0+c3RvcCk7Ci0gICAgaWYgKHByaXYtPnJlYWRQb3Np
dGlvbiA9PSBzZWdtZW50LT5zdGFydCAmJiBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9PSBwcml2
LT5yZWFkUG9zaXRpb24gJiYgcHJpdi0+c3RvcFBvc2l0aW9uID09IHNlZ21lbnQtPnN0b3ApIHsK
LSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIHRvIGN1cnJlbnQgcmVhZC9lbmQg
cG9zaXRpb24gYW5kIG5vIHNlZWsgcGVuZGluZyIpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAg
ICB9CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIHNlZ21lbnQ6ICglIiBHX0dVSU5U
NjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSBQb3NpdGlvbiBwcmV2aW91cyB0byBz
ZWVrOiAlIiBHX0dVSU5UNjRfRk9STUFULCBzZWdtZW50LT5zdGFydCwgc2VnbWVudC0+c3RvcCwg
bWVtYmVycy0+cmVhZFBvc2l0aW9uKTsKIAotICAgIGlmIChwcml2LT53ZXJlSGVhZGVyc1JlY2Vp
dmVkICYmICFwcml2LT5pc1NlZWthYmxlKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChz
cmMsICJOb3Qgc2Vla2FibGUiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KKyAgICAv
LyBCZWZvcmUgYXR0ZW1wdGluZyB0byBzZWVrLCBiYXNlc3JjIHdpbGwgY2FsbCBpc1NlZWthYmxl
KCkuIElmIGlzU2Vla2FibGUoKSBpcyB0cnVlLCBhIGZsdXNoIHdpbGwgYmUgbWFkZSBhbmQKKyAg
ICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLiBiYXNlc3JjIHN0aWxsIGdpdmVzIHVz
IHRoZSBjaGFuY2UgaGVyZSB0byByZXR1cm4gRkFMU0UgYW5kIGNhbmNlbCB0aGUgc2Vlay4KKyAg
ICAvLyBXZSBjYW5ub3QgYWZmb3JkIHRvIHJldHVybiBGQUxTRSBpbiB0aGlzIGZ1bmN0aW9uIHRo
b3VnaCB1bmxlc3Mgd2UncmUgZ29pbmcgdG8gZmFpbCBvbiBwdXJwb3NlLCBzaW5jZSBhdCB0aGlz
CisgICAgLy8gcG9pbnQgd2UgaGF2ZSBhbHJlYWR5IGJlZW4gZmx1c2hlZCBhbmQgY2FuY2VsbGVk
IHRoZSBIVFRQIHJlcXVlc3QgdGhhdCB3YXMgZmVlZGluZyB1cyBkYXRhLgogCiAgICAgaWYgKHNl
Z21lbnQtPnJhdGUgPCAwLjAgfHwgc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfQllURVMp
IHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKHNyYywgIkludmFsaWQgc2VlayBzZWdtZW50
Iik7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiSW52YWxpZCBzZWVrIHNlZ21lbnQi
KTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIGlmIChwcml2LT5oYXZlU2l6
ZSAmJiBzZWdtZW50LT5zdGFydCA+PSBwcml2LT5zaXplKQorICAgIGlmIChtZW1iZXJzLT5oYXZl
U2l6ZSAmJiBzZWdtZW50LT5zdGFydCA+PSBtZW1iZXJzLT5zaXplKQogICAgICAgICBHU1RfV0FS
TklOR19PQkpFQ1Qoc3JjLCAiUG90ZW50aWFsbHkgc2Vla2luZyBiZWhpbmQgZW5kIG9mIGZpbGUs
IG1pZ2h0IEVPUyBpbW1lZGlhdGVseSIpOwogCi0gICAgcHJpdi0+aXNTZWVraW5nID0gdHJ1ZTsK
LSAgICBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IHNlZ21lbnQtPnN0YXJ0OwotICAgIHByaXYt
PnN0b3BQb3NpdGlvbiA9IHNlZ21lbnQtPnN0b3A7Ci0gICAgcHJpdi0+YWRhcHRlckNvbmRpdGlv
bi5ub3RpZnlPbmUoKTsKKyAgICBtZW1iZXJzLT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IG1lbWJlcnMt
PnJlYWRQb3NpdGlvbiA9IHNlZ21lbnQtPnN0YXJ0OworICAgIG1lbWJlcnMtPnN0b3BQb3NpdGlv
biA9IHNlZ21lbnQtPnN0b3A7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTgxNiw4ICs3ODYs
OSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnkoR3N0QmFzZVNyYyogYmFzZVNy
YywgR3N0UXVlcnkqIHF1ZXJ5KQogCiAgICAgaWYgKEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSA9PSBH
U1RfUVVFUllfVVJJKSB7CiAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBwcml2LT5v
cmlnaW5hbFVSSS5kYXRhKCkpOwotICAgICAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRVUkkuaXNO
dWxsKCkpCi0gICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbihxdWVyeSwg
cHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCkpOworICAgICAgICBEYXRhTXV0ZXg8V2ViS2l0V2Vi
U3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMt
PnByaXYtPmRhdGFNdXRleCk7CisgICAgICAgIGlmICghbWVtYmVycy0+cmVkaXJlY3RlZFVSSS5p
c051bGwoKSkKKyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uKHF1ZXJ5
LCBtZW1iZXJzLT5yZWRpcmVjdGVkVVJJLmRhdGEoKSk7CiAgICAgICAgIHJlc3VsdCA9IFRSVUU7
CiAgICAgfQogCkBAIC04MzgsNTEgKzgwOSw0NSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2Vi
U3JjUXVlcnkoR3N0QmFzZVNyYyogYmFzZVNyYywgR3N0UXVlcnkqIHF1ZXJ5KQogc3RhdGljIGdi
b29sZWFuIHdlYktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKiBiYXNlU3JjKQogewogICAgIFdl
YktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7Ci0gICAgTG9ja0hvbGRl
ciBsb2NrZXIoc3JjLT5wcml2LT5yZXNwb25zZUxvY2spOworICAgIERhdGFNdXRleDxXZWJLaXRX
ZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNy
Yy0+cHJpdi0+ZGF0YU11dGV4KTsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiVW5sb2Nr
Iik7Ci0gICAgc3JjLT5wcml2LT5pc0ZsdXNoaW5nID0gdHJ1ZTsKLSAgICBzcmMtPnByaXYtPnJl
c3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgIHNyYy0+cHJpdi0+YWRhcHRlckNvbmRp
dGlvbi5ub3RpZnlPbmUoKTsKKyAgICBtZW1iZXJzLT5pc0ZsdXNoaW5nID0gdHJ1ZTsKKworICAg
IC8vIElmIHdlIGhhdmUgYSBuZXR3b3JrIHJlc291cmNlIHJlcXVlc3Qgb3Blbiwgd2UgYXNrIHRo
ZSBtYWluIHRocmVhZCB0byBjbG9zZSBpdC4KKyAgICBpZiAobWVtYmVycy0+cmVzb3VyY2UpIHsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNvdXJjZSByZXF1ZXN0IFIldSB3aWxs
IGJlIHN0b3BwZWQiLCBtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyKTsKKyAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKSwgcmVzb3Vy
Y2UgPSBXVEZNb3ZlKG1lbWJlcnMtPnJlc291cmNlKSwgcmVxdWVzdE51bWJlciA9IG1lbWJlcnMt
PnJlcXVlc3ROdW1iZXJdIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdG9y
LmdldCgpLCAiU3RvcHBpbmcgcmVzb3VyY2UgcmVxdWVzdCBSJXUiLCByZXF1ZXN0TnVtYmVyKTsK
KyAgICAgICAgICAgIHJlc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICByZXNvdXJjZS0+c2V0
Q2xpZW50KG51bGxwdHIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgQVNTRVJUKCFtZW1iZXJz
LT5yZXNvdXJjZSk7CisKKyAgICBpZiAoIXNyYy0+cHJpdi0+a2VlcEFsaXZlKQorICAgICAgICBt
ZW1iZXJzLT5sb2FkZXIgPSBudWxscHRyOworCisgICAgLy8gRW5zdXJlIGFsbCBuZXR3b3JrIGNh
bGxiYWNrcyBmcm9tIHRoZSBvbGQgcmVxdWVzdCBkb24ndCBmZWVkIGRhdGEgdG8gV2ViS2l0V2Vi
U3JjIGFueW1vcmUuCisgICAgbWVtYmVycy0+cmVxdWVzdE51bWJlcisrOworCisgICAgLy8gV2Fr
ZSB1cCBzdHJlYW1pbmcgdGhyZWFkLgorICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5v
dGlmeU9uZSgpOworCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRXZWJTcmNVbkxvY2tTdG9wKEdzdEJhc2VTcmMqIGJhc2VTcmMpCiB7CiAgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tl
cihzcmMtPnByaXYtPnJlc3BvbnNlTG9jayk7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1By
aXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2
LT5kYXRhTXV0ZXgpOwogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiVW5sb2NrIHN0b3AiKTsK
LSAgICBzcmMtPnByaXYtPmlzRmx1c2hpbmcgPSBmYWxzZTsKKyAgICBtZW1iZXJzLT5pc0ZsdXNo
aW5nID0gZmFsc2U7CisgICAgd2Via2l0V2ViU3JjUmVzZXQoc3JjLCBtZW1iZXJzLCBSZXNldFR5
cGU6OlNvZnQpOwogCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RT
dGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lU
X1dFQl9TUkMoZWxlbWVudCk7Ci0KLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIiVzIiwgZ3N0X3N0YXRlX2NoYW5nZV9nZXRfbmFtZSh0
cmFuc2l0aW9uKSk7Ci0jZW5kaWYKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNl
IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgICAgd2ViS2l0V2ViU3JjQ2xv
c2VTZXNzaW9uKHNyYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5H
RV9QQVVTRURfVE9fUkVBRFk6IHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc3JjLT5wcml2
LT5yZXNwb25zZUxvY2spOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+
UkVBRFkgY2FuY2VsbGluZyBuZXR3b3JrIHJlcXVlc3RzIik7Ci0gICAgICAgIHNyYy0+cHJpdi0+
aXNGbHVzaGluZyA9IHRydWU7Ci0gICAgICAgIHNyYy0+cHJpdi0+cmVzcG9uc2VDb25kaXRpb24u
bm90aWZ5T25lKCk7Ci0gICAgICAgIHNyYy0+cHJpdi0+YWRhcHRlckNvbmRpdGlvbi5ub3RpZnlP
bmUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5j
aGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci19Ci0KIHN0YXRpYyBib29sIHVybEhh
c1N1cHBvcnRlZFByb3RvY29sKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiB1cmwuaXNW
YWxpZCgpICYmICh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElz
QmxvYigpKTsKQEAgLTkzOCw3ICs5MDMsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
U2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAg
ICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgcHJpdi0+cmVkaXJlY3RlZFVSSSA9IENT
dHJpbmcoKTsKICAgICBwcml2LT5vcmlnaW5hbFVSSSA9IENTdHJpbmcoKTsKICAgICBpZiAoIXVy
aSkKICAgICAgICAgcmV0dXJuIFRSVUU7CkBAIC05NzIsMTYgKzkzNiwxOSBAQCBzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQog
dm9pZCB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXZWJLaXRXZWJTcmMqIHNyYywgV2ViQ29y
ZTo6TWVkaWFQbGF5ZXIqIHBsYXllcikKIHsKICAgICBBU1NFUlQocGxheWVyKTsKLSAgICBzcmMt
PnByaXYtPnBsYXllciA9IHBsYXllcjsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0
ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhzcmMtPnByaXYtPmRh
dGFNdXRleCk7CisgICAgbWVtYmVycy0+cGxheWVyID0gcGxheWVyOwogfQogCiBib29sIHdlYktp
dFNyY1Bhc3NlZENPUlNBY2Nlc3NDaGVjayhXZWJLaXRXZWJTcmMqIHNyYykKIHsKLSAgICByZXR1
cm4gc3JjLT5wcml2LT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrOworICAgIERhdGFNdXRleDxX
ZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBtZW1i
ZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICByZXR1cm4gbWVtYmVycy0+ZGlkUGFzc0Fj
Y2Vzc0NvbnRyb2xDaGVjazsKIH0KIAotQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OkNh
Y2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBSZXNvdXJjZVJl
cXVlc3QmJiByZXF1ZXN0KQotICAgIDogbV9zcmMoR1NUX0VMRU1FTlQoc3JjKSkKK0NhY2hlZFJl
c291cmNlU3RyZWFtaW5nQ2xpZW50OjpDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJL
aXRXZWJTcmMqIHNyYywgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgdW5zaWduZWQgcmVxdWVz
dE51bWJlcikKKyAgICA6IG1fcmVxdWVzdE51bWJlcihyZXF1ZXN0TnVtYmVyKQorICAgICwgbV9z
cmMoR1NUX0VMRU1FTlQoc3JjKSkKICAgICAsIG1fcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQog
ewogfQpAQCAtOTkwLDYgKzk1Nyw3IEBAIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmNoZWNrVXBkYXRlQmxvY2tzaXplKHVuc2lnbmVkIGJ5
dGVzUmVhZCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktpdFdlYlNy
Yyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwogICAgIEdzdEJhc2VTcmMqIGJh
c2VTcmMgPSBHU1RfQkFTRV9TUkNfQ0FTVChzcmMpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUq
IHByaXYgPSBzcmMtPnByaXY7CkBAIC0xMDI2LDMyICs5OTQsNDQgQEAgdm9pZCBDYWNoZWRSZXNv
dXJjZVN0cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUodW5zaWduZWQgYnl0ZXNS
ZWFkKQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2Vp
dmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFBvbGljeUNoZWNrZXI6OlNob3VsZENvbnRpbnVl
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwogICAg
IFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0gICAgcHJpdi0+ZGlkUGFz
c0FjY2Vzc0NvbnRyb2xDaGVjayA9IHByaXYtPnJlc291cmNlLT5kaWRQYXNzQWNjZXNzQ29udHJv
bENoZWNrKCk7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01l
bWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMocHJpdi0+ZGF0YU11dGV4KTsKKyAgICBpZiAo
bWVtYmVycy0+cmVxdWVzdE51bWJlciAhPSBtX3JlcXVlc3ROdW1iZXIpIHsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoUG9saWN5Q2hlY2tlcjo6U2hvdWxkQ29udGludWU6Ok5vKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVjZWl2ZWQg
cmVzcG9uc2U6ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJSJXU6IFJlY2VpdmVkIHJlc3BvbnNlOiAlZCIsIG1fcmVxdWVzdE51bWJl
ciwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKKyAgICBtZW1iZXJzLT5kaWRQYXNzQWNj
ZXNzQ29udHJvbENoZWNrID0gbWVtYmVycy0+cmVzb3VyY2UtPmRpZFBhc3NBY2Nlc3NDb250cm9s
Q2hlY2soKTsKICAgICBtX29yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzcG9u
c2UudXJsKCkpKTsKIAogICAgIGF1dG8gcmVzcG9uc2VVUkkgPSByZXNwb25zZS51cmwoKS5zdHJp
bmcoKS51dGY4KCk7CiAgICAgaWYgKHByaXYtPm9yaWdpbmFsVVJJICE9IHJlc3BvbnNlVVJJKQot
ICAgICAgICBwcml2LT5yZWRpcmVjdGVkVVJJID0gV1RGTW92ZShyZXNwb25zZVVSSSk7CisgICAg
ICAgIG1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkgPSBXVEZNb3ZlKHJlc3BvbnNlVVJJKTsKKworICAg
IC8vIGxlbmd0aCB3aWxsIGJlIHplcm8gKHVua25vd24pIGlmIG5vIENvbnRlbnQtTGVuZ3RoIGlz
IHByb3ZpZGVkIG9yIHRoZSByZXNwb25zZSBpcyBjb21wcmVzc2VkIHdpdGggQ29udGVudC1FbmNv
ZGluZy4KKyAgICB1aW50NjRfdCBsZW5ndGggPSAhcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygp
LmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50RW5jb2RpbmcpID8gcmVzcG9uc2UuZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKCkgOiAwOworICAgIGlmIChsZW5ndGggPiAwICYmIG1lbWJlcnMt
PnJlcXVlc3RlZFBvc2l0aW9uICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjA2KQor
ICAgICAgICBsZW5ndGggKz0gbWVtYmVycy0+cmVxdWVzdGVkUG9zaXRpb247CiAKLSAgICB1aW50
NjRfdCBsZW5ndGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICBpZiAo
bGVuZ3RoID4gMCAmJiBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiAmJiByZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpID09IDIwNikKLSAgICAgICAgbGVuZ3RoICs9IHByaXYtPnJlcXVlc3RlZFBvc2l0
aW9uOworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBodHRwSGVhZGVycyhnc3Rfc3RydWN0
dXJlX25ld19lbXB0eSgiaHR0cC1oZWFkZXJzIikpOwogCi0gICAgcHJpdi0+aHR0cEhlYWRlcnMu
cmVzZXQoZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImh0dHAtaGVhZGVycyIpKTsKLSAgICBnc3Rf
c3RydWN0dXJlX3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInVyaSIsIEdfVFlQRV9TVFJJ
TkcsIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSwKKyAgICBnc3Rfc3RydWN0dXJlX3NldChodHRw
SGVhZGVycy5nZXQoKSwgInVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYtPm9yaWdpbmFsVVJJLmRh
dGEoKSwKICAgICAgICAgImh0dHAtc3RhdHVzLWNvZGUiLCBHX1RZUEVfVUlOVCwgcmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFwcml2LT5yZWRpcmVjdGVkVVJJ
LmlzTnVsbCgpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChwcml2LT5odHRwSGVhZGVycy5n
ZXQoKSwgInJlZGlyZWN0aW9uLXVyaSIsIEdfVFlQRV9TVFJJTkcsIHByaXYtPnJlZGlyZWN0ZWRV
UkkuZGF0YSgpLCBudWxscHRyKTsKKyAgICBpZiAoIW1lbWJlcnMtPnJlZGlyZWN0ZWRVUkkuaXNO
dWxsKCkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAicmVk
aXJlY3Rpb24tdXJpIiwgR19UWVBFX1NUUklORywgbWVtYmVycy0+cmVkaXJlY3RlZFVSSS5kYXRh
KCksIG51bGxwdHIpOworCisgICAgLy8gUGFjayByZXF1ZXN0IGhlYWRlcnMgaW4gdGhlIGh0dHAt
aGVhZGVycyBzdHJ1Y3R1cmUuCiAgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGhlYWRlcnMo
Z3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoInJlcXVlc3QtaGVhZGVycyIpKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGhlYWRlciA6IG1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpCiAgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEo
KSwgR19UWVBFX1NUUklORywgaGVhZGVyLnZhbHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwot
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVxdWVzdCBoZWFkZXJzIGdvaW5nIGRvd25zdHJl
YW06ICUiIEdTVF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKLSAgICBnc3Rfc3RydWN0dXJl
X3NldChwcml2LT5odHRwSGVhZGVycy5nZXQoKSwgInJlcXVlc3QtaGVhZGVycyIsIEdTVF9UWVBF
X1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJSJXU6IFJlcXVlc3QgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRS
X0ZPUk1BVCwgbV9yZXF1ZXN0TnVtYmVyLCBoZWFkZXJzLmdldCgpKTsKKyAgICBnc3Rfc3RydWN0
dXJlX3NldChodHRwSGVhZGVycy5nZXQoKSwgInJlcXVlc3QtaGVhZGVycyIsIEdTVF9UWVBFX1NU
UlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBQYWNrIHJlc3BvbnNl
IGhlYWRlcnMgaW4gdGhlIGh0dHAtaGVhZGVycyBzdHJ1Y3R1cmUuCiAgICAgaGVhZGVycy5yZXNl
dChnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgicmVzcG9uc2UtaGVhZGVycyIpKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGhlYWRlciA6IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkgewogICAg
ICAgICBib29sIG9rID0gZmFsc2U7CkBAIC0xMDYxLDU3ICsxMDQxLDQzIEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJl
c291cmNlJiwgY29uCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywg
aGVhZGVyLnZhbHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwogICAgIH0KLSAgICBhdXRvIGNv
bnRlbnRMZW5ndGhGaWVsZE5hbWUoaHR0cEhlYWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRMZW5ndGgpLnRvU3RyaW5nKCkpOwotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNf
ZmllbGQoaGVhZGVycy5nZXQoKSwgY29udGVudExlbmd0aEZpZWxkTmFtZS51dGY4KCkuZGF0YSgp
KSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgY29udGVudExlbmd0
aEZpZWxkTmFtZS51dGY4KCkuZGF0YSgpLCBHX1RZUEVfVUlOVDY0LCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obGVuZ3RoKSwgbnVsbHB0cik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQocHJpdi0+aHR0
cEhlYWRlcnMuZ2V0KCksICJyZXNwb25zZS1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBo
ZWFkZXJzLmdldCgpLCBudWxscHRyKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc3Bv
bnNlIGhlYWRlcnMgZ29pbmcgZG93bnN0cmVhbTogJSIgR1NUX1BUUl9GT1JNQVQsIGhlYWRlcnMu
Z2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUiV1OiBSZXNwb25zZSBoZWFkZXJz
IGdvaW5nIGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBtX3JlcXVlc3ROdW1iZXIsIGhl
YWRlcnMuZ2V0KCkpOworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLmdldCgpLCAi
cmVzcG9uc2UtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVs
bHB0cik7CiAKLSAgICBwcml2LT5odHRwSGVhZGVyc0V2ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVu
dF9uZXdfY3VzdG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9TVElDS1ksIGdzdF9zdHJ1
Y3R1cmVfY29weShwcml2LT5odHRwSGVhZGVycy5nZXQoKSkpKTsKLQotICAgIGF1dG8gc2NvcGVF
eGl0ID0gbWFrZVNjb3BlRXhpdChbJl0gewotICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGdzdF9zdHJ1Y3R1cmVfY29weShzcmMtPnByaXYtPmh0dHBIZWFkZXJzLmdldCgpKTsKLSAg
ICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0
X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksIHN0cnVjdHVyZSkpOwot
ICAgIH0pOworICAgIG1lbWJlcnMtPnBlbmRpbmdIdHRwSGVhZGVyc01lc3NhZ2UgPSBhZG9wdEdS
ZWYoZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksIGdzdF9zdHJ1
Y3R1cmVfY29weShodHRwSGVhZGVycy5nZXQoKSkpKTsKKyAgICBtZW1iZXJzLT5wZW5kaW5nSHR0
cEhlYWRlcnNFdmVudCA9IGFkb3B0R1JlZihnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRf
Q1VTVE9NX0RPV05TVFJFQU1fU1RJQ0tZLCBodHRwSGVhZGVycy5yZWxlYXNlKCkpKTsKIAogICAg
IGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBHU1RfRUxF
TUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBSRUFELCAoIlJlY2VpdmVkICVkIEhUVFAgZXJyb3Ig
Y29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOwotICAgICAgICBw
cml2LT5kb2VzSGF2ZUVPUyA9IHRydWU7Ci0gICAgICAgIHdlYktpdFdlYlNyY1N0b3AoR1NUX0JB
U0VfU1JDX0NBU1Qoc3JjKSk7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VS
Q0UsIFJFQUQsICgiUiV1OiBSZWNlaXZlZCAlZCBIVFRQIGVycm9yIGNvZGUiLCBtX3JlcXVlc3RO
dW1iZXIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOworICAgICAgICBt
ZW1iZXJzLT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lDaGVj
a2VyOjpTaG91bGRDb250aW51ZTo6Tm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uKSB7CisgICAgaWYgKG1lbWJlcnMtPnJlcXVlc3Rl
ZFBvc2l0aW9uKSB7CiAgICAgICAgIC8vIFNlZWtpbmcgLi4uIHdlIGV4cGVjdCBhIDIwNiA9PSBQ
QVJUSUFMX0NPTlRFTlQKLSAgICAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0g
MjAwKSB7Ci0gICAgICAgICAgICAvLyBSYW5nZSByZXF1ZXN0IGRpZG4ndCBoYXZlIGEgcmFuZ2Vk
IHJlc3BvbnNlOyByZXNldHRpbmcgb2Zmc2V0LgotICAgICAgICAgICAgcHJpdi0+cmVhZFBvc2l0
aW9uID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9
IDIwNikgeworICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsK
ICAgICAgICAgICAgIC8vIFJhbmdlIHJlcXVlc3QgY29tcGxldGVseSBmYWlsZWQuCi0gICAgICAg
ICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBSRUFELCAoIlJlY2VpdmVkIHVu
ZXhwZWN0ZWQgJWQgSFRUUCBzdGF0dXMgY29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkp
LCAobnVsbHB0cikpOwotICAgICAgICAgICAgcHJpdi0+ZG9lc0hhdmVFT1MgPSB0cnVlOwotICAg
ICAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKKyAgICAg
ICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUiV1OiBSZWNl
aXZlZCB1bmV4cGVjdGVkICVkIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHJhbmdlIHJlcXVlc3QiLCBt
X3JlcXVlc3ROdW1iZXIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpLCAobnVsbHB0cikpOwor
ICAgICAgICAgICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0cnVlOworICAgICAgICAgICAgbWVt
YmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihQb2xpY3lDaGVja2VyOjpTaG91bGRDb250aW51ZTo6Tm8pOwogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJSYW5nZSByZXF1ZXN0IHN1Y2NlZWRlZCIpOwotICAgICAgICAgICAgcHJpdi0+aXNT
ZWVraW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBwcml2LT53YXNTZWVraW5nID0gdHJ1ZTsKICAg
ICAgICAgfQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlIldTogUmFuZ2UgcmVxdWVz
dCBzdWNjZWVkZWQiLCBtX3JlcXVlc3ROdW1iZXIpOwogICAgIH0KIAotICAgIHByaXYtPmlzU2Vl
a2FibGUgPSBsZW5ndGggPiAwICYmIGdfYXNjaWlfc3RyY2FzZWNtcCgibm9uZSIsIHJlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QWNjZXB0UmFuZ2VzKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBtZW1iZXJzLT5pc1NlZWthYmxlID0gbGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0
cmNhc2VjbXAoIm5vbmUiLCByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OkFjY2VwdFJhbmdlcykudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgaXNTZWVrYWJsZTogJXMiLCBsZW5ndGgs
IGJvb2xGb3JQcmludGluZyhwcml2LT5pc1NlZWthYmxlKSk7CisgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJSJXU6IFNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgaXNTZWVrYWJsZTogJXMi
LCBtX3JlcXVlc3ROdW1iZXIsIGxlbmd0aCwgYm9vbEZvclByaW50aW5nKG1lbWJlcnMtPmlzU2Vl
a2FibGUpKTsKICAgICBpZiAobGVuZ3RoID4gMCkgewotICAgICAgICBpZiAoIXByaXYtPmhhdmVT
aXplIHx8IHByaXYtPnNpemUgIT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBwcml2LT5oYXZlU2l6
ZSA9IHRydWU7Ci0gICAgICAgICAgICBwcml2LT5zaXplID0gbGVuZ3RoOwotICAgICAgICAgICAg
cHJpdi0+aXNEdXJhdGlvblNldCA9IGZhbHNlOworICAgICAgICBpZiAoIW1lbWJlcnMtPmhhdmVT
aXplIHx8IG1lbWJlcnMtPnNpemUgIT0gbGVuZ3RoKSB7CisgICAgICAgICAgICBtZW1iZXJzLT5o
YXZlU2l6ZSA9IHRydWU7CisgICAgICAgICAgICBtZW1iZXJzLT5zaXplID0gbGVuZ3RoOwogICAg
ICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHByaXYtPmhhdmVTaXplID0gZmFsc2U7CisgICAg
ICAgIG1lbWJlcnMtPmhhdmVTaXplID0gZmFsc2U7CiAKICAgICAvLyBTaWduYWwgdG8gZG93bnN0
cmVhbSBpZiB0aGlzIGlzIGFuIEljZWNhc3Qgc3RyZWFtLgogICAgIEdSZWZQdHI8R3N0Q2Fwcz4g
Y2FwczsKQEAgLTExMjMsMTE0ICsxMDg5LDEwNiBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbgog
ICAgICAgICAgICAgY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNh
dGlvbi94LWljeSIsICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIG1ldGFkYXRhSW50
ZXJ2YWwsIG51bGxwdHIpKTsKIAogICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSk7Ci0gICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc3BvbnNlIENvbnRlbnRUeXBlOiAlcyIs
IGNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJSJXU6IFJlc3BvbnNlIENvbnRlbnRUeXBlOiAlcyIsIG1fcmVxdWVzdE51bWJlciwg
Y29udGVudFR5cGUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2lt
cGxlKGNhcHMuZ2V0KCksICJjb250ZW50LXR5cGUiLCBHX1RZUEVfU1RSSU5HLCBjb250ZW50VHlw
ZS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KLQogICAgIGlmIChj
YXBzKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0IGNhcHMgdG8gJSIgR1NU
X1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOwotICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMo
R1NUX0JBU0VfU1JDX0NBU1Qoc3JjKSwgY2Fwcy5nZXQoKSk7CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiUiV1OiBTZXQgY2FwcyB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9yZXF1ZXN0
TnVtYmVyLCBjYXBzLmdldCgpKTsKKyAgICAgICAgbWVtYmVycy0+cGVuZGluZ0NhcHMgPSBXVEZN
b3ZlKGNhcHMpOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJp
di0+cmVzcG9uc2VMb2NrKTsKLSAgICAgICAgcHJpdi0+d2VyZUhlYWRlcnNSZWNlaXZlZCA9IHRy
dWU7Ci0gICAgICAgIHByaXYtPmhlYWRlcnNDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgfQor
ICAgIG1lbWJlcnMtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgPSB0cnVlOworICAgIG1lbWJlcnMtPnJl
c3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworCiAgICAgY29tcGxldGlvbkhhbmRsZXIoUG9s
aWN5Q2hlY2tlcjo6U2hvdWxkQ29udGludWU6Olllcyk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7
Ci0gICAgR3N0QmFzZVNyYyogYmFzZVNyYyA9IEdTVF9CQVNFX1NSQ19DQVNUKHNyYyk7CiAgICAg
V2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9MT0dfT0JK
RUNUKHNyYywgIkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIGxlbmd0aCk7Ci0gICAgTG9ja0hvbGRl
ciBsb2NrZXIocHJpdi0+cmVzcG9uc2VMb2NrKTsKKyAgICBEYXRhTXV0ZXg8V2ViS2l0V2ViU3Jj
UHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgbWVtYmVycyhwcml2LT5k
YXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51
bWJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiUiV1OiBI
YXZlICVkIGJ5dGVzIG9mIGRhdGEiLCBtX3JlcXVlc3ROdW1iZXIsIGxlbmd0aCk7CisKICAgICAv
LyBSb3VnaCBiYW5kd2lkdGggY2FsY3VsYXRpb24uIFdlIGlnbm9yZSBoZXJlIHRoZSBmaXJzdCBk
YXRhIHBhY2thZ2UgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIHRvIHJlc2V0IHRoZSBjb3VudGVycyB3
aGVuIHdlIGlzc3VlIHRoZSByZXF1ZXN0IGFuZAogICAgIC8vIHRoYXQgZmlyc3QgcGFja2FnZSBk
ZWxpdmVyeSB3b3VsZCBpbmNsdWRlIHRoZSB0aW1lIG9mIHNlbmRpbmcgb3V0IHRoZSByZXF1ZXN0
IGFuZCBnZXR0aW5nIHRoZSBkYXRhIGJhY2suIFNpbmNlIHdlIGNhbid0IGRpc3Rpbmd1aXNoIHRo
ZQogICAgIC8vIHNlbmRpbmcgdGltZSBmcm9tIHRoZSByZWNlaXZpbmcgdGltZSwgaXQgaXMgYmV0
dGVyIHRvIGlnbm9yZSBpdC4KLSAgICBpZiAoIXN0ZDo6aXNuYW4ocHJpdi0+ZG93bmxvYWRTdGFy
dFRpbWUpKSB7Ci0gICAgICAgIHByaXYtPnRvdGFsRG93bmxvYWRlZEJ5dGVzICs9IGxlbmd0aDsK
LSAgICAgICAgZG91YmxlIHRpbWVTaW5jZVN0YXJ0ID0gKFdhbGxUaW1lOjpub3coKSAtIHByaXYt
PmRvd25sb2FkU3RhcnRUaW1lKS5zZWNvbmRzKCk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
c3JjLCAiZG93bmxvYWRlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMgaW4gJWYgc2Vjb25k
cyA9fiAlMS4wZiBieXRlcy9zZWNvbmQiLCBwcml2LT50b3RhbERvd25sb2FkZWRCeXRlcywgdGlt
ZVNpbmNlU3RhcnQKLSAgICAgICAgICAgICwgdGltZVNpbmNlU3RhcnQgPyBwcml2LT50b3RhbERv
d25sb2FkZWRCeXRlcyAvIHRpbWVTaW5jZVN0YXJ0IDogMCk7CisgICAgaWYgKCFzdGQ6OmlzbmFu
KG1lbWJlcnMtPmRvd25sb2FkU3RhcnRUaW1lKSkgeworICAgICAgICBtZW1iZXJzLT50b3RhbERv
d25sb2FkZWRCeXRlcyArPSBsZW5ndGg7CisgICAgICAgIGRvdWJsZSB0aW1lU2luY2VTdGFydCA9
IChXYWxsVGltZTo6bm93KCkgLSBtZW1iZXJzLT5kb3dubG9hZFN0YXJ0VGltZSkuc2Vjb25kcygp
OworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlIldTogZG93bmxvYWRlZCAlIiBHX0dV
SU5UNjRfRk9STUFUICIgYnl0ZXMgaW4gJWYgc2Vjb25kcyA9fiAlMS4wZiBieXRlcy9zZWNvbmQi
LCBtX3JlcXVlc3ROdW1iZXIsIG1lbWJlcnMtPnRvdGFsRG93bmxvYWRlZEJ5dGVzLCB0aW1lU2lu
Y2VTdGFydAorICAgICAgICAgICAgLCB0aW1lU2luY2VTdGFydCA/IG1lbWJlcnMtPnRvdGFsRG93
bmxvYWRlZEJ5dGVzIC8gdGltZVNpbmNlU3RhcnQgOiAwKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBwcml2LT5kb3dubG9hZFN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKLSAgICAgICAgcHJp
di0+dG90YWxEb3dubG9hZGVkQnl0ZXMgPSAwOworICAgICAgICBtZW1iZXJzLT5kb3dubG9hZFN0
YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKICAgICB9CiAKLSAgICB1aW50NjRfdCBuZXdQb3Np
dGlvbiA9IHByaXYtPnJlYWRQb3NpdGlvbiArIGxlbmd0aDsKLSAgICBpZiAoTElLRUxZIChwcml2
LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9PSBwcml2LT5yZWFkUG9zaXRpb24pKQotICAgICAgICBwcml2
LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotICAgIHByaXYtPnJlYWRQb3NpdGlv
biA9IG5ld1Bvc2l0aW9uOwotCi0gICAgdWludDY0X3QgbmV3U2l6ZSA9IDA7Ci0gICAgaWYgKHBy
aXYtPmhhdmVTaXplICYmIChuZXdQb3NpdGlvbiA+IHByaXYtPnNpemUpKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiR290IHBvc2l0aW9uIHByZXZpb3VzIGVzdGltYXRlZCBjb250
ZW50IHNpemUgKCUiIEdfR0lOVDY0X0ZPUk1BVCAiID4gJSIgR19HSU5UNjRfRk9STUFUICIpIiwg
bmV3UG9zaXRpb24sIHByaXYtPnNpemUpOwotICAgICAgICBuZXdTaXplID0gbmV3UG9zaXRpb247
Ci0gICAgfQotCi0gICAgaWYgKG5ld1NpemUpIHsKLSAgICAgICAgcHJpdi0+c2l6ZSA9IG5ld1Np
emU7Ci0gICAgICAgIGJhc2VTcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBwcml2LT5zaXplOwotICAg
ICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBnc3Rf
bWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZChHU1RfT0JKRUNUX0NBU1Qoc3JjKSkpOwotICAg
IH0KKyAgICBtZW1iZXJzLT5yZWFkUG9zaXRpb24gKz0gbGVuZ3RoOworICAgIEFTU0VSVCghbWVt
YmVycy0+aGF2ZVNpemUgfHwgbWVtYmVycy0+cmVhZFBvc2l0aW9uIDw9IG1lbWJlcnMtPnNpemUp
OwogCiAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwg
Z3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVF9DQVNUKHNyYyksCi0gICAgICAgIGdz
dF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJraXQtbmV0d29yay1zdGF0aXN0aWNzIiwgInJlYWQtcG9zaXRp
b24iLCBHX1RZUEVfVUlOVDY0LCBwcml2LT5yZWFkUG9zaXRpb24sICJzaXplIiwgR19UWVBFX1VJ
TlQ2NCwgcHJpdi0+c2l6ZSwgbnVsbHB0cikpKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXco
IndlYmtpdC1uZXR3b3JrLXN0YXRpc3RpY3MiLCAicmVhZC1wb3NpdGlvbiIsIEdfVFlQRV9VSU5U
NjQsIG1lbWJlcnMtPnJlYWRQb3NpdGlvbiwgInNpemUiLCBHX1RZUEVfVUlOVDY0LCBtZW1iZXJz
LT5zaXplLCBudWxscHRyKSkpOwogCiAgICAgY2hlY2tVcGRhdGVCbG9ja3NpemUobGVuZ3RoKTsK
IAotICAgIGlmICghcHJpdi0+d2FzUmVzcG9uc2VSZWNlaXZlZCkKLSAgICAgICAgcHJpdi0+d2Fz
UmVzcG9uc2VSZWNlaXZlZCA9IHRydWU7Ci0gICAgcHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90
aWZ5T25lKCk7Ci0KLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgYWRhcHRlckxvY2tlcihwcml2
LT5hZGFwdGVyTG9jayk7Ci0gICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9u
ZXdfd3JhcHBlZChnX21lbWR1cChkYXRhLCBsZW5ndGgpLCBsZW5ndGgpOwotICAgICAgICBnc3Rf
YWRhcHRlcl9wdXNoKHByaXYtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7Ci0gICAgICAgIHN0b3BM
b2FkZXJJZk5lZWRlZChzcmMpOwotICAgICAgICBwcml2LT5hZGFwdGVyQ29uZGl0aW9uLm5vdGlm
eU9uZSgpOwotICAgIH0KKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X3dy
YXBwZWQoZ19tZW1kdXAoZGF0YSwgbGVuZ3RoKSwgbGVuZ3RoKTsKKyAgICBnc3RfYWRhcHRlcl9w
dXNoKG1lbWJlcnMtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7CisgICAgc3RvcExvYWRlcklmTmVl
ZGVkKHNyYywgbWVtYmVycyk7CisgICAgbWVtYmVycy0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5
T25lKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmFjY2Vzc0Nv
bnRyb2xDaGVja0ZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktpdFdl
YlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwotICAgIEdTVF9FTEVNRU5U
X0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAobnVsbHB0cikpOwotICAgIHNyYy0+cHJpdi0+ZG9lc0hh
dmVFT1MgPSB0cnVlOwotICAgIHdlYktpdFdlYlNyY1N0b3AoR1NUX0JBU0VfU1JDX0NBU1Qoc3Jj
KSk7CisgICAgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+
OjpMb2NrZWRXcmFwcGVyIG1lbWJlcnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIGlmICht
ZW1iZXJzLT5yZXF1ZXN0TnVtYmVyICE9IG1fcmVxdWVzdE51bWJlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCJSJXU6ICVz
IiwgbV9yZXF1ZXN0TnVtYmVyLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5k
YXRhKCkpLCAobnVsbHB0cikpOworICAgIG1lbWJlcnMtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAg
ICBtZW1iZXJzLT5yZXNwb25zZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0KIAogdm9pZCBDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0
KCkpOworICAgIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcml2YXRlOjpTdHJlYW1pbmdNZW1iZXJz
Pjo6TG9ja2VkV3JhcHBlciBtZW1iZXJzKHNyYy0+cHJpdi0+ZGF0YU11dGV4KTsKKyAgICBpZiAo
bWVtYmVycy0+cmVxdWVzdE51bWJlciAhPSBtX3JlcXVlc3ROdW1iZXIpCisgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkgewotICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJF
U09VUkNFLCBGQUlMRUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0Zjgo
KS5kYXRhKCkpLCAobnVsbHB0cikpOworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIlIl
dTogSGF2ZSBmYWlsdXJlOiAlcyIsIG1fcmVxdWVzdE51bWJlciwgZXJyb3IubG9jYWxpemVkRGVz
Y3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3Jj
LCBSRVNPVVJDRSwgRkFJTEVELCAoIlIldTogJXMiLCBtX3JlcXVlc3ROdW1iZXIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksIChudWxscHRyKSk7CiAgICAgfQog
Ci0gICAgc3JjLT5wcml2LT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgbWVtYmVycy0+ZG9lc0hh
dmVFT1MgPSB0cnVlOworICAgIG1lbWJlcnMtPnJlc3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgp
OwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmluaXNoZWQo
UGxhdGZvcm1NZWRpYVJlc291cmNlJikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwotICAg
IFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisgICAgRGF0YU11dGV4PFdl
YktpdFdlYlNyY1ByaXZhdGU6OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIG1lbWJl
cnMoc3JjLT5wcml2LT5kYXRhTXV0ZXgpOworICAgIGlmIChtZW1iZXJzLT5yZXF1ZXN0TnVtYmVy
ICE9IG1fcmVxdWVzdE51bWJlcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHByaXYtPmlz
U2Vla2luZyAmJiAhcHJpdi0+aXNGbHVzaGluZykKLSAgICAgICAgcHJpdi0+aXNTZWVraW5nID0g
ZmFsc2U7CisgICAgbWVtYmVycy0+ZG9lc0hhdmVFT1MgPSB0cnVlOworICAgIG1lbWJlcnMtPnJl
c3BvbnNlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCiBib29sIHdlYktpdFNyY1dvdWxkVGFp
bnRPcmlnaW4oV2ViS2l0V2ViU3JjKiBzcmMsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4p
CiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBEYXRh
TXV0ZXg8V2ViS2l0V2ViU3JjUHJpdmF0ZTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBw
ZXIgbWVtYmVycyhzcmMtPnByaXYtPmRhdGFNdXRleCk7CiAKLSAgICBhdXRvKiBjYWNoZWRSZXNv
dXJjZVN0cmVhbWluZ0NsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQqPihwcml2LT5yZXNvdXJjZS0+Y2xpZW50KCkpOworICAgIGF1dG8qIGNhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudCo+KG1lbWJlcnMtPnJlc291cmNlLT5jbGllbnQoKSk7CiAgICAgZm9y
IChhdXRvJiByZXNwb25zZU9yaWdpbiA6IGNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50LT5z
ZWN1cml0eU9yaWdpbnMoKSkgewogICAgICAgICBpZiAoIW9yaWdpbi5jYW5BY2Nlc3MoKnJlc3Bv
bnNlT3JpZ2luKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dFdlYlNvdXJjZUdTdHJlYW1lci5oCmluZGV4IGYzZDk4ZmJlYzliNjQyMDViZGZiOWU1NDk3YWU1
MDIxM2U4NDEwODEuLmI2YzUyZGEyY2YzMjk4YTZiZjc3MjUzZDk1ODFlZDYxNDRkMmE4YzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgKQEAgLTM5LDE3ICszOSwx
NSBAQCBHX0JFR0lOX0RFQ0xTCiAKICNkZWZpbmUgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRF
WFRfVFlQRV9OQU1FICAid2Via2l0Lm1lZGlhLXBsYXllciIKIAotdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFdlYlNyYyAgICAgICAgV2ViS2l0V2ViU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlNyY0NsYXNzICAgV2ViS2l0V2ViU3JjQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
U3JjUHJpdmF0ZSBXZWJLaXRXZWJTcmNQcml2YXRlOworc3RydWN0IFdlYktpdFdlYlNyY1ByaXZh
dGU7CiAKLXN0cnVjdCBfV2ViS2l0V2ViU3JjIHsKK3N0cnVjdCBXZWJLaXRXZWJTcmMgewogICAg
IEdzdFB1c2hTcmMgcGFyZW50OwogCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSAqcHJpdjsKIH07
CiAKLXN0cnVjdCBfV2ViS2l0V2ViU3JjQ2xhc3Mgeworc3RydWN0IFdlYktpdFdlYlNyY0NsYXNz
IHsKICAgICBHc3RQdXNoU3JjQ2xhc3MgcGFyZW50Q2xhc3M7CiB9OwogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2ViZjAz
Njg0ZDYzMjU3YjM5MDYzMTcwMWY5Yzc4ZTBlMjMzOTA1NS4uMTI2NDljN2JlYjE2NWQwMjkyYmY5
YTlkNTAyNjhlNGJlOTgwYWFjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA0LTA5ICBB
bGljaWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVh
bWVyXSBSZXdvcmsgV2ViS2l0V2ViU3JjIHRocmVhZGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
WGFiaWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgQSB0ZXN0IGltcHJvdmVkIGl0cyBz
dGF0dXMgaW4gVGVzdEV4cGVjdGF0aW9ucyBmcm9tIHRoZSBjaGFuZ2VzIG1hZGUKKyAgICAgICAg
aW4gdGhpcyBwYXRjaC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OgorCiAyMDIwLTA0LTIzICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1dQRV0gR2FyZGVuaW5nLCB1cGRhdGUgZXhwZWN0YXRpb25zIGFmdGVyIHIyNTk3
MDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYzUxYmRk
YjllZmU0YTZhZTJmYTBlZGZhYTllZGUyNGM0Y2MyOGMwMi4uNDJmYzJkNGVmMGU5ZjZlNzk1Zjdj
Zjc3ZTJkNDQyNjk4M2E0NjExYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTEyODcsOCArMTI4Nyw2IEBAIHdlYmtpdC5vcmcvYi8yMDY2NTYgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYWNhcHR1cmUtc3RyZWFtcy9NZWRpYVN0CiB3
ZWJraXQub3JnL2IvMjA2NjU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWFj
YXB0dXJlLXN0cmVhbXMvTWVkaWFTdHJlYW1UcmFjay1nZXRTZXR0aW5ncy5odHRwcy5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjA2NjU2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvbWVkaWFjYXB0dXJlLXN0cmVhbXMvTWVkaWFTdHJlYW0tTWVkaWFFbGVtZW50LXByZWxv
YWQtbm9uZS1tYW51YWwuaHR0cHMuaHRtbCBbIENyYXNoIEZhaWx1cmUgUGFzcyBdCiAKLXdlYmtp
dC5vcmcvYi8yMDY2NTcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS12aWRlby1lbGVtZW50L3Jlc2l6ZS1kdXJpbmctcGxh
eWJhY2suaHRtbCBbIEZhaWx1cmUgXQotCiAjIExGQyAoTGF5b3V0Rm9ybWF0aW5nQ29udGV4dCBp
cyBkaXNhYmxlZCBieSBkZWZhdWx0KS4KIGZhc3QvbGF5b3V0Zm9ybWF0dGluZ2NvbnRleHQvIFsg
U2tpcCBdCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>