<?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>184462</bug_id>
          
          <creation_ts>2018-04-10 12:28:09 -0700</creation_ts>
          <short_desc>Web Automation: simulated mouse interactions should not be done until associated DOM events have been dispatched</short_desc>
          <delta_ts>2018-05-04 14:15:58 -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>WebDriver</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>184747</dependson>
          <blocked>184603</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>lforschler</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1413348</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-10 12:28:09 -0700</bug_when>
    <thetext>We do this properly for keyboard events but not mouse events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413349</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-10 12:39:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/39323336&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413872</commentid>
    <comment_count>2</comment_count>
      <attachid>337755</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-11 17:26:23 -0700</bug_when>
    <thetext>Created attachment 337755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413938</commentid>
    <comment_count>3</comment_count>
      <attachid>337755</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-04-11 23:12:40 -0700</bug_when>
    <thetext>Comment on attachment 337755
Patch

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

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.h:82
&gt; +    std::optional&lt;String&gt; message { std::nullopt };

I don&apos;t think we need to initialize this, it&apos;s already nullopt. It&apos;s a bit weird to have here some members, then the constructors and then another member, could we move this below the constructors?

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.h:84
&gt; +    AutomationCommandError(Inspector::Protocol::Automation::ErrorMessage type)

explicit

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:1882
&gt; +    m_mouseEventQueue.append(event);

I don&apos;t think we want to append events if the page was closed, I would early return if !isValid()

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:1894
&gt; +    NativeWebMouseEvent event = m_mouseEventQueue.first();

Do we want to copy the event here? I guess it could be const NativeWebMouseEvent&amp;

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:4785
&gt; +    auto&amp; event = m_mouseEventQueue.first();
&gt; +    if (event.type() != WebEvent::Type::MouseDown)
&gt; +        return nullptr;

