<?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>192482</bug_id>
          
          <creation_ts>2018-12-06 16:23:14 -0800</creation_ts>
          <short_desc>PSON logic gets confused by concurrent decidePolicyForNavigationAction requests</short_desc>
          <delta_ts>2018-12-12 18:30:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1485861</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-06 16:23:14 -0800</bug_when>
    <thetext>PSON logic gets confused by concurrent decidePolicyForNavigationAction requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485862</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-06 16:23:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/46470145&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485881</commentid>
    <comment_count>2</comment_count>
      <attachid>356767</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-06 16:56:40 -0800</bug_when>
    <thetext>Created attachment 356767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485883</commentid>
    <comment_count>3</comment_count>
      <attachid>356767</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-12-06 17:20:13 -0800</bug_when>
    <thetext>Comment on attachment 356767
Patch

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

&gt; Source/WebKit/ChangeLog:25
&gt; +        To address these issues, the following design is now implemented:

This sounds good.

&gt; Source/WebKit/UIProcess/SuspendedPageProxy.cpp:123
&gt; +std::unique_ptr&lt;SuspendedPageProxy&gt; SuspendedPageProxy::unsuspendAndConsume()

This is a very strange ownership model.  It returns a unique_ptr of itself?

&gt; Source/WebKit/UIProcess/SuspendedPageProxy.h:50
&gt; +    void whenReadyToConsume(CompletionHandler&lt;void(SuspendedPageProxy*)&gt;&amp;&amp;);

I think this is poorly named.  I think it needs a verb at the beginning.
Also, what does &quot;consume&quot; mean in this case?  Does it mean we are discarding the process or we are promoting this suspended page to be the page backing the WKWebView?

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:772
&gt; +    m_isValid = true;

I don&apos;t understand why we are changing the validity of the page during swapping.  You mentioned it earlier today and it puzzled me then, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486004</commentid>
    <comment_count>4</comment_count>
      <attachid>356767</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-07 08:38:46 -0800</bug_when>
    <thetext>Comment on attachment 356767
Patch

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

&gt;&gt; Source/WebKit/UIProcess/SuspendedPageProxy.cpp:123
&gt;&gt; +std::unique_ptr&lt;SuspendedPageProxy&gt; SuspendedPageProxy::unsuspendAndConsume()
&gt; 
&gt; This is a very strange ownership model.  It returns a unique_ptr of itself?

Yes, it returns a unique_ptr of itself, thus &quot;consume&quot; in the same. Once a SuspendedPageProxy is unsuspended, it can no longer be used so it gets removed from the WebProcessPool (which normally owns it). At this point somebody has to own the suspended page and it makes sense that it is the caller of unsuspend().

&gt;&gt; Source/WebKit/UIProcess/SuspendedPageProxy.h:50
&gt;&gt; +    void whenReadyToConsume(CompletionHandler&lt;void(SuspendedPageProxy*)&gt;&amp;&amp;);
&gt; 
&gt; I think this is poorly named.  I think it needs a verb at the beginning.
&gt; Also, what does &quot;consume&quot; mean in this case?  Does it mean we are discarding the process or we are promoting this suspended page to be the page backing the WKWebView?

consume means unsuspend. After you unsuspend a suspended page, it can no longer be used, which is why I used the naming &quot;consume&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486006</commentid>
    <comment_count>5</comment_count>
      <attachid>356767</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-07 08:46:26 -0800</bug_when>
    <thetext>Comment on attachment 356767
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:772
&gt;&gt; +    m_isValid = true;
&gt; 
&gt; I don&apos;t understand why we are changing the validity of the page during swapping.  You mentioned it earlier today and it puzzled me then, too.

This is pre-existing behavior, has been like this from the start when Brady implemented it. We currently call processDidTerminate() which sets m_isValid to false so we need to set it back to true when we reconnect to the new process. This is all synchronous so it does not matter much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486008</commentid>
    <comment_count>6</comment_count>
      <attachid>356814</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-07 08:49:13 -0800</bug_when>
    <thetext>Created attachment 356814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486009</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-07 08:49:48 -0800</bug_when>
    <thetext>Ok, I tried to improve the naming / ownership model based on your feedback. Hopefully you&apos;ll like this iteration better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486578</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-10 08:51:02 -0800</bug_when>
    <thetext>ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487008</commentid>
    <comment_count>9</comment_count>
      <attachid>356814</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-12-11 12:21:22 -0800</bug_when>
    <thetext>Comment on attachment 356814
Patch

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

The additional asynchronous steps make the code even harder to follow, which is sad. But this does solve a real problem.

&gt; Source/WebKit/ChangeLog:11
&gt; +        It is possible to get 2 parallel decidePolicyForNavigationAction() requests from the
&gt; +        WebProcess when a new load is started before responding to the existing policy
&gt; +        decision. This would lead to several issues with regards to PSON:

Could we alternatively avoid this issue by not calling policy delegates for about:blank loads for suspension?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487009</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-11 12:23:09 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #9)
&gt; Comment on attachment 356814 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=356814&amp;action=review
&gt; 
&gt; The additional asynchronous steps make the code even harder to follow, which
&gt; is sad. But this does solve a real problem.
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:11
&gt; &gt; +        It is possible to get 2 parallel decidePolicyForNavigationAction() requests from the
&gt; &gt; +        WebProcess when a new load is started before responding to the existing policy
&gt; &gt; +        decision. This would lead to several issues with regards to PSON:
&gt; 
&gt; Could we alternatively avoid this issue by not calling policy delegates for
&gt; about:blank loads for suspension?

We already do not do policy checks for about:blank suspension loads. The issue is really that the browser (or the page) can asks for several loads before we&apos;ve received the policy decision for the first load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487010</commentid>
    <comment_count>11</comment_count>
      <attachid>356814</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-11 12:24:11 -0800</bug_when>
    <thetext>Comment on attachment 356814
Patch

Clearing flags on attachment: 356814

Committed r239080: &lt;https://trac.webkit.org/changeset/239080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487011</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-11 12:24:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487082</commentid>
    <comment_count>13</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2018-12-11 17:25:39 -0800</bug_when>
    <thetext>Looks like the new api test from https://trac.webkit.org/changeset/239080/webkit

is failing on Debug builds

Log
https://build.webkit.org/builders/Apple%20Sierra%20Debug%20WK1%20%28Tests%29/builds/10666/steps/run-api-tests/logs/stdio