What happens if there&apos;s a mouse move after the mouse down? This will return nullptr, but current code only resets the currently processed mouse down on mouse Up. Or is it guaranteed that mouse down is the only event in the queue?

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:5209
&gt; +        } else {
&gt; +            if (auto* automationSession = process().processPool().automationSession())

else if</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414872</commentid>
    <comment_count>4</comment_count>
      <attachid>337755</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-16 12:44:58 -0700</bug_when>
    <thetext>Comment on attachment 337755
Patch

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

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.h:82
&gt;&gt; +    std::optional&lt;String&gt; message { std::nullopt };
&gt; 
&gt; I don&apos;t think we need to initialize this, it&apos;s already nullopt. It&apos;s a bit weird to have here some members, then the constructors and then another member, could we move this below the constructors?

I&apos;ll clean this up. I just kept appending stuff as I went.

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.h:84
&gt;&gt; +    AutomationCommandError(Inspector::Protocol::Automation::ErrorMessage type)
&gt; 
&gt; explicit

Good catch.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:1882
&gt;&gt; +    m_mouseEventQueue.append(event);
&gt; 
&gt; I don&apos;t think we want to append events if the page was closed, I would early return if !isValid()

OK.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:1894
&gt;&gt; +    NativeWebMouseEvent event = m_mouseEventQueue.first();
&gt; 
&gt; Do we want to copy the event here? I guess it could be const NativeWebMouseEvent&amp;

I&apos;ll make it take a reference.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:4785
&gt;&gt; +        return nullptr;
&gt; 
&gt; What happens if there&apos;s a mouse move after the mouse down? This will return nullptr, but current code only resets the currently processed mouse down on mouse Up. Or is it guaranteed that mouse down is the only event in the queue?

I tested this and nothing seemed broken. I looked into this more after reading your question. The chain is as follows:

- Enqueue mousedown event
- UIProcess sends mousedown to WebProcess
- EventDispatcher tries to dispatch
-&gt; HTMLSelectElement::menuListDefaultEventHandler
-&gt; RenderMenuList::showPopup
-&gt; WebPopupMenu::show
-&gt; IPC to UIProcess
-&gt; WebPopupMenuProxy(Mac)::showPopupMenu

At this point WebProcess is still processing the mousedown, but now execution is back in UIProcess. It will spin a nested run loop to handle the NSEvents being sent to the dropdown. When one is selected, the native control eats the subsequent mouseup that fires over the opened dialog, so no mouseup is enqueued into m_mouseEventQueue once it is dismissed. When this returns to WebProcess it makes a fake event and dispatches it within the DOM only (i.e., not a native event).

So I don&apos;t think there is anything to change here.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:5209
&gt;&gt; +            if (auto* automationSession = process().processPool().automationSession())
&gt; 
&gt; else if

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414876</commentid>
    <comment_count>5</comment_count>
      <attachid>338027</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-16 13:03:46 -0700</bug_when>
    <thetext>Created attachment 338027
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415086</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-04-17 02:45:44 -0700</bug_when>
    <thetext>(In reply to Brian Burg from comment #4)
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:4785
&gt; &gt;&gt; +        return nullptr;
&gt; &gt; 
&gt; &gt; What happens if there&apos;s a mouse move after the mouse down? This will return nullptr, but current code only resets the currently processed mouse down on mouse Up. Or is it guaranteed that mouse down is the only event in the queue?
&gt; 
&gt; I tested this and nothing seemed broken. I looked into this more after
&gt; reading your question. The chain is as follows:
&gt; 
&gt; - Enqueue mousedown event
&gt; - UIProcess sends mousedown to WebProcess
&gt; - EventDispatcher tries to dispatch
&gt; -&gt; HTMLSelectElement::menuListDefaultEventHandler
&gt; -&gt; RenderMenuList::showPopup
&gt; -&gt; WebPopupMenu::show
&gt; -&gt; IPC to UIProcess
&gt; -&gt; WebPopupMenuProxy(Mac)::showPopupMenu
&gt; 
&gt; At this point WebProcess is still processing the mousedown, but now
&gt; execution is back in UIProcess. It will spin a nested run loop to handle the
&gt; NSEvents being sent to the dropdown. When one is selected, the native
&gt; control eats the subsequent mouseup that fires over the opened dialog, so no
&gt; mouseup is enqueued into m_mouseEventQueue once it is dismissed. When this
&gt; returns to WebProcess it makes a fake event and dispatches it within the DOM
&gt; only (i.e., not a native event).
&gt; 
&gt; So I don&apos;t think there is anything to change here.

You are right, I missed the point that events are appended but here we always get the first one, not the last one, so adding more vents doesn&apos;t affect it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415088</commentid>
    <comment_count>7</comment_count>
      <attachid>338027</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-04-17 02:50:19 -0700</bug_when>
    <thetext>Comment on attachment 338027
Proposed Fix

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

This looks good to me, but needs to be approved by a WebKit2 owner.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:56
&gt; +String AutomationCommandError::toProtocolString()

This could be const, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415265</commentid>
    <comment_count>8</comment_count>
      <attachid>338027</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-04-17 13:51:33 -0700</bug_when>
    <thetext>Comment on attachment 338027
Proposed Fix

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

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1440
&gt; +                    .setY(y - page-&gt;topContentInset())

Somehow this topContentInset() is surprising -- do we not have functions to map between whatever relevant coordinate spaces are involved?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415272</commentid>
    <comment_count>9</comment_count>
      <attachid>338027</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-17 14:21:19 -0700</bug_when>
    <thetext>Comment on attachment 338027
Proposed Fix

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

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1440
&gt;&gt; +                    .setY(y - page-&gt;topContentInset())
&gt; 
&gt; Somehow this topContentInset() is surprising -- do we not have functions to map between whatever relevant coordinate spaces are involved?

We do, in WebProcess. I don&apos;t know the equivalent from UIProcess. We do this in WebAutomationSessionProxy::computeElementLayout to go from client iframe to client main frame coordinates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415401</commentid>
    <comment_count>10</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-17 17:46:10 -0700</bug_when>
    <thetext>Committed r230743: &lt;https://trac.webkit.org/changeset/230743&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415633</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-18 12:05:26 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 184747</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416026</commentid>
    <comment_count>12</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-19 12:35:24 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #11)
&gt; Re-opened since this is blocked by bug 184747

This was rolled out because clicking apparently hangs on some systems. Upon further reflection, I wrote and tested the patch with a physical USB mouse but not a trackpad. Tapping on a trackpad generates MouseForce* events and enqueues them, but we don&apos;t dequeue them in WebPageProxy::didReceiveEvent. So the fix is to move MouseForce* cases to also be handled by m_mouseEventQueue machinery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416031</commentid>
    <comment_count>13</comment_count>
      <attachid>338352</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2018-04-19 12:51:05 -0700</bug_when>
    <thetext>Created attachment 338352
Revised Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416042</commentid>
    <comment_count>14</comment_count>
      <attachid>338352</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-19 13:37:37 -0700</bug_when>
    <thetext>Comment on attachment 338352
Revised Patch

Clearing flags on attachment: 338352

Committed r230817: &lt;https://trac.webkit.org/changeset/230817&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416043</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-19 13:37:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420878</commentid>
    <comment_count>16</comment_count>
      <attachid>338352</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-05-04 14:15:58 -0700</bug_when>
    <thetext>Comment on attachment 338352
Revised Patch

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

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:296
&gt; +static const char* webMouseEventTypeString(WebEvent::Type type)

This could have been:

TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, WebEvent::Type type)

and then you&apos;d use LOG_WITH_STREAM below.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337755</attachid>
            <date>2018-04-11 17:26:23 -0700</date>
            <delta_ts>2018-04-16 13:03:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184462-20180411172622.patch</filename>
            <type>text/plain</type>
            <size>24105</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY0YTAxZTMyYjZlOTM0YWZm
NTUyYjM3ZjQ5ZDdmYjJhNGYyZDAzZWEuLjMyZDBkZDg1MjA2OTU4OTEzYTZmOGFkMGZkNTE5NzEz
YTAxMmViZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTgtMDQtMTEgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEF1dG9tYXRpb246IHNpbXVsYXRl
ZCBtb3VzZSBpbnRlcmFjdGlvbnMgc2hvdWxkIG5vdCBiZSBkb25lIHVudGlsIGFzc29jaWF0ZWQg
RE9NIGV2ZW50cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NDYyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
OTMyMzMzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhbmQgYWN0aW9ucyBlbmRwb2ludHMg
aW4gV2ViRHJpdmVyIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGlt
cGxlbWVudGluZyB0aGUgVzNDIFdlYkRyaXZlciBjb21tYW5kICJQZXJmb3JtIEFjdGlvbnMiLCB3
ZSBuZWVkIGEgd2F5IHRvCisgICAgICAgIGtub3cgd2hlbiBhIHNpbXVsYXRlZCBtb3VzZSBldmVu
dCBoYXMgYmVlbiBmdWxseSBwcm9jZXNzZWQgYnkgV2ViUHJvY2VzcyBhbmQgaXQgaXMgb2theSB0
byBjb250aW51ZQorICAgICAgICB0byBkaXNwYXRjaCBtb3JlIHNpbXVsYXRlZCBldmVudHMuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtb3VzZSBldmVudHMgZ28gdGhyb3VnaCBhIHF1ZXVl
IGFzIHRoZXkgYXJlIGRlbGl2ZXJlZCB0byBXZWJQYWdlUHJveHkuIFRoZSBhcHByb2FjaAorICAg
ICAgICBpcyB2ZXJ5IHNpbWlsYXIgdG8gaG93IGtleSBldmVudHMgYXJlIGhhbmRsZWQuIEluIHRo
ZSBrZXkgZXZlbnQgY2FzZSwgbG90cyBvZiBXZWJFdmVudHMgY2FuIGNvbWUgb3V0CisgICAgICAg
IG9mIHR5cGluZyBvbmUga2V5c3Ryb2tlLCBzbyB0aGVzZSBuZWVkIHRvIGJlIHF1ZXVlZCB1cCBh
bmQgcmV0aXJlZCBvbmUgYnkgb25lIHdoZW4gdGhlIFdlYlByb2Nlc3MgaGFzCisgICAgICAgIGZp
bmlzaGVkIGhhbmRsaW5nIGVhY2ggZXZlbnQuIEluIHNvbWUgbW91c2UgZXZlbnQgY2FzZXMtLS1w
YXJ0aWN1bGFybHkgZmFrZSBtb3VzZSBtb3Zlcy0tLXRoZXJlIGNhbgorICAgICAgICBhbHNvIGJl
IG1vcmUgdGhhbiBvbmUgbW91c2UgZXZlbnQgd2FpdGluZyB0byBiZSBoYW5kbGVkIGJ5IFdlYlBy
b2Nlc3MuCisKKyAgICAgICAgSW4gdGhlIHBhc3QsIHRoZXNlIHF1ZXVlZCBtb3VzZSBldmVudHMg
d2VyZSB0cmFja2VkIHdpdGggc2V2ZXJhbCBtZW1iZXIgdmFyaWFibGVzIGFzIGRpZmZlcmVudAor
ICAgICAgICB1c2UgY2FzZXMgZW1lcmdlZC4gVGhlc2UgYXJlIGFsbCByZXBsYWNlZCB3aXRoIG9y
ZGluYXJ5IGRlcXVlIG9wZXJhdGlvbnMsIHN1Y2ggYXMgcGVla2luZyBvcgorICAgICAgICBjaGVj
a2luZyB0aGUgcXVldWUgbGVuZ3RoLgorCisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5oOiBB
ZGQgbG9nZ2luZyBjaGFubmVsIGZvciBtb3VzZSBldmVudHMuCisgICAgICAgICogVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpB
dXRvbWF0aW9uQ29tbWFuZEVycm9yOjp0b1Byb3RvY29sU3RyaW5nKTogQWRkIHR5cGUtc2FmZSBo
ZWxwZXIgY2xhc3MgZm9yIGNvbW1hbmQgZXJyb3JzLgorICAgICAgICBJbiBmdXR1cmUgcGF0Y2hl
cyB3ZSBjYW4gaGlkZSBrbm93bGVkZ2Ugb2YgaG93IHRoaXMgaXMgc2VudCBvdmVyIHRoZSBwcm90
b2NvbCBieSByZWx5aW5nIG1vcmUgb24KKyAgICAgICAgdGhlIGNvbnZpZW5jZSBjb25zdHJ1Y3Rv
cnMgYW5kIC50b1Byb3RvY29sU3RyaW5nKCkgbWV0aG9kLgorCisgICAgICAgIChXZWJLaXQ6Oldl
YkF1dG9tYXRpb25TZXNzaW9uOjp3aWxsU2hvd0phdmFTY3JpcHREaWFsb2cpOgorICAgICAgICBU
aGlzIHNlY3Rpb24gbmVlZHMgYWRqdXN0bWVudHMuIFNpbmNlIHBlcmZvcm1Nb3VzZUludGVyYWN0
aW9uIG5vdyBkZXBlbmRzIG9uIGtleSBldmVudHMgYmVpbmcgcHJvY2Vzc2VkCisgICAgICAgIHBy
aW9yIHRvIHJldHVybmluZyBmcm9tIHRoZSBjb21tYW5kLCB3ZSBuZWVkIHRvIGFib3J0IGFueSBr
ZXkgZXZlbnQgY2FsbGJhY2tzIHRoYXQgYXJlIHBlbmRpbmcgaWYgYW4KKyAgICAgICAgYWxlcnQg
cG9wcyB1cCBhcyBhIHJlc3VsdCBvZiBzZW5kaW5nIGEgbW91c2Vkb3duIGV2ZW50LiBBbnkgbW91
c2UgZXZlbnRzIHRoYXQgYXJlIHN0aWxsIHF1ZXVlZCB3aWxsCisgICAgICAgIGJlIGhhbmRsZWQg
d2hlbiB0aGUgYWxlcnQgaXMgZGlzbWlzc2VkIGFuZCB0aGUgbmVzdGVkIHJ1biBsb29wIGV4aXRz
LgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjptb3VzZUV2ZW50c0Zs
dXNoZWRGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246Omtl
eWJvYXJkRXZlbnRzRmx1c2hlZEZvclBhZ2UpOgorICAgICAgICBNb2Rlcm5pemUgdGhpcyBhIGJp
dC4gRG9uJ3Qgc3ByZWFkIGtub3dsZWRnZSBhYm91dCBob3cgY29tbWFuZHMgYXJlIHNlbnQgYmFj
ayBvdXQgaW50byBldmVudCBoYW5kbGluZyBjb2RlLgorICAgICAgICBPdXIgd3JhcHBlciBjYWxs
YmFja3MgaW4gcGVyZm9ybVhYWEludGVyYWN0aW9uIGhhbmRsZSB0aGUgcHJvdG9jb2wtc3BlY2lm
aWMgZGV0YWlscyBvZiB0aGUgcmVzcG9uc2UuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAgICAgQWRkIGNvZGUg
c2ltaWxhciB0byBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMgc28gdGhhdCB0aGUgY29tbWFu
ZCBkb2Vzbid0IGZpbmlzaCB1bnRpbCB0aGUgbW91c2UKKyAgICAgICAgZXZlbnQgaGFzIGJlZW4g
ZnVsbHkgaGFuZGxlZC4gVW5saWtlIGtleWJvYXJkcywgc29tZXRpbWVzIG1vdXNlIGludGVyYWN0
aW9ucyBkb24ndCB0dXJuIGludG8gV2ViRXZlbnRzCisgICAgICAgIHNvIHdlIGFsc28gbmVlZCB0
byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byBiZSB3YWl0ZWQgb24g
YmVjYXVzZSBoaXQgdGVzdGluZyBkaWQKKyAgICAgICAgbm90IHJldHVybiBhIHRhcmdldCB0byBk
ZWxpdmVyIHRoZSBldmVudCB0by4KKworICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAgICAgICAgTW9kZXJuaXplIGEg
bGl0dGxlIGJpdCB0byB1c2UgZ2VuZXJpYyBjYWxsYmFja3MgcmF0aGVyIHRoYW4gcHJvdG9jb2wt
Z2VuZXJhdGVkIGNhbGxiYWNrcyBpbiB0aGUKKyAgICAgICAgZXZlbnQgd2FpdGluZy9oYW5kbGlu
ZyBjb2RlLiBOb3cgaXQgbWF0Y2hlcyB0aGUgdHlwZXMgdXNlZCBmb3IgdGhlIG1vdXNlIGV2ZW50
IGNhc2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpBdXRvbWF0aW9uQ29tbWFuZEVycm9yOjpBdXRvbWF0
aW9uQ29tbWFuZEVycm9yKToKKyAgICAgICAgQWRkIGEgaGVscGVyIHN0cnVjdCB0byBob2xkIGFu
IGVudW1lcmF0ZWQgZXJyb3IgbmFtZSBhbmQgYW4gb3B0aW9uYWwgZnJlZS1mb3JtIGVycm9yIG1l
c3NhZ2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OndlYk1vdXNlRXZl
bnRUeXBlU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6d2ViS2V5Ym9hcmRFdmVudFR5cGVTdHJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZU1vdXNlRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NOZXh0UXVldWVkTW91c2VFdmVu
dCk6CisgICAgICAgIFNwbGl0IHRoZSBvbGQgbWV0aG9kIGludG8gaGFuZGxlTW91c2VFdmVudCAo
Y2FsbGVkIGJ5IG90aGVyIGNvZGUpIGFuZCBwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQuCisg
ICAgICAgIFRoZSBsYXR0ZXIgc2VuZHMgdGhlIG5leHQgbW91c2UgZXZlbnQgdG8gV2ViUHJvY2Vz
cywgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgaW4gZGlkUmVjZWl2ZUV2ZW50CisgICAgICAgIGlmIHRo
ZXJlIGFyZSBtb3JlIG1vdXNlIGV2ZW50cyB0byBiZSBzZW50IHRvIFdlYlByb2Nlc3MuCisKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppc1Byb2Nlc3NpbmdNb3VzZUV2ZW50cyBjb25z
dCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmN1cnJlbnRseVByb2Nl
c3NlZE1vdXNlRG93bkV2ZW50KTogUmVpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlIGRlcXVlLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCk6CisgICAgICAg
IFVuaWZ5IHRoZSBjb2RlIHBhdGhzIGZvciBkaWZmZXJlbnQgbW91c2UgZXZlbnQgdHlwZXMgdG8g
YWxsIHVzZSB0aGUgZGVxdWUuIFRoZXkgYWxzbyB3aWxsCisgICAgICAgIG5vdGlmeSB0aGUgYXV0
b21hdGlvbiBzZXNzaW9uIGlmIHRoZXJlIGFyZSBubyBtb3JlIG1vdXNlIGV2ZW50cyB0byBzZW5k
IChpLmUuLCBpbnRlcmFjdGlvbiBpcyBvdmVyKS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQpOiBBZGQgaGFuZGxpbmcgZm9yIG5l
dyBtYXAuCisKIDIwMTgtMDQtMTEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5j
b20+CiAKICAgICAgICAgW0V4dHJhIHpvb20gbW9kZV0gU3VwcG9ydCBwdXNoaW5nIGlucHV0IHZp
ZXcgY29udHJvbGxlcnMgb250byB0aGUgbmF2aWdhdGlvbiBzdGFjawpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xv
Z2dpbmcuaAppbmRleCBmNjEzOWM0MjI1ZTJjNTI0YTA5NmIyMGI5MjdkYTQyMmNhOTFiMmQyLi4w
Zjc0NGNlMDgyNDJkZGE0Mzg1NmNmODY1MmQwZDU2NTkwZDFmMjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0xvZ2dpbmcuaApAQCAtNTEsNiArNTEsNyBAQCBleHRlcm4gIkMiIHsKICAgICBNKEtleUhhbmRs
aW5nKSBcCiAgICAgTShMYXllcnMpIFwKICAgICBNKExvYWRpbmcpIFwKKyAgICBNKE1vdXNlSGFu
ZGxpbmcpIFwKICAgICBNKE5ldHdvcmspIFwKICAgICBNKE5ldHdvcmtDYWNoZSkgXAogICAgIE0o
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVQcmVsb2FkaW5nKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CmluZGV4IDQ4NWQ3NTU3NDEwNmIyZjg2MDVlY2VhYWRlODdjMmMzM2VhOGIxNDUuLmIzMDI4M2M4
YmZhMTBlNGJiMTA2MTA0ZDNhNTY5N2NiZWExNjBkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CkBAIC01Myw2ICs1MywxNSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAorU3RyaW5nIEF1dG9tYXRpb25Db21tYW5kRXJyb3I6OnRvUHJvdG9jb2xT
dHJpbmcoKQoreworICAgIFN0cmluZyBwcm90b2NvbEVycm9yTmFtZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0eXBlKTsKKyAg
ICBpZiAoIW1lc3NhZ2UuaGFzX3ZhbHVlKCkpCisgICAgICAgIHJldHVybiBwcm90b2NvbEVycm9y
TmFtZTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKHByb3RvY29sRXJyb3JOYW1lLCBlcnJvck5h
bWVBbmREZXRhaWxzU2VwYXJhdG9yLCBtZXNzYWdlLnZhbHVlKCkpOworfQorICAgIAogLy8gwqc4
LiBTZXNzaW9ucwogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLXNlc3Np
b24tcGFnZS1sb2FkLXRpbWVvdXQKIHN0YXRpYyBjb25zdCBTZWNvbmRzIGRlZmF1bHRQYWdlTG9h
ZFRpbWVvdXQgPSAzMDBfczsKQEAgLTU4Myw2ICs1OTIsMjAgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6d2lsbFNob3dKYXZhU2NyaXB0RGlhbG9nKFdlYlBhZ2VQcm94eSYgcGFnZSkKICAg
ICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUodW5leHBlY3RlZEFsZXJ0T3BlbkVy
cm9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFt
X3BlbmRpbmdNb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGtleSA6IGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdNb3VzZUV2
ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmtleXMoKSkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFn
ZS50YWtlKGtleSk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9wZW5kaW5nS2V5Ym9hcmRF
dmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBrZXkgOiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVk
Q2FsbGJhY2tzUGVyUGFnZS5rZXlzKCkpKSB7CisgICAgICAgICAgICAgICAgYXV0byBjYWxsYmFj
ayA9IG1fcGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UudGFrZShr
ZXkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9KTsKIH0KICAgICAKQEAgLTY5OCwxMyArNzIxLDIzIEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RvckZyb250ZW5kTG9hZGVkKGNvbnN0IFdl
YlBhZ2VQcm94eSYgcGFnZSkKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOwogfQogCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptb3VzZUV2
ZW50c0ZsdXNoZWRGb3JQYWdlKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFnZSkKK3sKKyAgICBpZiAo
YXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ01vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBh
Z2UudGFrZShwYWdlLnBhZ2VJRCgpKSkgeworICAgICAgICBpZiAobV9wZW5kaW5nTW91c2VFdmVu
dHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3NpbXVs
YXRpbmdVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAgICBjYWxsYmFjayhzdGQ6Om51
bGxvcHQpOworICAgIH0KK30KKwogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6a2V5Ym9hcmRF
dmVudHNGbHVzaGVkRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmIHBhZ2UpCiB7CiAgICAgaWYg
KGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdLZXlib2FyZEV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQ
ZXJQYWdlLnRha2UocGFnZS5wYWdlSUQoKSkpIHsKLSAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNj
ZXNzKEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotCiAgICAgICAgIGlmIChtX3BlbmRpbmdLZXli
b2FyZEV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IG1fc2ltdWxhdGluZ1VzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworCisgICAgICAgIGNhbGxiYWNr
KHN0ZDo6bnVsbG9wdCk7CiAgICAgfQogfQogCkBAIC0xMzk4LDEyICsxNDMxLDM0IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBjb25zdCBKCiAgICAgICAgIGlmICghcGFyc2VkQnV0dG9uKQogICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2J1dHRvbicgaXMgaW52YWxpZC4iKTsKIAotICAgICAg
ICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCB2aWV3UG9zaXRpb24sIHBh
cnNlZEludGVyYWN0aW9uLnZhbHVlKCksIHBhcnNlZEJ1dHRvbi52YWx1ZSgpLCBrZXlNb2RpZmll
cnMpOworICAgICAgICBhdXRvIG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrID0gW3Byb3RlY3Rl
ZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBwYWdlID0gcGFnZS5jb3B5UmVmKCksIHgsIHldKHN0ZDo6b3B0aW9uYWw8QXV0b21hdGlv
bkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAg
ICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3IudmFsdWUoKS50b1Byb3RvY29sU3Ry
aW5nKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNl
bmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUo
KQorICAgICAgICAgICAgICAgICAgICAuc2V0WCh4KQorICAgICAgICAgICAgICAgICAgICAuc2V0
WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCisgICAgICAgICAgICAgICAgICAgIC5yZWxl
YXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGF1dG8mIGNhbGxi
YWNrSW5NYXAgPSBtX3BlbmRpbmdNb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmFk
ZChwYWdlLT5wYWdlSUQoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAo
Y2FsbGJhY2tJbk1hcCkKKyAgICAgICAgICAgIGNhbGxiYWNrSW5NYXAoQVVUT01BVElPTl9DT01N
QU5EX0VSUk9SX1dJVEhfTkFNRShUaW1lb3V0KSk7CisgICAgICAgIGNhbGxiYWNrSW5NYXAgPSBX
VEZNb3ZlKG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAotICAgICAgICBjYWxsYmFjay0+
c2VuZFN1Y2Nlc3MoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0
ZSgpCi0gICAgICAgICAgICAuc2V0WCh4KQotICAgICAgICAgICAgLnNldFkoeSAtIHBhZ2UtPnRv
cENvbnRlbnRJbnNldCgpKQotICAgICAgICAgICAgLnJlbGVhc2UoKSk7CisgICAgICAgIC8vIFRo
aXMgaXMgY2xlYXJlZCB3aGVuIGFsbCBtb3VzZSBldmVudHMgYXJlIGZsdXNoZWQuCisgICAgICAg
IG1fc2ltdWxhdGluZ1VzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisKKyAgICAgICAgcGxhdGZvcm1T
aW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24ocGFnZSwgdmlld1Bvc2l0aW9uLCBwYXJzZWRJbnRlcmFj
dGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0b24udmFsdWUoKSwga2V5TW9kaWZpZXJzKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIElmIHRoZSBldmVudCBsb2NhdGlvbiB3YXMgcHJldmlvdXNseSBjbGlw
cGVkIGFuZCBkb2VzIG5vdCBoaXQgdGVzdCBhbnl0aGluZyBpbiB0aGUgd2luZG93LCB0aGVuIGl0
IHdpbGwgbm90IGJlIHByb2Nlc3NlZC4KKyAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0
aCBwcmUtVzNDIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMsIGRvbid0IG1ha2UgdGhpcyBhIGhhcmQg
ZXJyb3I7IGp1c3QgZG8gbm90aGluZyBzaWxlbnRseS4KKyAgICAgICAgLy8gSW4gVzNDLW9ubHkg
Y29kZSBwYXRocywgd2UgY2FuIHJlamVjdCBhbnkgcG9pbnRlciBhY3Rpb25zIHdob3NlIGNvb3Jk
aW5hdGVzIGFyZSBvdXRzaWRlIHRoZSB2aWV3cG9ydCByZWN0LgorICAgICAgICBpZiAoY2FsbGJh
Y2tJbk1hcCAmJiAhcGFnZS0+aXNQcm9jZXNzaW5nTW91c2VFdmVudHMoKSkgeworICAgICAgICAg
ICAgYXV0byBjYWxsYmFja1RvQ2FuY2VsID0gbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2Fs
bGJhY2tzUGVyUGFnZS50YWtlKHBhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgIGNhbGxiYWNr
VG9DYW5jZWwoc3RkOjpudWxsb3B0KTsKKyAgICAgICAgfQogICAgIH0pOwogI2VuZGlmIC8vIFVT
RShBUFBLSVQpIHx8IFBMQVRGT1JNKEdUSykKIH0KQEAgLTE0NzMsMTAgKzE1MjgsMTcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICBpZiAoIWFjdGlvbnNUb1BlcmZvcm0uc2l6ZSgpKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRl
cm5hbEVycm9yLCAiTm8gYWN0aW9ucyB0byBwZXJmb3JtLiIpOwogCisgICAgYXV0byBrZXlib2Fy
ZEV2ZW50c0ZsdXNoZWRDYWxsYmFjayA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdl
KV0oc3RkOjpvcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPiBlcnJvcikgeworICAgICAg
ICBpZiAoZXJyb3IpCisgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3IudmFs
dWUoKS50b1Byb3RvY29sU3RyaW5nKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxs
YmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAgICB9OworCiAgICAgYXV0byYgY2FsbGJhY2tJbk1hcCA9
IG1fcGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UuYWRkKHBhZ2Ut
PnBhZ2VJRCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGNhbGxiYWNrSW5N
YXApCi0gICAgICAgIGNhbGxiYWNrSW5NYXAtPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVG
SU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpKTsKLSAgICBjYWxsYmFja0luTWFwID0gV1RGTW92ZShj
YWxsYmFjayk7CisgICAgICAgIGNhbGxiYWNrSW5NYXAoQVVUT01BVElPTl9DT01NQU5EX0VSUk9S
X1dJVEhfTkFNRShUaW1lb3V0KSk7CisgICAgY2FsbGJhY2tJbk1hcCA9IFdURk1vdmUoa2V5Ym9h
cmRFdmVudHNGbHVzaGVkQ2FsbGJhY2spOwogCiAgICAgLy8gVGhpcyBpcyBjbGVhcmVkIHdoZW4g
YWxsIGtleWJvYXJkIGV2ZW50cyBhcmUgZmx1c2hlZC4KICAgICBtX3NpbXVsYXRpbmdVc2VySW50
ZXJhY3Rpb24gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCmluZGV4IDU3MDY3ODI5OWRmNWIzNGY4
ZTU0MDFmMjkzOWNhNGIxMDVmNmU3Y2UuLjNhZTM1ZTZmN2VjZGM1OGEzZGQ5NWU5ODA4MGVmNGEz
Mjk1Y2E3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzYsNiArNzYsMjEgQEAgY2xhc3Mg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNs
YXNzIFdlYlByb2Nlc3NQb29sOwogCitzdHJ1Y3QgQXV0b21hdGlvbkNvbW1hbmRFcnJvciB7Citw
dWJsaWM6CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RXJyb3JNZXNzYWdl
IHR5cGU7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1lc3NhZ2UgeyBzdGQ6Om51bGxvcHQg
fTsKKyAgICAKKyAgICBBdXRvbWF0aW9uQ29tbWFuZEVycm9yKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkVycm9yTWVzc2FnZSB0eXBlKQorICAgICAgICA6IHR5cGUodHlwZSkgeyB9
CisKKyAgICBBdXRvbWF0aW9uQ29tbWFuZEVycm9yKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkVycm9yTWVzc2FnZSB0eXBlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgICAg
IDogdHlwZSh0eXBlKQorICAgICAgICAsIG1lc3NhZ2UobWVzc2FnZSkgeyB9CisgICAgCisgICAg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoKTsKK307CisKIGNsYXNzIFdlYkF1dG9tYXRpb25TZXNz
aW9uIGZpbmFsIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QXV0
b21hdGlvblNlc3Npb24+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90ZUF1dG9tYXRp
b25UYXJnZXQKQEAgLTk4LDYgKzExMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRvY3VtZW50TG9h
ZGVkRm9yRnJhbWUoY29uc3QgV2ViRnJhbWVQcm94eSYpOwogICAgIHZvaWQgaW5zcGVjdG9yRnJv
bnRlbmRMb2FkZWQoY29uc3QgV2ViUGFnZVByb3h5Jik7CiAgICAgdm9pZCBrZXlib2FyZEV2ZW50
c0ZsdXNoZWRGb3JQYWdlKGNvbnN0IFdlYlBhZ2VQcm94eSYpOworICAgIHZvaWQgbW91c2VFdmVu
dHNGbHVzaGVkRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKTsKICAgICB2b2lkIHdpbGxDbG9z
ZVBhZ2UoY29uc3QgV2ViUGFnZVByb3h5Jik7CiAgICAgdm9pZCBoYW5kbGVSdW5PcGVuUGFuZWwo
Y29uc3QgV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViRnJhbWVQcm94eSYsIGNvbnN0IEFQSTo6T3Bl
blBhbmVsUGFyYW1ldGVycyYsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkmKTsKICAg
ICB2b2lkIHdpbGxTaG93SmF2YVNjcmlwdERpYWxvZyhXZWJQYWdlUHJveHkmKTsKQEAgLTIzNSw3
ICsyNTEsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+PiBtX3BlbmRpbmdOb3JtYWxOYXZp
Z2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJGcmFtZTsKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
Pj4gbV9wZW5kaW5nRWFnZXJOYXZpZ2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJG
cmFtZTsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPj4gbV9wZW5kaW5nSW5zcGVjdG9yQ2FsbGJhY2tzUGVyUGFn
ZTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlcjo6Q2FsbGJhY2tCYXNlPj4gbV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJh
Y2tzUGVyUGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0
aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPj4gbV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNG
bHVzaGVkQ2FsbGJhY2tzUGVyUGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBGdW5jdGlvbjx2
b2lkKHN0ZDo6b3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPj4gbV9wZW5kaW5nTW91
c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZTsKIAogICAgIHVpbnQ2NF90IG1fbmV4dEV2
YWx1YXRlSmF2YVNjcmlwdENhbGxiYWNrSUQgeyAxIH07CiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXZh
bHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4+IG1fZXZhbHVhdGVKYXZhU2NyaXB0RnVu
Y3Rpb25DYWxsYmFja3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgKaW5kZXggMmM1ZGIx
OTdiYTU2M2UwNzMxZDljN2M5ZjVhNjM2MTI1MGQ2ODcwNC4uMTdlOWEzN2M4NDM5ODU0NDg5NjFh
MzU0MzA0Yjk5ZmFiMjlhMjM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaApAQCAt
MzgsNiArMzgsOCBAQAogI2RlZmluZSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTUVTU0FH
RShlcnJvck1lc3NhZ2UpIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShWQUxJREFURURfRVJST1JfTUVTU0FHRShlcnJvck1lc3NhZ2Up
KQogI2RlZmluZSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTUVTU0FHRV9BTkRfREVUQUlM
UyhlcnJvck1lc3NhZ2UsIGRldGFpbHNTdHJpbmcpIG1ha2VTdHJpbmcoSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFZBTElEQVRFRF9F
UlJPUl9NRVNTQUdFKGVycm9yTWVzc2FnZSkpLCBlcnJvck5hbWVBbmREZXRhaWxzU2VwYXJhdG9y
LCBkZXRhaWxzU3RyaW5nKQogCisjZGVmaW5lIEFVVE9NQVRJT05fQ09NTUFORF9FUlJPUl9XSVRI
X05BTUUoZXJyb3JOYW1lKSBBdXRvbWF0aW9uQ29tbWFuZEVycm9yKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkVycm9yTWVzc2FnZTo6ZXJyb3JOYW1lKQorCiAvLyBDb252ZW5pZW5j
ZSBtYWNyb3MgZm9yIGZpbGxpbmcgaW4gdGhlIGVycm9yIHN0cmluZyBvZiBzeW5jaHJvbm91cyBj
b21tYW5kcyBpbiBiYWlsb3V0IGJyYW5jaGVzLgogI2RlZmluZSBTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKGVycm9yTmFtZSkgXAogZG8geyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAppbmRleCA1Y2ExYmQyODAyNGMzZjZkNzMwYTMyYTYyZjJmNzlhMThl
NTMzNTViLi42NjA3ZDBkZDk4YzRiODQyMDNhNWUxODVlMWYzMDQ1YmMyOGE3YWFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTI5MSwyMSArMjkxLDMyIEBA
IEV4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHM6OlJlY29yZCogRXhjZWVkZWREYXRhYmFzZVF1
b3RhUmVjb3Jkczo6bmV4dCgpCiB9CiAKICNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgY29uc3Qg
Y2hhciogd2ViTW91c2VFdmVudFR5cGVTdHJpbmcoV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246CisgICAgICAg
IHJldHVybiAiTW91c2VEb3duIjsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgICAg
ICByZXR1cm4gIk1vdXNlVXAiOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAg
ICAgcmV0dXJuICJNb3VzZU1vdmUiOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIjx1bmtub3duPiI7CisgICAgfQorfQorCiBzdGF0
aWMgY29uc3QgY2hhciogd2ViS2V5Ym9hcmRFdmVudFR5cGVTdHJpbmcoV2ViRXZlbnQ6OlR5cGUg
dHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3du
OgogICAgICAgICByZXR1cm4gIktleURvd24iOwotICAgIAogICAgIGNhc2UgV2ViRXZlbnQ6Oktl
eVVwOgogICAgICAgICByZXR1cm4gIktleVVwIjsKLSAgICAKICAgICBjYXNlIFdlYkV2ZW50OjpS
YXdLZXlEb3duOgogICAgICAgICByZXR1cm4gIlJhd0tleURvd24iOwotICAgIAogICAgIGNhc2Ug
V2ViRXZlbnQ6OkNoYXI6CiAgICAgICAgIHJldHVybiAiQ2hhciI7Ci0gICAgCiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAiPHVua25v
d24+IjsKQEAgLTE4NjcsMzIgKzE4NzgsMjkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldERyYWdD
YXJldFJlY3QoY29uc3QgSW50UmVjdCYgZHJhZ0NhcmV0UmVjdCkKICNlbmRpZiAvLyBFTkFCTEUo
RFJBR19TVVBQT1JUKQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VFdmVudChjb25z
dCBOYXRpdmVXZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBtX21vdXNlRXZlbnRRdWV1ZS5h
cHBlbmQoZXZlbnQpOworICAgIGlmIChtX21vdXNlRXZlbnRRdWV1ZS5zaXplKCkgPT0gMSkgLy8g
T3RoZXJ3aXNlLCBjYWxsZWQgZnJvbSBEaWRSZWNlaXZlRXZlbnQgbWVzc2FnZSBoYW5kbGVyLgor
ICAgICAgICBwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKTsKK30KKyAgICAKK3ZvaWQgV2Vi
UGFnZVByb3h5Ojpwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKQogewogICAgIGlmICghaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQoIW1fbW91c2VFdmVudFF1ZXVl
LmlzRW1wdHkoKSk7CisKKyAgICBOYXRpdmVXZWJNb3VzZUV2ZW50IGV2ZW50ID0gbV9tb3VzZUV2
ZW50UXVldWUuZmlyc3QoKTsKKyAgICAKICAgICBpZiAobV9wYWdlQ2xpZW50LndpbmRvd0lzRnJv
bnRXaW5kb3dVbmRlck1vdXNlKGV2ZW50KSkKICAgICAgICAgc2V0VG9vbFRpcChTdHJpbmcoKSk7
CiAKICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IHN0YXJ0IHRoZSByZXNwb25zaXZlbmVzcyB0
aW1lciBiZWNhdXNlIG1vdXNlIG1vdmUgc2hvdWxkIG5vdCBpbmRpY2F0ZSBpbnRlcmFjdGlvbi4K
ICAgICBpZiAoZXZlbnQudHlwZSgpICE9IFdlYkV2ZW50OjpNb3VzZU1vdmUpCiAgICAgICAgIG1f
cHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGlmIChtX3Byb2Nlc3NpbmdNb3VzZU1vdmVFdmVudCkgewotICAgICAgICAgICAgbV9uZXh0
TW91c2VNb3ZlRXZlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE5hdGl2ZVdlYk1vdXNlRXZlbnQ+KGV2
ZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fcHJvY2Vz
c2luZ01vdXNlTW92ZUV2ZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTA0PiBXZSBuZWVkIHRvIGtlZXAgdHJhY2sg
b2YgdGhlIG1vdXNlIGRvd24gZXZlbnQgaW4gdGhlIGNhc2Ugd2hlcmUgd2UKLSAgICAvLyBkaXNw
bGF5IGEgcG9wdXAgbWVudSBmb3Igc2VsZWN0IGVsZW1lbnRzLiBXaGVuIHRoZSB1c2VyIGNoYW5n
ZXMgdGhlIHNlbGVjdGVkIGl0ZW0sCi0gICAgLy8gd2UgZmFrZSBhIG1vdXNlIHVwIGV2ZW50IGJ5
IHVzaW5nIHRoaXMgc3RvcmVkIGRvd24gZXZlbnQuIFRoaXMgZXZlbnQgZ2V0cyBjbGVhcmVkCi0g
ICAgLy8gd2hlbiB0aGUgbW91c2UgdXAgbWVzc2FnZSBpcyByZWNlaXZlZCBmcm9tIFdlYlByb2Nl
c3MuCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6TW91c2VEb3duKQotICAgICAg
ICBtX2N1cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxO
YXRpdmVXZWJNb3VzZUV2ZW50PihldmVudCk7CiAKKyAgICBMT0coTW91c2VIYW5kbGluZywgIiBV
SSBwcm9jZXNzOiBzZW50IG1vdXNlRXZlbnQgZnJvbSBoYW5kbGVNb3VzZUV2ZW50Iik7CiAgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpNb3VzZUV2ZW50KGV2ZW50KSwgbV9w
YWdlSUQpOwogfQogCkBAIC00NzU4LDkgKzQ3NjYsMjUgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNl
dFRleHRGcm9tSXRlbUZvclBvcHVwTWVudShXZWJQb3B1cE1lbnVQcm94eSosIGludDMyX3QgaW5k
ZXgKICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRleHRGb3JBY3Rp
dmVQb3B1cE1lbnUoaW5kZXgpLCBtX3BhZ2VJRCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVByb3h5Ojpp
c1Byb2Nlc3NpbmdNb3VzZUV2ZW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX21vdXNlRXZl
bnRRdWV1ZS5pc0VtcHR5KCk7Cit9CisKIE5hdGl2ZVdlYk1vdXNlRXZlbnQqIFdlYlBhZ2VQcm94
eTo6Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKQogewotICAgIHJldHVybiBtX2N1
cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50LmdldCgpOworICAgIC8vIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MDQ+IFdlIG5lZWQgdG8ga2VlcCB0cmFj
ayBvZiB0aGUgbW91c2UgZG93biBldmVudCBpbiB0aGUgY2FzZSB3aGVyZSB3ZQorICAgIC8vIGRp
c3BsYXkgYSBwb3B1cCBtZW51IGZvciBzZWxlY3QgZWxlbWVudHMuIFdoZW4gdGhlIHVzZXIgY2hh
bmdlcyB0aGUgc2VsZWN0ZWQgaXRlbSwKKyAgICAvLyB3ZSBmYWtlIGEgbW91c2UgdXAgZXZlbnQg
YnkgdXNpbmcgdGhpcyBzdG9yZWQgZG93biBldmVudC4KKworICAgIGlmIChtX21vdXNlRXZlbnRR
dWV1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8m
IGV2ZW50ID0gbV9tb3VzZUV2ZW50UXVldWUuZmlyc3QoKTsKKyAgICBpZiAoZXZlbnQudHlwZSgp
ICE9IFdlYkV2ZW50OjpUeXBlOjpNb3VzZURvd24pCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuICZldmVudDsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCog
bWVzc2FnZUJvZHkpCkBAIC01MTY5LDE1ICs1MTkzLDI1IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRSZWNlaXZlRXZlbnQodWludDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKQogICAgIGNh
c2UgV2ViRXZlbnQ6Ok5vVHlwZToKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJFdmVudDo6
TW91c2VNb3ZlOgotICAgICAgICBtX3Byb2Nlc3NpbmdNb3VzZU1vdmVFdmVudCA9IGZhbHNlOwot
ICAgICAgICBpZiAobV9uZXh0TW91c2VNb3ZlRXZlbnQpCi0gICAgICAgICAgICBoYW5kbGVNb3Vz
ZUV2ZW50KCpzdGQ6OmV4Y2hhbmdlKG1fbmV4dE1vdXNlTW92ZUV2ZW50LCBudWxscHRyKSk7Ci0g
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKKyAgICBjYXNlIFdl
YkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIExPRyhNb3VzZUhhbmRsaW5nLCAiV2ViUGFnZVBy
b3h5OjpkaWRSZWNlaXZlRXZlbnQ6ICVzIChxdWV1ZSBlbXB0eSAlZCkiLCB3ZWJNb3VzZUV2ZW50
VHlwZVN0cmluZyh0eXBlKSwgbV9tb3VzZUV2ZW50UXVldWUuaXNFbXB0eSgpKTsKKworICAgICAg
ICAvLyBSZXRpcmUgdGhlIGxhc3Qgc2VudCBldmVudCBub3cgdGhhdCBXZWJQcm9jZXNzIGlzIGRv
bmUgaGFuZGxpbmcgaXQuCisgICAgICAgIE1FU1NBR0VfQ0hFQ0soIW1fbW91c2VFdmVudFF1ZXVl
LmlzRW1wdHkoKSk7CisgICAgICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQgZXZlbnQgPSBtX21vdXNl
RXZlbnRRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgTUVTU0FHRV9DSEVDSyh0eXBlID09IGV2
ZW50LnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFtX21vdXNlRXZlbnRRdWV1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIExPRyhNb3VzZUhhbmRsaW5nLCAiIFVJIHByb2Nlc3M6IGhhbmRsaW5n
IGEgcXVldWVkIG1vdXNlIGV2ZW50IGZyb20gZGlkUmVjZWl2ZUV2ZW50Iik7CisgICAgICAgICAg
ICBwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IHByb2Nlc3MoKS5wcm9jZXNzUG9v
bCgpLmF1dG9tYXRpb25TZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgYXV0b21hdGlvblNlc3Np
b24tPm1vdXNlRXZlbnRzRmx1c2hlZEZvclBhZ2UoKnRoaXMpOworICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6Ci0gICAgICAgIG1fY3VycmVudGx5
UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICB9
CisKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDoKICAgICBjYXNlIFdlYkV2
ZW50OjpNb3VzZUZvcmNlRG93bjoKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlVXA6CkBA
IC01MjEwLDcgKzUyNDQsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVp
bnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wgaGFuZGxlZCkKIAogICAgICAgICBNRVNTQUdFX0NIRUNL
KHR5cGUgPT0gZXZlbnQudHlwZSgpKTsKIAotICAgICAgICBpZiAoIW1fa2V5RXZlbnRRdWV1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgYm9vbCBjYW5Qcm9jZXNzTW9yZUtleUV2ZW50cyA9ICFtX2tl
eUV2ZW50UXVldWUuaXNFbXB0eSgpOworICAgICAgICBpZiAoY2FuUHJvY2Vzc01vcmVLZXlFdmVu
dHMpIHsKICAgICAgICAgICAgIExPRyhLZXlIYW5kbGluZywgIiBVSSBwcm9jZXNzOiBzZW50IGtl
eUV2ZW50IGZyb20gZGlkUmVjZWl2ZUV2ZW50Iik7CiAgICAgICAgICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OktleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpKSwg
bV9wYWdlSUQpOwogICAgICAgICB9CkBAIC01MjI0LDcgKzUyNTksNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVpbnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wgaGFuZGxlZCkK
ICAgICAgICAgICAgIG1fdWlDbGllbnQtPmRpZE5vdEhhbmRsZUtleUV2ZW50KHRoaXMsIGV2ZW50
KTsKIAogICAgICAgICAvLyBOb3RpZnkgdGhlIHNlc3Npb24gYWZ0ZXIgLVtOU0FwcCBzZW5kRXZl
bnQ6XSBoYXMgYSBjcmFjayBhdCB0dXJuaW5nIHRoZSBldmVudCBpbnRvIGFuIGFjdGlvbi4KLSAg
ICAgICAgaWYgKG1fa2V5RXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFjYW5Q
cm9jZXNzTW9yZUtleUV2ZW50cykgewogICAgICAgICAgICAgaWYgKGF1dG8qIGF1dG9tYXRpb25T
ZXNzaW9uID0gcHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkKICAg
ICAgICAgICAgICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+a2V5Ym9hcmRFdmVudHNGbHVzaGVkRm9y
UGFnZSgqdGhpcyk7CiAgICAgICAgIH0KQEAgLTU4MjgsMTUgKzU4NjMsMTAgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQoUHJvY2Vzc1Rlcm1pbmF0aW9u
UmVhc29uIHRlcm1pbmEKICAgICBtX3BlbmRpbmdMZWFybk9ySWdub3JlV29yZE1lc3NhZ2VDb3Vu
dCA9IDA7CiAKICAgICAvLyBDYW4ndCBleHBlY3QgRGlkUmVjZWl2ZUV2ZW50IG5vdGlmaWNhdGlv
bnMgZnJvbSBhIGNyYXNoZWQgd2ViIHByb2Nlc3MuCisgICAgbV9tb3VzZUV2ZW50UXVldWUuY2xl
YXIoKTsKICAgICBtX2tleUV2ZW50UXVldWUuY2xlYXIoKTsKICAgICBtX3doZWVsRXZlbnRRdWV1
ZS5jbGVhcigpOwogICAgIG1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMuY2xlYXIoKTsK
LQotICAgIG1fbmV4dE1vdXNlTW92ZUV2ZW50ID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRseVBy
b2Nlc3NlZE1vdXNlRG93bkV2ZW50ID0gbnVsbHB0cjsKLQotICAgIG1fcHJvY2Vzc2luZ01vdXNl
TW92ZUV2ZW50ID0gZmFsc2U7Ci0KICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCiAgICAgbV90b3VjaEV2ZW50UXVldWUuY2xlYXIoKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAxNjZiZjkwYzA4ODQx
MWU3OTk2MzQ1YmJiNDk5ZmQxZTc1MDY5MTMwLi5hZTJjNjU5NjZjZDQ4NDk4NTNjNzcwNTM1NmQz
Nzk3NWU2MmE0NGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAt
Njg5LDcgKzY4OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IH0K
ICNlbmRpZgogCisgICAgYm9vbCBpc1Byb2Nlc3NpbmdNb3VzZUV2ZW50cygpIGNvbnN0OworICAg
IHZvaWQgcHJvY2Vzc05leHRRdWV1ZWRNb3VzZUV2ZW50KCk7CiAgICAgdm9pZCBoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmKTsKKwogICAgIHZvaWQgaGFuZGxlV2hl
ZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50Jik7CiAgICAgdm9pZCBoYW5kbGVLZXli
b2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKIApAQCAtMTkzMCw2ICsx
OTMzLDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9kZWNpZGVQ
b2xpY3lGb3JSZXNwb25zZVJlcXVlc3Q7CiAgICAgYm9vbCBtX3Nob3VsZFN1cHByZXNzQXBwTGlu
a3NJbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24geyBmYWxzZSB9OwogCisgICAgRGVxdWU8
TmF0aXZlV2ViTW91c2VFdmVudD4gbV9tb3VzZUV2ZW50UXVldWU7CiAgICAgRGVxdWU8TmF0aXZl
V2ViS2V5Ym9hcmRFdmVudD4gbV9rZXlFdmVudFF1ZXVlOwogICAgIERlcXVlPE5hdGl2ZVdlYldo
ZWVsRXZlbnQ+IG1fd2hlZWxFdmVudFF1ZXVlOwogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8TmF0aXZlV2ViV2hlZWxFdmVudD4+PiBtX2N1cnJlbnRseVByb2Nlc3NlZFdoZWVsRXZl
bnRzOwpAQCAtMTkzNywxMCArMTk0MSw2IEBAIHByaXZhdGU6CiAgICAgRGVxdWU8TmF0aXZlV2Vi
R2VzdHVyZUV2ZW50PiBtX2dlc3R1cmVFdmVudFF1ZXVlOwogI2VuZGlmCiAKLSAgICBib29sIG1f
cHJvY2Vzc2luZ01vdXNlTW92ZUV2ZW50IHsgZmFsc2UgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmF0aXZlV2ViTW91c2VFdmVudD4gbV9uZXh0TW91c2VNb3ZlRXZlbnQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPE5hdGl2ZVdlYk1vdXNlRXZlbnQ+IG1fY3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3du
RXZlbnQ7Ci0KICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHN0cnVjdCBUb3VjaEV2ZW50
VHJhY2tpbmcgewogICAgICAgICBXZWJDb3JlOjpUcmFja2luZ1R5cGUgdG91Y2hGb3JjZUNoYW5n
ZWRUcmFja2luZyB7IFdlYkNvcmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmcgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338027</attachid>
            <date>2018-04-16 13:03:46 -0700</date>
            <delta_ts>2018-04-19 12:51:04 -0700</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-184462-20180416130345.patch</filename>
            <type>text/plain</type>
            <size>24228</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkwN2IwMGU3Y2M1YTRhOGMy
ZjM5YmQzOTRlN2IyYmVhOTg1MGI3MTUuLjU2NTVlOTAzZGU0NTgyY2Q4MDMxYzVkNGI3ZmJiNGRj
Njc0YWVmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTgtMDQtMTEgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEF1dG9tYXRpb246IHNpbXVsYXRl
ZCBtb3VzZSBpbnRlcmFjdGlvbnMgc2hvdWxkIG5vdCBiZSBkb25lIHVudGlsIGFzc29jaWF0ZWQg
RE9NIGV2ZW50cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NDYyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
OTMyMzMzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhbmQgYWN0aW9ucyBlbmRwb2ludHMg
aW4gV2ViRHJpdmVyIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGlt
cGxlbWVudGluZyB0aGUgVzNDIFdlYkRyaXZlciBjb21tYW5kICJQZXJmb3JtIEFjdGlvbnMiLCB3
ZSBuZWVkIGEgd2F5IHRvCisgICAgICAgIGtub3cgd2hlbiBhIHNpbXVsYXRlZCBtb3VzZSBldmVu
dCBoYXMgYmVlbiBmdWxseSBwcm9jZXNzZWQgYnkgV2ViUHJvY2VzcyBhbmQgaXQgaXMgb2theSB0
byBjb250aW51ZQorICAgICAgICB0byBkaXNwYXRjaCBtb3JlIHNpbXVsYXRlZCBldmVudHMuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtb3VzZSBldmVudHMgZ28gdGhyb3VnaCBhIHF1ZXVl
IGFzIHRoZXkgYXJlIGRlbGl2ZXJlZCB0byBXZWJQYWdlUHJveHkuIFRoZSBhcHByb2FjaAorICAg
ICAgICBpcyB2ZXJ5IHNpbWlsYXIgdG8gaG93IGtleSBldmVudHMgYXJlIGhhbmRsZWQuIEluIHRo
ZSBrZXkgZXZlbnQgY2FzZSwgbG90cyBvZiBXZWJFdmVudHMgY2FuIGNvbWUgb3V0CisgICAgICAg
IG9mIHR5cGluZyBvbmUga2V5c3Ryb2tlLCBzbyB0aGVzZSBuZWVkIHRvIGJlIHF1ZXVlZCB1cCBh
bmQgcmV0aXJlZCBvbmUgYnkgb25lIHdoZW4gdGhlIFdlYlByb2Nlc3MgaGFzCisgICAgICAgIGZp
bmlzaGVkIGhhbmRsaW5nIGVhY2ggZXZlbnQuIEluIHNvbWUgbW91c2UgZXZlbnQgY2FzZXMtLS1w
YXJ0aWN1bGFybHkgZmFrZSBtb3VzZSBtb3Zlcy0tLXRoZXJlIGNhbgorICAgICAgICBhbHNvIGJl
IG1vcmUgdGhhbiBvbmUgbW91c2UgZXZlbnQgd2FpdGluZyB0byBiZSBoYW5kbGVkIGJ5IFdlYlBy
b2Nlc3MuCisKKyAgICAgICAgSW4gdGhlIHBhc3QsIHRoZXNlIHF1ZXVlZCBtb3VzZSBldmVudHMg
d2VyZSB0cmFja2VkIHdpdGggc2V2ZXJhbCBtZW1iZXIgdmFyaWFibGVzIGFzIGRpZmZlcmVudAor
ICAgICAgICB1c2UgY2FzZXMgZW1lcmdlZC4gVGhlc2UgYXJlIGFsbCByZXBsYWNlZCB3aXRoIG9y
ZGluYXJ5IGRlcXVlIG9wZXJhdGlvbnMsIHN1Y2ggYXMgcGVla2luZyBvcgorICAgICAgICBjaGVj
a2luZyB0aGUgcXVldWUgbGVuZ3RoLgorCisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5oOiBB
ZGQgbG9nZ2luZyBjaGFubmVsIGZvciBtb3VzZSBldmVudHMuCisgICAgICAgICogVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpB
dXRvbWF0aW9uQ29tbWFuZEVycm9yOjp0b1Byb3RvY29sU3RyaW5nKTogQWRkIHR5cGUtc2FmZSBo
ZWxwZXIgY2xhc3MgZm9yIGNvbW1hbmQgZXJyb3JzLgorICAgICAgICBJbiBmdXR1cmUgcGF0Y2hl
cyB3ZSBjYW4gaGlkZSBrbm93bGVkZ2Ugb2YgaG93IHRoaXMgaXMgc2VudCBvdmVyIHRoZSBwcm90
b2NvbCBieSByZWx5aW5nIG1vcmUgb24KKyAgICAgICAgdGhlIGNvbnZlbmllbmNlIGNvbnN0cnVj
dG9ycyBhbmQgLnRvUHJvdG9jb2xTdHJpbmcoKSBtZXRob2QuCisKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0b21hdGlvblNlc3Npb246OndpbGxTaG93SmF2YVNjcmlwdERpYWxvZyk6CisgICAgICAg
IFRoaXMgc2VjdGlvbiBuZWVkcyBhZGp1c3RtZW50cy4gU2luY2UgcGVyZm9ybU1vdXNlSW50ZXJh
Y3Rpb24gbm93IGRlcGVuZHMgb24ga2V5IGV2ZW50cyBiZWluZyBwcm9jZXNzZWQKKyAgICAgICAg
cHJpb3IgdG8gcmV0dXJuaW5nIGZyb20gdGhlIGNvbW1hbmQsIHdlIG5lZWQgdG8gYWJvcnQgYW55
IGtleSBldmVudCBjYWxsYmFja3MgdGhhdCBhcmUgcGVuZGluZyBpZiBhbgorICAgICAgICBhbGVy
dCBwb3BzIHVwIGFzIGEgcmVzdWx0IG9mIHNlbmRpbmcgYSBtb3VzZWRvd24gZXZlbnQuIEFueSBt
b3VzZSBldmVudHMgdGhhdCBhcmUgc3RpbGwgcXVldWVkIHdpbGwKKyAgICAgICAgYmUgaGFuZGxl
ZCB3aGVuIHRoZSBhbGVydCBpcyBkaXNtaXNzZWQgYW5kIHRoZSBuZXN0ZWQgcnVuIGxvb3AgZXhp
dHMuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246Om1vdXNlRXZlbnRz
Rmx1c2hlZEZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
a2V5Ym9hcmRFdmVudHNGbHVzaGVkRm9yUGFnZSk6CisgICAgICAgIE1vZGVybml6ZSB0aGlzIGEg
Yml0LiBEb24ndCBzcHJlYWQga25vd2xlZGdlIGFib3V0IGhvdyBjb21tYW5kcyBhcmUgc2VudCBi
YWNrIG91dCBpbnRvIGV2ZW50IGhhbmRsaW5nIGNvZGUuCisgICAgICAgIE91ciB3cmFwcGVyIGNh
bGxiYWNrcyBpbiBwZXJmb3JtWFhYSW50ZXJhY3Rpb24gaGFuZGxlIHRoZSBwcm90b2NvbC1zcGVj
aWZpYyBkZXRhaWxzIG9mIHRoZSByZXNwb25zZS4KKworICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24pOgorICAgICAgICBBZGQgY29k
ZSBzaW1pbGFyIHRvIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyBzbyB0aGF0IHRoZSBjb21t
YW5kIGRvZXNuJ3QgZmluaXNoIHVudGlsIHRoZSBtb3VzZQorICAgICAgICBldmVudCBoYXMgYmVl
biBmdWxseSBoYW5kbGVkLiBVbmxpa2Uga2V5Ym9hcmRzLCBzb21ldGltZXMgbW91c2UgaW50ZXJh
Y3Rpb25zIGRvbid0IHR1cm4gaW50byBXZWJFdmVudHMKKyAgICAgICAgc28gd2UgYWxzbyBuZWVk
IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIGJlIHdhaXRlZCBv
biBiZWNhdXNlIGhpdCB0ZXN0aW5nIGRpZAorICAgICAgICBub3QgcmV0dXJuIGEgdGFyZ2V0IHRv
IGRlbGl2ZXIgdGhlIGV2ZW50IHRvLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25T
ZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMpOgorICAgICAgICBNb2Rlcm5pemUg
YSBsaXR0bGUgYml0IHRvIHVzZSBnZW5lcmljIGNhbGxiYWNrcyByYXRoZXIgdGhhbiBwcm90b2Nv
bC1nZW5lcmF0ZWQgY2FsbGJhY2tzIGluIHRoZQorICAgICAgICBldmVudCB3YWl0aW5nL2hhbmRs
aW5nIGNvZGUuIE5vdyBpdCBtYXRjaGVzIHRoZSB0eXBlcyB1c2VkIGZvciB0aGUgbW91c2UgZXZl
bnQgY2FzZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkF1dG9tYXRpb25Db21tYW5kRXJyb3I6OkF1dG9t
YXRpb25Db21tYW5kRXJyb3IpOgorICAgICAgICBBZGQgYSBoZWxwZXIgc3RydWN0IHRvIGhvbGQg
YW4gZW51bWVyYXRlZCBlcnJvciBuYW1lIGFuZCBhbiBvcHRpb25hbCBmcmVlLWZvcm0gZXJyb3Ig
bWVzc2FnZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6d2ViTW91c2VF
dmVudFR5cGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJLZXlib2FyZEV2ZW50VHlwZVN0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc05leHRRdWV1ZWRNb3VzZUV2
ZW50KToKKyAgICAgICAgU3BsaXQgdGhlIG9sZCBtZXRob2QgaW50byBoYW5kbGVNb3VzZUV2ZW50
IChjYWxsZWQgYnkgb3RoZXIgY29kZSkgYW5kIHByb2Nlc3NOZXh0UXVldWVkTW91c2VFdmVudC4K
KyAgICAgICAgVGhlIGxhdHRlciBzZW5kcyB0aGUgbmV4dCBtb3VzZSBldmVudCB0byBXZWJQcm9j
ZXNzLCBhbmQgY2FuIGJlIHRyaWdnZXJlZCBpbiBkaWRSZWNlaXZlRXZlbnQKKyAgICAgICAgaWYg
dGhlcmUgYXJlIG1vcmUgbW91c2UgZXZlbnRzIHRvIGJlIHNlbnQgdG8gV2ViUHJvY2Vzcy4KKwor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmlzUHJvY2Vzc2luZ01vdXNlRXZlbnRzIGNv
bnN0KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3VycmVudGx5UHJv
Y2Vzc2VkTW91c2VEb3duRXZlbnQpOiBSZWltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUgZGVxdWUu
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KToKKyAgICAg
ICAgVW5pZnkgdGhlIGNvZGUgcGF0aHMgZm9yIGRpZmZlcmVudCBtb3VzZSBldmVudCB0eXBlcyB0
byBhbGwgdXNlIHRoZSBkZXF1ZS4gVGhleSBhbHNvIHdpbGwKKyAgICAgICAgbm90aWZ5IHRoZSBh
dXRvbWF0aW9uIHNlc3Npb24gaWYgdGhlcmUgYXJlIG5vIG1vcmUgbW91c2UgZXZlbnRzIHRvIHNl
bmQgKGkuZS4sIGludGVyYWN0aW9uIGlzIG92ZXIpLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCk6IEFkZCBoYW5kbGluZyBmb3Ig
bmV3IG1hcC4KKwogMjAxOC0wNC0xNiAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQ29jb2FdIFdlYiBBdXRvbWF0aW9uOiBhZGQgU1BJIHRvIHRlcm1pbmF0ZSBhdXRv
bWF0aW9uIHNlc3Npb24gYW5kIGRpc2Nvbm5lY3QgdGhlIHJlbW90ZSBlbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9Mb2dnaW5nLmgKaW5kZXggNDU1NjZhYzY2NTY5ODZjMzVmNjQ5NjBiMWMxMTg1MjYyOTQwNmY3
Ni4uZjU1ODU1YzZhNWQxMTA4YWFlZmU2NGY2ZDEzYTYxOTE4M2YwYjJjZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9Mb2dnaW5nLmgKQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgTShLZXlI
YW5kbGluZykgXAogICAgIE0oTGF5ZXJzKSBcCiAgICAgTShMb2FkaW5nKSBcCisgICAgTShNb3Vz
ZUhhbmRsaW5nKSBcCiAgICAgTShOZXR3b3JrKSBcCiAgICAgTShOZXR3b3JrQ2FjaGUpIFwKICAg
ICBNKE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUHJlbG9hZGluZykgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcAppbmRleCA0ODVkNzU1NzQxMDZiMmY4NjA1ZWNlYWFkZTg3YzJjMzNlYThiMTQ1Li5mNWI3
ZDM3MTgyNTUwYWNkMzQxZWE4MTAyY2YwMGQwMjViNDM4YjEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcApAQCAtNTMsNiArNTMsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKK1N0cmluZyBBdXRvbWF0aW9uQ29tbWFuZEVycm9yOjp0b1Byb3Rv
Y29sU3RyaW5nKCkKK3sKKyAgICBTdHJpbmcgcHJvdG9jb2xFcnJvck5hbWUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodHlwZSk7
CisgICAgaWYgKCFtZXNzYWdlLmhhc192YWx1ZSgpKQorICAgICAgICByZXR1cm4gcHJvdG9jb2xF
cnJvck5hbWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZyhwcm90b2NvbEVycm9yTmFtZSwgZXJy
b3JOYW1lQW5kRGV0YWlsc1NlcGFyYXRvciwgbWVzc2FnZS52YWx1ZSgpKTsKK30KKyAgICAKIC8v
IMKnOC4gU2Vzc2lvbnMKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1z
ZXNzaW9uLXBhZ2UtbG9hZC10aW1lb3V0CiBzdGF0aWMgY29uc3QgU2Vjb25kcyBkZWZhdWx0UGFn
ZUxvYWRUaW1lb3V0ID0gMzAwX3M7CkBAIC01ODMsNiArNTkyLDIwIEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OndpbGxTaG93SmF2YVNjcmlwdERpYWxvZyhXZWJQYWdlUHJveHkmIHBhZ2Up
CiAgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKHVuZXhwZWN0ZWRBbGVydE9w
ZW5FcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICghbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byBrZXkgOiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nTW91
c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5rZXlzKCkpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ01vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrc1Bl
clBhZ2UudGFrZShrZXkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcGVuZGluZ0tleWJv
YXJkRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8ga2V5IDogY29weVRvVmVjdG9yKG1fcGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1
c2hlZENhbGxiYWNrc1BlclBhZ2Uua2V5cygpKSkgeworICAgICAgICAgICAgICAgIGF1dG8gY2Fs
bGJhY2sgPSBtX3BlbmRpbmdLZXlib2FyZEV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLnRh
a2Uoa2V5KTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfSk7CiB9CiAgICAgCkBAIC02OTgsMTMgKzcyMSwyMyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0b3JGcm9udGVuZExvYWRlZChjb25z
dCBXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKIH0KIAordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bW91
c2VFdmVudHNGbHVzaGVkRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmIHBhZ2UpCit7CisgICAg
aWYgKGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdNb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQ
ZXJQYWdlLnRha2UocGFnZS5wYWdlSUQoKSkpIHsKKyAgICAgICAgaWYgKG1fcGVuZGluZ01vdXNl
RXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9z
aW11bGF0aW5nVXNlckludGVyYWN0aW9uID0gZmFsc2U7CisKKyAgICAgICAgY2FsbGJhY2soc3Rk
OjpudWxsb3B0KTsKKyAgICB9Cit9CisKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmtleWJv
YXJkRXZlbnRzRmx1c2hlZEZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5JiBwYWdlKQogewogICAg
IGlmIChhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJh
Y2tzUGVyUGFnZS50YWtlKHBhZ2UucGFnZUlEKCkpKSB7Ci0gICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcyhKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLQogICAgICAgICBpZiAobV9wZW5kaW5n
S2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBtX3NpbXVsYXRpbmdVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAgICBjYWxs
YmFjayhzdGQ6Om51bGxvcHQpOwogICAgIH0KIH0KIApAQCAtMTM5OCwxMiArMTQzMSwzNCBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgSgogICAgICAgICBpZiAoIXBhcnNlZEJ1dHRvbikKICAgICAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIik7CiAKLSAg
ICAgICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24ocGFnZSwgdmlld1Bvc2l0aW9u
LCBwYXJzZWRJbnRlcmFjdGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0b24udmFsdWUoKSwga2V5TW9k
aWZpZXJzKTsKKyAgICAgICAgYXV0byBtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayA9IFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgcGFnZSA9IHBhZ2UuY29weVJlZigpLCB4LCB5XShzdGQ6Om9wdGlvbmFsPEF1dG9t
YXRpb25Db21tYW5kRXJyb3I+IGVycm9yKSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAg
ICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yLnZhbHVlKCkudG9Qcm90b2Nv
bFN0cmluZygpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNhbGxiYWNr
LT5zZW5kU3VjY2VzcyhJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludDo6Y3Jl
YXRlKCkKKyAgICAgICAgICAgICAgICAgICAgLnNldFgoeCkKKyAgICAgICAgICAgICAgICAgICAg
LnNldFkoeSAtIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQorICAgICAgICAgICAgICAgICAgICAu
cmVsZWFzZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhdXRvJiBj
YWxsYmFja0luTWFwID0gbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFn
ZS5hZGQocGFnZS0+cGFnZUlEKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAg
aWYgKGNhbGxiYWNrSW5NYXApCisgICAgICAgICAgICBjYWxsYmFja0luTWFwKEFVVE9NQVRJT05f
Q09NTUFORF9FUlJPUl9XSVRIX05BTUUoVGltZW91dCkpOworICAgICAgICBjYWxsYmFja0luTWFw
ID0gV1RGTW92ZShtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayk7CiAKLSAgICAgICAgY2FsbGJh
Y2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50Ojpj
cmVhdGUoKQotICAgICAgICAgICAgLnNldFgoeCkKLSAgICAgICAgICAgIC5zZXRZKHkgLSBwYWdl
LT50b3BDb250ZW50SW5zZXQoKSkKLSAgICAgICAgICAgIC5yZWxlYXNlKCkpOworICAgICAgICAv
LyBUaGlzIGlzIGNsZWFyZWQgd2hlbiBhbGwgbW91c2UgZXZlbnRzIGFyZSBmbHVzaGVkLgorICAg
ICAgICBtX3NpbXVsYXRpbmdVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworCisgICAgICAgIHBsYXRm
b3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIHZpZXdQb3NpdGlvbiwgcGFyc2VkSW50
ZXJhY3Rpb24udmFsdWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGtleU1vZGlmaWVycyk7Cisg
ICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgZXZlbnQgbG9jYXRpb24gd2FzIHByZXZpb3VzbHkg
Y2xpcHBlZCBhbmQgZG9lcyBub3QgaGl0IHRlc3QgYW55dGhpbmcgaW4gdGhlIHdpbmRvdywgdGhl
biBpdCB3aWxsIG5vdCBiZSBwcm9jZXNzZWQuCisgICAgICAgIC8vIEZvciBjb21wYXRpYmlsaXR5
IHdpdGggcHJlLVczQyBkcml2ZXIgaW1wbGVtZW50YXRpb25zLCBkb24ndCBtYWtlIHRoaXMgYSBo
YXJkIGVycm9yOyBqdXN0IGRvIG5vdGhpbmcgc2lsZW50bHkuCisgICAgICAgIC8vIEluIFczQy1v
bmx5IGNvZGUgcGF0aHMsIHdlIGNhbiByZWplY3QgYW55IHBvaW50ZXIgYWN0aW9ucyB3aG9zZSBj
b29yZGluYXRlcyBhcmUgb3V0c2lkZSB0aGUgdmlld3BvcnQgcmVjdC4KKyAgICAgICAgaWYgKGNh
bGxiYWNrSW5NYXAgJiYgIXBhZ2UtPmlzUHJvY2Vzc2luZ01vdXNlRXZlbnRzKCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gY2FsbGJhY2tUb0NhbmNlbCA9IG1fcGVuZGluZ01vdXNlRXZlbnRzRmx1c2hl
ZENhbGxiYWNrc1BlclBhZ2UudGFrZShwYWdlLT5wYWdlSUQoKSk7CisgICAgICAgICAgICBjYWxs
YmFja1RvQ2FuY2VsKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIH0KICAgICB9KTsKICNlbmRpZiAv
LyBVU0UoQVBQS0lUKSB8fCBQTEFURk9STShHVEspCiB9CkBAIC0xNDczLDEwICsxNTI4LDE3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhj
b25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAgaWYgKCFhY3Rpb25zVG9QZXJmb3JtLnNpemUo
KSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW50ZXJuYWxFcnJvciwgIk5vIGFjdGlvbnMgdG8gcGVyZm9ybS4iKTsKIAorICAgIGF1dG8ga2V5
Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigqcGFnZSld
KHN0ZDo6b3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKKyAgICAgICAg
aWYgKGVycm9yKQorICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yLnZhbHVl
KCkudG9Qcm90b2NvbFN0cmluZygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbGJh
Y2stPnNlbmRTdWNjZXNzKCk7CisgICAgfTsKKwogICAgIGF1dG8mIGNhbGxiYWNrSW5NYXAgPSBt
X3BlbmRpbmdLZXlib2FyZEV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmFkZChwYWdlLT5w
YWdlSUQoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChjYWxsYmFja0luTWFw
KQotICAgICAgICBjYWxsYmFja0luTWFwLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklO
RURfRVJST1JfTkFNRShUaW1lb3V0KSk7Ci0gICAgY2FsbGJhY2tJbk1hcCA9IFdURk1vdmUoY2Fs
bGJhY2spOworICAgICAgICBjYWxsYmFja0luTWFwKEFVVE9NQVRJT05fQ09NTUFORF9FUlJPUl9X
SVRIX05BTUUoVGltZW91dCkpOworICAgIGNhbGxiYWNrSW5NYXAgPSBXVEZNb3ZlKGtleWJvYXJk
RXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAogICAgIC8vIFRoaXMgaXMgY2xlYXJlZCB3aGVuIGFs
bCBrZXlib2FyZCBldmVudHMgYXJlIGZsdXNoZWQuCiAgICAgbV9zaW11bGF0aW5nVXNlckludGVy
YWN0aW9uID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAppbmRleCA1NzA2NzgyOTlkZjViMzRmOGU1
NDAxZjI5MzljYTRiMTA1ZjZlN2NlLi4zYWUzNWU2ZjdlY2RjNThhM2RkOTVlOTgwODBlZjRhMzI5
NWNhNzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDYgKzc2LDIxIEBAIGNsYXNzIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFz
cyBXZWJQcm9jZXNzUG9vbDsKIAorc3RydWN0IEF1dG9tYXRpb25Db21tYW5kRXJyb3IgeworcHVi
bGljOgorICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkVycm9yTWVzc2FnZSB0
eXBlOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBtZXNzYWdlIHsgc3RkOjpudWxsb3B0IH07
CisgICAgCisgICAgQXV0b21hdGlvbkNvbW1hbmRFcnJvcihJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpFcnJvck1lc3NhZ2UgdHlwZSkKKyAgICAgICAgOiB0eXBlKHR5cGUpIHsgfQor
CisgICAgQXV0b21hdGlvbkNvbW1hbmRFcnJvcihJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpFcnJvck1lc3NhZ2UgdHlwZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6
IHR5cGUodHlwZSkKKyAgICAgICAgLCBtZXNzYWdlKG1lc3NhZ2UpIHsgfQorICAgIAorICAgIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKCk7Cit9OworCiBjbGFzcyBXZWJBdXRvbWF0aW9uU2Vzc2lv
biBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkF1dG9t
YXRpb25TZXNzaW9uPiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCiAgICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpSZW1vdGVBdXRvbWF0aW9u
VGFyZ2V0CkBAIC05OCw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkb2N1bWVudExvYWRl
ZEZvckZyYW1lKGNvbnN0IFdlYkZyYW1lUHJveHkmKTsKICAgICB2b2lkIGluc3BlY3RvckZyb250
ZW5kTG9hZGVkKGNvbnN0IFdlYlBhZ2VQcm94eSYpOwogICAgIHZvaWQga2V5Ym9hcmRFdmVudHNG
bHVzaGVkRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKTsKKyAgICB2b2lkIG1vdXNlRXZlbnRz
Rmx1c2hlZEZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5Jik7CiAgICAgdm9pZCB3aWxsQ2xvc2VQ
YWdlKGNvbnN0IFdlYlBhZ2VQcm94eSYpOwogICAgIHZvaWQgaGFuZGxlUnVuT3BlblBhbmVsKGNv
bnN0IFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkZyYW1lUHJveHkmLCBjb25zdCBBUEk6Ok9wZW5Q
YW5lbFBhcmFtZXRlcnMmLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5Jik7CiAgICAg
dm9pZCB3aWxsU2hvd0phdmFTY3JpcHREaWFsb2coV2ViUGFnZVByb3h5Jik7CkBAIC0yMzUsNyAr
MjUxLDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPj4gbV9wZW5kaW5nTm9ybWFsTmF2aWdh
dGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tzUGVyRnJhbWU7CiAgICAgSGFzaE1hcDx1aW50
NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+
IG1fcGVuZGluZ0VhZ2VyTmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tzUGVyRnJh
bWU7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZT4+IG1fcGVuZGluZ0luc3BlY3RvckNhbGxiYWNrc1BlclBhZ2U7
Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZT4+IG1fcGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1c2hlZENhbGxiYWNr
c1BlclBhZ2U7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgRnVuY3Rpb248dm9pZChzdGQ6Om9wdGlv
bmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4+IG1fcGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1
c2hlZENhbGxiYWNrc1BlclBhZ2U7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgRnVuY3Rpb248dm9p
ZChzdGQ6Om9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4+IG1fcGVuZGluZ01vdXNl
RXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2U7CiAKICAgICB1aW50NjRfdCBtX25leHRFdmFs
dWF0ZUphdmFTY3JpcHRDYWxsYmFja0lEIHsgMSB9OwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJl
ZlB0cjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV2YWx1
YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+PiBtX2V2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0
aW9uQ2FsbGJhY2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCmluZGV4IDJjNWRiMTk3
YmE1NjNlMDczMWQ5YzdjOWY1YTYzNjEyNTBkNjg3MDQuLjE3ZTlhMzdjODQzOTg1NDQ4OTYxYTM1
NDMwNGI5OWZhYjI5YTIzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgKQEAgLTM4
LDYgKzM4LDggQEAKICNkZWZpbmUgU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX01FU1NBR0Uo
ZXJyb3JNZXNzYWdlKSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoVkFMSURBVEVEX0VSUk9SX01FU1NBR0UoZXJyb3JNZXNzYWdlKSkK
ICNkZWZpbmUgU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX01FU1NBR0VfQU5EX0RFVEFJTFMo
ZXJyb3JNZXNzYWdlLCBkZXRhaWxzU3RyaW5nKSBtYWtlU3RyaW5nKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb25IZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShWQUxJREFURURfRVJS
T1JfTUVTU0FHRShlcnJvck1lc3NhZ2UpKSwgZXJyb3JOYW1lQW5kRGV0YWlsc1NlcGFyYXRvciwg
ZGV0YWlsc1N0cmluZykKIAorI2RlZmluZSBBVVRPTUFUSU9OX0NPTU1BTkRfRVJST1JfV0lUSF9O
QU1FKGVycm9yTmFtZSkgQXV0b21hdGlvbkNvbW1hbmRFcnJvcihJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpFcnJvck1lc3NhZ2U6OmVycm9yTmFtZSkKKwogLy8gQ29udmVuaWVuY2Ug
bWFjcm9zIGZvciBmaWxsaW5nIGluIHRoZSBlcnJvciBzdHJpbmcgb2Ygc3luY2hyb25vdXMgY29t
bWFuZHMgaW4gYmFpbG91dCBicmFuY2hlcy4KICNkZWZpbmUgU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUihlcnJvck5hbWUpIFwKIGRvIHsgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggOGYzNzQwZTk2MWYzY2I1NzE5ZGYwY2MyNDMyMzJlMWMwZDZi
ZTIxNS4uZDkzY2FjYTczNTI5ZGFiNWE3YWM2OTFjYjk0MDAyZjM1ZmE5ZGZlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yOTEsMjEgKzI5MSwzMiBAQCBF
eGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzOjpSZWNvcmQqIEV4Y2VlZGVkRGF0YWJhc2VRdW90
YVJlY29yZHM6Om5leHQoKQogfQogCiAjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIGNvbnN0IGNo
YXIqIHdlYk1vdXNlRXZlbnRUeXBlU3RyaW5nKFdlYkV2ZW50OjpUeXBlIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgorICAgICAgICBy
ZXR1cm4gIk1vdXNlRG93biI7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKKyAgICAgICAg
cmV0dXJuICJNb3VzZVVwIjsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAg
IHJldHVybiAiTW91c2VNb3ZlIjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICI8dW5rbm93bj4iOworICAgIH0KK30KKwogc3RhdGlj
IGNvbnN0IGNoYXIqIHdlYktleWJvYXJkRXZlbnRUeXBlU3RyaW5nKFdlYkV2ZW50OjpUeXBlIHR5
cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoK
ICAgICAgICAgcmV0dXJuICJLZXlEb3duIjsKLSAgICAKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlV
cDoKICAgICAgICAgcmV0dXJuICJLZXlVcCI7Ci0gICAgCiAgICAgY2FzZSBXZWJFdmVudDo6UmF3
S2V5RG93bjoKICAgICAgICAgcmV0dXJuICJSYXdLZXlEb3duIjsKLSAgICAKICAgICBjYXNlIFdl
YkV2ZW50OjpDaGFyOgogICAgICAgICByZXR1cm4gIkNoYXIiOwotICAgIAogICAgIGRlZmF1bHQ6
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gIjx1bmtub3du
PiI7CkBAIC0xODk4LDI4ICsxOTA5LDI4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmIGV2ZW50KQogICAgIGlmICghaXNWYWxp
ZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBtX21vdXNlRXZlbnRRdWV1ZS5hcHBlbmQoZXZl
bnQpOworICAgIGlmIChtX21vdXNlRXZlbnRRdWV1ZS5zaXplKCkgPT0gMSkgLy8gT3RoZXJ3aXNl
LCBjYWxsZWQgZnJvbSBEaWRSZWNlaXZlRXZlbnQgbWVzc2FnZSBoYW5kbGVyLgorICAgICAgICBw
cm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZVByb3h5
Ojpwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKQoreworICAgIGlmICghaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fbW91c2VFdmVudFF1ZXVlLmlzRW1wdHko
KSk7CisKKyAgICBjb25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50JiBldmVudCA9IG1fbW91c2VFdmVu
dFF1ZXVlLmZpcnN0KCk7CisgICAgCiAgICAgaWYgKG1fcGFnZUNsaWVudC53aW5kb3dJc0Zyb250
V2luZG93VW5kZXJNb3VzZShldmVudCkpCiAgICAgICAgIHNldFRvb2xUaXAoU3RyaW5nKCkpOwog
CiAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBzdGFydCB0aGUgcmVzcG9uc2l2ZW5lc3MgdGlt
ZXIgYmVjYXVzZSBtb3VzZSBtb3ZlIHNob3VsZCBub3QgaW5kaWNhdGUgaW50ZXJhY3Rpb24uCiAg
ICAgaWYgKGV2ZW50LnR5cGUoKSAhPSBXZWJFdmVudDo6TW91c2VNb3ZlKQogICAgICAgICBtX3By
b2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAobV9wcm9jZXNzaW5nTW91c2VNb3ZlRXZlbnQpIHsKLSAgICAgICAgICAgIG1fbmV4dE1v
dXNlTW92ZUV2ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxOYXRpdmVXZWJNb3VzZUV2ZW50PihldmVu
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3Byb2Nlc3Np
bmdNb3VzZU1vdmVFdmVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkwND4gV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9m
IHRoZSBtb3VzZSBkb3duIGV2ZW50IGluIHRoZSBjYXNlIHdoZXJlIHdlCi0gICAgLy8gZGlzcGxh
eSBhIHBvcHVwIG1lbnUgZm9yIHNlbGVjdCBlbGVtZW50cy4gV2hlbiB0aGUgdXNlciBjaGFuZ2Vz
IHRoZSBzZWxlY3RlZCBpdGVtLAotICAgIC8vIHdlIGZha2UgYSBtb3VzZSB1cCBldmVudCBieSB1
c2luZyB0aGlzIHN0b3JlZCBkb3duIGV2ZW50LiBUaGlzIGV2ZW50IGdldHMgY2xlYXJlZAotICAg
IC8vIHdoZW4gdGhlIG1vdXNlIHVwIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZnJvbSBXZWJQcm9jZXNz
LgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikKLSAgICAgICAg
bV9jdXJyZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCA9IHN0ZDo6bWFrZV91bmlxdWU8TmF0
aXZlV2ViTW91c2VFdmVudD4oZXZlbnQpOwogCisgICAgTE9HKE1vdXNlSGFuZGxpbmcsICIgVUkg
cHJvY2Vzczogc2VudCBtb3VzZUV2ZW50IGZyb20gaGFuZGxlTW91c2VFdmVudCIpOwogICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TW91c2VFdmVudChldmVudCksIG1fcGFn
ZUlEKTsKIH0KIApAQCAtNDc4Nyw5ICs0Nzk4LDI2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRU
ZXh0RnJvbUl0ZW1Gb3JQb3B1cE1lbnUoV2ViUG9wdXBNZW51UHJveHkqLCBpbnQzMl90IGluZGV4
CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRUZXh0Rm9yQWN0aXZl
UG9wdXBNZW51KGluZGV4KSwgbV9wYWdlSUQpOwogfQogCitib29sIFdlYlBhZ2VQcm94eTo6aXNQ
cm9jZXNzaW5nTW91c2VFdmVudHMoKSBjb25zdAoreworICAgIHJldHVybiAhbV9tb3VzZUV2ZW50
UXVldWUuaXNFbXB0eSgpOworfQorCiBOYXRpdmVXZWJNb3VzZUV2ZW50KiBXZWJQYWdlUHJveHk6
OmN1cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50KCkKIHsKLSAgICByZXR1cm4gbV9jdXJy
ZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudC5nZXQoKTsKKyAgICAvLyA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTA0PiBXZSBuZWVkIHRvIGtlZXAgdHJhY2sg
b2YgdGhlIG1vdXNlIGRvd24gZXZlbnQgaW4gdGhlIGNhc2Ugd2hlcmUgd2UKKyAgICAvLyBkaXNw
bGF5IGEgcG9wdXAgbWVudSBmb3Igc2VsZWN0IGVsZW1lbnRzLiBXaGVuIHRoZSB1c2VyIGNoYW5n
ZXMgdGhlIHNlbGVjdGVkIGl0ZW0sIHdlIGZha2UgYSBtb3VzZXVwIGV2ZW50IGJ5CisgICAgLy8g
dXNpbmcgdGhpcyBzdG9yZWQgbW91c2Vkb3duIGV2ZW50IGFuZCBjaGFuZ2luZyB0aGUgZXZlbnQg
dHlwZS4gVGhpcyB0cmlja2VyeSBoYXBwZW5zIHdoZW4gV2ViUHJvY2VzcyBoYW5kbGVzCisgICAg
Ly8gYSBtb3VzZWRvd24gZXZlbnQgdGhhdCBydW5zIHRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yIEhU
TUxTZWxlY3RFbGVtZW50LCBzbyB0aGUgdHJpZ2dlcmluZyBtb3VzZWRvd24gbXVzdCBiZSB0aGUg
Zmlyc3QgZXZlbnQuCisKKyAgICBpZiAobV9tb3VzZUV2ZW50UXVldWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvJiBldmVudCA9IG1fbW91c2VFdmVu
dFF1ZXVlLmZpcnN0KCk7CisgICAgaWYgKGV2ZW50LnR5cGUoKSAhPSBXZWJFdmVudDo6VHlwZTo6
TW91c2VEb3duKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmZXZlbnQ7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpwb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KQpAQCAtNTE5
OCwxNSArNTIyNiwyNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVpbnQz
Ml90IG9wYXF1ZVR5cGUsIGJvb2wgaGFuZGxlZCkKICAgICBjYXNlIFdlYkV2ZW50OjpOb1R5cGU6
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAgICAg
bV9wcm9jZXNzaW5nTW91c2VNb3ZlRXZlbnQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fbmV4dE1v
dXNlTW92ZUV2ZW50KQotICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVudCgqc3RkOjpleGNoYW5n
ZShtX25leHRNb3VzZU1vdmVFdmVudCwgbnVsbHB0cikpOwotICAgICAgICBicmVhazsKICAgICBj
YXNlIFdlYkV2ZW50OjpNb3VzZURvd246CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDogewor
ICAgICAgICBMT0coTW91c2VIYW5kbGluZywgIldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50
OiAlcyAocXVldWUgZW1wdHkgJWQpIiwgd2ViTW91c2VFdmVudFR5cGVTdHJpbmcodHlwZSksIG1f
bW91c2VFdmVudFF1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICAgICAgLy8gUmV0aXJlIHRoZSBsYXN0
IHNlbnQgZXZlbnQgbm93IHRoYXQgV2ViUHJvY2VzcyBpcyBkb25lIGhhbmRsaW5nIGl0LgorICAg
ICAgICBNRVNTQUdFX0NIRUNLKCFtX21vdXNlRXZlbnRRdWV1ZS5pc0VtcHR5KCkpOworICAgICAg
ICBOYXRpdmVXZWJNb3VzZUV2ZW50IGV2ZW50ID0gbV9tb3VzZUV2ZW50UXVldWUudGFrZUZpcnN0
KCk7CisgICAgICAgIE1FU1NBR0VfQ0hFQ0sodHlwZSA9PSBldmVudC50eXBlKCkpOworCisgICAg
ICAgIGlmICghbV9tb3VzZUV2ZW50UXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBMT0co
TW91c2VIYW5kbGluZywgIiBVSSBwcm9jZXNzOiBoYW5kbGluZyBhIHF1ZXVlZCBtb3VzZSBldmVu
dCBmcm9tIGRpZFJlY2VpdmVFdmVudCIpOworICAgICAgICAgICAgcHJvY2Vzc05leHRRdWV1ZWRN
b3VzZUV2ZW50KCk7CisgICAgICAgIH0gZWxzZSBpZiAoYXV0byogYXV0b21hdGlvblNlc3Npb24g
PSBwcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQorICAgICAgICAg
ICAgYXV0b21hdGlvblNlc3Npb24tPm1vdXNlRXZlbnRzRmx1c2hlZEZvclBhZ2UoKnRoaXMpOwor
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6Ci0gICAgICAgIG1f
Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQgPSBudWxscHRyOwotICAgICAgICBicmVh
azsKKyAgICB9CisKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDoKICAgICBj
YXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNlRG93bjoKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZv
cmNlVXA6CkBAIC01MjM5LDcgKzUyNzYsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2
ZUV2ZW50KHVpbnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wgaGFuZGxlZCkKIAogICAgICAgICBNRVNT
QUdFX0NIRUNLKHR5cGUgPT0gZXZlbnQudHlwZSgpKTsKIAotICAgICAgICBpZiAoIW1fa2V5RXZl
bnRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYm9vbCBjYW5Qcm9jZXNzTW9yZUtleUV2ZW50
cyA9ICFtX2tleUV2ZW50UXVldWUuaXNFbXB0eSgpOworICAgICAgICBpZiAoY2FuUHJvY2Vzc01v
cmVLZXlFdmVudHMpIHsKICAgICAgICAgICAgIExPRyhLZXlIYW5kbGluZywgIiBVSSBwcm9jZXNz
OiBzZW50IGtleUV2ZW50IGZyb20gZGlkUmVjZWl2ZUV2ZW50Iik7CiAgICAgICAgICAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OktleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5m
aXJzdCgpKSwgbV9wYWdlSUQpOwogICAgICAgICB9CkBAIC01MjUzLDcgKzUyOTEsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVpbnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wg
aGFuZGxlZCkKICAgICAgICAgICAgIG1fdWlDbGllbnQtPmRpZE5vdEhhbmRsZUtleUV2ZW50KHRo
aXMsIGV2ZW50KTsKIAogICAgICAgICAvLyBOb3RpZnkgdGhlIHNlc3Npb24gYWZ0ZXIgLVtOU0Fw
cCBzZW5kRXZlbnQ6XSBoYXMgYSBjcmFjayBhdCB0dXJuaW5nIHRoZSBldmVudCBpbnRvIGFuIGFj
dGlvbi4KLSAgICAgICAgaWYgKG1fa2V5RXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKCFjYW5Qcm9jZXNzTW9yZUtleUV2ZW50cykgewogICAgICAgICAgICAgaWYgKGF1dG8qIGF1
dG9tYXRpb25TZXNzaW9uID0gcHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Np
b24oKSkKICAgICAgICAgICAgICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+a2V5Ym9hcmRFdmVudHNG
bHVzaGVkRm9yUGFnZSgqdGhpcyk7CiAgICAgICAgIH0KQEAgLTU4NTcsMTUgKzU4OTUsMTAgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQoUHJvY2Vzc1Rl
cm1pbmF0aW9uUmVhc29uIHRlcm1pbmEKICAgICBtX3BlbmRpbmdMZWFybk9ySWdub3JlV29yZE1l
c3NhZ2VDb3VudCA9IDA7CiAKICAgICAvLyBDYW4ndCBleHBlY3QgRGlkUmVjZWl2ZUV2ZW50IG5v
dGlmaWNhdGlvbnMgZnJvbSBhIGNyYXNoZWQgd2ViIHByb2Nlc3MuCisgICAgbV9tb3VzZUV2ZW50
UXVldWUuY2xlYXIoKTsKICAgICBtX2tleUV2ZW50UXVldWUuY2xlYXIoKTsKICAgICBtX3doZWVs
RXZlbnRRdWV1ZS5jbGVhcigpOwogICAgIG1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMu
Y2xlYXIoKTsKLQotICAgIG1fbmV4dE1vdXNlTW92ZUV2ZW50ID0gbnVsbHB0cjsKLSAgICBtX2N1
cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50ID0gbnVsbHB0cjsKLQotICAgIG1fcHJvY2Vz
c2luZ01vdXNlTW92ZUV2ZW50ID0gZmFsc2U7Ci0KICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAm
JiAhRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAgICAgbV90b3VjaEV2ZW50UXVldWUuY2xlYXIo
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAxNTFj
NTc2OWMxMDRhZDFkYTBjZmFmMWU2ZmVkNzc2ZjIzNDJmN2U4Li4xMmM4Mjk4YjlhZWMzOTg0MjI2
YTgzMTE3NDUwY2M0ODY4Y2YxNmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaApAQCAtNjg0LDcgKzY4NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0g
Y29sb3I7IH0KICNlbmRpZgogCisgICAgYm9vbCBpc1Byb2Nlc3NpbmdNb3VzZUV2ZW50cygpIGNv
bnN0OworICAgIHZvaWQgcHJvY2Vzc05leHRRdWV1ZWRNb3VzZUV2ZW50KCk7CiAgICAgdm9pZCBo
YW5kbGVNb3VzZUV2ZW50KGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmKTsKKwogICAgIHZvaWQg
aGFuZGxlV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50Jik7CiAgICAgdm9pZCBo
YW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKIApAQCAt
MTkyOCw2ICsxOTMxLDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
bV9kZWNpZGVQb2xpY3lGb3JSZXNwb25zZVJlcXVlc3Q7CiAgICAgYm9vbCBtX3Nob3VsZFN1cHBy
ZXNzQXBwTGlua3NJbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24geyBmYWxzZSB9OwogCisg
ICAgRGVxdWU8TmF0aXZlV2ViTW91c2VFdmVudD4gbV9tb3VzZUV2ZW50UXVldWU7CiAgICAgRGVx
dWU8TmF0aXZlV2ViS2V5Ym9hcmRFdmVudD4gbV9rZXlFdmVudFF1ZXVlOwogICAgIERlcXVlPE5h
dGl2ZVdlYldoZWVsRXZlbnQ+IG1fd2hlZWxFdmVudFF1ZXVlOwogICAgIERlcXVlPHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8TmF0aXZlV2ViV2hlZWxFdmVudD4+PiBtX2N1cnJlbnRseVByb2Nlc3Nl
ZFdoZWVsRXZlbnRzOwpAQCAtMTkzNSwxMCArMTkzOSw2IEBAIHByaXZhdGU6CiAgICAgRGVxdWU8
TmF0aXZlV2ViR2VzdHVyZUV2ZW50PiBtX2dlc3R1cmVFdmVudFF1ZXVlOwogI2VuZGlmCiAKLSAg
ICBib29sIG1fcHJvY2Vzc2luZ01vdXNlTW92ZUV2ZW50IHsgZmFsc2UgfTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8TmF0aXZlV2ViTW91c2VFdmVudD4gbV9uZXh0TW91c2VNb3ZlRXZlbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPE5hdGl2ZVdlYk1vdXNlRXZlbnQ+IG1fY3VycmVudGx5UHJvY2Vzc2Vk
TW91c2VEb3duRXZlbnQ7Ci0KICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHN0cnVjdCBU
b3VjaEV2ZW50VHJhY2tpbmcgewogICAgICAgICBXZWJDb3JlOjpUcmFja2luZ1R5cGUgdG91Y2hG
b3JjZUNoYW5nZWRUcmFja2luZyB7IFdlYkNvcmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmcg
fTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338352</attachid>
            <date>2018-04-19 12:51:05 -0700</date>
            <delta_ts>2018-04-19 13:37:37 -0700</delta_ts>
            <desc>Revised Patch</desc>
            <filename>bug-184462-20180419125105.patch</filename>
            <type>text/plain</type>
            <size>24845</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwODEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDIzMGFjZGQ5MDRhMjNmYzQ2
NTI4MGZhNjEzNGE2ZWIyMTY0YmEzMmIuLjVlNDlhMzZlNWFjNmI1ZDBiMTgwNjM5NDEyYjdkZDc5
NTU5YzVlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTgtMDQtMTkgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEF1dG9tYXRpb246IHNpbXVsYXRl
ZCBtb3VzZSBpbnRlcmFjdGlvbnMgc2hvdWxkIG5vdCBiZSBkb25lIHVudGlsIGFzc29jaWF0ZWQg
RE9NIGV2ZW50cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NDYyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
OTMyMzMzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcyBhbmQg
VGltIEhvcnRvbi4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cyBh
bmQgYWN0aW9ucyBlbmRwb2ludHMgaW4gV2ViRHJpdmVyIHRlc3Qgc3VpdGUuCisKKyAgICAgICAg
SW4gcHJlcGFyYXRpb24gZm9yIGltcGxlbWVudGluZyB0aGUgVzNDIFdlYkRyaXZlciBjb21tYW5k
ICJQZXJmb3JtIEFjdGlvbnMiLCB3ZSBuZWVkIGEgd2F5IHRvCisgICAgICAgIGtub3cgd2hlbiBh
IHNpbXVsYXRlZCBtb3VzZSBldmVudCBoYXMgYmVlbiBmdWxseSBwcm9jZXNzZWQgYnkgV2ViUHJv
Y2VzcyBhbmQgaXQgaXMgb2theSB0byBjb250aW51ZQorICAgICAgICB0byBkaXNwYXRjaCBtb3Jl
IHNpbXVsYXRlZCBldmVudHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtb3VzZSBldmVu
dHMgZ28gdGhyb3VnaCBhIHF1ZXVlIGFzIHRoZXkgYXJlIGRlbGl2ZXJlZCB0byBXZWJQYWdlUHJv
eHkuIFRoZSBhcHByb2FjaAorICAgICAgICBpcyB2ZXJ5IHNpbWlsYXIgdG8gaG93IGtleSBldmVu
dHMgYXJlIGhhbmRsZWQuIEluIHRoZSBrZXkgZXZlbnQgY2FzZSwgbG90cyBvZiBXZWJFdmVudHMg
Y2FuIGNvbWUgb3V0CisgICAgICAgIG9mIHR5cGluZyBvbmUga2V5c3Ryb2tlLCBzbyB0aGVzZSBu
ZWVkIHRvIGJlIHF1ZXVlZCB1cCBhbmQgcmV0aXJlZCBvbmUgYnkgb25lIHdoZW4gdGhlIFdlYlBy
b2Nlc3MgaGFzCisgICAgICAgIGZpbmlzaGVkIGhhbmRsaW5nIGVhY2ggZXZlbnQuIEluIHNvbWUg
bW91c2UgZXZlbnQgY2FzZXMtLS1wYXJ0aWN1bGFybHkgZmFrZSBtb3VzZSBtb3Zlcy0tLXRoZXJl
IGNhbgorICAgICAgICBhbHNvIGJlIG1vcmUgdGhhbiBvbmUgbW91c2UgZXZlbnQgd2FpdGluZyB0
byBiZSBoYW5kbGVkIGJ5IFdlYlByb2Nlc3MuCisKKyAgICAgICAgSW4gdGhlIHBhc3QsIHRoZXNl
IHF1ZXVlZCBtb3VzZSBldmVudHMgd2VyZSB0cmFja2VkIHdpdGggc2V2ZXJhbCBtZW1iZXIgdmFy
aWFibGVzIGFzIGRpZmZlcmVudAorICAgICAgICB1c2UgY2FzZXMgZW1lcmdlZC4gVGhlc2UgYXJl
IGFsbCByZXBsYWNlZCB3aXRoIG9yZGluYXJ5IGRlcXVlIG9wZXJhdGlvbnMsIHN1Y2ggYXMgcGVl
a2luZyBvcgorICAgICAgICBjaGVja2luZyB0aGUgcXVldWUgbGVuZ3RoLgorCisgICAgICAgICog
UGxhdGZvcm0vTG9nZ2luZy5oOiBBZGQgbG9nZ2luZyBjaGFubmVsIGZvciBtb3VzZSBldmVudHMu
CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpBdXRvbWF0aW9uQ29tbWFuZEVycm9yOjp0b1Byb3RvY29sU3Ry
aW5nKTogQWRkIHR5cGUtc2FmZSBoZWxwZXIgY2xhc3MgZm9yIGNvbW1hbmQgZXJyb3JzLgorICAg
ICAgICBJbiBmdXR1cmUgcGF0Y2hlcyB3ZSBjYW4gaGlkZSBrbm93bGVkZ2Ugb2YgaG93IHRoaXMg
aXMgc2VudCBvdmVyIHRoZSBwcm90b2NvbCBieSByZWx5aW5nIG1vcmUgb24KKyAgICAgICAgdGhl
IGNvbnZlbmllbmNlIGNvbnN0cnVjdG9ycyBhbmQgLnRvUHJvdG9jb2xTdHJpbmcoKSBtZXRob2Qu
CisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OndpbGxTaG93SmF2YVNj
cmlwdERpYWxvZyk6CisgICAgICAgIFRoaXMgc2VjdGlvbiBuZWVkcyBhZGp1c3RtZW50cy4gU2lu
Y2UgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24gbm93IGRlcGVuZHMgb24ga2V5IGV2ZW50cyBiZWlu
ZyBwcm9jZXNzZWQKKyAgICAgICAgcHJpb3IgdG8gcmV0dXJuaW5nIGZyb20gdGhlIGNvbW1hbmQs
IHdlIG5lZWQgdG8gYWJvcnQgYW55IGtleSBldmVudCBjYWxsYmFja3MgdGhhdCBhcmUgcGVuZGlu
ZyBpZiBhbgorICAgICAgICBhbGVydCBwb3BzIHVwIGFzIGEgcmVzdWx0IG9mIHNlbmRpbmcgYSBt
b3VzZWRvd24gZXZlbnQuIEFueSBtb3VzZSBldmVudHMgdGhhdCBhcmUgc3RpbGwgcXVldWVkIHdp
bGwKKyAgICAgICAgYmUgaGFuZGxlZCB3aGVuIHRoZSBhbGVydCBpcyBkaXNtaXNzZWQgYW5kIHRo
ZSBuZXN0ZWQgcnVuIGxvb3AgZXhpdHMuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb246Om1vdXNlRXZlbnRzRmx1c2hlZEZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6a2V5Ym9hcmRFdmVudHNGbHVzaGVkRm9yUGFnZSk6CisgICAg
ICAgIE1vZGVybml6ZSB0aGlzIGEgYml0LiBEb24ndCBzcHJlYWQga25vd2xlZGdlIGFib3V0IGhv
dyBjb21tYW5kcyBhcmUgc2VudCBiYWNrIG91dCBpbnRvIGV2ZW50IGhhbmRsaW5nIGNvZGUuCisg
ICAgICAgIE91ciB3cmFwcGVyIGNhbGxiYWNrcyBpbiBwZXJmb3JtWFhYSW50ZXJhY3Rpb24gaGFu
ZGxlIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSByZXNwb25zZS4KKworICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rp
b24pOgorICAgICAgICBBZGQgY29kZSBzaW1pbGFyIHRvIHBlcmZvcm1LZXlib2FyZEludGVyYWN0
aW9ucyBzbyB0aGF0IHRoZSBjb21tYW5kIGRvZXNuJ3QgZmluaXNoIHVudGlsIHRoZSBtb3VzZQor
ICAgICAgICBldmVudCBoYXMgYmVlbiBmdWxseSBoYW5kbGVkLiBVbmxpa2Uga2V5Ym9hcmRzLCBz
b21ldGltZXMgbW91c2UgaW50ZXJhY3Rpb25zIGRvbid0IHR1cm4gaW50byBXZWJFdmVudHMKKyAg
ICAgICAgc28gd2UgYWxzbyBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBu
b3RoaW5nIHRvIGJlIHdhaXRlZCBvbiBiZWNhdXNlIGhpdCB0ZXN0aW5nIGRpZAorICAgICAgICBu
b3QgcmV0dXJuIGEgdGFyZ2V0IHRvIGRlbGl2ZXIgdGhlIGV2ZW50IHRvLgorCisgICAgICAgIChX
ZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMp
OgorICAgICAgICBNb2Rlcm5pemUgYSBsaXR0bGUgYml0IHRvIHVzZSBnZW5lcmljIGNhbGxiYWNr
cyByYXRoZXIgdGhhbiBwcm90b2NvbC1nZW5lcmF0ZWQgY2FsbGJhY2tzIGluIHRoZQorICAgICAg
ICBldmVudCB3YWl0aW5nL2hhbmRsaW5nIGNvZGUuIE5vdyBpdCBtYXRjaGVzIHRoZSB0eXBlcyB1
c2VkIGZvciB0aGUgbW91c2UgZXZlbnQgY2FzZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkF1dG9tYXRp
b25Db21tYW5kRXJyb3I6OkF1dG9tYXRpb25Db21tYW5kRXJyb3IpOgorICAgICAgICBBZGQgYSBo
ZWxwZXIgc3RydWN0IHRvIGhvbGQgYW4gZW51bWVyYXRlZCBlcnJvciBuYW1lIGFuZCBhbiBvcHRp
b25hbCBmcmVlLWZvcm0gZXJyb3IgbWVzc2FnZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6d2ViTW91c2VFdmVudFR5cGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0Ojp3
ZWJLZXlib2FyZEV2ZW50VHlwZVN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJv
Y2Vzc05leHRRdWV1ZWRNb3VzZUV2ZW50KToKKyAgICAgICAgU3BsaXQgdGhlIG9sZCBtZXRob2Qg
aW50byBoYW5kbGVNb3VzZUV2ZW50IChjYWxsZWQgYnkgb3RoZXIgY29kZSkgYW5kIHByb2Nlc3NO
ZXh0UXVldWVkTW91c2VFdmVudC4KKyAgICAgICAgVGhlIGxhdHRlciBzZW5kcyB0aGUgbmV4dCBt
b3VzZSBldmVudCB0byBXZWJQcm9jZXNzLCBhbmQgY2FuIGJlIHRyaWdnZXJlZCBpbiBkaWRSZWNl
aXZlRXZlbnQKKyAgICAgICAgaWYgdGhlcmUgYXJlIG1vcmUgbW91c2UgZXZlbnRzIHRvIGJlIHNl
bnQgdG8gV2ViUHJvY2Vzcy4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmlzUHJv
Y2Vzc2luZ01vdXNlRXZlbnRzIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQpOiBSZWltcGxlbWVudGVk
IG9uIHRvcCBvZiB0aGUgZGVxdWUuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlk
UmVjZWl2ZUV2ZW50KToKKyAgICAgICAgVW5pZnkgdGhlIGNvZGUgcGF0aHMgZm9yIGRpZmZlcmVu
dCBtb3VzZSBldmVudCB0eXBlcyB0byBhbGwgdXNlIHRoZSBkZXF1ZS4gVGhleSBhbHNvIHdpbGwK
KyAgICAgICAgbm90aWZ5IHRoZSBhdXRvbWF0aW9uIHNlc3Npb24gaWYgdGhlcmUgYXJlIG5vIG1v
cmUgbW91c2UgZXZlbnRzIHRvIHNlbmQgKGkuZS4sIGludGVyYWN0aW9uIGlzIG92ZXIpLgorCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRl
ZCk6IEFkZCBoYW5kbGluZyBmb3IgbmV3IG1hcC4KKwogMjAxOC0wNC0xOSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGdsb2JhbGx5LXVuaXF1ZSBIaXN0
b3J5SXRlbSBpZGVudGlmaWVycyAoYW5kIGhhdmUgV2ViS2l0MiBhZG9wdCB0aGVtKS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggNDU1NjZhYzY2NTY5ODZjMzVmNjQ5NjBiMWMxMTg1MjYy
OTQwNmY3Ni4uZjU1ODU1YzZhNWQxMTA4YWFlZmU2NGY2ZDEzYTYxOTE4M2YwYjJjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAg
TShLZXlIYW5kbGluZykgXAogICAgIE0oTGF5ZXJzKSBcCiAgICAgTShMb2FkaW5nKSBcCisgICAg
TShNb3VzZUhhbmRsaW5nKSBcCiAgICAgTShOZXR3b3JrKSBcCiAgICAgTShOZXR3b3JrQ2FjaGUp
IFwKICAgICBNKE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUHJlbG9hZGluZykgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmNwcAppbmRleCA0ODVkNzU1NzQxMDZiMmY4NjA1ZWNlYWFkZTg3YzJjMzNlYThiMTQ1
Li5mNWI3ZDM3MTgyNTUwYWNkMzQxZWE4MTAyY2YwMGQwMjViNDM4YjEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmNwcApAQCAtNTMsNiArNTMsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK1N0cmluZyBBdXRvbWF0aW9uQ29tbWFuZEVycm9yOjp0
b1Byb3RvY29sU3RyaW5nKCkKK3sKKyAgICBTdHJpbmcgcHJvdG9jb2xFcnJvck5hbWUgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dHlwZSk7CisgICAgaWYgKCFtZXNzYWdlLmhhc192YWx1ZSgpKQorICAgICAgICByZXR1cm4gcHJv
dG9jb2xFcnJvck5hbWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZyhwcm90b2NvbEVycm9yTmFt
ZSwgZXJyb3JOYW1lQW5kRGV0YWlsc1NlcGFyYXRvciwgbWVzc2FnZS52YWx1ZSgpKTsKK30KKyAg
ICAKIC8vIMKnOC4gU2Vzc2lvbnMKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIv
I2Rmbi1zZXNzaW9uLXBhZ2UtbG9hZC10aW1lb3V0CiBzdGF0aWMgY29uc3QgU2Vjb25kcyBkZWZh
dWx0UGFnZUxvYWRUaW1lb3V0ID0gMzAwX3M7CkBAIC01ODMsNiArNTkyLDIwIEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OndpbGxTaG93SmF2YVNjcmlwdERpYWxvZyhXZWJQYWdlUHJveHkm
IHBhZ2UpCiAgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKHVuZXhwZWN0ZWRB
bGVydE9wZW5FcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICghbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBrZXkgOiBjb3B5VG9WZWN0b3IobV9wZW5k
aW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5rZXlzKCkpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ01vdXNlRXZlbnRzRmx1c2hlZENhbGxi
YWNrc1BlclBhZ2UudGFrZShrZXkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVs
bG9wdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcGVuZGlu
Z0tleWJvYXJkRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8ga2V5IDogY29weVRvVmVjdG9yKG1fcGVuZGluZ0tleWJvYXJkRXZl
bnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2Uua2V5cygpKSkgeworICAgICAgICAgICAgICAgIGF1
dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdLZXlib2FyZEV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQ
YWdlLnRha2Uoa2V5KTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfSk7CiB9CiAgICAgCkBAIC02OTgsMTMgKzcy
MSwyMyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0b3JGcm9udGVuZExvYWRl
ZChjb25zdCBXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2Vz
cyhKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKIH0KIAordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6bW91c2VFdmVudHNGbHVzaGVkRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmIHBhZ2UpCit7
CisgICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdNb3VzZUV2ZW50c0ZsdXNoZWRDYWxs
YmFja3NQZXJQYWdlLnRha2UocGFnZS5wYWdlSUQoKSkpIHsKKyAgICAgICAgaWYgKG1fcGVuZGlu
Z01vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgbV9zaW11bGF0aW5nVXNlckludGVyYWN0aW9uID0gZmFsc2U7CisKKyAgICAgICAgY2FsbGJh
Y2soc3RkOjpudWxsb3B0KTsKKyAgICB9Cit9CisKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmtleWJvYXJkRXZlbnRzRmx1c2hlZEZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5JiBwYWdlKQog
ewogICAgIGlmIChhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVk
Q2FsbGJhY2tzUGVyUGFnZS50YWtlKHBhZ2UucGFnZUlEKCkpKSB7Ci0gICAgICAgIGNhbGxiYWNr
LT5zZW5kU3VjY2VzcyhKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLQogICAgICAgICBpZiAobV9w
ZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBtX3NpbXVsYXRpbmdVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAg
ICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOwogICAgIH0KIH0KIApAQCAtMTM5OCwxMiArMTQzMSwz
NCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihj
b25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSgogICAgICAgICBpZiAoIXBhcnNlZEJ1dHRvbikK
ICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIik7
CiAKLSAgICAgICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24ocGFnZSwgdmlld1Bv
c2l0aW9uLCBwYXJzZWRJbnRlcmFjdGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0b24udmFsdWUoKSwg
a2V5TW9kaWZpZXJzKTsKKyAgICAgICAgYXV0byBtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayA9
IFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgcGFnZSA9IHBhZ2UuY29weVJlZigpLCB4LCB5XShzdGQ6Om9wdGlvbmFs
PEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVycm9yKSB7CisgICAgICAgICAgICBpZiAoZXJyb3Ip
CisgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yLnZhbHVlKCkudG9Q
cm90b2NvbFN0cmluZygpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNh
bGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2lu
dDo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgLnNldFgoeCkKKyAgICAgICAgICAgICAg
ICAgICAgLnNldFkoeSAtIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQorICAgICAgICAgICAgICAg
ICAgICAucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBh
dXRvJiBjYWxsYmFja0luTWFwID0gbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tz
UGVyUGFnZS5hZGQocGFnZS0+cGFnZUlEKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgaWYgKGNhbGxiYWNrSW5NYXApCisgICAgICAgICAgICBjYWxsYmFja0luTWFwKEFVVE9N
QVRJT05fQ09NTUFORF9FUlJPUl9XSVRIX05BTUUoVGltZW91dCkpOworICAgICAgICBjYWxsYmFj
a0luTWFwID0gV1RGTW92ZShtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayk7CiAKLSAgICAgICAg
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBv
aW50OjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFgoeCkKLSAgICAgICAgICAgIC5zZXRZKHkg
LSBwYWdlLT50b3BDb250ZW50SW5zZXQoKSkKLSAgICAgICAgICAgIC5yZWxlYXNlKCkpOworICAg
ICAgICAvLyBUaGlzIGlzIGNsZWFyZWQgd2hlbiBhbGwgbW91c2UgZXZlbnRzIGFyZSBmbHVzaGVk
LgorICAgICAgICBtX3NpbXVsYXRpbmdVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworCisgICAgICAg
IHBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIHZpZXdQb3NpdGlvbiwgcGFy
c2VkSW50ZXJhY3Rpb24udmFsdWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGtleU1vZGlmaWVy
cyk7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgZXZlbnQgbG9jYXRpb24gd2FzIHByZXZp
b3VzbHkgY2xpcHBlZCBhbmQgZG9lcyBub3QgaGl0IHRlc3QgYW55dGhpbmcgaW4gdGhlIHdpbmRv
dywgdGhlbiBpdCB3aWxsIG5vdCBiZSBwcm9jZXNzZWQuCisgICAgICAgIC8vIEZvciBjb21wYXRp
YmlsaXR5IHdpdGggcHJlLVczQyBkcml2ZXIgaW1wbGVtZW50YXRpb25zLCBkb24ndCBtYWtlIHRo
aXMgYSBoYXJkIGVycm9yOyBqdXN0IGRvIG5vdGhpbmcgc2lsZW50bHkuCisgICAgICAgIC8vIElu
IFczQy1vbmx5IGNvZGUgcGF0aHMsIHdlIGNhbiByZWplY3QgYW55IHBvaW50ZXIgYWN0aW9ucyB3
aG9zZSBjb29yZGluYXRlcyBhcmUgb3V0c2lkZSB0aGUgdmlld3BvcnQgcmVjdC4KKyAgICAgICAg
aWYgKGNhbGxiYWNrSW5NYXAgJiYgIXBhZ2UtPmlzUHJvY2Vzc2luZ01vdXNlRXZlbnRzKCkpIHsK
KyAgICAgICAgICAgIGF1dG8gY2FsbGJhY2tUb0NhbmNlbCA9IG1fcGVuZGluZ01vdXNlRXZlbnRz
Rmx1c2hlZENhbGxiYWNrc1BlclBhZ2UudGFrZShwYWdlLT5wYWdlSUQoKSk7CisgICAgICAgICAg
ICBjYWxsYmFja1RvQ2FuY2VsKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIH0KICAgICB9KTsKICNl
bmRpZiAvLyBVU0UoQVBQS0lUKSB8fCBQTEFURk9STShHVEspCiB9CkBAIC0xNDczLDEwICsxNTI4
LDE3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0
aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAgaWYgKCFhY3Rpb25zVG9QZXJmb3Jt
LnNpemUoKSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW50ZXJuYWxFcnJvciwgIk5vIGFjdGlvbnMgdG8gcGVyZm9ybS4iKTsKIAorICAgIGF1
dG8ga2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigq
cGFnZSldKHN0ZDo6b3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKKyAg
ICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9y
LnZhbHVlKCkudG9Qcm90b2NvbFN0cmluZygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CisgICAgfTsKKwogICAgIGF1dG8mIGNhbGxiYWNrSW5N
YXAgPSBtX3BlbmRpbmdLZXlib2FyZEV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmFkZChw
YWdlLT5wYWdlSUQoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChjYWxsYmFj
a0luTWFwKQotICAgICAgICBjYWxsYmFja0luTWFwLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BS
RURFRklORURfRVJST1JfTkFNRShUaW1lb3V0KSk7Ci0gICAgY2FsbGJhY2tJbk1hcCA9IFdURk1v
dmUoY2FsbGJhY2spOworICAgICAgICBjYWxsYmFja0luTWFwKEFVVE9NQVRJT05fQ09NTUFORF9F
UlJPUl9XSVRIX05BTUUoVGltZW91dCkpOworICAgIGNhbGxiYWNrSW5NYXAgPSBXVEZNb3ZlKGtl
eWJvYXJkRXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAogICAgIC8vIFRoaXMgaXMgY2xlYXJlZCB3
aGVuIGFsbCBrZXlib2FyZCBldmVudHMgYXJlIGZsdXNoZWQuCiAgICAgbV9zaW11bGF0aW5nVXNl
ckludGVyYWN0aW9uID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAppbmRleCA1NzA2NzgyOTlkZjVi
MzRmOGU1NDAxZjI5MzljYTRiMTA1ZjZlN2NlLi4zYWUzNWU2ZjdlY2RjNThhM2RkOTVlOTgwODBl
ZjRhMzI5NWNhNzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDYgKzc2LDIxIEBAIGNs
YXNzIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7
CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIAorc3RydWN0IEF1dG9tYXRpb25Db21tYW5kRXJyb3Ig
eworcHVibGljOgorICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkVycm9yTWVz
c2FnZSB0eXBlOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBtZXNzYWdlIHsgc3RkOjpudWxs
b3B0IH07CisgICAgCisgICAgQXV0b21hdGlvbkNvbW1hbmRFcnJvcihJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpFcnJvck1lc3NhZ2UgdHlwZSkKKyAgICAgICAgOiB0eXBlKHR5cGUp
IHsgfQorCisgICAgQXV0b21hdGlvbkNvbW1hbmRFcnJvcihJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpFcnJvck1lc3NhZ2UgdHlwZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAg
ICAgICA6IHR5cGUodHlwZSkKKyAgICAgICAgLCBtZXNzYWdlKG1lc3NhZ2UpIHsgfQorICAgIAor
ICAgIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKCk7Cit9OworCiBjbGFzcyBXZWJBdXRvbWF0aW9u
U2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6
OkF1dG9tYXRpb25TZXNzaW9uPiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpSZW1vdGVBdXRv
bWF0aW9uVGFyZ2V0CkBAIC05OCw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkb2N1bWVu
dExvYWRlZEZvckZyYW1lKGNvbnN0IFdlYkZyYW1lUHJveHkmKTsKICAgICB2b2lkIGluc3BlY3Rv
ckZyb250ZW5kTG9hZGVkKGNvbnN0IFdlYlBhZ2VQcm94eSYpOwogICAgIHZvaWQga2V5Ym9hcmRF
dmVudHNGbHVzaGVkRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKTsKKyAgICB2b2lkIG1vdXNl
RXZlbnRzRmx1c2hlZEZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5Jik7CiAgICAgdm9pZCB3aWxs
Q2xvc2VQYWdlKGNvbnN0IFdlYlBhZ2VQcm94eSYpOwogICAgIHZvaWQgaGFuZGxlUnVuT3BlblBh
bmVsKGNvbnN0IFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkZyYW1lUHJveHkmLCBjb25zdCBBUEk6
Ok9wZW5QYW5lbFBhcmFtZXRlcnMmLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5Jik7
CiAgICAgdm9pZCB3aWxsU2hvd0phdmFTY3JpcHREaWFsb2coV2ViUGFnZVByb3h5Jik7CkBAIC0y
MzUsNyArMjUxLDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPj4gbV9wZW5kaW5nTm9ybWFs
TmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tzUGVyRnJhbWU7CiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZT4+IG1fcGVuZGluZ0VhZ2VyTmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tz
UGVyRnJhbWU7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+IG1fcGVuZGluZ0luc3BlY3RvckNhbGxiYWNrc1Bl
clBhZ2U7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+IG1fcGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1c2hlZENh
bGxiYWNrc1BlclBhZ2U7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgRnVuY3Rpb248dm9pZChzdGQ6
Om9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4+IG1fcGVuZGluZ0tleWJvYXJkRXZl
bnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2U7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgRnVuY3Rp
b248dm9pZChzdGQ6Om9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4+IG1fcGVuZGlu
Z01vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2U7CiAKICAgICB1aW50NjRfdCBtX25l
eHRFdmFsdWF0ZUphdmFTY3JpcHRDYWxsYmFja0lEIHsgMSB9OwogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+PiBtX2V2YWx1YXRlSmF2YVNjcmlw
dEZ1bmN0aW9uQ2FsbGJhY2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCmluZGV4IDJj
NWRiMTk3YmE1NjNlMDczMWQ5YzdjOWY1YTYzNjEyNTBkNjg3MDQuLjE3ZTlhMzdjODQzOTg1NDQ4
OTYxYTM1NDMwNGI5OWZhYjI5YTIzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgK
QEAgLTM4LDYgKzM4LDggQEAKICNkZWZpbmUgU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX01F
U1NBR0UoZXJyb3JNZXNzYWdlKSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUoVkFMSURBVEVEX0VSUk9SX01FU1NBR0UoZXJyb3JNZXNz
YWdlKSkKICNkZWZpbmUgU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX01FU1NBR0VfQU5EX0RF
VEFJTFMoZXJyb3JNZXNzYWdlLCBkZXRhaWxzU3RyaW5nKSBtYWtlU3RyaW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShWQUxJREFU
RURfRVJST1JfTUVTU0FHRShlcnJvck1lc3NhZ2UpKSwgZXJyb3JOYW1lQW5kRGV0YWlsc1NlcGFy
YXRvciwgZGV0YWlsc1N0cmluZykKIAorI2RlZmluZSBBVVRPTUFUSU9OX0NPTU1BTkRfRVJST1Jf
V0lUSF9OQU1FKGVycm9yTmFtZSkgQXV0b21hdGlvbkNvbW1hbmRFcnJvcihJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpFcnJvck1lc3NhZ2U6OmVycm9yTmFtZSkKKwogLy8gQ29udmVu
aWVuY2UgbWFjcm9zIGZvciBmaWxsaW5nIGluIHRoZSBlcnJvciBzdHJpbmcgb2Ygc3luY2hyb25v
dXMgY29tbWFuZHMgaW4gYmFpbG91dCBicmFuY2hlcy4KICNkZWZpbmUgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihlcnJvck5hbWUpIFwKIGRvIHsgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOTczOWQyYmU5Y2MzODY2NTFlNjNmNDgzOGRmN2Zm
YjE0ZjMyNzdiNC4uZDNhZDNjNTE3OGVlZWFiNmIxMjZlNGIyODgxM2NjY2UzOTRkZmRlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yOTMsMjEgKzI5Mywz
OCBAQCBFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzOjpSZWNvcmQqIEV4Y2VlZGVkRGF0YWJh
c2VRdW90YVJlY29yZHM6Om5leHQoKQogfQogCiAjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIGNv
bnN0IGNoYXIqIHdlYk1vdXNlRXZlbnRUeXBlU3RyaW5nKFdlYkV2ZW50OjpUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgorICAg
ICAgICByZXR1cm4gIk1vdXNlRG93biI7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKKyAg
ICAgICAgcmV0dXJuICJNb3VzZVVwIjsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Cisg
ICAgICAgIHJldHVybiAiTW91c2VNb3ZlIjsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZUZvcmNl
Q2hhbmdlZDoKKyAgICAgICAgcmV0dXJuICJNb3VzZUZvcmNlQ2hhbmdlZCI7CisgICAgY2FzZSBX
ZWJFdmVudDo6TW91c2VGb3JjZURvd246CisgICAgICAgIHJldHVybiAiTW91c2VGb3JjZURvd24i
OworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VVcDoKKyAgICAgICAgcmV0dXJuICJNb3Vz
ZUZvcmNlVXAiOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gIjx1bmtub3duPiI7CisgICAgfQorfQorCiBzdGF0aWMgY29uc3QgY2hh
ciogd2ViS2V5Ym9hcmRFdmVudFR5cGVTdHJpbmcoV2ViRXZlbnQ6OlR5cGUgdHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgogICAgICAgICBy
ZXR1cm4gIktleURvd24iOwotICAgIAogICAgIGNhc2UgV2ViRXZlbnQ6OktleVVwOgogICAgICAg
ICByZXR1cm4gIktleVVwIjsKLSAgICAKICAgICBjYXNlIFdlYkV2ZW50OjpSYXdLZXlEb3duOgog
ICAgICAgICByZXR1cm4gIlJhd0tleURvd24iOwotICAgIAogICAgIGNhc2UgV2ViRXZlbnQ6OkNo
YXI6CiAgICAgICAgIHJldHVybiAiQ2hhciI7Ci0gICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAiPHVua25vd24+IjsKQEAgLTE4
OTYsMjggKzE5MTMsMjkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZU1vdXNlRXZlbnQoY29u
c3QgTmF0aXZlV2ViTW91c2VFdmVudCYgZXZlbnQpCiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIExPRyhNb3VzZUhhbmRsaW5nLCAiVUlQcm9jZXNzOiBlbnF1ZXVl
ZCBtb3VzZSBldmVudCAlcyAocXVldWUgc2l6ZSAlenUpIiwgd2ViTW91c2VFdmVudFR5cGVTdHJp
bmcoZXZlbnQudHlwZSgpKSwgbV9tb3VzZUV2ZW50UXVldWUuc2l6ZSgpKTsKKyAgICBtX21vdXNl
RXZlbnRRdWV1ZS5hcHBlbmQoZXZlbnQpOworICAgIGlmIChtX21vdXNlRXZlbnRRdWV1ZS5zaXpl
KCkgPT0gMSkgLy8gT3RoZXJ3aXNlLCBjYWxsZWQgZnJvbSBEaWRSZWNlaXZlRXZlbnQgbWVzc2Fn
ZSBoYW5kbGVyLgorICAgICAgICBwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKTsKK30KKyAg
ICAKK3ZvaWQgV2ViUGFnZVByb3h5Ojpwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKQorewor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fbW91
c2VFdmVudFF1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBjb25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50
JiBldmVudCA9IG1fbW91c2VFdmVudFF1ZXVlLmZpcnN0KCk7CisgICAgCiAgICAgaWYgKG1fcGFn
ZUNsaWVudC53aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShldmVudCkpCiAgICAgICAgIHNl
dFRvb2xUaXAoU3RyaW5nKCkpOwogCiAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBzdGFydCB0
aGUgcmVzcG9uc2l2ZW5lc3MgdGltZXIgYmVjYXVzZSBtb3VzZSBtb3ZlIHNob3VsZCBub3QgaW5k
aWNhdGUgaW50ZXJhY3Rpb24uCiAgICAgaWYgKGV2ZW50LnR5cGUoKSAhPSBXZWJFdmVudDo6TW91
c2VNb3ZlKQogICAgICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgp
OwotICAgIGVsc2UgewotICAgICAgICBpZiAobV9wcm9jZXNzaW5nTW91c2VNb3ZlRXZlbnQpIHsK
LSAgICAgICAgICAgIG1fbmV4dE1vdXNlTW92ZUV2ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxOYXRp
dmVXZWJNb3VzZUV2ZW50PihldmVudCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBtX3Byb2Nlc3NpbmdNb3VzZU1vdmVFdmVudCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkwND4gV2Ug
bmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBtb3VzZSBkb3duIGV2ZW50IGluIHRoZSBjYXNlIHdo
ZXJlIHdlCi0gICAgLy8gZGlzcGxheSBhIHBvcHVwIG1lbnUgZm9yIHNlbGVjdCBlbGVtZW50cy4g
V2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzZWxlY3RlZCBpdGVtLAotICAgIC8vIHdlIGZha2Ug
YSBtb3VzZSB1cCBldmVudCBieSB1c2luZyB0aGlzIHN0b3JlZCBkb3duIGV2ZW50LiBUaGlzIGV2
ZW50IGdldHMgY2xlYXJlZAotICAgIC8vIHdoZW4gdGhlIG1vdXNlIHVwIG1lc3NhZ2UgaXMgcmVj
ZWl2ZWQgZnJvbSBXZWJQcm9jZXNzLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6
Ok1vdXNlRG93bikKLSAgICAgICAgbV9jdXJyZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCA9
IHN0ZDo6bWFrZV91bmlxdWU8TmF0aXZlV2ViTW91c2VFdmVudD4oZXZlbnQpOwogCisgICAgTE9H
KE1vdXNlSGFuZGxpbmcsICJVSVByb2Nlc3M6IHNlbnQgbW91c2UgZXZlbnQgJXMgKHF1ZXVlIHNp
emUgJXp1KSIsIHdlYk1vdXNlRXZlbnRUeXBlU3RyaW5nKGV2ZW50LnR5cGUoKSksIG1fbW91c2VF
dmVudFF1ZXVlLnNpemUoKSk7CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpNb3VzZUV2ZW50KGV2ZW50KSwgbV9wYWdlSUQpOwogfQogCkBAIC00ODMzLDkgKzQ4NTEsMjYg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFRleHRGcm9tSXRlbUZvclBvcHVwTWVudShXZWJQb3B1
cE1lbnVQcm94eSosIGludDMyX3QgaW5kZXgKICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldFRleHRGb3JBY3RpdmVQb3B1cE1lbnUoaW5kZXgpLCBtX3BhZ2VJRCk7CiB9
CiAKK2Jvb2wgV2ViUGFnZVByb3h5Ojppc1Byb2Nlc3NpbmdNb3VzZUV2ZW50cygpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX21vdXNlRXZlbnRRdWV1ZS5pc0VtcHR5KCk7Cit9CisKIE5hdGl2ZVdl
Yk1vdXNlRXZlbnQqIFdlYlBhZ2VQcm94eTo6Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZl
bnQoKQogewotICAgIHJldHVybiBtX2N1cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50Lmdl
dCgpOworICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5
MDQ+IFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbW91c2UgZG93biBldmVudCBpbiB0aGUg
Y2FzZSB3aGVyZSB3ZQorICAgIC8vIGRpc3BsYXkgYSBwb3B1cCBtZW51IGZvciBzZWxlY3QgZWxl
bWVudHMuIFdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgc2VsZWN0ZWQgaXRlbSwgd2UgZmFrZSBh
IG1vdXNldXAgZXZlbnQgYnkKKyAgICAvLyB1c2luZyB0aGlzIHN0b3JlZCBtb3VzZWRvd24gZXZl
bnQgYW5kIGNoYW5naW5nIHRoZSBldmVudCB0eXBlLiBUaGlzIHRyaWNrZXJ5IGhhcHBlbnMgd2hl
biBXZWJQcm9jZXNzIGhhbmRsZXMKKyAgICAvLyBhIG1vdXNlZG93biBldmVudCB0aGF0IHJ1bnMg
dGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgSFRNTFNlbGVjdEVsZW1lbnQsIHNvIHRoZSB0cmlnZ2Vy
aW5nIG1vdXNlZG93biBtdXN0IGJlIHRoZSBmaXJzdCBldmVudC4KKworICAgIGlmIChtX21vdXNl
RXZlbnRRdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAg
IGF1dG8mIGV2ZW50ID0gbV9tb3VzZUV2ZW50UXVldWUuZmlyc3QoKTsKKyAgICBpZiAoZXZlbnQu
dHlwZSgpICE9IFdlYkV2ZW50OjpUeXBlOjpNb3VzZURvd24pCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuICZldmVudDsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9i
amVjdCogbWVzc2FnZUJvZHkpCkBAIC01MjQzLDIwICs1Mjc4LDI3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKQog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgV2ViRXZlbnQ6Ok5vVHlwZToKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOgotICAgICAgICBtX3Byb2Nlc3Np
bmdNb3VzZU1vdmVFdmVudCA9IGZhbHNlOwotICAgICAgICBpZiAobV9uZXh0TW91c2VNb3ZlRXZl
bnQpCi0gICAgICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KCpzdGQ6OmV4Y2hhbmdlKG1fbmV4dE1v
dXNlTW92ZUV2ZW50LCBudWxscHRyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlRG93bjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VV
cDoKLSAgICAgICAgbV9jdXJyZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCA9IG51bGxwdHI7
Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VDaGFuZ2VkOgog
ICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRm9yY2VEb3duOgogICAgIGNhc2UgV2ViRXZlbnQ6Ok1v
dXNlRm9yY2VVcDoKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6CisgICAgY2FzZSBXZWJF
dmVudDo6TW91c2VEb3duOgorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6IHsKKyAgICAgICAg
TE9HKE1vdXNlSGFuZGxpbmcsICJXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudDogJXMgKHF1
ZXVlIHNpemUgJXp1KSIsIHdlYk1vdXNlRXZlbnRUeXBlU3RyaW5nKHR5cGUpLCBtX21vdXNlRXZl
bnRRdWV1ZS5zaXplKCkpOworCisgICAgICAgIC8vIFJldGlyZSB0aGUgbGFzdCBzZW50IGV2ZW50
IG5vdyB0aGF0IFdlYlByb2Nlc3MgaXMgZG9uZSBoYW5kbGluZyBpdC4KKyAgICAgICAgTUVTU0FH
RV9DSEVDSyghbV9tb3VzZUV2ZW50UXVldWUuaXNFbXB0eSgpKTsKKyAgICAgICAgTmF0aXZlV2Vi
TW91c2VFdmVudCBldmVudCA9IG1fbW91c2VFdmVudFF1ZXVlLnRha2VGaXJzdCgpOworICAgICAg
ICBNRVNTQUdFX0NIRUNLKHR5cGUgPT0gZXZlbnQudHlwZSgpKTsKKworICAgICAgICBpZiAoIW1f
bW91c2VFdmVudFF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTE9HKE1vdXNlSGFuZGxp
bmcsICIgVUlQcm9jZXNzOiBoYW5kbGluZyBhIHF1ZXVlZCBtb3VzZSBldmVudCBmcm9tIGRpZFJl
Y2VpdmVFdmVudCIpOworICAgICAgICAgICAgcHJvY2Vzc05leHRRdWV1ZWRNb3VzZUV2ZW50KCk7
CisgICAgICAgIH0gZWxzZSBpZiAoYXV0byogYXV0b21hdGlvblNlc3Npb24gPSBwcm9jZXNzKCku
cHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQorICAgICAgICAgICAgYXV0b21hdGlv
blNlc3Npb24tPm1vdXNlRXZlbnRzRmx1c2hlZEZvclBhZ2UoKnRoaXMpOworCiAgICAgICAgIGJy
ZWFrOworICAgIH0KIAogICAgIGNhc2UgV2ViRXZlbnQ6OldoZWVsOiB7CiAgICAgICAgIE1FU1NB
R0VfQ0hFQ0soIW1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVudHMuaXNFbXB0eSgpKTsKQEAg
LTUyODUsNyArNTMyNyw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWlu
dDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKQogCiAgICAgICAgIE1FU1NBR0VfQ0hFQ0so
dHlwZSA9PSBldmVudC50eXBlKCkpOwogCi0gICAgICAgIGlmICghbV9rZXlFdmVudFF1ZXVlLmlz
RW1wdHkoKSkgeworICAgICAgICBib29sIGNhblByb2Nlc3NNb3JlS2V5RXZlbnRzID0gIW1fa2V5
RXZlbnRRdWV1ZS5pc0VtcHR5KCk7CisgICAgICAgIGlmIChjYW5Qcm9jZXNzTW9yZUtleUV2ZW50
cykgewogICAgICAgICAgICAgTE9HKEtleUhhbmRsaW5nLCAiIFVJIHByb2Nlc3M6IHNlbnQga2V5
RXZlbnQgZnJvbSBkaWRSZWNlaXZlRXZlbnQiKTsKICAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6S2V5RXZlbnQobV9rZXlFdmVudFF1ZXVlLmZpcnN0KCkpLCBt
X3BhZ2VJRCk7CiAgICAgICAgIH0KQEAgLTUyOTksNyArNTM0Miw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKQog
ICAgICAgICAgICAgbV91aUNsaWVudC0+ZGlkTm90SGFuZGxlS2V5RXZlbnQodGhpcywgZXZlbnQp
OwogCiAgICAgICAgIC8vIE5vdGlmeSB0aGUgc2Vzc2lvbiBhZnRlciAtW05TQXBwIHNlbmRFdmVu
dDpdIGhhcyBhIGNyYWNrIGF0IHR1cm5pbmcgdGhlIGV2ZW50IGludG8gYW4gYWN0aW9uLgotICAg
ICAgICBpZiAobV9rZXlFdmVudFF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIWNhblBy
b2Nlc3NNb3JlS2V5RXZlbnRzKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogYXV0b21hdGlvblNl
c3Npb24gPSBwcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQogICAg
ICAgICAgICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5rZXlib2FyZEV2ZW50c0ZsdXNoZWRGb3JQ
YWdlKCp0aGlzKTsKICAgICAgICAgfQpAQCAtNTkwMywxNSArNTk0NiwxMCBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZChQcm9jZXNzVGVybWluYXRpb25S
ZWFzb24gdGVybWluYQogICAgIG1fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50
ID0gMDsKIAogICAgIC8vIENhbid0IGV4cGVjdCBEaWRSZWNlaXZlRXZlbnQgbm90aWZpY2F0aW9u
cyBmcm9tIGEgY3Jhc2hlZCB3ZWIgcHJvY2Vzcy4KKyAgICBtX21vdXNlRXZlbnRRdWV1ZS5jbGVh
cigpOwogICAgIG1fa2V5RXZlbnRRdWV1ZS5jbGVhcigpOwogICAgIG1fd2hlZWxFdmVudFF1ZXVl
LmNsZWFyKCk7CiAgICAgbV9jdXJyZW50bHlQcm9jZXNzZWRXaGVlbEV2ZW50cy5jbGVhcigpOwot
Ci0gICAgbV9uZXh0TW91c2VNb3ZlRXZlbnQgPSBudWxscHRyOwotICAgIG1fY3VycmVudGx5UHJv
Y2Vzc2VkTW91c2VEb3duRXZlbnQgPSBudWxscHRyOwotCi0gICAgbV9wcm9jZXNzaW5nTW91c2VN
b3ZlRXZlbnQgPSBmYWxzZTsKLQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFFTkFCTEUo
SU9TX1RPVUNIX0VWRU5UUykKICAgICBtX3RvdWNoRXZlbnRRdWV1ZS5jbGVhcigpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDU0MDg0NDhlOTcyZTgy
ODI2MzhiMDU3Y2YyNWE2YmNhOTNiY2E2NjIuLmUzYzJjNzI1OWIzOWZmMWVlYjJiYTRkNGU4NzIz
NTI4ODFhOWNhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC02
ODYsNyArNjg2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQog
I2VuZGlmCiAKKyAgICBib29sIGlzUHJvY2Vzc2luZ01vdXNlRXZlbnRzKCkgY29uc3Q7CisgICAg
dm9pZCBwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQoKTsKICAgICB2b2lkIGhhbmRsZU1vdXNl
RXZlbnQoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYpOworCiAgICAgdm9pZCBoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKICAgICB2b2lkIGhhbmRsZUtleWJv
YXJkRXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOwogCkBAIC0xOTM5LDYgKzE5
NDIsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2RlY2lkZVBv
bGljeUZvclJlc3BvbnNlUmVxdWVzdDsKICAgICBib29sIG1fc2hvdWxkU3VwcHJlc3NBcHBMaW5r
c0luTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB7IGZhbHNlIH07CiAKKyAgICBEZXF1ZTxO
YXRpdmVXZWJNb3VzZUV2ZW50PiBtX21vdXNlRXZlbnRRdWV1ZTsKICAgICBEZXF1ZTxOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50PiBtX2tleUV2ZW50UXVldWU7CiAgICAgRGVxdWU8TmF0aXZlV2ViV2hl
ZWxFdmVudD4gbV93aGVlbEV2ZW50UXVldWU7CiAgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxOYXRpdmVXZWJXaGVlbEV2ZW50Pj4+IG1fY3VycmVudGx5UHJvY2Vzc2VkV2hlZWxFdmVu
dHM7CkBAIC0xOTQ2LDEwICsxOTUwLDYgQEAgcHJpdmF0ZToKICAgICBEZXF1ZTxOYXRpdmVXZWJH
ZXN0dXJlRXZlbnQ+IG1fZ2VzdHVyZUV2ZW50UXVldWU7CiAjZW5kaWYKIAotICAgIGJvb2wgbV9w
cm9jZXNzaW5nTW91c2VNb3ZlRXZlbnQgeyBmYWxzZSB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxO
YXRpdmVXZWJNb3VzZUV2ZW50PiBtX25leHRNb3VzZU1vdmVFdmVudDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8TmF0aXZlV2ViTW91c2VFdmVudD4gbV9jdXJyZW50bHlQcm9jZXNzZWRNb3VzZURvd25F
dmVudDsKLQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc3RydWN0IFRvdWNoRXZlbnRU
cmFja2luZyB7CiAgICAgICAgIFdlYkNvcmU6OlRyYWNraW5nVHlwZSB0b3VjaEZvcmNlQ2hhbmdl
ZFRyYWNraW5nIHsgV2ViQ29yZTo6VHJhY2tpbmdUeXBlOjpOb3RUcmFja2luZyB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>