Failed

    TestWebKitAPI.ProcessSwap.ConcurrentHistoryNavigations
        Received data during response processing, queuing it.
        Received data during response processing, queuing it.
        Received data during response processing, queuing it.
        LEAK: 1 WebProcessPool
        
        /Volumes/Data/slave/sierra-debug/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:2537
        Expected equality of these values:
          webkitPID
            Which is: 57142
          [webView _webProcessIdentifier]
            Which is: 57144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487097</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-12-11 18:54:39 -0800</bug_when>
    <thetext>(In reply to Truitt Savell from comment #13)
&gt; Looks like the new api test from
&gt; https://trac.webkit.org/changeset/239080/webkit
&gt; 
&gt; is failing on Debug builds
&gt; 
&gt; Log
&gt; https://build.webkit.org/builders/Apple%20Sierra%20Debug%20WK1%20%28Tests%29/
&gt; builds/10666/steps/run-api-tests/logs/stdio
&gt; 
&gt; Failed
&gt; 
&gt;     TestWebKitAPI.ProcessSwap.ConcurrentHistoryNavigations
&gt;         Received data during response processing, queuing it.
&gt;         Received data during response processing, queuing it.
&gt;         Received data during response processing, queuing it.
&gt;         LEAK: 1 WebProcessPool
&gt;         
&gt;        
&gt; /Volumes/Data/slave/sierra-debug/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/
&gt; ProcessSwapOnNavigation.mm:2537
&gt;         Expected equality of these values:
&gt;           webkitPID
&gt;             Which is: 57142
&gt;           [webView _webProcessIdentifier]
&gt;             Which is: 57144

Fixed API test in &lt;https://trac.webkit.org/changeset/239095&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487412</commentid>
    <comment_count>15</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-12-12 16:46:39 -0800</bug_when>
    <thetext>This patch broke the WinCairo Debug build:
&gt; Source\WebKit\UIProcess\WebPageProxy.cpp(2762): error C2381: &apos;WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap&apos;: redefinition; &apos;__declspec(noreturn)&apos; or &apos;[[noreturn]]&apos; differs
&gt; Source\WebKit\UIProcess\WebPageProxy.h(1569): note: see declaration of &apos;WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap&apos;

So I made a simple build fix in r239129:
https://trac.webkit.org/changeset/239129/webkit

But this evidently causes tests to crash in Cocoa Debug, so I tried a follow-up in r239131 which should have been *even more* innocuous:
https://trac.webkit.org/changeset/239131/webkit

Yet this did not help:
https://build.webkit.org/results/Apple%20Sierra%20Debug%20WK2%20(Tests)/r239131%20(8973)/results.html

So it was rolled out in bug 192646.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487456</commentid>
    <comment_count>16</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-12-12 18:30:21 -0800</bug_when>
    <thetext>Committed MSVC build fix in r239144: &lt;https://trac.webkit.org/changeset/239144&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356767</attachid>
            <date>2018-12-06 16:56:40 -0800</date>
            <delta_ts>2018-12-07 08:49:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192482-20181206165639.patch</filename>
            <type>text/plain</type>
            <size>51327</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJjNmZhMmZjZTkzN2E0YjY4
ZTExZDk2NWFhN2I0ODZjYTc4YTM2YWUuLjYxMzFmNmI3YzVlMjQwN2FlYzVhYTA1ZTY0NDdjNTI3
NmEyMTBmNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDE4LTEyLTA2ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUFNPTiBsb2dpYyBnZXRzIGNvbmZ1
c2VkIGJ5IGNvbmN1cnJlbnQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiByZXF1ZXN0
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNDgy
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjQ3MDE0NT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBnZXQgMiBwYXJh
bGxlbCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCkgcmVxdWVzdHMgZnJvbSB0aGUK
KyAgICAgICAgV2ViUHJvY2VzcyB3aGVuIGEgbmV3IGxvYWQgaXMgc3RhcnRlZCBiZWZvcmUgcmVz
cG9uZGluZyB0byB0aGUgZXhpc3RpbmcgcG9saWN5CisgICAgICAgIGRlY2lzaW9uLiBUaGlzIHdv
dWxkIGxlYWQgdG8gc2V2ZXJhbCBpc3N1ZXMgd2l0aCByZWdhcmRzIHRvIFBTT046CisgICAgICAg
IC0gV2Ugd291bGQgZGVjaWRlIHRvIHN3YXAgZm9yIHRoZSBmaXJzdCBwb2xpY3kgZGVjaXNpb24g
YW5kIHRlbGwgdGhlIFdlYlByb2Nlc3MgdG8KKyAgICAgICAgICBzdXNwZW5kLiBIb3dldmVyLCBi
ZWNhdXNlIHRoZSBXZWJQcm9jZXNzIGlzc3VlZCBhIG5ldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uCisgICAgICAgICAgc2luY2UgZm9yIHRoZSBzYW1lIGZyYW1lLCB0aGUgcHJldmlv
dXMgb25lIGlzIGludmFsaWRhdGVkIGFuZCB0aGUgV2ViUHJvY2VzcyB3b3VsZAorICAgICAgICAg
IGlnbm9yZSBvdXIgcmVxdWVzdCB0byBzdXNwZW5kLgorICAgICAgICAtIFdlIHdvdWxkIGhpdCBh
c3NlcnRpb25zIGxhdGVyIG9uIGJlY2F1c2UgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gZGVzdHJv
eWVkIGFuZCB5ZXQKKyAgICAgICAgICB3ZSdyZSBnZXR0aW5nIGEgZGlkU3RhcnRQcm92aXNpb25h
bExvYWQgZm9yIGl0LgorICAgICAgICAtIHN3YXBUb1dlYlByb2Nlc3MoKSB3YXMgYXN5bmNocm9u
b3VzIHNvIHRoYXQgaXQgd291bGQgd2FpdCBmb3IgdGhlIGRlc3RpbmF0aW9uCisgICAgICAgICAg
U3VzcGVuZGVkUGFnZSB0byBmaW5pc2ggc3VzcGVuZGluZyBiZWZvcmUgYXNraW5nIGl0IHRvIHVu
c3VzcGVuZC4gVGhpcyBsZWQgdG8gdmFyaW91cworICAgICAgICAgIHByb2JsZW1zIGJlY2F1c2Ug
YW55dGhpbmcgY2FuIGhhcHBlbiBpbiB0aGUgVUlQcm9jZXNzIHdoaWxlIHdlJ3JlIHdhaXRpbmcg
Zm9yIHRoZQorICAgICAgICAgIHN1c3BlbnNpb24gKGUuZy4gYW5vdGhlciBsb2FkKS4gQWxzbywg
d2UgbWF5IGNyZWF0ZSB0aGUgU3VzcGVuZGVkUGFnZVByb3h5IGZvcgorICAgICAgICAgIHRoZSBj
dXJyZW50IHBhZ2UgdG9vIGxhdGUgYW5kIHN0YXJ0IGdldHRpbmcgSVBDIGZyb20gdGhlIHByZXZp
b3VzIHByb2Nlc3MgYWJvdXQKKyAgICAgICAgICB0aGUgc3VzcGVuc2lvbiBsb2FkIHRvIGFib3V0
OmJsYW5rLgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhlc2UgaXNzdWVzLCB0aGUgZm9sbG93aW5n
IGRlc2lnbiBpcyBub3cgaW1wbGVtZW50ZWQ6CisgICAgICAgIC0gc3dhcFRvV2ViUHJvY2Vzcygp
IGlzIG5vIGxvbmdlciBhc3luY2hyb25vdXMKKyAgICAgICAgLSBpbnN0ZWFkLCBXZWJQcm9jZXNz
UG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oKSBpcyBub3cgYXN5bmNocm9ub3VzLiBUaGlzIGlz
IGJldHRlcgorICAgICAgICAgIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIG5vdCB5ZXQg
dG9sZCB0aGUgV2ViUHJvY2VzcyBhYm91dCB0aGUgcG9saWN5IGRlY2lzaW9uLgorICAgICAgICAg
IFdlIGFscmVhZHkgcHJvcGVybHkgZGVhbCB3aXRoIHRoZSBwb2xpY3kgZGVjaXNpb24gYmVpbmcg
bWFkZSBhc3luY2hyb25vdXNseS4gVGhpcworICAgICAgICAgIGFsc28gYWxsb3dzIHVzIHRvIGNo
b29zZSBhbm90aGVyIHByb2Nlc3MgaWYgdGhlIFN1c3BlbmRlZFBhZ2Ugd2UnZCBsaWtlIHRvIHVz
ZQorICAgICAgICAgIGZhaWxlZCB0byBzdXNwZW5kLgorICAgICAgICAtIElmIHRoZSBXZWJQcm9j
ZXNzIHJlY2VpdmVzIGEgUG9saWN5QWN0aW9uOjpTdXNwZW5kIGJ1dCBpZ25vcmVzIGl0LCBoYXZl
IGl0IHNlbmQgYW4KKyAgICAgICAgICBJUEMgdG8gdGhlIFVJUHJvY2VzcyBzbyB0aGF0IHRoZSBT
dXNwZW5kZWRQYWdlUHJveHkga25vd3MgYWJvdXQgaXQuIFdlIHRoZW4gZGVzdHJveQorICAgICAg
ICAgIHRoZSBTdXNwZW5kZWRQYWdlUHJveHkgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgdXNlZC4K
KyAgICAgICAgLSBBZnRlciB0aGUgYXN5bmNocm9ub3VzIHByb2Nlc3Mgc2VsZWN0aW9uLCBpZiB0
aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiBkZXN0cm95LCBhYm9ydAorICAgICAgICAgIHRoZSBwcm9j
ZXNzLXN3YXAgdG8gYXZvaWQgaGl0dGluZyBhc3NlcnRpb25zIGxhdGVyIG9uIGR1ZSB0byBkb2lu
ZyBhIGxvYWQgZm9yIGEKKyAgICAgICAgICBkZXN0cm95ZWQgbmF2aWdhdGlvbi4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpT
dXNwZW5kZWRQYWdlUHJveHk6On5TdXNwZW5kZWRQYWdlUHJveHkpOgorICAgICAgICBNYWtlIHN1
cmUgbV93aGVuUmVhZHlUb0NvbnN1bWUgY29tcGxldGlvbiBoYW5kbGVyIGdldHMgY2FsbGVkIGlm
IG5lY2Vzc2FyeSBpZiB0aGUKKyAgICAgICAgU3VzcGVuZGVkUGFnZVByb3h5IGdldHMgZGVzdHJv
eWVkLiBXZSBwYXNzIG51bGwgc28gdGhhdCB0aGUgU3VzcGVuZGVkUGFnZSBpcyBub3QKKyAgICAg
ICAgdXNlZC4KKworICAgICAgICAoV2ViS2l0OjpTdXNwZW5kZWRQYWdlUHJveHk6OndoZW5SZWFk
eVRvQ29uc3VtZSk6CisgICAgICAgIEFkZCB3aGVuUmVhZHlUb0NvbnN1bWUoKSB1dGlsaXR5IG1l
dGhvZCB0byBnZXQgYSBjb21wbGV0aW9uIGhhbmRsZXIgY2FsbGVkIHdoZW4KKyAgICAgICAgdGhl
IFN1c3BlbmRlZFBhZ2VQcm94eSBpcyByZWFkeSB0byBiZSB1c2VkLiBUaGlzIGJhc2ljYWxseSBt
ZWFucyB3ZSBoYXZlIHRvIHdhaXQKKyAgICAgICAgZm9yIHRoZSBwYWdlIHRvIGZpbmlzaCBpdHMg
YWJvdXQ6Ymxhbmsgc3VzcGVuc2lvbiBsb2FkLiBJZiB0aGUgc3VzcGVuc2lvbiBmYWlscworICAg
ICAgICB0aGVuIHdlIGNhbGwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aXRoIG51bGwgdG8gaW5k
aWNhdGUgdGhhdCB0aGUgc3VzcGVuZGVkCisgICAgICAgIHBhZ2UgaXMgbm90IHVzYWJsZS4KKwor
ICAgICAgICAoV2ViS2l0OjpTdXNwZW5kZWRQYWdlUHJveHk6OnVuc3VzcGVuZEFuZENvbnN1bWUp
OgorICAgICAgICBSZW5hbWUgdW5zdXNwZW5kKCkgdG8gdW5zdXNwZW5kQW5kQ29uc3VtZSgpIGFu
ZCBtYWtlIGl0IHN5bmNocm9ub3VzLiBUaGlzIG9ubHkgZ2V0cworICAgICAgICBjYWxsZWQgYWZ0
ZXIgd2hlblJlYWR5VG9Db25zdW1lKCkncyBjb21wbGV0aW9uIGhhbmRsZXIgaGFzIGJlZW4gY2Fs
bGVkIGFuZCBpZiB3ZQorICAgICAgICBkbyBkZWNpZGUgdG8gdXNlIHRoZSBTdXNwZW5kZWRQYWdl
UHJveHkuIEl0IHRlbGxzIHRoZSBXZWJQcm9jZXNzIHRvIHVuc3VzcGVuZCBhbmQKKyAgICAgICAg
cmVtb3ZlcyB0aGUgU3VzcGVuZGVkUGFnZVByb3h5IGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgor
CisgICAgICAgIChXZWJLaXQ6OlN1c3BlbmRlZFBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZCk6Cisg
ICAgICAgIHJlbmFtZSBtX2ZpbmlzaGVkU3VzcGVuZGluZ0hhbmRsZXIgdG8gbV93aGVuUmVhZHlU
b0NvbnN1bWUuCisKKyAgICAgICAgKFdlYktpdDo6U3VzcGVuZGVkUGFnZVByb3h5OjpkaWRGYWls
VG9TdXNwZW5kKToKKyAgICAgICAgQWRkIG5ldyBkaWRGYWlsVG9TdXNwZW5kKCkgdGhhdCBnZXRz
IGNhbGxlZCB3aGVuIHRoZSBXZWJQcm9jZXNzIHNlbmRzIHVzIGFuIElQQyB0ZWxsaW5nCisgICAg
ICAgIHVzIGl0IGlnbm9yZWQgb3VyIHJlcXVlc3QgdG8gc3VzcGVuZC4gV2UgdGhlbiBjYWxsIG1f
d2hlblJlYWR5VG9Db25zdW1lIGNvbXBsZXRpb24KKyAgICAgICAgaGFuZGxlciB3aXRoIG51bGwg
YW5kIGRlc3Ryb3kgdGhlIFN1c3BlbmRlZFBhZ2VQcm94eS4KKworICAgICAgICAoV2ViS2l0OjpT
dXNwZW5kZWRQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvU3VzcGVuZGVkUGFnZVByb3h5Lmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTmF2aWdh
dGlvblN0YXRlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYk5hdmlnYXRpb25TdGF0ZTo6aGFzTmF2
aWdhdGlvbiBjb25zdCk6CisgICAgICAgIEFkZCB1dGlsaXR5IGZ1bmN0aW9uIHRvIHF1ZXJ5IGlm
IGEgbmF2aWdhdGlvbiBpcyBzdGlsbCB2YWxpZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN3YXBUb1dlYlBy
b2Nlc3MpOgorICAgICAgICBVcGRhdGUgbWV0aG9kIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGFz
eW5jaHJvbm91cy4gU29tZSBvZiBpdHMgY29kZSB3YXMgYWxzbyBtb3ZlZCB0bworICAgICAgICBj
b250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoKSBmb3IgY2xhcml0eS4KKworICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkTmF2aWdhdGlvblBvbGljeURlY2lzaW9uKToK
KyAgICAgICAgRGVhbCB3aXRoIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbigp
IG5vdyBiZWluZyBhc3luY2hyb25vdXMuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojpjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MpOgorICAgICAgICBVcGRhdGUgY29kZSBu
b3cgdGhhdCBzd2FwVG9XZWJQcm9jZXNzKCkgaXMgbm8gbG9uZ2VyIGFzeW5jaHJvbm91cy4gU29t
ZSBvZiB0aGUgc3dhcFRvV2ViUHJvY2VzcygpCisgICAgICAgIGNvZGUgd2FzIGFsc28gbW92ZWQg
aGVyZSBmb3IgY2xhcml0eS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZh
aWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2FwKToKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
OgorICAgICAgICBBZGQgbmV3IERpZEZhaWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2FwIElQQyBt
ZXNzYWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICBNYWtlIGFz
eW5jaHJvbm91cy4gSWYgd2UgZGVjaWRlIHRvIHVzZSBhIFN1c3BlbmRlZFBhZ2VQcm94eSdzIHBy
b2Nlc3MsIHRoZW4gY2FsbAorICAgICAgICB3aGVuUmVhZHlUb0NvbnN1bWUoKSBvbiBpdCB0byB3
YWl0IGZvciBpdCB0byBzdXNwZW5kLiBJZiB0aGUgU3VzcGVuZGVkUGFnZVByb3h5CisgICAgICAg
IGZhaWxzIHRvIHN1c3BlbmQgdXNlIGEgbmV3IHByb2Nlc3MgaW5zdGVhZC4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24pOgorICAgICAgICBJZiB3ZSBpZ25vcmUgdGhl
IHBvbGljeSBkZWNpc2lvbiBhbmQgdGhlIGRlY2lzaW9uIHdhcyAiU3VzcGVuZCIsIHNlbmQgdGhl
IERpZEZhaWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2FwCisgICAgICAgIElQQyB0byB0aGUgVUlQ
cm9jZXNzIHNvIHRoYXQgdGhlIFN1c3BlbmRlZFBhZ2VQcm94eSBrbm93cyBhYm91dCBpdC4KKwog
MjAxOC0xMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFNp
bXBsaWZ5IGxvZ2ljIGluc2lkZSBXZWJQYWdlUHJveHk6OmNvbnRpbnVlTmF2aWdhdGlvbkluTmV3
UHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3VzcGVuZGVkUGFnZVByb3h5
LmNwcAppbmRleCAwZmVhOWEyYjkyMGIxNzBkN2NhNzZjYTFmMjVhZDIxMGFhNDY5MGZlLi5lMjM5
MTQ3ZGEzYWJlZDJjZDE1Y2E5MzdiZWRiYThlZWU4ZWY0Zjk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1N1c3BlbmRlZFBhZ2VQcm94eS5jcHAKQEAgLTkxLDYgKzkxLDkgQEAgU3Vz
cGVuZGVkUGFnZVByb3h5OjpTdXNwZW5kZWRQYWdlUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBS
ZWY8V2ViUHJvY2Vzc1Byb3h5PiYKIAogU3VzcGVuZGVkUGFnZVByb3h5Ojp+U3VzcGVuZGVkUGFn
ZVByb3h5KCkKIHsKKyAgICBpZiAobV93aGVuUmVhZHlUb0NvbnN1bWUpCisgICAgICAgIG1fd2hl
blJlYWR5VG9Db25zdW1lKG51bGxwdHIpOworCiAgICAgaWYgKCFtX2lzU3VzcGVuZGVkKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTEwNiwyMiArMTA5LDI3IEBAIFN1c3BlbmRlZFBhZ2VQcm94eTo6
flN1c3BlbmRlZFBhZ2VQcm94eSgpCiAgICAgfSk7CiB9CiAKLXZvaWQgU3VzcGVuZGVkUGFnZVBy
b3h5Ojp1bnN1c3BlbmQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBTdXNwZW5kZWRQYWdlUHJveHk6OndoZW5SZWFkeVRvQ29uc3VtZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN1c3BlbmRlZFBhZ2VQcm94eSopPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGlmIChtX3doZW5SZWFkeVRvQ29uc3VtZSkKKyAgICAgICAgbV93aGVuUmVhZHlU
b0NvbnN1bWUobnVsbHB0cik7CisKKyAgICBpZiAoIW1fZmluaXNoZWRTdXNwZW5kaW5nKQorICAg
ICAgICBtX3doZW5SZWFkeVRvQ29uc3VtZSA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwor
ICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodGhpcyk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IFN1c3BlbmRlZFBhZ2VQcm94eTo6dW5zdXNwZW5k
QW5kQ29uc3VtZSgpCiB7CiAgICAgQVNTRVJUKG1faXNTdXNwZW5kZWQpOworICAgIEFTU0VSVCht
X2ZpbmlzaGVkU3VzcGVuZGluZyk7CisKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAg
bV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UucGFnZUlEKCkpOworICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0SXNTdXNwZW5kZWQoZmFsc2UpLCBtX3BhZ2UucGFn
ZUlEKCkpOwogCi0gICAgYXV0byBkb1Vuc3VzcGVuZCA9IFt0aGlzLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBtX2lz
U3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdl
LnBhZ2VJRCgpKTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRJc1N1c3BlbmRlZChmYWxzZSksIG1fcGFnZS5wYWdlSUQoKSk7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgfTsKLQotICAgIGlmICghbV9maW5pc2hlZFN1c3BlbmRpbmcpIHsK
LSAgICAgICAgQVNTRVJUKCFtX2ZpbmlzaGVkU3VzcGVuZGluZ0hhbmRsZXIpOwotICAgICAgICBt
X2ZpbmlzaGVkU3VzcGVuZGluZ0hhbmRsZXIgPSBXVEZNb3ZlKGRvVW5zdXNwZW5kKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZG9VbnN1c3BlbmQoKTsKKyAgICByZXR1cm4gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLnRha2VTdXNwZW5kZWRQYWdlKCp0aGlzKTsKIH0KIAogdm9pZCBTdXNwZW5kZWRQ
YWdlUHJveHk6OmRpZEZpbmlzaExvYWQoKQpAQCAtMTM2LDggKzE0NCwxNyBAQCB2b2lkIFN1c3Bl
bmRlZFBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZCgpCiAgICAgbV9zdXNwZW5zaW9uVG9rZW4gPSBu
dWxscHRyOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBmaW5pc2hlZFN1c3BlbmRpbmdIYW5kbGVy
ID0gV1RGTW92ZShtX2ZpbmlzaGVkU3VzcGVuZGluZ0hhbmRsZXIpKQotICAgICAgICBmaW5pc2hl
ZFN1c3BlbmRpbmdIYW5kbGVyKCk7CisgICAgaWYgKG1fd2hlblJlYWR5VG9Db25zdW1lKQorICAg
ICAgICBtX3doZW5SZWFkeVRvQ29uc3VtZSh0aGlzKTsKK30KKwordm9pZCBTdXNwZW5kZWRQYWdl
UHJveHk6OmRpZEZhaWxUb1N1c3BlbmQoKQoreworICAgIC8vIFdlIGFyZSB1bnVzYWJsZSBkdWUg
dG8gZmFpbHVyZSB0byBzdXNwZW5kIHNvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgV2ViUHJv
Y2Vzc1Bvb2wuCisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLnRha2VTdXNwZW5kZWRQYWdlKCp0aGlzKTsKKworICAgIGlmIChtX3doZW5SZWFkeVRvQ29u
c3VtZSkKKyAgICAgICAgbV93aGVuUmVhZHlUb0NvbnN1bWUobnVsbHB0cik7CiB9CiAKIHZvaWQg
U3VzcGVuZGVkUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpCkBAIC0xNDgsNiArMTY1LDEyIEBAIHZvaWQgU3VzcGVuZGVk
UGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImIGRlY29kCiAgICAgICAgIGRpZEZpbmlzaExvYWQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKworICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkRmFpbFRvU3VzcGVuZEFmdGVyUHJvY2Vzc1N3YXA6Om5hbWUoKSkgeworICAgICAg
ICBkaWRGYWlsVG9TdXNwZW5kKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiAhTE9H
X0RJU0FCTEVECiAgICAgaWYgKCFtZXNzYWdlTmFtZXNUb0lnbm9yZVdoaWxlU3VzcGVuZGVkKCku
Y29udGFpbnMoZGVjb2Rlci5tZXNzYWdlTmFtZSgpKSkKICAgICAgICAgTE9HKFByb2Nlc3NTd2Fw
cGluZywgIlN1c3BlbmRlZFBhZ2VQcm94eSByZWNlaXZlZCB1bmV4cGVjdGVkIFdlYlBhZ2VQcm94
eSBtZXNzYWdlICclcyciLCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkudG9TdHJpbmcoKS5kYXRhKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3VzcGVuZGVkUGFnZVByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuaAppbmRleCBm
MzFkOGJhMmE1ZWQ3Nzc1ZDUxYTU2OGY1MzQ4ODFlNzk0MWEzYTMzLi5hNTkyMmVkNWNiOTkxNGY0
ZDM5YjliZmRkZjljMmQ0YmRjZDM3MzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9T
dXNwZW5kZWRQYWdlUHJveHkuaApAQCAtNDcsNyArNDcsOCBAQCBwdWJsaWM6CiAgICAgdWludDY0
X3QgbWFpbkZyYW1lSUQoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZUlEOyB9CiAgICAgY29u
c3QgU3RyaW5nJiByZWdpc3RyYWJsZURvbWFpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0cmFi
bGVEb21haW47IH0KIAotICAgIHZvaWQgdW5zdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgdm9pZCB3aGVuUmVhZHlUb0NvbnN1bWUoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdXNwZW5kZWRQYWdlUHJveHkqKT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRl
ZFBhZ2VQcm94eT4gdW5zdXNwZW5kQW5kQ29uc3VtZSgpOwogCiAjaWYgIUxPR19ESVNBQkxFRAog
ICAgIGNvbnN0IGNoYXIqIGxvZ2dpbmdTdHJpbmcoKSBjb25zdDsKQEAgLTU1LDYgKzU2LDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNoTG9hZCgpOworICAgIHZvaWQg
ZGlkRmFpbFRvU3VzcGVuZCgpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZp
bmFsOwpAQCAtNjgsNyArNzAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7
IHRydWUgfTsKIAogICAgIGJvb2wgbV9maW5pc2hlZFN1c3BlbmRpbmcgeyBmYWxzZSB9OwotICAg
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9maW5pc2hlZFN1c3BlbmRpbmdIYW5kbGVyOwor
ICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3VzcGVuZGVkUGFnZVByb3h5Kik+IG1fd2hlblJl
YWR5VG9Db25zdW1lOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgUHJvY2Vzc1Rocm90
dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5VG9rZW4gbV9zdXNwZW5zaW9uVG9rZW47CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViTmF2aWdhdGlvblN0YXRlLmgKaW5kZXggZDk1
OGViNGJkZmY1NTIxMDVmNDliOWExMDNmYjg3YzE3NzhiMGNmMi4uOWViOWQyOGFkZGQ1YjViMDA2
ZDUwYjA4YTNkNzRmYjY5ZDE2MjM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViTmF2aWdhdGlvblN0YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
TmF2aWdhdGlvblN0YXRlLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIFJlZjxBUEk6
Ok5hdmlnYXRpb24+IGNyZWF0ZVJlbG9hZE5hdmlnYXRpb24oKTsKICAgICBSZWY8QVBJOjpOYXZp
Z2F0aW9uPiBjcmVhdGVMb2FkRGF0YU5hdmlnYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFQSTo6U3Vi
c3RpdHV0ZURhdGE+JiYpOwogCisgICAgYm9vbCBoYXNOYXZpZ2F0aW9uKHVpbnQ2NF90IG5hdmln
YXRpb25JRCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9ucy5jb250YWlucyhuYXZpZ2F0aW9u
SUQpOyB9CiAgICAgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uKHVpbnQ2NF90IG5hdmlnYXRp
b25JRCk7CiAgICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gdGFrZU5hdmlnYXRpb24odWludDY0
X3QgbmF2aWdhdGlvbklEKTsKICAgICB2b2lkIGRpZERlc3Ryb3lOYXZpZ2F0aW9uKHVpbnQ2NF90
IG5hdmlnYXRpb25JRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApp
bmRleCA4ZTU5NDZmYWE5MmUyNzFmMGM4YWNhNTVmOTFjMDY1MzI1MjhiYzRjLi45MjkwOTMxYjNh
OTJlMzE1MjY4MjE0NjM2ZDEzYzk0N2FiNDExYjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKQEAgLTc2Myw1MiArNzYzLDI5IEBAIGJvb2wgV2ViUGFnZVByb3h5
OjpzdXNwZW5kQ3VycmVudFBhZ2VJZlBvc3NpYmxlKEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlv
biwgc3RkCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpzd2FwVG9X
ZWJQcm9jZXNzKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywgQVBJOjpOYXZpZ2F0aW9u
JiBuYXZpZ2F0aW9uLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtYWluRnJhbWVJREluUHJldmlv
dXNQcm9jZXNzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit2b2lkIFdlYlBhZ2VQcm94eTo6c3dhcFRvV2ViUHJvY2VzcyhSZWY8V2ViUHJvY2Vz
c1Byb3h5PiYmIHByb2Nlc3MsIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+JiYg
ZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLCBTaG91bGREZWxheUF0dGFjaGluZ0RyYXdpbmdBcmVh
IHNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWEpCiB7CiAgICAgQVNTRVJUKCFtX2lzQ2xv
c2VkKTsKICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKFByb2Nlc3MsICIlcCBXZWJQYWdlUHJv
eHk6OnN3YXBUb1dlYlByb2Nlc3NcbiIsIHRoaXMpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFN1
c3BlbmRlZFBhZ2VQcm94eT4gZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlOwotICAgIGlmIChhdXRv
KiBiYWNrRm9yd2FyZExpc3RJdGVtID0gbmF2aWdhdGlvbi50YXJnZXRJdGVtKCkpIHsKLSAgICAg
ICAgaWYgKGJhY2tGb3J3YXJkTGlzdEl0ZW0tPnN1c3BlbmRlZFBhZ2UoKSAmJiAmYmFja0Zvcndh
cmRMaXN0SXRlbS0+c3VzcGVuZGVkUGFnZSgpLT5wcm9jZXNzKCkgPT0gcHJvY2Vzcy5wdHIoKSkg
ewotICAgICAgICAgICAgZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlID0gdGhpcy0+cHJvY2Vzcygp
LnByb2Nlc3NQb29sKCkudGFrZVN1c3BlbmRlZFBhZ2UoKmJhY2tGb3J3YXJkTGlzdEl0ZW0tPnN1
c3BlbmRlZFBhZ2UoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZGVzdGluYXRpb25TdXNwZW5kZWRQ
YWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8qIGRlc3RpbmF0aW9uU3VzcGVuZGVk
UGFnZVB0ciA9IGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZS5nZXQoKTsKLSAgICBhdXRvIGRvU3dh
cCA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG5hdmlnYXRpb24gPSBt
YWtlUmVmKG5hdmlnYXRpb24pLCBwcm9jZXNzID0gV1RGTW92ZShwcm9jZXNzKSwgbWFpbkZyYW1l
SURJblByZXZpb3VzUHJvY2VzcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgZGVzdGlu
YXRpb25TdXNwZW5kZWRQYWdlID0gV1RGTW92ZShkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBwcm9jZXNzRGlkVGVybWluYXRlKFByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6
TmF2aWdhdGlvblN3YXApOwotCi0gICAgICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdl
SUQpOwotICAgICAgICBib29sIGRpZFN1c3BlbmRQcmV2aW91c1BhZ2UgPSBzdXNwZW5kQ3VycmVu
dFBhZ2VJZlBvc3NpYmxlKG5hdmlnYXRpb24sIG1haW5GcmFtZUlESW5QcmV2aW91c1Byb2Nlc3Ms
IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpOwotICAgICAgICBtX3Byb2Nlc3MtPnJlbW92
ZVdlYlBhZ2UoKnRoaXMsIG1fcGFnZUlELCBXZWJQcm9jZXNzUHJveHk6OkVuZHNVc2luZ0RhdGFT
dG9yZTo6Tm8pOwotCi0gICAgICAgIG1fcHJvY2VzcyA9IFdURk1vdmUocHJvY2Vzcyk7Ci0gICAg
ICAgIG1faXNWYWxpZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJlIHJlYXR0YWNoaW5n
IHRvIGEgU3VzcGVuZGVkUGFnZSwgdGhlbiB0aGUgV2ViUHJvY2VzcycgV2ViUGFnZSBhbHJlYWR5
IGV4aXN0cyBhbmQKLSAgICAgICAgLy8gV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVNYWluRnJhbWUo
KSB3aWxsIG5vdCBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSBtX21haW5GcmFtZS4gSW4gc3VjaAot
ICAgICAgICAvLyBjYXNlLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgbV9tYWluRnJhbWUgdG8gcmVm
bGVjdCB0aGUgZmFjdCB0aGUgdGhlIFdlYlByb2Nlc3MnIFdlYlBhZ2UKLSAgICAgICAgLy8gYWxy
ZWFkeSBleGlzdHMgYW5kIGFscmVhZHkgaGFzIGEgbWFpbiBmcmFtZS4KLSAgICAgICAgaWYgKGRl
c3RpbmF0aW9uU3VzcGVuZGVkUGFnZSkgewotICAgICAgICAgICAgQVNTRVJUKCFtX21haW5GcmFt
ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoJmRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZS0+cHJvY2Vz
cygpID09IG1fcHJvY2Vzcy5wdHIoKSk7Ci0gICAgICAgICAgICBtX21haW5GcmFtZSA9IFdlYkZy
YW1lUHJveHk6OmNyZWF0ZSgqdGhpcywgZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLT5tYWluRnJh
bWVJRCgpKTsKLSAgICAgICAgICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGRlc3RpbmF0aW9u
U3VzcGVuZGVkUGFnZS0+bWFpbkZyYW1lSUQoKSwgKm1fbWFpbkZyYW1lKTsKLSAgICAgICAgfQor
ICAgIG1fcHJvY2VzcyA9IFdURk1vdmUocHJvY2Vzcyk7CisgICAgbV9pc1ZhbGlkID0gdHJ1ZTsK
IAotICAgICAgICBtX3Byb2Nlc3MtPmFkZEV4aXN0aW5nV2ViUGFnZSgqdGhpcywgbV9wYWdlSUQs
IFdlYlByb2Nlc3NQcm94eTo6QmVnaW5zVXNpbmdEYXRhU3RvcmU6Ok5vKTsKLSAgICAgICAgbV9w
cm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOworICAgIC8vIElmIHdlIGFyZSByZWF0
dGFjaGluZyB0byBhIFN1c3BlbmRlZFBhZ2UsIHRoZW4gdGhlIFdlYlByb2Nlc3MnIFdlYlBhZ2Ug
YWxyZWFkeSBleGlzdHMgYW5kCisgICAgLy8gV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVNYWluRnJh
bWUoKSB3aWxsIG5vdCBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSBtX21haW5GcmFtZS4gSW4gc3Vj
aAorICAgIC8vIGNhc2UsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBtX21haW5GcmFtZSB0byByZWZs
ZWN0IHRoZSBmYWN0IHRoZSB0aGUgV2ViUHJvY2VzcycgV2ViUGFnZQorICAgIC8vIGFscmVhZHkg
ZXhpc3RzIGFuZCBhbHJlYWR5IGhhcyBhIG1haW4gZnJhbWUuCisgICAgaWYgKGRlc3RpbmF0aW9u
U3VzcGVuZGVkUGFnZSkgeworICAgICAgICBBU1NFUlQoIW1fbWFpbkZyYW1lKTsKKyAgICAgICAg
QVNTRVJUKCZkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UtPnByb2Nlc3MoKSA9PSBtX3Byb2Nlc3Mu
cHRyKCkpOworICAgICAgICBtX21haW5GcmFtZSA9IFdlYkZyYW1lUHJveHk6OmNyZWF0ZSgqdGhp
cywgZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLT5tYWluRnJhbWVJRCgpKTsKKyAgICAgICAgbV9w
cm9jZXNzLT5mcmFtZUNyZWF0ZWQoZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLT5tYWluRnJhbWVJ
RCgpLCAqbV9tYWluRnJhbWUpOworICAgIH0KIAotICAgICAgICBmaW5pc2hBdHRhY2hpbmdUb1dl
YlByb2Nlc3MoZGlkU3VzcGVuZFByZXZpb3VzUGFnZSA/IFNob3VsZERlbGF5QXR0YWNoaW5nRHJh
d2luZ0FyZWE6OlllcyA6IFNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWE6Ok5vKTsKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGlkU3VzcGVuZFByZXZpb3VzUGFnZSk7Ci0gICAgfTsK
KyAgICBtX3Byb2Nlc3MtPmFkZEV4aXN0aW5nV2ViUGFnZSgqdGhpcywgbV9wYWdlSUQsIFdlYlBy
b2Nlc3NQcm94eTo6QmVnaW5zVXNpbmdEYXRhU3RvcmU6Ok5vKTsKKyAgICBtX3Byb2Nlc3MtPmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGFnZVByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CiAKLSAgICBpZiAoZGVzdGluYXRpb25TdXNwZW5kZWRQ
YWdlUHRyKQotICAgICAgICBkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2VQdHItPnVuc3VzcGVuZChX
VEZNb3ZlKGRvU3dhcCkpOwotICAgIGVsc2UKLSAgICAgICAgZG9Td2FwKCk7CisgICAgZmluaXNo
QXR0YWNoaW5nVG9XZWJQcm9jZXNzKHNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWEpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluaXNoQXR0YWNoaW5nVG9XZWJQcm9jZXNzKFNob3Vs
ZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWEgc2hvdWxkRGVsYXlBdHRhY2hpbmdEcmF3aW5nQXJl
YSkKQEAgLTI2MTgsMjMgKzI1OTUsMzAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY2VpdmVkTmF2
aWdhdGlvblBvbGljeURlY2lzaW9uKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEEKICAgICAg
ICAgICAgIGNoYW5nZVdlYnNpdGVEYXRhU3RvcmUocG9saWNpZXMtPndlYnNpdGVEYXRhU3RvcmUo
KS0+d2Vic2l0ZURhdGFTdG9yZSgpKTsKICAgICB9CiAKLSAgICBSZWY8V2ViUHJvY2Vzc1Byb3h5
PiBwcm9jZXNzRm9yTmF2aWdhdGlvbiA9IHByb2Nlc3MoKTsKLSAgICBpZiAocG9saWN5QWN0aW9u
ID09IFBvbGljeUFjdGlvbjo6VXNlICYmIGZyYW1lLmlzTWFpbkZyYW1lKCkpIHsKLSAgICAgICAg
U3RyaW5nIHJlYXNvbjsKLSAgICAgICAgcHJvY2Vzc0Zvck5hdmlnYXRpb24gPSBwcm9jZXNzKCku
cHJvY2Vzc1Bvb2woKS5wcm9jZXNzRm9yTmF2aWdhdGlvbigqdGhpcywgKm5hdmlnYXRpb24sIHBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIHJlYXNvbik7Ci0gICAgICAgIEFTU0VSVCghcmVh
c29uLmlzTnVsbCgpKTsKKyAgICBpZiAocG9saWN5QWN0aW9uICE9IFBvbGljeUFjdGlvbjo6VXNl
IHx8ICFmcmFtZS5pc01haW5GcmFtZSgpIHx8ICFuYXZpZ2F0aW9uKSB7CisgICAgICAgIHJlY2Vp
dmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLCBXVEZNb3ZlKGRhdGEp
LCBXVEZNb3ZlKHNlbmRlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJvY2Vz
cygpLnByb2Nlc3NQb29sKCkucHJvY2Vzc0Zvck5hdmlnYXRpb24oKnRoaXMsICpuYXZpZ2F0aW9u
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24gPSBtYWtlUmVmKCpuYXZpZ2F0
aW9uKSwgZGF0YSA9IFdURk1vdmUoZGF0YSksIHNlbmRlciA9IFdURk1vdmUoc2VuZGVyKSwgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudF0oUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNz
Rm9yTmF2aWdhdGlvbiwgU3VzcGVuZGVkUGFnZVByb3h5KiBkZXN0aW5hdGlvblN1c3BlbmRlZFBh
Z2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gSWYgdGhlIG5h
dmlnYXRpb24gaGFzIGJlZW4gZGVzdHJveWVkLCB0aGVuIG5vIG5lZWQgdG8gcHJvY2VlZC4KKyAg
ICAgICAgaWYgKGlzQ2xvc2VkKCkgfHwgIW5hdmlnYXRpb25TdGF0ZSgpLmhhc05hdmlnYXRpb24o
bmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCkpKSB7CisgICAgICAgICAgICByZWNlaXZlZFBvbGlj
eURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2aWdhdGlvbi5wdHIoKSwgV1RGTW92ZShkYXRhKSwg
V1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIGlmIChwcm9jZXNzRm9yTmF2aWdhdGlvbi5wdHIoKSAhPSAmcHJvY2VzcygpKSB7CiAgICAg
ICAgICAgICBwb2xpY3lBY3Rpb24gPSBQb2xpY3lBY3Rpb246OlN1c3BlbmQ7CiAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKFByb2Nlc3NTd2FwcGluZywgIiVwIC0gV2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLCBzd2FwcGluZyBwcm9jZXNzICVp
IHdpdGggcHJvY2VzcyAlaSBmb3IgbmF2aWdhdGlvbiwgcmVhc29uOiAle3B1YmxpY31zIiwgdGhp
cywgcHJvY2Vzc0lkZW50aWZpZXIoKSwgcHJvY2Vzc0Zvck5hdmlnYXRpb24tPnByb2Nlc3NJZGVu
dGlmaWVyKCksIHJlYXNvbi51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIExPRyhQcm9jZXNz
U3dhcHBpbmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBTd2l0Y2hpbmcgZnJvbSBwcm9jZXNzICVpIHRv
IG5ldyBwcm9jZXNzICglaSkgZm9yIG5hdmlnYXRpb24gJSIgUFJJdTY0ICIgJyVzJyIsIHByb2Nl
c3NJZGVudGlmaWVyKCksIHByb2Nlc3NGb3JOYXZpZ2F0aW9uLT5wcm9jZXNzSWRlbnRpZmllcigp
LCBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgbmF2aWdhdGlvbi0+bG9nZ2luZ1N0cmluZygp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKFBy
b2Nlc3NTd2FwcGluZywgIiVwIC0gV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uLCBrZWVwIHVzaW5nIHByb2Nlc3MgJWkgZm9yIG5hdmlnYXRpb24sIHJlYXNvbjog
JXtwdWJsaWN9cyIsIHRoaXMsIHByb2Nlc3NJZGVudGlmaWVyKCksIHJlYXNvbi51dGY4KCkuZGF0
YSgpKTsKLSAgICB9CiAKLSAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwg
bmF2aWdhdGlvbiwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgcmVj
ZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24ucHRyKCksIFdURk1v
dmUoZGF0YSksIFdURk1vdmUoc2VuZGVyKSk7CiAKLSAgICBpZiAocHJvY2Vzc0Zvck5hdmlnYXRp
b24ucHRyKCkgIT0gJnByb2Nlc3MoKSkKLSAgICAgICAgY29udGludWVOYXZpZ2F0aW9uSW5OZXdQ
cm9jZXNzKCpuYXZpZ2F0aW9uLCBXVEZNb3ZlKHByb2Nlc3NGb3JOYXZpZ2F0aW9uKSwgcHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCk7CisgICAgICAgIGlmIChwcm9jZXNzRm9yTmF2aWdhdGlv
bi5wdHIoKSAhPSAmcHJvY2VzcygpKQorICAgICAgICAgICAgY29udGludWVOYXZpZ2F0aW9uSW5O
ZXdQcm9jZXNzKG5hdmlnYXRpb24sIGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZSA/IGRlc3RpbmF0
aW9uU3VzcGVuZGVkUGFnZS0+dW5zdXNwZW5kQW5kQ29uc3VtZSgpIDogbnVsbHB0ciwgV1RGTW92
ZShwcm9jZXNzRm9yTmF2aWdhdGlvbiksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQ
b2xpY3lBY3Rpb24gYWN0aW9uLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIHN0ZDo6b3B0
aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMsIFJlZjxQb2xpY3lE
ZWNpc2lvblNlbmRlcj4mJiBzZW5kZXIpCkBAIC0yNjY5LDcgKzI2NTMsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24gYWN0aW9uLCBBUEk6
Ok5hdmlnYXRpb24qCiAgICAgc2VuZGVyLT5zZW5kKGFjdGlvbiwgbmF2aWdhdGlvbiA/IG5hdmln
YXRpb24tPm5hdmlnYXRpb25JRCgpIDogMCwgZG93bmxvYWRJRCwgV1RGTW92ZSh3ZWJzaXRlUG9s
aWNpZXMpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmNvbnRpbnVlTmF2aWdhdGlvbkluTmV3
UHJvY2VzcyhBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFJlZjxXZWJQcm9jZXNzUHJveHk+
JiYgcHJvY2VzcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50KQordm9pZCBXZWJQYWdlUHJveHk6OmNvbnRpbnVlTmF2aWdhdGlvbkluTmV3
UHJvY2VzcyhBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIHN0ZDo6dW5pcXVlX3B0cjxTdXNw
ZW5kZWRQYWdlUHJveHk+JiYgc3VzcGVuZGVkUGFnZVByb3h5LCBSZWY8V2ViUHJvY2Vzc1Byb3h5
PiYmIHByb2Nlc3MsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCkKIHsKICAgICBMT0coTG9hZGluZywgIkNvbnRpbnVpbmcgbmF2aWdhdGlv
biAlIiBQUkl1NjQgIiAnJXMnIGluIGEgbmV3IHdlYiBwcm9jZXNzIiwgbmF2aWdhdGlvbi5uYXZp
Z2F0aW9uSUQoKSwgbmF2aWdhdGlvbi5sb2dnaW5nU3RyaW5nKCkpOwogCkBAIC0yNjc5LDczICsy
NjYzLDg4IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nl
c3MoQVBJOjpOYXZpZ2F0aW9uJiBuYXZpZ2F0aW9uLCBSCiAKICAgICBBU1NFUlQobV9wcm9jZXNz
LnB0cigpICE9IHByb2Nlc3MucHRyKCkpOwogCi0gICAgc3dhcFRvV2ViUHJvY2VzcyhXVEZNb3Zl
KHByb2Nlc3MpLCBuYXZpZ2F0aW9uLCBtYWluRnJhbWVJREluUHJldmlvdXNQcm9jZXNzLCBwcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBuYXZpZ2F0aW9uID0gbWFrZVJlZihuYXZpZ2F0aW9uKSwgcHJldmlvdXNQcm9jZXNz
ID0gV1RGTW92ZShwcmV2aW91c1Byb2Nlc3MpLCBtYWluRnJhbWVJREluUHJldmlvdXNQcm9jZXNz
LCBtYWluRnJhbWVVUkwgPSBXVEZNb3ZlKG1haW5GcmFtZVVSTCldKGJvb2wgZGlkU3VzcGVuZFBy
ZXZpb3VzUGFnZSkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChhdXRvKiBpdGVtID0gbmF2aWdhdGlv
bi0+dGFyZ2V0SXRlbSgpKSB7Ci0gICAgICAgICAgICBMT0coTG9hZGluZywgIldlYlBhZ2VQcm94
eSAlcCBjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MgdG8gYmFjayBpdGVtIFVSTCAlcyIs
IHRoaXMsIGl0ZW0tPnVybCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHByb2Nlc3NEaWRUZXJtaW5h
dGUoUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uOjpOYXZpZ2F0aW9uU3dhcCk7CiAKLSAgICAgICAg
ICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKLSAg
ICAgICAgICAgIG1fcGFnZUxvYWRTdGF0ZS5zZXRQZW5kaW5nQVBJUmVxdWVzdFVSTCh0cmFuc2Fj
dGlvbiwgaXRlbS0+dXJsKCkpOworICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQp
OworICAgIGJvb2wgZGlkU3VzcGVuZFByZXZpb3VzUGFnZSA9IHN1c3BlbmRDdXJyZW50UGFnZUlm
UG9zc2libGUobmF2aWdhdGlvbiwgbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2VzcywgcHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCk7CisgICAgbV9wcm9jZXNzLT5yZW1vdmVXZWJQYWdlKCp0
aGlzLCBtX3BhZ2VJRCwgV2ViUHJvY2Vzc1Byb3h5OjpFbmRzVXNpbmdEYXRhU3RvcmU6Ok5vKTsK
IAotICAgICAgICAgICAgYXV0byBpdGVtU3RhdGVzID0gbV9iYWNrRm9yd2FyZExpc3QtPmZpbHRl
cmVkSXRlbVN0YXRlcyhbdGhpcywgdGFyZ2V0SXRlbSA9IGl0ZW1dKFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0mIGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGl0ZW0uc3Vz
cGVuZGVkUGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgmcGFnZS0+cHJvY2Vzcygp
ID09IG1fcHJvY2Vzcy5wdHIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpdGVtICE9IHRh
cmdldEl0ZW07Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQmFja0ZvcndhcmRMaXN0Rm9yUmVhdHRhY2goV1RGTW92
ZShpdGVtU3RhdGVzKSksIG1fcGFnZUlEKTsKLSAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0
aW9uSUQoKSwgaXRlbS0+aXRlbUlEKCksICpuYXZpZ2F0aW9uLT5iYWNrRm9yd2FyZEZyYW1lTG9h
ZFR5cGUoKSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXMpLCBtX3BhZ2VJRCk7Ci0g
ICAgICAgICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOworICAg
IHN3YXBUb1dlYlByb2Nlc3MoV1RGTW92ZShwcm9jZXNzKSwgV1RGTW92ZShzdXNwZW5kZWRQYWdl
UHJveHkpLCBkaWRTdXNwZW5kUHJldmlvdXNQYWdlID8gU2hvdWxkRGVsYXlBdHRhY2hpbmdEcmF3
aW5nQXJlYTo6WWVzIDogU2hvdWxkRGVsYXlBdHRhY2hpbmdEcmF3aW5nQXJlYTo6Tm8pOwogCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoYXV0byogaXRlbSA9IG5hdmln
YXRpb24udGFyZ2V0SXRlbSgpKSB7CisgICAgICAgIExPRyhMb2FkaW5nLCAiV2ViUGFnZVByb3h5
ICVwIGNvbnRpbnVlTmF2aWdhdGlvbkluTmV3UHJvY2VzcyB0byBiYWNrIGl0ZW0gVVJMICVzIiwg
dGhpcywgaXRlbS0+dXJsKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgaWYgKG1fYmFja0Zv
cndhcmRMaXN0LT5jdXJyZW50SXRlbSgpICYmIChuYXZpZ2F0aW9uLT5sb2NrQmFja0ZvcndhcmRM
aXN0KCkgPT0gTG9ja0JhY2tGb3J3YXJkTGlzdDo6WWVzIHx8IG5hdmlnYXRpb24tPmxvY2tIaXN0
b3J5KCkgPT0gTG9ja0hpc3Rvcnk6OlllcykpIHsKLSAgICAgICAgICAgIC8vIElmIFdlYkNvcmUg
aXMgc3VwcG9zZWQgdG8gbG9jayB0aGUgaGlzdG9yeSBmb3IgdGhpcyBsb2FkLCB0aGVuIHRoZSBu
ZXcgcHJvY2VzcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBjdXJyZW50IGhpc3RvcnkgaXRlbSBz
byBpdCBjYW4gdXBkYXRlCi0gICAgICAgICAgICAvLyBpdCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEg
bmV3IG9uZS4KLSAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0Q3VycmVudEhpc3RvcnlJdGVtRm9yUmVhdHRhY2gobV9iYWNrRm9yd2FyZExpc3QtPmN1cnJl
bnRJdGVtKCktPml0ZW1TdGF0ZSgpKSwgbV9wYWdlSUQpOwotICAgICAgICB9CisgICAgICAgIGF1
dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKKyAgICAgICAg
bV9wYWdlTG9hZFN0YXRlLnNldFBlbmRpbmdBUElSZXF1ZXN0VVJMKHRyYW5zYWN0aW9uLCBpdGVt
LT51cmwoKSk7CiAKLSAgICAgICAgLy8gRklYTUU6IFdvcmsgb3V0IHRpbWluZyBvZiByZXNwb25k
aW5nIHdpdGggdGhlIGxhc3QgcG9saWN5IGRlbGVnYXRlLCBldGMKLSAgICAgICAgQVNTRVJUKCFu
YXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIGlmIChhdXRv
JiBzdWJzdGl0dXRlRGF0YSA9IG5hdmlnYXRpb24tPnN1YnN0aXR1dGVEYXRhKCkpCi0gICAgICAg
ICAgICBsb2FkRGF0YVdpdGhOYXZpZ2F0aW9uKG5hdmlnYXRpb24sIHsgc3Vic3RpdHV0ZURhdGEt
PmNvbnRlbnQuZGF0YSgpLCBzdWJzdGl0dXRlRGF0YS0+Y29udGVudC5zaXplKCkgfSwgc3Vic3Rp
dHV0ZURhdGEtPk1JTUVUeXBlLCBzdWJzdGl0dXRlRGF0YS0+ZW5jb2RpbmcsIHN1YnN0aXR1dGVE
YXRhLT5iYXNlVVJMLCBzdWJzdGl0dXRlRGF0YS0+dXNlckRhdGEuZ2V0KCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uKG5hdmlnYXRpb24sIFJl
c291cmNlUmVxdWVzdCB7IG5hdmlnYXRpb24tPmN1cnJlbnRSZXF1ZXN0KCkgfSwgV2ViQ29yZTo6
U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3dFeHRlcm5hbFNjaGVtZXMs
IG51bGxwdHIsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6WWVzKTsKKyAgICAgICAgYXV0
byBpdGVtU3RhdGVzID0gbV9iYWNrRm9yd2FyZExpc3QtPmZpbHRlcmVkSXRlbVN0YXRlcyhbdGhp
cywgdGFyZ2V0SXRlbSA9IGl0ZW1dKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gaXRlbS5zdXNwZW5kZWRQYWdlKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoJnBhZ2UtPnByb2Nlc3MoKSA9PSBtX3Byb2Nlc3MucHRyKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiAmaXRlbSAhPSB0YXJnZXRJdGVtOworICAgICAgICB9KTsKKyAgICAgICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVCYWNrRm9yd2FyZExpc3RGb3JSZWF0
dGFjaChXVEZNb3ZlKGl0ZW1TdGF0ZXMpKSwgbV9wYWdlSUQpOworICAgICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbi5u
YXZpZ2F0aW9uSUQoKSwgaXRlbS0+aXRlbUlEKCksICpuYXZpZ2F0aW9uLmJhY2tGb3J3YXJkRnJh
bWVMb2FkVHlwZSgpLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6OlllcyksIG1fcGFnZUlE
KTsKKyAgICAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIAot
ICAgICAgICBBU1NFUlQoIW1fbWFpbkZyYW1lKTsKLSAgICAgICAgbV9tYWluRnJhbWVDcmVhdGlv
bkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyks
IG5hdmlnYXRpb25JRCA9IG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpLCByZXF1ZXN0ID0gIG5h
dmlnYXRpb24tPmN1cnJlbnRSZXF1ZXN0KCksIG1haW5GcmFtZVVSTCwgaXNTZXJ2ZXJSZWRpcmVj
dCA9IG5hdmlnYXRpb24tPmN1cnJlbnRSZXF1ZXN0SXNSZWRpcmVjdCgpXSgpIG11dGFibGUgewot
ICAgICAgICAgICAgQVNTRVJUKG1fbWFpbkZyYW1lKTsKLSAgICAgICAgICAgIC8vIFRoaXMgbmF2
aWdhdGlvbiB3YXMgZGVzdHJveWVkIHNvIG5vIG5lZWQgdG8gbm90aWZ5IG9mIHJlZGlyZWN0Lgot
ICAgICAgICAgICAgaWYgKCFuYXZpZ2F0aW9uU3RhdGUoKS5uYXZpZ2F0aW9uKG5hdmlnYXRpb25J
RCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBtYWluIGZyYW1lJ3MgY29tbWl0dGVkIFVSTCBhcyBz
b21lIGNsaWVudHMgbWF5IHJlbHkgb24gaXQgdW50aWwgdGhlIG5leHQgbG9hZCBpcyBjb21taXR0
ZWQuCi0gICAgICAgICAgICBtX21haW5GcmFtZS0+ZnJhbWVMb2FkU3RhdGUoKS5zZXRVUkwobWFp
bkZyYW1lVVJMKTsKKyAgICBpZiAobV9iYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCkgJiYg
KG5hdmlnYXRpb24ubG9ja0JhY2tGb3J3YXJkTGlzdCgpID09IExvY2tCYWNrRm9yd2FyZExpc3Q6
OlllcyB8fCBuYXZpZ2F0aW9uLmxvY2tIaXN0b3J5KCkgPT0gTG9ja0hpc3Rvcnk6OlllcykpIHsK
KyAgICAgICAgLy8gSWYgV2ViQ29yZSBpcyBzdXBwb3NlZCB0byBsb2NrIHRoZSBoaXN0b3J5IGZv
ciB0aGlzIGxvYWQsIHRoZW4gdGhlIG5ldyBwcm9jZXNzIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhl
IGN1cnJlbnQgaGlzdG9yeSBpdGVtIHNvIGl0IGNhbiB1cGRhdGUKKyAgICAgICAgLy8gaXQgaW5z
dGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuCisgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2V0Q3VycmVudEhpc3RvcnlJdGVtRm9yUmVhdHRhY2gobV9iYWNrRm9y
d2FyZExpc3QtPmN1cnJlbnRJdGVtKCktPml0ZW1TdGF0ZSgpKSwgbV9wYWdlSUQpOworICAgIH0K
IAotICAgICAgICAgICAgLy8gTm9ybWFsbHksIG5vdGlmaWNhdGlvbiBvZiBhIHNlcnZlciByZWRp
cmVjdCBjb21lcyBmcm9tIHRoZSBXZWJDb250ZW50IHByb2Nlc3MuCi0gICAgICAgICAgICAvLyBJ
ZiB3ZSBhcmUgcHJvY2VzcyBzd2FwcGluZyBpbiByZXNwb25zZSB0byBhIHNlcnZlciByZWRpcmVj
dCB0aGVuIHRoYXQgbm90aWZpY2F0aW9uIHdpbGwgbm90IGNvbWUgZnJvbSB0aGUgbmV3IFdlYkNv
bnRlbnQgcHJvY2Vzcy4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRoZSBV
SVByb2Nlc3Mgc3ludGhlc2l6ZSB0aGUgcmVkaXJlY3Qgbm90aWZpY2F0aW9uIGF0IHRoZSBhcHBy
b3ByaWF0ZSB0aW1lLgotICAgICAgICAgICAgaWYgKGlzU2VydmVyUmVkaXJlY3QpIHsKLSAgICAg
ICAgICAgICAgICBtX21haW5GcmFtZS0+ZnJhbWVMb2FkU3RhdGUoKS5kaWRTdGFydFByb3Zpc2lv
bmFsTG9hZChyZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgICAgICAgICBkaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX21haW5GcmFtZS0+ZnJhbWVJRCgp
LCBuYXZpZ2F0aW9uSUQsIFdURk1vdmUocmVxdWVzdCksIHsgfSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH07CisgICAgLy8gRklYTUU6IFdvcmsgb3V0IHRpbWluZyBvZiByZXNwb25kaW5nIHdp
dGggdGhlIGxhc3QgcG9saWN5IGRlbGVnYXRlLCBldGMKKyAgICBBU1NFUlQoIW5hdmlnYXRpb24u
Y3VycmVudFJlcXVlc3QoKS5pc0VtcHR5KCkpOworICAgIGlmIChhdXRvJiBzdWJzdGl0dXRlRGF0
YSA9IG5hdmlnYXRpb24uc3Vic3RpdHV0ZURhdGEoKSkKKyAgICAgICAgbG9hZERhdGFXaXRoTmF2
aWdhdGlvbihuYXZpZ2F0aW9uLCB7IHN1YnN0aXR1dGVEYXRhLT5jb250ZW50LmRhdGEoKSwgc3Vi
c3RpdHV0ZURhdGEtPmNvbnRlbnQuc2l6ZSgpIH0sIHN1YnN0aXR1dGVEYXRhLT5NSU1FVHlwZSwg
c3Vic3RpdHV0ZURhdGEtPmVuY29kaW5nLCBzdWJzdGl0dXRlRGF0YS0+YmFzZVVSTCwgc3Vic3Rp
dHV0ZURhdGEtPnVzZXJEYXRhLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRSZXF1ZXN0
V2l0aE5hdmlnYXRpb24obmF2aWdhdGlvbiwgUmVzb3VyY2VSZXF1ZXN0IHsgbmF2aWdhdGlvbi5j
dXJyZW50UmVxdWVzdCgpIH0sIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6
OlNob3VsZEFsbG93RXh0ZXJuYWxTY2hlbWVzLCBudWxscHRyLCBTaG91bGRUcmVhdEFzQ29udGlu
dWluZ0xvYWQ6Olllcyk7CisKKyAgICBBU1NFUlQoIW1fbWFpbkZyYW1lKTsKKyAgICBtX21haW5G
cmFtZUNyZWF0aW9uSGFuZGxlciA9IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgbmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbi5uYXZpZ2F0aW9uSUQoKSwgcmVxdWVzdCA9ICBu
YXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0KCksIG1haW5GcmFtZVVSTCwgaXNTZXJ2ZXJSZWRpcmVj
dCA9IG5hdmlnYXRpb24uY3VycmVudFJlcXVlc3RJc1JlZGlyZWN0KCldKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYm9v
bCBpc0luaXRpYWxOYXZpZ2F0aW9uSW5OZXdXaW5kb3cgPSBvcGVuZWRCeURPTSgpICYmICFoYXND
b21taXR0ZWRBbnlQcm92aXNpb25hbExvYWRzKCk7Ci0gICAgICAgIGlmICghbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLmNvbmZpZ3VyYXRpb24oKS5wcm9jZXNzU3dhcHNPbldpbmRvd09wZW5XaXRo
T3BlbmVyKCkgfHwgIWlzSW5pdGlhbE5hdmlnYXRpb25Jbk5ld1dpbmRvdyB8fCAhbWFpbkZyYW1l
SURJblByZXZpb3VzUHJvY2VzcykgewotICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gd2F5IHdl
J2xsIGJlIGFibGUgdG8gcmV0dXJuIHRvIHRoZSBwYWdlIGluIHRoZSBwcmV2aW91cyBwYWdlIHNv
IGNsb3NlIGl0LgotICAgICAgICAgICAgaWYgKCFkaWRTdXNwZW5kUHJldmlvdXNQYWdlKQotICAg
ICAgICAgICAgICAgIHByZXZpb3VzUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2xv
c2UoKSwgbV9wYWdlSUQpOworICAgICAgICBBU1NFUlQobV9tYWluRnJhbWUpOworICAgICAgICAv
LyBUaGlzIG5hdmlnYXRpb24gd2FzIGRlc3Ryb3llZCBzbyBubyBuZWVkIHRvIG5vdGlmeSBvZiBy
ZWRpcmVjdC4KKyAgICAgICAgaWYgKCFuYXZpZ2F0aW9uU3RhdGUoKS5uYXZpZ2F0aW9uKG5hdmln
YXRpb25JRCkpCiAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUg
bWFpbiBmcmFtZSdzIGNvbW1pdHRlZCBVUkwgYXMgc29tZSBjbGllbnRzIG1heSByZWx5IG9uIGl0
IHVudGlsIHRoZSBuZXh0IGxvYWQgaXMgY29tbWl0dGVkLgorICAgICAgICBtX21haW5GcmFtZS0+
ZnJhbWVMb2FkU3RhdGUoKS5zZXRVUkwobWFpbkZyYW1lVVJMKTsKKworICAgICAgICAvLyBOb3Jt
YWxseSwgbm90aWZpY2F0aW9uIG9mIGEgc2VydmVyIHJlZGlyZWN0IGNvbWVzIGZyb20gdGhlIFdl
YkNvbnRlbnQgcHJvY2Vzcy4KKyAgICAgICAgLy8gSWYgd2UgYXJlIHByb2Nlc3Mgc3dhcHBpbmcg
aW4gcmVzcG9uc2UgdG8gYSBzZXJ2ZXIgcmVkaXJlY3QgdGhlbiB0aGF0IG5vdGlmaWNhdGlvbiB3
aWxsIG5vdCBjb21lIGZyb20gdGhlIG5ldyBXZWJDb250ZW50IHByb2Nlc3MuCisgICAgICAgIC8v
IEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRoZSBVSVByb2Nlc3Mgc3ludGhlc2l6ZSB0aGUgcmVkaXJl
Y3Qgbm90aWZpY2F0aW9uIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lLgorICAgICAgICBpZiAoaXNT
ZXJ2ZXJSZWRpcmVjdCkgeworICAgICAgICAgICAgbV9tYWluRnJhbWUtPmZyYW1lTG9hZFN0YXRl
KCkuZGlkU3RhcnRQcm92aXNpb25hbExvYWQocmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBk
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX21haW5G
cmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uSUQsIFdURk1vdmUocmVxdWVzdCksIHsgfSk7CiAg
ICAgICAgIH0KKyAgICB9OwogCi0gICAgICAgIG1fbWFpbkZyYW1lV2luZG93Q3JlYXRpb25IYW5k
bGVyID0gW3RoaXMsIHByZXZpb3VzUHJvY2VzcyA9IFdURk1vdmUocHJldmlvdXNQcm9jZXNzKSwg
bWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2VzcyA9ICptYWluRnJhbWVJREluUHJldmlvdXNQcm9j
ZXNzXShjb25zdCBHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiB3aW5kb3dJZGVudGlmaWVyKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9tYWluRnJhbWUpOwotICAgICAgICAgICAgR2xvYmFsRnJhbWVJ
ZGVudGlmaWVyIG5hdmlnYXRlZEZyYW1lSWRlbnRpZmllckluTmV3UHJvY2VzcyB7IHBhZ2VJRCgp
LCBtX21haW5GcmFtZS0+ZnJhbWVJRCgpIH07Ci0gICAgICAgICAgICBwcmV2aW91c1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZyYW1lQmVjYW1lUmVtb3RlKG1haW5GcmFtZUlESW5Q
cmV2aW91c1Byb2Nlc3MsIG5hdmlnYXRlZEZyYW1lSWRlbnRpZmllckluTmV3UHJvY2Vzcywgd2lu
ZG93SWRlbnRpZmllciksIHBhZ2VJRCgpKTsKLSAgICAgICAgfTsKLSAgICB9KTsKKyAgICBib29s
IGlzSW5pdGlhbE5hdmlnYXRpb25Jbk5ld1dpbmRvdyA9IG9wZW5lZEJ5RE9NKCkgJiYgIWhhc0Nv
bW1pdHRlZEFueVByb3Zpc2lvbmFsTG9hZHMoKTsKKyAgICBpZiAoIW1fcHJvY2Vzcy0+cHJvY2Vz
c1Bvb2woKS5jb25maWd1cmF0aW9uKCkucHJvY2Vzc1N3YXBzT25XaW5kb3dPcGVuV2l0aE9wZW5l
cigpIHx8ICFpc0luaXRpYWxOYXZpZ2F0aW9uSW5OZXdXaW5kb3cgfHwgIW1haW5GcmFtZUlESW5Q
cmV2aW91c1Byb2Nlc3MpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gd2F5IHdlJ2xsIGJlIGFi
bGUgdG8gcmV0dXJuIHRvIHRoZSBwYWdlIGluIHRoZSBwcmV2aW91cyBwYWdlIHNvIGNsb3NlIGl0
LgorICAgICAgICBpZiAoIWRpZFN1c3BlbmRQcmV2aW91c1BhZ2UpCisgICAgICAgICAgICBwcmV2
aW91c1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCksIG1fcGFnZUlEKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbWFpbkZyYW1lV2luZG93Q3JlYXRpb25I
YW5kbGVyID0gW3RoaXMsIHByZXZpb3VzUHJvY2VzcyA9IFdURk1vdmUocHJldmlvdXNQcm9jZXNz
KSwgbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2VzcyA9ICptYWluRnJhbWVJREluUHJldmlvdXNQ
cm9jZXNzXShjb25zdCBHbG9iYWxXaW5kb3dJZGVudGlmaWVyJiB3aW5kb3dJZGVudGlmaWVyKSB7
CisgICAgICAgIEFTU0VSVChtX21haW5GcmFtZSk7CisgICAgICAgIEdsb2JhbEZyYW1lSWRlbnRp
ZmllciBuYXZpZ2F0ZWRGcmFtZUlkZW50aWZpZXJJbk5ld1Byb2Nlc3MgeyBwYWdlSUQoKSwgbV9t
YWluRnJhbWUtPmZyYW1lSUQoKSB9OworICAgICAgICBwcmV2aW91c1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkZyYW1lQmVjYW1lUmVtb3RlKG1haW5GcmFtZUlESW5QcmV2aW91c1By
b2Nlc3MsIG5hdmlnYXRlZEZyYW1lSWRlbnRpZmllckluTmV3UHJvY2Vzcywgd2luZG93SWRlbnRp
ZmllciksIHBhZ2VJRCgpKTsKKyAgICB9OworfQorCitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmFpbFRvU3VzcGVuZEFmdGVyUHJvY2Vzc1N3YXAoKQorewor
ICAgIC8vIE9ubHkgdGhlIFN1c3BlbmRlZFBhZ2VQcm94eSBzaG91bGQgYmUgZ2V0dGluZyB0aGlz
IGNhbGwuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRVc2VyQWdlbnQoU3RyaW5nJiYgdXNlckFnZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAppbmRleCA3MzRkMjExNzE5ZTk0YmZmOTVhOTYxZjNmMGQ2MzA5Y2NjM2Vm
YTE1Li41ZWQ2MDcwYjliMzJmODhjMmY0OWJjZTRmM2MxMzlmYzU1NmU0NTYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTU1OSw3ICsxNTU5LDggQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldENhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50cyhib29s
IGNhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50cykgeyBtX2NhblNob3J0Q2lyY3Vp
dEhvcml6b250YWxXaGVlbEV2ZW50cyA9IGNhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2
ZW50czsgfQogCiAgICAgdm9pZCByZWF0dGFjaFRvV2ViUHJvY2VzcygpOwotICAgIHZvaWQgc3dh
cFRvV2ViUHJvY2VzcyhSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBBUEk6Ok5hdmlnYXRpb24mLCBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtYWluRnJhbWVJREluUHJldmlvdXNQcm9jZXNzLCBQcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KTsKKyAgICB2b2lkIHN3YXBUb1dlYlByb2Nlc3MoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgc3Rk
Ojp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiwgU2hvdWxkRGVsYXlBdHRhY2hpbmdE
cmF3aW5nQXJlYSk7CisgICAgdm9pZCBkaWRGYWlsVG9TdXNwZW5kQWZ0ZXJQcm9jZXNzU3dhcCgp
OwogCiAgICAgdm9pZCBmaW5pc2hBdHRhY2hpbmdUb1dlYlByb2Nlc3MoU2hvdWxkRGVsYXlBdHRh
Y2hpbmdEcmF3aW5nQXJlYSA9IFNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWE6Ok5vKTsK
IApAQCAtMTg3OCw3ICsxODc5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVwb3J0UGFnZUxv
YWRSZXN1bHQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgPSB7IH0pOwogCi0gICAgdm9p
ZCBjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoQVBJOjpOYXZpZ2F0aW9uJiwgUmVmPFdl
YlByb2Nlc3NQcm94eT4mJiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCk7CisgICAgdm9p
ZCBjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoQVBJOjpOYXZpZ2F0aW9uJiwgc3RkOjp1
bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwg
UHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCk7CiAKICAgICB2b2lkIHNldE5lZWRzRm9udEF0
dHJpYnV0ZXMoYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVGb250QXR0cmlidXRlc0FmdGVyRWRpdG9y
U3RhdGVDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgppbmRleCA1ZTcwNTZiNjAxMWNlNmZhM2UzNDcxNjFhOWNiNzhlYmQ1YmY0
NTY0Li4yYTE4YTcwMjU3YmM0ZTczNjlhNTkyMDM0YjdjYzkyYThjZjBlZDY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC01MDQs
NiArNTA0LDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBSZXF1ZXN0UG9pbnRl
clVubG9jaygpCiAjZW5kaWYKIAorICAgIERpZEZhaWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2Fw
KCkKKwogICAgIEltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQoV2ViQ29yZTo6SW50U2l6
ZSBuZXdTaXplKQogCiAgICAgVXNlRml4ZWRMYXlvdXREaWRDaGFuZ2UoYm9vbCB1c2VGaXhlZExh
eW91dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCAy
YzM3MWEzYmZjYTFkOTNmN2M3ZmUzMDVmZmI4YzI5OWRjNDU1YjA3Li44ZWYyYmZhYTE4Njc4ZmUx
NGMzYmFiNjdmNjhjYzVlN2E4YjI0MTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwCkBAIC0yMTEyLDMyICsyMTEyLDMyIEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQoV2ViUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQogICAgICAgICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1v
dmUocmVnaXN0cmFibGVEb21haW4pOwogfQogCi1SZWY8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9j
ZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBB
UEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQg
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgU3RyaW5nJiByZWFzb24pCi17Ci0gICAgYXV0
byBwcm9jZXNzID0gcHJvY2Vzc0Zvck5hdmlnYXRpb25JbnRlcm5hbChwYWdlLCBuYXZpZ2F0aW9u
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCByZWFzb24pOwotCi0gICAgLy8gV2UgYXJl
IHByb2Nlc3Mtc3dhcHBpbmcgc28gYXV0b21hdGljIHByb2Nlc3MgcHJld2FybWluZyB3b3VsZCBi
ZSBiZW5lZmljaWFsIGlmIHRoZSBjbGllbnQgaGFzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgLyBk
aXNhYmxlZCBpdC4KLSAgICBib29sIGRvaW5nQW5BdXRvbWF0aWNQcm9jZXNzU3dhcCA9IHByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPT0gUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6
Tm8gJiYgcHJvY2Vzcy5wdHIoKSAhPSAmcGFnZS5wcm9jZXNzKCk7Ci0gICAgaWYgKGRvaW5nQW5B
dXRvbWF0aWNQcm9jZXNzU3dhcCAmJiAhY29uZmlndXJhdGlvbigpLndhc0F1dG9tYXRpY1Byb2Nl
c3NXYXJtaW5nU2V0QnlDbGllbnQoKSAmJiAhY29uZmlndXJhdGlvbigpLmNsaWVudFdvdWxkQmVu
ZWZpdEZyb21BdXRvbWF0aWNQcm9jZXNzUHJld2FybWluZygpKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HKFBlcmZvcm1hbmNlTG9nZ2luZywgIkF1dG9tYXRpY2FsbHkgdHVybmluZyBvbiBwcm9jZXNz
IHByZXdhcm1pbmcgYmVjYXVzZSB0aGUgY2xpZW50IHdvdWxkIGJlbmVmaXQgZnJvbSBpdCIpOwot
ICAgICAgICBjb25maWd1cmF0aW9uKCkuc2V0Q2xpZW50V291bGRCZW5lZml0RnJvbUF1dG9tYXRp
Y1Byb2Nlc3NQcmV3YXJtaW5nKHRydWUpOwotICAgIH0KK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NGb3JOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0
aW9uJiBuYXZpZ2F0aW9uLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmPFdlYlByb2Nlc3NQ
cm94eT4mJiwgU3VzcGVuZGVkUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgcHJvY2Vzc0Zvck5hdmlnYXRpb25JbnRlcm5hbChwYWdlLCBuYXZp
Z2F0aW9uLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBbdGhpcywgcGFnZSA9IG1ha2VS
ZWZQdHIocGFnZSksIG5hdmlnYXRpb24gPSBtYWtlUmVmKG5hdmlnYXRpb24pLCBwcm9jZXNzU3dh
cFJlcXVlc3RlZEJ5Q2xpZW50LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXShSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlc3MsIFN1c3BlbmRlZFBhZ2VQ
cm94eSogc3VzcGVuZGVkUGFnZSwgY29uc3QgU3RyaW5nJiByZWFzb24pIG11dGFibGUgeworICAg
ICAgICAvLyBXZSBhcmUgcHJvY2Vzcy1zd2FwcGluZyBzbyBhdXRvbWF0aWMgcHJvY2VzcyBwcmV3
YXJtaW5nIHdvdWxkIGJlIGJlbmVmaWNpYWwgaWYgdGhlIGNsaWVudCBoYXMgbm90IGV4cGxpY2l0
bHkgZW5hYmxlZCAvIGRpc2FibGVkIGl0LgorICAgICAgICBib29sIGRvaW5nQW5BdXRvbWF0aWNQ
cm9jZXNzU3dhcCA9IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPT0gUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudDo6Tm8gJiYgcHJvY2Vzcy5wdHIoKSAhPSAmcGFnZS0+cHJvY2Vzcygp
OworICAgICAgICBpZiAoZG9pbmdBbkF1dG9tYXRpY1Byb2Nlc3NTd2FwICYmICFjb25maWd1cmF0
aW9uKCkud2FzQXV0b21hdGljUHJvY2Vzc1dhcm1pbmdTZXRCeUNsaWVudCgpICYmICFjb25maWd1
cmF0aW9uKCkuY2xpZW50V291bGRCZW5lZml0RnJvbUF1dG9tYXRpY1Byb2Nlc3NQcmV3YXJtaW5n
KCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFBlcmZvcm1hbmNlTG9nZ2luZywgIkF1dG9t
YXRpY2FsbHkgdHVybmluZyBvbiBwcm9jZXNzIHByZXdhcm1pbmcgYmVjYXVzZSB0aGUgY2xpZW50
IHdvdWxkIGJlbmVmaXQgZnJvbSBpdCIpOworICAgICAgICAgICAgY29uZmlndXJhdGlvbigpLnNl
dENsaWVudFdvdWxkQmVuZWZpdEZyb21BdXRvbWF0aWNQcm9jZXNzUHJld2FybWluZyh0cnVlKTsK
KyAgICAgICAgfQogCi0gICAgaWYgKG1fY29uZmlndXJhdGlvbi0+YWx3YXlzS2VlcEFuZFJldXNl
U3dhcHBlZFByb2Nlc3NlcygpICYmIHByb2Nlc3MucHRyKCkgIT0gJnBhZ2UucHJvY2VzcygpKSB7
Ci0gICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICAgICAgc3RkOjpj
YWxsX29uY2Uob25jZUZsYWcsIFtdIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiV0FSTklO
RzogVGhlIG9wdGlvbiB0byBhbHdheXMga2VlcCBzd2FwcGVkIHdlYiBwcm9jZXNzZXMgYWxpdmUg
aXMgYWN0aXZlLiBUaGlzIGlzIG1lYW50IGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb25seS4i
KTsKLSAgICAgICAgfSk7CisgICAgICAgIGlmIChtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c0tlZXBB
bmRSZXVzZVN3YXBwZWRQcm9jZXNzZXMoKSAmJiBwcm9jZXNzLnB0cigpICE9ICZwYWdlLT5wcm9j
ZXNzKCkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAg
ICAgICAgICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJXQVJOSU5HOiBUaGUgb3B0aW9uIHRvIGFsd2F5cyBrZWVwIHN3YXBwZWQg
d2ViIHByb2Nlc3NlcyBhbGl2ZSBpcyBhY3RpdmUuIFRoaXMgaXMgbWVhbnQgZm9yIGRlYnVnZ2lu
ZyBhbmQgdGVzdGluZyBvbmx5LiIpOworICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgYWRkUHJv
Y2Vzc1RvT3JpZ2luQ2FjaGVTZXQocGFnZSk7CisgICAgICAgICAgICBhZGRQcm9jZXNzVG9Pcmln
aW5DYWNoZVNldCgqcGFnZSk7CiAKLSAgICAgICAgTE9HKFByb2Nlc3NTd2FwcGluZywgIihQcm9j
ZXNzU3dhcHBpbmcpIE5hdmlnYXRpbmcgZnJvbSAlcyB0byAlcywga2VlcGluZyBhcm91bmQgb2xk
IHByb2Nlc3MuIE5vdyBob2xkaW5nIG9uIHRvIG9sZCBwcm9jZXNzZXMgZm9yICV1IG9yaWdpbnMu
IiwgcGFnZS5jdXJyZW50VVJMKCkudXRmOCgpLmRhdGEoKSwgbmF2aWdhdGlvbi5jdXJyZW50UmVx
dWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fc3dhcHBlZFByb2Nlc3Nlc1Bl
clJlZ2lzdHJhYmxlRG9tYWluLnNpemUoKSk7Ci0gICAgfQorICAgICAgICAgICAgTE9HKFByb2Nl
c3NTd2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIE5hdmlnYXRpbmcgZnJvbSAlcyB0byAlcywg
a2VlcGluZyBhcm91bmQgb2xkIHByb2Nlc3MuIE5vdyBob2xkaW5nIG9uIHRvIG9sZCBwcm9jZXNz
ZXMgZm9yICV1IG9yaWdpbnMuIiwgcGFnZS0+Y3VycmVudFVSTCgpLnV0ZjgoKS5kYXRhKCksIG5h
dmlnYXRpb24tPmN1cnJlbnRSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
bV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4uc2l6ZSgpKTsKKyAgICAgICAg
fQogCi0gICAgcmV0dXJuIHByb2Nlc3M7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUocHJvY2VzcyksIHN1c3BlbmRlZFBhZ2UsIHJlYXNvbik7CisgICAgfSk7CiB9CiAKLVJlZjxX
ZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbkludGVy
bmFsKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0aW9uJiBuYXZpZ2F0aW9u
LCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQsIFN0cmluZyYgcmVhc29uKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmln
YXRpb25JbnRlcm5hbChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IEFQSTo6TmF2aWdhdGlvbiYg
bmF2aWdhdGlvbiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxXZWJQcm9jZXNzUHJveHk+
JiYsIFN1c3BlbmRlZFBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGF1dG8mIHRhcmdldFVSTCA9IG5hdmlnYXRpb24uY3VycmVudFJlcXVlc3Qo
KS51cmwoKTsKIApAQCAtMjE1MCw0NCArMjE1MCwzNyBAQCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb25JbnRlcm5hbChXZWJQYWdlUHJveHkm
CiAgICAgICAgIHJldHVybiBjcmVhdGVOZXdXZWJQcm9jZXNzKHBhZ2Uud2Vic2l0ZURhdGFTdG9y
ZSgpKTsKICAgICB9OwogCi0gICAgaWYgKHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPT0g
UHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6WWVzKSB7Ci0gICAgICAgIHJlYXNvbiA9ICJQ
cm9jZXNzIHN3YXAgd2FzIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50Il9zOwotICAgICAgICByZXR1
cm4gY3JlYXRlTmV3UHJvY2VzcygpOwotICAgIH0KKyAgICBpZiAocHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpZZXMpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihjcmVhdGVOZXdQcm9jZXNzKCksIG51bGxwdHIsICJQ
cm9jZXNzIHN3YXAgd2FzIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50Il9zKTsKIAotICAgIGlmICgh
bV9jb25maWd1cmF0aW9uLT5wcm9jZXNzU3dhcHNPbk5hdmlnYXRpb24oKSkgewotICAgICAgICBy
ZWFzb24gPSAiRmVhdHVyZSBpcyBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuIHBhZ2UucHJv
Y2VzcygpOwotICAgIH0KKyAgICBpZiAoIW1fY29uZmlndXJhdGlvbi0+cHJvY2Vzc1N3YXBzT25O
YXZpZ2F0aW9uKCkpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihwYWdlLnByb2Nl
c3MoKSwgbnVsbHB0ciwgIkZlYXR1cmUgaXMgZGlzYWJsZWQiX3MpOwogCi0gICAgaWYgKG1fYXV0
b21hdGlvblNlc3Npb24pIHsKLSAgICAgICAgcmVhc29uID0gIkFuIGF1dG9tYXRpb24gc2Vzc2lv
biBpcyBhY3RpdmUiX3M7Ci0gICAgICAgIHJldHVybiBwYWdlLnByb2Nlc3MoKTsKLSAgICB9Cisg
ICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcihwYWdlLnByb2Nlc3MoKSwgbnVsbHB0ciwgIkFuIGF1dG9tYXRpb24gc2Vzc2lvbiBpcyBh
Y3RpdmUiX3MpOwogCiAgICAgaWYgKCFwYWdlLnByb2Nlc3MoKS5oYXNDb21taXR0ZWRBbnlQcm92
aXNpb25hbExvYWRzKCkpIHsKLSAgICAgICAgcmVhc29uID0gIlByb2Nlc3MgaGFzIG5vdCB5ZXQg
Y29tbWl0dGVkIGFueSBwcm92aXNpb25hbCBsb2FkcyJfczsKICAgICAgICAgdHJ5UHJld2FybVdp
dGhEb21haW5JbmZvcm1hdGlvbihwYWdlLnByb2Nlc3MoKSwgdGFyZ2V0VVJMKTsKLSAgICAgICAg
cmV0dXJuIHBhZ2UucHJvY2VzcygpOworICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
cGFnZS5wcm9jZXNzKCksIG51bGxwdHIsICJQcm9jZXNzIGhhcyBub3QgeWV0IGNvbW1pdHRlZCBh
bnkgcHJvdmlzaW9uYWwgbG9hZHMiX3MpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgc3VwcG9ydCBwcm9jZXNzIHN3YXAgd2hlbiBhIHdpbmRvdyBoYXMgYmVlbiBvcGVuZWQgdmlh
IHdpbmRvdy5vcGVuKCkgd2l0aG91dCAnbm9vcGVuZXInLgogICAgIC8vIFRoZSBpc3N1ZSBpcyB0
aGF0IHRoZSBvcGVuZXIgaGFzIGEgaGFuZGxlIHRvIHRoZSBXaW5kb3dQcm94eS4KLSAgICBpZiAo
bmF2aWdhdGlvbi5vcGVuZWRCeURPTVdpdGhPcGVuZXIoKSAmJiAhbV9jb25maWd1cmF0aW9uLT5w
cm9jZXNzU3dhcHNPbldpbmRvd09wZW5XaXRoT3BlbmVyKCkpIHsKLSAgICAgICAgcmVhc29uID0g
IkJyb3dzaW5nIGNvbnRleHQgYmVlbiBvcGVuZWQgYnkgRE9NIHdpdGhvdXQgJ25vb3BlbmVyJyJf
czsKLSAgICAgICAgcmV0dXJuIHBhZ2UucHJvY2VzcygpOwotICAgIH0KKyAgICBpZiAobmF2aWdh
dGlvbi5vcGVuZWRCeURPTVdpdGhPcGVuZXIoKSAmJiAhbV9jb25maWd1cmF0aW9uLT5wcm9jZXNz
U3dhcHNPbldpbmRvd09wZW5XaXRoT3BlbmVyKCkpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihwYWdlLnByb2Nlc3MoKSwgbnVsbHB0ciwgIkJyb3dzaW5nIGNvbnRleHQgYmVlbiBv
cGVuZWQgYnkgRE9NIHdpdGhvdXQgJ25vb3BlbmVyJyJfcyk7CiAKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHN1cHBvcnQgcHJvY2VzcyBzd2FwIHdoZW4gYSB3aW5kb3cgaGFzIG9wZW5lZCBvdGhl
ciB3aW5kb3dzIHZpYSB3aW5kb3cub3Blbi4KLSAgICBpZiAobmF2aWdhdGlvbi5oYXNPcGVuZWRG
cmFtZXMoKSkgewotICAgICAgICByZWFzb24gPSAiQnJvd3NpbmcgY29udGV4dCBoYXMgb3BlbmVk
IG90aGVyIHdpbmRvd3MiX3M7Ci0gICAgICAgIHJldHVybiBwYWdlLnByb2Nlc3MoKTsKLSAgICB9
CisgICAgaWYgKG5hdmlnYXRpb24uaGFzT3BlbmVkRnJhbWVzKCkpCisgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihwYWdlLnByb2Nlc3MoKSwgbnVsbHB0ciwgIkJyb3dzaW5nIGNvbnRl
eHQgaGFzIG9wZW5lZCBvdGhlciB3aW5kb3dzIl9zKTsKIAogICAgIGlmIChhdXRvKiBiYWNrRm9y
d2FyZExpc3RJdGVtID0gbmF2aWdhdGlvbi50YXJnZXRJdGVtKCkpIHsKICAgICAgICAgaWYgKGF1
dG8qIHN1c3BlbmRlZFBhZ2UgPSBiYWNrRm9yd2FyZExpc3RJdGVtLT5zdXNwZW5kZWRQYWdlKCkp
IHsKLSAgICAgICAgICAgIHJlYXNvbiA9ICJVc2luZyB0YXJnZXQgYmFjay9mb3J3YXJkIGl0ZW0n
cyBwcm9jZXNzIl9zOwotICAgICAgICAgICAgcmV0dXJuIHN1c3BlbmRlZFBhZ2UtPnByb2Nlc3Mo
KTsKKyAgICAgICAgICAgIHJldHVybiBzdXNwZW5kZWRQYWdlLT53aGVuUmVhZHlUb0NvbnN1bWUo
W2NyZWF0ZU5ld1Byb2Nlc3MgPSBXVEZNb3ZlKGNyZWF0ZU5ld1Byb2Nlc3MpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTdXNwZW5kZWRQYWdlUHJveHkq
IHN1c3BlbmRlZFBhZ2UpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghc3VzcGVuZGVk
UGFnZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGNyZWF0
ZU5ld1Byb2Nlc3MoKSwgbnVsbHB0ciwgIlVzaW5nIG5ldyBwcm9jZXNzIGJlY2F1c2UgdGFyZ2V0
IGJhY2svZm9yd2FyZCBpdGVtJ3MgcHJvY2VzcyBmYWlsZWQgdG8gc3VzcGVuZCJfcyk7CisgICAg
ICAgICAgICAgICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IHN1c3BlbmRlZFBhZ2Ut
PnByb2Nlc3MoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHBy
b2Nlc3MpLCBzdXNwZW5kZWRQYWdlLCAiVXNpbmcgdGFyZ2V0IGJhY2svZm9yd2FyZCBpdGVtJ3Mg
cHJvY2VzcyJfcyk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElm
IHRoZSB0YXJnZXQgYmFjay9mb3J3YXJkIGl0ZW0gYW5kIHRoZSBjdXJyZW50IGJhY2svZm9yd2Fy
ZCBpdGVtIG9yaWdpbmF0ZWQKQEAgLTIxOTYsMTcgKzIxODksMTMgQEAgUmVmPFdlYlByb2Nlc3NQ
cm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwoV2ViUGFn
ZVByb3h5JgogICAgICAgICAgICAgYXV0byB1aVByb2Nlc3NJZGVudGlmaWVyID0gUHJvY2Vzczo6
aWRlbnRpZmllcigpOwogICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBzZXNzaW9uIHJlc3RvcmUs
IHRoZSBpdGVtJ3MgcHJvY2VzcyBpZGVudGlmaWVyIGlzIHRoZSBVSVByb2Nlc3MnIGlkZW50aWZp
ZXIsIGluIHdoaWNoIGNhc2Ugd2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBjaGVjawogICAgICAg
ICAgICAgLy8gb3Igd2UnZCBuZXZlciBzd2FwIGFmdGVyIGEgc2Vzc2lvbiByZXN0b3JlLgotICAg
ICAgICAgICAgaWYgKGZyb21JdGVtLT5pdGVtSUQoKS5wcm9jZXNzSWRlbnRpZmllciA9PSBiYWNr
Rm9yd2FyZExpc3RJdGVtLT5pdGVtSUQoKS5wcm9jZXNzSWRlbnRpZmllciAmJiBiYWNrRm9yd2Fy
ZExpc3RJdGVtLT5pdGVtSUQoKS5wcm9jZXNzSWRlbnRpZmllciAhPSB1aVByb2Nlc3NJZGVudGlm
aWVyKSB7Ci0gICAgICAgICAgICAgICAgcmVhc29uID0gIlNvdXJjZSBhbmQgdGFyZ2V0IGJhY2sv
Zm9yd2FyZCBpdGVtIG9yaWdpbmF0ZWQgaW4gdGhlIHNhbWUgcHJvY2VzcyJfczsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcGFnZS5wcm9jZXNzKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZnJvbUl0ZW0tPml0ZW1JRCgpLnByb2Nlc3NJZGVudGlmaWVyID09IGJhY2tGb3J3YXJk
TGlzdEl0ZW0tPml0ZW1JRCgpLnByb2Nlc3NJZGVudGlmaWVyICYmIGJhY2tGb3J3YXJkTGlzdEl0
ZW0tPml0ZW1JRCgpLnByb2Nlc3NJZGVudGlmaWVyICE9IHVpUHJvY2Vzc0lkZW50aWZpZXIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHBhZ2UucHJvY2VzcygpLCBu
dWxscHRyLCAiU291cmNlIGFuZCB0YXJnZXQgYmFjay9mb3J3YXJkIGl0ZW0gb3JpZ2luYXRlZCBp
biB0aGUgc2FtZSBwcm9jZXNzIl9zKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChuYXZp
Z2F0aW9uLnRyZWF0QXNTYW1lT3JpZ2luTmF2aWdhdGlvbigpKSB7Ci0gICAgICAgIHJlYXNvbiA9
ICJUaGUgdHJlYXRBc1NhbWVPcmlnaW5OYXZpZ2F0aW9uIGZsYWcgaXMgc2V0Il9zOwotICAgICAg
ICByZXR1cm4gcGFnZS5wcm9jZXNzKCk7Ci0gICAgfQorICAgIGlmIChuYXZpZ2F0aW9uLnRyZWF0
QXNTYW1lT3JpZ2luTmF2aWdhdGlvbigpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIocGFnZS5wcm9jZXNzKCksIG51bGxwdHIsICJUaGUgdHJlYXRBc1NhbWVPcmlnaW5OYXZpZ2F0
aW9uIGZsYWcgaXMgc2V0Il9zKTsKIAogICAgIGJvb2wgaXNJbml0aWFsTG9hZEluTmV3V2luZG93
T3BlbmVkQnlET00gPSBwYWdlLm9wZW5lZEJ5RE9NKCkgJiYgIXBhZ2UuaGFzQ29tbWl0dGVkQW55
UHJvdmlzaW9uYWxMb2FkcygpOwogICAgIFVSTCBzb3VyY2VVUkw7CkBAIC0yMjIwLDExICsyMjA5
LDEwIEBAIFJlZjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2
aWdhdGlvbkludGVybmFsKFdlYlBhZ2VQcm94eSYKICAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vz
c1N3YXBwaW5nLCAiVXNpbmcgcmVsYXRlZCBwYWdlICVwJ3MgVVJMIGFzIHNvdXJjZSBVUkwgZm9y
IHByb2Nlc3Mgc3dhcCBkZWNpc2lvbiIsIHBhZ2UuY29uZmlndXJhdGlvbigpLnJlbGF0ZWRQYWdl
KCkpOwogICAgIH0KIAotICAgIGlmICghc291cmNlVVJMLmlzVmFsaWQoKSB8fCAhdGFyZ2V0VVJM
LmlzVmFsaWQoKSB8fCBzb3VyY2VVUkwuaXNFbXB0eSgpIHx8IHNvdXJjZVVSTC5wcm90b2NvbElz
QWJvdXQoKSB8fCByZWdpc3RyYWJsZURvbWFpbnNBcmVFcXVhbChzb3VyY2VVUkwsIHRhcmdldFVS
TCkpIHsKLSAgICAgICAgcmVhc29uID0gIk5hdmlnYXRpb24gaXMgc2FtZS1zaXRlIl9zOwotICAg
ICAgICByZXR1cm4gcGFnZS5wcm9jZXNzKCk7Ci0gICAgfQotICAgIHJlYXNvbiA9ICJOYXZpZ2F0
aW9uIGlzIGNyb3NzLXNpdGUiX3M7CisgICAgaWYgKCFzb3VyY2VVUkwuaXNWYWxpZCgpIHx8ICF0
YXJnZXRVUkwuaXNWYWxpZCgpIHx8IHNvdXJjZVVSTC5pc0VtcHR5KCkgfHwgc291cmNlVVJMLnBy
b3RvY29sSXNBYm91dCgpIHx8IHJlZ2lzdHJhYmxlRG9tYWluc0FyZUVxdWFsKHNvdXJjZVVSTCwg
dGFyZ2V0VVJMKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHBhZ2UucHJvY2Vz
cygpLCBudWxscHRyLCAiTmF2aWdhdGlvbiBpcyBzYW1lLXNpdGUiX3MpOworCisgICAgU3RyaW5n
IHJlYXNvbiA9ICJOYXZpZ2F0aW9uIGlzIGNyb3NzLXNpdGUiX3M7CiAgICAgCiAgICAgYXV0byBy
ZWdpc3RyYWJsZURvbWFpbiA9IHRvUmVnaXN0cmFibGVEb21haW4odGFyZ2V0VVJMKTsKICAgICBp
ZiAobV9jb25maWd1cmF0aW9uLT5hbHdheXNLZWVwQW5kUmV1c2VTd2FwcGVkUHJvY2Vzc2VzKCkp
IHsKQEAgLTIyNDIsNyArMjIzMCw3IEBAIFJlZjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQ
b29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbkludGVybmFsKFdlYlBhZ2VQcm94eSYKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICZzdXNwZW5kZWRQYWdlLT5wYWdlKCkgPT0gJnBhZ2UgJiYgJnN1
c3BlbmRlZFBhZ2UtPnByb2Nlc3MoKSA9PSBwcm9jZXNzOwogICAgICAgICAgICAgICAgIH0pOwog
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWYoKnByb2Nlc3MpOworICAgICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihtYWtlUmVmKCpwcm9jZXNzKSwgbnVsbHB0ciwg
cmVhc29uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIyNjIsMTAgKzIy
NTAsMTAgQEAgUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JO
YXZpZ2F0aW9uSW50ZXJuYWwoV2ViUGFnZVByb3h5JgogICAgICAgICBpZiAoJnByb2Nlc3MtPndl
YnNpdGVEYXRhU3RvcmUoKSAhPSAmcGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkpCiAgICAgICAgICAg
ICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3Jl
KHBhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpLnBhcmFtZXRlcnMoKSksIDApOwogCi0gICAgICAgIHJl
dHVybiBwcm9jZXNzOworICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShw
cm9jZXNzKSwgbnVsbHB0ciwgcmVhc29uKTsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlTmV3
UHJvY2VzcygpOworICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihjcmVhdGVOZXdQcm9jZXNz
KCksIG51bGxwdHIsIHJlYXNvbik7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFkZFN1c3Bl
bmRlZFBhZ2Uoc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJiBzdXNwZW5kZWRQ
YWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggMDNkYTM4
OTBmZjJlYWZkNDFkNzZmMmNlZjk1YjJlOTBkMDdiZTBiYS4uNGZkNzkyNDE3NDg5OTVmNTMwNjAw
MDBiNjQxNmUzZmM0MTQwYWJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCkBAIC00NDUsNyArNDQ1LDcgQEAgcHVibGljOgogICAgIEJhY2tncm91bmRXZWJQcm9j
ZXNzVG9rZW4gYmFja2dyb3VuZFdlYlByb2Nlc3NUb2tlbigpIGNvbnN0IHsgcmV0dXJuIEJhY2tn
cm91bmRXZWJQcm9jZXNzVG9rZW4obV9iYWNrZ3JvdW5kV2ViUHJvY2Vzc0NvdW50ZXIuY291bnQo
KSk7IH0KICNlbmRpZgogCi0gICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2Vzc0Zvck5hdmln
YXRpb24oV2ViUGFnZVByb3h5JiwgY29uc3QgQVBJOjpOYXZpZ2F0aW9uJiwgUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCwgU3RyaW5nJiByZWFzb24pOworICAgIHZvaWQgcHJvY2Vzc0Zvck5h
dmlnYXRpb24oV2ViUGFnZVByb3h5JiwgY29uc3QgQVBJOjpOYXZpZ2F0aW9uJiwgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViUHJvY2Vz
c1Byb3h5PiYmLCBTdXNwZW5kZWRQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKT4mJik7CiAKICAg
ICAvLyBTdXNwZW5kZWRQYWdlUHJveHkgbWFuYWdlbWVudC4KICAgICB2b2lkIGFkZFN1c3BlbmRl
ZFBhZ2Uoc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4mJik7CkBAIC00NzksNyAr
NDc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3Mo
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlk
YXRlQ29udGV4dCgpOwogCi0gICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2Vzc0Zvck5hdmln
YXRpb25JbnRlcm5hbChXZWJQYWdlUHJveHkmLCBjb25zdCBBUEk6Ok5hdmlnYXRpb24mLCBQcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBTdHJpbmcmIHJlYXNvbik7CisgICAgdm9pZCBwcm9j
ZXNzRm9yTmF2aWdhdGlvbkludGVybmFsKFdlYlBhZ2VQcm94eSYsIGNvbnN0IEFQSTo6TmF2aWdh
dGlvbiYsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgU3VzcGVuZGVkUGFnZVByb3h5KiwgY29uc3QgU3Ry
aW5nJik+JiYpOwogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gdHJ5VGFrZVByZXdhcm1l
ZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggN2IxNWM2NTcxMjE3OTY0MGFmNDk3ZjJmMTlj
NzE5OTZiNzEzNDUyOC4uOWFlMzc4YjI4OGM5MzAwMzNjOGQ5MzU4YzFjODhlZjVkZTc5NjJlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAt
MjU1LDE3ICsyNTUsMTEgQEAgdm9pZCBXZWJGcmFtZTo6aW52YWxpZGF0ZVBvbGljeUxpc3RlbmVy
KCkKIAogdm9pZCBXZWJGcmFtZTo6ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKHVpbnQ2NF90IGxp
c3RlbmVySUQsIFBvbGljeUFjdGlvbiBhY3Rpb24sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgRG93
bmxvYWRJRCBkb3dubG9hZElELCBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYg
d2Vic2l0ZVBvbGljaWVzKQogewotICAgIGlmICghbV9jb3JlRnJhbWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV9wb2xpY3lMaXN0ZW5lcklEKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobGlzdGVuZXJJRCAhPSBtX3BvbGljeUxpc3RlbmVySUQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9wb2xpY3lGdW5jdGlvbikKKyAgICBpZiAoIW1fY29yZUZyYW1lIHx8ICFt
X3BvbGljeUxpc3RlbmVySUQgfHwgbGlzdGVuZXJJRCAhPSBtX3BvbGljeUxpc3RlbmVySUQgfHwg
IW1fcG9saWN5RnVuY3Rpb24pIHsKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBQb2xpY3lBY3Rpb246
OlN1c3BlbmQpCisgICAgICAgICAgICBwYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkRmFpbFRvU3VzcGVuZEFmdGVyUHJvY2Vzc1N3YXAoKSk7CiAgICAgICAgIHJldHVybjsK
KyAgICB9CiAKICAgICBGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uID0gV1RGTW92ZShtX3Bv
bGljeUZ1bmN0aW9uKTsKICAgICBib29sIGZvck5hdmlnYXRpb25BY3Rpb24gPSBtX3BvbGljeUZ1
bmN0aW9uRm9yTmF2aWdhdGlvbkFjdGlvbiA9PSBGb3JOYXZpZ2F0aW9uQWN0aW9uOjpZZXM7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDFjZDRj
OTM4NjcyMTc2NWQ2MGRkY2I2MjBiMjU2MTU1NjQ4NjZjOC4uMTI5YmMwNDNkYmI5Zjk5ZjE0N2Uy
MGQxZmJlMjRiNDc1N2Y0YjA1ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTEyLTA2ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUFNPTiBsb2dpYyBnZXRzIGNvbmZ1c2VkIGJ5
IGNvbmN1cnJlbnQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiByZXF1ZXN0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNDgyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS80NjQ3MDE0NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
Lm1tOgorCiAyMDE4LTEyLTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4K
IAogICAgICAgICB3ZWJraXRweTogQ2xlYW4tdXAgYXBwbGVfYWRkaXRpb25zCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbi5tbQppbmRleCBhMmI2YWYyM2JmOGUxYjliNjYxZWIyZjdjOGQxMjYz
M2Q0OWYwNDljLi5kYjA5MDllZTY3MmE0YTJjODM3NTkyOTJmMzM1YWUzYTdlNTcwYzIzIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KQEAgLTI0NzMsNiArMjQ3Myw3NiBAQCBURVNU
KFByb2Nlc3NTd2FwLCBQcm9jZXNzUmV1c2VlVExEUGx1czIpCiAgICAgRVhQRUNUX0VRKHBpZDEs
IHBpZDMpOwogfQogCitURVNUKFByb2Nlc3NTd2FwLCBDb25jdXJyZW50SGlzdG9yeU5hdmlnYXRp
b25zKQoreworICAgIGF1dG8gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIHByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzU3dhcHNPbk5hdmlnYXRpb24gPSBZRVM7CisgICAg
YXV0byBwcm9jZXNzUG9vbCA9IGFkb3B0TlMoW1tXS1Byb2Nlc3NQb29sIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAg
YXV0byB3ZWJWaWV3Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFByb2Nlc3NQ
b29sOnByb2Nlc3NQb29sLmdldCgpXTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbUFNP
TlNjaGVtZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbiBzZXRVUkxT
Y2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiUFNPTiJdOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0
aW9uLmdldCgpXSk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbUFNP
Tk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmln
YXRpb25EZWxlZ2F0ZTpuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAInBzb246Ly93d3cud2Via2l0Lm9yZy9tYWluLmh0bWwiXV1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgZG9uZSA9IGZhbHNlOworCisgICAgYXV0byB3
ZWJraXRQSUQgPSBbd2ViVmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdOworCisgICAgW3dlYlZp
ZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAInBzb246Ly93d3cuYXBwbGUuY29tL21haW4uaHRtbCJdXV07CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBkb25lID0gZmFsc2U7CisKKyAgICBhdXRv
IGFwcGxlUElEID0gW3dlYlZpZXcgX3dlYlByb2Nlc3NJZGVudGlmaWVyXTsKKworICAgIEVYUEVD
VF9ORSh3ZWJraXRQSUQsIGFwcGxlUElEKTsKKworICAgIFt3ZWJWaWV3IGdvQmFja107CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBkb25lID0gZmFsc2U7CisKKyAg
ICBFWFBFQ1RfRVEod2Via2l0UElELCBbd2ViVmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdKTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJwc29uOi8vd3d3LndlYmtpdC5vcmcvbWFpbi5odG1sIiwg
W1t3ZWJWaWV3IFVSTF0gYWJzb2x1dGVTdHJpbmddKTsKKworICAgIGF1dG8qIGJhY2tGb3J3YXJk
TGlzdCA9IFt3ZWJWaWV3IGJhY2tGb3J3YXJkTGlzdF07CisgICAgRVhQRUNUX1dLX1NUUkVRKEAi
cHNvbjovL3d3dy53ZWJraXQub3JnL21haW4uaHRtbCIsIFtiYWNrRm9yd2FyZExpc3QuY3VycmVu
dEl0ZW0uVVJMIGFic29sdXRlU3RyaW5nXSk7CisgICAgRVhQRUNUX1RSVUUoIWJhY2tGb3J3YXJk
TGlzdC5iYWNrSXRlbSk7CisgICAgRVhQRUNUX0VRKDFVLCBiYWNrRm9yd2FyZExpc3QuZm9yd2Fy
ZExpc3QuY291bnQpOworICAgIEVYUEVDVF9XS19TVFJFUShAInBzb246Ly93d3cuYXBwbGUuY29t
L21haW4uaHRtbCIsIFtiYWNrRm9yd2FyZExpc3QuZm9yd2FyZEl0ZW0uVVJMIGFic29sdXRlU3Ry
aW5nXSk7CisKKyAgICAvLyBDb25jdXJyZW50IHJlcXVlc3RzIHRvIGdvIGZvcndhcmQsIHdoaWNo
IHByb2Nlc3Mgc3dhcHMuCisgICAgW3dlYlZpZXcgZ29Gb3J3YXJkXTsKKyAgICBbd2ViVmlldyBn
b0ZvcndhcmRdOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBk
b25lID0gZmFsc2U7CisKKyAgICBFWFBFQ1RfRVEoYXBwbGVQSUQsIFt3ZWJWaWV3IF93ZWJQcm9j
ZXNzSWRlbnRpZmllcl0pOworICAgIEVYUEVDVF9XS19TVFJFUShAInBzb246Ly93d3cuYXBwbGUu
Y29tL21haW4uaHRtbCIsIFtbd2ViVmlldyBVUkxdIGFic29sdXRlU3RyaW5nXSk7CisKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoQCJwc29uOi8vd3d3LmFwcGxlLmNvbS9tYWluLmh0bWwiLCBbYmFja0Zv
cndhcmRMaXN0LmN1cnJlbnRJdGVtLlVSTCBhYnNvbHV0ZVN0cmluZ10pOworICAgIEVYUEVDVF9U
UlVFKCFiYWNrRm9yd2FyZExpc3QuZm9yd2FyZEl0ZW0pOworICAgIEVYUEVDVF9FUSgxVSwgYmFj
a0ZvcndhcmRMaXN0LmJhY2tMaXN0LmNvdW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJwc29u
Oi8vd3d3LndlYmtpdC5vcmcvbWFpbi5odG1sIiwgW2JhY2tGb3J3YXJkTGlzdC5iYWNrSXRlbS5V
UkwgYWJzb2x1dGVTdHJpbmddKTsKKworICAgIFt3ZWJWaWV3IGdvQmFja107CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBkb25lID0gZmFsc2U7CisKKyAgICBFWFBF
Q1RfRVEod2Via2l0UElELCBbd2ViVmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoQCJwc29uOi8vd3d3LndlYmtpdC5vcmcvbWFpbi5odG1sIiwgW1t3ZWJW
aWV3IFVSTF0gYWJzb2x1dGVTdHJpbmddKTsKKworICAgIEVYUEVDVF9XS19TVFJFUShAInBzb246
Ly93d3cud2Via2l0Lm9yZy9tYWluLmh0bWwiLCBbYmFja0ZvcndhcmRMaXN0LmN1cnJlbnRJdGVt
LlVSTCBhYnNvbHV0ZVN0cmluZ10pOworICAgIEVYUEVDVF9UUlVFKCFiYWNrRm9yd2FyZExpc3Qu
YmFja0l0ZW0pOworICAgIEVYUEVDVF9FUSgxVSwgYmFja0ZvcndhcmRMaXN0LmZvcndhcmRMaXN0
LmNvdW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJwc29uOi8vd3d3LmFwcGxlLmNvbS9tYWlu
Lmh0bWwiLCBbYmFja0ZvcndhcmRMaXN0LmZvcndhcmRJdGVtLlVSTCBhYnNvbHV0ZVN0cmluZ10p
OworfQorCiBURVNUKFByb2Nlc3NTd2FwLCBOYXZpZ2F0ZVRvSW52YWxpZFVSTCkKIHsKICAgICBh
dXRvIHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356814</attachid>
            <date>2018-12-07 08:49:13 -0800</date>
            <delta_ts>2018-12-11 12:24:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192482-20181207084912.patch</filename>
            <type>text/plain</type>
            <size>51320</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJjNmZhMmZjZTkzN2E0YjY4
ZTExZDk2NWFhN2I0ODZjYTc4YTM2YWUuLjYxMzFmNmI3YzVlMjQwN2FlYzVhYTA1ZTY0NDdjNTI3
NmEyMTBmNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDE4LTEyLTA2ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUFNPTiBsb2dpYyBnZXRzIGNvbmZ1
c2VkIGJ5IGNvbmN1cnJlbnQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiByZXF1ZXN0
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNDgy
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjQ3MDE0NT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBnZXQgMiBwYXJh
bGxlbCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCkgcmVxdWVzdHMgZnJvbSB0aGUK
KyAgICAgICAgV2ViUHJvY2VzcyB3aGVuIGEgbmV3IGxvYWQgaXMgc3RhcnRlZCBiZWZvcmUgcmVz
cG9uZGluZyB0byB0aGUgZXhpc3RpbmcgcG9saWN5CisgICAgICAgIGRlY2lzaW9uLiBUaGlzIHdv
dWxkIGxlYWQgdG8gc2V2ZXJhbCBpc3N1ZXMgd2l0aCByZWdhcmRzIHRvIFBTT046CisgICAgICAg
IC0gV2Ugd291bGQgZGVjaWRlIHRvIHN3YXAgZm9yIHRoZSBmaXJzdCBwb2xpY3kgZGVjaXNpb24g
YW5kIHRlbGwgdGhlIFdlYlByb2Nlc3MgdG8KKyAgICAgICAgICBzdXNwZW5kLiBIb3dldmVyLCBi
ZWNhdXNlIHRoZSBXZWJQcm9jZXNzIGlzc3VlZCBhIG5ldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uCisgICAgICAgICAgc2luY2UgZm9yIHRoZSBzYW1lIGZyYW1lLCB0aGUgcHJldmlv
dXMgb25lIGlzIGludmFsaWRhdGVkIGFuZCB0aGUgV2ViUHJvY2VzcyB3b3VsZAorICAgICAgICAg
IGlnbm9yZSBvdXIgcmVxdWVzdCB0byBzdXNwZW5kLgorICAgICAgICAtIFdlIHdvdWxkIGhpdCBh
c3NlcnRpb25zIGxhdGVyIG9uIGJlY2F1c2UgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gZGVzdHJv
eWVkIGFuZCB5ZXQKKyAgICAgICAgICB3ZSdyZSBnZXR0aW5nIGEgZGlkU3RhcnRQcm92aXNpb25h
bExvYWQgZm9yIGl0LgorICAgICAgICAtIHN3YXBUb1dlYlByb2Nlc3MoKSB3YXMgYXN5bmNocm9u
b3VzIHNvIHRoYXQgaXQgd291bGQgd2FpdCBmb3IgdGhlIGRlc3RpbmF0aW9uCisgICAgICAgICAg
U3VzcGVuZGVkUGFnZSB0byBmaW5pc2ggc3VzcGVuZGluZyBiZWZvcmUgYXNraW5nIGl0IHRvIHVu
c3VzcGVuZC4gVGhpcyBsZWQgdG8gdmFyaW91cworICAgICAgICAgIHByb2JsZW1zIGJlY2F1c2Ug
YW55dGhpbmcgY2FuIGhhcHBlbiBpbiB0aGUgVUlQcm9jZXNzIHdoaWxlIHdlJ3JlIHdhaXRpbmcg
Zm9yIHRoZQorICAgICAgICAgIHN1c3BlbnNpb24gKGUuZy4gYW5vdGhlciBsb2FkKS4gQWxzbywg
d2UgbWF5IGNyZWF0ZSB0aGUgU3VzcGVuZGVkUGFnZVByb3h5IGZvcgorICAgICAgICAgIHRoZSBj
dXJyZW50IHBhZ2UgdG9vIGxhdGUgYW5kIHN0YXJ0IGdldHRpbmcgSVBDIGZyb20gdGhlIHByZXZp
b3VzIHByb2Nlc3MgYWJvdXQKKyAgICAgICAgICB0aGUgc3VzcGVuc2lvbiBsb2FkIHRvIGFib3V0
OmJsYW5rLgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhlc2UgaXNzdWVzLCB0aGUgZm9sbG93aW5n
IGRlc2lnbiBpcyBub3cgaW1wbGVtZW50ZWQ6CisgICAgICAgIC0gc3dhcFRvV2ViUHJvY2Vzcygp
IGlzIG5vIGxvbmdlciBhc3luY2hyb25vdXMKKyAgICAgICAgLSBpbnN0ZWFkLCBXZWJQcm9jZXNz
UG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oKSBpcyBub3cgYXN5bmNocm9ub3VzLiBUaGlzIGlz
IGJldHRlcgorICAgICAgICAgIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIG5vdCB5ZXQg
dG9sZCB0aGUgV2ViUHJvY2VzcyBhYm91dCB0aGUgcG9saWN5IGRlY2lzaW9uLgorICAgICAgICAg
IFdlIGFscmVhZHkgcHJvcGVybHkgZGVhbCB3aXRoIHRoZSBwb2xpY3kgZGVjaXNpb24gYmVpbmcg
bWFkZSBhc3luY2hyb25vdXNseS4gVGhpcworICAgICAgICAgIGFsc28gYWxsb3dzIHVzIHRvIGNo
b29zZSBhbm90aGVyIHByb2Nlc3MgaWYgdGhlIFN1c3BlbmRlZFBhZ2Ugd2UnZCBsaWtlIHRvIHVz
ZQorICAgICAgICAgIGZhaWxlZCB0byBzdXNwZW5kLgorICAgICAgICAtIElmIHRoZSBXZWJQcm9j
ZXNzIHJlY2VpdmVzIGEgUG9saWN5QWN0aW9uOjpTdXNwZW5kIGJ1dCBpZ25vcmVzIGl0LCBoYXZl
IGl0IHNlbmQgYW4KKyAgICAgICAgICBJUEMgdG8gdGhlIFVJUHJvY2VzcyBzbyB0aGF0IHRoZSBT
dXNwZW5kZWRQYWdlUHJveHkga25vd3MgYWJvdXQgaXQuIFdlIHRoZW4gZGVzdHJveQorICAgICAg
ICAgIHRoZSBTdXNwZW5kZWRQYWdlUHJveHkgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgdXNlZC4K
KyAgICAgICAgLSBBZnRlciB0aGUgYXN5bmNocm9ub3VzIHByb2Nlc3Mgc2VsZWN0aW9uLCBpZiB0
aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiBkZXN0cm95LCBhYm9ydAorICAgICAgICAgIHRoZSBwcm9j
ZXNzLXN3YXAgdG8gYXZvaWQgaGl0dGluZyBhc3NlcnRpb25zIGxhdGVyIG9uIGR1ZSB0byBkb2lu
ZyBhIGxvYWQgZm9yIGEKKyAgICAgICAgICBkZXN0cm95ZWQgbmF2aWdhdGlvbi4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpT
dXNwZW5kZWRQYWdlUHJveHk6On5TdXNwZW5kZWRQYWdlUHJveHkpOgorICAgICAgICBNYWtlIHN1
cmUgbV93aGVuUmVhZHlUb0NvbnN1bWUgY29tcGxldGlvbiBoYW5kbGVyIGdldHMgY2FsbGVkIGlm
IG5lY2Vzc2FyeSBpZiB0aGUKKyAgICAgICAgU3VzcGVuZGVkUGFnZVByb3h5IGdldHMgZGVzdHJv
eWVkLiBXZSBwYXNzIG51bGwgc28gdGhhdCB0aGUgU3VzcGVuZGVkUGFnZSBpcyBub3QKKyAgICAg
ICAgdXNlZC4KKworICAgICAgICAoV2ViS2l0OjpTdXNwZW5kZWRQYWdlUHJveHk6OndoZW5SZWFk
eVRvQ29uc3VtZSk6CisgICAgICAgIEFkZCB3aGVuUmVhZHlUb0NvbnN1bWUoKSB1dGlsaXR5IG1l
dGhvZCB0byBnZXQgYSBjb21wbGV0aW9uIGhhbmRsZXIgY2FsbGVkIHdoZW4KKyAgICAgICAgdGhl
IFN1c3BlbmRlZFBhZ2VQcm94eSBpcyByZWFkeSB0byBiZSB1c2VkLiBUaGlzIGJhc2ljYWxseSBt
ZWFucyB3ZSBoYXZlIHRvIHdhaXQKKyAgICAgICAgZm9yIHRoZSBwYWdlIHRvIGZpbmlzaCBpdHMg
YWJvdXQ6Ymxhbmsgc3VzcGVuc2lvbiBsb2FkLiBJZiB0aGUgc3VzcGVuc2lvbiBmYWlscworICAg
ICAgICB0aGVuIHdlIGNhbGwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aXRoIG51bGwgdG8gaW5k
aWNhdGUgdGhhdCB0aGUgc3VzcGVuZGVkCisgICAgICAgIHBhZ2UgaXMgbm90IHVzYWJsZS4KKwor
ICAgICAgICAoV2ViS2l0OjpTdXNwZW5kZWRQYWdlUHJveHk6OnVuc3VzcGVuZEFuZENvbnN1bWUp
OgorICAgICAgICBSZW5hbWUgdW5zdXNwZW5kKCkgdG8gdW5zdXNwZW5kQW5kQ29uc3VtZSgpIGFu
ZCBtYWtlIGl0IHN5bmNocm9ub3VzLiBUaGlzIG9ubHkgZ2V0cworICAgICAgICBjYWxsZWQgYWZ0
ZXIgd2hlblJlYWR5VG9Db25zdW1lKCkncyBjb21wbGV0aW9uIGhhbmRsZXIgaGFzIGJlZW4gY2Fs
bGVkIGFuZCBpZiB3ZQorICAgICAgICBkbyBkZWNpZGUgdG8gdXNlIHRoZSBTdXNwZW5kZWRQYWdl
UHJveHkuIEl0IHRlbGxzIHRoZSBXZWJQcm9jZXNzIHRvIHVuc3VzcGVuZCBhbmQKKyAgICAgICAg
cmVtb3ZlcyB0aGUgU3VzcGVuZGVkUGFnZVByb3h5IGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgor
CisgICAgICAgIChXZWJLaXQ6OlN1c3BlbmRlZFBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZCk6Cisg
ICAgICAgIHJlbmFtZSBtX2ZpbmlzaGVkU3VzcGVuZGluZ0hhbmRsZXIgdG8gbV93aGVuUmVhZHlU
b0NvbnN1bWUuCisKKyAgICAgICAgKFdlYktpdDo6U3VzcGVuZGVkUGFnZVByb3h5OjpkaWRGYWls
VG9TdXNwZW5kKToKKyAgICAgICAgQWRkIG5ldyBkaWRGYWlsVG9TdXNwZW5kKCkgdGhhdCBnZXRz
IGNhbGxlZCB3aGVuIHRoZSBXZWJQcm9jZXNzIHNlbmRzIHVzIGFuIElQQyB0ZWxsaW5nCisgICAg
ICAgIHVzIGl0IGlnbm9yZWQgb3VyIHJlcXVlc3QgdG8gc3VzcGVuZC4gV2UgdGhlbiBjYWxsIG1f
d2hlblJlYWR5VG9Db25zdW1lIGNvbXBsZXRpb24KKyAgICAgICAgaGFuZGxlciB3aXRoIG51bGwg
YW5kIGRlc3Ryb3kgdGhlIFN1c3BlbmRlZFBhZ2VQcm94eS4KKworICAgICAgICAoV2ViS2l0OjpT
dXNwZW5kZWRQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvU3VzcGVuZGVkUGFnZVByb3h5Lmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTmF2aWdh
dGlvblN0YXRlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYk5hdmlnYXRpb25TdGF0ZTo6aGFzTmF2
aWdhdGlvbiBjb25zdCk6CisgICAgICAgIEFkZCB1dGlsaXR5IGZ1bmN0aW9uIHRvIHF1ZXJ5IGlm
IGEgbmF2aWdhdGlvbiBpcyBzdGlsbCB2YWxpZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN3YXBUb1dlYlBy
b2Nlc3MpOgorICAgICAgICBVcGRhdGUgbWV0aG9kIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGFz
eW5jaHJvbm91cy4gU29tZSBvZiBpdHMgY29kZSB3YXMgYWxzbyBtb3ZlZCB0bworICAgICAgICBj
b250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoKSBmb3IgY2xhcml0eS4KKworICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkTmF2aWdhdGlvblBvbGljeURlY2lzaW9uKToK
KyAgICAgICAgRGVhbCB3aXRoIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbigp
IG5vdyBiZWluZyBhc3luY2hyb25vdXMuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojpjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MpOgorICAgICAgICBVcGRhdGUgY29kZSBu
b3cgdGhhdCBzd2FwVG9XZWJQcm9jZXNzKCkgaXMgbm8gbG9uZ2VyIGFzeW5jaHJvbm91cy4gU29t
ZSBvZiB0aGUgc3dhcFRvV2ViUHJvY2VzcygpCisgICAgICAgIGNvZGUgd2FzIGFsc28gbW92ZWQg
aGVyZSBmb3IgY2xhcml0eS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZh
aWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2FwKToKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
OgorICAgICAgICBBZGQgbmV3IERpZEZhaWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2FwIElQQyBt
ZXNzYWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICBNYWtlIGFz
eW5jaHJvbm91cy4gSWYgd2UgZGVjaWRlIHRvIHVzZSBhIFN1c3BlbmRlZFBhZ2VQcm94eSdzIHBy
b2Nlc3MsIHRoZW4gY2FsbAorICAgICAgICB3aGVuUmVhZHlUb0NvbnN1bWUoKSBvbiBpdCB0byB3
YWl0IGZvciBpdCB0byBzdXNwZW5kLiBJZiB0aGUgU3VzcGVuZGVkUGFnZVByb3h5CisgICAgICAg
IGZhaWxzIHRvIHN1c3BlbmQgdXNlIGEgbmV3IHByb2Nlc3MgaW5zdGVhZC4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24pOgorICAgICAgICBJZiB3ZSBpZ25vcmUgdGhl
IHBvbGljeSBkZWNpc2lvbiBhbmQgdGhlIGRlY2lzaW9uIHdhcyAiU3VzcGVuZCIsIHNlbmQgdGhl
IERpZEZhaWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2FwCisgICAgICAgIElQQyB0byB0aGUgVUlQ
cm9jZXNzIHNvIHRoYXQgdGhlIFN1c3BlbmRlZFBhZ2VQcm94eSBrbm93cyBhYm91dCBpdC4KKwog
MjAxOC0xMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFNp
bXBsaWZ5IGxvZ2ljIGluc2lkZSBXZWJQYWdlUHJveHk6OmNvbnRpbnVlTmF2aWdhdGlvbkluTmV3
UHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3VzcGVuZGVkUGFnZVByb3h5
LmNwcAppbmRleCAwZmVhOWEyYjkyMGIxNzBkN2NhNzZjYTFmMjVhZDIxMGFhNDY5MGZlLi5jYTVh
ZWVmNDBiNmVjNjk3MzkyMDcxMzIzNjM5MWIxY2Y0MzFjNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1N1c3BlbmRlZFBhZ2VQcm94eS5jcHAKQEAgLTkxLDYgKzkxLDkgQEAgU3Vz
cGVuZGVkUGFnZVByb3h5OjpTdXNwZW5kZWRQYWdlUHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBS
ZWY8V2ViUHJvY2Vzc1Byb3h5PiYKIAogU3VzcGVuZGVkUGFnZVByb3h5Ojp+U3VzcGVuZGVkUGFn
ZVByb3h5KCkKIHsKKyAgICBpZiAobV9yZWFkeVRvVW5zdXNwZW5kSGFuZGxlcikKKyAgICAgICAg
bV9yZWFkeVRvVW5zdXNwZW5kSGFuZGxlcihudWxscHRyKTsKKwogICAgIGlmICghbV9pc1N1c3Bl
bmRlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDYsMjIgKzEwOSwyNSBAQCBTdXNwZW5kZWRQ
YWdlUHJveHk6On5TdXNwZW5kZWRQYWdlUHJveHkoKQogICAgIH0pOwogfQogCi12b2lkIFN1c3Bl
bmRlZFBhZ2VQcm94eTo6dW5zdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgU3VzcGVuZGVkUGFnZVByb3h5Ojp3YWl0VW50aWxSZWFkeVRv
VW5zdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3VzcGVuZGVkUGFnZVByb3h5Kik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKG1fcmVhZHlUb1Vuc3VzcGVuZEhhbmRsZXIp
CisgICAgICAgIG1fcmVhZHlUb1Vuc3VzcGVuZEhhbmRsZXIobnVsbHB0cik7CisKKyAgICBpZiAo
IW1fZmluaXNoZWRTdXNwZW5kaW5nKQorICAgICAgICBtX3JlYWR5VG9VbnN1c3BlbmRIYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcih0aGlzKTsKK30KKwordm9pZCBTdXNwZW5kZWRQYWdlUHJveHk6OnVuc3VzcGVu
ZCgpCiB7CiAgICAgQVNTRVJUKG1faXNTdXNwZW5kZWQpOworICAgIEFTU0VSVChtX2ZpbmlzaGVk
U3VzcGVuZGluZyk7CiAKLSAgICBhdXRvIGRvVW5zdXNwZW5kID0gW3RoaXMsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X3BhZ2UucGFnZUlEKCkpOwotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldElzU3VzcGVuZGVkKGZhbHNlKSwgbV9wYWdlLnBhZ2VJRCgpKTsKLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICB9OwotCi0gICAgaWYgKCFtX2ZpbmlzaGVkU3VzcGVuZGlu
ZykgewotICAgICAgICBBU1NFUlQoIW1fZmluaXNoZWRTdXNwZW5kaW5nSGFuZGxlcik7Ci0gICAg
ICAgIG1fZmluaXNoZWRTdXNwZW5kaW5nSGFuZGxlciA9IFdURk1vdmUoZG9VbnN1c3BlbmQpOwot
ICAgIH0gZWxzZQotICAgICAgICBkb1Vuc3VzcGVuZCgpOworICAgIG1faXNTdXNwZW5kZWQgPSBm
YWxzZTsKKyAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS5wYWdlSUQoKSk7CisgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRJc1N1c3BlbmRlZChmYWxzZSks
IG1fcGFnZS5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgU3VzcGVuZGVkUGFnZVByb3h5OjpkaWRGaW5p
c2hMb2FkKCkKQEAgLTEzNiw4ICsxNDIsMTcgQEAgdm9pZCBTdXNwZW5kZWRQYWdlUHJveHk6OmRp
ZEZpbmlzaExvYWQoKQogICAgIG1fc3VzcGVuc2lvblRva2VuID0gbnVsbHB0cjsKICNlbmRpZgog
Ci0gICAgaWYgKGF1dG8gZmluaXNoZWRTdXNwZW5kaW5nSGFuZGxlciA9IFdURk1vdmUobV9maW5p
c2hlZFN1c3BlbmRpbmdIYW5kbGVyKSkKLSAgICAgICAgZmluaXNoZWRTdXNwZW5kaW5nSGFuZGxl
cigpOworICAgIGlmIChtX3JlYWR5VG9VbnN1c3BlbmRIYW5kbGVyKQorICAgICAgICBtX3JlYWR5
VG9VbnN1c3BlbmRIYW5kbGVyKHRoaXMpOworfQorCit2b2lkIFN1c3BlbmRlZFBhZ2VQcm94eTo6
ZGlkRmFpbFRvU3VzcGVuZCgpCit7CisgICAgLy8gV2UgYXJlIHVudXNhYmxlIGR1ZSB0byBmYWls
dXJlIHRvIHN1c3BlbmQgc28gcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBXZWJQcm9jZXNzUG9v
bC4KKyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkudGFr
ZVN1c3BlbmRlZFBhZ2UoKnRoaXMpOworCisgICAgaWYgKG1fcmVhZHlUb1Vuc3VzcGVuZEhhbmRs
ZXIpCisgICAgICAgIG1fcmVhZHlUb1Vuc3VzcGVuZEhhbmRsZXIobnVsbHB0cik7CiB9CiAKIHZv
aWQgU3VzcGVuZGVkUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImIGRlY29kZXIpCkBAIC0xNDgsNiArMTYzLDEyIEBAIHZvaWQgU3VzcGVu
ZGVkUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImIGRlY29kCiAgICAgICAgIGRpZEZpbmlzaExvYWQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKworICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkRmFpbFRvU3VzcGVuZEFmdGVyUHJvY2Vzc1N3YXA6Om5hbWUoKSkgeworICAg
ICAgICBkaWRGYWlsVG9TdXNwZW5kKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiAh
TE9HX0RJU0FCTEVECiAgICAgaWYgKCFtZXNzYWdlTmFtZXNUb0lnbm9yZVdoaWxlU3VzcGVuZGVk
KCkuY29udGFpbnMoZGVjb2Rlci5tZXNzYWdlTmFtZSgpKSkKICAgICAgICAgTE9HKFByb2Nlc3NT
d2FwcGluZywgIlN1c3BlbmRlZFBhZ2VQcm94eSByZWNlaXZlZCB1bmV4cGVjdGVkIFdlYlBhZ2VQ
cm94eSBtZXNzYWdlICclcyciLCBkZWNvZGVyLm1lc3NhZ2VOYW1lKCkudG9TdHJpbmcoKS5kYXRh
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3VzcGVuZGVkUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuaAppbmRl
eCBmMzFkOGJhMmE1ZWQ3Nzc1ZDUxYTU2OGY1MzQ4ODFlNzk0MWEzYTMzLi4xMTNiZDUxZTc0YmUz
Y2M3Yjc5OTMwY2MyYzI1ZmNmYTk5OTdmODNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9TdXNwZW5kZWRQYWdlUHJveHkuaApAQCAtNDcsNyArNDcsOCBAQCBwdWJsaWM6CiAgICAgdWlu
dDY0X3QgbWFpbkZyYW1lSUQoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZUlEOyB9CiAgICAg
Y29uc3QgU3RyaW5nJiByZWdpc3RyYWJsZURvbWFpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0
cmFibGVEb21haW47IH0KIAotICAgIHZvaWQgdW5zdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgdm9pZCB3YWl0VW50aWxSZWFkeVRvVW5zdXNwZW5kKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3VzcGVuZGVkUGFnZVByb3h5Kik+JiYpOworICAgIHZvaWQgdW5zdXNwZW5k
KCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgY29uc3QgY2hhciogbG9nZ2luZ1N0cmluZygp
IGNvbnN0OwpAQCAtNTUsNiArNTYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBk
aWRGaW5pc2hMb2FkKCk7CisgICAgdm9pZCBkaWRGYWlsVG9TdXNwZW5kKCk7CiAKICAgICAvLyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CkBAIC02OCw3ICs3MCw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgdHJ1ZSB9OwogCiAgICAgYm9vbCBtX2ZpbmlzaGVk
U3VzcGVuZGluZyB7IGZhbHNlIH07Ci0gICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2Zp
bmlzaGVkU3VzcGVuZGluZ0hhbmRsZXI7CisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdXNw
ZW5kZWRQYWdlUHJveHkqKT4gbV9yZWFkeVRvVW5zdXNwZW5kSGFuZGxlcjsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIFByb2Nlc3NUaHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eVRv
a2VuIG1fc3VzcGVuc2lvblRva2VuOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYk5hdmlnYXRpb25TdGF0ZS5oCmluZGV4IGQ5NThlYjRiZGZmNTUyMTA1ZjQ5YjlhMTAzZmI4
N2MxNzc4YjBjZjIuLjllYjlkMjhhZGRkNWI1YjAwNmQ1MGIwOGEzZDc0ZmI2OWQxNjIzOTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5oCkBAIC01NCw2
ICs1NCw3IEBAIHB1YmxpYzoKICAgICBSZWY8QVBJOjpOYXZpZ2F0aW9uPiBjcmVhdGVSZWxvYWRO
YXZpZ2F0aW9uKCk7CiAgICAgUmVmPEFQSTo6TmF2aWdhdGlvbj4gY3JlYXRlTG9hZERhdGFOYXZp
Z2F0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlN1YnN0aXR1dGVEYXRhPiYmKTsKIAorICAgIGJv
b2wgaGFzTmF2aWdhdGlvbih1aW50NjRfdCBuYXZpZ2F0aW9uSUQpIGNvbnN0IHsgcmV0dXJuIG1f
bmF2aWdhdGlvbnMuY29udGFpbnMobmF2aWdhdGlvbklEKTsgfQogICAgIEFQSTo6TmF2aWdhdGlv
biogbmF2aWdhdGlvbih1aW50NjRfdCBuYXZpZ2F0aW9uSUQpOwogICAgIFJlZlB0cjxBUEk6Ok5h
dmlnYXRpb24+IHRha2VOYXZpZ2F0aW9uKHVpbnQ2NF90IG5hdmlnYXRpb25JRCk7CiAgICAgdm9p
ZCBkaWREZXN0cm95TmF2aWdhdGlvbih1aW50NjRfdCBuYXZpZ2F0aW9uSUQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOGU1OTQ2ZmFhOTJlMjcxZjBjOGFj
YTU1ZjkxYzA2NTMyNTI4YmM0Yy4uY2NmYTg2OTQ3ZmUwMWUxZWYwYzNkZGMwYWQ5ODZlZTBiODRh
NGZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03NjMs
NTIgKzc2MywzMCBAQCBib29sIFdlYlBhZ2VQcm94eTo6c3VzcGVuZEN1cnJlbnRQYWdlSWZQb3Nz
aWJsZShBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIHN0ZAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c3dhcFRvV2ViUHJvY2VzcyhSZWY8V2ViUHJvY2Vzc1By
b3h5PiYmIHByb2Nlc3MsIEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlvbiwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2VzcywgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYWdlUHJveHk6
OnN3YXBUb1dlYlByb2Nlc3MoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBzdGQ6OnVu
aXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmIGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZSwg
U2hvdWxkRGVsYXlBdHRhY2hpbmdEcmF3aW5nQXJlYSBzaG91bGREZWxheUF0dGFjaGluZ0RyYXdp
bmdBcmVhKQogewogICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7CiAgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRChQcm9jZXNzLCAiJXAgV2ViUGFnZVByb3h5Ojpzd2FwVG9XZWJQcm9jZXNzXG4iLCB0
aGlzKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IGRlc3RpbmF0
aW9uU3VzcGVuZGVkUGFnZTsKLSAgICBpZiAoYXV0byogYmFja0ZvcndhcmRMaXN0SXRlbSA9IG5h
dmlnYXRpb24udGFyZ2V0SXRlbSgpKSB7Ci0gICAgICAgIGlmIChiYWNrRm9yd2FyZExpc3RJdGVt
LT5zdXNwZW5kZWRQYWdlKCkgJiYgJmJhY2tGb3J3YXJkTGlzdEl0ZW0tPnN1c3BlbmRlZFBhZ2Uo
KS0+cHJvY2VzcygpID09IHByb2Nlc3MucHRyKCkpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
U3VzcGVuZGVkUGFnZSA9IHRoaXMtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLnRha2VTdXNwZW5k
ZWRQYWdlKCpiYWNrRm9yd2FyZExpc3RJdGVtLT5zdXNwZW5kZWRQYWdlKCkpOwotICAgICAgICAg
ICAgQVNTRVJUKGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBhdXRvKiBkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2VQdHIgPSBkZXN0aW5hdGlvblN1c3Bl
bmRlZFBhZ2UuZ2V0KCk7Ci0gICAgYXV0byBkb1N3YXAgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBuYXZpZ2F0aW9uID0gbWFrZVJlZihuYXZpZ2F0aW9uKSwgcHJvY2Vz
cyA9IFdURk1vdmUocHJvY2VzcyksIG1haW5GcmFtZUlESW5QcmV2aW91c1Byb2Nlc3MsIHByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZSA9IFdURk1v
dmUoZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgcHJvY2Vzc0RpZFRlcm1p
bmF0ZShQcm9jZXNzVGVybWluYXRpb25SZWFzb246Ok5hdmlnYXRpb25Td2FwKTsKLQotICAgICAg
ICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKLSAgICAgICAgYm9vbCBkaWRTdXNw
ZW5kUHJldmlvdXNQYWdlID0gc3VzcGVuZEN1cnJlbnRQYWdlSWZQb3NzaWJsZShuYXZpZ2F0aW9u
LCBtYWluRnJhbWVJREluUHJldmlvdXNQcm9jZXNzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50KTsKLSAgICAgICAgbV9wcm9jZXNzLT5yZW1vdmVXZWJQYWdlKCp0aGlzLCBtX3BhZ2VJRCwg
V2ViUHJvY2Vzc1Byb3h5OjpFbmRzVXNpbmdEYXRhU3RvcmU6Ok5vKTsKLQotICAgICAgICBtX3By
b2Nlc3MgPSBXVEZNb3ZlKHByb2Nlc3MpOwotICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOwotCi0g
ICAgICAgIC8vIElmIHdlIGFyZSByZWF0dGFjaGluZyB0byBhIFN1c3BlbmRlZFBhZ2UsIHRoZW4g
dGhlIFdlYlByb2Nlc3MnIFdlYlBhZ2UgYWxyZWFkeSBleGlzdHMgYW5kCi0gICAgICAgIC8vIFdl
YlBhZ2VQcm94eTo6ZGlkQ3JlYXRlTWFpbkZyYW1lKCkgd2lsbCBub3QgYmUgY2FsbGVkIHRvIGlu
aXRpYWxpemUgbV9tYWluRnJhbWUuIEluIHN1Y2gKLSAgICAgICAgLy8gY2FzZSwgd2UgbmVlZCB0
byBpbml0aWFsaXplIG1fbWFpbkZyYW1lIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhlIHRoZSBXZWJQ
cm9jZXNzJyBXZWJQYWdlCi0gICAgICAgIC8vIGFscmVhZHkgZXhpc3RzIGFuZCBhbHJlYWR5IGhh
cyBhIG1haW4gZnJhbWUuCi0gICAgICAgIGlmIChkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UpIHsK
LSAgICAgICAgICAgIEFTU0VSVCghbV9tYWluRnJhbWUpOwotICAgICAgICAgICAgQVNTRVJUKCZk
ZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UtPnByb2Nlc3MoKSA9PSBtX3Byb2Nlc3MucHRyKCkpOwot
ICAgICAgICAgICAgbV9tYWluRnJhbWUgPSBXZWJGcmFtZVByb3h5OjpjcmVhdGUoKnRoaXMsIGRl
c3RpbmF0aW9uU3VzcGVuZGVkUGFnZS0+bWFpbkZyYW1lSUQoKSk7Ci0gICAgICAgICAgICBtX3By
b2Nlc3MtPmZyYW1lQ3JlYXRlZChkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UtPm1haW5GcmFtZUlE
KCksICptX21haW5GcmFtZSk7Ci0gICAgICAgIH0KKyAgICBtX3Byb2Nlc3MgPSBXVEZNb3ZlKHBy
b2Nlc3MpOworICAgIG1faXNWYWxpZCA9IHRydWU7CiAKLSAgICAgICAgbV9wcm9jZXNzLT5hZGRF
eGlzdGluZ1dlYlBhZ2UoKnRoaXMsIG1fcGFnZUlELCBXZWJQcm9jZXNzUHJveHk6OkJlZ2luc1Vz
aW5nRGF0YVN0b3JlOjpObyk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQs
ICp0aGlzKTsKKyAgICAvLyBJZiB3ZSBhcmUgcmVhdHRhY2hpbmcgdG8gYSBTdXNwZW5kZWRQYWdl
LCB0aGVuIHRoZSBXZWJQcm9jZXNzJyBXZWJQYWdlIGFscmVhZHkgZXhpc3RzIGFuZAorICAgIC8v
IFdlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlTWFpbkZyYW1lKCkgd2lsbCBub3QgYmUgY2FsbGVkIHRv
IGluaXRpYWxpemUgbV9tYWluRnJhbWUuIEluIHN1Y2gKKyAgICAvLyBjYXNlLCB3ZSBuZWVkIHRv
IGluaXRpYWxpemUgbV9tYWluRnJhbWUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGUgdGhlIFdlYlBy
b2Nlc3MnIFdlYlBhZ2UKKyAgICAvLyBhbHJlYWR5IGV4aXN0cyBhbmQgYWxyZWFkeSBoYXMgYSBt
YWluIGZyYW1lLgorICAgIGlmIChkZXN0aW5hdGlvblN1c3BlbmRlZFBhZ2UpIHsKKyAgICAgICAg
QVNTRVJUKCFtX21haW5GcmFtZSk7CisgICAgICAgIEFTU0VSVCgmZGVzdGluYXRpb25TdXNwZW5k
ZWRQYWdlLT5wcm9jZXNzKCkgPT0gbV9wcm9jZXNzLnB0cigpKTsKKyAgICAgICAgZGVzdGluYXRp
b25TdXNwZW5kZWRQYWdlLT51bnN1c3BlbmQoKTsKKyAgICAgICAgbV9tYWluRnJhbWUgPSBXZWJG
cmFtZVByb3h5OjpjcmVhdGUoKnRoaXMsIGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZS0+bWFpbkZy
YW1lSUQoKSk7CisgICAgICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGRlc3RpbmF0aW9uU3Vz
cGVuZGVkUGFnZS0+bWFpbkZyYW1lSUQoKSwgKm1fbWFpbkZyYW1lKTsKKyAgICB9CiAKLSAgICAg
ICAgZmluaXNoQXR0YWNoaW5nVG9XZWJQcm9jZXNzKGRpZFN1c3BlbmRQcmV2aW91c1BhZ2UgPyBT
aG91bGREZWxheUF0dGFjaGluZ0RyYXdpbmdBcmVhOjpZZXMgOiBTaG91bGREZWxheUF0dGFjaGlu
Z0RyYXdpbmdBcmVhOjpObyk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRpZFN1c3BlbmRQ
cmV2aW91c1BhZ2UpOwotICAgIH07CisgICAgbV9wcm9jZXNzLT5hZGRFeGlzdGluZ1dlYlBhZ2Uo
KnRoaXMsIG1fcGFnZUlELCBXZWJQcm9jZXNzUHJveHk6OkJlZ2luc1VzaW5nRGF0YVN0b3JlOjpO
byk7CisgICAgbV9wcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOwogCi0gICAgaWYg
KGRlc3RpbmF0aW9uU3VzcGVuZGVkUGFnZVB0cikKLSAgICAgICAgZGVzdGluYXRpb25TdXNwZW5k
ZWRQYWdlUHRyLT51bnN1c3BlbmQoV1RGTW92ZShkb1N3YXApKTsKLSAgICBlbHNlCi0gICAgICAg
IGRvU3dhcCgpOworICAgIGZpbmlzaEF0dGFjaGluZ1RvV2ViUHJvY2VzcyhzaG91bGREZWxheUF0
dGFjaGluZ0RyYXdpbmdBcmVhKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmZpbmlzaEF0dGFj
aGluZ1RvV2ViUHJvY2VzcyhTaG91bGREZWxheUF0dGFjaGluZ0RyYXdpbmdBcmVhIHNob3VsZERl
bGF5QXR0YWNoaW5nRHJhd2luZ0FyZWEpCkBAIC0yNjE4LDIzICsyNTk2LDMwIEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpyZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24g
cG9saWN5QWN0aW9uLCBBCiAgICAgICAgICAgICBjaGFuZ2VXZWJzaXRlRGF0YVN0b3JlKHBvbGlj
aWVzLT53ZWJzaXRlRGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgfQogCi0g
ICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2Vzc0Zvck5hdmlnYXRpb24gPSBwcm9jZXNzKCk7
Ci0gICAgaWYgKHBvbGljeUFjdGlvbiA9PSBQb2xpY3lBY3Rpb246OlVzZSAmJiBmcmFtZS5pc01h
aW5GcmFtZSgpKSB7Ci0gICAgICAgIFN0cmluZyByZWFzb247Ci0gICAgICAgIHByb2Nlc3NGb3JO
YXZpZ2F0aW9uID0gcHJvY2VzcygpLnByb2Nlc3NQb29sKCkucHJvY2Vzc0Zvck5hdmlnYXRpb24o
KnRoaXMsICpuYXZpZ2F0aW9uLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCByZWFzb24p
OwotICAgICAgICBBU1NFUlQoIXJlYXNvbi5pc051bGwoKSk7CisgICAgaWYgKHBvbGljeUFjdGlv
biAhPSBQb2xpY3lBY3Rpb246OlVzZSB8fCAhZnJhbWUuaXNNYWluRnJhbWUoKSB8fCAhbmF2aWdh
dGlvbikgeworICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2
aWdhdGlvbiwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShzZW5kZXIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLnByb2Nlc3NGb3JOYXZpZ2F0
aW9uKCp0aGlzLCAqbmF2aWdhdGlvbiwgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9saWN5QWN0aW9uLCBuYXZpZ2F0
aW9uID0gbWFrZVJlZigqbmF2aWdhdGlvbiksIGRhdGEgPSBXVEZNb3ZlKGRhdGEpLCBzZW5kZXIg
PSBXVEZNb3ZlKHNlbmRlciksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnRdKFJlZjxXZWJQ
cm9jZXNzUHJveHk+JiYgcHJvY2Vzc0Zvck5hdmlnYXRpb24sIFN1c3BlbmRlZFBhZ2VQcm94eSog
ZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikgbXV0YWJsZSB7
CisgICAgICAgIC8vIElmIHRoZSBuYXZpZ2F0aW9uIGhhcyBiZWVuIGRlc3Ryb3llZCwgdGhlbiBu
byBuZWVkIHRvIHByb2NlZWQuCisgICAgICAgIGlmIChpc0Nsb3NlZCgpIHx8ICFuYXZpZ2F0aW9u
U3RhdGUoKS5oYXNOYXZpZ2F0aW9uKG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpKSkgeworICAg
ICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24u
cHRyKCksIFdURk1vdmUoZGF0YSksIFdURk1vdmUoc2VuZGVyKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKwogICAgICAgICBpZiAocHJvY2Vzc0Zvck5hdmlnYXRpb24ucHRyKCkg
IT0gJnByb2Nlc3MoKSkgewogICAgICAgICAgICAgcG9saWN5QWN0aW9uID0gUG9saWN5QWN0aW9u
OjpTdXNwZW5kOwogICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChQcm9jZXNzU3dh
cHBpbmcsICIlcCAtIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
biwgc3dhcHBpbmcgcHJvY2VzcyAlaSB3aXRoIHByb2Nlc3MgJWkgZm9yIG5hdmlnYXRpb24sIHJl
YXNvbjogJXtwdWJsaWN9cyIsIHRoaXMsIHByb2Nlc3NJZGVudGlmaWVyKCksIHByb2Nlc3NGb3JO
YXZpZ2F0aW9uLT5wcm9jZXNzSWRlbnRpZmllcigpLCByZWFzb24udXRmOCgpLmRhdGEoKSk7CiAg
ICAgICAgICAgICBMT0coUHJvY2Vzc1N3YXBwaW5nLCAiKFByb2Nlc3NTd2FwcGluZykgU3dpdGNo
aW5nIGZyb20gcHJvY2VzcyAlaSB0byBuZXcgcHJvY2VzcyAoJWkpIGZvciBuYXZpZ2F0aW9uICUi
IFBSSXU2NCAiICclcyciLCBwcm9jZXNzSWRlbnRpZmllcigpLCBwcm9jZXNzRm9yTmF2aWdhdGlv
bi0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgbmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCksIG5hdmln
YXRpb24tPmxvZ2dpbmdTdHJpbmcoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRChQcm9jZXNzU3dhcHBpbmcsICIlcCAtIFdlYlBhZ2VQcm94eTo6
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwga2VlcCB1c2luZyBwcm9jZXNzICVpIGZv
ciBuYXZpZ2F0aW9uLCByZWFzb246ICV7cHVibGljfXMiLCB0aGlzLCBwcm9jZXNzSWRlbnRpZmll
cigpLCByZWFzb24udXRmOCgpLmRhdGEoKSk7Ci0gICAgfQogCi0gICAgcmVjZWl2ZWRQb2xpY3lE
ZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24sIFdURk1vdmUoZGF0YSksIFdURk1vdmUo
c2VuZGVyKSk7CisgICAgICAgIHJlY2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBu
YXZpZ2F0aW9uLnB0cigpLCBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKHNlbmRlcikpOwogCi0gICAg
aWYgKHByb2Nlc3NGb3JOYXZpZ2F0aW9uLnB0cigpICE9ICZwcm9jZXNzKCkpCi0gICAgICAgIGNv
bnRpbnVlTmF2aWdhdGlvbkluTmV3UHJvY2VzcygqbmF2aWdhdGlvbiwgV1RGTW92ZShwcm9jZXNz
Rm9yTmF2aWdhdGlvbiksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpOworICAgICAgICBp
ZiAocHJvY2Vzc0Zvck5hdmlnYXRpb24ucHRyKCkgIT0gJnByb2Nlc3MoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlTmF2aWdhdGlvbkluTmV3UHJvY2VzcyhuYXZpZ2F0aW9uLCBkZXN0aW5hdGlvblN1
c3BlbmRlZFBhZ2UgPyBwcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS50YWtlU3VzcGVuZGVkUGFnZSgq
ZGVzdGluYXRpb25TdXNwZW5kZWRQYWdlKSA6IG51bGxwdHIsIFdURk1vdmUocHJvY2Vzc0Zvck5h
dmlnYXRpb24pLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24oUG9saWN5QWN0aW9uIGFj
dGlvbiwgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVQ
b2xpY2llc0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzLCBSZWY8UG9saWN5RGVjaXNpb25TZW5kZXI+
JiYgc2VuZGVyKQpAQCAtMjY2OSw3ICsyNjU0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY2Vp
dmVkUG9saWN5RGVjaXNpb24oUG9saWN5QWN0aW9uIGFjdGlvbiwgQVBJOjpOYXZpZ2F0aW9uKgog
ICAgIHNlbmRlci0+c2VuZChhY3Rpb24sIG5hdmlnYXRpb24gPyBuYXZpZ2F0aW9uLT5uYXZpZ2F0
aW9uSUQoKSA6IDAsIGRvd25sb2FkSUQsIFdURk1vdmUod2Vic2l0ZVBvbGljaWVzKSk7CiB9CiAK
LXZvaWQgV2ViUGFnZVByb3h5Ojpjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoQVBJOjpO
YXZpZ2F0aW9uJiBuYXZpZ2F0aW9uLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlc3MsIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCkK
K3ZvaWQgV2ViUGFnZVByb3h5Ojpjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoQVBJOjpO
YXZpZ2F0aW9uJiBuYXZpZ2F0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5
PiYmIHN1c3BlbmRlZFBhZ2VQcm94eSwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQp
CiB7CiAgICAgTE9HKExvYWRpbmcsICJDb250aW51aW5nIG5hdmlnYXRpb24gJSIgUFJJdTY0ICIg
JyVzJyBpbiBhIG5ldyB3ZWIgcHJvY2VzcyIsIG5hdmlnYXRpb24ubmF2aWdhdGlvbklEKCksIG5h
dmlnYXRpb24ubG9nZ2luZ1N0cmluZygpKTsKIApAQCAtMjY3OSw3MyArMjY2NCw4OCBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6Y29udGludWVOYXZpZ2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdh
dGlvbiYgbmF2aWdhdGlvbiwgUgogCiAgICAgQVNTRVJUKG1fcHJvY2Vzcy5wdHIoKSAhPSBwcm9j
ZXNzLnB0cigpKTsKIAotICAgIHN3YXBUb1dlYlByb2Nlc3MoV1RGTW92ZShwcm9jZXNzKSwgbmF2
aWdhdGlvbiwgbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2VzcywgcHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbmF2aWdh
dGlvbiA9IG1ha2VSZWYobmF2aWdhdGlvbiksIHByZXZpb3VzUHJvY2VzcyA9IFdURk1vdmUocHJl
dmlvdXNQcm9jZXNzKSwgbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2VzcywgbWFpbkZyYW1lVVJM
ID0gV1RGTW92ZShtYWluRnJhbWVVUkwpXShib29sIGRpZFN1c3BlbmRQcmV2aW91c1BhZ2UpIG11
dGFibGUgewotICAgICAgICBpZiAoYXV0byogaXRlbSA9IG5hdmlnYXRpb24tPnRhcmdldEl0ZW0o
KSkgewotICAgICAgICAgICAgTE9HKExvYWRpbmcsICJXZWJQYWdlUHJveHkgJXAgY29udGludWVO
YXZpZ2F0aW9uSW5OZXdQcm9jZXNzIHRvIGJhY2sgaXRlbSBVUkwgJXMiLCB0aGlzLCBpdGVtLT51
cmwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBwcm9jZXNzRGlkVGVybWluYXRlKFByb2Nlc3NUZXJt
aW5hdGlvblJlYXNvbjo6TmF2aWdhdGlvblN3YXApOwogCi0gICAgICAgICAgICBhdXRvIHRyYW5z
YWN0aW9uID0gbV9wYWdlTG9hZFN0YXRlLnRyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICBtX3Bh
Z2VMb2FkU3RhdGUuc2V0UGVuZGluZ0FQSVJlcXVlc3RVUkwodHJhbnNhY3Rpb24sIGl0ZW0tPnVy
bCgpKTsKKyAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKKyAgICBib29sIGRp
ZFN1c3BlbmRQcmV2aW91c1BhZ2UgPSBzdXNwZW5kQ3VycmVudFBhZ2VJZlBvc3NpYmxlKG5hdmln
YXRpb24sIG1haW5GcmFtZUlESW5QcmV2aW91c1Byb2Nlc3MsIHByb2Nlc3NTd2FwUmVxdWVzdGVk
QnlDbGllbnQpOworICAgIG1fcHJvY2Vzcy0+cmVtb3ZlV2ViUGFnZSgqdGhpcywgbV9wYWdlSUQs
IFdlYlByb2Nlc3NQcm94eTo6RW5kc1VzaW5nRGF0YVN0b3JlOjpObyk7CiAKLSAgICAgICAgICAg
IGF1dG8gaXRlbVN0YXRlcyA9IG1fYmFja0ZvcndhcmRMaXN0LT5maWx0ZXJlZEl0ZW1TdGF0ZXMo
W3RoaXMsIHRhcmdldEl0ZW0gPSBpdGVtXShXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBpdGVtLnN1c3BlbmRlZFBhZ2UoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoJnBhZ2UtPnByb2Nlc3MoKSA9PSBtX3Byb2Nlc3Mu
cHRyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAmaXRlbSAhPSB0YXJnZXRJdGVtOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlVwZGF0ZUJhY2tGb3J3YXJkTGlzdEZvclJlYXR0YWNoKFdURk1vdmUoaXRlbVN0YXRlcykp
LCBtX3BhZ2VJRCk7Ci0gICAgICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCksIGl0ZW0t
Pml0ZW1JRCgpLCAqbmF2aWdhdGlvbi0+YmFja0ZvcndhcmRGcmFtZUxvYWRUeXBlKCksIFNob3Vs
ZFRyZWF0QXNDb250aW51aW5nTG9hZDo6WWVzKSwgbV9wYWdlSUQpOwotICAgICAgICAgICAgbV9w
cm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKKyAgICBzd2FwVG9XZWJQcm9j
ZXNzKFdURk1vdmUocHJvY2VzcyksIFdURk1vdmUoc3VzcGVuZGVkUGFnZVByb3h5KSwgZGlkU3Vz
cGVuZFByZXZpb3VzUGFnZSA/IFNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWE6OlllcyA6
IFNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWE6Ok5vKTsKIAotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9CisgICAgaWYgKGF1dG8qIGl0ZW0gPSBuYXZpZ2F0aW9uLnRhcmdldEl0
ZW0oKSkgeworICAgICAgICBMT0coTG9hZGluZywgIldlYlBhZ2VQcm94eSAlcCBjb250aW51ZU5h
dmlnYXRpb25Jbk5ld1Byb2Nlc3MgdG8gYmFjayBpdGVtIFVSTCAlcyIsIHRoaXMsIGl0ZW0tPnVy
bCgpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGlmIChtX2JhY2tGb3J3YXJkTGlzdC0+Y3Vy
cmVudEl0ZW0oKSAmJiAobmF2aWdhdGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCgpID09IExvY2tC
YWNrRm9yd2FyZExpc3Q6OlllcyB8fCBuYXZpZ2F0aW9uLT5sb2NrSGlzdG9yeSgpID09IExvY2tI
aXN0b3J5OjpZZXMpKSB7Ci0gICAgICAgICAgICAvLyBJZiBXZWJDb3JlIGlzIHN1cHBvc2VkIHRv
IGxvY2sgdGhlIGhpc3RvcnkgZm9yIHRoaXMgbG9hZCwgdGhlbiB0aGUgbmV3IHByb2Nlc3MgbmVl
ZHMgdG8ga25vdyBhYm91dCB0aGUgY3VycmVudCBoaXN0b3J5IGl0ZW0gc28gaXQgY2FuIHVwZGF0
ZQotICAgICAgICAgICAgLy8gaXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuCi0gICAg
ICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEN1cnJlbnRIaXN0
b3J5SXRlbUZvclJlYXR0YWNoKG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpLT5pdGVt
U3RhdGUoKSksIG1fcGFnZUlEKTsKLSAgICAgICAgfQorICAgICAgICBhdXRvIHRyYW5zYWN0aW9u
ID0gbV9wYWdlTG9hZFN0YXRlLnRyYW5zYWN0aW9uKCk7CisgICAgICAgIG1fcGFnZUxvYWRTdGF0
ZS5zZXRQZW5kaW5nQVBJUmVxdWVzdFVSTCh0cmFuc2FjdGlvbiwgaXRlbS0+dXJsKCkpOwogCi0g
ICAgICAgIC8vIEZJWE1FOiBXb3JrIG91dCB0aW1pbmcgb2YgcmVzcG9uZGluZyB3aXRoIHRoZSBs
YXN0IHBvbGljeSBkZWxlZ2F0ZSwgZXRjCi0gICAgICAgIEFTU0VSVCghbmF2aWdhdGlvbi0+Y3Vy
cmVudFJlcXVlc3QoKS5pc0VtcHR5KCkpOwotICAgICAgICBpZiAoYXV0byYgc3Vic3RpdHV0ZURh
dGEgPSBuYXZpZ2F0aW9uLT5zdWJzdGl0dXRlRGF0YSgpKQotICAgICAgICAgICAgbG9hZERhdGFX
aXRoTmF2aWdhdGlvbihuYXZpZ2F0aW9uLCB7IHN1YnN0aXR1dGVEYXRhLT5jb250ZW50LmRhdGEo
KSwgc3Vic3RpdHV0ZURhdGEtPmNvbnRlbnQuc2l6ZSgpIH0sIHN1YnN0aXR1dGVEYXRhLT5NSU1F
VHlwZSwgc3Vic3RpdHV0ZURhdGEtPmVuY29kaW5nLCBzdWJzdGl0dXRlRGF0YS0+YmFzZVVSTCwg
c3Vic3RpdHV0ZURhdGEtPnVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbG9hZFJlcXVlc3RXaXRoTmF2aWdhdGlvbihuYXZpZ2F0aW9uLCBSZXNvdXJjZVJlcXVlc3Qg
eyBuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpIH0sIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRl
cm5hbFVSTHNQb2xpY3k6OlNob3VsZEFsbG93RXh0ZXJuYWxTY2hlbWVzLCBudWxscHRyLCBTaG91
bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Olllcyk7CisgICAgICAgIGF1dG8gaXRlbVN0YXRlcyA9
IG1fYmFja0ZvcndhcmRMaXN0LT5maWx0ZXJlZEl0ZW1TdGF0ZXMoW3RoaXMsIHRhcmdldEl0ZW0g
PSBpdGVtXShXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKSB7CisgICAgICAgICAgICBpZiAo
YXV0byogcGFnZSA9IGl0ZW0uc3VzcGVuZGVkUGFnZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCZwYWdlLT5wcm9jZXNzKCkgPT0gbV9wcm9jZXNzLnB0cigpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJml0ZW0g
IT0gdGFyZ2V0SXRlbTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6VXBkYXRlQmFja0ZvcndhcmRMaXN0Rm9yUmVhdHRhY2goV1RGTW92ZShp
dGVtU3RhdGVzKSksIG1fcGFnZUlEKTsKKyAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHb1RvQmFja0ZvcndhcmRJdGVtKG5hdmlnYXRpb24ubmF2aWdhdGlvbklEKCks
IGl0ZW0tPml0ZW1JRCgpLCAqbmF2aWdhdGlvbi5iYWNrRm9yd2FyZEZyYW1lTG9hZFR5cGUoKSwg
U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXMpLCBtX3BhZ2VJRCk7CisgICAgICAgIG1f
cHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAKLSAgICAgICAgQVNTRVJU
KCFtX21haW5GcmFtZSk7Ci0gICAgICAgIG1fbWFpbkZyYW1lQ3JlYXRpb25IYW5kbGVyID0gW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBuYXZpZ2F0aW9uSUQg
PSBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgcmVxdWVzdCA9ICBuYXZpZ2F0aW9uLT5jdXJy
ZW50UmVxdWVzdCgpLCBtYWluRnJhbWVVUkwsIGlzU2VydmVyUmVkaXJlY3QgPSBuYXZpZ2F0aW9u
LT5jdXJyZW50UmVxdWVzdElzUmVkaXJlY3QoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIEFT
U0VSVChtX21haW5GcmFtZSk7Ci0gICAgICAgICAgICAvLyBUaGlzIG5hdmlnYXRpb24gd2FzIGRl
c3Ryb3llZCBzbyBubyBuZWVkIHRvIG5vdGlmeSBvZiByZWRpcmVjdC4KLSAgICAgICAgICAgIGlm
ICghbmF2aWdhdGlvblN0YXRlKCkubmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgbWFpbiBmcmFtZSdzIGNvbW1pdHRlZCBVUkwgYXMgc29tZSBjbGllbnRzIG1h
eSByZWx5IG9uIGl0IHVudGlsIHRoZSBuZXh0IGxvYWQgaXMgY29tbWl0dGVkLgotICAgICAgICAg
ICAgbV9tYWluRnJhbWUtPmZyYW1lTG9hZFN0YXRlKCkuc2V0VVJMKG1haW5GcmFtZVVSTCk7Cisg
ICAgaWYgKG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpICYmIChuYXZpZ2F0aW9uLmxv
Y2tCYWNrRm9yd2FyZExpc3QoKSA9PSBMb2NrQmFja0ZvcndhcmRMaXN0OjpZZXMgfHwgbmF2aWdh
dGlvbi5sb2NrSGlzdG9yeSgpID09IExvY2tIaXN0b3J5OjpZZXMpKSB7CisgICAgICAgIC8vIElm
IFdlYkNvcmUgaXMgc3VwcG9zZWQgdG8gbG9jayB0aGUgaGlzdG9yeSBmb3IgdGhpcyBsb2FkLCB0
aGVuIHRoZSBuZXcgcHJvY2VzcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBjdXJyZW50IGhpc3Rv
cnkgaXRlbSBzbyBpdCBjYW4gdXBkYXRlCisgICAgICAgIC8vIGl0IGluc3RlYWQgb2YgY3JlYXRp
bmcgYSBuZXcgb25lLgorICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldEN1cnJlbnRIaXN0b3J5SXRlbUZvclJlYXR0YWNoKG1fYmFja0ZvcndhcmRMaXN0LT5jdXJy
ZW50SXRlbSgpLT5pdGVtU3RhdGUoKSksIG1fcGFnZUlEKTsKKyAgICB9CiAKLSAgICAgICAgICAg
IC8vIE5vcm1hbGx5LCBub3RpZmljYXRpb24gb2YgYSBzZXJ2ZXIgcmVkaXJlY3QgY29tZXMgZnJv
bSB0aGUgV2ViQ29udGVudCBwcm9jZXNzLgotICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHByb2Nl
c3Mgc3dhcHBpbmcgaW4gcmVzcG9uc2UgdG8gYSBzZXJ2ZXIgcmVkaXJlY3QgdGhlbiB0aGF0IG5v
dGlmaWNhdGlvbiB3aWxsIG5vdCBjb21lIGZyb20gdGhlIG5ldyBXZWJDb250ZW50IHByb2Nlc3Mu
Ci0gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0aGUgVUlQcm9jZXNzIHN5bnRo
ZXNpemUgdGhlIHJlZGlyZWN0IG5vdGlmaWNhdGlvbiBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS4K
LSAgICAgICAgICAgIGlmIChpc1NlcnZlclJlZGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgbV9t
YWluRnJhbWUtPmZyYW1lTG9hZFN0YXRlKCkuZGlkU3RhcnRQcm92aXNpb25hbExvYWQocmVxdWVz
dC51cmwoKSk7Ci0gICAgICAgICAgICAgICAgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUobV9tYWluRnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvbklE
LCBXVEZNb3ZlKHJlcXVlc3QpLCB7IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9OworICAg
IC8vIEZJWE1FOiBXb3JrIG91dCB0aW1pbmcgb2YgcmVzcG9uZGluZyB3aXRoIHRoZSBsYXN0IHBv
bGljeSBkZWxlZ2F0ZSwgZXRjCisgICAgQVNTRVJUKCFuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0
KCkuaXNFbXB0eSgpKTsKKyAgICBpZiAoYXV0byYgc3Vic3RpdHV0ZURhdGEgPSBuYXZpZ2F0aW9u
LnN1YnN0aXR1dGVEYXRhKCkpCisgICAgICAgIGxvYWREYXRhV2l0aE5hdmlnYXRpb24obmF2aWdh
dGlvbiwgeyBzdWJzdGl0dXRlRGF0YS0+Y29udGVudC5kYXRhKCksIHN1YnN0aXR1dGVEYXRhLT5j
b250ZW50LnNpemUoKSB9LCBzdWJzdGl0dXRlRGF0YS0+TUlNRVR5cGUsIHN1YnN0aXR1dGVEYXRh
LT5lbmNvZGluZywgc3Vic3RpdHV0ZURhdGEtPmJhc2VVUkwsIHN1YnN0aXR1dGVEYXRhLT51c2Vy
RGF0YS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9u
KG5hdmlnYXRpb24sIFJlc291cmNlUmVxdWVzdCB7IG5hdmlnYXRpb24uY3VycmVudFJlcXVlc3Qo
KSB9LCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvd0V4
dGVybmFsU2NoZW1lcywgbnVsbHB0ciwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXMp
OworCisgICAgQVNTRVJUKCFtX21haW5GcmFtZSk7CisgICAgbV9tYWluRnJhbWVDcmVhdGlvbkhh
bmRsZXIgPSBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIG5hdmlnYXRpb25J
RCA9IG5hdmlnYXRpb24ubmF2aWdhdGlvbklEKCksIHJlcXVlc3QgPSAgbmF2aWdhdGlvbi5jdXJy
ZW50UmVxdWVzdCgpLCBtYWluRnJhbWVVUkwsIGlzU2VydmVyUmVkaXJlY3QgPSBuYXZpZ2F0aW9u
LmN1cnJlbnRSZXF1ZXN0SXNSZWRpcmVjdCgpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIXdl
YWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGJvb2wgaXNJbml0aWFsTmF2
aWdhdGlvbkluTmV3V2luZG93ID0gb3BlbmVkQnlET00oKSAmJiAhaGFzQ29tbWl0dGVkQW55UHJv
dmlzaW9uYWxMb2FkcygpOwotICAgICAgICBpZiAoIW1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5j
b25maWd1cmF0aW9uKCkucHJvY2Vzc1N3YXBzT25XaW5kb3dPcGVuV2l0aE9wZW5lcigpIHx8ICFp
c0luaXRpYWxOYXZpZ2F0aW9uSW5OZXdXaW5kb3cgfHwgIW1haW5GcmFtZUlESW5QcmV2aW91c1By
b2Nlc3MpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHdheSB3ZSdsbCBiZSBhYmxlIHRv
IHJldHVybiB0byB0aGUgcGFnZSBpbiB0aGUgcHJldmlvdXMgcGFnZSBzbyBjbG9zZSBpdC4KLSAg
ICAgICAgICAgIGlmICghZGlkU3VzcGVuZFByZXZpb3VzUGFnZSkKLSAgICAgICAgICAgICAgICBw
cmV2aW91c1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCksIG1fcGFnZUlE
KTsKKyAgICAgICAgQVNTRVJUKG1fbWFpbkZyYW1lKTsKKyAgICAgICAgLy8gVGhpcyBuYXZpZ2F0
aW9uIHdhcyBkZXN0cm95ZWQgc28gbm8gbmVlZCB0byBub3RpZnkgb2YgcmVkaXJlY3QuCisgICAg
ICAgIGlmICghbmF2aWdhdGlvblN0YXRlKCkubmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpKQogICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFJlc3RvcmUgdGhlIG1haW4gZnJhbWUncyBj
b21taXR0ZWQgVVJMIGFzIHNvbWUgY2xpZW50cyBtYXkgcmVseSBvbiBpdCB1bnRpbCB0aGUgbmV4
dCBsb2FkIGlzIGNvbW1pdHRlZC4KKyAgICAgICAgbV9tYWluRnJhbWUtPmZyYW1lTG9hZFN0YXRl
KCkuc2V0VVJMKG1haW5GcmFtZVVSTCk7CisKKyAgICAgICAgLy8gTm9ybWFsbHksIG5vdGlmaWNh
dGlvbiBvZiBhIHNlcnZlciByZWRpcmVjdCBjb21lcyBmcm9tIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MuCisgICAgICAgIC8vIElmIHdlIGFyZSBwcm9jZXNzIHN3YXBwaW5nIGluIHJlc3BvbnNlIHRv
IGEgc2VydmVyIHJlZGlyZWN0IHRoZW4gdGhhdCBub3RpZmljYXRpb24gd2lsbCBub3QgY29tZSBm
cm9tIHRoZSBuZXcgV2ViQ29udGVudCBwcm9jZXNzLgorICAgICAgICAvLyBJbiB0aGlzIGNhc2Ug
d2UgaGF2ZSB0aGUgVUlQcm9jZXNzIHN5bnRoZXNpemUgdGhlIHJlZGlyZWN0IG5vdGlmaWNhdGlv
biBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS4KKyAgICAgICAgaWYgKGlzU2VydmVyUmVkaXJlY3Qp
IHsKKyAgICAgICAgICAgIG1fbWFpbkZyYW1lLT5mcmFtZUxvYWRTdGF0ZSgpLmRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkKHJlcXVlc3QudXJsKCkpOworICAgICAgICAgICAgZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9tYWluRnJhbWUtPmZyYW1lSUQo
KSwgbmF2aWdhdGlvbklELCBXVEZNb3ZlKHJlcXVlc3QpLCB7IH0pOwogICAgICAgICB9CisgICAg
fTsKIAotICAgICAgICBtX21haW5GcmFtZVdpbmRvd0NyZWF0aW9uSGFuZGxlciA9IFt0aGlzLCBw
cmV2aW91c1Byb2Nlc3MgPSBXVEZNb3ZlKHByZXZpb3VzUHJvY2VzcyksIG1haW5GcmFtZUlESW5Q
cmV2aW91c1Byb2Nlc3MgPSAqbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2Vzc10oY29uc3QgR2xv
YmFsV2luZG93SWRlbnRpZmllciYgd2luZG93SWRlbnRpZmllcikgewotICAgICAgICAgICAgQVNT
RVJUKG1fbWFpbkZyYW1lKTsKLSAgICAgICAgICAgIEdsb2JhbEZyYW1lSWRlbnRpZmllciBuYXZp
Z2F0ZWRGcmFtZUlkZW50aWZpZXJJbk5ld1Byb2Nlc3MgeyBwYWdlSUQoKSwgbV9tYWluRnJhbWUt
PmZyYW1lSUQoKSB9OwotICAgICAgICAgICAgcHJldmlvdXNQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpGcmFtZUJlY2FtZVJlbW90ZShtYWluRnJhbWVJREluUHJldmlvdXNQcm9jZXNz
LCBuYXZpZ2F0ZWRGcmFtZUlkZW50aWZpZXJJbk5ld1Byb2Nlc3MsIHdpbmRvd0lkZW50aWZpZXIp
LCBwYWdlSUQoKSk7Ci0gICAgICAgIH07Ci0gICAgfSk7CisgICAgYm9vbCBpc0luaXRpYWxOYXZp
Z2F0aW9uSW5OZXdXaW5kb3cgPSBvcGVuZWRCeURPTSgpICYmICFoYXNDb21taXR0ZWRBbnlQcm92
aXNpb25hbExvYWRzKCk7CisgICAgaWYgKCFtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuY29uZmln
dXJhdGlvbigpLnByb2Nlc3NTd2Fwc09uV2luZG93T3BlbldpdGhPcGVuZXIoKSB8fCAhaXNJbml0
aWFsTmF2aWdhdGlvbkluTmV3V2luZG93IHx8ICFtYWluRnJhbWVJREluUHJldmlvdXNQcm9jZXNz
KSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIHdheSB3ZSdsbCBiZSBhYmxlIHRvIHJldHVybiB0
byB0aGUgcGFnZSBpbiB0aGUgcHJldmlvdXMgcGFnZSBzbyBjbG9zZSBpdC4KKyAgICAgICAgaWYg
KCFkaWRTdXNwZW5kUHJldmlvdXNQYWdlKQorICAgICAgICAgICAgcHJldmlvdXNQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpLCBtX3BhZ2VJRCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX21haW5GcmFtZVdpbmRvd0NyZWF0aW9uSGFuZGxlciA9IFt0aGlz
LCBwcmV2aW91c1Byb2Nlc3MgPSBXVEZNb3ZlKHByZXZpb3VzUHJvY2VzcyksIG1haW5GcmFtZUlE
SW5QcmV2aW91c1Byb2Nlc3MgPSAqbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2Vzc10oY29uc3Qg
R2xvYmFsV2luZG93SWRlbnRpZmllciYgd2luZG93SWRlbnRpZmllcikgeworICAgICAgICBBU1NF
UlQobV9tYWluRnJhbWUpOworICAgICAgICBHbG9iYWxGcmFtZUlkZW50aWZpZXIgbmF2aWdhdGVk
RnJhbWVJZGVudGlmaWVySW5OZXdQcm9jZXNzIHsgcGFnZUlEKCksIG1fbWFpbkZyYW1lLT5mcmFt
ZUlEKCkgfTsKKyAgICAgICAgcHJldmlvdXNQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpGcmFtZUJlY2FtZVJlbW90ZShtYWluRnJhbWVJREluUHJldmlvdXNQcm9jZXNzLCBuYXZpZ2F0
ZWRGcmFtZUlkZW50aWZpZXJJbk5ld1Byb2Nlc3MsIHdpbmRvd0lkZW50aWZpZXIpLCBwYWdlSUQo
KSk7CisgICAgfTsKK30KKworTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZEZhaWxUb1N1c3BlbmRBZnRlclByb2Nlc3NTd2FwKCkKK3sKKyAgICAvLyBPbmx5IHRo
ZSBTdXNwZW5kZWRQYWdlUHJveHkgc2hvdWxkIGJlIGdldHRpbmcgdGhpcyBjYWxsLgorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VXNlckFnZW50
KFN0cmluZyYmIHVzZXJBZ2VudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
aW5kZXggNzM0ZDIxMTcxOWU5NGJmZjk1YTk2MWYzZjBkNjMwOWNjYzNlZmExNS4uNWVkNjA3MGI5
YjMyZjg4YzJmNDliY2U0ZjNjMTM5ZmM1NTZlNDU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTE1NTksNyArMTU1OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRDYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHMoYm9vbCBjYW5TaG9ydENpcmN1
aXRIb3Jpem9udGFsV2hlZWxFdmVudHMpIHsgbV9jYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hl
ZWxFdmVudHMgPSBjYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHM7IH0KIAogICAg
IHZvaWQgcmVhdHRhY2hUb1dlYlByb2Nlc3MoKTsKLSAgICB2b2lkIHN3YXBUb1dlYlByb2Nlc3Mo
UmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgQVBJOjpOYXZpZ2F0aW9uJiwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gbWFpbkZyYW1lSURJblByZXZpb3VzUHJvY2VzcywgUHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAgdm9pZCBz
d2FwVG9XZWJQcm9jZXNzKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIHN0ZDo6dW5pcXVlX3B0cjxT
dXNwZW5kZWRQYWdlUHJveHk+JiYsIFNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0FyZWEpOwor
ICAgIHZvaWQgZGlkRmFpbFRvU3VzcGVuZEFmdGVyUHJvY2Vzc1N3YXAoKTsKIAogICAgIHZvaWQg
ZmluaXNoQXR0YWNoaW5nVG9XZWJQcm9jZXNzKFNob3VsZERlbGF5QXR0YWNoaW5nRHJhd2luZ0Fy
ZWEgPSBTaG91bGREZWxheUF0dGFjaGluZ0RyYXdpbmdBcmVhOjpObyk7CiAKQEAgLTE4NzgsNyAr
MTg3OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlcG9ydFBhZ2VMb2FkUmVzdWx0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImID0geyB9KTsKIAotICAgIHZvaWQgY29udGludWVOYXZp
Z2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlvbiYsIFJlZjxXZWJQcm9jZXNzUHJveHk+
JiYsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpOworICAgIHZvaWQgY29udGludWVOYXZp
Z2F0aW9uSW5OZXdQcm9jZXNzKEFQSTo6TmF2aWdhdGlvbiYsIHN0ZDo6dW5pcXVlX3B0cjxTdXNw
ZW5kZWRQYWdlUHJveHk+JiYsIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQpOwogCiAgICAgdm9pZCBzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKGJvb2wp
OwogICAgIHZvaWQgdXBkYXRlRm9udEF0dHJpYnV0ZXNBZnRlckVkaXRvclN0YXRlQ2hhbmdlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
aW5kZXggNWU3MDU2YjYwMTFjZTZmYTNlMzQ3MTYxYTljYjc4ZWJkNWJmNDU2NC4uMmExOGE3MDI1
N2JjNGU3MzY5YTU5MjAzNGI3Y2M5MmE4Y2YwZWQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtNTA0LDYgKzUwNCw4IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgUmVxdWVzdFBvaW50ZXJVbmxvY2soKQogI2Vu
ZGlmCiAKKyAgICBEaWRGYWlsVG9TdXNwZW5kQWZ0ZXJQcm9jZXNzU3dhcCgpCisKICAgICBJbWFn
ZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkKFdlYkNvcmU6OkludFNpemUgbmV3U2l6ZSkKIAog
ICAgIFVzZUZpeGVkTGF5b3V0RGlkQ2hhbmdlKGJvb2wgdXNlRml4ZWRMYXlvdXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggMmMzNzFhM2JmY2ExZDkz
ZjdjN2ZlMzA1ZmZiOGMyOTlkYzQ1NWIwNy4uZGQ5MDcwZWMwMjA1NmQ1ZGU5ODkxNWI3NDU4ZjE3
MTI5ZDgwYzQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cApAQCAtMjExMiwzMiArMjExMiwzMiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVQcm9j
ZXNzRnJvbU9yaWdpbkNhY2hlU2V0KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICAgICAg
bV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlKHJlZ2lzdHJhYmxl
RG9tYWluKTsKIH0KIAotUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnByb2Nl
c3NGb3JOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0aW9u
JiBuYXZpZ2F0aW9uLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQsIFN0cmluZyYgcmVhc29uKQotewotICAgIGF1dG8gcHJvY2VzcyA9IHBy
b2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwocGFnZSwgbmF2aWdhdGlvbiwgcHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCwgcmVhc29uKTsKLQotICAgIC8vIFdlIGFyZSBwcm9jZXNzLXN3YXBw
aW5nIHNvIGF1dG9tYXRpYyBwcm9jZXNzIHByZXdhcm1pbmcgd291bGQgYmUgYmVuZWZpY2lhbCBp
ZiB0aGUgY2xpZW50IGhhcyBub3QgZXhwbGljaXRseSBlbmFibGVkIC8gZGlzYWJsZWQgaXQuCi0g
ICAgYm9vbCBkb2luZ0FuQXV0b21hdGljUHJvY2Vzc1N3YXAgPSBwcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vICYmIHByb2Nlc3Mu
cHRyKCkgIT0gJnBhZ2UucHJvY2VzcygpOwotICAgIGlmIChkb2luZ0FuQXV0b21hdGljUHJvY2Vz
c1N3YXAgJiYgIWNvbmZpZ3VyYXRpb24oKS53YXNBdXRvbWF0aWNQcm9jZXNzV2FybWluZ1NldEJ5
Q2xpZW50KCkgJiYgIWNvbmZpZ3VyYXRpb24oKS5jbGllbnRXb3VsZEJlbmVmaXRGcm9tQXV0b21h
dGljUHJvY2Vzc1ByZXdhcm1pbmcoKSkgewotICAgICAgICBSRUxFQVNFX0xPRyhQZXJmb3JtYW5j
ZUxvZ2dpbmcsICJBdXRvbWF0aWNhbGx5IHR1cm5pbmcgb24gcHJvY2VzcyBwcmV3YXJtaW5nIGJl
Y2F1c2UgdGhlIGNsaWVudCB3b3VsZCBiZW5lZml0IGZyb20gaXQiKTsKLSAgICAgICAgY29uZmln
dXJhdGlvbigpLnNldENsaWVudFdvdWxkQmVuZWZpdEZyb21BdXRvbWF0aWNQcm9jZXNzUHJld2Fy
bWluZyh0cnVlKTsKLSAgICB9Cit2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2aWdh
dGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlv
biwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIFN1c3Bl
bmRlZFBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIHByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwocGFnZSwgbmF2aWdhdGlvbiwgcHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgW3RoaXMsIHBhZ2UgPSBtYWtlUmVmUHRyKHBhZ2UpLCBu
YXZpZ2F0aW9uID0gbWFrZVJlZihuYXZpZ2F0aW9uKSwgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVm
PFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBTdXNwZW5kZWRQYWdlUHJveHkqIHN1c3BlbmRl
ZFBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gV2UgYXJl
IHByb2Nlc3Mtc3dhcHBpbmcgc28gYXV0b21hdGljIHByb2Nlc3MgcHJld2FybWluZyB3b3VsZCBi
ZSBiZW5lZmljaWFsIGlmIHRoZSBjbGllbnQgaGFzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgLyBk
aXNhYmxlZCBpdC4KKyAgICAgICAgYm9vbCBkb2luZ0FuQXV0b21hdGljUHJvY2Vzc1N3YXAgPSBw
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQ6Ok5vICYmIHByb2Nlc3MucHRyKCkgIT0gJnBhZ2UtPnByb2Nlc3MoKTsKKyAgICAgICAgaWYg
KGRvaW5nQW5BdXRvbWF0aWNQcm9jZXNzU3dhcCAmJiAhY29uZmlndXJhdGlvbigpLndhc0F1dG9t
YXRpY1Byb2Nlc3NXYXJtaW5nU2V0QnlDbGllbnQoKSAmJiAhY29uZmlndXJhdGlvbigpLmNsaWVu
dFdvdWxkQmVuZWZpdEZyb21BdXRvbWF0aWNQcm9jZXNzUHJld2FybWluZygpKSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0xPRyhQZXJmb3JtYW5jZUxvZ2dpbmcsICJBdXRvbWF0aWNhbGx5IHR1cm5p
bmcgb24gcHJvY2VzcyBwcmV3YXJtaW5nIGJlY2F1c2UgdGhlIGNsaWVudCB3b3VsZCBiZW5lZml0
IGZyb20gaXQiKTsKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24oKS5zZXRDbGllbnRXb3VsZEJl
bmVmaXRGcm9tQXV0b21hdGljUHJvY2Vzc1ByZXdhcm1pbmcodHJ1ZSk7CisgICAgICAgIH0KIAot
ICAgIGlmIChtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c0tlZXBBbmRSZXVzZVN3YXBwZWRQcm9jZXNz
ZXMoKSAmJiBwcm9jZXNzLnB0cigpICE9ICZwYWdlLnByb2Nlc3MoKSkgewotICAgICAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIldBUk5JTkc6IFRoZSBvcHRpb24g
dG8gYWx3YXlzIGtlZXAgc3dhcHBlZCB3ZWIgcHJvY2Vzc2VzIGFsaXZlIGlzIGFjdGl2ZS4gVGhp
cyBpcyBtZWFudCBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG9ubHkuIik7Ci0gICAgICAgIH0p
OworICAgICAgICBpZiAobV9jb25maWd1cmF0aW9uLT5hbHdheXNLZWVwQW5kUmV1c2VTd2FwcGVk
UHJvY2Vzc2VzKCkgJiYgcHJvY2Vzcy5wdHIoKSAhPSAmcGFnZS0+cHJvY2VzcygpKSB7CisgICAg
ICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgICAgICAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygi
V0FSTklORzogVGhlIG9wdGlvbiB0byBhbHdheXMga2VlcCBzd2FwcGVkIHdlYiBwcm9jZXNzZXMg
YWxpdmUgaXMgYWN0aXZlLiBUaGlzIGlzIG1lYW50IGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcg
b25seS4iKTsKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgIGFkZFByb2Nlc3NUb09yaWdpbkNh
Y2hlU2V0KHBhZ2UpOworICAgICAgICAgICAgYWRkUHJvY2Vzc1RvT3JpZ2luQ2FjaGVTZXQoKnBh
Z2UpOwogCi0gICAgICAgIExPRyhQcm9jZXNzU3dhcHBpbmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBO
YXZpZ2F0aW5nIGZyb20gJXMgdG8gJXMsIGtlZXBpbmcgYXJvdW5kIG9sZCBwcm9jZXNzLiBOb3cg
aG9sZGluZyBvbiB0byBvbGQgcHJvY2Vzc2VzIGZvciAldSBvcmlnaW5zLiIsIHBhZ2UuY3VycmVu
dFVSTCgpLnV0ZjgoKS5kYXRhKCksIG5hdmlnYXRpb24uY3VycmVudFJlcXVlc3QoKS51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURv
bWFpbi5zaXplKCkpOwotICAgIH0KKyAgICAgICAgICAgIExPRyhQcm9jZXNzU3dhcHBpbmcsICIo
UHJvY2Vzc1N3YXBwaW5nKSBOYXZpZ2F0aW5nIGZyb20gJXMgdG8gJXMsIGtlZXBpbmcgYXJvdW5k
IG9sZCBwcm9jZXNzLiBOb3cgaG9sZGluZyBvbiB0byBvbGQgcHJvY2Vzc2VzIGZvciAldSBvcmln
aW5zLiIsIHBhZ2UtPmN1cnJlbnRVUkwoKS51dGY4KCkuZGF0YSgpLCBuYXZpZ2F0aW9uLT5jdXJy
ZW50UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fc3dhcHBlZFByb2Nl
c3Nlc1BlclJlZ2lzdHJhYmxlRG9tYWluLnNpemUoKSk7CisgICAgICAgIH0KIAotICAgIHJldHVy
biBwcm9jZXNzOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHByb2Nlc3MpLCBz
dXNwZW5kZWRQYWdlLCByZWFzb24pOworICAgIH0pOwogfQogCi1SZWY8V2ViUHJvY2Vzc1Byb3h5
PiBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb25JbnRlcm5hbChXZWJQYWdlUHJv
eHkmIHBhZ2UsIGNvbnN0IEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlvbiwgUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBTdHJpbmcmIHJl
YXNvbikKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwo
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQ
YWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvJiB0YXJnZXRVUkwgPSBuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0KCkudXJsKCk7CiAKQEAg
LTIxNTAsNDQgKzIxNTAsMzcgQEAgUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6
OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwoV2ViUGFnZVByb3h5JgogICAgICAgICByZXR1
cm4gY3JlYXRlTmV3V2ViUHJvY2VzcyhwYWdlLndlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgfTsK
IAotICAgIGlmIChwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQ6OlllcykgewotICAgICAgICByZWFzb24gPSAiUHJvY2VzcyBzd2FwIHdh
cyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCJfczsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld1By
b2Nlc3MoKTsKLSAgICB9CisgICAgaWYgKHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPT0g
UHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6WWVzKQorICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoY3JlYXRlTmV3UHJvY2VzcygpLCBudWxscHRyLCAiUHJvY2VzcyBzd2FwIHdh
cyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCJfcyk7CiAKLSAgICBpZiAoIW1fY29uZmlndXJhdGlv
bi0+cHJvY2Vzc1N3YXBzT25OYXZpZ2F0aW9uKCkpIHsKLSAgICAgICAgcmVhc29uID0gIkZlYXR1
cmUgaXMgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybiBwYWdlLnByb2Nlc3MoKTsKLSAgICB9
CisgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24tPnByb2Nlc3NTd2Fwc09uTmF2aWdhdGlvbigpKQor
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIocGFnZS5wcm9jZXNzKCksIG51bGxwdHIs
ICJGZWF0dXJlIGlzIGRpc2FibGVkIl9zKTsKIAotICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9u
KSB7Ci0gICAgICAgIHJlYXNvbiA9ICJBbiBhdXRvbWF0aW9uIHNlc3Npb24gaXMgYWN0aXZlIl9z
OwotICAgICAgICByZXR1cm4gcGFnZS5wcm9jZXNzKCk7Ci0gICAgfQorICAgIGlmIChtX2F1dG9t
YXRpb25TZXNzaW9uKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIocGFnZS5wcm9j
ZXNzKCksIG51bGxwdHIsICJBbiBhdXRvbWF0aW9uIHNlc3Npb24gaXMgYWN0aXZlIl9zKTsKIAog
ICAgIGlmICghcGFnZS5wcm9jZXNzKCkuaGFzQ29tbWl0dGVkQW55UHJvdmlzaW9uYWxMb2Fkcygp
KSB7Ci0gICAgICAgIHJlYXNvbiA9ICJQcm9jZXNzIGhhcyBub3QgeWV0IGNvbW1pdHRlZCBhbnkg
cHJvdmlzaW9uYWwgbG9hZHMiX3M7CiAgICAgICAgIHRyeVByZXdhcm1XaXRoRG9tYWluSW5mb3Jt
YXRpb24ocGFnZS5wcm9jZXNzKCksIHRhcmdldFVSTCk7Ci0gICAgICAgIHJldHVybiBwYWdlLnBy
b2Nlc3MoKTsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHBhZ2UucHJvY2Vzcygp
LCBudWxscHRyLCAiUHJvY2VzcyBoYXMgbm90IHlldCBjb21taXR0ZWQgYW55IHByb3Zpc2lvbmFs
IGxvYWRzIl9zKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgcHJv
Y2VzcyBzd2FwIHdoZW4gYSB3aW5kb3cgaGFzIGJlZW4gb3BlbmVkIHZpYSB3aW5kb3cub3Blbigp
IHdpdGhvdXQgJ25vb3BlbmVyJy4KICAgICAvLyBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgb3BlbmVy
IGhhcyBhIGhhbmRsZSB0byB0aGUgV2luZG93UHJveHkuCi0gICAgaWYgKG5hdmlnYXRpb24ub3Bl
bmVkQnlET01XaXRoT3BlbmVyKCkgJiYgIW1fY29uZmlndXJhdGlvbi0+cHJvY2Vzc1N3YXBzT25X
aW5kb3dPcGVuV2l0aE9wZW5lcigpKSB7Ci0gICAgICAgIHJlYXNvbiA9ICJCcm93c2luZyBjb250
ZXh0IGJlZW4gb3BlbmVkIGJ5IERPTSB3aXRob3V0ICdub29wZW5lciciX3M7Ci0gICAgICAgIHJl
dHVybiBwYWdlLnByb2Nlc3MoKTsKLSAgICB9CisgICAgaWYgKG5hdmlnYXRpb24ub3BlbmVkQnlE
T01XaXRoT3BlbmVyKCkgJiYgIW1fY29uZmlndXJhdGlvbi0+cHJvY2Vzc1N3YXBzT25XaW5kb3dP
cGVuV2l0aE9wZW5lcigpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIocGFnZS5w
cm9jZXNzKCksIG51bGxwdHIsICJCcm93c2luZyBjb250ZXh0IGJlZW4gb3BlbmVkIGJ5IERPTSB3
aXRob3V0ICdub29wZW5lciciX3MpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0
IHByb2Nlc3Mgc3dhcCB3aGVuIGEgd2luZG93IGhhcyBvcGVuZWQgb3RoZXIgd2luZG93cyB2aWEg
d2luZG93Lm9wZW4uCi0gICAgaWYgKG5hdmlnYXRpb24uaGFzT3BlbmVkRnJhbWVzKCkpIHsKLSAg
ICAgICAgcmVhc29uID0gIkJyb3dzaW5nIGNvbnRleHQgaGFzIG9wZW5lZCBvdGhlciB3aW5kb3dz
Il9zOwotICAgICAgICByZXR1cm4gcGFnZS5wcm9jZXNzKCk7Ci0gICAgfQorICAgIGlmIChuYXZp
Z2F0aW9uLmhhc09wZW5lZEZyYW1lcygpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIocGFnZS5wcm9jZXNzKCksIG51bGxwdHIsICJCcm93c2luZyBjb250ZXh0IGhhcyBvcGVuZWQg
b3RoZXIgd2luZG93cyJfcyk7CiAKICAgICBpZiAoYXV0byogYmFja0ZvcndhcmRMaXN0SXRlbSA9
IG5hdmlnYXRpb24udGFyZ2V0SXRlbSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBzdXNwZW5kZWRQ
YWdlID0gYmFja0ZvcndhcmRMaXN0SXRlbS0+c3VzcGVuZGVkUGFnZSgpKSB7Ci0gICAgICAgICAg
ICByZWFzb24gPSAiVXNpbmcgdGFyZ2V0IGJhY2svZm9yd2FyZCBpdGVtJ3MgcHJvY2VzcyJfczsK
LSAgICAgICAgICAgIHJldHVybiBzdXNwZW5kZWRQYWdlLT5wcm9jZXNzKCk7CisgICAgICAgICAg
ICByZXR1cm4gc3VzcGVuZGVkUGFnZS0+d2FpdFVudGlsUmVhZHlUb1Vuc3VzcGVuZChbY3JlYXRl
TmV3UHJvY2VzcyA9IFdURk1vdmUoY3JlYXRlTmV3UHJvY2VzcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN1c3BlbmRlZFBhZ2VQcm94eSogc3VzcGVu
ZGVkUGFnZSkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdXNwZW5kZWRQYWdlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoY3JlYXRlTmV3UHJv
Y2VzcygpLCBudWxscHRyLCAiVXNpbmcgbmV3IHByb2Nlc3MgYmVjYXVzZSB0YXJnZXQgYmFjay9m
b3J3YXJkIGl0ZW0ncyBwcm9jZXNzIGZhaWxlZCB0byBzdXNwZW5kIl9zKTsKKyAgICAgICAgICAg
ICAgICBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzID0gc3VzcGVuZGVkUGFnZS0+cHJvY2Vz
cygpOworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocHJvY2Vzcyks
IHN1c3BlbmRlZFBhZ2UsICJVc2luZyB0YXJnZXQgYmFjay9mb3J3YXJkIGl0ZW0ncyBwcm9jZXNz
Il9zKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgdGhlIHRh
cmdldCBiYWNrL2ZvcndhcmQgaXRlbSBhbmQgdGhlIGN1cnJlbnQgYmFjay9mb3J3YXJkIGl0ZW0g
b3JpZ2luYXRlZApAQCAtMjE5NiwxNyArMjE4OSwxMyBAQCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb25JbnRlcm5hbChXZWJQYWdlUHJveHkm
CiAgICAgICAgICAgICBhdXRvIHVpUHJvY2Vzc0lkZW50aWZpZXIgPSBQcm9jZXNzOjppZGVudGlm
aWVyKCk7CiAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIHNlc3Npb24gcmVzdG9yZSwgdGhlIGl0
ZW0ncyBwcm9jZXNzIGlkZW50aWZpZXIgaXMgdGhlIFVJUHJvY2VzcycgaWRlbnRpZmllciwgaW4g
d2hpY2ggY2FzZSB3ZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGNoZWNrCiAgICAgICAgICAgICAv
LyBvciB3ZSdkIG5ldmVyIHN3YXAgYWZ0ZXIgYSBzZXNzaW9uIHJlc3RvcmUuCi0gICAgICAgICAg
ICBpZiAoZnJvbUl0ZW0tPml0ZW1JRCgpLnByb2Nlc3NJZGVudGlmaWVyID09IGJhY2tGb3J3YXJk
TGlzdEl0ZW0tPml0ZW1JRCgpLnByb2Nlc3NJZGVudGlmaWVyICYmIGJhY2tGb3J3YXJkTGlzdEl0
ZW0tPml0ZW1JRCgpLnByb2Nlc3NJZGVudGlmaWVyICE9IHVpUHJvY2Vzc0lkZW50aWZpZXIpIHsK
LSAgICAgICAgICAgICAgICByZWFzb24gPSAiU291cmNlIGFuZCB0YXJnZXQgYmFjay9mb3J3YXJk
IGl0ZW0gb3JpZ2luYXRlZCBpbiB0aGUgc2FtZSBwcm9jZXNzIl9zOwotICAgICAgICAgICAgICAg
IHJldHVybiBwYWdlLnByb2Nlc3MoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm
cm9tSXRlbS0+aXRlbUlEKCkucHJvY2Vzc0lkZW50aWZpZXIgPT0gYmFja0ZvcndhcmRMaXN0SXRl
bS0+aXRlbUlEKCkucHJvY2Vzc0lkZW50aWZpZXIgJiYgYmFja0ZvcndhcmRMaXN0SXRlbS0+aXRl
bUlEKCkucHJvY2Vzc0lkZW50aWZpZXIgIT0gdWlQcm9jZXNzSWRlbnRpZmllcikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIocGFnZS5wcm9jZXNzKCksIG51bGxwdHIs
ICJTb3VyY2UgYW5kIHRhcmdldCBiYWNrL2ZvcndhcmQgaXRlbSBvcmlnaW5hdGVkIGluIHRoZSBz
YW1lIHByb2Nlc3MiX3MpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5hdmlnYXRpb24u
dHJlYXRBc1NhbWVPcmlnaW5OYXZpZ2F0aW9uKCkpIHsKLSAgICAgICAgcmVhc29uID0gIlRoZSB0
cmVhdEFzU2FtZU9yaWdpbk5hdmlnYXRpb24gZmxhZyBpcyBzZXQiX3M7Ci0gICAgICAgIHJldHVy
biBwYWdlLnByb2Nlc3MoKTsKLSAgICB9CisgICAgaWYgKG5hdmlnYXRpb24udHJlYXRBc1NhbWVP
cmlnaW5OYXZpZ2F0aW9uKCkpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihwYWdl
LnByb2Nlc3MoKSwgbnVsbHB0ciwgIlRoZSB0cmVhdEFzU2FtZU9yaWdpbk5hdmlnYXRpb24gZmxh
ZyBpcyBzZXQiX3MpOwogCiAgICAgYm9vbCBpc0luaXRpYWxMb2FkSW5OZXdXaW5kb3dPcGVuZWRC
eURPTSA9IHBhZ2Uub3BlbmVkQnlET00oKSAmJiAhcGFnZS5oYXNDb21taXR0ZWRBbnlQcm92aXNp
b25hbExvYWRzKCk7CiAgICAgVVJMIHNvdXJjZVVSTDsKQEAgLTIyMjAsMTEgKzIyMDksMTAgQEAg
UmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9u
SW50ZXJuYWwoV2ViUGFnZVByb3h5JgogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3dhcHBp
bmcsICJVc2luZyByZWxhdGVkIHBhZ2UgJXAncyBVUkwgYXMgc291cmNlIFVSTCBmb3IgcHJvY2Vz
cyBzd2FwIGRlY2lzaW9uIiwgcGFnZS5jb25maWd1cmF0aW9uKCkucmVsYXRlZFBhZ2UoKSk7CiAg
ICAgfQogCi0gICAgaWYgKCFzb3VyY2VVUkwuaXNWYWxpZCgpIHx8ICF0YXJnZXRVUkwuaXNWYWxp
ZCgpIHx8IHNvdXJjZVVSTC5pc0VtcHR5KCkgfHwgc291cmNlVVJMLnByb3RvY29sSXNBYm91dCgp
IHx8IHJlZ2lzdHJhYmxlRG9tYWluc0FyZUVxdWFsKHNvdXJjZVVSTCwgdGFyZ2V0VVJMKSkgewot
ICAgICAgICByZWFzb24gPSAiTmF2aWdhdGlvbiBpcyBzYW1lLXNpdGUiX3M7Ci0gICAgICAgIHJl
dHVybiBwYWdlLnByb2Nlc3MoKTsKLSAgICB9Ci0gICAgcmVhc29uID0gIk5hdmlnYXRpb24gaXMg
Y3Jvc3Mtc2l0ZSJfczsKKyAgICBpZiAoIXNvdXJjZVVSTC5pc1ZhbGlkKCkgfHwgIXRhcmdldFVS
TC5pc1ZhbGlkKCkgfHwgc291cmNlVVJMLmlzRW1wdHkoKSB8fCBzb3VyY2VVUkwucHJvdG9jb2xJ
c0Fib3V0KCkgfHwgcmVnaXN0cmFibGVEb21haW5zQXJlRXF1YWwoc291cmNlVVJMLCB0YXJnZXRV
UkwpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIocGFnZS5wcm9jZXNzKCksIG51
bGxwdHIsICJOYXZpZ2F0aW9uIGlzIHNhbWUtc2l0ZSJfcyk7CisKKyAgICBTdHJpbmcgcmVhc29u
ID0gIk5hdmlnYXRpb24gaXMgY3Jvc3Mtc2l0ZSJfczsKICAgICAKICAgICBhdXRvIHJlZ2lzdHJh
YmxlRG9tYWluID0gdG9SZWdpc3RyYWJsZURvbWFpbih0YXJnZXRVUkwpOwogICAgIGlmIChtX2Nv
bmZpZ3VyYXRpb24tPmFsd2F5c0tlZXBBbmRSZXVzZVN3YXBwZWRQcm9jZXNzZXMoKSkgewpAQCAt
MjI0Miw3ICsyMjMwLDcgQEAgUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwoV2ViUGFnZVByb3h5JgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gJnN1c3BlbmRlZFBhZ2UtPnBhZ2UoKSA9PSAmcGFnZSAmJiAmc3VzcGVuZGVk
UGFnZS0+cHJvY2VzcygpID09IHByb2Nlc3M7CiAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZVJlZigqcHJvY2Vzcyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1ha2VSZWYoKnByb2Nlc3MpLCBudWxscHRyLCByZWFzb24p
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjI2MiwxMCArMjI1MCwxMCBA
QCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRp
b25JbnRlcm5hbChXZWJQYWdlUHJveHkmCiAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vic2l0ZURh
dGFTdG9yZSgpICE9ICZwYWdlLndlYnNpdGVEYXRhU3RvcmUoKSkKICAgICAgICAgICAgIHByb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUocGFnZS53
ZWJzaXRlRGF0YVN0b3JlKCkucGFyYW1ldGVycygpKSwgMCk7CiAKLSAgICAgICAgcmV0dXJuIHBy
b2Nlc3M7CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHByb2Nlc3Mp
LCBudWxscHRyLCByZWFzb24pOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVOZXdQcm9jZXNz
KCk7CisgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGNyZWF0ZU5ld1Byb2Nlc3MoKSwgbnVs
bHB0ciwgcmVhc29uKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWRkU3VzcGVuZGVkUGFn
ZShzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmIHN1c3BlbmRlZFBhZ2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCAwM2RhMzg5MGZmMmVh
ZmQ0MWQ3NmYyY2VmOTViMmU5MGQwN2JlMGJhLi40ZmQ3OTI0MTc0ODk5NWY1MzA2MDAwMGI2NDE2
ZTNmYzQxNDBhYmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgK
QEAgLTQ0NSw3ICs0NDUsNyBAQCBwdWJsaWM6CiAgICAgQmFja2dyb3VuZFdlYlByb2Nlc3NUb2tl
biBiYWNrZ3JvdW5kV2ViUHJvY2Vzc1Rva2VuKCkgY29uc3QgeyByZXR1cm4gQmFja2dyb3VuZFdl
YlByb2Nlc3NUb2tlbihtX2JhY2tncm91bmRXZWJQcm9jZXNzQ291bnRlci5jb3VudCgpKTsgfQog
I2VuZGlmCiAKLSAgICBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzRm9yTmF2aWdhdGlvbihX
ZWJQYWdlUHJveHkmLCBjb25zdCBBUEk6Ok5hdmlnYXRpb24mLCBQcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50LCBTdHJpbmcmIHJlYXNvbik7CisgICAgdm9pZCBwcm9jZXNzRm9yTmF2aWdhdGlv
bihXZWJQYWdlUHJveHkmLCBjb25zdCBBUEk6Ok5hdmlnYXRpb24mLCBQcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxXZWJQcm9jZXNzUHJveHk+
JiYsIFN1c3BlbmRlZFBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpPiYmKTsKIAogICAgIC8vIFN1
c3BlbmRlZFBhZ2VQcm94eSBtYW5hZ2VtZW50LgogICAgIHZvaWQgYWRkU3VzcGVuZGVkUGFnZShz
dGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmKTsKQEAgLTQ3OSw3ICs0NzksNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGVDb250
ZXh0KCk7CiAKLSAgICBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzRm9yTmF2aWdhdGlvbklu
dGVybmFsKFdlYlBhZ2VQcm94eSYsIGNvbnN0IEFQSTo6TmF2aWdhdGlvbiYsIFByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQsIFN0cmluZyYgcmVhc29uKTsKKyAgICB2b2lkIHByb2Nlc3NGb3JO
YXZpZ2F0aW9uSW50ZXJuYWwoV2ViUGFnZVByb3h5JiwgY29uc3QgQVBJOjpOYXZpZ2F0aW9uJiwg
UHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8
V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKT4m
Jik7CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiB0cnlUYWtlUHJld2FybWVkUHJvY2Vz
cyhXZWJzaXRlRGF0YVN0b3JlJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcAppbmRleCA3YjE1YzY1NzEyMTc5NjQwYWY0OTdmMmYxOWM3MTk5NmI3
MTM0NTI4Li45YWUzNzhiMjg4YzkzMDAzM2M4ZDkzNThjMWM4OGVmNWRlNzk2MmU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC0yNTUsMTcg
KzI1NSwxMSBAQCB2b2lkIFdlYkZyYW1lOjppbnZhbGlkYXRlUG9saWN5TGlzdGVuZXIoKQogCiB2
b2lkIFdlYkZyYW1lOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0X3QgbGlzdGVuZXJJ
RCwgUG9saWN5QWN0aW9uIGFjdGlvbiwgdWludDY0X3QgbmF2aWdhdGlvbklELCBEb3dubG9hZElE
IGRvd25sb2FkSUQsIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRl
UG9saWNpZXMpCiB7Ci0gICAgaWYgKCFtX2NvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX3BvbGljeUxpc3RlbmVySUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChs
aXN0ZW5lcklEICE9IG1fcG9saWN5TGlzdGVuZXJJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX3BvbGljeUZ1bmN0aW9uKQorICAgIGlmICghbV9jb3JlRnJhbWUgfHwgIW1fcG9saWN5
TGlzdGVuZXJJRCB8fCBsaXN0ZW5lcklEICE9IG1fcG9saWN5TGlzdGVuZXJJRCB8fCAhbV9wb2xp
Y3lGdW5jdGlvbikgeworICAgICAgICBpZiAoYWN0aW9uID09IFBvbGljeUFjdGlvbjo6U3VzcGVu
ZCkKKyAgICAgICAgICAgIHBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRG
YWlsVG9TdXNwZW5kQWZ0ZXJQcm9jZXNzU3dhcCgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24gPSBXVEZNb3ZlKG1fcG9saWN5RnVu
Y3Rpb24pOwogICAgIGJvb2wgZm9yTmF2aWdhdGlvbkFjdGlvbiA9IG1fcG9saWN5RnVuY3Rpb25G
b3JOYXZpZ2F0aW9uQWN0aW9uID09IEZvck5hdmlnYXRpb25BY3Rpb246OlllczsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMWNkNGM5Mzg2NzIx
NzY1ZDYwZGRjYjYyMGIyNTYxNTU2NDg2NmM4Li4xMjliYzA0M2RiYjlmOTlmMTQ3ZTIwZDFmYmUy
NGI0NzU3ZjRiMDVkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMTItMDYgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBQU09OIGxvZ2ljIGdldHMgY29uZnVzZWQgYnkgY29uY3Vy
cmVudCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uIHJlcXVlc3RzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI0ODIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ2NDcwMTQ1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBBUEkgdGVzdCBjb3ZlcmFnZS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisK
IDIwMTgtMTItMDUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAg
ICAgIHdlYmtpdHB5OiBDbGVhbi11cCBhcHBsZV9hZGRpdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uLm1tCmluZGV4IGEyYjZhZjIzYmY4ZTFiOWI2NjFlYjJmN2M4ZDEyNjMzZDQ5ZjA0
OWMuLmRiMDkwOWVlNjcyYTRhMmM4Mzc1OTI5MmYzMzVhZTNhN2U1NzBjMjMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtMjQ3Myw2ICsyNDczLDc2IEBAIFRFU1QoUHJvY2Vz
c1N3YXAsIFByb2Nlc3NSZXVzZWVUTERQbHVzMikKICAgICBFWFBFQ1RfRVEocGlkMSwgcGlkMyk7
CiB9CiAKK1RFU1QoUHJvY2Vzc1N3YXAsIENvbmN1cnJlbnRIaXN0b3J5TmF2aWdhdGlvbnMpCit7
CisgICAgYXV0byBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgcHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmdldCgpLnByb2Nlc3NTd2Fwc09uTmF2aWdhdGlvbiA9IFlFUzsKKyAgICBhdXRvIHBy
b2Nlc3NQb29sID0gYWRvcHROUyhbW1dLUHJvY2Vzc1Bvb2wgYWxsb2NdIF9pbml0V2l0aENvbmZp
Z3VyYXRpb246cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBhdXRvIHdl
YlZpZXdDb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxs
b2NdIGluaXRdKTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24gc2V0UHJvY2Vzc1Bvb2w6cHJv
Y2Vzc1Bvb2wuZ2V0KCldOworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tQU09OU2NoZW1l
IGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJQU09OIl07CisKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tQU09OTmF2aWdh
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
cHNvbjovL3d3dy53ZWJraXQub3JnL21haW4uaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKyAgICBkb25lID0gZmFsc2U7CisKKyAgICBhdXRvIHdlYmtpdFBJ
RCA9IFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl07CisKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAicHNvbjovL3d3dy5hcHBsZS5jb20vbWFpbi5odG1sIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworICAgIGRvbmUgPSBmYWxzZTsKKworICAgIGF1dG8gYXBwbGVQ
SUQgPSBbd2ViVmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdOworCisgICAgRVhQRUNUX05FKHdl
YmtpdFBJRCwgYXBwbGVQSUQpOworCisgICAgW3dlYlZpZXcgZ29CYWNrXTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIGRvbmUgPSBmYWxzZTsKKworICAgIEVYUEVD
VF9FUSh3ZWJraXRQSUQsIFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0pOworICAgIEVY
UEVDVF9XS19TVFJFUShAInBzb246Ly93d3cud2Via2l0Lm9yZy9tYWluLmh0bWwiLCBbW3dlYlZp
ZXcgVVJMXSBhYnNvbHV0ZVN0cmluZ10pOworCisgICAgYXV0byogYmFja0ZvcndhcmRMaXN0ID0g
W3dlYlZpZXcgYmFja0ZvcndhcmRMaXN0XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJwc29uOi8v
d3d3LndlYmtpdC5vcmcvbWFpbi5odG1sIiwgW2JhY2tGb3J3YXJkTGlzdC5jdXJyZW50SXRlbS5V
UkwgYWJzb2x1dGVTdHJpbmddKTsKKyAgICBFWFBFQ1RfVFJVRSghYmFja0ZvcndhcmRMaXN0LmJh
Y2tJdGVtKTsKKyAgICBFWFBFQ1RfRVEoMVUsIGJhY2tGb3J3YXJkTGlzdC5mb3J3YXJkTGlzdC5j
b3VudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKEAicHNvbjovL3d3dy5hcHBsZS5jb20vbWFpbi5o
dG1sIiwgW2JhY2tGb3J3YXJkTGlzdC5mb3J3YXJkSXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsK
KworICAgIC8vIENvbmN1cnJlbnQgcmVxdWVzdHMgdG8gZ28gZm9yd2FyZCwgd2hpY2ggcHJvY2Vz
cyBzd2Fwcy4KKyAgICBbd2ViVmlldyBnb0ZvcndhcmRdOworICAgIFt3ZWJWaWV3IGdvRm9yd2Fy
ZF07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIGRvbmUgPSBm
YWxzZTsKKworICAgIEVYUEVDVF9FUShhcHBsZVBJRCwgW3dlYlZpZXcgX3dlYlByb2Nlc3NJZGVu
dGlmaWVyXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKEAicHNvbjovL3d3dy5hcHBsZS5jb20vbWFp
bi5odG1sIiwgW1t3ZWJWaWV3IFVSTF0gYWJzb2x1dGVTdHJpbmddKTsKKworICAgIEVYUEVDVF9X
S19TVFJFUShAInBzb246Ly93d3cuYXBwbGUuY29tL21haW4uaHRtbCIsIFtiYWNrRm9yd2FyZExp
c3QuY3VycmVudEl0ZW0uVVJMIGFic29sdXRlU3RyaW5nXSk7CisgICAgRVhQRUNUX1RSVUUoIWJh
Y2tGb3J3YXJkTGlzdC5mb3J3YXJkSXRlbSk7CisgICAgRVhQRUNUX0VRKDFVLCBiYWNrRm9yd2Fy
ZExpc3QuYmFja0xpc3QuY291bnQpOworICAgIEVYUEVDVF9XS19TVFJFUShAInBzb246Ly93d3cu
d2Via2l0Lm9yZy9tYWluLmh0bWwiLCBbYmFja0ZvcndhcmRMaXN0LmJhY2tJdGVtLlVSTCBhYnNv
bHV0ZVN0cmluZ10pOworCisgICAgW3dlYlZpZXcgZ29CYWNrXTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworICAgIGRvbmUgPSBmYWxzZTsKKworICAgIEVYUEVDVF9FUSh3
ZWJraXRQSUQsIFt3ZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl0pOworICAgIEVYUEVDVF9X
S19TVFJFUShAInBzb246Ly93d3cud2Via2l0Lm9yZy9tYWluLmh0bWwiLCBbW3dlYlZpZXcgVVJM
XSBhYnNvbHV0ZVN0cmluZ10pOworCisgICAgRVhQRUNUX1dLX1NUUkVRKEAicHNvbjovL3d3dy53
ZWJraXQub3JnL21haW4uaHRtbCIsIFtiYWNrRm9yd2FyZExpc3QuY3VycmVudEl0ZW0uVVJMIGFi
c29sdXRlU3RyaW5nXSk7CisgICAgRVhQRUNUX1RSVUUoIWJhY2tGb3J3YXJkTGlzdC5iYWNrSXRl
bSk7CisgICAgRVhQRUNUX0VRKDFVLCBiYWNrRm9yd2FyZExpc3QuZm9yd2FyZExpc3QuY291bnQp
OworICAgIEVYUEVDVF9XS19TVFJFUShAInBzb246Ly93d3cuYXBwbGUuY29tL21haW4uaHRtbCIs
IFtiYWNrRm9yd2FyZExpc3QuZm9yd2FyZEl0ZW0uVVJMIGFic29sdXRlU3RyaW5nXSk7Cit9CisK
IFRFU1QoUHJvY2Vzc1N3YXAsIE5hdmlnYXRlVG9JbnZhbGlkVVJMKQogewogICAgIGF1dG8gcHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19XS1Byb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>