<?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>214261</bug_id>
          
          <creation_ts>2020-07-13 10:06:45 -0700</creation_ts>
          <short_desc>Remove live ranges from Editor.h and EditorClient.h</short_desc>
          <delta_ts>2020-07-21 21:45:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1671061</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 10:06:45 -0700</bug_when>
    <thetext>Remove live ranges from Editor.h and EditorClient.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671087</commentid>
    <comment_count>1</comment_count>
      <attachid>404157</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 10:56:01 -0700</bug_when>
    <thetext>Created attachment 404157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671130</commentid>
    <comment_count>2</comment_count>
      <attachid>404169</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 13:11:01 -0700</bug_when>
    <thetext>Created attachment 404169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671144</commentid>
    <comment_count>3</comment_count>
      <attachid>404172</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 14:07:45 -0700</bug_when>
    <thetext>Created attachment 404172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671190</commentid>
    <comment_count>4</comment_count>
      <attachid>404184</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 15:15:51 -0700</bug_when>
    <thetext>Created attachment 404184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671258</commentid>
    <comment_count>5</comment_count>
      <attachid>404201</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 18:53:15 -0700</bug_when>
    <thetext>Created attachment 404201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672908</commentid>
    <comment_count>6</comment_count>
      <attachid>404675</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-19 10:32:07 -0700</bug_when>
    <thetext>Created attachment 404675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672948</commentid>
    <comment_count>7</comment_count>
      <attachid>404680</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-19 13:06:22 -0700</bug_when>
    <thetext>Created attachment 404680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672958</commentid>
    <comment_count>8</comment_count>
      <attachid>404685</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-19 14:19:14 -0700</bug_when>
    <thetext>Created attachment 404685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672966</commentid>
    <comment_count>9</comment_count>
      <attachid>404689</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-19 15:30:30 -0700</bug_when>
    <thetext>Created attachment 404689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672972</commentid>
    <comment_count>10</comment_count>
      <attachid>404691</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-19 18:03:11 -0700</bug_when>
    <thetext>Created attachment 404691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673293</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-20 16:03:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/65852960&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673584</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-21 13:01:02 -0700</bug_when>
    <thetext>Looking for a reviewer. This passes all the tests; totally clean green EWS results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673648</commentid>
    <comment_count>13</comment_count>
      <attachid>404691</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-21 15:44:42 -0700</bug_when>
    <thetext>Comment on attachment 404691
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:309
&gt; +            if (createLiveRange(*misspellingRange)-&gt;compareBoundaryPoints(Range::END_TO_END, createLiveRange(start)).releaseReturnValue() &gt; 0)

It kills me that we are creating these temporary live ranges just to do compareBoundaryPoints, but I know the plan is to come back and remove these eventually, so I will take it.

&gt; Source/WebCore/dom/Range.cpp:1836
&gt; -SimpleRange makeSimpleRange(const Range&amp; range)
&gt; +SimpleRange makeRange(const Range&amp; range)

Not sure how I feel about this. It very much is not making a Range.

What is the impetus behind this rename? Is the ultimate goal to rename SimpleRange to Range, and the existing Range to LiveRange?

&gt; Source/WebCore/editing/Editor.cpp:2610
&gt; +void Editor::markMisspellingsOrBadGrammar(const VisibleSelection&amp; selection, bool checkSpelling, Optional&lt;SimpleRange&gt;&amp; firstMisspellingRange)

firstMisspellingRange should be a returned value not a out reference. (not new, but might be nice to fix since you are touching it). Same is true for a few more functions below.

&gt; Source/WebCore/editing/Editor.cpp:3495
&gt; +template&lt;typename T&gt; static auto&amp; start(T&amp;&amp; range, FindOptions options)
&gt; +{
&gt; +    return options.contains(Backwards) ? range.end : range.start;
&gt; +}

I think you want these to take a T&amp; range, because you would never want this function to take ownership of range given it is returning references to range&apos;s members.

&gt; Source/WebCore/editing/Editor.h:449
&gt; +    WEBCORE_EXPORT Optional&lt;SimpleRange&gt; rangeOfString(const String&amp;, const Optional&lt;SimpleRange&gt;&amp;, FindOptions);

Given that it&apos;s not immediately clear what the OptionalRange parameter is for, I might consider adding a parameter name here to clarify.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1386
&gt; +        if (position &lt; startPosition)
&gt; +            position = startPosition;
&gt; +        if (position &gt; endPosition)
&gt; +            position = endPosition;

Would position = std::max(position, startPosition) work for this? Or even position = std::clamp(position, startPosition, endPosition) (honestly not sure if that even compiles).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673668</commentid>
    <comment_count>14</comment_count>
      <attachid>404691</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-21 16:42:28 -0700</bug_when>
    <thetext>Comment on attachment 404691
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:309
&gt;&gt; +            if (createLiveRange(*misspellingRange)-&gt;compareBoundaryPoints(Range::END_TO_END, createLiveRange(start)).releaseReturnValue() &gt; 0)
&gt; 
&gt; It kills me that we are creating these temporary live ranges just to do compareBoundaryPoints, but I know the plan is to come back and remove these eventually, so I will take it.

Yes, I promise to return and finish the job.

&gt;&gt; Source/WebCore/dom/Range.cpp:1836
&gt;&gt; +SimpleRange makeRange(const Range&amp; range)
&gt; 
&gt; Not sure how I feel about this. It very much is not making a Range.
&gt; 
&gt; What is the impetus behind this rename? Is the ultimate goal to rename SimpleRange to Range, and the existing Range to LiveRange?

I don’t know if I am thinking clearly about this. My concept is that once you have a SimpleRange, it’s trivial to make a live range or a static range from it, so a simple range is the minimal range you can make. But for some reason that sounded better in my head than it does talking to you now.

And yes, once Range is renamed to LiveRange we could consider a different name for SimpleRange.

I think I should rename this back to makeSimpleRange for now.

&gt;&gt; Source/WebCore/editing/Editor.cpp:2610
&gt;&gt; +void Editor::markMisspellingsOrBadGrammar(const VisibleSelection&amp; selection, bool checkSpelling, Optional&lt;SimpleRange&gt;&amp; firstMisspellingRange)
&gt; 
&gt; firstMisspellingRange should be a returned value not a out reference. (not new, but might be nice to fix since you are touching it). Same is true for a few more functions below.

I agree; didn’t want to do it because I was worried about the patch growing out of control. But I will do it.

&gt;&gt; Source/WebCore/editing/Editor.cpp:3495
&gt;&gt; +}
&gt; 
&gt; I think you want these to take a T&amp; range, because you would never want this function to take ownership of range given it is returning references to range&apos;s members.

Yes, that makes sense. I wanted it to work on both const and non-const, and obviously T&amp; achieves that.

&gt;&gt; Source/WebCore/editing/Editor.h:449
&gt;&gt; +    WEBCORE_EXPORT Optional&lt;SimpleRange&gt; rangeOfString(const String&amp;, const Optional&lt;SimpleRange&gt;&amp;, FindOptions);
&gt; 
&gt; Given that it&apos;s not immediately clear what the OptionalRange parameter is for, I might consider adding a parameter name here to clarify.

Got it.

I don’t know what to name it. It’s the range to search within, if omitted the entire document will be searched. Part of the problem is that function name &quot;rangeOfString&quot; doesn’t make it obvious that it’s a function that involves searching.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1386
&gt;&gt; +            position = endPosition;
&gt; 
&gt; Would position = std::max(position, startPosition) work for this? Or even position = std::clamp(position, startPosition, endPosition) (honestly not sure if that even compiles).

Yes, I think it would.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673744</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-21 21:45:46 -0700</bug_when>
    <thetext>Committed r264692: &lt;https://trac.webkit.org/changeset/264692&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404157</attachid>
            <date>2020-07-13 10:56:01 -0700</date>
            <delta_ts>2020-07-13 13:10:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200713105600.patch</filename>
            <type>text/plain</type>
            <size>146931</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThjZjAyZDg0ZGQ3NDIy
MTExNTliZDRiY2E0NzhmNTc5NmIwZWMzYi4uZmEzNTQ3MjgxYWVhYjliNDNkZjBiOTllZTc0Zjg2
ZGI0NjNlOGUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTEzICBBbGljaWEgQm95YSBHYXJjw61hICA8YWJveWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIERpc2NhcmQgUFRTLWxlc3Mg
c2FtcGxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKaW5kZXggYzlkN2Q5YTc0YjYzZGUwYTFiMDAwMTQyNTNiMGVjNzgxM2E3
NDYwNi4uZWQ4ZjhhOTQ5MGMzYWQ1NmE0OWM2YTEyZTk2MTRiODU0Njk0NGZlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CkBAIC0zMDYsOCArMzA2LDggQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlP
YmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHMKICAgICAgICAgICAg
IGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVl
KCkgPiAwKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoKm1pc3NwZWxs
aW5nUmFuZ2UpOworICAgICAgICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdS
YW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2
ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQorICAgICAgICAgICAgICAg
IHJldHVybiAqbWlzc3BlbGxpbmdSYW5nZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGly
ZWN0aW9uID09IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKSB7CiAgICAg
ICAgIGZvciAoYXV0byByaXQgPSBtaXNzcGVsbGluZ3MucmJlZ2luKCk7IHJpdCAhPSBtaXNzcGVs
bGluZ3MucmVuZCgpOyArK3JpdCkgewpAQCAtMzE1LDggKzMxNSw4IEBAIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiBzCiAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2Uo
c3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VTaW1wbGVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAgICAgICBpZiAoY3Jl
YXRlTGl2ZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVy
blZhbHVlKCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAqbWlzc3BlbGxpbmdSYW5nZTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNjAxLDE1ICs2MDEsMTQgQEAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUlu
RGlyZWN0aW8KICAgICAKICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY2xvc2VzdFN0cmluZ1Jh
bmdlOwogICAgIGZvciAoYXV0byYgc2VhcmNoU3RyaW5nIDogc2VhcmNoU3RyaW5ncykgewotICAg
ICAgICBpZiAoYXV0byBzZWFyY2hTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9m
U3RyaW5nKHNlYXJjaFN0cmluZywgY3JlYXRlTGl2ZVJhbmdlKHJlZmVyZW5jZVJhbmdlKS5wdHIo
KSwgZmluZE9wdGlvbnMpKSB7Ci0gICAgICAgICAgICBhdXRvIGZvdW5kU3RyaW5nUmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UoKnNlYXJjaFN0cmluZ1JhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gc2Vh
cmNoU3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJp
bmcsIHJlZmVyZW5jZVJhbmdlLCBmaW5kT3B0aW9ucykpIHsKICAgICAgICAgICAgIGlmICghY2xv
c2VzdFN0cmluZ1JhbmdlKQotICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZv
dW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0gKnNl
YXJjaFN0cmluZ1JhbmdlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
SWYgc2VhcmNoaW5nIGJhY2t3YXJkLCB1c2UgdGhlIHRyYWlsaW5nIHJhbmdlIGVkZ2VzIHRvIGNv
cnJlY3RseSBkZXRlcm1pbmUgd2hpY2gKICAgICAgICAgICAgICAgICAvLyByYW5nZSBpcyBjbG9z
ZXN0LiBTaW1pbGFybHksIGlmIHNlYXJjaGluZyBmb3J3YXJkLCB1c2UgdGhlIGxlYWRpbmcgcmFu
Z2UgZWRnZXMuCiAgICAgICAgICAgICAgICAgYXV0byYgY2xvc2VzdFN0cmluZ1Bvc2l0aW9uID0g
aXNCYWNrd2FyZFNlYXJjaCA/IGNsb3Nlc3RTdHJpbmdSYW5nZS0+ZW5kIDogY2xvc2VzdFN0cmlu
Z1JhbmdlLT5zdGFydDsKLSAgICAgICAgICAgICAgICBhdXRvJiBmb3VuZFN0cmluZ1Bvc2l0aW9u
ID0gaXNCYWNrd2FyZFNlYXJjaCA/IGZvdW5kU3RyaW5nUmFuZ2UuZW5kIDogZm91bmRTdHJpbmdS
YW5nZS5zdGFydDsKKyAgICAgICAgICAgICAgICBhdXRvJiBmb3VuZFN0cmluZ1Bvc2l0aW9uID0g
aXNCYWNrd2FyZFNlYXJjaCA/IHNlYXJjaFN0cmluZ1JhbmdlLT5lbmQgOiBzZWFyY2hTdHJpbmdS
YW5nZS0+c3RhcnQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYXV0byBjbG9z
ZXN0UG9zaXRpb25PZmZzZXQgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24ub2Zmc2V0OwogICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoUG9zaXRpb25PZmZzZXQgPSBmb3VuZFN0cmluZ1Bvc2l0aW9u
Lm9mZnNldDsKQEAgLTYxOCw3ICs2MTcsNyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNz
aWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3RpbwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhjbG9zZXN0Q29udGFpbmVyTm9kZSwgY2xvc2VzdFBvc2l0aW9uT2Zm
c2V0LCBzZWFyY2hDb250YWluZXJOb2RlLCBzZWFyY2hQb3NpdGlvbk9mZnNldCkucmVsZWFzZVJl
dHVyblZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCghaXNCYWNrd2FyZFNlYXJjaCAmJiBy
ZXN1bHQgPiAwKSB8fCAoaXNCYWNrd2FyZFNlYXJjaCAmJiByZXN1bHQgPCAwKSkKLSAgICAgICAg
ICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0gZm91bmRTdHJpbmdSYW5nZTsKKyAgICAg
ICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0gKnNlYXJjaFN0cmluZ1JhbmdlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQppbmRleCAxY2U0NDI4MTI4NGJkNTljNmY4NGUyNTA5ODhhMjkyMjQ5NzZi
MzRmLi45ZjJkNjVkNzQwZGI3MzhmNTlmODMwYmE4YzFiZjBiZjY4MjRhYzk4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtNjkyLDcgKzY5Miw3IEBAIHN0YXRp
YyBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZv
clBhcmFtZXRlcml6ZWRBdHRyCiAKICAgICBpZiAoW21hcmtlclJhbmdlcyBpc0tpbmRPZkNsYXNz
OltOU0FycmF5IGNsYXNzXV0pIHsKICAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMgPSBtYWtl
VmVjdG9yKG1hcmtlclJhbmdlcywgW3dyYXBwZXJdIChpZCBtYXJrZXJSYW5nZSkgewotICAgICAg
ICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShbd3JhcHBlciByYW5nZUZvclRleHRNYXJrZXJS
YW5nZTptYXJrZXJSYW5nZV0pOworICAgICAgICAgICAgcmV0dXJuIG1ha2VSYW5nZShbd3JhcHBl
ciByYW5nZUZvclRleHRNYXJrZXJSYW5nZTptYXJrZXJSYW5nZV0pOwogICAgICAgICB9KTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDcxMDVkYjVlOTdjM2Y1MjFkN2U0OGM0
ZTIyNTY3ZmRlZmRiYWM3OGYuLmFmNDMyYjQ5NDNmYjRhYjI2NjljYzhhMGZhNWE3N2VjYjZiODM0
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDczLDcgKzQ3Myw3IEBAIHN0YXRpYyBi
b29sIGFjY2VwdHNFZGl0aW5nRm9jdXMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAo
IWZyYW1lIHx8ICFyb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZnJh
bWUtPmVkaXRvcigpLnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZU9mQ29udGVudHMoKnJvb3QpLnB0
cigpKTsKKyAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNob3VsZEJlZ2luRWRpdGluZyhtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpKTsKIH0KIAogc3RhdGljIGJvb2wgY2Fu
QWNjZXNzQW5jZXN0b3IoY29uc3QgU2VjdXJpdHlPcmlnaW4mIGFjdGl2ZVNlY3VyaXR5T3JpZ2lu
LCBGcmFtZSogdGFyZ2V0RnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA5YjdhMWE2MjEyMTk1
YTJlNDc0OGNiMjk3MTk0NGMxNjYzMjgwMDk2Li45ZWExNDlkMmY1MWRlMjRjMzM3MTYwYjUzYWY3
YzFlZGNkYzg4ZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTE4MzMsMjYgKzE4MzMsMjYgQEAg
RmxvYXRSZWN0IFJhbmdlOjphYnNvbHV0ZUJvdW5kaW5nUmVjdChPcHRpb25TZXQ8Qm91bmRpbmdS
ZWN0QmVoYXZpb3I+IHJlY3RPcHRpb24KICAgICByZXR1cm4gYm91bmRpbmdSZWN0KENvb3JkaW5h
dGVTcGFjZTo6QWJzb2x1dGUsIHJlY3RPcHRpb25zKTsKIH0KIAotU2ltcGxlUmFuZ2UgbWFrZVNp
bXBsZVJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25z
dCBSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIHsgeyByYW5nZS5zdGFydENvbnRhaW5lcigp
LCByYW5nZS5zdGFydE9mZnNldCgpIH0sIHsgcmFuZ2UuZW5kQ29udGFpbmVyKCksIHJhbmdlLmVu
ZE9mZnNldCgpIH0gfTsKIH0KIAotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJl
ZjxSYW5nZT4mIHJhbmdlKQorU2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4m
IHJhbmdlKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkpOworICAg
IHJldHVybiBtYWtlUmFuZ2UocmFuZ2UuZ2V0KCkpOwogfQogCi1PcHRpb25hbDxTaW1wbGVSYW5n
ZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKK09wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZSgq
cmFuZ2UpOworICAgIHJldHVybiBtYWtlUmFuZ2UoKnJhbmdlKTsKIH0KIAotT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+JiByYW5nZSkKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYgcmFuZ2Up
CiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJu
IG1ha2VSYW5nZShyYW5nZS5nZXQoKSk7CiB9CiAKIFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggYTg2MTljYjk0NjM0
MzRlOGNlODFkMmI4NDdjMzI1YTAxMjA3ZTExMC4uOTM1YmJkYTQ3Yjc2MTA3OTA3N2M0MTYzZTFj
ODk5NzQ4MjVkOTlmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTE3NiwxMCArMTc2LDEwIEBAIFdFQkNP
UkVfRVhQT1JUIFJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmKTsKIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgYXJlUmFuZ2VzRXF1YWwoY29uc3QgUmFuZ2UqLCBjb25zdCBSYW5nZSopOwogV0VC
Q09SRV9FWFBPUlQgYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2Uq
KTsKIAotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7Ci1TaW1wbGVS
YW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwotT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwotT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CitTaW1wbGVSYW5nZSBt
YWtlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25zdCBSZWY8
UmFuZ2U+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdl
KGNvbnN0IFJhbmdlKik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mKTsKIAogV0VCQ09SRV9FWFBPUlQgUmVmPFJhbmdl
PiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggNGE4ZDAwNGRlOTEyODlhMzRhZjBj
MTUxYjM2OWMzNTNkZmFkYmNjOS4uMjY1YzQ5N2I2MDgyODNkYjExYmUzZjA3ZjY0ZGVkNzUzYTY0
MTVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC04Miw2ICs4MiwyMCBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJiBub2RlKQog
ICAgIHJldHVybiBTaW1wbGVSYW5nZSB7IHsgKnBhcmVudCwgb2Zmc2V0IH0sIHsgKnBhcmVudCwg
b2Zmc2V0ICsgMSB9IH07CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoY29u
c3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFy
eVBvaW50PiYgZW5kKQoreworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpzdGFydCwgKmVuZCB9IH07Cit9CisKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiBz
dGFydCwgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiBlbmQpCit7CisgICAgaWYgKCFzdGFydCB8
fCAhZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgV1RG
TW92ZSgqc3RhcnQpLCBXVEZNb3ZlKCplbmQpIH0gfTsKK30KKwogU2ltcGxlUmFuZ2UgbWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHsgbWFr
ZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50
QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXgg
NzBlN2M0MjUxY2RkZjMxN2I0OWQ5YWEyZGM0MmU2ZDQ1NDdhNzRkZC4uMDM3NzgwYTYyMjQ5MWU3
NTRkMDUwZTJhZmFkMzBlMTQ5NjI5OGZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAg
LTQ2LDExICs0NiwxNCBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2UgewogICAgIFdFQkNPUkVfRVhQT1JU
IFNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQmJiwgQm91bmRhcnlQb2ludCYmKTsKIAogICAgIC8v
IENvbnZlbmllbmNlIG92ZXJsb2FkcyB0byBoZWxwIHdpdGggdHJhbnNpdGlvbiBmcm9tIHVzaW5n
IGEgbG90IG9mIGxpdmUgcmFuZ2VzLgotICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zaXRpb24gaXMg
b3ZlciwgcmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVNpbXBsZVJhbmdlIGlu
c3RlYWQuCisgICAgLy8gRklYTUU6IE9uY2UgdHJhbnNpdGlvbiBpcyBvdmVyLCByZW1vdmUgYW5k
IGNoYW5nZSBjYWxsZXJzIHRvIHVzZSBtYWtlUmFuZ2UgaW5zdGVhZC4KICAgICBXRUJDT1JFX0VY
UE9SVCBTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwogICAgIFNpbXBsZVJhbmdlKGNvbnN0IFJl
ZjxSYW5nZT4mKTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25zdCBPcHRpb25hbDxC
b3VuZGFyeVBvaW50PiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRpb25hbDxCb3VuZGFyeVBvaW50
PiYmKTsKKwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNl
bGVjdGluZ05vZGUoTm9kZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZTJlODk0Y2I5Mzc5
YzQzYTMzM2JjYjNmMDgzMzIwMTQzM2Q3ZjIzMC4uOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIy
YzMwZTYwZTcxMzE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0
KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcs
IFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29y
cmVjdGlvblBhbmVsIH0sIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0
ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIG51bGxwdHIpOworICAgICAgICBtX2RvY3Vt
ZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBU
ZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQs
IFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFu
Z2UsIGFkamFjZW50V29yZFJhbmdlLCBXVEY6Om51bGxvcHQpOwogICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CkBAIC02NTMsNyAr
NjUzLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFs
dGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXQKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKICAgICBhdXRvJiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1
dG8gc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGlv
biB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlv
bi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmICghc2VsZWN0aW9u
IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgKnNlbGVjdGlv
biwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAgZm9y
IChhdXRvKiBtYXJrZXIgOiBzZWxlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoKnNlbGVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlcykpCiAgICAgICAgIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zv
ck1hcmtlcigqbWFya2VyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDExMmY5N2IyYTBiNjU0NjI1NDY2Mjg4MjY3ZTYzM2Jk
YmJmZmI1ZjEuLjg3MGM0ZGJiNjhkMzgwZjlhMWI4MWEwYzBlNWYxM2FhMzI3NGE0ZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApA
QCAtNzQ5LDkgKzc0OSw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJh
Z3JhcGhzKCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgp
LCBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWRvY3VtZW50KCkuZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCBy
YW5nZVRvQmVSZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZSwgcmFuZ2VUb0JlUmVwbGFj
ZWQpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBtb3ZlUGFyYWdyYXBocyB3aWxs
IGluc2VydCBwbGFjZWhvbGRlcnMgaWYgaXQgcmVtb3ZlcyBibG9ja3MgdGhhdCB3b3VsZCByZXF1
aXJlIHRoZWlyIHVzZSwgZG9uJ3QgbGV0IGJsb2NrCiAgICAgLy8gcmVtb3ZhbHMgdGhhdCBpdCBk
b2VzIGNhdXNlIHRoZSBpbnNlcnRpb24gb2YgKmFub3RoZXIqIHBsYWNlaG9sZGVyLgogICAgIGJv
b2wgbmVlZFBsYWNlaG9sZGVyID0gbV9uZWVkUGxhY2Vob2xkZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKaW5kZXggY2E2ODhhZTQ5NWJhYzFkOTIxNzcwYmY0MzVmY2ZjM2Y3ZTJiMDNkYy4u
OTg3MWY4MGNkZjRiYTUxODlhMjAyYTYyNTdjOWZmYmJkOGQ2MzRkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcApAQCAtNTA3LDIxICs1MDcsMTggQEAgYm9vbCBFZGl0b3I6OmNhbkRlbGV0
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAotYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKK2Jvb2wgRWRpdG9yOjpjYW5EZWxldGVSYW5nZShjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5k
Q29udGFpbmVyKCk7Ci0gICAgCi0gICAgaWYgKCFzdGFydENvbnRhaW5lci5oYXNFZGl0YWJsZVN0
eWxlKCkgfHwgIWVuZENvbnRhaW5lci5oYXNFZGl0YWJsZVN0eWxlKCkpCisgICAgaWYgKCFyYW5n
ZS5zdGFydC5jb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCAhcmFuZ2UuZW5kLmNvbnRh
aW5lci0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAocmFuZ2UtPmNvbGxhcHNlZCgpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChy
YW5nZS0+c3RhcnRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzID0gc3RhcnQucHJldmlvdXMoKTsKKyAgICBpZiAocmFuZ2UuY29sbGFwc2Vk
KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNvbWV0aW1lcyBhbGxvdyBkZWxldGlvbnMgYXQg
dGhlIHN0YXJ0IG9mIGVkaXRhYmxlIHJvb3RzLCBsaWtlIHdoZW4gdGhlIGNhcmV0IGlzIGluIGFu
IGVtcHR5IGxpc3QgaXRlbS4KLSAgICAgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZp
b3VzLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpICE9IHN0YXJ0Q29udGFpbmVyLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgYXV0
byBwcmV2aW91cyA9IFZpc2libGVQb3NpdGlvbiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihyYW5nZS5zdGFydCksIERPV05TVFJFQU0gfS5wcmV2aW91cygpOworICAgICAgICBpZiAocHJl
dmlvdXMuaXNOdWxsKCkgfHwgcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9k
ZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yb290
RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU1OCw3ICs1NTUsNyBAQCBib29sIEVkaXRvcjo6ZGVs
ZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVs
YXJpdHkgZwogICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9u
KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmlu
ZykKLSAgICAgICAgICAgICAgICBhZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVkUmFuZ2UoKS5n
ZXQoKSwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgICAgICAg
ICBhZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVkUmFuZ2UoKSwgS2lsbFJpbmdJbnNlcnRpb25N
b2RlOjpBcHBlbmRUZXh0KTsKICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERl
bGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpKTsKICAgICAgICAgICAgIC8vIEltcGxpY2l0bHkg
Y2FsbHMgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCkuCiAgICAgICAgIH0K
QEAgLTYyNyw3ICs2MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dEJ5cGFzc2lu
Z0RIVE1MKCkKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFz
dGVib2FyZCYgcGFzdGVib2FyZCkKIHsKICAgICBTdHJpbmcgdGV4dCA9IHJlYWRQbGFpblRleHRG
cm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCkt
PnNob3VsZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJ
bnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0KHRleHQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQ
YXN0ZWJvYXJkKHBhc3RlYm9hcmQpKTsKIH0KIApAQCAtNjUyLDcgKzY0OSw3IEBAIGJvb2wgRWRp
dG9yOjpjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
KQogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c21hcnRJbnNlcnREZWxldGVFbmFi
bGVkKCkgJiYgcGFzdGVib2FyZC5jYW5TbWFydFJlcGxhY2UoKTsKIH0KIAotYm9vbCBFZGl0b3I6
OnNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSog
cmVwbGFjaW5nRE9NUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwg
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByZXBsYWNpbmdET01SYW5nZSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQogewogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTY2MSw3ICs2NTgsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0
RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlKiByZXBsYWNpbmdETwog
ICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPihjaGlsZCkgJiYgZnJhZ21lbnQubGFzdENoaWxkKCkg
PT0gY2hpbGQpCiAgICAgICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dChkb3du
Y2FzdDxDaGFyYWN0ZXJEYXRhPigqY2hpbGQpLmRhdGEoKSwgcmVwbGFjaW5nRE9NUmFuZ2UsIGdp
dmVuQWN0aW9uKTsKIAotICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZSgmZnJh
Z21lbnQsIHJlcGxhY2luZ0RPTVJhbmdlLCBnaXZlbkFjdGlvbik7CisgICAgcmV0dXJuIGNsaWVu
dCgpLT5zaG91bGRJbnNlcnROb2RlKGZyYWdtZW50LCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5B
Y3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChE
b2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZWN0UmVwbGFj
ZW1lbnQsIFNtYXJ0UmVwbGFjZSBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGUgbWF0Y2hTdHlsZSwg
RWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9j
a3F1b3RlSGFuZGxpbmcpCkBAIC03MjQsMjcgKzcyMSwyMSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0
UmVwbAogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZWN0UmVwbGFjZW1lbnQsIFNtYXJ0UmVwbGFj
ZSBzbWFydFJlcGxhY2UsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rl
ZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4
dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRp
dGluZ0FjdGlvbik7CisgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFn
bWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KSwgc2VsZWN0UmVwbGFj
ZW1lbnQsIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZTo6WWVzLCBlZGl0aW5nQWN0aW9uKTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5n
ZSogcmFuZ2UpIGNvbnN0Citib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkgY29uc3QKIHsKLSAgICBpZiAoIXJhbmdlIHx8IHJh
bmdlLT5jb2xsYXBzZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICgh
Y2FuRGVsZXRlUmFuZ2UocmFuZ2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHJhbmdlKTsKKyAgICBy
ZXR1cm4gcmFuZ2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQoKSAmJiBjYW5EZWxldGVSYW5nZSgqcmFu
Z2UpICYmIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZSgqcmFuZ2UpOwog
fQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKQEAgLTc2Myw3ICs3NTQsNyBAQCBib29s
IEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVu
dChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50S2luZDo6Q3V0
KTsKIH0KIAotYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGNvbnN0Citib29sIEVk
aXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGNvbnN0CiB7
CiAgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxk
U3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05ODAsNyArOTcxLDcgQEAg
dm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uLAogICAgICAgICBkaXNwYXRjaElucHV0RXZlbnQoKmVsZW1l
bnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0KICAgICAKLWJvb2wgRWRpdG9y
OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiByYW5nZSkK
K2Jvb2wgRWRpdG9yOjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5
bGUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsgICAKICAgICByZXR1cm4gY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIHJhbmdlKTsKIH0KQEAgLTEwMTEsNyArMTAwMiw3IEBA
IHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0
eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFu
Z2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5
bGUoKnN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGlu
Z0FjdGlvbik7CiB9CkBAIC0xMDIyLDcgKzEwMTMsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHls
ZVRvU2VsZWN0aW9uKFJlZjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
ZwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4
dCBkZWNvcmF0aW9ucyBzaW5jZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNs
aWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVz
b2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQorICAg
IGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHls
ZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
cHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRlck1vZGUp
OwpAQCAtMTAzMyw3ICsxMDI0LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVU
b1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAo
IXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlT
dHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBj
bGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZSgqc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBo
U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQogCkBAIC0xMjY3LDcgKzEyNTgsNyBAQCBi
b29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRh
YmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRl
eHQodGV4dCwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQg
cGFzcyBmYWxzZSB0byB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZygpIHRv
IG5vdCByZW1vdmUgbWFya2VycyBpZgpAQCAtMTMyNiw3ICsxMzE3LDcgQEAgYm9vbCBFZGl0b3I6
Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2Uo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRU
ZXh0KCJcbiJfcywgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwpAQCAtMTM0Niw3ICsxMzM3LDcgQEAgYm9vbCBF
ZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5
KCkpCiAgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKICAgICAKLSAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iX3MsIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBv
c2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKTsKQEAgLTE0MDYsMTAgKzEzOTcsMTAgQEAgdm9pZCBFZGl0b3I6OnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMK
IAogdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFj
dGlvbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsK
LSAgICB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoc2VsZWN0aW9uLmdldCgpKTsKKyAg
ICBhdXRvIHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICB3aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoc2VsZWN0aW9uKTsKICAgICBpZiAoYWN0aW9uID09IEN1dEFjdGlvbikg
ewotICAgICAgICBpZiAoIXNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi5nZXQoKSkpCisgICAg
ICAgIGlmICghc2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyh0cnVl
KTsKQEAgLTE1MjYsNyArMTUxNyw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtRGVsZXRlKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRS
YW5nZSgpLmdldCgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgIGFk
ZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6
OkFwcGVuZFRleHQpOwogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpKTsKIAogICAgIC8vIGNsZWFyIHRoZSAic3RhcnQgbmV3IGtpbGwgcmlu
ZyBzZXF1ZW5jZSIgc2V0dGluZywgYmVjYXVzZSBpdCB3YXMgc2V0IHRvIHRydWUKQEAgLTE3ODQs
MTIgKzE3NzUsMTIgQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbigpCiAKICNlbmRpZgogCi1ib29sIEVkaXRvcjo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSog
cmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRFbmRFZGl0
aW5nKHJhbmdlKTsKIH0KIAotYm9vbCBFZGl0b3I6OnNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSog
cmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKIHsKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEJlZ2lu
RWRpdGluZyhyYW5nZSk7CiB9CkBAIC0xODQxLDcgKzE4MzIsNyBAQCB2b2lkIEVkaXRvcjo6ZGlk
RW5kRWRpdGluZygpCiAgICAgICAgIGNsaWVudCgpLT5kaWRFbmRFZGl0aW5nKCk7CiB9CiAKLXZv
aWQgRWRpdG9yOjp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqIHJhbmdlKQor
dm9pZCBFZGl0b3I6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xp
ZW50KCktPndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChyYW5nZSk7CkBAIC0xOTI0LDE0
ICsxOTE1LDE0IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlv
bkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIAogdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0
aW9uKCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY29tcG9zaXRpb25SYW5nZSgpOwor
ICAgIGF1dG8gcmFuZ2UgPSBjb21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFRoZSBjb21wb3NpdGlvbiBjYW4gc3RhcnQgaW5z
aWRlIGEgY29tcG9zZWQgY2hhcmFjdGVyIHNlcXVlbmNlLCBzbyB3ZSBoYXZlIHRvIG92ZXJyaWRl
IGNoZWNrcy4KICAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwotICAgIHNlbGVjdGlv
bi5zZXRXaXRob3V0VmFsaWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5k
UG9zaXRpb24oKSk7CisgICAgc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UtPmVuZCkpOwogICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0KIApAQCAtMjQ4NSw5ICsyNDc2LDkgQEAgdm9pZCBFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRp
b24gJndvcmRTdGFydCwKICAgICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdv
cmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdo
dFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICBhdXRvIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRP
ZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICBhdXRvIGFkamFj
ZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIG1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9u
cywgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFk
amFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSk7Cisg
ICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdP
cHRpb25zLCBhZGphY2VudFdvcmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFjZW50V29y
ZFJhbmdlKTsKICNlbHNlCiAjaWYgIVVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAg
ICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7CkBAIC0yNTcyLDcgKzI1NjMsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNhbiwg
cmVzcGVjdGluZyBib3VuZGFyaWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQuCiAg
ICAgICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwog
ICAgICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMoKnNwZWxsQ2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
KTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0
Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3Jl
YXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGZ1bGxTZW50
ZW5jZVJhbmdlKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBhZGphY2VudFdv
cmRSYW5nZSwgZnVsbFNlbnRlbmNlUmFuZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yNTgwLDcgKzI1NzEsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBDaGVjayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIFJlZlB0cjxSYW5n
ZT4gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlzc3BlbGxp
bmdSYW5nZTsKICAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldv
cmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQs
IFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpLCBtaXNzcGVsbGluZ1JhbmdlKTsKIAogICAgIC8vIEF1
dG9jb3JyZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCkBAIC0yNTk5LDcgKzI1OTAsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9k
b2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1p
c3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAg
ICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVk
U3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5v
LCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogCkBAIC0yNjE2LDcgKzI2
MDcsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogI2VuZGlmCiB9CiAgICAgCi12b2lkIEVk
aXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBz
ZWxlY3Rpb24gYWxyZWFkeSBleHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCkBAIC0yNjQ0LDkg
KzI2MzUsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIFRleHRDaGVja2luZ0hlbHBlciBjaGVja2VyKCpjbGllbnQoKSwgKnNlYXJjaFJhbmdl
KTsKLSAgICBpZiAoY2hlY2tTcGVsbGluZykKLSAgICAgICAgY2hlY2tlci5tYXJrQWxsTWlzc3Bl
bGxpbmdzKGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0gICAgZWxzZSBpZiAoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCkpCisgICAgaWYgKGNoZWNrU3BlbGxpbmcpIHsKKyAgICAgICAgUmVmUHRy
PFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlOworICAgICAgICBjaGVja2VyLm1hcmtB
bGxNaXNzcGVsbGluZ3MoZmlyc3RNaXNzcGVsbGluZ0xpdmVSYW5nZSk7CisgICAgICAgIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSA9IG1ha2VSYW5nZShmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlKTsK
KyAgICB9IGVsc2UgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICBjaGVj
a2VyLm1hcmtBbGxCYWRHcmFtbWFyKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rp
b24pOwpAQCAtMjY3NCwxOCArMjY2NywxOCBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5n
RW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdF
bmFibGVkRm9yKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpCit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlKQogewogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCB0
cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogfQogICAgIAogdm9pZCBFZGl0b3I6Om1hcmtC
YWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAgICBSZWZQ
dHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1t
YXIoc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KIAotdm9pZCBF
ZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnMsIFJlZlB0cjxSYW5nZT4mJiBz
cGVsbGluZ1JhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwg
UmVmUHRyPFJhbmdlPiYmIGdyYW1tYXJSYW5nZSkKK3ZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0
ZXh0Q2hlY2tpbmdPcHRpb25zLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5n
UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCiB7CiAgICAg
aWYgKHBsYXRmb3JtRHJpdmVuVGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI3MTAsOCArMjcwMyw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgaWYgKCFp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKCZlZGl0YWJsZU5vZGUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHJhbmdlVG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gZ3JhbW1hclJh
bmdlLnJlbGVhc2VOb25OdWxsKCkgOiBzcGVsbGluZ1JhbmdlLnJlbGVhc2VOb25OdWxsKCk7Ci0g
ICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaFRvQ2hlY2socmFuZ2VUb0NoZWNrLmdl
dCgpKTsKKyAgICBhdXRvJiByYW5nZVRvQ2hlY2sgPSBzaG91bGRNYXJrR3JhbW1hciA/ICpncmFt
bWFyUmFuZ2UgOiAqc3BlbGxpbmdSYW5nZTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFy
YWdyYXBoVG9DaGVjayhjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb0NoZWNrKSk7CiAgICAgaWYgKHBh
cmFncmFwaFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MTksOCAr
MjcxMiw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAKICAgICAvLyBJbiBhc3luY2hyb25v
dXMgbW9kZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgtd2lkZSBzZW50ZW5jZS4K
ICAgICBjb25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBl
TWFzayhlZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIGF1dG8gdGV4dFJl
cGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gbWFrZVJlZigqYXV0
b21hdGljUmVwbGFjZW1lbnRSYW5nZSkgOiByYW5nZVRvQ2hlY2suY29weVJlZigpOwotICAgIGF1
dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBU
ZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGFzeW5jaHJvbm91cyA/IG1ha2VSZWYocGFy
YWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKSA6IFdURk1vdmUocmFuZ2VUb0NoZWNrKSwg
V1RGTW92ZSh0ZXh0UmVwbGFjZW1lbnRSYW5nZSksIHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBo
UmFuZ2UoKSk7CisgICAgYXV0byYgdGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlID8gKmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UgOiByYW5nZVRvQ2hlY2s7
CisgICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9w
dGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gUmVm
PFJhbmdlPiB7IHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSB9IDogY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlVG9DaGVjayksIGNyZWF0ZUxpdmVSYW5nZSh0ZXh0UmVwbGFjZW1lbnRSYW5n
ZSksIHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgaWYgKCFyZXF1ZXN0
KQogICAgICAgICByZXR1cm47CiAKQEAgLTI3NTMsOSArMjc0Niw5IEBAIHN0YXRpYyBib29sIGlz
QXV0b21hdGljVGV4dFJlcGxhY2VtZW50VHlwZShUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVj
a2luZyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit2
b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0gICAgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVu
dCktPmFwcGx5KCk7CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGNyZWF0
ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKIH0KIAog
c3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFy
YWdyYXBoKFRleHRDaGVja2luZ1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1Jl
cGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJlc3VsdENo
YXJhY3RlclJhbmdlKQpAQCAtMjg5NSw3ICsyODg4LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8
VGUKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQogICAgICAgICAgICAgICAgICAg
ICBDcmVhdGVMaW5rQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHJlcGxhY2VtZW50KS0+YXBw
bHkoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRl
eHQocmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5z
ZXJ0VGV4dChyZXBsYWNlbWVudCwgbWFrZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpUeXBlZCkpIHsKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2lu
Z1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFj
ZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAg
ICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpIHsKQEAgLTI5NDgsMTIgKzI5NDEsMTIgQEAgdm9pZCBFZGl0b3I6
OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcp
CiAgICAgaWYgKHJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYgKCFz
ZWxlY3Rpb24gfHwgIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGF1dG8gc2VsZWN0aW9uID0g
c2VsZWN0ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uIHx8ICFzaG91bGRJbnNlcnRUZXh0
KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZl
cnRlZCwgcmVwbGFjZWRTdHJpbmcsICpzZWxlY3Rpb24pOwotICAgIFRleHRDaGVja2luZ1BhcmFn
cmFwaCBwYXJhZ3JhcGgoKnNlbGVjdGlvbik7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBh
cmFncmFwaChjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvbikpOwogICAgIHJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJl
cGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogICAgIGF1dG8gY2hhbmdlZFJhbmdlID0g
cGFyYWdyYXBoLnN1YnJhbmdlKENoYXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0
KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwpAQCAtMjk3OSwxMSArMjk3Miwx
MSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlYwogICAgICAgICBpZiAobWFya0dyYW1tYXIgJiYg
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRp
b25zLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgYXV0byBzcGVsbENo
ZWNraW5nUmFuZ2UgPSBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
ICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2lu
Z09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZl
UmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hlY2tpbmdSYW5n
ZSwgc3BlbGxDaGVja2luZ1JhbmdlLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpcnN0TWlzc3BlbGxp
bmdSYW5nZTsKICAgICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOwogICAgIGlmIChtYXJrR3JhbW1hcikKICAgICAgICAgbWFya0JhZEdy
YW1tYXIoZ3JhbW1hclNlbGVjdGlvbik7CkBAIC0zMDg2LDIzICszMDc5LDE4IEBAIHZvaWQgRWRp
dG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbiwgY29uc3QgU3RyCiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5kZWxldGVk
QXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKHBvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiB9CiAK
LVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5k
b3dQb2ludCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewogICAgIGF1dG8gZG9jdW1lbnQgPSBtX2RvY3Vt
ZW50LmZyYW1lKCktPmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYgKCFkb2N1
bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgYXV0byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIGF1dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAo
IWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGZyYW1lUG9p
bnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAgIGF1dG8g
c2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChmcmFtZVBvaW50KSB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IHJldHVybiBWaXNpYmxlU2VsZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50
KGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCkpIH0udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09w
ZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0ZW50T3B0
aW9uIHJldmVhbEV4dGVudE9wdGlvbikKQEAgLTMxMjksMTcgKzMxMTcsMTYgQEAgdm9pZCBFZGl0
b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlv
biBzaG91bGRSZXZlYWwKICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0
aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50KTsK
IH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdAorT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29tcG9zaXRpb25SYW5nZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2NvbXBvc2l0aW9uTm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jb21wb3Np
dGlvbk5vZGUtPmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4obV9jb21w
b3NpdGlvblN0YXJ0LCBsZW5ndGgpOwotICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6
bWF4KHN0YXJ0LCBtX2NvbXBvc2l0aW9uRW5kKSwgbGVuZ3RoKTsKLSAgICAvLyBGSVhNRTogV2h5
IGlzIHRoaXMgZWFybHkgcmV0dXJuIG5lZWVkPworICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6Y2xh
bXAobV9jb21wb3NpdGlvbkVuZCwgc3RhcnQsIGxlbmd0aCk7CiAgICAgaWYgKHN0YXJ0ID49IGVu
ZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobV9j
b21wb3NpdGlvbk5vZGUtPmRvY3VtZW50KCksIG1fY29tcG9zaXRpb25Ob2RlLmdldCgpLCBzdGFy
dCwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIGVuZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgcmV0dXJuIHsgeyB7ICptX2NvbXBvc2l0aW9uTm9kZSwgc3RhcnQgfSwgeyAq
bV9jb21wb3NpdGlvbk5vZGUsIGVuZCB9IH0gfTsKIH0KIAogYm9vbCBFZGl0b3I6OmdldENvbXBv
c2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVj
dGlvbkVuZCkgY29uc3QKQEAgLTMyMDEsNyArMzE4OCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bv
c2UoKQogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgot
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0cmFuc3Bvc2VkLCByYW5nZS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRyYW5zcG9z
ZWQsIG5ld1NlbGVjdGlvbi5maXJzdFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQp
KQogICAgICAgICByZXR1cm47CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRyYW5zcG9z
ZWQsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6
SW5zZXJ0KTsKIH0KQEAgLTMzNTcsMTMgKzMzNDQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGNv
bGxhcHNlQ2FyZXRXaWR0aChJbnRSZWN0JiByZWN0KQogICAgICAgICByZWN0LnNldEhlaWdodCgw
KTsKIH0KIAotSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkg
Y29uc3QKK0ludFJlY3QgRWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlv
dXQoKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9u
KCksIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlv
bihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNKTsK
IAotICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKCkpIHsKKyAgICBpZiAocmFuZ2UuY29sbGFwc2Vk
KCkpIHsKICAgICAgICAgLy8gRklYTUU6IEdldHRpbmcgY2FyZXQgcmVjdCBhbmQgcmVtb3Zpbmcg
Y2FyZXQgd2lkdGggaXMgYSB2ZXJ5IHJvdW5kYWJvdXQgd2F5IHRvIGdldCBjb2xsYXBzZWQgcmFu
Z2UgbG9jYXRpb24uCiAgICAgICAgIC8vIEluIHBhcnRpY3VsYXIsIHdpZHRoIGFkanVzdG1lbnQg
ZG9lc24ndCB3b3JrIGZvciByb3RhdGVkIHRleHQuCiAgICAgICAgIEludFJlY3Qgc3RhcnRDYXJl
dFJlY3QgPSBSZW5kZXJlZFBvc2l0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uKS5hYnNvbHV0ZVJl
Y3QoKTsKQEAgLTMzNzEsMTAgKzMzNTgsMTAgQEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZv
clJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKICAgICAgICAgcmV0dXJuIHN0YXJ0Q2FyZXRSZWN0
OwogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24ocmFuZ2Ut
PmVuZFBvc2l0aW9uKCksIFVQU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJs
ZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpLCBVUFNUUkVB
TSk7CiAKICAgICBpZiAoaW5TYW1lTGluZShzdGFydFZpc2libGVQb3NpdGlvbiwgZW5kVmlzaWJs
ZVBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRp
bmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSkpKTsKKyAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwogCiAgICAgTGF5b3V0VW5pdCBleHRyYVdp
ZHRoVG9FbmRPZkxpbmU7CiAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IFJlbmRlcmVkUG9z
aXRpb24oc3RhcnRWaXNpYmxlUG9zaXRpb24pLmFic29sdXRlUmVjdCgmZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKTsKQEAgLTM0MDAsNyArMzM4Nyw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWCiAg
ICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LmZyYW1lKCktPnNlbGVjdGlv
bkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlm
Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCksIGNyZWF0ZUxpdmVSYW5nZShuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNs
aWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpLCBuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgYWZmaW5pdHksIHN0
aWxsU2VsZWN0aW5nKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHls
ZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC0zNDg3
LDcgKzM0NzQsNyBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAotICAgIGF1dG8gcmVzdWx0
UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5m
aXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKKyAgICBhdXRvIHJlc3VsdFJhbmdlID0gcmFu
Z2VPZlN0cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCksIG9wdGlvbnMpOwogICAg
IGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQ5OSwxMDYg
KzM0ODYsMTAyIEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8UmFu
Z2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJl
ZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsK
ICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2Yg
dGhlIHJlZmVyZW5jZSByYW5nZSwgaWYgdGhlcmUncyBhIHJlZmVyZW5jZSByYW5nZSB0aGF0J3Mg
bm90IGluIHNoYWRvdyBjb250ZW50LiBXaGljaCBlZGdlCiAgICAgLy8gaXMgdXNlZCBkZXBlbmRz
IG9uIHdoZXRoZXIgd2UncmUgc2VhcmNoaW5nIGZvcndhcmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0
aGVyIHN0YXJ0SW5TZWxlY3Rpb24gaXMgc2V0LgotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFu
Z2UocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpKTsKIAogICAgIGJvb2wgZm9yd2FyZCA9ICFv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyk7CiAgICAgYm9vbCBzdGFydEluUmVmZXJlbmNlUmFu
Z2UgPSByZWZlcmVuY2VSYW5nZSAmJiBvcHRpb25zLmNvbnRhaW5zKFN0YXJ0SW5TZWxlY3Rpb24p
OworICAgIGF1dG8gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJh
bmdlLT5zdGFydENvbnRhaW5lcigpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOwor
CisgICAgYXV0byBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhk
b2N1bWVudCgpKTsKICAgICBpZiAocmVmZXJlbmNlUmFuZ2UpIHsKICAgICAgICAgaWYgKGZvcndh
cmQpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnRJblJlZmVyZW5jZVJh
bmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdlLT5l
bmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gc3RhcnRJblJl
ZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0IDogcmVmZXJlbmNlUmFuZ2UtPmVu
ZDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzdGFydElu
UmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSA6IHJlZmVyZW5j
ZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UuZW5kID0g
c3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZCA6IHJlZmVyZW5jZVJh
bmdlLT5zdGFydDsKICAgICB9Ci0KLSAgICBSZWZQdHI8U2hhZG93Um9vdD4gc2hhZG93VHJlZVJv
b3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydENvbnRhaW5lcigpLmNv
bnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOwogICAgIGlmIChzaGFkb3dUcmVlUm9vdCkg
ewogICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQo
KnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UuZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250
ZW50cygqc2hhZG93VHJlZVJvb3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKKyAgICAgICAgICAgIHNlYXJjaFJh
bmdlLnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKnNoYWRvd1Ry
ZWVSb290KTsKICAgICB9CisgICAgYXV0byByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2Vh
cmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJh
bmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQs
IG9wdGlvbnMpKTsKICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZlcmVuY2UgcmFuZ2Ug
YW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVyZW5jZSByYW5nZSwg
ZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5n
ZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSByYW5nZXMg
aW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBj
dXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdl
ICYmIGFyZVJhbmdlc0VxdWFsKGNyZWF0ZUxpdmVSYW5nZShWaXNpYmxlU2VsZWN0aW9uKCpyZXN1
bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgewot
ICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICBp
ZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYmIFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2Up
LnRvTm9ybWFsaXplZFJhbmdlKCkgPT0gcmVmZXJlbmNlUmFuZ2UpIHsKKyAgICAgICAgc2VhcmNo
UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAg
ICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlZmVy
ZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0
ID0gcmVmZXJlbmNlUmFuZ2UtPmVuZDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNo
UmFuZ2UtPnNldEVuZChyZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLQorICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UuZW5kID0gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0OwogICAgICAgICBp
ZiAoc2hhZG93VHJlZVJvb3QpIHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAg
ICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9v
dC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLmVuZCA9
IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnNo
YWRvd1RyZWVSb290LCAwKTsKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5zdGFydCA9IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCpzaGFkb3dUcmVlUm9vdCk7CiAgICAg
ICAgIH0KLQotICAgICAgICByZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxhaW5U
ZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CisgICAgICAgIHJlc3VsdFJhbmdl
ID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CiAK
ICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBp
biBtYWluIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0
UmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJh
bmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoc2hhZG93VHJl
ZVJvb3QtPnNoYWRvd0hvc3QoKSkgeworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAm
JiBzaGFkb3dUcmVlUm9vdCkgeworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gaG9zdCA9IHNo
YWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpIHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQot
ICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpzaGFkb3dUcmVlUm9v
dC0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5lbmQgPSAqbWFr
ZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGUoKmhvc3QpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5zaGFk
b3dIb3N0KCkpOworICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gKm1ha2VCb3Vu
ZGFyeVBvaW50QmVmb3JlTm9kZSgqaG9zdCk7CiAgICAgICAgIH0KLQotICAgICAgICByZXN1bHRS
YW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0
LCBvcHRpb25zKSk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hS
YW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmlu
ZCBhbnl0aGluZyBhbmQgd2UncmUgd3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUgZW50aXJl
IGRvY3VtZW50ICh0aGlzIHdpbGwKICAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2ggdGhlIGFy
ZWEgYWxyZWFkeSBzZWFyY2hlZCBpbiBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0UmFuZ2Ut
PmNvbGxhcHNlZCgpICYmIG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKLSAgICAgICAg
cmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dChyYW5nZU9mQ29udGVu
dHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRSYW5nZS5j
b2xsYXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7CisgICAgICAgIHJl
c3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSksIHRh
cmdldCwgb3B0aW9ucyk7CiAgICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUg
aWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAog
ICAgICAgICAvLyAoZS5nLiwgdGhlIHJlZmVyZW5jZSByYW5nZSB3YXMgYWxyZWFkeSB0aGUgb25s
eSBpbnN0YW5jZSBvZiB0aGlzIHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0CiAgICAgICAgIC8v
IHRoaXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFs
bCB0aHJvdWdoIGluIHRoYXQgY2FzZS4KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0UmFuZ2Ut
PmNvbGxhcHNlZCgpID8gbnVsbHB0ciA6IHJlc3VsdFJhbmdlOworICAgIHJldHVybiByZXN1bHRS
YW5nZS5jb2xsYXBzZWQoKSA/IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbChyZXN1bHRSYW5n
ZSk7CiB9CiAKLXN0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2Um
IHJhbmdlKQorc3RhdGljIGJvb2wgaXNGcmFtZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFt
ZS5vd25lckVsZW1lbnQoKTsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1l
bnQtPmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1l
bnQtPmRvY3VtZW50KCkgPT0gJnJhbmdlLm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICAgICAg
YXV0byByZXN1bHQgPSByYW5nZS5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50KTsKKyAgICAg
ICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+
aW50ZXJzZWN0c05vZGUoKm93bmVyRWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gIXJlc3Vs
dC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi11bnNpZ25lZCBFZGl0b3I6OmNvdW50
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9w
dGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+PiogbWF0Y2hlcykKK3Vuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNo
ZXMsIFZlY3RvcjxTaW1wbGVSYW5nZT4qIG1hdGNoZXMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5n
ZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gc2VhcmNoUmFuZ2U7CiAgICAgaWYgKHJhbmdl
KSB7Ci0gICAgICAgIGlmICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2U7CisgICAgICAgIGlmICgmcmFuZ2UtPnN0
YXJ0LmRvY3VtZW50KCkgPT0gJmRvY3VtZW50KCkpCisgICAgICAgICAgICBzZWFyY2hSYW5nZSA9
ICpyYW5nZTsKICAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdlKCptX2RvY3VtZW50LmZy
YW1lKCksICpyYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFz
ZWFyY2hSYW5nZSkKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1l
bnQoKSk7CisgICAgICAgIHNlYXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKGRvY3VtZW50KCkpOwogCi0gICAgTm9kZSYgb3JpZ2luYWxFbmRDb250YWluZXIgPSBzZWFy
Y2hSYW5nZS0+ZW5kQ29udGFpbmVyKCk7Ci0gICAgaW50IG9yaWdpbmFsRW5kT2Zmc2V0ID0gc2Vh
cmNoUmFuZ2UtPmVuZE9mZnNldCgpOworICAgIGF1dG8gb3JpZ2luYWxFbmQgPSBzZWFyY2hSYW5n
ZS0+ZW5kOwogCiAgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CiAgICAgZG8gewpAQCAtMzYw
Nyw4ICszNTkwLDggQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICgh
cmVzdWx0UmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcigq
cmVzdWx0UmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5zaGFkb3dIb3N0KCkpOwotICAgICAgICAgICAg
c2VhcmNoUmFuZ2UtPnNldEVuZChvcmlnaW5hbEVuZENvbnRhaW5lciwgb3JpZ2luYWxFbmRPZmZz
ZXQpOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRB
ZnRlck5vZGVDb250ZW50cygqcmVzdWx0UmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5zaGFkb3dIb3N0
KCkpOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPmVuZCA9IG9yaWdpbmFsRW5kOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMzYyMywxNSArMzYwNiwxNCBAQCB1bnNp
Z25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJh
bmdlKiByYW5nZSwgRmluZE9wdAogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1hdGNoQ291bnQg
Pj0gbGltaXQpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAvLyBTZXQgdGhlIG5ldyBz
dGFydCBmb3IgdGhlIHNlYXJjaCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cwot
ICAgICAgICAvLyByZXN1bHQgcmFuZ2UuIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGEgVmlzaWJs
ZVBvc2l0aW9uIGhlcmUsCi0gICAgICAgIC8vIHNpbmNlIGZpbmRQbGFpblRleHQgd2lsbCB1c2Ug
YSBUZXh0SXRlcmF0b3IgdG8gZ28gb3ZlciB0aGUgdmlzaWJsZQotICAgICAgICAvLyB0ZXh0IG5v
ZGVzLiAKLSAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KFdURk1vdmUocmVzdWx0UmFuZ2Uu
ZW5kLmNvbnRhaW5lciksIHJlc3VsdFJhbmdlLmVuZC5vZmZzZXQpOworICAgICAgICAvLyBTZXQg
dGhlIG5ldyBzdGFydCBmb3IgdGhlIHNlYXJjaCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBw
cmV2aW91cyByZXN1bHQgcmFuZ2UuCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNl
IFZpc2libGVQb3NpdGlvbiBoZXJlOiBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIFRleHRJdGVyYXRv
ciB0byBnbyBvdmVyIHZpc2libGUgdGV4dCBub2Rlcy4KKyAgICAgICAgc2VhcmNoUmFuZ2UtPnN0
YXJ0ID0gV1RGTW92ZShyZXN1bHRSYW5nZS5lbmQpOwogCi0gICAgICAgIE5vZGUqIHNoYWRvd1Ry
ZWVSb290ID0gc2VhcmNoUmFuZ2UtPnNoYWRvd1Jvb3QoKTsKLSAgICAgICAgaWYgKHNlYXJjaFJh
bmdlLT5jb2xsYXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5v
ZGVzKCkpOworICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zdGFydC5jb250YWlu
ZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PmVuZCA9IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290
KTsKKyAgICAgICAgfQogICAgIH0gd2hpbGUgKHRydWUpOwogCiAgICAgcmV0dXJuIG1hdGNoQ291
bnQ7CkBAIC0zOTQwLDIyICszOTIyLDI0IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlKTsKIH0KIAot
UmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBj
b25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlk
YXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gbWFr
ZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwgZW5kT2ZQ
YXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byBzdGFydCA9IG1h
a2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
KSk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgKnN0YXJ0LCAqZW5kIH0gfTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEVkaXRvcjo6cmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVz
dWx0JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKCFyZXN1bHQucmFuZ2UubGVuZ3RoKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlID0g
Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGF1dG8gY29udGV4dFJhbmdlID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpOwogICAgIGlmICghY29udGV4dFJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpj
b250ZXh0UmFuZ2UsIHJlc3VsdC5yYW5nZSkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0
LnJhbmdlKTsKIH0KIAogdm9pZCBFZGl0b3I6OnNjaGVkdWxlRWRpdG9yVUlVcGRhdGUoKQpAQCAt
NDIyNSw4ICs0MjA5LDggQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRl
eHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKICAgICBtX2lzSGFuZGxpbmdBY2Nl
cHRlZENhbmRpZGF0ZSA9IHRydWU7CiAKICAgICBpZiAoYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4
dENoZWNraW5nUmVzdWx0KGFjY2VwdGVkQ2FuZGlkYXRlKSkgewotICAgICAgICBpZiAoc2hvdWxk
SW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQotICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kOjpjcmVhdGUocmFuZ2UuZ2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2Vt
ZW50KS0+YXBwbHkoKTsKKyAgICAgICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5k
aWRhdGUucmVwbGFjZW1lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAg
ICAgICAgICAgIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKICAg
ICB9IGVsc2UKICAgICAgICAgaW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVu
dCwgbnVsbHB0cik7CiAKQEAgLTQyNTgsMTYgKzQyNDIsMTYgQEAgdm9pZCBFZGl0b3I6OnRvZ2ds
ZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCkKICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNo
b3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAotUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCiB7Ci0gICAgLy8gRklYTUU6
IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFu
Y2hvciB0YWcgaXQncyBpbj8KLSAgICAvLyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5h
bGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxl
LgotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgTm9kZSog
Y29tbW9uQW5jZXN0b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBB
U1NFUlQoY29tbW9uQW5jZXN0b3IpOwotICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBI
VE1MTmFtZXM6OmFUYWcpOwotICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0
aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5h
bmNob3JOb2RlKCkpLCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5n
ZS0+c2V0U3RhcnQoKmVuY2xvc2luZ0FuY2hvciwgMCk7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3
ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcg
aXQncyBpbj8gV2hvZXZlciB3cm90ZSB0aGlzIGNvZGUgb3JpZ2luYWxseSBmb3Jnb3QgdG8gbGVh
dmUgdXMgYSBjb21tZW50IGV4cGxhaW5pbmcgdGhlIHJhdGlvbmFsZS4KKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGlmIChyYW5nZSkgeworICAgICAgICBpZiAoYXV0byBl
bmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5O
b2RlKGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLT5zdGFydC5jb250YWluZXIsIHJhbmdl
LT5lbmQuY29udGFpbmVyKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKKyAgICAgICAgICAg
IGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShyYW5nZS0+
c3RhcnQuY29udGFpbmVyLnB0cigpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdl
LT5zdGFydCkpID49IDApCisgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5k
YXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVuY2xvc2luZ0FuY2hvcik7CisgICAgICAgIH0K
KyAgICB9CiAgICAgcmV0dXJuIHJhbmdlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRl
eCA2OWQ2MDU5MzAyNjUyZjY3MmZkMjU5MTUyZDNkY2ZiNDVmZjA5MjZmLi45ZGVkZGNhMzgzNmYx
NTMwMzZjZmFmOWM4MGRhZDM5OTQ0ZjQ0OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjEzLDEwICsyMTMsMTAgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgb3V0ZGVudCgpOwogICAgIHZvaWQgdHJhbnNwb3NlKCk7CiAKLSAgICBi
b29sIHNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSosIEVkaXRv
ckluc2VydEFjdGlvbik7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYs
IFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBcHBs
eVN0eWxlKFN0eWxlUHJvcGVydGllcyosIFJhbmdlKik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRG
cmFnbWVudChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jiwg
RWRpdG9ySW5zZXJ0QWN0aW9uKTsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShj
b25zdCBTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2Vs
ZWN0aW9uKTsKIApAQCAtMzIyLDE2ICszMjIsMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNTcGVs
bENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdDsKICAgICBib29sIGlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3IoTm9kZSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
d29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywg
Ym9vbCBkb1JlcGxhY2VtZW50KTsKLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Cisg
ICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgdm9pZCBtYXJrQmFk
R3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlv
biwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVj
dGlvbik7CiAgICAgdm9pZCBtYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVz
dCYsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKFJhbmdlJiwgY29uc3QgU3RyaW5n
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5n
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGlzT3Zlcndy
aXRlTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX292ZXJ3cml0ZU1vZGVFbmFibGVkOyB9
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwog
Ci0gICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlv
blNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgUmVmUHRyPFJhbmdlPiYmIHNwZWxsaW5nUmFuZ2UsIFJl
ZlB0cjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiYg
Z3JhbW1hclJhbmdlKTsKKyAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHNwZWxsaW5nUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0
b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFt
bWFyUmFuZ2UpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgTk9fUkVUVVJOX0RVRV9U
T19BU1NFUlQKICNlbmRpZgpAQCAtMzQzLDggKzM0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNo
b3dTcGVsbGluZ0d1ZXNzUGFuZWwoKTsKICAgICBib29sIHNwZWxsaW5nUGFuZWxJc1Nob3dpbmco
KTsKIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKik7Ci0gICAgYm9vbCBzaG91
bGRFbmRFZGl0aW5nKFJhbmdlKik7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3Qg
U2ltcGxlUmFuZ2UmKTsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFu
Z2UmKTsKIAogICAgIHZvaWQgY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKICAgICBib29sIGNh
blVuZG8oKSBjb25zdDsKQEAgLTM1Niw3ICszNTYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRp
ZEJlZ2luRWRpdGluZygpOwogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpOwotICAgIHZvaWQgd2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKik7CisgICAgdm9pZCB3aWxsV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAgICAg
dm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogCiAgICAgdm9pZCBzaG93Rm9u
dFBhbmVsKCk7CkBAIC0zODAsNyArMzgwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYpOyAvLyBpZiBubyBleGlzdGlu
ZyBjb21wb3NpdGlvbiwgcmVwbGFjZXMgc2VsZWN0aW9uCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjYW5jZWxDb21wb3NpdGlvbigpOwogICAgIGJvb2wgY2FuY2VsQ29tcG9zaXRpb25JZlNlbGVj
dGlvbklzSW52YWxpZCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gY29tcG9z
aXRpb25SYW5nZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBjb21wb3NpdGlvblJhbmdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBn
ZXRDb21wb3NpdGlvblNlbGVjdGlvbih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVk
JiBzZWxlY3Rpb25FbmQpIGNvbnN0OwogCiAgICAgLy8gZ2V0dGluZyBpbnRlcm5hdGlvbmFsIHRl
eHQgaW5wdXQgY29tcG9zaXRpb24gc3RhdGUgKGZvciB1c2UgYnkgSW5saW5lVGV4dEJveCkKQEAg
LTQwMCw3ICs0MDAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VzKGJvb2wsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWxFeGlz
dGluZ1NlbGVjdGlvbiA9IFJldmVhbFNlbGVjdGlvbjo6WWVzKTsKICAgICBib29sIGlnbm9yZVNl
bGVjdGlvbkNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZVNlbGVjdGlvbkNoYW5nZXM7
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25z
dCBJbnRQb2ludCYgd2luZG93UG9pbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CiAK
ICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAKICAgICBF
ZGl0aW5nQmVoYXZpb3IgYmVoYXZpb3IoKSBjb25zdDsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSgpOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzZWxlY3RlZFJhbmdlKCk7
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29u
ZmlybU1hcmtlZFRleHQoKTsKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgUmFu
Z2UqLCBGaW5kT3B0aW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiwgRmluZE9wdGlvbnMpOwogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyaygp
IGNvbnN0OyAvLyBNYXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCiAgICAgdm9pZCBz
ZXRNYXJrKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKQEAgLTQ1NSwxMyArNDU1LDEzIEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShT
dHlsZVByb3BlcnRpZXMmICwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgp
IGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShS
YW5nZSopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZmlyc3RSZWN0Rm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdDsKIAogICAgIHZvaWQgc2VsZWN0aW9uV2lsbENo
YW5nZSgpOwogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIE9wdGlvblNldDxGcmFtZVNlbGVjdGlvbjo6U2V0U2Vs
ZWN0aW9uT3B0aW9uPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVFZGl0b3JVSU5v
d0lmU2NoZWR1bGVkKCk7CiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdT
ZWxlY3Rpb24sIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBS
YW5nZSosIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVj
dG9yPFJlZlB0cjxSYW5nZT4+Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY291bnRN
YXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
LCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxT
aW1wbGVSYW5nZT4qKTsKICAgICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQo
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWQoYm9vbCk7CiAKQEAgLTU0NSw4ICs1NDUsOCBAQCBwdWJsaWM6CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNr
aW5nUmVzdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5n
ZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9y
VGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjb250ZXh0UmFuZ2VGb3JDYW5k
aWRhdGVSZXF1ZXN0KCkgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9y
VGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OwogICAg
IGJvb2wgaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0hh
bmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGU7IH0KIAogICAgIHZvaWQgc2V0SXNHZXR0aW5nRGljdGlv
bmFyeVBvcHVwSW5mbyhib29sIGIpIHsgbV9pc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvID0g
YjsgfQpAQCAtNTc5LDcgKzU3OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRG9jdW1lbnQm
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCi0gICAgYm9vbCBjYW5E
ZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OworICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQmKTsKICAgICB2b2lkIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJik7CiAgICAgdm9pZCBwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQq
LCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+KTsKQEAgLTU4OCw3ICs1ODgsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoRG9jdW1lbnRGcmFnbWVudCYpOwogCiAg
ICAgdm9pZCByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xs
QWxpZ25tZW50JiA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCwgUmV2ZWFs
RXh0ZW50T3B0aW9uID0gRG9Ob3RSZXZlYWxFeHRlbnQpOwotICAgIHZvaWQgbWFya01pc3NwZWxs
aW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxs
aW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHZvaWQgbWFy
a01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBj
aGVja1NwZWxsaW5nLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5n
ZSk7CiAgICAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdU
eXBlTWFzayhjb25zdCBOb2RlJiByb290RWRpdGFibGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENo
ZWNraW5nVHlwZT4pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlbGVjdGVkVGV4dChU
ZXh0SXRlcmF0b3JCZWhhdmlvcikgY29uc3Q7CkBAIC02MDgsNyArNjA4LDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwogCi0gICAgUmVm
UHRyPFJhbmdlPiBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk7CisgICAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggZDZlYTQyNmQ3Zjdm
ZTc2NWZiMDA5N2UzZDk1YWVjNzU5ZGE0MjdlZi4uNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0NTIy
OTEwZTY1YzZhOTEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CkBAIC0xNzYsMTUgKzE3NiwxNSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0Tm9kZShGcmFt
ZSYgZnJhbWUsIFJlZjxOb2RlPiYmIGNvbnRlbnQpCiBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rp
b25Ub0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIHNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5
KTsKICAgICBhdXRvIG5ld1JhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFuZXdSYW5nZSB8fCBuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBhdXRvIG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgYXV0byBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAgIGlmICgh
ZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKG9sZFJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQo
KSwgYWZmaW5pdHksIGZhbHNlKSkKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpuZXdSYW5nZSkucHRyKCks
IGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTIyNiwxMSArMjI2LDExIEBAIHN0YXRpYyB1bnNpZ25lZCB2
ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKEZyYW1lJiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFNjcm9sbGJhcjo6cGFnZVN0ZXAoaGVpZ2h0KSk7CiB9CiAKLXN0YXRpYyBS
ZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmdlJiBhLCBSYW5nZSYgYikKK3N0YXRpYyBT
aW1wbGVSYW5nZSB1bmlvblJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxl
UmFuZ2UmIGIpCiB7Ci0gICAgUmFuZ2UmIHN0YXJ0ID0gYS5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6
IGI7Ci0gICAgUmFuZ2UmIGVuZCA9IGEuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRf
VE9fRU5ELCBiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7Ci0gICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUoYS5vd25lckRvY3VtZW50KCksICZzdGFydC5zdGFydENvbnRhaW5lcigp
LCBzdGFydC5zdGFydE9mZnNldCgpLCAmZW5kLmVuZENvbnRhaW5lcigpLCBlbmQuZW5kT2Zmc2V0
KCkpOworICAgIGF1dG8mIHN0YXJ0ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyBhIDogYjsKKyAgICBhdXRvJiBlbmQgPSBjcmVhdGVMaXZl
UmFuZ2UoYSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRl
TGl2ZVJhbmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7CisgICAgcmV0
dXJuIHsgc3RhcnQuc3RhcnQsIGVuZC5lbmQgfTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1
bmN0aW9ucwpAQCAtMzU0LDcgKzM1NCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01h
cmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAg
YXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYg
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQg
PSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFu
Z2UoKm1hcmspLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdl
KHVuaW9uUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSkucHRy
KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
ICAgICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN0YXRpYyBib29sIGV4
ZWN1dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0CiAgICAgICAgIFBBTDo6c3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25E
T01SYW5nZXMoY3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwgKnNlbGVjdGlvbikuZ2V0KCksIERPV05T
VFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdl
cygqbWFyaywgKnNlbGVjdGlvbikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6
U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggMzNhOTI3ZDU0OGZmZGI2Zjlj
YjFkNTZmODRlMGRmY2QwMWE3NzdiMC4uYjBjNjkzZTRiNjgyYTQxZjFjODMzNmUwOTIwNDY5MGRi
Zjc5NmM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAg
LTIzMTAsNyArMjMxMCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZG9j
dW1lbnQtPmZyYW1lKCkgJiYgbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2Fs
bGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1
cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJl
dHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rp
b246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29u
dGVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
CmluZGV4IGM1Y2JjM2Y5N2NkOGE5OTJjMGFlZTdhMzFhODllZmQ4N2NmYTNkNzguLmVlZmU4ZmQ5
NTFjY2ZhNGViNjYxODI3ZDU4ZTY5ZWE1OWI1ODZiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtODgsMTQgKzg4LDEzIEBAIFN0cmluZyBFZGl0
b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCgpCiAKIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJk
VHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyaW5n
PiYgb3V0VHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIG91dERhdGEpCiB7Ci0g
ICAgYXV0byYgZG9jdW1lbnQgPSBlbGVtZW50LmRvY3VtZW50KCk7Ci0gICAgYXV0byBlbGVtZW50
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9z
aXRpb25Jc0JlZm9yZUFuY2hvciB9LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0Fm
dGVyQW5jaG9yIH0pOwotICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJh
bmdlKGVsZW1lbnRSYW5nZS5wdHIoKSwgb3V0VHlwZXMsIG91dERhdGEpOworICAgIGF1dG8gZWxl
bWVudFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShlbGVtZW50KTsKKyAgICBjbGllbnQo
KS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoZWxlbWVudFJhbmdlLCBvdXRUeXBlcywgb3V0RGF0
YSk7CiAKICAgICBvdXRUeXBlcy5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlw
ZSgpKTsKLSAgICBvdXREYXRhLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGRvY3VtZW50
Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZl
cigpKTsKKyAgICBvdXREYXRhLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQu
ZG9jdW1lbnQoKS5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVhdGVT
aGFyZWRCdWZmZXIoKSk7CiAKLSAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlKGVsZW1lbnRSYW5nZS5wdHIoKSkpIHsKKyAgICBpZiAoYXV0byBhcmNoaXZlID0g
TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2UpLmdl
dCgpKSkgewogICAgICAgICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hpdmUtPnJhd0Rh
dGFSZXByZXNlbnRhdGlvbigpKSB7CiAgICAgICAgICAgICBvdXRUeXBlcy5hcHBlbmQoV2ViQXJj
aGl2ZVBib2FyZFR5cGUpOwogICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQoU2hhcmVkQnVmZmVy
OjpjcmVhdGUod2ViQXJjaGl2ZURhdGEuZ2V0KCkpKTsKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lk
IEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2Fy
ZCkKICAgICAgICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0
dGFjaG1lbnRzXSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CiAg
ICAgICAgIGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5n
ZXQoKSk7CiAgICAgICAgIGNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFy
Y2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKLSAgICAgICAgY2xp
ZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdl
dCgpLCBjb250ZW50LmNsaWVudFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOworICAgICAgICBj
bGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgpLCBjb250ZW50
LmNsaWVudFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOwogICAgIH0KICAgICBjb250ZW50LmRh
dGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsKICAgICBjb250ZW50LmRh
dGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VB
bHRUZXh0KCk7CkBAIC0xNDQsNyArMTQzLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9u
KFBhc3RlYm9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKICAgICB3ZWJDb250
ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1
dGVkU3RyaW5nKHN0cmluZy5nZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5IVE1MRm9ybWF0
ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5TdHJpbmdG
b3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwot
ICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFu
Z2UoKS5nZXQoKSwgd2ViQ29udGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnREYXRh
KTsKKyAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgp
LCB3ZWJDb250ZW50LmNsaWVudFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwogCiAgICAg
cGFzdGVib2FyZFdyaXRlckRhdGEuc2V0V2ViQ29udGVudChXVEZNb3ZlKHdlYkNvbnRlbnQpKTsK
IH0KQEAgLTE4NCwxMiArMTgzLDEyIEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkCiAKICAgICBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpKSB7CiAgICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMoKm1fZG9jdW1lbnQuZnJhbWUoKSwgYXR0cmlidXRlZFN0cmluZykpIHsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFu
Z2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICAgICAgaWYg
KHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZy
YWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5k
bGluZyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGF0
dHJpYnV0ZWRTdHJpbmcuc3RyaW5nOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0
LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAg
ICAgICAgaWYgKHNob3VsZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0KHRleHQs
IGZhbHNlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0K
aW5kZXggMzEyMzI1ZjI3NjIxY2JiODg0OTJhMDQyNmVlNTkxNjU2N2U0YTE2MC4uNmMyNTQ3OTY1
NTM2MDg0YjE2Mzg4MDQ5ZDQ1YTU5OWNmOTYwNjcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
aW9zL0VkaXRvcklPUy5tbQpAQCAtMjA2LDMwICsyMDYsMjYgQEAgdm9pZCBFZGl0b3I6OndyaXRl
SW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRWxlbWVudCYgaW1hZ2VF
bGVtZW4KICAgICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZSA9IHBhc3RlYm9hcmQu
cmVzb3VyY2VNSU1FVHlwZShjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKICAg
ICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VEYXRhID0gY2FjaGVkSW1hZ2UtPnJlc291cmNlQnVm
ZmVyKCk7CiAKLSAgICBpZiAoIXBhc3RlYm9hcmQuaXNTdGF0aWMoKSkgewotICAgICAgICBQb3Np
dGlvbiBiZWZvcmVJbWFnZVBvc2l0aW9uKCZpbWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlv
bklzQmVmb3JlQW5jaG9yKTsKLSAgICAgICAgUG9zaXRpb24gYWZ0ZXJJbWFnZVBvc2l0aW9uKCZp
bWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwotICAgICAgICBh
dXRvIGltYWdlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGltYWdlRWxlbWVudC5kb2N1bWVudCgpLCBi
ZWZvcmVJbWFnZVBvc2l0aW9uLCBhZnRlckltYWdlUG9zaXRpb24pOwotICAgICAgICBjbGllbnQo
KS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShpbWFnZVJhbmdlLnB0cigpLCBwYXN0
ZWJvYXJkSW1hZ2UuY2xpZW50VHlwZXMsIHBhc3RlYm9hcmRJbWFnZS5jbGllbnREYXRhKTsKLSAg
ICB9CisgICAgaWYgKCFwYXN0ZWJvYXJkLmlzU3RhdGljKCkpCisgICAgICAgIGNsaWVudCgpLT5n
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGltYWdlRWxlbWVu
dCksIHBhc3RlYm9hcmRJbWFnZS5jbGllbnRUeXBlcywgcGFzdGVib2FyZEltYWdlLmNsaWVudERh
dGEpOwogCiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwogfQogCiB2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRp
b25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAg
IGJvb2wgYWxsb3dQbGFpblRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxv
d1BsYWluVGV4dCk7CiAgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJh
bWUoKSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFzdGVib2Fy
ZEl0ZW1zID0gY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7Ci0gICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdt
ZW50RnJvbURlbGVnYXRlKGkpOworICAgICAgICBhdXRvIGZyYWdtZW50ID0gY2xpZW50KCktPmRv
Y3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaSk7CiAgICAgICAgIGlmICghZnJhZ21lbnQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVhZGVyLmFkZEZyYWdtZW50KGZyYWdtZW50
LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IHJlYWRlci5mcmFnbWVudDsKKyAgICBhdXRvIGZyYWdtZW50ID0gV1RGTW92
ZShyZWFkZXIuZnJhZ21lbnQpOwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgYm9vbCBj
aG9zZVBsYWluVGV4dElnbm9yZWQ7CiAgICAgICAgIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21Q
YXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWlu
VGV4dElnbm9yZWQpOwpAQCAtMjM4LDcgKzIzNCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4K
ICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90
YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0g
ICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2Uu
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYg
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51
bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBmYWxzZSwg
b3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFp
bEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RWRpdG9yTWFjLm1tCmluZGV4IDFjZDhjMzk0YTc2OTFjNTVmNGQ4ZGQzNmRlODU5NmU3MDc3N2I3
YjUuLmJhMzFjMTg3NzMyMzRiOWFkOTM5YWQwZDMzMTkzMThjNjJkOGIzYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBFZGl0
b3I6OnNob3dDb2xvclBhbmVsKCkKIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQog
ewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKIAogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0JFR0lOCiAgICAgLy8gRklYTUU6IEhvdyBjYW4gdGhpcyBoYXJkLWNvZGVkIHBhc3RlYm9h
cmQgbmFtZSBiZSByaWdodCwgZ2l2ZW4gdGhhdCB0aGUgcGFzc2VkLWluIHBhc3RlYm9hcmQgaGFz
IGEgbmFtZT8KQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9h
cmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgIGlm
IChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikp
CiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAo
ZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJ
bnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBj
YW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGZhbHNlLCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2tx
dW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6
UmVzcGVjdEJsb2NrcXVvdGUgKTsKIAogICAgIGNsaWVudCgpLT5zZXRJbnNlcnRpb25QYXN0ZWJv
YXJkKFN0cmluZygpKTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5v
ZGVGcm9tUGFzdGVib2FyZChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7CiAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSB3ZWJD
b250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCwgcmFuZ2UsIHRydWUsIGNob3NlUGxhaW5U
ZXh0KSkgewogICAgICAgICBtYXliZUNvcHlOb2RlQXR0cmlidXRlc1RvRnJhZ21lbnQoKm5vZGUs
ICpmcmFnbWVudCk7Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQs
IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKKyAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChm
cmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChw
YXN0ZWJvYXJkKSwgZmFsc2UsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVv
dGUpOwogICAgIH0KIApAQCAtMTc2LDExICsxNzYsOSBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBF
ZGl0b3I6OmltYWdlSW5XZWJBcmNoaXZlRm9ybWF0KEVsZW1lbnQmIGltYWdlRWxlbWVudCkKIAog
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZChj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewotICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJm
YWNlIHRvIHRoaXMgZnVuY3Rpb24gaXMgYXdrd2FyZC4gV2UnZCBwcm9iYWJseSBiZSBiZXR0ZXIg
b2ZmIHdpdGggdGhyZWUgc2VwYXJhdGUgZnVuY3Rpb25zLgotICAgIC8vIEFzIG9mIHRoaXMgd3Jp
dGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4gV2ViS2l0MiB0byBpbXBsZW1lbnQgdGhlIG1ldGhv
ZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDp0eXBlczpdLAotICAgIC8vIHdo
aWNoIGlzIG9ubHkgdXNlZCB0byBzdXBwb3J0IE9TIFggc2VydmljZXMuCisgICAgLy8gRklYTUU6
IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlvbiBpcyBhd2t3YXJkLiBXZSdkIHByb2JhYmx5
IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBhcmF0ZSBmdW5jdGlvbnMuIEFzIG9mIHRoaXMg
d3JpdGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4gV2ViS2l0MiB0byBpbXBsZW1lbnQgdGhlIG1l
dGhvZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDp0eXBlczpdLCB3aGljaCBp
cyBvbmx5IHVzZWQgdG8gc3VwcG9ydCBPUyBYIHNlcnZpY2VzLgogCi0gICAgLy8gRklYTUU6IERv
ZXMgdGhpcyBmdW5jdGlvbiByZWFsbHkgbmVlZCB0byB1c2UgYWRqdXN0ZWRTZWxlY3Rpb25SYW5n
ZSgpPyBCZWNhdXNlIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkganVzdCB1c2VzIHNlbGVj
dGVkUmFuZ2UoKS4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBuZWVk
IHRvIHVzZSBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk/IEJlY2F1c2Ugd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKSBqdXN0IHVzZXMgc2VsZWN0ZWRSYW5nZSgpLiBUaGlzIGlzIHRoZSBvbmx5
IGZ1bmN0aW9uIGluIFdlYktpdCB0aGF0IHVzZXMgYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZS4KICAg
ICBpZiAoIWNhbkNvcHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggOTRmYjMwZjUxMWIzYjM3OTUyMmFhNjlkMmNm
ZmZkYWU5MDA1NzAyNi4uMGMxNGFlNjkwY2QzZjQ2YTYzYmFlNjE2MDg1NGYxYTAzYjgxMWI0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKQEAgLTE5MSw3ICsxOTEsNyBA
QCBwdWJsaWM6CiAgICAgRW1wdHlFZGl0b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAKIHByaXZhdGU6
Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgc21hcnRJbnNlcnREZWxldGVF
bmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzU2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Ym9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC0yMDAsMTUgKzIwMCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9nZ2xlR3Jh
bW1hckNoZWNraW5nKCkgZmluYWwgeyB9CiAgICAgaW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFn
KCkgZmluYWwgeyByZXR1cm4gLTE7IH0KIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJh
bmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmco
UmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRp
dG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJhbmdlKiwgRUFmZmluaXR5LCBib29sKSBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNp
bXBsZVJhbmdlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEVuZEVk
aXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jiwg
RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
LCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVBZmZpbml0eSwgYm9vbCkgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMq
LCBSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRBcHBseVN0
eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYp
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBkaWRBcHBseVN0eWxlKCkgZmluYWwg
eyB9Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKikg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVs
ZXRlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQogCiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSBmaW5hbCB7IH0KICAgICB2
b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIGZpbmFsIHsgfQpAQCAtMjE5LDkgKzIxOSw5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZpbmFsIHsgfQog
ICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZvaWQgZGlkRW5kVXNlclRy
aWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHdpbGxXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopIGZpbmFsIHsgfQorICAgIHZvaWQgd2lsbFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpIGZpbmFs
IHsgfQogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2UqLCBWZWN0b3I8
U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYs
IFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYpIGZpbmFsIHsg
fQogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpIGZpbmFsIHsgfQogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRo
U29mdFNwYWNlcyhUZXh0Q2hlY2tpbmdSZXN1bHQpIGZpbmFsIHsgfQogCkBAIC0yNjEsNyArMjYx
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVN0cmluZ0ZvckZpbmQoY29uc3QgU3RyaW5n
JikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3Vt
ZW50RnJhZ21lbnQmLCBSYW5nZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFNpbXBsZVJh
bmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25zdCBTdHJpbmcmKSBmaW5hbCB7
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5k
ZXggNDFmN2E3ZWM3YTQxOTE3NzkxYjI4NWIxOTQzOWQyYzFiZTlkYWVmZC4uZWVjZDgwNTk4N2Jh
YjdiYTA4YzgxYjBlYTY4Mjg0NDE0M2YxNWNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMzc0LDcgKzM3NCw3IEBAIHZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlv
biBhY3Rpb24sIGNvCiAjZW5kaWYKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5n
R3Vlc3M6IHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxk
SW5zZXJ0VGV4dCh0aXRsZSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKSB7CisgICAgICAgIGlm
IChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkgewogICAgICAgICAg
ICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9uPiByZXBs
YWNlT3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsKIAogICAgICAgICAgICAgaWYgKGZy
YW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dp
dGhvdXRTZWxlY3Rpb24oKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFn
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApp
bmRleCA3MzE3YmZkZjQ2ZDkyYWMzZDk2NTBmYzMzNDY0ZjUwZjZlZWE1OTI3Li44MTBkMmZjNzJh
MzI1Y2U0ZDQyMGEzY2NhMzZkOTJiMzAwY2E1ODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcApAQCAtNTY4LDcgKzU2OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNv
bmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBz
ZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvciksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFpbm5lckZy
YW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxlKHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFu
Z2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQorICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigp
LnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsICppbm5lclJhbmdlKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rp
b24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGlubmVy
RnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5bGUoc3R5bGUucHRyKCksIEVkaXRBY3Rpb246OlNldENv
bG9yKTsKQEAgLTYwMyw3ICs2MDMsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVk
aXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdD
YXJldC5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFp
blRleHQgPSBmYWxzZTsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7Ci0gICAgICAgIGlm
ICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkp
CisgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgq
ZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpAQCAt
NjI5LDcgKzYyOSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29u
c3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAg
U3RyaW5nIHRleHQgPSBkcmFnRGF0YS5hc1BsYWluVGV4dCgpOwotICAgICAgICBpZiAodGV4dC5p
c0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAgICAgICBp
ZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsICpyYW5n
ZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihE
cmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKQEAgLTEwMjIsNyArMTAyMiw3
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFn
U3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8RHJhCiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJh
bmdlID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFuZ2UpOwogCi0gICAgICAgICAgICBzcmMuZWRp
dG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZSgqc2Vs
ZWN0aW9uUmFuZ2UpLnB0cigpKTsKKyAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKnNlbGVjdGlvblJhbmdlKTsKIAogICAgICAgICAgICAgaWYg
KGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAobXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpCkBA
IC0xMTkwLDcgKzExOTAsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUm
IHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgT3B0aW9uU2V0PERyYQogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgICAgICAgICAgaWYgKCFwcm9taXNlZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNs
aWVudCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBp
cyBzcGVjaWZpZWQsIGNhbGwgb3V0IHRvIHRoZSBpbmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUg
dGhlIHBhc3RlYm9hcmQgd2l0aCBkYXRhLgotICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3JlYXRlTGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzcmMuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLndy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAg
ICAgICAgICAgICAgIGVkaXRvci5kaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKaW5kZXggNzc5MzE3MWZlMGFk
YjExN2RhZmY0MTYwZGFmZjY5MWNhNDQ2MGMzMS4uOWRlNzA2NTRmMjBiNTgyM2Y3NjU2MDBlMTQx
NmI5ZDhjM2E5MWRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCkBAIC00Myw3ICs0
Myw2IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7
CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBT
dHlsZVByb3BlcnRpZXM7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKQEAgLTUxLDEyICs1MCwx
MyBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBzdHJ1Y3QgR2FwUmVjdHM7CiBzdHJ1Y3Qg
R3JhbW1hckRldGFpbDsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAogY2xhc3MgRWRpdG9yQ2xpZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FZGl0b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgPSAwOyAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
ID0gMDsKQEAgLTY1LDE3ICs2NSwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRvZ2ds
ZUdyYW1tYXJDaGVja2luZygpID0gMDsKICAgICB2aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1
bWVudFRhZygpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFu
Z2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9y
SW5zZXJ0QWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29u
c3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSog
dG9SYW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNo
b3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJldmVhbEN1cnJlbnRTZWxl
Y3Rpb25BZnRlckluc2VydGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH07CiAgICAgdmlydHVh
bCBib29sIHNob3VsZFN1cHByZXNzUGFzc3dvcmRFY2hvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH07CiAgICAgCi0gICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0
aWVzKiwgUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBseVN0eWxlKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNv
bnN0IFNpbXBsZVJhbmdlJikgPSAwOwogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkK
ICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIC8qIGlkZW50aWZpZXIgKi8sIGNvbnN0IFN0cmluZyYgLyogY29udGVudFR5cGUgKi8sIGNv
bnN0IFN0cmluZyYgLyogcHJlZmVycmVkRmlsZU5hbWUgKi8sIFJlZjxTaGFyZWRCdWZmZXI+JiYp
IHsgfQpAQCAtOTUsOSArOTUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEVuZFVz
ZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNoYW5nZWQoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNo
YXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBw
YXN0ZWJvYXJkRGF0YSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0Zv
clNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0
KSB7IH0KIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBzZWxlY3Rpb24gYXMg
YSB0eXBlIG9mIGNsaXBib2FyZC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNHbG9iYWxTZWxl
Y3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29T
dGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92
ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFn
bWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpID0gMDsK
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93Rm9udFBhbmVsKCkgY29uc3QgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNmYxZjFiNGFkODBiMjFmOTk1YzFmZWU4
ZDcyYWFkYzk2MjcxNWIyYi4uNWVkYTgzMGVjZjQ2NWQwZGQwYjI0N2ZhZTAwMjBjNWUyNTJlYjhl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzA4Miw4ICszMDgyLDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCkKICAgICBQ
b3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwogCiAgICAgaWYgKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCkgfHwgc2VsZWN0
aW9uLmlzUmFuZ2UoKSkpIHsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJh
bWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblJh
bmdlKS5nZXQoKSk7CisgICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZSgqc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAg
ICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVj
dC54KCk7CiAgICAgICAgIC8vIEluIGEgbXVsdGlsaW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkg
d291bGQgZW5kdXAgb24gdGhlIG5leHQgbGluZSwgc28gLTEuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAKaW5kZXggM2YzNzIzMmM3ZTk1YmEyMDA1MzkxMTA0OWFlODA0MDI0
ZjYxNjc4OS4uN2UyMTJlYWY0Yjk1MmE4NmRiNGZkMTA4MDc2ZDIwNTk2ZDE2NTIyMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtNzUyLDE3ICs3NTIsMTYgQEAg
RWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnRPclNjb3Bl
T3duZXIoY29uc3QgRm9jdXNOYXZpZ2EKICAgICByZXR1cm4gcHJldmlvdXNFbGVtZW50V2l0aExv
d2VyVGFiSW5kZXgoc2NvcGUsIGxhc3QsIHN0YXJ0aW5nVGFiSW5kZXgsIGV2ZW50KTsKIH0KIAot
c3RhdGljIGJvb2wgcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKE5vZGUgKm5vZGUpCitzdGF0aWMg
Ym9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBB
U1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSk7CisgICAg
QVNTRVJUKGVsZW1lbnQuaGFzRWRpdGFibGVTdHlsZSgpKTsKIAotICAgIE5vZGUqIHJvb3QgPSBu
b2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9j
dW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8gcm9vdCA9IGVsZW1lbnQucm9vdEVkaXRhYmxlRWxl
bWVudCgpOworICAgIGF1dG8gZnJhbWUgPSBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lIHx8ICFyb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gZnJhbWUtPmVkaXRvcigpLnNob3VsZEVuZEVkaXRpbmcocmFuZ2VPZkNvbnRlbnRzKCpyb290
KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRFbmRFZGl0aW5nKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCkpOwogfQogCiBzdGF0aWMgdm9pZCBj
bGVhclNlbGVjdGlvbklmTmVlZGVkKEZyYW1lKiBvbGRGb2N1c2VkRnJhbWUsIEZyYW1lKiBuZXdG
b2N1c2VkRnJhbWUsIE5vZGUqIG5ld0ZvY3VzZWROb2RlKQpAQCAtODQxLDcgKzg0MCw3IEBAIGJv
b2wgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBG
cmFtZSYgbmV3Rm9jdXNlZEZyYW1lCiAgICAgfQogCiAgICAgLy8gRklYTUU6IE1pZ2h0IHdhbnQg
dG8gZGlzYWJsZSB0aGlzIGNoZWNrIGZvciBjYXJldEJyb3dzaW5nCi0gICAgaWYgKG9sZEZvY3Vz
ZWRFbGVtZW50ICYmIG9sZEZvY3VzZWRFbGVtZW50LT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAm
JiAhcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKG9sZEZvY3VzZWRFbGVtZW50KSkKKyAgICBpZiAo
b2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xkRm9jdXNlZEVsZW1lbnQtPmlzUm9vdEVkaXRhYmxlRWxl
bWVudCgpICYmICFyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoKm9sZEZvY3VzZWRFbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9wYWdlLmVkaXRvckNsaWVudCgpLndpbGxT
ZXRJbnB1dE1ldGhvZFN0YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGZmMWEyN2ViYzk1
ZmM3YzRjNDZhNWI1MDIzMzc5N2FlODk5NzhlN2UuLmQ0ZTJiZjA5OTQ3ZmYzZTk1ZTQ5Njg4OWUz
ZWIxNmIwMWU4ZGM1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MjEsMjggKzgyMSwyNSBA
QCBEb2N1bWVudCogRnJhbWU6OmRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQp
CiAKIFJlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZy
YW1lUG9pbnQpCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAg
IGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAg
ICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7Cisg
ICAgaWYgKCFwb3NpdGlvbkJvdW5kYXJ5KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IFBvc2l0aW9uIGRlZXBQb3NpdGlvbiA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAg
VGV4dCogY29udGFpbmVyVGV4dCA9IGRlZXBQb3NpdGlvbi5jb250YWluZXJUZXh0KCk7CisgICAg
YXV0byBjb250YWluZXJUZXh0ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJU
ZXh0KCk7CiAgICAgaWYgKCFjb250YWluZXJUZXh0IHx8ICFjb250YWluZXJUZXh0LT5yZW5kZXJl
cigpIHx8IGNvbnRhaW5lclRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCkudXNlclNlbGVjdCgpID09
IFVzZXJTZWxlY3Q6Ok5vbmUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIHByZXZpb3VzID0gcG9zaXRpb24ucHJldmlvdXMoKTsKLSAgICBpZiAocHJldmlv
dXMuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3Rl
clJhbmdlID0gbWFrZVJhbmdlKHByZXZpb3VzLCBwb3NpdGlvbik7Ci0gICAgICAgIExheW91dFJl
Y3QgcmVjdCA9IGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFu
Z2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3RlclJhbmdlOworICAgIGlmIChhdXRvIHByZXZp
b3VzID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24ucHJldmlvdXMoKSkpIHsKKyAgICAgICAg
YXV0byBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcHJldmlvdXMsICpw
b3NpdGlvbkJvdW5kYXJ5IH07CisgICAgICAgIGlmIChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5n
ZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZSk7CiAgICAg
fQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgaWYg
KFJlZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBu
ZXh0KSkgewotICAgICAgICBMYXlvdXRSZWN0IHJlY3QgPSBlZGl0b3IoKS5maXJzdFJlY3RGb3JS
YW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVjdC5jb250YWlu
cyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2U7Cisg
ICAgaWYgKGF1dG8gbmV4dCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLm5leHQoKSkpIHsK
KyAgICAgICAgYXV0byBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpwb3NpdGlv
bkJvdW5kYXJ5LCAqbmV4dCB9OworICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFu
Z2UobmV4dENoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlKTsKICAgICB9CiAKICAg
ICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDhlZDdhZmYyYzNkZDFiMmUy
NGQyZWZhZTM5ZmQ4N2IyMzYzZTc2MzQuLmRlNTdmMzg1YzliMWU2MDNlMzQwZGI2NzhjNjEyMjQx
NjAwNzk3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNzEzLDE4ICs3MTMsMjAgQEAgYm9vbCBQ
YWdlOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25z
LCBEaWRXcmFwKiBkaWRXcmEKIAogdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMo
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGludCBsaW1pdCwgVmVj
dG9yPFJlZlB0cjxSYW5nZT4+JiBtYXRjaFJhbmdlcywgaW50JiBpbmRleEZvclNlbGVjdGlvbikK
IHsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJlc3VsdFJhbmdlczsKKwogICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gMDsKIAogICAgIEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBG
cmFtZSogZnJhbWVXaXRoU2VsZWN0aW9uID0gbnVsbHB0cjsKICAgICBkbyB7Ci0gICAgICAgIGZy
YW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgMCwgb3B0aW9ucywgbGlt
aXQgPyAobGltaXQgLSBtYXRjaFJhbmdlcy5zaXplKCkpIDogMCwgdHJ1ZSwgJm1hdGNoUmFuZ2Vz
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCB7
IH0sIG9wdGlvbnMsIGxpbWl0ID8gKGxpbWl0IC0gbWF0Y2hSYW5nZXMuc2l6ZSgpKSA6IDAsIHRy
dWUsICZyZXN1bHRSYW5nZXMpOwogICAgICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkKICAgICAgICAgICAgIGZyYW1lV2l0aFNlbGVjdGlvbiA9IGZyYW1lOwogICAgICAgICBm
cmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBDYW5XcmFwOjpObyk7CiAgICAgfSB3
aGlsZSAoZnJhbWUpOwogCi0gICAgaWYgKG1hdGNoUmFuZ2VzLmlzRW1wdHkoKSkKKyAgICBpZiAo
cmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGZyYW1l
V2l0aFNlbGVjdGlvbikgewpAQCAtNzMyLDcgKzczNCw3IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmlu
Z01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25z
LCBpCiAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5j
b250YWlucyhCYWNrd2FyZHMpKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hS
YW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hSYW5nZXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRS
YW5nZXNbaSAtIDFdKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9u
KCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkgewogICAgICAgICAgICAgICAg
ICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAxOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTc0MCw3ICs3NDIsNyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdl
cyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNp
emUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdlc1tpXSk7CisgICAg
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSkt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBjcmVhdGVMaXZlUmFu
Z2UocmVzdWx0UmFuZ2VzW2ldKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAg
ICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNzQ5LDEwICs3NTEsMTMgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdS
YW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJk
cykpCi0gICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IG1hdGNoUmFuZ2VzLnNpemUoKSAt
IDE7CisgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IHJlc3VsdFJhbmdlcy5zaXplKCkg
LSAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IDA7CiAg
ICAgfQorCisgICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykKKyAgICAgICAgbWF0
Y2hSYW5nZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkpOwogfQogCiBSZWZQdHI8UmFu
Z2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZl
cmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKQEAgLTc2NywxNyArNzcyLDE2IEBAIFJl
ZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFu
Z2UqIHJlZmVyZW5jZVJhbmdlLCBGCiAgICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2Ug
PyByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7
CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChS
ZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmco
dGFyZ2V0LCBmcmFtZSA9PSBzdGFydEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiAwLCBvcHRpb25z
IC0gV3JhcEFyb3VuZCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7Ci0KKyAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0
YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJhbWUgPyBtYWtlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpIDog
V1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCisgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKTsKICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRG
cmFtZShmcmFtZSwgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSwgY2FuV3JhcCk7CiAgICAg
fSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAvLyBTZWFyY2gg
Y29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHJlZmVyZW5j
ZSByYW5nZSB0aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEgYml0IGFuZCBq
dXN0IHNlYXJjaCBhZ2FpbiB3aXRoIHdyYXAgb24uCiAgICAgaWYgKGNhbldyYXAgPT0gQ2FuV3Jh
cDo6WWVzICYmIHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJl
c3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIHJl
ZmVyZW5jZVJhbmdlLCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdlOworICAgICAgICBpZiAoYXV0byByZXN1bHRS
YW5nZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBtYWtlUmFu
Z2UoKnJlZmVyZW5jZVJhbmdlKSwgb3B0aW9ucyB8IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0
aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOwog
ICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzk0LDcgKzc5OCw3IEBAIHVuc2lnbmVk
IFBhZ2U6OmZpbmRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlv
bnMgb3B0aW9ucywgdW5zCiAgICAgZG8gewogICAgICAgICBpZiAoc2hvdWxkTWFya01hdGNoZXMg
PT0gTWFya01hdGNoZXMpCiAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuc2V0TWFya2VkVGV4
dE1hdGNoZXNBcmVIaWdobGlnaHRlZChzaG91bGRIaWdobGlnaHRNYXRjaGVzID09IEhpZ2hsaWdo
dE1hdGNoZXMpOwotICAgICAgICBtYXRjaENvdW50ICs9IGZyYW1lLT5lZGl0b3IoKS5jb3VudE1h
dGNoZXNGb3JUZXh0KHRhcmdldCwgMCwgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCA/IChtYXhNYXRj
aENvdW50IC0gbWF0Y2hDb3VudCkgOiAwLCBzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hl
cywgMCk7CisgICAgICAgIG1hdGNoQ291bnQgKz0gZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hl
c0ZvclRleHQodGFyZ2V0LCBXVEY6Om51bGxvcHQsIG9wdGlvbnMsIG1heE1hdGNoQ291bnQgPyAo
bWF4TWF0Y2hDb3VudCAtIG1hdGNoQ291bnQpIDogMCwgc2hvdWxkTWFya01hdGNoZXMgPT0gTWFy
a01hdGNoZXMsIG51bGxwdHIpOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1l
LCB0cnVlLCBDYW5XcmFwOjpObyk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZTJlNTdlY2JlZjQ1ZDNjMjQ2M2Y5ODYzNzM3MTMz
MmZhYmY0NTI5Ny4uMGUxNTFmYTI4MjY4NmE0YTRhOGZjY2VmZTcwY2I1ODVkNTAwNDMzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjYwOSw3ICsyNjA5LDcgQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJuYWxzOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGV4dCwgUmVmUHRyPFIKICAgICBpZiAocGFyc2VkT3B0aW9ucy5oYXNFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIHBhcnNlZE9wdGlvbnMucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0g
ICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRleHQsIHJlZmVyZW5j
ZVJhbmdlLmdldCgpLCBwYXJzZWRPcHRpb25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGRvY3VtZW50LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRl
eHQsIG1ha2VSYW5nZShyZWZlcmVuY2VSYW5nZSksIHBhcnNlZE9wdGlvbnMucmVsZWFzZVJldHVy
blZhbHVlKCkpKTsKIH0KIAogRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRN
YXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBm
aW5kT3B0aW9ucywgY29uc3QgU3RyaW5nJiBtYXJrTWF0Y2hlcykKQEAgLTI2MjMsNyArMjYyMyw3
IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWCiAgICAgICAgIHJldHVybiBwYXJzZWRPcHRpb25z
LnJlbGVhc2VFeGNlcHRpb24oKTsKIAogICAgIGJvb2wgbWFyayA9IG1hcmtNYXRjaGVzID09ICJt
YXJrIjsKLSAgICByZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQo
dGV4dCwgbnVsbHB0ciwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgMTAwMCwg
bWFyaywgbnVsbHB0cik7CisgICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5jb3VudE1hdGNo
ZXNGb3JUZXh0KHRleHQsIFdURjo6bnVsbG9wdCwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJu
VmFsdWUoKSwgMTAwMCwgbWFyaywgbnVsbHB0cik7CiB9CiAKIEV4Y2VwdGlvbk9yPHVuc2lnbmVk
PiBJbnRlcm5hbHM6OmNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmluZE9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tQcmludGluZ1ZpZXcubW0KaW5kZXggYjJkYWRjNjk3NDA1ZDY5MTFjNmMyOTUyYjdjOWQ0
NGZmZmU1YWQ0MS4uMmIwNDIyMjRmMzljODE2MjhhOGY4ZGZmOTVhZGRhOGI5NjlhMTEyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQpAQCAtNjYz
LDcgKzY2Myw3IEBAIC0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKICAgICAg
ICAgTE9HKFByaW50aW5nLCAiLVtXS1ByaW50aW5nVmlldyAlcCByZWN0Rm9yUGFnZTolZF0gLSBk
YXRhIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIiwgc2VsZiwgKGludClwYWdlKTsKICAgICAgICAgaWYg
KCFfd2ViRnJhbWUtPnBhZ2UoKSkgewogICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgbm90IHRv
bGQgQXBwS2l0IGhvdyBtYW55IHBhZ2VzIHRoZXJlIGFyZSwgc28gaXQgd2lsbCB0cnkgdG8gcHJp
bnQgdW50aWwgYSBudWxsIHJlY3QgaXMgcmV0dXJuZWQuCi0gICAgICAgICAgICByZXR1cm4gTlNN
YWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBOU1plcm9SZWN0OwogICAg
ICAgICB9CiAgICAgICAgIC8vIFdlIG11c3QgYmUgc3RpbGwgY2FsY3VsYXRpbmcgdGhlIHBhZ2Ug
cmFuZ2UuCiAgICAgICAgIEFTU0VSVChfZXhwZWN0ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2spOwpA
QCAtNjc0LDcgKzY3NCw3IEBAIC0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UK
ICAgICAvLyBSZXR1cm5pbmcgYSBudWxsIHJlY3QgcHJldmVudHMgc2VsZWN0aW5nIG5vbi1leGlz
dGVudCBwYWdlcyBpbiBwcmV2aWV3IGRpYWxvZy4KICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHBhZ2UpID4gX3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSkgewogICAgICAgICBBU1NFUlQo
IV93ZWJGcmFtZS0+cGFnZSgpKTsKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwg
MCk7CisgICAgICAgIHJldHVybiBOU1plcm9SZWN0OwogICAgIH0KIAogICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdCA9IF9wcmludGluZ1BhZ2VSZWN0c1twYWdlIC0gMV07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwCmluZGV4IDc5YTM3NDAwYzNmNDE1OGJmNDI4ZjY5NDJiYzg4NmYxYWNkMjIwM2QuLmRk
OWMzNTI2MDVmMDhmMzk0MGQ5MDBkOGYwMjY1MjQ3ZTA0YmEzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwCkBAIC03NCwxMSArNzQsOSBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SUQoKQogICAgIHJldHVybiB1bmlxdWVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQr
KzsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiBy
YW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIHJh
bmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGREZWxldGVSYW5n
ZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKIH0KIAogYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0xMTQsNTAgKzExMiwz
NyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKIGludCBX
ZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2luRWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLnB0cigpKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVu
ZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVk
aXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFn
ZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVk
aXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7CiB9CiAKLWJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUqIG5vZGUsIFJhbmdlKiByYW5n
ZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAg
Ym9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
SW5zZXJ0Tm9kZSgqbV9wYWdlLCBub2RlLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2UsICZu
b2RlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24pOwogfQog
Ci1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jv
b2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0
QWN0aW9uIGFjdGlvbikKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQuaW1wbCgpLCBy
YW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQo
KS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQuaW1wbCgpLCBjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24pOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVu
dDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9S
YW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQorYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5n
ZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewotICAgIGJvb2wg
cmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgZnJvbVJhbmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3Rp
bGxTZWxlY3RpbmcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENo
YW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0
KCksIGNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0
aW5nKTsKIH0KICAgICAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgUmVmPE11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNNdXRhYmxlKCkgPyBSZWY8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4oc3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydGllcyY+KCpzdHlsZSkp
IDogc3R5bGUtPm11dGFibGVDb3B5KCkpOwotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmpl
Y3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEFwcGx5U3R5bGUoKm1fcGFnZSwgJm11dGFi
bGVTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCByYW5nZSk7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCAmc3R5bGUu
bXV0YWJsZUNvcHkoKS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCBjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpLmdldCgpKTsKIH0KIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBA
IC0yMTEsOSArMTk2LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEFwcGx5U3R5bGUoKQog
ICAgIG1fcGFnZS0+ZGlkQXBwbHlTdHlsZSgpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopCitib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBj
b25zdCBTaW1wbGVSYW5nZSYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMjIyLDcgKzIwNiw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRC
ZWdpbkVkaXRpbmcoKQogICAgIC8vIEZJWE1FOiBXaGF0IGdvb2QgaXMgYSBub3RpZmljYXRpb24g
bmFtZSwgaWYgaXQncyBhbHdheXMgdGhlIHNhbWU/CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gV2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiV2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbiIpKTsKICAgICBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZGlkQmVnaW5FZGl0aW5nKCptX3Bh
Z2UsIFdlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24uZ2V0KCkuaW1wbCgpKTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRv
Q2hhbmdlZENvbnRlbnRzKCkKQEAgLTI3NSw3ICsyNTgsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6ZGlkRW5kRWRpdGluZygpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
V2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IldlYlZpZXdEaWRFbmRFZGl0aW5nTm90aWZpY2F0aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5kaWRFbmRFZGl0aW5nKCptX3BhZ2UsIFdlYlZpZXdEaWRF
bmRFZGl0aW5nTm90aWZpY2F0aW9uLmdldCgpLmltcGwoKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKCkKQEAgLTI4MywxOSArMjY1LDE5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLmRpZFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2UpOwogfQogCi12b2lkIFdlYkVk
aXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKiByYW5nZSkK
K3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2UsIHJhbmdl
KTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9Q
YXN0ZWJvYXJkKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCi12
b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5n
ZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8
U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6Omdl
dENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2Us
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKCptX3BhZ2UsIHJhbmdlLCBwYXN0
ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
RWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSgqbV9wYWdlLCBjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsK
IH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wg
V2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJh
Z21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7Ci0g
ICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdv
U3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGRlc3RpbmF0aW9uLCBpc01vdmUpOworICAgIHJl
dHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBE
cm9wKCptX3BhZ2UsIGZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01v
dmUpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3Rl
cCYgc3RlcCkKQEAgLTQyNSwxMiArNDA3LDEwIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0
RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQogCiB2b2lkIFdlYkVkaXRvckNs
aWVudDo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzdWJGcmFtZVNjcm9sbFBvc2l0aW9u
Q2hhbmdlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogI2VuZGlmCkBAIC02MTgs
NyArNTk4LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdGUoRWxl
bWVudCogZWxlbWVudCkKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICBt
X3BhZ2UtPnNldElucHV0TWV0aG9kU3RhdGUoZWxlbWVudCk7CiAjZWxzZQotICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOwogI2VuZGlmCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmgKaW5kZXggMGRmNzc1OWUxYjgyZGQ0MDNjZmRhOGNhNzMwOTllYmM2ZGRkODA4Yy4u
MjNlMzk0ZjI3ZWMzMjY5Mjc4YzQ1YjhlMTQ0ZDM2ZGM3YzdiZmQ2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJv
b2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNo
b3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZp
bmFsOwogICAgIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgZmluYWw7CiAgICAgYm9v
bCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdCBmaW5hbDsKICAgICBi
b29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgZmluYWw7CkBAIC01NCwxNSAr
NTQsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpIGZpbmFs
OwogICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGZpbmFsOwogICAgIAotICAgIGJv
b2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBz
aG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJ
bnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRv
ckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5h
bDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGZy
b21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29u
c3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRp
bmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZElu
c2VydE5vZGUoV2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91
bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRv
UmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CiAg
ICAgCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyos
IFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0
IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkQXBwbHlTdHlsZSgpIGZpbmFsOwotICAgIGJv
b2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpS
YW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3Qg
V2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFs
OwogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIHJlZ2lzdGVyQXR0
YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlw
ZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJyZWRGaWxlTmFtZSwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4mJikgZmluYWw7CkBAIC04NSw5ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5j
ZWxlZENvbXBvc2l0aW9uKCkgZmluYWw7CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigp
IGZpbmFsOwogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFsOwotICAgIHZvaWQgd2lsbFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgdm9p
ZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShX
ZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAg
ICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICAK
ICAgICB2b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV2ViQ29yZTo6VW5kb1N0ZXAmKSBmaW5hbDsKICAg
ICB2b2lkIHJlZ2lzdGVyUmVkb1N0ZXAoV2ViQ29yZTo6VW5kb1N0ZXAmKSBmaW5hbDsKQEAgLTE5
MSw3ICsxOTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVj
aG8oKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3Ao
V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiwgYm9vbCBpc01vdmUp
IGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJh
Z21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGJvb2wgaXNNb3ZlKSBmaW5hbDsK
ICAgICBib29sIHN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkgZmluYWw7CiAKICAgICBib29sIGNh
blNob3dGb250UGFuZWwoKSBjb25zdCBmaW5hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA0N2NkZWE3ZWRlMTk4MDU3OGRjNjk5YzlmYzdiNGNi
NzQ4OTA3YWNhLi43MzJkODg4MDRmODQ4ZGE5YzdmMGZlM2Y1Y2MyNzU3MWRhOTZiNTg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQyNCw0
MyArNTQyNCwzNiBAQCB2b2lkIFdlYlBhZ2U6Omhhc01hcmtlZFRleHQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHZvaWQgV2ViUGFnZTo6Z2V0TWFy
a2VkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgYXV0byBlZGl0aW5nUmFu
Z2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgZnJhbWUuZWRpdG9yKCkuY29tcG9z
aXRpb25SYW5nZSgpLmdldCgpKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihlZGl0aW5nUmFuZ2Up
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBj
cmVhdGVMaXZlUmFuZ2UoZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKS5nZXQoKSkp
OwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5n
ZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihlZGl0aW5n
UmFuZ2UpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZy
YW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRl
eEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCiB7CiAgICAgY29uc3RleHByIE9wdGlvblNldDxIaXRUZXN0UmVxdWVzdDo6
UmVxdWVzdFR5cGU+IGhpdFR5cGUgeyBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksIEhpdFRlc3RS
ZXF1ZXN0OjpBY3RpdmUsIEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0Nv
bnRlbnQsICBIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9OwotICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5o
aXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgaGl0VHlwZSk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9kZUZyYW1lKCkgOiAm
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5k
ZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0
aW5nUmFuZ2U6OmZyb21SYW5nZSgqZnJhbWUsIHJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQocG9pbnQsIGhpdFR5cGUpOworICAgIGF1dG8mIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVGcmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFu
Z2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKTsKKyAgICBh
dXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5n
ZXQoKSk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNr
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihlZGl0aW5nUmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lE
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhj
b25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQog
ewotICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7Ci0gICAgSW50UmVjdCByZXN1bHQoSW50UG9pbnQoMCwgMCksIEludFNpemUo
MCwgMCkpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRv
UmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7CisgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBF
ZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7CiAgICAgaWYgKCFyYW5n
ZSkgewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0
ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgRWRpdGluZ1JhbmdlKG5vdEZvdW5kLCAwKSwgY2FsbGJh
Y2tJRCkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFy
YWN0ZXJSYW5nZUNhbGxiYWNrKHsgfSwgeyB9LCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KLSAgICByZXN1bHQgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
ZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpKTsKLQotICAgIC8v
IEZJWE1FOiBVcGRhdGUgYWN0dWFsUmFuZ2UgdG8gbWF0Y2ggdGhlIHJhbmdlIG9mIGZpcnN0IHJl
Y3QuCi0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFu
Z2VDYWxsYmFjayhyZXN1bHQsIGVkaXRpbmdSYW5nZSwgY2FsbGJhY2tJRCkpOworICAgIC8vIEZJ
WE1FOiBQYXNzIGFuIEVkaXRpbmdSYW5nZSB0aGF0IG1hdGNoZXMgdGhlIHJhbmdlIG9mIHRoZSBm
aXJzdCByZWN0LCByYXRoZXIgdGhhbiB0aGUgZW50aXJlIHBhc3NlZC1pbiByYW5nZT8KKyAgICBh
dXRvIHJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWUuZWRpdG9yKCku
Zmlyc3RSZWN0Rm9yUmFuZ2UoKnJhbmdlKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhyZWN0LCBlZGl0aW5nUmFuZ2UsIGNh
bGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJs
aW5lcywgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uSGlnaGxpZ2h0PiYgaGlnaGxpZ2h0cywgY29u
c3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb24sIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1l
bnRFZGl0aW5nUmFuZ2UpCkBAIC01NDY4LDE1ICs1NDYxLDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0
Q29tcG9zaXRpb25Bc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3Np
dGlvblVuCiAgICAgcGxhdGZvcm1XaWxsUGVyZm9ybUVkaXRpbmdDb21tYW5kKCk7CiAKICAgICBh
dXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7Ci0KICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2U7CiAgICAg
ICAgIGlmIChyZXBsYWNlbWVudEVkaXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBub3RGb3VuZCkgewot
ICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFt
ZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50
UmFuZ2UpCisgICAgICAgICAgICBpZiAoYXV0byByZXBsYWNlbWVudFJhbmdlID0gRWRpdGluZ1Jh
bmdlOjp0b1JhbmdlKGZyYW1lLCByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSkpCiAgICAgICAgICAg
ICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJl
cGxhY2VtZW50UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgIH0KLQogICAg
ICAgICBmcmFtZS5lZGl0b3IoKS5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBoaWdo
bGlnaHRzLCBzZWxlY3Rpb24ubG9jYXRpb24sIHNlbGVjdGlvbi5sb2NhdGlvbiArIHNlbGVjdGlv
bi5sZW5ndGgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggMjk2OGY3YzBjMjRhNWFkODgwNjVkZDg0ZGQ4
ZTBjMWMzYmFlZDI5Ni4uZDhkZmVhNzA3MjNmMTY1NmIyODRhZGM2MGZmOWU1YTE2ZmQ2ZjE4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KQEAgLTI2NywxMCArMjY3LDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0
b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAKICAgICBp
ZiAoZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICBpZiAoYXV0byBj
b21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKSB7Ci0g
ICAgICAgICAgICBjb21wb3NpdGlvblJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExh
eW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKKyAgICAgICAgICAgIGNyZWF0ZUxpdmVSYW5nZSgq
Y29tcG9zaXRpb25SYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5t
YXJrZWRUZXh0UmVjdHMpOwogICAgICAgICAgICAgY29udmVydENvbnRlbnRUb1Jvb3RWaWV3U2Vs
ZWN0aW9uUmVjdHModmlldywgcG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKIAotICAg
ICAgICAgICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQo
Y29tcG9zaXRpb25SYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJr
ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dCgqY29tcG9zaXRpb25SYW5nZSk7CiAgICAgICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGNvbXBvc2l0aW9uU2VsZWN0aW9uKCpjb21wb3NpdGlvblJh
bmdlKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRDYXJldFJlY3RBdFN0
YXJ0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGNvbXBvc2l0aW9uU2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpLmFic29sdXRlQ2FyZXRCb3VuZHMobnVsbHB0ciAvKiBpbnNpZGVGaXhlZCAqLykp
OwogICAgICAgICAgICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dENhcmV0UmVjdEF0RW5kID0g
dmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGNvbXBvc2l0aW9uU2VsZWN0aW9uLnZpc2libGVFbmQo
KS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxwdHIgLyogaW5zaWRlRml4ZWQgKi8pKTsKQEAgLTEz
NzcsMTMgKzEzNzcsMTUgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJ
bnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgIHsKICAgICAgICAg
aWYgKCFmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gbWFya2VkUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21w
b3NpdGlvblJhbmdlKCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IG1hcmtlZFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG1hcmtlZFJhbmdlLT5zdGFydFBv
c2l0aW9uKCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA+IG1hcmtlZFJhbmdlLT5lbmRQb3NpdGlv
bigpKQotICAgICAgICAgICAgcG9zaXRpb24gPSBtYXJrZWRSYW5nZS0+ZW5kUG9zaXRpb24oKTsK
KyAgICAgICAgYXV0byBtYXJrZWRSYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFu
Z2UoKTsKKyAgICAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG1hcmtlZFJhbmdlLT5zdGFydCk7CisgICAgICAgIGF1dG8gZW5kUG9zaXRpb24gPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFya2VkUmFuZ2UtPmVuZCk7CisgICAgICAgIGlm
IChwb3NpdGlvbiA8IHN0YXJ0UG9zaXRpb24pCisgICAgICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb247CisgICAgICAgIGlmIChwb3NpdGlvbiA+IGVuZFBvc2l0aW9uKQorICAgICAgICAg
ICAgcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKICAgICAgICAgaWYgKHdrR2VzdHVyZVN0YXRlICE9
IEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuKQotICAgICAgICAgICAgZmxhZ3MgPSBkaXN0
YW5jZUJldHdlZW5Qb3NpdGlvbnMobWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgIT0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRp
b25zKG1hcmtlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKSA/IFBocmFzZUJvdW5k
YXJ5Q2hhbmdlZCA6IE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4geyB9OworICAgICAgICAgICAg
ZmxhZ3MgPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgIT0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25z
KHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKSA/IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZCA6IE9wdGlv
blNldDxTZWxlY3Rpb25GbGFncz4geyB9OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmbGFn
cyA9IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZDsKICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOwpAQCAtMjQ4Myw3ICsyNDg1
LDYgQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29u
dGV4dCgpCiAgICAgRWRpdGluZ1JhbmdlIG1hcmtlZFRleHRSYW5nZTsKIAogICAgIGF1dG8mIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKICAgICBWaXNpYmxlUG9z
aXRpb24gZW5kUG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsK
ICAgICBjb25zdCB1bnNpZ25lZCBtaW5Db250ZXh0V29yZENvdW50ID0gMzsKQEAgLTI0OTQsMTQg
KzI0OTUsMTIgQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0
aW9uQ29udGV4dCgpCiAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAg
ICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25S
YW5nZSgpKSB7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzdGFydFBvc2l0aW9uKTsKICAg
ICAgICAgU3RyaW5nIG1hcmtlZFRleHRCZWZvcmU7Ci0gICAgICAgIGlmIChyYW5nZSkKLSAgICAg
ICAgICAgIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgp
KTsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBlbmRQ
b3NpdGlvbiwgY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChh
dXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbikpCisgICAgICAgICAg
ICBtYXJrZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh7IGNvbXBvc2l0aW9uUmFu
Z2UtPnN0YXJ0LCAqc3RhcnQgfSk7CiAgICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QWZ0ZXI7Ci0g
ICAgICAgIGlmIChyYW5nZSkKLSAgICAgICAgICAgIG1hcmtlZFRleHRBZnRlciA9IHBsYWluVGV4
dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICBpZiAoYXV0byBlbmQgPSBtYWtlQm91
bmRhcnlQb2ludChlbmRQb3NpdGlvbikpCisgICAgICAgICAgICBtYXJrZWRUZXh0QWZ0ZXIgPSBw
bGFpblRleHRGb3JDb250ZXh0KHsgKmVuZCwgY29tcG9zaXRpb25SYW5nZS0+ZW5kIH0pOwogICAg
ICAgICBtYXJrZWRUZXh0ID0gbWFya2VkVGV4dEJlZm9yZSArIHNlbGVjdGVkVGV4dCArIG1hcmtl
ZFRleHRBZnRlcjsKICAgICAgICAgaWYgKCFtYXJrZWRUZXh0LmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgbWFya2VkVGV4dFJhbmdlLmxvY2F0aW9uID0gbWFya2VkVGV4dEJlZm9yZS5sZW5ndGgo
KTsKQEAgLTI2MTcsMTQgKzI2MTYsMTYgQEAgc3RhdGljIHZvaWQgZm9jdXNlZEVsZW1lbnRQb3Np
dGlvbkluZm9ybWF0aW9uKFdlYlBhZ2UmIHBhZ2UsIEVsZW1lbnQmIGZvY3VzZWRFbGUKICAgICBJ
bnRQb2ludCBjb25zdHJhaW5lZFBvaW50ID0gY29uc3RyYWluUG9pbnQoYWRqdXN0ZWRQb2ludCwg
ZnJhbWUsIGZvY3VzZWRFbGVtZW50KTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBm
cmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdHJhaW5lZFBvaW50KTsKIAotICAgIFJl
ZlB0cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKTsKKyAgICBhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21w
b3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFjb21wb3NpdGlvblJhbmdlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAocG9zaXRpb24gPCBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpCi0gICAgICAgIHBvc2l0aW9uID0gY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigp
OwotICAgIGVsc2UgaWYgKHBvc2l0aW9uID4gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24o
KSkKLSAgICAgICAgcG9zaXRpb24gPSBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpOwor
ICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21w
b3NpdGlvblJhbmdlLT5zdGFydCk7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5lbmQpOworICAgIGlmIChwb3NpdGlv
biA8IHN0YXJ0UG9zaXRpb24pCisgICAgICAgIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAg
ICBlbHNlIGlmIChwb3NpdGlvbiA+IGVuZFBvc2l0aW9uKQorICAgICAgICBwb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uOwogICAgIEludFJlY3QgY2FyZXRSZWN0ID0gdmlldy5jb250ZW50c1RvUm9vdFZp
ZXcocG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKICAgICBmbG9hdCBkZWx0YVggPSBh
YnMoY2FyZXRSZWN0LngoKSArIChjYXJldFJlY3Qud2lkdGgoKSAvIDIpIC0gcmVxdWVzdC5wb2lu
dC54KCkpOwogICAgIGZsb2F0IGRlbHRhWUZyb21UaGVUb3AgPSBhYnMoY2FyZXRSZWN0LnkoKSAt
IHJlcXVlc3QucG9pbnQueSgpKTsKQEAgLTQyNTMsOCArNDI1NCw4IEBAIHZvaWQgV2ViUGFnZTo6
cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVl
c3QgcmVxdWVzCiAgICAgICAgIGlmICh3YW50c01hcmtlZFRleHRSZWN0cyAmJiBjb21wb3NpdGlv
blJhbmdlKSB7CiAgICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgY2xpZW50IGhh
cyByZXF1ZXN0ZWQgbWFya2VkIHRleHQgcmVjdHMgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRleHQK
ICAgICAgICAgICAgIC8vIHJhbmdlIGVuY29tcGFzc2VzIHRoZSBlbnRpcmUgbWFya2VkIHRleHQg
cmFuZ2Ugc28gdGhhdCB3ZSBkb24ndCByZXR1cm4gYSB0cnVuY2F0ZWQgcmVzdWx0LgotICAgICAg
ICAgICAgYXV0byBjb21wb3NpdGlvblN0YXJ0ID0gY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3Np
dGlvbigpOwotICAgICAgICAgICAgYXV0byBjb21wb3NpdGlvbkVuZCA9IGNvbXBvc2l0aW9uUmFu
Z2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uU3RhcnQgPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpOworICAg
ICAgICAgICAgYXV0byBjb21wb3NpdGlvbkVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihjb21wb3NpdGlvblJhbmdlLT5lbmQpOwogICAgICAgICAgICAgaWYgKGNvbnRleHRCZWZvcmVT
dGFydCA+IGNvbXBvc2l0aW9uU3RhcnQpCiAgICAgICAgICAgICAgICAgY29udGV4dEJlZm9yZVN0
YXJ0ID0gY29tcG9zaXRpb25TdGFydDsKICAgICAgICAgICAgIGlmIChjb250ZXh0QWZ0ZXJFbmQg
PCBjb21wb3NpdGlvbkVuZCkKQEAgLTQyNzQsOSArNDI3NSw5IEBAIHZvaWQgV2ViUGFnZTo6cmVx
dWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3Qg
cmVxdWVzCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhjb250ZXh0QmVm
b3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAgY29udGV4
dC5zZWxlY3RlZFRleHQgPSBtYWtlU3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVj
dGlvbiwgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAgY29udGV4dC5jb250
ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5nKGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGNv
bnRleHRBZnRlckVuZCk7Ci0gICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2VzT3Zlcmxh
cChyYW5nZU9mSW50ZXJlc3QuZ2V0KCksIGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkpKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNvbXBvc2l0aW9uUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvbkVuZChj
b21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICBpZiAoY29tcG9zaXRpb25SYW5n
ZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdl
KCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNv
bXBvc2l0aW9uU3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFu
Z2UtPnN0YXJ0KSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvbkVuZChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAgICAg
IGNvbnRleHQubWFya2VkVGV4dCA9IG1ha2VTdHJpbmcoY29tcG9zaXRpb25TdGFydCwgY29tcG9z
aXRpb25FbmQpOwogICAgICAgICBjb250ZXh0LnNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQubG9j
YXRpb24gPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdElu
U2VsZWN0aW9uLCBjb21wb3NpdGlvblN0YXJ0KTsKICAgICAgICAgY29udGV4dC5zZWxlY3RlZFJh
bmdlSW5NYXJrZWRUZXh0Lmxlbmd0aCA9IFtjb250ZXh0LnNlbGVjdGVkVGV4dC5zdHJpbmcgbGVu
Z3RoXTsKQEAgLTQzMDMsMTAgKzQzMDQsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVu
dEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAg
ICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdlKCpjb250
ZXh0UmFuZ2UsIDApOwogICAgIH0gZWxzZSBpZiAod2FudHNNYXJrZWRUZXh0UmVjdHMgJiYgY29t
cG9zaXRpb25SYW5nZSkgewogICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0
ID0gMDsKLSAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChjb250ZXh0
QmVmb3JlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGVu
ZCA9IG1ha2VCb3VuZGFyeVBvaW50KGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkp
Ci0gICAgICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IFdlYkNvcmU6OnBsYWlu
VGV4dChTaW1wbGVSYW5nZSB7IFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSB9KS5sZW5n
dGgoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSkKKyAgICAgICAgICAgIGNv
bXBvc2l0aW9uU3RhcnRPZmZzZXQgPSBXZWJDb3JlOjpwbGFpblRleHQoeyBXVEZNb3ZlKCpzdGFy
dCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0IH0pLmxlbmd0aCgpOwogICAgICAgICBjb250ZXh0
LnRleHRSZWN0cyA9IGNoYXJhY3RlclJlY3RzRm9yUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UsIGNv
bXBvc2l0aW9uU3RhcnRPZmZzZXQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCA4ZDZjNDg3OTFk
NDdkZjk0ZWY5YTIxMzhiMzgyMzU0MDAzNWJhMDRjLi5lY2NmYjUwMWU2ZWMzMjE4NzZhMDZhNDA0
MmZkYjkzYzE4MDZkOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtMTQwLDcgKzE0MCw3IEBAIC0gKENHUmVj
dCljbG9zZXN0Q2FyZXRSZWN0SW5NYXJrZWRUZXh0UmFuZ2VGb3JQb2ludDooQ0dQb2ludClwb2lu
dAogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogCi0gICAgYXV0byBtYXJrZWRUZXh0
UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpOworICAgIGF1
dG8gbWFya2VkVGV4dFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsK
ICAgICBhdXRvIG1hcmtlZFRleHRSYW5nZVNlbGVjdGlvbiA9IG1hcmtlZFRleHRSYW5nZSA/IFZp
c2libGVTZWxlY3Rpb24oKm1hcmtlZFRleHRSYW5nZSkgOiBWaXNpYmxlU2VsZWN0aW9uKCk7CiAK
ICAgICBpZiAoIW1hcmtlZFRleHRSYW5nZVNlbGVjdGlvbi5pc1JhbmdlKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KaW5kZXggYTBiNmI3OTZhM2E4Mjc5ZDg4NGM2NDcz
MDE1MzkxMzQ1MDcxNjBkOC4uZDBkMzBjZTlhODFiNzE4YjlhYzIyODAzNGViMDU3MTU5OWVkZDcx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQpAQCAtMzA5LDQgKzMw
OSw5IEBAIERPTVJhbmdlICpraXQoV2ViQ29yZTo6UmFuZ2UqIHZhbHVlKQogICAgIHJldHVybiBb
d3JhcHBlciBhdXRvcmVsZWFzZV07CiB9CiAKK0RPTVJhbmdlICpraXQoY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxp
dmVSYW5nZSh2YWx1ZSkuZ2V0KCkpOworfQorCiAjdW5kZWYgSU1QTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKaW5kZXggYWY1NTkzMjcwOTMxNjQ1
YmE3MmFlMWExOTkxYWVkOTE1MDlkZmNkNy4uZTY4MTlhNWY4ZDU4OGQyZTliNjg3ZjBkOTc5ZjY3
Y2IyM2E4OWExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJh
bmdlSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJ
bnRlcm5hbC5oCkBAIC0yMywxMSArMjMsOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1w
b3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NUmFu
Z2UuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUmFuZ2U7Ci19Ci0KIFdlYkNvcmU6
OlJhbmdlKiBjb3JlKERPTVJhbmdlICopOwogRE9NUmFuZ2UgKmtpdChXZWJDb3JlOjpSYW5nZSop
OworRE9NUmFuZ2UgKmtpdChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgKaW5kZXggZTFiNDJlYTZkMmZiZWZlM2ExZWRmMTEzMjJjNmQ1ZThiMzAz
ZmY0NS4uNmYwOGZhYWE5NTM1YzRhYjk3NWYyN2I3Y2JmNDI1NzY5NWY4YjRlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmgKQEAgLTYzLDI0ICs2MywyNCBAQCBwcml2YXRlOgogICAgIGJvb2wgc21hcnRJbnNl
cnREZWxldGVFbmFibGVkKCkgZmluYWw7CiAgICAgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQoKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2Uo
V2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91
bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEVu
ZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydE5v
ZGUoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0
QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwg
V2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAg
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdl
LCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJD
b3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25z
dCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9k
ZShXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jiwg
V2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZENo
YW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBm
cm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwg
V2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKIAotICAgIGJv
b2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpS
YW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBXZWJDb3JlOjpT
dHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBm
aW5hbDsKICAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSogcmFu
Z2VUb0JlUmVwbGFjZWQpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxl
dGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5n
ZSYgcmFuZ2VUb0JlUmVwbGFjZWQpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmco
KSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIHZv
aWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoKSBmaW5hbDsKLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7Cisg
ICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7CiAKICAg
ICB2b2lkIHNldEluc2VydGlvblBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAg
V2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZSByZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoY29u
c3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4gV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25z
ZTo6RGVuaWVkRm9yR2VzdHVyZTsgfQpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBzaG91bGRTdXBwcmVzc1Bhc3N3b3JkRWNobygpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAK
LSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50Jiwg
V2ViQ29yZTo6UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAgYm9v
bCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFdl
YkNvcmU6OlNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFsOwogICAg
IAogICAgIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oV2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZSkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBpZ25vcmVXb3JkSW5T
cGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4
IDlhYjFjMjlkNDg3ODc3ZDZlODU4MzlmOWQ1ZjRjODkwNjk4MTI5YjIuLmJkOTVhNjY0OGEzMDMy
YzA1N2E5ODFlMDk0NjkwODBlODgxMDYzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTIzNCwx
MCArMjM0LDkgQEAgaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KQogCiAjZW5kaWYKIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIHJldHVybiBbW21fd2ViVmll
dyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICBz
aG91bGREZWxldGVET01SYW5nZTpraXQocmFuZ2UpXTsKKyAgICByZXR1cm4gW1ttX3dlYlZpZXcg
X2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkRGVsZXRl
RE9NUmFuZ2U6a2l0KHJhbmdlKV07CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzbWFydElu
c2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtMjU2LDExICsyNTUsMTEgQEAgYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0
dXJuIHBhZ2UtPnNldHRpbmdzKCkuc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpOwog
fQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRp
ZXMqIHN0eWxlLCBSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBw
bHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJhbmdlKQogewotICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtdXRh
YmxlU3R5bGUoc3R5bGUtPmlzTXV0YWJsZSgpID8gUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
KHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMmPigqc3R5bGUpKSA6IHN0eWxlLT5t
dXRhYmxlQ29weSgpKTsKICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxkQXBwbHlTdHlsZTpraXQo
Jm11dGFibGVTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKSB0b0VsZW1lbnRzSW5E
T01SYW5nZTpraXQocmFuZ2UpXTsKKyAgICAgICAgc2hvdWxkQXBwbHlTdHlsZTpraXQoJnN0eWxl
Lm11dGFibGVDb3B5KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSkKKyAgICAgICAgdG9F
bGVtZW50c0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUZv
bnRQYW5lbChXZWJWaWV3ICp3ZWJWaWV3KQpAQCAtMjc5LDMzICsyNzgsMjkgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmRpZEFwcGx5U3R5bGUoKQogICAgIHVwZGF0ZUZvbnRQYW5lbChtX3dlYlZp
ZXcpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxl
dGUoUmFuZ2UqIHJhbmdlLCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQpCitib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQpCiB7CiAgICAgcmV0dXJu
IFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3
CiAgICAgICAgIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlOmtpdChyYW5nZSkgcmVwbGFjaW5n
UmFuZ2U6a2l0KHJhbmdlVG9CZVJlcGxhY2VkKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0
dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJW
aWV3Ci0gICAgICAgIHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07Ci0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFu
Z2U6a2l0KHJhbmdlKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0
aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5n
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07Cisg
ICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
bV93ZWJWaWV3IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCi1i
b29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKICAg
ICBXZWJWaWV3KiB3ZWJWaWV3ID0gbV93ZWJWaWV3OwogICAgIHJldHVybiBbW3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6
dGV4dCByZXBsYWNpbmdET01SYW5nZTpraXQocmFuZ2UpIGdpdmVuQWN0aW9uOmtpdChhY3Rpb24p
XTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
UmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBzZWxlY3Rpb25BZmZp
bml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJhbmdl
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSBzZWxlY3Rp
b25BZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKICAgICByZXR1cm4gW21fd2ViVmll
dyBfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpraXQoZnJvbVJhbmdlKSB0b0RPTVJhbmdl
OmtpdCh0b1JhbmdlKSBhZmZpbml0eTpraXQoc2VsZWN0aW9uQWZmaW5pdHkpIHN0aWxsU2VsZWN0
aW5nOnN0aWxsU2VsZWN0aW5nXTsKIH0KQEAgLTQxMSwxMiArNDA2LDEyIEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCiAjZW5kaWYKIH0KIAot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJD
b3JlOjpSYW5nZSopCit2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpCiB7CiAgICAgLy8gTm90IGlt
cGxlbWVudGVkIFdlYktpdCwgb25seSBXZWJLaXQyLgogfQogCi12b2lkIFdlYkVkaXRvckNsaWVu
dDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVu
dFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJp
bmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
Pj4mIHBhc3RlYm9hcmREYXRhKQogewogICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBXZWJLaXQsIG9u
bHkgV2ViS2l0Mi4KIH0KQEAgLTU3Nyw5ICs1NzIsOSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKIAogI2VuZGlmIC8vIFVTRShBVVRP
TUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZElu
c2VydE5vZGUoTm9kZSAqbm9kZSwgUmFuZ2UqIHJlcGxhY2luZ1JhbmdlLCBFZGl0b3JJbnNlcnRB
Y3Rpb24gZ2l2ZW5BY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlJiBub2RlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJlcGxhY2luZ1Jhbmdl
LCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7IAotICAgIHJldHVybiBbW21fd2Vi
VmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRJ
bnNlcnROb2RlOmtpdChub2RlKSByZXBsYWNpbmdET01SYW5nZTpraXQocmVwbGFjaW5nUmFuZ2Up
IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWdpdmVuQWN0aW9uXTsKKyAgICByZXR1
cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZp
ZXcgc2hvdWxkSW5zZXJ0Tm9kZTpraXQoJm5vZGUpIHJlcGxhY2luZ0RPTVJhbmdlOmtpdChyZXBs
YWNpbmdSYW5nZSkgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pZ2l2ZW5BY3Rpb25d
OwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvT3JSZWRvU3RlcChVbmRv
U3RlcCYgc3RlcCwgYm9vbCBpc1JlZG8pCkBAIC04NTYsMTAgKzg1MSwxMCBAQCBib29sIFdlYkVk
aXRvckNsaWVudDo6cGVyZm9ybXNUd29TdGVwUGFzdGUoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVu
dCogZnJhZ21lbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVu
dDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSYg
ZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1U
d29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgU2ltcGxlUmFuZ2Um
IGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKIHsKICAgICBpZiAoW1ttX3dlYlZpZXcgX1VJS2l0
RGVsZWdhdGVGb3J3YXJkZXJdIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGVyZm9ybVR3
b1N0ZXBEcm9wOmF0RGVzdGluYXRpb246aXNNb3ZlOildKQotICAgICAgICByZXR1cm4gW1ttX3dl
YlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHBlcmZvcm1Ud29TdGVwRHJvcDpraXQoJmZy
YWdtZW50KSBhdERlc3RpbmF0aW9uOmtpdCgmZGVzdGluYXRpb24pIGlzTW92ZTppc01vdmVdOwor
ICAgICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHBlcmZv
cm1Ud29TdGVwRHJvcDpraXQoJmZyYWdtZW50KSBhdERlc3RpbmF0aW9uOmtpdChkZXN0aW5hdGlv
bikgaXNNb3ZlOmlzTW92ZV07CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC04ODcsNyArODgy
LDcgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1Rl
eHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmkKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJh
Z21lbnQmLCBSYW5nZSYsIGJvb2wpCitib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0
ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KaW5kZXggNGM1NGM0NDRhY2YxNzgxOTAyZDY1OGE5MTVhNDYyODgzYmI1MjFhMC4u
MjNiMDQwOTcyMGVmMDZhZDRjYjE0MDQwMzk1ODE3NTkxMGI1NmNkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC03MTgsMTUgKzcxOCwxMCBAQCAt
IChOU1JlY3QpX2NhcmV0UmVjdEF0UG9zaXRpb246KGNvbnN0IFdlYkNvcmU6OlBvc2l0aW9uJilw
b3MgYWZmaW5pdHk6KE5TU2VsZWN0aQogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uYWJzb2x1
dGVDYXJldEJvdW5kcygpOwogfQogCi0tIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihE
T01SYW5nZSAqKXJhbmdlCi17Ci0gICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9y
KCkuZmlyc3RSZWN0Rm9yUmFuZ2UoY29yZShyYW5nZSkpOwotfQotCiAtICh2b2lkKV9zY3JvbGxE
T01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZQogewogICAgIGJvb2wgaW5zaWRlRml4
ZWQgPSBmYWxzZTsgLy8gRklYTUU6IGdldCB2aWEgZmlyc3RSZWN0Rm9yUmFuZ2UoKS4KLSAgICBO
U1JlY3QgcmFuZ2VSZWN0ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsgICAg
CisgICAgTlNSZWN0IHJhbmdlUmVjdCA9IFtzZWxmIGZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdl
XTsKICAgICBhdXRvKiBzdGFydE5vZGUgPSBjb3JlKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwog
ICAgICAgICAKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgewpA
QCAtNzQ5LDcgKzc0NCw3IEBAIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01S
YW5nZSAqKXJhbmdlCiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2Ug
KilyYW5nZSB3aXRoSW5zZXQ6KENHRmxvYXQpaW5zZXQKIHsKICAgICBib29sIGluc2lkZUZpeGVk
ID0gZmFsc2U7IC8vIEZJWE1FOiBnZXQgdmlhIGZpcnN0UmVjdEZvclJhbmdlKCkuCi0gICAgTlNS
ZWN0IHJhbmdlUmVjdCA9IE5TSW5zZXRSZWN0KFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpy
YW5nZV0sIGluc2V0LCBpbnNldCk7CisgICAgTlNSZWN0IHJhbmdlUmVjdCA9IE5TSW5zZXRSZWN0
KFtzZWxmIGZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXSwgaW5zZXQsIGluc2V0KTsKICAgICBh
dXRvKiBzdGFydE5vZGUgPSBjb3JlKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwogCiAgICAgaWYg
KHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKQEAgLTc4NCw3ICs3NzksNyBA
QCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIHNl
bGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRp
b24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGtpdChzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiB9CiAjZW5kaWYKIApAQCAtODUzLDcgKzg0OCw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRET01S
YW5nZVRvTlNSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogCiAtIChET01SYW5nZSAqKV9tYXJrRE9N
UmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJl
dHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21l
bnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5n
OihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcKQEAgLTExMDYsMTIgKzExMDEsMTIgQEAgLSAoRE9N
UmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNlY29u
ZFBvaW50OihDR1BvaW50KXMKIHsKICAgICBhdXRvIGZpcnN0UG9zaXRpb24gPSBbc2VsZiBfdmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQ6Zmlyc3RdOwogICAgIGF1dG8gc2Vjb25kUG9zaXRpb24gPSBb
c2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsKLSAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNl
Y29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0aW9u
KS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFu
Z2VGb3JQb2ludDooQ0dQb2ludClwb2ludAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBv
aW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQo
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6
cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElP
U19GQU1JTFkpCkBAIC0xNDU0LDcgKzE0NDksNyBAQCAtIChCT09MKWlzVGVsZXBob25lTnVtYmVy
UGFyc2luZ0VuYWJsZWQKIAogLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAg
cmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShz
ZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAK
IC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eToo
TlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGlu
ZwpAQCAtMTQ5Niw3ICsxNDkxLDcgQEAgLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKillbGVtZW50UmFuZ2VDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShj
b3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b24oKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxl
bWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpOwogfQogCiAtICh2b2lkKWV4cGFu
ZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgpAQCAtMTUyNiw3ICsxNTIx
LDcgQEAgLSAodW5pY2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJh
bmdlICopd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkud29yZFJhbmdlQ29udGFp
bmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZikt
PnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsKIH0KIAog
LSAoTlNTdHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQpAQCAtMTU4OSwxMiAr
MTU4NCwxMiBAQCAtIChCT09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0CiAKIC0gKERPTVJhbmdlICop
cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICByZXR1cm4g
a2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5n
Q3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlKHNl
bGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKTsK
IH0KIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbjooaW50
KWFtb3VudAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNl
bGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdldCgp
KTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRp
bmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6
KE5TUmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAtMTYxOCw3
ICsxNjEzLDcgQEAgLSAoRE9NUmFuZ2UgKiltYXJrZWRUZXh0RE9NUmFuZ2UKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIGtpdChmcmFtZS0+ZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGZyYW1lLT5lZGl0
b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpOwogfQogCiAtICh2b2lkKXNldE1hcmtlZFRleHQ6KE5T
U3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCkBAIC0xODE0
LDcgKzE4MDksOSBAQCAtIChET01SYW5nZSAqKWNvbnZlcnROU1JhbmdlVG9ET01SYW5nZTooTlNS
YW5nZSluc3JhbmdlCiAKIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogewotICAgIHJldHVybiBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2Vd
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBOU1plcm9SZWN0OworICAgIHJldHVy
biBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqbWFrZVJh
bmdlKGNvcmUocmFuZ2UpKSk7CiB9CiAKIC0gKENURm9udFJlZilmb250Rm9yU2VsZWN0aW9uOihC
T09MICopaGFzTXVsdGlwbGVGb250cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCBmMTU3MmJkNTZmMDI1YmYzOWY2ZDVmYzM4
MWFkN2JkZjVmNDA3Njg0Li4zNWFiMWNjYjNhOGZjMWQ0Yjk0MDA0N2Y1MmYyMGI4ZmM2ZGIxNjdj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50
ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50
ZXJuYWwuaApAQCAtMTU1LDcgKzE1NSw2IEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUg
KndlYkZyYW1lKTsKIC0gKE5TUmFuZ2UpX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTooRE9NUmFu
Z2UgKilyYW5nZTsKIAogLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25zdCBXZWJD
b3JlOjpQb3NpdGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5
OwotLSAoTlNSZWN0KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKIC0g
KHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9N
UmFuZ2UgKilyYW5nZSB3aXRoSW5zZXQ6KENHRmxvYXQpaW5zZXQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCAxMTFjZjhiZGMyOWRjNjFl
MjhmODIyZTk1N2I5Mzg4MmE0Mjc5OWE1Li43ZmI5MzU0NjhjY2U5ZmNiNjQxNjNkZmY3MTYyZmE2
NGNiYWIyZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KQEAgLTEzMzIsNyArMTMzMiw3IEBAIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zCiAt
IChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNyZWF0ZUxpdmVS
YW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKSA6IG5pbDsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgOiBuaWw7CiB9CiAK
ICNpZiBQTEFURk9STShNQUMpCkBAIC02MzQ2LDEzICs2MzQ2LDEzIEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIERPTVJhbmdlICpyYW5nZSA9IFtmcmFtZSBfY29u
dmVydE5TUmFuZ2VUb0RPTVJhbmdlOnRoZVJhbmdlXTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAg
ICAgIExPRyhUZXh0SW5wdXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAt
PiAoMCwgMCwgMCwgMCkiLCB0aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3RoKTsKLSAg
ICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBOU1pl
cm9SZWN0OwogICAgIH0KICAgICAKICAgICBBU1NFUlQoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7
CiAgICAgQVNTRVJUKFtyYW5nZSBlbmRDb250YWluZXJdKTsKICAgICAKLSAgICBOU1JlY3QgcmVz
dWx0UmVjdCA9IFtmcmFtZSBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOworICAgIE5TUmVj
dCByZXN1bHRSZWN0ID0gW2ZyYW1lIGZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsKICAgICBy
ZXN1bHRSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6cmVzdWx0UmVjdCB0b1ZpZXc6bmlsXTsKIAog
ICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwpAQCAtNzA3NSw3ICs3MDc1LDcg
QEAgLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBp
bkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmcKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNG
b3JUZXh0KHN0cmluZywgY29yZShyYW5nZSksIGNvcmVPcHRpb25zKG9wdGlvbnMpLCBsaW1pdCwg
bWFya01hdGNoZXMsIDApOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLmNvdW50TWF0
Y2hlc0ZvclRleHQoc3RyaW5nLCBtYWtlUmFuZ2UoY29yZShyYW5nZSkpLCBjb3JlT3B0aW9ucyhv
cHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVzLCAwKTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLm1tCmluZGV4IDFlM2I3OWQwMzgxYWU5OWQ2Y2EzNGVjYTIyZjU2MzlkNDhhM2E5NGUu
LjgwMWJlZmVjNzZkMDk2ZjkzZjBmNDhkNjNjZjg3ZGY5NWQ1NTFiYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLm1tCkBAIC0xNzYsNyArMTc2LDcgQEAgLSAodm9pZClkb0NvbXBsZXRpb24K
IAogICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KICAgICAgICAgV2ViRnJhbWUg
KmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVdOwotICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9u
ID0ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgICAgICBET01SYW5nZSAqc2VsZWN0
aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKTsKICAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFuZ2VC
eUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVu
ZAogICAgICAgICAgICAgZGlyZWN0aW9uOlNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQgZ3Jh
bnVsYXJpdHk6VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01S
YW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KaW5kZXggOGM3ZTdlZTAw
ZjdmMzE1MGQ4OTc3NDNhMDcyNDA5NmIzODgyMTdjZS4uOTNiODM0NzdmYzhhNDJhZDNmNzRkMzY5
ZTgxNzk0YmJlZmRhMDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJUZXh0SXRlcmF0b3IubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJUZXh0SXRlcmF0b3IubW0KQEAgLTk1LDcgKzk1LDcgQEAgLSAoRE9NUmFuZ2UgKilj
dXJyZW50UmFuZ2UKICAgICBhdXRvJiB0ZXh0SXRlcmF0b3IgPSAqX3ByaXZhdGUtPl90ZXh0SXRl
cmF0b3I7CiAgICAgaWYgKHRleHRJdGVyYXRvci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHRleHRJdGVyYXRvci5yYW5nZSgpKS5w
dHIoKSk7CisgICAgcmV0dXJuIGtpdCh0ZXh0SXRlcmF0b3IucmFuZ2UoKSk7CiB9CiAKIC8vIEZJ
WE1FOiBDb25zaWRlciBkZXByZWNhdGluZyB0aGlzIG1ldGhvZCBhbmQgY3JlYXRpbmcgb25lIHRo
YXQgZG9lcyBub3QgcmVxdWlyZSBjb3B5aW5nIDgtYml0IGNoYXJhY3RlcnMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggODVkNjk0M2UzNmJhZTYzN2Ew
ZTA5YjU0NzlkYWIzNWIzOWFhN2NjYy4uMDczM2Y1ZTA0NDRmNzlhZGQ3ZGI5N2NkYTE1ZDY5Nzgy
OGI2OTcyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpA
QCAtNDU5NCw3ICs0NTk0LDcgQEAgLSAoV2ViVGV4dEl0ZXJhdG9yICopdGV4dEl0ZXJhdG9yRm9y
UmVjdDooTlNSZWN0KXJlY3QKICAgICBhdXRvIGludFJlY3QgPSBXZWJDb3JlOjplbmNsb3NpbmdJ
bnRSZWN0KHJlY3QpOwogICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
KGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5taW5YTWluWUNvcm5l
cigpKSwKICAgICAgICAgY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0
Lm1heFhNYXhZQ29ybmVyKCkpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJldHVybiBbW1tX
ZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRv
ciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQocmFuZ2UpXSBhdXRvcmVsZWFzZV07CiB9CiAKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTg0MTcsNyArODQxNyw3IEBAIC0gKERPTVJhbmdl
ICopZWRpdGFibGVET01SYW5nZUZvclBvaW50OihOU1BvaW50KXBvaW50CiAgICAgYXV0byogcGFn
ZSA9IGNvcmUoc2VsZik7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiBraXQocGFnZS0+bWFpbkZyYW1lKCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJD
b3JlOjpJbnRQb2ludChbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKS5nZXQo
KSk7CisgICAgcmV0dXJuIGtpdChwYWdlLT5tYWluRnJhbWUoKS5lZGl0b3IoKS5yYW5nZUZvclBv
aW50KFdlYkNvcmU6OkludFBvaW50KFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmls
XSkpKTsKIH0KIAogLSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFu
Z2UgKiljdXJyZW50UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFm
ZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0
aW5nOihCT09MKWZsYWcKQEAgLTg0NjUsNyArODQ2NSw3IEBAIC0gKERPTVJhbmdlICopc2VsZWN0
ZWRET01SYW5nZQogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JN
YWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAK
IC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404169</attachid>
            <date>2020-07-13 13:11:01 -0700</date>
            <delta_ts>2020-07-13 14:07:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200713131100.patch</filename>
            <type>text/plain</type>
            <size>149485</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNlZDVlN2JlNjI3NTg3
NzYwYmVlMDk2MDYxNmQzMGE3N2Q4N2E1NS4uMWJiNDBmZTEyYjIzNjVmZTcxOGFkYjFiMGViOTAw
ZDI2MzdjM2I3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTEzICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIEltcG9zc2libGUgdG8gcGF1c2UgcGxheWJhY2sgb2YgTWVk
aWFTdHJlYW0gdmlkZW8gdHJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGM5ZDdkOWE3NGI2M2RlMGExYjAwMDE0
MjUzYjBlYzc4MTNhNzQ2MDYuLmVkOGY4YTk0OTBjM2FkNTZhNDljNmExMmU5NjE0Yjg1NDY5NDRm
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcApAQCAtMzA2LDggKzMwNiw4IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBz
CiAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJh
bmdlKCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2Uo
Km1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19F
TkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2
aW91cykgewogICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdpbigpOyBy
aXQgIT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKQEAgLTMxNSw4ICszMTUsOCBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1Jhbmdl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxp
bmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3Jl
YXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAg
ICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSktPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3Nw
ZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwMSwxNSArNjAxLDE0IEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xv
c2VzdFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNs
b3Nlc3RTdHJpbmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0
cmluZ3MpIHsKLSAgICAgICAgaWYgKGF1dG8gc2VhcmNoU3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRp
dG9yKCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVu
Y2VSYW5nZSkucHRyKCksIGZpbmRPcHRpb25zKSkgewotICAgICAgICAgICAgYXV0byBmb3VuZFN0
cmluZ1JhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpzZWFyY2hTdHJpbmdSYW5nZSk7CisgICAgICAg
IGlmIChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJp
bmcoc2VhcmNoU3RyaW5nLCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CiAgICAgICAg
ICAgICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBjbG9zZXN0U3Ry
aW5nUmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJp
bmdSYW5nZSA9ICpzZWFyY2hTdHJpbmdSYW5nZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGluZyByYW5n
ZSBlZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8g
cmFuZ2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwgdXNlIHRo
ZSBsZWFkaW5nIHJhbmdlIGVkZ2VzLgogICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nlc3RTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCA6
IGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgYXV0byYgZm91bmRT
dHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1JhbmdlLmVuZCA6
IGZvdW5kU3RyaW5nUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBzZWFyY2hTdHJpbmdSYW5nZS0+ZW5kIDog
c2VhcmNoU3RyaW5nUmFuZ2UtPnN0YXJ0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGF1dG8gY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLm9m
ZnNldDsKICAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0ID0gZm91bmRT
dHJpbmdQb3NpdGlvbi5vZmZzZXQ7CkBAIC02MTgsNyArNjE3LDcgQEAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUlu
RGlyZWN0aW8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nl
c3RQb3NpdGlvbk9mZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZz
ZXQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dh
cmRTZWFyY2ggJiYgcmVzdWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwg
MCkpCi0gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5n
UmFuZ2U7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpzZWFyY2hT
dHJpbmdSYW5nZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggMWNlNDQyODEyODRiZDU5YzZmODRlMjUw
OTg4YTI5MjI0OTc2YjM0Zi4uOWYyZDY1ZDc0MGRiNzM4ZjU5ZjgzMGJhOGMxYmYwYmY2ODI0YWM5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY5Miw3ICs2
OTIsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRl
eHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogCiAgICAgaWYgKFttYXJrZXJSYW5nZXMg
aXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKSB7CiAgICAgICAgIG9wZXJhdGlvbi50ZXh0
UmFuZ2VzID0gbWFrZVZlY3RvcihtYXJrZXJSYW5nZXMsIFt3cmFwcGVyXSAoaWQgbWFya2VyUmFu
Z2UpIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoW3dyYXBwZXIgcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtl
UmFuZ2UoW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKICAg
ICAgICAgfSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA3MTA1ZGI1ZTk3
YzNmNTIxZDdlNDhjNGUyMjU2N2ZkZWZkYmFjNzhmLi5hZjQzMmI0OTQzZmI0YWIyNjY5Y2M4YTBm
YTVhNzdlY2I2YjgzNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ3Myw3ICs0NzMs
NyBAQCBzdGF0aWMgYm9vbCBhY2NlcHRzRWRpdGluZ0ZvY3VzKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiAgICAgaWYgKCFmcmFtZSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2VPZkNvbnRl
bnRzKCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdp
bkVkaXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9CiAKIHN0
YXRpYyBib29sIGNhbkFjY2Vzc0FuY2VzdG9yKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBhY3RpdmVT
ZWN1cml0eU9yaWdpbiwgRnJhbWUqIHRhcmdldEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXgg
OWI3YTFhNjIxMjE5NWEyZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4uOWVhMTQ5ZDJmNTFkZTI0
YzMzNzE2MGI1M2FmN2MxZWRjZGM4OGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0xODMzLDI2
ICsxODMzLDI2IEBAIEZsb2F0UmVjdCBSYW5nZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9u
U2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9uCiAgICAgcmV0dXJuIGJvdW5kaW5n
UmVjdChDb29yZGluYXRlU3BhY2U6OkFic29sdXRlLCByZWN0T3B0aW9ucyk7CiB9CiAKLVNpbXBs
ZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCitTaW1wbGVSYW5nZSBt
YWtlUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiB7IHsgcmFuZ2Uuc3Rh
cnRDb250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSB9LCB7IHJhbmdlLmVuZENvbnRhaW5l
cigpLCByYW5nZS5lbmRPZmZzZXQoKSB9IH07CiB9CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVS
YW5nZShjb25zdCBSZWY8UmFuZ2U+JiByYW5nZSkKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25z
dCBSZWY8UmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdl
LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAotT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCitPcHRp
b25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBtYWtl
U2ltcGxlUmFuZ2UoKnJhbmdlKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKCpyYW5nZSk7CiB9CiAK
LU9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdl
PiYgcmFuZ2UpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJlZlB0cjxS
YW5nZT4mIHJhbmdlKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkp
OworICAgIHJldHVybiBtYWtlUmFuZ2UocmFuZ2UuZ2V0KCkpOwogfQogCiBSZWY8UmFuZ2U+IGNy
ZWF0ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4
IGE4NjE5Y2I5NDYzNDM0ZThjZTgxZDJiODQ3YzMyNWEwMTIwN2UxMTAuLjkzNWJiZGE0N2I3NjEw
NzkwNzdjNDE2M2UxYzg5OTc0ODI1ZDk5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xNzYsMTAgKzE3
NiwxMCBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7
CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3Qg
UmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSos
IGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5n
ZSYpOwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKLU9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKLU9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOwor
U2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJhbmdlJik7CitTaW1wbGVSYW5nZSBtYWtlUmFu
Z2UoY29uc3QgUmVmPFJhbmdlPiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1ha2VSYW5nZShjb25zdCBSYW5nZSopOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CiAKIFdFQkNPUkVfRVhQ
T1JUIFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDRhOGQwMDRk
ZTkxMjg5YTM0YWYwYzE1MWIzNjljMzUzZGZhZGJjYzkuLjI2NWM0OTdiNjA4MjgzZGIxMWJlM2Yw
N2Y2NGRlZDc1M2E2NDE1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtODIs
NiArODIsMjAgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUo
Tm9kZSYgbm9kZSkKICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9
LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OwogfQogCitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
bWFrZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBzdGFydCwgY29uc3QgT3B0
aW9uYWw8Qm91bmRhcnlQb2ludD4mIGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyAqc3RhcnQsICplbmQg
fSB9OworfQorCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5k
YXJ5UG9pbnQ+JiYgc3RhcnQsIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgZW5kKQoreworICAg
IGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4geyB7IFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSB9IH07Cit9CisKIFNpbXBs
ZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewogICAg
IHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtl
Qm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5oCmluZGV4IDcwZTdjNDI1MWNkZGYzMTdiNDlkOWFhMmRjNDJlNmQ0NTQ3YTc0ZGQuLjAz
Nzc4MGE2MjI0OTFlNzU0ZDA1MGUyYWZhZDMwZTE0OTYyOThmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5oCkBAIC00NiwxMSArNDYsMTQgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKICAgICBX
RUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQm
Jik7CiAKICAgICAvLyBDb252ZW5pZW5jZSBvdmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRp
b24gZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZlIHJhbmdlcy4KLSAgICAvLyBGSVhNRTogT25jZSB0
cmFuc2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VT
aW1wbGVSYW5nZSBpbnN0ZWFkLgorICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zaXRpb24gaXMgb3Zl
ciwgcmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVJhbmdlIGluc3RlYWQuCiAg
ICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKICAgICBTaW1wbGVS
YW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiwgY29u
c3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBtYWtlUmFuZ2UoT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiwgT3B0aW9uYWw8
Qm91bmRhcnlQb2ludD4mJik7CisKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJh
bmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4
IGUyZTg5NGNiOTM3OWM0M2EzMzNiY2IzZjA4MzMyMDE0MzNkN2YyMzAuLjlhYzJlOWQ4NjE2ZGQ2
YTNjMTRhZjAzNTUyMmMzMGU2MGU3MTMxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjQzLDcgKzI0Myw3IEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVj
dGlvbihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2Vu
dFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCku
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5
cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5n
VHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3Jk
UmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBudWxscHRyKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6
OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFk
amFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgV1RGOjpudWxsb3B0KTsKICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjog
ewpAQCAtNjUzLDcgKzY1Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlEaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0CiAjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCiAgICAgYXV0byYgZWRpdG9yID0gbV9kb2N1bWVudC5lZGl0
b3IoKTsKICAgICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7Ci0gICAg
aWYgKCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3Ry
aW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBp
ZiAoIXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJp
bmcsICpzZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGZvciAoYXV0byogbWFya2VyIDogc2VsZWN0aW9uLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKCpzZWxlY3Rpb24sIERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpKQogICAgICAgICByZW1vdmVEaWN0YXRpb25B
bHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxMTJmOTdiMmEwYjY1NDYyNTQ2
NjI4ODI2N2U2MzNiZGJiZmZiNWYxLi44NzBjNGRiYjY4ZDM4MGY5YTFiODFhMGMwZTVmMTNhYTMy
NzRhNGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKQEAgLTc0OSw5ICs3NDksOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJl
cGxhY2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFk
b2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShy
YW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQo
KS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UsIHJh
bmdlVG9CZVJlcGxhY2VkKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gbW92ZVBh
cmFncmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRo
YXQgd291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawogICAgIC8vIHJlbW92
YWxzIHRoYXQgaXQgZG9lcyBjYXVzZSB0aGUgaW5zZXJ0aW9uIG9mICphbm90aGVyKiBwbGFjZWhv
bGRlci4KICAgICBib29sIG5lZWRQbGFjZWhvbGRlciA9IG1fbmVlZFBsYWNlaG9sZGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGNhNjg4YWU0OTViYWMxZDkyMTc3MGJmNDM1ZmNm
YzNmN2UyYjAzZGMuLjk4NzFmODBjZGY0YmE1MTg5YTIwMmE2MjU3YzlmZmJiZDhkNjM0ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTUwNywyMSArNTA3LDE4IEBAIGJvb2wgRWRp
dG9yOjpjYW5EZWxldGUoKSBjb25zdAogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYm
IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpjYW5E
ZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0Citib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIE5vZGUmIHN0YXJ0Q29u
dGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVy
ID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIAotICAgIGlmICghc3RhcnRDb250YWluZXIu
aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFlbmRDb250YWluZXIuaGFzRWRpdGFibGVTdHlsZSgpKQor
ICAgIGlmICghcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgIXJh
bmdlLmVuZC5jb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnQocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAg
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CisgICAgaWYgKHJh
bmdlLmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzb21ldGltZXMgYWxsb3cg
ZGVsZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJsZSByb290cywgbGlrZSB3aGVuIHRoZSBj
YXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCi0gICAgICAgIGlmIChwcmV2aW91cy5pc051
bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSAhPSBzdGFydENvbnRhaW5lci5yb290RWRpdGFibGVFbGVtZW50KCkp
CisgICAgICAgIGF1dG8gcHJldmlvdXMgPSBWaXNpYmxlUG9zaXRpb24geyBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNIH0ucHJldmlvdXMoKTsKKyAg
ICAgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHJhbmdlLnN0YXJ0LmNv
bnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTgsNyArNTU1LDcgQEAgYm9v
bCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biwgVGV4dEdyYW51bGFyaXR5IGcKICAgICAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRp
dGluZ09wZXJhdGlvbigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNob3Vs
ZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxl
Y3RlZFJhbmdlKCkuZ2V0KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7Cisg
ICAgICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxS
aW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgICAgICAgICBkZWxldGVTZWxlY3Rp
b25XaXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAgICAgICAgICAgICAv
LyBJbXBsaWNpdGx5IGNhbGxzIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigp
LgogICAgICAgICB9CkBAIC02MjcsNyArNjI0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFp
blRleHRCeXBhc3NpbmdESFRNTCgpCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dFdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7CiAgICAgU3RyaW5nIHRleHQgPSBy
ZWFkUGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCk7Ci0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGll
bnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBjYW5TbWFy
dFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9CiAKQEAgLTY1Miw3ICs2NDks
NyBAQCBib29sIEVkaXRvcjo6Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCYgcGFzdGVib2FyZCkKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZCgpICYmIHBhc3RlYm9hcmQuY2FuU21hcnRSZXBsYWNlKCk7CiB9CiAK
LWJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5B
Y3Rpb24pCitib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVu
dCYgZnJhZ21lbnQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVwbGFjaW5nRE9NUmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsKICAgICBpZiAoIWNsaWVudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjEsNyArNjU4LDcgQEAgYm9vbCBFZGl0b3I6
OnNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSog
cmVwbGFjaW5nRE8KICAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oY2hpbGQpICYmIGZyYWdtZW50
Lmxhc3RDaGlsZCgpID09IGNoaWxkKQogICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZElu
c2VydFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJlcGxhY2lu
Z0RPTVJhbmdlLCBnaXZlbkFjdGlvbik7CiAKLSAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZElu
c2VydE5vZGUoJmZyYWdtZW50LCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24pOworICAg
IHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZShmcmFnbWVudCwgcmVwbGFjaW5nRE9N
UmFuZ2UsIGdpdmVuQWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50
IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
IG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5k
bGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQpAQCAtNzI0LDI3ICs3MjEsMjEgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJh
Z21lbnQsIFNlbGVjdFJlcGwKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50
LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJh
bmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dCgqcmFuZ2UsIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0
eWxlOjpZZXMsIGVkaXRpbmdBY3Rpb24pOworICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCks
IHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGlu
Z0FjdGlvbik7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVy
biBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkRGVs
ZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJh
bmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgaWYg
KCFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoIWNhbkRlbGV0ZVJhbmdlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShy
YW5nZSk7CisgICAgcmV0dXJuIHJhbmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKCkgJiYgY2FuRGVs
ZXRlUmFuZ2UoKnJhbmdlKSAmJiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFu
Z2UoKnJhbmdlKTsKIH0KIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCkBAIC03NjMsNyAr
NzU0LDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKICAgICByZXR1cm4gIWRpc3BhdGNo
Q2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRF
dmVudEtpbmQ6OkN1dCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBj
b25zdAorYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0
aW9uKSBjb25zdAogewogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0g
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTgw
LDcgKzk3MSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+
JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgZGlzcGF0Y2hJbnB1
dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CiAgICAg
Ci1ib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBS
YW5nZSogcmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVBy
b3BlcnRpZXMmIHN0eWxlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7ICAgCiAgICAgcmV0
dXJuIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCByYW5nZSk7CiB9CkBAIC0xMDEx
LDcgKzEwMDIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJv
cGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwg
c3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwg
Y3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5z
aG91bGRBcHBseVN0eWxlKCpzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUo
c3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAyMiw3ICsxMDEzLDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
d3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHku
Ci0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUt
PnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5n
ZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHls
ZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKSwgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29s
b3JGaWx0ZXJNb2RlKTsKQEAgLTEwMzMsNyArMTAyNCw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBh
cmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlv
biBlCiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKKyAgICBpZiAo
Y2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoKnN0eWxlLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpKQogICAgICAgICBh
cHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIApAQCAtMTI2Nyw3
ICsxMjU4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVu
dChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAoIXNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBG
SVhNRTogU2hvdWxkIHBhc3MgZmFsc2UgdG8gdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcoKSB0byBub3QgcmVtb3ZlIG1hcmtlcnMgaWYKQEAgLTEzMjYsNyArMTMxNyw3IEBA
IGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICgh
c2hvdWxkSW5zZXJ0VGV4dCgiXG4iX3MsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTEzNDYsNyArMTMz
Nyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICgh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAg
Ci0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBF
ZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxu
Il9zLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xNDA2LDEwICsxMzk3LDEwIEBAIHZvaWQgRWRpdG9y
Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgVmlzCiAKIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlv
blNwZWNpZmllciBhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxl
Y3RlZFJhbmdlKCk7Ci0gICAgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlv
bi5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgd2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbik7CiAgICAgaWYgKGFjdGlvbiA9
PSBDdXRBY3Rpb24pIHsKLSAgICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24u
Z2V0KCkpKQorICAgICAgICBpZiAoIXNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbikpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcodHJ1ZSk7CkBAIC0xNTI2LDcgKzE1MTcsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9y
bURlbGV0ZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRSYW5nZVRvS2lsbFJp
bmcoKnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRU
ZXh0KTsKKyAgICBhZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVkUmFuZ2UoKSwgS2lsbFJpbmdJ
bnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnRE
ZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAKICAgICAvLyBjbGVhciB0aGUgInN0YXJ0
IG5ldyBraWxsIHJpbmcgc2VxdWVuY2UiIHNldHRpbmcsIGJlY2F1c2UgaXQgd2FzIHNldCB0byB0
cnVlCkBAIC0xNzg0LDEyICsxNzc1LDEyIEBAIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb24oKQogCiAjZW5kaWYKIAotYm9vbCBFZGl0b3I6OnNob3VsZEVuZEVk
aXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNob3VsZEVuZEVkaXRpbmcoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+
c2hvdWxkRW5kRWRpdGluZyhyYW5nZSk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGRCZWdpbkVk
aXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNob3VsZEJlZ2luRWRpdGluZyhjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgp
LT5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2UpOwogfQpAQCAtMTg0MSw3ICsxODMyLDcgQEAgdm9p
ZCBFZGl0b3I6OmRpZEVuZEVkaXRpbmcoKQogICAgICAgICBjbGllbnQoKS0+ZGlkRW5kRWRpdGlu
ZygpOwogfQogCi12b2lkIEVkaXRvcjo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJh
bmdlKiByYW5nZSkKK3ZvaWQgRWRpdG9yOjp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKICAgICBpZiAoY2xpZW50KCkp
CiAgICAgICAgIGNsaWVudCgpLT53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQocmFuZ2Up
OwpAQCAtMTkyNCwxNCArMTkxNSwxNCBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6YmFzZVdy
aXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAKIHZvaWQgRWRpdG9yOjpz
ZWxlY3RDb21wb3NpdGlvbigpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbXBvc2l0
aW9uUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBUaGUgY29tcG9zaXRpb24g
Y2FuIHN0YXJ0IGluc2lkZSBhIGNvbXBvc2VkIGNoYXJhY3RlciBzZXF1ZW5jZSwgc28gd2UgaGF2
ZSB0byBvdmVycmlkZSBjaGVja3MuCiAgICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTc4MT4KICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbjsK
LSAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRh
dGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5lbmQpKTsKICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7CiB9CiAKQEAgLTI0ODUsOSArMjQ3Niw5
IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25z
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihz
dGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdv
cmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgYXV0byBhZGphY2VudFdvcmRz
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAg
ICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRD
aGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0
ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdv
cmRSYW5nZSkpOworICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
dGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFjZW50V29yZFJhbmdl
LCBhZGphY2VudFdvcmRSYW5nZSk7CiAjZWxzZQogI2lmICFVU0UoQVVUT01BVElDX1RFWFRfUkVQ
TEFDRU1FTlQpCiAgICAgVU5VU0VEX1BBUkFNKGRvUmVwbGFjZW1lbnQpOwpAQCAtMjU3Miw3ICsy
NTYzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgLy8gZnVsbCBzZW50ZW5j
ZSBhcyB3ZSBjYW4sIHJlc3BlY3RpbmcgYm91bmRhcmllcyB3aGVyZSBzcGVsbGNoZWNraW5nIGlz
IGRpc2FibGVkLgogICAgICAgICBmdWxsU2VudGVuY2VSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpHcmFtbWFyKTsKICAgICAgICAgc3BlbGxDaGVja2luZ1JhbmdlLT5zdGFydC5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tp
bmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVS
YW5nZShmdWxsU2VudGVuY2VSYW5nZSkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hlY2tpbmdSYW5n
ZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGZ1bGxTZW50ZW5jZVJhbmdlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjU4MCw3ICsyNTcxLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ2hlY2sgc3BlbGxpbmcgb2Ygb25lIHdvcmQKLSAg
ICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5ncyhWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldv
cmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSwgbWlzc3BlbGxpbmdSYW5nZSk7
CiAKICAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkLgpAQCAtMjU5OSw3ICsy
NTkwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVj
dGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5
cGVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigpLnNob3VsZEluc2VydFRleHQo
YXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9y
KCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNlbGVjdFJl
cGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIApA
QCAtMjYxNiw3ICsyNjA3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICNlbmRpZgogfQog
ICAgIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKK3ZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
T3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBjaGVj
a1NwZWxsaW5nLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
IHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVz
LgpAQCAtMjY0NCw5ICsyNjM1LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JC
YWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBUZXh0Q2hlY2tpbmdIZWxwZXIgY2hlY2tlcigqY2xpZW50KCks
ICpzZWFyY2hSYW5nZSk7Ci0gICAgaWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAgIGNoZWNrZXIu
bWFya0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIGVsc2UgaWYg
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgIGlmIChjaGVja1NwZWxsaW5nKSB7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ0xpdmVSYW5nZTsKKyAgICAgICAg
Y2hlY2tlci5tYXJrQWxsTWlzc3BlbGxpbmdzKGZpcnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2UpOwor
ICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RNaXNzcGVsbGlu
Z0xpdmVSYW5nZSk7CisgICAgfSBlbHNlIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
ICAgICAgICAgY2hlY2tlci5tYXJrQWxsQmFkR3JhbW1hcigpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oc2VsZWN0aW9uKTsKQEAgLTI2NzQsMTggKzI2NjcsMTggQEAgYm9vbCBFZGl0b3I6Omlz
U3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKICAgICByZXR1cm4gaXNT
cGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFy
KHNlbGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KICAgICAKIHZvaWQg
RWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CisgICAgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKICAgICBtYXJrTWlzc3BlbGxp
bmdzT3JCYWRHcmFtbWFyKHNlbGVjdGlvbiwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBSZWZQ
dHI8UmFuZ2U+JiYgc3BlbGxpbmdSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBncmFtbWFyUmFuZ2UpCit2b2lkIEVkaXRvcjo6
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENo
ZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucywgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGF1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZ3JhbW1hclJh
bmdlKQogewogICAgIGlmIChwbGF0Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNzEwLDggKzI3MDMsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlw
ZQogICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcigmZWRpdGFibGVOb2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByYW5nZVRvQ2hlY2sgPSBzaG91bGRNYXJrR3JhbW1h
ciA/IGdyYW1tYXJSYW5nZS5yZWxlYXNlTm9uTnVsbCgpIDogc3BlbGxpbmdSYW5nZS5yZWxlYXNl
Tm9uTnVsbCgpOwotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0NoZWNrKHJh
bmdlVG9DaGVjay5nZXQoKSk7CisgICAgYXV0byYgcmFuZ2VUb0NoZWNrID0gc2hvdWxkTWFya0dy
YW1tYXIgPyAqZ3JhbW1hclJhbmdlIDogKnNwZWxsaW5nUmFuZ2U7CisgICAgVGV4dENoZWNraW5n
UGFyYWdyYXBoIHBhcmFncmFwaFRvQ2hlY2soY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9DaGVjaykp
OwogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0yNzE5LDggKzI3MTIsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogCiAgICAgLy8g
SW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlvbmFsbHkgY2hlY2sgcGFyYWdyYXBoLXdp
ZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlVGV4
dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0Q2hlY2tpbmdPcHRpb25zKTsKLSAg
ICBhdXRvIHRleHRSZXBsYWNlbWVudFJhbmdlID0gYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA/
IG1ha2VSZWYoKmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UpIDogcmFuZ2VUb0NoZWNrLmNvcHlS
ZWYoKTsKLSAgICBhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29s
dmVkT3B0aW9ucywgVGV4dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFsLCBhc3luY2hyb25vdXMg
PyBtYWtlUmVmKHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSkgOiBXVEZNb3ZlKHJh
bmdlVG9DaGVjayksIFdURk1vdmUodGV4dFJlcGxhY2VtZW50UmFuZ2UpLCBwYXJhZ3JhcGhUb0No
ZWNrLnBhcmFncmFwaFJhbmdlKCkpOworICAgIGF1dG8mIHRleHRSZXBsYWNlbWVudFJhbmdlID0g
YXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA/ICphdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlIDog
cmFuZ2VUb0NoZWNrOworICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVh
dGUocmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGFzeW5j
aHJvbm91cyA/IFJlZjxSYW5nZT4geyBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCkg
fSA6IGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvQ2hlY2spLCBjcmVhdGVMaXZlUmFuZ2UodGV4dFJl
cGxhY2VtZW50UmFuZ2UpLCBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCkpOwogICAg
IGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzUzLDkgKzI3NDYsOSBAQCBz
dGF0aWMgYm9vbCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUoVGV4dENoZWNraW5nVHlw
ZSB0eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlcGxhY2VSYW5n
ZUZvclNwZWxsQ2hlY2tpbmcoUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50KQordm9pZCBFZGl0b3I6OnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
KQogewotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFj
ZSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCByZXBsYWNlbWVudCktPmFw
cGx5KCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1Rl
eHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCwgUmFu
Z2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50LCBDaGFyYWN0ZXJS
YW5nZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKQEAgLTI4OTUsNyArMjg4OCw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hh
bmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgQ3JlYXRlTGlua0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCByZXBs
YWNlbWVudCktPmFwcGx5KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBz
aG91bGRJbnNlcnRUZXh0KHJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZS5wdHIoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpUeXBlZCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgp
ICYmIHNob3VsZEluc2VydFRleHQocmVwbGFjZW1lbnQsIG1ha2VSYW5nZShyYW5nZVRvUmVwbGFj
ZSksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7CiAgICAgICAgICAgICAgICAgY29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKHBhcmFncmFwaCwg
cmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50LCB7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5n
dGggfSk7CiAKICAgICAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7CkBAIC0yOTQ4LDEyICsyOTQxLDEyIEBA
IHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nKQogICAgIGlmIChyZXBsYWNlZFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgp
OwotICAgIGlmICghc2VsZWN0aW9uIHx8ICFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5n
LCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2hv
dWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZTo6UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCAqc2VsZWN0aW9uKTsKLSAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKCpzZWxlY3Rpb24pOworICAgIFRleHRDaGVja2lu
Z1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pKTsKICAgICBy
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50
OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKICAgICBhdXRvIGNo
YW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShDaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGgu
Y2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSkpOwogICAgIGNoYW5nZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hh
bmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKQEAgLTI5
NzksMTEgKzI5NzIsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWMKICAgICAgICAgaWYgKG1h
cmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgdGV4
dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAgICAgICAg
IGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShn
cmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKTsKKyAgICAgICAgbWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVs
bENoZWNraW5nUmFuZ2UsIHNwZWxsQ2hlY2tpbmdSYW5nZSwgZ3JhbW1hclNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxS
YW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVj
dGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBpZiAobWFya0dyYW1tYXIpCiAgICAg
ICAgIG1hcmtCYWRHcmFtbWFyKGdyYW1tYXJTZWxlY3Rpb24pOwpAQCAtMzA4NiwyMyArMzA3OSwx
OCBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihwb3NpdGlvbiwgb3JpZ2luYWxT
dHJpbmcpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgd2luZG93UG9pbnQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5n
ZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAgICBhdXRvIGRvY3Vt
ZW50ID0gbV9kb2N1bWVudC5mcmFtZSgpLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwog
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1dG8gZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byBmcmFtZVBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50
KTsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkgfTsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpKSB9
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25B
ZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIFJl
dmVhbEV4dGVudE9wdGlvbiByZXZlYWxFeHRlbnRPcHRpb24pCkBAIC0zMTI5LDE3ICszMTE3LDE2
IEBAIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGJvb2wgaWdub3JlLCBS
ZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsCiAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVy
RWRpdGluZ09wZXJhdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFJl
dmVhbEV4dGVudCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb21wb3NpdGlvblJhbmdl
KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2Uo
KSBjb25zdAogewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG1fY29tcG9zaXRpb25Ob2RlLT5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBzdGFydCA9IHN0
ZDo6bWluKG1fY29tcG9zaXRpb25TdGFydCwgbGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBlbmQgPSBz
dGQ6Om1pbihzdGQ6Om1heChzdGFydCwgbV9jb21wb3NpdGlvbkVuZCksIGxlbmd0aCk7Ci0gICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGVhcmx5IHJldHVybiBuZWVlZD8KKyAgICB1bnNpZ25lZCBl
bmQgPSBzdGQ6OmNsYW1wKG1fY29tcG9zaXRpb25FbmQsIHN0YXJ0LCBsZW5ndGgpOwogICAgIGlm
IChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBSYW5n
ZTo6Y3JlYXRlKG1fY29tcG9zaXRpb25Ob2RlLT5kb2N1bWVudCgpLCBtX2NvbXBvc2l0aW9uTm9k
ZS5nZXQoKSwgc3RhcnQsIG1fY29tcG9zaXRpb25Ob2RlLmdldCgpLCBlbmQpOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgeyAqbV9jb21wb3NpdGlvbk5vZGUs
IHN0YXJ0IH0sIHsgKm1fY29tcG9zaXRpb25Ob2RlLCBlbmQgfSB9IH07CiB9CiAKIGJvb2wgRWRp
dG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVu
c2lnbmVkJiBzZWxlY3Rpb25FbmQpIGNvbnN0CkBAIC0zMjAxLDcgKzMxODgsNyBAQCB2b2lkIEVk
aXRvcjo6dHJhbnNwb3NlKCkKICAgICB9CiAKICAgICAvLyBJbnNlcnQgdGhlIHRyYW5zcG9zZWQg
Y2hhcmFjdGVycy4KLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQodHJhbnNwb3NlZCwgcmFuZ2Uu
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dCh0cmFuc3Bvc2VkLCBuZXdTZWxlY3Rpb24uZmlyc3RSYW5nZSgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dCh0cmFuc3Bvc2VkLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8s
IEVkaXRBY3Rpb246Okluc2VydCk7CiB9CkBAIC0zMzU3LDEzICszMzQ0LDEzIEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lkdGgoSW50UmVjdCYgcmVjdCkKICAgICAgICAgcmVj
dC5zZXRIZWlnaHQoMCk7CiB9CiAKLUludFJlY3QgRWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShS
YW5nZSogcmFuZ2UpIGNvbnN0CitJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIHJhbmdlLT5vd25lckRvY3VtZW50
KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlv
dXQoKTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihyYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRW
aXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSwg
RE9XTlNUUkVBTSk7CiAKLSAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZCgpKSB7CisgICAgaWYgKHJh
bmdlLmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBHZXR0aW5nIGNhcmV0IHJlY3Qg
YW5kIHJlbW92aW5nIGNhcmV0IHdpZHRoIGlzIGEgdmVyeSByb3VuZGFib3V0IHdheSB0byBnZXQg
Y29sbGFwc2VkIHJhbmdlIGxvY2F0aW9uLgogICAgICAgICAvLyBJbiBwYXJ0aWN1bGFyLCB3aWR0
aCBhZGp1c3RtZW50IGRvZXNuJ3Qgd29yayBmb3Igcm90YXRlZCB0ZXh0LgogICAgICAgICBJbnRS
ZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVyZWRQb3NpdGlvbihzdGFydFZpc2libGVQb3NpdGlv
bikuYWJzb2x1dGVSZWN0KCk7CkBAIC0zMzcxLDEwICszMzU4LDEwIEBAIEludFJlY3QgRWRpdG9y
OjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAgICAgICAgIHJldHVybiBz
dGFydENhcmV0UmVjdDsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBv
c2l0aW9uKHJhbmdlLT5lbmRQb3NpdGlvbigpLCBVUFNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uu
ZW5kKSwgVVBTVFJFQU0pOwogCiAgICAgaWYgKGluU2FtZUxpbmUoc3RhcnRWaXNpYmxlUG9zaXRp
b24sIGVuZFZpc2libGVQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFu
Z2UpKSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94
ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsKIAogICAgIExheW91
dFVuaXQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lOwogICAgIEludFJlY3Qgc3RhcnRDYXJldFJlY3Qg
PSBSZW5kZXJlZFBvc2l0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uKS5hYnNvbHV0ZVJlY3QoJmV4
dHJhV2lkdGhUb0VuZE9mTGluZSk7CkBAIC0zNDAwLDcgKzMzODcsNyBAQCBib29sIEVkaXRvcjo6
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
biwgY29uc3QgVgogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5mcmFt
ZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3U2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOworICAgIHJldHVybiBj
bGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCks
IGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5k
U2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQpAQCAtMzQ4Nyw3ICszNDc0LDcgQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKLSAg
ICBhdXRvIHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQoKSwgb3B0aW9ucyk7CisgICAgYXV0byByZXN1
bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLCBv
cHRpb25zKTsKICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTM0OTksMTA2ICszNDg2LDEwMiBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBT
dHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVmZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gU3RhcnQgZnJv
bSBhbiBlZGdlIG9mIHRoZSByZWZlcmVuY2UgcmFuZ2UsIGlmIHRoZXJlJ3MgYSByZWZlcmVuY2Ug
cmFuZ2UgdGhhdCdzIG5vdCBpbiBzaGFkb3cgY29udGVudC4gV2hpY2ggZWRnZQogICAgIC8vIGlz
IHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIHNlYXJjaGluZyBmb3J3YXJkIG9yIGJhY2t3
YXJkLCBhbmQgd2hldGhlciBzdGFydEluU2VsZWN0aW9uIGlzIHNldC4KLSAgICBSZWZQdHI8UmFu
Z2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKSk7CiAKICAgICBib29s
IGZvcndhcmQgPSAhb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpOwogICAgIGJvb2wgc3RhcnRJ
blJlZmVyZW5jZVJhbmdlID0gcmVmZXJlbmNlUmFuZ2UgJiYgb3B0aW9ucy5jb250YWlucyhTdGFy
dEluU2VsZWN0aW9uKTsKKyAgICBhdXRvIHNoYWRvd1RyZWVSb290ID0gcmVmZXJlbmNlUmFuZ2Ug
PyByZWZlcmVuY2VSYW5nZS0+c3RhcnRDb250YWluZXIoKS5jb250YWluaW5nU2hhZG93Um9vdCgp
IDogbnVsbHB0cjsKKworICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAgaWYgKHJlZmVyZW5jZVJhbmdlKSB7CiAgICAg
ICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0
SW5SZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkgOiByZWZl
cmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS5zdGFy
dCA9IHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydCA6IHJlZmVy
ZW5jZVJhbmdlLT5lbmQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRFbmQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9u
KCkgOiByZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHNlYXJj
aFJhbmdlLmVuZCA9IHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5lbmQg
OiByZWZlcmVuY2VSYW5nZS0+c3RhcnQ7CiAgICAgfQotCi0gICAgUmVmUHRyPFNoYWRvd1Jvb3Q+
IHNoYWRvd1RyZWVSb290ID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5jb250YWluaW5nU2hhZG93Um9vdCgpIDogbnVsbHB0cjsKICAgICBpZiAoc2hh
ZG93VHJlZVJvb3QpIHsKICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGRO
b2RlcygpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLmVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CisgICAgICAg
ICAgICBzZWFyY2hSYW5nZS5zdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRl
bnRzKCpzaGFkb3dUcmVlUm9vdCk7CiAgICAgfQorICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSBmaW5k
UGxhaW5UZXh0KHNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpOwogCi0gICAgUmVmUHRyPFJh
bmdlPiByZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hS
YW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAgICAgLy8gSWYgd2Ugc3RhcnRlZCBpbiB0aGUgcmVm
ZXJlbmNlIHJhbmdlIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBtYXRjaGVzIHRoZSByZWZl
cmVuY2UgcmFuZ2UsIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVpbGQgYSBzZWxlY3Rpb24gd2l0aCB0
aGUgZm91bmQgcmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLgogICAgIC8vIENv
bXBhcmUgcmFuZ2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVjdHMgdG8gaWdub3JlIHRoZSB3
YXkgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1hZGUuCi0gICAgaWYgKHN0YXJ0SW5S
ZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChjcmVhdGVMaXZlUmFuZ2UoVmlzaWJsZVNl
bGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCByZWZlcmVu
Y2VSYW5nZSkpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1l
bnQoKSk7CisgICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBWaXNpYmxlU2VsZWN0aW9u
KHJlc3VsdFJhbmdlKS50b05vcm1hbGl6ZWRSYW5nZSgpID09IHJlZmVyZW5jZVJhbmdlKSB7Cisg
ICAgICAgIHNlYXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KCkpOwogICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRTdGFydChyZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBzZWFy
Y2hSYW5nZS5zdGFydCA9IHJlZmVyZW5jZVJhbmdlLT5lbmQ7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQocmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSk7Ci0KKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLmVuZCA9IHJlZmVyZW5jZVJhbmdlLT5zdGFy
dDsKICAgICAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7CiAgICAgICAgICAgICBpZiAoZm9yd2Fy
ZCkKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwg
c2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAgICAgICBzZWFy
Y2hSYW5nZS5lbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpzaGFkb3dU
cmVlUm9vdCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmFu
Z2Uuc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqc2hhZG93VHJl
ZVJvb3QpOwogICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFu
Z2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykpOworICAgICAg
ICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9u
cyk7CiAgICAgfQogCiAgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW4gdGhlIHNoYWRvdyB0
cmVlLCBzZWFyY2ggaW4gbWFpbiBjb250ZW50IGZvbGxvd2luZyB0aGUgc2hhZG93IHRyZWUuCi0g
ICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkgewotICAg
ICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKLSAgICAgICAg
aWYgKHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpIHsKKyAgICBpZiAocmVzdWx0UmFuZ2Uu
Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChh
dXRvIGhvc3QgPSBzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKSB7CiAgICAgICAgICAgICBp
ZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcigq
c2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmFu
Z2UuZW5kID0gKm1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKCpob3N0KTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3JlKCpzaGFkb3dU
cmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5zdGFy
dCA9ICptYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGUoKmhvc3QpOwogICAgICAgICB9Ci0KLSAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNo
UmFuZ2UsIHRhcmdldCwgb3B0aW9ucykpOworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFp
blRleHQoc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgfQogCiAgICAgLy8gSWYg
d2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdyYXBwaW5nLCBzZWFyY2ggYWdhaW4g
aW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxsCiAgICAgLy8gcmVkdW5kYW50bHkgcmUt
c2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQgaW4gc29tZSBjYXNlcykuCi0gICAgaWYg
KHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQp
KSB7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQo
cmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICBpZiAo
cmVzdWx0UmFuZ2UuY29sbGFwc2VkKCkgJiYgb3B0aW9ucy5jb250YWlucyhXcmFwQXJvdW5kKSkg
eworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGRv
Y3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpOwogICAgICAgICAvLyBXZSB1c2VkIHRvIHJldHVy
biBmYWxzZSBoZXJlIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHNhbWUgcmFuZ2UgdGhhdCB3ZSBz
dGFydGVkIHdpdGgKICAgICAgICAgLy8gKGUuZy4sIHRoZSByZWZlcmVuY2UgcmFuZ2Ugd2FzIGFs
cmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyB0ZXh0KS4gQnV0IHdlIGRlY2lkZWQgdGhh
dAogICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBhIHN1Y2Nlc3MgY2FzZSBpbnN0ZWFkLCBzbyB3
ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCBpbiB0aGF0IGNhc2UuCiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSA/IG51bGxwdHIgOiByZXN1bHRSYW5nZTsKKyAgICBy
ZXR1cm4gcmVzdWx0UmFuZ2UuY29sbGFwc2VkKCkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9u
YWwocmVzdWx0UmFuZ2UpOwogfQogCi1zdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSYg
ZnJhbWUsIFJhbmdlJiByYW5nZSkKK3N0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBm
cmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIGZvciAoYXV0byogb3duZXJF
bGVtZW50ID0gZnJhbWUub3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50
ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGlm
ICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5vd25lckRvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UuaW50ZXJzZWN0c05vZGUoKm93bmVyRWxl
bWVudCk7CisgICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5z
dGFydC5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSktPmludGVyc2VjdHNOb2RlKCpvd25lckVsZW1lbnQpOwogICAgICAgICAgICAg
cmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdW5zaWduZWQg
RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSog
cmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRj
aGVzLCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4qIG1hdGNoZXMpCit1bnNpZ25lZCBFZGl0b3I6OmNv
dW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgcmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBi
b29sIG1hcmtNYXRjaGVzLCBWZWN0b3I8U2ltcGxlUmFuZ2U+KiBtYXRjaGVzKQogewogICAgIGlm
ICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlYXJjaFJhbmdlOwog
ICAgIGlmIChyYW5nZSkgewotICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0g
JmRvY3VtZW50KCkpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOworICAgICAgICBp
ZiAoJnJhbmdlLT5zdGFydC5kb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQorICAgICAgICAgICAg
c2VhcmNoUmFuZ2UgPSAqcmFuZ2U7CiAgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZSgq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGlmICghc2VhcmNoUmFuZ2UpCi0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNv
bnRlbnRzKGRvY3VtZW50KCkpOworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKIAotICAgIE5vZGUmIG9yaWdpbmFsRW5kQ29u
dGFpbmVyID0gc2VhcmNoUmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIGludCBvcmlnaW5hbEVu
ZE9mZnNldCA9IHNlYXJjaFJhbmdlLT5lbmRPZmZzZXQoKTsKKyAgICBhdXRvIG9yaWdpbmFsRW5k
ID0gc2VhcmNoUmFuZ2UtPmVuZDsKIAogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAg
IGRvIHsKQEAgLTM2MDcsOCArMzU5MCw4IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVz
Rm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAg
ICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNJblNoYWRvd1RyZWUo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dFN0YXJ0QWZ0ZXIoKnJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+c2hhZG93SG9zdCgpKTsK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQob3JpZ2luYWxFbmRDb250YWluZXIsIG9y
aWdpbmFsRW5kT2Zmc2V0KTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5lbmQgPSBvcmlnaW5h
bEVuZDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM2MjMsMTUgKzM2
MDYsMTQgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgaWYgKGxpbWl0ID4gMCAm
JiBtYXRjaENvdW50ID49IGxpbWl0KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8g
U2V0IHRoZSBuZXcgc3RhcnQgZm9yIHRoZSBzZWFyY2ggcmFuZ2UgdG8gYmUgdGhlIGVuZCBvZiB0
aGUgcHJldmlvdXMKLSAgICAgICAgLy8gcmVzdWx0IHJhbmdlLiBUaGVyZSBpcyBubyBuZWVkIHRv
IHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAotICAgICAgICAvLyBzaW5jZSBmaW5kUGxhaW5U
ZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdGhlIHZpc2libGUKLSAgICAg
ICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChXVEZNb3Zl
KHJlc3VsdFJhbmdlLmVuZC5jb250YWluZXIpLCByZXN1bHRSYW5nZS5lbmQub2Zmc2V0KTsKKyAg
ICAgICAgLy8gU2V0IHRoZSBuZXcgc3RhcnQgZm9yIHRoZSBzZWFyY2ggcmFuZ2UgdG8gYmUgdGhl
IGVuZCBvZiB0aGUgcHJldmlvdXMgcmVzdWx0IHJhbmdlLgorICAgICAgICAvLyBUaGVyZSBpcyBu
byBuZWVkIHRvIHVzZSBWaXNpYmxlUG9zaXRpb24gaGVyZTogZmluZFBsYWluVGV4dCB3aWxsIHVz
ZSBUZXh0SXRlcmF0b3IgdG8gZ28gb3ZlciB2aXNpYmxlIHRleHQgbm9kZXMuCisgICAgICAgIHNl
YXJjaFJhbmdlLT5zdGFydCA9IFdURk1vdmUocmVzdWx0UmFuZ2UuZW5kKTsKIAotICAgICAgICBO
b2RlKiBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zaGFkb3dSb290KCk7Ci0gICAgICAg
IGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3Qt
PmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQo
KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+
c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5lbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpz
aGFkb3dUcmVlUm9vdCk7CisgICAgICAgIH0KICAgICB9IHdoaWxlICh0cnVlKTsKIAogICAgIHJl
dHVybiBtYXRjaENvdW50OwpAQCAtMzk0MCwyMiArMzkyMiwyNCBAQCBTdHJpbmcgRWRpdG9yOjpz
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKICAgICByZXR1cm4gcGxhaW5UZXh0KCpy
YW5nZSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRh
dGVSZXF1ZXN0KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmNvbnRleHRS
YW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKKyAgICBhdXRv
JiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1
dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKSkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQ
YXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOworICAgIGlmICghc3RhcnQgfHwgIWVu
ZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpzdGFydCwg
KmVuZCB9IH07CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2lu
Z1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29uc3QKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRl
eHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdAogewogICAgIGlmICghcmVzdWx0LnJhbmdl
Lmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IGNv
bnRleHRSYW5nZSA9IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGNvbnRleHRSYW5nZSA9IGNvbnRleHRSYW5n
ZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKICAgICBpZiAoIWNvbnRleHRSYW5nZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFy
YWN0ZXJSYW5nZSgqY29udGV4dFJhbmdlLCByZXN1bHQucmFuZ2UpKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjb250ZXh0
UmFuZ2UsIHJlc3VsdC5yYW5nZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpzY2hlZHVsZUVkaXRvclVJ
VXBkYXRlKCkKQEAgLTQyMjUsOCArNDIwOSw4IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAgICAgbV9p
c0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0cnVlOwogCiAgICAgaWYgKGF1dG8gcmFuZ2Ug
PSByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChhY2NlcHRlZENhbmRpZGF0ZSkpIHsKLSAgICAg
ICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIHJh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKLSAgICAgICAgICAgIFJlcGxh
Y2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6Y3JlYXRlKHJhbmdlLmdldCgpLCBhY2NlcHRlZENhbmRp
ZGF0ZS5yZXBsYWNlbWVudCktPmFwcGx5KCk7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0
KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCisgICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCkt
PmFwcGx5KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQsIG51bGxwdHIpOwogCkBAIC00MjU4LDE2ICs0MjQyLDE2IEBAIHZvaWQg
RWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpCiAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7
CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQogewot
ICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNlbGVjdGlvbiB0byBp
bmNsdWRlIHRoZSBhbmNob3IgdGFnIGl0J3MgaW4/Ci0gICAgLy8gV2hvZXZlciB3cm90ZSB0aGlz
IGNvZGUgb3JpZ2luYWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4cGxhaW5pbmcg
dGhlIHJhdGlvbmFsZS4KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwotICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKCk7Ci0gICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKLSAgICBhdXRvKiBlbmNsb3NpbmdB
bmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1v
bkFuY2VzdG9yKSwgSFRNTE5hbWVzOjphVGFnKTsKLSAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYm
IGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpKSwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgPj0gMCkK
LSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDApOworICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNlbGVjdGlvbiB0byBpbmNsdWRlIHRo
ZSBhbmNob3IgdGFnIGl0J3MgaW4/IFdob2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkg
Zm9yZ290IHRvIGxlYXZlIHVzIGEgY29tbWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCisg
ICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmly
c3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS0+c3RhcnQuY29u
dGFpbmVyLCByYW5nZS0+ZW5kLmNvbnRhaW5lcikuZ2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7
CisgICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS0+c3RhcnQpKSA+PSAwKQorICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbmNsb3NpbmdBbmNob3Ip
OworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiByYW5nZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgKaW5kZXggNjlkNjA1OTMwMjY1MmY2NzJmZDI1OTE1MmQzZGNmYjQ1ZmYwOTI2Zi4u
OWRlZGRjYTM4MzZmMTUzMDM2Y2ZhZjljODBkYWQzOTk0NGY0NDlmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxMywxMCArMjEzLDEwIEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG91dGRlbnQoKTsKICAgICB2b2lkIHRyYW5zcG9z
ZSgpOwogCi0gICAgYm9vbCBzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50Jiwg
UmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwotICAgIGJv
b2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopOworICAgIGJvb2wg
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlvbik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRU
ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvcklu
c2VydEFjdGlvbikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGREZWxldGVS
YW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSBjb25zdDsKKyAgICBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsK
IAogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbik7CiAKQEAgLTMyMiwxNiArMzIyLDE2IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3Q7CiAgICAg
Ym9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCk7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAg
IHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQg
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGdyYW1tYXJTZWxlY3Rpb24pOwogICAgIHZvaWQgbWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhSYW5nZSYs
IGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVJhbmdlRm9y
U3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAg
Ym9vbCBpc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9vdmVyd3JpdGVN
b2RlRW5hYmxlZDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlT3ZlcndyaXRlTW9k
ZUVuYWJsZWQoKTsKIAotICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFJlZlB0cjxSYW5nZT4mJiBzcGVs
bGluZ1JhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgUmVm
UHRyPFJhbmdlPiYmIGdyYW1tYXJSYW5nZSk7CisgICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZ3JhbW1hclJhbmdlKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIE5P
X1JFVFVSTl9EVUVfVE9fQVNTRVJUCiAjZW5kaWYKQEAgLTM0Myw4ICszNDMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzaG93U3BlbGxpbmdHdWVzc1BhbmVsKCk7CiAgICAgYm9vbCBzcGVsbGluZ1Bh
bmVsSXNTaG93aW5nKCk7CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopOwot
ICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopOworICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJik7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKICAgICB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7
CiAgICAgYm9vbCBjYW5VbmRvKCkgY29uc3Q7CkBAIC0zNTYsNyArMzU2LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKTsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKTsK
LSAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopOworICAgIHZv
aWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYpOwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKIAogICAg
IHZvaWQgc2hvd0ZvbnRQYW5lbCgpOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmKTsgLy8g
aWYgbm8gZXhpc3RpbmcgY29tcG9zaXRpb24sIHJlcGxhY2VzIHNlbGVjdGlvbgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKICAgICBib29sIGNhbmNlbENvbXBv
c2l0aW9uSWZTZWxlY3Rpb25Jc0ludmFsaWQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gY29tcG9zaXRpb25SYW5nZSgpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZ2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0
YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9uRW5kKSBjb25zdDsKIAogICAgIC8vIGdldHRpbmcgaW50
ZXJuYXRpb25hbCB0ZXh0IGlucHV0IGNvbXBvc2l0aW9uIHN0YXRlIChmb3IgdXNlIGJ5IElubGlu
ZVRleHRCb3gpCkBAIC00MDAsNyArNDAwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sLCBSZXZlYWxTZWxlY3Rpb24gc2hv
dWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24gPSBSZXZlYWxTZWxlY3Rpb246Olllcyk7CiAgICAg
Ym9vbCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdl
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC00MTEsNyArNDExLDcgQEAgcHVi
bGljOgogCiAgICAgRWRpdGluZ0JlaGF2aW9yIGJlaGF2aW9yKCkgY29uc3Q7CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNvbmZpcm1NYXJrZWRUZXh0KCk7CkBAIC00NDYsNyArNDQ2LDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0
IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYsIEZpbmRPcHRpb25zKTsKIAogICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0
LgogICAgIHZvaWQgc2V0TWFyayhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CkBAIC00NTUsMTMg
KzQ1NSwxMyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uOjpV
bnNwZWNpZmllZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZmlyc3RS
ZWN0Rm9yUmFuZ2UoUmFuZ2UqKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGZp
cnN0UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAKICAgICB2b2lkIHNl
bGVjdGlvbldpbGxDaGFuZ2UoKTsKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBPcHRpb25TZXQ8RnJhbWVTZWxl
Y3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbj4pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBk
YXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29u
c3QgU3RyaW5nJiwgUmFuZ2UqLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFy
a01hdGNoZXMsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiopOworICAgIFdFQkNPUkVfRVhQT1JUIHVu
c2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRj
aGVzLCBWZWN0b3I8U2ltcGxlUmFuZ2U+Kik7CiAgICAgYm9vbCBtYXJrZWRUZXh0TWF0Y2hlc0Fy
ZUhpZ2hsaWdodGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wpOwogCkBAIC01NDUsOCArNTQ1LDggQEAgcHVi
bGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlKFRleHRDaGVja2luZ1Jlc3VsdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdl
PiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQm
KSBjb25zdDsKICAgICBib29sIGlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlOyB9CiAKICAgICB2b2lkIHNldElz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oYm9vbCBiKSB7IG1faXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyA9IGI7IH0KQEAgLTU3OSw3ICs1NzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAot
ICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKKyAgICBib29sIGNhbkRlbGV0
ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0
V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYpOwogICAgIHZvaWQgcGFzdGVXaXRoUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkKiwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPik7CkBAIC01ODgsNyArNTg4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKERvY3VtZW50RnJh
Z21lbnQmKTsKIAogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9u
KGNvbnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZO
ZWVkZWQsIFJldmVhbEV4dGVudE9wdGlvbiA9IERvTm90UmV2ZWFsRXh0ZW50KTsKLSAgICB2b2lk
IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJv
b2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
KyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOwogICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiByZXNvbHZl
VGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdEVkaXRhYmxlRWxlbWVudCwgT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IpIGNvbnN0OwpAQCAtNjA4LDcgKzYwOCw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25z
dDsKIAotICAgIFJlZlB0cjxSYW5nZT4gYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpOworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZWxlY3Rpb25JbldlYkFyY2hp
dmVGb3JtYXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4
IGQ2ZWE0MjZkN2Y3ZmU3NjVmYjAwOTdlM2Q5NWFlYzc1OWRhNDI3ZWYuLjQ0MGZjZjZmYTVmZmYx
ZmRiODJlNmQ1NDUyMjkxMGU2NWM2YTkxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcApAQCAtMTc2LDE1ICsxNzYsMTUgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUlu
c2VydE5vZGUoRnJhbWUmIGZyYW1lLCBSZWY8Tm9kZT4mJiBjb250ZW50KQogc3RhdGljIGJvb2wg
ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eShGcmFtZSYgZnJhbWUsIFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gb2xkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0
eShncmFudWxhcml0eSk7CiAgICAgYXV0byBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHko
KTsKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRSYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShu
ZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCisgICAgaWYgKCFmcmFtZS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdSYW5n
ZSwgYWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQo
KSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqbmV3
UmFuZ2UpLnB0cigpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjYsMTEgKzIyNiwxMSBAQCBzdGF0
aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxiYXI6OnBhZ2VTdGVwKGhlaWdodCkpOwog
fQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJhbmdlcyhSYW5nZSYgYSwgUmFuZ2Um
IGIpCitzdGF0aWMgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEs
IGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogewotICAgIFJhbmdlJiBzdGFydCA9IGEuY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYikucmVsZWFzZVJldHVyblZhbHVl
KCkgPD0gMCA/IGEgOiBiOwotICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6RU5EX1RPX0VORCwgYikucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIgOiBh
OwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3RhcnQuc3Rh
cnRDb250YWluZXIoKSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWluZXIoKSwg
ZW5kLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvJiBzdGFydCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJh
bmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7CisgICAgYXV0byYgZW5k
ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIg
OiBhOworICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0LCBlbmQuZW5kIH07CiB9CiAKIC8vIEV4ZWN1
dGUgY29tbWFuZCBmdW5jdGlvbnMKQEAgLTM1NCw3ICszNTQsNyBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdAogICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAg
IGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
Y3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSku
Z2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKGNy
ZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVk
UmFuZ2UoKSkpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2Vs
ZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpzZWxlY3Rpb24p
LmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFu
Z2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDMzYTky
N2Q1NDhmZmRiNmY5Y2IxZDU2Zjg0ZTBkZmNkMDFhNzc3YjAuLmIwYzY5M2U0YjY4MmE0MWYxYzgz
MzZlMDkyMDQ2OTBkYmY3OTZjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCkBAIC0yMzEwLDcgKzIzMTAsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91
bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwog
ICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVj
dGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCi0gICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxl
dGVSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERl
bGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogRmxvYXRSZWN0
IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQppbmRleCBjNWNiYzNmOTdjZDhhOTkyYzBhZWU3YTMxYTg5ZWZkODdjZmEz
ZDc4Li5lZWZlOGZkOTUxY2NmYTRlYjY2MTgyN2Q1OGU2OWVhNTliNTg2YjdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTg4LDE0ICs4OCwxMyBA
QCBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKQogCiB2b2lkIEVkaXRvcjo6
Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwg
VmVjdG9yPFN0cmluZz4mIG91dFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBv
dXREYXRhKQogewotICAgIGF1dG8mIGRvY3VtZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOwotICAg
IGF1dG8gZWxlbWVudFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgeyAmZWxlbWVudCwg
UG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IgfSwgeyAmZWxlbWVudCwgUG9zaXRpb246
OlBvc2l0aW9uSXNBZnRlckFuY2hvciB9KTsKLSAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShlbGVtZW50UmFuZ2UucHRyKCksIG91dFR5cGVzLCBvdXREYXRhKTsK
KyAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoZWxlbWVudCk7
CisgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKGVsZW1lbnRSYW5nZSwgb3V0
VHlwZXMsIG91dERhdGEpOwogCiAgICAgb3V0VHlwZXMuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpjb2NvYVR5cGUoKSk7Ci0gICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURh
dGEgeyBkb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVh
dGVTaGFyZWRCdWZmZXIoKSk7CisgICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURh
dGEgeyBlbGVtZW50LmRvY3VtZW50KCkub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKSwg
eyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOwogCi0gICAgaWYgKGF1dG8gYXJjaGl2ZSA9IExl
Z2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShlbGVtZW50UmFuZ2UucHRyKCkpKSB7CisgICAgaWYgKGF1
dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UoZWxl
bWVudFJhbmdlKS5nZXQoKSkpIHsKICAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBh
cmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSkgewogICAgICAgICAgICAgb3V0VHlwZXMu
YXBwZW5kKFdlYkFyY2hpdmVQYm9hcmRUeXBlKTsKICAgICAgICAgICAgIG91dERhdGEuYXBwZW5k
KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdlYkFyY2hpdmVEYXRhLmdldCgpKSk7CkBAIC0xMjMsNyAr
MTIyLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9h
cmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJp
bmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkg
OiBudWxscHRyOwogICAgICAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZv
cm1hdChzdHJpbmcuZ2V0KCkpOwogICAgICAgICBjb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJp
bmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSk7
Ci0gICAgICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVj
dGVkUmFuZ2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRh
KTsKKyAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKHNlbGVjdGVkUmFu
Z2UoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKICAgICB9CiAg
ICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0KCk7CiAg
ICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJv
YXJkV2l0aEltYWdlQWx0VGV4dCgpOwpAQCAtMTQ0LDcgKzE0Myw3IEBAIHZvaWQgRWRpdG9yOjp3
cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEp
CiAgICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWRE
YXRhRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAgIHdlYkNvbnRlbnQuZGF0
YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQu
ZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFn
ZUFsdFRleHQoKTsKLSAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5n
ZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHdlYkNvbnRlbnQuY2xpZW50VHlwZXMsIHdlYkNvbnRl
bnQuY2xpZW50RGF0YSk7CisgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKHNl
bGVjdGVkUmFuZ2UoKSwgd2ViQ29udGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnRE
YXRhKTsKIAogICAgIHBhc3RlYm9hcmRXcml0ZXJEYXRhLnNldFdlYkNvbnRlbnQoV1RGTW92ZSh3
ZWJDb250ZW50KSk7CiB9CkBAIC0xODQsMTIgKzE4MywxMiBAQCB2b2lkIEVkaXRvcjo6cmVwbGFj
ZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZAogCiAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50LmZyYW1lKCksIGF0dHJpYnV0ZWRT
dHJpbmcpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAg
ICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFu
Z2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgICAgIHBhc3Rl
QXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxC
bG9ja3F1b3RlSGFuZGxpbmcpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3Ry
aW5nIHRleHQgPSBhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZzsKLSAgICAgICAgaWYgKHNob3VsZElu
c2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlBhc3RlZCkpCisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFu
Z2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVBc1Bs
YWluVGV4dCh0ZXh0LCBmYWxzZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3Rr
L0VkaXRvckd0ay5jcHAKaW5kZXggOTlhYTExOTIyYzMyODE0YmMwYTZmNWUwY2FiZDlmNjNiMzhl
ODcxYy4uZGE3ZTk0MWNiOGYxZmJlMjNiMDAyZTI1ZGUwMGQ5Njg1OWFmY2U5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC01MCwxNyArNTAsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0
ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIG9w
dGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRl
eHQpOworICAgIGF1dG8gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoKnBhc3Rl
Ym9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRl
eHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9y
UGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCAq
cmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdt
ZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Okln
bm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAzMTIz
MjVmMjc2MjFjYmI4ODQ5MmEwNDI2ZWU1OTE2NTY3ZTRhMTYwLi42YzI1NDc5NjU1MzYwODRiMTYz
ODgwNDlkNDVhNTk5Y2Y5NjA2NzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCkBAIC0yMDYsMzAgKzIwNiwyNiBAQCB2b2lkIEVkaXRvcjo6d3JpdGVJbWFnZVRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBFbGVtZW50JiBpbWFnZUVsZW1lbgogICAg
IHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlID0gcGFzdGVib2FyZC5yZXNvdXJjZU1J
TUVUeXBlKGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgIHBhc3RlYm9h
cmRJbWFnZS5yZXNvdXJjZURhdGEgPSBjYWNoZWRJbWFnZS0+cmVzb3VyY2VCdWZmZXIoKTsKIAot
ICAgIGlmICghcGFzdGVib2FyZC5pc1N0YXRpYygpKSB7Ci0gICAgICAgIFBvc2l0aW9uIGJlZm9y
ZUltYWdlUG9zaXRpb24oJmltYWdlRWxlbWVudCwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVB
bmNob3IpOwotICAgICAgICBQb3NpdGlvbiBhZnRlckltYWdlUG9zaXRpb24oJmltYWdlRWxlbWVu
dCwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7Ci0gICAgICAgIGF1dG8gaW1hZ2VS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoaW1hZ2VFbGVtZW50LmRvY3VtZW50KCksIGJlZm9yZUltYWdl
UG9zaXRpb24sIGFmdGVySW1hZ2VQb3NpdGlvbik7Ci0gICAgICAgIGNsaWVudCgpLT5nZXRDbGll
bnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKGltYWdlUmFuZ2UucHRyKCksIHBhc3RlYm9hcmRJbWFn
ZS5jbGllbnRUeXBlcywgcGFzdGVib2FyZEltYWdlLmNsaWVudERhdGEpOwotICAgIH0KKyAgICBp
ZiAoIXBhc3RlYm9hcmQuaXNTdGF0aWMoKSkKKyAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBh
c3RlYm9hcmREYXRhKG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoaW1hZ2VFbGVtZW50KSwgcGFzdGVi
b2FyZEltYWdlLmNsaWVudFR5cGVzLCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50RGF0YSk7CiAKICAg
ICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpw
YXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0
ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRS
YW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgYm9vbCBhbGxv
d1BsYWluVGV4dCA9IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
KTsKICAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFu
Z2UsIGFsbG93UGxhaW5UZXh0KTsKICAgICBpbnQgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXMgPSBj
bGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVs
ZWdhdGUoaSk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFn
bWVudEZyb21EZWxlZ2F0ZShpKTsKICAgICAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICByZWFkZXIuYWRkRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gcmVhZGVyLmZyYWdtZW50OworICAgIGF1dG8gZnJhZ21lbnQgPSBXVEZNb3ZlKHJlYWRlci5m
cmFnbWVudCk7CiAgICAgaWYgKCFmcmFnbWVudCkgewogICAgICAgICBib29sIGNob3NlUGxhaW5U
ZXh0SWdub3JlZDsKICAgICAgICAgZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQo
KnBhc3RlYm9hcmQsICpyYW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0SWdub3Jl
ZCk7CkBAIC0yMzgsNyArMjM0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgIGlmIChm
cmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAg
ICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJh
Z21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGZhbHNlLCBvcHRpb25zLmNv
bnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6UmVz
cGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUv
RWRpdG9yTGliV1BFLmNwcAppbmRleCAxMmZkNmE0M2VhMDVhMmEwZTcyYjc0YmE3MmQ5NjI4NjQ3
MDViYWUzLi42MjkxMjRlMGU2NTUyNDA3NzFlNTI1MzkwMzRmOGFkZmU3NDEwYWE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAgLTc5LDE3
ICs3OSwxNyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChQYXN0ZWJvYXJk
JiwgRWxlbWVudCYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cgogCiB2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRp
b24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERh
dGEoKnBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAg
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJv
YXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdt
ZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAg
ICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVu
dCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAg
ICAgICAgIHBhc3RlQXNGcmFnbWVudCgqZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0
ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlvbnMuY29udGFpbnMoUGFz
dGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6
Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2tx
dW90ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAx
Y2Q4YzM5NGE3NjkxYzU1ZjRkOGRkMzZkZTg1OTZlNzA3NzdiN2I1Li5iYTMxYzE4NzczMjM0Yjlh
ZDkzOWFkMGQzMzE5MzE4YzYyZDhiM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRp
dG9yTWFjLm1tCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgRWRpdG9yOjpzaG93Q29sb3JQYW5lbCgp
CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9h
cmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdl
KCk7CiAKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIC8vIEZJ
WE1FOiBIb3cgY2FuIHRoaXMgaGFyZC1jb2RlZCBwYXN0ZWJvYXJkIG5hbWUgYmUgcmlnaHQsIGdp
dmVuIHRoYXQgdGhlIHBhc3NlZC1pbiBwYXN0ZWJvYXJkIGhhcyBhIG5hbWU/CkBAIC05Myw3ICs5
Myw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3Rl
Ym9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdt
ZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZElu
c2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdt
ZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFz
RnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBh
c3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBmYWxzZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlv
bjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3Jl
QmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlICk7
CiAKICAgICBjbGllbnQoKS0+c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChTdHJpbmcoKSk7CkBAIC0x
NTksNyArMTU5LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9k
ZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKICAgICBib29sIGNob3NlUGxh
aW5UZXh0OwogICAgIGlmIChhdXRvIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJk
KHBhc3RlYm9hcmQsIHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCkpIHsKICAgICAgICAgbWF5
YmVDb3B5Tm9kZUF0dHJpYnV0ZXNUb0ZyYWdtZW50KCpub2RlLCAqZnJhZ21lbnQpOwotICAgICAg
ICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgIGlmIChzaG91
bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBh
c3RlZCkpCiAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51
bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCksIGZhbHNlLCBN
YWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlKTsKICAgICB9CiAKQEAgLTE3
NiwxMSArMTc2LDkgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjppbWFnZUluV2ViQXJj
aGl2ZUZvcm1hdChFbGVtZW50JiBpbWFnZUVsZW1lbnQpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IEVkaXRvcjo6ZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSkKIHsKLSAgICAvLyBGSVhNRTogVGhlIGludGVyZmFjZSB0byB0aGlzIGZ1bmN0aW9u
IGlzIGF3a3dhcmQuIFdlJ2QgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiB3aXRoIHRocmVlIHNlcGFy
YXRlIGZ1bmN0aW9ucy4KLSAgICAvLyBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMgaXMgb25seSB1
c2VkIGluIFdlYktpdDIgdG8gaW1wbGVtZW50IHRoZSBtZXRob2QgLVtXS1ZpZXcgd3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQ6dHlwZXM6XSwKLSAgICAvLyB3aGljaCBpcyBvbmx5IHVzZWQgdG8g
c3VwcG9ydCBPUyBYIHNlcnZpY2VzLgorICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJmYWNlIHRvIHRo
aXMgZnVuY3Rpb24gaXMgYXdrd2FyZC4gV2UnZCBwcm9iYWJseSBiZSBiZXR0ZXIgb2ZmIHdpdGgg
dGhyZWUgc2VwYXJhdGUgZnVuY3Rpb25zLiBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMgaXMgb25s
eSB1c2VkIGluIFdlYktpdDIgdG8gaW1wbGVtZW50IHRoZSBtZXRob2QgLVtXS1ZpZXcgd3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6dHlwZXM6XSwgd2hpY2ggaXMgb25seSB1c2VkIHRvIHN1cHBv
cnQgT1MgWCBzZXJ2aWNlcy4KIAotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgZnVuY3Rpb24gcmVh
bGx5IG5lZWQgdG8gdXNlIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKT8gQmVjYXVzZSB3cml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZCgpIGp1c3QgdXNlcyBzZWxlY3RlZFJhbmdlKCkuCisgICAgLy8g
RklYTUU6IERvZXMgdGhpcyBmdW5jdGlvbiByZWFsbHkgbmVlZCB0byB1c2UgYWRqdXN0ZWRTZWxl
Y3Rpb25SYW5nZSgpPyBCZWNhdXNlIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkganVzdCB1
c2VzIHNlbGVjdGVkUmFuZ2UoKS4gVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBpbiBXZWJLaXQg
dGhhdCB1c2VzIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UuCiAgICAgaWYgKCFjYW5Db3B5KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9y
V2luLmNwcAppbmRleCBjNzk2YmZhYWY2NmVlOTRhODVjNTVmMzkyMzQ5MTU1ZDI3NGE4NjBjLi44
NWE0NGI5YTc4ZTQ2Njk4ZWFlMzBjNzQ3NTY1ODVhNDQ0ZDhlNDI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKQEAgLTM3LDE3ICszNywxNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQq
IHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3RlZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9v
bCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5n
ZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBs
YWluVGV4dCk7CisgICAgYXV0byBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21l
bnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0
aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVu
dCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAg
IHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQg
JiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFn
bWVudCgqZnJhZ21lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAg
ICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRS
ZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCwgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2Nr
cXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6
OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmNwcAppbmRleCA5NGZiMzBmNTExYjNiMzc5NTIyYWE2OWQyY2ZmZmRhZTkwMDU3MDI2Li4wYzE0
YWU2OTBjZDNmNDZhNjNiYWU2MTYwODU0ZjFhMDNiODExYjQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICBFbXB0
eUVkaXRvckNsaWVudCgpID0gZGVmYXVsdDsKIAogcHJpdmF0ZToKLSAgICBib29sIHNob3VsZERl
bGV0ZVJhbmdlKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3Vs
ZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTIwMCwxNSAr
MjAwLDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSBmaW5h
bCB7IH0KICAgICBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBmaW5hbCB7IHJldHVybiAt
MTsgfQogCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVk
aXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3Vs
ZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdl
KFJhbmdlKiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVS
YW5nZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRJbnNlcnROb2Rl
KE5vZGUmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24p
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0
IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlv
bikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiwgRUFmZmluaXR5LCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ym9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIFJhbmdlKikgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9w
ZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbCB7IH0KLSAgICBib29sIHNob3Vs
ZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgU2ltcGxlUmFu
Z2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2
b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdl
ZENvbnRlbnRzKCkgZmluYWwgeyB9CkBAIC0yMTksOSArMjE5LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkaWRFbmRFZGl0
aW5nKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkaWRFbmRVc2VyVHJpZ2dlcmVkU2VsZWN0aW9uQ2hh
bmdlcygpIGZpbmFsIHsgfQotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KFJhbmdlKikgZmluYWwgeyB9CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgZmluYWwgeyB9CiAgICAgdm9pZCBkaWRX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsIHsgfQotICAgIHZvaWQgZ2V0Q2xpZW50
UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJl
ZlB0cjxTaGFyZWRCdWZmZXI+PiYpIGZpbmFsIHsgfQorICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVi
b2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mLCBW
ZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JikgZmluYWwgeyB9CiAgICAgdm9pZCByZXF1ZXN0
Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgZmluYWwgeyB9
CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFRleHRDaGVj
a2luZ1Jlc3VsdCkgZmluYWwgeyB9CiAKQEAgLTI2MSw3ICsyNjEsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlU3RyaW5nRm9yRmluZChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KICNlbmRp
ZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIFJhbmdl
JiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHBlcmZvcm1Ud29TdGVw
RHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sKSBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBzZXRJbnNl
cnRpb25QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCA0MWY3YTdlYzdhNDE5MTc3
OTFiMjg1YjE5NDM5ZDJjMWJlOWRhZWZkLi5lZWNkODA1OTg3YmFiN2JhMDhjODFiMGVhNjgyODQ0
MTQzZjE1Y2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwCkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICNlbmRp
ZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczogewogICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKLSAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBj
cmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5z
aG91bGRJbnNlcnRUZXh0KHRpdGxlLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKSB7CiAgICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRpb24+IHJlcGxhY2VPcHRpb25zIHsgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQ
cmV2ZW50TmVzdGluZyB9OwogCiAgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDczMTdiZmRmNDZkOTJh
YzNkOTY1MGZjMzM0NjRmNTBmNmVlYTU5MjcuLjgxMGQyZmM3MmEzMjVjZTRkNDIwYTNjY2EzNmQ5
MmIzMDBjYTU4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01
NjgsNyArNTY4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25z
dCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICAgICAg
c3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KGNvbG9yKSwgZmFsc2UpOwotICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3Vs
ZEFwcGx5U3R5bGUoc3R5bGUucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShpbm5lclJhbmdlKS5nZXQo
KSkpCisgICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShz
dHlsZSwgKmlubmVyUmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBj
bGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25B
Y3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKICAgICAgICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBw
bHlTdHlsZShzdHlsZS5wdHIoKSwgRWRpdEFjdGlvbjo6U2V0Q29sb3IpOwpAQCAtNjAzLDcgKzYw
Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0Rh
dGEmIGRyYWdEYXRhKQogICAgIGlmIChpc01vdmUgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50
RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSksIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRp
dG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKCFmcmFn
bWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CkBAIC02MjksNyArNjI5LDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdE
YXRhLmFzUGxhaW5UZXh0KCk7Ci0gICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9y
LnNob3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCksIEVk
aXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8
fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4dCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rp
b246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVu
dCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlv
bjo6RWRpdCwgZHJhZ0RhdGEpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgYm9vbCBEcmFnQ29udHJv
bGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIE9wdGlv
blNldDxEcmEKICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChz
ZWxlY3Rpb25SYW5nZSk7CiAKLSAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkp
OworICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZCgqc2VsZWN0aW9uUmFuZ2UpOwogCiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewogICAgICAgICAg
ICAgICAgIGlmIChtdXN0VXNlTGVnYWN5RHJhZ0NsaWVudCkKQEAgLTExOTAsNyArMTE5MCw3IEBA
IGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3Rh
dGUmIHN0YXRlLCBPcHRpb25TZXQ8RHJhCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAg
ICBpZiAoIXByb21pc2VkQXR0YWNobWVudCAmJiBlZGl0b3IuY2xpZW50KCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG5vIGZpbGUgVVJMIGlzIHNwZWNpZmllZCwgY2FsbCBv
dXQgdG8gdGhlIGluamVjdGVkIGJ1bmRsZSB0byBwb3B1bGF0ZSB0aGUgcGFzdGVib2FyZCB3aXRo
IGRhdGEuCi0gICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChjcmVhdGVMaXZlUmFuZ2Uoc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKTsKICAgICAgICAgICAgICAgICBlZGl0b3Iud3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9y
LmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaAppbmRleCA3NzkzMTcxZmUwYWRiMTE3ZGFmZjQxNjBkYWZmNjkx
Y2E0NDYwYzMxLi45ZGU3MDY1NGYyMGI1ODIzZjc2NTYwMGUxNDE2YjlkOGMzYTkxZGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTQzLDcgKzQzLDYgQEAgY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBSYW5nZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN0eWxlUHJvcGVydGllczsKIGNs
YXNzIFRleHRDaGVja2VyQ2xpZW50OwpAQCAtNTEsMTIgKzUwLDEzIEBAIGNsYXNzIFZpc2libGVT
ZWxlY3Rpb247CiAKIHN0cnVjdCBHYXBSZWN0czsKIHN0cnVjdCBHcmFtbWFyRGV0YWlsOworc3Ry
dWN0IFNpbXBsZVJhbmdlOwogCiBjbGFzcyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZp
cnR1YWwgfkVkaXRvckNsaWVudCgpID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGREZWxldGVSYW5nZShSYW5nZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRl
UmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSA9IDA7IAogICAgIHZpcnR1YWwgYm9vbCBpc1Nl
bGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgPSAwOwpAQCAtNjUsMTcgKzY1
LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkg
PSAwOwogICAgIHZpcnR1YWwgaW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgPSAwOwogCi0g
ICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSos
IEVkaXRvckluc2VydEFjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRF
bmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRJbnNlcnROb2RlKE5vZGUmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJ
bnNlcnRBY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25z
dCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rp
b24pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9u
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VwcHJl
c3NQYXNzd29yZEVjaG8oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfTsKICAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMm
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZEFwcGx5U3R5bGUoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVy
RGVsZXRlKFJhbmdlKiwgUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVS
YW5nZUFmdGVyRGVsZXRlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKSA9
IDA7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckF0dGFjaG1lbnRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgLyogaWRlbnRpZmllciAq
LywgY29uc3QgU3RyaW5nJiAvKiBjb250ZW50VHlwZSAqLywgY29uc3QgU3RyaW5nJiAvKiBwcmVm
ZXJyZWRGaWxlTmFtZSAqLywgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgeyB9CkBAIC05NSw5ICs5NSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlv
bkNoYW5nZXMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJM
YXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRW5k
RWRpdGluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKFJhbmdlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxTdHJp
bmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3Rl
Ym9hcmREYXRhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRh
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJk
VHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGVXaXRoU29mdFNwYWNlcyhUZXh0Q2hlY2tpbmdSZXN1bHQpIHsgfQogCkBAIC0xODcsNyAr
MTg3LDcgQEAgcHVibGljOgogICAgIC8vIHNlbGVjdGlvbiBhcyBhIHR5cGUgb2YgY2xpcGJvYXJk
LgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpIHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJh
Z21lbnQmLCBSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxl
UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29s
IGNhblNob3dGb250UGFuZWwoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAppbmRleCA2ZjFmMWI0YWQ4MGIyMWY5OTVjMWZlZThkNzJhYWRjOTYyNzE1YjJiLi41
ZWRhODMwZWNmNDY1ZDBkZDBiMjQ3ZmFlMDAyMGM1ZTI1MmViOGUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMDgyLDggKzMwODIsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2Vs
ZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKSkgewot
ICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7Ci0gICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJl
Y3RGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpLmdldCgpKTsKKyAgICAg
ICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdl
KCpzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdo
dEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0LngoKTsKICAgICAgICAgLy8g
SW4gYSBtdWx0aWxpbmUgZWRpdCwgZmlyc3RSZWN0Lm1heFkoKSB3b3VsZCBlbmR1cCBvbiB0aGUg
bmV4dCBsaW5lLCBzbyAtMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXND
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApp
bmRleCAzZjM3MjMyYzdlOTViYTIwMDUzOTExMDQ5YWU4MDQwMjRmNjE2Nzg5Li43ZTIxMmVhZjRi
OTUyYTg2ZGI0ZmQxMDgwNzZkMjA1OTZkMTY1MjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCkBAIC03NTIsMTcgKzc1MiwxNiBAQCBFbGVtZW50KiBGb2N1c0NvbnRy
b2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudE9yU2NvcGVPd25lcihjb25zdCBGb2N1c05h
dmlnYQogICAgIHJldHVybiBwcmV2aW91c0VsZW1lbnRXaXRoTG93ZXJUYWJJbmRleChzY29wZSwg
bGFzdCwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQpOwogfQogCi1zdGF0aWMgYm9vbCByZWxpbnF1
aXNoZXNFZGl0aW5nRm9jdXMoTm9kZSAqbm9kZSkKK3N0YXRpYyBib29sIHJlbGlucXVpc2hlc0Vk
aXRpbmdGb2N1cyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBB
U1NFUlQobm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5oYXNF
ZGl0YWJsZVN0eWxlKCkpOwogCi0gICAgTm9kZSogcm9vdCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Cisg
ICAgYXV0byByb290ID0gZWxlbWVudC5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBm
cmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIXJv
b3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCku
c2hvdWxkRW5kRWRpdGluZyhyYW5nZU9mQ29udGVudHMoKnJvb3QpLnB0cigpKTsKKyAgICByZXR1
cm4gZnJhbWUtPmVkaXRvcigpLnNob3VsZEVuZEVkaXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKCpyb290KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVk
ZWQoRnJhbWUqIG9sZEZvY3VzZWRGcmFtZSwgRnJhbWUqIG5ld0ZvY3VzZWRGcmFtZSwgTm9kZSog
bmV3Rm9jdXNlZE5vZGUpCkBAIC04NDEsNyArODQwLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OnNldEZvY3VzZWRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZyYW1lJiBuZXdGb2N1c2VkRnJh
bWUKICAgICB9CiAKICAgICAvLyBGSVhNRTogTWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgY2hl
Y2sgZm9yIGNhcmV0QnJvd3NpbmcKLSAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xkRm9j
dXNlZEVsZW1lbnQtPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmICFyZWxpbnF1aXNoZXNFZGl0
aW5nRm9jdXMob2xkRm9jdXNlZEVsZW1lbnQpKQorICAgIGlmIChvbGRGb2N1c2VkRWxlbWVudCAm
JiBvbGRGb2N1c2VkRWxlbWVudC0+aXNSb290RWRpdGFibGVFbGVtZW50KCkgJiYgIXJlbGlucXVp
c2hlc0VkaXRpbmdGb2N1cygqb2xkRm9jdXNlZEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBtX3BhZ2UuZWRpdG9yQ2xpZW50KCkud2lsbFNldElucHV0TWV0aG9kU3RhdGUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggZmYxYTI3ZWJjOTVmYzdjNGM0NmE1YjUwMjMzNzk3
YWU4OTk3OGU3ZS4uZDRlMmJmMDk5NDdmZjNlOTVlNDk2ODg5ZTNlYjE2YjAxZThkYzU1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKQEAgLTgyMSwyOCArODIxLDI1IEBAIERvY3VtZW50KiBGcmFtZTo6
ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKIAogUmVmUHRyPFJhbmdlPiBG
cmFtZTo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKIHsKLSAgICBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBv
aW50KTsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgYXV0byBwb3NpdGlvbiA9IHZp
c2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOworICAgIGF1dG8gcG9zaXRpb25Cb3Vu
ZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIXBvc2l0aW9uQm91
bmRhcnkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUG9zaXRpb24gZGVlcFBvc2l0
aW9uID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBUZXh0KiBjb250YWluZXJUZXh0
ID0gZGVlcFBvc2l0aW9uLmNvbnRhaW5lclRleHQoKTsKKyAgICBhdXRvIGNvbnRhaW5lclRleHQg
PSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lclRleHQoKTsKICAgICBpZiAoIWNv
bnRhaW5lclRleHQgfHwgIWNvbnRhaW5lclRleHQtPnJlbmRlcmVyKCkgfHwgY29udGFpbmVyVGV4
dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS51c2VyU2VsZWN0KCkgPT0gVXNlclNlbGVjdDo6Tm9uZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMg
PSBwb3NpdGlvbi5wcmV2aW91cygpOwotICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewot
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2Uo
cHJldmlvdXMsIHBvc2l0aW9uKTsKLSAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gZWRpdG9yKCku
Zmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZp
b3VzQ2hhcmFjdGVyUmFuZ2U7CisgICAgaWYgKGF1dG8gcHJldmlvdXMgPSBtYWtlQm91bmRhcnlQ
b2ludChwb3NpdGlvbi5wcmV2aW91cygpKSkgeworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhcmFj
dGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpwcmV2aW91cywgKnBvc2l0aW9uQm91bmRhcnkgfTsK
KyAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVy
UmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxp
dmVSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKTsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9z
aXRpb24gbmV4dCA9IHBvc2l0aW9uLm5leHQoKTsKLSAgICBpZiAoUmVmUHRyPFJhbmdlPiBuZXh0
Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRpb24sIG5leHQpKSB7Ci0gICAgICAgIExh
eW91dFJlY3QgcmVjdCA9IGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJS
YW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIG5leHRDaGFyYWN0ZXJSYW5nZTsKKyAgICBpZiAoYXV0byBuZXh0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24ubmV4dCgpKSkgeworICAgICAgICBhdXRvIG5leHRD
aGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnBvc2l0aW9uQm91bmRhcnksICpuZXh0IH07
CisgICAgICAgIGlmIChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFu
Z2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKaW5kZXggOGVkN2FmZjJjM2RkMWIyZTI0ZDJlZmFlMzlmZDg3YjIzNjNl
NzYzNC4uZGU1N2YzODVjOWIxZTYwM2UzNDBkYjY3OGM2MTIyNDE2MDA3OTc1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCkBAIC03MTMsMTggKzcxMywyMCBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRpZFdyYQog
CiB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaW50IGxpbWl0LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4m
IG1hdGNoUmFuZ2VzLCBpbnQmIGluZGV4Rm9yU2VsZWN0aW9uKQogeworICAgIFZlY3RvcjxTaW1w
bGVSYW5nZT4gcmVzdWx0UmFuZ2VzOworCiAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOwogCiAg
ICAgRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBmcmFtZVdpdGhTZWxl
Y3Rpb24gPSBudWxscHRyOwogICAgIGRvIHsKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLmNvdW50
TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCAwLCBvcHRpb25zLCBsaW1pdCA/IChsaW1pdCAtIG1hdGNo
UmFuZ2VzLnNpemUoKSkgOiAwLCB0cnVlLCAmbWF0Y2hSYW5nZXMpOworICAgICAgICBmcmFtZS0+
ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIHsgfSwgb3B0aW9ucywgbGltaXQg
PyAobGltaXQgLSBtYXRjaFJhbmdlcy5zaXplKCkpIDogMCwgdHJ1ZSwgJnJlc3VsdFJhbmdlcyk7
CiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICAgICAg
ZnJhbWVXaXRoU2VsZWN0aW9uID0gZnJhbWU7CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJh
bWUoZnJhbWUsIHRydWUsIENhbldyYXA6Ok5vKTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAKLSAg
ICBpZiAobWF0Y2hSYW5nZXMuaXNFbXB0eSgpKQorICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9uKSB7CkBA
IC03MzIsNyArNzM0LDcgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgYXV0byBz
ZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykp
IHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPiAw
OyAtLWkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShz
ZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQs
ICptYXRjaFJhbmdlc1tpIC0gMV0pOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OkVORF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlc1tpIC0gMV0pKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0
aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzQwLDcgKzc0Miw3
IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG1hdGNoUmFuZ2VzLnNp
emUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZXNbaV0p
KTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NDksMTAgKzc1
MSwxMyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcm
IHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkKLSAgICAgICAgICAgIGlu
ZGV4Rm9yU2VsZWN0aW9uID0gbWF0Y2hSYW5nZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGlu
ZGV4Rm9yU2VsZWN0aW9uID0gcmVzdWx0UmFuZ2VzLnNpemUoKSAtIDE7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKICAgICB9CisKKyAgICBmb3IgKGF1
dG8mIHJhbmdlIDogcmVzdWx0UmFuZ2VzKQorICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKSk7CiB9CiAKIFJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0
cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0
aW9ucyBvcHRpb25zKQpAQCAtNzY3LDE3ICs3NzIsMTYgQEAgUmVmUHRyPFJhbmdlPiBQYWdlOjpy
YW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2Us
IEYKICAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5v
d25lckRvY3VtZW50KCkuZnJhbWUoKSA6ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogc3RhcnRG
cmFtZSA9IGZyYW1lOwogICAgIGRvIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmVzdWx0
UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0
YXJ0RnJhbWUgPyByZWZlcmVuY2VSYW5nZSA6IDAsIG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHRSYW5nZTsKLQorICAgICAgICBpZiAoYXV0byByZXN1bHRS
YW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3Rh
cnRGcmFtZSA/IG1ha2VSYW5nZShyZWZlcmVuY2VSYW5nZSkgOiBXVEY6Om51bGxvcHQsIG9wdGlv
bnMgLSBXcmFwQXJvdW5kKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVz
dWx0UmFuZ2UpOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCAhb3B0aW9u
cy5jb250YWlucyhCYWNrd2FyZHMpLCBjYW5XcmFwKTsKICAgICB9IHdoaWxlIChmcmFtZSAmJiBm
cmFtZSAhPSBzdGFydEZyYW1lKTsKIAogICAgIC8vIFNlYXJjaCBjb250ZW50cyBvZiBzdGFydEZy
YW1lLCBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgcmVmZXJlbmNlIHJhbmdlIHRoYXQgd2UgZGlk
IGVhcmxpZXIuCiAgICAgLy8gV2UgY2hlYXQgYSBiaXQgYW5kIGp1c3Qgc2VhcmNoIGFnYWluIHdp
dGggd3JhcCBvbi4KICAgICBpZiAoY2FuV3JhcCA9PSBDYW5XcmFwOjpZZXMgJiYgcmVmZXJlbmNl
UmFuZ2UpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBzdGFydEZy
YW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgcmVmZXJlbmNlUmFuZ2UsIG9wdGlv
bnMgfCBXcmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbikpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0UmFuZ2U7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+
ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIG1ha2VSYW5nZSgqcmVmZXJlbmNlUmFuZ2Up
LCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQorICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC03OTQsNyArNzk4LDcgQEAgdW5zaWduZWQgUGFnZTo6ZmluZE1hdGNoZXNG
b3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnMKICAg
ICBkbyB7CiAgICAgICAgIGlmIChzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcykKICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkKHNob3VsZEhpZ2hsaWdodE1hdGNoZXMgPT0gSGlnaGxpZ2h0TWF0Y2hlcyk7Ci0gICAgICAg
IG1hdGNoQ291bnQgKz0gZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0
LCAwLCBvcHRpb25zLCBtYXhNYXRjaENvdW50ID8gKG1heE1hdGNoQ291bnQgLSBtYXRjaENvdW50
KSA6IDAsIHNob3VsZE1hcmtNYXRjaGVzID09IE1hcmtNYXRjaGVzLCAwKTsKKyAgICAgICAgbWF0
Y2hDb3VudCArPSBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIFdU
Rjo6bnVsbG9wdCwgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCA/IChtYXhNYXRjaENvdW50IC0gbWF0
Y2hDb3VudCkgOiAwLCBzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcywgbnVsbHB0cik7
CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIENhbldyYXA6Ok5v
KTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAppbmRleCBlMmU1N2VjYmVmNDVkM2MyNDYzZjk4NjM3MzcxMzMyZmFiZjQ1Mjk3Li4wZTE1MWZh
MjgyNjg2YTRhNGE4ZmNjZWZlNzBjYjU4NWQ1MDA0MzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC0yNjA5LDcgKzI2MDksNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8UmFu
Z2U+PiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8
UgogICAgIGlmIChwYXJzZWRPcHRpb25zLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
cGFyc2VkT3B0aW9ucy5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAgICByZXR1cm4gZG9jdW1lbnQt
PmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGV4dCwgcmVmZXJlbmNlUmFuZ2UuZ2V0KCksIHBhcnNl
ZE9wdGlvbnMucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFu
Z2UoZG9jdW1lbnQtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGV4dCwgbWFrZVJhbmdlKHJlZmVy
ZW5jZVJhbmdlKSwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSkpOwogfQogCiBF
eGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbmRPcHRpb25zLCBjb25zdCBT
dHJpbmcmIG1hcmtNYXRjaGVzKQpAQCAtMjYyMyw3ICsyNjIzLDcgQEAgRXhjZXB0aW9uT3I8dW5z
aWduZWQ+IEludGVybmFsczo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFYKICAgICAgICAgcmV0dXJuIHBhcnNlZE9wdGlvbnMucmVsZWFzZUV4Y2VwdGlvbigp
OwogCiAgICAgYm9vbCBtYXJrID0gbWFya01hdGNoZXMgPT0gIm1hcmsiOwotICAgIHJldHVybiBk
b2N1bWVudC0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0ZXh0LCBudWxscHRyLCBwYXJz
ZWRPcHRpb25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCAxMDAwLCBtYXJrLCBudWxscHRyKTsKKyAg
ICByZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGV4dCwgV1RG
OjpudWxsb3B0LCBwYXJzZWRPcHRpb25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCAxMDAwLCBtYXJr
LCBudWxscHRyKTsKIH0KIAogRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRG
aW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaW5k
T3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50
aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5t
bQppbmRleCBiMmRhZGM2OTc0MDVkNjkxMWM2YzI5NTJiN2M5ZDQ0ZmZmZTVhZDQxLi4yYjA0MjIy
NGYzOWM4MTYyOGE4ZjhkZmY5NWFkZGE4Yjk2OWExMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC02NjMsNyArNjYzLDcgQEAgLSAoTlNS
ZWN0KXJlY3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQogICAgICAgICBMT0coUHJpbnRpbmcsICIt
W1dLUHJpbnRpbmdWaWV3ICVwIHJlY3RGb3JQYWdlOiVkXSAtIGRhdGEgaXMgbm90IHlldCBhdmFp
bGFibGUiLCBzZWxmLCAoaW50KXBhZ2UpOwogICAgICAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgp
KSB7CiAgICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSBub3QgdG9sZCBBcHBLaXQgaG93IG1hbnkg
cGFnZXMgdGhlcmUgYXJlLCBzbyBpdCB3aWxsIHRyeSB0byBwcmludCB1bnRpbCBhIG51bGwgcmVj
dCBpcyByZXR1cm5lZC4KLSAgICAgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDAp
OworICAgICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAgICAgICAgIH0KICAgICAgICAgLy8g
V2UgbXVzdCBiZSBzdGlsbCBjYWxjdWxhdGluZyB0aGUgcGFnZSByYW5nZS4KICAgICAgICAgQVNT
RVJUKF9leHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjayk7CkBAIC02NzQsNyArNjc0LDcgQEAg
LSAoTlNSZWN0KXJlY3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQogICAgIC8vIFJldHVybmluZyBh
IG51bGwgcmVjdCBwcmV2ZW50cyBzZWxlY3Rpbmcgbm9uLWV4aXN0ZW50IHBhZ2VzIGluIHByZXZp
ZXcgZGlhbG9nLgogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGFnZSkgPiBfcHJpbnRp
bmdQYWdlUmVjdHMuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVCghX3dlYkZyYW1lLT5wYWdlKCkp
OwotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJu
IE5TWmVyb1JlY3Q7CiAgICAgfQogCiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gX3ByaW50
aW5nUGFnZVJlY3RzW3BhZ2UgLSAxXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggNzlhMzc0
MDBjM2Y0MTU4YmY0MjhmNjk0MmJjODg2ZjFhY2QyMjAzZC4uZGQ5YzM1MjYwNWYwOGYzOTQwZDkw
MGQ4ZjAyNjUyNDdlMDRiYTM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc0LDExICs3
NCw5IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVRleHRDaGVja2luZ1JlcXVlc3RJRCgpCiAg
ICAgcmV0dXJuIHVuaXF1ZVRleHRDaGVja2luZ1JlcXVlc3RJRCsrOwogfQogCi1ib29sIFdlYkVk
aXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYg
cmFuZ2UpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9y
Q2xpZW50KCkuc2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxp
dmVSYW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c21hcnRJ
bnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTExNCw1MCArMTEyLDM3IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQogaW50IFdlYkVkaXRvckNsaWVudDo6c3Bl
bGxDaGVja2VyRG9jdW1lbnRUYWcoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiAwOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkQmVnaW5FZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGJvb2wgcmVz
dWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2luRWRp
dGluZygqbV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
c2hvdWxkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkp
OwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFu
Z2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
RWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCByYW5nZSk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCBjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZEluc2VydE5vZGUoTm9kZSogbm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJ
bnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5v
ZGUoTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFj
ZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2Us
IG5vZGUsIHJhbmdlVG9SZXBsYWNlLCBhY3Rpb24pOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFnZSwgJm5vZGUsIGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCksIGFjdGlvbik7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlVG9S
ZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewot
ICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNo
b3VsZEluc2VydFRleHQoKm1fcGFnZSwgdGV4dC5pbXBsKCksIHJhbmdlVG9SZXBsYWNlLCBhY3Rp
b24pOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQo
Km1fcGFnZSwgdGV4dC5pbXBsKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSkuZ2V0
KCksIGFjdGlvbik7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5n
ZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqbV9w
YWdlLCBmcm9tUmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2Ut
PmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgq
bV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UoZnJvbVJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdl
KHRvUmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogICAgIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUo
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
JiByYW5nZSkKIHsKLSAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxl
KHN0eWxlLT5pc011dGFibGUoKSA/IFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPihzdGF0aWNf
Y2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSkgOiBzdHlsZS0+bXV0YWJsZUNv
cHkoKSk7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuc2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCAmbXV0YWJsZVN0eWxlLT5lbnN1cmVDU1NT
dHlsZURlY2xhcmF0aW9uKCksIHJhbmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGRBcHBseVN0eWxlKCptX3BhZ2UsICZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1
cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOwog
fQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTIxMSw5ICsxOTYsOCBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQXBwbHlTdHlsZSgpCiAgICAgbV9wYWdlLT5kaWRBcHBs
eVN0eWxlKCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRl
ckRlbGV0ZShSYW5nZSosIFJhbmdlKikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjIs
NyArMjA2LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZygpCiAgICAg
Ly8gRklYTUU6IFdoYXQgZ29vZCBpcyBhIG5vdGlmaWNhdGlvbiBuYW1lLCBpZiBpdCdzIGFsd2F5
cyB0aGUgc2FtZT8KICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlk
QmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJXZWJWaWV3
RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5kaWRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEJlZ2lu
RWRpdGluZ05vdGlmaWNhdGlvbi5nZXQoKS5pbXBsKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQpA
QCAtMjc1LDcgKzI1OCw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkK
IHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkRW5kRWRpdGlu
Z05vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZEVuZEVkaXRp
bmdOb3RpZmljYXRpb24iKSk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLmRpZEVuZEVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRp
b24uZ2V0KCkuaW1wbCgpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVk
aXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQpAQCAtMjgzLDE5ICsy
NjUsMTkgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKCkKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZGlkV3JpdGVU
b1Bhc3RlYm9hcmQoKm1fcGFnZSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqIHJhbmdlKQordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mIHJhbmdlKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQo
KS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgcmFuZ2UpOworICAgIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwg
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFJhbmdlKiByYW5nZSwgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFz
dGVib2FyZERhdGEpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERh
dGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBh
c3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERh
dGEpCiB7Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3Rl
Ym9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwgcmFuZ2UsIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVi
b2FyZERhdGEpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5nZXRQ
YXN0ZWJvYXJkRGF0YUZvclJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0
KCksIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOwogfQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBS
YW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBl
cmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgU2ltcGxl
UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnBlcmZvcm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBm
cmFnbWVudCwgZGVzdGluYXRpb24sIGlzTW92ZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21l
bnQsIGNyZWF0ZUxpdmVSYW5nZShkZXN0aW5hdGlvbiksIGlzTW92ZSk7CiB9CiAKIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFVuZG9TdGVwJiBzdGVwKQpAQCAtNDI1LDEy
ICs0MDcsMTAgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVh
KEVsZW1lbnQqIGVsZW1lbnQpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpvdmVyZmxvd1Njcm9s
bFBvc2l0aW9uQ2hhbmdlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnN1YkZyYW1lU2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCiAjZW5kaWYKQEAgLTYxOCw3ICs1OTgsNiBAQCB2b2lkIFdl
YkVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZShFbGVtZW50KiBlbGVtZW50KQogI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIG1fcGFnZS0+c2V0SW5wdXRNZXRo
b2RTdGF0ZShlbGVtZW50KTsKICNlbHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBVTlVT
RURfUEFSQU0oZWxlbWVudCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAwZGY3
NzU5ZTFiODJkZDQwM2NmZGE4Y2E3MzA5OWViYzZkZGQ4MDhjLi4yM2UzOTRmMjdlYzMyNjkyNzhj
NDViOGUxNDRkMzZkYzdjN2JmZDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC00NSw3ICs0NSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5n
ZShXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgYm9vbCBzbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoKSBmaW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSBmaW5hbDsKQEAgLTU0LDE1ICs1NCwxNSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgZmluYWw7CiAgICAgaW50IHNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnKCkgZmluYWw7CiAgICAgCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRp
bmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoV2Vi
Q29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6
Tm9kZSosIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5h
bDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6UmFu
Z2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpS
YW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBm
aW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJDb3JlOjpT
aW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpO
b2RlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRp
dG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3Qg
U3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6
RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFm
ZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKICAgICAKLSAgICBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBm
aW5hbDsKKyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9w
ZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAg
ICAgdm9pZCBkaWRBcHBseVN0eWxlKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VB
ZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5n
ZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CiAKICNpZiBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHBy
ZWZlcnJlZEZpbGVOYW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBmaW5hbDsKQEAg
LTg1LDkgKzg1LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbGVkQ29tcG9zaXRpb24oKSBm
aW5hbDsKICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWw7CiAgICAgdm9pZCBk
aWRFbmRFZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5h
bDsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAg
dm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVj
dG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFz
dGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9y
PFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJV
bmRvU3RlcChXZWJDb3JlOjpVbmRvU3RlcCYpIGZpbmFsOwogICAgIHZvaWQgcmVnaXN0ZXJSZWRv
U3RlcChXZWJDb3JlOjpVbmRvU3RlcCYpIGZpbmFsOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBzaG91bGRTdXBwcmVzc1Bhc3N3b3JkRWNobygpIGNvbnN0IGZpbmFsOwog
I2VuZGlmCiAKLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZy
YWdtZW50JiwgV2ViQ29yZTo6UmFuZ2UmLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAgYm9vbCBw
ZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFdlYkNv
cmU6OlNpbXBsZVJhbmdlJiwgYm9vbCBpc01vdmUpIGZpbmFsOwogICAgIGJvb2wgc3VwcG9ydHNH
bG9iYWxTZWxlY3Rpb24oKSBmaW5hbDsKIAogICAgIGJvb2wgY2FuU2hvd0ZvbnRQYW5lbCgpIGNv
bnN0IGZpbmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IDQ3Y2RlYTdlZGUxOTgwNTc4ZGM2OTljOWZjN2I0Y2I3NDg5MDdhY2EuLjczMmQ4ODgw
NGY4NDhkYTljN2YwZmUzZjVjYzI3NTcxZGE5NmI1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01NDI0LDQzICs1NDI0LDM2IEBAIHZvaWQg
V2ViUGFnZTo6aGFzTWFya2VkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5jKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRWRpdGluZ1JhbmdlJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6
ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCkp
OwotICAgIGNvbXBsZXRpb25IYW5kbGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpLmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRWRp
dGluZ1JhbmdlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRv
IGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZl
UmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCkpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxl
dGlvbkhhbmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5n
ZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAg
ICBjb25zdGV4cHIgT3B0aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0VHlw
ZSB7IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwgSGl0
VGVzdFJlcXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCwgIEhpdFRlc3RSZXF1
ZXN0OjpBbGxvd0NoaWxkRnJhbWVDb250ZW50IH07Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQg
PSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50
KHBvaW50LCBoaXRUeXBlKTsKLSAgICBGcmFtZSogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb2RlRnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBmcmFtZS0+cmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVG
cmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdl
KCpmcmFtZSwgcmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgaGl0VHlwZSk7
CisgICAgYXV0byYgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyAqcmVzdWx0
LmlubmVyTm9kZUZyYW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS5yYW5nZUZvclBvaW50KHJlc3VsdC5y
b3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0g
RWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIHJhbmdlLmdldCgpKTsKICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGVkaXRpbmdSYW5nZS5sb2NhdGlvbiksIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYg
ZWRpdGluZ1JhbmdlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7Ci0gICAgRnJhbWUmIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBJ
bnRSZWN0IHJlc3VsdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgwLCAwKSk7Ci0gICAgCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRpdGlu
Z1JhbmdlKTsKKyAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7CisgICAgYXV0byByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5n
ZShmcmFtZSwgZWRpdGluZ1JhbmdlKTsKICAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2socmVz
dWx0LCBFZGl0aW5nUmFuZ2Uobm90Rm91bmQsIDApLCBjYWxsYmFja0lEKSk7CisgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2so
eyB9LCB7IH0sIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIHJl
c3VsdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhmcmFtZS5lZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSkpOwotCi0gICAgLy8gRklYTUU6IFVwZGF0ZSBhY3R1
YWxSYW5nZSB0byBtYXRjaCB0aGUgcmFuZ2Ugb2YgZmlyc3QgcmVjdC4KLSAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwg
ZWRpdGluZ1JhbmdlLCBjYWxsYmFja0lEKSk7CisgICAgLy8gRklYTUU6IFBhc3MgYW4gRWRpdGlu
Z1JhbmdlIHRoYXQgbWF0Y2hlcyB0aGUgcmFuZ2Ugb2YgdGhlIGZpcnN0IHJlY3QsIHJhdGhlciB0
aGFuIHRoZSBlbnRpcmUgcGFzc2VkLWluIHJhbmdlPworICAgIGF1dG8gcmVjdCA9IGZyYW1lLnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgq
cmFuZ2UpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0
ZXJSYW5nZUNhbGxiYWNrKHJlY3QsIGVkaXRpbmdSYW5nZSwgY2FsbGJhY2tJRCkpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8
Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNl
bGVjdGlvbiwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSkKQEAg
LTU0NjgsMTUgKzU0NjEsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbkFzeW5jKGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW4KICAgICBwbGF0Zm9y
bVdpbGxQZXJmb3JtRWRpdGluZ0NvbW1hbmQoKTsKIAogICAgIGF1dG8mIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQogICAgIGlmIChmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAg
IFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50
RWRpdGluZ1JhbmdlLmxvY2F0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICByZXBsYWNl
bWVudFJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCByZXBsYWNlbWVudEVkaXRp
bmdSYW5nZSk7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRSYW5nZSkKKyAgICAgICAgICAg
IGlmIChhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUs
IHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVwbGFjZW1lbnRSYW5nZSwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgfQotCiAgICAgICAgIGZyYW1lLmVkaXRvcigp
LnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIGhpZ2hsaWdodHMsIHNlbGVjdGlvbi5s
b2NhdGlvbiwgc2VsZWN0aW9uLmxvY2F0aW9uICsgc2VsZWN0aW9uLmxlbmd0aCk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCAyOTY4ZjdjMGMyNGE1YWQ4ODA2NWRkODRkZDhlMGMxYzNiYWVkMjk2Li5kOGRm
ZWE3MDcyM2YxNjU2YjI4NGFkYzYwZmY5ZTVhMTZmZDZmMThhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjY3LDEwICsy
NjcsMTAgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFt
ZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKIAogICAgIGlmIChmcmFtZS5lZGl0b3IoKS5o
YXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBm
cmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBvc2l0
aW9uUmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0
UmVjdHMpOworICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS0+
Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CiAg
ICAgICAgICAgICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cyh2aWV3LCBw
b3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOwogCi0gICAgICAgICAgICBwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChjb21wb3NpdGlvblJhbmdlLmdl
dCgpKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHQgPSBwbGFpblRleHRG
b3JDb250ZXh0KCpjb21wb3NpdGlvblJhbmdlKTsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gY29tcG9zaXRpb25TZWxlY3Rpb24oKmNvbXBvc2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAg
cG9zdExheW91dERhdGEubWFya2VkVGV4dENhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50
c1RvUm9vdFZpZXcoY29tcG9zaXRpb25TZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkuYWJzb2x1dGVD
YXJldEJvdW5kcyhudWxscHRyIC8qIGluc2lkZUZpeGVkICovKSk7CiAgICAgICAgICAgICBwb3N0
TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcoY29tcG9zaXRpb25TZWxlY3Rpb24udmlzaWJsZUVuZCgpLmFic29sdXRlQ2FyZXRCb3Vu
ZHMobnVsbHB0ciAvKiBpbnNpZGVGaXhlZCAqLykpOwpAQCAtMTM3NywxMyArMTM3NywxNSBAQCB2
b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2Vz
dHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgewogICAgICAgICBpZiAoIWZyYW1lLmVkaXRvcigp
Lmhhc0NvbXBvc2l0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgUmVmUHRyPFJh
bmdlPiBtYXJrZWRSYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAg
ICAgICAgaWYgKHBvc2l0aW9uIDwgbWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAg
ICAgICAgIHBvc2l0aW9uID0gbWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAg
aWYgKHBvc2l0aW9uID4gbWFya2VkUmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgICAgICBw
b3NpdGlvbiA9IG1hcmtlZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBhdXRvIG1hcmtl
ZFJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgICAgICBhdXRv
IHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFya2VkUmFuZ2Ut
PnN0YXJ0KTsKKyAgICAgICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihtYXJrZWRSYW5nZS0+ZW5kKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQ
b3NpdGlvbikKKyAgICAgICAgICAgIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAg
aWYgKHBvc2l0aW9uID4gZW5kUG9zaXRpb24pCisgICAgICAgICAgICBwb3NpdGlvbiA9IGVuZFBv
c2l0aW9uOwogICAgICAgICBpZiAod2tHZXN0dXJlU3RhdGUgIT0gR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZTo6QmVnYW4pCi0gICAgICAgICAgICBmbGFncyA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9u
cyhtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpKSAhPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMobWFya2VkUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9u
U2V0PFNlbGVjdGlvbkZsYWdzPiB7IH07CisgICAgICAgICAgICBmbGFncyA9IGRpc3RhbmNlQmV0
d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpKSAhPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgcG9z
aXRpb24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdz
PiB7IH07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZsYWdzID0gUGhyYXNlQm91bmRhcnlD
aGFuZ2VkOwogICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHBvc2l0aW9uLCBwb3NpdGlvbik7CkBAIC0yNDgzLDcgKzI0ODUsNiBAQCBXZWJBdXRvY29ycmVj
dGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICBFZGl0aW5n
UmFuZ2UgbWFya2VkVGV4dFJhbmdlOwogCiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2U7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgIGNvbnN0IHVuc2lnbmVk
IG1pbkNvbnRleHRXb3JkQ291bnQgPSAzOwpAQCAtMjQ5NCwxNCArMjQ5NSwxMiBAQCBXZWJBdXRv
Y29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICAg
ICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBvc2l0
aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBjb21wb3NpdGlvblJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIHN0YXJ0UG9zaXRpb24pOwogICAgICAgICBTdHJpbmcgbWFya2Vk
VGV4dEJlZm9yZTsKLSAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgbWFya2VkVGV4dEJl
Zm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOwotICAgICAgICByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGVuZFBvc2l0aW9uLCBjb21wb3NpdGlv
blJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSkKKyAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUg
PSBwbGFpblRleHRGb3JDb250ZXh0KHsgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQsICpzdGFydCB9
KTsKICAgICAgICAgU3RyaW5nIG1hcmtlZFRleHRBZnRlcjsKLSAgICAgICAgaWYgKHJhbmdlKQot
ICAgICAgICAgICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5n
ZXQoKSk7CisgICAgICAgIGlmIChhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0
aW9uKSkKKyAgICAgICAgICAgIG1hcmtlZFRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQo
eyAqZW5kLCBjb21wb3NpdGlvblJhbmdlLT5lbmQgfSk7CiAgICAgICAgIG1hcmtlZFRleHQgPSBt
YXJrZWRUZXh0QmVmb3JlICsgc2VsZWN0ZWRUZXh0ICsgbWFya2VkVGV4dEFmdGVyOwogICAgICAg
ICBpZiAoIW1hcmtlZFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0UmFu
Z2UubG9jYXRpb24gPSBtYXJrZWRUZXh0QmVmb3JlLmxlbmd0aCgpOwpAQCAtMjYxNywxNCArMjYx
NiwxNiBAQCBzdGF0aWMgdm9pZCBmb2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24oV2Vi
UGFnZSYgcGFnZSwgRWxlbWVudCYgZm9jdXNlZEVsZQogICAgIEludFBvaW50IGNvbnN0cmFpbmVk
UG9pbnQgPSBjb25zdHJhaW5Qb2ludChhZGp1c3RlZFBvaW50LCBmcmFtZSwgZm9jdXNlZEVsZW1l
bnQpOwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGNvbnN0cmFpbmVkUG9pbnQpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBjb21wb3Np
dGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGF1dG8g
Y29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAg
ICBpZiAoIWNvbXBvc2l0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwb3Np
dGlvbiA8IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgcG9zaXRp
b24gPSBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgZWxzZSBpZiAocG9z
aXRpb24gPiBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpKQotICAgICAgICBwb3NpdGlv
biA9IGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgYXV0byBzdGFydFBvc2l0
aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0
KTsKKyAgICBhdXRvIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNv
bXBvc2l0aW9uUmFuZ2UtPmVuZCk7CisgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQb3NpdGlvbikK
KyAgICAgICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIGVsc2UgaWYgKHBvc2l0aW9u
ID4gZW5kUG9zaXRpb24pCisgICAgICAgIHBvc2l0aW9uID0gZW5kUG9zaXRpb247CiAgICAgSW50
UmVjdCBjYXJldFJlY3QgPSB2aWV3LmNvbnRlbnRzVG9Sb290Vmlldyhwb3NpdGlvbi5hYnNvbHV0
ZUNhcmV0Qm91bmRzKCkpOwogICAgIGZsb2F0IGRlbHRhWCA9IGFicyhjYXJldFJlY3QueCgpICsg
KGNhcmV0UmVjdC53aWR0aCgpIC8gMikgLSByZXF1ZXN0LnBvaW50LngoKSk7CiAgICAgZmxvYXQg
ZGVsdGFZRnJvbVRoZVRvcCA9IGFicyhjYXJldFJlY3QueSgpIC0gcmVxdWVzdC5wb2ludC55KCkp
OwpAQCAtNDI1Myw4ICs0MjU0LDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0
aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAg
aWYgKHdhbnRzTWFya2VkVGV4dFJlY3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAg
ICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBtYXJrZWQg
dGV4dCByZWN0cyBtYWtlIHN1cmUgdGhhdCB0aGUgY29udGV4dAogICAgICAgICAgICAgLy8gcmFu
Z2UgZW5jb21wYXNzZXMgdGhlIGVudGlyZSBtYXJrZWQgdGV4dCByYW5nZSBzbyB0aGF0IHdlIGRv
bid0IHJldHVybiBhIHRydW5jYXRlZCByZXN1bHQuCi0gICAgICAgICAgICBhdXRvIGNvbXBvc2l0
aW9uU3RhcnQgPSBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgICAg
ICBhdXRvIGNvbXBvc2l0aW9uRW5kID0gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKTsK
KyAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25TdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCk7CisgICAgICAgICAgICBhdXRvIGNvbXBv
c2l0aW9uRW5kID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2Ut
PmVuZCk7CiAgICAgICAgICAgICBpZiAoY29udGV4dEJlZm9yZVN0YXJ0ID4gY29tcG9zaXRpb25T
dGFydCkKICAgICAgICAgICAgICAgICBjb250ZXh0QmVmb3JlU3RhcnQgPSBjb21wb3NpdGlvblN0
YXJ0OwogICAgICAgICAgICAgaWYgKGNvbnRleHRBZnRlckVuZCA8IGNvbXBvc2l0aW9uRW5kKQpA
QCAtNDI3NCw5ICs0Mjc1LDkgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5n
Q29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBjb250ZXh0
LmNvbnRleHRCZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJh
bmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IG1h
a2VTdHJpbmcoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBlbmRPZlJhbmdlT2ZJ
bnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LmNvbnRleHRBZnRlciA9IG1ha2VTdHJp
bmcoZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29udGV4dEFmdGVyRW5kKTsKLSAg
ICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5n
ZXQoKSwgY29tcG9zaXRpb25SYW5nZS5nZXQoKSkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGNvbXBvc2l0aW9uU3RhcnQoY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKGNvbXBvc2l0aW9uUmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpOworICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAo
cmFuZ2VPZkludGVyZXN0LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2Up
LnB0cigpKSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjb21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0
ID0gbWFrZVN0cmluZyhjb21wb3NpdGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CiAgICAgICAg
IGNvbnRleHQuc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sb2NhdGlvbiA9IGRpc3RhbmNlQmV0
d2VlblBvc2l0aW9ucyhzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGNvbXBvc2l0
aW9uU3RhcnQpOwogICAgICAgICBjb250ZXh0LnNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQubGVu
Z3RoID0gW2NvbnRleHQuc2VsZWN0ZWRUZXh0LnN0cmluZyBsZW5ndGhdOwpAQCAtNDMwMywxMCAr
NDMwNCw4IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9j
dW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgICAgICBjb250ZXh0LnRl
eHRSZWN0cyA9IGNoYXJhY3RlclJlY3RzRm9yUmFuZ2UoKmNvbnRleHRSYW5nZSwgMCk7CiAgICAg
fSBlbHNlIGlmICh3YW50c01hcmtlZFRleHRSZWN0cyAmJiBjb21wb3NpdGlvblJhbmdlKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBpZiAo
YXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1
aXZhbGVudCgpKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQoY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKSkKLSAgICAgICAgICAgICAgICBj
b21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gV2ViQ29yZTo6cGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsg
V1RGTW92ZSgqc3RhcnQpLCBXVEZNb3ZlKCplbmQpIH0pLmxlbmd0aCgpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0
YXJ0LmRlZXBFcXVpdmFsZW50KCkpKQorICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNl
dCA9IFdlYkNvcmU6OnBsYWluVGV4dCh7IFdURk1vdmUoKnN0YXJ0KSwgY29tcG9zaXRpb25SYW5n
ZS0+c3RhcnQgfSkubGVuZ3RoKCk7CiAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFj
dGVyUmVjdHNGb3JSYW5nZSgqY29tcG9zaXRpb25SYW5nZSwgY29tcG9zaXRpb25TdGFydE9mZnNl
dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4IDhkNmM0ODc5MWQ0N2RmOTRlZjlhMjEzOGIzODIz
NTQwMDM1YmEwNGMuLmVjY2ZiNTAxZTZlYzMyMTg3NmEwNmE0MDQyZmRiOTNjMTgwNmQ4YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lSU9TLm1tCkBAIC0xNDAsNyArMTQwLDcgQEAgLSAoQ0dSZWN0KWNsb3Nlc3RDYXJldFJlY3RJ
bk1hcmtlZFRleHRSYW5nZUZvclBvaW50OihDR1BvaW50KXBvaW50CiAKICAgICBkb2N1bWVudC0+
dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5lZGl0
b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7CisgICAgYXV0byBtYXJrZWRUZXh0UmFuZ2Ug
PSBmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGF1dG8gbWFya2VkVGV4
dFJhbmdlU2VsZWN0aW9uID0gbWFya2VkVGV4dFJhbmdlID8gVmlzaWJsZVNlbGVjdGlvbigqbWFy
a2VkVGV4dFJhbmdlKSA6IFZpc2libGVTZWxlY3Rpb24oKTsKIAogICAgIGlmICghbWFya2VkVGV4
dFJhbmdlU2VsZWN0aW9uLmlzUmFuZ2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01S
YW5nZS5tbQppbmRleCBhMGI2Yjc5NmEzYTgyNzlkODg0YzY0NzMwMTUzOTEzNDUwNzE2MGQ4Li5k
MGQzMGNlOWE4MWI3MThiOWFjMjI4MDM0ZWIwNTcxNTk5ZWRkNzEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCkBAIC0zMDksNCArMzA5LDkgQEAgRE9NUmFuZ2UgKmtp
dChXZWJDb3JlOjpSYW5nZSogdmFsdWUpCiAgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNl
XTsKIH0KIAorRE9NUmFuZ2UgKmtpdChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mIHZhbHVlKQoreworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHZhbHVlKS5nZXQo
KSk7Cit9CisKICN1bmRlZiBJTVBMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVJhbmdlSW50ZXJuYWwuaAppbmRleCBhZjU1OTMyNzA5MzE2NDViYTcyYWUxYTE5OTFhZWQ5MTUw
OWRmY2Q3Li5lNjgxOWE1ZjhkNTg4ZDJlOWI2ODdmMGQ5NzlmNjdjYjIzYTg5YTE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKQEAgLTIzLDEx
ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxl
UmFuZ2UuaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01SYW5nZS5oPgogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBSYW5nZTsKLX0KLQogV2ViQ29yZTo6UmFuZ2UqIGNvcmUoRE9NUmFu
Z2UgKik7CiBET01SYW5nZSAqa2l0KFdlYkNvcmU6OlJhbmdlKik7CitET01SYW5nZSAqa2l0KGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRl
eCBlMWI0MmVhNmQyZmJlZmUzYTFlZGYxMTMyMmM2ZDVlOGIzMDNmZjQ1Li42ZjA4ZmFhYTk1MzVj
NGFiOTc1ZjI3YjdjYmY0MjU3Njk1ZjhiNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNjMsMjQg
KzYzLDI0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSBm
aW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0
IGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJD
b3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpS
YW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiwg
V2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIFdl
YkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0
b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwor
ICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikg
ZmluYWw7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUmLCBj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcm
LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJ
bnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxl
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlk
QXBwbHlTdHlsZSgpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCkgZmlu
YWw7CisgICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpT
aW1wbGVSYW5nZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNl
ZCkgZmluYWw7CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFsOwogICAgIHZvaWQg
ZGlkRW5kRWRpdGluZygpIGZpbmFsOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmlu
YWw7CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsOwotICAg
IHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZl
Y3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdldENsaWVudFBh
c3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKIAogICAgIHZvaWQgc2V0SW5zZXJ0aW9u
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBXZWJDb3JlOjpET01QYXN0ZUFj
Y2Vzc1Jlc3BvbnNlIHJlcXVlc3RET01QYXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmKSBmaW5hbCB7
IHJldHVybiBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JHZXN0dXJl
OyB9CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFN1cHByZXNz
UGFzc3dvcmRFY2hvKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3
b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5nZSYgZGVz
dGluYXRpb24sIGJvb2wgaXNNb3ZlKSBmaW5hbDsKKyAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJv
cChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2Um
IGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CiAgICAgCiAgICAgYm9vbCBzaG91bGRF
cmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBl
KSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3Qg
U3RyaW5nJikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggOWFiMWMyOWQ0ODc4NzdkNmU4
NTgzOWY5ZDVmNGM4OTA2OTgxMjliMi4uYmQ5NWE2NjQ4YTMwMzJjMDU3YTk4MWUwOTQ2OTA4MGU4
ODEwNjM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMjM0LDEwICsyMzQsOSBAQCBpbnQgV2Vi
RWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAKICNlbmRpZgogCi1ib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVG
b3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3Ci0gICAgICAgIHNob3VsZERlbGV0ZURPTVJhbmdl
OmtpdChyYW5nZSldOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGREZWxldGVET01SYW5nZTpraXQocmFuZ2Up
XTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgp
CkBAIC0yNTYsMTEgKzI1NSwxMSBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6aXNTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3Mo
KS5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiBy
YW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxl
UHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7
Ci0gICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNN
dXRhYmxlKCkgPyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4oc3RhdGljX2Nhc3Q8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcyY+KCpzdHlsZSkpIDogc3R5bGUtPm11dGFibGVDb3B5KCkpOwogICAg
IHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1f
d2ViVmlldwotICAgICAgICBzaG91bGRBcHBseVN0eWxlOmtpdCgmbXV0YWJsZVN0eWxlLT5lbnN1
cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtpdChyYW5nZSld
OworICAgICAgICBzaG91bGRBcHBseVN0eWxlOmtpdCgmc3R5bGUubXV0YWJsZUNvcHkoKS0+ZW5z
dXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKQorICAgICAgICB0b0VsZW1lbnRzSW5ET01SYW5nZTpr
aXQocmFuZ2UpXTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlRm9udFBhbmVsKFdlYlZpZXcgKndl
YlZpZXcpCkBAIC0yNzksMzMgKzI3OCwyOSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQXBw
bHlTdHlsZSgpCiAgICAgdXBkYXRlRm9udFBhbmVsKG1fd2ViVmlldyk7CiB9CiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSogcmFuZ2UsIFJh
bmdlKiByYW5nZVRvQmVSZXBsYWNlZCkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZVRvQmVSZXBsYWNlZCkKIHsKICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRp
bmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKICAgICAgICAgc2hvdWxkTW92
ZVJhbmdlQWZ0ZXJEZWxldGU6a2l0KHJhbmdlKSByZXBsYWNpbmdSYW5nZTpraXQocmFuZ2VUb0Jl
UmVwbGFjZWQpXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGlu
ZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5n
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxk
QmVnaW5FZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKLQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzptX3dlYlZpZXcgc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKIH0K
IAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQor
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQogewotICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91
bGRFbmRFZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKKyAgICByZXR1cm4gW1ttX3dlYlZp
ZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkRW5k
RWRpdGluZ0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0
b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewogICAgIFdlYlZpZXcqIHdlYlZpZXcg
PSBtX3dlYlZpZXc7CiAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJh
bmdlOmtpdChyYW5nZSkgZ2l2ZW5BY3Rpb246a2l0KGFjdGlvbildOwogfQogCi1ib29sIFdlYkVk
aXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBS
YW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKQogewogICAgIHJldHVybiBbbV93ZWJWaWV3IF9zaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOmtpdChmcm9tUmFuZ2UpIHRvRE9NUmFuZ2U6a2l0KHRvUmFuZ2UpIGFmZmlu
aXR5OmtpdChzZWxlY3Rpb25BZmZpbml0eSkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3Rpbmdd
OwogfQpAQCAtNDExLDEyICs0MDYsMTIgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKICNlbmRpZgogfQogCi12b2lkIFdlYkVkaXRvckNsaWVu
dDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JikKIHsKICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgV2ViS2l0LCBv
bmx5IFdlYktpdDIuCiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2Fy
ZERhdGEpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBl
cywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEp
CiB7CiAgICAgLy8gTm90IGltcGxlbWVudGVkIFdlYktpdCwgb25seSBXZWJLaXQyLgogfQpAQCAt
NTc3LDkgKzU3Miw5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb24oKQogCiAjZW5kaWYgLy8gVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VN
RU5UKQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlICpub2Rl
LCBSYW5nZSogcmVwbGFjaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikK
K2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVwbGFjaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlv
biBnaXZlbkFjdGlvbikKIHsgCi0gICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6a2l0KG5vZGUp
IHJlcGxhY2luZ0RPTVJhbmdlOmtpdChyZXBsYWNpbmdSYW5nZSkgZ2l2ZW5BY3Rpb246KFdlYlZp
ZXdJbnNlcnRBY3Rpb24pZ2l2ZW5BY3Rpb25dOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRp
dGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRJbnNlcnROb2Rl
OmtpdCgmbm9kZSkgcmVwbGFjaW5nRE9NUmFuZ2U6a2l0KHJlcGxhY2luZ1JhbmdlKSBnaXZlbkFj
dGlvbjooV2ViVmlld0luc2VydEFjdGlvbilnaXZlbkFjdGlvbl07CiB9CiAKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZWdpc3RlclVuZG9PclJlZG9TdGVwKFVuZG9TdGVwJiBzdGVwLCBib29sIGlz
UmVkbykKQEAgLTg1NiwxMCArODUxLDEwIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3Jt
c1R3b1N0ZXBQYXN0ZShXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERy
b3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBp
c01vdmUpCitib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50
RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wg
aXNNb3ZlKQogewogICAgIGlmIChbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0g
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZXJmb3JtVHdvU3RlcERyb3A6YXREZXN0aW5h
dGlvbjppc01vdmU6KV0pCi0gICAgICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0
ZUZvcndhcmRlcl0gcGVyZm9ybVR3b1N0ZXBEcm9wOmtpdCgmZnJhZ21lbnQpIGF0RGVzdGluYXRp
b246a2l0KCZkZXN0aW5hdGlvbikgaXNNb3ZlOmlzTW92ZV07CisgICAgICAgIHJldHVybiBbW21f
d2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gcGVyZm9ybVR3b1N0ZXBEcm9wOmtpdCgm
ZnJhZ21lbnQpIGF0RGVzdGluYXRpb246a2l0KGRlc3RpbmF0aW9uKSBpc01vdmU6aXNNb3ZlXTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTg4Nyw3ICs4ODIsNyBAQCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmlu
Z1ZpZXcgc3RyaQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIFJhbmdlJiwgYm9v
bCkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFn
bWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0YzU0
YzQ0NGFjZjE3ODE5MDJkNjU4YTkxNWE0NjI4ODNiYjUyMWEwLi43NjNjNzc3Y2UyYjAyNjZkNDA5
M2RhZmNhYzJhNjM2MjVmMWJiZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KQEAgLTcyMCwxMyArNzIwLDE1IEBAIC0gKE5TUmVjdClfY2FyZXRSZWN0
QXRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6UG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxl
Y3RpCiAKIC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UK
IHsKLSAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JS
YW5nZShjb3JlKHJhbmdlKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TWmVy
b1JlY3Q7CisgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVj
dEZvclJhbmdlKCptYWtlUmFuZ2UoY29yZShyYW5nZSkpKTsKIH0KIAogLSAodm9pZClfc2Nyb2xs
RE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBib29sIGluc2lkZUZp
eGVkID0gZmFsc2U7IC8vIEZJWE1FOiBnZXQgdmlhIGZpcnN0UmVjdEZvclJhbmdlKCkuCi0gICAg
TlNSZWN0IHJhbmdlUmVjdCA9IFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07ICAg
IAorICAgIE5TUmVjdCByYW5nZVJlY3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFu
Z2VdOwogICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGNvcmUoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7
CiAgICAgICAgIAogICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7
CkBAIC03ODQsNyArNzg2LDcgQEAgLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVu
dFNlbGVjdGlvbjooV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkVBbHRlcmEKICAgICBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0
aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpOwogfQogI2VuZGlmCiAKQEAgLTg1Myw3ICs4NTUsNyBAQCAtIChO
U1JhbmdlKV9jb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAo
RE9NUmFuZ2UgKilfbWFya0RPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFu
Z2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigp
Lm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBT
dHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCkBAIC0xMTA2LDEy
ICsxMTA4LDEyIEBAIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDoo
Q0dQb2ludClmaXJzdCBzZWNvbmRQb2ludDooQ0dQb2ludClzCiB7CiAgICAgYXV0byBmaXJzdFBv
c2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OmZpcnN0XTsKICAgICBhdXRv
IHNlY29uZFBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnNlY29uZF07
Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlv
bihmaXJzdFBvc2l0aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpOworICAgIHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0
aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKERPTVJh
bmdlICopX3NlbGVjdGlvblJhbmdlRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92
aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgp
KTsKKyAgICByZXR1cm4ga2l0KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKICNl
bmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTQ1NCw3ICsxNDU2LDcgQEAgLSAoQk9P
TClpc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0
ZWRET01SYW5nZQogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZikt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAg
ICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpOwogfQogCiAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkgY2xvc2VUeXBp
bmc6KEJPT0wpY2xvc2VUeXBpbmcKQEAgLTE0OTYsNyArMTQ5OCw3IEBAIC0gKHZvaWQpZXhwYW5k
U2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdl
ICopZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2Vs
ZiktPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsK
IH0KIAogLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b24KQEAgLTE1MjYsNyArMTUyOCw3IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNl
bGVjdGlvbgogCiAtIChET01SYW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bgogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlv
bigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CisgICAgcmV0
dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRT
ZWxlY3Rpb24oKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKQEAgLTE1ODksMTIgKzE1OTEsMTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFy
dAogCiAtIChET01SYW5nZSAqKXJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1v
dW50CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0
aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRT
ZWxlY3Rpb24oYW1vdW50KSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeUV4dGVuZGluZ0N1
cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVS
YW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVj
dGlvbihhbW91bnQpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rp
b24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKTsKIH0KIAogLSAo
dm9pZClzZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAq
KWVsZW1lbnQKQEAgLTE2MTgsNyArMTYyMCw3IEBAIC0gKERPTVJhbmdlICopbWFya2VkVGV4dERP
TVJhbmdlCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVy
biBraXQoZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0
dXJuIGtpdChmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKTsKIH0KIAogLSAodm9p
ZClzZXRNYXJrZWRUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlu
ZXdTZWxSYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KaW5kZXggMTExY2Y4YmRjMjlkYzYxZTI4ZjgyMmU5NTdiOTM4ODJhNDI3OTlhNS4uNGUz
YTA4YjJkYzVkMDRiZTgwZjExYzI5Y2IyMjk5MTBiNGU4OGVmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0xMzMyLDcgKzEzMzIsNyBA
QCAtIChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4
dCBnaXZlbkFjdGlvbjooV2ViVmlld0lucwogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQog
ewogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJu
IGNvcmVGcmFtZSA/IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CisgICAgcmV0dXJu
IGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpIDogbmlsOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNjM0Niw3
ICs2MzQ2LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgRE9N
UmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2Vd
OwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICgwLCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0
aW9uLCB0aGVSYW5nZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAw
LCAwKTsKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAgICAgfQogICAgIAogICAgIEFTU0VS
VChbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsKQEAgLTcwNzUsNyArNzA3NSw3IEBAIC0gKE5TVUlu
dGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgaW5ET01SYW5nZToo
RE9NUmFuZ2UgKilyYW5nCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dChzdHJp
bmcsIGNvcmUocmFuZ2UpLCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVz
LCAwKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0
KHN0cmluZywgbWFrZVJhbmdlKGNvcmUocmFuZ2UpKSwgY29yZU9wdGlvbnMob3B0aW9ucyksIGxp
bWl0LCBtYXJrTWF0Y2hlcywgMCk7CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZDooQk9PTCluZXdWYWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQpp
bmRleCAxZTNiNzlkMDM4MWFlOTlkNmNhMzRlY2EyMmY1NjM5ZDQ4YTNhOTRlLi44MDFiZWZlYzc2
ZDA5NmY5M2YwZjQ4ZDYzY2Y4N2RmOTVkNTUxYmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxl
ci5tbQpAQCAtMTc2LDcgKzE3Niw3IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAg
Ly8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVtCiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtf
aHRtbFZpZXcgX2ZyYW1lXTsKLSAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjcmVh
dGVMaXZlUmFuZ2UoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChj
b3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1
cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQKICAgICAgICAg
ICAgIGRpcmVjdGlvbjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkIGdyYW51bGFyaXR5OlRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5XTsKICAgICAgICAgRE9NUmFuZ2UgKnByZWZp
eCA9IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlRleHRJdGVyYXRvci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCmluZGV4IDhjN2U3ZWUwMGY3ZjMxNTBkODk3
NzQzYTA3MjQwOTZiMzg4MjE3Y2UuLjkzYjgzNDc3ZmM4YTQyYWQzZjc0ZDM2OWU4MTc5NGJiZWZk
YTAzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4
dEl0ZXJhdG9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4
dEl0ZXJhdG9yLm1tCkBAIC05NSw3ICs5NSw3IEBAIC0gKERPTVJhbmdlICopY3VycmVudFJhbmdl
CiAgICAgYXV0byYgdGV4dEl0ZXJhdG9yID0gKl9wcml2YXRlLT5fdGV4dEl0ZXJhdG9yOwogICAg
IGlmICh0ZXh0SXRlcmF0b3IuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZSh0ZXh0SXRlcmF0b3IucmFuZ2UoKSkucHRyKCkpOworICAg
IHJldHVybiBraXQodGV4dEl0ZXJhdG9yLnJhbmdlKCkpOwogfQogCiAvLyBGSVhNRTogQ29uc2lk
ZXIgZGVwcmVjYXRpbmcgdGhpcyBtZXRob2QgYW5kIGNyZWF0aW5nIG9uZSB0aGF0IGRvZXMgbm90
IHJlcXVpcmUgY29weWluZyA4LWJpdCBjaGFyYWN0ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDg1ZDY5NDNlMzZiYWU2MzdhMGUwOWI1NDc5ZGFi
MzViMzlhYTdjY2MuLjA3MzNmNWUwNDQ0Zjc5YWRkN2RiOTdjZGExNWQ2OTc4MjhiNjk3MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQ1OTQsNyAr
NDU5NCw3IEBAIC0gKFdlYlRleHRJdGVyYXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVj
dClyZWN0CiAgICAgYXV0byBpbnRSZWN0ID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyZWN0
KTsKICAgICBhdXRvIHJhbmdlID0gV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihjb3JlRnJhbWUt
PnZpc2libGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWluWE1pbllDb3JuZXIoKSksCiAgICAg
ICAgIGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5tYXhYTWF4WUNv
cm5lcigpKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJh
dG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOmtpdChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgp
KV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGlu
aXRXaXRoUmFuZ2U6a2l0KHJhbmdlKV0gYXV0b3JlbGVhc2VdOwogfQogCiAjaWYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCkBAIC04NDE3LDcgKzg0MTcsNyBAQCAtIChET01SYW5nZSAqKWVkaXRhYmxl
RE9NUmFuZ2VGb3JQb2ludDooTlNQb2ludClwb2ludAogICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNl
bGYpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0
KHBhZ2UtPm1haW5GcmFtZSgpLmVkaXRvcigpLnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9p
bnQoW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdKSkuZ2V0KCkpOworICAgIHJl
dHVybiBraXQocGFnZS0+bWFpbkZyYW1lKCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJDb3Jl
OjpJbnRQb2ludChbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKSk7CiB9CiAK
IC0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVu
dFJhbmdlIHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNT
ZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClm
bGFnCkBAIC04NDY1LDcgKzg0NjUsNyBAQCAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UK
ICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7
CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiAtIChOU1NlbGVj
dGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404172</attachid>
            <date>2020-07-13 14:07:45 -0700</date>
            <delta_ts>2020-07-13 15:15:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200713140745.patch</filename>
            <type>text/plain</type>
            <size>152163</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNlZDVlN2JlNjI3NTg3
NzYwYmVlMDk2MDYxNmQzMGE3N2Q4N2E1NS4uMWJiNDBmZTEyYjIzNjVmZTcxOGFkYjFiMGViOTAw
ZDI2MzdjM2I3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTEzICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIEltcG9zc2libGUgdG8gcGF1c2UgcGxheWJhY2sgb2YgTWVk
aWFTdHJlYW0gdmlkZW8gdHJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGM5ZDdkOWE3NGI2M2RlMGExYjAwMDE0
MjUzYjBlYzc4MTNhNzQ2MDYuLmVkOGY4YTk0OTBjM2FkNTZhNDljNmExMmU5NjE0Yjg1NDY5NDRm
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcApAQCAtMzA2LDggKzMwNiw4IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBz
CiAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJh
bmdlKCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2Uo
Km1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19F
TkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2
aW91cykgewogICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdpbigpOyBy
aXQgIT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKQEAgLTMxNSw4ICszMTUsOCBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1Jhbmdl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxp
bmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3Jl
YXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAg
ICAgICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSktPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3Nw
ZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwMSwxNSArNjAxLDE0IEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xv
c2VzdFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNs
b3Nlc3RTdHJpbmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0
cmluZ3MpIHsKLSAgICAgICAgaWYgKGF1dG8gc2VhcmNoU3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRp
dG9yKCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVu
Y2VSYW5nZSkucHRyKCksIGZpbmRPcHRpb25zKSkgewotICAgICAgICAgICAgYXV0byBmb3VuZFN0
cmluZ1JhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpzZWFyY2hTdHJpbmdSYW5nZSk7CisgICAgICAg
IGlmIChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJp
bmcoc2VhcmNoU3RyaW5nLCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CiAgICAgICAg
ICAgICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBjbG9zZXN0U3Ry
aW5nUmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJp
bmdSYW5nZSA9ICpzZWFyY2hTdHJpbmdSYW5nZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGluZyByYW5n
ZSBlZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8g
cmFuZ2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwgdXNlIHRo
ZSBsZWFkaW5nIHJhbmdlIGVkZ2VzLgogICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nlc3RTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCA6
IGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgYXV0byYgZm91bmRT
dHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1JhbmdlLmVuZCA6
IGZvdW5kU3RyaW5nUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBzZWFyY2hTdHJpbmdSYW5nZS0+ZW5kIDog
c2VhcmNoU3RyaW5nUmFuZ2UtPnN0YXJ0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGF1dG8gY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLm9m
ZnNldDsKICAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0ID0gZm91bmRT
dHJpbmdQb3NpdGlvbi5vZmZzZXQ7CkBAIC02MTgsNyArNjE3LDcgQEAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUlu
RGlyZWN0aW8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nl
c3RQb3NpdGlvbk9mZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZz
ZXQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dh
cmRTZWFyY2ggJiYgcmVzdWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwg
MCkpCi0gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5n
UmFuZ2U7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpzZWFyY2hT
dHJpbmdSYW5nZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggMWNlNDQyODEyODRiZDU5YzZmODRlMjUw
OTg4YTI5MjI0OTc2YjM0Zi4uOWYyZDY1ZDc0MGRiNzM4ZjU5ZjgzMGJhOGMxYmYwYmY2ODI0YWM5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY5Miw3ICs2
OTIsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRl
eHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogCiAgICAgaWYgKFttYXJrZXJSYW5nZXMg
aXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKSB7CiAgICAgICAgIG9wZXJhdGlvbi50ZXh0
UmFuZ2VzID0gbWFrZVZlY3RvcihtYXJrZXJSYW5nZXMsIFt3cmFwcGVyXSAoaWQgbWFya2VyUmFu
Z2UpIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoW3dyYXBwZXIgcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtl
UmFuZ2UoW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKICAg
ICAgICAgfSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA3MTA1ZGI1ZTk3
YzNmNTIxZDdlNDhjNGUyMjU2N2ZkZWZkYmFjNzhmLi5hZjQzMmI0OTQzZmI0YWIyNjY5Y2M4YTBm
YTVhNzdlY2I2YjgzNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ3Myw3ICs0NzMs
NyBAQCBzdGF0aWMgYm9vbCBhY2NlcHRzRWRpdGluZ0ZvY3VzKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiAgICAgaWYgKCFmcmFtZSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2VPZkNvbnRl
bnRzKCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdp
bkVkaXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9CiAKIHN0
YXRpYyBib29sIGNhbkFjY2Vzc0FuY2VzdG9yKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBhY3RpdmVT
ZWN1cml0eU9yaWdpbiwgRnJhbWUqIHRhcmdldEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXgg
OWI3YTFhNjIxMjE5NWEyZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4uOWVhMTQ5ZDJmNTFkZTI0
YzMzNzE2MGI1M2FmN2MxZWRjZGM4OGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0xODMzLDI2
ICsxODMzLDI2IEBAIEZsb2F0UmVjdCBSYW5nZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9u
U2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9uCiAgICAgcmV0dXJuIGJvdW5kaW5n
UmVjdChDb29yZGluYXRlU3BhY2U6OkFic29sdXRlLCByZWN0T3B0aW9ucyk7CiB9CiAKLVNpbXBs
ZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCitTaW1wbGVSYW5nZSBt
YWtlUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiB7IHsgcmFuZ2Uuc3Rh
cnRDb250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSB9LCB7IHJhbmdlLmVuZENvbnRhaW5l
cigpLCByYW5nZS5lbmRPZmZzZXQoKSB9IH07CiB9CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVS
YW5nZShjb25zdCBSZWY8UmFuZ2U+JiByYW5nZSkKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25z
dCBSZWY8UmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdl
LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAotT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCitPcHRp
b25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBtYWtl
U2ltcGxlUmFuZ2UoKnJhbmdlKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKCpyYW5nZSk7CiB9CiAK
LU9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdl
PiYgcmFuZ2UpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJlZlB0cjxS
YW5nZT4mIHJhbmdlKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkp
OworICAgIHJldHVybiBtYWtlUmFuZ2UocmFuZ2UuZ2V0KCkpOwogfQogCiBSZWY8UmFuZ2U+IGNy
ZWF0ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4
IGE4NjE5Y2I5NDYzNDM0ZThjZTgxZDJiODQ3YzMyNWEwMTIwN2UxMTAuLjkzNWJiZGE0N2I3NjEw
NzkwNzdjNDE2M2UxYzg5OTc0ODI1ZDk5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xNzYsMTAgKzE3
NiwxMCBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7
CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3Qg
UmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSos
IGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5n
ZSYpOwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKLU9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKLU9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOwor
U2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJhbmdlJik7CitTaW1wbGVSYW5nZSBtYWtlUmFu
Z2UoY29uc3QgUmVmPFJhbmdlPiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1ha2VSYW5nZShjb25zdCBSYW5nZSopOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CiAKIFdFQkNPUkVfRVhQ
T1JUIFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDRhOGQwMDRk
ZTkxMjg5YTM0YWYwYzE1MWIzNjljMzUzZGZhZGJjYzkuLjI2NWM0OTdiNjA4MjgzZGIxMWJlM2Yw
N2Y2NGRlZDc1M2E2NDE1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtODIs
NiArODIsMjAgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUo
Tm9kZSYgbm9kZSkKICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9
LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OwogfQogCitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
bWFrZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBzdGFydCwgY29uc3QgT3B0
aW9uYWw8Qm91bmRhcnlQb2ludD4mIGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyAqc3RhcnQsICplbmQg
fSB9OworfQorCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5k
YXJ5UG9pbnQ+JiYgc3RhcnQsIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgZW5kKQoreworICAg
IGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4geyB7IFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSB9IH07Cit9CisKIFNpbXBs
ZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewogICAg
IHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtl
Qm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5oCmluZGV4IDcwZTdjNDI1MWNkZGYzMTdiNDlkOWFhMmRjNDJlNmQ0NTQ3YTc0ZGQuLjAz
Nzc4MGE2MjI0OTFlNzU0ZDA1MGUyYWZhZDMwZTE0OTYyOThmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5oCkBAIC00NiwxMSArNDYsMTQgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKICAgICBX
RUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQm
Jik7CiAKICAgICAvLyBDb252ZW5pZW5jZSBvdmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRp
b24gZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZlIHJhbmdlcy4KLSAgICAvLyBGSVhNRTogT25jZSB0
cmFuc2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VT
aW1wbGVSYW5nZSBpbnN0ZWFkLgorICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zaXRpb24gaXMgb3Zl
ciwgcmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVJhbmdlIGluc3RlYWQuCiAg
ICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKICAgICBTaW1wbGVS
YW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiwgY29u
c3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBtYWtlUmFuZ2UoT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiwgT3B0aW9uYWw8
Qm91bmRhcnlQb2ludD4mJik7CisKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJh
bmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4
IGUyZTg5NGNiOTM3OWM0M2EzMzNiY2IzZjA4MzMyMDE0MzNkN2YyMzAuLjlhYzJlOWQ4NjE2ZGQ2
YTNjMTRhZjAzNTUyMmMzMGU2MGU3MTMxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjQzLDcgKzI0Myw3IEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVj
dGlvbihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2Vu
dFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCku
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5
cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5n
VHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3Jk
UmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBudWxscHRyKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6
OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFk
amFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgV1RGOjpudWxsb3B0KTsKICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjog
ewpAQCAtNjUzLDcgKzY1Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlEaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0CiAjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCiAgICAgYXV0byYgZWRpdG9yID0gbV9kb2N1bWVudC5lZGl0
b3IoKTsKICAgICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7Ci0gICAg
aWYgKCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3Ry
aW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBp
ZiAoIXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJp
bmcsICpzZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGZvciAoYXV0byogbWFya2VyIDogc2VsZWN0aW9uLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKCpzZWxlY3Rpb24sIERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpKQogICAgICAgICByZW1vdmVEaWN0YXRpb25B
bHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxMTJmOTdiMmEwYjY1NDYyNTQ2
NjI4ODI2N2U2MzNiZGJiZmZiNWYxLi44NzBjNGRiYjY4ZDM4MGY5YTFiODFhMGMwZTVmMTNhYTMy
NzRhNGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKQEAgLTc0OSw5ICs3NDksOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJl
cGxhY2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFk
b2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShy
YW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQo
KS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UsIHJh
bmdlVG9CZVJlcGxhY2VkKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gbW92ZVBh
cmFncmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRo
YXQgd291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawogICAgIC8vIHJlbW92
YWxzIHRoYXQgaXQgZG9lcyBjYXVzZSB0aGUgaW5zZXJ0aW9uIG9mICphbm90aGVyKiBwbGFjZWhv
bGRlci4KICAgICBib29sIG5lZWRQbGFjZWhvbGRlciA9IG1fbmVlZFBsYWNlaG9sZGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGNhNjg4YWU0OTViYWMxZDkyMTc3MGJmNDM1ZmNm
YzNmN2UyYjAzZGMuLjk4NzFmODBjZGY0YmE1MTg5YTIwMmE2MjU3YzlmZmJiZDhkNjM0ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTUwNywyMSArNTA3LDE4IEBAIGJvb2wgRWRp
dG9yOjpjYW5EZWxldGUoKSBjb25zdAogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYm
IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpjYW5E
ZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0Citib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIE5vZGUmIHN0YXJ0Q29u
dGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVy
ID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIAotICAgIGlmICghc3RhcnRDb250YWluZXIu
aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFlbmRDb250YWluZXIuaGFzRWRpdGFibGVTdHlsZSgpKQor
ICAgIGlmICghcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgIXJh
bmdlLmVuZC5jb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnQocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAg
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CisgICAgaWYgKHJh
bmdlLmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzb21ldGltZXMgYWxsb3cg
ZGVsZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJsZSByb290cywgbGlrZSB3aGVuIHRoZSBj
YXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCi0gICAgICAgIGlmIChwcmV2aW91cy5pc051
bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSAhPSBzdGFydENvbnRhaW5lci5yb290RWRpdGFibGVFbGVtZW50KCkp
CisgICAgICAgIGF1dG8gcHJldmlvdXMgPSBWaXNpYmxlUG9zaXRpb24geyBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNIH0ucHJldmlvdXMoKTsKKyAg
ICAgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHJhbmdlLnN0YXJ0LmNv
bnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTgsNyArNTU1LDcgQEAgYm9v
bCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biwgVGV4dEdyYW51bGFyaXR5IGcKICAgICAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRp
dGluZ09wZXJhdGlvbigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNob3Vs
ZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxl
Y3RlZFJhbmdlKCkuZ2V0KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7Cisg
ICAgICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxS
aW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgICAgICAgICBkZWxldGVTZWxlY3Rp
b25XaXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAgICAgICAgICAgICAv
LyBJbXBsaWNpdGx5IGNhbGxzIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigp
LgogICAgICAgICB9CkBAIC02MjcsNyArNjI0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFp
blRleHRCeXBhc3NpbmdESFRNTCgpCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dFdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7CiAgICAgU3RyaW5nIHRleHQgPSBy
ZWFkUGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCk7Ci0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGll
bnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBjYW5TbWFy
dFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9CiAKQEAgLTY1Miw3ICs2NDks
NyBAQCBib29sIEVkaXRvcjo6Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCYgcGFzdGVib2FyZCkKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNtYXJ0SW5z
ZXJ0RGVsZXRlRW5hYmxlZCgpICYmIHBhc3RlYm9hcmQuY2FuU21hcnRSZXBsYWNlKCk7CiB9CiAK
LWJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5B
Y3Rpb24pCitib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVu
dCYgZnJhZ21lbnQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVwbGFjaW5nRE9NUmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsKICAgICBpZiAoIWNsaWVudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjEsNyArNjU4LDcgQEAgYm9vbCBFZGl0b3I6
OnNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSog
cmVwbGFjaW5nRE8KICAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oY2hpbGQpICYmIGZyYWdtZW50
Lmxhc3RDaGlsZCgpID09IGNoaWxkKQogICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZElu
c2VydFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJlcGxhY2lu
Z0RPTVJhbmdlLCBnaXZlbkFjdGlvbik7CiAKLSAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZElu
c2VydE5vZGUoJmZyYWdtZW50LCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24pOworICAg
IHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZShmcmFnbWVudCwgcmVwbGFjaW5nRE9N
UmFuZ2UsIGdpdmVuQWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50
IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
IG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5k
bGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQpAQCAtNzI0LDI3ICs3MjEsMjEgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJh
Z21lbnQsIFNlbGVjdFJlcGwKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50
LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJh
bmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dCgqcmFuZ2UsIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0
eWxlOjpZZXMsIGVkaXRpbmdBY3Rpb24pOworICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCks
IHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGlu
Z0FjdGlvbik7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVy
biBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkRGVs
ZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJh
bmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgaWYg
KCFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoIWNhbkRlbGV0ZVJhbmdlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShy
YW5nZSk7CisgICAgcmV0dXJuIHJhbmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKCkgJiYgY2FuRGVs
ZXRlUmFuZ2UoKnJhbmdlKSAmJiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFu
Z2UoKnJhbmdlKTsKIH0KIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCkBAIC03NjMsNyAr
NzU0LDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKICAgICByZXR1cm4gIWRpc3BhdGNo
Q2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRF
dmVudEtpbmQ6OkN1dCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBj
b25zdAorYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0
aW9uKSBjb25zdAogewogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0g
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTgw
LDcgKzk3MSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+
JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgZGlzcGF0Y2hJbnB1
dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CiAgICAg
Ci1ib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBS
YW5nZSogcmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVBy
b3BlcnRpZXMmIHN0eWxlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7ICAgCiAgICAgcmV0
dXJuIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCByYW5nZSk7CiB9CkBAIC0xMDEx
LDcgKzEwMDIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJv
cGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwg
c3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwg
Y3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5z
aG91bGRBcHBseVN0eWxlKCpzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUo
c3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAyMiw3ICsxMDEzLDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
d3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHku
Ci0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUt
PnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5n
ZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHls
ZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKSwgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29s
b3JGaWx0ZXJNb2RlKTsKQEAgLTEwMzMsNyArMTAyNCw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBh
cmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlv
biBlCiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKKyAgICBpZiAo
Y2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoKnN0eWxlLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpKQogICAgICAgICBh
cHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIApAQCAtMTI2Nyw3
ICsxMjU4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVu
dChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAoIXNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBG
SVhNRTogU2hvdWxkIHBhc3MgZmFsc2UgdG8gdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcoKSB0byBub3QgcmVtb3ZlIG1hcmtlcnMgaWYKQEAgLTEzMjYsNyArMTMxNyw3IEBA
IGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICgh
c2hvdWxkSW5zZXJ0VGV4dCgiXG4iX3MsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTEzNDYsNyArMTMz
Nyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICgh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAg
Ci0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBF
ZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxu
Il9zLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xNDA2LDEwICsxMzk3LDEwIEBAIHZvaWQgRWRpdG9y
Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgVmlzCiAKIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlv
blNwZWNpZmllciBhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxl
Y3RlZFJhbmdlKCk7Ci0gICAgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlv
bi5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgd2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbik7CiAgICAgaWYgKGFjdGlvbiA9
PSBDdXRBY3Rpb24pIHsKLSAgICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24u
Z2V0KCkpKQorICAgICAgICBpZiAoIXNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbikpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcodHJ1ZSk7CkBAIC0xNTI2LDcgKzE1MTcsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9y
bURlbGV0ZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRSYW5nZVRvS2lsbFJp
bmcoKnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRU
ZXh0KTsKKyAgICBhZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVkUmFuZ2UoKSwgS2lsbFJpbmdJ
bnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnRE
ZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAKICAgICAvLyBjbGVhciB0aGUgInN0YXJ0
IG5ldyBraWxsIHJpbmcgc2VxdWVuY2UiIHNldHRpbmcsIGJlY2F1c2UgaXQgd2FzIHNldCB0byB0
cnVlCkBAIC0xNzg0LDEyICsxNzc1LDEyIEBAIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb24oKQogCiAjZW5kaWYKIAotYm9vbCBFZGl0b3I6OnNob3VsZEVuZEVk
aXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNob3VsZEVuZEVkaXRpbmcoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+
c2hvdWxkRW5kRWRpdGluZyhyYW5nZSk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGRCZWdpbkVk
aXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNob3VsZEJlZ2luRWRpdGluZyhjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgp
LT5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2UpOwogfQpAQCAtMTg0MSw3ICsxODMyLDcgQEAgdm9p
ZCBFZGl0b3I6OmRpZEVuZEVkaXRpbmcoKQogICAgICAgICBjbGllbnQoKS0+ZGlkRW5kRWRpdGlu
ZygpOwogfQogCi12b2lkIEVkaXRvcjo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJh
bmdlKiByYW5nZSkKK3ZvaWQgRWRpdG9yOjp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKICAgICBpZiAoY2xpZW50KCkp
CiAgICAgICAgIGNsaWVudCgpLT53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQocmFuZ2Up
OwpAQCAtMTkyNCwxNCArMTkxNSwxNCBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6YmFzZVdy
aXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAKIHZvaWQgRWRpdG9yOjpz
ZWxlY3RDb21wb3NpdGlvbigpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbXBvc2l0
aW9uUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBUaGUgY29tcG9zaXRpb24g
Y2FuIHN0YXJ0IGluc2lkZSBhIGNvbXBvc2VkIGNoYXJhY3RlciBzZXF1ZW5jZSwgc28gd2UgaGF2
ZSB0byBvdmVycmlkZSBjaGVja3MuCiAgICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTc4MT4KICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbjsK
LSAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRh
dGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5lbmQpKTsKICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7CiB9CiAKQEAgLTI0ODUsOSArMjQ3Niw5
IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25z
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihz
dGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdv
cmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgYXV0byBhZGphY2VudFdvcmRz
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAg
ICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRD
aGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0
ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdv
cmRSYW5nZSkpOworICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
dGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFjZW50V29yZFJhbmdl
LCBhZGphY2VudFdvcmRSYW5nZSk7CiAjZWxzZQogI2lmICFVU0UoQVVUT01BVElDX1RFWFRfUkVQ
TEFDRU1FTlQpCiAgICAgVU5VU0VEX1BBUkFNKGRvUmVwbGFjZW1lbnQpOwpAQCAtMjU3Miw3ICsy
NTYzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgLy8gZnVsbCBzZW50ZW5j
ZSBhcyB3ZSBjYW4sIHJlc3BlY3RpbmcgYm91bmRhcmllcyB3aGVyZSBzcGVsbGNoZWNraW5nIGlz
IGRpc2FibGVkLgogICAgICAgICBmdWxsU2VudGVuY2VSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpHcmFtbWFyKTsKICAgICAgICAgc3BlbGxDaGVja2luZ1JhbmdlLT5zdGFydC5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tp
bmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVS
YW5nZShmdWxsU2VudGVuY2VSYW5nZSkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hlY2tpbmdSYW5n
ZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGZ1bGxTZW50ZW5jZVJhbmdlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjU4MCw3ICsyNTcxLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ2hlY2sgc3BlbGxpbmcgb2Ygb25lIHdvcmQKLSAg
ICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5ncyhWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldv
cmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSwgbWlzc3BlbGxpbmdSYW5nZSk7
CiAKICAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkLgpAQCAtMjU5OSw3ICsy
NTkwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVj
dGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5
cGVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigpLnNob3VsZEluc2VydFRleHQo
YXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9y
KCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNlbGVjdFJl
cGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIApA
QCAtMjYxNiw3ICsyNjA3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICNlbmRpZgogfQog
ICAgIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKK3ZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
T3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBjaGVj
a1NwZWxsaW5nLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
IHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVz
LgpAQCAtMjY0NCw5ICsyNjM1LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JC
YWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBUZXh0Q2hlY2tpbmdIZWxwZXIgY2hlY2tlcigqY2xpZW50KCks
ICpzZWFyY2hSYW5nZSk7Ci0gICAgaWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAgIGNoZWNrZXIu
bWFya0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIGVsc2UgaWYg
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgIGlmIChjaGVja1NwZWxsaW5nKSB7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ0xpdmVSYW5nZTsKKyAgICAgICAg
Y2hlY2tlci5tYXJrQWxsTWlzc3BlbGxpbmdzKGZpcnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2UpOwor
ICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RNaXNzcGVsbGlu
Z0xpdmVSYW5nZSk7CisgICAgfSBlbHNlIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
ICAgICAgICAgY2hlY2tlci5tYXJrQWxsQmFkR3JhbW1hcigpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oc2VsZWN0aW9uKTsKQEAgLTI2NzQsMTggKzI2NjcsMTggQEAgYm9vbCBFZGl0b3I6Omlz
U3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKICAgICByZXR1cm4gaXNT
cGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFy
KHNlbGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KICAgICAKIHZvaWQg
RWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CisgICAgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKICAgICBtYXJrTWlzc3BlbGxp
bmdzT3JCYWRHcmFtbWFyKHNlbGVjdGlvbiwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBSZWZQ
dHI8UmFuZ2U+JiYgc3BlbGxpbmdSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBncmFtbWFyUmFuZ2UpCit2b2lkIEVkaXRvcjo6
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENo
ZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucywgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGF1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZ3JhbW1hclJh
bmdlKQogewogICAgIGlmIChwbGF0Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNzEwLDggKzI3MDMsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlw
ZQogICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcigmZWRpdGFibGVOb2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByYW5nZVRvQ2hlY2sgPSBzaG91bGRNYXJrR3JhbW1h
ciA/IGdyYW1tYXJSYW5nZS5yZWxlYXNlTm9uTnVsbCgpIDogc3BlbGxpbmdSYW5nZS5yZWxlYXNl
Tm9uTnVsbCgpOwotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0NoZWNrKHJh
bmdlVG9DaGVjay5nZXQoKSk7CisgICAgYXV0byYgcmFuZ2VUb0NoZWNrID0gc2hvdWxkTWFya0dy
YW1tYXIgPyAqZ3JhbW1hclJhbmdlIDogKnNwZWxsaW5nUmFuZ2U7CisgICAgVGV4dENoZWNraW5n
UGFyYWdyYXBoIHBhcmFncmFwaFRvQ2hlY2soY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9DaGVjaykp
OwogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0yNzE5LDggKzI3MTIsOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogCiAgICAgLy8g
SW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlvbmFsbHkgY2hlY2sgcGFyYWdyYXBoLXdp
ZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlVGV4
dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0Q2hlY2tpbmdPcHRpb25zKTsKLSAg
ICBhdXRvIHRleHRSZXBsYWNlbWVudFJhbmdlID0gYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA/
IG1ha2VSZWYoKmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UpIDogcmFuZ2VUb0NoZWNrLmNvcHlS
ZWYoKTsKLSAgICBhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29s
dmVkT3B0aW9ucywgVGV4dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFsLCBhc3luY2hyb25vdXMg
PyBtYWtlUmVmKHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSkgOiBXVEZNb3ZlKHJh
bmdlVG9DaGVjayksIFdURk1vdmUodGV4dFJlcGxhY2VtZW50UmFuZ2UpLCBwYXJhZ3JhcGhUb0No
ZWNrLnBhcmFncmFwaFJhbmdlKCkpOworICAgIGF1dG8mIHRleHRSZXBsYWNlbWVudFJhbmdlID0g
YXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA/ICphdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlIDog
cmFuZ2VUb0NoZWNrOworICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVh
dGUocmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGFzeW5j
aHJvbm91cyA/IFJlZjxSYW5nZT4geyBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCkg
fSA6IGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvQ2hlY2spLCBjcmVhdGVMaXZlUmFuZ2UodGV4dFJl
cGxhY2VtZW50UmFuZ2UpLCBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCkpOwogICAg
IGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzUzLDkgKzI3NDYsOSBAQCBz
dGF0aWMgYm9vbCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUoVGV4dENoZWNraW5nVHlw
ZSB0eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlcGxhY2VSYW5n
ZUZvclNwZWxsQ2hlY2tpbmcoUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50KQordm9pZCBFZGl0b3I6OnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
KQogewotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFj
ZSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCByZXBsYWNlbWVudCktPmFw
cGx5KCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1Rl
eHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCwgUmFu
Z2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50LCBDaGFyYWN0ZXJS
YW5nZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKQEAgLTI4OTUsNyArMjg4OCw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hh
bmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgQ3JlYXRlTGlua0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCByZXBs
YWNlbWVudCktPmFwcGx5KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBz
aG91bGRJbnNlcnRUZXh0KHJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZS5wdHIoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpUeXBlZCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgp
ICYmIHNob3VsZEluc2VydFRleHQocmVwbGFjZW1lbnQsIG1ha2VSYW5nZShyYW5nZVRvUmVwbGFj
ZSksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7CiAgICAgICAgICAgICAgICAgY29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKHBhcmFncmFwaCwg
cmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50LCB7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5n
dGggfSk7CiAKICAgICAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7CkBAIC0yOTQ4LDEyICsyOTQxLDEyIEBA
IHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nKQogICAgIGlmIChyZXBsYWNlZFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgp
OwotICAgIGlmICghc2VsZWN0aW9uIHx8ICFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5n
LCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2hv
dWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZTo6UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCAqc2VsZWN0aW9uKTsKLSAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKCpzZWxlY3Rpb24pOworICAgIFRleHRDaGVja2lu
Z1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pKTsKICAgICBy
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50
OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKICAgICBhdXRvIGNo
YW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShDaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGgu
Y2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSkpOwogICAgIGNoYW5nZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hh
bmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKQEAgLTI5
NzksMTEgKzI5NzIsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWMKICAgICAgICAgaWYgKG1h
cmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgdGV4
dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAgICAgICAg
IGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShn
cmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKTsKKyAgICAgICAgbWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVs
bENoZWNraW5nUmFuZ2UsIHNwZWxsQ2hlY2tpbmdSYW5nZSwgZ3JhbW1hclNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxS
YW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVj
dGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBpZiAobWFya0dyYW1tYXIpCiAgICAg
ICAgIG1hcmtCYWRHcmFtbWFyKGdyYW1tYXJTZWxlY3Rpb24pOwpAQCAtMzA4NiwyMyArMzA3OSwx
OCBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihwb3NpdGlvbiwgb3JpZ2luYWxT
dHJpbmcpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgd2luZG93UG9pbnQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5n
ZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAgICBhdXRvIGRvY3Vt
ZW50ID0gbV9kb2N1bWVudC5mcmFtZSgpLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwog
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1dG8gZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byBmcmFtZVBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50
KTsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkgfTsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpKSB9
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25B
ZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIFJl
dmVhbEV4dGVudE9wdGlvbiByZXZlYWxFeHRlbnRPcHRpb24pCkBAIC0zMTI5LDE3ICszMTE3LDE2
IEBAIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGJvb2wgaWdub3JlLCBS
ZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsCiAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVy
RWRpdGluZ09wZXJhdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFJl
dmVhbEV4dGVudCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb21wb3NpdGlvblJhbmdl
KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2Uo
KSBjb25zdAogewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG1fY29tcG9zaXRpb25Ob2RlLT5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBzdGFydCA9IHN0
ZDo6bWluKG1fY29tcG9zaXRpb25TdGFydCwgbGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBlbmQgPSBz
dGQ6Om1pbihzdGQ6Om1heChzdGFydCwgbV9jb21wb3NpdGlvbkVuZCksIGxlbmd0aCk7Ci0gICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGVhcmx5IHJldHVybiBuZWVlZD8KKyAgICB1bnNpZ25lZCBl
bmQgPSBzdGQ6OmNsYW1wKG1fY29tcG9zaXRpb25FbmQsIHN0YXJ0LCBsZW5ndGgpOwogICAgIGlm
IChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBSYW5n
ZTo6Y3JlYXRlKG1fY29tcG9zaXRpb25Ob2RlLT5kb2N1bWVudCgpLCBtX2NvbXBvc2l0aW9uTm9k
ZS5nZXQoKSwgc3RhcnQsIG1fY29tcG9zaXRpb25Ob2RlLmdldCgpLCBlbmQpOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgeyAqbV9jb21wb3NpdGlvbk5vZGUs
IHN0YXJ0IH0sIHsgKm1fY29tcG9zaXRpb25Ob2RlLCBlbmQgfSB9IH07CiB9CiAKIGJvb2wgRWRp
dG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVu
c2lnbmVkJiBzZWxlY3Rpb25FbmQpIGNvbnN0CkBAIC0zMjAxLDcgKzMxODgsNyBAQCB2b2lkIEVk
aXRvcjo6dHJhbnNwb3NlKCkKICAgICB9CiAKICAgICAvLyBJbnNlcnQgdGhlIHRyYW5zcG9zZWQg
Y2hhcmFjdGVycy4KLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQodHJhbnNwb3NlZCwgcmFuZ2Uu
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dCh0cmFuc3Bvc2VkLCBuZXdTZWxlY3Rpb24uZmlyc3RSYW5nZSgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dCh0cmFuc3Bvc2VkLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8s
IEVkaXRBY3Rpb246Okluc2VydCk7CiB9CkBAIC0zMzU3LDEzICszMzQ0LDEzIEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lkdGgoSW50UmVjdCYgcmVjdCkKICAgICAgICAgcmVj
dC5zZXRIZWlnaHQoMCk7CiB9CiAKLUludFJlY3QgRWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShS
YW5nZSogcmFuZ2UpIGNvbnN0CitJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIHJhbmdlLT5vd25lckRvY3VtZW50
KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS51cGRhdGVMYXlv
dXQoKTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihyYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRW
aXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSwg
RE9XTlNUUkVBTSk7CiAKLSAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZCgpKSB7CisgICAgaWYgKHJh
bmdlLmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBHZXR0aW5nIGNhcmV0IHJlY3Qg
YW5kIHJlbW92aW5nIGNhcmV0IHdpZHRoIGlzIGEgdmVyeSByb3VuZGFib3V0IHdheSB0byBnZXQg
Y29sbGFwc2VkIHJhbmdlIGxvY2F0aW9uLgogICAgICAgICAvLyBJbiBwYXJ0aWN1bGFyLCB3aWR0
aCBhZGp1c3RtZW50IGRvZXNuJ3Qgd29yayBmb3Igcm90YXRlZCB0ZXh0LgogICAgICAgICBJbnRS
ZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVyZWRQb3NpdGlvbihzdGFydFZpc2libGVQb3NpdGlv
bikuYWJzb2x1dGVSZWN0KCk7CkBAIC0zMzcxLDEwICszMzU4LDEwIEBAIEludFJlY3QgRWRpdG9y
OjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAgICAgICAgIHJldHVybiBz
dGFydENhcmV0UmVjdDsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBv
c2l0aW9uKHJhbmdlLT5lbmRQb3NpdGlvbigpLCBVUFNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uu
ZW5kKSwgVVBTVFJFQU0pOwogCiAgICAgaWYgKGluU2FtZUxpbmUoc3RhcnRWaXNpYmxlUG9zaXRp
b24sIGVuZFZpc2libGVQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFu
Z2UpKSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94
ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsKIAogICAgIExheW91
dFVuaXQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lOwogICAgIEludFJlY3Qgc3RhcnRDYXJldFJlY3Qg
PSBSZW5kZXJlZFBvc2l0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uKS5hYnNvbHV0ZVJlY3QoJmV4
dHJhV2lkdGhUb0VuZE9mTGluZSk7CkBAIC0zNDAwLDcgKzMzODcsNyBAQCBib29sIEVkaXRvcjo6
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
biwgY29uc3QgVgogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5mcmFt
ZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3U2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOworICAgIHJldHVybiBj
bGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCks
IGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5k
U2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQpAQCAtMzQ4Nyw3ICszNDc0LDcgQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKLSAg
ICBhdXRvIHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQoKSwgb3B0aW9ucyk7CisgICAgYXV0byByZXN1
bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLCBv
cHRpb25zKTsKICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTM0OTksMTA2ICszNDg2LDEwMiBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBT
dHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVmZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gU3RhcnQgZnJv
bSBhbiBlZGdlIG9mIHRoZSByZWZlcmVuY2UgcmFuZ2UsIGlmIHRoZXJlJ3MgYSByZWZlcmVuY2Ug
cmFuZ2UgdGhhdCdzIG5vdCBpbiBzaGFkb3cgY29udGVudC4gV2hpY2ggZWRnZQogICAgIC8vIGlz
IHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIHNlYXJjaGluZyBmb3J3YXJkIG9yIGJhY2t3
YXJkLCBhbmQgd2hldGhlciBzdGFydEluU2VsZWN0aW9uIGlzIHNldC4KLSAgICBSZWZQdHI8UmFu
Z2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKSk7CiAKICAgICBib29s
IGZvcndhcmQgPSAhb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpOwogICAgIGJvb2wgc3RhcnRJ
blJlZmVyZW5jZVJhbmdlID0gcmVmZXJlbmNlUmFuZ2UgJiYgb3B0aW9ucy5jb250YWlucyhTdGFy
dEluU2VsZWN0aW9uKTsKKyAgICBhdXRvIHNoYWRvd1RyZWVSb290ID0gcmVmZXJlbmNlUmFuZ2Ug
PyByZWZlcmVuY2VSYW5nZS0+c3RhcnRDb250YWluZXIoKS5jb250YWluaW5nU2hhZG93Um9vdCgp
IDogbnVsbHB0cjsKKworICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAgaWYgKHJlZmVyZW5jZVJhbmdlKSB7CiAgICAg
ICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0
SW5SZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkgOiByZWZl
cmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS5zdGFy
dCA9IHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydCA6IHJlZmVy
ZW5jZVJhbmdlLT5lbmQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRFbmQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9u
KCkgOiByZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHNlYXJj
aFJhbmdlLmVuZCA9IHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5lbmQg
OiByZWZlcmVuY2VSYW5nZS0+c3RhcnQ7CiAgICAgfQotCi0gICAgUmVmUHRyPFNoYWRvd1Jvb3Q+
IHNoYWRvd1RyZWVSb290ID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5jb250YWluaW5nU2hhZG93Um9vdCgpIDogbnVsbHB0cjsKICAgICBpZiAoc2hh
ZG93VHJlZVJvb3QpIHsKICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGRO
b2RlcygpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLmVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CisgICAgICAg
ICAgICBzZWFyY2hSYW5nZS5zdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRl
bnRzKCpzaGFkb3dUcmVlUm9vdCk7CiAgICAgfQorICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSBmaW5k
UGxhaW5UZXh0KHNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpOwogCi0gICAgUmVmUHRyPFJh
bmdlPiByZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hS
YW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAgICAgLy8gSWYgd2Ugc3RhcnRlZCBpbiB0aGUgcmVm
ZXJlbmNlIHJhbmdlIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBtYXRjaGVzIHRoZSByZWZl
cmVuY2UgcmFuZ2UsIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVpbGQgYSBzZWxlY3Rpb24gd2l0aCB0
aGUgZm91bmQgcmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLgogICAgIC8vIENv
bXBhcmUgcmFuZ2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVjdHMgdG8gaWdub3JlIHRoZSB3
YXkgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1hZGUuCi0gICAgaWYgKHN0YXJ0SW5S
ZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChjcmVhdGVMaXZlUmFuZ2UoVmlzaWJsZVNl
bGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCByZWZlcmVu
Y2VSYW5nZSkpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1l
bnQoKSk7CisgICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBWaXNpYmxlU2VsZWN0aW9u
KHJlc3VsdFJhbmdlKS50b05vcm1hbGl6ZWRSYW5nZSgpID09IHJlZmVyZW5jZVJhbmdlKSB7Cisg
ICAgICAgIHNlYXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KCkpOwogICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRTdGFydChyZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBzZWFy
Y2hSYW5nZS5zdGFydCA9IHJlZmVyZW5jZVJhbmdlLT5lbmQ7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQocmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSk7Ci0KKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLmVuZCA9IHJlZmVyZW5jZVJhbmdlLT5zdGFy
dDsKICAgICAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7CiAgICAgICAgICAgICBpZiAoZm9yd2Fy
ZCkKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwg
c2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAgICAgICBzZWFy
Y2hSYW5nZS5lbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpzaGFkb3dU
cmVlUm9vdCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmFu
Z2Uuc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqc2hhZG93VHJl
ZVJvb3QpOwogICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFu
Z2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykpOworICAgICAg
ICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9u
cyk7CiAgICAgfQogCiAgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW4gdGhlIHNoYWRvdyB0
cmVlLCBzZWFyY2ggaW4gbWFpbiBjb250ZW50IGZvbGxvd2luZyB0aGUgc2hhZG93IHRyZWUuCi0g
ICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkgewotICAg
ICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKLSAgICAgICAg
aWYgKHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpIHsKKyAgICBpZiAocmVzdWx0UmFuZ2Uu
Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChh
dXRvIGhvc3QgPSBzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKSB7CiAgICAgICAgICAgICBp
ZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcigq
c2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmFu
Z2UuZW5kID0gKm1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKCpob3N0KTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3JlKCpzaGFkb3dU
cmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5zdGFy
dCA9ICptYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGUoKmhvc3QpOwogICAgICAgICB9Ci0KLSAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNo
UmFuZ2UsIHRhcmdldCwgb3B0aW9ucykpOworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFp
blRleHQoc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgfQogCiAgICAgLy8gSWYg
d2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdyYXBwaW5nLCBzZWFyY2ggYWdhaW4g
aW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxsCiAgICAgLy8gcmVkdW5kYW50bHkgcmUt
c2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQgaW4gc29tZSBjYXNlcykuCi0gICAgaWYg
KHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQp
KSB7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQo
cmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICBpZiAo
cmVzdWx0UmFuZ2UuY29sbGFwc2VkKCkgJiYgb3B0aW9ucy5jb250YWlucyhXcmFwQXJvdW5kKSkg
eworICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGRv
Y3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpOwogICAgICAgICAvLyBXZSB1c2VkIHRvIHJldHVy
biBmYWxzZSBoZXJlIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHNhbWUgcmFuZ2UgdGhhdCB3ZSBz
dGFydGVkIHdpdGgKICAgICAgICAgLy8gKGUuZy4sIHRoZSByZWZlcmVuY2UgcmFuZ2Ugd2FzIGFs
cmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyB0ZXh0KS4gQnV0IHdlIGRlY2lkZWQgdGhh
dAogICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBhIHN1Y2Nlc3MgY2FzZSBpbnN0ZWFkLCBzbyB3
ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCBpbiB0aGF0IGNhc2UuCiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSA/IG51bGxwdHIgOiByZXN1bHRSYW5nZTsKKyAgICBy
ZXR1cm4gcmVzdWx0UmFuZ2UuY29sbGFwc2VkKCkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9u
YWwocmVzdWx0UmFuZ2UpOwogfQogCi1zdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSYg
ZnJhbWUsIFJhbmdlJiByYW5nZSkKK3N0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBm
cmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIGZvciAoYXV0byogb3duZXJF
bGVtZW50ID0gZnJhbWUub3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50
ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGlm
ICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5vd25lckRvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UuaW50ZXJzZWN0c05vZGUoKm93bmVyRWxl
bWVudCk7CisgICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5z
dGFydC5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSktPmludGVyc2VjdHNOb2RlKCpvd25lckVsZW1lbnQpOwogICAgICAgICAgICAg
cmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdW5zaWduZWQg
RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSog
cmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRj
aGVzLCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4qIG1hdGNoZXMpCit1bnNpZ25lZCBFZGl0b3I6OmNv
dW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgcmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBi
b29sIG1hcmtNYXRjaGVzLCBWZWN0b3I8U2ltcGxlUmFuZ2U+KiBtYXRjaGVzKQogewogICAgIGlm
ICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlYXJjaFJhbmdlOwog
ICAgIGlmIChyYW5nZSkgewotICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0g
JmRvY3VtZW50KCkpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOworICAgICAgICBp
ZiAoJnJhbmdlLT5zdGFydC5kb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQorICAgICAgICAgICAg
c2VhcmNoUmFuZ2UgPSAqcmFuZ2U7CiAgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZSgq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGlmICghc2VhcmNoUmFuZ2UpCi0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNv
bnRlbnRzKGRvY3VtZW50KCkpOworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKIAotICAgIE5vZGUmIG9yaWdpbmFsRW5kQ29u
dGFpbmVyID0gc2VhcmNoUmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIGludCBvcmlnaW5hbEVu
ZE9mZnNldCA9IHNlYXJjaFJhbmdlLT5lbmRPZmZzZXQoKTsKKyAgICBhdXRvIG9yaWdpbmFsRW5k
ID0gc2VhcmNoUmFuZ2UtPmVuZDsKIAogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAg
IGRvIHsKQEAgLTM2MDcsOCArMzU5MCw4IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVz
Rm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAg
ICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNJblNoYWRvd1RyZWUo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dFN0YXJ0QWZ0ZXIoKnJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+c2hhZG93SG9zdCgpKTsK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQob3JpZ2luYWxFbmRDb250YWluZXIsIG9y
aWdpbmFsRW5kT2Zmc2V0KTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5lbmQgPSBvcmlnaW5h
bEVuZDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM2MjMsMTUgKzM2
MDYsMTQgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgaWYgKGxpbWl0ID4gMCAm
JiBtYXRjaENvdW50ID49IGxpbWl0KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8g
U2V0IHRoZSBuZXcgc3RhcnQgZm9yIHRoZSBzZWFyY2ggcmFuZ2UgdG8gYmUgdGhlIGVuZCBvZiB0
aGUgcHJldmlvdXMKLSAgICAgICAgLy8gcmVzdWx0IHJhbmdlLiBUaGVyZSBpcyBubyBuZWVkIHRv
IHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAotICAgICAgICAvLyBzaW5jZSBmaW5kUGxhaW5U
ZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdGhlIHZpc2libGUKLSAgICAg
ICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChXVEZNb3Zl
KHJlc3VsdFJhbmdlLmVuZC5jb250YWluZXIpLCByZXN1bHRSYW5nZS5lbmQub2Zmc2V0KTsKKyAg
ICAgICAgLy8gU2V0IHRoZSBuZXcgc3RhcnQgZm9yIHRoZSBzZWFyY2ggcmFuZ2UgdG8gYmUgdGhl
IGVuZCBvZiB0aGUgcHJldmlvdXMgcmVzdWx0IHJhbmdlLgorICAgICAgICAvLyBUaGVyZSBpcyBu
byBuZWVkIHRvIHVzZSBWaXNpYmxlUG9zaXRpb24gaGVyZTogZmluZFBsYWluVGV4dCB3aWxsIHVz
ZSBUZXh0SXRlcmF0b3IgdG8gZ28gb3ZlciB2aXNpYmxlIHRleHQgbm9kZXMuCisgICAgICAgIHNl
YXJjaFJhbmdlLT5zdGFydCA9IFdURk1vdmUocmVzdWx0UmFuZ2UuZW5kKTsKIAotICAgICAgICBO
b2RlKiBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zaGFkb3dSb290KCk7Ci0gICAgICAg
IGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3Qt
PmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQo
KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+
c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5lbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpz
aGFkb3dUcmVlUm9vdCk7CisgICAgICAgIH0KICAgICB9IHdoaWxlICh0cnVlKTsKIAogICAgIHJl
dHVybiBtYXRjaENvdW50OwpAQCAtMzk0MCwyMiArMzkyMiwyNCBAQCBTdHJpbmcgRWRpdG9yOjpz
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKICAgICByZXR1cm4gcGxhaW5UZXh0KCpy
YW5nZSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRh
dGVSZXF1ZXN0KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmNvbnRleHRS
YW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKKyAgICBhdXRv
JiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1
dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKSkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQ
YXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOworICAgIGlmICghc3RhcnQgfHwgIWVu
ZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpzdGFydCwg
KmVuZCB9IH07CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2lu
Z1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29uc3QKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRl
eHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdAogewogICAgIGlmICghcmVzdWx0LnJhbmdl
Lmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IGNv
bnRleHRSYW5nZSA9IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGNvbnRleHRSYW5nZSA9IGNvbnRleHRSYW5n
ZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKICAgICBpZiAoIWNvbnRleHRSYW5nZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFy
YWN0ZXJSYW5nZSgqY29udGV4dFJhbmdlLCByZXN1bHQucmFuZ2UpKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjb250ZXh0
UmFuZ2UsIHJlc3VsdC5yYW5nZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpzY2hlZHVsZUVkaXRvclVJ
VXBkYXRlKCkKQEAgLTQyMjUsOCArNDIwOSw4IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAgICAgbV9p
c0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0cnVlOwogCiAgICAgaWYgKGF1dG8gcmFuZ2Ug
PSByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChhY2NlcHRlZENhbmRpZGF0ZSkpIHsKLSAgICAg
ICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIHJh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKLSAgICAgICAgICAgIFJlcGxh
Y2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6Y3JlYXRlKHJhbmdlLmdldCgpLCBhY2NlcHRlZENhbmRp
ZGF0ZS5yZXBsYWNlbWVudCktPmFwcGx5KCk7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0
KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCisgICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCkt
PmFwcGx5KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQsIG51bGxwdHIpOwogCkBAIC00MjU4LDE2ICs0MjQyLDE2IEBAIHZvaWQg
RWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpCiAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7
CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQogewot
ICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNlbGVjdGlvbiB0byBp
bmNsdWRlIHRoZSBhbmNob3IgdGFnIGl0J3MgaW4/Ci0gICAgLy8gV2hvZXZlciB3cm90ZSB0aGlz
IGNvZGUgb3JpZ2luYWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4cGxhaW5pbmcg
dGhlIHJhdGlvbmFsZS4KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwotICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKCk7Ci0gICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKLSAgICBhdXRvKiBlbmNsb3NpbmdB
bmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1v
bkFuY2VzdG9yKSwgSFRNTE5hbWVzOjphVGFnKTsKLSAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYm
IGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpKSwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgPj0gMCkK
LSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDApOworICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNlbGVjdGlvbiB0byBpbmNsdWRlIHRo
ZSBhbmNob3IgdGFnIGl0J3MgaW4/IFdob2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkg
Zm9yZ290IHRvIGxlYXZlIHVzIGEgY29tbWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCisg
ICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmly
c3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS0+c3RhcnQuY29u
dGFpbmVyLCByYW5nZS0+ZW5kLmNvbnRhaW5lcikuZ2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7
CisgICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS0+c3RhcnQpKSA+PSAwKQorICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbmNsb3NpbmdBbmNob3Ip
OworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiByYW5nZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgKaW5kZXggNjlkNjA1OTMwMjY1MmY2NzJmZDI1OTE1MmQzZGNmYjQ1ZmYwOTI2Zi4u
OWRlZGRjYTM4MzZmMTUzMDM2Y2ZhZjljODBkYWQzOTk0NGY0NDlmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxMywxMCArMjEzLDEwIEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG91dGRlbnQoKTsKICAgICB2b2lkIHRyYW5zcG9z
ZSgpOwogCi0gICAgYm9vbCBzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50Jiwg
UmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwotICAgIGJv
b2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopOworICAgIGJvb2wg
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlvbik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRU
ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvcklu
c2VydEFjdGlvbikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGREZWxldGVS
YW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSBjb25zdDsKKyAgICBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsK
IAogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbik7CiAKQEAgLTMyMiwxNiArMzIyLDE2IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3Q7CiAgICAg
Ym9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCk7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAg
IHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQg
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGdyYW1tYXJTZWxlY3Rpb24pOwogICAgIHZvaWQgbWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhSYW5nZSYs
IGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVJhbmdlRm9y
U3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAg
Ym9vbCBpc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9vdmVyd3JpdGVN
b2RlRW5hYmxlZDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlT3ZlcndyaXRlTW9k
ZUVuYWJsZWQoKTsKIAotICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFJlZlB0cjxSYW5nZT4mJiBzcGVs
bGluZ1JhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgUmVm
UHRyPFJhbmdlPiYmIGdyYW1tYXJSYW5nZSk7CisgICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZ3JhbW1hclJhbmdlKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIE5P
X1JFVFVSTl9EVUVfVE9fQVNTRVJUCiAjZW5kaWYKQEAgLTM0Myw4ICszNDMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzaG93U3BlbGxpbmdHdWVzc1BhbmVsKCk7CiAgICAgYm9vbCBzcGVsbGluZ1Bh
bmVsSXNTaG93aW5nKCk7CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopOwot
ICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopOworICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJik7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKICAgICB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7
CiAgICAgYm9vbCBjYW5VbmRvKCkgY29uc3Q7CkBAIC0zNTYsNyArMzU2LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKTsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKTsK
LSAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopOworICAgIHZv
aWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYpOwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKIAogICAg
IHZvaWQgc2hvd0ZvbnRQYW5lbCgpOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmKTsgLy8g
aWYgbm8gZXhpc3RpbmcgY29tcG9zaXRpb24sIHJlcGxhY2VzIHNlbGVjdGlvbgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKICAgICBib29sIGNhbmNlbENvbXBv
c2l0aW9uSWZTZWxlY3Rpb25Jc0ludmFsaWQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gY29tcG9zaXRpb25SYW5nZSgpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZ2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0
YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9uRW5kKSBjb25zdDsKIAogICAgIC8vIGdldHRpbmcgaW50
ZXJuYXRpb25hbCB0ZXh0IGlucHV0IGNvbXBvc2l0aW9uIHN0YXRlIChmb3IgdXNlIGJ5IElubGlu
ZVRleHRCb3gpCkBAIC00MDAsNyArNDAwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sLCBSZXZlYWxTZWxlY3Rpb24gc2hv
dWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24gPSBSZXZlYWxTZWxlY3Rpb246Olllcyk7CiAgICAg
Ym9vbCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdl
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC00MTEsNyArNDExLDcgQEAgcHVi
bGljOgogCiAgICAgRWRpdGluZ0JlaGF2aW9yIGJlaGF2aW9yKCkgY29uc3Q7CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNvbmZpcm1NYXJrZWRUZXh0KCk7CkBAIC00NDYsNyArNDQ2LDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0
IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYsIEZpbmRPcHRpb25zKTsKIAogICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0
LgogICAgIHZvaWQgc2V0TWFyayhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CkBAIC00NTUsMTMg
KzQ1NSwxMyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uOjpV
bnNwZWNpZmllZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZmlyc3RS
ZWN0Rm9yUmFuZ2UoUmFuZ2UqKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGZp
cnN0UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAKICAgICB2b2lkIHNl
bGVjdGlvbldpbGxDaGFuZ2UoKTsKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBPcHRpb25TZXQ8RnJhbWVTZWxl
Y3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbj4pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBk
YXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29u
c3QgU3RyaW5nJiwgUmFuZ2UqLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFy
a01hdGNoZXMsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiopOworICAgIFdFQkNPUkVfRVhQT1JUIHVu
c2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRj
aGVzLCBWZWN0b3I8U2ltcGxlUmFuZ2U+Kik7CiAgICAgYm9vbCBtYXJrZWRUZXh0TWF0Y2hlc0Fy
ZUhpZ2hsaWdodGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wpOwogCkBAIC01NDUsOCArNTQ1LDggQEAgcHVi
bGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlKFRleHRDaGVja2luZ1Jlc3VsdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdl
PiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQm
KSBjb25zdDsKICAgICBib29sIGlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlOyB9CiAKICAgICB2b2lkIHNldElz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oYm9vbCBiKSB7IG1faXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyA9IGI7IH0KQEAgLTU3OSw3ICs1NzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAot
ICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKKyAgICBib29sIGNhbkRlbGV0
ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0
V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYpOwogICAgIHZvaWQgcGFzdGVXaXRoUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkKiwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPik7CkBAIC01ODgsNyArNTg4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKERvY3VtZW50RnJh
Z21lbnQmKTsKIAogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9u
KGNvbnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZO
ZWVkZWQsIFJldmVhbEV4dGVudE9wdGlvbiA9IERvTm90UmV2ZWFsRXh0ZW50KTsKLSAgICB2b2lk
IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJv
b2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
KyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOwogICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiByZXNvbHZl
VGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdEVkaXRhYmxlRWxlbWVudCwgT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IpIGNvbnN0OwpAQCAtNjA4LDcgKzYwOCw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25z
dDsKIAotICAgIFJlZlB0cjxSYW5nZT4gYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpOworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZWxlY3Rpb25JbldlYkFyY2hp
dmVGb3JtYXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4
IGQ2ZWE0MjZkN2Y3ZmU3NjVmYjAwOTdlM2Q5NWFlYzc1OWRhNDI3ZWYuLjQ0MGZjZjZmYTVmZmYx
ZmRiODJlNmQ1NDUyMjkxMGU2NWM2YTkxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcApAQCAtMTc2LDE1ICsxNzYsMTUgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUlu
c2VydE5vZGUoRnJhbWUmIGZyYW1lLCBSZWY8Tm9kZT4mJiBjb250ZW50KQogc3RhdGljIGJvb2wg
ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eShGcmFtZSYgZnJhbWUsIFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gb2xkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0
eShncmFudWxhcml0eSk7CiAgICAgYXV0byBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHko
KTsKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRSYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShu
ZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCisgICAgaWYgKCFmcmFtZS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdSYW5n
ZSwgYWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQo
KSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqbmV3
UmFuZ2UpLnB0cigpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjYsMTEgKzIyNiwxMSBAQCBzdGF0
aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxiYXI6OnBhZ2VTdGVwKGhlaWdodCkpOwog
fQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJhbmdlcyhSYW5nZSYgYSwgUmFuZ2Um
IGIpCitzdGF0aWMgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEs
IGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogewotICAgIFJhbmdlJiBzdGFydCA9IGEuY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYikucmVsZWFzZVJldHVyblZhbHVl
KCkgPD0gMCA/IGEgOiBiOwotICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6RU5EX1RPX0VORCwgYikucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIgOiBh
OwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3RhcnQuc3Rh
cnRDb250YWluZXIoKSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWluZXIoKSwg
ZW5kLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvJiBzdGFydCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJh
bmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7CisgICAgYXV0byYgZW5k
ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIg
OiBhOworICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0LCBlbmQuZW5kIH07CiB9CiAKIC8vIEV4ZWN1
dGUgY29tbWFuZCBmdW5jdGlvbnMKQEAgLTM1NCw3ICszNTQsNyBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdAogICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAg
IGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
Y3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSku
Z2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKGNy
ZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVk
UmFuZ2UoKSkpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2Vs
ZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpzZWxlY3Rpb24p
LmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFu
Z2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDMzYTky
N2Q1NDhmZmRiNmY5Y2IxZDU2Zjg0ZTBkZmNkMDFhNzc3YjAuLmIwYzY5M2U0YjY4MmE0MWYxYzgz
MzZlMDkyMDQ2OTBkYmY3OTZjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCkBAIC0yMzEwLDcgKzIzMTAsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91
bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwog
ICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVj
dGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCi0gICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxl
dGVSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERl
bGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogRmxvYXRSZWN0
IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQppbmRleCBjNWNiYzNmOTdjZDhhOTkyYzBhZWU3YTMxYTg5ZWZkODdjZmEz
ZDc4Li5lZWZlOGZkOTUxY2NmYTRlYjY2MTgyN2Q1OGU2OWVhNTliNTg2YjdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTg4LDE0ICs4OCwxMyBA
QCBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKQogCiB2b2lkIEVkaXRvcjo6
Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwg
VmVjdG9yPFN0cmluZz4mIG91dFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBv
dXREYXRhKQogewotICAgIGF1dG8mIGRvY3VtZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOwotICAg
IGF1dG8gZWxlbWVudFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgeyAmZWxlbWVudCwg
UG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IgfSwgeyAmZWxlbWVudCwgUG9zaXRpb246
OlBvc2l0aW9uSXNBZnRlckFuY2hvciB9KTsKLSAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShlbGVtZW50UmFuZ2UucHRyKCksIG91dFR5cGVzLCBvdXREYXRhKTsK
KyAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoZWxlbWVudCk7
CisgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKGVsZW1lbnRSYW5nZSwgb3V0
VHlwZXMsIG91dERhdGEpOwogCiAgICAgb3V0VHlwZXMuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpjb2NvYVR5cGUoKSk7Ci0gICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURh
dGEgeyBkb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVh
dGVTaGFyZWRCdWZmZXIoKSk7CisgICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURh
dGEgeyBlbGVtZW50LmRvY3VtZW50KCkub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKSwg
eyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOwogCi0gICAgaWYgKGF1dG8gYXJjaGl2ZSA9IExl
Z2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShlbGVtZW50UmFuZ2UucHRyKCkpKSB7CisgICAgaWYgKGF1
dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UoZWxl
bWVudFJhbmdlKS5nZXQoKSkpIHsKICAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBh
cmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSkgewogICAgICAgICAgICAgb3V0VHlwZXMu
YXBwZW5kKFdlYkFyY2hpdmVQYm9hcmRUeXBlKTsKICAgICAgICAgICAgIG91dERhdGEuYXBwZW5k
KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdlYkFyY2hpdmVEYXRhLmdldCgpKSk7CkBAIC0xMjMsNyAr
MTIyLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9h
cmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJp
bmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkg
OiBudWxscHRyOwogICAgICAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZv
cm1hdChzdHJpbmcuZ2V0KCkpOwogICAgICAgICBjb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJp
bmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSk7
Ci0gICAgICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVj
dGVkUmFuZ2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRh
KTsKKyAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKHNlbGVjdGVkUmFu
Z2UoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKICAgICB9CiAg
ICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0KCk7CiAg
ICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJv
YXJkV2l0aEltYWdlQWx0VGV4dCgpOwpAQCAtMTQ0LDcgKzE0Myw3IEBAIHZvaWQgRWRpdG9yOjp3
cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEp
CiAgICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWRE
YXRhRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAgIHdlYkNvbnRlbnQuZGF0
YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQu
ZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFn
ZUFsdFRleHQoKTsKLSAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5n
ZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHdlYkNvbnRlbnQuY2xpZW50VHlwZXMsIHdlYkNvbnRl
bnQuY2xpZW50RGF0YSk7CisgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKHNl
bGVjdGVkUmFuZ2UoKSwgd2ViQ29udGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnRE
YXRhKTsKIAogICAgIHBhc3RlYm9hcmRXcml0ZXJEYXRhLnNldFdlYkNvbnRlbnQoV1RGTW92ZSh3
ZWJDb250ZW50KSk7CiB9CkBAIC0xODQsMTIgKzE4MywxMiBAQCB2b2lkIEVkaXRvcjo6cmVwbGFj
ZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZAogCiAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50LmZyYW1lKCksIGF0dHJpYnV0ZWRT
dHJpbmcpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAg
ICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFu
Z2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgICAgIHBhc3Rl
QXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxC
bG9ja3F1b3RlSGFuZGxpbmcpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3Ry
aW5nIHRleHQgPSBhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZzsKLSAgICAgICAgaWYgKHNob3VsZElu
c2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlBhc3RlZCkpCisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFu
Z2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVBc1Bs
YWluVGV4dCh0ZXh0LCBmYWxzZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3Rr
L0VkaXRvckd0ay5jcHAKaW5kZXggOTlhYTExOTIyYzMyODE0YmMwYTZmNWUwY2FiZDlmNjNiMzhl
ODcxYy4uZGE3ZTk0MWNiOGYxZmJlMjNiMDAyZTI1ZGUwMGQ5Njg1OWFmY2U5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC01MCwxNyArNTAsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0
ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIG9w
dGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRl
eHQpOworICAgIGF1dG8gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoKnBhc3Rl
Ym9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRl
eHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9y
UGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCAq
cmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdt
ZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Okln
bm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAzMTIz
MjVmMjc2MjFjYmI4ODQ5MmEwNDI2ZWU1OTE2NTY3ZTRhMTYwLi42YzI1NDc5NjU1MzYwODRiMTYz
ODgwNDlkNDVhNTk5Y2Y5NjA2NzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCkBAIC0yMDYsMzAgKzIwNiwyNiBAQCB2b2lkIEVkaXRvcjo6d3JpdGVJbWFnZVRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBFbGVtZW50JiBpbWFnZUVsZW1lbgogICAg
IHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlID0gcGFzdGVib2FyZC5yZXNvdXJjZU1J
TUVUeXBlKGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgIHBhc3RlYm9h
cmRJbWFnZS5yZXNvdXJjZURhdGEgPSBjYWNoZWRJbWFnZS0+cmVzb3VyY2VCdWZmZXIoKTsKIAot
ICAgIGlmICghcGFzdGVib2FyZC5pc1N0YXRpYygpKSB7Ci0gICAgICAgIFBvc2l0aW9uIGJlZm9y
ZUltYWdlUG9zaXRpb24oJmltYWdlRWxlbWVudCwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVB
bmNob3IpOwotICAgICAgICBQb3NpdGlvbiBhZnRlckltYWdlUG9zaXRpb24oJmltYWdlRWxlbWVu
dCwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7Ci0gICAgICAgIGF1dG8gaW1hZ2VS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoaW1hZ2VFbGVtZW50LmRvY3VtZW50KCksIGJlZm9yZUltYWdl
UG9zaXRpb24sIGFmdGVySW1hZ2VQb3NpdGlvbik7Ci0gICAgICAgIGNsaWVudCgpLT5nZXRDbGll
bnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKGltYWdlUmFuZ2UucHRyKCksIHBhc3RlYm9hcmRJbWFn
ZS5jbGllbnRUeXBlcywgcGFzdGVib2FyZEltYWdlLmNsaWVudERhdGEpOwotICAgIH0KKyAgICBp
ZiAoIXBhc3RlYm9hcmQuaXNTdGF0aWMoKSkKKyAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBh
c3RlYm9hcmREYXRhKG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoaW1hZ2VFbGVtZW50KSwgcGFzdGVi
b2FyZEltYWdlLmNsaWVudFR5cGVzLCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50RGF0YSk7CiAKICAg
ICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpw
YXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0
ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRS
YW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgYm9vbCBhbGxv
d1BsYWluVGV4dCA9IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
KTsKICAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFu
Z2UsIGFsbG93UGxhaW5UZXh0KTsKICAgICBpbnQgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXMgPSBj
bGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVs
ZWdhdGUoaSk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFn
bWVudEZyb21EZWxlZ2F0ZShpKTsKICAgICAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICByZWFkZXIuYWRkRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gcmVhZGVyLmZyYWdtZW50OworICAgIGF1dG8gZnJhZ21lbnQgPSBXVEZNb3ZlKHJlYWRlci5m
cmFnbWVudCk7CiAgICAgaWYgKCFmcmFnbWVudCkgewogICAgICAgICBib29sIGNob3NlUGxhaW5U
ZXh0SWdub3JlZDsKICAgICAgICAgZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQo
KnBhc3RlYm9hcmQsICpyYW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0SWdub3Jl
ZCk7CkBAIC0yMzgsNyArMjM0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgIGlmIChm
cmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAg
ICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJh
Z21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGZhbHNlLCBvcHRpb25zLmNv
bnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6UmVz
cGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUv
RWRpdG9yTGliV1BFLmNwcAppbmRleCAxMmZkNmE0M2VhMDVhMmEwZTcyYjc0YmE3MmQ5NjI4NjQ3
MDViYWUzLi41NmE2MWI5NjY4ZjJlODM0NzhiYTMzMjlmM2E1ZTJhM2Y1MjU1OGFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAgLTM3LDcg
KzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9hcmQmIHBh
c3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGFsbG93UGxhaW5UZXh0
LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3N0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwg
RnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRl
eHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVh
dGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0
eXBlcy5jb250YWlucygidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiKSAmJiBmcmFtZS5kb2N1bWVu
dCgpKSB7CiAgICAgICAgIFN0cmluZyBtYXJrdXAgPSBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRl
eHQvaHRtbDtjaGFyc2V0PXV0Zi04Iik7Ci0gICAgICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50
KCksIG1hcmt1cCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250
ZW50KSkKKyAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoKmZyYW1lLmRvY3VtZW50KCksIG1hcmt1cCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3Jp
cHRpbmdBbmRQbHVnaW5Db250ZW50KSkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAg
ICB9CiAKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlm
ICh0eXBlcy5jb250YWlucygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpIHsKICAgICAgICAg
Y2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZSwgcGFzdGVib2FyZC5y
ZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkpCisgICAgICAgIGlmIChhdXRv
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LnB0cigpLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIp
KSkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKQEAgLTc5LDE3ICs3OSwx
NyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiwgRWxl
bWVudCYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cgogCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFz
dGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9w
dGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAg
ICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBh
c3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQ
YXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgYXV0byBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYm
IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVv
dGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAmJiBz
aG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50
KCpmcmFnbWVudCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAg
IHBhc3RlQXNGcmFnbWVudCgqZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJk
KCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRp
b246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9y
ZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAxY2Q4YzM5
NGE3NjkxYzU1ZjRkOGRkMzZkZTg1OTZlNzA3NzdiN2I1Li5iYTMxYzE4NzczMjM0YjlhZDkzOWFk
MGQzMzE5MzE4YzYyZDhiM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgRWRpdG9yOjpzaG93Q29sb3JQYW5lbCgpCiAKIHZv
aWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9w
dGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAK
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIC8vIEZJWE1FOiBI
b3cgY2FuIHRoaXMgaGFyZC1jb2RlZCBwYXN0ZWJvYXJkIG5hbWUgYmUgcmlnaHQsIGdpdmVuIHRo
YXQgdGhlIHBhc3NlZC1pbiBwYXN0ZWJvYXJkIGhhcyBhIG5hbWU/CkBAIC05Myw3ICs5Myw3IEBA
IHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQs
IE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9y
UGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBy
YW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21l
bnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9h
cmQoKnBhc3RlYm9hcmQpLCBmYWxzZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdu
b3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2tx
dW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlICk7CiAKICAg
ICBjbGllbnQoKS0+c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChTdHJpbmcoKSk7CkBAIC0xNTksNyAr
MTU5LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKICAgICBib29sIGNob3NlUGxhaW5UZXh0
OwogICAgIGlmIChhdXRvIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmQsIHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCkpIHsKICAgICAgICAgbWF5YmVDb3B5
Tm9kZUF0dHJpYnV0ZXNUb0ZyYWdtZW50KCpub2RlLCAqZnJhZ21lbnQpOwotICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0
cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgIGlmIChzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CiAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwg
Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCksIGZhbHNlLCBNYWlsQmxv
Y2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlKTsKICAgICB9CiAKQEAgLTE3NiwxMSAr
MTc2LDkgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjppbWFnZUluV2ViQXJjaGl2ZUZv
cm1hdChFbGVtZW50JiBpbWFnZUVsZW1lbnQpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRv
cjo6ZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlw
ZSkKIHsKLSAgICAvLyBGSVhNRTogVGhlIGludGVyZmFjZSB0byB0aGlzIGZ1bmN0aW9uIGlzIGF3
a3dhcmQuIFdlJ2QgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiB3aXRoIHRocmVlIHNlcGFyYXRlIGZ1
bmN0aW9ucy4KLSAgICAvLyBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMgaXMgb25seSB1c2VkIGlu
IFdlYktpdDIgdG8gaW1wbGVtZW50IHRoZSBtZXRob2QgLVtXS1ZpZXcgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQ6dHlwZXM6XSwKLSAgICAvLyB3aGljaCBpcyBvbmx5IHVzZWQgdG8gc3VwcG9y
dCBPUyBYIHNlcnZpY2VzLgorICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJmYWNlIHRvIHRoaXMgZnVu
Y3Rpb24gaXMgYXdrd2FyZC4gV2UnZCBwcm9iYWJseSBiZSBiZXR0ZXIgb2ZmIHdpdGggdGhyZWUg
c2VwYXJhdGUgZnVuY3Rpb25zLiBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMgaXMgb25seSB1c2Vk
IGluIFdlYktpdDIgdG8gaW1wbGVtZW50IHRoZSBtZXRob2QgLVtXS1ZpZXcgd3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQ6dHlwZXM6XSwgd2hpY2ggaXMgb25seSB1c2VkIHRvIHN1cHBvcnQgT1Mg
WCBzZXJ2aWNlcy4KIAotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgZnVuY3Rpb24gcmVhbGx5IG5l
ZWQgdG8gdXNlIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKT8gQmVjYXVzZSB3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCgpIGp1c3QgdXNlcyBzZWxlY3RlZFJhbmdlKCkuCisgICAgLy8gRklYTUU6
IERvZXMgdGhpcyBmdW5jdGlvbiByZWFsbHkgbmVlZCB0byB1c2UgYWRqdXN0ZWRTZWxlY3Rpb25S
YW5nZSgpPyBCZWNhdXNlIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkganVzdCB1c2VzIHNl
bGVjdGVkUmFuZ2UoKS4gVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBpbiBXZWJLaXQgdGhhdCB1
c2VzIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UuCiAgICAgaWYgKCFjYW5Db3B5KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dp
bi9FZGl0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNw
cAppbmRleCBjNzk2YmZhYWY2NmVlOTRhODVjNTVmMzkyMzQ5MTU1ZDI3NGE4NjBjLi45M2RkZWFm
ODg4OWI4ZTdmY2MyNjkzNDEyNDA4NTgyODQ0NzZjOGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvd2luL0VkaXRvcldpbi5jcHAKQEAgLTM3LDE3ICszNywxNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3Rl
Ym9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9z
ZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBwYXN0
ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0
aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4
dCk7CisgICAgYXV0byBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQoKm1f
ZG9jdW1lbnQuZnJhbWUoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIG9wdGlvbnMuY29udGFp
bnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAg
aWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9u
KSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKIAotICAgIGlm
IChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3Vs
ZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBh
c3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgp
LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3NlUGxhaW5U
ZXh0LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkg
PyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVv
dGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IGRjZjNiZjQ0ODY1YjA0Y2M4MjdmNzEz
M2VkZDhlMTkxZmFiYWJkNWIuLjI1ZjE3YTMzZmQyMGE0MWM3MWJhZmI5NWIzM2Y0YTQwMDI3NDA4
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCkBA
IC0xNTUsNyArMTU1LDcgQEAgUmVmPEVsZW1lbnQ+IEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2Vy
OjpjcmVhdGVUREZvckZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW4KICAgICBhdXRvIHRkRWxl
bWVudCA9IEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjcmVhdGUodGRUYWcsIGRvY3VtZW50KTsKICAg
ICB0ZEVsZW1lbnQtPmFwcGVuZENoaWxkKGFuY2hvckVsZW1lbnQpOwogCi0gICAgcmV0dXJuIFdU
Rk1vdmUodGRFbGVtZW50KTsKKyAgICByZXR1cm4gdGRFbGVtZW50OwogfQogCiBzdGF0aWMgU3Ry
aW5nIHByb2Nlc3NGaWxlc2l6ZVN0cmluZyhjb25zdCBTdHJpbmcmIHNpemUsIGJvb2wgaXNEaXJl
Y3RvcnkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCmluZGV4IDk0ZmIzMGY1
MTFiM2IzNzk1MjJhYTY5ZDJjZmZmZGFlOTAwNTcwMjYuLjBjMTRhZTY5MGNkM2Y0NmE2M2JhZTYx
NjA4NTRmMWEwM2I4MTFiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3Bw
CkBAIC0xOTEsNyArMTkxLDcgQEAgcHVibGljOgogICAgIEVtcHR5RWRpdG9yQ2xpZW50KCkgPSBk
ZWZhdWx0OwogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29s
IHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Ym9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjAwLDE1ICsyMDAsMTUgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpIGZpbmFsIHsgfQogICAgIGludCBzcGVs
bENoZWNrZXJEb2N1bWVudFRhZygpIGZpbmFsIHsgcmV0dXJuIC0xOyB9CiAKLSAgICBib29sIHNo
b3VsZEJlZ2luRWRpdGluZyhSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9v
bCBzaG91bGRFbmRFZGl0aW5nKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBi
b29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBT
dHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBSYW5nZSosIEVB
ZmZpbml0eSwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEJl
Z2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJikgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSYsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFQWZmaW5pdHks
IGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBib29sIHNob3VsZEFwcGx5U3R5
bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgZGlk
QXBwbHlTdHlsZSgpIGZpbmFsIHsgfQotICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxl
dGUoUmFuZ2UqLCBSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91
bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJh
bmdlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5n
KCkgZmluYWwgeyB9CiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKSBmaW5hbCB7
IH0KQEAgLTIxOSw5ICsyMTksOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkVXBkYXRlQ29tcG9z
aXRpb24oKSBmaW5hbCB7IH0KICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKSBmaW5hbCB7IH0KICAg
ICB2b2lkIGRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCkgZmluYWwgeyB9Ci0g
ICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqKSBmaW5hbCB7IH0K
KyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mKSBmaW5hbCB7IH0KICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJh
bmdlKFJhbmdlKiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+
JikgZmluYWwgeyB9CisgICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hhcmVk
QnVmZmVyPj4mKSBmaW5hbCB7IH0KICAgICB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBmaW5hbCB7IH0KICAgICB2b2lkIGhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0KSBmaW5hbCB7
IH0KIApAQCAtMjYxLDcgKzI2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVTdHJpbmdG
b3JGaW5kKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQogI2VuZGlmCiAKLSAgICBib29sIHBlcmZv
cm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFuZ2UmLCBib29sKSBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21l
bnQmLCBjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHNldEluc2VydGlvblBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJikgZmluYWwgeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwCmluZGV4IDQxZjdhN2VjN2E0MTkxNzc5MWIyODViMTk0MzlkMmMxYmU5
ZGFlZmQuLmM3ZWZjZmM5M2JkNDc3MTI3MGVhMGIwNjlkY2I5MjQ3YzkxYTJhZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTIxMyw3ICsy
MTMsNyBAQCBzdGF0aWMgdm9pZCBvcGVuTmV3V2luZG93KGNvbnN0IFVSTCYgdXJsVG9Mb2FkLCBG
cmFtZSYgZnJhbWUsIFNob3VsZE9wZW5FeHRlcm5hbAogc3RhdGljIHZvaWQgaW5zZXJ0VW5pY29k
ZUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIEZyYW1lJiBmcmFtZSkKIHsKICAgICBTdHJpbmcg
dGV4dCgmY2hhcmFjdGVyLCAxKTsKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLnNob3VsZEluc2Vy
dFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkK
KyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGV4dCwgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChmcmFtZS5kb2N1bWVu
dCgpKTsKQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29u
dGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogI2VuZGlm
CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOiB7CiAgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwotICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGl0bGUsIGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvbjo6UGFzdGVkKSkgeworICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLnNo
b3VsZEluc2VydFRleHQodGl0bGUsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpIHsKICAgICAgICAgICAgIE9wdGlvblNldDxSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbj4gcmVwbGFjZU9wdGlvbnMgeyBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlBy
ZXZlbnROZXN0aW5nIH07CiAKICAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNzMxN2JmZGY0NmQ5MmFj
M2Q5NjUwZmMzMzQ2NGY1MGY2ZWVhNTkyNy4uODEwZDJmYzcyYTMyNWNlNGQ0MjBhM2NjYTM2ZDky
YjMwMGNhNTgzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTU2
OCw3ICs1NjgsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
YXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgICAgICBz
dHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgc2VyaWFsaXphdGlvbkZvckhUTUwo
Y29sb3IpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxk
QXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKGlubmVyUmFuZ2UpLmdldCgp
KSkKKyAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxlKHN0
eWxlLCAqaW5uZXJSYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNs
aWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFj
dGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5lckZyYW1lLT5lZGl0b3IoKS5hcHBs
eVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRDb2xvcik7CkBAIC02MDMsNyArNjAz
LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCiAgICAgaWYgKGlzTW92ZSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAgICAg
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRG
cm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdl
KSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOwotICAgICAgICBpZiAoIWZyYWdtZW50IHx8ICFlZGl0
b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAgICAgICBpZiAoIWZyYWdt
ZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVz
dGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKQEAgLTYyOSw3ICs2MjksNyBAQCBib29s
IERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0
YSkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gZHJhZ0Rh
dGEuYXNQbGFpblRleHQoKTsKLSAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8ICFlZGl0b3Iu
c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8
ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlv
bjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50
KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
OjpFZGl0LCBkcmFnRGF0YSk7CkBAIC0xMDIyLDcgKzEwMjIsNyBAQCBib29sIERyYWdDb250cm9s
bGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgT3B0aW9u
U2V0PERyYQogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNyYy5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgQVNTRVJUKHNl
bGVjdGlvblJhbmdlKTsKIAotICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS5wdHIoKSk7
CisgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KCpzZWxlY3Rpb25SYW5nZSk7CiAKICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNv
bnRyb2woc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG11c3RVc2VMZWdhY3lEcmFnQ2xpZW50KQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAg
Ym9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0
ZSYgc3RhdGUsIE9wdGlvblNldDxEcmEKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAg
IGlmICghcHJvbWlzZWRBdHRhY2htZW50ICYmIGVkaXRvci5jbGllbnQoKSkgewogICAgICAgICAg
ICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbm8gZmlsZSBVUkwgaXMgc3BlY2lmaWVkLCBjYWxsIG91
dCB0byB0aGUgaW5qZWN0ZWQgYnVuZGxlIHRvIHBvcHVsYXRlIHRoZSBwYXN0ZWJvYXJkIHdpdGgg
ZGF0YS4KLSAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKGNyZWF0ZUxpdmVSYW5nZShzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCkpOworICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci53cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICAgICAgICAgICAgICAgICBlZGl0b3Iu
ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDc3OTMxNzFmZTBhZGIxMTdkYWZmNDE2MGRhZmY2OTFj
YTQ0NjBjMzEuLjlkZTcwNjU0ZjIwYjU4MjNmNzY1NjAwZTE0MTZiOWQ4YzNhOTFkZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBFbGVtZW50
OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwogY2xhc3MgTm9kZTsKLWNsYXNz
IFJhbmdlOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwogY2xh
c3MgVGV4dENoZWNrZXJDbGllbnQ7CkBAIC01MSwxMiArNTAsMTMgQEAgY2xhc3MgVmlzaWJsZVNl
bGVjdGlvbjsKIAogc3RydWN0IEdhcFJlY3RzOwogc3RydWN0IEdyYW1tYXJEZXRhaWw7CitzdHJ1
Y3QgU2ltcGxlUmFuZ2U7CiAKIGNsYXNzIEVkaXRvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RWRpdG9yQ2xpZW50KCkgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZERlbGV0ZVJhbmdlKFJhbmdlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVS
YW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpID0gMDsgCiAgICAgdmlydHVhbCBib29sIGlzU2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSA9IDA7CkBAIC02NSwxNyArNjUs
MTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSA9
IDA7CiAgICAgdmlydHVhbCBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSA9IDA7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdlKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwg
RWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSwg
Ym9vbCBzdGlsbFNlbGVjdGluZykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVk
aXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEVu
ZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZEluc2VydE5vZGUoTm9kZSYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvcklu
c2VydEFjdGlvbikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0
IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlv
bikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRSZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXBwcmVz
c1Bhc3N3b3JkRWNobygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9OwogICAgIAotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIFJhbmdlKikgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYs
IGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
QXBwbHlTdHlsZSgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJE
ZWxldGUoUmFuZ2UqLCBSYW5nZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTW92ZVJh
bmdlQWZ0ZXJEZWxldGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpID0g
MDsKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiAvKiBpZGVudGlmaWVyICov
LCBjb25zdCBTdHJpbmcmIC8qIGNvbnRlbnRUeXBlICovLCBjb25zdCBTdHJpbmcmIC8qIHByZWZl
cnJlZEZpbGVOYW1lICovLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSB7IH0KQEAgLTk1LDkgKzk1LDkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRVc2VyVHJpZ2dlcmVkU2VsZWN0aW9u
Q2hhbmdlcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRWRpdG9yU3RhdGVBZnRlckxh
eW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRF
ZGl0aW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFJhbmdlKiwgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVi
b2FyZERhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEo
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRU
eXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRp
ZGF0ZVdpdGhTb2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3VsdCkgeyB9CiAKQEAgLTE4Nyw3ICsx
ODcsNyBAQCBwdWJsaWM6CiAgICAgLy8gc2VsZWN0aW9uIGFzIGEgdHlwZSBvZiBjbGlwYm9hcmQu
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFn
bWVudCYsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBTaW1wbGVS
YW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wg
Y2FuU2hvd0ZvbnRQYW5lbCgpIGNvbnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCmluZGV4IDZmMWYxYjRhZDgwYjIxZjk5NWMxZmVlOGQ3MmFhZGM5NjI3MTViMmIuLjVl
ZGE4MzBlY2Y0NjVkMGRkMGIyNDdmYWUwMDIwYzVlMjUyZWI4ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKQEAgLTMwODIsOCArMzA4Miw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxl
Y3Rpb24uc3RhcnQoKTsKIAogICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIChzZWxl
Y3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpIHx8IHNlbGVjdGlvbi5pc1JhbmdlKCkpKSB7Ci0g
ICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVj
dEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSkuZ2V0KCkpOworICAgICAg
ICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uo
KnNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgICAgICBpbnQgeCA9IHJpZ2h0
QWxpZ25lZCA/IGZpcnN0UmVjdC5tYXhYKCkgOiBmaXJzdFJlY3QueCgpOwogICAgICAgICAvLyBJ
biBhIG11bHRpbGluZSBlZGl0LCBmaXJzdFJlY3QubWF4WSgpIHdvdWxkIGVuZHVwIG9uIHRoZSBu
ZXh0IGxpbmUsIHNvIC0xLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmlu
ZGV4IDNmMzcyMzJjN2U5NWJhMjAwNTM5MTEwNDlhZTgwNDAyNGY2MTY3ODkuLjdlMjEyZWFmNGI5
NTJhODZkYjRmZDEwODA3NmQyMDU5NmQxNjUyMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAKQEAgLTc1MiwxNyArNzUyLDE2IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJv
bGxlcjo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50T3JTY29wZU93bmVyKGNvbnN0IEZvY3VzTmF2
aWdhCiAgICAgcmV0dXJuIHByZXZpb3VzRWxlbWVudFdpdGhMb3dlclRhYkluZGV4KHNjb3BlLCBs
YXN0LCBzdGFydGluZ1RhYkluZGV4LCBldmVudCk7CiB9CiAKLXN0YXRpYyBib29sIHJlbGlucXVp
c2hlc0VkaXRpbmdGb2N1cyhOb2RlICpub2RlKQorc3RhdGljIGJvb2wgcmVsaW5xdWlzaGVzRWRp
dGluZ0ZvY3VzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwotICAgIEFT
U0VSVChub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpOworICAgIEFTU0VSVChlbGVtZW50Lmhhc0Vk
aXRhYmxlU3R5bGUoKSk7CiAKLSAgICBOb2RlKiByb290ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOwotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAg
ICBhdXRvIHJvb3QgPSBlbGVtZW50LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBhdXRvIGZy
YW1lID0gZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhcm9v
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5z
aG91bGRFbmRFZGl0aW5nKHJhbmdlT2ZDb250ZW50cygqcm9vdCkucHRyKCkpOworICAgIHJldHVy
biBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkRW5kRWRpdGluZyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoKnJvb3QpKTsKIH0KIAogc3RhdGljIHZvaWQgY2xlYXJTZWxlY3Rpb25JZk5lZWRl
ZChGcmFtZSogb2xkRm9jdXNlZEZyYW1lLCBGcmFtZSogbmV3Rm9jdXNlZEZyYW1lLCBOb2RlKiBu
ZXdGb2N1c2VkTm9kZSkKQEAgLTg0MSw3ICs4NDAsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6
c2V0Rm9jdXNlZEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRnJhbWUmIG5ld0ZvY3VzZWRGcmFt
ZQogICAgIH0KIAogICAgIC8vIEZJWE1FOiBNaWdodCB3YW50IHRvIGRpc2FibGUgdGhpcyBjaGVj
ayBmb3IgY2FyZXRCcm93c2luZwotICAgIGlmIChvbGRGb2N1c2VkRWxlbWVudCAmJiBvbGRGb2N1
c2VkRWxlbWVudC0+aXNSb290RWRpdGFibGVFbGVtZW50KCkgJiYgIXJlbGlucXVpc2hlc0VkaXRp
bmdGb2N1cyhvbGRGb2N1c2VkRWxlbWVudCkpCisgICAgaWYgKG9sZEZvY3VzZWRFbGVtZW50ICYm
IG9sZEZvY3VzZWRFbGVtZW50LT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiAhcmVsaW5xdWlz
aGVzRWRpdGluZ0ZvY3VzKCpvbGRGb2N1c2VkRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIG1fcGFnZS5lZGl0b3JDbGllbnQoKS53aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBmZjFhMjdlYmM5NWZjN2M0YzQ2YTViNTAyMzM3OTdh
ZTg5OTc4ZTdlLi5kNGUyYmYwOTk0N2ZmM2U5NWU0OTY4ODllM2ViMTZiMDFlOGRjNTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcApAQCAtODIxLDI4ICs4MjEsMjUgQEAgRG9jdW1lbnQqIEZyYW1lOjpk
b2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogCiBSZWZQdHI8UmFuZ2U+IEZy
YW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KQogewotICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9p
bnQpOwotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICBhdXRvIHBvc2l0aW9uID0gdmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CisgICAgYXV0byBwb3NpdGlvbkJvdW5k
YXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOworICAgIGlmICghcG9zaXRpb25Cb3Vu
ZGFyeSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBQb3NpdGlvbiBkZWVwUG9zaXRp
b24gPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwotICAgIFRleHQqIGNvbnRhaW5lclRleHQg
PSBkZWVwUG9zaXRpb24uY29udGFpbmVyVGV4dCgpOworICAgIGF1dG8gY29udGFpbmVyVGV4dCA9
IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyVGV4dCgpOwogICAgIGlmICghY29u
dGFpbmVyVGV4dCB8fCAhY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKSB8fCBjb250YWluZXJUZXh0
LT5yZW5kZXJlcigpLT5zdHlsZSgpLnVzZXJTZWxlY3QoKSA9PSBVc2VyU2VsZWN0OjpOb25lKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9
IHBvc2l0aW9uLnByZXZpb3VzKCk7Ci0gICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxSYW5nZT4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShw
cmV2aW91cywgcG9zaXRpb24pOwotICAgICAgICBMYXlvdXRSZWN0IHJlY3QgPSBlZGl0b3IoKS5m
aXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICAgICAg
aWYgKHJlY3QuY29udGFpbnMoZnJhbWVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gcHJldmlv
dXNDaGFyYWN0ZXJSYW5nZTsKKyAgICBpZiAoYXV0byBwcmV2aW91cyA9IG1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uLnByZXZpb3VzKCkpKSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFyYWN0
ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnByZXZpb3VzLCAqcG9zaXRpb25Cb3VuZGFyeSB9Owor
ICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJS
YW5nZSkuY29udGFpbnMoZnJhbWVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UpOwogICAgIH0KIAotICAgIFZpc2libGVQb3Np
dGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOwotICAgIGlmIChSZWZQdHI8UmFuZ2U+IG5leHRD
aGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwb3NpdGlvbiwgbmV4dCkpIHsKLSAgICAgICAgTGF5
b3V0UmVjdCByZWN0ID0gZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJh
bmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMoZnJhbWVQb2ludCkpCi0gICAg
ICAgICAgICByZXR1cm4gbmV4dENoYXJhY3RlclJhbmdlOworICAgIGlmIChhdXRvIG5leHQgPSBt
YWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5uZXh0KCkpKSB7CisgICAgICAgIGF1dG8gbmV4dENo
YXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcG9zaXRpb25Cb3VuZGFyeSwgKm5leHQgfTsK
KyAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5n
ZSkuY29udGFpbnMoZnJhbWVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKG5leHRDaGFyYWN0ZXJSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcAppbmRleCA4ZWQ3YWZmMmMzZGQxYjJlMjRkMmVmYWUzOWZkODdiMjM2M2U3
NjM0Li5kZTU3ZjM4NWM5YjFlNjAzZTM0MGRiNjc4YzYxMjI0MTYwMDc5NzVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKQEAgLTcxMywxOCArNzEzLDIwIEBAIGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25z
dCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgRGlkV3JhcCogZGlkV3JhCiAK
IHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpbnQgbGltaXQsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYg
bWF0Y2hSYW5nZXMsIGludCYgaW5kZXhGb3JTZWxlY3Rpb24pCiB7CisgICAgVmVjdG9yPFNpbXBs
ZVJhbmdlPiByZXN1bHRSYW5nZXM7CisKICAgICBpbmRleEZvclNlbGVjdGlvbiA9IDA7CiAKICAg
ICBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7CiAgICAgRnJhbWUqIGZyYW1lV2l0aFNlbGVj
dGlvbiA9IG51bGxwdHI7CiAgICAgZG8gewotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY291bnRN
YXRjaGVzRm9yVGV4dCh0YXJnZXQsIDAsIG9wdGlvbnMsIGxpbWl0ID8gKGxpbWl0IC0gbWF0Y2hS
YW5nZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZtYXRjaFJhbmdlcyk7CisgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgeyB9LCBvcHRpb25zLCBsaW1pdCA/
IChsaW1pdCAtIG1hdGNoUmFuZ2VzLnNpemUoKSkgOiAwLCB0cnVlLCAmcmVzdWx0UmFuZ2VzKTsK
ICAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCiAgICAgICAgICAgICBm
cmFtZVdpdGhTZWxlY3Rpb24gPSBmcmFtZTsKICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFt
ZShmcmFtZSwgdHJ1ZSwgQ2FuV3JhcDo6Tm8pOwogICAgIH0gd2hpbGUgKGZyYW1lKTsKIAotICAg
IGlmIChtYXRjaFJhbmdlcy5pc0VtcHR5KCkpCisgICAgaWYgKHJlc3VsdFJhbmdlcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChmcmFtZVdpdGhTZWxlY3Rpb24pIHsKQEAg
LTczMiw3ICs3MzQsNyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25z
dCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICBhdXRvIHNl
bGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkg
ewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA+IDA7
IC0taSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNl
bGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwg
Km1hdGNoUmFuZ2VzW2kgLSAxXSk7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
RU5EX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2VzW2kgLSAxXSkpOwogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rp
b24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NDAsNyArNzQyLDcg
QEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0pOworICAgICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlc1tpXSkp
OwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JT
ZWxlY3Rpb24gPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTc0OSwxMCArNzUx
LDEzIEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKQotICAgICAgICAgICAgaW5k
ZXhGb3JTZWxlY3Rpb24gPSBtYXRjaFJhbmdlcy5zaXplKCkgLSAxOworICAgICAgICAgICAgaW5k
ZXhGb3JTZWxlY3Rpb24gPSByZXN1bHRSYW5nZXMuc2l6ZSgpIC0gMTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOwogICAgIH0KKworICAgIGZvciAoYXV0
byYgcmFuZ2UgOiByZXN1bHRSYW5nZXMpCisgICAgICAgIG1hdGNoUmFuZ2VzLmFwcGVuZChjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpKTsKIH0KIAogUmVmUHRyPFJhbmdlPiBQYWdlOjpyYW5nZU9mU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEZpbmRPcHRp
b25zIG9wdGlvbnMpCkBAIC03NjcsMTcgKzc3MiwxNiBAQCBSZWZQdHI8UmFuZ2U+IFBhZ2U6OnJh
bmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwg
RgogICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPm93
bmVyRG9jdW1lbnQoKS5mcmFtZSgpIDogJm1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBzdGFydEZy
YW1lID0gZnJhbWU7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiByZXN1bHRS
YW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3Rh
cnRGcmFtZSA/IHJlZmVyZW5jZVJhbmdlIDogMCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdlOwotCisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJh
bmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFy
dEZyYW1lID8gbWFrZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSA6IFdURjo6bnVsbG9wdCwgb3B0aW9u
cyAtIFdyYXBBcm91bmQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXN1
bHRSYW5nZSk7CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsICFvcHRpb25z
LmNvbnRhaW5zKEJhY2t3YXJkcyksIGNhbldyYXApOwogICAgIH0gd2hpbGUgKGZyYW1lICYmIGZy
YW1lICE9IHN0YXJ0RnJhbWUpOwogCiAgICAgLy8gU2VhcmNoIGNvbnRlbnRzIG9mIHN0YXJ0RnJh
bWUsIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSByZWZlcmVuY2UgcmFuZ2UgdGhhdCB3ZSBkaWQg
ZWFybGllci4KICAgICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVzdCBzZWFyY2ggYWdhaW4gd2l0
aCB3cmFwIG9uLgogICAgIGlmIChjYW5XcmFwID09IENhbldyYXA6OlllcyAmJiByZWZlcmVuY2VS
YW5nZSkgewotICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHN0YXJ0RnJh
bWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCByZWZlcmVuY2VSYW5nZSwgb3B0aW9u
cyB8IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHRSYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5l
ZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgbWFrZVJhbmdlKCpyZWZlcmVuY2VSYW5nZSks
IG9wdGlvbnMgfCBXcmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKTsKICAgICB9CiAKICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTc5NCw3ICs3OTgsNyBAQCB1bnNpZ25lZCBQYWdlOjpmaW5kTWF0Y2hlc0Zv
clRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVucwogICAg
IGRvIHsKICAgICAgICAgaWYgKHNob3VsZE1hcmtNYXRjaGVzID09IE1hcmtNYXRjaGVzKQogICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQoc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlcyA9PSBIaWdobGlnaHRNYXRjaGVzKTsKLSAgICAgICAg
bWF0Y2hDb3VudCArPSBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQs
IDAsIG9wdGlvbnMsIG1heE1hdGNoQ291bnQgPyAobWF4TWF0Y2hDb3VudCAtIG1hdGNoQ291bnQp
IDogMCwgc2hvdWxkTWFya01hdGNoZXMgPT0gTWFya01hdGNoZXMsIDApOworICAgICAgICBtYXRj
aENvdW50ICs9IGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgV1RG
OjpudWxsb3B0LCBvcHRpb25zLCBtYXhNYXRjaENvdW50ID8gKG1heE1hdGNoQ291bnQgLSBtYXRj
aENvdW50KSA6IDAsIHNob3VsZE1hcmtNYXRjaGVzID09IE1hcmtNYXRjaGVzLCBudWxscHRyKTsK
ICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgdHJ1ZSwgQ2FuV3JhcDo6Tm8p
OwogICAgIH0gd2hpbGUgKGZyYW1lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CmluZGV4IGUyZTU3ZWNiZWY0NWQzYzI0NjNmOTg2MzczNzEzMzJmYWJmNDUyOTcuLjBlMTUxZmEy
ODI2ODZhNGE0YThmY2NlZmU3MGNiNTg1ZDUwMDQzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKQEAgLTI2MDksNyArMjYwOSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxSYW5n
ZT4+IEludGVybmFsczo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxS
CiAgICAgaWYgKHBhcnNlZE9wdGlvbnMuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBw
YXJzZWRPcHRpb25zLnJlbGVhc2VFeGNlcHRpb24oKTsKIAotICAgIHJldHVybiBkb2N1bWVudC0+
ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0ZXh0LCByZWZlcmVuY2VSYW5nZS5nZXQoKSwgcGFyc2Vk
T3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5n
ZShkb2N1bWVudC0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0ZXh0LCBtYWtlUmFuZ2UocmVmZXJl
bmNlUmFuZ2UpLCBwYXJzZWRPcHRpb25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKSk7CiB9CiAKIEV4
Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmluZE9wdGlvbnMsIGNvbnN0IFN0
cmluZyYgbWFya01hdGNoZXMpCkBAIC0yNjIzLDcgKzI2MjMsNyBAQCBFeGNlcHRpb25Pcjx1bnNp
Z25lZD4gSW50ZXJuYWxzOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVgogICAgICAgICByZXR1cm4gcGFyc2VkT3B0aW9ucy5yZWxlYXNlRXhjZXB0aW9uKCk7
CiAKICAgICBib29sIG1hcmsgPSBtYXJrTWF0Y2hlcyA9PSAibWFyayI7Ci0gICAgcmV0dXJuIGRv
Y3VtZW50LT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRleHQsIG51bGxwdHIsIHBhcnNl
ZE9wdGlvbnMucmVsZWFzZVJldHVyblZhbHVlKCksIDEwMDAsIG1hcmssIG51bGxwdHIpOworICAg
IHJldHVybiBkb2N1bWVudC0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0ZXh0LCBXVEY6
Om51bGxvcHQsIHBhcnNlZE9wdGlvbnMucmVsZWFzZVJldHVyblZhbHVlKCksIDEwMDAsIG1hcmss
IG51bGxwdHIpOwogfQogCiBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb3VudEZp
bmRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbmRP
cHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1t
CmluZGV4IGIyZGFkYzY5NzQwNWQ2OTExYzZjMjk1MmI3YzlkNDRmZmZlNWFkNDEuLjJiMDQyMjI0
ZjM5YzgxNjI4YThmOGRmZjk1YWRkYThiOTY5YTExMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTY2Myw3ICs2NjMsNyBAQCAtIChOU1Jl
Y3QpcmVjdEZvclBhZ2U6KE5TSW50ZWdlcilwYWdlCiAgICAgICAgIExPRyhQcmludGluZywgIi1b
V0tQcmludGluZ1ZpZXcgJXAgcmVjdEZvclBhZ2U6JWRdIC0gZGF0YSBpcyBub3QgeWV0IGF2YWls
YWJsZSIsIHNlbGYsIChpbnQpcGFnZSk7CiAgICAgICAgIGlmICghX3dlYkZyYW1lLT5wYWdlKCkp
IHsKICAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIG5vdCB0b2xkIEFwcEtpdCBob3cgbWFueSBw
YWdlcyB0aGVyZSBhcmUsIHNvIGl0IHdpbGwgdHJ5IHRvIHByaW50IHVudGlsIGEgbnVsbCByZWN0
IGlzIHJldHVybmVkLgotICAgICAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7
CisgICAgICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKICAgICAgICAgfQogICAgICAgICAvLyBX
ZSBtdXN0IGJlIHN0aWxsIGNhbGN1bGF0aW5nIHRoZSBwYWdlIHJhbmdlLgogICAgICAgICBBU1NF
UlQoX2V4cGVjdGVkQ29tcHV0ZWRQYWdlc0NhbGxiYWNrKTsKQEAgLTY3NCw3ICs2NzQsNyBAQCAt
IChOU1JlY3QpcmVjdEZvclBhZ2U6KE5TSW50ZWdlcilwYWdlCiAgICAgLy8gUmV0dXJuaW5nIGEg
bnVsbCByZWN0IHByZXZlbnRzIHNlbGVjdGluZyBub24tZXhpc3RlbnQgcGFnZXMgaW4gcHJldmll
dyBkaWFsb2cuCiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihwYWdlKSA+IF9wcmludGlu
Z1BhZ2VSZWN0cy5zaXplKCkpIHsKICAgICAgICAgQVNTRVJUKCFfd2ViRnJhbWUtPnBhZ2UoKSk7
Ci0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4g
TlNaZXJvUmVjdDsKICAgICB9CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QgPSBfcHJpbnRp
bmdQYWdlUmVjdHNbcGFnZSAtIDFdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCA3OWEzNzQw
MGMzZjQxNThiZjQyOGY2OTQyYmM4ODZmMWFjZDIyMDNkLi5kZDljMzUyNjA1ZjA4ZjM5NDBkOTAw
ZDhmMDI2NTI0N2UwNGJhMzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNzQsMTEgKzc0
LDkgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCkKICAg
ICByZXR1cm4gdW5pcXVlVGV4dENoZWNraW5nUmVxdWVzdElEKys7CiB9CiAKLWJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZSkKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzbWFydElu
c2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtMTE0LDUwICsxMTIsMzcgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnRvZ2dsZUdyYW1tYXJDaGVja2luZygpCiBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVs
bENoZWNrZXJEb2N1bWVudFRhZygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRCZWdpbkVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgYm9vbCByZXN1
bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQmVnaW5FZGl0
aW5nKCptX3BhZ2UsIHJhbmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7
CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5n
ZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSkKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQoKS5zaG91bGRFbmRFZGl0aW5nKCptX3BhZ2UsIHJhbmdlKTsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRFbmRFZGl0aW5nKCptX3BhZ2UsIGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkSW5zZXJ0Tm9kZShOb2RlKiBub2RlLCBSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIEVkaXRvcklu
c2VydEFjdGlvbiBhY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlJiBub2RlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNl
LCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdl
LT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFnZSwg
bm9kZSwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9y
Q2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCAmbm9kZSwgY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2VUb1Jl
cGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0g
ICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hv
dWxkSW5zZXJ0VGV4dCgqbV9wYWdlLCB0ZXh0LmltcGwoKSwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlv
bik7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0VGV4dCgq
bV9wYWdlLCB0ZXh0LmltcGwoKSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQo
KSwgYWN0aW9uKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJhbmdl
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0
eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3Bh
Z2UsIGZyb21SYW5nZSwgdG9SYW5nZSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCpt
X3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShmcm9tUmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2Uo
dG9SYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAgICAgCi1ib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxl
LCBSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShj
b25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
IHJhbmdlKQogewotICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUo
c3R5bGUtPmlzTXV0YWJsZSgpID8gUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+KHN0YXRpY19j
YXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMmPigqc3R5bGUpKSA6IHN0eWxlLT5tdXRhYmxlQ29w
eSgpKTsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGRBcHBseVN0eWxlKCptX3BhZ2UsICZtdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0
eWxlRGVjbGFyYXRpb24oKSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLnNob3VsZEFwcGx5U3R5bGUoKm1fcGFnZSwgJnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3Vy
ZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CiB9
CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpAQCAtMjExLDkgKzE5Niw4IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBseVN0eWxlKCkKICAgICBtX3BhZ2UtPmRpZEFwcGx5
U3R5bGUoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVy
RGVsZXRlKFJhbmdlKiwgUmFuZ2UqKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVS
YW5nZUFmdGVyRGVsZXRlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIyMiw3
ICsyMDYsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKCkKICAgICAv
LyBGSVhNRTogV2hhdCBnb29kIGlzIGEgbm90aWZpY2F0aW9uIG5hbWUsIGlmIGl0J3MgYWx3YXlz
IHRoZSBzYW1lPwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IFdlYlZpZXdEaWRC
ZWdpbkVkaXRpbmdOb3RpZmljYXRpb24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIldlYlZpZXdE
aWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24iKSk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLmRpZEJlZ2luRWRpdGluZygqbV9wYWdlLCBXZWJWaWV3RGlkQmVnaW5F
ZGl0aW5nTm90aWZpY2F0aW9uLmdldCgpLmltcGwoKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCkBA
IC0yNzUsNyArMjU4LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoKQog
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IFdlYlZpZXdEaWRFbmRFZGl0aW5n
Tm90aWZpY2F0aW9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJXZWJWaWV3RGlkRW5kRWRpdGlu
Z05vdGlmaWNhdGlvbiIpKTsKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50
KCkuZGlkRW5kRWRpdGluZygqbV9wYWdlLCBXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNhdGlv
bi5nZXQoKS5pbXBsKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCkBAIC0yODMsMTkgKzI2
NSwxOSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoKQogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5kaWRXcml0ZVRv
UGFzdGVib2FyZCgqbV9wYWdlKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSogcmFuZ2UpCit2b2lkIFdlYkVkaXRvckNsaWVu
dDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LndpbGxXcml0ZVRvUGFzdGVib2FyZCgqbV9wYWdlLCByYW5nZSk7CisgICAgbV9wYWdlLT5pbmpl
Y3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLndpbGxXcml0ZVRvUGFzdGVib2FyZCgqbV9wYWdlLCBj
cmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3Ry
aW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0
ZWJvYXJkRGF0YSkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0
YShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFz
dGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0
YSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVi
b2FyZERhdGFGb3JSYW5nZSgqbV9wYWdlLCByYW5nZSwgcGFzdGVib2FyZFR5cGVzLCBwYXN0ZWJv
YXJkRGF0YSk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQo
KSwgcGFzdGVib2FyZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CiB9CiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJh
bmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCitib29sIFdlYkVkaXRvckNsaWVudDo6cGVy
Zm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVS
YW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCptX3BhZ2UsIGZy
YWdtZW50LCBkZXN0aW5hdGlvbiwgaXNNb3ZlKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUVkaXRvckNsaWVudCgpLnBlcmZvcm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBmcmFnbWVu
dCwgY3JlYXRlTGl2ZVJhbmdlKGRlc3RpbmF0aW9uKSwgaXNNb3ZlKTsKIH0KIAogdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoVW5kb1N0ZXAmIHN0ZXApCkBAIC00MjUsMTIg
KzQwNywxMCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEo
RWxlbWVudCogZWxlbWVudCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6Om92ZXJmbG93U2Nyb2xs
UG9zaXRpb25DaGFuZ2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdl
YkVkaXRvckNsaWVudDo6c3ViRnJhbWVTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKICNlbmRpZgpAQCAtNjE4LDcgKzU5OCw2IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpzZXRJbnB1dE1ldGhvZFN0YXRlKEVsZW1lbnQqIGVsZW1lbnQpCiAjaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgbV9wYWdlLT5zZXRJbnB1dE1ldGhv
ZFN0YXRlKGVsZW1lbnQpOwogI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIFVOVVNF
RF9QQVJBTShlbGVtZW50KTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDBkZjc3
NTllMWI4MmRkNDAzY2ZkYThjYTczMDk5ZWJjNmRkZDgwOGMuLjIzZTM5NGYyN2VjMzI2OTI3OGM0
NWI4ZTE0NGQzNmRjN2M3YmZkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAgLTQ1LDcgKzQ1LDcg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdl
KFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICBib29sIHNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsOwogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1do
aXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpIGZpbmFsOwpAQCAtNTQsMTUgKzU0LDE1IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSBmaW5hbDsKICAgICBpbnQgc3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKSBmaW5hbDsKICAgICAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGlu
ZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJD
b3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpO
b2RlKiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFs
OwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpSYW5n
ZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJh
bmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNp
bXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5v
ZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0
b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBT
dHJpbmcmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpF
ZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxk
QXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpSYW5nZSopIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBXZWJDb3JlOjpTdHlsZVByb3Bl
cnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAg
ICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbDsKLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFm
dGVyRGVsZXRlKFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBi
b29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdl
JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKIAogI2lmIEVOQUJMRShBVFRB
Q0hNRU5UX0VMRU1FTlQpCiAgICAgdm9pZCByZWdpc3RlckF0dGFjaG1lbnRJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgcHJl
ZmVycmVkRmlsZU5hbWUsIFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwpAQCAt
ODUsOSArODUsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FuY2VsZWRDb21wb3NpdGlvbigpIGZp
bmFsOwogICAgIHZvaWQgZGlkVXBkYXRlQ29tcG9zaXRpb24oKSBmaW5hbDsKICAgICB2b2lkIGRp
ZEVuZEVkaXRpbmcoKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFs
OwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBmaW5hbDsKLSAgICB2
b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7CisgICAgdm9pZCBnZXRDbGllbnRQYXN0
ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlclVu
ZG9TdGVwKFdlYkNvcmU6OlVuZG9TdGVwJikgZmluYWw7CiAgICAgdm9pZCByZWdpc3RlclJlZG9T
dGVwKFdlYkNvcmU6OlVuZG9TdGVwJikgZmluYWw7CkBAIC0xOTEsNyArMTkxLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIHNob3VsZFN1cHByZXNzUGFzc3dvcmRFY2hvKCkgY29uc3QgZmluYWw7CiAj
ZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJh
Z21lbnQmLCBXZWJDb3JlOjpSYW5nZSYsIGJvb2wgaXNNb3ZlKSBmaW5hbDsKKyAgICBib29sIHBl
cmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmLCBib29sIGlzTW92ZSkgZmluYWw7CiAgICAgYm9vbCBzdXBwb3J0c0ds
b2JhbFNlbGVjdGlvbigpIGZpbmFsOwogCiAgICAgYm9vbCBjYW5TaG93Rm9udFBhbmVsKCkgY29u
c3QgZmluYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggNDdjZGVhN2VkZTE5ODA1NzhkYzY5OWM5ZmM3YjRjYjc0ODkwN2FjYS4uNzMyZDg4ODA0
Zjg0OGRhOWM3ZjBmZTNmNWNjMjc1NzFkYTk2YjU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTU0MjQsNDMgKzU0MjQsMzYgQEAgdm9pZCBX
ZWJQYWdlOjpoYXNNYXJrZWRUZXh0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlQXN5bmMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwotICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpm
cm9tUmFuZ2UoZnJhbWUsIGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSk7
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZWRpdGluZ1JhbmdlKTsKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcihFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1l
LmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkuZ2V0KCkpKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0
aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGF1dG8g
ZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVS
YW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZWRpdGluZ1JhbmdlKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdl
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgp
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAg
IGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBl
IHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRU
ZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50LCAgSGl0VGVzdFJlcXVl
c3Q6OkFsbG93Q2hpbGRGcmFtZUNvbnRlbnQgfTsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQo
cG9pbnQsIGhpdFR5cGUpOwotICAgIEZyYW1lKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vZGVGcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IGZyYW1lLT5yYW5nZUZvclBvaW50KHJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZy
YW1lKCkpOwotICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2Uo
KmZyYW1lLCByYW5nZS5nZXQoKSk7CisgICAgYXV0byByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBoaXRUeXBlKTsK
KyAgICBhdXRvJiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/ICpyZXN1bHQu
aW5uZXJOb2RlRnJhbWUoKSA6IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLnJhbmdlRm9yUG9pbnQocmVzdWx0LnJv
dW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7CisgICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBF
ZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgcmFuZ2UuZ2V0KCkpOwogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhzdGF0aWNfY2FzdDx1aW50NjRf
dD4oZWRpdGluZ1JhbmdlLmxvY2F0aW9uKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBh
Z2U6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBl
ZGl0aW5nUmFuZ2UsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKLSAgICBGcmFtZSYgZnJhbWUg
PSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIElu
dFJlY3QgcmVzdWx0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDAsIDApKTsKLSAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCBlZGl0aW5n
UmFuZ2UpOworICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKKyAgICBhdXRvIHJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1Jhbmdl
KGZyYW1lLCBlZGl0aW5nUmFuZ2UpOwogICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhyZXN1
bHQsIEVkaXRpbmdSYW5nZShub3RGb3VuZCwgMCksIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayh7
IH0sIHsgfSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgcmVz
dWx0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KGZyYW1lLmVkaXRvcigpLmZpcnN0
UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKSk7Ci0KLSAgICAvLyBGSVhNRTogVXBkYXRlIGFjdHVh
bFJhbmdlIHRvIG1hdGNoIHRoZSByYW5nZSBvZiBmaXJzdCByZWN0LgotICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2socmVzdWx0LCBl
ZGl0aW5nUmFuZ2UsIGNhbGxiYWNrSUQpKTsKKyAgICAvLyBGSVhNRTogUGFzcyBhbiBFZGl0aW5n
UmFuZ2UgdGhhdCBtYXRjaGVzIHRoZSByYW5nZSBvZiB0aGUgZmlyc3QgcmVjdCwgcmF0aGVyIHRo
YW4gdGhlIGVudGlyZSBwYXNzZWQtaW4gcmFuZ2U/CisgICAgYXV0byByZWN0ID0gZnJhbWUudmll
dygpLT5jb250ZW50c1RvV2luZG93KGZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpy
YW5nZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3Rl
clJhbmdlQ2FsbGJhY2socmVjdCwgZWRpdGluZ1JhbmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb25Bc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIGNvbnN0IFZlY3RvcjxD
b21wb3NpdGlvbkhpZ2hsaWdodD4mIGhpZ2hsaWdodHMsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2Vs
ZWN0aW9uLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlKQpAQCAt
NTQ2OCwxNSArNTQ2MSwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uQXN5bmMoY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbgogICAgIHBsYXRmb3Jt
V2lsbFBlcmZvcm1FZGl0aW5nQ29tbWFuZCgpOwogCiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotCiAgICAgaWYgKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlOwogICAgICAgICBpZiAocmVwbGFjZW1lbnRF
ZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgIHJlcGxhY2Vt
ZW50UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIHJlcGxhY2VtZW50RWRpdGlu
Z1JhbmdlKTsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudFJhbmdlKQorICAgICAgICAgICAg
aWYgKGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwg
cmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpKQogICAgICAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXBsYWNlbWVudFJhbmdlLCBTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwogICAgICAgICB9Ci0KICAgICAgICAgZnJhbWUuZWRpdG9yKCku
c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgaGlnaGxpZ2h0cywgc2VsZWN0aW9uLmxv
Y2F0aW9uLCBzZWxlY3Rpb24ubG9jYXRpb24gKyBzZWxlY3Rpb24ubGVuZ3RoKTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IDI5NjhmN2MwYzI0YTVhZDg4MDY1ZGQ4NGRkOGUwYzFjM2JhZWQyOTYuLmQ4ZGZl
YTcwNzIzZjE2NTZiMjg0YWRjNjBmZjllNWExNmZkNmYxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yNjcsMTAgKzI2
NywxMCBAQCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1l
LCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhh
c0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZy
YW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICAgICAgY29tcG9zaXRp
b25SYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRS
ZWN0cyk7CisgICAgICAgICAgICBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLT5j
b2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKICAg
ICAgICAgICAgIGNvbnZlcnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJlY3RzKHZpZXcsIHBv
c3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CiAKLSAgICAgICAgICAgIHBvc3RMYXlvdXRE
YXRhLm1hcmtlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0
KCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dCA9IHBsYWluVGV4dEZv
ckNvbnRleHQoKmNvbXBvc2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBjb21wb3NpdGlvblNlbGVjdGlvbigqY29tcG9zaXRpb25SYW5nZSk7CiAgICAgICAgICAgICBw
b3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRz
VG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5hYnNvbHV0ZUNh
cmV0Qm91bmRzKG51bGxwdHIgLyogaW5zaWRlRml4ZWQgKi8pKTsKICAgICAgICAgICAgIHBvc3RM
YXlvdXREYXRhLm1hcmtlZFRleHRDYXJldFJlY3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290
Vmlldyhjb21wb3NpdGlvblNlbGVjdGlvbi52aXNpYmxlRW5kKCkuYWJzb2x1dGVDYXJldEJvdW5k
cyhudWxscHRyIC8qIGluc2lkZUZpeGVkICovKSk7CkBAIC0xMzc3LDEzICsxMzc3LDE1IEBAIHZv
aWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0
dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICB7CiAgICAgICAgIGlmICghZnJhbWUuZWRpdG9yKCku
aGFzQ29tcG9zaXRpb24oKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWZQdHI8UmFu
Z2U+IG1hcmtlZFJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAg
ICAgICBpZiAocG9zaXRpb24gPCBtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAg
ICAgICAgcG9zaXRpb24gPSBtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotICAgICAgICBp
ZiAocG9zaXRpb24gPiBtYXJrZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSkKLSAgICAgICAgICAgIHBv
c2l0aW9uID0gbWFya2VkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgIGF1dG8gbWFya2Vk
UmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgICAgIGF1dG8g
c3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtYXJrZWRSYW5nZS0+
c3RhcnQpOworICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG1hcmtlZFJhbmdlLT5lbmQpOworICAgICAgICBpZiAocG9zaXRpb24gPCBzdGFydFBv
c2l0aW9uKQorICAgICAgICAgICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgICAgICBp
ZiAocG9zaXRpb24gPiBlbmRQb3NpdGlvbikKKyAgICAgICAgICAgIHBvc2l0aW9uID0gZW5kUG9z
aXRpb247CiAgICAgICAgIGlmICh3a0dlc3R1cmVTdGF0ZSAhPSBHZXN0dXJlUmVjb2duaXplclN0
YXRlOjpCZWdhbikKLSAgICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25z
KG1hcmtlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCkpICE9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhtYXJrZWRSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCBwb3NpdGlvbikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25T
ZXQ8U2VsZWN0aW9uRmxhZ3M+IHsgfTsKKyAgICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3
ZWVuUG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkpICE9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3Np
dGlvbikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+
IHsgfTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmxhZ3MgPSBQaHJhc2VCb3VuZGFyeUNo
YW5nZWQ7CiAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
cG9zaXRpb24sIHBvc2l0aW9uKTsKQEAgLTI0ODMsNyArMjQ4NSw2IEBAIFdlYkF1dG9jb3JyZWN0
aW9uQ29udGV4dCBXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgIEVkaXRpbmdS
YW5nZSBtYXJrZWRUZXh0UmFuZ2U7CiAKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZTsKICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgY29uc3QgdW5zaWduZWQg
bWluQ29udGV4dFdvcmRDb3VudCA9IDM7CkBAIC0yNDk0LDE0ICsyNDk1LDEyIEBAIFdlYkF1dG9j
b3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgICAg
ICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgaWYgKGF1dG8gY29tcG9zaXRp
b25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGNvbXBvc2l0aW9uUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgc3RhcnRQb3NpdGlvbik7CiAgICAgICAgIFN0cmluZyBtYXJrZWRU
ZXh0QmVmb3JlOwotICAgICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QmVm
b3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7Ci0gICAgICAgIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZW5kUG9zaXRpb24sIGNvbXBvc2l0aW9u
UmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pKQorICAgICAgICAgICAgbWFya2VkVGV4dEJlZm9yZSA9
IHBsYWluVGV4dEZvckNvbnRleHQoeyBjb21wb3NpdGlvblJhbmdlLT5zdGFydCwgKnN0YXJ0IH0p
OwogICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEFmdGVyOwotICAgICAgICBpZiAocmFuZ2UpCi0g
ICAgICAgICAgICBtYXJrZWRUZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdl
dCgpKTsKKyAgICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRp
b24pKQorICAgICAgICAgICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh7
ICplbmQsIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCB9KTsKICAgICAgICAgbWFya2VkVGV4dCA9IG1h
cmtlZFRleHRCZWZvcmUgKyBzZWxlY3RlZFRleHQgKyBtYXJrZWRUZXh0QWZ0ZXI7CiAgICAgICAg
IGlmICghbWFya2VkVGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1hcmtlZFRleHRSYW5n
ZS5sb2NhdGlvbiA9IG1hcmtlZFRleHRCZWZvcmUubGVuZ3RoKCk7CkBAIC0yNjE3LDE0ICsyNjE2
LDE2IEBAIHN0YXRpYyB2b2lkIGZvY3VzZWRFbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQ
YWdlJiBwYWdlLCBFbGVtZW50JiBmb2N1c2VkRWxlCiAgICAgSW50UG9pbnQgY29uc3RyYWluZWRQ
b2ludCA9IGNvbnN0cmFpblBvaW50KGFkanVzdGVkUG9pbnQsIGZyYW1lLCBmb2N1c2VkRWxlbWVu
dCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQoY29uc3RyYWluZWRQb2ludCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGNvbXBvc2l0
aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgYXV0byBj
b21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAg
IGlmICghY29tcG9zaXRpb25SYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBvc2l0
aW9uIDwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAgICBwb3NpdGlv
biA9IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBlbHNlIGlmIChwb3Np
dGlvbiA+IGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgIHBvc2l0aW9u
ID0gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRp
b24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQp
OworICAgIGF1dG8gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29t
cG9zaXRpb25SYW5nZS0+ZW5kKTsKKyAgICBpZiAocG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKQor
ICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CisgICAgZWxzZSBpZiAocG9zaXRpb24g
PiBlbmRQb3NpdGlvbikKKyAgICAgICAgcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKICAgICBJbnRS
ZWN0IGNhcmV0UmVjdCA9IHZpZXcuY29udGVudHNUb1Jvb3RWaWV3KHBvc2l0aW9uLmFic29sdXRl
Q2FyZXRCb3VuZHMoKSk7CiAgICAgZmxvYXQgZGVsdGFYID0gYWJzKGNhcmV0UmVjdC54KCkgKyAo
Y2FyZXRSZWN0LndpZHRoKCkgLyAyKSAtIHJlcXVlc3QucG9pbnQueCgpKTsKICAgICBmbG9hdCBk
ZWx0YVlGcm9tVGhlVG9wID0gYWJzKGNhcmV0UmVjdC55KCkgLSByZXF1ZXN0LnBvaW50LnkoKSk7
CkBAIC00MjUzLDggKzQyNTQsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRp
bmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICBp
ZiAod2FudHNNYXJrZWRUZXh0UmVjdHMgJiYgY29tcG9zaXRpb25SYW5nZSkgewogICAgICAgICAg
ICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGNsaWVudCBoYXMgcmVxdWVzdGVkIG1hcmtlZCB0
ZXh0IHJlY3RzIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb250ZXh0CiAgICAgICAgICAgICAvLyByYW5n
ZSBlbmNvbXBhc3NlcyB0aGUgZW50aXJlIG1hcmtlZCB0ZXh0IHJhbmdlIHNvIHRoYXQgd2UgZG9u
J3QgcmV0dXJuIGEgdHJ1bmNhdGVkIHJlc3VsdC4KLSAgICAgICAgICAgIGF1dG8gY29tcG9zaXRp
b25TdGFydCA9IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgICAg
IGF1dG8gY29tcG9zaXRpb25FbmQgPSBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgYXV0byBjb21wb3NpdGlvblN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KTsKKyAgICAgICAgICAgIGF1dG8gY29tcG9z
aXRpb25FbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+
ZW5kKTsKICAgICAgICAgICAgIGlmIChjb250ZXh0QmVmb3JlU3RhcnQgPiBjb21wb3NpdGlvblN0
YXJ0KQogICAgICAgICAgICAgICAgIGNvbnRleHRCZWZvcmVTdGFydCA9IGNvbXBvc2l0aW9uU3Rh
cnQ7CiAgICAgICAgICAgICBpZiAoY29udGV4dEFmdGVyRW5kIDwgY29tcG9zaXRpb25FbmQpCkBA
IC00Mjc0LDkgKzQyNzUsOSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdD
b250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgIGNvbnRleHQu
Y29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoY29udGV4dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFu
Z2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwogICAgIGNvbnRleHQuc2VsZWN0ZWRUZXh0ID0gbWFr
ZVN0cmluZyhzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGVuZE9mUmFuZ2VPZklu
dGVyZXN0SW5TZWxlY3Rpb24pOwogICAgIGNvbnRleHQuY29udGV4dEFmdGVyID0gbWFrZVN0cmlu
ZyhlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBjb250ZXh0QWZ0ZXJFbmQpOwotICAg
IGlmIChjb21wb3NpdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0Lmdl
dCgpLCBjb21wb3NpdGlvblJhbmdlLmdldCgpKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
Y29tcG9zaXRpb25TdGFydChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25FbmQoY29tcG9zaXRpb25SYW5nZS0+ZW5k
UG9zaXRpb24oKSk7CisgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChy
YW5nZU9mSW50ZXJlc3QuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSku
cHRyKCkpKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOworICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25FbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQg
PSBtYWtlU3RyaW5nKGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kKTsKICAgICAgICAg
Y29udGV4dC5zZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0LmxvY2F0aW9uID0gZGlzdGFuY2VCZXR3
ZWVuUG9zaXRpb25zKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29tcG9zaXRp
b25TdGFydCk7CiAgICAgICAgIGNvbnRleHQuc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5n
dGggPSBbY29udGV4dC5zZWxlY3RlZFRleHQuc3RyaW5nIGxlbmd0aF07CkBAIC00MzAzLDEwICs0
MzA0LDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1
bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgICAgIGNvbnRleHQudGV4
dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5nZSgqY29udGV4dFJhbmdlLCAwKTsKICAgICB9
IGVsc2UgaWYgKHdhbnRzTWFya2VkVGV4dFJlY3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAg
ICAgICAgdW5zaWduZWQgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChh
dXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2lu
dChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKQotICAgICAgICAgICAgICAgIGNv
bXBvc2l0aW9uU3RhcnRPZmZzZXQgPSBXZWJDb3JlOjpwbGFpblRleHQoU2ltcGxlUmFuZ2UgeyBX
VEZNb3ZlKCpzdGFydCksIFdURk1vdmUoKmVuZCkgfSkubGVuZ3RoKCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChjb250ZXh0QmVmb3JlU3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKSkpCisgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0
ID0gV2ViQ29yZTo6cGxhaW5UZXh0KHsgV1RGTW92ZSgqc3RhcnQpLCBjb21wb3NpdGlvblJhbmdl
LT5zdGFydCB9KS5sZW5ndGgoKTsKICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0
ZXJSZWN0c0ZvclJhbmdlKCpjb21wb3NpdGlvblJhbmdlLCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggOGQ2YzQ4NzkxZDQ3ZGY5NGVmOWEyMTM4YjM4MjM1
NDAwMzViYTA0Yy4uZWNjZmI1MDFlNmVjMzIxODc2YTA2YTQwNDJmZGI5M2MxODA2ZDhhMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJ
T1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVJT1MubW0KQEAgLTE0MCw3ICsxNDAsNyBAQCAtIChDR1JlY3QpY2xvc2VzdENhcmV0UmVjdElu
TWFya2VkVGV4dFJhbmdlRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIAogICAgIGRvY3VtZW50LT51
cGRhdGVMYXlvdXQoKTsKIAotICAgIGF1dG8gbWFya2VkVGV4dFJhbmdlID0gZnJhbWUtPmVkaXRv
cigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKTsKKyAgICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9
IGZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgYXV0byBtYXJrZWRUZXh0
UmFuZ2VTZWxlY3Rpb24gPSBtYXJrZWRUZXh0UmFuZ2UgPyBWaXNpYmxlU2VsZWN0aW9uKCptYXJr
ZWRUZXh0UmFuZ2UpIDogVmlzaWJsZVNlbGVjdGlvbigpOwogCiAgICAgaWYgKCFtYXJrZWRUZXh0
UmFuZ2VTZWxlY3Rpb24uaXNSYW5nZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJh
bmdlLm1tCmluZGV4IGEwYjZiNzk2YTNhODI3OWQ4ODRjNjQ3MzAxNTM5MTM0NTA3MTYwZDguLmQw
ZDMwY2U5YTgxYjcxOGI5YWMyMjgwMzRlYjA1NzE1OTllZGQ3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NUmFuZ2UubW0KQEAgLTMwOSw0ICszMDksOSBAQCBET01SYW5nZSAqa2l0
KFdlYkNvcmU6OlJhbmdlKiB2YWx1ZSkKICAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2Vd
OwogfQogCitET01SYW5nZSAqa2l0KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdl
PiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UodmFsdWUpLmdldCgp
KTsKK30KKwogI3VuZGVmIElNUEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01SYW5nZUludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
UmFuZ2VJbnRlcm5hbC5oCmluZGV4IGFmNTU5MzI3MDkzMTY0NWJhNzJhZTFhMTk5MWFlZDkxNTA5
ZGZjZDcuLmU2ODE5YTVmOGQ1ODhkMmU5YjY4N2YwZDk3OWY2N2NiMjNhODlhMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaApAQCAtMjMsMTEg
KzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVS
YW5nZS5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTVJhbmdlLmg+CiAKLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIFJhbmdlOwotfQotCiBXZWJDb3JlOjpSYW5nZSogY29yZShET01SYW5n
ZSAqKTsKIERPTVJhbmdlICpraXQoV2ViQ29yZTo6UmFuZ2UqKTsKK0RPTVJhbmdlICpraXQoY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4
IGUxYjQyZWE2ZDJmYmVmZTNhMWVkZjExMzIyYzZkNWU4YjMwM2ZmNDUuLjZmMDhmYWFhOTUzNWM0
YWI5NzVmMjdiN2NiZjQyNTc2OTVmOGI0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC02MywyNCAr
NjMsMjQgQEAgcHJpdmF0ZToKICAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZp
bmFsOwogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3Qg
ZmluYWw7CiAKLSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmlu
YWw7CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mKSBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNv
cmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJh
bmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBX
ZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAg
Ym9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2Vi
Q29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRv
UmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7Cisg
ICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBm
aW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFu
Z2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvcklu
c2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwg
Ym9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CiAKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBi
b29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRB
cHBseVN0eWxlKCkgZmluYWw7CiAKLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRl
KFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkKSBmaW5h
bDsKKyAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNp
bXBsZVJhbmdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2Vk
KSBmaW5hbDsKIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgZmluYWw7CiAgICAgdm9pZCBk
aWRFbmRFZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5h
bDsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAg
dm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVj
dG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFz
dGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9y
PFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogCiAgICAgdm9pZCBzZXRJbnNlcnRpb25Q
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIFdlYkNvcmU6OkRPTVBhc3RlQWNj
ZXNzUmVzcG9uc2UgcmVxdWVzdERPTVBhc3RlQWNjZXNzKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsg
cmV0dXJuIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2U6OkRlbmllZEZvckdlc3R1cmU7
IH0KQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NQ
YXNzd29yZEVjaG8oKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdv
U3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9w
KFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYg
ZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSBmaW5hbDsKICAgICAKICAgICBib29sIHNob3VsZEVy
YXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUp
IGNvbnN0IGZpbmFsOwogICAgIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBT
dHJpbmcmKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA5YWIxYzI5ZDQ4Nzg3N2Q2ZTg1
ODM5ZjlkNWY0Yzg5MDY5ODEyOWIyLi5iZDk1YTY2NDhhMzAzMmMwNTdhOTgxZTA5NDY5MDgwZTg4
MTA2MzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0yMzQsMTAgKzIzNCw5IEBAIGludCBXZWJF
ZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIAogI2VuZGlmCiAKLWJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxkRGVsZXRlRE9NUmFuZ2U6
a2l0KHJhbmdlKV07CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3
YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZERlbGV0ZURPTVJhbmdlOmtpdChyYW5nZSld
OwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkK
QEAgLTI1NiwxMSArMjU1LDExIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc1NlbGVjdFRyYWls
aW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygp
LnNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJh
bmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQ
cm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsK
LSAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlKHN0eWxlLT5pc011
dGFibGUoKSA/IFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPihzdGF0aWNfY2FzdDxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSkgOiBzdHlsZS0+bXV0YWJsZUNvcHkoKSk7CiAgICAg
cmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93
ZWJWaWV3Ci0gICAgICAgIHNob3VsZEFwcGx5U3R5bGU6a2l0KCZtdXRhYmxlU3R5bGUtPmVuc3Vy
ZUNTU1N0eWxlRGVjbGFyYXRpb24oKSkgdG9FbGVtZW50c0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07
CisgICAgICAgIHNob3VsZEFwcGx5U3R5bGU6a2l0KCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1
cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpCisgICAgICAgIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtp
dChyYW5nZSldOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVGb250UGFuZWwoV2ViVmlldyAqd2Vi
VmlldykKQEAgLTI3OSwzMyArMjc4LDI5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBs
eVN0eWxlKCkKICAgICB1cGRhdGVGb250UGFuZWwobV93ZWJWaWV3KTsKIH0KIAotYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiByYW5nZSwgUmFu
Z2UqIHJhbmdlVG9CZVJlcGxhY2VkKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVS
YW5nZUFmdGVyRGVsZXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlVG9CZVJlcGxhY2VkKQogewogICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGlu
Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwogICAgICAgICBzaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZTpraXQocmFuZ2UpIHJlcGxhY2luZ1JhbmdlOmtpdChyYW5nZVRvQmVS
ZXBsYWNlZCldOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5n
KFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmco
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRp
dGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICBzaG91bGRC
ZWdpbkVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5nZSldOwotCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3
Om1fd2ViVmlldyBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQog
Ci1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCiti
b29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6bV93ZWJWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZEVuZEVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5nZSldOworICAgIHJldHVybiBbW21fd2ViVmll
dyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRFbmRF
ZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRv
ckluc2VydEFjdGlvbiBhY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0
VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgV2ViVmlldyogd2ViVmlldyA9
IG1fd2ViVmlldzsKICAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFu
Z2U6a2l0KHJhbmdlKSBnaXZlbkFjdGlvbjpraXQoYWN0aW9uKV07CiB9CiAKLWJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJh
bmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3Rp
bGxTZWxlY3RpbmcpCiB7CiAgICAgcmV0dXJuIFttX3dlYlZpZXcgX3Nob3VsZENoYW5nZVNlbGVj
dGVkRE9NUmFuZ2U6a2l0KGZyb21SYW5nZSkgdG9ET01SYW5nZTpraXQodG9SYW5nZSkgYWZmaW5p
dHk6a2l0KHNlbGVjdGlvbkFmZmluaXR5KSBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107
CiB9CkBAIC00MTEsMTIgKzQwNiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKQordm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mKQogewogICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBXZWJLaXQsIG9u
bHkgV2ViS2l0Mi4KIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2Fy
ZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJk
RGF0YSkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkK
IHsKICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgV2ViS2l0LCBvbmx5IFdlYktpdDIuCiB9CkBAIC01
NzcsOSArNTcyLDkgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbigpCiAKICNlbmRpZiAvLyBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1F
TlQpCiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUgKm5vZGUs
IFJhbmdlKiByZXBsYWNpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQor
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByZXBsYWNpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
IGdpdmVuQWN0aW9uKQogeyAKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTpraXQobm9kZSkg
cmVwbGFjaW5nRE9NUmFuZ2U6a2l0KHJlcGxhY2luZ1JhbmdlKSBnaXZlbkFjdGlvbjooV2ViVmll
d0luc2VydEFjdGlvbilnaXZlbkFjdGlvbl07CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0
aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6
a2l0KCZub2RlKSByZXBsYWNpbmdET01SYW5nZTpraXQocmVwbGFjaW5nUmFuZ2UpIGdpdmVuQWN0
aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWdpdmVuQWN0aW9uXTsKIH0KIAogdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb09yUmVkb1N0ZXAoVW5kb1N0ZXAmIHN0ZXAsIGJvb2wgaXNS
ZWRvKQpAQCAtODU2LDEwICs4NTEsMTAgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1z
VHdvU3RlcFBhc3RlKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50KQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJv
cChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlz
TW92ZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBp
c01vdmUpCiB7CiAgICAgaWYgKFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBlcmZvcm1Ud29TdGVwRHJvcDphdERlc3RpbmF0
aW9uOmlzTW92ZTopXSkKLSAgICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRl
Rm9yd2FyZGVyXSBwZXJmb3JtVHdvU3RlcERyb3A6a2l0KCZmcmFnbWVudCkgYXREZXN0aW5hdGlv
bjpraXQoJmRlc3RpbmF0aW9uKSBpc01vdmU6aXNNb3ZlXTsKKyAgICAgICAgcmV0dXJuIFtbbV93
ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBwZXJmb3JtVHdvU3RlcERyb3A6a2l0KCZm
cmFnbWVudCkgYXREZXN0aW5hdGlvbjpraXQoZGVzdGluYXRpb24pIGlzTW92ZTppc01vdmVdOwog
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtODg3LDcgKzg4Miw3IEBAIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5n
VmlldyBzdHJpCiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFuZ2UmLCBib29s
KQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdt
ZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sKQogewogICAgIHJldHVybiBmYWxzZTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDRjNTRj
NDQ0YWNmMTc4MTkwMmQ2NThhOTE1YTQ2Mjg4M2JiNTIxYTAuLjc2M2M3NzdjZTJiMDI2NmQ0MDkz
ZGFmY2FjMmE2MzYyNWYxYmJkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQpAQCAtNzIwLDEzICs3MjAsMTUgQEAgLSAoTlNSZWN0KV9jYXJldFJlY3RB
dFBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpQb3NpdGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVj
dGkKIAogLSAoTlNSZWN0KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQog
ewotICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJh
bmdlKGNvcmUocmFuZ2UpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gTlNaZXJv
UmVjdDsKKyAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0
Rm9yUmFuZ2UoKm1ha2VSYW5nZShjb3JlKHJhbmdlKSkpOwogfQogCiAtICh2b2lkKV9zY3JvbGxE
T01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZQogewogICAgIGJvb2wgaW5zaWRlRml4
ZWQgPSBmYWxzZTsgLy8gRklYTUU6IGdldCB2aWEgZmlyc3RSZWN0Rm9yUmFuZ2UoKS4KLSAgICBO
U1JlY3QgcmFuZ2VSZWN0ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsgICAg
CisgICAgTlNSZWN0IHJhbmdlUmVjdCA9IFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5n
ZV07CiAgICAgYXV0byogc3RhcnROb2RlID0gY29yZShbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsK
ICAgICAgICAgCiAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsK
QEAgLTc4NCw3ICs3ODYsNyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50
U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rp
b24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVy
biBraXQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAjZW5kaWYKIApAQCAtODUzLDcgKzg1NSw3IEBAIC0gKE5T
UmFuZ2UpX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogCiAtIChE
T01SYW5nZSAqKV9tYXJrRE9NUmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCku
bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0
cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcKQEAgLTExMDYsMTIg
KzExMDgsMTIgQEAgLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihD
R1BvaW50KWZpcnN0IHNlY29uZFBvaW50OihDR1BvaW50KXMKIHsKICAgICBhdXRvIGZpcnN0UG9z
aXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6Zmlyc3RdOwogICAgIGF1dG8g
c2Vjb25kUG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsK
LSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
KGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSk7CisgICAgcmV0dXJuIGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRp
b24sIHNlY29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogLSAoRE9NUmFu
Z2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JQb2ludDooQ0dQb2ludClwb2ludAogewotICAgIHJldHVy
biBraXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zp
c2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
OworICAgIHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xNDU0LDcgKzE0NTYsNyBAQCAtIChCT09M
KWlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQKIAogLSAoRE9NUmFuZ2UgKilzZWxlY3Rl
ZERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CiB9CiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eSBjbG9zZVR5cGlu
ZzooQk9PTCljbG9zZVR5cGluZwpAQCAtMTQ5Niw3ICsxNDk4LDcgQEAgLSAodm9pZClleHBhbmRT
ZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2Ug
KillbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICByZXR1cm4ga2l0
KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxm
KS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpOwog
fQogCiAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bgpAQCAtMTUyNiw3ICsxNTI4LDcgQEAgLSAodW5pY2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2Vs
ZWN0aW9uCiAKIC0gKERPTVJhbmdlICopd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9u
KCkud29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpKTsKIH0KIAogLSAoTlNTdHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKily
YW5nZQpAQCAtMTU4OSwxMiArMTU5MSwxMiBAQCAtIChCT09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0
CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91
bnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rp
b24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7CisgICAg
cmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNl
bGVjdGlvbihhbW91bnQpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3Vy
cmVudFNlbGVjdGlvbjooaW50KWFtb3VudAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0
aW9uKGFtb3VudCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlv
bigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpOwogfQogCiAtICh2
b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICop
ZWxlbWVudApAQCAtMTYxOCw3ICsxNjIwLDcgQEAgLSAoRE9NUmFuZ2UgKiltYXJrZWRUZXh0RE9N
UmFuZ2UKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJu
IGtpdChmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KGZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpOwogfQogCiAtICh2b2lk
KXNldE1hcmtlZFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5l
d1NlbFJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQppbmRleCAxMTFjZjhiZGMyOWRjNjFlMjhmODIyZTk1N2I5Mzg4MmE0Mjc5OWE1Li40ZTNh
MDhiMmRjNWQwNGJlODBmMTFjMjljYjIyOTkxMGI0ZTg4ZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTEzMzIsNyArMTMzMiw3IEBA
IC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0
IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zCiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7
CiAgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4g
Y29yZUZyYW1lID8ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSA6IG5pbDsKKyAgICByZXR1cm4g
Y29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkgOiBuaWw7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC02MzQ2LDcg
KzYzNDYsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBET01S
YW5nZSAqcmFuZ2UgPSBbZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07
CiAgICAgaWYgKCFyYW5nZSkgewogICAgICAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkgLT4gKDAsIDAsIDAsIDApIiwgdGhlUmFuZ2UubG9jYXRp
b24sIHRoZVJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAs
IDApOworICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKICAgICB9CiAgICAgCiAgICAgQVNTRVJU
KFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwpAQCAtNzA3NSw3ICs3MDc1LDcgQEAgLSAoTlNVSW50
ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBpbkRPTVJhbmdlOihE
T01SYW5nZSAqKXJhbmcKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmlu
ZywgY29yZShyYW5nZSksIGNvcmVPcHRpb25zKG9wdGlvbnMpLCBsaW1pdCwgbWFya01hdGNoZXMs
IDApOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQo
c3RyaW5nLCBtYWtlUmFuZ2UoY29yZShyYW5nZSkpLCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGlt
aXQsIG1hcmtNYXRjaGVzLCAwKTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0Fy
ZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCmlu
ZGV4IDFlM2I3OWQwMzgxYWU5OWQ2Y2EzNGVjYTIyZjU2MzlkNDhhM2E5NGUuLjgwMWJlZmVjNzZk
MDk2ZjkzZjBmNDhkNjNjZjg3ZGY5NWQ1NTFiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVy
Lm1tCkBAIC0xNzYsNyArMTc2LDcgQEAgLSAodm9pZClkb0NvbXBsZXRpb24KIAogICAgICAgICAv
LyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW19o
dG1sVmlldyBfZnJhbWVdOwotICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNyZWF0
ZUxpdmVSYW5nZShjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCkpOworICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNv
cmUoZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsK
ICAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3Vy
cmVudFNlbGVjdGlvbjpGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZAogICAgICAgICAg
ICAgZGlyZWN0aW9uOlNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQgZ3JhbnVsYXJpdHk6VGV4
dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4
ID0gW3dob2xlV29yZCBjbG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KaW5kZXggOGM3ZTdlZTAwZjdmMzE1MGQ4OTc3
NDNhMDcyNDA5NmIzODgyMTdjZS4uOTNiODM0NzdmYzhhNDJhZDNmNzRkMzY5ZTgxNzk0YmJlZmRh
MDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0
SXRlcmF0b3IubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0
SXRlcmF0b3IubW0KQEAgLTk1LDcgKzk1LDcgQEAgLSAoRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UK
ICAgICBhdXRvJiB0ZXh0SXRlcmF0b3IgPSAqX3ByaXZhdGUtPl90ZXh0SXRlcmF0b3I7CiAgICAg
aWYgKHRleHRJdGVyYXRvci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biBraXQoY3JlYXRlTGl2ZVJhbmdlKHRleHRJdGVyYXRvci5yYW5nZSgpKS5wdHIoKSk7CisgICAg
cmV0dXJuIGtpdCh0ZXh0SXRlcmF0b3IucmFuZ2UoKSk7CiB9CiAKIC8vIEZJWE1FOiBDb25zaWRl
ciBkZXByZWNhdGluZyB0aGlzIG1ldGhvZCBhbmQgY3JlYXRpbmcgb25lIHRoYXQgZG9lcyBub3Qg
cmVxdWlyZSBjb3B5aW5nIDgtYml0IGNoYXJhY3RlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggODVkNjk0M2UzNmJhZTYzN2EwZTA5YjU0NzlkYWIz
NWIzOWFhN2NjYy4uMDczM2Y1ZTA0NDRmNzlhZGQ3ZGI5N2NkYTE1ZDY5NzgyOGI2OTcyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtNDU5NCw3ICs0
NTk0LDcgQEAgLSAoV2ViVGV4dEl0ZXJhdG9yICopdGV4dEl0ZXJhdG9yRm9yUmVjdDooTlNSZWN0
KXJlY3QKICAgICBhdXRvIGludFJlY3QgPSBXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJlY3Qp
OwogICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGNvcmVGcmFtZS0+
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5taW5YTWluWUNvcm5lcigpKSwKICAgICAg
ICAgY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1heFhNYXhZQ29y
bmVyKCkpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0
b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkp
XSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5p
dFdpdGhSYW5nZTpraXQocmFuZ2UpXSBhdXRvcmVsZWFzZV07CiB9CiAKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKQEAgLTg0MTcsNyArODQxNyw3IEBAIC0gKERPTVJhbmdlICopZWRpdGFibGVE
T01SYW5nZUZvclBvaW50OihOU1BvaW50KXBvaW50CiAgICAgYXV0byogcGFnZSA9IGNvcmUoc2Vs
Zik7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQo
cGFnZS0+bWFpbkZyYW1lKCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2lu
dChbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKS5nZXQoKSk7CisgICAgcmV0
dXJuIGtpdChwYWdlLT5tYWluRnJhbWUoKS5lZGl0b3IoKS5yYW5nZUZvclBvaW50KFdlYkNvcmU6
OkludFBvaW50KFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXSkpKTsKIH0KIAog
LSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50
UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1Nl
bGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZs
YWcKQEAgLTg0NjUsNyArODQ2NSw3IEBAIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQog
ICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0
KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404184</attachid>
            <date>2020-07-13 15:15:51 -0700</date>
            <delta_ts>2020-07-13 18:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200713151550.patch</filename>
            <type>text/plain</type>
            <size>154366</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDkwMTkwZGE0YWNhMDNm
MTEwYmI2M2M5YWJhNDNiMWMzOTI5ZWYxZS4uN2E3ODg1ZDcwMWE4NjRkYTdlMzYyYjdhYWI0MzQw
M2VhY2I1NDRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTEzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmUtbGFuZGluZyByMjY0MjQyIHdpdGggY3Jh
c2ggZml4ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAppbmRleCBjOWQ3ZDlhNzRiNjNkZTBhMWIwMDAxNDI1M2IwZWM3ODEz
YTc0NjA2Li5lZDhmOGE5NDkwYzNhZDU2YTQ5YzZhMTJlOTYxNGI4NTQ2OTQ0ZmViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKQEAgLTMwNiw4ICszMDYsOCBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0
eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAg
ICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZSgqbWlzc3Bl
bGxpbmdSYW5nZSk7CisgICAgICAgICAgICBpZiAoY3JlYXRlTGl2ZVJhbmdlKCptaXNzcGVsbGlu
Z1JhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVM
aXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgICAgICAgICAg
ICAgcmV0dXJuICptaXNzcGVsbGluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChk
aXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXMpIHsKICAg
ICAgICAgZm9yIChhdXRvIHJpdCA9IG1pc3NwZWxsaW5ncy5yYmVnaW4oKTsgcml0ICE9IG1pc3Nw
ZWxsaW5ncy5yZW5kKCk7ICsrcml0KSB7CkBAIC0zMTUsOCArMzE1LDggQEAgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmIHMKICAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5n
ZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVNpbXBsZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChj
cmVhdGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICptaXNzcGVsbGluZ1Jhbmdl
OwogICAgICAgICB9CiAgICAgfQogCkBAIC02MDEsMTUgKzYwMSwxNCBAQCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1Jhbmdl
SW5EaXJlY3RpbwogICAgIAogICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjbG9zZXN0U3RyaW5n
UmFuZ2U7CiAgICAgZm9yIChhdXRvJiBzZWFyY2hTdHJpbmcgOiBzZWFyY2hTdHJpbmdzKSB7Ci0g
ICAgICAgIGlmIChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdl
T2ZTdHJpbmcoc2VhcmNoU3RyaW5nLCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpLnB0
cigpLCBmaW5kT3B0aW9ucykpIHsKLSAgICAgICAgICAgIGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9
IG1ha2VTaW1wbGVSYW5nZSgqc2VhcmNoU3RyaW5nUmFuZ2UpOworICAgICAgICBpZiAoYXV0byBz
ZWFyY2hTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHNlYXJjaFN0
cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25zKSkgewogICAgICAgICAgICAgaWYgKCFj
bG9zZXN0U3RyaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0g
Zm91bmRTdHJpbmdSYW5nZTsKKyAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAq
c2VhcmNoU3RyaW5nUmFuZ2U7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAv
LyBJZiBzZWFyY2hpbmcgYmFja3dhcmQsIHVzZSB0aGUgdHJhaWxpbmcgcmFuZ2UgZWRnZXMgdG8g
Y29ycmVjdGx5IGRldGVybWluZSB3aGljaAogICAgICAgICAgICAgICAgIC8vIHJhbmdlIGlzIGNs
b3Nlc3QuIFNpbWlsYXJseSwgaWYgc2VhcmNoaW5nIGZvcndhcmQsIHVzZSB0aGUgbGVhZGluZyBy
YW5nZSBlZGdlcy4KICAgICAgICAgICAgICAgICBhdXRvJiBjbG9zZXN0U3RyaW5nUG9zaXRpb24g
PSBpc0JhY2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmQgOiBjbG9zZXN0U3Ry
aW5nUmFuZ2UtPnN0YXJ0OwotICAgICAgICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRp
b24gPSBpc0JhY2t3YXJkU2VhcmNoID8gZm91bmRTdHJpbmdSYW5nZS5lbmQgOiBmb3VuZFN0cmlu
Z1JhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24g
PSBpc0JhY2t3YXJkU2VhcmNoID8gc2VhcmNoU3RyaW5nUmFuZ2UtPmVuZCA6IHNlYXJjaFN0cmlu
Z1JhbmdlLT5zdGFydDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIGNs
b3Nlc3RQb3NpdGlvbk9mZnNldCA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5vZmZzZXQ7CiAgICAg
ICAgICAgICAgICAgYXV0byBzZWFyY2hQb3NpdGlvbk9mZnNldCA9IGZvdW5kU3RyaW5nUG9zaXRp
b24ub2Zmc2V0OwpAQCAtNjE4LDcgKzYxNyw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvCiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBSYW5nZTo6Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKGNsb3Nlc3RDb250YWluZXJOb2RlLCBjbG9zZXN0UG9zaXRpb25P
ZmZzZXQsIHNlYXJjaENvbnRhaW5lck5vZGUsIHNlYXJjaFBvc2l0aW9uT2Zmc2V0KS5yZWxlYXNl
UmV0dXJuVmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoKCFpc0JhY2t3YXJkU2VhcmNoICYm
IHJlc3VsdCA+IDApIHx8IChpc0JhY2t3YXJkU2VhcmNoICYmIHJlc3VsdCA8IDApKQotICAgICAg
ICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOworICAg
ICAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqc2VhcmNoU3RyaW5nUmFuZ2U7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCmluZGV4IDFjZTQ0MjgxMjg0YmQ1OWM2Zjg0ZTI1MDk4OGEyOTIyNDk3
NmIzNGYuLjlmMmQ2NWQ3NDBkYjczOGY1OWY4MzBiYThjMWJmMGJmNjgyNGFjOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC02OTIsNyArNjkyLDcgQEAgc3Rh
dGljIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9u
Rm9yUGFyYW1ldGVyaXplZEF0dHIKIAogICAgIGlmIChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xh
c3M6W05TQXJyYXkgY2xhc3NdXSkgewogICAgICAgICBvcGVyYXRpb24udGV4dFJhbmdlcyA9IG1h
a2VWZWN0b3IobWFya2VyUmFuZ2VzLCBbd3JhcHBlcl0gKGlkIG1hcmtlclJhbmdlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKFt3cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlOm1hcmtlclJhbmdlXSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVJhbmdlKFt3cmFw
cGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1hcmtlclJhbmdlXSk7CiAgICAgICAgIH0pOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNzEwNWRiNWU5N2MzZjUyMWQ3ZTQ4
YzRlMjI1NjdmZGVmZGJhYzc4Zi4uYWY0MzJiNDk0M2ZiNGFiMjY2OWNjOGEwZmE1YTc3ZWNiNmI4
MzQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00NzMsNyArNDczLDcgQEAgc3RhdGlj
IGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgIGlm
ICghZnJhbWUgfHwgIXJvb3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBm
cmFtZS0+ZWRpdG9yKCkuc2hvdWxkQmVnaW5FZGl0aW5nKHJhbmdlT2ZDb250ZW50cygqcm9vdCku
cHRyKCkpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQmVnaW5FZGl0aW5nKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCkpOwogfQogCiBzdGF0aWMgYm9vbCBj
YW5BY2Nlc3NBbmNlc3Rvcihjb25zdCBTZWN1cml0eU9yaWdpbiYgYWN0aXZlU2VjdXJpdHlPcmln
aW4sIEZyYW1lKiB0YXJnZXRGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDliN2ExYTYyMTIx
OTVhMmU0NzQ4Y2IyOTcxOTQ0YzE2NjMyODAwOTYuLjllYTE0OWQyZjUxZGUyNGMzMzcxNjBiNTNh
ZjdjMWVkY2RjODhkMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTgzMywyNiArMTgzMywyNiBA
QCBGbG9hdFJlY3QgUmFuZ2U6OmFic29sdXRlQm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGlu
Z1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbgogICAgIHJldHVybiBib3VuZGluZ1JlY3QoQ29vcmRp
bmF0ZVNwYWNlOjpBYnNvbHV0ZSwgcmVjdE9wdGlvbnMpOwogfQogCi1TaW1wbGVSYW5nZSBtYWtl
U2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQorU2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNv
bnN0IFJhbmdlJiByYW5nZSkKIHsKICAgICByZXR1cm4geyB7IHJhbmdlLnN0YXJ0Q29udGFpbmVy
KCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkgfSwgeyByYW5nZS5lbmRDb250YWluZXIoKSwgcmFuZ2Uu
ZW5kT2Zmc2V0KCkgfSB9OwogfQogCi1TaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3Qg
UmVmPFJhbmdlPiYgcmFuZ2UpCitTaW1wbGVSYW5nZSBtYWtlUmFuZ2UoY29uc3QgUmVmPFJhbmdl
PiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShyYW5nZS5nZXQoKSk7Cisg
ICAgcmV0dXJuIG1ha2VSYW5nZShyYW5nZS5nZXQoKSk7CiB9CiAKLU9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KCpyYW5nZSk7CisgICAgcmV0dXJuIG1ha2VSYW5nZSgqcmFuZ2UpOwogfQogCi1PcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mIHJhbmdlKQor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICByZXR1
cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAogUmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhODYxOWNiOTQ2
MzQzNGU4Y2U4MWQyYjg0N2MzMjVhMDEyMDdlMTEwLi45MzViYmRhNDdiNzYxMDc5MDc3YzQxNjNl
MWM4OTk3NDgyNWQ5OWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMTc2LDEwICsxNzYsMTAgQEAgV0VC
Q09SRV9FWFBPUlQgUmVmPFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9kZSYpOwogV0VCQ09SRV9F
WFBPUlQgYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiBX
RUJDT1JFX0VYUE9SVCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqLCBjb25zdCBSYW5n
ZSopOwogCi1TaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKLVNpbXBs
ZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7Ci1PcHRpb25hbDxTaW1w
bGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlKik7Ci1PcHRpb25hbDxTaW1wbGVS
YW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mKTsKK1NpbXBsZVJhbmdl
IG1ha2VSYW5nZShjb25zdCBSYW5nZSYpOworU2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJl
ZjxSYW5nZT4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFu
Z2UoY29uc3QgUmFuZ2UqKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOwogCiBXRUJDT1JFX0VYUE9SVCBSZWY8UmFu
Z2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCA0YThkMDA0ZGU5MTI4OWEzNGFm
MGMxNTFiMzY5YzM1M2RmYWRiY2M5Li4yNjVjNDk3YjYwODI4M2RiMTFiZTNmMDdmNjRkZWQ3NTNh
NjQxNWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIwIEBA
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUp
CiAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50
LCBvZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShj
b25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgc3RhcnQsIGNvbnN0IE9wdGlvbmFsPEJvdW5k
YXJ5UG9pbnQ+JiBlbmQpCit7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgKnN0YXJ0LCAqZW5kIH0gfTsKK30KKwor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYm
IHN0YXJ0LCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0
IHx8ICFlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBX
VEZNb3ZlKCpzdGFydCksIFdURk1vdmUoKmVuZCkgfSB9OworfQorCiBTaW1wbGVSYW5nZSBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4geyBt
YWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhub2RlKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRl
eCA3MGU3YzQyNTFjZGRmMzE3YjQ5ZDlhYTJkYzQyZTZkNDU0N2E3NGRkLi4wMzc3ODBhNjIyNDkx
ZTc1NGQwNTBlMmFmYWQzMGUxNDk2Mjk4ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApA
QCAtNDYsMTEgKzQ2LDE0IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgV0VCQ09SRV9FWFBP
UlQgU2ltcGxlUmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOwogCiAgICAg
Ly8gQ29udmVuaWVuY2Ugb3ZlcmxvYWRzIHRvIGhlbHAgd2l0aCB0cmFuc2l0aW9uIGZyb20gdXNp
bmcgYSBsb3Qgb2YgbGl2ZSByYW5nZXMuCi0gICAgLy8gRklYTUU6IE9uY2UgdHJhbnNpdGlvbiBp
cyBvdmVyLCByZW1vdmUgYW5kIGNoYW5nZSBjYWxsZXJzIHRvIHVzZSBtYWtlU2ltcGxlUmFuZ2Ug
aW5zdGVhZC4KKyAgICAvLyBGSVhNRTogT25jZSB0cmFuc2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBh
bmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VSYW5nZSBpbnN0ZWFkLgogICAgIFdFQkNPUkVf
RVhQT1JUIFNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiAgICAgU2ltcGxlUmFuZ2UoY29uc3Qg
UmVmPFJhbmdlPiYpOwogfTsKIAorV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IG1ha2VSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYsIGNvbnN0IE9wdGlvbmFs
PEJvdW5kYXJ5UG9pbnQ+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
bWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYsIE9wdGlvbmFsPEJvdW5kYXJ5UG9p
bnQ+JiYpOworCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBlMmU4OTRjYjkz
NzljNDNhMzMzYmNiM2YwODMzMjAxNDMzZDdmMjMwLi45YWMyZTlkODYxNmRkNmEzYzE0YWYwMzU1
MjJjMzBlNjBlNzEzMTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3Rh
cnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dD
b3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3Jl
YXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgbnVsbHB0cik7CisgICAgICAgIG1fZG9j
dW1lbnQuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7
IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVu
dCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRS
YW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIFdURjo6bnVsbG9wdCk7CiAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTY1Myw3
ICs2NTMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9u
QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQogICAgIGF1dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAg
YXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0
aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0
aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKCFzZWxlY3Rp
b24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5nLCAqc2VsZWN0
aW9uLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IHNlbGVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSgqc2VsZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKSkKICAgICAgICAgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVz
Rm9yTWFya2VyKCptYXJrZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMTEyZjk3YjJhMGI2NTQ2MjU0NjYyODgyNjdlNjMz
YmRiYmZmYjVmMS4uODcwYzRkYmI2OGQzODBmOWExYjgxYTBjMGU1ZjEzYWEzMjc0YTRmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CkBAIC03NDksOSArNzQ5LDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBh
cmFncmFwaHMoKQogICAgIAogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZG9jdW1lbnQoKS5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCks
IHJhbmdlVG9CZVJlcGxhY2VkLnB0cigpKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCku
Y2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLCByYW5nZVRvQmVSZXBs
YWNlZCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdp
bGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJl
cXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKICAgICAvLyByZW1vdmFscyB0aGF0IGl0
IGRvZXMgY2F1c2UgdGhlIGluc2VydGlvbiBvZiAqYW5vdGhlciogcGxhY2Vob2xkZXIuCiAgICAg
Ym9vbCBuZWVkUGxhY2Vob2xkZXIgPSBtX25lZWRQbGFjZWhvbGRlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCBjYTY4OGFlNDk1YmFjMWQ5MjE3NzBiZjQzNWZjZmMzZjdlMmIwM2Rj
Li5hNGFlMThjYmI3ZDI1MGM4ZGVhNjMyYzZhMWVmZDYyYzYxYmY3OWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCkBAIC01MDcsMjEgKzUwNywxOCBAQCBib29sIEVkaXRvcjo6Y2FuRGVs
ZXRlKCkgY29uc3QKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCi1ib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2Uo
UmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZVJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9IHJh
bmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLT5l
bmRDb250YWluZXIoKTsKLSAgICAKLSAgICBpZiAoIXN0YXJ0Q29udGFpbmVyLmhhc0VkaXRhYmxl
U3R5bGUoKSB8fCAhZW5kQ29udGFpbmVyLmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAoIXJh
bmdlLnN0YXJ0LmNvbnRhaW5lci0+aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFyYW5nZS5lbmQuY29u
dGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChyYW5nZS0+Y29sbGFwc2VkKCkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
KHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXMgPSBzdGFydC5wcmV2aW91cygpOworICAgIGlmIChyYW5nZS5jb2xsYXBz
ZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc29tZXRpbWVzIGFsbG93IGRlbGV0aW9ucyBh
dCB0aGUgc3RhcnQgb2YgZWRpdGFibGUgcm9vdHMsIGxpa2Ugd2hlbiB0aGUgY2FyZXQgaXMgaW4g
YW4gZW1wdHkgbGlzdCBpdGVtLgotICAgICAgICBpZiAocHJldmlvdXMuaXNOdWxsKCkgfHwgcHJl
dmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVt
ZW50KCkgIT0gc3RhcnRDb250YWluZXIucm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICBh
dXRvIHByZXZpb3VzID0gVmlzaWJsZVBvc2l0aW9uIHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLnN0YXJ0KSwgRE9XTlNUUkVBTSB9LnByZXZpb3VzKCk7CisgICAgICAgIGlmIChw
cmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSByYW5nZS5zdGFydC5jb250YWluZXItPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTU4LDcgKzU1NSw3IEBAIGJvb2wgRWRpdG9yOjpk
ZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFu
dWxhcml0eSBnCiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRp
b24oKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzaG91bGRBZGRUb0tpbGxS
aW5nKQotICAgICAgICAgICAgICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgp
LmdldCgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgICAgICAgICAg
ICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgpLCBLaWxsUmluZ0luc2VydGlv
bk1vZGU6OkFwcGVuZFRleHQpOwogICAgICAgICAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0
RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVsZXRlKCkpOwogICAgICAgICAgICAgLy8gSW1wbGljaXRs
eSBjYWxscyByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKS4KICAgICAgICAg
fQpAQCAtNjI3LDcgKzYyNCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0QnlwYXNz
aW5nREhUTUwoKQogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewogICAgIFN0cmluZyB0ZXh0ID0gcmVhZFBsYWluVGV4
dEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwotICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3Vs
ZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBh
c3RlZCkpCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgY2FuU21hcnRSZXBsYWNlV2l0
aFBhc3RlYm9hcmQocGFzdGVib2FyZCkpOwogfQogCkBAIC02NTIsNyArNjQ5LDcgQEAgYm9vbCBF
ZGl0b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSAmJiBwYXN0ZWJvYXJkLmNhblNtYXJ0UmVwbGFjZSgpOwogfQogCi1ib29sIEVkaXRv
cjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdl
KiByZXBsYWNpbmdET01SYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQorYm9v
bCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNjYxLDcgKzY1OCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNl
cnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RP
CiAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KGNoaWxkKSAmJiBmcmFnbWVudC5sYXN0Q2hpbGQo
KSA9PSBjaGlsZCkKICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0YSgpLCByZXBsYWNpbmdET01SYW5nZSwg
Z2l2ZW5BY3Rpb24pOwogCi0gICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnROb2RlKCZm
cmFnbWVudCwgcmVwbGFjaW5nRE9NUmFuZ2UsIGdpdmVuQWN0aW9uKTsKKyAgICByZXR1cm4gY2xp
ZW50KCktPnNob3VsZEluc2VydE5vZGUoZnJhZ21lbnQsIHJlcGxhY2luZ0RPTVJhbmdlLCBnaXZl
bkFjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBs
YWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxl
LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJs
b2NrcXVvdGVIYW5kbGluZykKQEAgLTcyNCwyNyArNzIxLDIxIEBAIHZvaWQgRWRpdG9yOjpyZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxl
Y3RSZXBsCiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRSZXBs
YWNlIHNtYXJ0UmVwbGFjZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0
ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZTo6WWVzLCBl
ZGl0aW5nQWN0aW9uKTsKKyAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLCBzZWxlY3RSZXBs
YWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxlOjpZZXMsIGVkaXRpbmdBY3Rpb24pOwog
fQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAotYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKK2Jvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKSBjb25zdAogewotICAgIGlmICghcmFuZ2UgfHwg
cmFuZ2UtPmNvbGxhcHNlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYg
KCFjYW5EZWxldGVSYW5nZShyYW5nZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UocmFuZ2UpOworICAg
IHJldHVybiByYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZCgpICYmIGNhbkRlbGV0ZVJhbmdlKCpy
YW5nZSkgJiYgY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKCpyYW5nZSk7
CiB9CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTENvcHkoKQpAQCAtNzYzLDcgKzc1NCw3IEBAIGJv
b2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2
ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpD
dXQpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKK2Jvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QK
IHsKICAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91
bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2Vy
dEFjdGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk4MCw3ICs5NzEsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxl
bWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEpOwogfQogICAgIAotYm9vbCBFZGl0
b3I6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdl
KQorYm9vbCBFZGl0b3I6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBz
dHlsZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogeyAgIAogICAgIHJldHVybiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgcmFuZ2UpOwogfQpAQCAtMTAxMSw3ICsxMDAyLDcg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0Vt
cHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFj
bGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVS
YW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlT
dHlsZSgqc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0
aW5nQWN0aW9uKTsKIH0KQEAgLTEwMjIsNyArMTAxMyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlVG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0
ZXh0IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICgh
Y2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhS
ZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCisg
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0
eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGFwcGx5U3R5bGUoV1RGTW92ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24sIGNvbG9yRmlsdGVyTW9k
ZSk7CkBAIC0xMDMzLDcgKzEwMjQsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHls
ZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZQogICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYm
IGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKCpzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3Jh
cGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9CiAKQEAgLTEyNjcsNyArMTI1OCw3IEBA
IGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRU
ZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dCh0ZXh0LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBwYXNzIGZhbHNlIHRvIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKCkg
dG8gbm90IHJlbW92ZSBtYXJrZXJzIGlmCkBAIC0xMzI2LDcgKzEzMTcsNyBAQCBib29sIEVkaXRv
cjo6aW5zZXJ0TGluZUJyZWFrKCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5n
ZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2Vy
dFRleHQoIlxuIl9zLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xMzQ2LDcgKzEzMzcsNyBAQCBib29s
IEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogICAgIAotICAgIGlmICgh
c2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiJfcywgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBWaXNpYmxl
UG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpOwpAQCAtMTQwNiwxMCArMTM5NywxMCBAQCB2b2lkIEVkaXRvcjo6cG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZp
cwogCiB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIg
YWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgp
OwotICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb24uZ2V0KCkpOwor
ICAgIGF1dG8gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIHdpbGxXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb24pOwogICAgIGlmIChhY3Rpb24gPT0gQ3V0QWN0aW9u
KSB7Ci0gICAgICAgIGlmICghc2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLmdldCgpKSkKKyAg
ICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRy
dWUpOwpAQCAtMTQzNCw3ICsxNDI1LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHko
RWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICAgICAgICAgIHdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxz
ZQogICAgICAgICAgICAgLy8gRklYTUU6IERlbGV0ZSBhZnRlciA8aHR0cDovL3dlYmtpdC5vcmcv
Yi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRl
KCksICptX2RvY3VtZW50LmZyYW1lKCksIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNm
ZXIpOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndy
aXRlU2VsZWN0aW9uKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKS5nZXQoKSwgY2FuU21hcnRD
b3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZv
ckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTE1MjYsNyArMTUx
Nyw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtRGVsZXRlKCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBLaWxs
UmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgIGFkZFJhbmdlVG9LaWxsUmluZygq
c2VsZWN0ZWRSYW5nZSgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAg
IGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpKTsK
IAogICAgIC8vIGNsZWFyIHRoZSAic3RhcnQgbmV3IGtpbGwgcmluZyBzZXF1ZW5jZSIgc2V0dGlu
ZywgYmVjYXVzZSBpdCB3YXMgc2V0IHRvIHRydWUKQEAgLTE3ODQsMTIgKzE3NzUsMTIgQEAgdm9p
ZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCiAKICNlbmRpZgog
Ci1ib29sIEVkaXRvcjo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIEVkaXRv
cjo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0
dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRFbmRFZGl0aW5nKHJhbmdlKTsKIH0KIAot
Ym9vbCBFZGl0b3I6OnNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIEVkaXRv
cjo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBy
ZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZSk7CiB9
CkBAIC0xODQxLDcgKzE4MzIsNyBAQCB2b2lkIEVkaXRvcjo6ZGlkRW5kRWRpdGluZygpCiAgICAg
ICAgIGNsaWVudCgpLT5kaWRFbmRFZGl0aW5nKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjp3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqIHJhbmdlKQordm9pZCBFZGl0b3I6OndpbGxX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlKQogewogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPndpbGxXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChyYW5nZSk7CkBAIC0xOTI0LDE0ICsxOTE1LDE0IEBAIFdyaXRp
bmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0
KCkgY29uc3QKIAogdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKIHsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gY29tcG9zaXRpb25SYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBj
b21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIC8vIFRoZSBjb21wb3NpdGlvbiBjYW4gc3RhcnQgaW5zaWRlIGEgY29tcG9zZWQgY2hh
cmFjdGVyIHNlcXVlbmNlLCBzbyB3ZSBoYXZlIHRvIG92ZXJyaWRlIGNoZWNrcy4KICAgICAvLyBT
ZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwotICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRh
dGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAg
c2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihyYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPmVuZCkp
OwogICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9
KTsKIH0KIApAQCAtMjQ4NSw5ICsyNDc2LDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAg
ICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3Bl
bGxpbmcpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50
V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
KTsKKyAgICBhdXRvIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3Jk
KHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBS
aWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRq
YWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdl
KGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwg
Y3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSk7CisgICAgbWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdv
cmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFjZW50V29yZFJhbmdlKTsKICNlbHNlCiAj
aWYgIVVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAgICBVTlVTRURfUEFSQU0oZG9S
ZXBsYWNlbWVudCk7CkBAIC0yNTcyLDcgKzI1NjMsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0
LAogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNhbiwgcmVzcGVjdGluZyBib3VuZGFy
aWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQuCiAgICAgICAgIGZ1bGxTZW50ZW5j
ZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpmdWxsU2Vu
dGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAgICBzcGVsbENoZWNr
aW5nUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNwZWxs
Q2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgbWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBj
cmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFj
ZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGZ1bGxTZW50ZW5jZVJhbmdlKSk7CisgICAg
ICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5n
T3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgZnVsbFNlbnRl
bmNlUmFuZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNTgwLDcgKzI1NzEsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDaGVj
ayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5n
ZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZTsKICAgICBtYXJr
TWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0
V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeSkpLCBtaXNzcGVsbGluZ1JhbmdlKTsKIAogICAgIC8vIEF1dG9jb3JyZWN0IHRoZSBtaXNz
cGVsbGVkIHdvcmQuCkBAIC0yNTk5LDcgKzI1OTAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0
LAogICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9kb2N1bWVudC5lZGl0b3IoKS5z
aG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQu
ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGlu
Z1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0
b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5v
LCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogCkBAIC0yNjE2LDcgKzI2MDcsNyBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LAogI2VuZGlmCiB9CiAgICAgCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wg
Y2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rpb24gYWxyZWFkeSBl
eHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCkBAIC0yNjQ0LDkgKzI2MzUsMTEgQEAgdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uLCBib28KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFRleHRDaGVja2lu
Z0hlbHBlciBjaGVja2VyKCpjbGllbnQoKSwgKnNlYXJjaFJhbmdlKTsKLSAgICBpZiAoY2hlY2tT
cGVsbGluZykKLSAgICAgICAgY2hlY2tlci5tYXJrQWxsTWlzc3BlbGxpbmdzKGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7Ci0gICAgZWxzZSBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisg
ICAgaWYgKGNoZWNrU3BlbGxpbmcpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3Nw
ZWxsaW5nTGl2ZVJhbmdlOworICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGluZ3MoZmly
c3RNaXNzcGVsbGluZ0xpdmVSYW5nZSk7CisgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9
IG1ha2VSYW5nZShmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlKTsKKyAgICB9IGVsc2UgaWYgKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICBjaGVja2VyLm1hcmtBbGxCYWRHcmFt
bWFyKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOwpAQCAtMjY3NCwxOCAr
MjY2NywxOCBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5v
ZGUoKSBjb25zdAogICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIH0K
IAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCit2b2lkIEVk
aXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogICAgIG1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCB0cnVlLCBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOwogfQogICAgIAogdm9pZCBFZGl0b3I6Om1hcmtCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlz
c3BlbGxpbmdSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlOwogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCBmYWxz
ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+
IHRleHRDaGVja2luZ09wdGlvbnMsIFJlZlB0cjxSYW5nZT4mJiBzcGVsbGluZ1JhbmdlLCBSZWZQ
dHI8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGdy
YW1tYXJSYW5nZSkKK3ZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25z
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5nUmFuZ2UsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCiB7CiAgICAgaWYgKHBsYXRmb3JtRHJpdmVu
VGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MTAsOCArMjcwMyw4
IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgaWYgKCFpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKCZlZGl0YWJsZU5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJhbmdl
VG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gZ3JhbW1hclJhbmdlLnJlbGVhc2VOb25OdWxs
KCkgOiBzcGVsbGluZ1JhbmdlLnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgVGV4dENoZWNraW5nUGFy
YWdyYXBoIHBhcmFncmFwaFRvQ2hlY2socmFuZ2VUb0NoZWNrLmdldCgpKTsKKyAgICBhdXRvJiBy
YW5nZVRvQ2hlY2sgPSBzaG91bGRNYXJrR3JhbW1hciA/ICpncmFtbWFyUmFuZ2UgOiAqc3BlbGxp
bmdSYW5nZTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoVG9DaGVjayhjcmVh
dGVMaXZlUmFuZ2UocmFuZ2VUb0NoZWNrKSk7CiAgICAgaWYgKHBhcmFncmFwaFRvQ2hlY2suaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MTksOCArMjcxMiw4IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxU
ZXh0Q2hlY2tpbmdUeXBlCiAKICAgICAvLyBJbiBhc3luY2hyb25vdXMgbW9kZSwgd2UgaW50ZW50
aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgtd2lkZSBzZW50ZW5jZS4KICAgICBjb25zdCBhdXRvIHJl
c29sdmVkT3B0aW9ucyA9IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhlZGl0YWJsZU5vZGUs
IHRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIGF1dG8gdGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBh
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gbWFrZVJlZigqYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSkgOiByYW5nZVRvQ2hlY2suY29weVJlZigpOwotICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxs
Q2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNz
SW5jcmVtZW50YWwsIGFzeW5jaHJvbm91cyA/IG1ha2VSZWYocGFyYWdyYXBoVG9DaGVjay5wYXJh
Z3JhcGhSYW5nZSgpKSA6IFdURk1vdmUocmFuZ2VUb0NoZWNrKSwgV1RGTW92ZSh0ZXh0UmVwbGFj
ZW1lbnRSYW5nZSksIHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgYXV0
byYgdGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gKmF1
dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UgOiByYW5nZVRvQ2hlY2s7CisgICAgYXV0byByZXF1ZXN0
ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2lu
Z1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gUmVmPFJhbmdlPiB7IHBhcmFncmFw
aFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSB9IDogY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9DaGVj
ayksIGNyZWF0ZUxpdmVSYW5nZSh0ZXh0UmVwbGFjZW1lbnRSYW5nZSksIHBhcmFncmFwaFRvQ2hl
Y2sucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTI3NTMsOSArMjc0Niw5IEBAIHN0YXRpYyBib29sIGlzQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50VHlwZShUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhSYW5nZSYgcmFuZ2VU
b1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit2b2lkIEVkaXRvcjo6cmVwbGFj
ZVJhbmdlRm9yU3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb1JlcGxhY2Us
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0gICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCktPmFwcGx5KCk7CisgICAg
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRv
UmVwbGFjZSksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKIH0KIAogc3RhdGljIHZvaWQgY29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2lu
Z1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJlc3VsdENoYXJhY3RlclJhbmdlKQpAQCAt
Mjg5NSw3ICsyODg4LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNw
ZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAg
ICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBp
ZiAoY2FuRWRpdFJpY2hseSgpKQogICAgICAgICAgICAgICAgICAgICBDcmVhdGVMaW5rQ29tbWFu
ZDo6Y3JlYXRlKGRvY3VtZW50KCksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVwbGFjZW1lbnQsIHJh
bmdlVG9SZXBsYWNlLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkgeworICAgICAg
ICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlbWVu
dCwgbWFrZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkp
IHsKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsg
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
IHsKQEAgLTI5NDgsMTIgKzI5NDEsMTIgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxh
Y2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgaWYgKHJlcGxhY2Vk
U3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNob3Vs
ZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQorICAgIGF1dG8gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwor
ICAgIGlmICghc2VsZWN0aW9uIHx8ICFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBz
ZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJp
bmcsICpzZWxlY3Rpb24pOwotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNl
bGVjdGlvbik7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGlvbikpOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNl
ZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0
aW9uOjpJbnNlcnQpOwogICAgIGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdl
KENoYXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5n
Lmxlbmd0aCgpKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCwgU3RyaW5nKCkpOwpAQCAtMjk3OSwxMSArMjk3MiwxMSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlYwogICAgICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCkpCiAgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChUZXh0Q2hlY2tp
bmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgYXV0byBzcGVsbENoZWNraW5nUmFuZ2UgPSBzcGVs
bGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxp
dmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2lu
Z1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hlY2tpbmdSYW5nZSwgc3BlbGxDaGVja2luZ1Jh
bmdlLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Cisg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKICAgICBtYXJr
TWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwog
ICAgIGlmIChtYXJrR3JhbW1hcikKICAgICAgICAgbWFya0JhZEdyYW1tYXIoZ3JhbW1hclNlbGVj
dGlvbik7CkBAIC0zMDg2LDIzICszMDc5LDE4IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2Nv
cnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBv
c2l0aW9uKHBvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRp
dG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRv
d1BvaW50KQogewogICAgIGF1dG8gZG9jdW1lbnQgPSBtX2RvY3VtZW50LmZyYW1lKCktPmRvY3Vt
ZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0
byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1
dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndp
bmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAgIGF1dG8gc2VsZWN0aW9uID0gVmlzaWJs
ZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSB9
OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBWaXNpYmxlU2Vs
ZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lVmlldy0+d2luZG93
VG9Db250ZW50cyh3aW5kb3dQb2ludCkpIH0udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogdm9p
ZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3Jv
bGxBbGlnbm1lbnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0ZW50T3B0aW9uIHJldmVhbEV4dGVudE9w
dGlvbikKQEAgLTMxMjksMTcgKzMxMTcsMTYgQEAgdm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICAg
ICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50KTsKIH0KIAotUmVmUHRyPFJhbmdl
PiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEVkaXRvcjo6Y29tcG9zaXRpb25SYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NvbXBvc2l0
aW9uTm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jb21wb3NpdGlvbk5vZGUtPmxlbmd0aCgp
OwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4obV9jb21wb3NpdGlvblN0YXJ0LCBsZW5n
dGgpOwotICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBtX2NvbXBv
c2l0aW9uRW5kKSwgbGVuZ3RoKTsKLSAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgZWFybHkgcmV0
dXJuIG5lZWVkPworICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6Y2xhbXAobV9jb21wb3NpdGlvbkVu
ZCwgc3RhcnQsIGxlbmd0aCk7CiAgICAgaWYgKHN0YXJ0ID49IGVuZCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobV9jb21wb3NpdGlvbk5vZGUtPmRv
Y3VtZW50KCksIG1fY29tcG9zaXRpb25Ob2RlLmdldCgpLCBzdGFydCwgbV9jb21wb3NpdGlvbk5v
ZGUuZ2V0KCksIGVuZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHsgeyB7ICptX2NvbXBvc2l0aW9uTm9kZSwgc3RhcnQgfSwgeyAqbV9jb21wb3NpdGlvbk5vZGUs
IGVuZCB9IH0gfTsKIH0KIAogYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVu
c2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGlvbkVuZCkgY29uc3QKQEAg
LTMyMDEsNyArMzE4OCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIH0KIAogICAg
IC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgotICAgIGlmICghc2hvdWxkSW5z
ZXJ0VGV4dCh0cmFuc3Bvc2VkLCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBl
ZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRyYW5zcG9zZWQsIG5ld1NlbGVjdGlvbi5m
aXJzdFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm47
CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRyYW5zcG9zZWQsIFNlbGVjdFJlcGxhY2Vt
ZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIH0KQEAgLTMz
NTcsMTMgKzMzNDQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlQ2FyZXRXaWR0aChJ
bnRSZWN0JiByZWN0KQogICAgICAgICByZWN0LnNldEhlaWdodCgwKTsKIH0KIAotSW50UmVjdCBF
ZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKK0ludFJlY3QgRWRp
dG9yOjpmaXJzdFJlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7
Ci0gICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICByYW5nZS5z
dGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0VmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwor
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNKTsKIAotICAgIGlmIChyYW5nZS0+
Y29sbGFwc2VkKCkpIHsKKyAgICBpZiAocmFuZ2UuY29sbGFwc2VkKCkpIHsKICAgICAgICAgLy8g
RklYTUU6IEdldHRpbmcgY2FyZXQgcmVjdCBhbmQgcmVtb3ZpbmcgY2FyZXQgd2lkdGggaXMgYSB2
ZXJ5IHJvdW5kYWJvdXQgd2F5IHRvIGdldCBjb2xsYXBzZWQgcmFuZ2UgbG9jYXRpb24uCiAgICAg
ICAgIC8vIEluIHBhcnRpY3VsYXIsIHdpZHRoIGFkanVzdG1lbnQgZG9lc24ndCB3b3JrIGZvciBy
b3RhdGVkIHRleHQuCiAgICAgICAgIEludFJlY3Qgc3RhcnRDYXJldFJlY3QgPSBSZW5kZXJlZFBv
c2l0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uKS5hYnNvbHV0ZVJlY3QoKTsKQEAgLTMzNzEsMTAg
KzMzNTgsMTAgQEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5n
ZSkgY29uc3QKICAgICAgICAgcmV0dXJuIHN0YXJ0Q2FyZXRSZWN0OwogICAgIH0KIAotICAgIFZp
c2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPmVuZFBvc2l0aW9uKCksIFVQ
U1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpLCBVUFNUUkVBTSk7CiAKICAgICBpZiAoaW5T
YW1lTGluZShzdGFydFZpc2libGVQb3NpdGlvbiwgZW5kVmlzaWJsZVBvc2l0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSkpKTsKKyAgICAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1
YWRzKHJhbmdlKSkpOwogCiAgICAgTGF5b3V0VW5pdCBleHRyYVdpZHRoVG9FbmRPZkxpbmU7CiAg
ICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IFJlbmRlcmVkUG9zaXRpb24oc3RhcnRWaXNpYmxl
UG9zaXRpb24pLmFic29sdXRlUmVjdCgmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKQEAgLTM0MDAs
NyArMzM4Nyw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWCiAgICAgaWYgKG1fZG9jdW1lbnQu
ZnJhbWUoKSAmJiBtX2RvY3VtZW50LmZyYW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIGNsaWVu
dCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5n
ZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5n
ZShuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGFmZmluaXR5LCBzdGls
bFNlbGVjdGluZyk7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBuZXdTZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC0zNDg3LDcgKzM0NzQsNyBAQCBib29s
IEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0
aW9ucykKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKIAotICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3Ry
aW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgp
LCBvcHRpb25zKTsKKyAgICBhdXRvIHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQs
IHNlbGVjdGlvbi5maXJzdFJhbmdlKCksIG9wdGlvbnMpOwogICAgIGlmICghcmVzdWx0UmFuZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQ5OSwxMDYgKzM0ODYsMTAyIEBAIGJvb2wg
RWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRp
b25zKQogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5k
T3B0aW9ucyBvcHRpb25zKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0
cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
ZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAodGFyZ2V0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICAvLyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHJlZmVyZW5jZSByYW5n
ZSwgaWYgdGhlcmUncyBhIHJlZmVyZW5jZSByYW5nZSB0aGF0J3Mgbm90IGluIHNoYWRvdyBjb250
ZW50LiBXaGljaCBlZGdlCiAgICAgLy8gaXMgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUg
c2VhcmNoaW5nIGZvcndhcmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rp
b24gaXMgc2V0LgotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRz
KGRvY3VtZW50KCkpKTsKIAogICAgIGJvb2wgZm9yd2FyZCA9ICFvcHRpb25zLmNvbnRhaW5zKEJh
Y2t3YXJkcyk7CiAgICAgYm9vbCBzdGFydEluUmVmZXJlbmNlUmFuZ2UgPSByZWZlcmVuY2VSYW5n
ZSAmJiBvcHRpb25zLmNvbnRhaW5zKFN0YXJ0SW5TZWxlY3Rpb24pOworICAgIGF1dG8gc2hhZG93
VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydENvbnRhaW5l
cigpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOworCisgICAgYXV0byBzZWFyY2hS
YW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKICAgICBp
ZiAocmVmZXJlbmNlUmFuZ2UpIHsKICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVm
ZXJlbmNlUmFuZ2UtPnN0YXJ0IDogcmVmZXJlbmNlUmFuZ2UtPmVuZDsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzdGFydEluUmVmZXJlbmNlUmFuZ2UgPyBy
ZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UuZW5kID0gc3RhcnRJblJlZmVyZW5jZVJh
bmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZCA6IHJlZmVyZW5jZVJhbmdlLT5zdGFydDsKICAgICB9
Ci0KLSAgICBSZWZQdHI8U2hhZG93Um9vdD4gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5n
ZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydENvbnRhaW5lcigpLmNvbnRhaW5pbmdTaGFkb3dSb290
KCkgOiBudWxscHRyOwogICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICBpZiAoZm9y
d2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBz
aGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAgICAgICAgICAgc2VhcmNoUmFu
Z2UuZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJv
b3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnNo
YWRvd1RyZWVSb290LCAwKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gbWFrZUJv
dW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKICAgICB9Cisg
ICAgYXV0byByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRhcmdldCwg
b3B0aW9ucyk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJh
bmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICAv
LyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZlcmVuY2UgcmFuZ2UgYW5kIHRoZSBmb3VuZCByYW5n
ZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVyZW5jZSByYW5nZSwgZmluZCBhZ2Fpbi4KICAgICAv
LyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFw
c2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rp
b24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3
YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYmIGFyZVJhbmdlc0VxdWFs
KGNyZWF0ZUxpdmVSYW5nZShWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgewotICAgICAgICBzZWFyY2hSYW5n
ZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5j
ZVJhbmdlICYmIFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdl
KCkgPT0gcmVmZXJlbmNlUmFuZ2UpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChmb3J3YXJkKQot
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlZmVyZW5jZVJhbmdlLT5lbmRQb3Np
dGlvbigpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gcmVmZXJlbmNlUmFuZ2Ut
PmVuZDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChyZWZl
cmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLQorICAgICAgICAgICAgc2VhcmNoUmFuZ2Uu
ZW5kID0gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0OwogICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3Qp
IHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVz
KCkpOworICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLmVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsK
KyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5zdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50QmVm
b3JlTm9kZUNvbnRlbnRzKCpzaGFkb3dUcmVlUm9vdCk7CiAgICAgICAgIH0KLQotICAgICAgICBy
ZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwg
dGFyZ2V0LCBvcHRpb25zKSk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChz
ZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CiAKICAgICAvLyBJZiBub3RoaW5n
IHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9s
bG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgp
ICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRl
bnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3Qo
KSkgeworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkg
eworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhk
b2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gaG9zdCA9IHNoYWRvd1RyZWVSb290LT5zaGFk
b3dIb3N0KCkpIHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgICAgIHNl
YXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsK
KyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5lbmQgPSAqbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGUoKmhvc3QpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gKm1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9k
ZSgqaG9zdCk7CiAgICAgICAgIH0KLQotICAgICAgICByZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVS
YW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CisgICAg
ICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRp
b25zKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhbmQgd2Un
cmUgd3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUgZW50aXJlIGRvY3VtZW50ICh0aGlzIHdp
bGwKICAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2ggdGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hl
ZCBpbiBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIG9w
dGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVh
dGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dChyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSksIHRh
cmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBvcHRp
b25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7CisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBs
YWluVGV4dChyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucyk7CiAg
ICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0
aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAogICAgICAgICAvLyAoZS5nLiwg
dGhlIHJlZmVyZW5jZSByYW5nZSB3YXMgYWxyZWFkeSB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGlz
IHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0CiAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGEg
c3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIGluIHRoYXQg
Y2FzZS4KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpID8gbnVs
bHB0ciA6IHJlc3VsdFJhbmdlOworICAgIHJldHVybiByZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSA/
IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbChyZXN1bHRSYW5nZSk7CiB9CiAKLXN0YXRpYyBi
b29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlKQorc3RhdGljIGJv
b2wgaXNGcmFtZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7CiAgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKTsg
b3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3du
ZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0g
JnJhbmdlLm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSByYW5n
ZS5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50KTsKKyAgICAgICAgaWYgKCZvd25lckVsZW1l
bnQtPmRvY3VtZW50KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm93
bmVyRWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi11bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5z
aWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiogbWF0
Y2hlcykKK3Vuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
IHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRmluZE9wdGlvbnMg
b3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxTaW1wbGVS
YW5nZT4qIG1hdGNoZXMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZTsKKyAgICBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gc2VhcmNoUmFuZ2U7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGlmICgm
cmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHNlYXJj
aFJhbmdlID0gcmFuZ2U7CisgICAgICAgIGlmICgmcmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkgPT0g
JmRvY3VtZW50KCkpCisgICAgICAgICAgICBzZWFyY2hSYW5nZSA9ICpyYW5nZTsKICAgICAgICAg
ZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdlKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKLSAgICAg
ICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIHNl
YXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KCkpOwog
Ci0gICAgTm9kZSYgb3JpZ2luYWxFbmRDb250YWluZXIgPSBzZWFyY2hSYW5nZS0+ZW5kQ29udGFp
bmVyKCk7Ci0gICAgaW50IG9yaWdpbmFsRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2UtPmVuZE9mZnNl
dCgpOworICAgIGF1dG8gb3JpZ2luYWxFbmQgPSBzZWFyY2hSYW5nZS0+ZW5kOwogCiAgICAgdW5z
aWduZWQgbWF0Y2hDb3VudCA9IDA7CiAgICAgZG8gewpAQCAtMzYwNyw4ICszNTkwLDggQEAgdW5z
aWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBS
YW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcigqcmVzdWx0UmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5zaGFkb3dIb3N0KCkpOwotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVu
ZChvcmlnaW5hbEVuZENvbnRhaW5lciwgb3JpZ2luYWxFbmRPZmZzZXQpOworICAgICAgICAgICAg
c2VhcmNoUmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygq
cmVzdWx0UmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5zaGFkb3dIb3N0KCkpOworICAgICAgICAgICAg
c2VhcmNoUmFuZ2UtPmVuZCA9IG9yaWdpbmFsRW5kOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIApAQCAtMzYyMywxNSArMzYwNiwxNCBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9w
dAogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1hdGNoQ291bnQgPj0gbGltaXQpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAvLyBTZXQgdGhlIG5ldyBzdGFydCBmb3IgdGhlIHNlYXJj
aCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cwotICAgICAgICAvLyByZXN1bHQg
cmFuZ2UuIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGEgVmlzaWJsZVBvc2l0aW9uIGhlcmUsCi0g
ICAgICAgIC8vIHNpbmNlIGZpbmRQbGFpblRleHQgd2lsbCB1c2UgYSBUZXh0SXRlcmF0b3IgdG8g
Z28gb3ZlciB0aGUgdmlzaWJsZQotICAgICAgICAvLyB0ZXh0IG5vZGVzLiAKLSAgICAgICAgc2Vh
cmNoUmFuZ2UtPnNldFN0YXJ0KFdURk1vdmUocmVzdWx0UmFuZ2UuZW5kLmNvbnRhaW5lciksIHJl
c3VsdFJhbmdlLmVuZC5vZmZzZXQpOworICAgICAgICAvLyBTZXQgdGhlIG5ldyBzdGFydCBmb3Ig
dGhlIHNlYXJjaCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyByZXN1bHQgcmFu
Z2UuCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIFZpc2libGVQb3NpdGlvbiBo
ZXJlOiBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHZpc2li
bGUgdGV4dCBub2Rlcy4KKyAgICAgICAgc2VhcmNoUmFuZ2UtPnN0YXJ0ID0gV1RGTW92ZShyZXN1
bHRSYW5nZS5lbmQpOwogCi0gICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VhcmNoUmFu
Z2UtPnNoYWRvd1Jvb3QoKTsKLSAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSAm
JiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRv
d1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAgICAgICBp
ZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBzaGFk
b3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zdGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFk
b3dSb290KCkpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPmVuZCA9IG1ha2VCb3VuZGFy
eVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKKyAgICAgICAgfQogICAg
IH0gd2hpbGUgKHRydWUpOwogCiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CkBAIC0zOTQwLDIyICsz
OTIyLDI0IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25z
dAogICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAorT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
LnZpc2libGVFbmQoKSkpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSk7CisgICAgYXV0byBlbmQg
PSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgp
KSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiB7IHsgKnN0YXJ0LCAqZW5kIH0gfTsKIH0KIAotUmVmUHRyPFJhbmdlPiBF
ZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3Vs
dCYgcmVzdWx0KSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JU
ZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpIGNvbnN0
CiB7CiAgICAgaWYgKCFyZXN1bHQucmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlID0gY29udGV4dFJhbmdlRm9yQ2Fu
ZGlkYXRlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8g
Y29udGV4dFJhbmdlID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogICAgIGlm
ICghY29udGV4dFJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjb250ZXh0UmFuZ2UsIHJlc3Vs
dC5yYW5nZSkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZXNv
bHZlQ2hhcmFjdGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0LnJhbmdlKTsKIH0KIAogdm9p
ZCBFZGl0b3I6OnNjaGVkdWxlRWRpdG9yVUlVcGRhdGUoKQpAQCAtNDIyNSw4ICs0MjA5LDggQEAg
dm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBh
Y2NlcHRlZENhbmRpZGF0ZSkKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSA9IHRy
dWU7CiAKICAgICBpZiAoYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGFj
Y2VwdGVkQ2FuZGlkYXRlKSkgewotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dChhY2NlcHRl
ZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQotICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUo
cmFuZ2UuZ2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKKyAg
ICAgICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQs
IHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICAgICAgICAgIFJlcGxhY2VS
YW5nZVdpdGhUZXh0Q29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGFjY2Vw
dGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKICAgICB9IGVsc2UKICAgICAgICAg
aW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVsbHB0cik7CiAKQEAg
LTQyNTgsMTYgKzQyNDIsMTYgQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFi
bGVkKCkKICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9ja0N1cnNv
cihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmFk
anVzdGVkU2VsZWN0aW9uUmFuZ2UoKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6YWRq
dXN0ZWRTZWxlY3Rpb25SYW5nZSgpCiB7Ci0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRv
IGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8K
LSAgICAvLyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2
ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBy
YW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBBU1NFUlQoY29tbW9uQW5jZXN0
b3IpOwotICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFn
KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwot
ICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQoKmVuY2xv
c2luZ0FuY2hvciwgMCk7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0
aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8gV2hvZXZlciB3
cm90ZSB0aGlzIGNvZGUgb3JpZ2luYWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4
cGxhaW5pbmcgdGhlIHJhdGlvbmFsZS4KKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OworICAgIGlmIChyYW5nZSkgeworICAgICAgICBpZiAoYXV0byBlbmNsb3NpbmdBbmNob3IgPSBl
bmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKHJhbmdlLT5zdGFydC5jb250YWluZXIsIHJhbmdlLT5lbmQuY29udGFpbmVyKS5n
ZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKKyAgICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRp
b25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0
cigpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkpID49IDApCisg
ICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2Rl
Q29udGVudHMoKmVuY2xvc2luZ0FuY2hvcik7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJu
IHJhbmdlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA2OWQ2MDU5MzAyNjUyZjY3
MmZkMjU5MTUyZDNkY2ZiNDVmZjA5MjZmLi45ZGVkZGNhMzgzNmYxNTMwMzZjZmFmOWM4MGRhZDM5
OTQ0ZjQ0OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjEzLDEwICsyMTMsMTAgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgb3V0
ZGVudCgpOwogICAgIHZvaWQgdHJhbnNwb3NlKCk7CiAKLSAgICBib29sIHNob3VsZEluc2VydEZy
YWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbik7Ci0g
ICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5z
ZXJ0QWN0aW9uKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZERlbGV0ZVJh
bmdlKFJhbmdlKikgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVy
dGllcyosIFJhbmdlKik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZy
YWdtZW50JiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9u
KTsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRp
ZXMmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29u
dGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsKIApAQCAtMzIy
LDE2ICszMjIsMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZElu
Rm9jdXNlZE5vZGUoKSBjb25zdDsKICAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
Tm9kZSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50
KTsKLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFJl
ZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJrTWlzc3Bl
bGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1h
ciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAgICAgdm9pZCBt
YXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYsIGNvbnN0IFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlUmFu
Z2VGb3JTcGVsbENoZWNraW5nKFJhbmdlJiwgY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX292ZXJ3cml0ZU1vZGVFbmFibGVkOyB9CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwogCi0gICAgdm9pZCBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlPiwgUmVmUHRyPFJhbmdlPiYmIHNwZWxsaW5nUmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBhdXRv
bWF0aWNSZXBsYWNlbWVudFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgZ3JhbW1hclJhbmdlKTsKKyAg
ICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5n
UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQKICNlbmRpZgpA
QCAtMzQzLDggKzM0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dTcGVsbGluZ0d1ZXNzUGFu
ZWwoKTsKICAgICBib29sIHNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKTsKIAotICAgIGJvb2wgc2hv
dWxkQmVnaW5FZGl0aW5nKFJhbmdlKik7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdl
Kik7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKyAg
ICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogICAgIHZvaWQg
Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKICAgICBib29sIGNhblVuZG8oKSBjb25zdDsKQEAg
LTM1Niw3ICszNTYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpOwog
ICAgIHZvaWQgZGlkRW5kRWRpdGluZygpOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKFJhbmdlKik7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCgpOwogCiAgICAgdm9pZCBzaG93Rm9udFBhbmVsKCk7CkBAIC0zODAs
NyArMzgwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybUNvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYpOyAvLyBpZiBubyBleGlzdGluZyBjb21wb3NpdGlvbiwgcmVw
bGFjZXMgc2VsZWN0aW9uCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5jZWxDb21wb3NpdGlv
bigpOwogICAgIGJvb2wgY2FuY2VsQ29tcG9zaXRpb25JZlNlbGVjdGlvbklzSW52YWxpZCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjb21wb3NpdGlvblJh
bmdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRDb21wb3NpdGlvblNlbGVj
dGlvbih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3Rpb25FbmQpIGNv
bnN0OwogCiAgICAgLy8gZ2V0dGluZyBpbnRlcm5hdGlvbmFsIHRleHQgaW5wdXQgY29tcG9zaXRp
b24gc3RhdGUgKGZvciB1c2UgYnkgSW5saW5lVGV4dEJveCkKQEAgLTQwMCw3ICs0MDAsNyBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KGJvb2wsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWxFeGlzdGluZ1NlbGVjdGlvbiA9IFJl
dmVhbFNlbGVjdGlvbjo6WWVzKTsKICAgICBib29sIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBj
b25zdCB7IHJldHVybiBtX2lnbm9yZVNlbGVjdGlvbkNoYW5nZXM7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93
UG9pbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUZv
clBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CiAKICAgICB2b2lkIGNsZWFyKCk7
CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAKICAgICBFZGl0aW5nQmVoYXZpb3IgYmVo
YXZpb3IoKSBjb25zdDsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSgpOworICAg
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzZWxlY3RlZFJhbmdlKCk7CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybU1hcmtlZFRleHQoKTsK
QEAgLTQ0Niw3ICs0NDYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dEZvckRh
dGFUcmFuc2ZlcigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZmluZFN0cmluZyhj
b25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBGaW5kT3B0aW9ucyk7
CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlT2ZTdHJpbmco
Y29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRmluZE9wdGlvbnMp
OwogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyaygpIGNvbnN0OyAvLyBNYXJrLCB0
byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCiAgICAgdm9pZCBzZXRNYXJrKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mKTsKQEAgLTQ1NSwxMyArNDU1LDEzIEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmICwg
RWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0OwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZmlyc3RSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmKSBjb25zdDsKIAogICAgIHZvaWQgc2VsZWN0aW9uV2lsbENoYW5nZSgpOwogICAgIHZvaWQg
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxl
Y3Rpb24sIE9wdGlvblNldDxGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9uPik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CiAg
ICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0
eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWdu
ZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRpb25z
LCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFJlZlB0cjxSYW5nZT4+
Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBGaW5kT3B0aW9ucywgdW5z
aWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxTaW1wbGVSYW5nZT4qKTsKICAg
ICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCk7
CiAKQEAgLTU0NSw4ICs1NDUsOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0
KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29u
c3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0
KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OwogICAgIGJvb2wgaXNIYW5kbGluZ0Fj
Y2VwdGVkQ2FuZGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5k
aWRhdGU7IH0KIAogICAgIHZvaWQgc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhib29s
IGIpIHsgbV9pc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvID0gYjsgfQpAQCAtNTc5LDcgKzU3
OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kb2N1bWVudDsgfQogCi0gICAgYm9vbCBjYW5EZWxldGVSYW5nZShSYW5nZSop
IGNvbnN0OworICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25z
dDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmKTsK
ICAgICB2b2lkIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CiAg
ICAgdm9pZCBwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqLCBPcHRpb25TZXQ8UGFzdGVP
cHRpb24+KTsKQEAgLTU4OCw3ICs1ODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcXVvdGVGcmFn
bWVudEZvclBhc3RpbmcoRG9jdW1lbnRGcmFnbWVudCYpOwogCiAgICAgdm9pZCByZXZlYWxTZWxl
Y3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiA9IFNjcm9s
bEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50T3B0aW9uID0gRG9O
b3RSZXZlYWxFeHRlbnQpOwotICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+
JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFk
R3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2Rl
JiByb290RWRpdGFibGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4pOwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlv
cikgY29uc3Q7CkBAIC02MDgsNyArNjA4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPFJhbmdlPiBhZGp1c3Rl
ZFNlbGVjdGlvblJhbmdlKCk7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGFkanVzdGVkU2Vs
ZWN0aW9uUmFuZ2UoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggZDZlYTQyNmQ3ZjdmZTc2NWZiMDA5N2UzZDk1YWVj
NzU5ZGE0MjdlZi4uNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0NTIyOTEwZTY1YzZhOTEzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xNzYsMTUgKzE3Niwx
NSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0Tm9kZShGcmFtZSYgZnJhbWUsIFJlZjxOb2Rl
PiYmIGNvbnRlbnQpCiBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5KEZy
YW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
YXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIHNlbGVj
dGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKICAgICBhdXRvIG5ld1Jh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFuZXdSYW5nZSB8
fCBuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRv
IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byBhZmZp
bml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9sZFJhbmdl
KS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIGZhbHNl
KSkKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwgZmFsc2UpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpuZXdSYW5nZSkucHRyKCksIGFmZmluaXR5LCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTIyNiwxMSArMjI2LDExIEBAIHN0YXRpYyB1bnNpZ25lZCB2ZXJ0aWNhbFNjcm9sbERpc3Rh
bmNlKEZyYW1lJiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFNjcm9s
bGJhcjo6cGFnZVN0ZXAoaGVpZ2h0KSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHVuaW9u
RE9NUmFuZ2VzKFJhbmdlJiBhLCBSYW5nZSYgYikKK3N0YXRpYyBTaW1wbGVSYW5nZSB1bmlvblJh
bmdlcyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIpCiB7Ci0gICAg
UmFuZ2UmIHN0YXJ0ID0gYS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NU
QVJULCBiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7Ci0gICAgUmFuZ2UmIGVu
ZCA9IGEuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiKS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoYS5v
d25lckRvY3VtZW50KCksICZzdGFydC5zdGFydENvbnRhaW5lcigpLCBzdGFydC5zdGFydE9mZnNl
dCgpLCAmZW5kLmVuZENvbnRhaW5lcigpLCBlbmQuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8mIHN0
YXJ0ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9
IDAgPyBhIDogYjsKKyAgICBhdXRvJiBlbmQgPSBjcmVhdGVMaXZlUmFuZ2UoYSktPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKGIpKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7CisgICAgcmV0dXJuIHsgc3RhcnQuc3RhcnQs
IGVuZC5lbmQgfTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9ucwpAQCAtMzU0LDcg
KzM1NCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgYXV0byBtYXJrID0gZnJhbWUu
ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2Vs
ZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2Vs
ZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFuZ2UoKm1hcmspLCAqZnJhbWUu
ZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBib29sIHNlbGVjdGVkID0gc2Vs
ZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJr
LCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSkucHRyKCksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgQVNTRVJUKHNl
bGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RUb01hcmso
RnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgICAg
IFBBTDo6c3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3JlYXRlTGl2
ZVJhbmdlKCptYXJrKSwgKnNlbGVjdGlvbikuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKnNlbGVjdGlv
bikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Olllcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKaW5kZXggMzNhOTI3ZDU0OGZmZGI2ZjljYjFkNTZmODRlMGRmY2QwMWE3
NzdiMC4uYjBjNjkzZTRiNjgyYTQxZjFjODMzNmUwOTIwNDY5MGRiZjc5NmM5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIzMTAsNyArMjMxMCw3IEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkgJiYg
bV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5k
cyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGM1Y2JjM2Y5N2Nk
OGE5OTJjMGFlZTdhMzFhODllZmQ4N2NmYTNkNzguLmVlZmU4ZmQ5NTFjY2ZhNGViNjYxODI3ZDU4
ZTY5ZWE1OWI1ODZiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQpAQCAtODgsMTQgKzg4LDEzIEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvbkluSFRN
TEZvcm1hdCgpCiAKIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0
YWNobWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyaW5nPiYgb3V0VHlwZXMsIFZlY3Rv
cjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIG91dERhdGEpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQg
PSBlbGVtZW50LmRvY3VtZW50KCk7Ci0gICAgYXV0byBlbGVtZW50UmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
ciB9LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yIH0pOwotICAg
IGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKGVsZW1lbnRSYW5nZS5w
dHIoKSwgb3V0VHlwZXMsIG91dERhdGEpOworICAgIGF1dG8gZWxlbWVudFJhbmdlID0gbWFrZVJh
bmdlU2VsZWN0aW5nTm9kZShlbGVtZW50KTsKKyAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGEoZWxlbWVudFJhbmdlLCBvdXRUeXBlcywgb3V0RGF0YSk7CiAKICAgICBvdXRUeXBl
cy5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKTsKLSAgICBvdXREYXRh
LmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGRvY3VtZW50Lm9yaWdpbklkZW50aWZpZXJG
b3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKKyAgICBvdXREYXRh
LmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQuZG9jdW1lbnQoKS5vcmlnaW5J
ZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVhdGVTaGFyZWRCdWZmZXIoKSk7CiAK
LSAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGVsZW1lbnRS
YW5nZS5wdHIoKSkpIHsKKyAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2UpLmdldCgpKSkgewogICAgICAgICBp
ZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigp
KSB7CiAgICAgICAgICAgICBvdXRUeXBlcy5hcHBlbmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOwog
ICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2
ZURhdGEuZ2V0KCkpKTsKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICAgICAgY29udGVu
dC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJ
blJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CiAgICAgICAgIGNvbnRlbnQuZGF0
YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CiAgICAgICAgIGNv
bnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJp
YnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKLSAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjb250ZW50LmNsaWVu
dFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOworICAgICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50
UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgpLCBjb250ZW50LmNsaWVudFR5cGVzLCBjb250
ZW50LmNsaWVudERhdGEpOwogICAgIH0KICAgICBjb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBz
ZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9
IHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CkBAIC0xNDQs
NyArMTQzLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJE
YXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKICAgICB3ZWJDb250ZW50LmRhdGFJbkF0dHJpYnV0
ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5n
ZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1M
Rm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwotICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgd2ViQ29u
dGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnREYXRhKTsKKyAgICBjbGllbnQoKS0+
Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgpLCB3ZWJDb250ZW50LmNsaWVu
dFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwogCiAgICAgcGFzdGVib2FyZFdyaXRlckRh
dGEuc2V0V2ViQ29udGVudChXVEZNb3ZlKHdlYkNvbnRlbnQpKTsKIH0KQEAgLTE4NCwxMiArMTgz
LDEyIEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmco
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkCiAKICAgICBpZiAobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAg
IGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoKm1fZG9j
dW1lbnQuZnJhbWUoKSwgYXR0cmlidXRlZFN0cmluZykpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25O
dWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGF0dHJpYnV0ZWRTdHJpbmcuc3Ry
aW5nOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgaWYgKHNob3VsZElu
c2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0KHRleHQsIGZhbHNlKTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCA5OWFhMTE5MjJj
MzI4MTRiYzBhNmY1ZTBjYWJkOWY2M2IzOGU4NzFjLi5kYTdlOTQxY2I4ZjFmYmUyM2IwMDJlMjVk
ZTAwZDk2ODU5YWZjZTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9F
ZGl0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKQEAgLTUwLDE3ICs1MCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRWRpdG9y
OjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQ
YXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0
ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQoKnBhc3RlYm9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxs
b3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgYXV0byBmcmFnbWVudCA9IHdlYkNv
bnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlm
IChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikp
CiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAo
ZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJ
bnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwg
Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4
dCwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8g
TWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3Rl
SGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCmluZGV4IDMxMjMyNWYyNzYyMWNiYjg4NDkyYTA0MjZlZTU5MTY1Njdl
NGExNjAuLjZjMjU0Nzk2NTUzNjA4NGIxNjM4ODA0OWQ0NWE1OTljZjk2MDY3MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTIwNiwzMCArMjA2LDI2IEBAIHZv
aWQgRWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQs
IEVsZW1lbnQmIGltYWdlRWxlbWVuCiAgICAgcGFzdGVib2FyZEltYWdlLnJlc291cmNlTUlNRVR5
cGUgPSBwYXN0ZWJvYXJkLnJlc291cmNlTUlNRVR5cGUoY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCku
bWltZVR5cGUoKSk7CiAgICAgcGFzdGVib2FyZEltYWdlLnJlc291cmNlRGF0YSA9IGNhY2hlZElt
YWdlLT5yZXNvdXJjZUJ1ZmZlcigpOwogCi0gICAgaWYgKCFwYXN0ZWJvYXJkLmlzU3RhdGljKCkp
IHsKLSAgICAgICAgUG9zaXRpb24gYmVmb3JlSW1hZ2VQb3NpdGlvbigmaW1hZ2VFbGVtZW50LCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcik7Ci0gICAgICAgIFBvc2l0aW9uIGFmdGVy
SW1hZ2VQb3NpdGlvbigmaW1hZ2VFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5j
aG9yKTsKLSAgICAgICAgYXV0byBpbWFnZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShpbWFnZUVsZW1l
bnQuZG9jdW1lbnQoKSwgYmVmb3JlSW1hZ2VQb3NpdGlvbiwgYWZ0ZXJJbWFnZVBvc2l0aW9uKTsK
LSAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoaW1hZ2VS
YW5nZS5wdHIoKSwgcGFzdGVib2FyZEltYWdlLmNsaWVudFR5cGVzLCBwYXN0ZWJvYXJkSW1hZ2Uu
Y2xpZW50RGF0YSk7Ci0gICAgfQorICAgIGlmICghcGFzdGVib2FyZC5pc1N0YXRpYygpKQorICAg
ICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZShpbWFnZUVsZW1lbnQpLCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50VHlwZXMsIHBhc3RlYm9h
cmRJbWFnZS5jbGllbnREYXRhKTsKIAogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2FyZElt
YWdlKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5UZXh0ID0gb3B0aW9ucy5jb250YWlucyhQ
YXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwogICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVy
KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOwogICAgIGludCBu
dW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNsaWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3Vu
dCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXM7ICsr
aSkgewotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjbGllbnQo
KS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpKTsKKyAgICAgICAgYXV0byBmcmFnbWVu
dCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKGkpOwogICAgICAgICBp
ZiAoIWZyYWdtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlYWRlci5hZGRG
cmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSByZWFkZXIuZnJhZ21lbnQ7CisgICAgYXV0byBm
cmFnbWVudCA9IFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKICAgICBpZiAoIWZyYWdtZW50KSB7
CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHRJZ25vcmVkOwogICAgICAgICBmcmFnbWVudCA9
IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBhbGxvd1BsYWlu
VGV4dCwgY2hvc2VQbGFpblRleHRJZ25vcmVkKTsKQEAgLTIzOCw3ICsyMzQsNyBAQCB2b2lkIEVk
aXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25T
ZXQ8UGFzdGVPcHRpb24+CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFz
dGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3Rpbmco
KmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgq
ZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAg
aWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdt
ZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0
ZWJvYXJkKSwgZmFsc2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxC
bG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBN
YWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCmluZGV4IDEyZmQ2YTQz
ZWEwNWEyYTBlNzJiNzRiYTcyZDk2Mjg2NDcwNWJhZTMuLjBiN2MyNjI1M2EwMDgyZTNjNTRhZWVm
ZWEwNjE2MzI0ZTYyNDhjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGli
d3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUv
RWRpdG9yTGliV1BFLmNwcApAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFz
dGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRnJhbWUmIGZyYW1lLCBSYW5nZSYg
cmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQorc3RhdGlj
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0
YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7CiAg
ICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIApAQCAtNDcsOCArNDcsNyBAQCBzdGF0aWMgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBh
c3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L2h0bWw7Y2hhcnNl
dD11dGYtOCIpICYmIGZyYW1lLmRvY3VtZW50KCkpIHsKICAgICAgICAgU3RyaW5nIG1hcmt1cCA9
IHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiKTsKLSAgICAg
ICAgaWYgKFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwLCBlbXB0eVN0cmluZygpLCBEaXNh
bGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1
bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2lu
Q29udGVudCk7CiAgICAgfQogCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKQEAgLTU2LDggKzU1
LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0eXBlcy5jb250YWlucygi
dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpIHsKICAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0
cnVlOwotICAgICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZSwgcGFzdGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3Bs
YWluO2NoYXJzZXQ9dXRmLTgiKSkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAg
ICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZShyYW5nZSku
Z2V0KCksIHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04Iikp
OwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTcgKzc3LDE3IEBAIHZvaWQg
RWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBFbGVtZW50JiwgY29u
c3QgVVJMJiwgY29uc3QgU3RyCiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsK
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFu
Z2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwg
Km1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBhdXRvIGZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3VtZW50
LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFp
blRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5j
b250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50
Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2Vy
dEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFz
dGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0Zy
YWdtZW50KCpmcmFnbWVudCwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9h
cmQpLCBjaG9zZVBsYWluVGV4dCwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3Jl
TWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90
ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDFjZDhjMzk0YTc2OTFjNTVm
NGQ4ZGQzNmRlODU5NmU3MDc3N2I3YjUuLmJhMzFjMTg3NzMyMzRiOWFkOTM5YWQwZDMzMTkzMThj
NjJkOGIzYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTgw
LDcgKzgwLDcgQEAgdm9pZCBFZGl0b3I6OnNob3dDb2xvclBhbmVsKCkKIAogdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rl
ZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKIAogICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgLy8gRklYTUU6IEhvdyBjYW4gdGhp
cyBoYXJkLWNvZGVkIHBhc3RlYm9hcmQgbmFtZSBiZSByaWdodCwgZ2l2ZW4gdGhhdCB0aGUgcGFz
c2VkLWluIHBhc3RlYm9hcmQgaGFzIGEgbmFtZT8KQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBFZGl0
b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0
PFBhc3RlT3B0aW9uPgogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3Rl
T3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpm
cmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZy
YWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlm
IChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVu
dC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVi
b2FyZCksIGZhbHNlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxv
Y2txdW90ZSkgPyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFp
bEJsb2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUgKTsKIAogICAgIGNsaWVudCgp
LT5zZXRJbnNlcnRpb25QYXN0ZWJvYXJkKFN0cmluZygpKTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2
b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZChOb2RlKiBub2RlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7CiAgICAgaWYg
KGF1dG8gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCwgcmFu
Z2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KSkgewogICAgICAgICBtYXliZUNvcHlOb2RlQXR0cmli
dXRlc1RvRnJhZ21lbnQoKm5vZGUsICpmcmFnbWVudCk7Ci0gICAgICAgIGlmIChzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIEVkaXRv
ckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50
KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAg
ICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgZmFsc2UsIE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUpOwogICAgIH0KIApAQCAtMTc2LDExICsxNzYsOSBAQCBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmltYWdlSW5XZWJBcmNoaXZlRm9ybWF0KEVsZW1l
bnQmIGltYWdlRWxlbWVudCkKIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewotICAg
IC8vIEZJWE1FOiBUaGUgaW50ZXJmYWNlIHRvIHRoaXMgZnVuY3Rpb24gaXMgYXdrd2FyZC4gV2Un
ZCBwcm9iYWJseSBiZSBiZXR0ZXIgb2ZmIHdpdGggdGhyZWUgc2VwYXJhdGUgZnVuY3Rpb25zLgot
ICAgIC8vIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4gV2ViS2l0MiB0
byBpbXBsZW1lbnQgdGhlIG1ldGhvZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZDp0eXBlczpdLAotICAgIC8vIHdoaWNoIGlzIG9ubHkgdXNlZCB0byBzdXBwb3J0IE9TIFggc2Vy
dmljZXMuCisgICAgLy8gRklYTUU6IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlvbiBpcyBh
d2t3YXJkLiBXZSdkIHByb2JhYmx5IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBhcmF0ZSBm
dW5jdGlvbnMuIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4gV2ViS2l0
MiB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZDp0eXBlczpdLCB3aGljaCBpcyBvbmx5IHVzZWQgdG8gc3VwcG9ydCBPUyBYIHNlcnZpY2Vz
LgogCi0gICAgLy8gRklYTUU6IERvZXMgdGhpcyBmdW5jdGlvbiByZWFsbHkgbmVlZCB0byB1c2Ug
YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpPyBCZWNhdXNlIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKCkganVzdCB1c2VzIHNlbGVjdGVkUmFuZ2UoKS4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlz
IGZ1bmN0aW9uIHJlYWxseSBuZWVkIHRvIHVzZSBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk/IEJl
Y2F1c2Ugd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBqdXN0IHVzZXMgc2VsZWN0ZWRSYW5n
ZSgpLiBUaGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGluIFdlYktpdCB0aGF0IHVzZXMgYWRqdXN0
ZWRTZWxlY3Rpb25SYW5nZS4KICAgICBpZiAoIWNhbkNvcHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4IGM3
OTZiZmFhZjY2ZWU5NGE4NWM1NWYzOTIzNDkxNTVkMjc0YTg2MGMuLjkzZGRlYWY4ODg5YjhlN2Zj
YzI2OTM0MTI0MDg1ODI4NDQ3NmM4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRp
dG9yV2luLmNwcApAQCAtMzcsMTcgKzM3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0
aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0
OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRv
Y3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRh
aW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBh
dXRvIGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVudC5m
cmFtZSgpLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9w
dGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21l
bnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAg
ICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50
ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJh
Z21lbnQoKmZyYWdtZW50LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAg
ICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0
UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9j
a3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5n
OjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJl
Y3RvcnlEb2N1bWVudC5jcHAKaW5kZXggZGNmM2JmNDQ4NjViMDRjYzgyN2Y3MTMzZWRkOGUxOTFm
YWJhYmQ1Yi4uMjVmMTdhMzNmZDIwYTQxYzcxYmFmYjk1YjMzZjRhNDAwMjc0MDhiYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKQEAgLTE1NSw3ICsx
NTUsNyBAQCBSZWY8RWxlbWVudD4gRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZVRE
Rm9yRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbgogICAgIGF1dG8gdGRFbGVtZW50ID0gSFRN
TFRhYmxlQ2VsbEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgZG9jdW1lbnQpOwogICAgIHRkRWxlbWVu
dC0+YXBwZW5kQ2hpbGQoYW5jaG9yRWxlbWVudCk7CiAKLSAgICByZXR1cm4gV1RGTW92ZSh0ZEVs
ZW1lbnQpOworICAgIHJldHVybiB0ZEVsZW1lbnQ7CiB9CiAKIHN0YXRpYyBTdHJpbmcgcHJvY2Vz
c0ZpbGVzaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc2l6ZSwgYm9vbCBpc0RpcmVjdG9yeSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggOTRmYjMwZjUxMWIzYjM3OTUy
MmFhNjlkMmNmZmZkYWU5MDA1NzAyNi4uMGMxNGFlNjkwY2QzZjQ2YTYzYmFlNjE2MDg1NGYxYTAz
YjgxMWI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKQEAgLTE5MSw3
ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgRW1wdHlFZGl0b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgc21hcnRJbnNl
cnREZWxldGVFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzU2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC0yMDAsMTUgKzIwMCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQg
dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgZmluYWwgeyB9CiAgICAgaW50IHNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkgZmluYWwgeyByZXR1cm4gLTE7IH0KIAotICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZEVu
ZEVkaXRpbmcoUmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxk
SW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJh
bmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJv
b2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJhbmdlKiwgRUFmZmluaXR5LCBi
b29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5n
KGNvbnN0IFNpbXBsZVJhbmdlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNo
b3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVBZmZpbml0eSwgYm9vbCkgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVBy
b3BlcnRpZXMqLCBSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91
bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBkaWRBcHBseVN0eWxl
KCkgZmluYWwgeyB9Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSos
IFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZE1vdmVSYW5n
ZUFmdGVyRGVsZXRlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSBmaW5hbCB7
IH0KICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIGZpbmFsIHsgfQpAQCAtMjE5
LDkgKzIxOSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZp
bmFsIHsgfQogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZvaWQgZGlk
RW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHdp
bGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopIGZpbmFsIHsgfQorICAgIHZvaWQg
d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpIGZpbmFsIHsgfQogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2Uq
LCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYp
IGZpbmFsIHsgfQogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsIHsgfQogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGVXaXRoU29mdFNwYWNlcyhUZXh0Q2hlY2tpbmdSZXN1bHQpIGZpbmFsIHsgfQogCkBAIC0y
NjEsNyArMjYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVN0cmluZ0ZvckZpbmQoY29u
c3QgU3RyaW5nJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBE
cm9wKERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0
IFNpbXBsZVJhbmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25zdCBTdHJpbmcm
KSBmaW5hbCB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAKaW5kZXggNDFmN2E3ZWM3YTQxOTE3NzkxYjI4NWIxOTQzOWQyYzFiZTlkYWVmZC4uYzdl
ZmNmYzkzYmQ0NzcxMjcwZWEwYjA2OWRjYjkyNDdjOTFhMmFmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMjEzLDcgKzIxMyw3IEBAIHN0
YXRpYyB2b2lkIG9wZW5OZXdXaW5kb3coY29uc3QgVVJMJiB1cmxUb0xvYWQsIEZyYW1lJiBmcmFt
ZSwgU2hvdWxkT3BlbkV4dGVybmFsCiBzdGF0aWMgdm9pZCBpbnNlcnRVbmljb2RlQ2hhcmFjdGVy
KFVDaGFyIGNoYXJhY3RlciwgRnJhbWUmIGZyYW1lKQogewogICAgIFN0cmluZyB0ZXh0KCZjaGFy
YWN0ZXIsIDEpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0
LCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICgh
ZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVk
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwpAQCAt
Mzc0LDcgKzM3NCw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAjZW5kaWYKICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6IHsKICAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpQYXN0ZWQpKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0
VGV4dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkgewogICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpDb21tYW5kT3B0aW9uPiByZXBsYWNlT3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rp
bmcgfTsKIAogICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3Vs
ZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA3MzE3YmZkZjQ2ZDkyYWMzZDk2NTBmYzMz
NDY0ZjUwZjZlZWE1OTI3Li44MTBkMmZjNzJhMzI1Y2U0ZDQyMGEzY2NhMzZkOTJiMzAwY2E1ODMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNTY4LDcgKzU2OCw3
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvIHN0eWxl
ID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvciksIGZh
bHNlKTsKLSAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxl
KHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQorICAgICAg
ICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsICppbm5l
clJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2xpZW50KCkud2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0
LCBkcmFnRGF0YSk7CiAgICAgICAgIGlubmVyRnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5bGUoc3R5
bGUucHRyKCksIEVkaXRBY3Rpb246OlNldENvbG9yKTsKQEAgLTYwMyw3ICs2MDMsNyBAQCBib29s
IERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0
YSkKICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
KSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKICAgICAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0
YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0cnVlLCBj
aG9zZVBsYWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJ
bnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVk
aXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNs
aWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFj
dGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpAQCAtNjI5LDcgKzYyOSw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBkcmFnRGF0YS5hc1BsYWlu
VGV4dCgpOwotICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNl
cnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OkRyb3BwZWQpKQorICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5z
aG91bGRJbnNlcnRUZXh0KHRleHQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVk
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRy
YWdEYXRhKTsKQEAgLTEwMjIsNyArMTAyMiw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0
RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8RHJhCiAg
ICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFu
Z2UpOwogCi0gICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKTsKKyAgICAgICAg
ICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKnNlbGVjdGlv
blJhbmdlKTsKIAogICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAo
bXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBib29sIERyYWdD
b250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwg
T3B0aW9uU2V0PERyYQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAgICAgaWYgKCFwcm9t
aXNlZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNsaWVudCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBzcGVjaWZpZWQsIGNhbGwgb3V0IHRvIHRoZSBp
bmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhlIHBhc3RlYm9hcmQgd2l0aCBkYXRhLgotICAg
ICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3JlYXRl
TGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGRhdGFU
cmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci5kaWRXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZCgpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9y
Q2xpZW50LmgKaW5kZXggNzc5MzE3MWZlMGFkYjExN2RhZmY0MTYwZGFmZjY5MWNhNDQ2MGMzMS4u
OWRlNzA2NTRmMjBiNTgyM2Y3NjU2MDBlMTQxNmI5ZDhjM2E5MWRmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0VkaXRvckNsaWVudC5oCkBAIC00Myw3ICs0Myw2IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBG
cmFtZTsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CiBj
bGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBUZXh0Q2hl
Y2tlckNsaWVudDsKQEAgLTUxLDEyICs1MCwxMyBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwog
CiBzdHJ1Y3QgR2FwUmVjdHM7CiBzdHJ1Y3QgR3JhbW1hckRldGFpbDsKK3N0cnVjdCBTaW1wbGVS
YW5nZTsKIAogY2xhc3MgRWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FZGl0
b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFu
Z2UoUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc21hcnRJbnNl
cnREZWxldGVFbmFibGVkKCkgPSAwOyAKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpID0gMDsKQEAgLTY1LDE3ICs2NSwxNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpID0gMDsKICAgICB2
aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpID0gMDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZEVuZEVkaXRpbmcoUmFuZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2Vy
dE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNl
cnRBY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25z
dCBTaW1wbGVSYW5nZSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhj
b25zdCBTaW1wbGVSYW5nZSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9u
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9S
YW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH07CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1cHByZXNzUGFzc3dvcmRF
Y2hvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgCi0gICAgdmlydHVhbCBib29sIHNo
b3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBseVN0eWxl
KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5n
ZSosIFJhbmdlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRl
bGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikgPSAwOwogCiAjaWYg
RU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBdHRh
Y2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIC8qIGlkZW50aWZpZXIgKi8sIGNvbnN0IFN0
cmluZyYgLyogY29udGVudFR5cGUgKi8sIGNvbnN0IFN0cmluZyYgLyogcHJlZmVycmVkRmlsZU5h
bWUgKi8sIFJlZjxTaGFyZWRCdWZmZXI+JiYpIHsgfQpAQCAtOTUsOSArOTUsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0
YWJpbGl0eUNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5n
ZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldENs
aWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVi
b2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0
b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNv
ZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0KSB7IH0KIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHB1
YmxpYzoKICAgICAvLyBzZWxlY3Rpb24gYXMgYSB0eXBlIG9mIGNsaXBib2FyZC4KICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFu
Z2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwZXJm
b3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93Rm9u
dFBhbmVsKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5k
ZXggNmYxZjFiNGFkODBiMjFmOTk1YzFmZWU4ZDcyYWFkYzk2MjcxNWIyYi4uNWVkYTgzMGVjZjQ2
NWQwZGQwYjI0N2ZhZTAwMjBjNWUyNTJlYjhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcApAQCAtMzA4Miw4ICszMDgyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250
ZXh0TWVudUV2ZW50Rm9yS2V5KCkKICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi5zdGFy
dCgpOwogCiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlvbi5yb290
RWRpdGFibGVFbGVtZW50KCkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkpIHsKLSAgICAgICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAg
ICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uo
Y3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKS5nZXQoKSk7CisgICAgICAgIEludFJlY3Qg
Zmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8g
Zmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54KCk7CiAgICAgICAgIC8vIEluIGEgbXVsdGls
aW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkgd291bGQgZW5kdXAgb24gdGhlIG5leHQgbGluZSwg
c28gLTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggM2YzNzIz
MmM3ZTk1YmEyMDA1MzkxMTA0OWFlODA0MDI0ZjYxNjc4OS4uN2UyMTJlYWY0Yjk1MmE4NmRiNGZk
MTA4MDc2ZDIwNTk2ZDE2NTIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmNwcApAQCAtNzUyLDE3ICs3NTIsMTYgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpwcmV2
aW91c0ZvY3VzYWJsZUVsZW1lbnRPclNjb3BlT3duZXIoY29uc3QgRm9jdXNOYXZpZ2EKICAgICBy
ZXR1cm4gcHJldmlvdXNFbGVtZW50V2l0aExvd2VyVGFiSW5kZXgoc2NvcGUsIGxhc3QsIHN0YXJ0
aW5nVGFiSW5kZXgsIGV2ZW50KTsKIH0KIAotc3RhdGljIGJvb2wgcmVsaW5xdWlzaGVzRWRpdGlu
Z0ZvY3VzKE5vZGUgKm5vZGUpCitzdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMo
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUt
Pmhhc0VkaXRhYmxlU3R5bGUoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQuaGFzRWRpdGFibGVTdHls
ZSgpKTsKIAotICAgIE5vZGUqIHJvb3QgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8gcm9v
dCA9IGVsZW1lbnQucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8gZnJhbWUgPSBlbGVt
ZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lIHx8ICFyb290KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNob3VsZEVuZEVk
aXRpbmcocmFuZ2VPZkNvbnRlbnRzKCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5l
ZGl0b3IoKS5zaG91bGRFbmRFZGl0aW5nKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygq
cm9vdCkpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVlZGVkKEZyYW1lKiBv
bGRGb2N1c2VkRnJhbWUsIEZyYW1lKiBuZXdGb2N1c2VkRnJhbWUsIE5vZGUqIG5ld0ZvY3VzZWRO
b2RlKQpAQCAtODQxLDcgKzg0MCw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2Vk
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGcmFtZSYgbmV3Rm9jdXNlZEZyYW1lCiAgICAgfQog
CiAgICAgLy8gRklYTUU6IE1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGNoZWNrIGZvciBjYXJl
dEJyb3dzaW5nCi0gICAgaWYgKG9sZEZvY3VzZWRFbGVtZW50ICYmIG9sZEZvY3VzZWRFbGVtZW50
LT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiAhcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKG9s
ZEZvY3VzZWRFbGVtZW50KSkKKyAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xkRm9jdXNl
ZEVsZW1lbnQtPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmICFyZWxpbnF1aXNoZXNFZGl0aW5n
Rm9jdXMoKm9sZEZvY3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
bV9wYWdlLmVkaXRvckNsaWVudCgpLndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCmluZGV4IGZmMWEyN2ViYzk1ZmM3YzRjNDZhNWI1MDIzMzc5N2FlODk5NzhlN2Uu
LmQ0ZTJiZjA5OTQ3ZmYzZTk1ZTQ5Njg4OWUzZWIxNmIwMWU4ZGM1NWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCkBAIC04MjEsMjggKzgyMSwyNSBAQCBEb2N1bWVudCogRnJhbWU6OmRvY3VtZW50QXRQ
b2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAKIFJlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdl
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCiB7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0gICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFwb3NpdGlvbkJvdW5kYXJ5KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFBvc2l0aW9uIGRlZXBQb3NpdGlvbiA9IHBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgVGV4dCogY29udGFpbmVyVGV4dCA9IGRlZXBQb3Np
dGlvbi5jb250YWluZXJUZXh0KCk7CisgICAgYXV0byBjb250YWluZXJUZXh0ID0gcG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJUZXh0KCk7CiAgICAgaWYgKCFjb250YWluZXJUZXh0
IHx8ICFjb250YWluZXJUZXh0LT5yZW5kZXJlcigpIHx8IGNvbnRhaW5lclRleHQtPnJlbmRlcmVy
KCktPnN0eWxlKCkudXNlclNlbGVjdCgpID09IFVzZXJTZWxlY3Q6Ok5vbmUpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gcG9zaXRpb24u
cHJldmlvdXMoKTsKLSAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHByZXZpb3VzLCBw
b3NpdGlvbik7Ci0gICAgICAgIExheW91dFJlY3QgcmVjdCA9IGVkaXRvcigpLmZpcnN0UmVjdEZv
clJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVjdC5j
b250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3Rl
clJhbmdlOworICAgIGlmIChhdXRvIHByZXZpb3VzID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRp
b24ucHJldmlvdXMoKSkpIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0g
U2ltcGxlUmFuZ2UgeyAqcHJldmlvdXMsICpwb3NpdGlvbkJvdW5kYXJ5IH07CisgICAgICAgIGlm
IChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250
YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocHJl
dmlvdXNDaGFyYWN0ZXJSYW5nZSk7CiAgICAgfQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHQg
PSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgaWYgKFJlZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJh
bmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KSkgewotICAgICAgICBMYXlvdXRSZWN0IHJl
Y3QgPSBlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkp
OwotICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJl
dHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2U7CisgICAgaWYgKGF1dG8gbmV4dCA9IG1ha2VCb3VuZGFy
eVBvaW50KHBvc2l0aW9uLm5leHQoKSkpIHsKKyAgICAgICAgYXV0byBuZXh0Q2hhcmFjdGVyUmFu
Z2UgPSBTaW1wbGVSYW5nZSB7ICpwb3NpdGlvbkJvdW5kYXJ5LCAqbmV4dCB9OworICAgICAgICBp
ZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlKS5jb250YWlu
cyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobmV4dENo
YXJhY3RlclJhbmdlKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCmluZGV4IDhlZDdhZmYyYzNkZDFiMmUyNGQyZWZhZTM5ZmQ4N2IyMzYzZTc2MzQuLmRlNTdm
Mzg1YzliMWU2MDNlMzQwZGI2NzhjNjEyMjQxNjAwNzk3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApA
QCAtNzEzLDE4ICs3MTMsMjAgQEAgYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBEaWRXcmFwKiBkaWRXcmEKIAogdm9pZCBQYWdl
OjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMsIGludCBsaW1pdCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBtYXRjaFJhbmdl
cywgaW50JiBpbmRleEZvclNlbGVjdGlvbikKIHsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJl
c3VsdFJhbmdlczsKKwogICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKIAogICAgIEZyYW1lKiBm
cmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogZnJhbWVXaXRoU2VsZWN0aW9uID0gbnVs
bHB0cjsKICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JU
ZXh0KHRhcmdldCwgMCwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSBtYXRjaFJhbmdlcy5zaXpl
KCkpIDogMCwgdHJ1ZSwgJm1hdGNoUmFuZ2VzKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLmNv
dW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCB7IH0sIG9wdGlvbnMsIGxpbWl0ID8gKGxpbWl0IC0g
bWF0Y2hSYW5nZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZyZXN1bHRSYW5nZXMpOwogICAgICAgICBp
ZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgICAgIGZyYW1lV2l0aFNl
bGVjdGlvbiA9IGZyYW1lOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0
cnVlLCBDYW5XcmFwOjpObyk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogCi0gICAgaWYgKG1hdGNo
UmFuZ2VzLmlzRW1wdHkoKSkKKyAgICBpZiAocmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewpAQCAtNzMyLDcgKzcz
NCw3IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5n
ZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5n
ZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hSYW5n
ZXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZXNbaSAtIDFdKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAx
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTc0MCw3ICs3NDIsNyBAQCB2b2lkIFBh
Z2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9w
dGlvbnMgb3B0aW9ucywgaQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19F
TkQsICptYXRjaFJhbmdlc1tpXSk7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
U1RBUlRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2VzW2ldKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9
IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzQ5LDEwICs3NTEsMTMgQEAgdm9p
ZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
IChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpCi0gICAgICAgICAgICBpbmRleEZvclNlbGVj
dGlvbiA9IG1hdGNoUmFuZ2VzLnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbmRleEZvclNlbGVj
dGlvbiA9IHJlc3VsdFJhbmdlcy5zaXplKCkgLSAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBpbmRleEZvclNlbGVjdGlvbiA9IDA7CiAgICAgfQorCisgICAgZm9yIChhdXRvJiByYW5nZSA6
IHJlc3VsdFJhbmdlcykKKyAgICAgICAgbWF0Y2hSYW5nZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZSkpOwogfQogCiBSZWZQdHI8UmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9u
cykKQEAgLTc2NywxNyArNzcyLDE2IEBAIFJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmlu
Zyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGCiAgICAgRnJh
bWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVu
dCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFt
ZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gZnJh
bWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFydEZyYW1lID8g
cmVmZXJlbmNlUmFuZ2UgOiAwLCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0UmFuZ2U7Ci0KKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBmcmFt
ZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJhbWUgPyBt
YWtlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpIDogV1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFy
b3VuZCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKTsK
ICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgIW9wdGlvbnMuY29udGFpbnMo
QmFja3dhcmRzKSwgY2FuV3JhcCk7CiAgICAgfSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3Rh
cnRGcmFtZSk7CiAKICAgICAvLyBTZWFyY2ggY29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhl
IG90aGVyIHNpZGUgb2YgdGhlIHJlZmVyZW5jZSByYW5nZSB0aGF0IHdlIGRpZCBlYXJsaWVyLgog
ICAgIC8vIFdlIGNoZWF0IGEgYml0IGFuZCBqdXN0IHNlYXJjaCBhZ2FpbiB3aXRoIHdyYXAgb24u
CiAgICAgaWYgKGNhbldyYXAgPT0gQ2FuV3JhcDo6WWVzICYmIHJlZmVyZW5jZVJhbmdlKSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIHJlZmVyZW5jZVJhbmdlLCBvcHRpb25zIHwgV3JhcEFy
b3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdl
OworICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJh
bmdlT2ZTdHJpbmcodGFyZ2V0LCBtYWtlUmFuZ2UoKnJlZmVyZW5jZVJhbmdlKSwgb3B0aW9ucyB8
IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpA
QCAtNzk0LDcgKzc5OCw3IEBAIHVuc2lnbmVkIFBhZ2U6OmZpbmRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zCiAgICAgZG8gewogICAg
ICAgICBpZiAoc2hvdWxkTWFya01hdGNoZXMgPT0gTWFya01hdGNoZXMpCiAgICAgICAgICAgICBm
cmFtZS0+ZWRpdG9yKCkuc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChzaG91bGRI
aWdobGlnaHRNYXRjaGVzID09IEhpZ2hsaWdodE1hdGNoZXMpOwotICAgICAgICBtYXRjaENvdW50
ICs9IGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgMCwgb3B0aW9u
cywgbWF4TWF0Y2hDb3VudCA/IChtYXhNYXRjaENvdW50IC0gbWF0Y2hDb3VudCkgOiAwLCBzaG91
bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcywgMCk7CisgICAgICAgIG1hdGNoQ291bnQgKz0g
ZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCBXVEY6Om51bGxvcHQs
IG9wdGlvbnMsIG1heE1hdGNoQ291bnQgPyAobWF4TWF0Y2hDb3VudCAtIG1hdGNoQ291bnQpIDog
MCwgc2hvdWxkTWFya01hdGNoZXMgPT0gTWFya01hdGNoZXMsIG51bGxwdHIpOwogICAgICAgICBm
cmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBDYW5XcmFwOjpObyk7CiAgICAgfSB3
aGlsZSAoZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZTJl
NTdlY2JlZjQ1ZDNjMjQ2M2Y5ODYzNzM3MTMzMmZhYmY0NTI5Ny4uMGUxNTFmYTI4MjY4NmE0YTRh
OGZjY2VmZTcwY2I1ODVkNTAwNDMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtMjYwOSw3ICsyNjA5LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJu
YWxzOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPFIKICAgICBpZiAo
cGFyc2VkT3B0aW9ucy5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHBhcnNlZE9wdGlv
bnMucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5y
YW5nZU9mU3RyaW5nKHRleHQsIHJlZmVyZW5jZVJhbmdlLmdldCgpLCBwYXJzZWRPcHRpb25zLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGRvY3VtZW50
LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRleHQsIG1ha2VSYW5nZShyZWZlcmVuY2VSYW5nZSks
IHBhcnNlZE9wdGlvbnMucmVsZWFzZVJldHVyblZhbHVlKCkpKTsKIH0KIAogRXhjZXB0aW9uT3I8
dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaW5kT3B0aW9ucywgY29uc3QgU3RyaW5nJiBtYXJr
TWF0Y2hlcykKQEAgLTI2MjMsNyArMjYyMyw3IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRl
cm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWCiAg
ICAgICAgIHJldHVybiBwYXJzZWRPcHRpb25zLnJlbGVhc2VFeGNlcHRpb24oKTsKIAogICAgIGJv
b2wgbWFyayA9IG1hcmtNYXRjaGVzID09ICJtYXJrIjsKLSAgICByZXR1cm4gZG9jdW1lbnQtPmVk
aXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGV4dCwgbnVsbHB0ciwgcGFyc2VkT3B0aW9ucy5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSwgMTAwMCwgbWFyaywgbnVsbHB0cik7CisgICAgcmV0dXJuIGRv
Y3VtZW50LT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRleHQsIFdURjo6bnVsbG9wdCwg
cGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgMTAwMCwgbWFyaywgbnVsbHB0cik7
CiB9CiAKIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNvdW50RmluZE1hdGNoZXMo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmluZE9wdGlvbnMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KaW5kZXggYjJk
YWRjNjk3NDA1ZDY5MTFjNmMyOTUyYjdjOWQ0NGZmZmU1YWQ0MS4uMmIwNDIyMjRmMzljODE2Mjhh
OGY4ZGZmOTVhZGRhOGI5NjlhMTEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XS1ByaW50aW5nVmlldy5tbQpAQCAtNjYzLDcgKzY2Myw3IEBAIC0gKE5TUmVjdClyZWN0Rm9y
UGFnZTooTlNJbnRlZ2VyKXBhZ2UKICAgICAgICAgTE9HKFByaW50aW5nLCAiLVtXS1ByaW50aW5n
VmlldyAlcCByZWN0Rm9yUGFnZTolZF0gLSBkYXRhIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIiwgc2Vs
ZiwgKGludClwYWdlKTsKICAgICAgICAgaWYgKCFfd2ViRnJhbWUtPnBhZ2UoKSkgewogICAgICAg
ICAgICAgLy8gV2UgbWF5IGhhdmUgbm90IHRvbGQgQXBwS2l0IGhvdyBtYW55IHBhZ2VzIHRoZXJl
IGFyZSwgc28gaXQgd2lsbCB0cnkgdG8gcHJpbnQgdW50aWwgYSBudWxsIHJlY3QgaXMgcmV0dXJu
ZWQuCi0gICAgICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybiBOU1plcm9SZWN0OwogICAgICAgICB9CiAgICAgICAgIC8vIFdlIG11c3QgYmUg
c3RpbGwgY2FsY3VsYXRpbmcgdGhlIHBhZ2UgcmFuZ2UuCiAgICAgICAgIEFTU0VSVChfZXhwZWN0
ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2spOwpAQCAtNjc0LDcgKzY3NCw3IEBAIC0gKE5TUmVjdCly
ZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKICAgICAvLyBSZXR1cm5pbmcgYSBudWxsIHJlY3Qg
cHJldmVudHMgc2VsZWN0aW5nIG5vbi1leGlzdGVudCBwYWdlcyBpbiBwcmV2aWV3IGRpYWxvZy4K
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBhZ2UpID4gX3ByaW50aW5nUGFnZVJlY3Rz
LnNpemUoKSkgewogICAgICAgICBBU1NFUlQoIV93ZWJGcmFtZS0+cGFnZSgpKTsKLSAgICAgICAg
cmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBOU1plcm9SZWN0
OwogICAgIH0KIAogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IF9wcmludGluZ1BhZ2VSZWN0
c1twYWdlIC0gMV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDc5YTM3NDAwYzNmNDE1OGJm
NDI4ZjY5NDJiYzg4NmYxYWNkMjIwM2QuLmRkOWMzNTI2MDVmMDhmMzk0MGQ5MDBkOGYwMjY1MjQ3
ZTA0YmEzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC03NCwxMSArNzQsOSBAQCBzdGF0
aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKQogICAgIHJldHVybiB1
bmlxdWVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQrKzsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewot
ICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNo
b3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIHJhbmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2UpLmdldCgpKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZCgpCkBAIC0xMTQsNTAgKzExMiwzNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9n
Z2xlR3JhbW1hckNoZWNraW5nKCkKIGludCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRp
dGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0
aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1fcGFn
ZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2lu
RWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpKTsKIH0KIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
KQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlKS5wdHIoKSk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRO
b2RlKE5vZGUqIG5vZGUsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
IGFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5v
ZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvcklu
c2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCBub2RlLCByYW5n
ZVRvUmVwbGFjZSwgYWN0aW9uKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGRJbnNlcnROb2RlKCptX3BhZ2UsICZub2RlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1Jl
cGxhY2UpLmdldCgpLCBhY3Rpb24pOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
SW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRp
dG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBib29sIHJl
c3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnRU
ZXh0KCptX3BhZ2UsIHRleHQuaW1wbCgpLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRl
eHQuaW1wbCgpLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24p
OwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShS
YW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgZnJvbVJh
bmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgY3Jl
YXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5n
ZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KICAgICAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiBy
YW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxl
UHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7
Ci0gICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNN
dXRhYmxlKCkgPyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4oc3RhdGljX2Nhc3Q8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcyY+KCpzdHlsZSkpIDogc3R5bGUtPm11dGFibGVDb3B5KCkpOwotICAg
IGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3Vs
ZEFwcGx5U3R5bGUoKm1fcGFnZSwgJm11dGFibGVTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJh
dGlvbigpLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
QXBwbHlTdHlsZSgqbV9wYWdlLCAmc3R5bGUubXV0YWJsZUNvcHkoKS0+ZW5zdXJlQ1NTU3R5bGVE
ZWNsYXJhdGlvbigpLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKIH0KIAogI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0yMTEsOSArMTk2LDggQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmRpZEFwcGx5U3R5bGUoKQogICAgIG1fcGFnZS0+ZGlkQXBwbHlTdHlsZSgpOwog
fQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFu
Z2UqLCBSYW5nZSopCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJE
ZWxldGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjIyLDcgKzIwNiw2IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRpbmcoKQogICAgIC8vIEZJWE1FOiBX
aGF0IGdvb2QgaXMgYSBub3RpZmljYXRpb24gbmFtZSwgaWYgaXQncyBhbHdheXMgdGhlIHNhbWU/
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZEJlZ2luRWRpdGlu
Z05vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZEJlZ2luRWRp
dGluZ05vdGlmaWNhdGlvbiIpKTsKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuZGlkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIFdlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3Rp
ZmljYXRpb24uZ2V0KCkuaW1wbCgpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKQEAgLTI3NSw3ICsy
NTgsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZygpCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRp
b24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIldlYlZpZXdEaWRFbmRFZGl0aW5nTm90aWZpY2F0
aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5kaWRFbmRF
ZGl0aW5nKCptX3BhZ2UsIFdlYlZpZXdEaWRFbmRFZGl0aW5nTm90aWZpY2F0aW9uLmdldCgpLmlt
cGwoKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKQEAgLTI4MywxOSArMjY1LDE5IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCiAgICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmRpZFdyaXRlVG9QYXN0ZWJvYXJk
KCptX3BhZ2UpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKFJhbmdlKiByYW5nZSkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRl
VG9QYXN0ZWJvYXJkKCptX3BhZ2UsIHJhbmdlKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
RWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2UsIGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50
UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0
ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRh
KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlw
ZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQogewotICAg
IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5nZXRQYXN0ZWJvYXJkRGF0YUZv
clJhbmdlKCptX3BhZ2UsIHJhbmdlLCBwYXN0ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsK
KyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERh
dGFGb3JSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJv
YXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBl
cmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3Rp
bmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3Rl
cERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGRl
c3RpbmF0aW9uLCBpc01vdmUpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCptX3BhZ2UsIGZyYWdtZW50LCBjcmVhdGVM
aXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01vdmUpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3RlcCYgc3RlcCkKQEAgLTQyNSwxMiArNDA3LDEwIEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBl
bGVtZW50KQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNo
YW5nZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpzdWJGcmFtZVNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogI2VuZGlmCkBAIC02MTgsNyArNTk4LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnNldElucHV0TWV0aG9kU3RhdGUoRWxlbWVudCogZWxlbWVudCkKICNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICBtX3BhZ2UtPnNldElucHV0TWV0aG9kU3RhdGUoZWxl
bWVudCk7CiAjZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgVU5VU0VEX1BBUkFNKGVs
ZW1lbnQpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggMGRmNzc1OWUxYjgyZGQ0
MDNjZmRhOGNhNzMwOTllYmM2ZGRkODA4Yy4uMjNlMzk0ZjI3ZWMzMjY5Mjc4YzQ1YjhlMTQ0ZDM2
ZGM3YzdiZmQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViQ29yZTo6
UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIGJvb2wgc21hcnRJbnNlcnREZWxl
dGVFbmFibGVkKCkgZmluYWw7CiAgICAgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgZmluYWw7CkBAIC01NCwxNSArNTQsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRv
Z2dsZUdyYW1tYXJDaGVja2luZygpIGZpbmFsOwogICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVu
dFRhZygpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6
OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdl
KikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJD
b3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9v
bCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29y
ZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFu
Z2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5h
bDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2Um
KSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSYsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgZmluYWw7CiAgICAgCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxl
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlk
QXBwbHlTdHlsZSgpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUo
V2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBjb25zdCBX
ZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOwogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxF
TUVOVCkKICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJyZWRGaWxl
TmFtZSwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7CkBAIC04NSw5ICs4NSw5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5jZWxlZENvbXBvc2l0aW9uKCkgZmluYWw7CiAgICAg
dm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZpbmFsOwogICAgIHZvaWQgZGlkRW5kRWRpdGlu
ZygpIGZpbmFsOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNv
cmU6OlJhbmdlKikgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9p
ZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q2xp
ZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+
JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4m
IHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRh
KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICAKICAgICB2b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV2Vi
Q29yZTo6VW5kb1N0ZXAmKSBmaW5hbDsKICAgICB2b2lkIHJlZ2lzdGVyUmVkb1N0ZXAoV2ViQ29y
ZTo6VW5kb1N0ZXAmKSBmaW5hbDsKQEAgLTE5MSw3ICsxOTEsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCi0g
ICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdl
YkNvcmU6OlJhbmdlJiwgYm9vbCBpc01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0
ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYsIGJvb2wgaXNNb3ZlKSBmaW5hbDsKICAgICBib29sIHN1cHBvcnRzR2xvYmFsU2VsZWN0
aW9uKCkgZmluYWw7CiAKICAgICBib29sIGNhblNob3dGb250UGFuZWwoKSBjb25zdCBmaW5hbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA0N2Nk
ZWE3ZWRlMTk4MDU3OGRjNjk5YzlmYzdiNGNiNzQ4OTA3YWNhLi43MzJkODg4MDRmODQ4ZGE5Yzdm
MGZlM2Y1Y2MyNzU3MWRhOTZiNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtNTQyNCw0MyArNTQyNCwzNiBAQCB2b2lkIFdlYlBhZ2U6Omhh
c01hcmtlZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShm
cmFtZSwgZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpKTsKLSAgICBjb21w
bGV0aW9uSGFuZGxlcihlZGl0aW5nUmFuZ2UpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRp
bmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpKS5nZXQoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgYXV0byBlZGl0aW5nUmFu
Z2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihlZGl0aW5nUmFuZ2UpOworICAgIGNvbXBsZXRpb25IYW5kbGVy
KEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvaW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgY29uc3RleHBy
IE9wdGlvblNldDxIaXRUZXN0UmVxdWVzdDo6UmVxdWVzdFR5cGU+IGhpdFR5cGUgeyBIaXRUZXN0
UmVxdWVzdDo6UmVhZE9ubHksIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUsIEhpdFRlc3RSZXF1ZXN0
OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQsICBIaXRUZXN0UmVxdWVzdDo6QWxsb3dD
aGlsZEZyYW1lQ29udGVudCB9OwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5t
YWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgaGl0
VHlwZSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8g
cmVzdWx0LmlubmVyTm9kZUZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUt
PnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7Ci0g
ICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZSgqZnJhbWUsIHJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOworICAgIGF1dG8m
IGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVG
cmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
KyAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50
SW5Jbm5lck5vZGVGcmFtZSgpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5n
ZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5nZXQoKSk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlZGl0aW5n
UmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Zmlyc3RS
ZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5n
ZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgSW50UmVjdCByZXN1
bHQoSW50UG9pbnQoMCwgMCksIEludFNpemUoMCwgMCkpOwotICAgIAotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7Cisg
ICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVk
aXRpbmdSYW5nZSk7CiAgICAgaWYgKCFyYW5nZSkgewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgRWRpdGlu
Z1JhbmdlKG5vdEZvdW5kLCAwKSwgY2FsbGJhY2tJRCkpOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHsgfSwgeyB9LCBj
YWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICByZXN1bHQgPSBmcmFt
ZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFu
Z2UocmFuZ2UuZ2V0KCkpKTsKLQotICAgIC8vIEZJWE1FOiBVcGRhdGUgYWN0dWFsUmFuZ2UgdG8g
bWF0Y2ggdGhlIHJhbmdlIG9mIGZpcnN0IHJlY3QuCi0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhyZXN1bHQsIGVkaXRpbmdSYW5n
ZSwgY2FsbGJhY2tJRCkpOworICAgIC8vIEZJWE1FOiBQYXNzIGFuIEVkaXRpbmdSYW5nZSB0aGF0
IG1hdGNoZXMgdGhlIHJhbmdlIG9mIHRoZSBmaXJzdCByZWN0LCByYXRoZXIgdGhhbiB0aGUgZW50
aXJlIHBhc3NlZC1pbiByYW5nZT8KKyAgICBhdXRvIHJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3coZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnJhbmdlKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxs
YmFjayhyZWN0LCBlZGl0aW5nUmFuZ2UsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9u
SGlnaGxpZ2h0PiYgaGlnaGxpZ2h0cywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb24sIGNv
bnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpCkBAIC01NDY4LDE1ICs1
NDYxLDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb25Bc3luYyhjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuCiAgICAgcGxhdGZvcm1XaWxsUGVyZm9y
bUVkaXRpbmdDb21tYW5kKCk7CiAKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0KICAgICBpZiAoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJlcGxhY2VtZW50UmFuZ2U7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudEVkaXRpbmdSYW5n
ZS5sb2NhdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9
IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpOwot
ICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCisgICAgICAgICAgICBpZiAoYXV0byBy
ZXBsYWNlbWVudFJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCByZXBsYWNlbWVu
dEVkaXRpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlcGxhY2VtZW50UmFuZ2UsIFNFTF9ERUZBVUxUX0FG
RklOSVRZKSk7CiAgICAgICAgIH0KLQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRDb21wb3Np
dGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBoaWdobGlnaHRzLCBzZWxlY3Rpb24ubG9jYXRpb24sIHNl
bGVjdGlvbi5sb2NhdGlvbiArIHNlbGVjdGlvbi5sZW5ndGgpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAK
aW5kZXggNGM1MDBlMzY2OGEzMjEyM2I5ZTI0YjI3OGRhYWIwNzQ1NzNmZmEzMC4uNDY5MjU1M2Ew
YTgwOWRkM2Y3MDM5NTNlMzU4ZGYzMzQ2MjJlYzU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKQEAgLTEwOSwxMCAr
MTA5LDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJh
bWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGF1dG8gc3Vycm91bmRpbmdF
bmQgPSBlbmRPZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgIGF1dG8g
c3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzdXJyb3VuZGlu
Z0VuZCk7CiAgICAgICAgIGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNv
bXBvc2l0aW9uUmFuZ2UoKTsKLSAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgc3Vycm91
bmRpbmdSYW5nZSAmJiBzdXJyb3VuZGluZ1JhbmdlLT5jb250YWlucygqY29tcG9zaXRpb25SYW5n
ZSkpIHsKKyAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgc3Vycm91bmRpbmdSYW5nZSAm
JiBzdXJyb3VuZGluZ1JhbmdlLT5jb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9u
UmFuZ2UpLmdldCgpKSkgewogICAgICAgICAgICAgYXV0byBjbG9uZWRSYW5nZSA9IHN1cnJvdW5k
aW5nUmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAgICAgICAgICAgIHN1cnJvdW5kaW5nUmFuZ2UtPnNl
dEVuZChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgY2xv
bmVkUmFuZ2UtPnNldFN0YXJ0KGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAg
ICAgICAgICAgc3Vycm91bmRpbmdSYW5nZS0+c2V0RW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOworICAgICAgICAgICAgY2xvbmVkUmFuZ2Ut
PnNldFN0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5l
bmQpKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dCA9IHBs
YWluVGV4dCgqc3Vycm91bmRpbmdSYW5nZSkgKyBwbGFpblRleHQoY2xvbmVkUmFuZ2UpOwogICAg
ICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24g
PSBjaGFyYWN0ZXJDb3VudCgqc3Vycm91bmRpbmdSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5
b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Qb3NpdGlvbiA9IHBvc3RMYXlvdXRE
YXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAyOTY4ZjdjMGMy
NGE1YWQ4ODA2NWRkODRkZDhlMGMxYzNiYWVkMjk2Li5kOGRmZWE3MDcyM2YxNjU2YjI4NGFkYzYw
ZmY5ZTVhMTZmZDZmMThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjY3LDEwICsyNjcsMTAgQEAgdm9pZCBXZWJQYWdl
OjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3Vs
dCkgY29uc3QKIAogICAgIGlmIChmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAg
ICAgICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3Np
dGlvblJhbmdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBvc2l0aW9uUmFuZ2UtPmNvbGxlY3RTZWxl
Y3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOworICAgICAgICAgICAg
Y3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3Rz
KHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CiAgICAgICAgICAgICBjb252ZXJ0Q29u
dGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5tYXJrZWRU
ZXh0UmVjdHMpOwogCi0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0ID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChjb21wb3NpdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLm1hcmtlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KCpjb21wb3NpdGlv
blJhbmdlKTsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gY29tcG9zaXRpb25TZWxlY3Rp
b24oKmNvbXBvc2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEubWFya2Vk
VGV4dENhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoY29tcG9zaXRp
b25TZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8q
IGluc2lkZUZpeGVkICovKSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0
Q2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoY29tcG9zaXRpb25TZWxl
Y3Rpb24udmlzaWJsZUVuZCgpLmFic29sdXRlQ2FyZXRCb3VuZHMobnVsbHB0ciAvKiBpbnNpZGVG
aXhlZCAqLykpOwpAQCAtMTM3NywxMyArMTM3NywxNSBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdp
dGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUs
CiAgICAgewogICAgICAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBtYXJrZWRSYW5nZSA9IGZy
YW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uIDwg
bWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbWFy
a2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uID4gbWFya2Vk
UmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG1hcmtlZFJhbmdl
LT5lbmRQb3NpdGlvbigpOworICAgICAgICBhdXRvIG1hcmtlZFJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFya2VkUmFuZ2UtPnN0YXJ0KTsKKyAgICAgICAgYXV0
byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtYXJrZWRSYW5nZS0+
ZW5kKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQb3NpdGlvbikKKyAgICAgICAgICAg
IHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9uID4gZW5kUG9z
aXRpb24pCisgICAgICAgICAgICBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uOwogICAgICAgICBpZiAo
d2tHZXN0dXJlU3RhdGUgIT0gR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6QmVnYW4pCi0gICAgICAg
ICAgICBmbGFncyA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhtYXJrZWRSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSAhPSBkaXN0
YW5jZUJldHdlZW5Qb3NpdGlvbnMobWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRp
b24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiB7
IH07CisgICAgICAgICAgICBmbGFncyA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBv
c2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSAhPSBkaXN0YW5j
ZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pID8gUGhyYXNlQm91bmRh
cnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiB7IH07CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIGZsYWdzID0gUGhyYXNlQm91bmRhcnlDaGFuZ2VkOwogICAgICAgICByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbik7
CkBAIC0yNDgzLDcgKzI0ODUsNiBAQCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6
YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICBFZGl0aW5nUmFuZ2UgbWFya2VkVGV4dFJhbmdl
OwogCiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
OwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpOwogICAgIGNvbnN0IHVuc2lnbmVkIG1pbkNvbnRleHRXb3JkQ291bnQg
PSAzOwpAQCAtMjQ5NCwxNCArMjQ5NSwxMiBAQCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2Vi
UGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0
b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHN0
YXJ0UG9zaXRpb24pOwogICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEJlZm9yZTsKLSAgICAgICAg
aWYgKHJhbmdlKQotICAgICAgICAgICAgbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNv
bnRleHQocmFuZ2UuZ2V0KCkpOwotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1l
LmRvY3VtZW50KCksIGVuZFBvc2l0aW9uLCBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigp
KTsKKyAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0
aW9uKSkKKyAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0
KHsgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQsICpzdGFydCB9KTsKICAgICAgICAgU3RyaW5nIG1h
cmtlZFRleHRBZnRlcjsKLSAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgbWFya2VkVGV4
dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIGlmIChh
dXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSkKKyAgICAgICAgICAgIG1h
cmtlZFRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQoeyAqZW5kLCBjb21wb3NpdGlvblJh
bmdlLT5lbmQgfSk7CiAgICAgICAgIG1hcmtlZFRleHQgPSBtYXJrZWRUZXh0QmVmb3JlICsgc2Vs
ZWN0ZWRUZXh0ICsgbWFya2VkVGV4dEFmdGVyOwogICAgICAgICBpZiAoIW1hcmtlZFRleHQuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0UmFuZ2UubG9jYXRpb24gPSBtYXJrZWRU
ZXh0QmVmb3JlLmxlbmd0aCgpOwpAQCAtMjYxNywxNCArMjYxNiwxNiBAQCBzdGF0aWMgdm9pZCBm
b2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgRWxlbWVudCYg
Zm9jdXNlZEVsZQogICAgIEludFBvaW50IGNvbnN0cmFpbmVkUG9pbnQgPSBjb25zdHJhaW5Qb2lu
dChhZGp1c3RlZFBvaW50LCBmcmFtZSwgZm9jdXNlZEVsZW1lbnQpOwogICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0cmFpbmVk
UG9pbnQpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRp
dG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZy
YW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAoIWNvbXBvc2l0aW9uUmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwb3NpdGlvbiA8IGNvbXBvc2l0aW9uUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgcG9zaXRpb24gPSBjb21wb3NpdGlvblJhbmdl
LT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgZWxzZSBpZiAocG9zaXRpb24gPiBjb21wb3NpdGlvblJh
bmdlLT5lbmRQb3NpdGlvbigpKQotICAgICAgICBwb3NpdGlvbiA9IGNvbXBvc2l0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCk7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KTsKKyAgICBhdXRvIGVuZFBvc2l0
aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCk7
CisgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQb3NpdGlvbikKKyAgICAgICAgcG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uOworICAgIGVsc2UgaWYgKHBvc2l0aW9uID4gZW5kUG9zaXRpb24pCisgICAg
ICAgIHBvc2l0aW9uID0gZW5kUG9zaXRpb247CiAgICAgSW50UmVjdCBjYXJldFJlY3QgPSB2aWV3
LmNvbnRlbnRzVG9Sb290Vmlldyhwb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogICAg
IGZsb2F0IGRlbHRhWCA9IGFicyhjYXJldFJlY3QueCgpICsgKGNhcmV0UmVjdC53aWR0aCgpIC8g
MikgLSByZXF1ZXN0LnBvaW50LngoKSk7CiAgICAgZmxvYXQgZGVsdGFZRnJvbVRoZVRvcCA9IGFi
cyhjYXJldFJlY3QueSgpIC0gcmVxdWVzdC5wb2ludC55KCkpOwpAQCAtNDI1Myw4ICs0MjU0LDgg
QEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVk
aXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgaWYgKHdhbnRzTWFya2VkVGV4dFJl
Y3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIHdo
ZXJlIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBtYXJrZWQgdGV4dCByZWN0cyBtYWtlIHN1cmUg
dGhhdCB0aGUgY29udGV4dAogICAgICAgICAgICAgLy8gcmFuZ2UgZW5jb21wYXNzZXMgdGhlIGVu
dGlyZSBtYXJrZWQgdGV4dCByYW5nZSBzbyB0aGF0IHdlIGRvbid0IHJldHVybiBhIHRydW5jYXRl
ZCByZXN1bHQuCi0gICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uU3RhcnQgPSBjb21wb3NpdGlv
blJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uRW5k
ID0gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gY29t
cG9zaXRpb25TdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJh
bmdlLT5zdGFydCk7CisgICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uRW5kID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCk7CiAgICAgICAgICAgICBp
ZiAoY29udGV4dEJlZm9yZVN0YXJ0ID4gY29tcG9zaXRpb25TdGFydCkKICAgICAgICAgICAgICAg
ICBjb250ZXh0QmVmb3JlU3RhcnQgPSBjb21wb3NpdGlvblN0YXJ0OwogICAgICAgICAgICAgaWYg
KGNvbnRleHRBZnRlckVuZCA8IGNvbXBvc2l0aW9uRW5kKQpAQCAtNDI3NCw5ICs0Mjc1LDkgQEAg
dm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRp
bmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBjb250ZXh0LmNvbnRleHRCZWZvcmUgPSBtYWtl
U3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0
aW9uKTsKICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IG1ha2VTdHJpbmcoc3RhcnRPZlJhbmdl
T2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsK
ICAgICBjb250ZXh0LmNvbnRleHRBZnRlciA9IG1ha2VTdHJpbmcoZW5kT2ZSYW5nZU9mSW50ZXJl
c3RJblNlbGVjdGlvbiwgY29udGV4dEFmdGVyRW5kKTsKLSAgICBpZiAoY29tcG9zaXRpb25SYW5n
ZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY29tcG9zaXRpb25SYW5n
ZS5nZXQoKSkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uU3RhcnQoY29t
cG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGNvbXBvc2l0aW9uRW5kKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgIGlm
IChjb21wb3NpdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgp
LCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLnB0cigpKSkgeworICAgICAgICBW
aXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNv
bXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdl
LT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0ID0gbWFrZVN0cmluZyhjb21wb3Np
dGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CiAgICAgICAgIGNvbnRleHQuc2VsZWN0ZWRSYW5n
ZUluTWFya2VkVGV4dC5sb2NhdGlvbiA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGNvbXBvc2l0aW9uU3RhcnQpOwogICAgICAgICBj
b250ZXh0LnNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQubGVuZ3RoID0gW2NvbnRleHQuc2VsZWN0
ZWRUZXh0LnN0cmluZyBsZW5ndGhdOwpAQCAtNDMwMywxMCArNDMwNCw4IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJl
cXVlc3QgcmVxdWVzCiAgICAgICAgICAgICBjb250ZXh0LnRleHRSZWN0cyA9IGNoYXJhY3RlclJl
Y3RzRm9yUmFuZ2UoKmNvbnRleHRSYW5nZSwgMCk7CiAgICAgfSBlbHNlIGlmICh3YW50c01hcmtl
ZFRleHRSZWN0cyAmJiBjb21wb3NpdGlvblJhbmdlKSB7CiAgICAgICAgIHVuc2lnbmVkIGNvbXBv
c2l0aW9uU3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29tcG9zaXRpb25SYW5nZS0+
c3RhcnRQb3NpdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0
ID0gV2ViQ29yZTo6cGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsgV1RGTW92ZSgqc3RhcnQpLCBXVEZN
b3ZlKCplbmQpIH0pLmxlbmd0aCgpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHN0YXJ0
ID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkp
KQorICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IFdlYkNvcmU6OnBsYWluVGV4
dCh7IFdURk1vdmUoKnN0YXJ0KSwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQgfSkubGVuZ3RoKCk7
CiAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5nZSgqY29t
cG9zaXRpb25SYW5nZSwgY29tcG9zaXRpb25TdGFydE9mZnNldCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1t
CmluZGV4IDhkNmM0ODc5MWQ0N2RmOTRlZjlhMjEzOGIzODIzNTQwMDM1YmEwNGMuLmVjY2ZiNTAx
ZTZlYzMyMTg3NmEwNmE0MDQyZmRiOTNjMTgwNmQ4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0xNDAsNyAr
MTQwLDcgQEAgLSAoQ0dSZWN0KWNsb3Nlc3RDYXJldFJlY3RJbk1hcmtlZFRleHRSYW5nZUZvclBv
aW50OihDR1BvaW50KXBvaW50CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAKLSAg
ICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdl
KCkuZ2V0KCk7CisgICAgYXV0byBtYXJrZWRUZXh0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkuY29t
cG9zaXRpb25SYW5nZSgpOwogICAgIGF1dG8gbWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uID0gbWFy
a2VkVGV4dFJhbmdlID8gVmlzaWJsZVNlbGVjdGlvbigqbWFya2VkVGV4dFJhbmdlKSA6IFZpc2li
bGVTZWxlY3Rpb24oKTsKIAogICAgIGlmICghbWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uLmlzUmFu
Z2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQppbmRleCBhMGI2Yjc5
NmEzYTgyNzlkODg0YzY0NzMwMTUzOTEzNDUwNzE2MGQ4Li5kMGQzMGNlOWE4MWI3MThiOWFjMjI4
MDM0ZWIwNTcxNTk5ZWRkNzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9E
T00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdl
Lm1tCkBAIC0zMDksNCArMzA5LDkgQEAgRE9NUmFuZ2UgKmtpdChXZWJDb3JlOjpSYW5nZSogdmFs
dWUpCiAgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKIH0KIAorRE9NUmFuZ2UgKmtp
dChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHZhbHVlKQoreworICAgIHJl
dHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHZhbHVlKS5nZXQoKSk7Cit9CisKICN1bmRlZiBJTVBM
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5h
bC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaAppbmRl
eCBhZjU1OTMyNzA5MzE2NDViYTcyYWUxYTE5OTFhZWQ5MTUwOWRmY2Q3Li5lNjgxOWE1ZjhkNTg4
ZDJlOWI2ODdmMGQ5NzlmNjdjYjIzYTg5YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKQEAgLTIzLDExICsyMyw5IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdl
YktpdExlZ2FjeS9ET01SYW5nZS5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSYW5n
ZTsKLX0KLQogV2ViQ29yZTo6UmFuZ2UqIGNvcmUoRE9NUmFuZ2UgKik7CiBET01SYW5nZSAqa2l0
KFdlYkNvcmU6OlJhbmdlKik7CitET01SYW5nZSAqa2l0KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCBlMWI0MmVhNmQyZmJlZmUzYTFl
ZGYxMTMyMmM2ZDVlOGIzMDNmZjQ1Li42ZjA4ZmFhYTk1MzVjNGFiOTc1ZjI3YjdjYmY0MjU3Njk1
ZjhiNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNjMsMjQgKzYzLDI0IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSBmaW5hbDsKICAgICBib29sIGlzU2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwogCi0gICAgYm9vbCBz
aG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
RGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7
CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwot
ICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJv
b2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4
dChjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6
OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91
bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9v
bCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwor
ICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
IGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVy
dGllcyosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxl
KGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkQXBwbHlTdHlsZSgpIGZpbmFsOwog
Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdl
YkNvcmU6OlJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCkgZmluYWw7CisgICAgYm9vbCBzaG91bGRN
b3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNvbnN0IFdl
YkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNlZCkgZmluYWw7CiAKICAgICB2b2lk
IGRpZEJlZ2luRWRpdGluZygpIGZpbmFsOwogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFs
OwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdl
KikgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3Qg
T3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJv
YXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9h
cmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJk
VHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmRE
YXRhKSBmaW5hbDsKIAogICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25zdCBTdHJp
bmcmKSBmaW5hbDsKICAgICBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIHJlcXVlc3RE
T01QYXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmKSBmaW5hbCB7IHJldHVybiBXZWJDb3JlOjpET01Q
YXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JHZXN0dXJlOyB9CkBAIC0xNTMsNyArMTUzLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFN1cHByZXNzUGFzc3dvcmRFY2hvKCkgY29uc3Qg
ZmluYWw7CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRv
Y3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3Zl
KSBmaW5hbDsKKyAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZy
YWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlz
TW92ZSkgZmluYWw7CiAgICAgCiAgICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5n
ZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbDsKICAgICB2
b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KaW5kZXggOWFiMWMyOWQ0ODc4NzdkNmU4NTgzOWY5ZDVmNGM4OTA2OTgxMjli
Mi4uYmQ5NWE2NjQ4YTMwMzJjMDU3YTk4MWUwOTQ2OTA4MGU4ODEwNjM1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQpAQCAtMjM0LDEwICsyMzQsOSBAQCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbENo
ZWNrZXJEb2N1bWVudFRhZygpCiAKICNlbmRpZgogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93
ZWJWaWV3Ci0gICAgICAgIHNob3VsZERlbGV0ZURPTVJhbmdlOmtpdChyYW5nZSldOworICAgIHJl
dHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2Vi
VmlldyBzaG91bGREZWxldGVET01SYW5nZTpraXQocmFuZ2UpXTsKIH0KIAogYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0yNTYsMTEgKzI1NSwxMSBA
QCBib29sIFdlYkVkaXRvckNsaWVudDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVk
KCkgY29uc3QKICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5zZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkKCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0
eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgUmVmPE11dGFibGVTdHls
ZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNNdXRhYmxlKCkgPyBSZWY8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4oc3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydGllcyY+KCpz
dHlsZSkpIDogc3R5bGUtPm11dGFibGVDb3B5KCkpOwogICAgIHJldHVybiBbW21fd2ViVmlldyBf
ZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICBzaG91
bGRBcHBseVN0eWxlOmtpdCgmbXV0YWJsZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCkpIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtpdChyYW5nZSldOworICAgICAgICBzaG91bGRBcHBs
eVN0eWxlOmtpdCgmc3R5bGUubXV0YWJsZUNvcHkoKS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlv
bigpKQorICAgICAgICB0b0VsZW1lbnRzSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKIH0KIAogc3Rh
dGljIHZvaWQgdXBkYXRlRm9udFBhbmVsKFdlYlZpZXcgKndlYlZpZXcpCkBAIC0yNzksMzMgKzI3
OCwyOSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQXBwbHlTdHlsZSgpCiAgICAgdXBkYXRl
Rm9udFBhbmVsKG1fd2ViVmlldyk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRN
b3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSogcmFuZ2UsIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNl
ZCkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNl
ZCkKIHsKICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzptX3dlYlZpZXcKICAgICAgICAgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGU6a2l0
KHJhbmdlKSByZXBsYWNpbmdSYW5nZTpraXQocmFuZ2VUb0JlUmVwbGFjZWQpXTsKIH0KIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKIHsKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5n
ZTpraXQocmFuZ2UpXTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW1ttX3dlYlZp
ZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkQmVn
aW5FZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVy
biBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmll
dwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5n
ZTpraXQocmFuZ2UpXTsKKyAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6a2l0
KHJhbmdlKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9u
KQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rp
b24gYWN0aW9uKQogewogICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBtX3dlYlZpZXc7CiAgICAgcmV0
dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcg
c2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOmtpdChyYW5nZSkgZ2l2ZW5B
Y3Rpb246a2l0KGFjdGlvbildOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmlu
aXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQorYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwg
RUFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewogICAg
IHJldHVybiBbbV93ZWJWaWV3IF9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOmtpdChmcm9t
UmFuZ2UpIHRvRE9NUmFuZ2U6a2l0KHRvUmFuZ2UpIGFmZmluaXR5OmtpdChzZWxlY3Rpb25BZmZp
bml0eSkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOwogfQpAQCAtNDExLDEyICs0MDYs
MTIgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KCkKICNlbmRpZgogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxs
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikK
IHsKICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgV2ViS2l0LCBvbmx5IFdlYktpdDIuCiB9CiAKLXZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNv
cmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCit2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7CiAgICAgLy8gTm90IGltcGxl
bWVudGVkIFdlYktpdCwgb25seSBXZWJLaXQyLgogfQpAQCAtNTc3LDkgKzU3Miw5IEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQogCiAj
ZW5kaWYgLy8gVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlICpub2RlLCBSYW5nZSogcmVwbGFjaW5nUmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgcmVwbGFjaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsgCi0g
ICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6a2l0KG5vZGUpIHJlcGxhY2luZ0RPTVJhbmdlOmtp
dChyZXBsYWNpbmdSYW5nZSkgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pZ2l2ZW5B
Y3Rpb25dOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRJbnNlcnROb2RlOmtpdCgmbm9kZSkgcmVwbGFjaW5n
RE9NUmFuZ2U6a2l0KHJlcGxhY2luZ1JhbmdlKSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFj
dGlvbilnaXZlbkFjdGlvbl07CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVu
ZG9PclJlZG9TdGVwKFVuZG9TdGVwJiBzdGVwLCBib29sIGlzUmVkbykKQEAgLTg1NiwxMCArODUx
LDEwIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3Jtc1R3b1N0ZXBQYXN0ZShXZWJDb3Jl
OjpEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYg
ZnJhZ21lbnQsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCitib29sIFdlYkVkaXRv
ckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBj
b25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewogICAgIGlmIChb
W21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihwZXJmb3JtVHdvU3RlcERyb3A6YXREZXN0aW5hdGlvbjppc01vdmU6KV0pCi0gICAg
ICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gcGVyZm9ybVR3
b1N0ZXBEcm9wOmtpdCgmZnJhZ21lbnQpIGF0RGVzdGluYXRpb246a2l0KCZkZXN0aW5hdGlvbikg
aXNNb3ZlOmlzTW92ZV07CisgICAgICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0
ZUZvcndhcmRlcl0gcGVyZm9ybVR3b1N0ZXBEcm9wOmtpdCgmZnJhZ21lbnQpIGF0RGVzdGluYXRp
b246a2l0KGRlc3RpbmF0aW9uKSBpc01vdmU6aXNNb3ZlXTsKIAogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTg4Nyw3ICs4ODIsNyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0
b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaQogCiAjaWYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3Rl
cERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIFJhbmdlJiwgYm9vbCkKK2Jvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFNpbXBsZVJh
bmdlJiwgYm9vbCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0YzU0YzQ0NGFjZjE3ODE5MDJkNjU4YTkx
NWE0NjI4ODNiYjUyMWEwLi43NjNjNzc3Y2UyYjAyNjZkNDA5M2RhZmNhYzJhNjM2MjVmMWJiZDZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTcy
MCwxMyArNzIwLDE1IEBAIC0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgV2Vi
Q29yZTo6UG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3RpCiAKIC0gKE5TUmVjdClfZmly
c3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgIHJldHVybiBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShjb3JlKHJhbmdlKSk7Cisg
ICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisgICAgcmV0dXJuIF9w
cml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCptYWtlUmFuZ2Uo
Y29yZShyYW5nZSkpKTsKIH0KIAogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERP
TVJhbmdlICopcmFuZ2UKIHsKICAgICBib29sIGluc2lkZUZpeGVkID0gZmFsc2U7IC8vIEZJWE1F
OiBnZXQgdmlhIGZpcnN0UmVjdEZvclJhbmdlKCkuCi0gICAgTlNSZWN0IHJhbmdlUmVjdCA9IFtz
ZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07ICAgIAorICAgIE5TUmVjdCByYW5nZVJl
Y3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOwogICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGNvcmUoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7CiAgICAgICAgIAogICAgIGlmIChz
dGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7CkBAIC03ODQsNyArNzg2LDcgQEAg
LSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OkVBbHRlcmEKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBzZWxl
Y3Rpb247CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9u
LCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwog
fQogI2VuZGlmCiAKQEAgLTg1Myw3ICs4NTUsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0RE9NUmFu
Z2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAoRE9NUmFuZ2UgKilfbWFya0RPTVJh
bmdlCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRS
YW5nZSgpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50
V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzoo
TlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCkBAIC0xMTA2LDEyICsxMTA4LDEyIEBAIC0gKERPTVJh
bmdlICopX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDooQ0dQb2ludClmaXJzdCBzZWNvbmRQ
b2ludDooQ0dQb2ludClzCiB7CiAgICAgYXV0byBmaXJzdFBvc2l0aW9uID0gW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbkZvclBvaW50OmZpcnN0XTsKICAgICBhdXRvIHNlY29uZFBvc2l0aW9uID0gW3Nl
bGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnNlY29uZF07Ci0gICAgcmV0dXJuIGtpdChjcmVh
dGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNv
bmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQo
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNvbmRQb3NpdGlvbiku
dG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdl
Rm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBv
aW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1Nf
RkFNSUxZKQpAQCAtMTQ1NCw3ICsxNDU2LDcgQEAgLSAoQk9PTClpc1RlbGVwaG9uZU51bWJlclBh
cnNpbmdFbmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIHJl
dHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2Vs
ZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiAt
ICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5T
U2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmcK
QEAgLTE0OTYsNyArMTQ5OCw3IEBAIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICopZWxlbWVudFJhbmdlQ29udGFp
bmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29y
ZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmVsZW1l
bnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsKIH0KIAogLSAodm9pZClleHBhbmRT
ZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KQEAgLTE1MjYsNyArMTUyOCw3
IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbgogCiAtIChET01SYW5n
ZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIHJldHVybiBraXQo
Y3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5z
ZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSk7CiB9CiAKIC0g
KE5TU3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKQEAgLTE1ODksMTIgKzE1
OTEsMTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFydAogCiAtIChET01SYW5nZSAqKXJh
bmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1
cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxm
KS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSk7CiB9
CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246KGludClh
bW91bnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxl
Y3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5n
Q3VycmVudFNlbGVjdGlvbihhbW91bnQpKTsKIH0KIAogLSAodm9pZClzZWxlY3ROU1JhbmdlOihO
U1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKQEAgLTE2MTgsNyAr
MTYyMCw3IEBAIC0gKERPTVJhbmdlICopbWFya2VkVGV4dERPTVJhbmdlCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBraXQoZnJhbWUtPmVkaXRvcigp
LmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChmcmFtZS0+ZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpKTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRUZXh0OihOU1N0
cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSluZXdTZWxSYW5nZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggMTExY2Y4YmRj
MjlkYzYxZTI4ZjgyMmU5NTdiOTM4ODJhNDI3OTlhNS4uNGUzYTA4YjJkYzVkMDRiZTgwZjExYzI5
Y2IyMjk5MTBiNGU4OGVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCkBAIC0xMzMyLDcgKzEzMzIsNyBAQCAtIChCT09MKV9zaG91bGRSZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmll
d0lucwogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQogewogICAgIGF1dG8qIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjcmVh
dGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIDogbmls
OwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNjM0Niw3ICs2MzQ2LDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2ZyYW1l
IF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2VdOwogICAgIGlmICghcmFuZ2UpIHsK
ICAgICAgICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigldSwg
JXUpIC0+ICgwLCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5ndGgp
OwotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJu
IE5TWmVyb1JlY3Q7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChbcmFuZ2Ugc3RhcnRDb250YWlu
ZXJdKTsKQEAgLTcwNzUsNyArNzA3NSw3IEBAIC0gKE5TVUludGVnZXIpY291bnRNYXRjaGVzRm9y
VGV4dDooTlNTdHJpbmcgKilzdHJpbmcgaW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nCiAgICAg
aWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGNvcmVGcmFt
ZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNvcmUocmFuZ2UpLCBjb3Jl
T3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVzLCAwKTsKKyAgICByZXR1cm4gY29y
ZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywgbWFrZVJhbmdlKGNv
cmUocmFuZ2UpKSwgY29yZU9wdGlvbnMob3B0aW9ucyksIGxpbWl0LCBtYXJrTWF0Y2hlcywgMCk7
CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZDooQk9PTClu
ZXdWYWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJU
ZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQppbmRleCAxZTNiNzlkMDM4MWFlOTlk
NmNhMzRlY2EyMmY1NjM5ZDQ4YTNhOTRlLi44MDFiZWZlYzc2ZDA5NmY5M2YwZjQ4ZDYzY2Y4N2Rm
OTVkNTUxYmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQpAQCAtMTc2LDcgKzE3Niw3
IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29y
ZCBzdGVtCiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKLSAg
ICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShmcmFt
ZSktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsK
KyAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgICAgIERPTVJhbmdlICp3
aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQKICAgICAgICAgICAgIGRpcmVjdGlvbjpTZWxlY3Rp
b25EaXJlY3Rpb246OkJhY2t3YXJkIGdyYW51bGFyaXR5OlRleHRHcmFudWxhcml0eTo6V29yZEdy
YW51bGFyaXR5XTsKICAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQgY2xvbmVS
YW5nZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRl
eHRJdGVyYXRvci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0
ZXJhdG9yLm1tCmluZGV4IDhjN2U3ZWUwMGY3ZjMxNTBkODk3NzQzYTA3MjQwOTZiMzg4MjE3Y2Uu
LjkzYjgzNDc3ZmM4YTQyYWQzZjc0ZDM2OWU4MTc5NGJiZWZkYTAzYWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCkBAIC05NSw3
ICs5NSw3IEBAIC0gKERPTVJhbmdlICopY3VycmVudFJhbmdlCiAgICAgYXV0byYgdGV4dEl0ZXJh
dG9yID0gKl9wcml2YXRlLT5fdGV4dEl0ZXJhdG9yOwogICAgIGlmICh0ZXh0SXRlcmF0b3IuYXRF
bmQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZSh0ZXh0SXRlcmF0b3IucmFuZ2UoKSkucHRyKCkpOworICAgIHJldHVybiBraXQodGV4dEl0ZXJh
dG9yLnJhbmdlKCkpOwogfQogCiAvLyBGSVhNRTogQ29uc2lkZXIgZGVwcmVjYXRpbmcgdGhpcyBt
ZXRob2QgYW5kIGNyZWF0aW5nIG9uZSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgY29weWluZyA4LWJp
dCBjaGFyYWN0ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CmluZGV4IDg1ZDY5NDNlMzZiYWU2MzdhMGUwOWI1NDc5ZGFiMzViMzlhYTdjY2MuLjA3MzNmNWUw
NDQ0Zjc5YWRkN2RiOTdjZGExNWQ2OTc4MjhiNjk3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQ1OTQsNyArNDU5NCw3IEBAIC0gKFdlYlRleHRJ
dGVyYXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVjdClyZWN0CiAgICAgYXV0byBpbnRS
ZWN0ID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKICAgICBhdXRvIHJhbmdlID0g
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBv
aW50KGludFJlY3QubWluWE1pbllDb3JuZXIoKSksCiAgICAgICAgIGNvcmVGcmFtZS0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5tYXhYTWF4WUNvcm5lcigpKSkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJh
bmdlOmtpdChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKV0gYXV0b3JlbGVhc2VdOworICAg
IHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KHJhbmdl
KV0gYXV0b3JlbGVhc2VdOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04NDE3
LDcgKzg0MTcsNyBAQCAtIChET01SYW5nZSAqKWVkaXRhYmxlRE9NUmFuZ2VGb3JQb2ludDooTlNQ
b2ludClwb2ludAogICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNlbGYpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KHBhZ2UtPm1haW5GcmFtZSgpLmVk
aXRvcigpLnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQoW3NlbGYgY29udmVydFBvaW50
OnBvaW50IHRvVmlldzpuaWxdKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQocGFnZS0+bWFpbkZy
YW1lKCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludChbc2VsZiBjb252
ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKSk7CiB9CiAKIC0gKEJPT0wpX3Nob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVudFJhbmdlIHRvRE9NUmFuZ2U6KERP
TVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
Y3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCkBAIC04NDY1LDcgKzg0NjUs
NyBAQCAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKICAgICBhdXRvKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUp
CiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSk7CisgICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlv
bkFmZmluaXR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404201</attachid>
            <date>2020-07-13 18:53:15 -0700</date>
            <delta_ts>2020-07-19 10:32:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200713185314.patch</filename>
            <type>text/plain</type>
            <size>163518</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDkwMTkwZGE0YWNhMDNm
MTEwYmI2M2M5YWJhNDNiMWMzOTI5ZWYxZS4uN2E3ODg1ZDcwMWE4NjRkYTdlMzYyYjdhYWI0MzQw
M2VhY2I1NDRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTEzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmUtbGFuZGluZyByMjY0MjQyIHdpdGggY3Jh
c2ggZml4ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAppbmRleCBjOWQ3ZDlhNzRiNjNkZTBhMWIwMDAxNDI1M2IwZWM3ODEz
YTc0NjA2Li5lZDhmOGE5NDkwYzNhZDU2YTQ5YzZhMTJlOTYxNGI4NTQ2OTQ0ZmViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKQEAgLTMwNiw4ICszMDYsOCBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0
eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAg
ICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZSgqbWlzc3Bl
bGxpbmdSYW5nZSk7CisgICAgICAgICAgICBpZiAoY3JlYXRlTGl2ZVJhbmdlKCptaXNzcGVsbGlu
Z1JhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVM
aXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgICAgICAgICAg
ICAgcmV0dXJuICptaXNzcGVsbGluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChk
aXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXMpIHsKICAg
ICAgICAgZm9yIChhdXRvIHJpdCA9IG1pc3NwZWxsaW5ncy5yYmVnaW4oKTsgcml0ICE9IG1pc3Nw
ZWxsaW5ncy5yZW5kKCk7ICsrcml0KSB7CkBAIC0zMTUsOCArMzE1LDggQEAgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmIHMKICAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5n
ZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVNpbXBsZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChj
cmVhdGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICptaXNzcGVsbGluZ1Jhbmdl
OwogICAgICAgICB9CiAgICAgfQogCkBAIC02MDEsMTUgKzYwMSwxNCBAQCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1Jhbmdl
SW5EaXJlY3RpbwogICAgIAogICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjbG9zZXN0U3RyaW5n
UmFuZ2U7CiAgICAgZm9yIChhdXRvJiBzZWFyY2hTdHJpbmcgOiBzZWFyY2hTdHJpbmdzKSB7Ci0g
ICAgICAgIGlmIChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdl
T2ZTdHJpbmcoc2VhcmNoU3RyaW5nLCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpLnB0
cigpLCBmaW5kT3B0aW9ucykpIHsKLSAgICAgICAgICAgIGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9
IG1ha2VTaW1wbGVSYW5nZSgqc2VhcmNoU3RyaW5nUmFuZ2UpOworICAgICAgICBpZiAoYXV0byBz
ZWFyY2hTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHNlYXJjaFN0
cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25zKSkgewogICAgICAgICAgICAgaWYgKCFj
bG9zZXN0U3RyaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0g
Zm91bmRTdHJpbmdSYW5nZTsKKyAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAq
c2VhcmNoU3RyaW5nUmFuZ2U7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAv
LyBJZiBzZWFyY2hpbmcgYmFja3dhcmQsIHVzZSB0aGUgdHJhaWxpbmcgcmFuZ2UgZWRnZXMgdG8g
Y29ycmVjdGx5IGRldGVybWluZSB3aGljaAogICAgICAgICAgICAgICAgIC8vIHJhbmdlIGlzIGNs
b3Nlc3QuIFNpbWlsYXJseSwgaWYgc2VhcmNoaW5nIGZvcndhcmQsIHVzZSB0aGUgbGVhZGluZyBy
YW5nZSBlZGdlcy4KICAgICAgICAgICAgICAgICBhdXRvJiBjbG9zZXN0U3RyaW5nUG9zaXRpb24g
PSBpc0JhY2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmQgOiBjbG9zZXN0U3Ry
aW5nUmFuZ2UtPnN0YXJ0OwotICAgICAgICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRp
b24gPSBpc0JhY2t3YXJkU2VhcmNoID8gZm91bmRTdHJpbmdSYW5nZS5lbmQgOiBmb3VuZFN0cmlu
Z1JhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24g
PSBpc0JhY2t3YXJkU2VhcmNoID8gc2VhcmNoU3RyaW5nUmFuZ2UtPmVuZCA6IHNlYXJjaFN0cmlu
Z1JhbmdlLT5zdGFydDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIGNs
b3Nlc3RQb3NpdGlvbk9mZnNldCA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5vZmZzZXQ7CiAgICAg
ICAgICAgICAgICAgYXV0byBzZWFyY2hQb3NpdGlvbk9mZnNldCA9IGZvdW5kU3RyaW5nUG9zaXRp
b24ub2Zmc2V0OwpAQCAtNjE4LDcgKzYxNyw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvCiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBSYW5nZTo6Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKGNsb3Nlc3RDb250YWluZXJOb2RlLCBjbG9zZXN0UG9zaXRpb25P
ZmZzZXQsIHNlYXJjaENvbnRhaW5lck5vZGUsIHNlYXJjaFBvc2l0aW9uT2Zmc2V0KS5yZWxlYXNl
UmV0dXJuVmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoKCFpc0JhY2t3YXJkU2VhcmNoICYm
IHJlc3VsdCA+IDApIHx8IChpc0JhY2t3YXJkU2VhcmNoICYmIHJlc3VsdCA8IDApKQotICAgICAg
ICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOworICAg
ICAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqc2VhcmNoU3RyaW5nUmFuZ2U7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCmluZGV4IDFjZTQ0MjgxMjg0YmQ1OWM2Zjg0ZTI1MDk4OGEyOTIyNDk3
NmIzNGYuLjlmMmQ2NWQ3NDBkYjczOGY1OWY4MzBiYThjMWJmMGJmNjgyNGFjOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC02OTIsNyArNjkyLDcgQEAgc3Rh
dGljIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9u
Rm9yUGFyYW1ldGVyaXplZEF0dHIKIAogICAgIGlmIChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xh
c3M6W05TQXJyYXkgY2xhc3NdXSkgewogICAgICAgICBvcGVyYXRpb24udGV4dFJhbmdlcyA9IG1h
a2VWZWN0b3IobWFya2VyUmFuZ2VzLCBbd3JhcHBlcl0gKGlkIG1hcmtlclJhbmdlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKFt3cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlOm1hcmtlclJhbmdlXSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVJhbmdlKFt3cmFw
cGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1hcmtlclJhbmdlXSk7CiAgICAgICAgIH0pOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNzEwNWRiNWU5N2MzZjUyMWQ3ZTQ4
YzRlMjI1NjdmZGVmZGJhYzc4Zi4uYWY0MzJiNDk0M2ZiNGFiMjY2OWNjOGEwZmE1YTc3ZWNiNmI4
MzQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00NzMsNyArNDczLDcgQEAgc3RhdGlj
IGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgIGlm
ICghZnJhbWUgfHwgIXJvb3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBm
cmFtZS0+ZWRpdG9yKCkuc2hvdWxkQmVnaW5FZGl0aW5nKHJhbmdlT2ZDb250ZW50cygqcm9vdCku
cHRyKCkpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQmVnaW5FZGl0aW5nKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCkpOwogfQogCiBzdGF0aWMgYm9vbCBj
YW5BY2Nlc3NBbmNlc3Rvcihjb25zdCBTZWN1cml0eU9yaWdpbiYgYWN0aXZlU2VjdXJpdHlPcmln
aW4sIEZyYW1lKiB0YXJnZXRGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDliN2ExYTYyMTIx
OTVhMmU0NzQ4Y2IyOTcxOTQ0YzE2NjMyODAwOTYuLjllYTE0OWQyZjUxZGUyNGMzMzcxNjBiNTNh
ZjdjMWVkY2RjODhkMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTgzMywyNiArMTgzMywyNiBA
QCBGbG9hdFJlY3QgUmFuZ2U6OmFic29sdXRlQm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGlu
Z1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbgogICAgIHJldHVybiBib3VuZGluZ1JlY3QoQ29vcmRp
bmF0ZVNwYWNlOjpBYnNvbHV0ZSwgcmVjdE9wdGlvbnMpOwogfQogCi1TaW1wbGVSYW5nZSBtYWtl
U2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQorU2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNv
bnN0IFJhbmdlJiByYW5nZSkKIHsKICAgICByZXR1cm4geyB7IHJhbmdlLnN0YXJ0Q29udGFpbmVy
KCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkgfSwgeyByYW5nZS5lbmRDb250YWluZXIoKSwgcmFuZ2Uu
ZW5kT2Zmc2V0KCkgfSB9OwogfQogCi1TaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3Qg
UmVmPFJhbmdlPiYgcmFuZ2UpCitTaW1wbGVSYW5nZSBtYWtlUmFuZ2UoY29uc3QgUmVmPFJhbmdl
PiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShyYW5nZS5nZXQoKSk7Cisg
ICAgcmV0dXJuIG1ha2VSYW5nZShyYW5nZS5nZXQoKSk7CiB9CiAKLU9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKQorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KCpyYW5nZSk7CisgICAgcmV0dXJuIG1ha2VSYW5nZSgqcmFuZ2UpOwogfQogCi1PcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mIHJhbmdlKQor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICByZXR1
cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAogUmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhODYxOWNiOTQ2
MzQzNGU4Y2U4MWQyYjg0N2MzMjVhMDEyMDdlMTEwLi45MzViYmRhNDdiNzYxMDc5MDc3YzQxNjNl
MWM4OTk3NDgyNWQ5OWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMTc2LDEwICsxNzYsMTAgQEAgV0VC
Q09SRV9FWFBPUlQgUmVmPFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9kZSYpOwogV0VCQ09SRV9F
WFBPUlQgYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiBX
RUJDT1JFX0VYUE9SVCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqLCBjb25zdCBSYW5n
ZSopOwogCi1TaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKLVNpbXBs
ZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7Ci1PcHRpb25hbDxTaW1w
bGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlKik7Ci1PcHRpb25hbDxTaW1wbGVS
YW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mKTsKK1NpbXBsZVJhbmdl
IG1ha2VSYW5nZShjb25zdCBSYW5nZSYpOworU2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJl
ZjxSYW5nZT4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFu
Z2UoY29uc3QgUmFuZ2UqKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOwogCiBXRUJDT1JFX0VYUE9SVCBSZWY8UmFu
Z2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCA0YThkMDA0ZGU5MTI4OWEzNGFm
MGMxNTFiMzY5YzM1M2RmYWRiY2M5Li4yNjVjNDk3YjYwODI4M2RiMTFiZTNmMDdmNjRkZWQ3NTNh
NjQxNWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIwIEBA
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUp
CiAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50
LCBvZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShj
b25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgc3RhcnQsIGNvbnN0IE9wdGlvbmFsPEJvdW5k
YXJ5UG9pbnQ+JiBlbmQpCit7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgKnN0YXJ0LCAqZW5kIH0gfTsKK30KKwor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYm
IHN0YXJ0LCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0
IHx8ICFlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBX
VEZNb3ZlKCpzdGFydCksIFdURk1vdmUoKmVuZCkgfSB9OworfQorCiBTaW1wbGVSYW5nZSBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4geyBt
YWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhub2RlKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRl
eCA3MGU3YzQyNTFjZGRmMzE3YjQ5ZDlhYTJkYzQyZTZkNDU0N2E3NGRkLi4wMzc3ODBhNjIyNDkx
ZTc1NGQwNTBlMmFmYWQzMGUxNDk2Mjk4ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApA
QCAtNDYsMTEgKzQ2LDE0IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgV0VCQ09SRV9FWFBP
UlQgU2ltcGxlUmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOwogCiAgICAg
Ly8gQ29udmVuaWVuY2Ugb3ZlcmxvYWRzIHRvIGhlbHAgd2l0aCB0cmFuc2l0aW9uIGZyb20gdXNp
bmcgYSBsb3Qgb2YgbGl2ZSByYW5nZXMuCi0gICAgLy8gRklYTUU6IE9uY2UgdHJhbnNpdGlvbiBp
cyBvdmVyLCByZW1vdmUgYW5kIGNoYW5nZSBjYWxsZXJzIHRvIHVzZSBtYWtlU2ltcGxlUmFuZ2Ug
aW5zdGVhZC4KKyAgICAvLyBGSVhNRTogT25jZSB0cmFuc2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBh
bmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VSYW5nZSBpbnN0ZWFkLgogICAgIFdFQkNPUkVf
RVhQT1JUIFNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiAgICAgU2ltcGxlUmFuZ2UoY29uc3Qg
UmVmPFJhbmdlPiYpOwogfTsKIAorV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IG1ha2VSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYsIGNvbnN0IE9wdGlvbmFs
PEJvdW5kYXJ5UG9pbnQ+Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
bWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYsIE9wdGlvbmFsPEJvdW5kYXJ5UG9p
bnQ+JiYpOworCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBlMmU4OTRjYjkz
NzljNDNhMzMzYmNiM2YwODMzMjAxNDMzZDdmMjMwLi45YWMyZTlkODYxNmRkNmEzYzE0YWYwMzU1
MjJjMzBlNjBlNzEzMTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3Rh
cnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dD
b3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3Jl
YXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgbnVsbHB0cik7CisgICAgICAgIG1fZG9j
dW1lbnQuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7
IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVu
dCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRS
YW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIFdURjo6bnVsbG9wdCk7CiAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTY1Myw3
ICs2NTMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9u
QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQogICAgIGF1dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAg
YXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0
aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0
aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKCFzZWxlY3Rp
b24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5nLCAqc2VsZWN0
aW9uLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IHNlbGVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSgqc2VsZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKSkKICAgICAgICAgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVz
Rm9yTWFya2VyKCptYXJrZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMTEyZjk3YjJhMGI2NTQ2MjU0NjYyODgyNjdlNjMz
YmRiYmZmYjVmMS4uODcwYzRkYmI2OGQzODBmOWExYjgxYTBjMGU1ZjEzYWEzMjc0YTRmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CkBAIC03NDksOSArNzQ5LDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBh
cmFncmFwaHMoKQogICAgIAogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZG9jdW1lbnQoKS5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCks
IHJhbmdlVG9CZVJlcGxhY2VkLnB0cigpKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCku
Y2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLCByYW5nZVRvQmVSZXBs
YWNlZCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdp
bGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJl
cXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKICAgICAvLyByZW1vdmFscyB0aGF0IGl0
IGRvZXMgY2F1c2UgdGhlIGluc2VydGlvbiBvZiAqYW5vdGhlciogcGxhY2Vob2xkZXIuCiAgICAg
Ym9vbCBuZWVkUGxhY2Vob2xkZXIgPSBtX25lZWRQbGFjZWhvbGRlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCBjYTY4OGFlNDk1YmFjMWQ5MjE3NzBiZjQzNWZjZmMzZjdlMmIwM2Rj
Li5hNGFlMThjYmI3ZDI1MGM4ZGVhNjMyYzZhMWVmZDYyYzYxYmY3OWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCkBAIC01MDcsMjEgKzUwNywxOCBAQCBib29sIEVkaXRvcjo6Y2FuRGVs
ZXRlKCkgY29uc3QKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCi1ib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2Uo
UmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZVJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9IHJh
bmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLT5l
bmRDb250YWluZXIoKTsKLSAgICAKLSAgICBpZiAoIXN0YXJ0Q29udGFpbmVyLmhhc0VkaXRhYmxl
U3R5bGUoKSB8fCAhZW5kQ29udGFpbmVyLmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAoIXJh
bmdlLnN0YXJ0LmNvbnRhaW5lci0+aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFyYW5nZS5lbmQuY29u
dGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChyYW5nZS0+Y29sbGFwc2VkKCkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
KHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXMgPSBzdGFydC5wcmV2aW91cygpOworICAgIGlmIChyYW5nZS5jb2xsYXBz
ZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc29tZXRpbWVzIGFsbG93IGRlbGV0aW9ucyBh
dCB0aGUgc3RhcnQgb2YgZWRpdGFibGUgcm9vdHMsIGxpa2Ugd2hlbiB0aGUgY2FyZXQgaXMgaW4g
YW4gZW1wdHkgbGlzdCBpdGVtLgotICAgICAgICBpZiAocHJldmlvdXMuaXNOdWxsKCkgfHwgcHJl
dmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVt
ZW50KCkgIT0gc3RhcnRDb250YWluZXIucm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICBh
dXRvIHByZXZpb3VzID0gVmlzaWJsZVBvc2l0aW9uIHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLnN0YXJ0KSwgRE9XTlNUUkVBTSB9LnByZXZpb3VzKCk7CisgICAgICAgIGlmIChw
cmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSByYW5nZS5zdGFydC5jb250YWluZXItPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTU4LDcgKzU1NSw3IEBAIGJvb2wgRWRpdG9yOjpk
ZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFu
dWxhcml0eSBnCiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRp
b24oKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzaG91bGRBZGRUb0tpbGxS
aW5nKQotICAgICAgICAgICAgICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgp
LmdldCgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgICAgICAgICAg
ICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgpLCBLaWxsUmluZ0luc2VydGlv
bk1vZGU6OkFwcGVuZFRleHQpOwogICAgICAgICAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0
RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVsZXRlKCkpOwogICAgICAgICAgICAgLy8gSW1wbGljaXRs
eSBjYWxscyByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKS4KICAgICAgICAg
fQpAQCAtNjI3LDcgKzYyNCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0QnlwYXNz
aW5nREhUTUwoKQogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewogICAgIFN0cmluZyB0ZXh0ID0gcmVhZFBsYWluVGV4
dEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwotICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3Vs
ZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBh
c3RlZCkpCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgY2FuU21hcnRSZXBsYWNlV2l0
aFBhc3RlYm9hcmQocGFzdGVib2FyZCkpOwogfQogCkBAIC02NTIsNyArNjQ5LDcgQEAgYm9vbCBF
ZGl0b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSAmJiBwYXN0ZWJvYXJkLmNhblNtYXJ0UmVwbGFjZSgpOwogfQogCi1ib29sIEVkaXRv
cjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdl
KiByZXBsYWNpbmdET01SYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQorYm9v
bCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNjYxLDcgKzY1OCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNl
cnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RP
CiAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KGNoaWxkKSAmJiBmcmFnbWVudC5sYXN0Q2hpbGQo
KSA9PSBjaGlsZCkKICAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0YSgpLCByZXBsYWNpbmdET01SYW5nZSwg
Z2l2ZW5BY3Rpb24pOwogCi0gICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnROb2RlKCZm
cmFnbWVudCwgcmVwbGFjaW5nRE9NUmFuZ2UsIGdpdmVuQWN0aW9uKTsKKyAgICByZXR1cm4gY2xp
ZW50KCktPnNob3VsZEluc2VydE5vZGUoZnJhZ21lbnQsIHJlcGxhY2luZ0RPTVJhbmdlLCBnaXZl
bkFjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBs
YWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxl
LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJs
b2NrcXVvdGVIYW5kbGluZykKQEAgLTcyNCwyNyArNzIxLDIxIEBAIHZvaWQgRWRpdG9yOjpyZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxl
Y3RSZXBsCiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRSZXBs
YWNlIHNtYXJ0UmVwbGFjZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0
ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZTo6WWVzLCBl
ZGl0aW5nQWN0aW9uKTsKKyAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLCBzZWxlY3RSZXBs
YWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxlOjpZZXMsIGVkaXRpbmdBY3Rpb24pOwog
fQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAotYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKK2Jvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKSBjb25zdAogewotICAgIGlmICghcmFuZ2UgfHwg
cmFuZ2UtPmNvbGxhcHNlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYg
KCFjYW5EZWxldGVSYW5nZShyYW5nZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UocmFuZ2UpOworICAg
IHJldHVybiByYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZCgpICYmIGNhbkRlbGV0ZVJhbmdlKCpy
YW5nZSkgJiYgY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKCpyYW5nZSk7
CiB9CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTENvcHkoKQpAQCAtNzYzLDcgKzc1NCw3IEBAIGJv
b2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2
ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpD
dXQpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKK2Jvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QK
IHsKICAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91
bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2Vy
dEFjdGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk4MCw3ICs5NzEsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxl
bWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEpOwogfQogICAgIAotYm9vbCBFZGl0
b3I6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdl
KQorYm9vbCBFZGl0b3I6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBz
dHlsZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogeyAgIAogICAgIHJldHVybiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgcmFuZ2UpOwogfQpAQCAtMTAxMSw3ICsxMDAyLDcg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0Vt
cHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFj
bGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVS
YW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlT
dHlsZSgqc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0
aW5nQWN0aW9uKTsKIH0KQEAgLTEwMjIsNyArMTAxMyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlVG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0
ZXh0IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICgh
Y2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhS
ZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCisg
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0
eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGFwcGx5U3R5bGUoV1RGTW92ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24sIGNvbG9yRmlsdGVyTW9k
ZSk7CkBAIC0xMDMzLDcgKzEwMjQsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHls
ZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZQogICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYm
IGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKCpzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3Jh
cGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9CiAKQEAgLTEyNjcsNyArMTI1OCw3IEBA
IGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRU
ZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dCh0ZXh0LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBwYXNzIGZhbHNlIHRvIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKCkg
dG8gbm90IHJlbW92ZSBtYXJrZXJzIGlmCkBAIC0xMzI2LDcgKzEzMTcsNyBAQCBib29sIEVkaXRv
cjo6aW5zZXJ0TGluZUJyZWFrKCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5n
ZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2Vy
dFRleHQoIlxuIl9zLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xMzQ2LDcgKzEzMzcsNyBAQCBib29s
IEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogICAgIAotICAgIGlmICgh
c2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiJfcywgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBWaXNpYmxl
UG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpOwpAQCAtMTQwNiwxMCArMTM5NywxMCBAQCB2b2lkIEVkaXRvcjo6cG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZp
cwogCiB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIg
YWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgp
OwotICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb24uZ2V0KCkpOwor
ICAgIGF1dG8gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIHdpbGxXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb24pOwogICAgIGlmIChhY3Rpb24gPT0gQ3V0QWN0aW9u
KSB7Ci0gICAgICAgIGlmICghc2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLmdldCgpKSkKKyAg
ICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRy
dWUpOwpAQCAtMTQzNCw3ICsxNDI1LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHko
RWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICAgICAgICAgIHdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxz
ZQogICAgICAgICAgICAgLy8gRklYTUU6IERlbGV0ZSBhZnRlciA8aHR0cDovL3dlYmtpdC5vcmcv
Yi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRl
KCksICptX2RvY3VtZW50LmZyYW1lKCksIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNm
ZXIpOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndy
aXRlU2VsZWN0aW9uKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKS5nZXQoKSwgY2FuU21hcnRD
b3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZv
ckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTE1MjYsNyArMTUx
Nyw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtRGVsZXRlKCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBLaWxs
UmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgIGFkZFJhbmdlVG9LaWxsUmluZygq
c2VsZWN0ZWRSYW5nZSgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAg
IGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpKTsK
IAogICAgIC8vIGNsZWFyIHRoZSAic3RhcnQgbmV3IGtpbGwgcmluZyBzZXF1ZW5jZSIgc2V0dGlu
ZywgYmVjYXVzZSBpdCB3YXMgc2V0IHRvIHRydWUKQEAgLTE3ODQsMTIgKzE3NzUsMTIgQEAgdm9p
ZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCiAKICNlbmRpZgog
Ci1ib29sIEVkaXRvcjo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIEVkaXRv
cjo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0
dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRFbmRFZGl0aW5nKHJhbmdlKTsKIH0KIAot
Ym9vbCBFZGl0b3I6OnNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIEVkaXRv
cjo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBy
ZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZSk7CiB9
CkBAIC0xODQxLDcgKzE4MzIsNyBAQCB2b2lkIEVkaXRvcjo6ZGlkRW5kRWRpdGluZygpCiAgICAg
ICAgIGNsaWVudCgpLT5kaWRFbmRFZGl0aW5nKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjp3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqIHJhbmdlKQordm9pZCBFZGl0b3I6OndpbGxX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlKQogewogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPndpbGxXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChyYW5nZSk7CkBAIC0xOTI0LDE0ICsxOTE1LDE0IEBAIFdyaXRp
bmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0
KCkgY29uc3QKIAogdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKIHsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gY29tcG9zaXRpb25SYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBj
b21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIC8vIFRoZSBjb21wb3NpdGlvbiBjYW4gc3RhcnQgaW5zaWRlIGEgY29tcG9zZWQgY2hh
cmFjdGVyIHNlcXVlbmNlLCBzbyB3ZSBoYXZlIHRvIG92ZXJyaWRlIGNoZWNrcy4KICAgICAvLyBT
ZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwotICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRh
dGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAg
c2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihyYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPmVuZCkp
OwogICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9
KTsKIH0KIApAQCAtMjQ4NSw5ICsyNDc2LDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAg
ICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3Bl
bGxpbmcpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50
V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
KTsKKyAgICBhdXRvIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3Jk
KHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBS
aWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRq
YWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdl
KGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwg
Y3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSk7CisgICAgbWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdv
cmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFjZW50V29yZFJhbmdlKTsKICNlbHNlCiAj
aWYgIVVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAgICBVTlVTRURfUEFSQU0oZG9S
ZXBsYWNlbWVudCk7CkBAIC0yNTcyLDcgKzI1NjMsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0
LAogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNhbiwgcmVzcGVjdGluZyBib3VuZGFy
aWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQuCiAgICAgICAgIGZ1bGxTZW50ZW5j
ZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpmdWxsU2Vu
dGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAgICBzcGVsbENoZWNr
aW5nUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNwZWxs
Q2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgbWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBj
cmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFj
ZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGZ1bGxTZW50ZW5jZVJhbmdlKSk7CisgICAg
ICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5n
T3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgZnVsbFNlbnRl
bmNlUmFuZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNTgwLDcgKzI1NzEsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDaGVj
ayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5n
ZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZTsKICAgICBtYXJr
TWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0
V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeSkpLCBtaXNzcGVsbGluZ1JhbmdlKTsKIAogICAgIC8vIEF1dG9jb3JyZWN0IHRoZSBtaXNz
cGVsbGVkIHdvcmQuCkBAIC0yNTk5LDcgKzI1OTAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0
LAogICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9kb2N1bWVudC5lZGl0b3IoKS5z
aG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQu
ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGlu
Z1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0
b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5v
LCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogCkBAIC0yNjE2LDcgKzI2MDcsNyBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LAogI2VuZGlmCiB9CiAgICAgCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wg
Y2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rpb24gYWxyZWFkeSBl
eHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCkBAIC0yNjQ0LDkgKzI2MzUsMTEgQEAgdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uLCBib28KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFRleHRDaGVja2lu
Z0hlbHBlciBjaGVja2VyKCpjbGllbnQoKSwgKnNlYXJjaFJhbmdlKTsKLSAgICBpZiAoY2hlY2tT
cGVsbGluZykKLSAgICAgICAgY2hlY2tlci5tYXJrQWxsTWlzc3BlbGxpbmdzKGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7Ci0gICAgZWxzZSBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisg
ICAgaWYgKGNoZWNrU3BlbGxpbmcpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3Nw
ZWxsaW5nTGl2ZVJhbmdlOworICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGluZ3MoZmly
c3RNaXNzcGVsbGluZ0xpdmVSYW5nZSk7CisgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9
IG1ha2VSYW5nZShmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlKTsKKyAgICB9IGVsc2UgaWYgKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICBjaGVja2VyLm1hcmtBbGxCYWRHcmFt
bWFyKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOwpAQCAtMjY3NCwxOCAr
MjY2NywxOCBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5v
ZGUoKSBjb25zdAogICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIH0K
IAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCit2b2lkIEVk
aXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogICAgIG1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCB0cnVlLCBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOwogfQogICAgIAogdm9pZCBFZGl0b3I6Om1hcmtCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlz
c3BlbGxpbmdSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlOwogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCBmYWxz
ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+
IHRleHRDaGVja2luZ09wdGlvbnMsIFJlZlB0cjxSYW5nZT4mJiBzcGVsbGluZ1JhbmdlLCBSZWZQ
dHI8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGdy
YW1tYXJSYW5nZSkKK3ZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25z
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5nUmFuZ2UsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCiB7CiAgICAgaWYgKHBsYXRmb3JtRHJpdmVu
VGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MTAsOCArMjcwMyw4
IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgaWYgKCFpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKCZlZGl0YWJsZU5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJhbmdl
VG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gZ3JhbW1hclJhbmdlLnJlbGVhc2VOb25OdWxs
KCkgOiBzcGVsbGluZ1JhbmdlLnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgVGV4dENoZWNraW5nUGFy
YWdyYXBoIHBhcmFncmFwaFRvQ2hlY2socmFuZ2VUb0NoZWNrLmdldCgpKTsKKyAgICBhdXRvJiBy
YW5nZVRvQ2hlY2sgPSBzaG91bGRNYXJrR3JhbW1hciA/ICpncmFtbWFyUmFuZ2UgOiAqc3BlbGxp
bmdSYW5nZTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoVG9DaGVjayhjcmVh
dGVMaXZlUmFuZ2UocmFuZ2VUb0NoZWNrKSk7CiAgICAgaWYgKHBhcmFncmFwaFRvQ2hlY2suaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MTksOCArMjcxMiw4IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxU
ZXh0Q2hlY2tpbmdUeXBlCiAKICAgICAvLyBJbiBhc3luY2hyb25vdXMgbW9kZSwgd2UgaW50ZW50
aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgtd2lkZSBzZW50ZW5jZS4KICAgICBjb25zdCBhdXRvIHJl
c29sdmVkT3B0aW9ucyA9IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhlZGl0YWJsZU5vZGUs
IHRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIGF1dG8gdGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBh
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gbWFrZVJlZigqYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSkgOiByYW5nZVRvQ2hlY2suY29weVJlZigpOwotICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxs
Q2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNz
SW5jcmVtZW50YWwsIGFzeW5jaHJvbm91cyA/IG1ha2VSZWYocGFyYWdyYXBoVG9DaGVjay5wYXJh
Z3JhcGhSYW5nZSgpKSA6IFdURk1vdmUocmFuZ2VUb0NoZWNrKSwgV1RGTW92ZSh0ZXh0UmVwbGFj
ZW1lbnRSYW5nZSksIHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgYXV0
byYgdGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gKmF1
dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UgOiByYW5nZVRvQ2hlY2s7CisgICAgYXV0byByZXF1ZXN0
ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2lu
Z1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gUmVmPFJhbmdlPiB7IHBhcmFncmFw
aFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSB9IDogY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9DaGVj
ayksIGNyZWF0ZUxpdmVSYW5nZSh0ZXh0UmVwbGFjZW1lbnRSYW5nZSksIHBhcmFncmFwaFRvQ2hl
Y2sucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTI3NTMsOSArMjc0Niw5IEBAIHN0YXRpYyBib29sIGlzQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50VHlwZShUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhSYW5nZSYgcmFuZ2VU
b1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit2b2lkIEVkaXRvcjo6cmVwbGFj
ZVJhbmdlRm9yU3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb1JlcGxhY2Us
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0gICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCktPmFwcGx5KCk7CisgICAg
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRv
UmVwbGFjZSksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKIH0KIAogc3RhdGljIHZvaWQgY29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2lu
Z1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJlc3VsdENoYXJhY3RlclJhbmdlKQpAQCAt
Mjg5NSw3ICsyODg4LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNw
ZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAg
ICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBp
ZiAoY2FuRWRpdFJpY2hseSgpKQogICAgICAgICAgICAgICAgICAgICBDcmVhdGVMaW5rQ29tbWFu
ZDo6Y3JlYXRlKGRvY3VtZW50KCksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVwbGFjZW1lbnQsIHJh
bmdlVG9SZXBsYWNlLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkgeworICAgICAg
ICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlbWVu
dCwgbWFrZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkp
IHsKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsg
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
IHsKQEAgLTI5NDgsMTIgKzI5NDEsMTIgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxh
Y2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgaWYgKHJlcGxhY2Vk
U3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNob3Vs
ZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQorICAgIGF1dG8gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwor
ICAgIGlmICghc2VsZWN0aW9uIHx8ICFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBz
ZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJp
bmcsICpzZWxlY3Rpb24pOwotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNl
bGVjdGlvbik7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGlvbikpOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNl
ZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0
aW9uOjpJbnNlcnQpOwogICAgIGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdl
KENoYXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5n
Lmxlbmd0aCgpKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCwgU3RyaW5nKCkpOwpAQCAtMjk3OSwxMSArMjk3MiwxMSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlYwogICAgICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCkpCiAgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChUZXh0Q2hlY2tp
bmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgYXV0byBzcGVsbENoZWNraW5nUmFuZ2UgPSBzcGVs
bGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxp
dmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2lu
Z1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hlY2tpbmdSYW5nZSwgc3BlbGxDaGVja2luZ1Jh
bmdlLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Cisg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKICAgICBtYXJr
TWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwog
ICAgIGlmIChtYXJrR3JhbW1hcikKICAgICAgICAgbWFya0JhZEdyYW1tYXIoZ3JhbW1hclNlbGVj
dGlvbik7CkBAIC0zMDg2LDIzICszMDc5LDE4IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2Nv
cnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBv
c2l0aW9uKHBvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRp
dG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRv
d1BvaW50KQogewogICAgIGF1dG8gZG9jdW1lbnQgPSBtX2RvY3VtZW50LmZyYW1lKCktPmRvY3Vt
ZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0
byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1
dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndp
bmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAgIGF1dG8gc2VsZWN0aW9uID0gVmlzaWJs
ZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSB9
OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBWaXNpYmxlU2Vs
ZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lVmlldy0+d2luZG93
VG9Db250ZW50cyh3aW5kb3dQb2ludCkpIH0udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogdm9p
ZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3Jv
bGxBbGlnbm1lbnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0ZW50T3B0aW9uIHJldmVhbEV4dGVudE9w
dGlvbikKQEAgLTMxMjksMTcgKzMxMTcsMTYgQEAgdm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICAg
ICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50KTsKIH0KIAotUmVmUHRyPFJhbmdl
PiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEVkaXRvcjo6Y29tcG9zaXRpb25SYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NvbXBvc2l0
aW9uTm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9jb21wb3NpdGlvbk5vZGUtPmxlbmd0aCgp
OwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4obV9jb21wb3NpdGlvblN0YXJ0LCBsZW5n
dGgpOwotICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBtX2NvbXBv
c2l0aW9uRW5kKSwgbGVuZ3RoKTsKLSAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgZWFybHkgcmV0
dXJuIG5lZWVkPworICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6Y2xhbXAobV9jb21wb3NpdGlvbkVu
ZCwgc3RhcnQsIGxlbmd0aCk7CiAgICAgaWYgKHN0YXJ0ID49IGVuZCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobV9jb21wb3NpdGlvbk5vZGUtPmRv
Y3VtZW50KCksIG1fY29tcG9zaXRpb25Ob2RlLmdldCgpLCBzdGFydCwgbV9jb21wb3NpdGlvbk5v
ZGUuZ2V0KCksIGVuZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHsgeyB7ICptX2NvbXBvc2l0aW9uTm9kZSwgc3RhcnQgfSwgeyAqbV9jb21wb3NpdGlvbk5vZGUs
IGVuZCB9IH0gfTsKIH0KIAogYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVu
c2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGlvbkVuZCkgY29uc3QKQEAg
LTMyMDEsNyArMzE4OCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIH0KIAogICAg
IC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgotICAgIGlmICghc2hvdWxkSW5z
ZXJ0VGV4dCh0cmFuc3Bvc2VkLCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBl
ZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRyYW5zcG9zZWQsIG5ld1NlbGVjdGlvbi5m
aXJzdFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm47
CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRyYW5zcG9zZWQsIFNlbGVjdFJlcGxhY2Vt
ZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIH0KQEAgLTMz
NTcsMTMgKzMzNDQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlQ2FyZXRXaWR0aChJ
bnRSZWN0JiByZWN0KQogICAgICAgICByZWN0LnNldEhlaWdodCgwKTsKIH0KIAotSW50UmVjdCBF
ZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKK0ludFJlY3QgRWRp
dG9yOjpmaXJzdFJlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7
Ci0gICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKKyAgICByYW5nZS5z
dGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0VmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwor
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNKTsKIAotICAgIGlmIChyYW5nZS0+
Y29sbGFwc2VkKCkpIHsKKyAgICBpZiAocmFuZ2UuY29sbGFwc2VkKCkpIHsKICAgICAgICAgLy8g
RklYTUU6IEdldHRpbmcgY2FyZXQgcmVjdCBhbmQgcmVtb3ZpbmcgY2FyZXQgd2lkdGggaXMgYSB2
ZXJ5IHJvdW5kYWJvdXQgd2F5IHRvIGdldCBjb2xsYXBzZWQgcmFuZ2UgbG9jYXRpb24uCiAgICAg
ICAgIC8vIEluIHBhcnRpY3VsYXIsIHdpZHRoIGFkanVzdG1lbnQgZG9lc24ndCB3b3JrIGZvciBy
b3RhdGVkIHRleHQuCiAgICAgICAgIEludFJlY3Qgc3RhcnRDYXJldFJlY3QgPSBSZW5kZXJlZFBv
c2l0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uKS5hYnNvbHV0ZVJlY3QoKTsKQEAgLTMzNzEsMTAg
KzMzNTgsMTAgQEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5n
ZSkgY29uc3QKICAgICAgICAgcmV0dXJuIHN0YXJ0Q2FyZXRSZWN0OwogICAgIH0KIAotICAgIFZp
c2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPmVuZFBvc2l0aW9uKCksIFVQ
U1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpLCBVUFNUUkVBTSk7CiAKICAgICBpZiAoaW5T
YW1lTGluZShzdGFydFZpc2libGVQb3NpdGlvbiwgZW5kVmlzaWJsZVBvc2l0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSkpKTsKKyAgICAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1
YWRzKHJhbmdlKSkpOwogCiAgICAgTGF5b3V0VW5pdCBleHRyYVdpZHRoVG9FbmRPZkxpbmU7CiAg
ICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IFJlbmRlcmVkUG9zaXRpb24oc3RhcnRWaXNpYmxl
UG9zaXRpb24pLmFic29sdXRlUmVjdCgmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKQEAgLTM0MDAs
NyArMzM4Nyw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWCiAgICAgaWYgKG1fZG9jdW1lbnQu
ZnJhbWUoKSAmJiBtX2RvY3VtZW50LmZyYW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIGNsaWVu
dCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5n
ZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5n
ZShuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGFmZmluaXR5LCBzdGls
bFNlbGVjdGluZyk7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBuZXdTZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC0zNDg3LDcgKzM0NzQsNyBAQCBib29s
IEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0
aW9ucykKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKIAotICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3Ry
aW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgp
LCBvcHRpb25zKTsKKyAgICBhdXRvIHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQs
IHNlbGVjdGlvbi5maXJzdFJhbmdlKCksIG9wdGlvbnMpOwogICAgIGlmICghcmVzdWx0UmFuZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQ5OSwxMDYgKzM0ODYsMTAyIEBAIGJvb2wg
RWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRp
b25zKQogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5k
T3B0aW9ucyBvcHRpb25zKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0
cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
ZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAodGFyZ2V0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICAvLyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHJlZmVyZW5jZSByYW5n
ZSwgaWYgdGhlcmUncyBhIHJlZmVyZW5jZSByYW5nZSB0aGF0J3Mgbm90IGluIHNoYWRvdyBjb250
ZW50LiBXaGljaCBlZGdlCiAgICAgLy8gaXMgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUg
c2VhcmNoaW5nIGZvcndhcmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rp
b24gaXMgc2V0LgotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRz
KGRvY3VtZW50KCkpKTsKIAogICAgIGJvb2wgZm9yd2FyZCA9ICFvcHRpb25zLmNvbnRhaW5zKEJh
Y2t3YXJkcyk7CiAgICAgYm9vbCBzdGFydEluUmVmZXJlbmNlUmFuZ2UgPSByZWZlcmVuY2VSYW5n
ZSAmJiBvcHRpb25zLmNvbnRhaW5zKFN0YXJ0SW5TZWxlY3Rpb24pOworICAgIGF1dG8gc2hhZG93
VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydENvbnRhaW5l
cigpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOworCisgICAgYXV0byBzZWFyY2hS
YW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKICAgICBp
ZiAocmVmZXJlbmNlUmFuZ2UpIHsKICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVm
ZXJlbmNlUmFuZ2UtPnN0YXJ0IDogcmVmZXJlbmNlUmFuZ2UtPmVuZDsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzdGFydEluUmVmZXJlbmNlUmFuZ2UgPyBy
ZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UuZW5kID0gc3RhcnRJblJlZmVyZW5jZVJh
bmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZCA6IHJlZmVyZW5jZVJhbmdlLT5zdGFydDsKICAgICB9
Ci0KLSAgICBSZWZQdHI8U2hhZG93Um9vdD4gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5n
ZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydENvbnRhaW5lcigpLmNvbnRhaW5pbmdTaGFkb3dSb290
KCkgOiBudWxscHRyOwogICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICBpZiAoZm9y
d2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBz
aGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAgICAgICAgICAgc2VhcmNoUmFu
Z2UuZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJv
b3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnNo
YWRvd1RyZWVSb290LCAwKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gbWFrZUJv
dW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKICAgICB9Cisg
ICAgYXV0byByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRhcmdldCwg
b3B0aW9ucyk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJh
bmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICAv
LyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZlcmVuY2UgcmFuZ2UgYW5kIHRoZSBmb3VuZCByYW5n
ZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVyZW5jZSByYW5nZSwgZmluZCBhZ2Fpbi4KICAgICAv
LyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFw
c2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rp
b24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3
YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYmIGFyZVJhbmdlc0VxdWFs
KGNyZWF0ZUxpdmVSYW5nZShWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgewotICAgICAgICBzZWFyY2hSYW5n
ZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5j
ZVJhbmdlICYmIFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdl
KCkgPT0gcmVmZXJlbmNlUmFuZ2UpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChmb3J3YXJkKQot
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlZmVyZW5jZVJhbmdlLT5lbmRQb3Np
dGlvbigpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gcmVmZXJlbmNlUmFuZ2Ut
PmVuZDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChyZWZl
cmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLQorICAgICAgICAgICAgc2VhcmNoUmFuZ2Uu
ZW5kID0gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0OwogICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3Qp
IHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVz
KCkpOworICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLmVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsK
KyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5zdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50QmVm
b3JlTm9kZUNvbnRlbnRzKCpzaGFkb3dUcmVlUm9vdCk7CiAgICAgICAgIH0KLQotICAgICAgICBy
ZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwg
dGFyZ2V0LCBvcHRpb25zKSk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChz
ZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CiAKICAgICAvLyBJZiBub3RoaW5n
IHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9s
bG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgp
ICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRl
bnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3Qo
KSkgeworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkg
eworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhk
b2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gaG9zdCA9IHNoYWRvd1RyZWVSb290LT5zaGFk
b3dIb3N0KCkpIHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgICAgIHNl
YXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsK
KyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS5lbmQgPSAqbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGUoKmhvc3QpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLnN0YXJ0ID0gKm1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9k
ZSgqaG9zdCk7CiAgICAgICAgIH0KLQotICAgICAgICByZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVS
YW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CisgICAg
ICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRp
b25zKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhbmQgd2Un
cmUgd3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUgZW50aXJlIGRvY3VtZW50ICh0aGlzIHdp
bGwKICAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2ggdGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hl
ZCBpbiBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIG9w
dGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVh
dGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dChyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSksIHRh
cmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBvcHRp
b25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7CisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBs
YWluVGV4dChyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucyk7CiAg
ICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0
aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAogICAgICAgICAvLyAoZS5nLiwg
dGhlIHJlZmVyZW5jZSByYW5nZSB3YXMgYWxyZWFkeSB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGlz
IHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0CiAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGEg
c3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIGluIHRoYXQg
Y2FzZS4KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpID8gbnVs
bHB0ciA6IHJlc3VsdFJhbmdlOworICAgIHJldHVybiByZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSA/
IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbChyZXN1bHRSYW5nZSk7CiB9CiAKLXN0YXRpYyBi
b29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlKQorc3RhdGljIGJv
b2wgaXNGcmFtZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7CiAgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKTsg
b3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3du
ZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50KCkgPT0g
JnJhbmdlLm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSByYW5n
ZS5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50KTsKKyAgICAgICAgaWYgKCZvd25lckVsZW1l
bnQtPmRvY3VtZW50KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm93
bmVyRWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi11bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5z
aWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiogbWF0
Y2hlcykKK3Vuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
IHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRmluZE9wdGlvbnMg
b3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxTaW1wbGVS
YW5nZT4qIG1hdGNoZXMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZTsKKyAgICBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gc2VhcmNoUmFuZ2U7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGlmICgm
cmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHNlYXJj
aFJhbmdlID0gcmFuZ2U7CisgICAgICAgIGlmICgmcmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkgPT0g
JmRvY3VtZW50KCkpCisgICAgICAgICAgICBzZWFyY2hSYW5nZSA9ICpyYW5nZTsKICAgICAgICAg
ZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdlKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKLSAgICAg
ICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIHNl
YXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KCkpOwog
Ci0gICAgTm9kZSYgb3JpZ2luYWxFbmRDb250YWluZXIgPSBzZWFyY2hSYW5nZS0+ZW5kQ29udGFp
bmVyKCk7Ci0gICAgaW50IG9yaWdpbmFsRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2UtPmVuZE9mZnNl
dCgpOworICAgIGF1dG8gb3JpZ2luYWxFbmQgPSBzZWFyY2hSYW5nZS0+ZW5kOwogCiAgICAgdW5z
aWduZWQgbWF0Y2hDb3VudCA9IDA7CiAgICAgZG8gewpAQCAtMzYwNyw4ICszNTkwLDggQEAgdW5z
aWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBS
YW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcigqcmVzdWx0UmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5zaGFkb3dIb3N0KCkpOwotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVu
ZChvcmlnaW5hbEVuZENvbnRhaW5lciwgb3JpZ2luYWxFbmRPZmZzZXQpOworICAgICAgICAgICAg
c2VhcmNoUmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygq
cmVzdWx0UmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5zaGFkb3dIb3N0KCkpOworICAgICAgICAgICAg
c2VhcmNoUmFuZ2UtPmVuZCA9IG9yaWdpbmFsRW5kOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIApAQCAtMzYyMywxNSArMzYwNiwxNCBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9w
dAogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1hdGNoQ291bnQgPj0gbGltaXQpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAvLyBTZXQgdGhlIG5ldyBzdGFydCBmb3IgdGhlIHNlYXJj
aCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cwotICAgICAgICAvLyByZXN1bHQg
cmFuZ2UuIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGEgVmlzaWJsZVBvc2l0aW9uIGhlcmUsCi0g
ICAgICAgIC8vIHNpbmNlIGZpbmRQbGFpblRleHQgd2lsbCB1c2UgYSBUZXh0SXRlcmF0b3IgdG8g
Z28gb3ZlciB0aGUgdmlzaWJsZQotICAgICAgICAvLyB0ZXh0IG5vZGVzLiAKLSAgICAgICAgc2Vh
cmNoUmFuZ2UtPnNldFN0YXJ0KFdURk1vdmUocmVzdWx0UmFuZ2UuZW5kLmNvbnRhaW5lciksIHJl
c3VsdFJhbmdlLmVuZC5vZmZzZXQpOworICAgICAgICAvLyBTZXQgdGhlIG5ldyBzdGFydCBmb3Ig
dGhlIHNlYXJjaCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyByZXN1bHQgcmFu
Z2UuCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIFZpc2libGVQb3NpdGlvbiBo
ZXJlOiBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHZpc2li
bGUgdGV4dCBub2Rlcy4KKyAgICAgICAgc2VhcmNoUmFuZ2UtPnN0YXJ0ID0gV1RGTW92ZShyZXN1
bHRSYW5nZS5lbmQpOwogCi0gICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VhcmNoUmFu
Z2UtPnNoYWRvd1Jvb3QoKTsKLSAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSAm
JiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRv
d1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAgICAgICBp
ZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBzaGFk
b3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zdGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFk
b3dSb290KCkpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPmVuZCA9IG1ha2VCb3VuZGFy
eVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKKyAgICAgICAgfQogICAg
IH0gd2hpbGUgKHRydWUpOwogCiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CkBAIC0zOTQwLDIyICsz
OTIyLDI0IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25z
dAogICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAorT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
LnZpc2libGVFbmQoKSkpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSk7CisgICAgYXV0byBlbmQg
PSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgp
KSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiB7IHsgKnN0YXJ0LCAqZW5kIH0gfTsKIH0KIAotUmVmUHRyPFJhbmdlPiBF
ZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3Vs
dCYgcmVzdWx0KSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JU
ZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpIGNvbnN0
CiB7CiAgICAgaWYgKCFyZXN1bHQucmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlID0gY29udGV4dFJhbmdlRm9yQ2Fu
ZGlkYXRlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8g
Y29udGV4dFJhbmdlID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogICAgIGlm
ICghY29udGV4dFJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjb250ZXh0UmFuZ2UsIHJlc3Vs
dC5yYW5nZSkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZXNv
bHZlQ2hhcmFjdGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0LnJhbmdlKTsKIH0KIAogdm9p
ZCBFZGl0b3I6OnNjaGVkdWxlRWRpdG9yVUlVcGRhdGUoKQpAQCAtNDIyNSw4ICs0MjA5LDggQEAg
dm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBh
Y2NlcHRlZENhbmRpZGF0ZSkKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSA9IHRy
dWU7CiAKICAgICBpZiAoYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGFj
Y2VwdGVkQ2FuZGlkYXRlKSkgewotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dChhY2NlcHRl
ZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQotICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUo
cmFuZ2UuZ2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKKyAg
ICAgICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQs
IHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICAgICAgICAgIFJlcGxhY2VS
YW5nZVdpdGhUZXh0Q29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGFjY2Vw
dGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKICAgICB9IGVsc2UKICAgICAgICAg
aW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVsbHB0cik7CiAKQEAg
LTQyNTgsMTYgKzQyNDIsMTYgQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFi
bGVkKCkKICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9ja0N1cnNv
cihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmFk
anVzdGVkU2VsZWN0aW9uUmFuZ2UoKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6YWRq
dXN0ZWRTZWxlY3Rpb25SYW5nZSgpCiB7Ci0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRv
IGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8K
LSAgICAvLyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2
ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBy
YW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBBU1NFUlQoY29tbW9uQW5jZXN0
b3IpOwotICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFn
KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwot
ICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQoKmVuY2xv
c2luZ0FuY2hvciwgMCk7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0
aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8gV2hvZXZlciB3
cm90ZSB0aGlzIGNvZGUgb3JpZ2luYWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4
cGxhaW5pbmcgdGhlIHJhdGlvbmFsZS4KKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OworICAgIGlmIChyYW5nZSkgeworICAgICAgICBpZiAoYXV0byBlbmNsb3NpbmdBbmNob3IgPSBl
bmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKHJhbmdlLT5zdGFydC5jb250YWluZXIsIHJhbmdlLT5lbmQuY29udGFpbmVyKS5n
ZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKKyAgICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRp
b25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0
cigpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkpID49IDApCisg
ICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2Rl
Q29udGVudHMoKmVuY2xvc2luZ0FuY2hvcik7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJu
IHJhbmdlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA2OWQ2MDU5MzAyNjUyZjY3
MmZkMjU5MTUyZDNkY2ZiNDVmZjA5MjZmLi45ZGVkZGNhMzgzNmYxNTMwMzZjZmFmOWM4MGRhZDM5
OTQ0ZjQ0OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjEzLDEwICsyMTMsMTAgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgb3V0
ZGVudCgpOwogICAgIHZvaWQgdHJhbnNwb3NlKCk7CiAKLSAgICBib29sIHNob3VsZEluc2VydEZy
YWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbik7Ci0g
ICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5z
ZXJ0QWN0aW9uKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZERlbGV0ZVJh
bmdlKFJhbmdlKikgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVy
dGllcyosIFJhbmdlKik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZy
YWdtZW50JiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9u
KTsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRp
ZXMmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29u
dGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsKIApAQCAtMzIy
LDE2ICszMjIsMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZElu
Rm9jdXNlZE5vZGUoKSBjb25zdDsKICAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
Tm9kZSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50
KTsKLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFJl
ZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJrTWlzc3Bl
bGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1h
ciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAgICAgdm9pZCBt
YXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYsIGNvbnN0IFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlUmFu
Z2VGb3JTcGVsbENoZWNraW5nKFJhbmdlJiwgY29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX292ZXJ3cml0ZU1vZGVFbmFibGVkOyB9CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwogCi0gICAgdm9pZCBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlPiwgUmVmUHRyPFJhbmdlPiYmIHNwZWxsaW5nUmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBhdXRv
bWF0aWNSZXBsYWNlbWVudFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgZ3JhbW1hclJhbmdlKTsKKyAg
ICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5n
UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQKICNlbmRpZgpA
QCAtMzQzLDggKzM0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dTcGVsbGluZ0d1ZXNzUGFu
ZWwoKTsKICAgICBib29sIHNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKTsKIAotICAgIGJvb2wgc2hv
dWxkQmVnaW5FZGl0aW5nKFJhbmdlKik7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdl
Kik7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKyAg
ICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogICAgIHZvaWQg
Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKICAgICBib29sIGNhblVuZG8oKSBjb25zdDsKQEAg
LTM1Niw3ICszNTYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpOwog
ICAgIHZvaWQgZGlkRW5kRWRpdGluZygpOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKFJhbmdlKik7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCgpOwogCiAgICAgdm9pZCBzaG93Rm9udFBhbmVsKCk7CkBAIC0zODAs
NyArMzgwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybUNvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYpOyAvLyBpZiBubyBleGlzdGluZyBjb21wb3NpdGlvbiwgcmVw
bGFjZXMgc2VsZWN0aW9uCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5jZWxDb21wb3NpdGlv
bigpOwogICAgIGJvb2wgY2FuY2VsQ29tcG9zaXRpb25JZlNlbGVjdGlvbklzSW52YWxpZCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjb21wb3NpdGlvblJh
bmdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRDb21wb3NpdGlvblNlbGVj
dGlvbih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3Rpb25FbmQpIGNv
bnN0OwogCiAgICAgLy8gZ2V0dGluZyBpbnRlcm5hdGlvbmFsIHRleHQgaW5wdXQgY29tcG9zaXRp
b24gc3RhdGUgKGZvciB1c2UgYnkgSW5saW5lVGV4dEJveCkKQEAgLTQwMCw3ICs0MDAsNyBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KGJvb2wsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWxFeGlzdGluZ1NlbGVjdGlvbiA9IFJl
dmVhbFNlbGVjdGlvbjo6WWVzKTsKICAgICBib29sIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBj
b25zdCB7IHJldHVybiBtX2lnbm9yZVNlbGVjdGlvbkNoYW5nZXM7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93
UG9pbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUZv
clBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CiAKICAgICB2b2lkIGNsZWFyKCk7
CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAKICAgICBFZGl0aW5nQmVoYXZpb3IgYmVo
YXZpb3IoKSBjb25zdDsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSgpOworICAg
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzZWxlY3RlZFJhbmdlKCk7CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybU1hcmtlZFRleHQoKTsK
QEAgLTQ0Niw3ICs0NDYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dEZvckRh
dGFUcmFuc2ZlcigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZmluZFN0cmluZyhj
b25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBGaW5kT3B0aW9ucyk7
CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlT2ZTdHJpbmco
Y29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRmluZE9wdGlvbnMp
OwogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyaygpIGNvbnN0OyAvLyBNYXJrLCB0
byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCiAgICAgdm9pZCBzZXRNYXJrKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mKTsKQEAgLTQ1NSwxMyArNDU1LDEzIEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmICwg
RWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0OwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZmlyc3RSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmKSBjb25zdDsKIAogICAgIHZvaWQgc2VsZWN0aW9uV2lsbENoYW5nZSgpOwogICAgIHZvaWQg
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxl
Y3Rpb24sIE9wdGlvblNldDxGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9uPik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CiAg
ICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0
eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWdu
ZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRpb25z
LCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFJlZlB0cjxSYW5nZT4+
Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBGaW5kT3B0aW9ucywgdW5z
aWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxTaW1wbGVSYW5nZT4qKTsKICAg
ICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCk7
CiAKQEAgLTU0NSw4ICs1NDUsOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0
KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29u
c3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0
KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OwogICAgIGJvb2wgaXNIYW5kbGluZ0Fj
Y2VwdGVkQ2FuZGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5k
aWRhdGU7IH0KIAogICAgIHZvaWQgc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhib29s
IGIpIHsgbV9pc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvID0gYjsgfQpAQCAtNTc5LDcgKzU3
OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kb2N1bWVudDsgfQogCi0gICAgYm9vbCBjYW5EZWxldGVSYW5nZShSYW5nZSop
IGNvbnN0OworICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25z
dDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmKTsK
ICAgICB2b2lkIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CiAg
ICAgdm9pZCBwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqLCBPcHRpb25TZXQ8UGFzdGVP
cHRpb24+KTsKQEAgLTU4OCw3ICs1ODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcXVvdGVGcmFn
bWVudEZvclBhc3RpbmcoRG9jdW1lbnRGcmFnbWVudCYpOwogCiAgICAgdm9pZCByZXZlYWxTZWxl
Y3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiA9IFNjcm9s
bEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50T3B0aW9uID0gRG9O
b3RSZXZlYWxFeHRlbnQpOwotICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+
JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFk
R3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2Rl
JiByb290RWRpdGFibGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4pOwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlv
cikgY29uc3Q7CkBAIC02MDgsNyArNjA4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPFJhbmdlPiBhZGp1c3Rl
ZFNlbGVjdGlvblJhbmdlKCk7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGFkanVzdGVkU2Vs
ZWN0aW9uUmFuZ2UoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggZDZlYTQyNmQ3ZjdmZTc2NWZiMDA5N2UzZDk1YWVj
NzU5ZGE0MjdlZi4uNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0NTIyOTEwZTY1YzZhOTEzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xNzYsMTUgKzE3Niwx
NSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0Tm9kZShGcmFtZSYgZnJhbWUsIFJlZjxOb2Rl
PiYmIGNvbnRlbnQpCiBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5KEZy
YW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
YXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIHNlbGVj
dGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKICAgICBhdXRvIG5ld1Jh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFuZXdSYW5nZSB8
fCBuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRv
IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byBhZmZp
bml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9sZFJhbmdl
KS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIGZhbHNl
KSkKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwgZmFsc2UpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpuZXdSYW5nZSkucHRyKCksIGFmZmluaXR5LCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTIyNiwxMSArMjI2LDExIEBAIHN0YXRpYyB1bnNpZ25lZCB2ZXJ0aWNhbFNjcm9sbERpc3Rh
bmNlKEZyYW1lJiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFNjcm9s
bGJhcjo6cGFnZVN0ZXAoaGVpZ2h0KSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHVuaW9u
RE9NUmFuZ2VzKFJhbmdlJiBhLCBSYW5nZSYgYikKK3N0YXRpYyBTaW1wbGVSYW5nZSB1bmlvblJh
bmdlcyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIpCiB7Ci0gICAg
UmFuZ2UmIHN0YXJ0ID0gYS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NU
QVJULCBiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7Ci0gICAgUmFuZ2UmIGVu
ZCA9IGEuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiKS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoYS5v
d25lckRvY3VtZW50KCksICZzdGFydC5zdGFydENvbnRhaW5lcigpLCBzdGFydC5zdGFydE9mZnNl
dCgpLCAmZW5kLmVuZENvbnRhaW5lcigpLCBlbmQuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8mIHN0
YXJ0ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9
IDAgPyBhIDogYjsKKyAgICBhdXRvJiBlbmQgPSBjcmVhdGVMaXZlUmFuZ2UoYSktPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKGIpKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7CisgICAgcmV0dXJuIHsgc3RhcnQuc3RhcnQs
IGVuZC5lbmQgfTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9ucwpAQCAtMzU0LDcg
KzM1NCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgYXV0byBtYXJrID0gZnJhbWUu
ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2Vs
ZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2Vs
ZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFuZ2UoKm1hcmspLCAqZnJhbWUu
ZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBib29sIHNlbGVjdGVkID0gc2Vs
ZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJr
LCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSkucHRyKCksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgQVNTRVJUKHNl
bGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RUb01hcmso
RnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgICAg
IFBBTDo6c3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3JlYXRlTGl2
ZVJhbmdlKCptYXJrKSwgKnNlbGVjdGlvbikuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKnNlbGVjdGlv
bikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Olllcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKaW5kZXggMzNhOTI3ZDU0OGZmZGI2ZjljYjFkNTZmODRlMGRmY2QwMWE3
NzdiMC4uYjBjNjkzZTRiNjgyYTQxZjFjODMzNmUwOTIwNDY5MGRiZjc5NmM5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIzMTAsNyArMjMxMCw3IEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkgJiYg
bV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5k
cyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGM1Y2JjM2Y5N2Nk
OGE5OTJjMGFlZTdhMzFhODllZmQ4N2NmYTNkNzguLmVlZmU4ZmQ5NTFjY2ZhNGViNjYxODI3ZDU4
ZTY5ZWE1OWI1ODZiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQpAQCAtODgsMTQgKzg4LDEzIEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvbkluSFRN
TEZvcm1hdCgpCiAKIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0
YWNobWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyaW5nPiYgb3V0VHlwZXMsIFZlY3Rv
cjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIG91dERhdGEpCiB7Ci0gICAgYXV0byYgZG9jdW1lbnQg
PSBlbGVtZW50LmRvY3VtZW50KCk7Ci0gICAgYXV0byBlbGVtZW50UmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
ciB9LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yIH0pOwotICAg
IGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKGVsZW1lbnRSYW5nZS5w
dHIoKSwgb3V0VHlwZXMsIG91dERhdGEpOworICAgIGF1dG8gZWxlbWVudFJhbmdlID0gbWFrZVJh
bmdlU2VsZWN0aW5nTm9kZShlbGVtZW50KTsKKyAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGEoZWxlbWVudFJhbmdlLCBvdXRUeXBlcywgb3V0RGF0YSk7CiAKICAgICBvdXRUeXBl
cy5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKTsKLSAgICBvdXREYXRh
LmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGRvY3VtZW50Lm9yaWdpbklkZW50aWZpZXJG
b3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKKyAgICBvdXREYXRh
LmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQuZG9jdW1lbnQoKS5vcmlnaW5J
ZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVhdGVTaGFyZWRCdWZmZXIoKSk7CiAK
LSAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGVsZW1lbnRS
YW5nZS5wdHIoKSkpIHsKKyAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2UpLmdldCgpKSkgewogICAgICAgICBp
ZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigp
KSB7CiAgICAgICAgICAgICBvdXRUeXBlcy5hcHBlbmQoV2ViQXJjaGl2ZVBib2FyZFR5cGUpOwog
ICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUod2ViQXJjaGl2
ZURhdGEuZ2V0KCkpKTsKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICAgICAgY29udGVu
dC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJ
blJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CiAgICAgICAgIGNvbnRlbnQuZGF0
YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CiAgICAgICAgIGNv
bnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJp
YnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKLSAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjb250ZW50LmNsaWVu
dFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOworICAgICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50
UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgpLCBjb250ZW50LmNsaWVudFR5cGVzLCBjb250
ZW50LmNsaWVudERhdGEpOwogICAgIH0KICAgICBjb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBz
ZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9
IHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CkBAIC0xNDQs
NyArMTQzLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJE
YXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKICAgICB3ZWJDb250ZW50LmRhdGFJbkF0dHJpYnV0
ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5n
ZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1M
Rm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwotICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgd2ViQ29u
dGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnREYXRhKTsKKyAgICBjbGllbnQoKS0+
Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgpLCB3ZWJDb250ZW50LmNsaWVu
dFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwogCiAgICAgcGFzdGVib2FyZFdyaXRlckRh
dGEuc2V0V2ViQ29udGVudChXVEZNb3ZlKHdlYkNvbnRlbnQpKTsKIH0KQEAgLTE4NCwxMiArMTgz
LDEyIEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmco
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkCiAKICAgICBpZiAobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAg
IGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoKm1fZG9j
dW1lbnQuZnJhbWUoKSwgYXR0cmlidXRlZFN0cmluZykpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25O
dWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGF0dHJpYnV0ZWRTdHJpbmcuc3Ry
aW5nOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgaWYgKHNob3VsZElu
c2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0KHRleHQsIGZhbHNlKTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCA5OWFhMTE5MjJj
MzI4MTRiYzBhNmY1ZTBjYWJkOWY2M2IzOGU4NzFjLi5kYTdlOTQxY2I4ZjFmYmUyM2IwMDJlMjVk
ZTAwZDk2ODU5YWZjZTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9F
ZGl0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKQEAgLTUwLDE3ICs1MCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRWRpdG9y
OjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQ
YXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0
ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQoKnBhc3RlYm9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxs
b3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgYXV0byBmcmFnbWVudCA9IHdlYkNv
bnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlm
IChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikp
CiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAo
ZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJ
bnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwg
Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4
dCwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8g
TWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3Rl
SGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCmluZGV4IDMxMjMyNWYyNzYyMWNiYjg4NDkyYTA0MjZlZTU5MTY1Njdl
NGExNjAuLjZjMjU0Nzk2NTUzNjA4NGIxNjM4ODA0OWQ0NWE1OTljZjk2MDY3MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTIwNiwzMCArMjA2LDI2IEBAIHZv
aWQgRWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQs
IEVsZW1lbnQmIGltYWdlRWxlbWVuCiAgICAgcGFzdGVib2FyZEltYWdlLnJlc291cmNlTUlNRVR5
cGUgPSBwYXN0ZWJvYXJkLnJlc291cmNlTUlNRVR5cGUoY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCku
bWltZVR5cGUoKSk7CiAgICAgcGFzdGVib2FyZEltYWdlLnJlc291cmNlRGF0YSA9IGNhY2hlZElt
YWdlLT5yZXNvdXJjZUJ1ZmZlcigpOwogCi0gICAgaWYgKCFwYXN0ZWJvYXJkLmlzU3RhdGljKCkp
IHsKLSAgICAgICAgUG9zaXRpb24gYmVmb3JlSW1hZ2VQb3NpdGlvbigmaW1hZ2VFbGVtZW50LCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcik7Ci0gICAgICAgIFBvc2l0aW9uIGFmdGVy
SW1hZ2VQb3NpdGlvbigmaW1hZ2VFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5j
aG9yKTsKLSAgICAgICAgYXV0byBpbWFnZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShpbWFnZUVsZW1l
bnQuZG9jdW1lbnQoKSwgYmVmb3JlSW1hZ2VQb3NpdGlvbiwgYWZ0ZXJJbWFnZVBvc2l0aW9uKTsK
LSAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoaW1hZ2VS
YW5nZS5wdHIoKSwgcGFzdGVib2FyZEltYWdlLmNsaWVudFR5cGVzLCBwYXN0ZWJvYXJkSW1hZ2Uu
Y2xpZW50RGF0YSk7Ci0gICAgfQorICAgIGlmICghcGFzdGVib2FyZC5pc1N0YXRpYygpKQorICAg
ICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEobWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZShpbWFnZUVsZW1lbnQpLCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50VHlwZXMsIHBhc3RlYm9h
cmRJbWFnZS5jbGllbnREYXRhKTsKIAogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2FyZElt
YWdlKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5UZXh0ID0gb3B0aW9ucy5jb250YWlucyhQ
YXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwogICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVy
KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOwogICAgIGludCBu
dW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNsaWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3Vu
dCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXM7ICsr
aSkgewotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjbGllbnQo
KS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpKTsKKyAgICAgICAgYXV0byBmcmFnbWVu
dCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKGkpOwogICAgICAgICBp
ZiAoIWZyYWdtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlYWRlci5hZGRG
cmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSByZWFkZXIuZnJhZ21lbnQ7CisgICAgYXV0byBm
cmFnbWVudCA9IFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKICAgICBpZiAoIWZyYWdtZW50KSB7
CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHRJZ25vcmVkOwogICAgICAgICBmcmFnbWVudCA9
IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBhbGxvd1BsYWlu
VGV4dCwgY2hvc2VQbGFpblRleHRJZ25vcmVkKTsKQEAgLTIzOCw3ICsyMzQsNyBAQCB2b2lkIEVk
aXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25T
ZXQ8UGFzdGVPcHRpb24+CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFz
dGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3Rpbmco
KmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgq
ZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAg
aWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdt
ZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0
ZWJvYXJkKSwgZmFsc2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxC
bG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBN
YWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCmluZGV4IDEyZmQ2YTQz
ZWEwNWEyYTBlNzJiNzRiYTcyZDk2Mjg2NDcwNWJhZTMuLjBiN2MyNjI1M2EwMDgyZTNjNTRhZWVm
ZWEwNjE2MzI0ZTYyNDhjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGli
d3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUv
RWRpdG9yTGliV1BFLmNwcApAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFz
dGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRnJhbWUmIGZyYW1lLCBSYW5nZSYg
cmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQorc3RhdGlj
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0
YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7CiAg
ICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIApAQCAtNDcsOCArNDcsNyBAQCBzdGF0aWMgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBh
c3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L2h0bWw7Y2hhcnNl
dD11dGYtOCIpICYmIGZyYW1lLmRvY3VtZW50KCkpIHsKICAgICAgICAgU3RyaW5nIG1hcmt1cCA9
IHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiKTsKLSAgICAg
ICAgaWYgKFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwLCBlbXB0eVN0cmluZygpLCBEaXNh
bGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1
bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2lu
Q29udGVudCk7CiAgICAgfQogCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKQEAgLTU2LDggKzU1
LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0eXBlcy5jb250YWlucygi
dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpIHsKICAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0
cnVlOwotICAgICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZSwgcGFzdGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3Bs
YWluO2NoYXJzZXQ9dXRmLTgiKSkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAg
ICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZShyYW5nZSku
Z2V0KCksIHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04Iikp
OwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTcgKzc3LDE3IEBAIHZvaWQg
RWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBFbGVtZW50JiwgY29u
c3QgVVJMJiwgY29uc3QgU3RyCiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsK
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFu
Z2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwg
Km1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBhdXRvIGZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3VtZW50
LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFp
blRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5j
b250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50
Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2Vy
dEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFz
dGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0Zy
YWdtZW50KCpmcmFnbWVudCwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9h
cmQpLCBjaG9zZVBsYWluVGV4dCwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3Jl
TWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90
ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDFjZDhjMzk0YTc2OTFjNTVm
NGQ4ZGQzNmRlODU5NmU3MDc3N2I3YjUuLmJhMzFjMTg3NzMyMzRiOWFkOTM5YWQwZDMzMTkzMThj
NjJkOGIzYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTgw
LDcgKzgwLDcgQEAgdm9pZCBFZGl0b3I6OnNob3dDb2xvclBhbmVsKCkKIAogdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rl
ZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKIAogICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgLy8gRklYTUU6IEhvdyBjYW4gdGhp
cyBoYXJkLWNvZGVkIHBhc3RlYm9hcmQgbmFtZSBiZSByaWdodCwgZ2l2ZW4gdGhhdCB0aGUgcGFz
c2VkLWluIHBhc3RlYm9hcmQgaGFzIGEgbmFtZT8KQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBFZGl0
b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0
PFBhc3RlT3B0aW9uPgogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3Rl
T3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpm
cmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZy
YWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlm
IChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVu
dC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVi
b2FyZCksIGZhbHNlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxv
Y2txdW90ZSkgPyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFp
bEJsb2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUgKTsKIAogICAgIGNsaWVudCgp
LT5zZXRJbnNlcnRpb25QYXN0ZWJvYXJkKFN0cmluZygpKTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2
b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZChOb2RlKiBub2RlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7CiAgICAgaWYg
KGF1dG8gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCwgcmFu
Z2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KSkgewogICAgICAgICBtYXliZUNvcHlOb2RlQXR0cmli
dXRlc1RvRnJhZ21lbnQoKm5vZGUsICpmcmFnbWVudCk7Ci0gICAgICAgIGlmIChzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIEVkaXRv
ckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50
KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAg
ICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgZmFsc2UsIE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUpOwogICAgIH0KIApAQCAtMTc2LDExICsxNzYsOSBAQCBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmltYWdlSW5XZWJBcmNoaXZlRm9ybWF0KEVsZW1l
bnQmIGltYWdlRWxlbWVudCkKIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewotICAg
IC8vIEZJWE1FOiBUaGUgaW50ZXJmYWNlIHRvIHRoaXMgZnVuY3Rpb24gaXMgYXdrd2FyZC4gV2Un
ZCBwcm9iYWJseSBiZSBiZXR0ZXIgb2ZmIHdpdGggdGhyZWUgc2VwYXJhdGUgZnVuY3Rpb25zLgot
ICAgIC8vIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4gV2ViS2l0MiB0
byBpbXBsZW1lbnQgdGhlIG1ldGhvZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZDp0eXBlczpdLAotICAgIC8vIHdoaWNoIGlzIG9ubHkgdXNlZCB0byBzdXBwb3J0IE9TIFggc2Vy
dmljZXMuCisgICAgLy8gRklYTUU6IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlvbiBpcyBh
d2t3YXJkLiBXZSdkIHByb2JhYmx5IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBhcmF0ZSBm
dW5jdGlvbnMuIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4gV2ViS2l0
MiB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZDp0eXBlczpdLCB3aGljaCBpcyBvbmx5IHVzZWQgdG8gc3VwcG9ydCBPUyBYIHNlcnZpY2Vz
LgogCi0gICAgLy8gRklYTUU6IERvZXMgdGhpcyBmdW5jdGlvbiByZWFsbHkgbmVlZCB0byB1c2Ug
YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpPyBCZWNhdXNlIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKCkganVzdCB1c2VzIHNlbGVjdGVkUmFuZ2UoKS4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlz
IGZ1bmN0aW9uIHJlYWxseSBuZWVkIHRvIHVzZSBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk/IEJl
Y2F1c2Ugd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBqdXN0IHVzZXMgc2VsZWN0ZWRSYW5n
ZSgpLiBUaGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGluIFdlYktpdCB0aGF0IHVzZXMgYWRqdXN0
ZWRTZWxlY3Rpb25SYW5nZS4KICAgICBpZiAoIWNhbkNvcHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4IGM3
OTZiZmFhZjY2ZWU5NGE4NWM1NWYzOTIzNDkxNTVkMjc0YTg2MGMuLjkzZGRlYWY4ODg5YjhlN2Zj
YzI2OTM0MTI0MDg1ODI4NDQ3NmM4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRp
dG9yV2luLmNwcApAQCAtMzcsMTcgKzM3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0
aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0
OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRv
Y3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRh
aW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBh
dXRvIGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVudC5m
cmFtZSgpLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9w
dGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21l
bnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAg
ICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50
ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJh
Z21lbnQoKmZyYWdtZW50LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAg
ICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0
UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9j
a3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5n
OjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJl
Y3RvcnlEb2N1bWVudC5jcHAKaW5kZXggZGNmM2JmNDQ4NjViMDRjYzgyN2Y3MTMzZWRkOGUxOTFm
YWJhYmQ1Yi4uMjVmMTdhMzNmZDIwYTQxYzcxYmFmYjk1YjMzZjRhNDAwMjc0MDhiYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKQEAgLTE1NSw3ICsx
NTUsNyBAQCBSZWY8RWxlbWVudD4gRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZVRE
Rm9yRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbgogICAgIGF1dG8gdGRFbGVtZW50ID0gSFRN
TFRhYmxlQ2VsbEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgZG9jdW1lbnQpOwogICAgIHRkRWxlbWVu
dC0+YXBwZW5kQ2hpbGQoYW5jaG9yRWxlbWVudCk7CiAKLSAgICByZXR1cm4gV1RGTW92ZSh0ZEVs
ZW1lbnQpOworICAgIHJldHVybiB0ZEVsZW1lbnQ7CiB9CiAKIHN0YXRpYyBTdHJpbmcgcHJvY2Vz
c0ZpbGVzaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc2l6ZSwgYm9vbCBpc0RpcmVjdG9yeSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggOTRmYjMwZjUxMWIzYjM3OTUy
MmFhNjlkMmNmZmZkYWU5MDA1NzAyNi4uMGMxNGFlNjkwY2QzZjQ2YTYzYmFlNjE2MDg1NGYxYTAz
YjgxMWI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKQEAgLTE5MSw3
ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgRW1wdHlFZGl0b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgc21hcnRJbnNl
cnREZWxldGVFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzU2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC0yMDAsMTUgKzIwMCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQg
dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgZmluYWwgeyB9CiAgICAgaW50IHNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkgZmluYWwgeyByZXR1cm4gLTE7IH0KIAotICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZEVu
ZEVkaXRpbmcoUmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxk
SW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJh
bmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJv
b2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJhbmdlKiwgRUFmZmluaXR5LCBi
b29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5n
KGNvbnN0IFNpbXBsZVJhbmdlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNo
b3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVBZmZpbml0eSwgYm9vbCkgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVBy
b3BlcnRpZXMqLCBSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91
bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBkaWRBcHBseVN0eWxl
KCkgZmluYWwgeyB9Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSos
IFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZE1vdmVSYW5n
ZUFmdGVyRGVsZXRlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSBmaW5hbCB7
IH0KICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIGZpbmFsIHsgfQpAQCAtMjE5
LDkgKzIxOSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZp
bmFsIHsgfQogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZvaWQgZGlk
RW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHdp
bGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopIGZpbmFsIHsgfQorICAgIHZvaWQg
d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpIGZpbmFsIHsgfQogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2Uq
LCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYp
IGZpbmFsIHsgfQogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsIHsgfQogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGVXaXRoU29mdFNwYWNlcyhUZXh0Q2hlY2tpbmdSZXN1bHQpIGZpbmFsIHsgfQogCkBAIC0y
NjEsNyArMjYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVN0cmluZ0ZvckZpbmQoY29u
c3QgU3RyaW5nJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBE
cm9wKERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0
IFNpbXBsZVJhbmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25zdCBTdHJpbmcm
KSBmaW5hbCB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAKaW5kZXggNDFmN2E3ZWM3YTQxOTE3NzkxYjI4NWIxOTQzOWQyYzFiZTlkYWVmZC4uYzdl
ZmNmYzkzYmQ0NzcxMjcwZWEwYjA2OWRjYjkyNDdjOTFhMmFmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMjEzLDcgKzIxMyw3IEBAIHN0
YXRpYyB2b2lkIG9wZW5OZXdXaW5kb3coY29uc3QgVVJMJiB1cmxUb0xvYWQsIEZyYW1lJiBmcmFt
ZSwgU2hvdWxkT3BlbkV4dGVybmFsCiBzdGF0aWMgdm9pZCBpbnNlcnRVbmljb2RlQ2hhcmFjdGVy
KFVDaGFyIGNoYXJhY3RlciwgRnJhbWUmIGZyYW1lKQogewogICAgIFN0cmluZyB0ZXh0KCZjaGFy
YWN0ZXIsIDEpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0
LCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICgh
ZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVk
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwpAQCAt
Mzc0LDcgKzM3NCw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAjZW5kaWYKICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6IHsKICAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpQYXN0ZWQpKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0
VGV4dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkgewogICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpDb21tYW5kT3B0aW9uPiByZXBsYWNlT3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rp
bmcgfTsKIAogICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3Vs
ZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA3MzE3YmZkZjQ2ZDkyYWMzZDk2NTBmYzMz
NDY0ZjUwZjZlZWE1OTI3Li44MTBkMmZjNzJhMzI1Y2U0ZDQyMGEzY2NhMzZkOTJiMzAwY2E1ODMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNTY4LDcgKzU2OCw3
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvIHN0eWxl
ID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvciksIGZh
bHNlKTsKLSAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxl
KHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQorICAgICAg
ICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsICppbm5l
clJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2xpZW50KCkud2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0
LCBkcmFnRGF0YSk7CiAgICAgICAgIGlubmVyRnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5bGUoc3R5
bGUucHRyKCksIEVkaXRBY3Rpb246OlNldENvbG9yKTsKQEAgLTYwMyw3ICs2MDMsNyBAQCBib29s
IERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0
YSkKICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
KSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKICAgICAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0
YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0cnVlLCBj
aG9zZVBsYWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJ
bnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVk
aXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNs
aWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFj
dGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpAQCAtNjI5LDcgKzYyOSw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBkcmFnRGF0YS5hc1BsYWlu
VGV4dCgpOwotICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNl
cnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OkRyb3BwZWQpKQorICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5z
aG91bGRJbnNlcnRUZXh0KHRleHQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVk
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRy
YWdEYXRhKTsKQEAgLTEwMjIsNyArMTAyMiw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0
RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8RHJhCiAg
ICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFu
Z2UpOwogCi0gICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKTsKKyAgICAgICAg
ICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKnNlbGVjdGlv
blJhbmdlKTsKIAogICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAo
bXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBib29sIERyYWdD
b250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwg
T3B0aW9uU2V0PERyYQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAgICAgaWYgKCFwcm9t
aXNlZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNsaWVudCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBzcGVjaWZpZWQsIGNhbGwgb3V0IHRvIHRoZSBp
bmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhlIHBhc3RlYm9hcmQgd2l0aCBkYXRhLgotICAg
ICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3JlYXRl
TGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGRhdGFU
cmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci5kaWRXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZCgpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9y
Q2xpZW50LmgKaW5kZXggNzc5MzE3MWZlMGFkYjExN2RhZmY0MTYwZGFmZjY5MWNhNDQ2MGMzMS4u
OWRlNzA2NTRmMjBiNTgyM2Y3NjU2MDBlMTQxNmI5ZDhjM2E5MWRmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0VkaXRvckNsaWVudC5oCkBAIC00Myw3ICs0Myw2IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBG
cmFtZTsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFuZ2U7CiBj
bGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBUZXh0Q2hl
Y2tlckNsaWVudDsKQEAgLTUxLDEyICs1MCwxMyBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwog
CiBzdHJ1Y3QgR2FwUmVjdHM7CiBzdHJ1Y3QgR3JhbW1hckRldGFpbDsKK3N0cnVjdCBTaW1wbGVS
YW5nZTsKIAogY2xhc3MgRWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FZGl0
b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFu
Z2UoUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc21hcnRJbnNl
cnREZWxldGVFbmFibGVkKCkgPSAwOyAKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpID0gMDsKQEAgLTY1LDE3ICs2NSwxNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpID0gMDsKICAgICB2
aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpID0gMDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZEVuZEVkaXRpbmcoUmFuZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2Vy
dE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNl
cnRBY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25z
dCBTaW1wbGVSYW5nZSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhj
b25zdCBTaW1wbGVSYW5nZSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9u
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9S
YW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH07CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1cHByZXNzUGFzc3dvcmRF
Y2hvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgCi0gICAgdmlydHVhbCBib29sIHNo
b3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBseVN0eWxl
KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5n
ZSosIFJhbmdlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRl
bGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikgPSAwOwogCiAjaWYg
RU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBdHRh
Y2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIC8qIGlkZW50aWZpZXIgKi8sIGNvbnN0IFN0
cmluZyYgLyogY29udGVudFR5cGUgKi8sIGNvbnN0IFN0cmluZyYgLyogcHJlZmVycmVkRmlsZU5h
bWUgKi8sIFJlZjxTaGFyZWRCdWZmZXI+JiYpIHsgfQpAQCAtOTUsOSArOTUsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0
YWJpbGl0eUNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5n
ZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldENs
aWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVi
b2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0
b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNv
ZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0KSB7IH0KIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHB1
YmxpYzoKICAgICAvLyBzZWxlY3Rpb24gYXMgYSB0eXBlIG9mIGNsaXBib2FyZC4KICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFu
Z2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwZXJm
b3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93Rm9u
dFBhbmVsKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5k
ZXggNmYxZjFiNGFkODBiMjFmOTk1YzFmZWU4ZDcyYWFkYzk2MjcxNWIyYi4uNWVkYTgzMGVjZjQ2
NWQwZGQwYjI0N2ZhZTAwMjBjNWUyNTJlYjhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcApAQCAtMzA4Miw4ICszMDgyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250
ZXh0TWVudUV2ZW50Rm9yS2V5KCkKICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi5zdGFy
dCgpOwogCiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlvbi5yb290
RWRpdGFibGVFbGVtZW50KCkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkpIHsKLSAgICAgICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAg
ICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uo
Y3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKS5nZXQoKSk7CisgICAgICAgIEludFJlY3Qg
Zmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8g
Zmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54KCk7CiAgICAgICAgIC8vIEluIGEgbXVsdGls
aW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkgd291bGQgZW5kdXAgb24gdGhlIG5leHQgbGluZSwg
c28gLTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggM2YzNzIz
MmM3ZTk1YmEyMDA1MzkxMTA0OWFlODA0MDI0ZjYxNjc4OS4uN2UyMTJlYWY0Yjk1MmE4NmRiNGZk
MTA4MDc2ZDIwNTk2ZDE2NTIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmNwcApAQCAtNzUyLDE3ICs3NTIsMTYgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpwcmV2
aW91c0ZvY3VzYWJsZUVsZW1lbnRPclNjb3BlT3duZXIoY29uc3QgRm9jdXNOYXZpZ2EKICAgICBy
ZXR1cm4gcHJldmlvdXNFbGVtZW50V2l0aExvd2VyVGFiSW5kZXgoc2NvcGUsIGxhc3QsIHN0YXJ0
aW5nVGFiSW5kZXgsIGV2ZW50KTsKIH0KIAotc3RhdGljIGJvb2wgcmVsaW5xdWlzaGVzRWRpdGlu
Z0ZvY3VzKE5vZGUgKm5vZGUpCitzdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMo
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUt
Pmhhc0VkaXRhYmxlU3R5bGUoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQuaGFzRWRpdGFibGVTdHls
ZSgpKTsKIAotICAgIE5vZGUqIHJvb3QgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8gcm9v
dCA9IGVsZW1lbnQucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8gZnJhbWUgPSBlbGVt
ZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lIHx8ICFyb290KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNob3VsZEVuZEVk
aXRpbmcocmFuZ2VPZkNvbnRlbnRzKCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5l
ZGl0b3IoKS5zaG91bGRFbmRFZGl0aW5nKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygq
cm9vdCkpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVlZGVkKEZyYW1lKiBv
bGRGb2N1c2VkRnJhbWUsIEZyYW1lKiBuZXdGb2N1c2VkRnJhbWUsIE5vZGUqIG5ld0ZvY3VzZWRO
b2RlKQpAQCAtODQxLDcgKzg0MCw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2Vk
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGcmFtZSYgbmV3Rm9jdXNlZEZyYW1lCiAgICAgfQog
CiAgICAgLy8gRklYTUU6IE1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGNoZWNrIGZvciBjYXJl
dEJyb3dzaW5nCi0gICAgaWYgKG9sZEZvY3VzZWRFbGVtZW50ICYmIG9sZEZvY3VzZWRFbGVtZW50
LT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiAhcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKG9s
ZEZvY3VzZWRFbGVtZW50KSkKKyAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xkRm9jdXNl
ZEVsZW1lbnQtPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmICFyZWxpbnF1aXNoZXNFZGl0aW5n
Rm9jdXMoKm9sZEZvY3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
bV9wYWdlLmVkaXRvckNsaWVudCgpLndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCmluZGV4IGZmMWEyN2ViYzk1ZmM3YzRjNDZhNWI1MDIzMzc5N2FlODk5NzhlN2Uu
LmQ0ZTJiZjA5OTQ3ZmYzZTk1ZTQ5Njg4OWUzZWIxNmIwMWU4ZGM1NWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCkBAIC04MjEsMjggKzgyMSwyNSBAQCBEb2N1bWVudCogRnJhbWU6OmRvY3VtZW50QXRQ
b2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAKIFJlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdl
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCiB7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Ci0gICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFwb3NpdGlvbkJvdW5kYXJ5KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFBvc2l0aW9uIGRlZXBQb3NpdGlvbiA9IHBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgVGV4dCogY29udGFpbmVyVGV4dCA9IGRlZXBQb3Np
dGlvbi5jb250YWluZXJUZXh0KCk7CisgICAgYXV0byBjb250YWluZXJUZXh0ID0gcG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJUZXh0KCk7CiAgICAgaWYgKCFjb250YWluZXJUZXh0
IHx8ICFjb250YWluZXJUZXh0LT5yZW5kZXJlcigpIHx8IGNvbnRhaW5lclRleHQtPnJlbmRlcmVy
KCktPnN0eWxlKCkudXNlclNlbGVjdCgpID09IFVzZXJTZWxlY3Q6Ok5vbmUpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gcG9zaXRpb24u
cHJldmlvdXMoKTsKLSAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHByZXZpb3VzLCBw
b3NpdGlvbik7Ci0gICAgICAgIExheW91dFJlY3QgcmVjdCA9IGVkaXRvcigpLmZpcnN0UmVjdEZv
clJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAocmVjdC5j
b250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0NoYXJhY3Rl
clJhbmdlOworICAgIGlmIChhdXRvIHByZXZpb3VzID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRp
b24ucHJldmlvdXMoKSkpIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0g
U2ltcGxlUmFuZ2UgeyAqcHJldmlvdXMsICpwb3NpdGlvbkJvdW5kYXJ5IH07CisgICAgICAgIGlm
IChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250
YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocHJl
dmlvdXNDaGFyYWN0ZXJSYW5nZSk7CiAgICAgfQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHQg
PSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgaWYgKFJlZlB0cjxSYW5nZT4gbmV4dENoYXJhY3RlclJh
bmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KSkgewotICAgICAgICBMYXlvdXRSZWN0IHJl
Y3QgPSBlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkp
OwotICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJl
dHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2U7CisgICAgaWYgKGF1dG8gbmV4dCA9IG1ha2VCb3VuZGFy
eVBvaW50KHBvc2l0aW9uLm5leHQoKSkpIHsKKyAgICAgICAgYXV0byBuZXh0Q2hhcmFjdGVyUmFu
Z2UgPSBTaW1wbGVSYW5nZSB7ICpwb3NpdGlvbkJvdW5kYXJ5LCAqbmV4dCB9OworICAgICAgICBp
ZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlKS5jb250YWlu
cyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobmV4dENo
YXJhY3RlclJhbmdlKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCmluZGV4IDhlZDdhZmYyYzNkZDFiMmUyNGQyZWZhZTM5ZmQ4N2IyMzYzZTc2MzQuLmRlNTdm
Mzg1YzliMWU2MDNlMzQwZGI2NzhjNjEyMjQxNjAwNzk3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApA
QCAtNzEzLDE4ICs3MTMsMjAgQEAgYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBEaWRXcmFwKiBkaWRXcmEKIAogdm9pZCBQYWdl
OjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMsIGludCBsaW1pdCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBtYXRjaFJhbmdl
cywgaW50JiBpbmRleEZvclNlbGVjdGlvbikKIHsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJl
c3VsdFJhbmdlczsKKwogICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKIAogICAgIEZyYW1lKiBm
cmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogZnJhbWVXaXRoU2VsZWN0aW9uID0gbnVs
bHB0cjsKICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JU
ZXh0KHRhcmdldCwgMCwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSBtYXRjaFJhbmdlcy5zaXpl
KCkpIDogMCwgdHJ1ZSwgJm1hdGNoUmFuZ2VzKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLmNv
dW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCB7IH0sIG9wdGlvbnMsIGxpbWl0ID8gKGxpbWl0IC0g
bWF0Y2hSYW5nZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZyZXN1bHRSYW5nZXMpOwogICAgICAgICBp
ZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgICAgIGZyYW1lV2l0aFNl
bGVjdGlvbiA9IGZyYW1lOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0
cnVlLCBDYW5XcmFwOjpObyk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogCi0gICAgaWYgKG1hdGNo
UmFuZ2VzLmlzRW1wdHkoKSkKKyAgICBpZiAocmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewpAQCAtNzMyLDcgKzcz
NCw3IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5n
ZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5n
ZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hSYW5n
ZXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZXNbaSAtIDFdKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAx
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTc0MCw3ICs3NDIsNyBAQCB2b2lkIFBh
Z2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9w
dGlvbnMgb3B0aW9ucywgaQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19F
TkQsICptYXRjaFJhbmdlc1tpXSk7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
U1RBUlRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2VzW2ldKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9
IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzQ5LDEwICs3NTEsMTMgQEAgdm9p
ZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
IChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpCi0gICAgICAgICAgICBpbmRleEZvclNlbGVj
dGlvbiA9IG1hdGNoUmFuZ2VzLnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbmRleEZvclNlbGVj
dGlvbiA9IHJlc3VsdFJhbmdlcy5zaXplKCkgLSAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBpbmRleEZvclNlbGVjdGlvbiA9IDA7CiAgICAgfQorCisgICAgZm9yIChhdXRvJiByYW5nZSA6
IHJlc3VsdFJhbmdlcykKKyAgICAgICAgbWF0Y2hSYW5nZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZSkpOwogfQogCiBSZWZQdHI8UmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9u
cykKQEAgLTc2NywxNyArNzcyLDE2IEBAIFJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmlu
Zyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGCiAgICAgRnJh
bWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVu
dCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7CiAgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBmcmFt
ZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gZnJh
bWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFydEZyYW1lID8g
cmVmZXJlbmNlUmFuZ2UgOiAwLCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0UmFuZ2U7Ci0KKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBmcmFt
ZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJhbWUgPyBt
YWtlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpIDogV1RGOjpudWxsb3B0LCBvcHRpb25zIC0gV3JhcEFy
b3VuZCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKTsK
ICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwgIW9wdGlvbnMuY29udGFpbnMo
QmFja3dhcmRzKSwgY2FuV3JhcCk7CiAgICAgfSB3aGlsZSAoZnJhbWUgJiYgZnJhbWUgIT0gc3Rh
cnRGcmFtZSk7CiAKICAgICAvLyBTZWFyY2ggY29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhl
IG90aGVyIHNpZGUgb2YgdGhlIHJlZmVyZW5jZSByYW5nZSB0aGF0IHdlIGRpZCBlYXJsaWVyLgog
ICAgIC8vIFdlIGNoZWF0IGEgYml0IGFuZCBqdXN0IHNlYXJjaCBhZ2FpbiB3aXRoIHdyYXAgb24u
CiAgICAgaWYgKGNhbldyYXAgPT0gQ2FuV3JhcDo6WWVzICYmIHJlZmVyZW5jZVJhbmdlKSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIHJlZmVyZW5jZVJhbmdlLCBvcHRpb25zIHwgV3JhcEFy
b3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdl
OworICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJh
bmdlT2ZTdHJpbmcodGFyZ2V0LCBtYWtlUmFuZ2UoKnJlZmVyZW5jZVJhbmdlKSwgb3B0aW9ucyB8
IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpA
QCAtNzk0LDcgKzc5OCw3IEBAIHVuc2lnbmVkIFBhZ2U6OmZpbmRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zCiAgICAgZG8gewogICAg
ICAgICBpZiAoc2hvdWxkTWFya01hdGNoZXMgPT0gTWFya01hdGNoZXMpCiAgICAgICAgICAgICBm
cmFtZS0+ZWRpdG9yKCkuc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChzaG91bGRI
aWdobGlnaHRNYXRjaGVzID09IEhpZ2hsaWdodE1hdGNoZXMpOwotICAgICAgICBtYXRjaENvdW50
ICs9IGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgMCwgb3B0aW9u
cywgbWF4TWF0Y2hDb3VudCA/IChtYXhNYXRjaENvdW50IC0gbWF0Y2hDb3VudCkgOiAwLCBzaG91
bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcywgMCk7CisgICAgICAgIG1hdGNoQ291bnQgKz0g
ZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCBXVEY6Om51bGxvcHQs
IG9wdGlvbnMsIG1heE1hdGNoQ291bnQgPyAobWF4TWF0Y2hDb3VudCAtIG1hdGNoQ291bnQpIDog
MCwgc2hvdWxkTWFya01hdGNoZXMgPT0gTWFya01hdGNoZXMsIG51bGxwdHIpOwogICAgICAgICBm
cmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBDYW5XcmFwOjpObyk7CiAgICAgfSB3
aGlsZSAoZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZTJl
NTdlY2JlZjQ1ZDNjMjQ2M2Y5ODYzNzM3MTMzMmZhYmY0NTI5Ny4uMGUxNTFmYTI4MjY4NmE0YTRh
OGZjY2VmZTcwY2I1ODVkNTAwNDMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtMjYwOSw3ICsyNjA5LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJu
YWxzOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPFIKICAgICBpZiAo
cGFyc2VkT3B0aW9ucy5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHBhcnNlZE9wdGlv
bnMucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5y
YW5nZU9mU3RyaW5nKHRleHQsIHJlZmVyZW5jZVJhbmdlLmdldCgpLCBwYXJzZWRPcHRpb25zLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGRvY3VtZW50
LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRleHQsIG1ha2VSYW5nZShyZWZlcmVuY2VSYW5nZSks
IHBhcnNlZE9wdGlvbnMucmVsZWFzZVJldHVyblZhbHVlKCkpKTsKIH0KIAogRXhjZXB0aW9uT3I8
dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaW5kT3B0aW9ucywgY29uc3QgU3RyaW5nJiBtYXJr
TWF0Y2hlcykKQEAgLTI2MjMsNyArMjYyMyw3IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRl
cm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWCiAg
ICAgICAgIHJldHVybiBwYXJzZWRPcHRpb25zLnJlbGVhc2VFeGNlcHRpb24oKTsKIAogICAgIGJv
b2wgbWFyayA9IG1hcmtNYXRjaGVzID09ICJtYXJrIjsKLSAgICByZXR1cm4gZG9jdW1lbnQtPmVk
aXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGV4dCwgbnVsbHB0ciwgcGFyc2VkT3B0aW9ucy5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSwgMTAwMCwgbWFyaywgbnVsbHB0cik7CisgICAgcmV0dXJuIGRv
Y3VtZW50LT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRleHQsIFdURjo6bnVsbG9wdCwg
cGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgMTAwMCwgbWFyaywgbnVsbHB0cik7
CiB9CiAKIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNvdW50RmluZE1hdGNoZXMo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmluZE9wdGlvbnMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KaW5kZXggYjJk
YWRjNjk3NDA1ZDY5MTFjNmMyOTUyYjdjOWQ0NGZmZmU1YWQ0MS4uMmIwNDIyMjRmMzljODE2Mjhh
OGY4ZGZmOTVhZGRhOGI5NjlhMTEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XS1ByaW50aW5nVmlldy5tbQpAQCAtNjYzLDcgKzY2Myw3IEBAIC0gKE5TUmVjdClyZWN0Rm9y
UGFnZTooTlNJbnRlZ2VyKXBhZ2UKICAgICAgICAgTE9HKFByaW50aW5nLCAiLVtXS1ByaW50aW5n
VmlldyAlcCByZWN0Rm9yUGFnZTolZF0gLSBkYXRhIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIiwgc2Vs
ZiwgKGludClwYWdlKTsKICAgICAgICAgaWYgKCFfd2ViRnJhbWUtPnBhZ2UoKSkgewogICAgICAg
ICAgICAgLy8gV2UgbWF5IGhhdmUgbm90IHRvbGQgQXBwS2l0IGhvdyBtYW55IHBhZ2VzIHRoZXJl
IGFyZSwgc28gaXQgd2lsbCB0cnkgdG8gcHJpbnQgdW50aWwgYSBudWxsIHJlY3QgaXMgcmV0dXJu
ZWQuCi0gICAgICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybiBOU1plcm9SZWN0OwogICAgICAgICB9CiAgICAgICAgIC8vIFdlIG11c3QgYmUg
c3RpbGwgY2FsY3VsYXRpbmcgdGhlIHBhZ2UgcmFuZ2UuCiAgICAgICAgIEFTU0VSVChfZXhwZWN0
ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2spOwpAQCAtNjc0LDcgKzY3NCw3IEBAIC0gKE5TUmVjdCly
ZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKICAgICAvLyBSZXR1cm5pbmcgYSBudWxsIHJlY3Qg
cHJldmVudHMgc2VsZWN0aW5nIG5vbi1leGlzdGVudCBwYWdlcyBpbiBwcmV2aWV3IGRpYWxvZy4K
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBhZ2UpID4gX3ByaW50aW5nUGFnZVJlY3Rz
LnNpemUoKSkgewogICAgICAgICBBU1NFUlQoIV93ZWJGcmFtZS0+cGFnZSgpKTsKLSAgICAgICAg
cmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBOU1plcm9SZWN0
OwogICAgIH0KIAogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IF9wcmludGluZ1BhZ2VSZWN0
c1twYWdlIC0gMV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDc5YTM3NDAwYzNmNDE1OGJm
NDI4ZjY5NDJiYzg4NmYxYWNkMjIwM2QuLmRkOWMzNTI2MDVmMDhmMzk0MGQ5MDBkOGYwMjY1MjQ3
ZTA0YmEzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC03NCwxMSArNzQsOSBAQCBzdGF0
aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKQogICAgIHJldHVybiB1
bmlxdWVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQrKzsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewot
ICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNo
b3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIHJhbmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2UpLmdldCgpKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZCgpCkBAIC0xMTQsNTAgKzExMiwzNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9n
Z2xlR3JhbW1hckNoZWNraW5nKCkKIGludCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRp
dGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0
aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1fcGFn
ZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2lu
RWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpKTsKIH0KIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
KQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlKS5wdHIoKSk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRO
b2RlKE5vZGUqIG5vZGUsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
IGFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5v
ZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxhY2UsIEVkaXRvcklu
c2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9kZSgqbV9wYWdlLCBub2RlLCByYW5n
ZVRvUmVwbGFjZSwgYWN0aW9uKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGRJbnNlcnROb2RlKCptX3BhZ2UsICZub2RlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1Jl
cGxhY2UpLmdldCgpLCBhY3Rpb24pOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
SW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRp
dG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBy
YW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBib29sIHJl
c3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnRU
ZXh0KCptX3BhZ2UsIHRleHQuaW1wbCgpLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRl
eHQuaW1wbCgpLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24p
OwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShS
YW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgZnJvbVJh
bmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm1fcGFnZSwgY3Jl
YXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSh0b1JhbmdlKS5n
ZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KICAgICAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiBy
YW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxl
UHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7
Ci0gICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNN
dXRhYmxlKCkgPyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4oc3RhdGljX2Nhc3Q8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcyY+KCpzdHlsZSkpIDogc3R5bGUtPm11dGFibGVDb3B5KCkpOwotICAg
IGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3Vs
ZEFwcGx5U3R5bGUoKm1fcGFnZSwgJm11dGFibGVTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJh
dGlvbigpLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
QXBwbHlTdHlsZSgqbV9wYWdlLCAmc3R5bGUubXV0YWJsZUNvcHkoKS0+ZW5zdXJlQ1NTU3R5bGVE
ZWNsYXJhdGlvbigpLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKIH0KIAogI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0yMTEsOSArMTk2LDggQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmRpZEFwcGx5U3R5bGUoKQogICAgIG1fcGFnZS0+ZGlkQXBwbHlTdHlsZSgpOwog
fQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFu
Z2UqLCBSYW5nZSopCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJE
ZWxldGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjIyLDcgKzIwNiw2IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRpbmcoKQogICAgIC8vIEZJWE1FOiBX
aGF0IGdvb2QgaXMgYSBub3RpZmljYXRpb24gbmFtZSwgaWYgaXQncyBhbHdheXMgdGhlIHNhbWU/
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZEJlZ2luRWRpdGlu
Z05vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZEJlZ2luRWRp
dGluZ05vdGlmaWNhdGlvbiIpKTsKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuZGlkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIFdlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3Rp
ZmljYXRpb24uZ2V0KCkuaW1wbCgpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKQEAgLTI3NSw3ICsy
NTgsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZygpCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRp
b24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIldlYlZpZXdEaWRFbmRFZGl0aW5nTm90aWZpY2F0
aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5kaWRFbmRF
ZGl0aW5nKCptX3BhZ2UsIFdlYlZpZXdEaWRFbmRFZGl0aW5nTm90aWZpY2F0aW9uLmdldCgpLmlt
cGwoKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKQEAgLTI4MywxOSArMjY1LDE5IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCiAgICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmRpZFdyaXRlVG9QYXN0ZWJvYXJk
KCptX3BhZ2UpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKFJhbmdlKiByYW5nZSkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRl
VG9QYXN0ZWJvYXJkKCptX3BhZ2UsIHJhbmdlKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
RWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2UsIGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50
UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSogcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0
ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRh
KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlw
ZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQogewotICAg
IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5nZXRQYXN0ZWJvYXJkRGF0YUZv
clJhbmdlKCptX3BhZ2UsIHJhbmdlLCBwYXN0ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsK
KyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERh
dGFGb3JSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJv
YXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBl
cmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3Rp
bmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3Rl
cERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGRl
c3RpbmF0aW9uLCBpc01vdmUpOworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCptX3BhZ2UsIGZyYWdtZW50LCBjcmVhdGVM
aXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01vdmUpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3RlcCYgc3RlcCkKQEAgLTQyNSwxMiArNDA3LDEwIEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBl
bGVtZW50KQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNo
YW5nZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpzdWJGcmFtZVNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogI2VuZGlmCkBAIC02MTgsNyArNTk4LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnNldElucHV0TWV0aG9kU3RhdGUoRWxlbWVudCogZWxlbWVudCkKICNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICBtX3BhZ2UtPnNldElucHV0TWV0aG9kU3RhdGUoZWxl
bWVudCk7CiAjZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgVU5VU0VEX1BBUkFNKGVs
ZW1lbnQpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggMGRmNzc1OWUxYjgyZGQ0
MDNjZmRhOGNhNzMwOTllYmM2ZGRkODA4Yy4uMjNlMzk0ZjI3ZWMzMjY5Mjc4YzQ1YjhlMTQ0ZDM2
ZGM3YzdiZmQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViQ29yZTo6
UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIGJvb2wgc21hcnRJbnNlcnREZWxl
dGVFbmFibGVkKCkgZmluYWw7CiAgICAgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgZmluYWw7CkBAIC01NCwxNSArNTQsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRv
Z2dsZUdyYW1tYXJDaGVja2luZygpIGZpbmFsOwogICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVu
dFRhZygpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6
OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdl
KikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJD
b3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9v
bCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29y
ZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFu
Z2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5h
bDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2Um
KSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSYsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgZmluYWw7CiAgICAgCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxl
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlk
QXBwbHlTdHlsZSgpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUo
V2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBjb25zdCBX
ZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOwogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxF
TUVOVCkKICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJyZWRGaWxl
TmFtZSwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7CkBAIC04NSw5ICs4NSw5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5jZWxlZENvbXBvc2l0aW9uKCkgZmluYWw7CiAgICAg
dm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZpbmFsOwogICAgIHZvaWQgZGlkRW5kRWRpdGlu
ZygpIGZpbmFsOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNv
cmU6OlJhbmdlKikgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9p
ZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q2xp
ZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+
JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4m
IHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRh
KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICAKICAgICB2b2lkIHJlZ2lzdGVyVW5kb1N0ZXAoV2Vi
Q29yZTo6VW5kb1N0ZXAmKSBmaW5hbDsKICAgICB2b2lkIHJlZ2lzdGVyUmVkb1N0ZXAoV2ViQ29y
ZTo6VW5kb1N0ZXAmKSBmaW5hbDsKQEAgLTE5MSw3ICsxOTEsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCi0g
ICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdl
YkNvcmU6OlJhbmdlJiwgYm9vbCBpc01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0
ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYsIGJvb2wgaXNNb3ZlKSBmaW5hbDsKICAgICBib29sIHN1cHBvcnRzR2xvYmFsU2VsZWN0
aW9uKCkgZmluYWw7CiAKICAgICBib29sIGNhblNob3dGb250UGFuZWwoKSBjb25zdCBmaW5hbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA0N2Nk
ZWE3ZWRlMTk4MDU3OGRjNjk5YzlmYzdiNGNiNzQ4OTA3YWNhLi43MzJkODg4MDRmODQ4ZGE5Yzdm
MGZlM2Y1Y2MyNzU3MWRhOTZiNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtNTQyNCw0MyArNTQyNCwzNiBAQCB2b2lkIFdlYlBhZ2U6Omhh
c01hcmtlZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShm
cmFtZSwgZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpKTsKLSAgICBjb21w
bGV0aW9uSGFuZGxlcihlZGl0aW5nUmFuZ2UpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRp
bmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpKS5nZXQoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgYXV0byBlZGl0aW5nUmFu
Z2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihlZGl0aW5nUmFuZ2UpOworICAgIGNvbXBsZXRpb25IYW5kbGVy
KEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvaW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgY29uc3RleHBy
IE9wdGlvblNldDxIaXRUZXN0UmVxdWVzdDo6UmVxdWVzdFR5cGU+IGhpdFR5cGUgeyBIaXRUZXN0
UmVxdWVzdDo6UmVhZE9ubHksIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUsIEhpdFRlc3RSZXF1ZXN0
OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQsICBIaXRUZXN0UmVxdWVzdDo6QWxsb3dD
aGlsZEZyYW1lQ29udGVudCB9OwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5t
YWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgaGl0
VHlwZSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8g
cmVzdWx0LmlubmVyTm9kZUZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUt
PnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7Ci0g
ICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZSgqZnJhbWUsIHJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOworICAgIGF1dG8m
IGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVG
cmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
KyAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50
SW5Jbm5lck5vZGVGcmFtZSgpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5n
ZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5nZXQoKSk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHN0YXRpY19jYXN0PHVpbnQ2NF90PihlZGl0aW5n
UmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Zmlyc3RS
ZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5n
ZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgSW50UmVjdCByZXN1
bHQoSW50UG9pbnQoMCwgMCksIEludFNpemUoMCwgMCkpOwotICAgIAotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7Cisg
ICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVk
aXRpbmdSYW5nZSk7CiAgICAgaWYgKCFyYW5nZSkgewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgRWRpdGlu
Z1JhbmdlKG5vdEZvdW5kLCAwKSwgY2FsbGJhY2tJRCkpOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHsgfSwgeyB9LCBj
YWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICByZXN1bHQgPSBmcmFt
ZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFu
Z2UocmFuZ2UuZ2V0KCkpKTsKLQotICAgIC8vIEZJWE1FOiBVcGRhdGUgYWN0dWFsUmFuZ2UgdG8g
bWF0Y2ggdGhlIHJhbmdlIG9mIGZpcnN0IHJlY3QuCi0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhyZXN1bHQsIGVkaXRpbmdSYW5n
ZSwgY2FsbGJhY2tJRCkpOworICAgIC8vIEZJWE1FOiBQYXNzIGFuIEVkaXRpbmdSYW5nZSB0aGF0
IG1hdGNoZXMgdGhlIHJhbmdlIG9mIHRoZSBmaXJzdCByZWN0LCByYXRoZXIgdGhhbiB0aGUgZW50
aXJlIHBhc3NlZC1pbiByYW5nZT8KKyAgICBhdXRvIHJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3coZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnJhbmdlKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxs
YmFjayhyZWN0LCBlZGl0aW5nUmFuZ2UsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9u
SGlnaGxpZ2h0PiYgaGlnaGxpZ2h0cywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb24sIGNv
bnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpCkBAIC01NDY4LDE1ICs1
NDYxLDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb25Bc3luYyhjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuCiAgICAgcGxhdGZvcm1XaWxsUGVyZm9y
bUVkaXRpbmdDb21tYW5kKCk7CiAKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0KICAgICBpZiAoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJlcGxhY2VtZW50UmFuZ2U7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudEVkaXRpbmdSYW5n
ZS5sb2NhdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9
IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpOwot
ICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCisgICAgICAgICAgICBpZiAoYXV0byBy
ZXBsYWNlbWVudFJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCByZXBsYWNlbWVu
dEVkaXRpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlcGxhY2VtZW50UmFuZ2UsIFNFTF9ERUZBVUxUX0FG
RklOSVRZKSk7CiAgICAgICAgIH0KLQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRDb21wb3Np
dGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBoaWdobGlnaHRzLCBzZWxlY3Rpb24ubG9jYXRpb24sIHNl
bGVjdGlvbi5sb2NhdGlvbiArIHNlbGVjdGlvbi5sZW5ndGgpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAK
aW5kZXggNGM1MDBlMzY2OGEzMjEyM2I5ZTI0YjI3OGRhYWIwNzQ1NzNmZmEzMC4uNDY5MjU1M2Ew
YTgwOWRkM2Y3MDM5NTNlMzU4ZGYzMzQ2MjJlYzU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKQEAgLTEwOSwxMCAr
MTA5LDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJh
bWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGF1dG8gc3Vycm91bmRpbmdF
bmQgPSBlbmRPZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgIGF1dG8g
c3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzdXJyb3VuZGlu
Z0VuZCk7CiAgICAgICAgIGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNv
bXBvc2l0aW9uUmFuZ2UoKTsKLSAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgc3Vycm91
bmRpbmdSYW5nZSAmJiBzdXJyb3VuZGluZ1JhbmdlLT5jb250YWlucygqY29tcG9zaXRpb25SYW5n
ZSkpIHsKKyAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgc3Vycm91bmRpbmdSYW5nZSAm
JiBzdXJyb3VuZGluZ1JhbmdlLT5jb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9u
UmFuZ2UpLmdldCgpKSkgewogICAgICAgICAgICAgYXV0byBjbG9uZWRSYW5nZSA9IHN1cnJvdW5k
aW5nUmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAgICAgICAgICAgIHN1cnJvdW5kaW5nUmFuZ2UtPnNl
dEVuZChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgY2xv
bmVkUmFuZ2UtPnNldFN0YXJ0KGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAg
ICAgICAgICAgc3Vycm91bmRpbmdSYW5nZS0+c2V0RW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOworICAgICAgICAgICAgY2xvbmVkUmFuZ2Ut
PnNldFN0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5l
bmQpKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dCA9IHBs
YWluVGV4dCgqc3Vycm91bmRpbmdSYW5nZSkgKyBwbGFpblRleHQoY2xvbmVkUmFuZ2UpOwogICAg
ICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24g
PSBjaGFyYWN0ZXJDb3VudCgqc3Vycm91bmRpbmdSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5
b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Qb3NpdGlvbiA9IHBvc3RMYXlvdXRE
YXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAyOTY4ZjdjMGMy
NGE1YWQ4ODA2NWRkODRkZDhlMGMxYzNiYWVkMjk2Li5kOGRmZWE3MDcyM2YxNjU2YjI4NGFkYzYw
ZmY5ZTVhMTZmZDZmMThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjY3LDEwICsyNjcsMTAgQEAgdm9pZCBXZWJQYWdl
OjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3Vs
dCkgY29uc3QKIAogICAgIGlmIChmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAg
ICAgICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3Np
dGlvblJhbmdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBvc2l0aW9uUmFuZ2UtPmNvbGxlY3RTZWxl
Y3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOworICAgICAgICAgICAg
Y3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3Rz
KHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CiAgICAgICAgICAgICBjb252ZXJ0Q29u
dGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5tYXJrZWRU
ZXh0UmVjdHMpOwogCi0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0ID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChjb21wb3NpdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLm1hcmtlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KCpjb21wb3NpdGlv
blJhbmdlKTsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gY29tcG9zaXRpb25TZWxlY3Rp
b24oKmNvbXBvc2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEubWFya2Vk
VGV4dENhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoY29tcG9zaXRp
b25TZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8q
IGluc2lkZUZpeGVkICovKSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0
Q2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoY29tcG9zaXRpb25TZWxl
Y3Rpb24udmlzaWJsZUVuZCgpLmFic29sdXRlQ2FyZXRCb3VuZHMobnVsbHB0ciAvKiBpbnNpZGVG
aXhlZCAqLykpOwpAQCAtMTM3NywxMyArMTM3NywxNSBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdp
dGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUs
CiAgICAgewogICAgICAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBtYXJrZWRSYW5nZSA9IGZy
YW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uIDwg
bWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbWFy
a2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uID4gbWFya2Vk
UmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG1hcmtlZFJhbmdl
LT5lbmRQb3NpdGlvbigpOworICAgICAgICBhdXRvIG1hcmtlZFJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFya2VkUmFuZ2UtPnN0YXJ0KTsKKyAgICAgICAgYXV0
byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtYXJrZWRSYW5nZS0+
ZW5kKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQb3NpdGlvbikKKyAgICAgICAgICAg
IHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9uID4gZW5kUG9z
aXRpb24pCisgICAgICAgICAgICBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uOwogICAgICAgICBpZiAo
d2tHZXN0dXJlU3RhdGUgIT0gR2VzdHVyZVJlY29nbml6ZXJTdGF0ZTo6QmVnYW4pCi0gICAgICAg
ICAgICBmbGFncyA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhtYXJrZWRSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSAhPSBkaXN0
YW5jZUJldHdlZW5Qb3NpdGlvbnMobWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRp
b24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiB7
IH07CisgICAgICAgICAgICBmbGFncyA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBv
c2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSAhPSBkaXN0YW5j
ZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pID8gUGhyYXNlQm91bmRh
cnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiB7IH07CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIGZsYWdzID0gUGhyYXNlQm91bmRhcnlDaGFuZ2VkOwogICAgICAgICByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbik7
CkBAIC0yNDgzLDcgKzI0ODUsNiBAQCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6
YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICBFZGl0aW5nUmFuZ2UgbWFya2VkVGV4dFJhbmdl
OwogCiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
OwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpOwogICAgIGNvbnN0IHVuc2lnbmVkIG1pbkNvbnRleHRXb3JkQ291bnQg
PSAzOwpAQCAtMjQ5NCwxNCArMjQ5NSwxMiBAQCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2Vi
UGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0
b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHN0
YXJ0UG9zaXRpb24pOwogICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEJlZm9yZTsKLSAgICAgICAg
aWYgKHJhbmdlKQotICAgICAgICAgICAgbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNv
bnRleHQocmFuZ2UuZ2V0KCkpOwotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1l
LmRvY3VtZW50KCksIGVuZFBvc2l0aW9uLCBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigp
KTsKKyAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0
aW9uKSkKKyAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0
KHsgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQsICpzdGFydCB9KTsKICAgICAgICAgU3RyaW5nIG1h
cmtlZFRleHRBZnRlcjsKLSAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgbWFya2VkVGV4
dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7CisgICAgICAgIGlmIChh
dXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSkKKyAgICAgICAgICAgIG1h
cmtlZFRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQoeyAqZW5kLCBjb21wb3NpdGlvblJh
bmdlLT5lbmQgfSk7CiAgICAgICAgIG1hcmtlZFRleHQgPSBtYXJrZWRUZXh0QmVmb3JlICsgc2Vs
ZWN0ZWRUZXh0ICsgbWFya2VkVGV4dEFmdGVyOwogICAgICAgICBpZiAoIW1hcmtlZFRleHQuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0UmFuZ2UubG9jYXRpb24gPSBtYXJrZWRU
ZXh0QmVmb3JlLmxlbmd0aCgpOwpAQCAtMjYxNywxNCArMjYxNiwxNiBAQCBzdGF0aWMgdm9pZCBm
b2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgRWxlbWVudCYg
Zm9jdXNlZEVsZQogICAgIEludFBvaW50IGNvbnN0cmFpbmVkUG9pbnQgPSBjb25zdHJhaW5Qb2lu
dChhZGp1c3RlZFBvaW50LCBmcmFtZSwgZm9jdXNlZEVsZW1lbnQpOwogICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0cmFpbmVk
UG9pbnQpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRp
dG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZy
YW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAoIWNvbXBvc2l0aW9uUmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwb3NpdGlvbiA8IGNvbXBvc2l0aW9uUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgcG9zaXRpb24gPSBjb21wb3NpdGlvblJhbmdl
LT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgZWxzZSBpZiAocG9zaXRpb24gPiBjb21wb3NpdGlvblJh
bmdlLT5lbmRQb3NpdGlvbigpKQotICAgICAgICBwb3NpdGlvbiA9IGNvbXBvc2l0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCk7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KTsKKyAgICBhdXRvIGVuZFBvc2l0
aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCk7
CisgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQb3NpdGlvbikKKyAgICAgICAgcG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uOworICAgIGVsc2UgaWYgKHBvc2l0aW9uID4gZW5kUG9zaXRpb24pCisgICAg
ICAgIHBvc2l0aW9uID0gZW5kUG9zaXRpb247CiAgICAgSW50UmVjdCBjYXJldFJlY3QgPSB2aWV3
LmNvbnRlbnRzVG9Sb290Vmlldyhwb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogICAg
IGZsb2F0IGRlbHRhWCA9IGFicyhjYXJldFJlY3QueCgpICsgKGNhcmV0UmVjdC53aWR0aCgpIC8g
MikgLSByZXF1ZXN0LnBvaW50LngoKSk7CiAgICAgZmxvYXQgZGVsdGFZRnJvbVRoZVRvcCA9IGFi
cyhjYXJldFJlY3QueSgpIC0gcmVxdWVzdC5wb2ludC55KCkpOwpAQCAtNDI1Myw4ICs0MjU0LDgg
QEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVk
aXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgaWYgKHdhbnRzTWFya2VkVGV4dFJl
Y3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIHdo
ZXJlIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBtYXJrZWQgdGV4dCByZWN0cyBtYWtlIHN1cmUg
dGhhdCB0aGUgY29udGV4dAogICAgICAgICAgICAgLy8gcmFuZ2UgZW5jb21wYXNzZXMgdGhlIGVu
dGlyZSBtYXJrZWQgdGV4dCByYW5nZSBzbyB0aGF0IHdlIGRvbid0IHJldHVybiBhIHRydW5jYXRl
ZCByZXN1bHQuCi0gICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uU3RhcnQgPSBjb21wb3NpdGlv
blJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uRW5k
ID0gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gY29t
cG9zaXRpb25TdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJh
bmdlLT5zdGFydCk7CisgICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uRW5kID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCk7CiAgICAgICAgICAgICBp
ZiAoY29udGV4dEJlZm9yZVN0YXJ0ID4gY29tcG9zaXRpb25TdGFydCkKICAgICAgICAgICAgICAg
ICBjb250ZXh0QmVmb3JlU3RhcnQgPSBjb21wb3NpdGlvblN0YXJ0OwogICAgICAgICAgICAgaWYg
KGNvbnRleHRBZnRlckVuZCA8IGNvbXBvc2l0aW9uRW5kKQpAQCAtNDI3NCw5ICs0Mjc1LDkgQEAg
dm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRp
bmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBjb250ZXh0LmNvbnRleHRCZWZvcmUgPSBtYWtl
U3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0
aW9uKTsKICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IG1ha2VTdHJpbmcoc3RhcnRPZlJhbmdl
T2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsK
ICAgICBjb250ZXh0LmNvbnRleHRBZnRlciA9IG1ha2VTdHJpbmcoZW5kT2ZSYW5nZU9mSW50ZXJl
c3RJblNlbGVjdGlvbiwgY29udGV4dEFmdGVyRW5kKTsKLSAgICBpZiAoY29tcG9zaXRpb25SYW5n
ZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY29tcG9zaXRpb25SYW5n
ZS5nZXQoKSkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uU3RhcnQoY29t
cG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGNvbXBvc2l0aW9uRW5kKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgIGlm
IChjb21wb3NpdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgp
LCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLnB0cigpKSkgeworICAgICAgICBW
aXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNv
bXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdl
LT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0ID0gbWFrZVN0cmluZyhjb21wb3Np
dGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CiAgICAgICAgIGNvbnRleHQuc2VsZWN0ZWRSYW5n
ZUluTWFya2VkVGV4dC5sb2NhdGlvbiA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGNvbXBvc2l0aW9uU3RhcnQpOwogICAgICAgICBj
b250ZXh0LnNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQubGVuZ3RoID0gW2NvbnRleHQuc2VsZWN0
ZWRUZXh0LnN0cmluZyBsZW5ndGhdOwpAQCAtNDMwMywxMCArNDMwNCw4IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJl
cXVlc3QgcmVxdWVzCiAgICAgICAgICAgICBjb250ZXh0LnRleHRSZWN0cyA9IGNoYXJhY3RlclJl
Y3RzRm9yUmFuZ2UoKmNvbnRleHRSYW5nZSwgMCk7CiAgICAgfSBlbHNlIGlmICh3YW50c01hcmtl
ZFRleHRSZWN0cyAmJiBjb21wb3NpdGlvblJhbmdlKSB7CiAgICAgICAgIHVuc2lnbmVkIGNvbXBv
c2l0aW9uU3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29tcG9zaXRpb25SYW5nZS0+
c3RhcnRQb3NpdGlvbigpKSkKLSAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0
ID0gV2ViQ29yZTo6cGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsgV1RGTW92ZSgqc3RhcnQpLCBXVEZN
b3ZlKCplbmQpIH0pLmxlbmd0aCgpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHN0YXJ0
ID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkp
KQorICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IFdlYkNvcmU6OnBsYWluVGV4
dCh7IFdURk1vdmUoKnN0YXJ0KSwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQgfSkubGVuZ3RoKCk7
CiAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5nZSgqY29t
cG9zaXRpb25SYW5nZSwgY29tcG9zaXRpb25TdGFydE9mZnNldCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1t
CmluZGV4IDhkNmM0ODc5MWQ0N2RmOTRlZjlhMjEzOGIzODIzNTQwMDM1YmEwNGMuLmVjY2ZiNTAx
ZTZlYzMyMTg3NmEwNmE0MDQyZmRiOTNjMTgwNmQ4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0xNDAsNyAr
MTQwLDcgQEAgLSAoQ0dSZWN0KWNsb3Nlc3RDYXJldFJlY3RJbk1hcmtlZFRleHRSYW5nZUZvclBv
aW50OihDR1BvaW50KXBvaW50CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAKLSAg
ICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdl
KCkuZ2V0KCk7CisgICAgYXV0byBtYXJrZWRUZXh0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkuY29t
cG9zaXRpb25SYW5nZSgpOwogICAgIGF1dG8gbWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uID0gbWFy
a2VkVGV4dFJhbmdlID8gVmlzaWJsZVNlbGVjdGlvbigqbWFya2VkVGV4dFJhbmdlKSA6IFZpc2li
bGVTZWxlY3Rpb24oKTsKIAogICAgIGlmICghbWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uLmlzUmFu
Z2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQppbmRleCBhMGI2Yjc5
NmEzYTgyNzlkODg0YzY0NzMwMTUzOTEzNDUwNzE2MGQ4Li5kMGQzMGNlOWE4MWI3MThiOWFjMjI4
MDM0ZWIwNTcxNTk5ZWRkNzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9E
T00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdl
Lm1tCkBAIC0zMDksNCArMzA5LDkgQEAgRE9NUmFuZ2UgKmtpdChXZWJDb3JlOjpSYW5nZSogdmFs
dWUpCiAgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKIH0KIAorRE9NUmFuZ2UgKmtp
dChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHZhbHVlKQoreworICAgIHJl
dHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHZhbHVlKS5nZXQoKSk7Cit9CisKICN1bmRlZiBJTVBM
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5h
bC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaAppbmRl
eCBhZjU1OTMyNzA5MzE2NDViYTcyYWUxYTE5OTFhZWQ5MTUwOWRmY2Q3Li5lNjgxOWE1ZjhkNTg4
ZDJlOWI2ODdmMGQ5NzlmNjdjYjIzYTg5YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKQEAgLTIzLDExICsyMyw5IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdl
YktpdExlZ2FjeS9ET01SYW5nZS5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSYW5n
ZTsKLX0KLQogV2ViQ29yZTo6UmFuZ2UqIGNvcmUoRE9NUmFuZ2UgKik7CiBET01SYW5nZSAqa2l0
KFdlYkNvcmU6OlJhbmdlKik7CitET01SYW5nZSAqa2l0KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCBlMWI0MmVhNmQyZmJlZmUzYTFl
ZGYxMTMyMmM2ZDVlOGIzMDNmZjQ1Li42ZjA4ZmFhYTk1MzVjNGFiOTc1ZjI3YjdjYmY0MjU3Njk1
ZjhiNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNjMsMjQgKzYzLDI0IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSBmaW5hbDsKICAgICBib29sIGlzU2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwogCi0gICAgYm9vbCBz
aG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
RGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7
CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwot
ICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJv
b2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4
dChjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6
OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91
bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9v
bCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwor
ICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
IGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVy
dGllcyosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxl
KGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkQXBwbHlTdHlsZSgpIGZpbmFsOwog
Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdl
YkNvcmU6OlJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCkgZmluYWw7CisgICAgYm9vbCBzaG91bGRN
b3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNvbnN0IFdl
YkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNlZCkgZmluYWw7CiAKICAgICB2b2lk
IGRpZEJlZ2luRWRpdGluZygpIGZpbmFsOwogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFs
OwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdl
KikgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3Qg
T3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJv
YXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9h
cmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJk
VHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmRE
YXRhKSBmaW5hbDsKIAogICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25zdCBTdHJp
bmcmKSBmaW5hbDsKICAgICBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIHJlcXVlc3RE
T01QYXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmKSBmaW5hbCB7IHJldHVybiBXZWJDb3JlOjpET01Q
YXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JHZXN0dXJlOyB9CkBAIC0xNTMsNyArMTUzLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFN1cHByZXNzUGFzc3dvcmRFY2hvKCkgY29uc3Qg
ZmluYWw7CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRv
Y3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3Zl
KSBmaW5hbDsKKyAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZy
YWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlz
TW92ZSkgZmluYWw7CiAgICAgCiAgICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5n
ZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbDsKICAgICB2
b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KaW5kZXggOWFiMWMyOWQ0ODc4NzdkNmU4NTgzOWY5ZDVmNGM4OTA2OTgxMjli
Mi4uYmQ5NWE2NjQ4YTMwMzJjMDU3YTk4MWUwOTQ2OTA4MGU4ODEwNjM1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQpAQCAtMjM0LDEwICsyMzQsOSBAQCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbENo
ZWNrZXJEb2N1bWVudFRhZygpCiAKICNlbmRpZgogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93
ZWJWaWV3Ci0gICAgICAgIHNob3VsZERlbGV0ZURPTVJhbmdlOmtpdChyYW5nZSldOworICAgIHJl
dHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2Vi
VmlldyBzaG91bGREZWxldGVET01SYW5nZTpraXQocmFuZ2UpXTsKIH0KIAogYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0yNTYsMTEgKzI1NSwxMSBA
QCBib29sIFdlYkVkaXRvckNsaWVudDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVk
KCkgY29uc3QKICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5zZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkKCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0
eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgUmVmPE11dGFibGVTdHls
ZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNNdXRhYmxlKCkgPyBSZWY8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4oc3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydGllcyY+KCpz
dHlsZSkpIDogc3R5bGUtPm11dGFibGVDb3B5KCkpOwogICAgIHJldHVybiBbW21fd2ViVmlldyBf
ZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICBzaG91
bGRBcHBseVN0eWxlOmtpdCgmbXV0YWJsZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCkpIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtpdChyYW5nZSldOworICAgICAgICBzaG91bGRBcHBs
eVN0eWxlOmtpdCgmc3R5bGUubXV0YWJsZUNvcHkoKS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlv
bigpKQorICAgICAgICB0b0VsZW1lbnRzSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKIH0KIAogc3Rh
dGljIHZvaWQgdXBkYXRlRm9udFBhbmVsKFdlYlZpZXcgKndlYlZpZXcpCkBAIC0yNzksMzMgKzI3
OCwyOSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQXBwbHlTdHlsZSgpCiAgICAgdXBkYXRl
Rm9udFBhbmVsKG1fd2ViVmlldyk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRN
b3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSogcmFuZ2UsIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNl
ZCkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNl
ZCkKIHsKICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzptX3dlYlZpZXcKICAgICAgICAgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGU6a2l0
KHJhbmdlKSByZXBsYWNpbmdSYW5nZTpraXQocmFuZ2VUb0JlUmVwbGFjZWQpXTsKIH0KIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKIHsKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5n
ZTpraXQocmFuZ2UpXTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW1ttX3dlYlZp
ZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkQmVn
aW5FZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVy
biBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmll
dwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5n
ZTpraXQocmFuZ2UpXTsKKyAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6a2l0
KHJhbmdlKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9u
KQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rp
b24gYWN0aW9uKQogewogICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBtX3dlYlZpZXc7CiAgICAgcmV0
dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcg
c2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOmtpdChyYW5nZSkgZ2l2ZW5B
Y3Rpb246a2l0KGFjdGlvbildOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmlu
aXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQorYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwg
RUFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewogICAg
IHJldHVybiBbbV93ZWJWaWV3IF9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOmtpdChmcm9t
UmFuZ2UpIHRvRE9NUmFuZ2U6a2l0KHRvUmFuZ2UpIGFmZmluaXR5OmtpdChzZWxlY3Rpb25BZmZp
bml0eSkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOwogfQpAQCAtNDExLDEyICs0MDYs
MTIgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KCkKICNlbmRpZgogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxs
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikK
IHsKICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgV2ViS2l0LCBvbmx5IFdlYktpdDIuCiB9CiAKLXZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNv
cmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCit2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7CiAgICAgLy8gTm90IGltcGxl
bWVudGVkIFdlYktpdCwgb25seSBXZWJLaXQyLgogfQpAQCAtNTc3LDkgKzU3Miw5IEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQogCiAj
ZW5kaWYgLy8gVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlICpub2RlLCBSYW5nZSogcmVwbGFjaW5nUmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgcmVwbGFjaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsgCi0g
ICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6a2l0KG5vZGUpIHJlcGxhY2luZ0RPTVJhbmdlOmtp
dChyZXBsYWNpbmdSYW5nZSkgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pZ2l2ZW5B
Y3Rpb25dOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRJbnNlcnROb2RlOmtpdCgmbm9kZSkgcmVwbGFjaW5n
RE9NUmFuZ2U6a2l0KHJlcGxhY2luZ1JhbmdlKSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFj
dGlvbilnaXZlbkFjdGlvbl07CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVu
ZG9PclJlZG9TdGVwKFVuZG9TdGVwJiBzdGVwLCBib29sIGlzUmVkbykKQEAgLTg1NiwxMCArODUx
LDEwIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3Jtc1R3b1N0ZXBQYXN0ZShXZWJDb3Jl
OjpEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYg
ZnJhZ21lbnQsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCitib29sIFdlYkVkaXRv
ckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBj
b25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQogewogICAgIGlmIChb
W21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihwZXJmb3JtVHdvU3RlcERyb3A6YXREZXN0aW5hdGlvbjppc01vdmU6KV0pCi0gICAg
ICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gcGVyZm9ybVR3
b1N0ZXBEcm9wOmtpdCgmZnJhZ21lbnQpIGF0RGVzdGluYXRpb246a2l0KCZkZXN0aW5hdGlvbikg
aXNNb3ZlOmlzTW92ZV07CisgICAgICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0
ZUZvcndhcmRlcl0gcGVyZm9ybVR3b1N0ZXBEcm9wOmtpdCgmZnJhZ21lbnQpIGF0RGVzdGluYXRp
b246a2l0KGRlc3RpbmF0aW9uKSBpc01vdmU6aXNNb3ZlXTsKIAogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTg4Nyw3ICs4ODIsNyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0
b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaQogCiAjaWYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3Rl
cERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIFJhbmdlJiwgYm9vbCkKK2Jvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFNpbXBsZVJh
bmdlJiwgYm9vbCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0YzU0YzQ0NGFjZjE3ODE5MDJkNjU4YTkx
NWE0NjI4ODNiYjUyMWEwLi43NjNjNzc3Y2UyYjAyNjZkNDA5M2RhZmNhYzJhNjM2MjVmMWJiZDZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTcy
MCwxMyArNzIwLDE1IEBAIC0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgV2Vi
Q29yZTo6UG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3RpCiAKIC0gKE5TUmVjdClfZmly
c3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgIHJldHVybiBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShjb3JlKHJhbmdlKSk7Cisg
ICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisgICAgcmV0dXJuIF9w
cml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCptYWtlUmFuZ2Uo
Y29yZShyYW5nZSkpKTsKIH0KIAogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERP
TVJhbmdlICopcmFuZ2UKIHsKICAgICBib29sIGluc2lkZUZpeGVkID0gZmFsc2U7IC8vIEZJWE1F
OiBnZXQgdmlhIGZpcnN0UmVjdEZvclJhbmdlKCkuCi0gICAgTlNSZWN0IHJhbmdlUmVjdCA9IFtz
ZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07ICAgIAorICAgIE5TUmVjdCByYW5nZVJl
Y3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOwogICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGNvcmUoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7CiAgICAgICAgIAogICAgIGlmIChz
dGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7CkBAIC03ODQsNyArNzg2LDcgQEAg
LSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OkVBbHRlcmEKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBzZWxl
Y3Rpb247CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9u
LCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwog
fQogI2VuZGlmCiAKQEAgLTg1Myw3ICs4NTUsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0RE9NUmFu
Z2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAoRE9NUmFuZ2UgKilfbWFya0RPTVJh
bmdlCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRS
YW5nZSgpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50
V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzoo
TlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCkBAIC0xMTA2LDEyICsxMTA4LDEyIEBAIC0gKERPTVJh
bmdlICopX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDooQ0dQb2ludClmaXJzdCBzZWNvbmRQ
b2ludDooQ0dQb2ludClzCiB7CiAgICAgYXV0byBmaXJzdFBvc2l0aW9uID0gW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbkZvclBvaW50OmZpcnN0XTsKICAgICBhdXRvIHNlY29uZFBvc2l0aW9uID0gW3Nl
bGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnNlY29uZF07Ci0gICAgcmV0dXJuIGtpdChjcmVh
dGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNv
bmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQo
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNvbmRQb3NpdGlvbiku
dG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdl
Rm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBv
aW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1Nf
RkFNSUxZKQpAQCAtMTQ1NCw3ICsxNDU2LDcgQEAgLSAoQk9PTClpc1RlbGVwaG9uZU51bWJlclBh
cnNpbmdFbmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIHJl
dHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2Vs
ZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiAt
ICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5T
U2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmcK
QEAgLTE0OTYsNyArMTQ5OCw3IEBAIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICopZWxlbWVudFJhbmdlQ29udGFp
bmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29y
ZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmVsZW1l
bnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsKIH0KIAogLSAodm9pZClleHBhbmRT
ZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KQEAgLTE1MjYsNyArMTUyOCw3
IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbgogCiAtIChET01SYW5n
ZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIHJldHVybiBraXQo
Y3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5z
ZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSk7CiB9CiAKIC0g
KE5TU3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKQEAgLTE1ODksMTIgKzE1
OTEsMTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFydAogCiAtIChET01SYW5nZSAqKXJh
bmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1
cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxm
KS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSk7CiB9
CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246KGludClh
bW91bnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxl
Y3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5n
Q3VycmVudFNlbGVjdGlvbihhbW91bnQpKTsKIH0KIAogLSAodm9pZClzZWxlY3ROU1JhbmdlOihO
U1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKQEAgLTE2MTgsNyAr
MTYyMCw3IEBAIC0gKERPTVJhbmdlICopbWFya2VkVGV4dERPTVJhbmdlCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBraXQoZnJhbWUtPmVkaXRvcigp
LmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChmcmFtZS0+ZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpKTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRUZXh0OihOU1N0
cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSluZXdTZWxSYW5nZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggMTExY2Y4YmRj
MjlkYzYxZTI4ZjgyMmU5NTdiOTM4ODJhNDI3OTlhNS4uNGUzYTA4YjJkYzVkMDRiZTgwZjExYzI5
Y2IyMjk5MTBiNGU4OGVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCkBAIC0xMzMyLDcgKzEzMzIsNyBAQCAtIChCT09MKV9zaG91bGRSZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmll
d0lucwogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQogewogICAgIGF1dG8qIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjcmVh
dGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIDogbmls
OwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNjM0Niw3ICs2MzQ2LDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2ZyYW1l
IF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2VdOwogICAgIGlmICghcmFuZ2UpIHsK
ICAgICAgICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigldSwg
JXUpIC0+ICgwLCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5ndGgp
OwotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJu
IE5TWmVyb1JlY3Q7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChbcmFuZ2Ugc3RhcnRDb250YWlu
ZXJdKTsKQEAgLTcwNzUsNyArNzA3NSw3IEBAIC0gKE5TVUludGVnZXIpY291bnRNYXRjaGVzRm9y
VGV4dDooTlNTdHJpbmcgKilzdHJpbmcgaW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nCiAgICAg
aWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGNvcmVGcmFt
ZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dChzdHJpbmcsIGNvcmUocmFuZ2UpLCBjb3Jl
T3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVzLCAwKTsKKyAgICByZXR1cm4gY29y
ZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywgbWFrZVJhbmdlKGNv
cmUocmFuZ2UpKSwgY29yZU9wdGlvbnMob3B0aW9ucyksIGxpbWl0LCBtYXJrTWF0Y2hlcywgMCk7
CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZDooQk9PTClu
ZXdWYWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJU
ZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQppbmRleCAxZTNiNzlkMDM4MWFlOTlk
NmNhMzRlY2EyMmY1NjM5ZDQ4YTNhOTRlLi44MDFiZWZlYzc2ZDA5NmY5M2YwZjQ4ZDYzY2Y4N2Rm
OTVkNTUxYmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQpAQCAtMTc2LDcgKzE3Niw3
IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29y
ZCBzdGVtCiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKLSAg
ICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShmcmFt
ZSktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsK
KyAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgICAgIERPTVJhbmdlICp3
aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQKICAgICAgICAgICAgIGRpcmVjdGlvbjpTZWxlY3Rp
b25EaXJlY3Rpb246OkJhY2t3YXJkIGdyYW51bGFyaXR5OlRleHRHcmFudWxhcml0eTo6V29yZEdy
YW51bGFyaXR5XTsKICAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQgY2xvbmVS
YW5nZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRl
eHRJdGVyYXRvci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0
ZXJhdG9yLm1tCmluZGV4IDhjN2U3ZWUwMGY3ZjMxNTBkODk3NzQzYTA3MjQwOTZiMzg4MjE3Y2Uu
LjkzYjgzNDc3ZmM4YTQyYWQzZjc0ZDM2OWU4MTc5NGJiZWZkYTAzYWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCkBAIC05NSw3
ICs5NSw3IEBAIC0gKERPTVJhbmdlICopY3VycmVudFJhbmdlCiAgICAgYXV0byYgdGV4dEl0ZXJh
dG9yID0gKl9wcml2YXRlLT5fdGV4dEl0ZXJhdG9yOwogICAgIGlmICh0ZXh0SXRlcmF0b3IuYXRF
bmQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZSh0ZXh0SXRlcmF0b3IucmFuZ2UoKSkucHRyKCkpOworICAgIHJldHVybiBraXQodGV4dEl0ZXJh
dG9yLnJhbmdlKCkpOwogfQogCiAvLyBGSVhNRTogQ29uc2lkZXIgZGVwcmVjYXRpbmcgdGhpcyBt
ZXRob2QgYW5kIGNyZWF0aW5nIG9uZSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgY29weWluZyA4LWJp
dCBjaGFyYWN0ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CmluZGV4IDg1ZDY5NDNlMzZiYWU2MzdhMGUwOWI1NDc5ZGFiMzViMzlhYTdjY2MuLjA3MzNmNWUw
NDQ0Zjc5YWRkN2RiOTdjZGExNWQ2OTc4MjhiNjk3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQ1OTQsNyArNDU5NCw3IEBAIC0gKFdlYlRleHRJ
dGVyYXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVjdClyZWN0CiAgICAgYXV0byBpbnRS
ZWN0ID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKICAgICBhdXRvIHJhbmdlID0g
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBv
aW50KGludFJlY3QubWluWE1pbllDb3JuZXIoKSksCiAgICAgICAgIGNvcmVGcmFtZS0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5tYXhYTWF4WUNvcm5lcigpKSkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJh
bmdlOmtpdChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKV0gYXV0b3JlbGVhc2VdOworICAg
IHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KHJhbmdl
KV0gYXV0b3JlbGVhc2VdOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04NDE3
LDcgKzg0MTcsNyBAQCAtIChET01SYW5nZSAqKWVkaXRhYmxlRE9NUmFuZ2VGb3JQb2ludDooTlNQ
b2ludClwb2ludAogICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNlbGYpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KHBhZ2UtPm1haW5GcmFtZSgpLmVk
aXRvcigpLnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQoW3NlbGYgY29udmVydFBvaW50
OnBvaW50IHRvVmlldzpuaWxdKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQocGFnZS0+bWFpbkZy
YW1lKCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludChbc2VsZiBjb252
ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKSk7CiB9CiAKIC0gKEJPT0wpX3Nob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVudFJhbmdlIHRvRE9NUmFuZ2U6KERP
TVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
Y3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCkBAIC04NDY1LDcgKzg0NjUs
NyBAQCAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKICAgICBhdXRvKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUp
CiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSk7CisgICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlv
bkFmZmluaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xh
c3Nlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKaW5k
ZXggYjYyNjQzNzNkNjVjODk2NTllMDc1NDkyMzBhMmMxMTI5OGVlMmIxOS4uMGZiYTg4MDg1YmE2
OTQ5NTM2OTk3NWNkMGI5MTVjNDVhMjZiZTNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0RPTUNvcmVDbGFzc2VzLmNwcApAQCAtMTYxNSw2ICsxNjE1LDExIEBAIElET01SYW5nZSogRE9N
UmFuZ2U6OmNyZWF0ZUluc3RhbmNlKFdlYkNvcmU6OlJhbmdlKiByYW5nZSkKICAgICByZXR1cm4g
bmV3UmFuZ2U7CiB9CiAKK0lET01SYW5nZSogRE9NUmFuZ2U6OmNyZWF0ZUluc3RhbmNlKGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUluc3RhbmNlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkpOworfQorCiBIUkVTVUxUIERPTVJh
bmdlOjpzdGFydENvbnRhaW5lcihfQ09NX091dHB0cl9vcHRfIElET01Ob2RlKiogbm9kZSkKIHsK
ICAgICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9ET01D
b3JlQ2xhc3Nlcy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9NQ29yZUNsYXNzZXMuaApp
bmRleCBhYzY0M2I2ZmNmNDNhZWVjZDEyYjM3ZTk5MDFkN2IzMmNkMDI5Yzg5Li41NmY4Y2YwN2Nm
OGZmYjgyNWVjNTMzYjJhYzNkYTY0OWRhNDQxOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0RPTUNvcmVDbGFzc2VzLmgKQEAgLTM3LDkgKzM3LDkgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIE5v
ZGVMaXN0OwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBOYW1lZE5vZGVNYXA7CitzdHJ1Y3QgU2ltcGxl
UmFuZ2U7CiB9CiAKLQogY2xhc3MgRE9NT2JqZWN0IDogcHVibGljIFdlYlNjcmlwdE9iamVjdCwg
cHVibGljIElET01PYmplY3QgewogcHVibGljOgogICAgIC8vIElVbmtub3duCkBAIC04MjMsNiAr
ODIzLDcgQEAgcHJvdGVjdGVkOgogCiBwdWJsaWM6CiAgICAgc3RhdGljIElET01SYW5nZSogY3Jl
YXRlSW5zdGFuY2UoV2ViQ29yZTo6UmFuZ2UqKTsKKyAgICBzdGF0aWMgSURPTVJhbmdlKiBjcmVh
dGVJbnN0YW5jZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKTsKIAogcHVi
bGljOgogICAgIC8vIElVbmtub3duCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBlZmVkYTQ0YTk4
MTk4MDk1ZDAxN2EwOTBiZmM3YWE3ZTg3MjhkZDcwLi43MmY0YjExOGQ2NWZjNWYzNzI3OTdjNzAz
OTVhYjBjZjRkYTdmMGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTE4NSw3ICsxODUsNyBA
QCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAgICAgcmV0
dXJuIDA7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoV2Vi
Q29yZTo6UmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRp
dGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgQ09NUHRyPElX
ZWJFZGl0aW5nRGVsZWdhdGU+IGVkOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5n
RGVsZWdhdGUoJmVkKSkgfHwgIWVkLmdldCgpKQpAQCAtMjQwLDEyICsyNDAsMTAgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oRnJhbWUqKQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6ZGlzY2FyZGVkQ29tcG9zaXRpb24oRnJhbWUqKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjYW5jZWxlZENvbXBv
c2l0aW9uKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNs
aWVudDo6ZGlkRW5kRWRpdGluZygpCkBAIC0yNTcsMjAgKzI1NSwxOCBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6ZGlkRW5kRWRpdGluZygpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJD
b3JlOjpSYW5nZSopCit2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYsIFZl
Y3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiA+JikKK3ZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiA+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGVkOwogICAg
IGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdhdGUoJmVkKSkgfHwgIWVkLmdldCgp
KQpAQCAtMzAwLDcgKzI5Niw3IEBAIHN0YXRpYyBXZWJWaWV3SW5zZXJ0QWN0aW9uIGtpdChFZGl0
b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogICAgIHJldHVybiBXZWJWaWV3SW5zZXJ0QWN0aW9uVHlw
ZWQ7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUqIG5v
ZGUsIFJhbmdlKiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9u
KQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9y
SW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQogeyAKICAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxl
Z2F0ZT4gZWRpdGluZ0RlbGVnYXRlOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5n
RGVsZWdhdGUoJmVkaXRpbmdEZWxlZ2F0ZSkpIHx8ICFlZGl0aW5nRGVsZWdhdGUuZ2V0KCkpCkBA
IC0zMjQsNyArMzIwLDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUo
Tm9kZSogbm9kZSwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3IKICAgICByZXR1cm4gc2hv
dWxkSW5zZXJ0OwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcmIHN0ciwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rp
b24gZ2l2ZW5BY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcmIHN0ciwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBp
bnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQogewogICAgIENP
TVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZGl0aW5nRGVsZWdhdGU7CiAgICAgaWYgKEZBSUxF
RChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0ZSgmZWRpdGluZ0RlbGVnYXRlKSkgfHwgIWVkaXRp
bmdEZWxlZ2F0ZS5nZXQoKSkKQEAgLTM0Miw3ICszMzgsNyBAQCBib29sIFdlYkVkaXRvckNsaWVu
dDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0ciwgUmFuZ2UqIGluc2VydGluZ1Jh
bmdlLAogICAgIHJldHVybiBzaG91bGRJbnNlcnQ7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBjdXJyZW50UmFuZ2Us
IFdlYkNvcmU6OlJhbmdlKiBwcm9wb3NlZFJhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHkgc2VsZWN0
aW9uQWZmaW5pdHksIGJvb2wgZmxhZykKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgY3Vy
cmVudFJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHByb3Bvc2Vk
UmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBzZWxlY3Rpb25BZmZpbml0eSwgYm9vbCBmbGFnKQog
ewogICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAgICBpZiAoRkFJTEVEKG1f
d2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkKQEAgLTM2MCwxOCAr
MzU2LDE1IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdl
KFdlYkNvcmU6OlJhbmdlKiBjdXJyZW50UmFuZ2UsIFdlCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIFJhbmdlKikKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6ZGlkQXBwbHlTdHlsZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2Uq
KQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0
IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgKaW5kZXggNzdmNjQzNmU3YjU0ODBhZjA0YzQ4NWI4MGI1NDA4OTMwMzE1OTE2Mi4uNGFlOGY2
OTVhNGY1MmQ2MGI1Y2ZlOWQxYzcxZGRmZjc3Y2QzNDhmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAg
LTQ3LDE1ICs0NywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxs
Q2hlY2tpbmcoKSBmaW5hbDsKICAgICBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBmaW5h
bDsKIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7
Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAg
Ym9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdURjo6U3RyaW5nJiwgV2ViQ29yZTo6UmFuZ2Uq
LCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQmVn
aW5FZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5h
bDsKIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRF
ZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
V2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAg
ICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAgdm9pZCBn
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2Fy
ZERhdGFGb3JSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7CiAKICAgICB2b2lkIGRpZEVuZFVzZXJU
cmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCkgZmluYWwgeyB9CiAgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoKSBmaW5hbDsKQEAgLTY1LDEyICs2NSwxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGlzY2FyZGVkQ29tcG9zaXRpb24oV2ViQ29yZTo6RnJhbWUqKSBmaW5hbDsKICAgICB2
b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWwgeyB9CiAKLSAgICBib29sIHNob3VsZERl
bGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGREZWxldGVS
YW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKIAotICAg
IGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJl
cGxhY2luZ1JhbmdlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJv
b2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpS
YW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlJiwg
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByZXBsYWNpbmdSYW5nZSwgV2Vi
Q29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEFwcGx5U3R5
bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29y
ZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRBcHBseVN0eWxlKCkgZmluYWw7
Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpSYW5nZSosIFdl
YkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdl
JikgZmluYWw7CiAKICAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsOwog
ICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWw7
CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bmRvKCkgZmluYWw7CiAgICAg
dm9pZCByZWRvKCkgZmluYWw7CiAgICAgCi0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBX
ZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAgIGJvb2wg
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0
b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwog
ICAgIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5h
bDsKICAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoV2ViQ29yZTo6RWxlbWVudCopIGZp
bmFsOwogICAgIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEZpZWxkKFdlYkNvcmU6OkVsZW1lbnQq
KSBmaW5hbDsKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgd2lsbFNldElu
cHV0TWV0aG9kU3RhdGUoKSBmaW5hbDsKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoV2Vi
Q29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb24mKSBmaW5hbCB7IH0KLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpE
b2N1bWVudEZyYWdtZW50JiwgV2ViQ29yZTo6UmFuZ2UmLCBib29sKSBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJh
Z21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIHJlcXVlc3RE
T01QYXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmKSBmaW5hbCB7IHJldHVybiBXZWJDb3JlOjpET01Q
YXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JHZXN0dXJlOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404675</attachid>
            <date>2020-07-19 10:32:07 -0700</date>
            <delta_ts>2020-07-19 13:06:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200719103206.patch</filename>
            <type>text/plain</type>
            <size>168763</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM3Y2Q0YTRjOGM2MGJj
NGY1Yjk5MWRkMjhiZDAyMTk4Y2Y0MzJhOC4uNmRjYjVmODk1NjNlOTEyZTZlZjc1YTc4ZjVhYmVj
N2ZjMGEzMTdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTE4ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYnVpbGQgd2FybmluZ3MgaW4g
dGhlIFdlYlhSIGJhY2tlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDZjODk2N2UyYjdjMjc2ZjE3MjBmMzdiOGRl
NTczM2RmYjcxMmMyMWIuLjYwMWU1MTIwMjY4MThiMTI4YzA0MmZjMWQ5Y2VlZTc0ZTQ2NzkxNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcApAQCAtMzA2LDggKzMwNiw4IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzCiAg
ICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2UoKm1p
c3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
IGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91
cykgewogICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdpbigpOyByaXQg
IT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKQEAgLTMxNSw4ICszMTUsOCBAQCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdS
YW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRl
TGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICAg
ICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSktPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxs
aW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwMSwxNSArNjAxLDE0IEBAIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2Vz
dFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nl
c3RTdHJpbmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmlu
Z3MpIHsKLSAgICAgICAgaWYgKGF1dG8gc2VhcmNoU3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VS
YW5nZSkucHRyKCksIGZpbmRPcHRpb25zKSkgewotICAgICAgICAgICAgYXV0byBmb3VuZFN0cmlu
Z1JhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpzZWFyY2hTdHJpbmdSYW5nZSk7CisgICAgICAgIGlm
IChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmco
c2VhcmNoU3RyaW5nLCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CiAgICAgICAgICAg
ICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5n
UmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdS
YW5nZSA9ICpzZWFyY2hTdHJpbmdSYW5nZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGluZyByYW5nZSBl
ZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gcmFu
Z2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwgdXNlIHRoZSBs
ZWFkaW5nIHJhbmdlIGVkZ2VzLgogICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nlc3RTdHJpbmdQ
b3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCA6IGNs
b3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1JhbmdlLmVuZCA6IGZv
dW5kU3RyaW5nUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJpbmdQ
b3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBzZWFyY2hTdHJpbmdSYW5nZS0+ZW5kIDogc2Vh
cmNoU3RyaW5nUmFuZ2UtPnN0YXJ0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGF1dG8gY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLm9mZnNl
dDsKICAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0ID0gZm91bmRTdHJp
bmdQb3NpdGlvbi5vZmZzZXQ7CkBAIC02MTgsNyArNjE3LDcgQEAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGly
ZWN0aW8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQ
b3NpdGlvbk9mZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRT
ZWFyY2ggJiYgcmVzdWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkp
Ci0gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5nUmFu
Z2U7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpzZWFyY2hTdHJp
bmdSYW5nZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0
YzU0ZDFhYWQzMWRkMC4uZjczNGYyNzU2MThlZWEyNDNkZjE1MjE5NTAwZmQ3MmE5NTI1MjdjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY5Miw3ICs2OTIs
NyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRleHRP
cGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogCiAgICAgaWYgKFttYXJrZXJSYW5nZXMgaXNL
aW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKSB7CiAgICAgICAgIG9wZXJhdGlvbi50ZXh0UmFu
Z2VzID0gbWFrZVZlY3RvcihtYXJrZXJSYW5nZXMsIFt3cmFwcGVyXSAoaWQgbWFya2VyUmFuZ2Up
IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoW3dyYXBwZXIgcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUmFu
Z2UoW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKICAgICAg
ICAgfSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhNjI2OTRkZTFiODZj
ZmMxYjMzY2RmMTY3MDJiMGU2NTQxMzhhZjRhLi40ODkyN2MzNmVmYWE3YzE5ODJjZTY3ZjkyMGRj
YWY2NGEzMDQ1MTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBA
QCBzdGF0aWMgYm9vbCBhY2NlcHRzRWRpdGluZ0ZvY3VzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiAgICAgaWYgKCFmcmFtZSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2VPZkNvbnRlbnRz
KCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVk
aXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9CiAKIHN0YXRp
YyBib29sIGNhbkFjY2Vzc0FuY2VzdG9yKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBhY3RpdmVTZWN1
cml0eU9yaWdpbiwgRnJhbWUqIHRhcmdldEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggOWI3
YTFhNjIxMjE5NWEyZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4uOWVhMTQ5ZDJmNTFkZTI0YzMz
NzE2MGI1M2FmN2MxZWRjZGM4OGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0xODMzLDI2ICsx
ODMzLDI2IEBAIEZsb2F0UmVjdCBSYW5nZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0
PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9uCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVj
dChDb29yZGluYXRlU3BhY2U6OkFic29sdXRlLCByZWN0T3B0aW9ucyk7CiB9CiAKLVNpbXBsZVJh
bmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCitTaW1wbGVSYW5nZSBtYWtl
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiB7IHsgcmFuZ2Uuc3RhcnRD
b250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSB9LCB7IHJhbmdlLmVuZENvbnRhaW5lcigp
LCByYW5nZS5lbmRPZmZzZXQoKSB9IH07CiB9CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBSZWY8UmFuZ2U+JiByYW5nZSkKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25zdCBS
ZWY8UmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLmdl
dCgpKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAotT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCitPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBtYWtlU2lt
cGxlUmFuZ2UoKnJhbmdlKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKCpyYW5nZSk7CiB9CiAKLU9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYg
cmFuZ2UpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5n
ZT4mIHJhbmdlKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkpOwor
ICAgIHJldHVybiBtYWtlUmFuZ2UocmFuZ2UuZ2V0KCkpOwogfQogCiBSZWY8UmFuZ2U+IGNyZWF0
ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IGE4
NjE5Y2I5NDYzNDM0ZThjZTgxZDJiODQ3YzMyNWEwMTIwN2UxMTAuLjkzNWJiZGE0N2I3NjEwNzkw
NzdjNDE2M2UxYzg5OTc0ODI1ZDk5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xNzYsMTAgKzE3Niwx
MCBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBX
RUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFu
Z2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNv
bnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYp
OwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKLU9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKLU9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOworU2lt
cGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJhbmdlJik7CitTaW1wbGVSYW5nZSBtYWtlUmFuZ2Uo
Y29uc3QgUmVmPFJhbmdlPiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IG1ha2VSYW5nZShjb25zdCBSYW5nZSopOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CiAKIFdFQkNPUkVfRVhQT1JU
IFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDRhOGQwMDRkZTkx
Mjg5YTM0YWYwYzE1MWIzNjljMzUzZGZhZGJjYzkuLjI2NWM0OTdiNjA4MjgzZGIxMWJlM2YwN2Y2
NGRlZDc1M2E2NDE1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtODIsNiAr
ODIsMjAgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7
ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OwogfQogCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBzdGFydCwgY29uc3QgT3B0aW9u
YWw8Qm91bmRhcnlQb2ludD4mIGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9
OworfQorCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+JiYgc3RhcnQsIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgZW5kKQoreworICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4geyB7IFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSB9IH07Cit9CisKIFNpbXBsZVJh
bmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewogICAgIHJl
dHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCmluZGV4IDcwZTdjNDI1MWNkZGYzMTdiNDlkOWFhMmRjNDJlNmQ0NTQ3YTc0ZGQuLjAzNzc4
MGE2MjI0OTFlNzU0ZDA1MGUyYWZhZDMwZTE0OTYyOThmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5oCkBAIC00NiwxMSArNDYsMTQgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKICAgICBXRUJD
T1JFX0VYUE9SVCBTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQmJik7
CiAKICAgICAvLyBDb252ZW5pZW5jZSBvdmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRpb24g
ZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZlIHJhbmdlcy4KLSAgICAvLyBGSVhNRTogT25jZSB0cmFu
c2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VTaW1w
bGVSYW5nZSBpbnN0ZWFkLgorICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zaXRpb24gaXMgb3Zlciwg
cmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVJhbmdlIGluc3RlYWQuCiAgICAg
V0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKICAgICBTaW1wbGVSYW5n
ZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiwgY29uc3Qg
T3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBtYWtlUmFuZ2UoT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiwgT3B0aW9uYWw8Qm91
bmRhcnlQb2ludD4mJik7CisKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGUy
ZTg5NGNiOTM3OWM0M2EzMzNiY2IzZjA4MzMyMDE0MzNkN2YyMzAuLjlhYzJlOWQ4NjE2ZGQ2YTNj
MTRhZjAzNTUyMmMzMGU2MGU3MTMxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjQzLDcgKzI0Myw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsK
ICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdv
cmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlw
ZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFu
Z2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBudWxscHRyKTsKKyAgICAg
ICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJl
cGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFj
ZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgV1RGOjpudWxsb3B0KTsKICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpA
QCAtNjUzLDcgKzY1Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlE
aWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0CiAjaWYgVVNFKERJQ1RB
VElPTl9BTFRFUk5BVElWRVMpCiAgICAgYXV0byYgZWRpdG9yID0gbV9kb2N1bWVudC5lZGl0b3Io
KTsKICAgICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYg
KCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5n
LCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAo
IXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcs
ICpzZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGZvciAoYXV0byogbWFya2VyIDogc2VsZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKCpzZWxlY3Rpb24sIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpKQogICAgICAgICByZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxMTJmOTdiMmEwYjY1NDYyNTQ2NjI4
ODI2N2U2MzNiZGJiZmZiNWYxLi44NzBjNGRiYjY4ZDM4MGY5YTFiODFhMGMwZTVmMTNhYTMyNzRh
NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKQEAgLTc0OSw5ICs3NDksOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
Om1lcmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxh
Y2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFkb2N1
bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5n
ZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UsIHJhbmdl
VG9CZVJlcGxhY2VkKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gbW92ZVBhcmFn
cmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQg
d291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawogICAgIC8vIHJlbW92YWxz
IHRoYXQgaXQgZG9lcyBjYXVzZSB0aGUgaW5zZXJ0aW9uIG9mICphbm90aGVyKiBwbGFjZWhvbGRl
ci4KICAgICBib29sIG5lZWRQbGFjZWhvbGRlciA9IG1fbmVlZFBsYWNlaG9sZGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDJkN2FlMmFhNmQ1NDExOTE4MDFjOGZjMDI0NDEwYmU2
YjM1MzEyOTcuLjNiNWY3ZGU3OTgzODhhMjczNDEzOWNjZjczMjYyMTkxMGY0NDhhMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTUwNywyMSArNTA3LDE4IEBAIGJvb2wgRWRpdG9y
OjpjYW5EZWxldGUoKSBjb25zdAogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHNl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpjYW5EZWxl
dGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0Citib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIE5vZGUmIHN0YXJ0Q29udGFp
bmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0g
cmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIAotICAgIGlmICghc3RhcnRDb250YWluZXIuaGFz
RWRpdGFibGVTdHlsZSgpIHx8ICFlbmRDb250YWluZXIuaGFzRWRpdGFibGVTdHlsZSgpKQorICAg
IGlmICghcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgIXJhbmdl
LmVuZC5jb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CisgICAgaWYgKHJhbmdl
LmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzb21ldGltZXMgYWxsb3cgZGVs
ZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJsZSByb290cywgbGlrZSB3aGVuIHRoZSBjYXJl
dCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCi0gICAgICAgIGlmIChwcmV2aW91cy5pc051bGwo
KSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSAhPSBzdGFydENvbnRhaW5lci5yb290RWRpdGFibGVFbGVtZW50KCkpCisg
ICAgICAgIGF1dG8gcHJldmlvdXMgPSBWaXNpYmxlUG9zaXRpb24geyBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNIH0ucHJldmlvdXMoKTsKKyAgICAg
ICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHJhbmdlLnN0YXJ0LmNvbnRh
aW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTgsNyArNTU1LDcgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKICAgICAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNob3VsZEFk
ZFRvS2lsbFJpbmcpCi0gICAgICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rl
ZFJhbmdlKCkuZ2V0KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAg
ICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxSaW5n
SW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgICAgICAgICBkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAgICAgICAgICAgICAvLyBJ
bXBsaWNpdGx5IGNhbGxzIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpLgog
ICAgICAgICB9CkBAIC02MjcsNyArNjI0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRl
eHRCeXBhc3NpbmdESFRNTCgpCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7CiAgICAgU3RyaW5nIHRleHQgPSByZWFk
UGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCk7Ci0gICAgaWYgKGNsaWVudCgpICYm
IGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9CiAKQEAgLTY1Miw3ICs2NDksNyBA
QCBib29sIEVkaXRvcjo6Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYg
cGFzdGVib2FyZCkKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCgpICYmIHBhc3RlYm9hcmQuY2FuU21hcnRSZXBsYWNlKCk7CiB9CiAKLWJv
b2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVu
dCwgUmFuZ2UqIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rp
b24pCitib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYg
ZnJhZ21lbnQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVwbGFjaW5nRE9NUmFuZ2Us
IEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsKICAgICBpZiAoIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjEsNyArNjU4LDcgQEAgYm9vbCBFZGl0b3I6OnNo
b3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVw
bGFjaW5nRE8KICAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oY2hpbGQpICYmIGZyYWdtZW50Lmxh
c3RDaGlsZCgpID09IGNoaWxkKQogICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJlcGxhY2luZ0RP
TVJhbmdlLCBnaXZlbkFjdGlvbik7CiAKLSAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dE5vZGUoJmZyYWdtZW50LCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24pOworICAgIHJl
dHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZShmcmFnbWVudCwgcmVwbGFjaW5nRE9NUmFu
Z2UsIGdpdmVuQWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50IHNl
bGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxlIG1h
dGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQpAQCAtNzI0LDI3ICs3MjEsMjEgQEAgdm9pZCBFZGl0
b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21l
bnQsIFNlbGVjdFJlcGwKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChj
b25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBT
bWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
OjpZZXMsIGVkaXRpbmdBY3Rpb24pOworICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQo
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNl
bGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0Fj
dGlvbik7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKK09wdGlv
bmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRl
UmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdl
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFy
YW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoIWNhbkRlbGV0ZVJhbmdlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShyYW5n
ZSk7CisgICAgcmV0dXJuIHJhbmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKCkgJiYgY2FuRGVsZXRl
UmFuZ2UoKnJhbmdlKSAmJiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uo
KnJhbmdlKTsKIH0KIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCkBAIC03NjMsNyArNzU0
LDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVu
dEtpbmQ6OkN1dCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25z
dAorYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9u
KSBjb25zdAogewogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxvYWRl
cigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTgwLDcg
Kzk3MSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYg
c3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgZGlzcGF0Y2hJbnB1dEV2
ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CiAgICAgCi1i
b29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBSYW5n
ZSogcmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3Bl
cnRpZXMmIHN0eWxlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7ICAgCiAgICAgcmV0dXJu
IGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCByYW5nZSk7CiB9CkBAIC0xMDExLDcg
KzEwMDIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5
bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKCpzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUoc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAyMiw3ICsxMDEzLDcgQEAgdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0
aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jv
bmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCi0g
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0
eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZSht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShz
dHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKSwgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JG
aWx0ZXJNb2RlKTsKQEAgLTEwMzMsNyArMTAyNCw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFn
cmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBl
CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKKyAgICBpZiAoY2xp
ZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoKnN0eWxlLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpKQogICAgICAgICBhcHBs
eVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIApAQCAtMTI2Nyw3ICsx
MjU4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChj
b25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAoIXNlbGVjdGlvbi5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3Vs
ZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91
bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBGSVhN
RTogU2hvdWxkIHBhc3MgZmFsc2UgdG8gdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoKSB0byBub3QgcmVtb3ZlIG1hcmtlcnMgaWYKQEAgLTEzMjYsNyArMTMxNyw3IEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hv
dWxkSW5zZXJ0VGV4dCgiXG4iX3MsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTEzNDYsNyArMTMzNyw3
IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2Fu
RWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIl9z
LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xNDA2LDEwICsxMzk3LDEwIEBAIHZvaWQgRWRpdG9yOjpw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmlzCiAKIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNw
ZWNpZmllciBhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3Rl
ZFJhbmdlKCk7Ci0gICAgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbi5n
ZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgd2lsbFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbik7CiAgICAgaWYgKGFjdGlvbiA9PSBD
dXRBY3Rpb24pIHsKLSAgICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0
KCkpKQorICAgICAgICBpZiAoIXNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbikpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcodHJ1ZSk7CkBAIC0xNDM0LDcgKzE0MjUsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1
dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgp
KTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5
T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRh
dGFUcmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFz
dGUoKS0+d3JpdGVTZWxlY3Rpb24oY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pLmdldCgpLCBj
YW5TbWFydENvcHlPckRlbGV0ZSgpLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBJbmNsdWRlSW1hZ2VB
bHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQpAQCAtMTUy
Niw3ICsxNTE3LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1EZWxldGUoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCkuZ2V0
KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4
dCk7CiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCkpOwogCiAgICAgLy8gY2xlYXIgdGhlICJzdGFydCBuZXcga2lsbCByaW5nIHNlcXVlbmNl
IiBzZXR0aW5nLCBiZWNhdXNlIGl0IHdhcyBzZXQgdG8gdHJ1ZQpAQCAtMTc4NCwxMiArMTc3NSwx
MiBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKIAog
I2VuZGlmCiAKLWJvb2wgRWRpdG9yOjpzaG91bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jv
b2wgRWRpdG9yOjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsK
ICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEVuZEVkaXRpbmcocmFuZ2Up
OwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jv
b2wgRWRpdG9yOjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
ewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQmVnaW5FZGl0aW5nKHJh
bmdlKTsKIH0KQEAgLTE4NDEsNyArMTgzMiw3IEBAIHZvaWQgRWRpdG9yOjpkaWRFbmRFZGl0aW5n
KCkKICAgICAgICAgY2xpZW50KCktPmRpZEVuZEVkaXRpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3I6
OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSogcmFuZ2UpCit2b2lkIEVkaXRv
cjo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+d2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHJhbmdlKTsKQEAgLTE5MjQsMTQgKzE5MTUsMTQg
QEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogCiB2b2lkIEVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24oKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb21wb3NpdGlvblJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IGNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgLy8gVGhlIGNvbXBvc2l0aW9uIGNhbiBzdGFydCBpbnNpZGUgYSBjb21w
b3NlZCBjaGFyYWN0ZXIgc2VxdWVuY2UsIHNvIHdlIGhhdmUgdG8gb3ZlcnJpZGUgY2hlY2tzLgog
ICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODE+
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gICAgc2VsZWN0aW9uLnNldFdpdGhv
dXRWYWxpZGF0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigp
KTsKKyAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24oY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlLT5zdGFydCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5n
ZS0+ZW5kKSk7CiAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uLCB7IH0pOwogfQogCkBAIC0yNDg1LDkgKzI0NzYsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0
YXJ0LAogICAgIGlmICghdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdU
eXBlOjpTcGVsbGluZykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVTZWxlY3Rpb24g
YWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBM
ZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25C
b3VuZGFyeSkpOworICAgIGF1dG8gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3Jk
U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFu
Z2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVM
aXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3Jk
UmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpKTsKKyAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFk
amFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UpOwog
I2Vsc2UKICNpZiAhVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQogICAgIFVOVVNFRF9Q
QVJBTShkb1JlcGxhY2VtZW50KTsKQEAgLTI1NzIsNyArMjU2Myw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsCiAgICAgICAgIC8vIGZ1bGwgc2VudGVuY2UgYXMgd2UgY2FuLCByZXNwZWN0aW5n
IGJvdW5kYXJpZXMgd2hlcmUgc3BlbGxjaGVja2luZyBpcyBkaXNhYmxlZC4KICAgICAgICAgZnVs
bFNlbnRlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMo
KmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIHNw
ZWxsQ2hlY2tpbmdSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAg
ICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09w
dGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFu
Z2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZnVsbFNlbnRlbmNlUmFuZ2Up
KTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0
Q2hlY2tpbmdPcHRpb25zLCBzcGVsbENoZWNraW5nUmFuZ2UsIGFkamFjZW50V29yZFJhbmdlLCBm
dWxsU2VudGVuY2VSYW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI1ODAsNyAr
MjU3MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlOwog
ICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOwogCiAgICAgLy8gQXV0b2NvcnJlY3Qg
dGhlIG1pc3NwZWxsZWQgd29yZC4KQEAgLTI1OTksNyArMjU5MCw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsCiAgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVk
aXRvcigpLnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgICAgIGlmICghbV9k
b2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1p
c3NwZWxsaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVw
bGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAKQEAgLTI2MTYsNyArMjYwNyw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAjZW5kaWYKIH0KICAgICAKLXZvaWQgRWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpCit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7CiAjaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHNlbGVjdGlvbiBh
bHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KQEAgLTI2NDQsOSArMjYzNSwxMSBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvbwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgVGV4
dENoZWNraW5nSGVscGVyIGNoZWNrZXIoKmNsaWVudCgpLCAqc2VhcmNoUmFuZ2UpOwotICAgIGlm
IChjaGVja1NwZWxsaW5nKQotICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGluZ3MoZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKLSAgICBlbHNlIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKSkKKyAgICBpZiAoY2hlY2tTcGVsbGluZykgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IGZp
cnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2U7CisgICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxs
aW5ncyhmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlKTsKKyAgICAgICAgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlID0gbWFrZVJhbmdlKGZpcnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2UpOworICAgIH0gZWxz
ZSBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIGNoZWNrZXIubWFya0Fs
bEJhZEdyYW1tYXIoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CkBAIC0y
Njc0LDE4ICsyNjY3LDE4IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5G
b2N1c2VkTm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOwogfQogCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
K3ZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7
CiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rpb24sIHRydWUsIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4g
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rp
b24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogfQogCi12b2lkIEVkaXRvcjo6bWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucywgUmVmUHRyPFJhbmdlPiYmIHNwZWxsaW5nUmFu
Z2UsIFJlZlB0cjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBSZWZQdHI8UmFu
Z2U+JiYgZ3JhbW1hclJhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2lu
Z09wdGlvbnMsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSkKIHsKICAgICBpZiAocGxhdGZv
cm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxMCw4
ICsyNzAzLDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAoIWlzU3BlbGxDaGVj
a2luZ0VuYWJsZWRGb3IoJmVkaXRhYmxlTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gcmFuZ2VUb0NoZWNrID0gc2hvdWxkTWFya0dyYW1tYXIgPyBncmFtbWFyUmFuZ2UucmVsZWFz
ZU5vbk51bGwoKSA6IHNwZWxsaW5nUmFuZ2UucmVsZWFzZU5vbk51bGwoKTsKLSAgICBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoVG9DaGVjayhyYW5nZVRvQ2hlY2suZ2V0KCkpOworICAg
IGF1dG8mIHJhbmdlVG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gKmdyYW1tYXJSYW5nZSA6
ICpzcGVsbGluZ1JhbmdlOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0No
ZWNrKGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvQ2hlY2spKTsKICAgICBpZiAocGFyYWdyYXBoVG9D
aGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjcxOSw4ICsyNzEyLDggQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKIAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3
ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0
IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRh
YmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7Ci0gICAgYXV0byB0ZXh0UmVwbGFjZW1lbnRS
YW5nZSA9IGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UgPyBtYWtlUmVmKCphdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlKSA6IHJhbmdlVG9DaGVjay5jb3B5UmVmKCk7Ci0gICAgYXV0byByZXF1ZXN0
ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2lu
Z1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gbWFrZVJlZihwYXJhZ3JhcGhUb0No
ZWNrLnBhcmFncmFwaFJhbmdlKCkpIDogV1RGTW92ZShyYW5nZVRvQ2hlY2spLCBXVEZNb3ZlKHRl
eHRSZXBsYWNlbWVudFJhbmdlKSwgcGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKTsK
KyAgICBhdXRvJiB0ZXh0UmVwbGFjZW1lbnRSYW5nZSA9IGF1dG9tYXRpY1JlcGxhY2VtZW50UmFu
Z2UgPyAqYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA6IHJhbmdlVG9DaGVjazsKKyAgICBhdXRv
IHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVkT3B0aW9ucywgVGV4
dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFsLCBhc3luY2hyb25vdXMgPyBSZWY8UmFuZ2U+IHsg
cGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpIH0gOiBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2VUb0NoZWNrKSwgY3JlYXRlTGl2ZVJhbmdlKHRleHRSZXBsYWNlbWVudFJhbmdlKSwgcGFyYWdy
YXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKTsKICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjc1Myw5ICsyNzQ2LDkgQEAgc3RhdGljIGJvb2wgaXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRUeXBlKFRleHRDaGVja2luZ1R5cGUgdHlwZSkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKFJhbmdl
JiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3ZvaWQgRWRpdG9y
OjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRv
UmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKLSAgICBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50KS0+YXBwbHko
KTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlVG9SZXBsYWNlKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwogfQogCiBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgsIFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFu
Z2UpCkBAIC0yODk1LDcgKzI4ODgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3Io
Y29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAg
ICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUxp
bmtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNl
bWVudCwgcmFuZ2VUb1JlcGxhY2UucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJl
cGxhY2VtZW50LCBtYWtlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKSkgewogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2Vydmlu
Z1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNlLCByZXBsYWNl
bWVudCwgeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0pOwogCiAgICAgICAgICAgICAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSkgewpAQCAtMjk0OCwxMiArMjk0MSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBpZiAo
cmVwbGFjZWRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGlvbiB8
fCAhc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJh
bmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRT
dHJpbmcsIHNlbGVjdGlvbiwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgKnNlbGVjdGlvbik7Ci0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFn
cmFwaCgqc2VsZWN0aW9uKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKSk7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KHJlcGxhY2VkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8s
IEVkaXRBY3Rpb246Okluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFj
ZWRTdHJpbmcubGVuZ3RoKCkpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CkBAIC0yOTc5LDExICsyOTcyLDExIEBAIHZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAgICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRkKFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5n
ZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywg
Y3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShzcGVs
bENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZ3JhbW1hclNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBzcGVsbENo
ZWNraW5nUmFuZ2UsIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdS
YW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwog
ICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSk7CiAgICAgaWYgKG1hcmtHcmFtbWFyKQogICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFt
bWFyU2VsZWN0aW9uKTsKQEAgLTMwODYsMjMgKzMwNzksMTggQEAgdm9pZCBFZGl0b3I6OmRlbGV0
ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBTdHIKICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRlbGV0ZWRBdXRvY29ycmVj
dGlvbkF0UG9zaXRpb24ocG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2lu
dCYgd2luZG93UG9pbnQpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IG1fZG9jdW1lbnQuZnJhbWUo
KS0+ZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKICAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICBhdXRvIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgYXV0byBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZnJhbWVQb2ludCA9IGZyYW1l
Vmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0gICAgYXV0byBzZWxlY3Rpb24g
PSBWaXNpYmxlU2VsZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1l
UG9pbnQpIH07Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFZp
c2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVWaWV3
LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KSkgfS50b05vcm1hbGl6ZWRSYW5nZSgpOwog
fQogCiB2b2lkIEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNv
bnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50LCBSZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFs
RXh0ZW50T3B0aW9uKQpAQCAtMzEyOSwxNyArMzExNywxNiBAQCB2b2lkIEVkaXRvcjo6c2V0SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJl
dmVhbAogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwogfQogCi1SZWZQ
dHI8UmFuZ2U+IEVkaXRvcjo6Y29tcG9zaXRpb25SYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpjb21wb3NpdGlvblJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
Y29tcG9zaXRpb25Ob2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2NvbXBvc2l0aW9uTm9kZS0+
bGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihtX2NvbXBvc2l0aW9uU3Rh
cnQsIGxlbmd0aCk7Ci0gICAgdW5zaWduZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgoc3RhcnQs
IG1fY29tcG9zaXRpb25FbmQpLCBsZW5ndGgpOwotICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBl
YXJseSByZXR1cm4gbmVlZWQ/CisgICAgdW5zaWduZWQgZW5kID0gc3RkOjpjbGFtcChtX2NvbXBv
c2l0aW9uRW5kLCBzdGFydCwgbGVuZ3RoKTsKICAgICBpZiAoc3RhcnQgPj0gZW5kKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX2NvbXBvc2l0aW9u
Tm9kZS0+ZG9jdW1lbnQoKSwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIHN0YXJ0LCBtX2NvbXBv
c2l0aW9uTm9kZS5nZXQoKSwgZW5kKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4geyB7IHsgKm1fY29tcG9zaXRpb25Ob2RlLCBzdGFydCB9LCB7ICptX2NvbXBvc2l0
aW9uTm9kZSwgZW5kIH0gfSB9OwogfQogCiBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxl
Y3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9uRW5kKSBj
b25zdApAQCAtMzIwMSw3ICszMTg4LDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAg
fQogCiAgICAgLy8gSW5zZXJ0IHRoZSB0cmFuc3Bvc2VkIGNoYXJhY3RlcnMuCi0gICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KHRyYW5zcG9zZWQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQodHJhbnNwb3NlZCwgbmV3U2Vs
ZWN0aW9uLmZpcnN0UmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
IHJldHVybjsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQodHJhbnNwb3NlZCwgU2VsZWN0
UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwog
fQpAQCAtMzM2MCwxMyArMzM0NywxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJl
dFdpZHRoKEludFJlY3QmIHJlY3QpCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KDApOwogfQogCi1J
bnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorSW50
UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkg
Y29uc3QKIHsKLSAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAg
IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNU
UkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCksIERPV05TVFJFQU0pOwogCi0gICAgaWYg
KHJhbmdlLT5jb2xsYXBzZWQoKSkgeworICAgIGlmIChyYW5nZS5jb2xsYXBzZWQoKSkgewogICAg
ICAgICAvLyBGSVhNRTogR2V0dGluZyBjYXJldCByZWN0IGFuZCByZW1vdmluZyBjYXJldCB3aWR0
aCBpcyBhIHZlcnkgcm91bmRhYm91dCB3YXkgdG8gZ2V0IGNvbGxhcHNlZCByYW5nZSBsb2NhdGlv
bi4KICAgICAgICAgLy8gSW4gcGFydGljdWxhciwgd2lkdGggYWRqdXN0bWVudCBkb2Vzbid0IHdv
cmsgZm9yIHJvdGF0ZWQgdGV4dC4KICAgICAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IFJl
bmRlcmVkUG9zaXRpb24oc3RhcnRWaXNpYmxlUG9zaXRpb24pLmFic29sdXRlUmVjdCgpOwpAQCAt
MzM3NCwxMCArMzM2MSwxMCBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFu
Z2UqIHJhbmdlKSBjb25zdAogICAgICAgICByZXR1cm4gc3RhcnRDYXJldFJlY3Q7CiAgICAgfQog
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihyYW5nZS0+ZW5kUG9zaXRp
b24oKSwgVVBTVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCksIFVQU1RSRUFNKTsKIAogICAg
IGlmIChpblNhbWVMaW5lKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24p
KQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSkpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMocmFuZ2UpKSk7CiAKICAgICBMYXlvdXRVbml0IGV4dHJhV2lkdGhUb0VuZE9m
TGluZTsKICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVyZWRQb3NpdGlvbihzdGFy
dFZpc2libGVQb3NpdGlvbikuYWJzb2x1dGVSZWN0KCZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwpA
QCAtMzQwMyw3ICszMzkwLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKICAgICBpZiAobV9k
b2N1bWVudC5mcmFtZSgpICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2Fs
bGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgY3JlYXRl
TGl2ZVJhbmdlKG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgYWZmaW5p
dHksIHN0aWxsU2VsZWN0aW5nKTsKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCks
IG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdT
dHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0OTAsNyArMzQ3Nyw3
IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0
aW9ucyBvcHRpb25zKQogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0gICAgYXV0byByZXN1bHRSYW5nZSA9IHJh
bmdlT2ZTdHJpbmcodGFyZ2V0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KSkuZ2V0KCksIG9wdGlvbnMpOworICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5n
KHRhcmdldCwgc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSwgb3B0aW9ucyk7CiAgICAgaWYgKCFyZXN1
bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNTAyLDEwNiArMzQ4OSwxMDkg
QEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9y
OjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFu
Z2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYXV0
byYgc3RhcnQoVCYmIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykgPyByYW5nZS5lbmQgOiByYW5nZS5zdGFydDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGF1dG8mIGVuZChUJiYgcmFuZ2UsIEZpbmRP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRz
KSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOworfQorCitzdGF0aWMgQm91bmRhcnlQb2ludCBt
YWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSA/IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpIDogbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhub2RlKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKE5vZGUmIG5vZGUsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSA/IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZShub2RlKSA6IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlKG5vZGUpOworfQorCitzdGF0aWMgU2ltcGxlUmFuZ2UgY29sbGFwc2VJZlJvb3RzRGlmZmVy
KFNpbXBsZVJhbmdlJiYgcmFuZ2UpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaGVscHMgY29ycmVj
dCByZXN1bHRzIGluIHNvbWUgY2FzZXMgaW52b2x2aW5nIHNoYWRvdyB0cmVlcy4gQnV0IHdlIGNh
biBpbmNvcnJlY3RseSBmaW5kIGEgc3RyaW5nIHdpdGggbWlkZGxlIGNoYXJhY3RlcnMgaW4gYW4g
aW5wdXQgZWxlbWVudCBhbmQgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVycyBvdXRzaWRlIGl0Lgor
ICAgIHJldHVybiAmcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yb290Tm9kZSgpID09ICZyYW5nZS5l
bmQuY29udGFpbmVyLT5yb290Tm9kZSgpCisgICAgICAgID8gV1RGTW92ZShyYW5nZSkgOiBTaW1w
bGVSYW5nZSB7IHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCB9OworfQorCitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRp
b25zKQogewogICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFN0YXJ0IGZyb20gYW4g
ZWRnZSBvZiB0aGUgcmVmZXJlbmNlIHJhbmdlLCBpZiB0aGVyZSdzIGEgcmVmZXJlbmNlIHJhbmdl
IHRoYXQncyBub3QgaW4gc2hhZG93IGNvbnRlbnQuIFdoaWNoIGVkZ2UKICAgICAvLyBpcyB1c2Vk
IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBzZWFyY2hpbmcgZm9yd2FyZCBvciBiYWNrd2FyZCwg
YW5kIHdoZXRoZXIgc3RhcnRJblNlbGVjdGlvbiBpcyBzZXQuCi0gICAgUmVmUHRyPFJhbmdlPiBz
ZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSkpOwogCi0gICAgYm9vbCBmb3J3
YXJkID0gIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKTsKICAgICBib29sIHN0YXJ0SW5SZWZl
cmVuY2VSYW5nZSA9IHJlZmVyZW5jZVJhbmdlICYmIG9wdGlvbnMuY29udGFpbnMoU3RhcnRJblNl
bGVjdGlvbik7Ci0gICAgaWYgKHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChmb3J3YXJk
KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0SW5SZWZlcmVuY2VSYW5n
ZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkgOiByZWZlcmVuY2VSYW5nZS0+ZW5k
UG9zaXRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkg
OiByZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICB9CisgICAgYXV0byBzaGFk
b3dUcmVlUm9vdCA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSA6IG51bGxwdHI7CiAKLSAgICBSZWZQdHI8U2hh
ZG93Um9vdD4gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOwotICAg
IGlmIChzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291
bnRDaGlsZE5vZGVzKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKLSAgICB9CisgICAgYXV0byBzZWFyY2hSYW5n
ZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICBpZiAo
cmVmZXJlbmNlUmFuZ2UpCisgICAgICAgIHN0YXJ0KHNlYXJjaFJhbmdlLCBvcHRpb25zKSA9IHN0
YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHN0YXJ0KCpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucykgOiBl
bmQoKnJlZmVyZW5jZVJhbmdlLCBvcHRpb25zKTsKKyAgICBpZiAoc2hhZG93VHJlZVJvb3QpCisg
ICAgICAgIGVuZChzZWFyY2hSYW5nZSwgb3B0aW9ucykgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVy
Tm9kZUNvbnRlbnRzKCpzaGFkb3dUcmVlUm9vdCwgb3B0aW9ucyk7CisgICAgYXV0byByZXN1bHRS
YW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLCB0
YXJnZXQsIG9wdGlvbnMpKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBjcmVh
dGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykp
OwogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gdGhlIHJlZmVyZW5jZSByYW5nZSBhbmQgdGhlIGZv
dW5kIHJhbmdlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgcmVmZXJlbmNlIHJhbmdlLCBmaW5kIGFnYWlu
LgogICAgIC8vIEJ1aWxkIGEgc2VsZWN0aW9uIHdpdGggdGhlIGZvdW5kIHJhbmdlIHRvIHJlbW92
ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZS4KICAgICAvLyBDb21wYXJlIHJhbmdlcyBpbnN0ZWFkIG9m
IHNlbGVjdGlvbiBvYmplY3RzIHRvIGlnbm9yZSB0aGUgd2F5IHRoYXQgdGhlIGN1cnJlbnQgc2Vs
ZWN0aW9uIHdhcyBtYWRlLgotICAgIGlmIChzdGFydEluUmVmZXJlbmNlUmFuZ2UgJiYgYXJlUmFu
Z2VzRXF1YWwoY3JlYXRlTGl2ZVJhbmdlKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlKS50
b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgcmVmZXJlbmNlUmFuZ2UpKSB7Ci0gICAgICAgIHNl
YXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoZm9y
d2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChyZWZlcmVuY2VSYW5nZS0+
ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRFbmQocmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKHNo
YWRvd1RyZWVSb290KSB7Ci0gICAgICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNv
dW50Q2hpbGROb2RlcygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJh
bmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYm
IFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdlKCkgPT0gcmVm
ZXJlbmNlUmFuZ2UpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIHN0YXJ0KHNlYXJjaFJhbmdlLCBvcHRp
b25zKSA9IGVuZCgqcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMpOworICAgICAgICBpZiAoc2hhZG93
VHJlZVJvb3QpCisgICAgICAgICAgICBlbmQoc2VhcmNoUmFuZ2UsIG9wdGlvbnMpID0gbWFrZUJv
dW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJvb3QsIG9wdGlvbnMpOwor
ICAgICAgICByZXN1bHRSYW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0
KHNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAvLyBJZiBub3Ro
aW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQg
Zm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNl
ZCgpICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNv
bnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hv
c3QoKSkgewotICAgICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICAgICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUo
KnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVz
dWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRh
cmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBzaGFk
b3dUcmVlUm9vdCkgeworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gaG9zdCA9IHNoYWRvd1Ry
ZWVSb290LT5zaGFkb3dIb3N0KCkpCisgICAgICAgICAgICBzdGFydChzZWFyY2hSYW5nZSwgb3B0
aW9ucykgPSAqbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGUoKmhvc3QsIG9wdGlvbnMpOworICAg
ICAgICByZXN1bHRSYW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRu
J3QgZmluZCBhbnl0aGluZyBhbmQgd2UncmUgd3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUg
ZW50aXJlIGRvY3VtZW50ICh0aGlzIHdpbGwKICAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2gg
dGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hlZCBpbiBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0
UmFuZ2UtPmNvbGxhcHNlZCgpICYmIG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKLSAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dChyYW5nZU9m
Q29udGVudHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRS
YW5nZS5jb2xsYXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7CisgICAg
ICAgIHJlc3VsdFJhbmdlID0gY29sbGFwc2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQocmFu
Z2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICAgICAgLy8g
V2UgdXNlZCB0byByZXR1cm4gZmFsc2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1l
IHJhbmdlIHRoYXQgd2Ugc3RhcnRlZCB3aXRoCiAgICAgICAgIC8vIChlLmcuLCB0aGUgcmVmZXJl
bmNlIHJhbmdlIHdhcyBhbHJlYWR5IHRoZSBvbmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1
dCB3ZSBkZWNpZGVkIHRoYXQKICAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNh
c2UgaW5zdGVhZCwgc28gd2UnbGwganVzdCBmYWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgogICAg
IH0KIAotICAgIHJldHVybiByZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkgPyBudWxscHRyIDogcmVz
dWx0UmFuZ2U7CisgICAgcmV0dXJuIHJlc3VsdFJhbmdlLmNvbGxhcHNlZCgpID8gV1RGOjpudWxs
b3B0IDogbWFrZU9wdGlvbmFsKHJlc3VsdFJhbmdlKTsKIH0KIAotc3RhdGljIGJvb2wgaXNGcmFt
ZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMgYm9vbCBpc0ZyYW1l
SW5SYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBm
b3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGZyYW1lLm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1l
bnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQo
KSkgewotICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uub3du
ZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLmludGVyc2Vj
dHNOb2RlKCpvd25lckVsZW1lbnQpOworICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1l
bnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50
KTsKICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
IHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsaW1p
dCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFJlZlB0cjxSYW5nZT4+KiBtYXRjaGVzKQordW5z
aWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1
bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFNpbXBsZVJhbmdlPiogbWF0
Y2hlcykKIHsKICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBzZWFyY2hSYW5nZTsKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKCZyYW5nZS0+b3du
ZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UgPSBy
YW5nZTsKKyAgICAgICAgaWYgKCZyYW5nZS0+c3RhcnQuZG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlID0gKnJhbmdlOwogICAgICAgICBlbHNlIGlmICgh
aXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIXNlYXJjaFJhbmdlKQotICAgICAgICBzZWFyY2hS
YW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICAgICAgc2VhcmNoUmFuZ2Ug
PSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAKLSAgICBOb2Rl
JiBvcmlnaW5hbEVuZENvbnRhaW5lciA9IHNlYXJjaFJhbmdlLT5lbmRDb250YWluZXIoKTsKLSAg
ICBpbnQgb3JpZ2luYWxFbmRPZmZzZXQgPSBzZWFyY2hSYW5nZS0+ZW5kT2Zmc2V0KCk7CisgICAg
YXV0byBvcmlnaW5hbEVuZCA9IHNlYXJjaFJhbmdlLT5lbmQ7CiAKICAgICB1bnNpZ25lZCBtYXRj
aENvdW50ID0gMDsKICAgICBkbyB7CkBAIC0zNjEwLDggKzM2MDAsOCBAQCB1bnNpZ25lZCBFZGl0
b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5n
ZSwgRmluZE9wdAogICAgICAgICAgICAgaWYgKCFyZXN1bHRSYW5nZS5zdGFydC5jb250YWluZXIt
PmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpyZXN1bHRSYW5nZS5zdGFydC5jb250YWluZXIt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKG9yaWdpbmFs
RW5kQ29udGFpbmVyLCBvcmlnaW5hbEVuZE9mZnNldCk7CisgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpyZXN1bHRSYW5n
ZS5zdGFydC5jb250YWluZXItPnNoYWRvd0hvc3QoKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+ZW5kID0gb3JpZ2luYWxFbmQ7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
CkBAIC0zNjI2LDE1ICszNjE2LDE0IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgICAg
IGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIC8vIFNldCB0aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNoIHJhbmdlIHRv
IGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCi0gICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhl
cmUgaXMgbm8gbmVlZCB0byB1c2UgYSBWaXNpYmxlUG9zaXRpb24gaGVyZSwKLSAgICAgICAgLy8g
c2luY2UgZmluZFBsYWluVGV4dCB3aWxsIHVzZSBhIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRo
ZSB2aXNpYmxlCi0gICAgICAgIC8vIHRleHQgbm9kZXMuIAotICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoV1RGTW92ZShyZXN1bHRSYW5nZS5lbmQuY29udGFpbmVyKSwgcmVzdWx0UmFuZ2Uu
ZW5kLm9mZnNldCk7CisgICAgICAgIC8vIFNldCB0aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNo
IHJhbmdlIHRvIGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHJlc3VsdCByYW5nZS4KKyAgICAg
ICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgVmlzaWJsZVBvc2l0aW9uIGhlcmU6IGZpbmRQ
bGFpblRleHQgd2lsbCB1c2UgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdmlzaWJsZSB0ZXh0IG5v
ZGVzLgorICAgICAgICBzZWFyY2hSYW5nZS0+c3RhcnQgPSBXVEZNb3ZlKHJlc3VsdFJhbmdlLmVu
ZCk7CiAKLSAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+c2hhZG93
Um9vdCgpOwotICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1Ry
ZWVSb290KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqc2hhZG93VHJlZVJvb3Qs
IHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7CisgICAgICAgIGlmIChzZWFyY2hS
YW5nZS0+Y29sbGFwc2VkKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHNoYWRvd1RyZWVSb290
ID0gc2VhcmNoUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkK
KyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+ZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJvb3QpOworICAgICAgICB9CiAgICAgfSB3aGlsZSAo
dHJ1ZSk7CiAKICAgICByZXR1cm4gbWF0Y2hDb3VudDsKQEAgLTM5NDMsMjIgKzM5MzIsMjQgQEAg
U3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiAgICAgcmV0
dXJuIHBsYWluVGV4dCgqcmFuZ2UpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwotICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpKSk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKKyAgICBp
ZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9OwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFu
Z2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQp
IGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2lu
Z1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29uc3QKIHsKICAgICBp
ZiAoIXJlc3VsdC5yYW5nZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2UgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBjb250ZXh0UmFu
Z2UgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAgICAgaWYgKCFjb250ZXh0
UmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0LnJhbmdlKSk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0
ZXJSYW5nZSgqY29udGV4dFJhbmdlLCByZXN1bHQucmFuZ2UpOwogfQogCiB2b2lkIEVkaXRvcjo6
c2NoZWR1bGVFZGl0b3JVSVVwZGF0ZSgpCkBAIC00MjI4LDggKzQyMTksOCBAQCB2b2lkIEVkaXRv
cjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2Fu
ZGlkYXRlKQogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gdHJ1ZTsKIAogICAg
IGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoYWNjZXB0ZWRDYW5k
aWRhdGUpKSB7Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRl
LnJlcGxhY2VtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCi0g
ICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0ZShyYW5nZS5nZXQo
KSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQpLT5hcHBseSgpOwogICAgIH0gZWxzZQogICAgICAgICBpbnNlcnRUZXh0
KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCBudWxscHRyKTsKIApAQCAtNDI2MSwxNiAr
NDI1MiwxNiBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKQogICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3Zlcndy
aXRlTW9kZUVuYWJsZWQpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxl
Y3Rpb25SYW5nZSgpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVj
dGlvblJhbmdlKCkKIHsKLSAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRo
ZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPwotICAgIC8vIFdo
b2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkgZm9yZ290IHRvIGxlYXZlIHVzIGEgY29t
bWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21t
b25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7Ci0gICAg
YXV0byogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3Np
dGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIEhUTUxOYW1lczo6YVRhZyk7Ci0gICAgaWYgKGVu
Y2xvc2luZ0FuY2hvciAmJiBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHJhbmdlLT5zdGFydFBv
c2l0aW9uKCkpID49IDApCi0gICAgICAgIHJhbmdlLT5zZXRTdGFydCgqZW5jbG9zaW5nQW5jaG9y
LCAwKTsKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzZWxlY3Rp
b24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPyBXaG9ldmVyIHdyb3RlIHRoaXMg
Y29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0
aGUgcmF0aW9uYWxlLgorICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgaWYg
KHJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Io
cmFuZ2UtPnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UtPmVuZC5jb250YWluZXIpLmdldCgpKSwgSFRN
TE5hbWVzOjphVGFnKSkgeworICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkgPj0gMCkKKyAgICAgICAgICAg
ICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygq
ZW5jbG9zaW5nQW5jaG9yKTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gcmFuZ2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IDY5ZDYwNTkzMDI2NTJmNjcyZmQyNTkxNTJk
M2RjZmI0NWZmMDkyNmYuLjlkZWRkY2EzODM2ZjE1MzAzNmNmYWY5YzgwZGFkMzk5NDRmNDQ5ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTMsMTAg
KzIxMywxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvdXRkZW50KCk7CiAg
ICAgdm9pZCB0cmFuc3Bvc2UoKTsKIAotICAgIGJvb2wgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9j
dW1lbnRGcmFnbWVudCYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKTsKLSAgICBib29sIHNo
b3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24p
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2Uq
KSBjb25zdDsKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFu
Z2UqKTsKKyAgICBib29sIHNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pOworICAgIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgY29uc3Q7
CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0
IFNpbXBsZVJhbmdlJik7CiAKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pOwogCkBAIC0zMjIsMTYgKzMyMiwx
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9k
ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKikgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwotICAgIHZv
aWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVmUHRyPFJhbmdl
PiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKICAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKICAgICB2b2lkIG1hcmtBbmRSZXBs
YWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiwgY29uc3QgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VSYW5nZUZvclNwZWxs
Q2hlY2tpbmcoUmFuZ2UmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBT
dHJpbmcmKTsKIAogICAgIGJvb2wgaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRv
Z2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCk7CiAKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBSZWZQ
dHI8UmFuZ2U+JiYgc3BlbGxpbmdSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBncmFtbWFyUmFuZ2UpOworICAgIHZvaWQgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4sIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSk7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVAogI2VuZGlmCkBAIC0zNDMsOCAr
MzQzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1NwZWxsaW5nR3Vlc3NQYW5lbCgpOwogICAg
IGJvb2wgc3BlbGxpbmdQYW5lbElzU2hvd2luZygpOwogCi0gICAgYm9vbCBzaG91bGRCZWdpbkVk
aXRpbmcoUmFuZ2UqKTsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqKTsKKyAgICBi
b29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpOworICAgIGJvb2wgc2hv
dWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgdm9pZCBjbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpOwogICAgIGJvb2wgY2FuVW5kbygpIGNvbnN0OwpAQCAtMzU2LDcgKzM1
Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCk7CiAgICAgdm9pZCBk
aWRFbmRFZGl0aW5nKCk7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
UmFuZ2UqKTsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKCk7CiAKICAgICB2b2lkIHNob3dGb250UGFuZWwoKTsKQEAgLTM4MCw3ICszODAsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJik7IC8vIGlmIG5vIGV4aXN0aW5nIGNvbXBvc2l0aW9uLCByZXBsYWNlcyBzZWxl
Y3Rpb24KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKCk7CiAgICAg
Ym9vbCBjYW5jZWxDb21wb3NpdGlvbklmU2VsZWN0aW9uSXNJbnZhbGlkKCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBjb21wb3NpdGlvblJhbmdlKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2ln
bmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGlvbkVuZCkgY29uc3Q7CiAKICAg
ICAvLyBnZXR0aW5nIGludGVybmF0aW9uYWwgdGV4dCBpbnB1dCBjb21wb3NpdGlvbiBzdGF0ZSAo
Zm9yIHVzZSBieSBJbmxpbmVUZXh0Qm94KQpAQCAtNDAwLDcgKzQwMCw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCwgUmV2
ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID0gUmV2ZWFsU2VsZWN0
aW9uOjpZZXMpOwogICAgIGJvb2wgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIGNvbnN0IHsgcmV0
dXJuIG1faWdub3JlU2VsZWN0aW9uQ2hhbmdlczsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPFJhbmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAtNDEx
LDcgKzQxMSw3IEBAIHB1YmxpYzoKIAogICAgIEVkaXRpbmdCZWhhdmlvciBiZWhhdmlvcigpIGNv
bnN0OwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlKCk7CisgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHNlbGVjdGVkUmFuZ2UoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtTWFya2VkVGV4dCgpOwpAQCAtNDQ2LDcg
KzQ0Niw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVy
KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYsIEZpbmRPcHRpb25zKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFu
Z2VPZlN0cmluZyhjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRpb25zKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBGaW5kT3B0aW9ucyk7CiAKICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQg
YXMgZW1hY3MgdXNlcyBpdC4KICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpOwpAQCAtNDU1LDEzICs0NTUsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYgLCBFZGl0QWN0aW9u
ID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBJbnRSZWN0IGZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKikgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0
OwogCiAgICAgdm9pZCBzZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CiAgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgT3B0
aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+KTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKICAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24s
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjb3VudE1h
dGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMsIHVuc2lnbmVk
IGxpbWl0LCBib29sIG1hcmtNYXRjaGVzLCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4qKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBsaW1p
dCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFNpbXBsZVJhbmdlPiopOwogICAgIGJvb2wgbWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sKTsKIApAQCAtNTQ1
LDggKzU0NSw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdG
b3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5k
bGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdDsKKyAgICBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CiAgICAgYm9vbCBpc0hhbmRsaW5nQWNjZXB0ZWRDYW5k
aWRhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZTsgfQog
CiAgICAgdm9pZCBzZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGJvb2wgYikgeyBtX2lz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8gPSBiOyB9CkBAIC01NzksNyArNTc5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAKLSAgICBib29sIGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7Cisg
ICAgYm9vbCBjYW5EZWxldGVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0OwogICAgIGJv
b2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYpOwogICAgIHZvaWQg
cGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmKTsKICAgICB2b2lkIHBh
c3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCosIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4pOwpA
QCAtNTg4LDcgKzU4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBxdW90ZUZyYWdtZW50Rm9yUGFz
dGluZyhEb2N1bWVudEZyYWdtZW50Jik7CiAKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVy
RWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmID0gU2Nyb2xsQWxpZ25tZW50
OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZlYWxFeHRlbnRPcHRpb24gPSBEb05vdFJldmVhbEV4
dGVudCk7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0
YWJsZUVsZW1lbnQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yKSBjb25zdDsK
QEAgLTYwOCw3ICs2MDgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkgY29uc3Q7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9u
UmFuZ2UoKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gYWRqdXN0ZWRTZWxlY3Rpb25SYW5n
ZSgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2Vs
ZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAppbmRleCBkNmVhNDI2ZDdmN2ZlNzY1ZmIwMDk3ZTNkOTVhZWM3NTlkYTQyN2Vm
Li40NDBmY2Y2ZmE1ZmZmMWZkYjgyZTZkNTQ1MjI5MTBlNjVjNmE5MTNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTE3NiwxNSArMTc2LDE1IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVJbnNlcnROb2RlKEZyYW1lJiBmcmFtZSwgUmVmPE5vZGU+JiYgY29udGVu
dCkKIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1l
LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIG9sZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwogICAgIGF1dG8gbmV3UmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIW5ld1JhbmdlIHx8IG5ld1Jhbmdl
LT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gb2xkUmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIGFmZmluaXR5ID0gc2Vs
ZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkUmFuZ2UpLmdldCgpLCBj
cmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgZmFsc2UpKQorICAgIGlm
ICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm9s
ZFJhbmdlLCAqbmV3UmFuZ2UsIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5n
ZShuZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UoKm5ld1JhbmdlKS5wdHIoKSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjI2LDEx
ICsyMjYsMTEgQEAgc3RhdGljIHVuc2lnbmVkIHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUm
IGZyYW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdl
U3RlcChoZWlnaHQpKTsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gdW5pb25ET01SYW5nZXMo
UmFuZ2UmIGEsIFJhbmdlJiBiKQorc3RhdGljIFNpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0
IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKIHsKLSAgICBSYW5nZSYgc3Rh
cnQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGIpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyBhIDogYjsKLSAgICBSYW5nZSYgZW5kID0gYS5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGIpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDAgPyBiIDogYTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShhLm93bmVyRG9jdW1l
bnQoKSwgJnN0YXJ0LnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LnN0YXJ0T2Zmc2V0KCksICZlbmQu
ZW5kQ29udGFpbmVyKCksIGVuZC5lbmRPZmZzZXQoKSk7CisgICAgYXV0byYgc3RhcnQgPSBjcmVh
dGVMaXZlUmFuZ2UoYSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGEgOiBi
OworICAgIGF1dG8mIGVuZCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpIDw9IDAgPyBiIDogYTsKKyAgICByZXR1cm4geyBzdGFydC5zdGFydCwgZW5kLmVuZCB9
OwogfQogCiAvLyBFeGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25zCkBAIC0zNTQsNyArMzU0LDcgQEAg
c3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5t
YXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKTsKICAgICBpZiAobWFyayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCkpIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdl
KHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpmcmFtZS5lZGl0b3IoKS5z
ZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwog
ICAgICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA1
Niw3ICsxMDU2LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICAgICAgUEFMOjpzeXN0
ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFuZ2UoKm1h
cmspLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKSkucHRyKCks
IERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAppbmRleCAxNDc1ZmU1M2ExYzM3Yjg3MzdiOGFhNTA1MDRmMTc0OGJhODc2MDgwLi41MmE2
N2E4ZjYxZWE2MzFjMTg0NThlOGQ5ZTljNzFiMTBmMDk4NDNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMjMxMSw3ICsyMzExLDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbikgY28KICAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2RvY3VtZW50
LT5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGll
bnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiB9CiAKIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zp
c2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggYzVjYmMzZjk3Y2Q4YTk5MmMwYWVl
N2EzMWE4OWVmZDg3Y2ZhM2Q3OC4uZWVmZThmZDk1MWNjZmE0ZWI2NjE4MjdkNThlNjllYTU5YjU4
NmI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBA
IC04OCwxNCArODgsMTMgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uSW5IVE1MRm9ybWF0KCkK
IAogdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHJpbmc+JiBvdXRUeXBlcywgVmVjdG9yPFJlZlB0cjxT
aGFyZWRCdWZmZXI+PiYgb3V0RGF0YSkKIHsKLSAgICBhdXRvJiBkb2N1bWVudCA9IGVsZW1lbnQu
ZG9jdW1lbnQoKTsKLSAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQsIHsgJmVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIH0sIHsgJmVs
ZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IgfSk7Ci0gICAgY2xpZW50KCkt
PmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoZWxlbWVudFJhbmdlLnB0cigpLCBvdXRU
eXBlcywgb3V0RGF0YSk7CisgICAgYXV0byBlbGVtZW50UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlKGVsZW1lbnQpOworICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShl
bGVtZW50UmFuZ2UsIG91dFR5cGVzLCBvdXREYXRhKTsKIAogICAgIG91dFR5cGVzLmFwcGVuZChQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpOwotICAgIG91dERhdGEuYXBwZW5kKFBh
c3RlYm9hcmRDdXN0b21EYXRhIHsgZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKSwgeyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOworICAgIG91dERhdGEuYXBwZW5kKFBh
c3RlYm9hcmRDdXN0b21EYXRhIHsgZWxlbWVudC5kb2N1bWVudCgpLm9yaWdpbklkZW50aWZpZXJG
b3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAotICAgIGlmIChh
dXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoZWxlbWVudFJhbmdlLnB0cigp
KSkgeworICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY3Jl
YXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSkuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChhdXRvIHdl
YkFyY2hpdmVEYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkpIHsKICAgICAg
ICAgICAgIG91dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CiAgICAgICAgICAg
ICBvdXREYXRhLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZSh3ZWJBcmNoaXZlRGF0YS5nZXQo
KSkpOwpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAgICAgICBjb250ZW50LmRhdGFJblJU
RkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1h
dChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKICAgICAgICAgY29udGVudC5kYXRhSW5SVEZGb3Jt
YXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKICAgICAgICAgY29udGVudC5kYXRh
SW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmlu
ZyhzdHJpbmcuZ2V0KCkpOwotICAgICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERh
dGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNv
bnRlbnQuY2xpZW50RGF0YSk7CisgICAgICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJk
RGF0YShzZWxlY3RlZFJhbmdlKCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNvbnRlbnQuY2xpZW50
RGF0YSk7CiAgICAgfQogICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbklu
SFRNTEZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKQEAgLTE0NCw3ICsxNDMsNyBA
QCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3Rl
Ym9hcmRXcml0ZXJEYXRhKQogICAgIHdlYkNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zv
cm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKICAg
ICB3ZWJDb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsK
ICAgICB3ZWJDb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7Ci0gICAgY2xpZW50KCktPmdldENsaWVudFBhc3Rl
Ym9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCB3ZWJDb250ZW50LmNsaWVu
dFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOworICAgIGNsaWVudCgpLT5nZXRDbGllbnRQ
YXN0ZWJvYXJkRGF0YShzZWxlY3RlZFJhbmdlKCksIHdlYkNvbnRlbnQuY2xpZW50VHlwZXMsIHdl
YkNvbnRlbnQuY2xpZW50RGF0YSk7CiAKICAgICBwYXN0ZWJvYXJkV3JpdGVyRGF0YS5zZXRXZWJD
b250ZW50KFdURk1vdmUod2ViQ29udGVudCkpOwogfQpAQCAtMTg0LDEyICsxODMsMTIgQEAgdm9p
ZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWQKIAogICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgaWYgKGF1dG8g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcygqbV9kb2N1bWVudC5mcmFt
ZSgpLCBhdHRyaWJ1dGVkU3RyaW5nKSkgewotICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCisgICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdt
ZW50LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFs
c2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gYXR0cmlidXRlZFN0cmluZy5zdHJpbmc7Ci0gICAg
ICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0
ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2UpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCmluZGV4IDk5YWExMTkyMmMzMjgxNGJjMGE2
ZjVlMGNhYmQ5ZjYzYjM4ZTg3MWMuLmRhN2U5NDFjYjhmMWZiZTIzYjAwMmUyNWRlMDBkOTY4NTlh
ZmNlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApAQCAtNTAs
MTcgKzUwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9u
PiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVi
b2FyZCwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4
dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBhdXRvIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21Q
YXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRp
b246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50
ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAg
cXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAm
JiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAg
ICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2tx
dW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6
UmVzcGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0KaW5kZXggMzEyMzI1ZjI3NjIxY2JiODg0OTJhMDQyNmVlNTkxNjU2N2U0YTE2MC4uNmMy
NTQ3OTY1NTM2MDg0YjE2Mzg4MDQ5ZDQ1YTU5OWNmOTYwNjcyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMjA2LDMwICsyMDYsMjYgQEAgdm9pZCBFZGl0b3I6
OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRWxlbWVudCYg
aW1hZ2VFbGVtZW4KICAgICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZSA9IHBhc3Rl
Ym9hcmQucmVzb3VyY2VNSU1FVHlwZShjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgp
KTsKICAgICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VEYXRhID0gY2FjaGVkSW1hZ2UtPnJlc291
cmNlQnVmZmVyKCk7CiAKLSAgICBpZiAoIXBhc3RlYm9hcmQuaXNTdGF0aWMoKSkgewotICAgICAg
ICBQb3NpdGlvbiBiZWZvcmVJbWFnZVBvc2l0aW9uKCZpbWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQmVmb3JlQW5jaG9yKTsKLSAgICAgICAgUG9zaXRpb24gYWZ0ZXJJbWFnZVBvc2l0
aW9uKCZpbWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwotICAg
ICAgICBhdXRvIGltYWdlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGltYWdlRWxlbWVudC5kb2N1bWVu
dCgpLCBiZWZvcmVJbWFnZVBvc2l0aW9uLCBhZnRlckltYWdlUG9zaXRpb24pOwotICAgICAgICBj
bGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShpbWFnZVJhbmdlLnB0cigp
LCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50VHlwZXMsIHBhc3RlYm9hcmRJbWFnZS5jbGllbnREYXRh
KTsKLSAgICB9CisgICAgaWYgKCFwYXN0ZWJvYXJkLmlzU3RhdGljKCkpCisgICAgICAgIGNsaWVu
dCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGltYWdl
RWxlbWVudCksIHBhc3RlYm9hcmRJbWFnZS5jbGllbnRUeXBlcywgcGFzdGVib2FyZEltYWdlLmNs
aWVudERhdGEpOwogCiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwogfQog
CiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJk
LCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwogICAgIGJvb2wgYWxsb3dQbGFpblRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCk7CiAgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFz
dGVib2FyZEl0ZW1zID0gY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7Ci0gICAg
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVu
dEZyYWdtZW50RnJvbURlbGVnYXRlKGkpOworICAgICAgICBhdXRvIGZyYWdtZW50ID0gY2xpZW50
KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaSk7CiAgICAgICAgIGlmICghZnJhZ21l
bnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVhZGVyLmFkZEZyYWdtZW50KGZy
YWdtZW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IHJlYWRlci5mcmFnbWVudDsKKyAgICBhdXRvIGZyYWdtZW50ID0g
V1RGTW92ZShyZWFkZXIuZnJhZ21lbnQpOwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAg
Ym9vbCBjaG9zZVBsYWluVGV4dElnbm9yZWQ7CiAgICAgICAgIGZyYWdtZW50ID0gd2ViQ29udGVu
dEZyb21QYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9z
ZVBsYWluVGV4dElnbm9yZWQpOwpAQCAtMjM4LDcgKzIzNCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9w
dGlvbj4KICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6
QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQp
OwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwg
cmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21l
bnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFz
ZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBm
YWxzZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUp
ID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1
b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggMTJmZDZhNDNlYTA1YTJhMGU3
MmI3NGJhNzJkOTYyODY0NzA1YmFlMy4uMGI3YzI2MjUzYTAwODJlM2M1NGFlZWZlYTA2MTYzMjRl
NjI0OGM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9y
TGliV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJX
UEUuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0
YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9v
bCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitzdGF0aWMgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9h
cmQmIHBhc3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBi
b29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKICAgICBjaG9zZVBs
YWluVGV4dCA9IGZhbHNlOwogCkBAIC00Nyw4ICs0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYg
cGFzCiAKICAgICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04Iikg
JiYgZnJhbWUuZG9jdW1lbnQoKSkgewogICAgICAgICBTdHJpbmcgbWFya3VwID0gcGFzdGVib2Fy
ZC5yZWFkU3RyaW5nKCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIpOwotICAgICAgICBpZiAoUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0
aW5nQW5kUGx1Z2luQ29udGVudCkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAg
ICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCksIG1h
cmt1cCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsK
ICAgICB9CiAKICAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQpAQCAtNTYsOCArNTUsNyBAQCBzdGF0
aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmRE
YXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L3BsYWlu
O2NoYXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAg
ICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxhaW47Y2hhcnNl
dD11dGYtOCIpKSkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFz
dGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03OSwxNyArNzcsMTcgQEAgdm9pZCBFZGl0b3I6Ondy
aXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYsIEVsZW1lbnQmLCBjb25zdCBVUkwmLCBj
b25zdCBTdHIKIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBib29s
IGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVu
dC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxh
aW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
KnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNo
b3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBh
c3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5n
KCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQo
KmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAg
IGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsICpyYW5nZSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoKmZy
YWdtZW50LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3Nl
UGxhaW5UZXh0LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2tx
dW90ZSkgPyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJs
b2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMWNkOGMzOTRhNzY5MWM1NWY0ZDhkZDM2ZGU4
NTk2ZTcwNzc3YjdiNS4uYmEzMWMxODc3MzIzNGI5YWQ5MzlhZDBkMzMxOTMxOGM2MmQ4YjNiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtODAsNyArODAsNyBA
QCB2b2lkIEVkaXRvcjo6c2hvd0NvbG9yUGFuZWwoKQogCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRo
UGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+
IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsK
KyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogCiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICAvLyBGSVhNRTogSG93IGNhbiB0aGlzIGhhcmQtY29k
ZWQgcGFzdGVib2FyZCBuYW1lIGJlIHJpZ2h0LCBnaXZlbiB0aGF0IHRoZSBwYXNzZWQtaW4gcGFz
dGVib2FyZCBoYXMgYSBuYW1lPwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRp
b24+CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFz
UXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsK
IAotICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50
ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VO
b25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFs
c2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/
IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSApOwogCiAgICAgY2xpZW50KCktPnNldEluc2Vy
dGlvblBhc3RlYm9hcmQoU3RyaW5nKCkpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgRWRpdG9y
OjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJvYXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKICAgICBpZiAoYXV0byBmcmFn
bWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkLCByYW5nZSwgdHJ1ZSwg
Y2hvc2VQbGFpblRleHQpKSB7CiAgICAgICAgIG1heWJlQ29weU5vZGVBdHRyaWJ1dGVzVG9GcmFn
bWVudCgqbm9kZSwgKmZyYWdtZW50KTsKLSAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50
KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpQYXN0ZWQpKQorICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVB
c0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQ
YXN0ZWJvYXJkKHBhc3RlYm9hcmQpLCBmYWxzZSwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdu
b3JlQmxvY2txdW90ZSk7CiAgICAgfQogCkBAIC0xNzYsMTEgKzE3Niw5IEBAIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IEVkaXRvcjo6aW1hZ2VJbldlYkFyY2hpdmVGb3JtYXQoRWxlbWVudCYgaW1hZ2VF
bGVtZW50KQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQ
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCiB7Ci0gICAgLy8gRklYTUU6
IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlvbiBpcyBhd2t3YXJkLiBXZSdkIHByb2JhYmx5
IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBhcmF0ZSBmdW5jdGlvbnMuCi0gICAgLy8gQXMg
b2YgdGhpcyB3cml0aW5nLCB0aGlzIGlzIG9ubHkgdXNlZCBpbiBXZWJLaXQyIHRvIGltcGxlbWVu
dCB0aGUgbWV0aG9kIC1bV0tWaWV3IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOnR5cGVzOl0s
Ci0gICAgLy8gd2hpY2ggaXMgb25seSB1c2VkIHRvIHN1cHBvcnQgT1MgWCBzZXJ2aWNlcy4KKyAg
ICAvLyBGSVhNRTogVGhlIGludGVyZmFjZSB0byB0aGlzIGZ1bmN0aW9uIGlzIGF3a3dhcmQuIFdl
J2QgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiB3aXRoIHRocmVlIHNlcGFyYXRlIGZ1bmN0aW9ucy4g
QXMgb2YgdGhpcyB3cml0aW5nLCB0aGlzIGlzIG9ubHkgdXNlZCBpbiBXZWJLaXQyIHRvIGltcGxl
bWVudCB0aGUgbWV0aG9kIC1bV0tWaWV3IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOnR5cGVz
Ol0sIHdoaWNoIGlzIG9ubHkgdXNlZCB0byBzdXBwb3J0IE9TIFggc2VydmljZXMuCiAKLSAgICAv
LyBGSVhNRTogRG9lcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBuZWVkIHRvIHVzZSBhZGp1c3RlZFNl
bGVjdGlvblJhbmdlKCk/IEJlY2F1c2Ugd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBqdXN0
IHVzZXMgc2VsZWN0ZWRSYW5nZSgpLgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgZnVuY3Rpb24g
cmVhbGx5IG5lZWQgdG8gdXNlIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKT8gQmVjYXVzZSB3cml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGp1c3QgdXNlcyBzZWxlY3RlZFJhbmdlKCkuIFRoaXMg
aXMgdGhlIG9ubHkgZnVuY3Rpb24gaW4gV2ViS2l0IHRoYXQgdXNlcyBhZGp1c3RlZFNlbGVjdGlv
blJhbmdlLgogICAgIGlmICghY2FuQ29weSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggYzc5NmJmYWFmNjZl
ZTk0YTg1YzU1ZjM5MjM0OTE1NWQyNzRhODYwYy4uOTNkZGVhZjg4ODliOGU3ZmNjMjY5MzQxMjQw
ODU4Mjg0NDc2YzhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRp
dG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3Bw
CkBAIC0zNywxNyArMzcsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFz
dGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVk
UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFn
bWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIGF1dG8gZnJhZ21l
bnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksIGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxv
d1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRp
b25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJh
Z21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxk
SW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJh
Z21lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0
ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0
aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCwgb3B0aW9ucy5jb250YWlu
cyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5k
bGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RC
bG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJl
Y3RvcnlEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3Vt
ZW50LmNwcAppbmRleCBkY2YzYmY0NDg2NWIwNGNjODI3ZjcxMzNlZGQ4ZTE5MWZhYmFiZDViLi4y
NWYxN2EzM2ZkMjBhNDFjNzFiYWZiOTViMzNmNGE0MDAyNzQwOGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIFJl
ZjxFbGVtZW50PiBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6Y3JlYXRlVERGb3JGaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGZpbGVuCiAgICAgYXV0byB0ZEVsZW1lbnQgPSBIVE1MVGFibGVDZWxs
RWxlbWVudDo6Y3JlYXRlKHRkVGFnLCBkb2N1bWVudCk7CiAgICAgdGRFbGVtZW50LT5hcHBlbmRD
aGlsZChhbmNob3JFbGVtZW50KTsKIAotICAgIHJldHVybiBXVEZNb3ZlKHRkRWxlbWVudCk7Cisg
ICAgcmV0dXJuIHRkRWxlbWVudDsKIH0KIAogc3RhdGljIFN0cmluZyBwcm9jZXNzRmlsZXNpemVT
dHJpbmcoY29uc3QgU3RyaW5nJiBzaXplLCBib29sIGlzRGlyZWN0b3J5KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmNwcAppbmRleCA5NGZiMzBmNTExYjNiMzc5NTIyYWE2OWQyY2Zm
ZmRhZTkwMDU3MDI2Li4wYzE0YWU2OTBjZDNmNDZhNjNiYWU2MTYwODU0ZjFhMDNiODExYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBA
IHB1YmxpYzoKICAgICBFbXB0eUVkaXRvckNsaWVudCgpID0gZGVmYXVsdDsKIAogcHJpdmF0ZToK
LSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBi
b29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KQEAgLTIwMCwxNSArMjAwLDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b2dnbGVHcmFt
bWFyQ2hlY2tpbmcoKSBmaW5hbCB7IH0KICAgICBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KSBmaW5hbCB7IHJldHVybiAtMTsgfQogCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFu
Z2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhS
YW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2Rl
KE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0
b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2lt
cGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkRW5kRWRp
dGluZyhjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBzaG91bGRJbnNlcnROb2RlKE5vZGUmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBF
ZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91
bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYs
IEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRUFmZmluaXR5LCBib29sKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyos
IFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEFwcGx5U3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jikg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbCB7
IH0KLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxl
dGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgZmluYWwgeyB9CkBAIC0yMTksOSArMjE5LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWwgeyB9CiAg
ICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkaWRFbmRVc2VyVHJp
Z2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpIGZpbmFsIHsgfQotICAgIHZvaWQgd2lsbFdyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKikgZmluYWwgeyB9CisgICAgdm9pZCB3aWxsV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgZmluYWwg
eyB9CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsIHsgfQot
ICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxT
dHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jiwg
VmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JikgZmluYWwgeyB9
CiAgICAgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikgZmluYWwgeyB9CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhT
b2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3VsdCkgZmluYWwgeyB9CiAKQEAgLTI2MSw3ICsyNjEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU3RyaW5nRm9yRmluZChjb25zdCBTdHJpbmcm
KSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1l
bnRGcmFnbWVudCYsIFJhbmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFu
Z2UmLCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRl
eCA0MWY3YTdlYzdhNDE5MTc3OTFiMjg1YjE5NDM5ZDJjMWJlOWRhZWZkLi5jN2VmY2ZjOTNiZDQ3
NzEyNzBlYTBiMDY5ZGNiOTI0N2M5MWEyYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIHZvaWQg
b3Blbk5ld1dpbmRvdyhjb25zdCBVUkwmIHVybFRvTG9hZCwgRnJhbWUmIGZyYW1lLCBTaG91bGRP
cGVuRXh0ZXJuYWwKIHN0YXRpYyB2b2lkIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoVUNoYXIgY2hh
cmFjdGVyLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAgU3RyaW5nIHRleHQoJmNoYXJhY3RlciwgMSk7
Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxp
dmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFmcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7CkBAIC0zNzQsNyArMzc0
LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzczogewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxl
LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKSB7CiAgICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNv
bW1hbmRPcHRpb24+IHJlcGxhY2VPcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1h
dGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogCiAg
ICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVs
bGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCmluZGV4IDczMTdiZmRmNDZkOTJhYzNkOTY1MGZjMzM0NjRmNTBmNmVl
YTU5MjcuLjgxMGQyZmM3MmEzMjVjZTRkNDIwYTNjY2EzNmQ5MmIzMDBjYTU4MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01NjgsNyArNTY4LDcgQEAgYm9vbCBE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Q29sb3IsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKSwgZmFsc2UpOwotICAg
ICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUucHRy
KCksIGNyZWF0ZUxpdmVSYW5nZShpbm5lclJhbmdlKS5nZXQoKSkpCisgICAgICAgIGlmICghaW5u
ZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgKmlubmVyUmFuZ2UpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURy
YWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRh
KTsKICAgICAgICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZS5wdHIoKSwg
RWRpdEFjdGlvbjo6U2V0Q29sb3IpOwpAQCAtNjAzLDcgKzYwMyw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlm
IChpc01vdmUgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAg
ICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRh
LCAqaW5uZXJGcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRydWUsIGNob3NlUGxhaW5U
ZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3Vs
ZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6RHJv
cHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50KCkud2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0
LCBkcmFnRGF0YSk7CkBAIC02MjksNyArNjI5LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29u
Y2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7Ci0g
ICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4
dCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJv
cHBlZCkpCisgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2Vy
dFRleHQodGV4dCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpA
QCAtMTAyMiw3ICsxMDIyLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1l
JiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIE9wdGlvblNldDxEcmEKICAgICAgICAgICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rpb25SYW5nZSk7CiAKLSAg
ICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpOworICAgICAgICAgICAgc3JjLmVk
aXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgqc2VsZWN0aW9uUmFuZ2UpOwog
CiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChtdXN0VXNlTGVn
YWN5RHJhZ0NsaWVudCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8
RHJhCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICBpZiAoIXByb21pc2VkQXR0YWNo
bWVudCAmJiBlZGl0b3IuY2xpZW50KCkpIHsKICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Us
IGlmIG5vIGZpbGUgVVJMIGlzIHNwZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhlIGluamVjdGVkIGJ1
bmRsZSB0byBwb3B1bGF0ZSB0aGUgcGFzdGVib2FyZCB3aXRoIGRhdGEuCi0gICAgICAgICAgICAg
ICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2Uo
c3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNy
Yy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAg
ICAgICAgICBlZGl0b3Iud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5zZmVyLnBh
c3RlYm9hcmQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApp
bmRleCA3NzkzMTcxZmUwYWRiMTE3ZGFmZjQxNjBkYWZmNjkxY2E0NDYwYzMxLi45ZGU3MDY1NGYy
MGI1ODIzZjc2NTYwMGUxNDE2YjlkOGMzYTkxZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xp
ZW50LmgKQEAgLTQzLDcgKzQzLDYgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xh
c3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIFN0eWxlUHJvcGVydGllczsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50
OwpAQCAtNTEsMTIgKzUwLDEzIEBAIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKIHN0cnVjdCBH
YXBSZWN0czsKIHN0cnVjdCBHcmFtbWFyRGV0YWlsOworc3RydWN0IFNpbXBsZVJhbmdlOwogCiBj
bGFzcyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRvckNsaWVudCgp
ID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSop
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSA9IDA7IAogICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkgPSAwOwpAQCAtNjUsMTcgKzY1LDE3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgPSAwOwogICAgIHZpcnR1YWwgaW50
IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEJlZ2luRWRpdGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRp
dGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2Rl
KiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBm
cm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJh
bmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUmLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlT
dHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEFwcGx5U3R5bGUoKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2Uq
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0
IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKSA9IDA7CiAKICNpZiBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckF0dGFjaG1lbnRJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgLyogaWRlbnRpZmllciAqLywgY29uc3QgU3RyaW5nJiAvKiBj
b250ZW50VHlwZSAqLywgY29uc3QgU3RyaW5nJiAvKiBwcmVmZXJyZWRGaWxlTmFtZSAqLywgUmVm
PFNoYXJlZEJ1ZmZlcj4mJikgeyB9CkBAIC05NSw5ICs5NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hh
bmdlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMs
IFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8
U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJl
cXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyhU
ZXh0Q2hlY2tpbmdSZXN1bHQpIHsgfQogCkBAIC0xODcsNyArMTg3LDcgQEAgcHVibGljOgogICAg
IC8vIHNlbGVjdGlvbiBhcyBhIHR5cGUgb2YgY2xpcGJvYXJkLgogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSYgZGVzdGlu
YXRpb24sIGJvb2wgaXNNb3ZlKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVw
RHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBi
b29sIGlzTW92ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNhblNob3dGb250UGFuZWwoKSBj
b25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2ZjFmMWI0
YWQ4MGIyMWY5OTVjMWZlZThkNzJhYWRjOTYyNzE1YjJiLi41ZWRhODMwZWNmNDY1ZDBkZDBiMjQ3
ZmFlMDAyMGM1ZTI1MmViOGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0zMDgyLDggKzMwODIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZl
bnRGb3JLZXkoKQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAg
ICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKSkgewotICAgICAgICBhdXRvIHNlbGVjdGlv
blJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3Qg
Zmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpLmdldCgpKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3Qg
PSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3Qu
bWF4WCgpIDogZmlyc3RSZWN0LngoKTsKICAgICAgICAgLy8gSW4gYSBtdWx0aWxpbmUgZWRpdCwg
Zmlyc3RSZWN0Lm1heFkoKSB3b3VsZCBlbmR1cCBvbiB0aGUgbmV4dCBsaW5lLCBzbyAtMS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCAzZjM3MjMyYzdlOTViYTIw
MDUzOTExMDQ5YWU4MDQwMjRmNjE2Nzg5Li43ZTIxMmVhZjRiOTUyYTg2ZGI0ZmQxMDgwNzZkMjA1
OTZkMTY1MjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC03
NTIsMTcgKzc1MiwxNiBAQCBFbGVtZW50KiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNh
YmxlRWxlbWVudE9yU2NvcGVPd25lcihjb25zdCBGb2N1c05hdmlnYQogICAgIHJldHVybiBwcmV2
aW91c0VsZW1lbnRXaXRoTG93ZXJUYWJJbmRleChzY29wZSwgbGFzdCwgc3RhcnRpbmdUYWJJbmRl
eCwgZXZlbnQpOwogfQogCi1zdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9k
ZSAqbm9kZSkKK3N0YXRpYyBib29sIHJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cyhFbGVtZW50JiBl
bGVtZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aGFzRWRpdGFi
bGVTdHlsZSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5oYXNFZGl0YWJsZVN0eWxlKCkpOwogCi0g
ICAgTm9kZSogcm9vdCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byByb290ID0gZWxlbWVu
dC5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBmcmFtZSA9IGVsZW1lbnQuZG9jdW1l
bnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIXJvb3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkRW5kRWRpdGluZyhyYW5n
ZU9mQ29udGVudHMoKnJvb3QpLnB0cigpKTsKKyAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNo
b3VsZEVuZEVkaXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUqIG9sZEZvY3VzZWRG
cmFtZSwgRnJhbWUqIG5ld0ZvY3VzZWRGcmFtZSwgTm9kZSogbmV3Rm9jdXNlZE5vZGUpCkBAIC04
NDEsNyArODQwLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIEZyYW1lJiBuZXdGb2N1c2VkRnJhbWUKICAgICB9CiAKICAgICAvLyBG
SVhNRTogTWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgY2hlY2sgZm9yIGNhcmV0QnJvd3NpbmcK
LSAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xkRm9jdXNlZEVsZW1lbnQtPmlzUm9vdEVk
aXRhYmxlRWxlbWVudCgpICYmICFyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMob2xkRm9jdXNlZEVs
ZW1lbnQpKQorICAgIGlmIChvbGRGb2N1c2VkRWxlbWVudCAmJiBvbGRGb2N1c2VkRWxlbWVudC0+
aXNSb290RWRpdGFibGVFbGVtZW50KCkgJiYgIXJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cygqb2xk
Rm9jdXNlZEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3BhZ2UuZWRp
dG9yQ2xpZW50KCkud2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
aW5kZXggNGQwMzRmM2JkMmJmYTlhYWFkMGU2ZTJhNDk0Mzg0ZDNhYzMyYWVlYS4uMzU1MWI0ZDYy
Yjg0NjBkYmM2MTc0YjdkZTVmMmI5ZjM4M2FmMDc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAg
LTgxOCwyOCArODE4LDI1IEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0
IEludFBvaW50JiBwb2ludCkKIAogUmVmUHRyPFJhbmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKLSAgICBpZiAocG9zaXRp
b24uaXNOdWxsKCkpCisgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvaW50
KGZyYW1lUG9pbnQpOworICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIXBvc2l0aW9uQm91bmRhcnkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgUG9zaXRpb24gZGVlcFBvc2l0aW9uID0gcG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKTsKLSAgICBUZXh0KiBjb250YWluZXJUZXh0ID0gZGVlcFBvc2l0aW9uLmNvbnRh
aW5lclRleHQoKTsKKyAgICBhdXRvIGNvbnRhaW5lclRleHQgPSBwb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLmNvbnRhaW5lclRleHQoKTsKICAgICBpZiAoIWNvbnRhaW5lclRleHQgfHwgIWNvbnRh
aW5lclRleHQtPnJlbmRlcmVyKCkgfHwgY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUo
KS51c2VyU2VsZWN0KCkgPT0gVXNlclNlbGVjdDo6Tm9uZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygp
OwotICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsK
LSAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocHJl
dmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZy
YW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2U7Cisg
ICAgaWYgKGF1dG8gcHJldmlvdXMgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5wcmV2aW91
cygpKSkgeworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5n
ZSB7ICpwcmV2aW91cywgKnBvc2l0aW9uQm91bmRhcnkgfTsKKyAgICAgICAgaWYgKGVkaXRvcigp
LmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1l
UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShwcmV2aW91c0NoYXJh
Y3RlclJhbmdlKTsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9u
Lm5leHQoKTsKLSAgICBpZiAoUmVmUHRyPFJhbmdlPiBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtl
UmFuZ2UocG9zaXRpb24sIG5leHQpKSB7Ci0gICAgICAgIExheW91dFJlY3QgcmVjdCA9IGVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIG5leHRD
aGFyYWN0ZXJSYW5nZTsKKyAgICBpZiAoYXV0byBuZXh0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9z
aXRpb24ubmV4dCgpKSkgeworICAgICAgICBhdXRvIG5leHRDaGFyYWN0ZXJSYW5nZSA9IFNpbXBs
ZVJhbmdlIHsgKnBvc2l0aW9uQm91bmRhcnksICpuZXh0IH07CisgICAgICAgIGlmIChlZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9p
bnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShuZXh0Q2hhcmFjdGVyUmFu
Z2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
NTQ1YmVjMWNlYjFmYzEwZGRjNjZmM2E3YWZjMzRjYzg3MDkyYjM5Zi4uMTgxMTUxZDAwMmI4NDhk
ODJmMDQzNDVlYzY5ZmJiMDY2MjZlMmRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MTMsMTgg
KzcxMywyMCBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRpZFdyYQogCiB2b2lkIFBhZ2U6OmZpbmRTdHJp
bmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9u
cywgaW50IGxpbWl0LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hdGNoUmFuZ2VzLCBpbnQmIGlu
ZGV4Rm9yU2VsZWN0aW9uKQogeworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0UmFuZ2Vz
OworCiAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOwogCiAgICAgRnJhbWUqIGZyYW1lID0gJm1h
aW5GcmFtZSgpOwogICAgIEZyYW1lKiBmcmFtZVdpdGhTZWxlY3Rpb24gPSBudWxscHRyOwogICAg
IGRvIHsKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0
LCAwLCBvcHRpb25zLCBsaW1pdCA/IChsaW1pdCAtIG1hdGNoUmFuZ2VzLnNpemUoKSkgOiAwLCB0
cnVlLCAmbWF0Y2hSYW5nZXMpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVz
Rm9yVGV4dCh0YXJnZXQsIHsgfSwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSBtYXRjaFJhbmdl
cy5zaXplKCkpIDogMCwgdHJ1ZSwgJnJlc3VsdFJhbmdlcyk7CiAgICAgICAgIGlmIChmcmFtZS0+
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICAgICAgZnJhbWVXaXRoU2VsZWN0aW9uID0g
ZnJhbWU7CiAgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIENhbldy
YXA6Ok5vKTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAKLSAgICBpZiAobWF0Y2hSYW5nZXMuaXNF
bXB0eSgpKQorICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9uKSB7CkBAIC03MzIsNyArNzM0LDcgQEAgdm9p
ZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWVX
aXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAg
ICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0p
OworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVk
UmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgY3JlYXRl
TGl2ZVJhbmdlKHJlc3VsdFJhbmdlc1tpIC0gMV0pKTsKICAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKSB7
CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzQwLDcgKzc0Miw3IEBAIHZvaWQgUGFnZTo6ZmluZFN0
cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRp
b25zLCBpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMCwgc2l6ZSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVk
UmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNo
UmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19F
TkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZXNbaV0pKTsKICAgICAgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkg
PCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NDksMTAgKzc1MSwxMyBAQCB2b2lkIFBhZ2U6OmZp
bmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMg
b3B0aW9ucywgaQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG9wdGlvbnMu
Y29udGFpbnMoQmFja3dhcmRzKSkKLSAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gbWF0
Y2hSYW5nZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gcmVz
dWx0UmFuZ2VzLnNpemUoKSAtIDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gMDsKICAgICB9CisKKyAgICBmb3IgKGF1dG8mIHJhbmdlIDogcmVzdWx0UmFu
Z2VzKQorICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSk7
CiB9CiAKIFJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRh
cmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQpAQCAtNzY3
LDE3ICs3NzIsMTYgQEAgUmVmUHRyPFJhbmdlPiBQYWdlOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEYKICAgICBGcmFtZSogZnJhbWUg
PSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUo
KSA6ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9IGZyYW1lOwogICAgIGRv
IHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJhbWUgPyByZWZlcmVuY2VS
YW5nZSA6IDAsIG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHRSYW5nZTsKLQorICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IGZyYW1lLT5lZGl0b3Io
KS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/IG1ha2VSYW5nZShy
ZWZlcmVuY2VSYW5nZSkgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKKyAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOwogICAgICAgICBm
cmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCAhb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMp
LCBjYW5XcmFwKTsKICAgICB9IHdoaWxlIChmcmFtZSAmJiBmcmFtZSAhPSBzdGFydEZyYW1lKTsK
IAogICAgIC8vIFNlYXJjaCBjb250ZW50cyBvZiBzdGFydEZyYW1lLCBvbiB0aGUgb3RoZXIgc2lk
ZSBvZiB0aGUgcmVmZXJlbmNlIHJhbmdlIHRoYXQgd2UgZGlkIGVhcmxpZXIuCiAgICAgLy8gV2Ug
Y2hlYXQgYSBiaXQgYW5kIGp1c3Qgc2VhcmNoIGFnYWluIHdpdGggd3JhcCBvbi4KICAgICBpZiAo
Y2FuV3JhcCA9PSBDYW5XcmFwOjpZZXMgJiYgcmVmZXJlbmNlUmFuZ2UpIHsKLSAgICAgICAgaWYg
KFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5lZGl0b3IoKS5yYW5nZU9m
U3RyaW5nKHRhcmdldCwgcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMgfCBXcmFwQXJvdW5kIHwgU3Rh
cnRJblNlbGVjdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CisgICAgICAg
IGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmlu
Zyh0YXJnZXQsIG1ha2VSYW5nZSgqcmVmZXJlbmNlUmFuZ2UpLCBvcHRpb25zIHwgV3JhcEFyb3Vu
ZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5n
ZShyZXN1bHRSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03OTQsNyAr
Nzk4LDcgQEAgdW5zaWduZWQgUGFnZTo6ZmluZE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnMKICAgICBkbyB7CiAgICAgICAgIGlmIChz
aG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcykKICAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKHNob3VsZEhpZ2hsaWdodE1h
dGNoZXMgPT0gSGlnaGxpZ2h0TWF0Y2hlcyk7Ci0gICAgICAgIG1hdGNoQ291bnQgKz0gZnJhbWUt
PmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCAwLCBvcHRpb25zLCBtYXhNYXRj
aENvdW50ID8gKG1heE1hdGNoQ291bnQgLSBtYXRjaENvdW50KSA6IDAsIHNob3VsZE1hcmtNYXRj
aGVzID09IE1hcmtNYXRjaGVzLCAwKTsKKyAgICAgICAgbWF0Y2hDb3VudCArPSBmcmFtZS0+ZWRp
dG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIFdURjo6bnVsbG9wdCwgb3B0aW9ucywg
bWF4TWF0Y2hDb3VudCA/IChtYXhNYXRjaENvdW50IC0gbWF0Y2hDb3VudCkgOiAwLCBzaG91bGRN
YXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcywgbnVsbHB0cik7CiAgICAgICAgIGZyYW1lID0gaW5j
cmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIENhbldyYXA6Ok5vKTsKICAgICB9IHdoaWxlIChmcmFt
ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBjMmZhNmM4MTRjNGIw
ZWI2Y2NiYmVjZjEwOTY5MGI1YTYwMjY0ZGFjLi40NmFhYjgwOTNlNDdlYmI2ZTQ2ZDAyNTY1NDVm
ZDBhMzdjNDUyY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0yNjE3
LDcgKzI2MTcsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8UmFuZ2U+PiBJbnRlcm5hbHM6OnJhbmdl
T2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8UgogICAgIGlmIChwYXJzZWRPcHRp
b25zLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gcGFyc2VkT3B0aW9ucy5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigpLnJhbmdlT2ZTdHJp
bmcodGV4dCwgcmVmZXJlbmNlUmFuZ2UuZ2V0KCksIHBhcnNlZE9wdGlvbnMucmVsZWFzZVJldHVy
blZhbHVlKCkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoZG9jdW1lbnQtPmVkaXRvcigp
LnJhbmdlT2ZTdHJpbmcodGV4dCwgbWFrZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSwgcGFyc2VkT3B0
aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSkpOwogfQogCiBFeGNlcHRpb25Pcjx1bnNpZ25lZD4g
SW50ZXJuYWxzOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbmRPcHRpb25zLCBjb25zdCBTdHJpbmcmIG1hcmtNYXRjaGVzKQpA
QCAtMjYzMSw3ICsyNjMxLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6Y291
bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFYKICAgICAgICAgcmV0
dXJuIHBhcnNlZE9wdGlvbnMucmVsZWFzZUV4Y2VwdGlvbigpOwogCiAgICAgYm9vbCBtYXJrID0g
bWFya01hdGNoZXMgPT0gIm1hcmsiOwotICAgIHJldHVybiBkb2N1bWVudC0+ZWRpdG9yKCkuY291
bnRNYXRjaGVzRm9yVGV4dCh0ZXh0LCBudWxscHRyLCBwYXJzZWRPcHRpb25zLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCAxMDAwLCBtYXJrLCBudWxscHRyKTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmVk
aXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGV4dCwgV1RGOjpudWxsb3B0LCBwYXJzZWRPcHRp
b25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCAxMDAwLCBtYXJrLCBudWxscHRyKTsKIH0KIAogRXhj
ZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaW5kT3B0aW9ucykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRleCBiMmRhZGM2OTc0MDVk
NjkxMWM2YzI5NTJiN2M5ZDQ0ZmZmZTVhZDQxLi4yYjA0MjIyNGYzOWM4MTYyOGE4ZjhkZmY5NWFk
ZGE4Yjk2OWExMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQ
cmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tCkBAIC02NjMsNyArNjYzLDcgQEAgLSAoTlNSZWN0KXJlY3RGb3JQYWdlOihOU0lu
dGVnZXIpcGFnZQogICAgICAgICBMT0coUHJpbnRpbmcsICItW1dLUHJpbnRpbmdWaWV3ICVwIHJl
Y3RGb3JQYWdlOiVkXSAtIGRhdGEgaXMgbm90IHlldCBhdmFpbGFibGUiLCBzZWxmLCAoaW50KXBh
Z2UpOwogICAgICAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBX
ZSBtYXkgaGF2ZSBub3QgdG9sZCBBcHBLaXQgaG93IG1hbnkgcGFnZXMgdGhlcmUgYXJlLCBzbyBp
dCB3aWxsIHRyeSB0byBwcmludCB1bnRpbCBhIG51bGwgcmVjdCBpcyByZXR1cm5lZC4KLSAgICAg
ICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAgICAgICAgICAgcmV0dXJu
IE5TWmVyb1JlY3Q7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgbXVzdCBiZSBzdGlsbCBjYWxj
dWxhdGluZyB0aGUgcGFnZSByYW5nZS4KICAgICAgICAgQVNTRVJUKF9leHBlY3RlZENvbXB1dGVk
UGFnZXNDYWxsYmFjayk7CkBAIC02NzQsNyArNjc0LDcgQEAgLSAoTlNSZWN0KXJlY3RGb3JQYWdl
OihOU0ludGVnZXIpcGFnZQogICAgIC8vIFJldHVybmluZyBhIG51bGwgcmVjdCBwcmV2ZW50cyBz
ZWxlY3Rpbmcgbm9uLWV4aXN0ZW50IHBhZ2VzIGluIHByZXZpZXcgZGlhbG9nLgogICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocGFnZSkgPiBfcHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpKSB7
CiAgICAgICAgIEFTU0VSVCghX3dlYkZyYW1lLT5wYWdlKCkpOwotICAgICAgICByZXR1cm4gTlNN
YWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAgICAgfQog
CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gX3ByaW50aW5nUGFnZVJlY3RzW3BhZ2UgLSAx
XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggNzlhMzc0MDBjM2Y0MTU4YmY0MjhmNjk0MmJj
ODg2ZjFhY2QyMjAzZC4uZGQ5YzM1MjYwNWYwOGYzOTQwZDkwMGQ4ZjAyNjUyNDdlMDRiYTM3OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc0LDExICs3NCw5IEBAIHN0YXRpYyB1aW50NjRf
dCBnZW5lcmF0ZVRleHRDaGVja2luZ1JlcXVlc3RJRCgpCiAgICAgcmV0dXJuIHVuaXF1ZVRleHRD
aGVja2luZ1JlcXVlc3RJRCsrOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVs
ZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0
ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRGVsZXRl
UmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkp
OwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkK
QEAgLTExNCw1MCArMTEyLDM3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVHcmFtbWFy
Q2hlY2tpbmcoKQogaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biAwOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdl
KiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2luRWRpdGluZygqbV9wYWdlLCByYW5nZSk7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQmVnaW5FZGl0aW5nKCpt
X3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOwogfQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
Ym9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
RW5kRWRpdGluZygqbV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0
cigpKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSog
bm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQor
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
IGFjdGlvbikKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2UsIG5vZGUsIHJhbmdlVG9SZXBsYWNl
LCBhY3Rpb24pOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2Vy
dE5vZGUoKm1fcGFnZSwgJm5vZGUsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSkuZ2V0
KCksIGFjdGlvbik7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRB
Y3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBs
YWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFn
ZSwgdGV4dC5pbXBsKCksIHJhbmdlVG9SZXBsYWNlLCBhY3Rpb24pOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFnZSwgdGV4dC5pbXBsKCks
IGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCksIGFjdGlvbik7CiB9CiAKLWJv
b2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9t
UmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rp
bmcpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqbV9wYWdlLCBmcm9tUmFuZ2UsIHRvUmFu
Z2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9y
Q2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFu
Z2UoZnJvbVJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKHRvUmFuZ2UpLmdldCgpLCBhZmZp
bml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogICAgIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVz
JiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBSZWY8
TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlKHN0eWxlLT5pc011dGFibGUoKSA/
IFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPihzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzJj4oKnN0eWxlKSkgOiBzdHlsZS0+bXV0YWJsZUNvcHkoKSk7Ci0gICAgYm9vbCByZXN1
bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHls
ZSgqbV9wYWdlLCAmbXV0YWJsZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIHJh
bmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0eWxl
KCptX3BhZ2UsICZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
KCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCiAjaWYgRU5BQkxFKEFUVEFD
SE1FTlRfRUxFTUVOVCkKQEAgLTIxMSw5ICsxOTYsOCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
ZGlkQXBwbHlTdHlsZSgpCiAgICAgbV9wYWdlLT5kaWRBcHBseVN0eWxlKCk7CiB9CiAKLWJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdl
KikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25z
dCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjIsNyArMjA2LDYgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZygpCiAgICAgLy8gRklYTUU6IFdoYXQgZ29vZCBp
cyBhIG5vdGlmaWNhdGlvbiBuYW1lLCBpZiBpdCdzIGFsd2F5cyB0aGUgc2FtZT8KICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0
aW9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZp
Y2F0aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5kaWRC
ZWdpbkVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbi5n
ZXQoKS5pbXBsKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQpAQCAtMjc1LDcgKzI1OCw2IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNhdGlvbihNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24iKSk7CiAg
ICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmRpZEVuZEVkaXRpbmcoKm1f
cGFnZSwgV2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24uZ2V0KCkuaW1wbCgpKTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQpAQCAtMjgzLDE5ICsyNjUsMTkgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKICAgICBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZGlkV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSk7
CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoUmFuZ2UqIHJhbmdlKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAg
IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9h
cmQoKm1fcGFnZSwgcmFuZ2UpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJk
RGF0YUZvclJhbmdlKFJhbmdlKiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBl
cywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCit2b2lkIFdl
YkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9y
PFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7Ci0gICAgbV9wYWdlLT5p
bmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoKm1f
cGFnZSwgcmFuZ2UsIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOworICAgIG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdl
KCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIHBhc3RlYm9hcmRUeXBlcywg
cGFzdGVib2FyZERhdGEpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0
ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSYgZGVzdGluYXRpb24sIGJv
b2wgaXNNb3ZlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1
bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgU2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBi
b29sIGlzTW92ZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNs
aWVudCgpLnBlcmZvcm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBmcmFnbWVudCwgZGVzdGluYXRpb24s
IGlzTW92ZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQo
KS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShk
ZXN0aW5hdGlvbiksIGlzTW92ZSk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3Rl
clVuZG9TdGVwKFVuZG9TdGVwJiBzdGVwKQpAQCAtNDI1LDEyICs0MDcsMTAgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGVsZW1lbnQpCiAK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnN1YkZy
YW1lU2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiAjZW5kaWYKQEAgLTYxOCw3ICs1OTgsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5w
dXRNZXRob2RTdGF0ZShFbGVtZW50KiBlbGVtZW50KQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oV1BFKQogICAgIG1fcGFnZS0+c2V0SW5wdXRNZXRob2RTdGF0ZShlbGVtZW50KTsKICNl
bHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CiAj
ZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAwZGY3NzU5ZTFiODJkZDQwM2NmZGE4Y2E3
MzA5OWViYzZkZGQ4MDhjLi4yM2UzOTRmMjdlYzMyNjkyNzhjNDViOGUxNDRkMzZkYzdjN2JmZDZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQo
KSBmaW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNv
bnN0IGZpbmFsOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBm
aW5hbDsKQEAgLTU0LDE1ICs1NCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9nZ2xlR3JhbW1h
ckNoZWNraW5nKCkgZmluYWw7CiAgICAgaW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgZmlu
YWw7CiAgICAgCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBm
aW5hbDsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsK
LSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdl
KiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZElu
c2VydFRleHQoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJ
bnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShX
ZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29y
ZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKKyAgICBib29sIHNob3Vs
ZEJlZ2luRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJv
b2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOwor
ICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5h
bDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBm
aW5hbDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKSBmaW5hbDsKICAgICAKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6
U3R5bGVQcm9wZXJ0aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRBcHBseVN0eWxl
KCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShXZWJDb3JlOjpS
YW5nZSosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VB
ZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNvbnN0IFdlYkNvcmU6OlNp
bXBsZVJhbmdlJikgZmluYWw7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAg
IHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHByZWZlcnJlZEZpbGVOYW1lLCBSZWY8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBmaW5hbDsKQEAgLTg1LDkgKzg1LDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNhbmNlbGVkQ29tcG9zaXRpb24oKSBmaW5hbDsKICAgICB2b2lkIGRpZFVw
ZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgZmluYWw7
Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2Uq
KSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICB2b2lkIGRpZFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2Fy
ZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRU
eXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERh
dGEpIGZpbmFsOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJVbmRvU3RlcChXZWJDb3JlOjpVbmRv
U3RlcCYpIGZpbmFsOwogICAgIHZvaWQgcmVnaXN0ZXJSZWRvU3RlcChXZWJDb3JlOjpVbmRvU3Rl
cCYpIGZpbmFsOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRT
dXBwcmVzc1Bhc3N3b3JkRWNobygpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKLSAgICBib29sIHBl
cmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgV2ViQ29yZTo6UmFu
Z2UmLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2Vi
Q29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgYm9v
bCBpc01vdmUpIGZpbmFsOwogICAgIGJvb2wgc3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKSBmaW5h
bDsKIAogICAgIGJvb2wgY2FuU2hvd0ZvbnRQYW5lbCgpIGNvbnN0IGZpbmFsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGFkYTUyY2RkNzk3MTFh
ODIzZTljYTMyZDJlZWUwYzhmMDgwZDg2OGIuLmVkN2Q1MDE3MDk1YzUwMmMxNGZmMGY5NWI2YTA0
NWQ5NjgzNjgzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCkBAIC01NDI2LDQzICs1NDI2LDM2IEBAIHZvaWQgV2ViUGFnZTo6aGFzTWFya2VkVGV4
dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogdm9p
ZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5jKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgRWRpdGluZ1JhbmdlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgRnJhbWUmIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAg
ICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCkpOwotICAgIGNvbXBsZXRpb25IYW5k
bGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoRWRpdGluZ1JhbmdlOjpm
cm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlv
blJhbmdlKCkpLmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZUFz
eW5jKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRWRpdGluZ1JhbmdlJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRp
bmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwotICAgIGNvbXBsZXRp
b25IYW5kbGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoRWRpdGluZ1Jh
bmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpOwogfQogCiB2b2lkIFdlYlBh
Z2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
cG9pbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBjb25zdGV4cHIgT3B0aW9uU2V0
PEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0VHlwZSB7IEhpdFRlc3RSZXF1ZXN0OjpS
ZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93
VXNlckFnZW50U2hhZG93Q29udGVudCwgIEhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJhbWVD
b250ZW50IH07Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBoaXRUeXBlKTsKLSAg
ICBGcmFtZSogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5u
ZXJOb2RlRnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+cmFuZ2VGb3JQ
b2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVk
aXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKCpmcmFtZSwgcmFuZ2UuZ2V0KCkp
OworICAgIGF1dG8gcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5o
aXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgaGl0VHlwZSk7CisgICAgYXV0byYgZnJhbWUgPSBy
ZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyAqcmVzdWx0LmlubmVyTm9kZUZyYW1lKCkgOiBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGF1dG8g
cmFuZ2UgPSBmcmFtZS5yYW5nZUZvclBvaW50KHJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9k
ZUZyYW1lKCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFu
Z2UoZnJhbWUsIHJhbmdlLmdldCgpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlVuc2lnbmVkQ2FsbGJhY2soc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGVkaXRpbmdSYW5nZS5sb2Nh
dGlvbiksIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlLCBDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBJbnRSZWN0IHJlc3VsdChJbnRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgwLCAwKSk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRpdGluZ1JhbmdlKTsKKyAgICBhdXRvJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgYXV0byByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRpdGluZ1Jhbmdl
KTsKICAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2socmVzdWx0LCBFZGl0aW5nUmFuZ2Uobm90
Rm91bmQsIDApLCBjYWxsYmFja0lEKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soeyB9LCB7IH0sIGNhbGxiYWNrSUQp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIHJlc3VsdCA9IGZyYW1lLnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5n
ZXQoKSkpOwotCi0gICAgLy8gRklYTUU6IFVwZGF0ZSBhY3R1YWxSYW5nZSB0byBtYXRjaCB0aGUg
cmFuZ2Ugb2YgZmlyc3QgcmVjdC4KLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgZWRpdGluZ1JhbmdlLCBjYWxsYmFj
a0lEKSk7CisgICAgLy8gRklYTUU6IFBhc3MgYW4gRWRpdGluZ1JhbmdlIHRoYXQgbWF0Y2hlcyB0
aGUgcmFuZ2Ugb2YgdGhlIGZpcnN0IHJlY3QsIHJhdGhlciB0aGFuIHRoZSBlbnRpcmUgcGFzc2Vk
LWluIHJhbmdlPworICAgIGF1dG8gcmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqcmFuZ2UpKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlY3Qs
IGVkaXRpbmdSYW5nZSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldENvbXBv
c2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25V
bmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+
JiBoaWdobGlnaHRzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvbiwgY29uc3QgRWRpdGlu
Z1JhbmdlJiByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSkKQEAgLTU0NzAsMTUgKzU0NjMsMTEgQEAg
dm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmVjdG9yPENvbXBvc2l0aW9uVW4KICAgICBwbGF0Zm9ybVdpbGxQZXJmb3JtRWRpdGluZ0Nv
bW1hbmQoKTsKIAogICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKLQogICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFj
ZW1lbnRSYW5nZTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlLmxvY2F0aW9u
ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICByZXBsYWNlbWVudFJhbmdlID0gRWRpdGluZ1Jh
bmdlOjp0b1JhbmdlKGZyYW1lLCByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSk7Ci0gICAgICAgICAg
ICBpZiAocmVwbGFjZW1lbnRSYW5nZSkKKyAgICAgICAgICAgIGlmIChhdXRvIHJlcGxhY2VtZW50
UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIHJlcGxhY2VtZW50RWRpdGluZ1Jh
bmdlKSkKICAgICAgICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbigqcmVwbGFjZW1lbnRSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsK
ICAgICAgICAgfQotCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldENvbXBvc2l0aW9uKHRleHQs
IHVuZGVybGluZXMsIGhpZ2hsaWdodHMsIHNlbGVjdGlvbi5sb2NhdGlvbiwgc2VsZWN0aW9uLmxv
Y2F0aW9uICsgc2VsZWN0aW9uLmxlbmd0aCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAppbmRleCA0YzUw
MGUzNjY4YTMyMTIzYjllMjRiMjc4ZGFhYjA3NDU3M2ZmYTMwLi40NjkyNTUzYTBhODA5ZGQzZjcw
Mzk1M2UzNThkZjMzNDYyMmVjNTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTA5LDEwICsxMDksMTAgQEAg
dm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9y
U3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgYXV0byBzdXJyb3VuZGluZ0VuZCA9IGVuZE9m
RWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KTsKICAgICAgICAgYXV0byBzdXJyb3VuZGlu
Z1JhbmdlID0gbWFrZVJhbmdlKHN1cnJvdW5kaW5nU3RhcnQsIHN1cnJvdW5kaW5nRW5kKTsKICAg
ICAgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25S
YW5nZSgpOwotICAgICAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBzdXJyb3VuZGluZ1Jhbmdl
ICYmIHN1cnJvdW5kaW5nUmFuZ2UtPmNvbnRhaW5zKCpjb21wb3NpdGlvblJhbmdlKSkgeworICAg
ICAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBzdXJyb3VuZGluZ1JhbmdlICYmIHN1cnJvdW5k
aW5nUmFuZ2UtPmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSkuZ2V0
KCkpKSB7CiAgICAgICAgICAgICBhdXRvIGNsb25lZFJhbmdlID0gc3Vycm91bmRpbmdSYW5nZS0+
Y2xvbmVSYW5nZSgpOwotICAgICAgICAgICAgc3Vycm91bmRpbmdSYW5nZS0+c2V0RW5kKGNvbXBv
c2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBjbG9uZWRSYW5nZS0+
c2V0U3RhcnQoY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBz
dXJyb3VuZGluZ1JhbmdlLT5zZXRFbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBv
c2l0aW9uUmFuZ2UtPnN0YXJ0KSk7CisgICAgICAgICAgICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAg
ICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KCpz
dXJyb3VuZGluZ1JhbmdlKSArIHBsYWluVGV4dChjbG9uZWRSYW5nZSk7CiAgICAgICAgICAgICBw
b3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGNoYXJhY3Rl
ckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1
cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBvc2l0aW9uID0gcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGQ5YzZjNGE1YzhhNmYyYjQyNWYx
MjIwOGU0MzNjNTRjOWIwOGY0ZjcuLjk0YTY3NTBhMzhjZGNkNDVmMmEyZmQ0N2Q3YzM3OGUzNDQ2
YzFmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCkBAIC0yNjcsMTAgKzI2NywxMCBAQCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRm
b3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAog
CiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgaWYg
KGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2Uo
KSkgewotICAgICAgICAgICAgY29tcG9zaXRpb25SYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3Rz
KHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CisgICAgICAgICAgICBjcmVhdGVMaXZl
UmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91
dERhdGEubWFya2VkVGV4dFJlY3RzKTsKICAgICAgICAgICAgIGNvbnZlcnRDb250ZW50VG9Sb290
Vmlld1NlbGVjdGlvblJlY3RzKHZpZXcsIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7
CiAKLSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHQgPSBwbGFpblRleHRGb3JD
b250ZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgcG9zdExheW91dERh
dGEubWFya2VkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoKmNvbXBvc2l0aW9uUmFuZ2UpOwog
ICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjb21wb3NpdGlvblNlbGVjdGlvbigqY29tcG9z
aXRpb25SYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2FyZXRS
ZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxwdHIgLyogaW5zaWRlRml4
ZWQgKi8pKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRDYXJldFJlY3RB
dEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVjdGlvbi52aXNp
YmxlRW5kKCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8qIGluc2lkZUZpeGVkICovKSk7
CkBAIC0xMzc3LDEzICsxMzc3LDE1IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSwKICAgICB7CiAg
ICAgICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IG1hcmtlZFJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAgICBpZiAocG9zaXRpb24gPCBtYXJrZWRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAgICAgICAgcG9zaXRpb24gPSBtYXJrZWRSYW5nZS0+
c3RhcnRQb3NpdGlvbigpOwotICAgICAgICBpZiAocG9zaXRpb24gPiBtYXJrZWRSYW5nZS0+ZW5k
UG9zaXRpb24oKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbWFya2VkUmFuZ2UtPmVuZFBvc2l0
aW9uKCk7CisgICAgICAgIGF1dG8gbWFya2VkUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3Np
dGlvblJhbmdlKCk7CisgICAgICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihtYXJrZWRSYW5nZS0+c3RhcnQpOworICAgICAgICBhdXRvIGVuZFBvc2l0
aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1hcmtlZFJhbmdlLT5lbmQpOworICAg
ICAgICBpZiAocG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKQorICAgICAgICAgICAgcG9zaXRpb24g
PSBzdGFydFBvc2l0aW9uOworICAgICAgICBpZiAocG9zaXRpb24gPiBlbmRQb3NpdGlvbikKKyAg
ICAgICAgICAgIHBvc2l0aW9uID0gZW5kUG9zaXRpb247CiAgICAgICAgIGlmICh3a0dlc3R1cmVT
dGF0ZSAhPSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbikKLSAgICAgICAgICAgIGZsYWdz
ID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKG1hcmtlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpICE9IGRpc3RhbmNlQmV0d2Vl
blBvc2l0aW9ucyhtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikgPyBQaHJh
c2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IHsgfTsKKyAgICAg
ICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpICE9IGRpc3RhbmNlQmV0d2VlblBv
c2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3NpdGlvbikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQg
OiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IHsgfTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZmxhZ3MgPSBQaHJhc2VCb3VuZGFyeUNoYW5nZWQ7CiAgICAgICAgIHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKQEAgLTI0ODMs
NyArMjQ4NSw2IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRvY29ycmVj
dGlvbkNvbnRleHQoKQogICAgIEVkaXRpbmdSYW5nZSBtYXJrZWRUZXh0UmFuZ2U7CiAKICAgICBh
dXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCk7CiAgICAgY29uc3QgdW5zaWduZWQgbWluQ29udGV4dFdvcmRDb3VudCA9IDM7CkBAIC0y
NDk0LDE0ICsyNDk1LDEyIEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRv
Y29ycmVjdGlvbkNvbnRleHQoKQogICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JD
b250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
OwogCiAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBv
c2l0aW9uUmFuZ2UoKSkgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgc3RhcnRQb3NpdGlv
bik7CiAgICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QmVmb3JlOwotICAgICAgICBpZiAocmFuZ2Up
Ci0gICAgICAgICAgICBtYXJrZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5n
ZS5nZXQoKSk7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgZW5kUG9zaXRpb24sIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgICAg
ICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pKQorICAg
ICAgICAgICAgbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQoeyBjb21wb3Np
dGlvblJhbmdlLT5zdGFydCwgKnN0YXJ0IH0pOwogICAgICAgICBTdHJpbmcgbWFya2VkVGV4dEFm
dGVyOwotICAgICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QWZ0ZXIgPSBw
bGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgaWYgKGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pKQorICAgICAgICAgICAgbWFya2VkVGV4dEFm
dGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh7ICplbmQsIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCB9
KTsKICAgICAgICAgbWFya2VkVGV4dCA9IG1hcmtlZFRleHRCZWZvcmUgKyBzZWxlY3RlZFRleHQg
KyBtYXJrZWRUZXh0QWZ0ZXI7CiAgICAgICAgIGlmICghbWFya2VkVGV4dC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIG1hcmtlZFRleHRSYW5nZS5sb2NhdGlvbiA9IG1hcmtlZFRleHRCZWZvcmUu
bGVuZ3RoKCk7CkBAIC0yNjE3LDE0ICsyNjE2LDE2IEBAIHN0YXRpYyB2b2lkIGZvY3VzZWRFbGVt
ZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVtZW50JiBmb2N1c2VkRWxl
CiAgICAgSW50UG9pbnQgY29uc3RyYWluZWRQb2ludCA9IGNvbnN0cmFpblBvaW50KGFkanVzdGVk
UG9pbnQsIGZyYW1lLCBmb2N1c2VkRWxlbWVudCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3RyYWluZWRQb2ludCk7CiAK
LSAgICBSZWZQdHI8UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21w
b3NpdGlvblJhbmdlKCk7CisgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmICghY29tcG9zaXRpb25SYW5nZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKHBvc2l0aW9uIDwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKQotICAgICAgICBwb3NpdGlvbiA9IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKTsKLSAgICBlbHNlIGlmIChwb3NpdGlvbiA+IGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBv
c2l0aW9uKCkpCi0gICAgICAgIHBvc2l0aW9uID0gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRp
b24oKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpOworICAgIGF1dG8gZW5kUG9zaXRpb24gPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKTsKKyAgICBpZiAo
cG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKQorICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRp
b247CisgICAgZWxzZSBpZiAocG9zaXRpb24gPiBlbmRQb3NpdGlvbikKKyAgICAgICAgcG9zaXRp
b24gPSBlbmRQb3NpdGlvbjsKICAgICBJbnRSZWN0IGNhcmV0UmVjdCA9IHZpZXcuY29udGVudHNU
b1Jvb3RWaWV3KHBvc2l0aW9uLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CiAgICAgZmxvYXQgZGVs
dGFYID0gYWJzKGNhcmV0UmVjdC54KCkgKyAoY2FyZXRSZWN0LndpZHRoKCkgLyAyKSAtIHJlcXVl
c3QucG9pbnQueCgpKTsKICAgICBmbG9hdCBkZWx0YVlGcm9tVGhlVG9wID0gYWJzKGNhcmV0UmVj
dC55KCkgLSByZXF1ZXN0LnBvaW50LnkoKSk7CkBAIC00MjU1LDggKzQyNTYsOCBAQCB2b2lkIFdl
YlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRl
eHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICBpZiAod2FudHNNYXJrZWRUZXh0UmVjdHMgJiYgY29t
cG9zaXRpb25SYW5nZSkgewogICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGNs
aWVudCBoYXMgcmVxdWVzdGVkIG1hcmtlZCB0ZXh0IHJlY3RzIG1ha2Ugc3VyZSB0aGF0IHRoZSBj
b250ZXh0CiAgICAgICAgICAgICAvLyByYW5nZSBlbmNvbXBhc3NlcyB0aGUgZW50aXJlIG1hcmtl
ZCB0ZXh0IHJhbmdlIHNvIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGEgdHJ1bmNhdGVkIHJlc3VsdC4K
LSAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25TdGFydCA9IGNvbXBvc2l0aW9uUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25FbmQgPSBjb21wb3Np
dGlvblJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICAgICAgYXV0byBjb21wb3NpdGlvblN0
YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0
KTsKKyAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25FbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKTsKICAgICAgICAgICAgIGlmIChjb250ZXh0
QmVmb3JlU3RhcnQgPiBjb21wb3NpdGlvblN0YXJ0KQogICAgICAgICAgICAgICAgIGNvbnRleHRC
ZWZvcmVTdGFydCA9IGNvbXBvc2l0aW9uU3RhcnQ7CiAgICAgICAgICAgICBpZiAoY29udGV4dEFm
dGVyRW5kIDwgY29tcG9zaXRpb25FbmQpCkBAIC00Mjc2LDkgKzQyNzcsOSBAQCB2b2lkIFdlYlBh
Z2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRS
ZXF1ZXN0IHJlcXVlcwogICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoY29u
dGV4dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwogICAg
IGNvbnRleHQuc2VsZWN0ZWRUZXh0ID0gbWFrZVN0cmluZyhzdGFydE9mUmFuZ2VPZkludGVyZXN0
SW5TZWxlY3Rpb24sIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwogICAgIGNvbnRl
eHQuY29udGV4dEFmdGVyID0gbWFrZVN0cmluZyhlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0
aW9uLCBjb250ZXh0QWZ0ZXJFbmQpOwotICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIHJhbmdl
c092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBjb21wb3NpdGlvblJhbmdlLmdldCgpKSkg
ewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjb21wb3NpdGlvblJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRp
b25FbmQoY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgaWYgKGNvbXBvc2l0
aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3QuZ2V0KCksIGNyZWF0ZUxp
dmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSkucHRyKCkpKSB7CisgICAgICAgIFZpc2libGVQb3Np
dGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3Np
dGlvblJhbmdlLT5zdGFydCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25F
bmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwog
ICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBtYWtlU3RyaW5nKGNvbXBvc2l0aW9uU3RhcnQs
IGNvbXBvc2l0aW9uRW5kKTsKICAgICAgICAgY29udGV4dC5zZWxlY3RlZFJhbmdlSW5NYXJrZWRU
ZXh0LmxvY2F0aW9uID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0YXJ0T2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiwgY29tcG9zaXRpb25TdGFydCk7CiAgICAgICAgIGNvbnRleHQuc2Vs
ZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5ndGggPSBbY29udGV4dC5zZWxlY3RlZFRleHQuc3Ry
aW5nIGxlbmd0aF07CkBAIC00MzA1LDEwICs0MzA2LDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0
RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1
ZXMKICAgICAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5n
ZSgqY29udGV4dFJhbmdlLCAwKTsKICAgICB9IGVsc2UgaWYgKHdhbnRzTWFya2VkVGV4dFJlY3Rz
ICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAgdW5zaWduZWQgY29tcG9zaXRpb25TdGFy
dE9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
Y29udGV4dEJlZm9yZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQgPSBXZWJDb3Jl
OjpwbGFpblRleHQoU2ltcGxlUmFuZ2UgeyBXVEZNb3ZlKCpzdGFydCksIFdURk1vdmUoKmVuZCkg
fSkubGVuZ3RoKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChjb250ZXh0QmVmb3JlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpCisgICAgICAg
ICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gV2ViQ29yZTo6cGxhaW5UZXh0KHsgV1RGTW92
ZSgqc3RhcnQpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydCB9KS5sZW5ndGgoKTsKICAgICAgICAg
Y29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdlKCpjb21wb3NpdGlvblJh
bmdlLCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggOGQ2
YzQ4NzkxZDQ3ZGY5NGVmOWEyMTM4YjM4MjM1NDAwMzViYTA0Yy4uZWNjZmI1MDFlNmVjMzIxODc2
YTA2YTQwNDJmZGI5M2MxODA2ZDhhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9p
b3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTE0MCw3ICsxNDAsNyBAQCAt
IChDR1JlY3QpY2xvc2VzdENhcmV0UmVjdEluTWFya2VkVGV4dFJhbmdlRm9yUG9pbnQ6KENHUG9p
bnQpcG9pbnQKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsKIAotICAgIGF1dG8gbWFy
a2VkVGV4dFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKTsK
KyAgICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJh
bmdlKCk7CiAgICAgYXV0byBtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24gPSBtYXJrZWRUZXh0UmFu
Z2UgPyBWaXNpYmxlU2VsZWN0aW9uKCptYXJrZWRUZXh0UmFuZ2UpIDogVmlzaWJsZVNlbGVjdGlv
bigpOwogCiAgICAgaWYgKCFtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24uaXNSYW5nZSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCmluZGV4IGEwYjZiNzk2YTNhODI3OWQ4
ODRjNjQ3MzAxNTM5MTM0NTA3MTYwZDguLmQwZDMwY2U5YTgxYjcxOGI5YWMyMjgwMzRlYjA1NzE1
OTllZGQ3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5n
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KQEAgLTMw
OSw0ICszMDksOSBAQCBET01SYW5nZSAqa2l0KFdlYkNvcmU6OlJhbmdlKiB2YWx1ZSkKICAgICBy
ZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOwogfQogCitET01SYW5nZSAqa2l0KGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGtpdChj
cmVhdGVMaXZlUmFuZ2UodmFsdWUpLmdldCgpKTsKK30KKwogI3VuZGVmIElNUEwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oCmluZGV4IGFmNTU5MzI3
MDkzMTY0NWJhNzJhZTFhMTk5MWFlZDkxNTA5ZGZjZDcuLmU2ODE5YTVmOGQ1ODhkMmU5YjY4N2Yw
ZDk3OWY2N2NiMjNhODlhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01SYW5nZUludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVJhbmdlSW50ZXJuYWwuaApAQCAtMjMsMTEgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5
L0RPTVJhbmdlLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFJhbmdlOwotfQotCiBX
ZWJDb3JlOjpSYW5nZSogY29yZShET01SYW5nZSAqKTsKIERPTVJhbmdlICpraXQoV2ViQ29yZTo6
UmFuZ2UqKTsKK0RPTVJhbmdlICpraXQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IGUxYjQyZWE2ZDJmYmVmZTNhMWVkZjExMzIyYzZk
NWU4YjMwM2ZmNDUuLjZmMDhmYWFhOTUzNWM0YWI5NzVmMjdiN2NiZjQyNTc2OTVmOGI0ZTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oCkBAIC02MywyNCArNjMsMjQgQEAgcHJpdmF0ZToKICAgICBib29sIHNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsOwogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWw7CiAKLSAgICBib29sIHNob3VsZERlbGV0
ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5n
ZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKIAotICAgIGJv
b2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBz
aG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJ
bnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRv
ckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5h
bDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGZy
b21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29u
c3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRp
bmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZElu
c2VydE5vZGUoV2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91
bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRv
UmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CiAK
LSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzKiwgV2Vi
Q29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2Vi
Q29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRBcHBseVN0eWxlKCkgZmluYWw7CiAKLSAgICBib29s
IHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6UmFu
Z2UqIHJhbmdlVG9CZVJlcGxhY2VkKSBmaW5hbDsKKyAgICBib29sIHNob3VsZE1vdmVSYW5nZUFm
dGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgY29uc3QgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkQmVnaW5F
ZGl0aW5nKCkgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9p
ZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsK
KyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZv
clJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywg
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZp
bmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFs
OwogCiAgICAgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpIGZpbmFs
OwogICAgIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgcmVxdWVzdERPTVBhc3RlQWNj
ZXNzKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNz
UmVzcG9uc2U6OkRlbmllZEZvckdlc3R1cmU7IH0KQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBjb25zdCBmaW5hbDsKICNl
bmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFn
bWVudCYsIFdlYkNvcmU6OlJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFsOwor
ICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBj
b25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSBmaW5h
bDsKICAgICAKICAgICBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9u
KFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgaWdub3Jl
V29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQppbmRleCA5YWIxYzI5ZDQ4Nzg3N2Q2ZTg1ODM5ZjlkNWY0Yzg5MDY5ODEyOWIyLi5iZDk1YTY2
NDhhMzAzMmMwNTdhOTgxZTA5NDY5MDgwZTg4MTA2MzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBA
IC0yMzQsMTAgKzIzNCw5IEBAIGludCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnKCkKIAogI2VuZGlmCiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVS
YW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFu
Z2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gW1tt
X3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAg
ICAgICAgc2hvdWxkRGVsZXRlRE9NUmFuZ2U6a2l0KHJhbmdlKV07CisgICAgcmV0dXJuIFtbbV93
ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3Vs
ZERlbGV0ZURPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTI1NiwxMSArMjU1LDExIEBAIGJvb2wgV2Vi
RWRpdG9yQ2xpZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdAog
ICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQ
cm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gbXV0YWJsZVN0eWxlKHN0eWxlLT5pc011dGFibGUoKSA/IFJlZjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPihzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSkgOiBz
dHlsZS0+bXV0YWJsZUNvcHkoKSk7CiAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVs
ZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3Ci0gICAgICAgIHNob3VsZEFwcGx5U3R5
bGU6a2l0KCZtdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSkgdG9FbGVt
ZW50c0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07CisgICAgICAgIHNob3VsZEFwcGx5U3R5bGU6a2l0
KCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpCisgICAg
ICAgIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCiBzdGF0aWMgdm9pZCB1
cGRhdGVGb250UGFuZWwoV2ViVmlldyAqd2ViVmlldykKQEAgLTI3OSwzMyArMjc4LDI5IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBseVN0eWxlKCkKICAgICB1cGRhdGVGb250UGFuZWwo
bV93ZWJWaWV3KTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFm
dGVyRGVsZXRlKFJhbmdlKiByYW5nZSwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkKQorYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkKQogewogICAg
IHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1f
d2ViVmlldwogICAgICAgICBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZTpraXQocmFuZ2UpIHJl
cGxhY2luZ1JhbmdlOmtpdChyYW5nZVRvQmVSZXBsYWNlZCldOwogfQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewot
ICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3
Om1fd2ViVmlldwotICAgICAgICBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5n
ZSldOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGlu
Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRCZWdpbkVkaXRpbmdJ
bkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
RW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5k
RWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIFtbbV93ZWJW
aWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5n
ZSldOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3
ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsK
IH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCitib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24p
CiB7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2ViVmlldzsKICAgICByZXR1cm4gW1t3ZWJW
aWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNl
cnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6a2l0KHJhbmdlKSBnaXZlbkFjdGlvbjpraXQo
YWN0aW9uKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgc2VsZWN0
aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZy
b21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkg
c2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7CiAgICAgcmV0dXJuIFtt
X3dlYlZpZXcgX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6a2l0KGZyb21SYW5nZSkgdG9E
T01SYW5nZTpraXQodG9SYW5nZSkgYWZmaW5pdHk6a2l0KHNlbGVjdGlvbkFmZmluaXR5KSBzdGls
bFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiB9CkBAIC00MTEsMTIgKzQwNiwxMiBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQogI2VuZGlm
CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoV2ViQ29yZTo6UmFuZ2UqKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKQogewogICAgIC8v
IE5vdCBpbXBsZW1lbnRlZCBXZWJLaXQsIG9ubHkgV2ViS2l0Mi4KIH0KIAotdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2Uq
LCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpn
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKIHsKICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgV2Vi
S2l0LCBvbmx5IFdlYktpdDIuCiB9CkBAIC01NzcsOSArNTcyLDkgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCiAKICNlbmRpZiAvLyBV
U0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGRJbnNlcnROb2RlKE5vZGUgKm5vZGUsIFJhbmdlKiByZXBsYWNpbmdSYW5nZSwgRWRpdG9y
SW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZElu
c2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByZXBsYWNp
bmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQogeyAKLSAgICByZXR1cm4g
W1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcg
c2hvdWxkSW5zZXJ0Tm9kZTpraXQobm9kZSkgcmVwbGFjaW5nRE9NUmFuZ2U6a2l0KHJlcGxhY2lu
Z1JhbmdlKSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilnaXZlbkFjdGlvbl07Cisg
ICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6a2l0KCZub2RlKSByZXBsYWNpbmdET01SYW5nZTpr
aXQocmVwbGFjaW5nUmFuZ2UpIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWdpdmVu
QWN0aW9uXTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb09yUmVkb1N0
ZXAoVW5kb1N0ZXAmIHN0ZXAsIGJvb2wgaXNSZWRvKQpAQCAtODU2LDEwICs4NTEsMTAgQEAgYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1zVHdvU3RlcFBhc3RlKFdlYkNvcmU6OkRvY3VtZW50
RnJhZ21lbnQqIGZyYWdtZW50KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwg
UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50Ojpw
ZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFNpbXBs
ZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7CiAgICAgaWYgKFtbbV93ZWJWaWV3
IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBl
cmZvcm1Ud29TdGVwRHJvcDphdERlc3RpbmF0aW9uOmlzTW92ZTopXSkKLSAgICAgICAgcmV0dXJu
IFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBwZXJmb3JtVHdvU3RlcERyb3A6
a2l0KCZmcmFnbWVudCkgYXREZXN0aW5hdGlvbjpraXQoJmRlc3RpbmF0aW9uKSBpc01vdmU6aXNN
b3ZlXTsKKyAgICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVy
XSBwZXJmb3JtVHdvU3RlcERyb3A6a2l0KCZmcmFnbWVudCkgYXREZXN0aW5hdGlvbjpraXQoZGVz
dGluYXRpb24pIGlzTW92ZTppc01vdmVdOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtODg3
LDcgKzg4Miw3IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpCiAKICNpZiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1
bWVudEZyYWdtZW50JiwgUmFuZ2UmLCBib29sKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZv
cm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29s
KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCmluZGV4IDRjNTRjNDQ0YWNmMTc4MTkwMmQ2NThhOTE1YTQ2Mjg4M2Ji
NTIxYTAuLjc2M2M3NzdjZTJiMDI2NmQ0MDkzZGFmY2FjMmE2MzYyNWYxYmJkNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNzIwLDEzICs3MjAs
MTUgQEAgLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpQb3Np
dGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGkKIAogLSAoTlNSZWN0KV9maXJzdFJlY3RGb3JE
T01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJh
bWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKGNvcmUocmFuZ2UpKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKyAgICByZXR1cm4gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKm1ha2VSYW5nZShjb3JlKHJhbmdl
KSkpOwogfQogCiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKily
YW5nZQogewogICAgIGJvb2wgaW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8gRklYTUU6IGdldCB2aWEg
Zmlyc3RSZWN0Rm9yUmFuZ2UoKS4KLSAgICBOU1JlY3QgcmFuZ2VSZWN0ID0gW3NlbGYgX2ZpcnN0
UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsgICAgCisgICAgTlNSZWN0IHJhbmdlUmVjdCA9IFtzZWxm
IF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07CiAgICAgYXV0byogc3RhcnROb2RlID0gY29y
ZShbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsKICAgICAgICAgCiAgICAgaWYgKHN0YXJ0Tm9kZSAm
JiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKQEAgLTc4NCw3ICs3ODYsNyBAQCAtIChET01SYW5n
ZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAg
ICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlv
bi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAjZW5kaWYK
IApAQCAtODUzLDcgKzg1NSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRET01SYW5nZVRvTlNSYW5n
ZTooRE9NUmFuZ2UgKilyYW5nZQogCiAtIChET01SYW5nZSAqKV9tYXJrRE9NUmFuZ2UKIHsKLSAg
ICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3Io
KS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoX3By
aXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwog
fQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3Vw
U3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmluZyAq
KWJhc2VVUkxTdHJpbmcKQEAgLTExMDYsMTIgKzExMDgsMTIgQEAgLSAoRE9NUmFuZ2UgKilfc2Vs
ZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNlY29uZFBvaW50OihDR1Bv
aW50KXMKIHsKICAgICBhdXRvIGZpcnN0UG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQ6Zmlyc3RdOwogICAgIGF1dG8gc2Vjb25kUG9zaXRpb24gPSBbc2VsZiBfdmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0aW9u
KS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0aW9uKS50b05vcm1hbGl6
ZWRSYW5nZSgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JQb2ludDoo
Q0dQb2ludClwb2ludAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoV2ViQ29yZTo6Vmlz
aWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKS50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCkBA
IC0xNDU0LDcgKzE0NTYsNyBAQCAtIChCT09MKWlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJs
ZWQKIAogLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIGtpdChj
cmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKHZvaWQpc2V0
U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25B
ZmZpbml0eSlhZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZwpAQCAtMTQ5Niw3
ICsxNDk4LDcgQEAgLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKillbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRT
ZWxlY3Rpb24KIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5z
ZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkp
OworICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpOwogfQogCiAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRv
V29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgpAQCAtMTUyNiw3ICsxNTI4LDcgQEAgLSAodW5p
Y2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICopd29yZFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZl
UmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkud29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigp
LndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsKIH0KIAogLSAoTlNTdHJpbmcg
Kil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQpAQCAtMTU4OSwxMiArMTU5MSwxMiBAQCAt
IChCT09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeU1vdmlu
Z0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxp
dmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVj
dGlvbihhbW91bnQpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rp
b24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKTsKIH0KIAogLSAoRE9N
UmFuZ2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbjooaW50KWFtb3VudAogewot
ICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJh
bmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2Vs
ZWN0aW9uKGFtb3VudCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFuZ2UpcmFu
Z2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAtMTYxOCw3ICsxNjIwLDcgQEAg
LSAoRE9NUmFuZ2UgKiltYXJrZWRUZXh0RE9NUmFuZ2UKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIGtpdChmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRp
b25SYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGZyYW1lLT5lZGl0b3IoKS5jb21wb3Np
dGlvblJhbmdlKCkpOwogfQogCiAtICh2b2lkKXNldE1hcmtlZFRleHQ6KE5TU3RyaW5nICopdGV4
dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCAxMTFjZjhiZGMyOWRjNjFlMjhm
ODIyZTk1N2I5Mzg4MmE0Mjc5OWE1Li40ZTNhMDhiMmRjNWQwNGJlODBmMTFjMjljYjIyOTkxMGI0
ZTg4ZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KQEAgLTEzMzIsNyArMTMzMiw3IEBAIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zCiAtIChE
T01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKSA6IG5pbDsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgOiBuaWw7CiB9CiAKICNp
ZiBQTEFURk9STShNQUMpCkBAIC02MzQ2LDcgKzYzNDYsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICBET01SYW5nZSAqcmFuZ2UgPSBbZnJhbWUgX2NvbnZlcnRO
U1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07CiAgICAgaWYgKCFyYW5nZSkgewogICAgICAgICBM
T0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkgLT4gKDAs
IDAsIDAsIDApIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxlbmd0aCk7Ci0gICAgICAg
IHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gTlNaZXJvUmVj
dDsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwpAQCAt
NzA3NSw3ICs3MDc1LDcgQEAgLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0
cmluZyAqKXN0cmluZyBpbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmcKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3Io
KS5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY29yZShyYW5nZSksIGNvcmVPcHRpb25zKG9w
dGlvbnMpLCBsaW1pdCwgbWFya01hdGNoZXMsIDApOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVk
aXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBtYWtlUmFuZ2UoY29yZShyYW5nZSkp
LCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVzLCAwKTsKIH0KIAogLSAo
dm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0
aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tCmluZGV4IDFlM2I3OWQwMzgxYWU5OWQ2Y2EzNGVjYTIy
ZjU2MzlkNDhhM2E5NGUuLjgwMWJlZmVjNzZkMDk2ZjkzZjBmNDhkNjNjZjg3ZGY5NWQ1NTFiYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBs
ZXRpb25Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCkBAIC0xNzYsNyArMTc2LDcgQEAgLSAodm9p
ZClkb0NvbXBsZXRpb24KIAogICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KICAg
ICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVdOwotICAgICAgICBET01S
YW5nZSAqc2VsZWN0aW9uID0ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKGZyYW1lKS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgICAgICBE
T01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9
IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbkV4dGVuZAogICAgICAgICAgICAgZGlyZWN0aW9uOlNlbGVjdGlvbkRpcmVjdGlv
bjo6QmFja3dhcmQgZ3JhbnVsYXJpdHk6VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHld
OwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdlXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9y
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0K
aW5kZXggOGM3ZTdlZTAwZjdmMzE1MGQ4OTc3NDNhMDcyNDA5NmIzODgyMTdjZS4uOTNiODM0Nzdm
YzhhNDJhZDNmNzRkMzY5ZTgxNzk0YmJlZmRhMDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KQEAgLTk1LDcgKzk1LDcgQEAg
LSAoRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UKICAgICBhdXRvJiB0ZXh0SXRlcmF0b3IgPSAqX3By
aXZhdGUtPl90ZXh0SXRlcmF0b3I7CiAgICAgaWYgKHRleHRJdGVyYXRvci5hdEVuZCgpKQogICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHRleHRJdGVy
YXRvci5yYW5nZSgpKS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdCh0ZXh0SXRlcmF0b3IucmFuZ2Uo
KSk7CiB9CiAKIC8vIEZJWE1FOiBDb25zaWRlciBkZXByZWNhdGluZyB0aGlzIG1ldGhvZCBhbmQg
Y3JlYXRpbmcgb25lIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBjb3B5aW5nIDgtYml0IGNoYXJhY3Rl
cnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggODVk
Njk0M2UzNmJhZTYzN2EwZTA5YjU0NzlkYWIzNWIzOWFhN2NjYy4uMDczM2Y1ZTA0NDRmNzlhZGQ3
ZGI5N2NkYTE1ZDY5NzgyOGI2OTcyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQpAQCAtNDU5NCw3ICs0NTk0LDcgQEAgLSAoV2ViVGV4dEl0ZXJhdG9yICop
dGV4dEl0ZXJhdG9yRm9yUmVjdDooTlNSZWN0KXJlY3QKICAgICBhdXRvIGludFJlY3QgPSBXZWJD
b3JlOjplbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwogICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uKGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVj
dC5taW5YTWluWUNvcm5lcigpKSwKICAgICAgICAgY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25G
b3JQb2ludChpbnRSZWN0Lm1heFhNYXhZQ29ybmVyKCkpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtb
W1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQocmFuZ2UpXSBhdXRvcmVs
ZWFzZV07CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTg0MTcsNyArODQxNyw3
IEBAIC0gKERPTVJhbmdlICopZWRpdGFibGVET01SYW5nZUZvclBvaW50OihOU1BvaW50KXBvaW50
CiAgICAgYXV0byogcGFnZSA9IGNvcmUoc2VsZik7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQocGFnZS0+bWFpbkZyYW1lKCkuZWRpdG9yKCkucmFu
Z2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludChbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9W
aWV3Om5pbF0pKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChwYWdlLT5tYWluRnJhbWUoKS5lZGl0
b3IoKS5yYW5nZUZvclBvaW50KFdlYkNvcmU6OkludFBvaW50KFtzZWxmIGNvbnZlcnRQb2ludDpw
b2ludCB0b1ZpZXc6bmlsXSkpKTsKIH0KIAogLSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilw
cm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmlu
aXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWcKQEAgLTg0NjUsNyArODQ2NSw3IEBAIC0gKERP
TVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICBy
ZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSk7CiB9CiAKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmNwcCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAppbmRleCBiNjI2NDM3
M2Q2NWM4OTY1OWUwNzU0OTIzMGEyYzExMjk4ZWUyYjE5Li4wZmJhODgwODViYTY5NDk1MzY5OTc1
Y2QwYjkxNWM0NWEyNmJlM2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9E
T01Db3JlQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9NQ29yZUNs
YXNzZXMuY3BwCkBAIC0xNjE1LDYgKzE2MTUsMTEgQEAgSURPTVJhbmdlKiBET01SYW5nZTo6Y3Jl
YXRlSW5zdGFuY2UoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogICAgIHJldHVybiBuZXdSYW5nZTsK
IH0KIAorSURPTVJhbmdlKiBET01SYW5nZTo6Y3JlYXRlSW5zdGFuY2UoY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSW5zdGFu
Y2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSk7Cit9CisKIEhSRVNVTFQgRE9NUmFuZ2U6OnN0YXJ0
Q29udGFpbmVyKF9DT01fT3V0cHRyX29wdF8gSURPTU5vZGUqKiBub2RlKQogewogICAgIGlmICgh
bm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2Vz
LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5oCmluZGV4IGFjNjQz
YjZmY2Y0M2FlZWNkMTJiMzdlOTkwMWQ3YjMyY2QwMjljODkuLjU2ZjhjZjA3Y2Y4ZmZiODI1ZWM1
MzNiMmFjM2RhNjQ5ZGE0NDE5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0RPTUNvcmVDbGFzc2VzLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9NQ29yZUNs
YXNzZXMuaApAQCAtMzcsOSArMzcsOSBAQCBjbGFzcyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7CiBj
bGFzcyBSYW5nZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIH0K
IAotCiBjbGFzcyBET01PYmplY3QgOiBwdWJsaWMgV2ViU2NyaXB0T2JqZWN0LCBwdWJsaWMgSURP
TU9iamVjdCB7CiBwdWJsaWM6CiAgICAgLy8gSVVua25vd24KQEAgLTgyMyw2ICs4MjMsNyBAQCBw
cm90ZWN0ZWQ6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgSURPTVJhbmdlKiBjcmVhdGVJbnN0YW5j
ZShXZWJDb3JlOjpSYW5nZSopOworICAgIHN0YXRpYyBJRE9NUmFuZ2UqIGNyZWF0ZUluc3RhbmNl
KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpOwogCiBwdWJsaWM6CiAgICAg
Ly8gSVVua25vd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IGVmZWRhNDRhOTgxOTgwOTVkMDE3
YTA5MGJmYzdhYTdlODcyOGRkNzAuLjRhMWU2ODVlZTI0NGFlNmI1NTQ1ODkwNmU0MzZhNWNjNzA1
OTFkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIGludCBXZWJF
ZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKICAgICByZXR1cm4gMDsKIH0K
IAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5n
ZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0
IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBDT01QdHI8SVdlYkVkaXRpbmdE
ZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0ZSgm
ZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC0yMDAsNyArMjAwLDcgQEAgYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiAgICAgcmV0dXJu
IHNob3VsZEJlZ2luOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGlu
ZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhj
b25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0
aW5nRGVsZWdhdGU+IGVkOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdh
dGUoJmVkKSkgfHwgIWVkLmdldCgpKQpAQCAtMjQwLDEyICsyNDAsMTAgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oRnJhbWUqKQogCiB2b2lkIFdlYkVk
aXRvckNsaWVudDo6ZGlzY2FyZGVkQ29tcG9zaXRpb24oRnJhbWUqKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjYW5jZWxlZENvbXBvc2l0aW9u
KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
ZGlkRW5kRWRpdGluZygpCkBAIC0yNTcsMjAgKzI1NSwxOCBAQCB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6ZGlkRW5kRWRpdGluZygpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3JlOjpS
YW5nZSopCit2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiA+JikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpn
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiA+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVu
dDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYg
cmFuZ2UpCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGVkOwogICAgIGlmIChG
QUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdhdGUoJmVkKSkgfHwgIWVkLmdldCgpKQpAQCAt
MzAwLDcgKzI5Niw3IEBAIHN0YXRpYyBXZWJWaWV3SW5zZXJ0QWN0aW9uIGtpdChFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKQogICAgIHJldHVybiBXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQ7CiB9
CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUqIG5vZGUsIFJh
bmdlKiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQorYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0
QWN0aW9uIGdpdmVuQWN0aW9uKQogeyAKICAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4g
ZWRpdGluZ0RlbGVnYXRlOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdh
dGUoJmVkaXRpbmdEZWxlZ2F0ZSkpIHx8ICFlZGl0aW5nRGVsZWdhdGUuZ2V0KCkpCkBAIC0zMTAs
NyArMzA2LDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSog
bm9kZSwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3IKICAgICBpZiAoIWluc2VydGluZ0RP
TVJhbmdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIENPTVB0cjxJRE9NTm9kZT4gaW5z
ZXJ0RE9NTm9kZShBZG9wdENPTSwgRE9NTm9kZTo6Y3JlYXRlSW5zdGFuY2Uobm9kZSkpOworICAg
IENPTVB0cjxJRE9NTm9kZT4gaW5zZXJ0RE9NTm9kZShBZG9wdENPTSwgRE9NTm9kZTo6Y3JlYXRl
SW5zdGFuY2UoJm5vZGUpKTsKICAgICBpZiAoIWluc2VydERPTU5vZGUpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCkBAIC0zMjQsNyArMzIwLDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEluc2VydE5vZGUoTm9kZSogbm9kZSwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3IKICAg
ICByZXR1cm4gc2hvdWxkSW5zZXJ0OwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
SW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0ciwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0
b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
SW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+JiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9u
KQogewogICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZGl0aW5nRGVsZWdhdGU7CiAg
ICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0ZSgmZWRpdGluZ0RlbGVnYXRl
KSkgfHwgIWVkaXRpbmdEZWxlZ2F0ZS5nZXQoKSkKQEAgLTM0Miw3ICszMzgsNyBAQCBib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0ciwgUmFuZ2Uq
IGluc2VydGluZ1JhbmdlLAogICAgIHJldHVybiBzaG91bGRJbnNlcnQ7CiB9CiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBj
dXJyZW50UmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiBwcm9wb3NlZFJhbmdlLCBXZWJDb3JlOjpFQWZm
aW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgZmxhZykKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiYgY3VycmVudFJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mIHByb3Bvc2VkUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBzZWxlY3Rpb25BZmZpbml0eSwg
Ym9vbCBmbGFnKQogewogICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAgICBp
ZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkK
QEAgLTM1OCwyMCArMzU0LDE3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBjdXJyZW50UmFuZ2UsIFdlCiAgICAgcmV0dXJu
IHNob3VsZENoYW5nZTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5
bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQXBwbHlTdHlsZSgpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVy
RGVsZXRlKFJhbmdlKiwgUmFuZ2UqKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVS
YW5nZUFmdGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggNzdmNjQzNmU3YjU0ODBhZjA0YzQ4NWI4MGI1
NDA4OTMwMzE1OTE2Mi4uYjRjYWQwMDFmYTMzNjU0NjE4ZDc2ZWFmNjhiOTU4ZWI0ZjQ5ZDM1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmgKQEAgLTQ3LDE1ICs0NywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQg
dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKSBmaW5hbDsKICAgICBpbnQgc3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKSBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdl
YkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6
OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdURjo6U3Ry
aW5nJiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFs
OworICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdl
JikgZmluYWw7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBs
ZVJhbmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdURjo6U3Ry
aW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRp
dG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgZmlu
YWw7CiAgICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdp
bGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKSBmaW5hbDsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KCkgZmluYWw7Ci0gICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNv
cmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIHZv
aWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogCiAgICAgdm9p
ZCBkaWRFbmRVc2VyVHJpZ2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpIGZpbmFsIHsgfQogICAgIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgZmluYWw7CkBAIC02NSwxMiArNjUsMTIgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRpc2NhcmRlZENvbXBvc2l0aW9uKFdlYkNvcmU6OkZyYW1lKikg
ZmluYWw7CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZpbmFsIHsgfQogCi0gICAg
Ym9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wg
c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jikg
ZmluYWw7CiAKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSosIFdlYkNv
cmU6OlJhbmdlKiByZXBsYWNpbmdSYW5nZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBm
aW5hbDsKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVz
KiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2Vi
Q29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmVwbGFj
aW5nUmFuZ2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkQXBwbHlT
dHlsZSgpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29y
ZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkTW92ZVJh
bmdlQWZ0ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBjb25zdCBXZWJDb3Jl
OjpTaW1wbGVSYW5nZSYpIGZpbmFsOwogCiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQoKSBmaW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgp
IGNvbnN0IGZpbmFsOwpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdW5kbygp
IGZpbmFsOwogICAgIHZvaWQgcmVkbygpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5n
ZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5h
bDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0
aW5nKSBmaW5hbDsKICAgICB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpF
bGVtZW50KikgZmluYWw7CiAgICAgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKFdlYkNvcmU6
OkVsZW1lbnQqKSBmaW5hbDsKICAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZChXZWJD
b3JlOjpFbGVtZW50KikgZmluYWw7CkBAIC0xMTUsNyArMTE1LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgZmluYWw7CiAgICAgdm9pZCBzZXRJbnB1dE1l
dGhvZFN0YXRlKFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKICAgICB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJikgZmluYWwgeyB9Ci0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERy
b3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiwgYm9vbCkgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3Jl
OjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBib29sKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNw
b25zZSByZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4g
V2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZTo6RGVuaWVkRm9yR2VzdHVyZTsgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IDhjMTdiNWVmZTc5YzNhOWQ1NmFjYWIx
YThlNzAzNDA1Y2QwYzg2MzYuLmFiYzRhZWUxYWM3YmVlOThjMjMxZTQ3OTFhMWE0OWNmMGM2ZTRi
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC02MjAwLDcgKzYyMDAsNyBA
QCB2b2lkIFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3coRnJhbWUqIHRhcmdldEZyYW1l
LCBISU1DIGhJbnB1dENvbnRleHQpCiB7CiAgICAgSW50UmVjdCBjYXJldDsKICAgICBpZiAoYXV0
byByYW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKQotICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJl
Y3RGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSk7CisgICAgICAgIGNhcmV0
ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpyYW5nZSk7CiAgICAg
Y2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKICAg
ICBjYXJldC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKIApAQCAtNjQ1NiwxNCArNjQ1Niwx
NCBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihGcmFtZSogdGFy
Z2V0RnJhbWUsIElNRUNIQVJQT1NJVElPTiogYwogICAgIGlmIChjaGFyUG9zLT5kd0NoYXJQb3Mg
JiYgIXRhcmdldEZyYW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBJbnRSZWN0IGNhcmV0OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgIGlmICh0YXJnZXRGcmFtZS0+ZWRpdG9y
KCkuaGFzQ29tcG9zaXRpb24oKSkKICAgICAgICAgcmFuZ2UgPSB0YXJnZXRGcmFtZS0+ZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGVsc2UKLSAgICAgICAgcmFuZ2UgPSBjcmVhdGVM
aXZlUmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOworICAgICAgICByYW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewotICAgICAgICBy
YW5nZS0+c2V0U3RhcnQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNl
dCgpICsgY2hhclBvcy0+ZHdDaGFyUG9zKTsKLSAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+
ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOworICAgICAgICByYW5nZS0+
c3RhcnQub2Zmc2V0ICs9IGNoYXJQb3MtPmR3Q2hhclBvczsKKyAgICAgICAgY2FyZXQgPSB0YXJn
ZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UpOwogICAgIH0KICAgICBj
YXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOwogICAg
IGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtNzc2NCwxOCArNzc2NCwxNSBA
QCBIUkVTVUxUIFdlYlZpZXc6OmNvbXBvc2l0aW9uUmFuZ2VGb3JUZXN0aW5nKF9PdXRfIFVJTlQq
IHN0YXJ0UG9zaXRpb24sIF9PdXRfIFVJTgogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2FuRWRp
dCgpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLQorICAgIGF1dG8gcmFuZ2UgPSBm
cmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuIEVfRkFJTDsKIAotICAgICpzdGFydFBvc2l0aW9uID0gcmFuZ2UtPnN0YXJ0T2Zm
c2V0KCk7Ci0gICAgKmxlbmd0aCA9IHJhbmdlLT5zdGFydE9mZnNldCgpICsgcmFuZ2UtPmVuZE9m
ZnNldCgpOwotCisgICAgKnN0YXJ0UG9zaXRpb24gPSByYW5nZS0+c3RhcnQub2Zmc2V0OworICAg
ICpsZW5ndGggPSByYW5nZS0+c3RhcnQub2Zmc2V0ICsgcmFuZ2UtPmVuZC5vZmZzZXQ7CiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAKLQogSFJFU1VMVCBXZWJWaWV3OjpmaXJzdFJlY3RGb3JDaGFyYWN0
ZXJSYW5nZUZvclRlc3RpbmcoVUlOVCBsb2NhdGlvbiwgVUlOVCBsZW5ndGgsIF9PdXRfIFJFQ1Qq
IHJlc3VsdFJlY3QpCiB7CiAgICAgaWYgKCFyZXN1bHRSZWN0KQpAQCAtNzc5MCwxMiArNzc4Nyw4
IEBAIEhSRVNVTFQgV2ViVmlldzo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VGb3JUZXN0aW5n
KFVJTlQgbG9jYXRpb24sIFVJTlQgbGVuZ3RoCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAg
ICBhdXRvIGNoYXJhY3RlclJhbmdlID0gQ2hhcmFjdGVyUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFj
dGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgY2hhcmFj
dGVyUmFuZ2UpKTsKLQotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0K
LSAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5n
ZS5nZXQoKSk7CisgICAgYXV0byByYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCBjaGFyYWN0ZXJSYW5nZSk7CisgICAg
SW50UmVjdCByZWN0ID0gZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UpOwog
ICAgIEludFJlY3QgcmVzdWx0SW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhyZWN0KTsKIAogICAgIHJlc3VsdEludFJlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CkBAIC03ODIxLDcgKzc4MTQsNyBAQCBIUkVTVUxUIFdlYlZpZXc6OnNlbGVjdGVkUmFuZ2VGb3JU
ZXN0aW5nKF9PdXRfIFVJTlQqIGxvY2F0aW9uLCBfT3V0XyBVSU5UKiBsZW5ndAogCiAgICAgRnJh
bWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJh
bmdlKCk7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404680</attachid>
            <date>2020-07-19 13:06:22 -0700</date>
            <delta_ts>2020-07-19 14:19:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200719130621.patch</filename>
            <type>text/plain</type>
            <size>171089</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM3Y2Q0YTRjOGM2MGJj
NGY1Yjk5MWRkMjhiZDAyMTk4Y2Y0MzJhOC4uNmRjYjVmODk1NjNlOTEyZTZlZjc1YTc4ZjVhYmVj
N2ZjMGEzMTdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTE4ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYnVpbGQgd2FybmluZ3MgaW4g
dGhlIFdlYlhSIGJhY2tlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDZjODk2N2UyYjdjMjc2ZjE3MjBmMzdiOGRl
NTczM2RmYjcxMmMyMWIuLjYwMWU1MTIwMjY4MThiMTI4YzA0MmZjMWQ5Y2VlZTc0ZTQ2NzkxNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcApAQCAtMzA2LDggKzMwNiw4IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzCiAg
ICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2UoKm1p
c3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
IGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91
cykgewogICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdpbigpOyByaXQg
IT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKQEAgLTMxNSw4ICszMTUsOCBAQCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdS
YW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRl
TGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICAg
ICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSktPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxs
aW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwMSwxNSArNjAxLDE0IEBAIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2Vz
dFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nl
c3RTdHJpbmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmlu
Z3MpIHsKLSAgICAgICAgaWYgKGF1dG8gc2VhcmNoU3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VS
YW5nZSkucHRyKCksIGZpbmRPcHRpb25zKSkgewotICAgICAgICAgICAgYXV0byBmb3VuZFN0cmlu
Z1JhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpzZWFyY2hTdHJpbmdSYW5nZSk7CisgICAgICAgIGlm
IChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmco
c2VhcmNoU3RyaW5nLCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CiAgICAgICAgICAg
ICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5n
UmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdS
YW5nZSA9ICpzZWFyY2hTdHJpbmdSYW5nZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGluZyByYW5nZSBl
ZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gcmFu
Z2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwgdXNlIHRoZSBs
ZWFkaW5nIHJhbmdlIGVkZ2VzLgogICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nlc3RTdHJpbmdQ
b3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCA6IGNs
b3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1JhbmdlLmVuZCA6IGZv
dW5kU3RyaW5nUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJpbmdQ
b3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBzZWFyY2hTdHJpbmdSYW5nZS0+ZW5kIDogc2Vh
cmNoU3RyaW5nUmFuZ2UtPnN0YXJ0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGF1dG8gY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLm9mZnNl
dDsKICAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0ID0gZm91bmRTdHJp
bmdQb3NpdGlvbi5vZmZzZXQ7CkBAIC02MTgsNyArNjE3LDcgQEAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGly
ZWN0aW8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQ
b3NpdGlvbk9mZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRT
ZWFyY2ggJiYgcmVzdWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkp
Ci0gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5nUmFu
Z2U7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpzZWFyY2hTdHJp
bmdSYW5nZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0
YzU0ZDFhYWQzMWRkMC4uZjczNGYyNzU2MThlZWEyNDNkZjE1MjE5NTAwZmQ3MmE5NTI1MjdjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY5Miw3ICs2OTIs
NyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRleHRP
cGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogCiAgICAgaWYgKFttYXJrZXJSYW5nZXMgaXNL
aW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKSB7CiAgICAgICAgIG9wZXJhdGlvbi50ZXh0UmFu
Z2VzID0gbWFrZVZlY3RvcihtYXJrZXJSYW5nZXMsIFt3cmFwcGVyXSAoaWQgbWFya2VyUmFuZ2Up
IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoW3dyYXBwZXIgcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUmFu
Z2UoW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKICAgICAg
ICAgfSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhNjI2OTRkZTFiODZj
ZmMxYjMzY2RmMTY3MDJiMGU2NTQxMzhhZjRhLi40ODkyN2MzNmVmYWE3YzE5ODJjZTY3ZjkyMGRj
YWY2NGEzMDQ1MTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBA
QCBzdGF0aWMgYm9vbCBhY2NlcHRzRWRpdGluZ0ZvY3VzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiAgICAgaWYgKCFmcmFtZSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2VPZkNvbnRlbnRz
KCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVk
aXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9CiAKIHN0YXRp
YyBib29sIGNhbkFjY2Vzc0FuY2VzdG9yKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBhY3RpdmVTZWN1
cml0eU9yaWdpbiwgRnJhbWUqIHRhcmdldEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggOWI3
YTFhNjIxMjE5NWEyZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4uOWVhMTQ5ZDJmNTFkZTI0YzMz
NzE2MGI1M2FmN2MxZWRjZGM4OGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0xODMzLDI2ICsx
ODMzLDI2IEBAIEZsb2F0UmVjdCBSYW5nZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0
PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9uCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVj
dChDb29yZGluYXRlU3BhY2U6OkFic29sdXRlLCByZWN0T3B0aW9ucyk7CiB9CiAKLVNpbXBsZVJh
bmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCitTaW1wbGVSYW5nZSBtYWtl
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiB7IHsgcmFuZ2Uuc3RhcnRD
b250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSB9LCB7IHJhbmdlLmVuZENvbnRhaW5lcigp
LCByYW5nZS5lbmRPZmZzZXQoKSB9IH07CiB9CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBSZWY8UmFuZ2U+JiByYW5nZSkKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25zdCBS
ZWY8UmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLmdl
dCgpKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAotT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCitPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBtYWtlU2lt
cGxlUmFuZ2UoKnJhbmdlKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKCpyYW5nZSk7CiB9CiAKLU9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYg
cmFuZ2UpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5n
ZT4mIHJhbmdlKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkpOwor
ICAgIHJldHVybiBtYWtlUmFuZ2UocmFuZ2UuZ2V0KCkpOwogfQogCiBSZWY8UmFuZ2U+IGNyZWF0
ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IGE4
NjE5Y2I5NDYzNDM0ZThjZTgxZDJiODQ3YzMyNWEwMTIwN2UxMTAuLjkzNWJiZGE0N2I3NjEwNzkw
NzdjNDE2M2UxYzg5OTc0ODI1ZDk5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xNzYsMTAgKzE3Niwx
MCBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBX
RUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFu
Z2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNv
bnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYp
OwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKLU9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKLU9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOworU2lt
cGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJhbmdlJik7CitTaW1wbGVSYW5nZSBtYWtlUmFuZ2Uo
Y29uc3QgUmVmPFJhbmdlPiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IG1ha2VSYW5nZShjb25zdCBSYW5nZSopOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CiAKIFdFQkNPUkVfRVhQT1JU
IFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDRhOGQwMDRkZTkx
Mjg5YTM0YWYwYzE1MWIzNjljMzUzZGZhZGJjYzkuLjI2NWM0OTdiNjA4MjgzZGIxMWJlM2YwN2Y2
NGRlZDc1M2E2NDE1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtODIsNiAr
ODIsMjAgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7
ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OwogfQogCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBzdGFydCwgY29uc3QgT3B0aW9u
YWw8Qm91bmRhcnlQb2ludD4mIGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9
OworfQorCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+JiYgc3RhcnQsIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgZW5kKQoreworICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4geyB7IFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSB9IH07Cit9CisKIFNpbXBsZVJh
bmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewogICAgIHJl
dHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCmluZGV4IDcwZTdjNDI1MWNkZGYzMTdiNDlkOWFhMmRjNDJlNmQ0NTQ3YTc0ZGQuLjAzNzc4
MGE2MjI0OTFlNzU0ZDA1MGUyYWZhZDMwZTE0OTYyOThmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5oCkBAIC00NiwxMSArNDYsMTQgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKICAgICBXRUJD
T1JFX0VYUE9SVCBTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQmJik7
CiAKICAgICAvLyBDb252ZW5pZW5jZSBvdmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRpb24g
ZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZlIHJhbmdlcy4KLSAgICAvLyBGSVhNRTogT25jZSB0cmFu
c2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VTaW1w
bGVSYW5nZSBpbnN0ZWFkLgorICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zaXRpb24gaXMgb3Zlciwg
cmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVJhbmdlIGluc3RlYWQuCiAgICAg
V0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKICAgICBTaW1wbGVSYW5n
ZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiwgY29uc3Qg
T3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBtYWtlUmFuZ2UoT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiwgT3B0aW9uYWw8Qm91
bmRhcnlQb2ludD4mJik7CisKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGUy
ZTg5NGNiOTM3OWM0M2EzMzNiY2IzZjA4MzMyMDE0MzNkN2YyMzAuLjlhYzJlOWQ4NjE2ZGQ2YTNj
MTRhZjAzNTUyMmMzMGU2MGU3MTMxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjQzLDcgKzI0Myw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsK
ICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdv
cmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlw
ZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFu
Z2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBudWxscHRyKTsKKyAgICAg
ICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJl
cGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFj
ZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgV1RGOjpudWxsb3B0KTsKICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpA
QCAtNjUzLDcgKzY1Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlE
aWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0CiAjaWYgVVNFKERJQ1RB
VElPTl9BTFRFUk5BVElWRVMpCiAgICAgYXV0byYgZWRpdG9yID0gbV9kb2N1bWVudC5lZGl0b3Io
KTsKICAgICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYg
KCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5n
LCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAo
IXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcs
ICpzZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGZvciAoYXV0byogbWFya2VyIDogc2VsZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKCpzZWxlY3Rpb24sIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpKQogICAgICAgICByZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxMTJmOTdiMmEwYjY1NDYyNTQ2NjI4
ODI2N2U2MzNiZGJiZmZiNWYxLi44NzBjNGRiYjY4ZDM4MGY5YTFiODFhMGMwZTVmMTNhYTMyNzRh
NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKQEAgLTc0OSw5ICs3NDksOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
Om1lcmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxh
Y2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFkb2N1
bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5n
ZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UsIHJhbmdl
VG9CZVJlcGxhY2VkKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gbW92ZVBhcmFn
cmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQg
d291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawogICAgIC8vIHJlbW92YWxz
IHRoYXQgaXQgZG9lcyBjYXVzZSB0aGUgaW5zZXJ0aW9uIG9mICphbm90aGVyKiBwbGFjZWhvbGRl
ci4KICAgICBib29sIG5lZWRQbGFjZWhvbGRlciA9IG1fbmVlZFBsYWNlaG9sZGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDJkN2FlMmFhNmQ1NDExOTE4MDFjOGZjMDI0NDEwYmU2
YjM1MzEyOTcuLjNiNWY3ZGU3OTgzODhhMjczNDEzOWNjZjczMjYyMTkxMGY0NDhhMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTUwNywyMSArNTA3LDE4IEBAIGJvb2wgRWRpdG9y
OjpjYW5EZWxldGUoKSBjb25zdAogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHNl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpjYW5EZWxl
dGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0Citib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIE5vZGUmIHN0YXJ0Q29udGFp
bmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0g
cmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIAotICAgIGlmICghc3RhcnRDb250YWluZXIuaGFz
RWRpdGFibGVTdHlsZSgpIHx8ICFlbmRDb250YWluZXIuaGFzRWRpdGFibGVTdHlsZSgpKQorICAg
IGlmICghcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgIXJhbmdl
LmVuZC5jb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CisgICAgaWYgKHJhbmdl
LmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzb21ldGltZXMgYWxsb3cgZGVs
ZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJsZSByb290cywgbGlrZSB3aGVuIHRoZSBjYXJl
dCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCi0gICAgICAgIGlmIChwcmV2aW91cy5pc051bGwo
KSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSAhPSBzdGFydENvbnRhaW5lci5yb290RWRpdGFibGVFbGVtZW50KCkpCisg
ICAgICAgIGF1dG8gcHJldmlvdXMgPSBWaXNpYmxlUG9zaXRpb24geyBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNIH0ucHJldmlvdXMoKTsKKyAgICAg
ICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHJhbmdlLnN0YXJ0LmNvbnRh
aW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTgsNyArNTU1LDcgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKICAgICAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNob3VsZEFk
ZFRvS2lsbFJpbmcpCi0gICAgICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rl
ZFJhbmdlKCkuZ2V0KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAg
ICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxSaW5n
SW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgICAgICAgICBkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAgICAgICAgICAgICAvLyBJ
bXBsaWNpdGx5IGNhbGxzIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpLgog
ICAgICAgICB9CkBAIC02MjcsNyArNjI0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRl
eHRCeXBhc3NpbmdESFRNTCgpCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7CiAgICAgU3RyaW5nIHRleHQgPSByZWFk
UGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCk7Ci0gICAgaWYgKGNsaWVudCgpICYm
IGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9CiAKQEAgLTY1Miw3ICs2NDksNyBA
QCBib29sIEVkaXRvcjo6Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYg
cGFzdGVib2FyZCkKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCgpICYmIHBhc3RlYm9hcmQuY2FuU21hcnRSZXBsYWNlKCk7CiB9CiAKLWJv
b2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVu
dCwgUmFuZ2UqIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rp
b24pCitib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYg
ZnJhZ21lbnQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVwbGFjaW5nRE9NUmFuZ2Us
IEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsKICAgICBpZiAoIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjEsNyArNjU4LDcgQEAgYm9vbCBFZGl0b3I6OnNo
b3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVw
bGFjaW5nRE8KICAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oY2hpbGQpICYmIGZyYWdtZW50Lmxh
c3RDaGlsZCgpID09IGNoaWxkKQogICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJlcGxhY2luZ0RP
TVJhbmdlLCBnaXZlbkFjdGlvbik7CiAKLSAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dE5vZGUoJmZyYWdtZW50LCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24pOworICAgIHJl
dHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZShmcmFnbWVudCwgcmVwbGFjaW5nRE9NUmFu
Z2UsIGdpdmVuQWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50IHNl
bGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxlIG1h
dGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQpAQCAtNzI0LDI3ICs3MjEsMjEgQEAgdm9pZCBFZGl0
b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21l
bnQsIFNlbGVjdFJlcGwKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChj
b25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBT
bWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
OjpZZXMsIGVkaXRpbmdBY3Rpb24pOworICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQo
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNl
bGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0Fj
dGlvbik7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKK09wdGlv
bmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRl
UmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdl
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFy
YW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoIWNhbkRlbGV0ZVJhbmdlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShyYW5n
ZSk7CisgICAgcmV0dXJuIHJhbmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKCkgJiYgY2FuRGVsZXRl
UmFuZ2UoKnJhbmdlKSAmJiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uo
KnJhbmdlKTsKIH0KIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCkBAIC03NjMsNyArNzU0
LDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVu
dEtpbmQ6OkN1dCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25z
dAorYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9u
KSBjb25zdAogewogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxvYWRl
cigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTgwLDcg
Kzk3MSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYg
c3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgZGlzcGF0Y2hJbnB1dEV2
ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CiAgICAgCi1i
b29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBSYW5n
ZSogcmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3Bl
cnRpZXMmIHN0eWxlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7ICAgCiAgICAgcmV0dXJu
IGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCByYW5nZSk7CiB9CkBAIC0xMDExLDcg
KzEwMDIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5
bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKCpzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUoc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAyMiw3ICsxMDEzLDcgQEAgdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0
aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jv
bmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCi0g
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0
eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZSht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShz
dHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKSwgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JG
aWx0ZXJNb2RlKTsKQEAgLTEwMzMsNyArMTAyNCw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFn
cmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBl
CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKKyAgICBpZiAoY2xp
ZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoKnN0eWxlLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpKQogICAgICAgICBhcHBs
eVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIApAQCAtMTI2Nyw3ICsx
MjU4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChj
b25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAoIXNlbGVjdGlvbi5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3Vs
ZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91
bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBGSVhN
RTogU2hvdWxkIHBhc3MgZmFsc2UgdG8gdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoKSB0byBub3QgcmVtb3ZlIG1hcmtlcnMgaWYKQEAgLTEzMjYsNyArMTMxNyw3IEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hv
dWxkSW5zZXJ0VGV4dCgiXG4iX3MsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTEzNDYsNyArMTMzNyw3
IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2Fu
RWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIl9z
LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xNDA2LDEwICsxMzk3LDEwIEBAIHZvaWQgRWRpdG9yOjpw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmlzCiAKIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNw
ZWNpZmllciBhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3Rl
ZFJhbmdlKCk7Ci0gICAgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbi5n
ZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgd2lsbFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbik7CiAgICAgaWYgKGFjdGlvbiA9PSBD
dXRBY3Rpb24pIHsKLSAgICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0
KCkpKQorICAgICAgICBpZiAoIXNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbikpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcodHJ1ZSk7CkBAIC0xNDM0LDcgKzE0MjUsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1
dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgp
KTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5
T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRh
dGFUcmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFz
dGUoKS0+d3JpdGVTZWxlY3Rpb24oY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pLmdldCgpLCBj
YW5TbWFydENvcHlPckRlbGV0ZSgpLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBJbmNsdWRlSW1hZ2VB
bHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQpAQCAtMTUy
Niw3ICsxNTE3LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1EZWxldGUoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCkuZ2V0
KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4
dCk7CiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCkpOwogCiAgICAgLy8gY2xlYXIgdGhlICJzdGFydCBuZXcga2lsbCByaW5nIHNlcXVlbmNl
IiBzZXR0aW5nLCBiZWNhdXNlIGl0IHdhcyBzZXQgdG8gdHJ1ZQpAQCAtMTc4NCwxMiArMTc3NSwx
MiBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKIAog
I2VuZGlmCiAKLWJvb2wgRWRpdG9yOjpzaG91bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jv
b2wgRWRpdG9yOjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsK
ICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEVuZEVkaXRpbmcocmFuZ2Up
OwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jv
b2wgRWRpdG9yOjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
ewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQmVnaW5FZGl0aW5nKHJh
bmdlKTsKIH0KQEAgLTE4NDEsNyArMTgzMiw3IEBAIHZvaWQgRWRpdG9yOjpkaWRFbmRFZGl0aW5n
KCkKICAgICAgICAgY2xpZW50KCktPmRpZEVuZEVkaXRpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3I6
OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSogcmFuZ2UpCit2b2lkIEVkaXRv
cjo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+d2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHJhbmdlKTsKQEAgLTE5MjQsMTQgKzE5MTUsMTQg
QEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogCiB2b2lkIEVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24oKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb21wb3NpdGlvblJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IGNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgLy8gVGhlIGNvbXBvc2l0aW9uIGNhbiBzdGFydCBpbnNpZGUgYSBjb21w
b3NlZCBjaGFyYWN0ZXIgc2VxdWVuY2UsIHNvIHdlIGhhdmUgdG8gb3ZlcnJpZGUgY2hlY2tzLgog
ICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODE+
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gICAgc2VsZWN0aW9uLnNldFdpdGhv
dXRWYWxpZGF0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigp
KTsKKyAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24oY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlLT5zdGFydCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5n
ZS0+ZW5kKSk7CiAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uLCB7IH0pOwogfQogCkBAIC0yNDg1LDkgKzI0NzYsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0
YXJ0LAogICAgIGlmICghdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdU
eXBlOjpTcGVsbGluZykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVTZWxlY3Rpb24g
YWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBM
ZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25C
b3VuZGFyeSkpOworICAgIGF1dG8gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3Jk
U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFu
Z2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVM
aXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3Jk
UmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpKTsKKyAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFk
amFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UpOwog
I2Vsc2UKICNpZiAhVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQogICAgIFVOVVNFRF9Q
QVJBTShkb1JlcGxhY2VtZW50KTsKQEAgLTI1NzIsNyArMjU2Myw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsCiAgICAgICAgIC8vIGZ1bGwgc2VudGVuY2UgYXMgd2UgY2FuLCByZXNwZWN0aW5n
IGJvdW5kYXJpZXMgd2hlcmUgc3BlbGxjaGVja2luZyBpcyBkaXNhYmxlZC4KICAgICAgICAgZnVs
bFNlbnRlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMo
KmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIHNw
ZWxsQ2hlY2tpbmdSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAg
ICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09w
dGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFu
Z2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZnVsbFNlbnRlbmNlUmFuZ2Up
KTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0
Q2hlY2tpbmdPcHRpb25zLCBzcGVsbENoZWNraW5nUmFuZ2UsIGFkamFjZW50V29yZFJhbmdlLCBm
dWxsU2VudGVuY2VSYW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI1ODAsNyAr
MjU3MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlOwog
ICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOwogCiAgICAgLy8gQXV0b2NvcnJlY3Qg
dGhlIG1pc3NwZWxsZWQgd29yZC4KQEAgLTI1OTksNyArMjU5MCw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsCiAgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVk
aXRvcigpLnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgICAgIGlmICghbV9k
b2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1p
c3NwZWxsaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVw
bGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAKQEAgLTI2MTYsNyArMjYwNyw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAjZW5kaWYKIH0KICAgICAKLXZvaWQgRWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpCit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7CiAjaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHNlbGVjdGlvbiBh
bHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KQEAgLTI2NDQsOSArMjYzNSwxMSBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvbwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgVGV4
dENoZWNraW5nSGVscGVyIGNoZWNrZXIoKmNsaWVudCgpLCAqc2VhcmNoUmFuZ2UpOwotICAgIGlm
IChjaGVja1NwZWxsaW5nKQotICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGluZ3MoZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKLSAgICBlbHNlIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKSkKKyAgICBpZiAoY2hlY2tTcGVsbGluZykgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IGZp
cnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2U7CisgICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxs
aW5ncyhmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlKTsKKyAgICAgICAgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlID0gbWFrZVJhbmdlKGZpcnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2UpOworICAgIH0gZWxz
ZSBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIGNoZWNrZXIubWFya0Fs
bEJhZEdyYW1tYXIoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CkBAIC0y
Njc0LDE4ICsyNjY3LDE4IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5G
b2N1c2VkTm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOwogfQogCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
K3ZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7
CiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rpb24sIHRydWUsIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4g
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rp
b24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogfQogCi12b2lkIEVkaXRvcjo6bWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucywgUmVmUHRyPFJhbmdlPiYmIHNwZWxsaW5nUmFu
Z2UsIFJlZlB0cjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBSZWZQdHI8UmFu
Z2U+JiYgZ3JhbW1hclJhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2lu
Z09wdGlvbnMsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSkKIHsKICAgICBpZiAocGxhdGZv
cm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxMCw4
ICsyNzAzLDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAoIWlzU3BlbGxDaGVj
a2luZ0VuYWJsZWRGb3IoJmVkaXRhYmxlTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gcmFuZ2VUb0NoZWNrID0gc2hvdWxkTWFya0dyYW1tYXIgPyBncmFtbWFyUmFuZ2UucmVsZWFz
ZU5vbk51bGwoKSA6IHNwZWxsaW5nUmFuZ2UucmVsZWFzZU5vbk51bGwoKTsKLSAgICBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoVG9DaGVjayhyYW5nZVRvQ2hlY2suZ2V0KCkpOworICAg
IGF1dG8mIHJhbmdlVG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gKmdyYW1tYXJSYW5nZSA6
ICpzcGVsbGluZ1JhbmdlOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0No
ZWNrKGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvQ2hlY2spKTsKICAgICBpZiAocGFyYWdyYXBoVG9D
aGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjcxOSw4ICsyNzEyLDggQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKIAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3
ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0
IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRh
YmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7Ci0gICAgYXV0byB0ZXh0UmVwbGFjZW1lbnRS
YW5nZSA9IGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UgPyBtYWtlUmVmKCphdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlKSA6IHJhbmdlVG9DaGVjay5jb3B5UmVmKCk7Ci0gICAgYXV0byByZXF1ZXN0
ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2lu
Z1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gbWFrZVJlZihwYXJhZ3JhcGhUb0No
ZWNrLnBhcmFncmFwaFJhbmdlKCkpIDogV1RGTW92ZShyYW5nZVRvQ2hlY2spLCBXVEZNb3ZlKHRl
eHRSZXBsYWNlbWVudFJhbmdlKSwgcGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKTsK
KyAgICBhdXRvJiB0ZXh0UmVwbGFjZW1lbnRSYW5nZSA9IGF1dG9tYXRpY1JlcGxhY2VtZW50UmFu
Z2UgPyAqYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA6IHJhbmdlVG9DaGVjazsKKyAgICBhdXRv
IHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVkT3B0aW9ucywgVGV4
dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFsLCBhc3luY2hyb25vdXMgPyBSZWY8UmFuZ2U+IHsg
cGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpIH0gOiBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2VUb0NoZWNrKSwgY3JlYXRlTGl2ZVJhbmdlKHRleHRSZXBsYWNlbWVudFJhbmdlKSwgcGFyYWdy
YXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKTsKICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjc1Myw5ICsyNzQ2LDkgQEAgc3RhdGljIGJvb2wgaXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRUeXBlKFRleHRDaGVja2luZ1R5cGUgdHlwZSkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKFJhbmdl
JiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3ZvaWQgRWRpdG9y
OjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRv
UmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKLSAgICBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50KS0+YXBwbHko
KTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlVG9SZXBsYWNlKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwogfQogCiBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgsIFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFu
Z2UpCkBAIC0yODk1LDcgKzI4ODgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3Io
Y29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAg
ICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUxp
bmtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNl
bWVudCwgcmFuZ2VUb1JlcGxhY2UucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJl
cGxhY2VtZW50LCBtYWtlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKSkgewogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2Vydmlu
Z1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNlLCByZXBsYWNl
bWVudCwgeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0pOwogCiAgICAgICAgICAgICAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSkgewpAQCAtMjk0OCwxMiArMjk0MSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBpZiAo
cmVwbGFjZWRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGlvbiB8
fCAhc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJh
bmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRT
dHJpbmcsIHNlbGVjdGlvbiwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgKnNlbGVjdGlvbik7Ci0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFn
cmFwaCgqc2VsZWN0aW9uKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKSk7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KHJlcGxhY2VkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8s
IEVkaXRBY3Rpb246Okluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFj
ZWRTdHJpbmcubGVuZ3RoKCkpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CkBAIC0yOTc5LDExICsyOTcyLDExIEBAIHZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAgICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRkKFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5n
ZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywg
Y3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShzcGVs
bENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZ3JhbW1hclNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBzcGVsbENo
ZWNraW5nUmFuZ2UsIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdS
YW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwog
ICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSk7CiAgICAgaWYgKG1hcmtHcmFtbWFyKQogICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFt
bWFyU2VsZWN0aW9uKTsKQEAgLTMwODYsMjMgKzMwNzksMTggQEAgdm9pZCBFZGl0b3I6OmRlbGV0
ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBTdHIKICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRlbGV0ZWRBdXRvY29ycmVj
dGlvbkF0UG9zaXRpb24ocG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2lu
dCYgd2luZG93UG9pbnQpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IG1fZG9jdW1lbnQuZnJhbWUo
KS0+ZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKICAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICBhdXRvIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgYXV0byBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZnJhbWVQb2ludCA9IGZyYW1l
Vmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0gICAgYXV0byBzZWxlY3Rpb24g
PSBWaXNpYmxlU2VsZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1l
UG9pbnQpIH07Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFZp
c2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVWaWV3
LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KSkgfS50b05vcm1hbGl6ZWRSYW5nZSgpOwog
fQogCiB2b2lkIEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNv
bnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50LCBSZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFs
RXh0ZW50T3B0aW9uKQpAQCAtMzEyOSwxNyArMzExNywxNiBAQCB2b2lkIEVkaXRvcjo6c2V0SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJl
dmVhbAogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwogfQogCi1SZWZQ
dHI8UmFuZ2U+IEVkaXRvcjo6Y29tcG9zaXRpb25SYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpjb21wb3NpdGlvblJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
Y29tcG9zaXRpb25Ob2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2NvbXBvc2l0aW9uTm9kZS0+
bGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihtX2NvbXBvc2l0aW9uU3Rh
cnQsIGxlbmd0aCk7Ci0gICAgdW5zaWduZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgoc3RhcnQs
IG1fY29tcG9zaXRpb25FbmQpLCBsZW5ndGgpOwotICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBl
YXJseSByZXR1cm4gbmVlZWQ/CisgICAgdW5zaWduZWQgZW5kID0gc3RkOjpjbGFtcChtX2NvbXBv
c2l0aW9uRW5kLCBzdGFydCwgbGVuZ3RoKTsKICAgICBpZiAoc3RhcnQgPj0gZW5kKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX2NvbXBvc2l0aW9u
Tm9kZS0+ZG9jdW1lbnQoKSwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIHN0YXJ0LCBtX2NvbXBv
c2l0aW9uTm9kZS5nZXQoKSwgZW5kKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4geyB7IHsgKm1fY29tcG9zaXRpb25Ob2RlLCBzdGFydCB9LCB7ICptX2NvbXBvc2l0
aW9uTm9kZSwgZW5kIH0gfSB9OwogfQogCiBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxl
Y3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9uRW5kKSBj
b25zdApAQCAtMzIwMSw3ICszMTg4LDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAg
fQogCiAgICAgLy8gSW5zZXJ0IHRoZSB0cmFuc3Bvc2VkIGNoYXJhY3RlcnMuCi0gICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KHRyYW5zcG9zZWQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQodHJhbnNwb3NlZCwgbmV3U2Vs
ZWN0aW9uLmZpcnN0UmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
IHJldHVybjsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQodHJhbnNwb3NlZCwgU2VsZWN0
UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwog
fQpAQCAtMzM2MCwxMyArMzM0NywxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJl
dFdpZHRoKEludFJlY3QmIHJlY3QpCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KDApOwogfQogCi1J
bnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorSW50
UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkg
Y29uc3QKIHsKLSAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAg
IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNU
UkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCksIERPV05TVFJFQU0pOwogCi0gICAgaWYg
KHJhbmdlLT5jb2xsYXBzZWQoKSkgeworICAgIGlmIChyYW5nZS5jb2xsYXBzZWQoKSkgewogICAg
ICAgICAvLyBGSVhNRTogR2V0dGluZyBjYXJldCByZWN0IGFuZCByZW1vdmluZyBjYXJldCB3aWR0
aCBpcyBhIHZlcnkgcm91bmRhYm91dCB3YXkgdG8gZ2V0IGNvbGxhcHNlZCByYW5nZSBsb2NhdGlv
bi4KICAgICAgICAgLy8gSW4gcGFydGljdWxhciwgd2lkdGggYWRqdXN0bWVudCBkb2Vzbid0IHdv
cmsgZm9yIHJvdGF0ZWQgdGV4dC4KICAgICAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IFJl
bmRlcmVkUG9zaXRpb24oc3RhcnRWaXNpYmxlUG9zaXRpb24pLmFic29sdXRlUmVjdCgpOwpAQCAt
MzM3NCwxMCArMzM2MSwxMCBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFu
Z2UqIHJhbmdlKSBjb25zdAogICAgICAgICByZXR1cm4gc3RhcnRDYXJldFJlY3Q7CiAgICAgfQog
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihyYW5nZS0+ZW5kUG9zaXRp
b24oKSwgVVBTVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCksIFVQU1RSRUFNKTsKIAogICAg
IGlmIChpblNhbWVMaW5lKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24p
KQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSkpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMocmFuZ2UpKSk7CiAKICAgICBMYXlvdXRVbml0IGV4dHJhV2lkdGhUb0VuZE9m
TGluZTsKICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVyZWRQb3NpdGlvbihzdGFy
dFZpc2libGVQb3NpdGlvbikuYWJzb2x1dGVSZWN0KCZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwpA
QCAtMzQwMyw3ICszMzkwLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKICAgICBpZiAobV9k
b2N1bWVudC5mcmFtZSgpICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2Fs
bGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgY3JlYXRl
TGl2ZVJhbmdlKG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgYWZmaW5p
dHksIHN0aWxsU2VsZWN0aW5nKTsKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCks
IG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdT
dHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0OTAsNyArMzQ3Nyw3
IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0
aW9ucyBvcHRpb25zKQogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0gICAgYXV0byByZXN1bHRSYW5nZSA9IHJh
bmdlT2ZTdHJpbmcodGFyZ2V0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KSkuZ2V0KCksIG9wdGlvbnMpOworICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5n
KHRhcmdldCwgc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSwgb3B0aW9ucyk7CiAgICAgaWYgKCFyZXN1
bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNTAyLDEwNiArMzQ4OSwxMDkg
QEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9y
OjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFu
Z2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYXV0
byYgc3RhcnQoVCYmIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykgPyByYW5nZS5lbmQgOiByYW5nZS5zdGFydDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGF1dG8mIGVuZChUJiYgcmFuZ2UsIEZpbmRP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRz
KSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOworfQorCitzdGF0aWMgQm91bmRhcnlQb2ludCBt
YWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSA/IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpIDogbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhub2RlKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKE5vZGUmIG5vZGUsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSA/IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZShub2RlKSA6IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlKG5vZGUpOworfQorCitzdGF0aWMgU2ltcGxlUmFuZ2UgY29sbGFwc2VJZlJvb3RzRGlmZmVy
KFNpbXBsZVJhbmdlJiYgcmFuZ2UpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaGVscHMgY29ycmVj
dCByZXN1bHRzIGluIHNvbWUgY2FzZXMgaW52b2x2aW5nIHNoYWRvdyB0cmVlcy4gQnV0IHdlIGNh
biBpbmNvcnJlY3RseSBmaW5kIGEgc3RyaW5nIHdpdGggbWlkZGxlIGNoYXJhY3RlcnMgaW4gYW4g
aW5wdXQgZWxlbWVudCBhbmQgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVycyBvdXRzaWRlIGl0Lgor
ICAgIHJldHVybiAmcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yb290Tm9kZSgpID09ICZyYW5nZS5l
bmQuY29udGFpbmVyLT5yb290Tm9kZSgpCisgICAgICAgID8gV1RGTW92ZShyYW5nZSkgOiBTaW1w
bGVSYW5nZSB7IHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCB9OworfQorCitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRp
b25zKQogewogICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFN0YXJ0IGZyb20gYW4g
ZWRnZSBvZiB0aGUgcmVmZXJlbmNlIHJhbmdlLCBpZiB0aGVyZSdzIGEgcmVmZXJlbmNlIHJhbmdl
IHRoYXQncyBub3QgaW4gc2hhZG93IGNvbnRlbnQuIFdoaWNoIGVkZ2UKICAgICAvLyBpcyB1c2Vk
IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBzZWFyY2hpbmcgZm9yd2FyZCBvciBiYWNrd2FyZCwg
YW5kIHdoZXRoZXIgc3RhcnRJblNlbGVjdGlvbiBpcyBzZXQuCi0gICAgUmVmUHRyPFJhbmdlPiBz
ZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSkpOwogCi0gICAgYm9vbCBmb3J3
YXJkID0gIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKTsKICAgICBib29sIHN0YXJ0SW5SZWZl
cmVuY2VSYW5nZSA9IHJlZmVyZW5jZVJhbmdlICYmIG9wdGlvbnMuY29udGFpbnMoU3RhcnRJblNl
bGVjdGlvbik7Ci0gICAgaWYgKHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChmb3J3YXJk
KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0SW5SZWZlcmVuY2VSYW5n
ZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkgOiByZWZlcmVuY2VSYW5nZS0+ZW5k
UG9zaXRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkg
OiByZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICB9CisgICAgYXV0byBzaGFk
b3dUcmVlUm9vdCA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSA6IG51bGxwdHI7CiAKLSAgICBSZWZQdHI8U2hh
ZG93Um9vdD4gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOwotICAg
IGlmIChzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291
bnRDaGlsZE5vZGVzKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKLSAgICB9CisgICAgYXV0byBzZWFyY2hSYW5n
ZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICBpZiAo
cmVmZXJlbmNlUmFuZ2UpCisgICAgICAgIHN0YXJ0KHNlYXJjaFJhbmdlLCBvcHRpb25zKSA9IHN0
YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHN0YXJ0KCpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucykgOiBl
bmQoKnJlZmVyZW5jZVJhbmdlLCBvcHRpb25zKTsKKyAgICBpZiAoc2hhZG93VHJlZVJvb3QpCisg
ICAgICAgIGVuZChzZWFyY2hSYW5nZSwgb3B0aW9ucykgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVy
Tm9kZUNvbnRlbnRzKCpzaGFkb3dUcmVlUm9vdCwgb3B0aW9ucyk7CisgICAgYXV0byByZXN1bHRS
YW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLCB0
YXJnZXQsIG9wdGlvbnMpKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBjcmVh
dGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykp
OwogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gdGhlIHJlZmVyZW5jZSByYW5nZSBhbmQgdGhlIGZv
dW5kIHJhbmdlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgcmVmZXJlbmNlIHJhbmdlLCBmaW5kIGFnYWlu
LgogICAgIC8vIEJ1aWxkIGEgc2VsZWN0aW9uIHdpdGggdGhlIGZvdW5kIHJhbmdlIHRvIHJlbW92
ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZS4KICAgICAvLyBDb21wYXJlIHJhbmdlcyBpbnN0ZWFkIG9m
IHNlbGVjdGlvbiBvYmplY3RzIHRvIGlnbm9yZSB0aGUgd2F5IHRoYXQgdGhlIGN1cnJlbnQgc2Vs
ZWN0aW9uIHdhcyBtYWRlLgotICAgIGlmIChzdGFydEluUmVmZXJlbmNlUmFuZ2UgJiYgYXJlUmFu
Z2VzRXF1YWwoY3JlYXRlTGl2ZVJhbmdlKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlKS50
b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgcmVmZXJlbmNlUmFuZ2UpKSB7Ci0gICAgICAgIHNl
YXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoZm9y
d2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChyZWZlcmVuY2VSYW5nZS0+
ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRFbmQocmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKHNo
YWRvd1RyZWVSb290KSB7Ci0gICAgICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNv
dW50Q2hpbGROb2RlcygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJh
bmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYm
IFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdlKCkgPT0gcmVm
ZXJlbmNlUmFuZ2UpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIHN0YXJ0KHNlYXJjaFJhbmdlLCBvcHRp
b25zKSA9IGVuZCgqcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMpOworICAgICAgICBpZiAoc2hhZG93
VHJlZVJvb3QpCisgICAgICAgICAgICBlbmQoc2VhcmNoUmFuZ2UsIG9wdGlvbnMpID0gbWFrZUJv
dW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJvb3QsIG9wdGlvbnMpOwor
ICAgICAgICByZXN1bHRSYW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0
KHNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAvLyBJZiBub3Ro
aW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQg
Zm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNl
ZCgpICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNv
bnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hv
c3QoKSkgewotICAgICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICAgICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUo
KnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVz
dWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRh
cmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBzaGFk
b3dUcmVlUm9vdCkgeworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gaG9zdCA9IHNoYWRvd1Ry
ZWVSb290LT5zaGFkb3dIb3N0KCkpCisgICAgICAgICAgICBzdGFydChzZWFyY2hSYW5nZSwgb3B0
aW9ucykgPSAqbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGUoKmhvc3QsIG9wdGlvbnMpOworICAg
ICAgICByZXN1bHRSYW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRu
J3QgZmluZCBhbnl0aGluZyBhbmQgd2UncmUgd3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUg
ZW50aXJlIGRvY3VtZW50ICh0aGlzIHdpbGwKICAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2gg
dGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hlZCBpbiBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0
UmFuZ2UtPmNvbGxhcHNlZCgpICYmIG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKLSAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dChyYW5nZU9m
Q29udGVudHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRS
YW5nZS5jb2xsYXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7CisgICAg
ICAgIHJlc3VsdFJhbmdlID0gY29sbGFwc2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQocmFu
Z2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICAgICAgLy8g
V2UgdXNlZCB0byByZXR1cm4gZmFsc2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1l
IHJhbmdlIHRoYXQgd2Ugc3RhcnRlZCB3aXRoCiAgICAgICAgIC8vIChlLmcuLCB0aGUgcmVmZXJl
bmNlIHJhbmdlIHdhcyBhbHJlYWR5IHRoZSBvbmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1
dCB3ZSBkZWNpZGVkIHRoYXQKICAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNh
c2UgaW5zdGVhZCwgc28gd2UnbGwganVzdCBmYWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgogICAg
IH0KIAotICAgIHJldHVybiByZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkgPyBudWxscHRyIDogcmVz
dWx0UmFuZ2U7CisgICAgcmV0dXJuIHJlc3VsdFJhbmdlLmNvbGxhcHNlZCgpID8gV1RGOjpudWxs
b3B0IDogbWFrZU9wdGlvbmFsKHJlc3VsdFJhbmdlKTsKIH0KIAotc3RhdGljIGJvb2wgaXNGcmFt
ZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMgYm9vbCBpc0ZyYW1l
SW5SYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBm
b3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGZyYW1lLm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1l
bnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQo
KSkgewotICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uub3du
ZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLmludGVyc2Vj
dHNOb2RlKCpvd25lckVsZW1lbnQpOworICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1l
bnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50
KTsKICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
IHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsaW1p
dCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFJlZlB0cjxSYW5nZT4+KiBtYXRjaGVzKQordW5z
aWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1
bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFNpbXBsZVJhbmdlPiogbWF0
Y2hlcykKIHsKICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBzZWFyY2hSYW5nZTsKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKCZyYW5nZS0+b3du
ZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UgPSBy
YW5nZTsKKyAgICAgICAgaWYgKCZyYW5nZS0+c3RhcnQuZG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlID0gKnJhbmdlOwogICAgICAgICBlbHNlIGlmICgh
aXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIXNlYXJjaFJhbmdlKQotICAgICAgICBzZWFyY2hS
YW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICAgICAgc2VhcmNoUmFuZ2Ug
PSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAKLSAgICBOb2Rl
JiBvcmlnaW5hbEVuZENvbnRhaW5lciA9IHNlYXJjaFJhbmdlLT5lbmRDb250YWluZXIoKTsKLSAg
ICBpbnQgb3JpZ2luYWxFbmRPZmZzZXQgPSBzZWFyY2hSYW5nZS0+ZW5kT2Zmc2V0KCk7CisgICAg
YXV0byBvcmlnaW5hbEVuZCA9IHNlYXJjaFJhbmdlLT5lbmQ7CiAKICAgICB1bnNpZ25lZCBtYXRj
aENvdW50ID0gMDsKICAgICBkbyB7CkBAIC0zNjEwLDggKzM2MDAsOCBAQCB1bnNpZ25lZCBFZGl0
b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5n
ZSwgRmluZE9wdAogICAgICAgICAgICAgaWYgKCFyZXN1bHRSYW5nZS5zdGFydC5jb250YWluZXIt
PmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpyZXN1bHRSYW5nZS5zdGFydC5jb250YWluZXIt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKG9yaWdpbmFs
RW5kQ29udGFpbmVyLCBvcmlnaW5hbEVuZE9mZnNldCk7CisgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpyZXN1bHRSYW5n
ZS5zdGFydC5jb250YWluZXItPnNoYWRvd0hvc3QoKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+ZW5kID0gb3JpZ2luYWxFbmQ7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
CkBAIC0zNjI2LDE1ICszNjE2LDE0IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgICAg
IGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIC8vIFNldCB0aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNoIHJhbmdlIHRv
IGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCi0gICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhl
cmUgaXMgbm8gbmVlZCB0byB1c2UgYSBWaXNpYmxlUG9zaXRpb24gaGVyZSwKLSAgICAgICAgLy8g
c2luY2UgZmluZFBsYWluVGV4dCB3aWxsIHVzZSBhIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRo
ZSB2aXNpYmxlCi0gICAgICAgIC8vIHRleHQgbm9kZXMuIAotICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoV1RGTW92ZShyZXN1bHRSYW5nZS5lbmQuY29udGFpbmVyKSwgcmVzdWx0UmFuZ2Uu
ZW5kLm9mZnNldCk7CisgICAgICAgIC8vIFNldCB0aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNo
IHJhbmdlIHRvIGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHJlc3VsdCByYW5nZS4KKyAgICAg
ICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgVmlzaWJsZVBvc2l0aW9uIGhlcmU6IGZpbmRQ
bGFpblRleHQgd2lsbCB1c2UgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdmlzaWJsZSB0ZXh0IG5v
ZGVzLgorICAgICAgICBzZWFyY2hSYW5nZS0+c3RhcnQgPSBXVEZNb3ZlKHJlc3VsdFJhbmdlLmVu
ZCk7CiAKLSAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+c2hhZG93
Um9vdCgpOwotICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1Ry
ZWVSb290KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqc2hhZG93VHJlZVJvb3Qs
IHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7CisgICAgICAgIGlmIChzZWFyY2hS
YW5nZS0+Y29sbGFwc2VkKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHNoYWRvd1RyZWVSb290
ID0gc2VhcmNoUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkK
KyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+ZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJvb3QpOworICAgICAgICB9CiAgICAgfSB3aGlsZSAo
dHJ1ZSk7CiAKICAgICByZXR1cm4gbWF0Y2hDb3VudDsKQEAgLTM5NDMsMjIgKzM5MzIsMjQgQEAg
U3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiAgICAgcmV0
dXJuIHBsYWluVGV4dCgqcmFuZ2UpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwotICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpKSk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKKyAgICBp
ZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9OwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFu
Z2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQp
IGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2lu
Z1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29uc3QKIHsKICAgICBp
ZiAoIXJlc3VsdC5yYW5nZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2UgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBjb250ZXh0UmFu
Z2UgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAgICAgaWYgKCFjb250ZXh0
UmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0LnJhbmdlKSk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0
ZXJSYW5nZSgqY29udGV4dFJhbmdlLCByZXN1bHQucmFuZ2UpOwogfQogCiB2b2lkIEVkaXRvcjo6
c2NoZWR1bGVFZGl0b3JVSVVwZGF0ZSgpCkBAIC00MjI4LDggKzQyMTksOCBAQCB2b2lkIEVkaXRv
cjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2Fu
ZGlkYXRlKQogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gdHJ1ZTsKIAogICAg
IGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoYWNjZXB0ZWRDYW5k
aWRhdGUpKSB7Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRl
LnJlcGxhY2VtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCi0g
ICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0ZShyYW5nZS5nZXQo
KSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQpLT5hcHBseSgpOwogICAgIH0gZWxzZQogICAgICAgICBpbnNlcnRUZXh0
KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCBudWxscHRyKTsKIApAQCAtNDI2MSwxNiAr
NDI1MiwxNiBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKQogICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3Zlcndy
aXRlTW9kZUVuYWJsZWQpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxl
Y3Rpb25SYW5nZSgpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVj
dGlvblJhbmdlKCkKIHsKLSAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRo
ZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPwotICAgIC8vIFdo
b2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkgZm9yZ290IHRvIGxlYXZlIHVzIGEgY29t
bWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21t
b25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7Ci0gICAg
YXV0byogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3Np
dGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIEhUTUxOYW1lczo6YVRhZyk7Ci0gICAgaWYgKGVu
Y2xvc2luZ0FuY2hvciAmJiBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHJhbmdlLT5zdGFydFBv
c2l0aW9uKCkpID49IDApCi0gICAgICAgIHJhbmdlLT5zZXRTdGFydCgqZW5jbG9zaW5nQW5jaG9y
LCAwKTsKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzZWxlY3Rp
b24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPyBXaG9ldmVyIHdyb3RlIHRoaXMg
Y29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0
aGUgcmF0aW9uYWxlLgorICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgaWYg
KHJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Io
cmFuZ2UtPnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UtPmVuZC5jb250YWluZXIpLmdldCgpKSwgSFRN
TE5hbWVzOjphVGFnKSkgeworICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkgPj0gMCkKKyAgICAgICAgICAg
ICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygq
ZW5jbG9zaW5nQW5jaG9yKTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gcmFuZ2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IDY5ZDYwNTkzMDI2NTJmNjcyZmQyNTkxNTJk
M2RjZmI0NWZmMDkyNmYuLjlkZWRkY2EzODM2ZjE1MzAzNmNmYWY5YzgwZGFkMzk5NDRmNDQ5ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTMsMTAg
KzIxMywxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvdXRkZW50KCk7CiAg
ICAgdm9pZCB0cmFuc3Bvc2UoKTsKIAotICAgIGJvb2wgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9j
dW1lbnRGcmFnbWVudCYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKTsKLSAgICBib29sIHNo
b3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24p
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2Uq
KSBjb25zdDsKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFu
Z2UqKTsKKyAgICBib29sIHNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pOworICAgIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgY29uc3Q7
CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0
IFNpbXBsZVJhbmdlJik7CiAKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pOwogCkBAIC0zMjIsMTYgKzMyMiwx
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9k
ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKikgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwotICAgIHZv
aWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVmUHRyPFJhbmdl
PiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKICAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKICAgICB2b2lkIG1hcmtBbmRSZXBs
YWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiwgY29uc3QgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VSYW5nZUZvclNwZWxs
Q2hlY2tpbmcoUmFuZ2UmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBT
dHJpbmcmKTsKIAogICAgIGJvb2wgaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRv
Z2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCk7CiAKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBSZWZQ
dHI8UmFuZ2U+JiYgc3BlbGxpbmdSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBncmFtbWFyUmFuZ2UpOworICAgIHZvaWQgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4sIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSk7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVAogI2VuZGlmCkBAIC0zNDMsOCAr
MzQzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1NwZWxsaW5nR3Vlc3NQYW5lbCgpOwogICAg
IGJvb2wgc3BlbGxpbmdQYW5lbElzU2hvd2luZygpOwogCi0gICAgYm9vbCBzaG91bGRCZWdpbkVk
aXRpbmcoUmFuZ2UqKTsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqKTsKKyAgICBi
b29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpOworICAgIGJvb2wgc2hv
dWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgdm9pZCBjbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpOwogICAgIGJvb2wgY2FuVW5kbygpIGNvbnN0OwpAQCAtMzU2LDcgKzM1
Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCk7CiAgICAgdm9pZCBk
aWRFbmRFZGl0aW5nKCk7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
UmFuZ2UqKTsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKCk7CiAKICAgICB2b2lkIHNob3dGb250UGFuZWwoKTsKQEAgLTM4MCw3ICszODAsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJik7IC8vIGlmIG5vIGV4aXN0aW5nIGNvbXBvc2l0aW9uLCByZXBsYWNlcyBzZWxl
Y3Rpb24KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKCk7CiAgICAg
Ym9vbCBjYW5jZWxDb21wb3NpdGlvbklmU2VsZWN0aW9uSXNJbnZhbGlkKCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBjb21wb3NpdGlvblJhbmdlKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2ln
bmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGlvbkVuZCkgY29uc3Q7CiAKICAg
ICAvLyBnZXR0aW5nIGludGVybmF0aW9uYWwgdGV4dCBpbnB1dCBjb21wb3NpdGlvbiBzdGF0ZSAo
Zm9yIHVzZSBieSBJbmxpbmVUZXh0Qm94KQpAQCAtNDAwLDcgKzQwMCw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCwgUmV2
ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID0gUmV2ZWFsU2VsZWN0
aW9uOjpZZXMpOwogICAgIGJvb2wgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIGNvbnN0IHsgcmV0
dXJuIG1faWdub3JlU2VsZWN0aW9uQ2hhbmdlczsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPFJhbmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAtNDEx
LDcgKzQxMSw3IEBAIHB1YmxpYzoKIAogICAgIEVkaXRpbmdCZWhhdmlvciBiZWhhdmlvcigpIGNv
bnN0OwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlKCk7CisgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHNlbGVjdGVkUmFuZ2UoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtTWFya2VkVGV4dCgpOwpAQCAtNDQ2LDcg
KzQ0Niw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVy
KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYsIEZpbmRPcHRpb25zKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFu
Z2VPZlN0cmluZyhjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRpb25zKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBGaW5kT3B0aW9ucyk7CiAKICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQg
YXMgZW1hY3MgdXNlcyBpdC4KICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpOwpAQCAtNDU1LDEzICs0NTUsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYgLCBFZGl0QWN0aW9u
ID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBJbnRSZWN0IGZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKikgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0
OwogCiAgICAgdm9pZCBzZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CiAgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgT3B0
aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+KTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKICAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24s
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjb3VudE1h
dGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMsIHVuc2lnbmVk
IGxpbWl0LCBib29sIG1hcmtNYXRjaGVzLCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4qKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBsaW1p
dCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFNpbXBsZVJhbmdlPiopOwogICAgIGJvb2wgbWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sKTsKIApAQCAtNTQ1
LDggKzU0NSw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdG
b3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5k
bGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdDsKKyAgICBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CiAgICAgYm9vbCBpc0hhbmRsaW5nQWNjZXB0ZWRDYW5k
aWRhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZTsgfQog
CiAgICAgdm9pZCBzZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGJvb2wgYikgeyBtX2lz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8gPSBiOyB9CkBAIC01NzksNyArNTc5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAKLSAgICBib29sIGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7Cisg
ICAgYm9vbCBjYW5EZWxldGVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0OwogICAgIGJv
b2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYpOwogICAgIHZvaWQg
cGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmKTsKICAgICB2b2lkIHBh
c3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCosIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4pOwpA
QCAtNTg4LDcgKzU4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBxdW90ZUZyYWdtZW50Rm9yUGFz
dGluZyhEb2N1bWVudEZyYWdtZW50Jik7CiAKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVy
RWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmID0gU2Nyb2xsQWxpZ25tZW50
OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZlYWxFeHRlbnRPcHRpb24gPSBEb05vdFJldmVhbEV4
dGVudCk7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0
YWJsZUVsZW1lbnQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yKSBjb25zdDsK
QEAgLTYwOCw3ICs2MDgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkgY29uc3Q7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9u
UmFuZ2UoKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gYWRqdXN0ZWRTZWxlY3Rpb25SYW5n
ZSgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2Vs
ZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAppbmRleCBkNmVhNDI2ZDdmN2ZlNzY1ZmIwMDk3ZTNkOTVhZWM3NTlkYTQyN2Vm
Li40NDBmY2Y2ZmE1ZmZmMWZkYjgyZTZkNTQ1MjI5MTBlNjVjNmE5MTNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTE3NiwxNSArMTc2LDE1IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVJbnNlcnROb2RlKEZyYW1lJiBmcmFtZSwgUmVmPE5vZGU+JiYgY29udGVu
dCkKIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1l
LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIG9sZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwogICAgIGF1dG8gbmV3UmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIW5ld1JhbmdlIHx8IG5ld1Jhbmdl
LT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gb2xkUmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIGFmZmluaXR5ID0gc2Vs
ZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkUmFuZ2UpLmdldCgpLCBj
cmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgZmFsc2UpKQorICAgIGlm
ICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm9s
ZFJhbmdlLCAqbmV3UmFuZ2UsIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5n
ZShuZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UoKm5ld1JhbmdlKS5wdHIoKSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjI2LDEx
ICsyMjYsMTEgQEAgc3RhdGljIHVuc2lnbmVkIHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUm
IGZyYW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdl
U3RlcChoZWlnaHQpKTsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gdW5pb25ET01SYW5nZXMo
UmFuZ2UmIGEsIFJhbmdlJiBiKQorc3RhdGljIFNpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0
IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKIHsKLSAgICBSYW5nZSYgc3Rh
cnQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGIpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyBhIDogYjsKLSAgICBSYW5nZSYgZW5kID0gYS5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGIpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDAgPyBiIDogYTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShhLm93bmVyRG9jdW1l
bnQoKSwgJnN0YXJ0LnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LnN0YXJ0T2Zmc2V0KCksICZlbmQu
ZW5kQ29udGFpbmVyKCksIGVuZC5lbmRPZmZzZXQoKSk7CisgICAgYXV0byYgc3RhcnQgPSBjcmVh
dGVMaXZlUmFuZ2UoYSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGEgOiBi
OworICAgIGF1dG8mIGVuZCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpIDw9IDAgPyBiIDogYTsKKyAgICByZXR1cm4geyBzdGFydC5zdGFydCwgZW5kLmVuZCB9
OwogfQogCiAvLyBFeGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25zCkBAIC0zNTQsNyArMzU0LDcgQEAg
c3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5t
YXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKTsKICAgICBpZiAobWFyayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCkpIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdl
KHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpmcmFtZS5lZGl0b3IoKS5z
ZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwog
ICAgICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA1
Niw3ICsxMDU2LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICAgICAgUEFMOjpzeXN0
ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFuZ2UoKm1h
cmspLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKSkucHRyKCks
IERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAppbmRleCAxNDc1ZmU1M2ExYzM3Yjg3MzdiOGFhNTA1MDRmMTc0OGJhODc2MDgwLi41MmE2
N2E4ZjYxZWE2MzFjMTg0NThlOGQ5ZTljNzFiMTBmMDk4NDNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMjMxMSw3ICsyMzExLDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbikgY28KICAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2RvY3VtZW50
LT5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGll
bnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiB9CiAKIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zp
c2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggYzVjYmMzZjk3Y2Q4YTk5MmMwYWVl
N2EzMWE4OWVmZDg3Y2ZhM2Q3OC4uZWVmZThmZDk1MWNjZmE0ZWI2NjE4MjdkNThlNjllYTU5YjU4
NmI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBA
IC04OCwxNCArODgsMTMgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uSW5IVE1MRm9ybWF0KCkK
IAogdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHJpbmc+JiBvdXRUeXBlcywgVmVjdG9yPFJlZlB0cjxT
aGFyZWRCdWZmZXI+PiYgb3V0RGF0YSkKIHsKLSAgICBhdXRvJiBkb2N1bWVudCA9IGVsZW1lbnQu
ZG9jdW1lbnQoKTsKLSAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQsIHsgJmVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIH0sIHsgJmVs
ZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IgfSk7Ci0gICAgY2xpZW50KCkt
PmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoZWxlbWVudFJhbmdlLnB0cigpLCBvdXRU
eXBlcywgb3V0RGF0YSk7CisgICAgYXV0byBlbGVtZW50UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlKGVsZW1lbnQpOworICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShl
bGVtZW50UmFuZ2UsIG91dFR5cGVzLCBvdXREYXRhKTsKIAogICAgIG91dFR5cGVzLmFwcGVuZChQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpOwotICAgIG91dERhdGEuYXBwZW5kKFBh
c3RlYm9hcmRDdXN0b21EYXRhIHsgZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKSwgeyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOworICAgIG91dERhdGEuYXBwZW5kKFBh
c3RlYm9hcmRDdXN0b21EYXRhIHsgZWxlbWVudC5kb2N1bWVudCgpLm9yaWdpbklkZW50aWZpZXJG
b3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAotICAgIGlmIChh
dXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoZWxlbWVudFJhbmdlLnB0cigp
KSkgeworICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY3Jl
YXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSkuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChhdXRvIHdl
YkFyY2hpdmVEYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkpIHsKICAgICAg
ICAgICAgIG91dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CiAgICAgICAgICAg
ICBvdXREYXRhLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZSh3ZWJBcmNoaXZlRGF0YS5nZXQo
KSkpOwpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAgICAgICBjb250ZW50LmRhdGFJblJU
RkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1h
dChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKICAgICAgICAgY29udGVudC5kYXRhSW5SVEZGb3Jt
YXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKICAgICAgICAgY29udGVudC5kYXRh
SW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmlu
ZyhzdHJpbmcuZ2V0KCkpOwotICAgICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERh
dGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNv
bnRlbnQuY2xpZW50RGF0YSk7CisgICAgICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJk
RGF0YShzZWxlY3RlZFJhbmdlKCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNvbnRlbnQuY2xpZW50
RGF0YSk7CiAgICAgfQogICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbklu
SFRNTEZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKQEAgLTE0NCw3ICsxNDMsNyBA
QCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3Rl
Ym9hcmRXcml0ZXJEYXRhKQogICAgIHdlYkNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zv
cm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKICAg
ICB3ZWJDb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsK
ICAgICB3ZWJDb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7Ci0gICAgY2xpZW50KCktPmdldENsaWVudFBhc3Rl
Ym9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCB3ZWJDb250ZW50LmNsaWVu
dFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOworICAgIGNsaWVudCgpLT5nZXRDbGllbnRQ
YXN0ZWJvYXJkRGF0YShzZWxlY3RlZFJhbmdlKCksIHdlYkNvbnRlbnQuY2xpZW50VHlwZXMsIHdl
YkNvbnRlbnQuY2xpZW50RGF0YSk7CiAKICAgICBwYXN0ZWJvYXJkV3JpdGVyRGF0YS5zZXRXZWJD
b250ZW50KFdURk1vdmUod2ViQ29udGVudCkpOwogfQpAQCAtMTg0LDEyICsxODMsMTIgQEAgdm9p
ZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWQKIAogICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgaWYgKGF1dG8g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcygqbV9kb2N1bWVudC5mcmFt
ZSgpLCBhdHRyaWJ1dGVkU3RyaW5nKSkgewotICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCisgICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdt
ZW50LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFs
c2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gYXR0cmlidXRlZFN0cmluZy5zdHJpbmc7Ci0gICAg
ICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0
ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2UpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCmluZGV4IDk5YWExMTkyMmMzMjgxNGJjMGE2
ZjVlMGNhYmQ5ZjYzYjM4ZTg3MWMuLmRhN2U5NDFjYjhmMWZiZTIzYjAwMmUyNWRlMDBkOTY4NTlh
ZmNlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApAQCAtNTAs
MTcgKzUwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9u
PiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVi
b2FyZCwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4
dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBhdXRvIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21Q
YXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRp
b246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50
ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAg
cXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAm
JiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAg
ICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2tx
dW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6
UmVzcGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0KaW5kZXggMzEyMzI1ZjI3NjIxY2JiODg0OTJhMDQyNmVlNTkxNjU2N2U0YTE2MC4uNmMy
NTQ3OTY1NTM2MDg0YjE2Mzg4MDQ5ZDQ1YTU5OWNmOTYwNjcyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMjA2LDMwICsyMDYsMjYgQEAgdm9pZCBFZGl0b3I6
OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRWxlbWVudCYg
aW1hZ2VFbGVtZW4KICAgICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZSA9IHBhc3Rl
Ym9hcmQucmVzb3VyY2VNSU1FVHlwZShjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgp
KTsKICAgICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VEYXRhID0gY2FjaGVkSW1hZ2UtPnJlc291
cmNlQnVmZmVyKCk7CiAKLSAgICBpZiAoIXBhc3RlYm9hcmQuaXNTdGF0aWMoKSkgewotICAgICAg
ICBQb3NpdGlvbiBiZWZvcmVJbWFnZVBvc2l0aW9uKCZpbWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQmVmb3JlQW5jaG9yKTsKLSAgICAgICAgUG9zaXRpb24gYWZ0ZXJJbWFnZVBvc2l0
aW9uKCZpbWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwotICAg
ICAgICBhdXRvIGltYWdlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGltYWdlRWxlbWVudC5kb2N1bWVu
dCgpLCBiZWZvcmVJbWFnZVBvc2l0aW9uLCBhZnRlckltYWdlUG9zaXRpb24pOwotICAgICAgICBj
bGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShpbWFnZVJhbmdlLnB0cigp
LCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50VHlwZXMsIHBhc3RlYm9hcmRJbWFnZS5jbGllbnREYXRh
KTsKLSAgICB9CisgICAgaWYgKCFwYXN0ZWJvYXJkLmlzU3RhdGljKCkpCisgICAgICAgIGNsaWVu
dCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGltYWdl
RWxlbWVudCksIHBhc3RlYm9hcmRJbWFnZS5jbGllbnRUeXBlcywgcGFzdGVib2FyZEltYWdlLmNs
aWVudERhdGEpOwogCiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwogfQog
CiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJk
LCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwogICAgIGJvb2wgYWxsb3dQbGFpblRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCk7CiAgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFz
dGVib2FyZEl0ZW1zID0gY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7Ci0gICAg
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVu
dEZyYWdtZW50RnJvbURlbGVnYXRlKGkpOworICAgICAgICBhdXRvIGZyYWdtZW50ID0gY2xpZW50
KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaSk7CiAgICAgICAgIGlmICghZnJhZ21l
bnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVhZGVyLmFkZEZyYWdtZW50KGZy
YWdtZW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IHJlYWRlci5mcmFnbWVudDsKKyAgICBhdXRvIGZyYWdtZW50ID0g
V1RGTW92ZShyZWFkZXIuZnJhZ21lbnQpOwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAg
Ym9vbCBjaG9zZVBsYWluVGV4dElnbm9yZWQ7CiAgICAgICAgIGZyYWdtZW50ID0gd2ViQ29udGVu
dEZyb21QYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9z
ZVBsYWluVGV4dElnbm9yZWQpOwpAQCAtMjM4LDcgKzIzNCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9w
dGlvbj4KICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6
QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQp
OwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwg
cmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21l
bnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFz
ZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBm
YWxzZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUp
ID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1
b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggMTJmZDZhNDNlYTA1YTJhMGU3
MmI3NGJhNzJkOTYyODY0NzA1YmFlMy4uMGI3YzI2MjUzYTAwODJlM2M1NGFlZWZlYTA2MTYzMjRl
NjI0OGM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9y
TGliV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJX
UEUuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0
YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9v
bCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitzdGF0aWMgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9h
cmQmIHBhc3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBi
b29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKICAgICBjaG9zZVBs
YWluVGV4dCA9IGZhbHNlOwogCkBAIC00Nyw4ICs0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYg
cGFzCiAKICAgICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04Iikg
JiYgZnJhbWUuZG9jdW1lbnQoKSkgewogICAgICAgICBTdHJpbmcgbWFya3VwID0gcGFzdGVib2Fy
ZC5yZWFkU3RyaW5nKCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIpOwotICAgICAgICBpZiAoUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0
aW5nQW5kUGx1Z2luQ29udGVudCkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAg
ICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCksIG1h
cmt1cCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsK
ICAgICB9CiAKICAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQpAQCAtNTYsOCArNTUsNyBAQCBzdGF0
aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmRE
YXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L3BsYWlu
O2NoYXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAg
ICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxhaW47Y2hhcnNl
dD11dGYtOCIpKSkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFz
dGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03OSwxNyArNzcsMTcgQEAgdm9pZCBFZGl0b3I6Ondy
aXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYsIEVsZW1lbnQmLCBjb25zdCBVUkwmLCBj
b25zdCBTdHIKIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBib29s
IGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVu
dC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxh
aW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
KnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNo
b3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBh
c3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5n
KCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQo
KmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAg
IGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsICpyYW5nZSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoKmZy
YWdtZW50LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3Nl
UGxhaW5UZXh0LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2tx
dW90ZSkgPyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJs
b2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMWNkOGMzOTRhNzY5MWM1NWY0ZDhkZDM2ZGU4
NTk2ZTcwNzc3YjdiNS4uYmEzMWMxODc3MzIzNGI5YWQ5MzlhZDBkMzMxOTMxOGM2MmQ4YjNiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtODAsNyArODAsNyBA
QCB2b2lkIEVkaXRvcjo6c2hvd0NvbG9yUGFuZWwoKQogCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRo
UGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+
IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsK
KyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogCiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICAvLyBGSVhNRTogSG93IGNhbiB0aGlzIGhhcmQtY29k
ZWQgcGFzdGVib2FyZCBuYW1lIGJlIHJpZ2h0LCBnaXZlbiB0aGF0IHRoZSBwYXNzZWQtaW4gcGFz
dGVib2FyZCBoYXMgYSBuYW1lPwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRp
b24+CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFz
UXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsK
IAotICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50
ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VO
b25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFs
c2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/
IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSApOwogCiAgICAgY2xpZW50KCktPnNldEluc2Vy
dGlvblBhc3RlYm9hcmQoU3RyaW5nKCkpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgRWRpdG9y
OjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJvYXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKICAgICBpZiAoYXV0byBmcmFn
bWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkLCByYW5nZSwgdHJ1ZSwg
Y2hvc2VQbGFpblRleHQpKSB7CiAgICAgICAgIG1heWJlQ29weU5vZGVBdHRyaWJ1dGVzVG9GcmFn
bWVudCgqbm9kZSwgKmZyYWdtZW50KTsKLSAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50
KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpQYXN0ZWQpKQorICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVB
c0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQ
YXN0ZWJvYXJkKHBhc3RlYm9hcmQpLCBmYWxzZSwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdu
b3JlQmxvY2txdW90ZSk7CiAgICAgfQogCkBAIC0xNzYsMTEgKzE3Niw5IEBAIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IEVkaXRvcjo6aW1hZ2VJbldlYkFyY2hpdmVGb3JtYXQoRWxlbWVudCYgaW1hZ2VF
bGVtZW50KQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQ
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCiB7Ci0gICAgLy8gRklYTUU6
IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlvbiBpcyBhd2t3YXJkLiBXZSdkIHByb2JhYmx5
IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBhcmF0ZSBmdW5jdGlvbnMuCi0gICAgLy8gQXMg
b2YgdGhpcyB3cml0aW5nLCB0aGlzIGlzIG9ubHkgdXNlZCBpbiBXZWJLaXQyIHRvIGltcGxlbWVu
dCB0aGUgbWV0aG9kIC1bV0tWaWV3IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOnR5cGVzOl0s
Ci0gICAgLy8gd2hpY2ggaXMgb25seSB1c2VkIHRvIHN1cHBvcnQgT1MgWCBzZXJ2aWNlcy4KKyAg
ICAvLyBGSVhNRTogVGhlIGludGVyZmFjZSB0byB0aGlzIGZ1bmN0aW9uIGlzIGF3a3dhcmQuIFdl
J2QgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiB3aXRoIHRocmVlIHNlcGFyYXRlIGZ1bmN0aW9ucy4g
QXMgb2YgdGhpcyB3cml0aW5nLCB0aGlzIGlzIG9ubHkgdXNlZCBpbiBXZWJLaXQyIHRvIGltcGxl
bWVudCB0aGUgbWV0aG9kIC1bV0tWaWV3IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOnR5cGVz
Ol0sIHdoaWNoIGlzIG9ubHkgdXNlZCB0byBzdXBwb3J0IE9TIFggc2VydmljZXMuCiAKLSAgICAv
LyBGSVhNRTogRG9lcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBuZWVkIHRvIHVzZSBhZGp1c3RlZFNl
bGVjdGlvblJhbmdlKCk/IEJlY2F1c2Ugd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBqdXN0
IHVzZXMgc2VsZWN0ZWRSYW5nZSgpLgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgZnVuY3Rpb24g
cmVhbGx5IG5lZWQgdG8gdXNlIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKT8gQmVjYXVzZSB3cml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGp1c3QgdXNlcyBzZWxlY3RlZFJhbmdlKCkuIFRoaXMg
aXMgdGhlIG9ubHkgZnVuY3Rpb24gaW4gV2ViS2l0IHRoYXQgdXNlcyBhZGp1c3RlZFNlbGVjdGlv
blJhbmdlLgogICAgIGlmICghY2FuQ29weSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggYzc5NmJmYWFmNjZl
ZTk0YTg1YzU1ZjM5MjM0OTE1NWQyNzRhODYwYy4uOTNkZGVhZjg4ODliOGU3ZmNjMjY5MzQxMjQw
ODU4Mjg0NDc2YzhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRp
dG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3Bw
CkBAIC0zNywxNyArMzcsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFz
dGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVk
UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFn
bWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIGF1dG8gZnJhZ21l
bnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksIGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxv
d1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRp
b25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJh
Z21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxk
SW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJh
Z21lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0
ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0
aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCwgb3B0aW9ucy5jb250YWlu
cyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5k
bGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RC
bG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJl
Y3RvcnlEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3Vt
ZW50LmNwcAppbmRleCBkY2YzYmY0NDg2NWIwNGNjODI3ZjcxMzNlZGQ4ZTE5MWZhYmFiZDViLi4y
NWYxN2EzM2ZkMjBhNDFjNzFiYWZiOTViMzNmNGE0MDAyNzQwOGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIFJl
ZjxFbGVtZW50PiBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6Y3JlYXRlVERGb3JGaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGZpbGVuCiAgICAgYXV0byB0ZEVsZW1lbnQgPSBIVE1MVGFibGVDZWxs
RWxlbWVudDo6Y3JlYXRlKHRkVGFnLCBkb2N1bWVudCk7CiAgICAgdGRFbGVtZW50LT5hcHBlbmRD
aGlsZChhbmNob3JFbGVtZW50KTsKIAotICAgIHJldHVybiBXVEZNb3ZlKHRkRWxlbWVudCk7Cisg
ICAgcmV0dXJuIHRkRWxlbWVudDsKIH0KIAogc3RhdGljIFN0cmluZyBwcm9jZXNzRmlsZXNpemVT
dHJpbmcoY29uc3QgU3RyaW5nJiBzaXplLCBib29sIGlzRGlyZWN0b3J5KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmNwcAppbmRleCA5NGZiMzBmNTExYjNiMzc5NTIyYWE2OWQyY2Zm
ZmRhZTkwMDU3MDI2Li4wYzE0YWU2OTBjZDNmNDZhNjNiYWU2MTYwODU0ZjFhMDNiODExYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBA
IHB1YmxpYzoKICAgICBFbXB0eUVkaXRvckNsaWVudCgpID0gZGVmYXVsdDsKIAogcHJpdmF0ZToK
LSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBi
b29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KQEAgLTIwMCwxNSArMjAwLDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b2dnbGVHcmFt
bWFyQ2hlY2tpbmcoKSBmaW5hbCB7IH0KICAgICBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KSBmaW5hbCB7IHJldHVybiAtMTsgfQogCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFu
Z2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhS
YW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2Rl
KE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0
b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2lt
cGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkRW5kRWRp
dGluZyhjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBzaG91bGRJbnNlcnROb2RlKE5vZGUmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBF
ZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91
bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYs
IEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRUFmZmluaXR5LCBib29sKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyos
IFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEFwcGx5U3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jikg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbCB7
IH0KLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxl
dGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgZmluYWwgeyB9CkBAIC0yMTksOSArMjE5LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWwgeyB9CiAg
ICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkaWRFbmRVc2VyVHJp
Z2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpIGZpbmFsIHsgfQotICAgIHZvaWQgd2lsbFdyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKikgZmluYWwgeyB9CisgICAgdm9pZCB3aWxsV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgZmluYWwg
eyB9CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsIHsgfQot
ICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxT
dHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jiwg
VmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JikgZmluYWwgeyB9
CiAgICAgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikgZmluYWwgeyB9CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhT
b2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3VsdCkgZmluYWwgeyB9CiAKQEAgLTI2MSw3ICsyNjEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU3RyaW5nRm9yRmluZChjb25zdCBTdHJpbmcm
KSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1l
bnRGcmFnbWVudCYsIFJhbmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFu
Z2UmLCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRl
eCA0MWY3YTdlYzdhNDE5MTc3OTFiMjg1YjE5NDM5ZDJjMWJlOWRhZWZkLi5jN2VmY2ZjOTNiZDQ3
NzEyNzBlYTBiMDY5ZGNiOTI0N2M5MWEyYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIHZvaWQg
b3Blbk5ld1dpbmRvdyhjb25zdCBVUkwmIHVybFRvTG9hZCwgRnJhbWUmIGZyYW1lLCBTaG91bGRP
cGVuRXh0ZXJuYWwKIHN0YXRpYyB2b2lkIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoVUNoYXIgY2hh
cmFjdGVyLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAgU3RyaW5nIHRleHQoJmNoYXJhY3RlciwgMSk7
Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxp
dmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFmcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7CkBAIC0zNzQsNyArMzc0
LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzczogewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxl
LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKSB7CiAgICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNv
bW1hbmRPcHRpb24+IHJlcGxhY2VPcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1h
dGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogCiAg
ICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVs
bGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCmluZGV4IDczMTdiZmRmNDZkOTJhYzNkOTY1MGZjMzM0NjRmNTBmNmVl
YTU5MjcuLjgxMGQyZmM3MmEzMjVjZTRkNDIwYTNjY2EzNmQ5MmIzMDBjYTU4MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01NjgsNyArNTY4LDcgQEAgYm9vbCBE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Q29sb3IsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKSwgZmFsc2UpOwotICAg
ICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUucHRy
KCksIGNyZWF0ZUxpdmVSYW5nZShpbm5lclJhbmdlKS5nZXQoKSkpCisgICAgICAgIGlmICghaW5u
ZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgKmlubmVyUmFuZ2UpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURy
YWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRh
KTsKICAgICAgICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZS5wdHIoKSwg
RWRpdEFjdGlvbjo6U2V0Q29sb3IpOwpAQCAtNjAzLDcgKzYwMyw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlm
IChpc01vdmUgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAg
ICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRh
LCAqaW5uZXJGcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRydWUsIGNob3NlUGxhaW5U
ZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3Vs
ZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6RHJv
cHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50KCkud2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0
LCBkcmFnRGF0YSk7CkBAIC02MjksNyArNjI5LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29u
Y2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7Ci0g
ICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4
dCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJv
cHBlZCkpCisgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2Vy
dFRleHQodGV4dCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpA
QCAtMTAyMiw3ICsxMDIyLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1l
JiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIE9wdGlvblNldDxEcmEKICAgICAgICAgICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rpb25SYW5nZSk7CiAKLSAg
ICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpOworICAgICAgICAgICAgc3JjLmVk
aXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgqc2VsZWN0aW9uUmFuZ2UpOwog
CiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChtdXN0VXNlTGVn
YWN5RHJhZ0NsaWVudCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8
RHJhCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICBpZiAoIXByb21pc2VkQXR0YWNo
bWVudCAmJiBlZGl0b3IuY2xpZW50KCkpIHsKICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Us
IGlmIG5vIGZpbGUgVVJMIGlzIHNwZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhlIGluamVjdGVkIGJ1
bmRsZSB0byBwb3B1bGF0ZSB0aGUgcGFzdGVib2FyZCB3aXRoIGRhdGEuCi0gICAgICAgICAgICAg
ICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2Uo
c3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNy
Yy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAg
ICAgICAgICBlZGl0b3Iud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5zZmVyLnBh
c3RlYm9hcmQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApp
bmRleCA3NzkzMTcxZmUwYWRiMTE3ZGFmZjQxNjBkYWZmNjkxY2E0NDYwYzMxLi45ZGU3MDY1NGYy
MGI1ODIzZjc2NTYwMGUxNDE2YjlkOGMzYTkxZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xp
ZW50LmgKQEAgLTQzLDcgKzQzLDYgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xh
c3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIFN0eWxlUHJvcGVydGllczsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50
OwpAQCAtNTEsMTIgKzUwLDEzIEBAIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKIHN0cnVjdCBH
YXBSZWN0czsKIHN0cnVjdCBHcmFtbWFyRGV0YWlsOworc3RydWN0IFNpbXBsZVJhbmdlOwogCiBj
bGFzcyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRvckNsaWVudCgp
ID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSop
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSA9IDA7IAogICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkgPSAwOwpAQCAtNjUsMTcgKzY1LDE3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgPSAwOwogICAgIHZpcnR1YWwgaW50
IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEJlZ2luRWRpdGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRp
dGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2Rl
KiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBm
cm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJh
bmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUmLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlT
dHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEFwcGx5U3R5bGUoKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2Uq
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0
IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKSA9IDA7CiAKICNpZiBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckF0dGFjaG1lbnRJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgLyogaWRlbnRpZmllciAqLywgY29uc3QgU3RyaW5nJiAvKiBj
b250ZW50VHlwZSAqLywgY29uc3QgU3RyaW5nJiAvKiBwcmVmZXJyZWRGaWxlTmFtZSAqLywgUmVm
PFNoYXJlZEJ1ZmZlcj4mJikgeyB9CkBAIC05NSw5ICs5NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hh
bmdlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMs
IFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8
U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJl
cXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyhU
ZXh0Q2hlY2tpbmdSZXN1bHQpIHsgfQogCkBAIC0xODcsNyArMTg3LDcgQEAgcHVibGljOgogICAg
IC8vIHNlbGVjdGlvbiBhcyBhIHR5cGUgb2YgY2xpcGJvYXJkLgogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSYgZGVzdGlu
YXRpb24sIGJvb2wgaXNNb3ZlKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVw
RHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBi
b29sIGlzTW92ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNhblNob3dGb250UGFuZWwoKSBj
b25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2ZjFmMWI0
YWQ4MGIyMWY5OTVjMWZlZThkNzJhYWRjOTYyNzE1YjJiLi41ZWRhODMwZWNmNDY1ZDBkZDBiMjQ3
ZmFlMDAyMGM1ZTI1MmViOGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0zMDgyLDggKzMwODIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZl
bnRGb3JLZXkoKQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAg
ICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKSkgewotICAgICAgICBhdXRvIHNlbGVjdGlv
blJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3Qg
Zmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpLmdldCgpKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3Qg
PSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3Qu
bWF4WCgpIDogZmlyc3RSZWN0LngoKTsKICAgICAgICAgLy8gSW4gYSBtdWx0aWxpbmUgZWRpdCwg
Zmlyc3RSZWN0Lm1heFkoKSB3b3VsZCBlbmR1cCBvbiB0aGUgbmV4dCBsaW5lLCBzbyAtMS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCAzZjM3MjMyYzdlOTViYTIw
MDUzOTExMDQ5YWU4MDQwMjRmNjE2Nzg5Li43ZTIxMmVhZjRiOTUyYTg2ZGI0ZmQxMDgwNzZkMjA1
OTZkMTY1MjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC03
NTIsMTcgKzc1MiwxNiBAQCBFbGVtZW50KiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNh
YmxlRWxlbWVudE9yU2NvcGVPd25lcihjb25zdCBGb2N1c05hdmlnYQogICAgIHJldHVybiBwcmV2
aW91c0VsZW1lbnRXaXRoTG93ZXJUYWJJbmRleChzY29wZSwgbGFzdCwgc3RhcnRpbmdUYWJJbmRl
eCwgZXZlbnQpOwogfQogCi1zdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9k
ZSAqbm9kZSkKK3N0YXRpYyBib29sIHJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cyhFbGVtZW50JiBl
bGVtZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aGFzRWRpdGFi
bGVTdHlsZSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5oYXNFZGl0YWJsZVN0eWxlKCkpOwogCi0g
ICAgTm9kZSogcm9vdCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byByb290ID0gZWxlbWVu
dC5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBmcmFtZSA9IGVsZW1lbnQuZG9jdW1l
bnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIXJvb3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkRW5kRWRpdGluZyhyYW5n
ZU9mQ29udGVudHMoKnJvb3QpLnB0cigpKTsKKyAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNo
b3VsZEVuZEVkaXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUqIG9sZEZvY3VzZWRG
cmFtZSwgRnJhbWUqIG5ld0ZvY3VzZWRGcmFtZSwgTm9kZSogbmV3Rm9jdXNlZE5vZGUpCkBAIC04
NDEsNyArODQwLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIEZyYW1lJiBuZXdGb2N1c2VkRnJhbWUKICAgICB9CiAKICAgICAvLyBG
SVhNRTogTWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgY2hlY2sgZm9yIGNhcmV0QnJvd3NpbmcK
LSAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xkRm9jdXNlZEVsZW1lbnQtPmlzUm9vdEVk
aXRhYmxlRWxlbWVudCgpICYmICFyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMob2xkRm9jdXNlZEVs
ZW1lbnQpKQorICAgIGlmIChvbGRGb2N1c2VkRWxlbWVudCAmJiBvbGRGb2N1c2VkRWxlbWVudC0+
aXNSb290RWRpdGFibGVFbGVtZW50KCkgJiYgIXJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cygqb2xk
Rm9jdXNlZEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3BhZ2UuZWRp
dG9yQ2xpZW50KCkud2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
aW5kZXggNGQwMzRmM2JkMmJmYTlhYWFkMGU2ZTJhNDk0Mzg0ZDNhYzMyYWVlYS4uMzU1MWI0ZDYy
Yjg0NjBkYmM2MTc0YjdkZTVmMmI5ZjM4M2FmMDc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAg
LTgxOCwyOCArODE4LDI1IEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0
IEludFBvaW50JiBwb2ludCkKIAogUmVmUHRyPFJhbmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKLSAgICBpZiAocG9zaXRp
b24uaXNOdWxsKCkpCisgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvaW50
KGZyYW1lUG9pbnQpOworICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIXBvc2l0aW9uQm91bmRhcnkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgUG9zaXRpb24gZGVlcFBvc2l0aW9uID0gcG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKTsKLSAgICBUZXh0KiBjb250YWluZXJUZXh0ID0gZGVlcFBvc2l0aW9uLmNvbnRh
aW5lclRleHQoKTsKKyAgICBhdXRvIGNvbnRhaW5lclRleHQgPSBwb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLmNvbnRhaW5lclRleHQoKTsKICAgICBpZiAoIWNvbnRhaW5lclRleHQgfHwgIWNvbnRh
aW5lclRleHQtPnJlbmRlcmVyKCkgfHwgY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUo
KS51c2VyU2VsZWN0KCkgPT0gVXNlclNlbGVjdDo6Tm9uZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygp
OwotICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsK
LSAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocHJl
dmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZy
YW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2U7Cisg
ICAgaWYgKGF1dG8gcHJldmlvdXMgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5wcmV2aW91
cygpKSkgeworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5n
ZSB7ICpwcmV2aW91cywgKnBvc2l0aW9uQm91bmRhcnkgfTsKKyAgICAgICAgaWYgKGVkaXRvcigp
LmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1l
UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShwcmV2aW91c0NoYXJh
Y3RlclJhbmdlKTsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9u
Lm5leHQoKTsKLSAgICBpZiAoUmVmUHRyPFJhbmdlPiBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtl
UmFuZ2UocG9zaXRpb24sIG5leHQpKSB7Ci0gICAgICAgIExheW91dFJlY3QgcmVjdCA9IGVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIG5leHRD
aGFyYWN0ZXJSYW5nZTsKKyAgICBpZiAoYXV0byBuZXh0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9z
aXRpb24ubmV4dCgpKSkgeworICAgICAgICBhdXRvIG5leHRDaGFyYWN0ZXJSYW5nZSA9IFNpbXBs
ZVJhbmdlIHsgKnBvc2l0aW9uQm91bmRhcnksICpuZXh0IH07CisgICAgICAgIGlmIChlZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9p
bnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShuZXh0Q2hhcmFjdGVyUmFu
Z2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
NTQ1YmVjMWNlYjFmYzEwZGRjNjZmM2E3YWZjMzRjYzg3MDkyYjM5Zi4uNmZhMmUzNzYyMjQ5YmE5
MmZhOWVlMmQyOTJkNTc4MTJlZTU4YWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MTMsMzQg
KzcxMywzNiBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRpZFdyYQogCiB2b2lkIFBhZ2U6OmZpbmRTdHJp
bmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9u
cywgaW50IGxpbWl0LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hdGNoUmFuZ2VzLCBpbnQmIGlu
ZGV4Rm9yU2VsZWN0aW9uKQogeworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0UmFuZ2Vz
OworCiAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOwogCiAgICAgRnJhbWUqIGZyYW1lID0gJm1h
aW5GcmFtZSgpOwogICAgIEZyYW1lKiBmcmFtZVdpdGhTZWxlY3Rpb24gPSBudWxscHRyOwogICAg
IGRvIHsKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0
LCAwLCBvcHRpb25zLCBsaW1pdCA/IChsaW1pdCAtIG1hdGNoUmFuZ2VzLnNpemUoKSkgOiAwLCB0
cnVlLCAmbWF0Y2hSYW5nZXMpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVz
Rm9yVGV4dCh0YXJnZXQsIHsgfSwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSByZXN1bHRSYW5n
ZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZyZXN1bHRSYW5nZXMpOwogICAgICAgICBpZiAoZnJhbWUt
PnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgICAgIGZyYW1lV2l0aFNlbGVjdGlvbiA9
IGZyYW1lOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBDYW5X
cmFwOjpObyk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogCi0gICAgaWYgKG1hdGNoUmFuZ2VzLmlz
RW1wdHkoKSkKKyAgICBpZiAocmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewogICAgICAgICBpbmRleEZvclNlbGVj
dGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CiAgICAgICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRS
YW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hS
YW5nZXNbaSAtIDFdKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHRSYW5nZXMu
c2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
RU5EX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2VzW2kgLSAxXSkpOwogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rp
b24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDAsIHNpemUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdl
KS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdl
c1tpXSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJlc3VsdFJhbmdl
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpTVEFSVF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZXNbaV0pKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0
aW9uID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NDksMTAgKzc1MSwxMyBA
QCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkKLSAgICAgICAgICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gbWF0Y2hSYW5nZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gcmVzdWx0UmFuZ2VzLnNpemUoKSAtIDE7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKICAgICB9CisKKyAgICBmb3IgKGF1dG8mIHJh
bmdlIDogcmVzdWx0UmFuZ2VzKQorICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKSk7CiB9CiAKIFJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhj
b25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBv
cHRpb25zKQpAQCAtNzY3LDE3ICs3NzIsMTYgQEAgUmVmUHRyPFJhbmdlPiBQYWdlOjpyYW5nZU9m
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEYKICAg
ICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5vd25lckRv
Y3VtZW50KCkuZnJhbWUoKSA6ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9
IGZyYW1lOwogICAgIGRvIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2Ug
PSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJh
bWUgPyByZWZlcmVuY2VSYW5nZSA6IDAsIG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHRSYW5nZTsKLQorICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9
IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFt
ZSA/IG1ha2VSYW5nZShyZWZlcmVuY2VSYW5nZSkgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBX
cmFwQXJvdW5kKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFu
Z2UpOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCAhb3B0aW9ucy5jb250
YWlucyhCYWNrd2FyZHMpLCBjYW5XcmFwKTsKICAgICB9IHdoaWxlIChmcmFtZSAmJiBmcmFtZSAh
PSBzdGFydEZyYW1lKTsKIAogICAgIC8vIFNlYXJjaCBjb250ZW50cyBvZiBzdGFydEZyYW1lLCBv
biB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgcmVmZXJlbmNlIHJhbmdlIHRoYXQgd2UgZGlkIGVhcmxp
ZXIuCiAgICAgLy8gV2UgY2hlYXQgYSBiaXQgYW5kIGp1c3Qgc2VhcmNoIGFnYWluIHdpdGggd3Jh
cCBvbi4KICAgICBpZiAoY2FuV3JhcCA9PSBDYW5XcmFwOjpZZXMgJiYgcmVmZXJlbmNlUmFuZ2Up
IHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5l
ZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMgfCBX
cmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
UmFuZ2U7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIG1ha2VSYW5nZSgqcmVmZXJlbmNlUmFuZ2UpLCBvcHRp
b25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC03OTQsNyArNzk4LDcgQEAgdW5zaWduZWQgUGFnZTo6ZmluZE1hdGNoZXNGb3JUZXh0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnMKICAgICBkbyB7
CiAgICAgICAgIGlmIChzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcykKICAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKHNo
b3VsZEhpZ2hsaWdodE1hdGNoZXMgPT0gSGlnaGxpZ2h0TWF0Y2hlcyk7Ci0gICAgICAgIG1hdGNo
Q291bnQgKz0gZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCAwLCBv
cHRpb25zLCBtYXhNYXRjaENvdW50ID8gKG1heE1hdGNoQ291bnQgLSBtYXRjaENvdW50KSA6IDAs
IHNob3VsZE1hcmtNYXRjaGVzID09IE1hcmtNYXRjaGVzLCAwKTsKKyAgICAgICAgbWF0Y2hDb3Vu
dCArPSBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIFdURjo6bnVs
bG9wdCwgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCA/IChtYXhNYXRjaENvdW50IC0gbWF0Y2hDb3Vu
dCkgOiAwLCBzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcywgbnVsbHB0cik7CiAgICAg
ICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIENhbldyYXA6Ok5vKTsKICAg
ICB9IHdoaWxlIChmcmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCBjMmZhNmM4MTRjNGIwZWI2Y2NiYmVjZjEwOTY5MGI1YTYwMjY0ZGFjLi40NmFhYjgwOTNlNDdl
YmI2ZTQ2ZDAyNTY1NDVmZDBhMzdjNDUyY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0yNjE3LDcgKzI2MTcsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8UmFuZ2U+PiBJ
bnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8UgogICAg
IGlmIChwYXJzZWRPcHRpb25zLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gcGFyc2Vk
T3B0aW9ucy5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPmVkaXRv
cigpLnJhbmdlT2ZTdHJpbmcodGV4dCwgcmVmZXJlbmNlUmFuZ2UuZ2V0KCksIHBhcnNlZE9wdGlv
bnMucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoZG9j
dW1lbnQtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGV4dCwgbWFrZVJhbmdlKHJlZmVyZW5jZVJh
bmdlKSwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSkpOwogfQogCiBFeGNlcHRp
b25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbmRPcHRpb25zLCBjb25zdCBTdHJpbmcm
IG1hcmtNYXRjaGVzKQpAQCAtMjYzMSw3ICsyNjMxLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+
IEludGVybmFsczo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFYKICAgICAgICAgcmV0dXJuIHBhcnNlZE9wdGlvbnMucmVsZWFzZUV4Y2VwdGlvbigpOwogCiAg
ICAgYm9vbCBtYXJrID0gbWFya01hdGNoZXMgPT0gIm1hcmsiOwotICAgIHJldHVybiBkb2N1bWVu
dC0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0ZXh0LCBudWxscHRyLCBwYXJzZWRPcHRp
b25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCAxMDAwLCBtYXJrLCBudWxscHRyKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGV4dCwgV1RGOjpudWxs
b3B0LCBwYXJzZWRPcHRpb25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCAxMDAwLCBtYXJrLCBudWxs
cHRyKTsKIH0KIAogRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRGaW5kTWF0
Y2hlcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaW5kT3B0aW9u
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRl
eCBiMmRhZGM2OTc0MDVkNjkxMWM2YzI5NTJiN2M5ZDQ0ZmZmZTVhZDQxLi4yYjA0MjIyNGYzOWM4
MTYyOGE4ZjhkZmY5NWFkZGE4Yjk2OWExMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC02NjMsNyArNjYzLDcgQEAgLSAoTlNSZWN0KXJl
Y3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQogICAgICAgICBMT0coUHJpbnRpbmcsICItW1dLUHJp
bnRpbmdWaWV3ICVwIHJlY3RGb3JQYWdlOiVkXSAtIGRhdGEgaXMgbm90IHlldCBhdmFpbGFibGUi
LCBzZWxmLCAoaW50KXBhZ2UpOwogICAgICAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgpKSB7CiAg
ICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSBub3QgdG9sZCBBcHBLaXQgaG93IG1hbnkgcGFnZXMg
dGhlcmUgYXJlLCBzbyBpdCB3aWxsIHRyeSB0byBwcmludCB1bnRpbCBhIG51bGwgcmVjdCBpcyBy
ZXR1cm5lZC4KLSAgICAgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAg
ICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgbXVz
dCBiZSBzdGlsbCBjYWxjdWxhdGluZyB0aGUgcGFnZSByYW5nZS4KICAgICAgICAgQVNTRVJUKF9l
eHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjayk7CkBAIC02NzQsNyArNjc0LDcgQEAgLSAoTlNS
ZWN0KXJlY3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQogICAgIC8vIFJldHVybmluZyBhIG51bGwg
cmVjdCBwcmV2ZW50cyBzZWxlY3Rpbmcgbm9uLWV4aXN0ZW50IHBhZ2VzIGluIHByZXZpZXcgZGlh
bG9nLgogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGFnZSkgPiBfcHJpbnRpbmdQYWdl
UmVjdHMuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVCghX3dlYkZyYW1lLT5wYWdlKCkpOwotICAg
ICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIE5TWmVy
b1JlY3Q7CiAgICAgfQogCiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gX3ByaW50aW5nUGFn
ZVJlY3RzW3BhZ2UgLSAxXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggNzlhMzc0MDBjM2Y0
MTU4YmY0MjhmNjk0MmJjODg2ZjFhY2QyMjAzZC4uZGQ5YzM1MjYwNWYwOGYzOTQwZDkwMGQ4ZjAy
NjUyNDdlMDRiYTM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc0LDExICs3NCw5IEBA
IHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVRleHRDaGVja2luZ1JlcXVlc3RJRCgpCiAgICAgcmV0
dXJuIHVuaXF1ZVRleHRDaGVja2luZ1JlcXVlc3RJRCsrOwogfQogCi1ib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2Up
CiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50
KCkuc2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZSkuZ2V0KCkpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkKCkKQEAgLTExNCw1MCArMTEyLDM3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQogaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiAwOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVn
aW5FZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdp
bkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGJvb2wgcmVzdWx0ID0g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2luRWRpdGluZygq
bV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
QmVnaW5FZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOwogfQog
Ci1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCiti
b29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9y
Q2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLnB0cigpKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZElu
c2VydE5vZGUoTm9kZSogbm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRB
Y3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9k
ZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRp
dG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2UsIG5vZGUs
IHJhbmdlVG9SZXBsYWNlLCBhY3Rpb24pOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFnZSwgJm5vZGUsIGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZVRvUmVwbGFjZSkuZ2V0KCksIGFjdGlvbik7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNl
LCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIGJv
b2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZElu
c2VydFRleHQoKm1fcGFnZSwgdGV4dC5pbXBsKCksIHJhbmdlVG9SZXBsYWNlLCBhY3Rpb24pOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFn
ZSwgdGV4dC5pbXBsKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCksIGFj
dGlvbik7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgc3RpbGxTZWxlY3RpbmcpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqbV9wYWdlLCBm
cm9tUmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqbV9wYWdl
LCBjcmVhdGVMaXZlUmFuZ2UoZnJvbVJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKHRvUmFu
Z2UpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogICAgIAotYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFu
Z2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlKHN0eWxl
LT5pc011dGFibGUoKSA/IFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPihzdGF0aWNfY2FzdDxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSkgOiBzdHlsZS0+bXV0YWJsZUNvcHkoKSk7
Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
c2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCAmbXV0YWJsZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURl
Y2xhcmF0aW9uKCksIHJhbmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGRBcHBseVN0eWxlKCptX3BhZ2UsICZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NT
dHlsZURlY2xhcmF0aW9uKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCiAj
aWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTIxMSw5ICsxOTYsOCBAQCB2b2lkIFdl
YkVkaXRvckNsaWVudDo6ZGlkQXBwbHlTdHlsZSgpCiAgICAgbV9wYWdlLT5kaWRBcHBseVN0eWxl
KCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShSYW5nZSosIFJhbmdlKikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VB
ZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjIsNyArMjA2
LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZygpCiAgICAgLy8gRklY
TUU6IFdoYXQgZ29vZCBpcyBhIG5vdGlmaWNhdGlvbiBuYW1lLCBpZiBpdCdzIGFsd2F5cyB0aGUg
c2FtZT8KICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkQmVnaW5F
ZGl0aW5nTm90aWZpY2F0aW9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJXZWJWaWV3RGlkQmVn
aW5FZGl0aW5nTm90aWZpY2F0aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5kaWRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEJlZ2luRWRpdGlu
Z05vdGlmaWNhdGlvbi5nZXQoKS5pbXBsKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQpAQCAtMjc1
LDcgKzI1OCw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlm
aWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZEVuZEVkaXRpbmdOb3Rp
ZmljYXRpb24iKSk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmRp
ZEVuZEVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24uZ2V0
KCkuaW1wbCgpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNs
aWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQpAQCAtMjgzLDE5ICsyNjUsMTkg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkK
ICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZGlkV3JpdGVUb1Bhc3Rl
Ym9hcmQoKm1fcGFnZSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqIHJhbmdlKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6Ondp
bGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
IHJhbmdlKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxs
V3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgcmFuZ2UpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFJhbmdlKiByYW5nZSwgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2Fy
ZERhdGEpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7
Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmRE
YXRhRm9yUmFuZ2UoKm1fcGFnZSwgcmFuZ2UsIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERh
dGEpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5nZXRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIHBh
c3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVu
dDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSYg
ZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1U
d29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgU2ltcGxlUmFuZ2Um
IGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUVkaXRvckNsaWVudCgpLnBlcmZvcm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBmcmFnbWVu
dCwgZGVzdGluYXRpb24sIGlzTW92ZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGNy
ZWF0ZUxpdmVSYW5nZShkZXN0aW5hdGlvbiksIGlzTW92ZSk7CiB9CiAKIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFVuZG9TdGVwJiBzdGVwKQpAQCAtNDI1LDEyICs0MDcs
MTAgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1l
bnQqIGVsZW1lbnQpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpvdmVyZmxvd1Njcm9sbFBvc2l0
aW9uQ2hhbmdlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnN1YkZyYW1lU2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCiAjZW5kaWYKQEAgLTYxOCw3ICs1OTgsNiBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZShFbGVtZW50KiBlbGVtZW50KQogI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIG1fcGFnZS0+c2V0SW5wdXRNZXRob2RTdGF0
ZShlbGVtZW50KTsKICNlbHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBVTlVTRURfUEFS
QU0oZWxlbWVudCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAwZGY3NzU5ZTFi
ODJkZDQwM2NmZGE4Y2E3MzA5OWViYzZkZGQ4MDhjLi4yM2UzOTRmMjdlYzMyNjkyNzhjNDViOGUx
NDRkMzZkYzdjN2JmZDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJD
b3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgYm9vbCBzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQoKSBmaW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKSBmaW5hbDsKQEAgLTU0LDE1ICs1NCwxNSBAQCBwcml2YXRlOgogICAgIHZv
aWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgZmluYWw7CiAgICAgaW50IHNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkgZmluYWw7CiAgICAgCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2Vi
Q29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6
UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSos
IFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAg
ICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6UmFuZ2UqLCBX
ZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSog
dG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsK
KyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYp
IGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlJiwg
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5n
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9y
SW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5
LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKICAgICAKLSAgICBib29sIHNob3VsZEFwcGx5
U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsK
KyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVz
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9p
ZCBkaWRBcHBseVN0eWxlKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRl
bGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNv
bnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHByZWZlcnJl
ZEZpbGVOYW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBmaW5hbDsKQEAgLTg1LDkg
Kzg1LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbGVkQ29tcG9zaXRpb24oKSBmaW5hbDsK
ICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRF
ZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
V2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAg
ICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAgdm9pZCBn
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2Fy
ZERhdGEoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJVbmRvU3Rl
cChXZWJDb3JlOjpVbmRvU3RlcCYpIGZpbmFsOwogICAgIHZvaWQgcmVnaXN0ZXJSZWRvU3RlcChX
ZWJDb3JlOjpVbmRvU3RlcCYpIGZpbmFsOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzaG91bGRTdXBwcmVzc1Bhc3N3b3JkRWNobygpIGNvbnN0IGZpbmFsOwogI2VuZGlm
CiAKLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50
JiwgV2ViQ29yZTo6UmFuZ2UmLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAgYm9vbCBwZXJmb3Jt
VHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFdlYkNvcmU6OlNp
bXBsZVJhbmdlJiwgYm9vbCBpc01vdmUpIGZpbmFsOwogICAgIGJvb2wgc3VwcG9ydHNHbG9iYWxT
ZWxlY3Rpb24oKSBmaW5hbDsKIAogICAgIGJvb2wgY2FuU2hvd0ZvbnRQYW5lbCgpIGNvbnN0IGZp
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IGFkYTUyY2RkNzk3MTFhODIzZTljYTMyZDJlZWUwYzhmMDgwZDg2OGIuLmVkN2Q1MDE3MDk1YzUw
MmMxNGZmMGY5NWI2YTA0NWQ5NjgzNjgzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01NDI2LDQzICs1NDI2LDM2IEBAIHZvaWQgV2ViUGFn
ZTo6aGFzTWFya2VkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5jKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgRWRpdGluZ1JhbmdlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJh
bmdlKGZyYW1lLCBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCkpOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
RWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5lZGl0
b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpLmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0
U2VsZWN0ZWRSYW5nZUFzeW5jKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRWRpdGluZ1Jh
bmdlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRp
bmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2Uo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
OwotICAgIGNvbXBsZXRpb25IYW5kbGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpOwog
fQogCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBjb25z
dGV4cHIgT3B0aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0VHlwZSB7IEhp
dFRlc3RSZXF1ZXN0OjpSZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwgSGl0VGVzdFJl
cXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCwgIEhpdFRlc3RSZXF1ZXN0OjpB
bGxvd0NoaWxkRnJhbWVDb250ZW50IH07Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50
LCBoaXRUeXBlKTsKLSAgICBGcmFtZSogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCkgPyByZXN1bHQuaW5uZXJOb2RlRnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBm
cmFtZS0+cmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgp
KTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKCpmcmFt
ZSwgcmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgaGl0VHlwZSk7CisgICAg
YXV0byYgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyAqcmVzdWx0LmlubmVy
Tm9kZUZyYW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS5yYW5nZUZvclBvaW50KHJlc3VsdC5yb3VuZGVk
UG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGlu
Z1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIHJhbmdlLmdldCgpKTsKICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGVk
aXRpbmdSYW5nZS5sb2NhdGlvbiksIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGlu
Z1JhbmdlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBJbnRSZWN0
IHJlc3VsdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgwLCAwKSk7Ci0gICAgCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRpdGluZ1Jhbmdl
KTsKKyAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7CisgICAgYXV0byByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFt
ZSwgZWRpdGluZ1JhbmdlKTsKICAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2socmVzdWx0LCBF
ZGl0aW5nUmFuZ2Uobm90Rm91bmQsIDApLCBjYWxsYmFja0lEKSk7CisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soeyB9LCB7
IH0sIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIHJlc3VsdCA9
IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RG
b3JSYW5nZShyYW5nZS5nZXQoKSkpOwotCi0gICAgLy8gRklYTUU6IFVwZGF0ZSBhY3R1YWxSYW5n
ZSB0byBtYXRjaCB0aGUgcmFuZ2Ugb2YgZmlyc3QgcmVjdC4KLSAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgZWRpdGlu
Z1JhbmdlLCBjYWxsYmFja0lEKSk7CisgICAgLy8gRklYTUU6IFBhc3MgYW4gRWRpdGluZ1Jhbmdl
IHRoYXQgbWF0Y2hlcyB0aGUgcmFuZ2Ugb2YgdGhlIGZpcnN0IHJlY3QsIHJhdGhlciB0aGFuIHRo
ZSBlbnRpcmUgcGFzc2VkLWluIHJhbmdlPworICAgIGF1dG8gcmVjdCA9IGZyYW1lLnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqcmFuZ2Up
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZUNhbGxiYWNrKHJlY3QsIGVkaXRpbmdSYW5nZSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdl
YlBhZ2U6OnNldENvbXBvc2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9z
aXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlv
biwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSkKQEAgLTU0NzAs
MTUgKzU0NjMsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW4KICAgICBwbGF0Zm9ybVdpbGxQ
ZXJmb3JtRWRpdGluZ0NvbW1hbmQoKTsKIAogICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQogICAgIGlmIChmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIFJlZlB0
cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50RWRpdGlu
Z1JhbmdlLmxvY2F0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICByZXBsYWNlbWVudFJh
bmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCByZXBsYWNlbWVudEVkaXRpbmdSYW5n
ZSk7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRSYW5nZSkKKyAgICAgICAgICAgIGlmIChh
dXRvIHJlcGxhY2VtZW50UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIHJlcGxh
Y2VtZW50RWRpdGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVwbGFjZW1lbnRSYW5nZSwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkpKTsKICAgICAgICAgfQotCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldENv
bXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIGhpZ2hsaWdodHMsIHNlbGVjdGlvbi5sb2NhdGlv
biwgc2VsZWN0aW9uLmxvY2F0aW9uICsgc2VsZWN0aW9uLmxlbmd0aCk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xp
Yi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGli
LmNwcAppbmRleCA0YzUwMGUzNjY4YTMyMTIzYjllMjRiMjc4ZGFhYjA3NDU3M2ZmYTMwLi40Njky
NTUzYTBhODA5ZGQzZjcwMzk1M2UzNThkZjMzNDYyMmVjNTllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTA5
LDEwICsxMDksMTAgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1l
JiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgYXV0byBzdXJyb3Vu
ZGluZ0VuZCA9IGVuZE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KTsKICAgICAgICAg
YXV0byBzdXJyb3VuZGluZ1JhbmdlID0gbWFrZVJhbmdlKHN1cnJvdW5kaW5nU3RhcnQsIHN1cnJv
dW5kaW5nRW5kKTsKICAgICAgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBz
dXJyb3VuZGluZ1JhbmdlICYmIHN1cnJvdW5kaW5nUmFuZ2UtPmNvbnRhaW5zKCpjb21wb3NpdGlv
blJhbmdlKSkgeworICAgICAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBzdXJyb3VuZGluZ1Jh
bmdlICYmIHN1cnJvdW5kaW5nUmFuZ2UtPmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9z
aXRpb25SYW5nZSkuZ2V0KCkpKSB7CiAgICAgICAgICAgICBhdXRvIGNsb25lZFJhbmdlID0gc3Vy
cm91bmRpbmdSYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgICAgICAgICAgc3Vycm91bmRpbmdSYW5n
ZS0+c2V0RW5kKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgICAg
ICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQoY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7
CisgICAgICAgICAgICBzdXJyb3VuZGluZ1JhbmdlLT5zZXRFbmQoY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KSk7CisgICAgICAgICAgICBjbG9uZWRS
YW5nZS0+c2V0U3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFu
Z2UtPmVuZCkpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0
ID0gcGxhaW5UZXh0KCpzdXJyb3VuZGluZ1JhbmdlKSArIHBsYWluVGV4dChjbG9uZWRSYW5nZSk7
CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3Np
dGlvbiA9IGNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKTsKICAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBvc2l0aW9uID0gcG9zdExh
eW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGQ5YzZj
NGE1YzhhNmYyYjQyNWYxMjIwOGU0MzNjNTRjOWIwOGY0ZjcuLjk0YTY3NTBhMzhjZGNkNDVmMmEy
ZmQ0N2Q3YzM3OGUzNDQ2YzFmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yNjcsMTAgKzI2NywxMCBAQCB2b2lkIFdl
YlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYg
cmVzdWx0KSBjb25zdAogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkp
IHsKICAgICAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNv
bXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICAgICAgY29tcG9zaXRpb25SYW5nZS0+Y29sbGVj
dFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CisgICAgICAg
ICAgICBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9u
UmVjdHMocG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKICAgICAgICAgICAgIGNvbnZl
cnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJlY3RzKHZpZXcsIHBvc3RMYXlvdXREYXRhLm1h
cmtlZFRleHRSZWN0cyk7CiAKLSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHQg
PSBwbGFpblRleHRGb3JDb250ZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICAg
ICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoKmNvbXBv
c2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjb21wb3NpdGlvblNl
bGVjdGlvbigqY29tcG9zaXRpb25SYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5t
YXJrZWRUZXh0Q2FyZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21w
b3NpdGlvblNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxw
dHIgLyogaW5zaWRlRml4ZWQgKi8pKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtl
ZFRleHRDYXJldFJlY3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlv
blNlbGVjdGlvbi52aXNpYmxlRW5kKCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8qIGlu
c2lkZUZpeGVkICovKSk7CkBAIC0xMzc3LDEzICsxMzc3LDE1IEBAIHZvaWQgV2ViUGFnZTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJl
VHlwZSwKICAgICB7CiAgICAgICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24o
KSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IG1hcmtlZFJhbmdl
ID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAgICBpZiAocG9zaXRp
b24gPCBtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAgICAgICAgcG9zaXRpb24g
PSBtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotICAgICAgICBpZiAocG9zaXRpb24gPiBt
YXJrZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbWFya2Vk
UmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgIGF1dG8gbWFya2VkUmFuZ2UgPSBmcmFtZS5l
ZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtYXJrZWRSYW5nZS0+c3RhcnQpOworICAgICAg
ICBhdXRvIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1hcmtlZFJh
bmdlLT5lbmQpOworICAgICAgICBpZiAocG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKQorICAgICAg
ICAgICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgICAgICBpZiAocG9zaXRpb24gPiBl
bmRQb3NpdGlvbikKKyAgICAgICAgICAgIHBvc2l0aW9uID0gZW5kUG9zaXRpb247CiAgICAgICAg
IGlmICh3a0dlc3R1cmVTdGF0ZSAhPSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbikKLSAg
ICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKG1hcmtlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpICE9
IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBw
b3NpdGlvbikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxh
Z3M+IHsgfTsKKyAgICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0
YXJ0UG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpICE9IGRp
c3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3NpdGlvbikgPyBQaHJhc2VC
b3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IHsgfTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZmxhZ3MgPSBQaHJhc2VCb3VuZGFyeUNoYW5nZWQ7CiAgICAgICAg
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0
aW9uKTsKQEAgLTI0ODMsNyArMjQ4NSw2IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQ
YWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgIEVkaXRpbmdSYW5nZSBtYXJrZWRUZXh0
UmFuZ2U7CiAKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKICAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0
YXJ0KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgY29uc3QgdW5zaWduZWQgbWluQ29udGV4dFdvcmRD
b3VudCA9IDM7CkBAIC0yNDk0LDE0ICsyNDk1LDEyIEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4
dCBXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgICAgICBzZWxlY3RlZFRleHQg
PSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwogCiAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1l
LmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgc3RhcnRQb3NpdGlvbik7CiAgICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QmVmb3JlOwotICAg
ICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgZW5kUG9zaXRpb24sIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0
aW9uKCkpOworICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
UG9zaXRpb24pKQorICAgICAgICAgICAgbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNv
bnRleHQoeyBjb21wb3NpdGlvblJhbmdlLT5zdGFydCwgKnN0YXJ0IH0pOwogICAgICAgICBTdHJp
bmcgbWFya2VkVGV4dEFmdGVyOwotICAgICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICBtYXJr
ZWRUZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAg
aWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pKQorICAgICAgICAg
ICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh7ICplbmQsIGNvbXBvc2l0
aW9uUmFuZ2UtPmVuZCB9KTsKICAgICAgICAgbWFya2VkVGV4dCA9IG1hcmtlZFRleHRCZWZvcmUg
KyBzZWxlY3RlZFRleHQgKyBtYXJrZWRUZXh0QWZ0ZXI7CiAgICAgICAgIGlmICghbWFya2VkVGV4
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1hcmtlZFRleHRSYW5nZS5sb2NhdGlvbiA9IG1h
cmtlZFRleHRCZWZvcmUubGVuZ3RoKCk7CkBAIC0yNjE3LDE0ICsyNjE2LDE2IEBAIHN0YXRpYyB2
b2lkIGZvY3VzZWRFbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVt
ZW50JiBmb2N1c2VkRWxlCiAgICAgSW50UG9pbnQgY29uc3RyYWluZWRQb2ludCA9IGNvbnN0cmFp
blBvaW50KGFkanVzdGVkUG9pbnQsIGZyYW1lLCBmb2N1c2VkRWxlbWVudCk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3Ry
YWluZWRQb2ludCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgYXV0byBjb21wb3NpdGlvblJhbmdl
ID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmICghY29tcG9zaXRp
b25SYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBvc2l0aW9uIDwgY29tcG9zaXRp
b25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAgICBwb3NpdGlvbiA9IGNvbXBvc2l0aW9u
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBlbHNlIGlmIChwb3NpdGlvbiA+IGNvbXBvc2l0
aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgIHBvc2l0aW9uID0gY29tcG9zaXRpb25S
YW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpOworICAgIGF1dG8gZW5k
UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+
ZW5kKTsKKyAgICBpZiAocG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKQorICAgICAgICBwb3NpdGlv
biA9IHN0YXJ0UG9zaXRpb247CisgICAgZWxzZSBpZiAocG9zaXRpb24gPiBlbmRQb3NpdGlvbikK
KyAgICAgICAgcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKICAgICBJbnRSZWN0IGNhcmV0UmVjdCA9
IHZpZXcuY29udGVudHNUb1Jvb3RWaWV3KHBvc2l0aW9uLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7
CiAgICAgZmxvYXQgZGVsdGFYID0gYWJzKGNhcmV0UmVjdC54KCkgKyAoY2FyZXRSZWN0LndpZHRo
KCkgLyAyKSAtIHJlcXVlc3QucG9pbnQueCgpKTsKICAgICBmbG9hdCBkZWx0YVlGcm9tVGhlVG9w
ID0gYWJzKGNhcmV0UmVjdC55KCkgLSByZXF1ZXN0LnBvaW50LnkoKSk7CkBAIC00MjU1LDggKzQy
NTYsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3Vt
ZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICBpZiAod2FudHNNYXJrZWRU
ZXh0UmVjdHMgJiYgY29tcG9zaXRpb25SYW5nZSkgewogICAgICAgICAgICAgLy8gSW4gdGhlIGNh
c2Ugd2hlcmUgdGhlIGNsaWVudCBoYXMgcmVxdWVzdGVkIG1hcmtlZCB0ZXh0IHJlY3RzIG1ha2Ug
c3VyZSB0aGF0IHRoZSBjb250ZXh0CiAgICAgICAgICAgICAvLyByYW5nZSBlbmNvbXBhc3NlcyB0
aGUgZW50aXJlIG1hcmtlZCB0ZXh0IHJhbmdlIHNvIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGEgdHJ1
bmNhdGVkIHJlc3VsdC4KLSAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25TdGFydCA9IGNvbXBv
c2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgICAgIGF1dG8gY29tcG9zaXRp
b25FbmQgPSBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICAgICAgYXV0
byBjb21wb3NpdGlvblN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0
aW9uUmFuZ2UtPnN0YXJ0KTsKKyAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25FbmQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKTsKICAgICAgICAg
ICAgIGlmIChjb250ZXh0QmVmb3JlU3RhcnQgPiBjb21wb3NpdGlvblN0YXJ0KQogICAgICAgICAg
ICAgICAgIGNvbnRleHRCZWZvcmVTdGFydCA9IGNvbXBvc2l0aW9uU3RhcnQ7CiAgICAgICAgICAg
ICBpZiAoY29udGV4dEFmdGVyRW5kIDwgY29tcG9zaXRpb25FbmQpCkBAIC00Mjc2LDkgKzQyNzcs
OSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50
RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9
IG1ha2VTdHJpbmcoY29udGV4dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24pOwogICAgIGNvbnRleHQuc2VsZWN0ZWRUZXh0ID0gbWFrZVN0cmluZyhzdGFydE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24pOwogICAgIGNvbnRleHQuY29udGV4dEFmdGVyID0gbWFrZVN0cmluZyhlbmRPZlJhbmdlT2ZJ
bnRlcmVzdEluU2VsZWN0aW9uLCBjb250ZXh0QWZ0ZXJFbmQpOwotICAgIGlmIChjb21wb3NpdGlv
blJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBjb21wb3NpdGlv
blJhbmdlLmdldCgpKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFy
dChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gY29tcG9zaXRpb25FbmQoY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7Cisg
ICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3Qu
Z2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSkucHRyKCkpKSB7CisgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gY29tcG9zaXRpb25FbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9u
UmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBtYWtlU3RyaW5nKGNv
bXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kKTsKICAgICAgICAgY29udGV4dC5zZWxlY3Rl
ZFJhbmdlSW5NYXJrZWRUZXh0LmxvY2F0aW9uID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0
YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29tcG9zaXRpb25TdGFydCk7CiAgICAg
ICAgIGNvbnRleHQuc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5ndGggPSBbY29udGV4dC5z
ZWxlY3RlZFRleHQuc3RyaW5nIGxlbmd0aF07CkBAIC00MzA1LDEwICs0MzA2LDggQEAgdm9pZCBX
ZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250
ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFj
dGVyUmVjdHNGb3JSYW5nZSgqY29udGV4dFJhbmdlLCAwKTsKICAgICB9IGVsc2UgaWYgKHdhbnRz
TWFya2VkVGV4dFJlY3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAgdW5zaWduZWQg
Y29tcG9zaXRpb25TdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKSB7Ci0g
ICAgICAgICAgICBpZiAoYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChjb21wb3NpdGlvblJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRP
ZmZzZXQgPSBXZWJDb3JlOjpwbGFpblRleHQoU2ltcGxlUmFuZ2UgeyBXVEZNb3ZlKCpzdGFydCks
IFdURk1vdmUoKmVuZCkgfSkubGVuZ3RoKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8g
c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChjb250ZXh0QmVmb3JlU3RhcnQuZGVlcEVxdWl2YWxl
bnQoKSkpCisgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gV2ViQ29yZTo6cGxh
aW5UZXh0KHsgV1RGTW92ZSgqc3RhcnQpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydCB9KS5sZW5n
dGgoKTsKICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdl
KCpjb21wb3NpdGlvblJhbmdlLCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
SU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJ
T1MubW0KaW5kZXggOGQ2YzQ4NzkxZDQ3ZGY5NGVmOWEyMTM4YjM4MjM1NDAwMzViYTA0Yy4uZWNj
ZmI1MDFlNmVjMzIxODc2YTA2YTQwNDJmZGI5M2MxODA2ZDhhMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTE0
MCw3ICsxNDAsNyBAQCAtIChDR1JlY3QpY2xvc2VzdENhcmV0UmVjdEluTWFya2VkVGV4dFJhbmdl
Rm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsK
IAotICAgIGF1dG8gbWFya2VkVGV4dFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKS5nZXQoKTsKKyAgICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5lZGl0b3Io
KS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgYXV0byBtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24g
PSBtYXJrZWRUZXh0UmFuZ2UgPyBWaXNpYmxlU2VsZWN0aW9uKCptYXJrZWRUZXh0UmFuZ2UpIDog
VmlzaWJsZVNlbGVjdGlvbigpOwogCiAgICAgaWYgKCFtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24u
aXNSYW5nZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJh
bmdlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCmluZGV4IGEw
YjZiNzk2YTNhODI3OWQ4ODRjNjQ3MzAxNTM5MTM0NTA3MTYwZDguLmQwZDMwY2U5YTgxYjcxOGI5
YWMyMjgwMzRlYjA1NzE1OTllZGQ3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01SYW5nZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
UmFuZ2UubW0KQEAgLTMwOSw0ICszMDksOSBAQCBET01SYW5nZSAqa2l0KFdlYkNvcmU6OlJhbmdl
KiB2YWx1ZSkKICAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOwogfQogCitET01SYW5n
ZSAqa2l0KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UodmFsdWUpLmdldCgpKTsKK30KKwogI3VuZGVm
IElNUEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUlu
dGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5o
CmluZGV4IGFmNTU5MzI3MDkzMTY0NWJhNzJhZTFhMTk5MWFlZDkxNTA5ZGZjZDcuLmU2ODE5YTVm
OGQ1ODhkMmU5YjY4N2YwZDk3OWY2N2NiMjNhODlhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaApAQCAtMjMsMTEgKzIzLDkgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9y
dCA8V2ViS2l0TGVnYWN5L0RPTVJhbmdlLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFJhbmdlOwotfQotCiBXZWJDb3JlOjpSYW5nZSogY29yZShET01SYW5nZSAqKTsKIERPTVJhbmdl
ICpraXQoV2ViQ29yZTo6UmFuZ2UqKTsKK0RPTVJhbmdlICpraXQoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IGUxYjQyZWE2ZDJmYmVm
ZTNhMWVkZjExMzIyYzZkNWU4YjMwM2ZmNDUuLjZmMDhmYWFhOTUzNWM0YWI5NzVmMjdiN2NiZjQy
NTc2OTVmOGI0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC02MywyNCArNjMsMjQgQEAgcHJpdmF0
ZToKICAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsOwogICAgIGJvb2wg
aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWw7CiAKLSAgICBi
b29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBz
aG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBm
aW5hbDsKIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmlu
YWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0g
ICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSos
IFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2Vi
Q29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6
OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91bGRC
ZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29s
IHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAg
ICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7
CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmlu
YWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVj
dGluZykgZmluYWw7CiAKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQ
cm9wZXJ0aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEFwcGx5
U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRBcHBseVN0eWxlKCkgZmlu
YWw7CiAKLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFdlYkNvcmU6OlJhbmdl
KiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkKSBmaW5hbDsKKyAgICBib29sIHNo
b3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgY29u
c3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkKSBmaW5hbDsKIAogICAg
IHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkg
ZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6
UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICB2b2lkIGRp
ZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAgdm9pZCBnZXRDbGllbnRQ
YXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBh
c3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFz
dGVib2FyZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3Rl
Ym9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVi
b2FyZERhdGEpIGZpbmFsOwogCiAgICAgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKGNvbnN0
IFN0cmluZyYpIGZpbmFsOwogICAgIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgcmVx
dWVzdERPTVBhc3RlQWNjZXNzKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIFdlYkNvcmU6
OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2U6OkRlbmllZEZvckdlc3R1cmU7IH0KQEAgLTE1Myw3ICsx
NTMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBj
b25zdCBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29y
ZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBp
c01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3Vt
ZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJv
b2wgaXNNb3ZlKSBmaW5hbDsKICAgICAKICAgICBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVy
Q2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsOwog
ICAgIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBmaW5hbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbQppbmRleCA5YWIxYzI5ZDQ4Nzg3N2Q2ZTg1ODM5ZjlkNWY0Yzg5MDY5
ODEyOWIyLi5iZDk1YTY2NDhhMzAzMmMwNTdhOTgxZTA5NDY5MDgwZTg4MTA2MzU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCkBAIC0yMzQsMTAgKzIzNCw5IEBAIGludCBXZWJFZGl0b3JDbGllbnQ6OnNw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIAogI2VuZGlmCiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsK
LSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxkRGVsZXRlRE9NUmFuZ2U6a2l0KHJhbmdlKV07Cisg
ICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
bV93ZWJWaWV3IHNob3VsZERlbGV0ZURPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCiBib29sIFdl
YkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTI1NiwxMSArMjU1
LDExIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoKSBjb25zdAogICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFw
cGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHls
ZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBSZWY8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlKHN0eWxlLT5pc011dGFibGUoKSA/IFJlZjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPihzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
Jj4oKnN0eWxlKSkgOiBzdHlsZS0+bXV0YWJsZUNvcHkoKSk7CiAgICAgcmV0dXJuIFtbbV93ZWJW
aWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3Ci0gICAgICAg
IHNob3VsZEFwcGx5U3R5bGU6a2l0KCZtdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFy
YXRpb24oKSkgdG9FbGVtZW50c0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07CisgICAgICAgIHNob3Vs
ZEFwcGx5U3R5bGU6a2l0KCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xh
cmF0aW9uKCkpCisgICAgICAgIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQog
CiBzdGF0aWMgdm9pZCB1cGRhdGVGb250UGFuZWwoV2ViVmlldyAqd2ViVmlldykKQEAgLTI3OSwz
MyArMjc4LDI5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBseVN0eWxlKCkKICAgICB1
cGRhdGVGb250UGFuZWwobV93ZWJWaWV3KTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiByYW5nZSwgUmFuZ2UqIHJhbmdlVG9CZVJl
cGxhY2VkKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJl
cGxhY2VkKQogewogICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwogICAgICAgICBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZTpraXQocmFuZ2UpIHJlcGxhY2luZ1JhbmdlOmtpdChyYW5nZVRvQmVSZXBsYWNlZCldOwogfQog
Ci1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKiByYW5nZSkK
K2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlKQogewotICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICBzaG91bGRCZWdpbkVkaXRpbmdJbkRP
TVJhbmdlOmtpdChyYW5nZSldOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbW21f
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91
bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93
ZWJWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEVuZEVkaXRpbmdJbkRP
TVJhbmdlOmtpdChyYW5nZSldOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5n
ZTpraXQocmFuZ2UpXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBh
Y3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRvckluc2Vy
dEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2ViVmlldzsKICAg
ICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6a2l0KHJhbmdlKSBn
aXZlbkFjdGlvbjpraXQoYWN0aW9uKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBF
QWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1Jh
bmdlLCBFQWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7
CiAgICAgcmV0dXJuIFttX3dlYlZpZXcgX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6a2l0
KGZyb21SYW5nZSkgdG9ET01SYW5nZTpraXQodG9SYW5nZSkgYWZmaW5pdHk6a2l0KHNlbGVjdGlv
bkFmZmluaXR5KSBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiB9CkBAIC00MTEsMTIg
KzQwNiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoKQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mKQogewogICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBXZWJLaXQsIG9ubHkgV2ViS2l0Mi4KIH0K
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKIHsKICAgICAvLyBOb3Qg
aW1wbGVtZW50ZWQgV2ViS2l0LCBvbmx5IFdlYktpdDIuCiB9CkBAIC01NzcsOSArNTcyLDkgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigp
CiAKICNlbmRpZiAvLyBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUgKm5vZGUsIFJhbmdlKiByZXBsYWNp
bmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQorYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByZXBsYWNpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQog
eyAKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
VmlldzptX3dlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTpraXQobm9kZSkgcmVwbGFjaW5nRE9NUmFu
Z2U6a2l0KHJlcGxhY2luZ1JhbmdlKSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbiln
aXZlbkFjdGlvbl07CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3
YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6a2l0KCZub2RlKSByZXBs
YWNpbmdET01SYW5nZTpraXQocmVwbGFjaW5nUmFuZ2UpIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5z
ZXJ0QWN0aW9uKWdpdmVuQWN0aW9uXTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lz
dGVyVW5kb09yUmVkb1N0ZXAoVW5kb1N0ZXAmIHN0ZXAsIGJvb2wgaXNSZWRvKQpAQCAtODU2LDEw
ICs4NTEsMTAgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1zVHdvU3RlcFBhc3RlKFdl
YkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50KQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdt
ZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21l
bnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7CiAgICAg
aWYgKFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHBlcmZvcm1Ud29TdGVwRHJvcDphdERlc3RpbmF0aW9uOmlzTW92ZTopXSkK
LSAgICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBwZXJm
b3JtVHdvU3RlcERyb3A6a2l0KCZmcmFnbWVudCkgYXREZXN0aW5hdGlvbjpraXQoJmRlc3RpbmF0
aW9uKSBpc01vdmU6aXNNb3ZlXTsKKyAgICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERl
bGVnYXRlRm9yd2FyZGVyXSBwZXJmb3JtVHdvU3RlcERyb3A6a2l0KCZmcmFnbWVudCkgYXREZXN0
aW5hdGlvbjpraXQoZGVzdGluYXRpb24pIGlzTW92ZTppc01vdmVdOwogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtODg3LDcgKzg4Miw3IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdl
YkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpCiAKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1U
d29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFuZ2UmLCBib29sKQorYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2lt
cGxlUmFuZ2UmLCBib29sKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDRjNTRjNDQ0YWNmMTc4MTkwMmQ2
NThhOTE1YTQ2Mjg4M2JiNTIxYTAuLjc2M2M3NzdjZTJiMDI2NmQ0MDkzZGFmY2FjMmE2MzYyNWYx
YmJkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpA
QCAtNzIwLDEzICs3MjAsMTUgQEAgLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25z
dCBXZWJDb3JlOjpQb3NpdGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGkKIAogLSAoTlNSZWN0
KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgcmV0dXJuIF9w
cml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKGNvcmUocmFuZ2Up
KTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKyAgICByZXR1
cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKm1ha2VS
YW5nZShjb3JlKHJhbmdlKSkpOwogfQogCiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJs
ZTooRE9NUmFuZ2UgKilyYW5nZQogewogICAgIGJvb2wgaW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8g
RklYTUU6IGdldCB2aWEgZmlyc3RSZWN0Rm9yUmFuZ2UoKS4KLSAgICBOU1JlY3QgcmFuZ2VSZWN0
ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsgICAgCisgICAgTlNSZWN0IHJh
bmdlUmVjdCA9IFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07CiAgICAgYXV0byog
c3RhcnROb2RlID0gY29yZShbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsKICAgICAgICAgCiAgICAg
aWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKQEAgLTc4NCw3ICs3ODYs
NyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
IHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9wcml2YXRlLT5jb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVy
YXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CiB9CiAjZW5kaWYKIApAQCAtODUzLDcgKzg1NSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRE
T01SYW5nZVRvTlNSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogCiAtIChET01SYW5nZSAqKV9tYXJr
RE9NUmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFs
aXplZFJhbmdlKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3Ry
aW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcKQEAgLTExMDYsMTIgKzExMDgsMTIgQEAgLSAo
RE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNl
Y29uZFBvaW50OihDR1BvaW50KXMKIHsKICAgICBhdXRvIGZpcnN0UG9zaXRpb24gPSBbc2VsZiBf
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6Zmlyc3RdOwogICAgIGF1dG8gc2Vjb25kUG9zaXRpb24g
PSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsKLSAgICByZXR1cm4ga2l0
KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24s
IHNlY29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJu
IGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0
aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9u
UmFuZ2VGb3JQb2ludDooQ0dQb2ludClwb2ludAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZv
clBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JN
KElPU19GQU1JTFkpCkBAIC0xNDU0LDcgKzE0NTYsNyBAQCAtIChCT09MKWlzVGVsZXBob25lTnVt
YmVyUGFyc2luZ0VuYWJsZWQKIAogLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0g
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29y
ZShzZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9
CiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0
eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5
cGluZwpAQCAtMTQ5Niw3ICsxNDk4LDcgQEAgLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub0VsZW1l
bnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKillbGVtZW50UmFuZ2VD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCku
ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpOwogfQogCiAtICh2b2lkKWV4
cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgpAQCAtMTUyNiw3ICsx
NTI4LDcgQEAgLSAodW5pY2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uCiAKIC0gKERP
TVJhbmdlICopd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJu
IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkud29yZFJhbmdlQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2Vs
ZiktPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQpAQCAtMTU4OSwx
MiArMTU5MSwxMiBAQCAtIChCT09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0CiAKIC0gKERPTVJhbmdl
ICopcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92
aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3Jl
KHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQp
KTsKIH0KIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbjoo
aW50KWFtb3VudAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZikt
PnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdl
dCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRl
bmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFu
Z2U6KE5TUmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAtMTYx
OCw3ICsxNjIwLDcgQEAgLSAoRE9NUmFuZ2UgKiltYXJrZWRUZXh0RE9NUmFuZ2UKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIGtpdChmcmFtZS0+ZWRp
dG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGZyYW1lLT5l
ZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpOwogfQogCiAtICh2b2lkKXNldE1hcmtlZFRleHQ6
KE5TU3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCAxMTFj
ZjhiZGMyOWRjNjFlMjhmODIyZTk1N2I5Mzg4MmE0Mjc5OWE1Li40ZTNhMDhiMmRjNWQwNGJlODBm
MTFjMjljYjIyOTkxMGI0ZTg4ZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTEzMzIsNyArMTMzMiw3IEBAIC0gKEJPT0wpX3Nob3Vs
ZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihX
ZWJWaWV3SW5zCiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0
KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKSA6IG5pbDsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0
KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkg
OiBuaWw7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC02MzQ2LDcgKzYzNDYsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBET01SYW5nZSAqcmFuZ2UgPSBb
ZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07CiAgICAgaWYgKCFyYW5n
ZSkgewogICAgICAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6
KCV1LCAldSkgLT4gKDAsIDAsIDAsIDApIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxl
bmd0aCk7Ci0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAgICAgICBy
ZXR1cm4gTlNaZXJvUmVjdDsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKFtyYW5nZSBzdGFydENv
bnRhaW5lcl0pOwpAQCAtNzA3NSw3ICs3MDc1LDcgQEAgLSAoTlNVSW50ZWdlciljb3VudE1hdGNo
ZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBpbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmcK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY29y
ZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY29yZShyYW5nZSks
IGNvcmVPcHRpb25zKG9wdGlvbnMpLCBsaW1pdCwgbWFya01hdGNoZXMsIDApOworICAgIHJldHVy
biBjb3JlRnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBtYWtlUmFu
Z2UoY29yZShyYW5nZSkpLCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVz
LCAwKTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihC
T09MKW5ld1ZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCmluZGV4IDFlM2I3OWQwMzgx
YWU5OWQ2Y2EzNGVjYTIyZjU2MzlkNDhhM2E5NGUuLjgwMWJlZmVjNzZkMDk2ZjkzZjBmNDhkNjNj
Zjg3ZGY5NWQ1NTFiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCkBAIC0xNzYsNyAr
MTc2LDcgQEAgLSAodm9pZClkb0NvbXBsZXRpb24KIAogICAgICAgICAvLyBHZXQgcHJlY2VlZGlu
ZyB3b3JkIHN0ZW0KICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVd
OwotICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3Jl
KGZyYW1lKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpOworICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgRE9NUmFu
Z2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZAogICAgICAgICAgICAgZGlyZWN0aW9uOlNl
bGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQgZ3JhbnVsYXJpdHk6VGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBj
bG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVGV4dEl0ZXJhdG9yLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJU
ZXh0SXRlcmF0b3IubW0KaW5kZXggOGM3ZTdlZTAwZjdmMzE1MGQ4OTc3NDNhMDcyNDA5NmIzODgy
MTdjZS4uOTNiODM0NzdmYzhhNDJhZDNmNzRkMzY5ZTgxNzk0YmJlZmRhMDNhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KQEAg
LTk1LDcgKzk1LDcgQEAgLSAoRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UKICAgICBhdXRvJiB0ZXh0
SXRlcmF0b3IgPSAqX3ByaXZhdGUtPl90ZXh0SXRlcmF0b3I7CiAgICAgaWYgKHRleHRJdGVyYXRv
ci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKHRleHRJdGVyYXRvci5yYW5nZSgpKS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdCh0ZXh0
SXRlcmF0b3IucmFuZ2UoKSk7CiB9CiAKIC8vIEZJWE1FOiBDb25zaWRlciBkZXByZWNhdGluZyB0
aGlzIG1ldGhvZCBhbmQgY3JlYXRpbmcgb25lIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBjb3B5aW5n
IDgtYml0IGNoYXJhY3RlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KaW5kZXggODVkNjk0M2UzNmJhZTYzN2EwZTA5YjU0NzlkYWIzNWIzOWFhN2NjYy4uMDcz
M2Y1ZTA0NDRmNzlhZGQ3ZGI5N2NkYTE1ZDY5NzgyOGI2OTcyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtNDU5NCw3ICs0NTk0LDcgQEAgLSAoV2Vi
VGV4dEl0ZXJhdG9yICopdGV4dEl0ZXJhdG9yRm9yUmVjdDooTlNSZWN0KXJlY3QKICAgICBhdXRv
IGludFJlY3QgPSBXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwogICAgIGF1dG8gcmFu
Z2UgPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQoaW50UmVjdC5taW5YTWluWUNvcm5lcigpKSwKICAgICAgICAgY29yZUZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1heFhNYXhZQ29ybmVyKCkpKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRX
aXRoUmFuZ2U6a2l0KGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07
CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQo
cmFuZ2UpXSBhdXRvcmVsZWFzZV07CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAg
LTg0MTcsNyArODQxNyw3IEBAIC0gKERPTVJhbmdlICopZWRpdGFibGVET01SYW5nZUZvclBvaW50
OihOU1BvaW50KXBvaW50CiAgICAgYXV0byogcGFnZSA9IGNvcmUoc2VsZik7CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQocGFnZS0+bWFpbkZyYW1l
KCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludChbc2VsZiBjb252ZXJ0
UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChwYWdlLT5t
YWluRnJhbWUoKS5lZGl0b3IoKS5yYW5nZUZvclBvaW50KFdlYkNvcmU6OkludFBvaW50KFtzZWxm
IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXSkpKTsKIH0KIAogLSAoQk9PTClfc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UgdG9ET01SYW5n
ZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5
KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWcKQEAgLTg0NjUsNyAr
ODQ2NSw3IEBAIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogICAgIGF1dG8qIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2Vs
ZWN0aW9uQWZmaW5pdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNv
cmVDbGFzc2VzLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmNw
cAppbmRleCBiNjI2NDM3M2Q2NWM4OTY1OWUwNzU0OTIzMGEyYzExMjk4ZWUyYjE5Li4zNmNkODVm
ZjBkY2VjM2JmMzljMGU1OWJjNmYwNzUyZWY1YmJlNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxJbnRvVmlld09wdGlvbnMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZWRFbGVtZW50
Lmg+CiAjaW5jbHVkZSA8aW5pdGd1aWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC93aW4vV0NoYXJT
dHJpbmdFeHRyYXMuaD4KQEAgLTE2MTUsNiArMTYxNiwxMSBAQCBJRE9NUmFuZ2UqIERPTVJhbmdl
OjpjcmVhdGVJbnN0YW5jZShXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiAgICAgcmV0dXJuIG5ld1Jh
bmdlOwogfQogCitJRE9NUmFuZ2UqIERPTVJhbmdlOjpjcmVhdGVJbnN0YW5jZShjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQoreworICAgIHJldHVybiBjcmVhdGVJ
bnN0YW5jZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKK30KKwogSFJFU1VMVCBET01S
YW5nZTo6c3RhcnRDb250YWluZXIoX0NPTV9PdXRwdHJfb3B0XyBJRE9NTm9kZSoqIG5vZGUpCiB7
CiAgICAgaWYgKCFub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9N
Q29yZUNsYXNzZXMuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmgK
aW5kZXggYWM2NDNiNmZjZjQzYWVlY2QxMmIzN2U5OTAxZDdiMzJjZDAyOWM4OS4uNTZmOGNmMDdj
ZjhmZmI4MjVlYzUzM2IyYWMzZGE2NDlkYTQ0MTliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vRE9NQ29yZUNsYXNzZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9ET01Db3JlQ2xhc3Nlcy5oCkBAIC0zNyw5ICszNyw5IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBO
b2RlTGlzdDsKIGNsYXNzIFJhbmdlOwogY2xhc3MgTmFtZWROb2RlTWFwOworc3RydWN0IFNpbXBs
ZVJhbmdlOwogfQogCi0KIGNsYXNzIERPTU9iamVjdCA6IHB1YmxpYyBXZWJTY3JpcHRPYmplY3Qs
IHB1YmxpYyBJRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICAvLyBJVW5rbm93bgpAQCAtODIzLDYg
KzgyMyw3IEBAIHByb3RlY3RlZDoKIAogcHVibGljOgogICAgIHN0YXRpYyBJRE9NUmFuZ2UqIGNy
ZWF0ZUluc3RhbmNlKFdlYkNvcmU6OlJhbmdlKik7CisgICAgc3RhdGljIElET01SYW5nZSogY3Jl
YXRlSW5zdGFuY2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jik7CiAKIHB1
YmxpYzoKICAgICAvLyBJVW5rbm93bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggZWZlZGE0NGE5
ODE5ODA5NWQwMTdhMDkwYmZjN2FhN2U4NzI4ZGQ3MC4uNGExZTY4NWVlMjQ0YWU2YjU1NDU4OTA2
ZTQzNmE1Y2M3MDU5MWQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0xODUsNyArMTg1LDcg
QEAgaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKQogICAgIHJl
dHVybiAwOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdl
YkNvcmU6OlJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVk
aXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIENPTVB0cjxJ
V2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGlu
Z0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKiByYW5nZSkK
ICAgICByZXR1cm4gc2hvdWxkQmVnaW47CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRF
bmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBDT01Q
dHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVk
aXRpbmdEZWxlZ2F0ZSgmZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC0yNDAsMTIgKzI0MCwxMCBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihGcmFtZSopCiAK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNjYXJkZWRDb21wb3NpdGlvbihGcmFtZSopCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNhbmNlbGVk
Q29tcG9zaXRpb24oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKQEAgLTI1NywyMCArMjU1LDE4IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRp
ZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KFdlYkNvcmU6OlJhbmdlKikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xp
ZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+
JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+ID4mKQordm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+ID4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdlYkVk
aXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+JiByYW5nZSkKIHsKICAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7
CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0ZSgmZWQpKSB8fCAhZWQu
Z2V0KCkpCkBAIC0zMDAsNyArMjk2LDcgQEAgc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0
KEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiAgICAgcmV0dXJuIFdlYlZpZXdJbnNlcnRBY3Rp
b25UeXBlZDsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9k
ZSogbm9kZSwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5B
Y3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiBub2Rl
LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGluc2VydGluZ1JhbmdlLCBF
ZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7IAogICAgIENPTVB0cjxJV2ViRWRpdGlu
Z0RlbGVnYXRlPiBlZGl0aW5nRGVsZWdhdGU7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVk
aXRpbmdEZWxlZ2F0ZSgmZWRpdGluZ0RlbGVnYXRlKSkgfHwgIWVkaXRpbmdEZWxlZ2F0ZS5nZXQo
KSkKQEAgLTMxMCw3ICszMDYsNyBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0
Tm9kZShOb2RlKiBub2RlLCBSYW5nZSogaW5zZXJ0aW5nUmFuZ2UsIEVkaXRvcgogICAgIGlmICgh
aW5zZXJ0aW5nRE9NUmFuZ2UpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQ09NUHRyPElE
T01Ob2RlPiBpbnNlcnRET01Ob2RlKEFkb3B0Q09NLCBET01Ob2RlOjpjcmVhdGVJbnN0YW5jZShu
b2RlKSk7CisgICAgQ09NUHRyPElET01Ob2RlPiBpbnNlcnRET01Ob2RlKEFkb3B0Q09NLCBET01O
b2RlOjpjcmVhdGVJbnN0YW5jZSgmbm9kZSkpOwogICAgIGlmICghaW5zZXJ0RE9NTm9kZSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTMyNCw3ICszMjAsNyBAQCBib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiBub2RlLCBSYW5nZSogaW5zZXJ0aW5nUmFuZ2Us
IEVkaXRvcgogICAgIHJldHVybiBzaG91bGRJbnNlcnQ7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgc3RyLCBSYW5nZSogaW5zZXJ0aW5n
UmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGluc2VydGluZ1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24g
Z2l2ZW5BY3Rpb24pCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGVkaXRpbmdE
ZWxlZ2F0ZTsKICAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZGl0
aW5nRGVsZWdhdGUpKSB8fCAhZWRpdGluZ0RlbGVnYXRlLmdldCgpKQpAQCAtMzQyLDcgKzMzOCw3
IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
c3RyLCBSYW5nZSogaW5zZXJ0aW5nUmFuZ2UsCiAgICAgcmV0dXJuIHNob3VsZEluc2VydDsKIH0K
IAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29y
ZTo6UmFuZ2UqIGN1cnJlbnRSYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHByb3Bvc2VkUmFuZ2UsIFdl
YkNvcmU6OkVBZmZpbml0eSBzZWxlY3Rpb25BZmZpbml0eSwgYm9vbCBmbGFnKQorYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiBjdXJyZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYgcHJvcG9zZWRSYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IHNlbGVjdGlv
bkFmZmluaXR5LCBib29sIGZsYWcpCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+
IGVkOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdhdGUoJmVkKSkgfHwg
IWVkLmdldCgpKQpAQCAtMzU4LDIwICszNTQsMTcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGN1cnJlbnRSYW5nZSwgV2UK
ICAgICByZXR1cm4gc2hvdWxkQ2hhbmdlOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopCitib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBseVN0eWxlKCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92
ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopCitib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBj
b25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCA3N2Y2NDM2ZTdiNTQ4MGFm
MDRjNDg1YjgwYjU0MDg5MzAzMTU5MTYyLi5iNGNhZDAwMWZhMzM2NTQ2MThkNzZlYWY2OGI5NThl
YjRmNDlkMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNDcsMTUgKzQ3LDE1IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpIGZpbmFsOwogICAgIGlu
dCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRCZWdp
bkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEVuZEVkaXRp
bmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29u
c3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29yZTo6
U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29u
c3QgV1RGOjpTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBX
ZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwogCiAgICAgdm9pZCBkaWRCZWdpbkVk
aXRpbmcoKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwor
ICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKSBmaW5hbDsKLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmlu
YWw7CisgICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7
CiAKICAgICB2b2lkIGRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCkgZmluYWwg
eyB9CiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKSBmaW5hbDsKQEAgLTY1LDEy
ICs2NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzY2FyZGVkQ29tcG9zaXRpb24oV2ViQ29y
ZTo6RnJhbWUqKSBmaW5hbDsKICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWwg
eyB9CiAKLSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7
CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKSBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpO
b2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJlcGxhY2luZ1JhbmdlLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHls
ZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5z
ZXJ0Tm9kZShXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+JiByZXBsYWNpbmdSYW5nZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsK
KyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVz
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9p
ZCBkaWRBcHBseVN0eWxlKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRl
bGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNv
bnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CiAKICAgICBib29sIHNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCgpIGZpbmFsOwogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKCkgY29uc3QgZmluYWw7CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCB1bmRvKCkgZmluYWw7CiAgICAgdm9pZCByZWRvKCkgZmluYWw7CiAgICAgCi0gICAgYm9v
bCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdl
YkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wg
c3RpbGxTZWxlY3RpbmcpIGZpbmFsOwogICAgIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5n
KFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKICAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRp
bmcoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQgdGV4dERpZENoYW5nZUluVGV4
dEZpZWxkKFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBmaW5hbDsKICAgICB2b2lk
IHNldElucHV0TWV0aG9kU3RhdGUoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKSBmaW5hbCB7IH0KLSAgICBib29sIHBlcmZv
cm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgV2ViQ29yZTo6UmFuZ2Um
LCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBE
cm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5n
ZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBXZWJDb3JlOjpET01QYXN0
ZUFjY2Vzc1Jlc3BvbnNlIHJlcXVlc3RET01QYXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmKSBmaW5h
bCB7IHJldHVybiBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JHZXN0
dXJlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggOGMxN2I1ZWZlNzlj
M2E5ZDU2YWNhYjFhOGU3MDM0MDVjZDBjODYzNi4uYWJjNGFlZTFhYzdiZWU5OGMyMzFlNDc5MWEx
YTQ5Y2YwYzZlNGI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTYyMDAs
NyArNjIwMCw3IEBAIHZvaWQgV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyhGcmFtZSog
dGFyZ2V0RnJhbWUsIEhJTUMgaElucHV0Q29udGV4dCkKIHsKICAgICBJbnRSZWN0IGNhcmV0Owog
ICAgIGlmIChhdXRvIHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpKTsKKyAg
ICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnJh
bmdlKTsKICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
Y2FyZXQpOwogICAgIGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwogCkBAIC02NDU2
LDE0ICs2NDU2LDE0IEBAIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9u
KEZyYW1lKiB0YXJnZXRGcmFtZSwgSU1FQ0hBUlBPU0lUSU9OKiBjCiAgICAgaWYgKGNoYXJQb3Mt
PmR3Q2hhclBvcyAmJiAhdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEludFJlY3QgY2FyZXQ7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgaWYgKHRhcmdldEZy
YW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICByYW5nZSA9IHRhcmdldEZy
YW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgZWxzZQotICAgICAgICByYW5n
ZSA9IGNyZWF0ZUxpdmVSYW5nZSh0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7
Ci0gICAgICAgIHJhbmdlLT5zZXRTdGFydChyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCkgKyBjaGFyUG9zLT5kd0NoYXJQb3MpOwotICAgICAgICBjYXJldCA9IHRh
cmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CisgICAg
ICAgIHJhbmdlLT5zdGFydC5vZmZzZXQgKz0gY2hhclBvcy0+ZHdDaGFyUG9zOworICAgICAgICBj
YXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZSk7CiAg
ICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhj
YXJldCk7CiAgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CkBAIC03NzY0LDE4
ICs3NzY0LDE1IEBAIEhSRVNVTFQgV2ViVmlldzo6Y29tcG9zaXRpb25SYW5nZUZvclRlc3Rpbmco
X091dF8gVUlOVCogc3RhcnRQb3NpdGlvbiwgX091dF8gVUlOCiAgICAgaWYgKCFmcmFtZS5lZGl0
b3IoKS5jYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwotCisgICAgYXV0
byByYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgKnN0YXJ0UG9zaXRpb24gPSByYW5n
ZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAqbGVuZ3RoID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBy
YW5nZS0+ZW5kT2Zmc2V0KCk7Ci0KKyAgICAqc3RhcnRQb3NpdGlvbiA9IHJhbmdlLT5zdGFydC5v
ZmZzZXQ7CisgICAgKmxlbmd0aCA9IHJhbmdlLT5zdGFydC5vZmZzZXQgKyByYW5nZS0+ZW5kLm9m
ZnNldDsKICAgICByZXR1cm4gU19PSzsKIH0KIAotCiBIUkVTVUxUIFdlYlZpZXc6OmZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlRm9yVGVzdGluZyhVSU5UIGxvY2F0aW9uLCBVSU5UIGxlbmd0aCwg
X091dF8gUkVDVCogcmVzdWx0UmVjdCkKIHsKICAgICBpZiAoIXJlc3VsdFJlY3QpCkBAIC03Nzkw
LDEyICs3Nzg3LDggQEAgSFJFU1VMVCBXZWJWaWV3OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZUZvclRlc3RpbmcoVUlOVCBsb2NhdGlvbiwgVUlOVCBsZW5ndGgKICAgICAgICAgcmV0dXJuIEVf
RkFJTDsKIAogICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZShsb2NhdGlv
biwgbGVuZ3RoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1l
bnQpLCBjaGFyYWN0ZXJSYW5nZSkpOwotCi0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJu
IEVfRkFJTDsKLQotICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZv
clJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJh
bmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZWxlbWVudCksIGNoYXJhY3RlclJh
bmdlKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5n
ZShyYW5nZSk7CiAgICAgSW50UmVjdCByZXN1bHRJbnRSZWN0ID0gZnJhbWUudmlldygpLT5jb250
ZW50c1RvV2luZG93KHJlY3QpOwogCiAgICAgcmVzdWx0SW50UmVjdC5zY2FsZShkZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKQEAgLTc4MjEsNyArNzgxNCw3IEBAIEhSRVNVTFQgV2ViVmlldzo6c2VsZWN0
ZWRSYW5nZUZvclRlc3RpbmcoX091dF8gVUlOVCogbG9jYXRpb24sIF9PdXRfIFVJTlQqIGxlbmd0
CiAKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLmVkaXRvcigp
LnNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0
ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTBiMTQwNTk1MGUyOGYzNmIwNTNjZDA0ZGNkNTU4N2U0
MmU1MTJmZi4uYjA0M2I3MWY2ZmE4YTAyYWRkNzA3ZjUwNzc2ODQxMTdiOTNhMGQ5YSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTExNDAsNyArMTE0MCw2IEBACiAJCUY0Q0Q3NEM5MjBGREI0
OTYwMERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0Q3NEM4MjBGREI0OTYwMERFMzc5NCAvKiBU
ZXN0VVJMU2NoZW1lSGFuZGxlci5tbSAqLzsgfTsKIAkJRjRDRjMyODAyMzY2NTUyMjAwRDNBRDA3
IC8qIEVudGVyS2V5SGludFRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjRDRjMyN0YyMzY2NTUyMjAwRDNBRDA3IC8qIEVudGVyS2V5SGludFRl
c3RzLm1tICovOyB9OwogCQlGNENGQ0REQTI0OUZDOUU0MDA1Mjc0ODIgLyogU3BhY2VPbmx5Lm90
ZiBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NENGQ0REODI0OUZDOUQ5MDA1Mjc0ODIgLyogU3BhY2VPbmx5Lm90ZiAqLzsgfTsKLQkJRjRDRkNE
REIyNDlGQzlFOTAwNTI3NDgyIC8qIEFoZW0udHRmIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0ZDREQ5MjQ5RkM5RDkwMDUyNzQ4MiAvKiBB
aGVtLnR0ZiAqLzsgfTsKIAkJRjREMjk4NkUyMEZFRTczNzAwOTJENjM2IC8qIFJ1blNjcmlwdEFm
dGVyRG9jdW1lbnRMb2FkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjREMjk4NkQyMEZFRTczNzAwOTJENjM2IC8qIFJ1blNjcmlwdEFmdGVyRG9jdW1l
bnRMb2FkLm1tICovOyB9OwogCQlGNEQ0RjNCNjFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ0FuZERy
b3BTaW11bGF0b3JJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNEQ0RjNCNDFFNEUyQkNCMDBCQjI3NjcgLyogRHJhZ0FuZERyb3BTaW11bGF0b3JJ
T1MubW0gKi87IH07CiAJCUY0RDRGM0I5MUU0RTM2RTQwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFRl
c3RzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjRENEYzQjcxRTRFMzZFNDAwQkIyNzY3IC8qIERyYWdBbmREcm9wVGVzdHNJT1MubW0gKi87IH07
CkBAIC0xMjQ1LDcgKzEyNDQsNiBAQAogCQkJCTU1QTgxODAwMjE4MTAyMjEwMDA0QTM5QSAvKiA0
MDB4NDAwLWdyZWVuLnBuZyBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkzNzkwMjhCOTE0RkFD
MjRDMDA3RTZCNDMgLyogYWNjZXB0c0ZpcnN0TW91c2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LywKIAkJCQk3MjVDM0VGMzIyMDU4QTVCMDA3QzM2RkMgLyogQWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKLQkJCQlGNENGQ0REQjI0OUZDOUU5
MDA1Mjc0ODIgLyogQWhlbS50dGYgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUMyQjgxODcx
Qzg5MjVBMDAwQTU1MjlGIC8qIEFoZW0udHRmIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFB
NjM0NzlGMTgzRDcyQTQwMDVCMTcwNyAvKiBhbGwtY29udGVudC1pbi1vbmUtaWZyYW1lLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJQzI1Q0NBMEQxRTUxNDE4NDAwMjZDQjhBIC8qIEFs
bEFoZW0uc3ZnIGluIENvcHkgUmVzb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404685</attachid>
            <date>2020-07-19 14:19:14 -0700</date>
            <delta_ts>2020-07-19 15:30:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200719141914.patch</filename>
            <type>text/plain</type>
            <size>171090</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM3Y2Q0YTRjOGM2MGJj
NGY1Yjk5MWRkMjhiZDAyMTk4Y2Y0MzJhOC4uNmRjYjVmODk1NjNlOTEyZTZlZjc1YTc4ZjVhYmVj
N2ZjMGEzMTdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTE4ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYnVpbGQgd2FybmluZ3MgaW4g
dGhlIFdlYlhSIGJhY2tlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDZjODk2N2UyYjdjMjc2ZjE3MjBmMzdiOGRl
NTczM2RmYjcxMmMyMWIuLjYwMWU1MTIwMjY4MThiMTI4YzA0MmZjMWQ5Y2VlZTc0ZTQ2NzkxNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcApAQCAtMzA2LDggKzMwNiw4IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzCiAg
ICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2UoKm1p
c3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
IGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91
cykgewogICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdpbigpOyByaXQg
IT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKQEAgLTMxNSw4ICszMTUsOCBAQCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdS
YW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRl
TGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICAg
ICAgaWYgKGNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSktPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKm1pc3NwZWxs
aW5nUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwMSwxNSArNjAxLDE0IEBAIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2Vz
dFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgCiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nl
c3RTdHJpbmdSYW5nZTsKICAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmlu
Z3MpIHsKLSAgICAgICAgaWYgKGF1dG8gc2VhcmNoU3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VS
YW5nZSkucHRyKCksIGZpbmRPcHRpb25zKSkgewotICAgICAgICAgICAgYXV0byBmb3VuZFN0cmlu
Z1JhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpzZWFyY2hTdHJpbmdSYW5nZSk7CisgICAgICAgIGlm
IChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmco
c2VhcmNoU3RyaW5nLCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CiAgICAgICAgICAg
ICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5n
UmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdS
YW5nZSA9ICpzZWFyY2hTdHJpbmdSYW5nZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGluZyByYW5nZSBl
ZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gcmFu
Z2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwgdXNlIHRoZSBs
ZWFkaW5nIHJhbmdlIGVkZ2VzLgogICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nlc3RTdHJpbmdQ
b3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCA6IGNs
b3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnQ7Ci0gICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJp
bmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1JhbmdlLmVuZCA6IGZv
dW5kU3RyaW5nUmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJpbmdQ
b3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBzZWFyY2hTdHJpbmdSYW5nZS0+ZW5kIDogc2Vh
cmNoU3RyaW5nUmFuZ2UtPnN0YXJ0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGF1dG8gY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLm9mZnNl
dDsKICAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0ID0gZm91bmRTdHJp
bmdQb3NpdGlvbi5vZmZzZXQ7CkBAIC02MTgsNyArNjE3LDcgQEAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGly
ZWN0aW8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQ
b3NpdGlvbk9mZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQp
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRT
ZWFyY2ggJiYgcmVzdWx0ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkp
Ci0gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5nUmFu
Z2U7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpzZWFyY2hTdHJp
bmdSYW5nZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZTQ0Y2I0YjdlYTY1ZDkzZTUxMzk4ZDI1ZTI0
YzU0ZDFhYWQzMWRkMC4uZjczNGYyNzU2MThlZWEyNDNkZjE1MjE5NTAwZmQ3MmE5NTI1MjdjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY5Miw3ICs2OTIs
NyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRleHRP
cGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogCiAgICAgaWYgKFttYXJrZXJSYW5nZXMgaXNL
aW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKSB7CiAgICAgICAgIG9wZXJhdGlvbi50ZXh0UmFu
Z2VzID0gbWFrZVZlY3RvcihtYXJrZXJSYW5nZXMsIFt3cmFwcGVyXSAoaWQgbWFya2VyUmFuZ2Up
IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoW3dyYXBwZXIgcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUmFu
Z2UoW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKICAgICAg
ICAgfSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhNjI2OTRkZTFiODZj
ZmMxYjMzY2RmMTY3MDJiMGU2NTQxMzhhZjRhLi40ODkyN2MzNmVmYWE3YzE5ODJjZTY3ZjkyMGRj
YWY2NGEzMDQ1MTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ3Myw3ICs0NzMsNyBA
QCBzdGF0aWMgYm9vbCBhY2NlcHRzRWRpdGluZ0ZvY3VzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiAgICAgaWYgKCFmcmFtZSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2VPZkNvbnRlbnRz
KCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRCZWdpbkVk
aXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9CiAKIHN0YXRp
YyBib29sIGNhbkFjY2Vzc0FuY2VzdG9yKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBhY3RpdmVTZWN1
cml0eU9yaWdpbiwgRnJhbWUqIHRhcmdldEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggOWI3
YTFhNjIxMjE5NWEyZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4uOWVhMTQ5ZDJmNTFkZTI0YzMz
NzE2MGI1M2FmN2MxZWRjZGM4OGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0xODMzLDI2ICsx
ODMzLDI2IEBAIEZsb2F0UmVjdCBSYW5nZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0
PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9uCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVj
dChDb29yZGluYXRlU3BhY2U6OkFic29sdXRlLCByZWN0T3B0aW9ucyk7CiB9CiAKLVNpbXBsZVJh
bmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCitTaW1wbGVSYW5nZSBtYWtl
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiB7IHsgcmFuZ2Uuc3RhcnRD
b250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSB9LCB7IHJhbmdlLmVuZENvbnRhaW5lcigp
LCByYW5nZS5lbmRPZmZzZXQoKSB9IH07CiB9CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBSZWY8UmFuZ2U+JiByYW5nZSkKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25zdCBS
ZWY8UmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLmdl
dCgpKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAotT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCitPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBtYWtlU2lt
cGxlUmFuZ2UoKnJhbmdlKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKCpyYW5nZSk7CiB9CiAKLU9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYg
cmFuZ2UpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5n
ZT4mIHJhbmdlKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkpOwor
ICAgIHJldHVybiBtYWtlUmFuZ2UocmFuZ2UuZ2V0KCkpOwogfQogCiBSZWY8UmFuZ2U+IGNyZWF0
ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IGE4
NjE5Y2I5NDYzNDM0ZThjZTgxZDJiODQ3YzMyNWEwMTIwN2UxMTAuLjkzNWJiZGE0N2I3NjEwNzkw
NzdjNDE2M2UxYzg5OTc0ODI1ZDk5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xNzYsMTAgKzE3Niwx
MCBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBX
RUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFu
Z2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNv
bnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYp
OwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKLU9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKLU9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOworU2lt
cGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJhbmdlJik7CitTaW1wbGVSYW5nZSBtYWtlUmFuZ2Uo
Y29uc3QgUmVmPFJhbmdlPiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IG1ha2VSYW5nZShjb25zdCBSYW5nZSopOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CiAKIFdFQkNPUkVfRVhQT1JU
IFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDRhOGQwMDRkZTkx
Mjg5YTM0YWYwYzE1MWIzNjljMzUzZGZhZGJjYzkuLjI2NWM0OTdiNjA4MjgzZGIxMWJlM2YwN2Y2
NGRlZDc1M2E2NDE1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtODIsNiAr
ODIsMjAgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7
ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OwogfQogCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBzdGFydCwgY29uc3QgT3B0aW9u
YWw8Qm91bmRhcnlQb2ludD4mIGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9
OworfQorCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+JiYgc3RhcnQsIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYgZW5kKQoreworICAgIGlm
ICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4geyB7IFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSB9IH07Cit9CisKIFNpbXBsZVJh
bmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewogICAgIHJl
dHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCmluZGV4IDcwZTdjNDI1MWNkZGYzMTdiNDlkOWFhMmRjNDJlNmQ0NTQ3YTc0ZGQuLjAzNzc4
MGE2MjI0OTFlNzU0ZDA1MGUyYWZhZDMwZTE0OTYyOThmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5oCkBAIC00NiwxMSArNDYsMTQgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKICAgICBXRUJD
T1JFX0VYUE9SVCBTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQmJik7
CiAKICAgICAvLyBDb252ZW5pZW5jZSBvdmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRpb24g
ZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZlIHJhbmdlcy4KLSAgICAvLyBGSVhNRTogT25jZSB0cmFu
c2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VTaW1w
bGVSYW5nZSBpbnN0ZWFkLgorICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zaXRpb24gaXMgb3Zlciwg
cmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVJhbmdlIGluc3RlYWQuCiAgICAg
V0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKICAgICBTaW1wbGVSYW5n
ZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiwgY29uc3Qg
T3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBtYWtlUmFuZ2UoT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiwgT3B0aW9uYWw8Qm91
bmRhcnlQb2ludD4mJik7CisKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGUy
ZTg5NGNiOTM3OWM0M2EzMzNiY2IzZjA4MzMyMDE0MzNkN2YyMzAuLjlhYzJlOWQ4NjE2ZGQ2YTNj
MTRhZjAzNTUyMmMzMGU2MGU3MTMxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjQzLDcgKzI0Myw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsK
ICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdv
cmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlw
ZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFu
Z2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBudWxscHRyKTsKKyAgICAg
ICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJl
cGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFj
ZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgV1RGOjpudWxsb3B0KTsKICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpA
QCAtNjUzLDcgKzY1Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlE
aWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0CiAjaWYgVVNFKERJQ1RB
VElPTl9BTFRFUk5BVElWRVMpCiAgICAgYXV0byYgZWRpdG9yID0gbV9kb2N1bWVudC5lZGl0b3Io
KTsKICAgICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYg
KCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5n
LCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAo
IXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcs
ICpzZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGZvciAoYXV0byogbWFya2VyIDogc2VsZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKCpzZWxlY3Rpb24sIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpKQogICAgICAgICByZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxMTJmOTdiMmEwYjY1NDYyNTQ2NjI4
ODI2N2U2MzNiZGJiZmZiNWYxLi44NzBjNGRiYjY4ZDM4MGY5YTFiODFhMGMwZTVmMTNhYTMyNzRh
NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKQEAgLTc0OSw5ICs3NDksOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
Om1lcmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxh
Y2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFkb2N1
bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5n
ZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UsIHJhbmdl
VG9CZVJlcGxhY2VkKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gbW92ZVBhcmFn
cmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQg
d291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawogICAgIC8vIHJlbW92YWxz
IHRoYXQgaXQgZG9lcyBjYXVzZSB0aGUgaW5zZXJ0aW9uIG9mICphbm90aGVyKiBwbGFjZWhvbGRl
ci4KICAgICBib29sIG5lZWRQbGFjZWhvbGRlciA9IG1fbmVlZFBsYWNlaG9sZGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDJkN2FlMmFhNmQ1NDExOTE4MDFjOGZjMDI0NDEwYmU2
YjM1MzEyOTcuLjNiNWY3ZGU3OTgzODhhMjczNDEzOWNjZjczMjYyMTkxMGY0NDhhMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTUwNywyMSArNTA3LDE4IEBAIGJvb2wgRWRpdG9y
OjpjYW5EZWxldGUoKSBjb25zdAogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHNl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpjYW5EZWxl
dGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0Citib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIE5vZGUmIHN0YXJ0Q29udGFp
bmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0g
cmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIAotICAgIGlmICghc3RhcnRDb250YWluZXIuaGFz
RWRpdGFibGVTdHlsZSgpIHx8ICFlbmRDb250YWluZXIuaGFzRWRpdGFibGVTdHlsZSgpKQorICAg
IGlmICghcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgIXJhbmdl
LmVuZC5jb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CisgICAgaWYgKHJhbmdl
LmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzb21ldGltZXMgYWxsb3cgZGVs
ZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJsZSByb290cywgbGlrZSB3aGVuIHRoZSBjYXJl
dCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCi0gICAgICAgIGlmIChwcmV2aW91cy5pc051bGwo
KSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSAhPSBzdGFydENvbnRhaW5lci5yb290RWRpdGFibGVFbGVtZW50KCkpCisg
ICAgICAgIGF1dG8gcHJldmlvdXMgPSBWaXNpYmxlUG9zaXRpb24geyBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RSRUFNIH0ucHJldmlvdXMoKTsKKyAgICAg
ICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHJhbmdlLnN0YXJ0LmNvbnRh
aW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTgsNyArNTU1LDcgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKICAgICAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNob3VsZEFk
ZFRvS2lsbFJpbmcpCi0gICAgICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rl
ZFJhbmdlKCkuZ2V0KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAg
ICAgICAgICAgICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxSaW5n
SW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgICAgICAgICBkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAgICAgICAgICAgICAvLyBJ
bXBsaWNpdGx5IGNhbGxzIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpLgog
ICAgICAgICB9CkBAIC02MjcsNyArNjI0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRl
eHRCeXBhc3NpbmdESFRNTCgpCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7CiAgICAgU3RyaW5nIHRleHQgPSByZWFk
UGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCk7Ci0gICAgaWYgKGNsaWVudCgpICYm
IGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9CiAKQEAgLTY1Miw3ICs2NDksNyBA
QCBib29sIEVkaXRvcjo6Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYg
cGFzdGVib2FyZCkKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCgpICYmIHBhc3RlYm9hcmQuY2FuU21hcnRSZXBsYWNlKCk7CiB9CiAKLWJv
b2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVu
dCwgUmFuZ2UqIHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rp
b24pCitib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYg
ZnJhZ21lbnQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVwbGFjaW5nRE9NUmFuZ2Us
IEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsKICAgICBpZiAoIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjEsNyArNjU4LDcgQEAgYm9vbCBFZGl0b3I6OnNo
b3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVw
bGFjaW5nRE8KICAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oY2hpbGQpICYmIGZyYWdtZW50Lmxh
c3RDaGlsZCgpID09IGNoaWxkKQogICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dFRleHQoZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmNoaWxkKS5kYXRhKCksIHJlcGxhY2luZ0RP
TVJhbmdlLCBnaXZlbkFjdGlvbik7CiAKLSAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dE5vZGUoJmZyYWdtZW50LCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24pOworICAgIHJl
dHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZShmcmFnbWVudCwgcmVwbGFjaW5nRE9NUmFu
Z2UsIGdpdmVuQWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50IHNl
bGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxlIG1h
dGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQpAQCAtNzI0LDI3ICs3MjEsMjEgQEAgdm9pZCBFZGl0
b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21l
bnQsIFNlbGVjdFJlcGwKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChj
b25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBT
bWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
OjpZZXMsIGVkaXRpbmdBY3Rpb24pOworICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQo
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCksIHNl
bGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0Fj
dGlvbik7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKK09wdGlv
bmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRl
UmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdl
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFy
YW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoIWNhbkRlbGV0ZVJhbmdlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShyYW5n
ZSk7CisgICAgcmV0dXJuIHJhbmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKCkgJiYgY2FuRGVsZXRl
UmFuZ2UoKnJhbmdlKSAmJiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uo
KnJhbmdlKTsKIH0KIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCkBAIC03NjMsNyArNzU0
LDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVu
dEtpbmQ6OkN1dCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25z
dAorYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9u
KSBjb25zdAogewogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxvYWRl
cigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTgwLDcg
Kzk3MSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYg
c3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgZGlzcGF0Y2hJbnB1dEV2
ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CiAgICAgCi1i
b29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBSYW5n
ZSogcmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3Bl
cnRpZXMmIHN0eWxlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7ICAgCiAgICAgcmV0dXJu
IGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCByYW5nZSk7CiB9CkBAIC0xMDExLDcg
KzEwMDIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5
bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKCpzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUoc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAyMiw3ICsxMDEzLDcgQEAgdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0
aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jv
bmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCi0g
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0
eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZSht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShz
dHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKSwgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JG
aWx0ZXJNb2RlKTsKQEAgLTEwMzMsNyArMTAyNCw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFn
cmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBl
CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKKyAgICBpZiAoY2xp
ZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoKnN0eWxlLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpKQogICAgICAgICBhcHBs
eVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIApAQCAtMTI2Nyw3ICsx
MjU4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChj
b25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAoIXNlbGVjdGlvbi5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3Vs
ZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91
bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBGSVhN
RTogU2hvdWxkIHBhc3MgZmFsc2UgdG8gdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoKSB0byBub3QgcmVtb3ZlIG1hcmtlcnMgaWYKQEAgLTEzMjYsNyArMTMxNyw3IEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hv
dWxkSW5zZXJ0VGV4dCgiXG4iX3MsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTEzNDYsNyArMTMzNyw3
IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2Fu
RWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIl9z
LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xNDA2LDEwICsxMzk3LDEwIEBAIHZvaWQgRWRpdG9yOjpw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmlzCiAKIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNw
ZWNpZmllciBhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3Rl
ZFJhbmdlKCk7Ci0gICAgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbi5n
ZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgd2lsbFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvbik7CiAgICAgaWYgKGFjdGlvbiA9PSBD
dXRBY3Rpb24pIHsKLSAgICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0
KCkpKQorICAgICAgICBpZiAoIXNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbikpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcodHJ1ZSk7CkBAIC0xNDM0LDcgKzE0MjUsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1
dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgp
KTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5
T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRh
dGFUcmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFz
dGUoKS0+d3JpdGVTZWxlY3Rpb24oY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pLmdldCgpLCBj
YW5TbWFydENvcHlPckRlbGV0ZSgpLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBJbmNsdWRlSW1hZ2VB
bHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQpAQCAtMTUy
Niw3ICsxNTE3LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1EZWxldGUoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3RlZFJhbmdlKCkuZ2V0
KCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3RlZFJhbmdlKCksIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4
dCk7CiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCkpOwogCiAgICAgLy8gY2xlYXIgdGhlICJzdGFydCBuZXcga2lsbCByaW5nIHNlcXVlbmNl
IiBzZXR0aW5nLCBiZWNhdXNlIGl0IHdhcyBzZXQgdG8gdHJ1ZQpAQCAtMTc4NCwxMiArMTc3NSwx
MiBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKIAog
I2VuZGlmCiAKLWJvb2wgRWRpdG9yOjpzaG91bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jv
b2wgRWRpdG9yOjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsK
ICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEVuZEVkaXRpbmcocmFuZ2Up
OwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jv
b2wgRWRpdG9yOjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
ewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQmVnaW5FZGl0aW5nKHJh
bmdlKTsKIH0KQEAgLTE4NDEsNyArMTgzMiw3IEBAIHZvaWQgRWRpdG9yOjpkaWRFbmRFZGl0aW5n
KCkKICAgICAgICAgY2xpZW50KCktPmRpZEVuZEVkaXRpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3I6
OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSogcmFuZ2UpCit2b2lkIEVkaXRv
cjo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+d2ls
bFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHJhbmdlKTsKQEAgLTE5MjQsMTQgKzE5MTUsMTQg
QEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogCiB2b2lkIEVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24oKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb21wb3NpdGlvblJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IGNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgLy8gVGhlIGNvbXBvc2l0aW9uIGNhbiBzdGFydCBpbnNpZGUgYSBjb21w
b3NlZCBjaGFyYWN0ZXIgc2VxdWVuY2UsIHNvIHdlIGhhdmUgdG8gb3ZlcnJpZGUgY2hlY2tzLgog
ICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODE+
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gICAgc2VsZWN0aW9uLnNldFdpdGhv
dXRWYWxpZGF0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigp
KTsKKyAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24oY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlLT5zdGFydCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5n
ZS0+ZW5kKSk7CiAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uLCB7IH0pOwogfQogCkBAIC0yNDg1LDkgKzI0NzYsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0
YXJ0LAogICAgIGlmICghdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdU
eXBlOjpTcGVsbGluZykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVTZWxlY3Rpb24g
YWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBM
ZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25C
b3VuZGFyeSkpOworICAgIGF1dG8gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3Jk
U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFu
Z2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVM
aXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3Jk
UmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpKTsKKyAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFk
amFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UpOwog
I2Vsc2UKICNpZiAhVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQogICAgIFVOVVNFRF9Q
QVJBTShkb1JlcGxhY2VtZW50KTsKQEAgLTI1NzIsNyArMjU2Myw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsCiAgICAgICAgIC8vIGZ1bGwgc2VudGVuY2UgYXMgd2UgY2FuLCByZXNwZWN0aW5n
IGJvdW5kYXJpZXMgd2hlcmUgc3BlbGxjaGVja2luZyBpcyBkaXNhYmxlZC4KICAgICAgICAgZnVs
bFNlbnRlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMo
KmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIHNw
ZWxsQ2hlY2tpbmdSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAg
ICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09w
dGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFu
Z2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZnVsbFNlbnRlbmNlUmFuZ2Up
KTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0
Q2hlY2tpbmdPcHRpb25zLCBzcGVsbENoZWNraW5nUmFuZ2UsIGFkamFjZW50V29yZFJhbmdlLCBm
dWxsU2VudGVuY2VSYW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI1ODAsNyAr
MjU3MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlOwog
ICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOwogCiAgICAgLy8gQXV0b2NvcnJlY3Qg
dGhlIG1pc3NwZWxsZWQgd29yZC4KQEAgLTI1OTksNyArMjU5MCw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsCiAgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVk
aXRvcigpLnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgICAgIGlmICghbV9k
b2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1p
c3NwZWxsaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVw
bGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAKQEAgLTI2MTYsNyArMjYwNyw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAjZW5kaWYKIH0KICAgICAKLXZvaWQgRWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpCit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7CiAjaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHNlbGVjdGlvbiBh
bHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KQEAgLTI2NDQsOSArMjYzNSwxMSBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvbwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgVGV4
dENoZWNraW5nSGVscGVyIGNoZWNrZXIoKmNsaWVudCgpLCAqc2VhcmNoUmFuZ2UpOwotICAgIGlm
IChjaGVja1NwZWxsaW5nKQotICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGluZ3MoZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKLSAgICBlbHNlIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKSkKKyAgICBpZiAoY2hlY2tTcGVsbGluZykgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IGZp
cnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2U7CisgICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxs
aW5ncyhmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlKTsKKyAgICAgICAgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlID0gbWFrZVJhbmdlKGZpcnN0TWlzc3BlbGxpbmdMaXZlUmFuZ2UpOworICAgIH0gZWxz
ZSBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIGNoZWNrZXIubWFya0Fs
bEJhZEdyYW1tYXIoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CkBAIC0y
Njc0LDE4ICsyNjY3LDE4IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5G
b2N1c2VkTm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOwogfQogCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
K3ZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7
CiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rpb24sIHRydWUsIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4g
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rp
b24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogfQogCi12b2lkIEVkaXRvcjo6bWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucywgUmVmUHRyPFJhbmdlPiYmIHNwZWxsaW5nUmFu
Z2UsIFJlZlB0cjxSYW5nZT4mJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBSZWZQdHI8UmFu
Z2U+JiYgZ3JhbW1hclJhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2lu
Z09wdGlvbnMsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSkKIHsKICAgICBpZiAocGxhdGZv
cm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxMCw4
ICsyNzAzLDggQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAoIWlzU3BlbGxDaGVj
a2luZ0VuYWJsZWRGb3IoJmVkaXRhYmxlTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gcmFuZ2VUb0NoZWNrID0gc2hvdWxkTWFya0dyYW1tYXIgPyBncmFtbWFyUmFuZ2UucmVsZWFz
ZU5vbk51bGwoKSA6IHNwZWxsaW5nUmFuZ2UucmVsZWFzZU5vbk51bGwoKTsKLSAgICBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoVG9DaGVjayhyYW5nZVRvQ2hlY2suZ2V0KCkpOworICAg
IGF1dG8mIHJhbmdlVG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gKmdyYW1tYXJSYW5nZSA6
ICpzcGVsbGluZ1JhbmdlOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0No
ZWNrKGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvQ2hlY2spKTsKICAgICBpZiAocGFyYWdyYXBoVG9D
aGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjcxOSw4ICsyNzEyLDggQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKIAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3
ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0
IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRh
YmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7Ci0gICAgYXV0byB0ZXh0UmVwbGFjZW1lbnRS
YW5nZSA9IGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UgPyBtYWtlUmVmKCphdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlKSA6IHJhbmdlVG9DaGVjay5jb3B5UmVmKCk7Ci0gICAgYXV0byByZXF1ZXN0
ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2lu
Z1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gbWFrZVJlZihwYXJhZ3JhcGhUb0No
ZWNrLnBhcmFncmFwaFJhbmdlKCkpIDogV1RGTW92ZShyYW5nZVRvQ2hlY2spLCBXVEZNb3ZlKHRl
eHRSZXBsYWNlbWVudFJhbmdlKSwgcGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKTsK
KyAgICBhdXRvJiB0ZXh0UmVwbGFjZW1lbnRSYW5nZSA9IGF1dG9tYXRpY1JlcGxhY2VtZW50UmFu
Z2UgPyAqYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA6IHJhbmdlVG9DaGVjazsKKyAgICBhdXRv
IHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVkT3B0aW9ucywgVGV4
dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFsLCBhc3luY2hyb25vdXMgPyBSZWY8UmFuZ2U+IHsg
cGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpIH0gOiBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2VUb0NoZWNrKSwgY3JlYXRlTGl2ZVJhbmdlKHRleHRSZXBsYWNlbWVudFJhbmdlKSwgcGFyYWdy
YXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKTsKICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjc1Myw5ICsyNzQ2LDkgQEAgc3RhdGljIGJvb2wgaXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRUeXBlKFRleHRDaGVja2luZ1R5cGUgdHlwZSkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKFJhbmdl
JiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3ZvaWQgRWRpdG9y
OjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRv
UmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKLSAgICBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50KS0+YXBwbHko
KTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlVG9SZXBsYWNlKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwogfQogCiBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgsIFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFu
Z2UpCkBAIC0yODk1LDcgKzI4ODgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3Io
Y29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAg
ICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUxp
bmtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNl
bWVudCwgcmFuZ2VUb1JlcGxhY2UucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJl
cGxhY2VtZW50LCBtYWtlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKSkgewogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2Vydmlu
Z1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNlLCByZXBsYWNl
bWVudCwgeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0pOwogCiAgICAgICAgICAgICAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSkgewpAQCAtMjk0OCwxMiArMjk0MSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBpZiAo
cmVwbGFjZWRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGlvbiB8
fCAhc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgYXV0byBzZWxlY3Rpb24gPSBzZWxlY3RlZFJh
bmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRT
dHJpbmcsIHNlbGVjdGlvbiwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgKnNlbGVjdGlvbik7Ci0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFn
cmFwaCgqc2VsZWN0aW9uKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKSk7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KHJlcGxhY2VkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8s
IEVkaXRBY3Rpb246Okluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFj
ZWRTdHJpbmcubGVuZ3RoKCkpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CkBAIC0yOTc5LDExICsyOTcyLDExIEBAIHZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAgICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRkKFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5n
ZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywg
Y3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShzcGVs
bENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZ3JhbW1hclNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBzcGVsbENo
ZWNraW5nUmFuZ2UsIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdS
YW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwog
ICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSk7CiAgICAgaWYgKG1hcmtHcmFtbWFyKQogICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFt
bWFyU2VsZWN0aW9uKTsKQEAgLTMwODYsMjMgKzMwNzksMTggQEAgdm9pZCBFZGl0b3I6OmRlbGV0
ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBTdHIKICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRlbGV0ZWRBdXRvY29ycmVj
dGlvbkF0UG9zaXRpb24ocG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2lu
dCYgd2luZG93UG9pbnQpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IG1fZG9jdW1lbnQuZnJhbWUo
KS0+ZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKICAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICBhdXRvIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgYXV0byBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZnJhbWVQb2ludCA9IGZyYW1l
Vmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0gICAgYXV0byBzZWxlY3Rpb24g
PSBWaXNpYmxlU2VsZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1l
UG9pbnQpIH07Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFZp
c2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVWaWV3
LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KSkgfS50b05vcm1hbGl6ZWRSYW5nZSgpOwog
fQogCiB2b2lkIEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNv
bnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50LCBSZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFs
RXh0ZW50T3B0aW9uKQpAQCAtMzEyOSwxNyArMzExNywxNiBAQCB2b2lkIEVkaXRvcjo6c2V0SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJl
dmVhbAogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwogfQogCi1SZWZQ
dHI8UmFuZ2U+IEVkaXRvcjo6Y29tcG9zaXRpb25SYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpjb21wb3NpdGlvblJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
Y29tcG9zaXRpb25Ob2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2NvbXBvc2l0aW9uTm9kZS0+
bGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihtX2NvbXBvc2l0aW9uU3Rh
cnQsIGxlbmd0aCk7Ci0gICAgdW5zaWduZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgoc3RhcnQs
IG1fY29tcG9zaXRpb25FbmQpLCBsZW5ndGgpOwotICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBl
YXJseSByZXR1cm4gbmVlZWQ/CisgICAgdW5zaWduZWQgZW5kID0gc3RkOjpjbGFtcChtX2NvbXBv
c2l0aW9uRW5kLCBzdGFydCwgbGVuZ3RoKTsKICAgICBpZiAoc3RhcnQgPj0gZW5kKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX2NvbXBvc2l0aW9u
Tm9kZS0+ZG9jdW1lbnQoKSwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIHN0YXJ0LCBtX2NvbXBv
c2l0aW9uTm9kZS5nZXQoKSwgZW5kKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4geyB7IHsgKm1fY29tcG9zaXRpb25Ob2RlLCBzdGFydCB9LCB7ICptX2NvbXBvc2l0
aW9uTm9kZSwgZW5kIH0gfSB9OwogfQogCiBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxl
Y3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9uRW5kKSBj
b25zdApAQCAtMzIwMSw3ICszMTg4LDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAg
fQogCiAgICAgLy8gSW5zZXJ0IHRoZSB0cmFuc3Bvc2VkIGNoYXJhY3RlcnMuCi0gICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KHRyYW5zcG9zZWQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQodHJhbnNwb3NlZCwgbmV3U2Vs
ZWN0aW9uLmZpcnN0UmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
IHJldHVybjsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQodHJhbnNwb3NlZCwgU2VsZWN0
UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwog
fQpAQCAtMzM2MCwxMyArMzM0NywxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJl
dFdpZHRoKEludFJlY3QmIHJlY3QpCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KDApOwogfQogCi1J
bnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorSW50
UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkg
Y29uc3QKIHsKLSAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOworICAg
IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNU
UkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCksIERPV05TVFJFQU0pOwogCi0gICAgaWYg
KHJhbmdlLT5jb2xsYXBzZWQoKSkgeworICAgIGlmIChyYW5nZS5jb2xsYXBzZWQoKSkgewogICAg
ICAgICAvLyBGSVhNRTogR2V0dGluZyBjYXJldCByZWN0IGFuZCByZW1vdmluZyBjYXJldCB3aWR0
aCBpcyBhIHZlcnkgcm91bmRhYm91dCB3YXkgdG8gZ2V0IGNvbGxhcHNlZCByYW5nZSBsb2NhdGlv
bi4KICAgICAgICAgLy8gSW4gcGFydGljdWxhciwgd2lkdGggYWRqdXN0bWVudCBkb2Vzbid0IHdv
cmsgZm9yIHJvdGF0ZWQgdGV4dC4KICAgICAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IFJl
bmRlcmVkUG9zaXRpb24oc3RhcnRWaXNpYmxlUG9zaXRpb24pLmFic29sdXRlUmVjdCgpOwpAQCAt
MzM3NCwxMCArMzM2MSwxMCBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFu
Z2UqIHJhbmdlKSBjb25zdAogICAgICAgICByZXR1cm4gc3RhcnRDYXJldFJlY3Q7CiAgICAgfQog
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihyYW5nZS0+ZW5kUG9zaXRp
b24oKSwgVVBTVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCksIFVQU1RSRUFNKTsKIAogICAg
IGlmIChpblNhbWVMaW5lKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24p
KQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSkpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMocmFuZ2UpKSk7CiAKICAgICBMYXlvdXRVbml0IGV4dHJhV2lkdGhUb0VuZE9m
TGluZTsKICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVyZWRQb3NpdGlvbihzdGFy
dFZpc2libGVQb3NpdGlvbikuYWJzb2x1dGVSZWN0KCZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwpA
QCAtMzQwMyw3ICszMzkwLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKICAgICBpZiAobV9k
b2N1bWVudC5mcmFtZSgpICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2Fs
bGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgY3JlYXRl
TGl2ZVJhbmdlKG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgYWZmaW5p
dHksIHN0aWxsU2VsZWN0aW5nKTsKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCks
IG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdT
dHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0OTAsNyArMzQ3Nyw3
IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0
aW9ucyBvcHRpb25zKQogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0gICAgYXV0byByZXN1bHRSYW5nZSA9IHJh
bmdlT2ZTdHJpbmcodGFyZ2V0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KSkuZ2V0KCksIG9wdGlvbnMpOworICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5n
KHRhcmdldCwgc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSwgb3B0aW9ucyk7CiAgICAgaWYgKCFyZXN1
bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNTAyLDEwNiArMzQ4OSwxMDkg
QEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9y
OjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFu
Z2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYXV0
byYgc3RhcnQoVCYmIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykgPyByYW5nZS5lbmQgOiByYW5nZS5zdGFydDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGF1dG8mIGVuZChUJiYgcmFuZ2UsIEZpbmRP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRz
KSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOworfQorCitzdGF0aWMgQm91bmRhcnlQb2ludCBt
YWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSA/IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpIDogbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhub2RlKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKE5vZGUmIG5vZGUsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSA/IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZShub2RlKSA6IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlKG5vZGUpOworfQorCitzdGF0aWMgU2ltcGxlUmFuZ2UgY29sbGFwc2VJZlJvb3RzRGlmZmVy
KFNpbXBsZVJhbmdlJiYgcmFuZ2UpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaGVscHMgY29ycmVj
dCByZXN1bHRzIGluIHNvbWUgY2FzZXMgaW52b2x2aW5nIHNoYWRvdyB0cmVlcy4gQnV0IHdlIGNh
biBpbmNvcnJlY3RseSBmaW5kIGEgc3RyaW5nIHdpdGggbWlkZGxlIGNoYXJhY3RlcnMgaW4gYW4g
aW5wdXQgZWxlbWVudCBhbmQgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVycyBvdXRzaWRlIGl0Lgor
ICAgIHJldHVybiAmcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yb290Tm9kZSgpID09ICZyYW5nZS5l
bmQuY29udGFpbmVyLT5yb290Tm9kZSgpCisgICAgICAgID8gV1RGTW92ZShyYW5nZSkgOiBTaW1w
bGVSYW5nZSB7IHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCB9OworfQorCitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRp
b25zKQogewogICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFN0YXJ0IGZyb20gYW4g
ZWRnZSBvZiB0aGUgcmVmZXJlbmNlIHJhbmdlLCBpZiB0aGVyZSdzIGEgcmVmZXJlbmNlIHJhbmdl
IHRoYXQncyBub3QgaW4gc2hhZG93IGNvbnRlbnQuIFdoaWNoIGVkZ2UKICAgICAvLyBpcyB1c2Vk
IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBzZWFyY2hpbmcgZm9yd2FyZCBvciBiYWNrd2FyZCwg
YW5kIHdoZXRoZXIgc3RhcnRJblNlbGVjdGlvbiBpcyBzZXQuCi0gICAgUmVmUHRyPFJhbmdlPiBz
ZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSkpOwogCi0gICAgYm9vbCBmb3J3
YXJkID0gIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKTsKICAgICBib29sIHN0YXJ0SW5SZWZl
cmVuY2VSYW5nZSA9IHJlZmVyZW5jZVJhbmdlICYmIG9wdGlvbnMuY29udGFpbnMoU3RhcnRJblNl
bGVjdGlvbik7Ci0gICAgaWYgKHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChmb3J3YXJk
KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0SW5SZWZlcmVuY2VSYW5n
ZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkgOiByZWZlcmVuY2VSYW5nZS0+ZW5k
UG9zaXRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkg
OiByZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICB9CisgICAgYXV0byBzaGFk
b3dUcmVlUm9vdCA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSA6IG51bGxwdHI7CiAKLSAgICBSZWZQdHI8U2hh
ZG93Um9vdD4gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOwotICAg
IGlmIChzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291
bnRDaGlsZE5vZGVzKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKLSAgICB9CisgICAgYXV0byBzZWFyY2hSYW5n
ZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICBpZiAo
cmVmZXJlbmNlUmFuZ2UpCisgICAgICAgIHN0YXJ0KHNlYXJjaFJhbmdlLCBvcHRpb25zKSA9IHN0
YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHN0YXJ0KCpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucykgOiBl
bmQoKnJlZmVyZW5jZVJhbmdlLCBvcHRpb25zKTsKKyAgICBpZiAoc2hhZG93VHJlZVJvb3QpCisg
ICAgICAgIGVuZChzZWFyY2hSYW5nZSwgb3B0aW9ucykgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVy
Tm9kZUNvbnRlbnRzKCpzaGFkb3dUcmVlUm9vdCwgb3B0aW9ucyk7CisgICAgYXV0byByZXN1bHRS
YW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLCB0
YXJnZXQsIG9wdGlvbnMpKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBjcmVh
dGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykp
OwogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gdGhlIHJlZmVyZW5jZSByYW5nZSBhbmQgdGhlIGZv
dW5kIHJhbmdlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgcmVmZXJlbmNlIHJhbmdlLCBmaW5kIGFnYWlu
LgogICAgIC8vIEJ1aWxkIGEgc2VsZWN0aW9uIHdpdGggdGhlIGZvdW5kIHJhbmdlIHRvIHJlbW92
ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZS4KICAgICAvLyBDb21wYXJlIHJhbmdlcyBpbnN0ZWFkIG9m
IHNlbGVjdGlvbiBvYmplY3RzIHRvIGlnbm9yZSB0aGUgd2F5IHRoYXQgdGhlIGN1cnJlbnQgc2Vs
ZWN0aW9uIHdhcyBtYWRlLgotICAgIGlmIChzdGFydEluUmVmZXJlbmNlUmFuZ2UgJiYgYXJlUmFu
Z2VzRXF1YWwoY3JlYXRlTGl2ZVJhbmdlKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlKS50
b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgcmVmZXJlbmNlUmFuZ2UpKSB7Ci0gICAgICAgIHNl
YXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoZm9y
d2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChyZWZlcmVuY2VSYW5nZS0+
ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRFbmQocmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKHNo
YWRvd1RyZWVSb290KSB7Ci0gICAgICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNv
dW50Q2hpbGROb2RlcygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJh
bmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYm
IFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdlKCkgPT0gcmVm
ZXJlbmNlUmFuZ2UpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIHN0YXJ0KHNlYXJjaFJhbmdlLCBvcHRp
b25zKSA9IGVuZCgqcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMpOworICAgICAgICBpZiAoc2hhZG93
VHJlZVJvb3QpCisgICAgICAgICAgICBlbmQoc2VhcmNoUmFuZ2UsIG9wdGlvbnMpID0gbWFrZUJv
dW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJvb3QsIG9wdGlvbnMpOwor
ICAgICAgICByZXN1bHRSYW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0
KHNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAvLyBJZiBub3Ro
aW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQg
Zm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNl
ZCgpICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNv
bnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hv
c3QoKSkgewotICAgICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICAgICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUo
KnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVz
dWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRh
cmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBzaGFk
b3dUcmVlUm9vdCkgeworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gaG9zdCA9IHNoYWRvd1Ry
ZWVSb290LT5zaGFkb3dIb3N0KCkpCisgICAgICAgICAgICBzdGFydChzZWFyY2hSYW5nZSwgb3B0
aW9ucykgPSAqbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGUoKmhvc3QsIG9wdGlvbnMpOworICAg
ICAgICByZXN1bHRSYW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRu
J3QgZmluZCBhbnl0aGluZyBhbmQgd2UncmUgd3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUg
ZW50aXJlIGRvY3VtZW50ICh0aGlzIHdpbGwKICAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2gg
dGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hlZCBpbiBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0
UmFuZ2UtPmNvbGxhcHNlZCgpICYmIG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKLSAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dChyYW5nZU9m
Q29udGVudHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOworICAgIGlmIChyZXN1bHRS
YW5nZS5jb2xsYXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7CisgICAg
ICAgIHJlc3VsdFJhbmdlID0gY29sbGFwc2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQocmFu
Z2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICAgICAgLy8g
V2UgdXNlZCB0byByZXR1cm4gZmFsc2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1l
IHJhbmdlIHRoYXQgd2Ugc3RhcnRlZCB3aXRoCiAgICAgICAgIC8vIChlLmcuLCB0aGUgcmVmZXJl
bmNlIHJhbmdlIHdhcyBhbHJlYWR5IHRoZSBvbmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1
dCB3ZSBkZWNpZGVkIHRoYXQKICAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNh
c2UgaW5zdGVhZCwgc28gd2UnbGwganVzdCBmYWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgogICAg
IH0KIAotICAgIHJldHVybiByZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkgPyBudWxscHRyIDogcmVz
dWx0UmFuZ2U7CisgICAgcmV0dXJuIHJlc3VsdFJhbmdlLmNvbGxhcHNlZCgpID8gV1RGOjpudWxs
b3B0IDogbWFrZU9wdGlvbmFsKHJlc3VsdFJhbmdlKTsKIH0KIAotc3RhdGljIGJvb2wgaXNGcmFt
ZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMgYm9vbCBpc0ZyYW1l
SW5SYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBm
b3IgKGF1dG8qIG93bmVyRWxlbWVudCA9IGZyYW1lLm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1l
bnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQo
KSkgewotICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Uub3du
ZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLmludGVyc2Vj
dHNOb2RlKCpvd25lckVsZW1lbnQpOworICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1l
bnQoKSA9PSAmcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50
KTsKICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
IHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBsaW1p
dCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFJlZlB0cjxSYW5nZT4+KiBtYXRjaGVzKQordW5z
aWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1
bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFNpbXBsZVJhbmdlPiogbWF0
Y2hlcykKIHsKICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBzZWFyY2hSYW5nZTsKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKCZyYW5nZS0+b3du
ZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UgPSBy
YW5nZTsKKyAgICAgICAgaWYgKCZyYW5nZS0+c3RhcnQuZG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlID0gKnJhbmdlOwogICAgICAgICBlbHNlIGlmICgh
aXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIXNlYXJjaFJhbmdlKQotICAgICAgICBzZWFyY2hS
YW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKKyAgICAgICAgc2VhcmNoUmFuZ2Ug
PSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CiAKLSAgICBOb2Rl
JiBvcmlnaW5hbEVuZENvbnRhaW5lciA9IHNlYXJjaFJhbmdlLT5lbmRDb250YWluZXIoKTsKLSAg
ICBpbnQgb3JpZ2luYWxFbmRPZmZzZXQgPSBzZWFyY2hSYW5nZS0+ZW5kT2Zmc2V0KCk7CisgICAg
YXV0byBvcmlnaW5hbEVuZCA9IHNlYXJjaFJhbmdlLT5lbmQ7CiAKICAgICB1bnNpZ25lZCBtYXRj
aENvdW50ID0gMDsKICAgICBkbyB7CkBAIC0zNjEwLDggKzM2MDAsOCBAQCB1bnNpZ25lZCBFZGl0
b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5n
ZSwgRmluZE9wdAogICAgICAgICAgICAgaWYgKCFyZXN1bHRSYW5nZS5zdGFydC5jb250YWluZXIt
PmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpyZXN1bHRSYW5nZS5zdGFydC5jb250YWluZXIt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKG9yaWdpbmFs
RW5kQ29udGFpbmVyLCBvcmlnaW5hbEVuZE9mZnNldCk7CisgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpyZXN1bHRSYW5n
ZS5zdGFydC5jb250YWluZXItPnNoYWRvd0hvc3QoKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+ZW5kID0gb3JpZ2luYWxFbmQ7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
CkBAIC0zNjI2LDE1ICszNjE2LDE0IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgICAg
IGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIC8vIFNldCB0aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNoIHJhbmdlIHRv
IGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCi0gICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhl
cmUgaXMgbm8gbmVlZCB0byB1c2UgYSBWaXNpYmxlUG9zaXRpb24gaGVyZSwKLSAgICAgICAgLy8g
c2luY2UgZmluZFBsYWluVGV4dCB3aWxsIHVzZSBhIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRo
ZSB2aXNpYmxlCi0gICAgICAgIC8vIHRleHQgbm9kZXMuIAotICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoV1RGTW92ZShyZXN1bHRSYW5nZS5lbmQuY29udGFpbmVyKSwgcmVzdWx0UmFuZ2Uu
ZW5kLm9mZnNldCk7CisgICAgICAgIC8vIFNldCB0aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNo
IHJhbmdlIHRvIGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHJlc3VsdCByYW5nZS4KKyAgICAg
ICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgVmlzaWJsZVBvc2l0aW9uIGhlcmU6IGZpbmRQ
bGFpblRleHQgd2lsbCB1c2UgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdmlzaWJsZSB0ZXh0IG5v
ZGVzLgorICAgICAgICBzZWFyY2hSYW5nZS0+c3RhcnQgPSBXVEZNb3ZlKHJlc3VsdFJhbmdlLmVu
ZCk7CiAKLSAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+c2hhZG93
Um9vdCgpOwotICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1Ry
ZWVSb290KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqc2hhZG93VHJlZVJvb3Qs
IHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7CisgICAgICAgIGlmIChzZWFyY2hS
YW5nZS0+Y29sbGFwc2VkKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHNoYWRvd1RyZWVSb290
ID0gc2VhcmNoUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkK
KyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+ZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJvb3QpOworICAgICAgICB9CiAgICAgfSB3aGlsZSAo
dHJ1ZSk7CiAKICAgICByZXR1cm4gbWF0Y2hDb3VudDsKQEAgLTM5NDMsMjIgKzM5MzIsMjQgQEAg
U3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiAgICAgcmV0
dXJuIHBsYWluVGV4dCgqcmFuZ2UpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwotICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpKSk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKKyAgICBp
ZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHsgeyAqc3RhcnQsICplbmQgfSB9OwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFu
Z2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQp
IGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2lu
Z1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29uc3QKIHsKICAgICBp
ZiAoIXJlc3VsdC5yYW5nZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2UgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBjb250ZXh0UmFu
Z2UgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAgICAgaWYgKCFjb250ZXh0
UmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0LnJhbmdlKSk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0
ZXJSYW5nZSgqY29udGV4dFJhbmdlLCByZXN1bHQucmFuZ2UpOwogfQogCiB2b2lkIEVkaXRvcjo6
c2NoZWR1bGVFZGl0b3JVSVVwZGF0ZSgpCkBAIC00MjI4LDggKzQyMTksOCBAQCB2b2lkIEVkaXRv
cjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2Fu
ZGlkYXRlKQogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gdHJ1ZTsKIAogICAg
IGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoYWNjZXB0ZWRDYW5k
aWRhdGUpKSB7Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRl
LnJlcGxhY2VtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCi0g
ICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0ZShyYW5nZS5nZXQo
KSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQpLT5hcHBseSgpOwogICAgIH0gZWxzZQogICAgICAgICBpbnNlcnRUZXh0
KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCBudWxscHRyKTsKIApAQCAtNDI2MSwxNiAr
NDI1MiwxNiBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKQogICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3Zlcndy
aXRlTW9kZUVuYWJsZWQpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxl
Y3Rpb25SYW5nZSgpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVj
dGlvblJhbmdlKCkKIHsKLSAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRo
ZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPwotICAgIC8vIFdo
b2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkgZm9yZ290IHRvIGxlYXZlIHVzIGEgY29t
bWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21t
b25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7Ci0gICAg
YXV0byogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3Np
dGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIEhUTUxOYW1lczo6YVRhZyk7Ci0gICAgaWYgKGVu
Y2xvc2luZ0FuY2hvciAmJiBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHJhbmdlLT5zdGFydFBv
c2l0aW9uKCkpID49IDApCi0gICAgICAgIHJhbmdlLT5zZXRTdGFydCgqZW5jbG9zaW5nQW5jaG9y
LCAwKTsKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzZWxlY3Rp
b24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPyBXaG9ldmVyIHdyb3RlIHRoaXMg
Y29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0
aGUgcmF0aW9uYWxlLgorICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgaWYg
KHJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Io
cmFuZ2UtPnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UtPmVuZC5jb250YWluZXIpLmdldCgpKSwgSFRN
TE5hbWVzOjphVGFnKSkgeworICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkgPj0gMCkKKyAgICAgICAgICAg
ICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygq
ZW5jbG9zaW5nQW5jaG9yKTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gcmFuZ2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IDY5ZDYwNTkzMDI2NTJmNjcyZmQyNTkxNTJk
M2RjZmI0NWZmMDkyNmYuLjlkZWRkY2EzODM2ZjE1MzAzNmNmYWY5YzgwZGFkMzk5NDRmNDQ5ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTMsMTAg
KzIxMywxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvdXRkZW50KCk7CiAg
ICAgdm9pZCB0cmFuc3Bvc2UoKTsKIAotICAgIGJvb2wgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9j
dW1lbnRGcmFnbWVudCYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKTsKLSAgICBib29sIHNo
b3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24p
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2Uq
KSBjb25zdDsKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFu
Z2UqKTsKKyAgICBib29sIHNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pOworICAgIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgY29uc3Q7
CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0
IFNpbXBsZVJhbmdlJik7CiAKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pOwogCkBAIC0zMjIsMTYgKzMyMiwx
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9k
ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKikgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwotICAgIHZv
aWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVmUHRyPFJhbmdl
PiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKICAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKICAgICB2b2lkIG1hcmtBbmRSZXBs
YWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiwgY29uc3QgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VSYW5nZUZvclNwZWxs
Q2hlY2tpbmcoUmFuZ2UmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBT
dHJpbmcmKTsKIAogICAgIGJvb2wgaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRv
Z2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCk7CiAKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBSZWZQ
dHI8UmFuZ2U+JiYgc3BlbGxpbmdSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBncmFtbWFyUmFuZ2UpOworICAgIHZvaWQgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4sIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSk7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVAogI2VuZGlmCkBAIC0zNDMsOCAr
MzQzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1NwZWxsaW5nR3Vlc3NQYW5lbCgpOwogICAg
IGJvb2wgc3BlbGxpbmdQYW5lbElzU2hvd2luZygpOwogCi0gICAgYm9vbCBzaG91bGRCZWdpbkVk
aXRpbmcoUmFuZ2UqKTsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqKTsKKyAgICBi
b29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpOworICAgIGJvb2wgc2hv
dWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgdm9pZCBjbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpOwogICAgIGJvb2wgY2FuVW5kbygpIGNvbnN0OwpAQCAtMzU2LDcgKzM1
Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCk7CiAgICAgdm9pZCBk
aWRFbmRFZGl0aW5nKCk7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
UmFuZ2UqKTsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKCk7CiAKICAgICB2b2lkIHNob3dGb250UGFuZWwoKTsKQEAgLTM4MCw3ICszODAsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJik7IC8vIGlmIG5vIGV4aXN0aW5nIGNvbXBvc2l0aW9uLCByZXBsYWNlcyBzZWxl
Y3Rpb24KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKCk7CiAgICAg
Ym9vbCBjYW5jZWxDb21wb3NpdGlvbklmU2VsZWN0aW9uSXNJbnZhbGlkKCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBjb21wb3NpdGlvblJhbmdlKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2ln
bmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGlvbkVuZCkgY29uc3Q7CiAKICAg
ICAvLyBnZXR0aW5nIGludGVybmF0aW9uYWwgdGV4dCBpbnB1dCBjb21wb3NpdGlvbiBzdGF0ZSAo
Zm9yIHVzZSBieSBJbmxpbmVUZXh0Qm94KQpAQCAtNDAwLDcgKzQwMCw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCwgUmV2
ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID0gUmV2ZWFsU2VsZWN0
aW9uOjpZZXMpOwogICAgIGJvb2wgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIGNvbnN0IHsgcmV0
dXJuIG1faWdub3JlU2VsZWN0aW9uQ2hhbmdlczsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPFJhbmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAtNDEx
LDcgKzQxMSw3IEBAIHB1YmxpYzoKIAogICAgIEVkaXRpbmdCZWhhdmlvciBiZWhhdmlvcigpIGNv
bnN0OwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlKCk7CisgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHNlbGVjdGVkUmFuZ2UoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtTWFya2VkVGV4dCgpOwpAQCAtNDQ2LDcg
KzQ0Niw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVy
KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYsIEZpbmRPcHRpb25zKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFu
Z2VPZlN0cmluZyhjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRpb25zKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBGaW5kT3B0aW9ucyk7CiAKICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQg
YXMgZW1hY3MgdXNlcyBpdC4KICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpOwpAQCAtNDU1LDEzICs0NTUsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYgLCBFZGl0QWN0aW9u
ID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBJbnRSZWN0IGZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKikgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0
OwogCiAgICAgdm9pZCBzZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CiAgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgT3B0
aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+KTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKICAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24s
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjb3VudE1h
dGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMsIHVuc2lnbmVk
IGxpbWl0LCBib29sIG1hcmtNYXRjaGVzLCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4qKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBsaW1p
dCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFNpbXBsZVJhbmdlPiopOwogICAgIGJvb2wgbWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sKTsKIApAQCAtNTQ1
LDggKzU0NSw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdG
b3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5k
bGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdDsKKyAgICBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CiAgICAgYm9vbCBpc0hhbmRsaW5nQWNjZXB0ZWRDYW5k
aWRhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZTsgfQog
CiAgICAgdm9pZCBzZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGJvb2wgYikgeyBtX2lz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8gPSBiOyB9CkBAIC01NzksNyArNTc5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAKLSAgICBib29sIGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7Cisg
ICAgYm9vbCBjYW5EZWxldGVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0OwogICAgIGJv
b2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYpOwogICAgIHZvaWQg
cGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmKTsKICAgICB2b2lkIHBh
c3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCosIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4pOwpA
QCAtNTg4LDcgKzU4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBxdW90ZUZyYWdtZW50Rm9yUGFz
dGluZyhEb2N1bWVudEZyYWdtZW50Jik7CiAKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVy
RWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmID0gU2Nyb2xsQWxpZ25tZW50
OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZlYWxFeHRlbnRPcHRpb24gPSBEb05vdFJldmVhbEV4
dGVudCk7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0
YWJsZUVsZW1lbnQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yKSBjb25zdDsK
QEAgLTYwOCw3ICs2MDgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkgY29uc3Q7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9u
UmFuZ2UoKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gYWRqdXN0ZWRTZWxlY3Rpb25SYW5n
ZSgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2Vs
ZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAppbmRleCBkNmVhNDI2ZDdmN2ZlNzY1ZmIwMDk3ZTNkOTVhZWM3NTlkYTQyN2Vm
Li40NDBmY2Y2ZmE1ZmZmMWZkYjgyZTZkNTQ1MjI5MTBlNjVjNmE5MTNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTE3NiwxNSArMTc2LDE1IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVJbnNlcnROb2RlKEZyYW1lJiBmcmFtZSwgUmVmPE5vZGU+JiYgY29udGVu
dCkKIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1l
LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIG9sZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwogICAgIGF1dG8gbmV3UmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIW5ld1JhbmdlIHx8IG5ld1Jhbmdl
LT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gb2xkUmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIGFmZmluaXR5ID0gc2Vs
ZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkUmFuZ2UpLmdldCgpLCBj
cmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgZmFsc2UpKQorICAgIGlm
ICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoKm9s
ZFJhbmdlLCAqbmV3UmFuZ2UsIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5n
ZShuZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UoKm5ld1JhbmdlKS5wdHIoKSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjI2LDEx
ICsyMjYsMTEgQEAgc3RhdGljIHVuc2lnbmVkIHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUm
IGZyYW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdl
U3RlcChoZWlnaHQpKTsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gdW5pb25ET01SYW5nZXMo
UmFuZ2UmIGEsIFJhbmdlJiBiKQorc3RhdGljIFNpbXBsZVJhbmdlIHVuaW9uUmFuZ2VzKGNvbnN0
IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKIHsKLSAgICBSYW5nZSYgc3Rh
cnQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGIpLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyBhIDogYjsKLSAgICBSYW5nZSYgZW5kID0gYS5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGIpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDAgPyBiIDogYTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShhLm93bmVyRG9jdW1l
bnQoKSwgJnN0YXJ0LnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LnN0YXJ0T2Zmc2V0KCksICZlbmQu
ZW5kQ29udGFpbmVyKCksIGVuZC5lbmRPZmZzZXQoKSk7CisgICAgYXV0byYgc3RhcnQgPSBjcmVh
dGVMaXZlUmFuZ2UoYSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGEgOiBi
OworICAgIGF1dG8mIGVuZCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpIDw9IDAgPyBiIDogYTsKKyAgICByZXR1cm4geyBzdGFydC5zdGFydCwgZW5kLmVuZCB9
OwogfQogCiAvLyBFeGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25zCkBAIC0zNTQsNyArMzU0LDcgQEAg
c3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5t
YXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKTsKICAgICBpZiAobWFyayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCkpIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdl
KHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpmcmFtZS5lZGl0b3IoKS5z
ZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodW5pb25SYW5nZXMoKm1hcmssICpmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwog
ICAgICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA1
Niw3ICsxMDU2LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICAgICAgUEFMOjpzeXN0
ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFuZ2UoKm1h
cmspLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKSkucHRyKCks
IERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAppbmRleCAxNDc1ZmU1M2ExYzM3Yjg3MzdiOGFhNTA1MDRmMTc0OGJhODc2MDgwLi41MmE2
N2E4ZjYxZWE2MzFjMTg0NThlOGQ5ZTljNzFiMTBmMDk4NDNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMjMxMSw3ICsyMzExLDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbikgY28KICAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2RvY3VtZW50
LT5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGll
bnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiB9CiAKIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zp
c2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggYzVjYmMzZjk3Y2Q4YTk5MmMwYWVl
N2EzMWE4OWVmZDg3Y2ZhM2Q3OC4uZWVmZThmZDk1MWNjZmE0ZWI2NjE4MjdkNThlNjllYTU5YjU4
NmI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBA
IC04OCwxNCArODgsMTMgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uSW5IVE1MRm9ybWF0KCkK
IAogdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHJpbmc+JiBvdXRUeXBlcywgVmVjdG9yPFJlZlB0cjxT
aGFyZWRCdWZmZXI+PiYgb3V0RGF0YSkKIHsKLSAgICBhdXRvJiBkb2N1bWVudCA9IGVsZW1lbnQu
ZG9jdW1lbnQoKTsKLSAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQsIHsgJmVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIH0sIHsgJmVs
ZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IgfSk7Ci0gICAgY2xpZW50KCkt
PmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoZWxlbWVudFJhbmdlLnB0cigpLCBvdXRU
eXBlcywgb3V0RGF0YSk7CisgICAgYXV0byBlbGVtZW50UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlKGVsZW1lbnQpOworICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShl
bGVtZW50UmFuZ2UsIG91dFR5cGVzLCBvdXREYXRhKTsKIAogICAgIG91dFR5cGVzLmFwcGVuZChQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpOwotICAgIG91dERhdGEuYXBwZW5kKFBh
c3RlYm9hcmRDdXN0b21EYXRhIHsgZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKSwgeyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOworICAgIG91dERhdGEuYXBwZW5kKFBh
c3RlYm9hcmRDdXN0b21EYXRhIHsgZWxlbWVudC5kb2N1bWVudCgpLm9yaWdpbklkZW50aWZpZXJG
b3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKIAotICAgIGlmIChh
dXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoZWxlbWVudFJhbmdlLnB0cigp
KSkgeworICAgIGlmIChhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY3Jl
YXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSkuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChhdXRvIHdl
YkFyY2hpdmVEYXRhID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkpIHsKICAgICAg
ICAgICAgIG91dFR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CiAgICAgICAgICAg
ICBvdXREYXRhLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZSh3ZWJBcmNoaXZlRGF0YS5nZXQo
KSkpOwpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAgICAgICBjb250ZW50LmRhdGFJblJU
RkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1h
dChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKICAgICAgICAgY29udGVudC5kYXRhSW5SVEZGb3Jt
YXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKICAgICAgICAgY29udGVudC5kYXRh
SW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmlu
ZyhzdHJpbmcuZ2V0KCkpOwotICAgICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERh
dGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNv
bnRlbnQuY2xpZW50RGF0YSk7CisgICAgICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJk
RGF0YShzZWxlY3RlZFJhbmdlKCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNvbnRlbnQuY2xpZW50
RGF0YSk7CiAgICAgfQogICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbklu
SFRNTEZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKQEAgLTE0NCw3ICsxNDMsNyBA
QCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3Rl
Ym9hcmRXcml0ZXJEYXRhKQogICAgIHdlYkNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zv
cm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKICAg
ICB3ZWJDb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsK
ICAgICB3ZWJDb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7Ci0gICAgY2xpZW50KCktPmdldENsaWVudFBhc3Rl
Ym9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCB3ZWJDb250ZW50LmNsaWVu
dFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOworICAgIGNsaWVudCgpLT5nZXRDbGllbnRQ
YXN0ZWJvYXJkRGF0YShzZWxlY3RlZFJhbmdlKCksIHdlYkNvbnRlbnQuY2xpZW50VHlwZXMsIHdl
YkNvbnRlbnQuY2xpZW50RGF0YSk7CiAKICAgICBwYXN0ZWJvYXJkV3JpdGVyRGF0YS5zZXRXZWJD
b250ZW50KFdURk1vdmUod2ViQ29udGVudCkpOwogfQpAQCAtMTg0LDEyICsxODMsMTIgQEAgdm9p
ZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWQKIAogICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgaWYgKGF1dG8g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcygqbV9kb2N1bWVudC5mcmFt
ZSgpLCBhdHRyaWJ1dGVkU3RyaW5nKSkgewotICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCisgICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdt
ZW50LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFs
c2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gYXR0cmlidXRlZFN0cmluZy5zdHJpbmc7Ci0gICAg
ICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0
ZXh0LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2UpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCmluZGV4IDk5YWExMTkyMmMzMjgxNGJjMGE2
ZjVlMGNhYmQ5ZjYzYjM4ZTg3MWMuLmRhN2U5NDFjYjhmMWZiZTIzYjAwMmUyNWRlMDBkOTY4NTlh
ZmNlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApAQCAtNTAs
MTcgKzUwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9u
PiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVi
b2FyZCwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4
dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBhdXRvIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21Q
YXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRp
b246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50
ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAg
cXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAm
JiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAg
ICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJl
cGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2tx
dW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6
UmVzcGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0KaW5kZXggMzEyMzI1ZjI3NjIxY2JiODg0OTJhMDQyNmVlNTkxNjU2N2U0YTE2MC4uNmMy
NTQ3OTY1NTM2MDg0YjE2Mzg4MDQ5ZDQ1YTU5OWNmOTYwNjcyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMjA2LDMwICsyMDYsMjYgQEAgdm9pZCBFZGl0b3I6
OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRWxlbWVudCYg
aW1hZ2VFbGVtZW4KICAgICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZSA9IHBhc3Rl
Ym9hcmQucmVzb3VyY2VNSU1FVHlwZShjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgp
KTsKICAgICBwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VEYXRhID0gY2FjaGVkSW1hZ2UtPnJlc291
cmNlQnVmZmVyKCk7CiAKLSAgICBpZiAoIXBhc3RlYm9hcmQuaXNTdGF0aWMoKSkgewotICAgICAg
ICBQb3NpdGlvbiBiZWZvcmVJbWFnZVBvc2l0aW9uKCZpbWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQmVmb3JlQW5jaG9yKTsKLSAgICAgICAgUG9zaXRpb24gYWZ0ZXJJbWFnZVBvc2l0
aW9uKCZpbWFnZUVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwotICAg
ICAgICBhdXRvIGltYWdlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGltYWdlRWxlbWVudC5kb2N1bWVu
dCgpLCBiZWZvcmVJbWFnZVBvc2l0aW9uLCBhZnRlckltYWdlUG9zaXRpb24pOwotICAgICAgICBj
bGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShpbWFnZVJhbmdlLnB0cigp
LCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50VHlwZXMsIHBhc3RlYm9hcmRJbWFnZS5jbGllbnREYXRh
KTsKLSAgICB9CisgICAgaWYgKCFwYXN0ZWJvYXJkLmlzU3RhdGljKCkpCisgICAgICAgIGNsaWVu
dCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGltYWdl
RWxlbWVudCksIHBhc3RlYm9hcmRJbWFnZS5jbGllbnRUeXBlcywgcGFzdGVib2FyZEltYWdlLmNs
aWVudERhdGEpOwogCiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwogfQog
CiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJk
LCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwogICAgIGJvb2wgYWxsb3dQbGFpblRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCk7CiAgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFz
dGVib2FyZEl0ZW1zID0gY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7Ci0gICAg
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVu
dEZyYWdtZW50RnJvbURlbGVnYXRlKGkpOworICAgICAgICBhdXRvIGZyYWdtZW50ID0gY2xpZW50
KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaSk7CiAgICAgICAgIGlmICghZnJhZ21l
bnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVhZGVyLmFkZEZyYWdtZW50KGZy
YWdtZW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IHJlYWRlci5mcmFnbWVudDsKKyAgICBhdXRvIGZyYWdtZW50ID0g
V1RGTW92ZShyZWFkZXIuZnJhZ21lbnQpOwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAg
Ym9vbCBjaG9zZVBsYWluVGV4dElnbm9yZWQ7CiAgICAgICAgIGZyYWdtZW50ID0gd2ViQ29udGVu
dEZyb21QYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9z
ZVBsYWluVGV4dElnbm9yZWQpOwpAQCAtMjM4LDcgKzIzNCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9w
dGlvbj4KICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6
QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQp
OwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwg
cmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21l
bnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFz
ZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBm
YWxzZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUp
ID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1
b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggMTJmZDZhNDNlYTA1YTJhMGU3
MmI3NGJhNzJkOTYyODY0NzA1YmFlMy4uMGI3YzI2MjUzYTAwODJlM2M1NGFlZWZlYTA2MTYzMjRl
NjI0OGM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9y
TGliV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJX
UEUuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0
YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9v
bCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitzdGF0aWMgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9h
cmQmIHBhc3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBi
b29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKICAgICBjaG9zZVBs
YWluVGV4dCA9IGZhbHNlOwogCkBAIC00Nyw4ICs0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYg
cGFzCiAKICAgICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04Iikg
JiYgZnJhbWUuZG9jdW1lbnQoKSkgewogICAgICAgICBTdHJpbmcgbWFya3VwID0gcGFzdGVib2Fy
ZC5yZWFkU3RyaW5nKCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIpOwotICAgICAgICBpZiAoUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0
aW5nQW5kUGx1Z2luQ29udGVudCkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAg
ICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCksIG1h
cmt1cCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsK
ICAgICB9CiAKICAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQpAQCAtNTYsOCArNTUsNyBAQCBzdGF0
aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmRE
YXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L3BsYWlu
O2NoYXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAg
ICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRleHQvcGxhaW47Y2hhcnNl
dD11dGYtOCIpKSkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFz
dGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03OSwxNyArNzcsMTcgQEAgdm9pZCBFZGl0b3I6Ondy
aXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYsIEVsZW1lbnQmLCBjb25zdCBVUkwmLCBj
b25zdCBTdHIKIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBib29s
IGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVu
dC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxh
aW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
KnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNo
b3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBh
c3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5n
KCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQo
KmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAg
IGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsICpyYW5nZSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoKmZy
YWdtZW50LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3Nl
UGxhaW5UZXh0LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2tx
dW90ZSkgPyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJs
b2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMWNkOGMzOTRhNzY5MWM1NWY0ZDhkZDM2ZGU4
NTk2ZTcwNzc3YjdiNS4uYmEzMWMxODc3MzIzNGI5YWQ5MzlhZDBkMzMxOTMxOGM2MmQ4YjNiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtODAsNyArODAsNyBA
QCB2b2lkIEVkaXRvcjo6c2hvd0NvbG9yUGFuZWwoKQogCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRo
UGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+
IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsK
KyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogCiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICAvLyBGSVhNRTogSG93IGNhbiB0aGlzIGhhcmQtY29k
ZWQgcGFzdGVib2FyZCBuYW1lIGJlIHJpZ2h0LCBnaXZlbiB0aGF0IHRoZSBwYXNzZWQtaW4gcGFz
dGVib2FyZCBoYXMgYSBuYW1lPwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRp
b24+CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFz
UXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsK
IAotICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50
ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VO
b25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFs
c2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/
IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSApOwogCiAgICAgY2xpZW50KCktPnNldEluc2Vy
dGlvblBhc3RlYm9hcmQoU3RyaW5nKCkpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgRWRpdG9y
OjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJvYXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKICAgICBpZiAoYXV0byBmcmFn
bWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkLCByYW5nZSwgdHJ1ZSwg
Y2hvc2VQbGFpblRleHQpKSB7CiAgICAgICAgIG1heWJlQ29weU5vZGVBdHRyaWJ1dGVzVG9GcmFn
bWVudCgqbm9kZSwgKmZyYWdtZW50KTsKLSAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50
KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpQYXN0ZWQpKQorICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVB
c0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQ
YXN0ZWJvYXJkKHBhc3RlYm9hcmQpLCBmYWxzZSwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdu
b3JlQmxvY2txdW90ZSk7CiAgICAgfQogCkBAIC0xNzYsMTEgKzE3Niw5IEBAIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IEVkaXRvcjo6aW1hZ2VJbldlYkFyY2hpdmVGb3JtYXQoRWxlbWVudCYgaW1hZ2VF
bGVtZW50KQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQ
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCiB7Ci0gICAgLy8gRklYTUU6
IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlvbiBpcyBhd2t3YXJkLiBXZSdkIHByb2JhYmx5
IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBhcmF0ZSBmdW5jdGlvbnMuCi0gICAgLy8gQXMg
b2YgdGhpcyB3cml0aW5nLCB0aGlzIGlzIG9ubHkgdXNlZCBpbiBXZWJLaXQyIHRvIGltcGxlbWVu
dCB0aGUgbWV0aG9kIC1bV0tWaWV3IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOnR5cGVzOl0s
Ci0gICAgLy8gd2hpY2ggaXMgb25seSB1c2VkIHRvIHN1cHBvcnQgT1MgWCBzZXJ2aWNlcy4KKyAg
ICAvLyBGSVhNRTogVGhlIGludGVyZmFjZSB0byB0aGlzIGZ1bmN0aW9uIGlzIGF3a3dhcmQuIFdl
J2QgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiB3aXRoIHRocmVlIHNlcGFyYXRlIGZ1bmN0aW9ucy4g
QXMgb2YgdGhpcyB3cml0aW5nLCB0aGlzIGlzIG9ubHkgdXNlZCBpbiBXZWJLaXQyIHRvIGltcGxl
bWVudCB0aGUgbWV0aG9kIC1bV0tWaWV3IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOnR5cGVz
Ol0sIHdoaWNoIGlzIG9ubHkgdXNlZCB0byBzdXBwb3J0IE9TIFggc2VydmljZXMuCiAKLSAgICAv
LyBGSVhNRTogRG9lcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBuZWVkIHRvIHVzZSBhZGp1c3RlZFNl
bGVjdGlvblJhbmdlKCk/IEJlY2F1c2Ugd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBqdXN0
IHVzZXMgc2VsZWN0ZWRSYW5nZSgpLgorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgZnVuY3Rpb24g
cmVhbGx5IG5lZWQgdG8gdXNlIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKT8gQmVjYXVzZSB3cml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGp1c3QgdXNlcyBzZWxlY3RlZFJhbmdlKCkuIFRoaXMg
aXMgdGhlIG9ubHkgZnVuY3Rpb24gaW4gV2ViS2l0IHRoYXQgdXNlcyBhZGp1c3RlZFNlbGVjdGlv
blJhbmdlLgogICAgIGlmICghY2FuQ29weSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggYzc5NmJmYWFmNjZl
ZTk0YTg1YzU1ZjM5MjM0OTE1NWQyNzRhODYwYy4uOTNkZGVhZjg4ODliOGU3ZmNjMjY5MzQxMjQw
ODU4Mjg0NDc2YzhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRp
dG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3Bw
CkBAIC0zNywxNyArMzcsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFz
dGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVk
UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFn
bWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIGF1dG8gZnJhZ21l
bnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksIGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxv
d1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRp
b25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJh
Z21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxk
SW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJh
Z21lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICBwYXN0
ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0
aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCwgb3B0aW9ucy5jb250YWlu
cyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5k
bGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RC
bG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJl
Y3RvcnlEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3Vt
ZW50LmNwcAppbmRleCBkY2YzYmY0NDg2NWIwNGNjODI3ZjcxMzNlZGQ4ZTE5MWZhYmFiZDViLi4y
NWYxN2EzM2ZkMjBhNDFjNzFiYWZiOTViMzNmNGE0MDAyNzQwOGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIFJl
ZjxFbGVtZW50PiBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6Y3JlYXRlVERGb3JGaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGZpbGVuCiAgICAgYXV0byB0ZEVsZW1lbnQgPSBIVE1MVGFibGVDZWxs
RWxlbWVudDo6Y3JlYXRlKHRkVGFnLCBkb2N1bWVudCk7CiAgICAgdGRFbGVtZW50LT5hcHBlbmRD
aGlsZChhbmNob3JFbGVtZW50KTsKIAotICAgIHJldHVybiBXVEZNb3ZlKHRkRWxlbWVudCk7Cisg
ICAgcmV0dXJuIHRkRWxlbWVudDsKIH0KIAogc3RhdGljIFN0cmluZyBwcm9jZXNzRmlsZXNpemVT
dHJpbmcoY29uc3QgU3RyaW5nJiBzaXplLCBib29sIGlzRGlyZWN0b3J5KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmNwcAppbmRleCA5NGZiMzBmNTExYjNiMzc5NTIyYWE2OWQyY2Zm
ZmRhZTkwMDU3MDI2Li4wYzE0YWU2OTBjZDNmNDZhNjNiYWU2MTYwODU0ZjFhMDNiODExYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBA
IHB1YmxpYzoKICAgICBFbXB0eUVkaXRvckNsaWVudCgpID0gZGVmYXVsdDsKIAogcHJpdmF0ZToK
LSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBi
b29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KQEAgLTIwMCwxNSArMjAwLDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b2dnbGVHcmFt
bWFyQ2hlY2tpbmcoKSBmaW5hbCB7IH0KICAgICBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KSBmaW5hbCB7IHJldHVybiAtMTsgfQogCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFu
Z2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhS
YW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2Rl
KE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0
b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2lt
cGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkRW5kRWRp
dGluZyhjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBzaG91bGRJbnNlcnROb2RlKE5vZGUmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBF
ZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91
bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYs
IEVkaXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRUFmZmluaXR5LCBib29sKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyos
IFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEFwcGx5U3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jikg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbCB7
IH0KLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxl
dGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgZmluYWwgeyB9CkBAIC0yMTksOSArMjE5LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWwgeyB9CiAg
ICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkaWRFbmRVc2VyVHJp
Z2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpIGZpbmFsIHsgfQotICAgIHZvaWQgd2lsbFdyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKikgZmluYWwgeyB9CisgICAgdm9pZCB3aWxsV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgZmluYWwg
eyB9CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsIHsgfQot
ICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxT
dHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jiwg
VmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JikgZmluYWwgeyB9
CiAgICAgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikgZmluYWwgeyB9CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhT
b2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3VsdCkgZmluYWwgeyB9CiAKQEAgLTI2MSw3ICsyNjEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU3RyaW5nRm9yRmluZChjb25zdCBTdHJpbmcm
KSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1l
bnRGcmFnbWVudCYsIFJhbmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFu
Z2UmLCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRl
eCA0MWY3YTdlYzdhNDE5MTc3OTFiMjg1YjE5NDM5ZDJjMWJlOWRhZWZkLi5jN2VmY2ZjOTNiZDQ3
NzEyNzBlYTBiMDY5ZGNiOTI0N2M5MWEyYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIHZvaWQg
b3Blbk5ld1dpbmRvdyhjb25zdCBVUkwmIHVybFRvTG9hZCwgRnJhbWUmIGZyYW1lLCBTaG91bGRP
cGVuRXh0ZXJuYWwKIHN0YXRpYyB2b2lkIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoVUNoYXIgY2hh
cmFjdGVyLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAgU3RyaW5nIHRleHQoJmNoYXJhY3RlciwgMSk7
Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxp
dmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFmcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7CkBAIC0zNzQsNyArMzc0
LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzczogewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxl
LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKSB7CiAgICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNv
bW1hbmRPcHRpb24+IHJlcGxhY2VPcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1h
dGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogCiAg
ICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVs
bGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCmluZGV4IDczMTdiZmRmNDZkOTJhYzNkOTY1MGZjMzM0NjRmNTBmNmVl
YTU5MjcuLjgxMGQyZmM3MmEzMjVjZTRkNDIwYTNjY2EzNmQ5MmIzMDBjYTU4MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01NjgsNyArNTY4LDcgQEAgYm9vbCBE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Q29sb3IsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKSwgZmFsc2UpOwotICAg
ICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUucHRy
KCksIGNyZWF0ZUxpdmVSYW5nZShpbm5lclJhbmdlKS5nZXQoKSkpCisgICAgICAgIGlmICghaW5u
ZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgKmlubmVyUmFuZ2UpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURy
YWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRh
KTsKICAgICAgICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZS5wdHIoKSwg
RWRpdEFjdGlvbjo6U2V0Q29sb3IpOwpAQCAtNjAzLDcgKzYwMyw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlm
IChpc01vdmUgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAg
ICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRh
LCAqaW5uZXJGcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRydWUsIGNob3NlUGxhaW5U
ZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3Vs
ZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6RHJv
cHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50KCkud2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0
LCBkcmFnRGF0YSk7CkBAIC02MjksNyArNjI5LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29u
Y2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7Ci0g
ICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4
dCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJv
cHBlZCkpCisgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2Vy
dFRleHQodGV4dCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpA
QCAtMTAyMiw3ICsxMDIyLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1l
JiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIE9wdGlvblNldDxEcmEKICAgICAgICAgICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rpb25SYW5nZSk7CiAKLSAg
ICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpOworICAgICAgICAgICAgc3JjLmVk
aXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgqc2VsZWN0aW9uUmFuZ2UpOwog
CiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChtdXN0VXNlTGVn
YWN5RHJhZ0NsaWVudCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8
RHJhCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICBpZiAoIXByb21pc2VkQXR0YWNo
bWVudCAmJiBlZGl0b3IuY2xpZW50KCkpIHsKICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Us
IGlmIG5vIGZpbGUgVVJMIGlzIHNwZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhlIGluamVjdGVkIGJ1
bmRsZSB0byBwb3B1bGF0ZSB0aGUgcGFzdGVib2FyZCB3aXRoIGRhdGEuCi0gICAgICAgICAgICAg
ICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2Uo
c3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNy
Yy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAg
ICAgICAgICBlZGl0b3Iud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5zZmVyLnBh
c3RlYm9hcmQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApp
bmRleCA3NzkzMTcxZmUwYWRiMTE3ZGFmZjQxNjBkYWZmNjkxY2E0NDYwYzMxLi45ZGU3MDY1NGYy
MGI1ODIzZjc2NTYwMGUxNDE2YjlkOGMzYTkxZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xp
ZW50LmgKQEAgLTQzLDcgKzQzLDYgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xh
c3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIFN0eWxlUHJvcGVydGllczsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50
OwpAQCAtNTEsMTIgKzUwLDEzIEBAIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKIHN0cnVjdCBH
YXBSZWN0czsKIHN0cnVjdCBHcmFtbWFyRGV0YWlsOworc3RydWN0IFNpbXBsZVJhbmdlOwogCiBj
bGFzcyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRvckNsaWVudCgp
ID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSop
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSA9IDA7IAogICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkgPSAwOwpAQCAtNjUsMTcgKzY1LDE3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgPSAwOwogICAgIHZpcnR1YWwgaW50
IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEJlZ2luRWRpdGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRp
dGluZyhSYW5nZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2Rl
KiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBm
cm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJh
bmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUmLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlT
dHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEFwcGx5U3R5bGUoKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2Uq
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0
IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKSA9IDA7CiAKICNpZiBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckF0dGFjaG1lbnRJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgLyogaWRlbnRpZmllciAqLywgY29uc3QgU3RyaW5nJiAvKiBj
b250ZW50VHlwZSAqLywgY29uc3QgU3RyaW5nJiAvKiBwcmVmZXJyZWRGaWxlTmFtZSAqLywgUmVm
PFNoYXJlZEJ1ZmZlcj4mJikgeyB9CkBAIC05NSw5ICs5NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hh
bmdlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMs
IFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8
U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJl
cXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyhU
ZXh0Q2hlY2tpbmdSZXN1bHQpIHsgfQogCkBAIC0xODcsNyArMTg3LDcgQEAgcHVibGljOgogICAg
IC8vIHNlbGVjdGlvbiBhcyBhIHR5cGUgb2YgY2xpcGJvYXJkLgogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSYgZGVzdGlu
YXRpb24sIGJvb2wgaXNNb3ZlKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVw
RHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmIGRlc3RpbmF0aW9uLCBi
b29sIGlzTW92ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNhblNob3dGb250UGFuZWwoKSBj
b25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2ZjFmMWI0
YWQ4MGIyMWY5OTVjMWZlZThkNzJhYWRjOTYyNzE1YjJiLi41ZWRhODMwZWNmNDY1ZDBkZDBiMjQ3
ZmFlMDAyMGM1ZTI1MmViOGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0zMDgyLDggKzMwODIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZl
bnRGb3JLZXkoKQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAg
ICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKSkgewotICAgICAgICBhdXRvIHNlbGVjdGlv
blJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3Qg
Zmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpLmdldCgpKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3Qg
PSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3Qu
bWF4WCgpIDogZmlyc3RSZWN0LngoKTsKICAgICAgICAgLy8gSW4gYSBtdWx0aWxpbmUgZWRpdCwg
Zmlyc3RSZWN0Lm1heFkoKSB3b3VsZCBlbmR1cCBvbiB0aGUgbmV4dCBsaW5lLCBzbyAtMS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCAzZjM3MjMyYzdlOTViYTIw
MDUzOTExMDQ5YWU4MDQwMjRmNjE2Nzg5Li43ZTIxMmVhZjRiOTUyYTg2ZGI0ZmQxMDgwNzZkMjA1
OTZkMTY1MjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC03
NTIsMTcgKzc1MiwxNiBAQCBFbGVtZW50KiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNh
YmxlRWxlbWVudE9yU2NvcGVPd25lcihjb25zdCBGb2N1c05hdmlnYQogICAgIHJldHVybiBwcmV2
aW91c0VsZW1lbnRXaXRoTG93ZXJUYWJJbmRleChzY29wZSwgbGFzdCwgc3RhcnRpbmdUYWJJbmRl
eCwgZXZlbnQpOwogfQogCi1zdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9k
ZSAqbm9kZSkKK3N0YXRpYyBib29sIHJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cyhFbGVtZW50JiBl
bGVtZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aGFzRWRpdGFi
bGVTdHlsZSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5oYXNFZGl0YWJsZVN0eWxlKCkpOwogCi0g
ICAgTm9kZSogcm9vdCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byByb290ID0gZWxlbWVu
dC5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBmcmFtZSA9IGVsZW1lbnQuZG9jdW1l
bnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIXJvb3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkRW5kRWRpdGluZyhyYW5n
ZU9mQ29udGVudHMoKnJvb3QpLnB0cigpKTsKKyAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNo
b3VsZEVuZEVkaXRpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUqIG9sZEZvY3VzZWRG
cmFtZSwgRnJhbWUqIG5ld0ZvY3VzZWRGcmFtZSwgTm9kZSogbmV3Rm9jdXNlZE5vZGUpCkBAIC04
NDEsNyArODQwLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIEZyYW1lJiBuZXdGb2N1c2VkRnJhbWUKICAgICB9CiAKICAgICAvLyBG
SVhNRTogTWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgY2hlY2sgZm9yIGNhcmV0QnJvd3NpbmcK
LSAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xkRm9jdXNlZEVsZW1lbnQtPmlzUm9vdEVk
aXRhYmxlRWxlbWVudCgpICYmICFyZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMob2xkRm9jdXNlZEVs
ZW1lbnQpKQorICAgIGlmIChvbGRGb2N1c2VkRWxlbWVudCAmJiBvbGRGb2N1c2VkRWxlbWVudC0+
aXNSb290RWRpdGFibGVFbGVtZW50KCkgJiYgIXJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cygqb2xk
Rm9jdXNlZEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3BhZ2UuZWRp
dG9yQ2xpZW50KCkud2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
aW5kZXggNGQwMzRmM2JkMmJmYTlhYWFkMGU2ZTJhNDk0Mzg0ZDNhYzMyYWVlYS4uMzU1MWI0ZDYy
Yjg0NjBkYmM2MTc0YjdkZTVmMmI5ZjM4M2FmMDc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAg
LTgxOCwyOCArODE4LDI1IEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0
IEludFBvaW50JiBwb2ludCkKIAogUmVmUHRyPFJhbmdlPiBGcmFtZTo6cmFuZ2VGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKLSAgICBpZiAocG9zaXRp
b24uaXNOdWxsKCkpCisgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvaW50
KGZyYW1lUG9pbnQpOworICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIXBvc2l0aW9uQm91bmRhcnkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgUG9zaXRpb24gZGVlcFBvc2l0aW9uID0gcG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKTsKLSAgICBUZXh0KiBjb250YWluZXJUZXh0ID0gZGVlcFBvc2l0aW9uLmNvbnRh
aW5lclRleHQoKTsKKyAgICBhdXRvIGNvbnRhaW5lclRleHQgPSBwb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLmNvbnRhaW5lclRleHQoKTsKICAgICBpZiAoIWNvbnRhaW5lclRleHQgfHwgIWNvbnRh
aW5lclRleHQtPnJlbmRlcmVyKCkgfHwgY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUo
KS51c2VyU2VsZWN0KCkgPT0gVXNlclNlbGVjdDo6Tm9uZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygp
OwotICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsK
LSAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocHJl
dmlvdXNDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKGZy
YW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2U7Cisg
ICAgaWYgKGF1dG8gcHJldmlvdXMgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5wcmV2aW91
cygpKSkgeworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5n
ZSB7ICpwcmV2aW91cywgKnBvc2l0aW9uQm91bmRhcnkgfTsKKyAgICAgICAgaWYgKGVkaXRvcigp
LmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1l
UG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShwcmV2aW91c0NoYXJh
Y3RlclJhbmdlKTsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9u
Lm5leHQoKTsKLSAgICBpZiAoUmVmUHRyPFJhbmdlPiBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtl
UmFuZ2UocG9zaXRpb24sIG5leHQpKSB7Ci0gICAgICAgIExheW91dFJlY3QgcmVjdCA9IGVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIG5leHRD
aGFyYWN0ZXJSYW5nZTsKKyAgICBpZiAoYXV0byBuZXh0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9z
aXRpb24ubmV4dCgpKSkgeworICAgICAgICBhdXRvIG5leHRDaGFyYWN0ZXJSYW5nZSA9IFNpbXBs
ZVJhbmdlIHsgKnBvc2l0aW9uQm91bmRhcnksICpuZXh0IH07CisgICAgICAgIGlmIChlZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9p
bnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShuZXh0Q2hhcmFjdGVyUmFu
Z2UpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
NTQ1YmVjMWNlYjFmYzEwZGRjNjZmM2E3YWZjMzRjYzg3MDkyYjM5Zi4uNmZhMmUzNzYyMjQ5YmE5
MmZhOWVlMmQyOTJkNTc4MTJlZTU4YWFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MTMsMzQg
KzcxMywzNiBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIERpZFdyYXAqIGRpZFdyYQogCiB2b2lkIFBhZ2U6OmZpbmRTdHJp
bmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9u
cywgaW50IGxpbWl0LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hdGNoUmFuZ2VzLCBpbnQmIGlu
ZGV4Rm9yU2VsZWN0aW9uKQogeworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0UmFuZ2Vz
OworCiAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSAwOwogCiAgICAgRnJhbWUqIGZyYW1lID0gJm1h
aW5GcmFtZSgpOwogICAgIEZyYW1lKiBmcmFtZVdpdGhTZWxlY3Rpb24gPSBudWxscHRyOwogICAg
IGRvIHsKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0
LCAwLCBvcHRpb25zLCBsaW1pdCA/IChsaW1pdCAtIG1hdGNoUmFuZ2VzLnNpemUoKSkgOiAwLCB0
cnVlLCAmbWF0Y2hSYW5nZXMpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVz
Rm9yVGV4dCh0YXJnZXQsIHsgfSwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSByZXN1bHRSYW5n
ZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZyZXN1bHRSYW5nZXMpOwogICAgICAgICBpZiAoZnJhbWUt
PnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgICAgIGZyYW1lV2l0aFNlbGVjdGlvbiA9
IGZyYW1lOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBDYW5X
cmFwOjpObyk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogCi0gICAgaWYgKG1hdGNoUmFuZ2VzLmlz
RW1wdHkoKSkKKyAgICBpZiAocmVzdWx0UmFuZ2VzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewogICAgICAgICBpbmRleEZvclNlbGVj
dGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247CiAgICAgICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRS
YW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hS
YW5nZXNbaSAtIDFdKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHRSYW5nZXMu
c2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
RU5EX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2VzW2kgLSAxXSkpOwogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rp
b24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDAsIHNpemUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdl
KS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdl
c1tpXSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJlc3VsdFJhbmdl
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpTVEFSVF9UT19FTkQsIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZXNbaV0pKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0
aW9uID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NDksMTAgKzc1MSwxMyBA
QCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkKLSAgICAgICAgICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gbWF0Y2hSYW5nZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGluZGV4Rm9y
U2VsZWN0aW9uID0gcmVzdWx0UmFuZ2VzLnNpemUoKSAtIDE7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKICAgICB9CisKKyAgICBmb3IgKGF1dG8mIHJh
bmdlIDogcmVzdWx0UmFuZ2VzKQorICAgICAgICBtYXRjaFJhbmdlcy5hcHBlbmQoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKSk7CiB9CiAKIFJlZlB0cjxSYW5nZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhj
b25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBv
cHRpb25zKQpAQCAtNzY3LDE3ICs3NzIsMTYgQEAgUmVmUHRyPFJhbmdlPiBQYWdlOjpyYW5nZU9m
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEYKICAg
ICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5vd25lckRv
Y3VtZW50KCkuZnJhbWUoKSA6ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9
IGZyYW1lOwogICAgIGRvIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2Ug
PSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJh
bWUgPyByZWZlcmVuY2VSYW5nZSA6IDAsIG9wdGlvbnMgLSBXcmFwQXJvdW5kKSkKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHRSYW5nZTsKLQorICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9
IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFt
ZSA/IG1ha2VSYW5nZShyZWZlcmVuY2VSYW5nZSkgOiBXVEY6Om51bGxvcHQsIG9wdGlvbnMgLSBX
cmFwQXJvdW5kKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFu
Z2UpOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCAhb3B0aW9ucy5jb250
YWlucyhCYWNrd2FyZHMpLCBjYW5XcmFwKTsKICAgICB9IHdoaWxlIChmcmFtZSAmJiBmcmFtZSAh
PSBzdGFydEZyYW1lKTsKIAogICAgIC8vIFNlYXJjaCBjb250ZW50cyBvZiBzdGFydEZyYW1lLCBv
biB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgcmVmZXJlbmNlIHJhbmdlIHRoYXQgd2UgZGlkIGVhcmxp
ZXIuCiAgICAgLy8gV2UgY2hlYXQgYSBiaXQgYW5kIGp1c3Qgc2VhcmNoIGFnYWluIHdpdGggd3Jh
cCBvbi4KICAgICBpZiAoY2FuV3JhcCA9PSBDYW5XcmFwOjpZZXMgJiYgcmVmZXJlbmNlUmFuZ2Up
IHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5l
ZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMgfCBX
cmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
UmFuZ2U7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gc3RhcnRGcmFtZS0+ZWRpdG9y
KCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIG1ha2VSYW5nZSgqcmVmZXJlbmNlUmFuZ2UpLCBvcHRp
b25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC03OTQsNyArNzk4LDcgQEAgdW5zaWduZWQgUGFnZTo6ZmluZE1hdGNoZXNGb3JUZXh0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnMKICAgICBkbyB7
CiAgICAgICAgIGlmIChzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcykKICAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKHNo
b3VsZEhpZ2hsaWdodE1hdGNoZXMgPT0gSGlnaGxpZ2h0TWF0Y2hlcyk7Ci0gICAgICAgIG1hdGNo
Q291bnQgKz0gZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCAwLCBv
cHRpb25zLCBtYXhNYXRjaENvdW50ID8gKG1heE1hdGNoQ291bnQgLSBtYXRjaENvdW50KSA6IDAs
IHNob3VsZE1hcmtNYXRjaGVzID09IE1hcmtNYXRjaGVzLCAwKTsKKyAgICAgICAgbWF0Y2hDb3Vu
dCArPSBmcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIFdURjo6bnVs
bG9wdCwgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCA/IChtYXhNYXRjaENvdW50IC0gbWF0Y2hDb3Vu
dCkgOiAwLCBzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcywgbnVsbHB0cik7CiAgICAg
ICAgIGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIENhbldyYXA6Ok5vKTsKICAg
ICB9IHdoaWxlIChmcmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCBjMmZhNmM4MTRjNGIwZWI2Y2NiYmVjZjEwOTY5MGI1YTYwMjY0ZGFjLi40NmFhYjgwOTNlNDdl
YmI2ZTQ2ZDAyNTY1NDVmZDBhMzdjNDUyY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0yNjE3LDcgKzI2MTcsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8UmFuZ2U+PiBJ
bnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8UgogICAg
IGlmIChwYXJzZWRPcHRpb25zLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gcGFyc2Vk
T3B0aW9ucy5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPmVkaXRv
cigpLnJhbmdlT2ZTdHJpbmcodGV4dCwgcmVmZXJlbmNlUmFuZ2UuZ2V0KCksIHBhcnNlZE9wdGlv
bnMucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoZG9j
dW1lbnQtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGV4dCwgbWFrZVJhbmdlKHJlZmVyZW5jZVJh
bmdlKSwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSkpOwogfQogCiBFeGNlcHRp
b25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbmRPcHRpb25zLCBjb25zdCBTdHJpbmcm
IG1hcmtNYXRjaGVzKQpAQCAtMjYzMSw3ICsyNjMxLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+
IEludGVybmFsczo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFYKICAgICAgICAgcmV0dXJuIHBhcnNlZE9wdGlvbnMucmVsZWFzZUV4Y2VwdGlvbigpOwogCiAg
ICAgYm9vbCBtYXJrID0gbWFya01hdGNoZXMgPT0gIm1hcmsiOwotICAgIHJldHVybiBkb2N1bWVu
dC0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0ZXh0LCBudWxscHRyLCBwYXJzZWRPcHRp
b25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCAxMDAwLCBtYXJrLCBudWxscHRyKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGV4dCwgV1RGOjpudWxs
b3B0LCBwYXJzZWRPcHRpb25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCAxMDAwLCBtYXJrLCBudWxs
cHRyKTsKIH0KIAogRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRGaW5kTWF0
Y2hlcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaW5kT3B0aW9u
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRl
eCBiMmRhZGM2OTc0MDVkNjkxMWM2YzI5NTJiN2M5ZDQ0ZmZmZTVhZDQxLi4yYjA0MjIyNGYzOWM4
MTYyOGE4ZjhkZmY5NWFkZGE4Yjk2OWExMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC02NjMsNyArNjYzLDcgQEAgLSAoTlNSZWN0KXJl
Y3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQogICAgICAgICBMT0coUHJpbnRpbmcsICItW1dLUHJp
bnRpbmdWaWV3ICVwIHJlY3RGb3JQYWdlOiVkXSAtIGRhdGEgaXMgbm90IHlldCBhdmFpbGFibGUi
LCBzZWxmLCAoaW50KXBhZ2UpOwogICAgICAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgpKSB7CiAg
ICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSBub3QgdG9sZCBBcHBLaXQgaG93IG1hbnkgcGFnZXMg
dGhlcmUgYXJlLCBzbyBpdCB3aWxsIHRyeSB0byBwcmludCB1bnRpbCBhIG51bGwgcmVjdCBpcyBy
ZXR1cm5lZC4KLSAgICAgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAg
ICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAgICAgICAgIH0KICAgICAgICAgLy8gV2UgbXVz
dCBiZSBzdGlsbCBjYWxjdWxhdGluZyB0aGUgcGFnZSByYW5nZS4KICAgICAgICAgQVNTRVJUKF9l
eHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjayk7CkBAIC02NzQsNyArNjc0LDcgQEAgLSAoTlNS
ZWN0KXJlY3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQogICAgIC8vIFJldHVybmluZyBhIG51bGwg
cmVjdCBwcmV2ZW50cyBzZWxlY3Rpbmcgbm9uLWV4aXN0ZW50IHBhZ2VzIGluIHByZXZpZXcgZGlh
bG9nLgogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGFnZSkgPiBfcHJpbnRpbmdQYWdl
UmVjdHMuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVCghX3dlYkZyYW1lLT5wYWdlKCkpOwotICAg
ICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIE5TWmVy
b1JlY3Q7CiAgICAgfQogCiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gX3ByaW50aW5nUGFn
ZVJlY3RzW3BhZ2UgLSAxXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggNzlhMzc0MDBjM2Y0
MTU4YmY0MjhmNjk0MmJjODg2ZjFhY2QyMjAzZC4uZGQ5YzM1MjYwNWYwOGYzOTQwZDkwMGQ4ZjAy
NjUyNDdlMDRiYTM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTc0LDExICs3NCw5IEBA
IHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVRleHRDaGVja2luZ1JlcXVlc3RJRCgpCiAgICAgcmV0
dXJuIHVuaXF1ZVRleHRDaGVja2luZ1JlcXVlc3RJRCsrOwogfQogCi1ib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2Up
CiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50
KCkuc2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZSkuZ2V0KCkpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkKCkKQEAgLTExNCw1MCArMTEyLDM3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQogaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiAwOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVn
aW5FZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdp
bkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGJvb2wgcmVzdWx0ID0g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEJlZ2luRWRpdGluZygq
bV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxk
QmVnaW5FZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCkpOwogfQog
Ci1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCiti
b29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9y
Q2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkRW5kRWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLnB0cigpKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZElu
c2VydE5vZGUoTm9kZSogbm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRB
Y3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9k
ZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRp
dG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2UsIG5vZGUs
IHJhbmdlVG9SZXBsYWNlLCBhY3Rpb24pOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFnZSwgJm5vZGUsIGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZVRvUmVwbGFjZSkuZ2V0KCksIGFjdGlvbik7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNl
LCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3Vs
ZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewotICAgIGJv
b2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZElu
c2VydFRleHQoKm1fcGFnZSwgdGV4dC5pbXBsKCksIHJhbmdlVG9SZXBsYWNlLCBhY3Rpb24pOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEluc2VydFRleHQoKm1fcGFn
ZSwgdGV4dC5pbXBsKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSkuZ2V0KCksIGFj
dGlvbik7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgc3RpbGxTZWxlY3RpbmcpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqbV9wYWdlLCBm
cm9tUmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqbV9wYWdl
LCBjcmVhdGVMaXZlUmFuZ2UoZnJvbVJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKHRvUmFu
Z2UpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogICAgIAotYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFu
Z2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5n
ZSkKIHsKLSAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlKHN0eWxl
LT5pc011dGFibGUoKSA/IFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPihzdGF0aWNfY2FzdDxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSkgOiBzdHlsZS0+bXV0YWJsZUNvcHkoKSk7
Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
c2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCAmbXV0YWJsZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURl
Y2xhcmF0aW9uKCksIHJhbmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5z
aG91bGRBcHBseVN0eWxlKCptX3BhZ2UsICZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NT
dHlsZURlY2xhcmF0aW9uKCksIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCiAj
aWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTIxMSw5ICsxOTYsOCBAQCB2b2lkIFdl
YkVkaXRvckNsaWVudDo6ZGlkQXBwbHlTdHlsZSgpCiAgICAgbV9wYWdlLT5kaWRBcHBseVN0eWxl
KCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShSYW5nZSosIFJhbmdlKikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VB
ZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjIsNyArMjA2
LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEJlZ2luRWRpdGluZygpCiAgICAgLy8gRklY
TUU6IFdoYXQgZ29vZCBpcyBhIG5vdGlmaWNhdGlvbiBuYW1lLCBpZiBpdCdzIGFsd2F5cyB0aGUg
c2FtZT8KICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkQmVnaW5F
ZGl0aW5nTm90aWZpY2F0aW9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJXZWJWaWV3RGlkQmVn
aW5FZGl0aW5nTm90aWZpY2F0aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0
b3JDbGllbnQoKS5kaWRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEJlZ2luRWRpdGlu
Z05vdGlmaWNhdGlvbi5nZXQoKS5pbXBsKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQpAQCAtMjc1
LDcgKzI1OCw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlm
aWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZEVuZEVkaXRpbmdOb3Rp
ZmljYXRpb24iKSk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmRp
ZEVuZEVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb24uZ2V0
KCkuaW1wbCgpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNs
aWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQpAQCAtMjgzLDE5ICsyNjUsMTkg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkK
ICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZGlkV3JpdGVUb1Bhc3Rl
Ym9hcmQoKm1fcGFnZSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqIHJhbmdlKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6Ondp
bGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
IHJhbmdlKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS53aWxs
V3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgcmFuZ2UpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS53aWxsV3JpdGVUb1Bhc3RlYm9hcmQoKm1fcGFnZSwgY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFJhbmdlKiByYW5nZSwgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2Fy
ZERhdGEpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpCiB7
Ci0gICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmRE
YXRhRm9yUmFuZ2UoKm1fcGFnZSwgcmFuZ2UsIHBhc3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERh
dGEpOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5nZXRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIHBh
c3RlYm9hcmRUeXBlcywgcGFzdGVib2FyZERhdGEpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVu
dDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSYg
ZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1U
d29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgU2ltcGxlUmFuZ2Um
IGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZUVkaXRvckNsaWVudCgpLnBlcmZvcm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBmcmFnbWVu
dCwgZGVzdGluYXRpb24sIGlzTW92ZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3AoKm1fcGFnZSwgZnJhZ21lbnQsIGNy
ZWF0ZUxpdmVSYW5nZShkZXN0aW5hdGlvbiksIGlzTW92ZSk7CiB9CiAKIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFVuZG9TdGVwJiBzdGVwKQpAQCAtNDI1LDEyICs0MDcs
MTAgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1l
bnQqIGVsZW1lbnQpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpvdmVyZmxvd1Njcm9sbFBvc2l0
aW9uQ2hhbmdlZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnN1YkZyYW1lU2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCiAjZW5kaWYKQEAgLTYxOCw3ICs1OTgsNiBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZShFbGVtZW50KiBlbGVtZW50KQogI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogICAgIG1fcGFnZS0+c2V0SW5wdXRNZXRob2RTdGF0
ZShlbGVtZW50KTsKICNlbHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBVTlVTRURfUEFS
QU0oZWxlbWVudCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAwZGY3NzU5ZTFi
ODJkZDQwM2NmZGE4Y2E3MzA5OWViYzZkZGQ4MDhjLi4yM2UzOTRmMjdlYzMyNjkyNzhjNDViOGUx
NDRkMzZkYzdjN2JmZDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJD
b3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgYm9vbCBzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQoKSBmaW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKSBmaW5hbDsKQEAgLTU0LDE1ICs1NCwxNSBAQCBwcml2YXRlOgogICAgIHZv
aWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgZmluYWw7CiAgICAgaW50IHNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkgZmluYWw7CiAgICAgCi0gICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2Vi
Q29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6
UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSos
IFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAg
ICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6UmFuZ2UqLCBX
ZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSog
dG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsK
KyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYp
IGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlJiwg
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5n
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9y
SW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5
LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKICAgICAKLSAgICBib29sIHNob3VsZEFwcGx5
U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsK
KyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVz
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9p
ZCBkaWRBcHBseVN0eWxlKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRl
bGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNv
bnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHByZWZlcnJl
ZEZpbGVOYW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBmaW5hbDsKQEAgLTg1LDkg
Kzg1LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbGVkQ29tcG9zaXRpb24oKSBmaW5hbDsK
ICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRF
ZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
V2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAg
ICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAgdm9pZCBn
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2Fy
ZERhdGEoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogICAgIAogICAgIHZvaWQgcmVnaXN0ZXJVbmRvU3Rl
cChXZWJDb3JlOjpVbmRvU3RlcCYpIGZpbmFsOwogICAgIHZvaWQgcmVnaXN0ZXJSZWRvU3RlcChX
ZWJDb3JlOjpVbmRvU3RlcCYpIGZpbmFsOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzaG91bGRTdXBwcmVzc1Bhc3N3b3JkRWNobygpIGNvbnN0IGZpbmFsOwogI2VuZGlm
CiAKLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50
JiwgV2ViQ29yZTo6UmFuZ2UmLCBib29sIGlzTW92ZSkgZmluYWw7CisgICAgYm9vbCBwZXJmb3Jt
VHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFdlYkNvcmU6OlNp
bXBsZVJhbmdlJiwgYm9vbCBpc01vdmUpIGZpbmFsOwogICAgIGJvb2wgc3VwcG9ydHNHbG9iYWxT
ZWxlY3Rpb24oKSBmaW5hbDsKIAogICAgIGJvb2wgY2FuU2hvd0ZvbnRQYW5lbCgpIGNvbnN0IGZp
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IGFkYTUyY2RkNzk3MTFhODIzZTljYTMyZDJlZWUwYzhmMDgwZDg2OGIuLmVkN2Q1MDE3MDk1YzUw
MmMxNGZmMGY5NWI2YTA0NWQ5NjgzNjgzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01NDI2LDQzICs1NDI2LDM2IEBAIHZvaWQgV2ViUGFn
ZTo6aGFzTWFya2VkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5jKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgRWRpdGluZ1JhbmdlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJh
bmdlKGZyYW1lLCBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCkpOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
RWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5lZGl0
b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpLmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0
U2VsZWN0ZWRSYW5nZUFzeW5jKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRWRpdGluZ1Jh
bmdlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRp
bmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2Uo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
OwotICAgIGNvbXBsZXRpb25IYW5kbGVyKGVkaXRpbmdSYW5nZSk7CisgICAgY29tcGxldGlvbkhh
bmRsZXIoRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpOwog
fQogCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBjb25z
dGV4cHIgT3B0aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0VHlwZSB7IEhp
dFRlc3RSZXF1ZXN0OjpSZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwgSGl0VGVzdFJl
cXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCwgIEhpdFRlc3RSZXF1ZXN0OjpB
bGxvd0NoaWxkRnJhbWVDb250ZW50IH07Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50
LCBoaXRUeXBlKTsKLSAgICBGcmFtZSogZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCkgPyByZXN1bHQuaW5uZXJOb2RlRnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBm
cmFtZS0+cmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgp
KTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKCpmcmFt
ZSwgcmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgaGl0VHlwZSk7CisgICAg
YXV0byYgZnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyAqcmVzdWx0LmlubmVy
Tm9kZUZyYW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS5yYW5nZUZvclBvaW50KHJlc3VsdC5yb3VuZGVk
UG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGlu
Z1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIHJhbmdlLmdldCgpKTsKICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGVk
aXRpbmdSYW5nZS5sb2NhdGlvbiksIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGlu
Z1JhbmdlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBJbnRSZWN0
IHJlc3VsdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgwLCAwKSk7Ci0gICAgCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRpdGluZ1Jhbmdl
KTsKKyAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7CisgICAgYXV0byByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFt
ZSwgZWRpdGluZ1JhbmdlKTsKICAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2socmVzdWx0LCBF
ZGl0aW5nUmFuZ2Uobm90Rm91bmQsIDApLCBjYWxsYmFja0lEKSk7CisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soeyB9LCB7
IH0sIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIHJlc3VsdCA9
IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RG
b3JSYW5nZShyYW5nZS5nZXQoKSkpOwotCi0gICAgLy8gRklYTUU6IFVwZGF0ZSBhY3R1YWxSYW5n
ZSB0byBtYXRjaCB0aGUgcmFuZ2Ugb2YgZmlyc3QgcmVjdC4KLSAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgZWRpdGlu
Z1JhbmdlLCBjYWxsYmFja0lEKSk7CisgICAgLy8gRklYTUU6IFBhc3MgYW4gRWRpdGluZ1Jhbmdl
IHRoYXQgbWF0Y2hlcyB0aGUgcmFuZ2Ugb2YgdGhlIGZpcnN0IHJlY3QsIHJhdGhlciB0aGFuIHRo
ZSBlbnRpcmUgcGFzc2VkLWluIHJhbmdlPworICAgIGF1dG8gcmVjdCA9IGZyYW1lLnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqcmFuZ2Up
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZUNhbGxiYWNrKHJlY3QsIGVkaXRpbmdSYW5nZSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdl
YlBhZ2U6OnNldENvbXBvc2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9z
aXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlv
biwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSkKQEAgLTU0NzAs
MTUgKzU0NjMsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW4KICAgICBwbGF0Zm9ybVdpbGxQ
ZXJmb3JtRWRpdGluZ0NvbW1hbmQoKTsKIAogICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQogICAgIGlmIChmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIFJlZlB0
cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50RWRpdGlu
Z1JhbmdlLmxvY2F0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICByZXBsYWNlbWVudFJh
bmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCByZXBsYWNlbWVudEVkaXRpbmdSYW5n
ZSk7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRSYW5nZSkKKyAgICAgICAgICAgIGlmIChh
dXRvIHJlcGxhY2VtZW50UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIHJlcGxh
Y2VtZW50RWRpdGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVwbGFjZW1lbnRSYW5nZSwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkpKTsKICAgICAgICAgfQotCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldENv
bXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIGhpZ2hsaWdodHMsIHNlbGVjdGlvbi5sb2NhdGlv
biwgc2VsZWN0aW9uLmxvY2F0aW9uICsgc2VsZWN0aW9uLmxlbmd0aCk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xp
Yi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGli
LmNwcAppbmRleCA0YzUwMGUzNjY4YTMyMTIzYjllMjRiMjc4ZGFhYjA3NDU3M2ZmYTMwLi40Njky
NTUzYTBhODA5ZGQzZjcwMzk1M2UzNThkZjMzNDYyMmVjNTllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTA5
LDEwICsxMDksMTAgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1l
JiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgYXV0byBzdXJyb3Vu
ZGluZ0VuZCA9IGVuZE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KTsKICAgICAgICAg
YXV0byBzdXJyb3VuZGluZ1JhbmdlID0gbWFrZVJhbmdlKHN1cnJvdW5kaW5nU3RhcnQsIHN1cnJv
dW5kaW5nRW5kKTsKICAgICAgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBz
dXJyb3VuZGluZ1JhbmdlICYmIHN1cnJvdW5kaW5nUmFuZ2UtPmNvbnRhaW5zKCpjb21wb3NpdGlv
blJhbmdlKSkgeworICAgICAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBzdXJyb3VuZGluZ1Jh
bmdlICYmIHN1cnJvdW5kaW5nUmFuZ2UtPmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9z
aXRpb25SYW5nZSkuZ2V0KCkpKSB7CiAgICAgICAgICAgICBhdXRvIGNsb25lZFJhbmdlID0gc3Vy
cm91bmRpbmdSYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgICAgICAgICAgc3Vycm91bmRpbmdSYW5n
ZS0+c2V0RW5kKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgICAg
ICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQoY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7
CisgICAgICAgICAgICBzdXJyb3VuZGluZ1JhbmdlLT5zZXRFbmQoY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KSk7CisgICAgICAgICAgICBjbG9uZWRS
YW5nZS0+c2V0U3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFu
Z2UtPmVuZCkpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0
ID0gcGxhaW5UZXh0KCpzdXJyb3VuZGluZ1JhbmdlKSArIHBsYWluVGV4dChjbG9uZWRSYW5nZSk7
CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3Np
dGlvbiA9IGNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKTsKICAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBvc2l0aW9uID0gcG9zdExh
eW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGQ5YzZj
NGE1YzhhNmYyYjQyNWYxMjIwOGU0MzNjNTRjOWIwOGY0ZjcuLjk0YTY3NTBhMzhjZGNkNDVmMmEy
ZmQ0N2Q3YzM3OGUzNDQ2YzFmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yNjcsMTAgKzI2NywxMCBAQCB2b2lkIFdl
YlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYg
cmVzdWx0KSBjb25zdAogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkp
IHsKICAgICAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNv
bXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICAgICAgY29tcG9zaXRpb25SYW5nZS0+Y29sbGVj
dFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CisgICAgICAg
ICAgICBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9u
UmVjdHMocG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKICAgICAgICAgICAgIGNvbnZl
cnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJlY3RzKHZpZXcsIHBvc3RMYXlvdXREYXRhLm1h
cmtlZFRleHRSZWN0cyk7CiAKLSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHQg
PSBwbGFpblRleHRGb3JDb250ZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICAg
ICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoKmNvbXBv
c2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjb21wb3NpdGlvblNl
bGVjdGlvbigqY29tcG9zaXRpb25SYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5t
YXJrZWRUZXh0Q2FyZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21w
b3NpdGlvblNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxw
dHIgLyogaW5zaWRlRml4ZWQgKi8pKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtl
ZFRleHRDYXJldFJlY3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlv
blNlbGVjdGlvbi52aXNpYmxlRW5kKCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8qIGlu
c2lkZUZpeGVkICovKSk7CkBAIC0xMzc3LDEzICsxMzc3LDE1IEBAIHZvaWQgV2ViUGFnZTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBHZXN0dXJlVHlwZSBnZXN0dXJl
VHlwZSwKICAgICB7CiAgICAgICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24o
KSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IG1hcmtlZFJhbmdl
ID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwotICAgICAgICBpZiAocG9zaXRp
b24gPCBtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAgICAgICAgcG9zaXRpb24g
PSBtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotICAgICAgICBpZiAocG9zaXRpb24gPiBt
YXJrZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbWFya2Vk
UmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgIGF1dG8gbWFya2VkUmFuZ2UgPSBmcmFtZS5l
ZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtYXJrZWRSYW5nZS0+c3RhcnQpOworICAgICAg
ICBhdXRvIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1hcmtlZFJh
bmdlLT5lbmQpOworICAgICAgICBpZiAocG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKQorICAgICAg
ICAgICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgICAgICBpZiAocG9zaXRpb24gPiBl
bmRQb3NpdGlvbikKKyAgICAgICAgICAgIHBvc2l0aW9uID0gZW5kUG9zaXRpb247CiAgICAgICAg
IGlmICh3a0dlc3R1cmVTdGF0ZSAhPSBHZXN0dXJlUmVjb2duaXplclN0YXRlOjpCZWdhbikKLSAg
ICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKG1hcmtlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpICE9
IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBw
b3NpdGlvbikgPyBQaHJhc2VCb3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxh
Z3M+IHsgfTsKKyAgICAgICAgICAgIGZsYWdzID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0
YXJ0UG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpICE9IGRp
c3RhbmNlQmV0d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3NpdGlvbikgPyBQaHJhc2VC
b3VuZGFyeUNoYW5nZWQgOiBPcHRpb25TZXQ8U2VsZWN0aW9uRmxhZ3M+IHsgfTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZmxhZ3MgPSBQaHJhc2VCb3VuZGFyeUNoYW5nZWQ7CiAgICAgICAg
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0
aW9uKTsKQEAgLTI0ODMsNyArMjQ4NSw2IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQ
YWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgIEVkaXRpbmdSYW5nZSBtYXJrZWRUZXh0
UmFuZ2U7CiAKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKICAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0
YXJ0KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgY29uc3QgdW5zaWduZWQgbWluQ29udGV4dFdvcmRD
b3VudCA9IDM7CkBAIC0yNDk0LDE0ICsyNDk1LDEyIEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4
dCBXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgICAgICBzZWxlY3RlZFRleHQg
PSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwogCiAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1l
LmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgc3RhcnRQb3NpdGlvbik7CiAgICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QmVmb3JlOwotICAg
ICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICBtYXJrZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChyYW5nZS5nZXQoKSk7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgZW5kUG9zaXRpb24sIGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0
aW9uKCkpOworICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
UG9zaXRpb24pKQorICAgICAgICAgICAgbWFya2VkVGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNv
bnRleHQoeyBjb21wb3NpdGlvblJhbmdlLT5zdGFydCwgKnN0YXJ0IH0pOwogICAgICAgICBTdHJp
bmcgbWFya2VkVGV4dEFmdGVyOwotICAgICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICBtYXJr
ZWRUZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAg
aWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pKQorICAgICAgICAg
ICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh7ICplbmQsIGNvbXBvc2l0
aW9uUmFuZ2UtPmVuZCB9KTsKICAgICAgICAgbWFya2VkVGV4dCA9IG1hcmtlZFRleHRCZWZvcmUg
KyBzZWxlY3RlZFRleHQgKyBtYXJrZWRUZXh0QWZ0ZXI7CiAgICAgICAgIGlmICghbWFya2VkVGV4
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1hcmtlZFRleHRSYW5nZS5sb2NhdGlvbiA9IG1h
cmtlZFRleHRCZWZvcmUubGVuZ3RoKCk7CkBAIC0yNjE3LDE0ICsyNjE2LDE2IEBAIHN0YXRpYyB2
b2lkIGZvY3VzZWRFbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVt
ZW50JiBmb2N1c2VkRWxlCiAgICAgSW50UG9pbnQgY29uc3RyYWluZWRQb2ludCA9IGNvbnN0cmFp
blBvaW50KGFkanVzdGVkUG9pbnQsIGZyYW1lLCBmb2N1c2VkRWxlbWVudCk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3Ry
YWluZWRQb2ludCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFt
ZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgYXV0byBjb21wb3NpdGlvblJhbmdl
ID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmICghY29tcG9zaXRp
b25SYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBvc2l0aW9uIDwgY29tcG9zaXRp
b25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKQotICAgICAgICBwb3NpdGlvbiA9IGNvbXBvc2l0aW9u
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBlbHNlIGlmIChwb3NpdGlvbiA+IGNvbXBvc2l0
aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgIHBvc2l0aW9uID0gY29tcG9zaXRpb25S
YW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpOworICAgIGF1dG8gZW5k
UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+
ZW5kKTsKKyAgICBpZiAocG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKQorICAgICAgICBwb3NpdGlv
biA9IHN0YXJ0UG9zaXRpb247CisgICAgZWxzZSBpZiAocG9zaXRpb24gPiBlbmRQb3NpdGlvbikK
KyAgICAgICAgcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKICAgICBJbnRSZWN0IGNhcmV0UmVjdCA9
IHZpZXcuY29udGVudHNUb1Jvb3RWaWV3KHBvc2l0aW9uLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7
CiAgICAgZmxvYXQgZGVsdGFYID0gYWJzKGNhcmV0UmVjdC54KCkgKyAoY2FyZXRSZWN0LndpZHRo
KCkgLyAyKSAtIHJlcXVlc3QucG9pbnQueCgpKTsKICAgICBmbG9hdCBkZWx0YVlGcm9tVGhlVG9w
ID0gYWJzKGNhcmV0UmVjdC55KCkgLSByZXF1ZXN0LnBvaW50LnkoKSk7CkBAIC00MjU1LDggKzQy
NTYsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3Vt
ZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICBpZiAod2FudHNNYXJrZWRU
ZXh0UmVjdHMgJiYgY29tcG9zaXRpb25SYW5nZSkgewogICAgICAgICAgICAgLy8gSW4gdGhlIGNh
c2Ugd2hlcmUgdGhlIGNsaWVudCBoYXMgcmVxdWVzdGVkIG1hcmtlZCB0ZXh0IHJlY3RzIG1ha2Ug
c3VyZSB0aGF0IHRoZSBjb250ZXh0CiAgICAgICAgICAgICAvLyByYW5nZSBlbmNvbXBhc3NlcyB0
aGUgZW50aXJlIG1hcmtlZCB0ZXh0IHJhbmdlIHNvIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGEgdHJ1
bmNhdGVkIHJlc3VsdC4KLSAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25TdGFydCA9IGNvbXBv
c2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAgICAgIGF1dG8gY29tcG9zaXRp
b25FbmQgPSBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICAgICAgYXV0
byBjb21wb3NpdGlvblN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0
aW9uUmFuZ2UtPnN0YXJ0KTsKKyAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25FbmQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKTsKICAgICAgICAg
ICAgIGlmIChjb250ZXh0QmVmb3JlU3RhcnQgPiBjb21wb3NpdGlvblN0YXJ0KQogICAgICAgICAg
ICAgICAgIGNvbnRleHRCZWZvcmVTdGFydCA9IGNvbXBvc2l0aW9uU3RhcnQ7CiAgICAgICAgICAg
ICBpZiAoY29udGV4dEFmdGVyRW5kIDwgY29tcG9zaXRpb25FbmQpCkBAIC00Mjc2LDkgKzQyNzcs
OSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50
RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9
IG1ha2VTdHJpbmcoY29udGV4dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24pOwogICAgIGNvbnRleHQuc2VsZWN0ZWRUZXh0ID0gbWFrZVN0cmluZyhzdGFydE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24pOwogICAgIGNvbnRleHQuY29udGV4dEFmdGVyID0gbWFrZVN0cmluZyhlbmRPZlJhbmdlT2ZJ
bnRlcmVzdEluU2VsZWN0aW9uLCBjb250ZXh0QWZ0ZXJFbmQpOwotICAgIGlmIChjb21wb3NpdGlv
blJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBjb21wb3NpdGlv
blJhbmdlLmdldCgpKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFy
dChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gY29tcG9zaXRpb25FbmQoY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7Cisg
ICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3Qu
Z2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSkucHRyKCkpKSB7CisgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gY29tcG9zaXRpb25FbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9u
UmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBtYWtlU3RyaW5nKGNv
bXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kKTsKICAgICAgICAgY29udGV4dC5zZWxlY3Rl
ZFJhbmdlSW5NYXJrZWRUZXh0LmxvY2F0aW9uID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0
YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29tcG9zaXRpb25TdGFydCk7CiAgICAg
ICAgIGNvbnRleHQuc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5ndGggPSBbY29udGV4dC5z
ZWxlY3RlZFRleHQuc3RyaW5nIGxlbmd0aF07CkBAIC00MzA1LDEwICs0MzA2LDggQEAgdm9pZCBX
ZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250
ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFj
dGVyUmVjdHNGb3JSYW5nZSgqY29udGV4dFJhbmdlLCAwKTsKICAgICB9IGVsc2UgaWYgKHdhbnRz
TWFya2VkVGV4dFJlY3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAgdW5zaWduZWQg
Y29tcG9zaXRpb25TdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKSB7Ci0g
ICAgICAgICAgICBpZiAoYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChjb21wb3NpdGlvblJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRP
ZmZzZXQgPSBXZWJDb3JlOjpwbGFpblRleHQoU2ltcGxlUmFuZ2UgeyBXVEZNb3ZlKCpzdGFydCks
IFdURk1vdmUoKmVuZCkgfSkubGVuZ3RoKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8g
c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChjb250ZXh0QmVmb3JlU3RhcnQuZGVlcEVxdWl2YWxl
bnQoKSkpCisgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gV2ViQ29yZTo6cGxh
aW5UZXh0KHsgV1RGTW92ZSgqc3RhcnQpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydCB9KS5sZW5n
dGgoKTsKICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdl
KCpjb21wb3NpdGlvblJhbmdlLCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0KTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
SU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJ
T1MubW0KaW5kZXggOGQ2YzQ4NzkxZDQ3ZGY5NGVmOWEyMTM4YjM4MjM1NDAwMzViYTA0Yy4uZWNj
ZmI1MDFlNmVjMzIxODc2YTA2YTQwNDJmZGI5M2MxODA2ZDhhMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTE0
MCw3ICsxNDAsNyBAQCAtIChDR1JlY3QpY2xvc2VzdENhcmV0UmVjdEluTWFya2VkVGV4dFJhbmdl
Rm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsK
IAotICAgIGF1dG8gbWFya2VkVGV4dFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKS5nZXQoKTsKKyAgICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5lZGl0b3Io
KS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgYXV0byBtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24g
PSBtYXJrZWRUZXh0UmFuZ2UgPyBWaXNpYmxlU2VsZWN0aW9uKCptYXJrZWRUZXh0UmFuZ2UpIDog
VmlzaWJsZVNlbGVjdGlvbigpOwogCiAgICAgaWYgKCFtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24u
aXNSYW5nZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJh
bmdlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCmluZGV4IGEw
YjZiNzk2YTNhODI3OWQ4ODRjNjQ3MzAxNTM5MTM0NTA3MTYwZDguLmQwZDMwY2U5YTgxYjcxOGI5
YWMyMjgwMzRlYjA1NzE1OTllZGQ3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01SYW5nZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
UmFuZ2UubW0KQEAgLTMwOSw0ICszMDksOSBAQCBET01SYW5nZSAqa2l0KFdlYkNvcmU6OlJhbmdl
KiB2YWx1ZSkKICAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOwogfQogCitET01SYW5n
ZSAqa2l0KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UodmFsdWUpLmdldCgpKTsKK30KKwogI3VuZGVm
IElNUEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUlu
dGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5o
CmluZGV4IGFmNTU5MzI3MDkzMTY0NWJhNzJhZTFhMTk5MWFlZDkxNTA5ZGZjZDcuLmU2ODE5YTVm
OGQ1ODhkMmU5YjY4N2YwZDk3OWY2N2NiMjNhODlhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaApAQCAtMjMsMTEgKzIzLDkgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9y
dCA8V2ViS2l0TGVnYWN5L0RPTVJhbmdlLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFJhbmdlOwotfQotCiBXZWJDb3JlOjpSYW5nZSogY29yZShET01SYW5nZSAqKTsKIERPTVJhbmdl
ICpraXQoV2ViQ29yZTo6UmFuZ2UqKTsKK0RPTVJhbmdlICpraXQoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IGUxYjQyZWE2ZDJmYmVm
ZTNhMWVkZjExMzIyYzZkNWU4YjMwM2ZmNDUuLjZmMDhmYWFhOTUzNWM0YWI5NzVmMjdiN2NiZjQy
NTc2OTVmOGI0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC02MywyNCArNjMsMjQgQEAgcHJpdmF0
ZToKICAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsOwogICAgIGJvb2wg
aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgZmluYWw7CiAKLSAgICBi
b29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBz
aG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBm
aW5hbDsKIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmlu
YWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0g
ICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSos
IFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5z
ZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2Vi
Q29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6
OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91bGRC
ZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29s
IHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAg
ICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7
CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmlu
YWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVj
dGluZykgZmluYWw7CiAKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQ
cm9wZXJ0aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEFwcGx5
U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRBcHBseVN0eWxlKCkgZmlu
YWw7CiAKLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFdlYkNvcmU6OlJhbmdl
KiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkKSBmaW5hbDsKKyAgICBib29sIHNo
b3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgY29u
c3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkKSBmaW5hbDsKIAogICAg
IHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkg
ZmluYWw7Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6
UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICB2b2lkIGRp
ZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWw7Ci0gICAgdm9pZCBnZXRDbGllbnRQ
YXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBh
c3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFz
dGVib2FyZERhdGEpIGZpbmFsOworICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3Rl
Ym9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVi
b2FyZERhdGEpIGZpbmFsOwogCiAgICAgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKGNvbnN0
IFN0cmluZyYpIGZpbmFsOwogICAgIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgcmVx
dWVzdERPTVBhc3RlQWNjZXNzKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIFdlYkNvcmU6
OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2U6OkRlbmllZEZvckdlc3R1cmU7IH0KQEAgLTE1Myw3ICsx
NTMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBj
b25zdCBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29y
ZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBp
c01vdmUpIGZpbmFsOworICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3Vt
ZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJv
b2wgaXNNb3ZlKSBmaW5hbDsKICAgICAKICAgICBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVy
Q2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsOwog
ICAgIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBmaW5hbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbQppbmRleCA5YWIxYzI5ZDQ4Nzg3N2Q2ZTg1ODM5ZjlkNWY0Yzg5MDY5
ODEyOWIyLi5iZDk1YTY2NDhhMzAzMmMwNTdhOTgxZTA5NDY5MDgwZTg4MTA2MzU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCkBAIC0yMzQsMTAgKzIzNCw5IEBAIGludCBXZWJFZGl0b3JDbGllbnQ6OnNw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIAogI2VuZGlmCiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsK
LSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxkRGVsZXRlRE9NUmFuZ2U6a2l0KHJhbmdlKV07Cisg
ICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
bV93ZWJWaWV3IHNob3VsZERlbGV0ZURPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCiBib29sIFdl
YkVkaXRvckNsaWVudDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTI1NiwxMSArMjU1
LDExIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoKSBjb25zdAogICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFw
cGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHls
ZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBSZWY8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlKHN0eWxlLT5pc011dGFibGUoKSA/IFJlZjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPihzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
Jj4oKnN0eWxlKSkgOiBzdHlsZS0+bXV0YWJsZUNvcHkoKSk7CiAgICAgcmV0dXJuIFtbbV93ZWJW
aWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3Ci0gICAgICAg
IHNob3VsZEFwcGx5U3R5bGU6a2l0KCZtdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFy
YXRpb24oKSkgdG9FbGVtZW50c0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07CisgICAgICAgIHNob3Vs
ZEFwcGx5U3R5bGU6a2l0KCZzdHlsZS5tdXRhYmxlQ29weSgpLT5lbnN1cmVDU1NTdHlsZURlY2xh
cmF0aW9uKCkpCisgICAgICAgIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQog
CiBzdGF0aWMgdm9pZCB1cGRhdGVGb250UGFuZWwoV2ViVmlldyAqd2ViVmlldykKQEAgLTI3OSwz
MyArMjc4LDI5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBseVN0eWxlKCkKICAgICB1
cGRhdGVGb250UGFuZWwobV93ZWJWaWV3KTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiByYW5nZSwgUmFuZ2UqIHJhbmdlVG9CZVJl
cGxhY2VkKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJl
cGxhY2VkKQogewogICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwogICAgICAgICBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZTpraXQocmFuZ2UpIHJlcGxhY2luZ1JhbmdlOmtpdChyYW5nZVRvQmVSZXBsYWNlZCldOwogfQog
Ci1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKiByYW5nZSkK
K2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlKQogewotICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICBzaG91bGRCZWdpbkVkaXRpbmdJbkRP
TVJhbmdlOmtpdChyYW5nZSldOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbW21f
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91
bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5nZSldOwogfQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93
ZWJWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEVuZEVkaXRpbmdJbkRP
TVJhbmdlOmtpdChyYW5nZSldOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5n
ZTpraXQocmFuZ2UpXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBh
Y3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIEVkaXRvckluc2Vy
dEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2ViVmlldzsKICAg
ICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6a2l0KHJhbmdlKSBn
aXZlbkFjdGlvbjpraXQoYWN0aW9uKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBF
QWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiB0b1Jh
bmdlLCBFQWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7
CiAgICAgcmV0dXJuIFttX3dlYlZpZXcgX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6a2l0
KGZyb21SYW5nZSkgdG9ET01SYW5nZTpraXQodG9SYW5nZSkgYWZmaW5pdHk6a2l0KHNlbGVjdGlv
bkFmZmluaXR5KSBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiB9CkBAIC00MTEsMTIg
KzQwNiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoKQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mKQogewogICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBXZWJLaXQsIG9ubHkgV2ViS2l0Mi4KIH0K
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKIHsKICAgICAvLyBOb3Qg
aW1wbGVtZW50ZWQgV2ViS2l0LCBvbmx5IFdlYktpdDIuCiB9CkBAIC01NzcsOSArNTcyLDkgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigp
CiAKICNlbmRpZiAvLyBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUgKm5vZGUsIFJhbmdlKiByZXBsYWNp
bmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQorYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+JiByZXBsYWNpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQog
eyAKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
VmlldzptX3dlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTpraXQobm9kZSkgcmVwbGFjaW5nRE9NUmFu
Z2U6a2l0KHJlcGxhY2luZ1JhbmdlKSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbiln
aXZlbkFjdGlvbl07CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3
YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6a2l0KCZub2RlKSByZXBs
YWNpbmdET01SYW5nZTpraXQocmVwbGFjaW5nUmFuZ2UpIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5z
ZXJ0QWN0aW9uKWdpdmVuQWN0aW9uXTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lz
dGVyVW5kb09yUmVkb1N0ZXAoVW5kb1N0ZXAmIHN0ZXAsIGJvb2wgaXNSZWRvKQpAQCAtODU2LDEw
ICs4NTEsMTAgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1zVHdvU3RlcFBhc3RlKFdl
YkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50KQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdt
ZW50JiBmcmFnbWVudCwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21l
bnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7CiAgICAg
aWYgKFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHBlcmZvcm1Ud29TdGVwRHJvcDphdERlc3RpbmF0aW9uOmlzTW92ZTopXSkK
LSAgICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBwZXJm
b3JtVHdvU3RlcERyb3A6a2l0KCZmcmFnbWVudCkgYXREZXN0aW5hdGlvbjpraXQoJmRlc3RpbmF0
aW9uKSBpc01vdmU6aXNNb3ZlXTsKKyAgICAgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9VSUtpdERl
bGVnYXRlRm9yd2FyZGVyXSBwZXJmb3JtVHdvU3RlcERyb3A6a2l0KCZmcmFnbWVudCkgYXREZXN0
aW5hdGlvbjpraXQoZGVzdGluYXRpb24pIGlzTW92ZTppc01vdmVdOwogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtODg3LDcgKzg4Miw3IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdl
YkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpCiAKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1U
d29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFuZ2UmLCBib29sKQorYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2lt
cGxlUmFuZ2UmLCBib29sKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDRjNTRjNDQ0YWNmMTc4MTkwMmQ2
NThhOTE1YTQ2Mjg4M2JiNTIxYTAuLjc2M2M3NzdjZTJiMDI2NmQ0MDkzZGFmY2FjMmE2MzYyNWYx
YmJkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpA
QCAtNzIwLDEzICs3MjAsMTUgQEAgLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25z
dCBXZWJDb3JlOjpQb3NpdGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGkKIAogLSAoTlNSZWN0
KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgcmV0dXJuIF9w
cml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKGNvcmUocmFuZ2Up
KTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKKyAgICByZXR1
cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKm1ha2VS
YW5nZShjb3JlKHJhbmdlKSkpOwogfQogCiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJs
ZTooRE9NUmFuZ2UgKilyYW5nZQogewogICAgIGJvb2wgaW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8g
RklYTUU6IGdldCB2aWEgZmlyc3RSZWN0Rm9yUmFuZ2UoKS4KLSAgICBOU1JlY3QgcmFuZ2VSZWN0
ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsgICAgCisgICAgTlNSZWN0IHJh
bmdlUmVjdCA9IFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07CiAgICAgYXV0byog
c3RhcnROb2RlID0gY29yZShbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsKICAgICAgICAgCiAgICAg
aWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKQEAgLTc4NCw3ICs3ODYs
NyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
IHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9wcml2YXRlLT5jb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVy
YXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CiB9CiAjZW5kaWYKIApAQCAtODUzLDcgKzg1NSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRE
T01SYW5nZVRvTlNSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogCiAtIChET01SYW5nZSAqKV9tYXJr
RE9NUmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFs
aXplZFJhbmdlKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3Ry
aW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcKQEAgLTExMDYsMTIgKzExMDgsMTIgQEAgLSAo
RE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNl
Y29uZFBvaW50OihDR1BvaW50KXMKIHsKICAgICBhdXRvIGZpcnN0UG9zaXRpb24gPSBbc2VsZiBf
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6Zmlyc3RdOwogICAgIGF1dG8gc2Vjb25kUG9zaXRpb24g
PSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsKLSAgICByZXR1cm4ga2l0
KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24s
IHNlY29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJu
IGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0
aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9u
UmFuZ2VGb3JQb2ludDooQ0dQb2ludClwb2ludAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZv
clBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JN
KElPU19GQU1JTFkpCkBAIC0xNDU0LDcgKzE0NTYsNyBAQCAtIChCT09MKWlzVGVsZXBob25lTnVt
YmVyUGFyc2luZ0VuYWJsZWQKIAogLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0g
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29y
ZShzZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9
CiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0
eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5
cGluZwpAQCAtMTQ5Niw3ICsxNDk4LDcgQEAgLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub0VsZW1l
bnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKillbGVtZW50UmFuZ2VD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCku
ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpOwogfQogCiAtICh2b2lkKWV4
cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgpAQCAtMTUyNiw3ICsx
NTI4LDcgQEAgLSAodW5pY2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uCiAKIC0gKERP
TVJhbmdlICopd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJu
IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkud29yZFJhbmdlQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2Vs
ZiktPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQpAQCAtMTU4OSwx
MiArMTU5MSwxMiBAQCAtIChCT09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0CiAKIC0gKERPTVJhbmdl
ICopcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92
aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3Jl
KHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQp
KTsKIH0KIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbjoo
aW50KWFtb3VudAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZikt
PnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdl
dCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRl
bmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFu
Z2U6KE5TUmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAtMTYx
OCw3ICsxNjIwLDcgQEAgLSAoRE9NUmFuZ2UgKiltYXJrZWRUZXh0RE9NUmFuZ2UKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIGtpdChmcmFtZS0+ZWRp
dG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGZyYW1lLT5l
ZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpOwogfQogCiAtICh2b2lkKXNldE1hcmtlZFRleHQ6
KE5TU3RyaW5nICopdGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCAxMTFj
ZjhiZGMyOWRjNjFlMjhmODIyZTk1N2I5Mzg4MmE0Mjc5OWE1Li40ZTNhMDhiMmRjNWQwNGJlODBm
MTFjMjljYjIyOTkxMGI0ZTg4ZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTEzMzIsNyArMTMzMiw3IEBAIC0gKEJPT0wpX3Nob3Vs
ZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihX
ZWJWaWV3SW5zCiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0
KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKSA6IG5pbDsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0
KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkg
OiBuaWw7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC02MzQ2LDcgKzYzNDYsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBET01SYW5nZSAqcmFuZ2UgPSBb
ZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07CiAgICAgaWYgKCFyYW5n
ZSkgewogICAgICAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6
KCV1LCAldSkgLT4gKDAsIDAsIDAsIDApIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxl
bmd0aCk7Ci0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAgICAgICBy
ZXR1cm4gTlNaZXJvUmVjdDsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKFtyYW5nZSBzdGFydENv
bnRhaW5lcl0pOwpAQCAtNzA3NSw3ICs3MDc1LDcgQEAgLSAoTlNVSW50ZWdlciljb3VudE1hdGNo
ZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBpbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmcK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY29y
ZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY29yZShyYW5nZSks
IGNvcmVPcHRpb25zKG9wdGlvbnMpLCBsaW1pdCwgbWFya01hdGNoZXMsIDApOworICAgIHJldHVy
biBjb3JlRnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBtYWtlUmFu
Z2UoY29yZShyYW5nZSkpLCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVz
LCAwKTsKIH0KIAogLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihC
T09MKW5ld1ZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCmluZGV4IDFlM2I3OWQwMzgx
YWU5OWQ2Y2EzNGVjYTIyZjU2MzlkNDhhM2E5NGUuLjgwMWJlZmVjNzZkMDk2ZjkzZjBmNDhkNjNj
Zjg3ZGY5NWQ1NTFiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCkBAIC0xNzYsNyAr
MTc2LDcgQEAgLSAodm9pZClkb0NvbXBsZXRpb24KIAogICAgICAgICAvLyBHZXQgcHJlY2VlZGlu
ZyB3b3JkIHN0ZW0KICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVd
OwotICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3Jl
KGZyYW1lKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpOworICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgRE9NUmFu
Z2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZAogICAgICAgICAgICAgZGlyZWN0aW9uOlNl
bGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQgZ3JhbnVsYXJpdHk6VGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBj
bG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVGV4dEl0ZXJhdG9yLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJU
ZXh0SXRlcmF0b3IubW0KaW5kZXggOGM3ZTdlZTAwZjdmMzE1MGQ4OTc3NDNhMDcyNDA5NmIzODgy
MTdjZS4uOTNiODM0NzdmYzhhNDJhZDNmNzRkMzY5ZTgxNzk0YmJlZmRhMDNhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KQEAg
LTk1LDcgKzk1LDcgQEAgLSAoRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UKICAgICBhdXRvJiB0ZXh0
SXRlcmF0b3IgPSAqX3ByaXZhdGUtPl90ZXh0SXRlcmF0b3I7CiAgICAgaWYgKHRleHRJdGVyYXRv
ci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKHRleHRJdGVyYXRvci5yYW5nZSgpKS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdCh0ZXh0
SXRlcmF0b3IucmFuZ2UoKSk7CiB9CiAKIC8vIEZJWE1FOiBDb25zaWRlciBkZXByZWNhdGluZyB0
aGlzIG1ldGhvZCBhbmQgY3JlYXRpbmcgb25lIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBjb3B5aW5n
IDgtYml0IGNoYXJhY3RlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KaW5kZXggODVkNjk0M2UzNmJhZTYzN2EwZTA5YjU0NzlkYWIzNWIzOWFhN2NjYy4uMDcz
M2Y1ZTA0NDRmNzlhZGQ3ZGI5N2NkYTE1ZDY5NzgyOGI2OTcyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtNDU5NCw3ICs0NTk0LDcgQEAgLSAoV2Vi
VGV4dEl0ZXJhdG9yICopdGV4dEl0ZXJhdG9yRm9yUmVjdDooTlNSZWN0KXJlY3QKICAgICBhdXRv
IGludFJlY3QgPSBXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwogICAgIGF1dG8gcmFu
Z2UgPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQoaW50UmVjdC5taW5YTWluWUNvcm5lcigpKSwKICAgICAgICAgY29yZUZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1heFhNYXhZQ29ybmVyKCkpKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRX
aXRoUmFuZ2U6a2l0KGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07
CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQo
cmFuZ2UpXSBhdXRvcmVsZWFzZV07CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAg
LTg0MTcsNyArODQxNyw3IEBAIC0gKERPTVJhbmdlICopZWRpdGFibGVET01SYW5nZUZvclBvaW50
OihOU1BvaW50KXBvaW50CiAgICAgYXV0byogcGFnZSA9IGNvcmUoc2VsZik7CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQocGFnZS0+bWFpbkZyYW1l
KCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludChbc2VsZiBjb252ZXJ0
UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChwYWdlLT5t
YWluRnJhbWUoKS5lZGl0b3IoKS5yYW5nZUZvclBvaW50KFdlYkNvcmU6OkludFBvaW50KFtzZWxm
IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXSkpKTsKIH0KIAogLSAoQk9PTClfc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UgdG9ET01SYW5n
ZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5
KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWcKQEAgLTg0NjUsNyAr
ODQ2NSw3IEBAIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogICAgIGF1dG8qIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5n
ZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2Vs
ZWN0aW9uQWZmaW5pdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNv
cmVDbGFzc2VzLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmNw
cAppbmRleCBiNjI2NDM3M2Q2NWM4OTY1OWUwNzU0OTIzMGEyYzExMjk4ZWUyYjE5Li4zNmNkODVm
ZjBkY2VjM2JmMzljMGU1OWJjNmYwNzUyZWY1YmJlNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxJbnRvVmlld09wdGlvbnMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZWRFbGVtZW50
Lmg+CiAjaW5jbHVkZSA8aW5pdGd1aWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC93aW4vV0NoYXJT
dHJpbmdFeHRyYXMuaD4KQEAgLTE2MTUsNiArMTYxNiwxMSBAQCBJRE9NUmFuZ2UqIERPTVJhbmdl
OjpjcmVhdGVJbnN0YW5jZShXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiAgICAgcmV0dXJuIG5ld1Jh
bmdlOwogfQogCitJRE9NUmFuZ2UqIERPTVJhbmdlOjpjcmVhdGVJbnN0YW5jZShjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQoreworICAgIHJldHVybiBjcmVhdGVJ
bnN0YW5jZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKK30KKwogSFJFU1VMVCBET01S
YW5nZTo6c3RhcnRDb250YWluZXIoX0NPTV9PdXRwdHJfb3B0XyBJRE9NTm9kZSoqIG5vZGUpCiB7
CiAgICAgaWYgKCFub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9N
Q29yZUNsYXNzZXMuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmgK
aW5kZXggYWM2NDNiNmZjZjQzYWVlY2QxMmIzN2U5OTAxZDdiMzJjZDAyOWM4OS4uNTZmOGNmMDdj
ZjhmZmI4MjVlYzUzM2IyYWMzZGE2NDlkYTQ0MTliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vRE9NQ29yZUNsYXNzZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9ET01Db3JlQ2xhc3Nlcy5oCkBAIC0zNyw5ICszNyw5IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBO
b2RlTGlzdDsKIGNsYXNzIFJhbmdlOwogY2xhc3MgTmFtZWROb2RlTWFwOworc3RydWN0IFNpbXBs
ZVJhbmdlOwogfQogCi0KIGNsYXNzIERPTU9iamVjdCA6IHB1YmxpYyBXZWJTY3JpcHRPYmplY3Qs
IHB1YmxpYyBJRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICAvLyBJVW5rbm93bgpAQCAtODIzLDYg
KzgyMyw3IEBAIHByb3RlY3RlZDoKIAogcHVibGljOgogICAgIHN0YXRpYyBJRE9NUmFuZ2UqIGNy
ZWF0ZUluc3RhbmNlKFdlYkNvcmU6OlJhbmdlKik7CisgICAgc3RhdGljIElET01SYW5nZSogY3Jl
YXRlSW5zdGFuY2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+Jik7CiAKIHB1
YmxpYzoKICAgICAvLyBJVW5rbm93bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggZWZlZGE0NGE5
ODE5ODA5NWQwMTdhMDkwYmZjN2FhN2U4NzI4ZGQ3MC4uNGExZTY4NWVlMjQ0YWU2YjU1NDU4OTA2
ZTQzNmE1Y2M3MDU5MWQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0xODUsNyArMTg1LDcg
QEAgaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKQogICAgIHJl
dHVybiAwOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdl
YkNvcmU6OlJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVk
aXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIENPTVB0cjxJ
V2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGlu
Z0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKiByYW5nZSkK
ICAgICByZXR1cm4gc2hvdWxkQmVnaW47CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRF
bmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBDT01Q
dHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVk
aXRpbmdEZWxlZ2F0ZSgmZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC0yNDAsMTIgKzI0MCwxMCBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihGcmFtZSopCiAK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNjYXJkZWRDb21wb3NpdGlvbihGcmFtZSopCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNhbmNlbGVk
Q29tcG9zaXRpb24oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKQEAgLTI1NywyMCArMjU1LDE4IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRp
ZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KFdlYkNvcmU6OlJhbmdlKikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xp
ZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+
JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+ID4mKQordm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+ID4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdlYkVk
aXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+JiByYW5nZSkKIHsKICAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7
CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0ZSgmZWQpKSB8fCAhZWQu
Z2V0KCkpCkBAIC0zMDAsNyArMjk2LDcgQEAgc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0
KEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiAgICAgcmV0dXJuIFdlYlZpZXdJbnNlcnRBY3Rp
b25UeXBlZDsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9k
ZSogbm9kZSwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5B
Y3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiBub2Rl
LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGluc2VydGluZ1JhbmdlLCBF
ZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7IAogICAgIENPTVB0cjxJV2ViRWRpdGlu
Z0RlbGVnYXRlPiBlZGl0aW5nRGVsZWdhdGU7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVk
aXRpbmdEZWxlZ2F0ZSgmZWRpdGluZ0RlbGVnYXRlKSkgfHwgIWVkaXRpbmdEZWxlZ2F0ZS5nZXQo
KSkKQEAgLTMxMCw3ICszMDYsNyBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0
Tm9kZShOb2RlKiBub2RlLCBSYW5nZSogaW5zZXJ0aW5nUmFuZ2UsIEVkaXRvcgogICAgIGlmICgh
aW5zZXJ0aW5nRE9NUmFuZ2UpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQ09NUHRyPElE
T01Ob2RlPiBpbnNlcnRET01Ob2RlKEFkb3B0Q09NLCBET01Ob2RlOjpjcmVhdGVJbnN0YW5jZShu
b2RlKSk7CisgICAgQ09NUHRyPElET01Ob2RlPiBpbnNlcnRET01Ob2RlKEFkb3B0Q09NLCBET01O
b2RlOjpjcmVhdGVJbnN0YW5jZSgmbm9kZSkpOwogICAgIGlmICghaW5zZXJ0RE9NTm9kZSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTMyNCw3ICszMjAsNyBAQCBib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiBub2RlLCBSYW5nZSogaW5zZXJ0aW5nUmFuZ2Us
IEVkaXRvcgogICAgIHJldHVybiBzaG91bGRJbnNlcnQ7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgc3RyLCBSYW5nZSogaW5zZXJ0aW5n
UmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGluc2VydGluZ1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24g
Z2l2ZW5BY3Rpb24pCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGVkaXRpbmdE
ZWxlZ2F0ZTsKICAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZGl0
aW5nRGVsZWdhdGUpKSB8fCAhZWRpdGluZ0RlbGVnYXRlLmdldCgpKQpAQCAtMzQyLDcgKzMzOCw3
IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
c3RyLCBSYW5nZSogaW5zZXJ0aW5nUmFuZ2UsCiAgICAgcmV0dXJuIHNob3VsZEluc2VydDsKIH0K
IAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29y
ZTo6UmFuZ2UqIGN1cnJlbnRSYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHByb3Bvc2VkUmFuZ2UsIFdl
YkNvcmU6OkVBZmZpbml0eSBzZWxlY3Rpb25BZmZpbml0eSwgYm9vbCBmbGFnKQorYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+JiBjdXJyZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYgcHJvcG9zZWRSYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IHNlbGVjdGlv
bkFmZmluaXR5LCBib29sIGZsYWcpCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+
IGVkOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdhdGUoJmVkKSkgfHwg
IWVkLmdldCgpKQpAQCAtMzU4LDIwICszNTQsMTcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGN1cnJlbnRSYW5nZSwgV2UK
ICAgICByZXR1cm4gc2hvdWxkQ2hhbmdlOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopCitib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBseVN0eWxlKCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92
ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopCitib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBj
b25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCA3N2Y2NDM2ZTdiNTQ4MGFm
MDRjNDg1YjgwYjU0MDg5MzAzMTU5MTYyLi5iNGNhZDAwMWZhMzM2NTQ2MThkNzZlYWY2OGI5NThl
YjRmNDlkMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNDcsMTUgKzQ3LDE1IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpIGZpbmFsOwogICAgIGlu
dCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRCZWdp
bkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEVuZEVkaXRp
bmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29u
c3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29yZTo6
U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29u
c3QgV1RGOjpTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBX
ZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwogCiAgICAgdm9pZCBkaWRCZWdpbkVk
aXRpbmcoKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwor
ICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKSBmaW5hbDsKLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmlu
YWw7CisgICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7
CiAKICAgICB2b2lkIGRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCkgZmluYWwg
eyB9CiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKSBmaW5hbDsKQEAgLTY1LDEy
ICs2NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzY2FyZGVkQ29tcG9zaXRpb24oV2ViQ29y
ZTo6RnJhbWUqKSBmaW5hbDsKICAgICB2b2lkIGRpZFVwZGF0ZUNvbXBvc2l0aW9uKCkgZmluYWwg
eyB9CiAKLSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7
CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKSBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpO
b2RlKiwgV2ViQ29yZTo6UmFuZ2UqIHJlcGxhY2luZ1JhbmdlLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHls
ZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5z
ZXJ0Tm9kZShXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+JiByZXBsYWNpbmdSYW5nZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsK
KyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVz
JiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9p
ZCBkaWRBcHBseVN0eWxlKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRl
bGV0ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBz
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGNv
bnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CiAKICAgICBib29sIHNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCgpIGZpbmFsOwogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKCkgY29uc3QgZmluYWw7CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCB1bmRvKCkgZmluYWw7CiAgICAgdm9pZCByZWRvKCkgZmluYWw7CiAgICAgCi0gICAgYm9v
bCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdl
YkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wg
c3RpbGxTZWxlY3RpbmcpIGZpbmFsOwogICAgIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5n
KFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKICAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRp
bmcoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQgdGV4dERpZENoYW5nZUluVGV4
dEZpZWxkKFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBmaW5hbDsKICAgICB2b2lk
IHNldElucHV0TWV0aG9kU3RhdGUoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKSBmaW5hbCB7IH0KLSAgICBib29sIHBlcmZv
cm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgV2ViQ29yZTo6UmFuZ2Um
LCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBE
cm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5n
ZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBXZWJDb3JlOjpET01QYXN0
ZUFjY2Vzc1Jlc3BvbnNlIHJlcXVlc3RET01QYXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmKSBmaW5h
bCB7IHJldHVybiBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JHZXN0
dXJlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggOGMxN2I1ZWZlNzlj
M2E5ZDU2YWNhYjFhOGU3MDM0MDVjZDBjODYzNi4uZjU1ODM0MDMzNGY0NjllM2Q0YTE5ZmE2NmNj
Mjc4MDNiNzI1NDA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTYyMDAs
NyArNjIwMCw3IEBAIHZvaWQgV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyhGcmFtZSog
dGFyZ2V0RnJhbWUsIEhJTUMgaElucHV0Q29udGV4dCkKIHsKICAgICBJbnRSZWN0IGNhcmV0Owog
ICAgIGlmIChhdXRvIHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpKTsKKyAg
ICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnJh
bmdlKTsKICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
Y2FyZXQpOwogICAgIGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwogCkBAIC02NDU2
LDE0ICs2NDU2LDE0IEBAIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9u
KEZyYW1lKiB0YXJnZXRGcmFtZSwgSU1FQ0hBUlBPU0lUSU9OKiBjCiAgICAgaWYgKGNoYXJQb3Mt
PmR3Q2hhclBvcyAmJiAhdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEludFJlY3QgY2FyZXQ7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgaWYgKHRhcmdldEZy
YW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICByYW5nZSA9IHRhcmdldEZy
YW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgZWxzZQotICAgICAgICByYW5n
ZSA9IGNyZWF0ZUxpdmVSYW5nZSh0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7
Ci0gICAgICAgIHJhbmdlLT5zZXRTdGFydChyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCkgKyBjaGFyUG9zLT5kd0NoYXJQb3MpOwotICAgICAgICBjYXJldCA9IHRh
cmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CisgICAg
ICAgIHJhbmdlLT5zdGFydC5vZmZzZXQgKz0gY2hhclBvcy0+ZHdDaGFyUG9zOworICAgICAgICBj
YXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqcmFuZ2UpOwog
ICAgIH0KICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
Y2FyZXQpOwogICAgIGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtNzc2NCwx
OCArNzc2NCwxNSBAQCBIUkVTVUxUIFdlYlZpZXc6OmNvbXBvc2l0aW9uUmFuZ2VGb3JUZXN0aW5n
KF9PdXRfIFVJTlQqIHN0YXJ0UG9zaXRpb24sIF9PdXRfIFVJTgogICAgIGlmICghZnJhbWUuZWRp
dG9yKCkuY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLQorICAgIGF1
dG8gcmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgICpzdGFydFBvc2l0aW9uID0gcmFu
Z2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgKmxlbmd0aCA9IHJhbmdlLT5zdGFydE9mZnNldCgpICsg
cmFuZ2UtPmVuZE9mZnNldCgpOwotCisgICAgKnN0YXJ0UG9zaXRpb24gPSByYW5nZS0+c3RhcnQu
b2Zmc2V0OworICAgICpsZW5ndGggPSByYW5nZS0+c3RhcnQub2Zmc2V0ICsgcmFuZ2UtPmVuZC5v
ZmZzZXQ7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLQogSFJFU1VMVCBXZWJWaWV3OjpmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZUZvclRlc3RpbmcoVUlOVCBsb2NhdGlvbiwgVUlOVCBsZW5ndGgs
IF9PdXRfIFJFQ1QqIHJlc3VsdFJlY3QpCiB7CiAgICAgaWYgKCFyZXN1bHRSZWN0KQpAQCAtNzc5
MCwxMiArNzc4Nyw4IEBAIEhSRVNVTFQgV2ViVmlldzo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFu
Z2VGb3JUZXN0aW5nKFVJTlQgbG9jYXRpb24sIFVJTlQgbGVuZ3RoCiAgICAgICAgIHJldHVybiBF
X0ZBSUw7CiAKICAgICBhdXRvIGNoYXJhY3RlclJhbmdlID0gQ2hhcmFjdGVyUmFuZ2UobG9jYXRp
b24sIGxlbmd0aCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVt
ZW50KSwgY2hhcmFjdGVyUmFuZ2UpKTsKLQotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVy
biBFX0ZBSUw7Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RG
b3JSYW5nZShyYW5nZS5nZXQoKSk7CisgICAgYXV0byByYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCBjaGFyYWN0ZXJS
YW5nZSk7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFu
Z2UocmFuZ2UpOwogICAgIEludFJlY3QgcmVzdWx0SW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29u
dGVudHNUb1dpbmRvdyhyZWN0KTsKIAogICAgIHJlc3VsdEludFJlY3Quc2NhbGUoZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CkBAIC03ODIxLDcgKzc4MTQsNyBAQCBIUkVTVUxUIFdlYlZpZXc6OnNlbGVj
dGVkUmFuZ2VGb3JUZXN0aW5nKF9PdXRfIFVJTlQqIGxvY2F0aW9uLCBfT3V0XyBVSU5UKiBsZW5n
dAogCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS5lZGl0b3Io
KS5zZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLmVkaXRvcigpLnNlbGVj
dGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkwYjE0MDU5NTBlMjhmMzZiMDUzY2QwNGRjZDU1ODdl
NDJlNTEyZmYuLmIwNDNiNzFmNmZhOGEwMmFkZDcwN2Y1MDc3Njg0MTE3YjkzYTBkOWEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQwLDcgKzExNDAsNiBAQAogCQlGNENENzRDOTIwRkRC
NDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENENzRDODIwRkRCNDk2MDBERTM3OTQgLyog
VGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gKi87IH07CiAJCUY0Q0YzMjgwMjM2NjU1MjIwMEQzQUQw
NyAvKiBFbnRlcktleUhpbnRUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0Q0YzMjdGMjM2NjU1MjIwMEQzQUQwNyAvKiBFbnRlcktleUhpbnRU
ZXN0cy5tbSAqLzsgfTsKIAkJRjRDRkNEREEyNDlGQzlFNDAwNTI3NDgyIC8qIFNwYWNlT25seS5v
dGYgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjRDRkNERDgyNDlGQzlEOTAwNTI3NDgyIC8qIFNwYWNlT25seS5vdGYgKi87IH07Ci0JCUY0Q0ZD
RERCMjQ5RkM5RTkwMDUyNzQ4MiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENGQ0REOTI0OUZDOUQ5MDA1Mjc0ODIgLyog
QWhlbS50dGYgKi87IH07CiAJCUY0RDI5ODZFMjBGRUU3MzcwMDkyRDYzNiAvKiBSdW5TY3JpcHRB
ZnRlckRvY3VtZW50TG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0RDI5ODZEMjBGRUU3MzcwMDkyRDYzNiAvKiBSdW5TY3JpcHRBZnRlckRvY3Vt
ZW50TG9hZC5tbSAqLzsgfTsKIAkJRjRENEYzQjYxRTRFMkJDQjAwQkIyNzY3IC8qIERyYWdBbmRE
cm9wU2ltdWxhdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjRENEYzQjQxRTRFMkJDQjAwQkIyNzY3IC8qIERyYWdBbmREcm9wU2ltdWxhdG9y
SU9TLm1tICovOyB9OwogCQlGNEQ0RjNCOTFFNEUzNkU0MDBCQjI3NjcgLyogRHJhZ0FuZERyb3BU
ZXN0c0lPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFRlc3RzSU9TLm1tICovOyB9
OwpAQCAtMTI0NSw3ICsxMjQ0LDYgQEAKIAkJCQk1NUE4MTgwMDIxODEwMjIxMDAwNEEzOUEgLyog
NDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMzc5MDI4QjkxNEZB
QzI0QzAwN0U2QjQzIC8qIGFjY2VwdHNGaXJzdE1vdXNlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJNzI1QzNFRjMyMjA1OEE1QjAwN0MzNkZDIC8qIEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCi0JCQkJRjRDRkNEREIyNDlGQzlF
OTAwNTI3NDgyIC8qIEFoZW0udHRmIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFDMkI4MTg3
MUM4OTI1QTAwMEE1NTI5RiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkx
QTYzNDc5RjE4M0Q3MkE0MDA1QjE3MDcgLyogYWxsLWNvbnRlbnQtaW4tb25lLWlmcmFtZS5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUMyNUNDQTBEMUU1MTQxODQwMDI2Q0I4QSAvKiBB
bGxBaGVtLnN2ZyBpbiBDb3B5IFJlc291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404689</attachid>
            <date>2020-07-19 15:30:30 -0700</date>
            <delta_ts>2020-07-19 18:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200719153029.patch</filename>
            <type>text/plain</type>
            <size>171994</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE1Njc3YmRmNTQzN2M4
Yjc2YWQ2YWUwZWY3ZGQyMjJhZTZmOTc2ZC4uMmIxYmExMDFhYzVjNTllOTc1OTFjNjFhMTk5OTg3
ODUwMTNjYzkyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBFZGl0b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTE5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgQ29sb3JCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA2Yzg5NjdlMmI3
YzI3NmYxNzIwZjM3YjhkZTU3MzNkZmI3MTJjMjFiLi42MDFlNTEyMDI2ODE4YjEyOGMwNDJmYzFk
OWNlZWU3NGU0Njc5MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTMwNiw4ICszMDYsOCBAQCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcwogICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2Uo
c3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VTaW1wbGVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAgICAgICBpZiAoY3Jl
YXRlTGl2ZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICptaXNzcGVsbGluZ1JhbmdlOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJjaERp
cmVjdGlvbjo6UHJldmlvdXMpIHsKICAgICAgICAgZm9yIChhdXRvIHJpdCA9IG1pc3NwZWxsaW5n
cy5yYmVnaW4oKTsgcml0ICE9IG1pc3NwZWxsaW5ncy5yZW5kKCk7ICsrcml0KSB7CkBAIC0zMTUs
OCArMzE1LDggQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1p
c3NwZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHMKICAgICAgICAgICAgIGlmICghbWlz
c3BlbGxpbmdSYW5nZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAg
aWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwg
MCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKCptaXNzcGVsbGluZ1Jh
bmdlKTsKKyAgICAgICAgICAgIGlmIChjcmVhdGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2Up
LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZl
UmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDApCisgICAgICAgICAgICAgICAg
cmV0dXJuICptaXNzcGVsbGluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MDEsMTUg
KzYwMSwxNCBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFu
Z2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3RpbwogICAgIAogICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBjbG9zZXN0U3RyaW5nUmFuZ2U7CiAgICAgZm9yIChhdXRvJiBzZWFyY2hTdHJp
bmcgOiBzZWFyY2hTdHJpbmdzKSB7Ci0gICAgICAgIGlmIChhdXRvIHNlYXJjaFN0cmluZ1Jhbmdl
ID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3RyaW5nLCBjcmVhdGVMaXZl
UmFuZ2UocmVmZXJlbmNlUmFuZ2UpLnB0cigpLCBmaW5kT3B0aW9ucykpIHsKLSAgICAgICAgICAg
IGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqc2VhcmNoU3RyaW5nUmFu
Z2UpOworICAgICAgICBpZiAoYXV0byBzZWFyY2hTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3Io
KS5yYW5nZU9mU3RyaW5nKHNlYXJjaFN0cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25z
KSkgewogICAgICAgICAgICAgaWYgKCFjbG9zZXN0U3RyaW5nUmFuZ2UpCi0gICAgICAgICAgICAg
ICAgY2xvc2VzdFN0cmluZ1JhbmdlID0gZm91bmRTdHJpbmdSYW5nZTsKKyAgICAgICAgICAgICAg
ICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSAqc2VhcmNoU3RyaW5nUmFuZ2U7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyBJZiBzZWFyY2hpbmcgYmFja3dhcmQsIHVzZSB0aGUg
dHJhaWxpbmcgcmFuZ2UgZWRnZXMgdG8gY29ycmVjdGx5IGRldGVybWluZSB3aGljaAogICAgICAg
ICAgICAgICAgIC8vIHJhbmdlIGlzIGNsb3Nlc3QuIFNpbWlsYXJseSwgaWYgc2VhcmNoaW5nIGZv
cndhcmQsIHVzZSB0aGUgbGVhZGluZyByYW5nZSBlZGdlcy4KICAgICAgICAgICAgICAgICBhdXRv
JiBjbG9zZXN0U3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0cmlu
Z1JhbmdlLT5lbmQgOiBjbG9zZXN0U3RyaW5nUmFuZ2UtPnN0YXJ0OwotICAgICAgICAgICAgICAg
IGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gZm91bmRTdHJp
bmdSYW5nZS5lbmQgOiBmb3VuZFN0cmluZ1JhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAgIGF1
dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gc2VhcmNoU3RyaW5n
UmFuZ2UtPmVuZCA6IHNlYXJjaFN0cmluZ1JhbmdlLT5zdGFydDsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBhdXRvIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCA9IGNsb3Nlc3RTdHJp
bmdQb3NpdGlvbi5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgYXV0byBzZWFyY2hQb3NpdGlvbk9m
ZnNldCA9IGZvdW5kU3RyaW5nUG9zaXRpb24ub2Zmc2V0OwpAQCAtNjE4LDcgKzYxNyw3IEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xv
c2VzdFRvUmFuZ2VJbkRpcmVjdGlvCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNsb3Nlc3RDb250YWlu
ZXJOb2RlLCBjbG9zZXN0UG9zaXRpb25PZmZzZXQsIHNlYXJjaENvbnRhaW5lck5vZGUsIHNlYXJj
aFBvc2l0aW9uT2Zmc2V0KS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoKCFpc0JhY2t3YXJkU2VhcmNoICYmIHJlc3VsdCA+IDApIHx8IChpc0JhY2t3YXJkU2VhcmNo
ICYmIHJlc3VsdCA8IDApKQotICAgICAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2Ug
PSBmb3VuZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFu
Z2UgPSAqc2VhcmNoU3RyaW5nUmFuZ2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGU0NGNiNGI3ZWE2
NWQ5M2U1MTM5OGQyNWUyNGM1NGQxYWFkMzFkZDAuLmY3MzRmMjc1NjE4ZWVhMjQzZGYxNTIxOTUw
MGZkNzJhOTUyNTI3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CkBAIC02OTIsNyArNjkyLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFj
Y2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXplZEF0dHIKIAogICAgIGlmIChb
bWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkgewogICAgICAgICBv
cGVyYXRpb24udGV4dFJhbmdlcyA9IG1ha2VWZWN0b3IobWFya2VyUmFuZ2VzLCBbd3JhcHBlcl0g
KGlkIG1hcmtlclJhbmdlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKFt3
cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1hcmtlclJhbmdlXSk7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVJhbmdlKFt3cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1hcmtl
clJhbmdlXSk7CiAgICAgICAgIH0pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggYTYyNjk0ZGUxYjg2Y2ZjMWIzM2NkZjE2NzAyYjBlNjU0MTM4YWY0YS4uNDg5MjdjMzZlZmFh
N2MxOTgyY2U2N2Y5MjBkY2FmNjRhMzA0NTEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC00NzMsNyArNDczLDcgQEAgc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhjb25zdCBF
bGVtZW50JiBlbGVtZW50KQogICAgIGlmICghZnJhbWUgfHwgIXJvb3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQmVnaW5FZGl0aW5n
KHJhbmdlT2ZDb250ZW50cygqcm9vdCkucHRyKCkpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9y
KCkuc2hvdWxkQmVnaW5FZGl0aW5nKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9v
dCkpOwogfQogCiBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NBbmNlc3Rvcihjb25zdCBTZWN1cml0eU9y
aWdpbiYgYWN0aXZlU2VjdXJpdHlPcmlnaW4sIEZyYW1lKiB0YXJnZXRGcmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwCmluZGV4IDliN2ExYTYyMTIxOTVhMmU0NzQ4Y2IyOTcxOTQ0YzE2NjMyODAwOTYuLjll
YTE0OWQyZjUxZGUyNGMzMzcxNjBiNTNhZjdjMWVkY2RjODhkMWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNw
cApAQCAtMTgzMywyNiArMTgzMywyNiBAQCBGbG9hdFJlY3QgUmFuZ2U6OmFic29sdXRlQm91bmRp
bmdSZWN0KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbgogICAgIHJl
dHVybiBib3VuZGluZ1JlY3QoQ29vcmRpbmF0ZVNwYWNlOjpBYnNvbHV0ZSwgcmVjdE9wdGlvbnMp
OwogfQogCi1TaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQor
U2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKIHsKICAgICByZXR1cm4g
eyB7IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkgfSwgeyByYW5n
ZS5lbmRDb250YWluZXIoKSwgcmFuZ2UuZW5kT2Zmc2V0KCkgfSB9OwogfQogCi1TaW1wbGVSYW5n
ZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYgcmFuZ2UpCitTaW1wbGVSYW5nZSBt
YWtlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1w
bGVSYW5nZShyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VSYW5nZShyYW5nZS5nZXQoKSk7
CiB9CiAKLU9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2Uq
IHJhbmdlKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShjb25zdCBSYW5nZSogcmFu
Z2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKCpyYW5nZSk7CisgICAgcmV0dXJuIG1ha2VSYW5nZSgq
cmFuZ2UpOwogfQogCi1PcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0
IFJlZlB0cjxSYW5nZT4mIHJhbmdlKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShj
b25zdCBSZWZQdHI8UmFuZ2U+JiByYW5nZSkKIHsKLSAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVJhbmdlKHJhbmdlLmdldCgpKTsKIH0KIAog
UmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuaAppbmRleCBhODYxOWNiOTQ2MzQzNGU4Y2U4MWQyYjg0N2MzMjVhMDEyMDdlMTEwLi45
MzViYmRhNDdiNzYxMDc5MDc3YzQxNjNlMWM4OTk3NDgyNWQ5OWYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApA
QCAtMTc2LDEwICsxNzYsMTAgQEAgV0VCQ09SRV9FWFBPUlQgUmVmPFJhbmdlPiByYW5nZU9mQ29u
dGVudHMoTm9kZSYpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBS
YW5nZSosIGNvbnN0IFJhbmdlKik7CiBXRUJDT1JFX0VYUE9SVCBib29sIHJhbmdlc092ZXJsYXAo
Y29uc3QgUmFuZ2UqLCBjb25zdCBSYW5nZSopOwogCi1TaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFu
Z2UoY29uc3QgUmFuZ2UmKTsKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWY8
UmFuZ2U+Jik7Ci1PcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJh
bmdlKik7Ci1PcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0
cjxSYW5nZT4mKTsKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25zdCBSYW5nZSYpOworU2ltcGxl
UmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgUmFuZ2UqKTsKK1dFQkNPUkVfRVhQT1JU
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOwog
CiBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApp
bmRleCA0YThkMDA0ZGU5MTI4OWEzNGFmMGMxNTFiMzY5YzM1M2RmYWRiY2M5Li4yNjVjNDk3YjYw
ODI4M2RiMTFiZTNmMDdmNjRkZWQ3NTNhNjQxNWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5jcHAKQEAgLTgyLDYgKzgyLDIwIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFy
ZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBvZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgc3Rh
cnQsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBlbmQpCit7CisgICAgaWYgKCFzdGFy
dCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsg
KnN0YXJ0LCAqZW5kIH0gfTsKK30KKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHN0YXJ0LCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYm
IGVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzdGFydCksIFdURk1vdmUoKmVuZCkgfSB9
OworfQorCiBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYg
bm9kZSkKIHsKICAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50
cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhub2RlKSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA3MGU3YzQyNTFjZGRmMzE3YjQ5ZDlhYTJkYzQyZTZk
NDU0N2E3NGRkLi4wMzc3ODBhNjIyNDkxZTc1NGQwNTBlMmFmYWQzMGUxNDk2Mjk4ZmU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNDYsMTEgKzQ2LDE0IEBAIHN0cnVjdCBTaW1wbGVS
YW5nZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoQm91bmRhcnlQb2ludCYmLCBC
b3VuZGFyeVBvaW50JiYpOwogCiAgICAgLy8gQ29udmVuaWVuY2Ugb3ZlcmxvYWRzIHRvIGhlbHAg
d2l0aCB0cmFuc2l0aW9uIGZyb20gdXNpbmcgYSBsb3Qgb2YgbGl2ZSByYW5nZXMuCi0gICAgLy8g
RklYTUU6IE9uY2UgdHJhbnNpdGlvbiBpcyBvdmVyLCByZW1vdmUgYW5kIGNoYW5nZSBjYWxsZXJz
IHRvIHVzZSBtYWtlU2ltcGxlUmFuZ2UgaW5zdGVhZC4KKyAgICAvLyBGSVhNRTogT25jZSB0cmFu
c2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNlIG1ha2VSYW5n
ZSBpbnN0ZWFkLgogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7
CiAgICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFy
eVBvaW50PiYsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+Jik7CitXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+
JiYsIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiYpOworCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VY
UE9SVCBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcAppbmRleCBlMmU4OTRjYjkzNzljNDNhMzMzYmNiM2YwODMzMjAxNDMzZDdmMjMwLi45
YWMyZTlkODYxNmRkNmEzYzE0YWYwMzU1MjJjMzBlNjBlNzEzMTQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI0
Myw3ICsyNDMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQo
KQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9
IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJh
bmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2RvY3Vt
ZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBU
ZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQs
IFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdl
KGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwg
bnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0
Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rp
b25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIFdURjo6bnVs
bG9wdCk7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5
cGVSZXZlcnNpb246IHsKQEAgLTY1Myw3ICs2NTMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5h
dAogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgIGF1dG8mIGVkaXRvciA9IG1f
ZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRS
YW5nZSgpOwotICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChh
bHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBh
c3RlZCkpCisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFs
dGVybmF0aXZlU3RyaW5nLCAqc2VsZWN0aW9uLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IHNlbGVjdGlvbi0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSgqc2VsZWN0
aW9uLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKSkKICAgICAgICAgcmVt
b3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKCptYXJrZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMTEyZjk3
YjJhMGI2NTQ2MjU0NjYyODgyNjdlNjMzYmRiYmZmYjVmMS4uODcwYzRkYmI2OGQzODBmOWExYjgx
YTBjMGU1ZjEzYWEzMjc0YTRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC03NDksOSArNzQ5LDkgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgIAogICAgIGF1dG8gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVx
dWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01v
dmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgYXV0
byByYW5nZVRvQmVSZXBsYWNlZCA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0
aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJn
ZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OwotICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdl
QWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2VkLnB0cigpKSkKKyAgICBp
ZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVs
ZXRlKHJhbmdlLCByYW5nZVRvQmVSZXBsYWNlZCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwog
ICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1v
dmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sK
ICAgICAvLyByZW1vdmFscyB0aGF0IGl0IGRvZXMgY2F1c2UgdGhlIGluc2VydGlvbiBvZiAqYW5v
dGhlciogcGxhY2Vob2xkZXIuCiAgICAgYm9vbCBuZWVkUGxhY2Vob2xkZXIgPSBtX25lZWRQbGFj
ZWhvbGRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAyZDdhZTJhYTZkNTQxMTkx
ODAxYzhmYzAyNDQxMGJlNmIzNTMxMjk3Li4zYjVmN2RlNzk4Mzg4YTI3MzQxMzljY2Y3MzI2MjE5
MTBmNDQ4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC01MDcsMjEgKzUwNywx
OCBAQCBib29sIEVkaXRvcjo6Y2FuRGVsZXRlKCkgY29uc3QKICAgICByZXR1cm4gc2VsZWN0aW9u
LmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCi1ib29s
IEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAorYm9vbCBFZGl0b3I6
OmNhbkRlbGV0ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBO
b2RlJiBzdGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIE5vZGUm
IGVuZENvbnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKLSAgICAKLSAgICBpZiAoIXN0
YXJ0Q29udGFpbmVyLmhhc0VkaXRhYmxlU3R5bGUoKSB8fCAhZW5kQ29udGFpbmVyLmhhc0VkaXRh
YmxlU3R5bGUoKSkKKyAgICBpZiAoIXJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aGFzRWRpdGFibGVT
dHlsZSgpIHx8ICFyYW5nZS5lbmQuY29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKCkpIHsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJF
QU0pOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBzdGFydC5wcmV2aW91cygp
OworICAgIGlmIChyYW5nZS5jb2xsYXBzZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc29t
ZXRpbWVzIGFsbG93IGRlbGV0aW9ucyBhdCB0aGUgc3RhcnQgb2YgZWRpdGFibGUgcm9vdHMsIGxp
a2Ugd2hlbiB0aGUgY2FyZXQgaXMgaW4gYW4gZW1wdHkgbGlzdCBpdGVtLgotICAgICAgICBpZiAo
cHJldmlvdXMuaXNOdWxsKCkgfHwgcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gc3RhcnRDb250YWluZXIucm9vdEVkaXRh
YmxlRWxlbWVudCgpKQorICAgICAgICBhdXRvIHByZXZpb3VzID0gVmlzaWJsZVBvc2l0aW9uIHsg
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSwgRE9XTlNUUkVBTSB9LnBy
ZXZpb3VzKCk7CisgICAgICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBy
YW5nZS5zdGFydC5jb250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTU4LDcg
KzU1NSw3IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAgICAgICAgICAgICByZXZlYWxTZWxl
Y3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICAgICAgICAgIGFkZFJhbmdlVG9L
aWxsUmluZygqc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFw
cGVuZFRleHQpOworICAgICAgICAgICAgICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRS
YW5nZSgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAgICAgICAgICAg
ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVsZXRlKCkpOwog
ICAgICAgICAgICAgLy8gSW1wbGljaXRseSBjYWxscyByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oKS4KICAgICAgICAgfQpAQCAtNjI3LDcgKzYyNCw3IEBAIHZvaWQgRWRpdG9y
OjpwYXN0ZUFzUGxhaW5UZXh0QnlwYXNzaW5nREhUTUwoKQogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewogICAgIFN0
cmluZyB0ZXh0ID0gcmVhZFBsYWluVGV4dEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwotICAg
IGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3Rl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoY2xp
ZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHQo
dGV4dCwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCkpOwogfQogCkBA
IC02NTIsNyArNjQ5LDcgQEAgYm9vbCBFZGl0b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVu
dCgpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBwYXN0ZWJvYXJkLmNhblNtYXJ0UmVw
bGFjZSgpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlKiByZXBsYWNpbmdET01SYW5nZSwgRWRpdG9ySW5zZXJ0
QWN0aW9uIGdpdmVuQWN0aW9uKQorYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERv
Y3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJl
cGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7CiAgICAg
aWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjYxLDcgKzY1OCw3IEBA
IGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KGNoaWxk
KSAmJiBmcmFnbWVudC5sYXN0Q2hpbGQoKSA9PSBjaGlsZCkKICAgICAgICAgcmV0dXJuIGNsaWVu
dCgpLT5zaG91bGRJbnNlcnRUZXh0KGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpjaGlsZCkuZGF0
YSgpLCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24pOwogCi0gICAgcmV0dXJuIGNsaWVu
dCgpLT5zaG91bGRJbnNlcnROb2RlKCZmcmFnbWVudCwgcmVwbGFjaW5nRE9NUmFuZ2UsIGdpdmVu
QWN0aW9uKTsKKyAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2VydE5vZGUoZnJhZ21lbnQs
IHJlcGxhY2luZ0RPTVJhbmdlLCBnaXZlbkFjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxl
Y3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0UmVwbGFj
ZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxC
bG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKQEAgLTcyNCwyNyArNzIx
LDIxIEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50
RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxl
Y3RSZXBsYWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0UmVwbGFjZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVw
bGFjZSwgTWF0Y2hTdHlsZTo6WWVzLCBlZGl0aW5nQWN0aW9uKTsKKyAgICByZXBsYWNlU2VsZWN0
aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSksIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
OjpZZXMsIGVkaXRpbmdBY3Rpb24pOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0
ZWRSYW5nZSgpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAotYm9vbCBFZGl0
b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKK2Jvb2wgRWRpdG9yOjpz
aG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKSBjb25z
dAogewotICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFjYW5EZWxldGVSYW5nZShyYW5nZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxk
RGVsZXRlUmFuZ2UocmFuZ2UpOworICAgIHJldHVybiByYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNl
ZCgpICYmIGNhbkRlbGV0ZVJhbmdlKCpyYW5nZSkgJiYgY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZERlbGV0ZVJhbmdlKCpyYW5nZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTENvcHko
KQpAQCAtNzYzLDcgKzc1NCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiAgICAgcmV0
dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24o
KSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDdXQpOwogfQogCi1ib29sIEVkaXRvcjo6c2hvdWxkSW5z
ZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0
aW9uIGFjdGlvbikgY29uc3QKK2Jvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKIHsKICAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkg
JiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTk4MCw3ICs5NzEsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8
RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAg
IGRpc3BhdGNoSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERh
dGEpOwogfQogICAgIAotYm9vbCBFZGl0b3I6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0
aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNob3VsZEFwcGx5U3R5bGUo
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
eyAgIAogICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgcmFuZ2Up
OwogfQpAQCAtMTAxMSw3ICsxMDAyLDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVj
dGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICBp
ZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5
U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8
ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZSgqc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAgLTEwMjIsNyArMTAxMyw3
IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4m
JiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0
eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBj
cmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNo
b3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCks
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5U3R5bGUoV1RGTW92ZShzdHlsZSksIGVkaXRp
bmdBY3Rpb24sIGNvbG9yRmlsdGVyTW9kZSk7CkBAIC0xMDMzLDcgKzEwMjQsNyBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKCpzdHls
ZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9
CiAKQEAgLTEyNjcsNyArMTI1OCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNl
bmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgaWYg
KCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQp
KQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIGZhbHNlIHRvIHVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKCkgdG8gbm90IHJlbW92ZSBtYXJrZXJzIGlmCkBAIC0xMzI2
LDcgKzEzMTcsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKCkKICAgICBpZiAoIWNh
bkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRU
ZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVk
KSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIl9zLCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJl
dCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBA
IC0xMzQ2LDcgKzEzMzcsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KCkKICAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVC
cmVhaygpOwogICAgIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZl
UmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJ
bnNlcnRUZXh0KCJcbiJfcywgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwpAQCAtMTQwNiwxMCArMTM5NywxMCBA
QCB2b2lkIEVkaXRvcjo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogCiB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29w
eShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwotICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChzZWxlY3Rpb24uZ2V0KCkpOworICAgIGF1dG8gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5n
ZSgpOworICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb24pOwogICAg
IGlmIChhY3Rpb24gPT0gQ3V0QWN0aW9uKSB7Ci0gICAgICAgIGlmICghc2hvdWxkRGVsZXRlUmFu
Z2Uoc2VsZWN0aW9uLmdldCgpKSkKKyAgICAgICAgaWYgKCFzaG91bGREZWxldGVSYW5nZShzZWxl
Y3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwpAQCAtMTQzNCw3ICsxNDI1LDcgQEAgdm9pZCBF
ZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAg
ICAgICAgICAgIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgLy8gRklYTUU6IERlbGV0ZSBh
ZnRlciA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAgICAgUGFz
dGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rp
b24sIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksICptX2RvY3VtZW50LmZyYW1lKCksIEluY2x1ZGVJ
bWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3Jl
YXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKGNyZWF0ZUxpdmVSYW5nZSgqc2Vs
ZWN0aW9uKS5nZXQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUo
KSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAg
fQogICAgIH0KQEAgLTE1MjYsNyArMTUxNyw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtRGVsZXRl
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2Vs
ZWN0ZWRSYW5nZSgpLmdldCgpLCBLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwor
ICAgIGFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0ZWRSYW5nZSgpLCBLaWxsUmluZ0luc2VydGlv
bk1vZGU6OkFwcGVuZFRleHQpOwogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShj
YW5TbWFydENvcHlPckRlbGV0ZSgpKTsKIAogICAgIC8vIGNsZWFyIHRoZSAic3RhcnQgbmV3IGtp
bGwgcmluZyBzZXF1ZW5jZSIgc2V0dGluZywgYmVjYXVzZSBpdCB3YXMgc2V0IHRvIHRydWUKQEAg
LTE3ODQsMTIgKzE3NzUsMTIgQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5n
Q29ycmVjdGlvbigpCiAKICNlbmRpZgogCi1ib29sIEVkaXRvcjo6c2hvdWxkRW5kRWRpdGluZyhS
YW5nZSogcmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRF
bmRFZGl0aW5nKHJhbmdlKTsKIH0KIAotYm9vbCBFZGl0b3I6OnNob3VsZEJlZ2luRWRpdGluZyhS
YW5nZSogcmFuZ2UpCitib29sIEVkaXRvcjo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSkKIHsKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3Vs
ZEJlZ2luRWRpdGluZyhyYW5nZSk7CiB9CkBAIC0xODQxLDcgKzE4MzIsNyBAQCB2b2lkIEVkaXRv
cjo6ZGlkRW5kRWRpdGluZygpCiAgICAgICAgIGNsaWVudCgpLT5kaWRFbmRFZGl0aW5nKCk7CiB9
CiAKLXZvaWQgRWRpdG9yOjp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqIHJh
bmdlKQordm9pZCBFZGl0b3I6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIGlmIChjbGllbnQoKSkKICAgICAg
ICAgY2xpZW50KCktPndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChyYW5nZSk7CkBAIC0x
OTI0LDE0ICsxOTE1LDE0IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0Rp
cmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIAogdm9pZCBFZGl0b3I6OnNlbGVjdENv
bXBvc2l0aW9uKCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY29tcG9zaXRpb25SYW5n
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBjb21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFRoZSBjb21wb3NpdGlvbiBjYW4gc3Rh
cnQgaW5zaWRlIGEgY29tcG9zZWQgY2hhcmFjdGVyIHNlcXVlbmNlLCBzbyB3ZSBoYXZlIHRvIG92
ZXJyaWRlIGNoZWNrcy4KICAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwotICAgIHNl
bGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5n
ZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2UtPmVuZCkpOwogICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0KIApAQCAtMjQ4NSw5ICsyNDc2LDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxl
UG9zaXRpb24gJndvcmRTdGFydCwKICAgICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMuY29udGFp
bnMoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZX
b3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICBhdXRvIGFkamFjZW50V29yZHMgPSBWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
LCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICBhdXRv
IGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5n
T3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJh
bmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdl
KSk7CisgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hl
Y2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFj
ZW50V29yZFJhbmdlKTsKICNlbHNlCiAjaWYgIVVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVO
VCkKICAgICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7CkBAIC0yNTcyLDcgKzI1NjMsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdl
IGNhbiwgcmVzcGVjdGluZyBib3VuZGFyaWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJs
ZWQuCiAgICAgICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMo
KS5yZW1vdmVNYXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIpOwogICAgICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoKnNwZWxsQ2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGZ1
bGxTZW50ZW5jZVJhbmdlKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBhZGph
Y2VudFdvcmRSYW5nZSwgZnVsbFNlbnRlbmNlUmFuZ2UpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yNTgwLDcgKzI1NzEsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBDaGVjayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIFJlZlB0
cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlz
c3BlbGxpbmdSYW5nZTsKICAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3Jk
U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpLCBtaXNzcGVsbGluZ1JhbmdlKTsKIAogICAg
IC8vIEF1dG9jb3JyZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCkBAIC0yNTk5LDcgKzI1OTAsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghbV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJp
bmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQor
ICAgICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29y
cmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVk
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5yZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1l
bnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogCkBAIC0yNjE2
LDcgKzI2MDcsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9X
b3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogI2VuZGlmCiB9CiAgICAgCi12
b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmly
c3RNaXNzcGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdy
YW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxp
bmcsIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdp
dGggYSBzZWxlY3Rpb24gYWxyZWFkeSBleHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCkBAIC0y
NjQ0LDkgKzI2MzUsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1t
YXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIFRleHRDaGVja2luZ0hlbHBlciBjaGVja2VyKCpjbGllbnQoKSwgKnNlYXJj
aFJhbmdlKTsKLSAgICBpZiAoY2hlY2tTcGVsbGluZykKLSAgICAgICAgY2hlY2tlci5tYXJrQWxs
TWlzc3BlbGxpbmdzKGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0gICAgZWxzZSBpZiAoaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKGNoZWNrU3BlbGxpbmcpIHsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nTGl2ZVJhbmdlOworICAgICAgICBjaGVja2Vy
Lm1hcmtBbGxNaXNzcGVsbGluZ3MoZmlyc3RNaXNzcGVsbGluZ0xpdmVSYW5nZSk7CisgICAgICAg
IGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1ha2VSYW5nZShmaXJzdE1pc3NwZWxsaW5nTGl2ZVJh
bmdlKTsKKyAgICB9IGVsc2UgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAg
ICBjaGVja2VyLm1hcmtBbGxCYWRHcmFtbWFyKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShz
ZWxlY3Rpb24pOwpAQCAtMjY3NCwxOCArMjY2NywxOCBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENo
ZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogICAgIHJldHVybiBpc1NwZWxsQ2hl
Y2tpbmdFbmFibGVkRm9yKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3Mo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpCit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKQogewogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0
aW9uLCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogfQogICAgIAogdm9pZCBFZGl0b3I6
Om1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJh
ZEdyYW1tYXIoc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KIAot
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnMsIFJlZlB0cjxSYW5n
ZT4mJiBzcGVsbGluZ1JhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSwgUmVmUHRyPFJhbmdlPiYmIGdyYW1tYXJSYW5nZSkKK3ZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNw
ZWxsaW5nUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFj
ZW1lbnRSYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCiB7
CiAgICAgaWYgKHBsYXRmb3JtRHJpdmVuVGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3MTAsOCArMjcwMyw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAg
aWYgKCFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKCZlZGl0YWJsZU5vZGUpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIHJhbmdlVG9DaGVjayA9IHNob3VsZE1hcmtHcmFtbWFyID8gZ3Jh
bW1hclJhbmdlLnJlbGVhc2VOb25OdWxsKCkgOiBzcGVsbGluZ1JhbmdlLnJlbGVhc2VOb25OdWxs
KCk7Ci0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaFRvQ2hlY2socmFuZ2VUb0No
ZWNrLmdldCgpKTsKKyAgICBhdXRvJiByYW5nZVRvQ2hlY2sgPSBzaG91bGRNYXJrR3JhbW1hciA/
ICpncmFtbWFyUmFuZ2UgOiAqc3BlbGxpbmdSYW5nZTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGggcGFyYWdyYXBoVG9DaGVjayhjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb0NoZWNrKSk7CiAgICAg
aWYgKHBhcmFncmFwaFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3
MTksOCArMjcxMiw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAKICAgICAvLyBJbiBhc3lu
Y2hyb25vdXMgbW9kZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgtd2lkZSBzZW50
ZW5jZS4KICAgICBjb25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVUZXh0Q2hlY2tp
bmdUeXBlTWFzayhlZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIGF1dG8g
dGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gbWFrZVJl
ZigqYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSkgOiByYW5nZVRvQ2hlY2suY29weVJlZigpOwot
ICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRp
b25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGFzeW5jaHJvbm91cyA/IG1ha2VS
ZWYocGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5nZSgpKSA6IFdURk1vdmUocmFuZ2VUb0No
ZWNrKSwgV1RGTW92ZSh0ZXh0UmVwbGFjZW1lbnRSYW5nZSksIHBhcmFncmFwaFRvQ2hlY2sucGFy
YWdyYXBoUmFuZ2UoKSk7CisgICAgYXV0byYgdGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0
aWNSZXBsYWNlbWVudFJhbmdlID8gKmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UgOiByYW5nZVRv
Q2hlY2s7CisgICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNv
bHZlZE9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3Vz
ID8gUmVmPFJhbmdlPiB7IHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSB9IDogY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlVG9DaGVjayksIGNyZWF0ZUxpdmVSYW5nZSh0ZXh0UmVwbGFjZW1l
bnRSYW5nZSksIHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgaWYgKCFy
ZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTI3NTMsOSArMjc0Niw5IEBAIHN0YXRpYyBi
b29sIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50VHlwZShUZXh0Q2hlY2tpbmdUeXBlIHR5cGUp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9yU3Bl
bGxDaGVja2luZyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnQpCit2b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0g
ICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBs
YWNlbWVudCktPmFwcGx5KCk7CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRl
KGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsK
IH0KIAogc3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNr
aW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFu
Z2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJl
c3VsdENoYXJhY3RlclJhbmdlKQpAQCAtMjg5NSw3ICsyODg4LDcgQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBW
ZWN0b3I8VGUKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQogICAgICAgICAgICAg
ICAgICAgICBDcmVhdGVMaW5rQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHJlcGxhY2VtZW50
KS0+YXBwbHkoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZElu
c2VydFRleHQocmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLnB0cigpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hv
dWxkSW5zZXJ0VGV4dChyZXBsYWNlbWVudCwgbWFrZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpIHsKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxj
aGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRv
UmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsK
IAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCku
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKQEAgLTI5NDgsMTIgKzI5NDEsMTIgQEAgdm9pZCBF
ZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcpCiAgICAgaWYgKHJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAg
aWYgKCFzZWxlY3Rpb24gfHwgIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVj
dGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGF1dG8gc2VsZWN0
aW9uID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uIHx8ICFzaG91bGRJbnNl
cnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24sIEVkaXRvckluc2VydEFjdGlvbjo6UGFz
dGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNl
OjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsICpzZWxlY3Rpb24pOwotICAgIFRleHRDaGVja2lu
Z1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNlbGVjdGlvbik7CisgICAgVGV4dENoZWNraW5nUGFyYWdy
YXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvbikpOwogICAgIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBT
bWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogICAgIGF1dG8gY2hhbmdlZFJh
bmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKENoYXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwpAQCAtMjk3OSwxMSAr
Mjk3MiwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlYwogICAgICAgICBpZiAobWFya0dyYW1t
YXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgICAgICB0ZXh0Q2hlY2tp
bmdPcHRpb25zLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgYXV0byBz
cGVsbENoZWNraW5nUmFuZ2UgPSBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRD
aGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVh
dGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hlY2tp
bmdSYW5nZSwgc3BlbGxDaGVja2luZ1JhbmdlLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpcnN0TWlz
c3BlbGxpbmdSYW5nZTsKICAgICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIGlmIChtYXJrR3JhbW1hcikKICAgICAgICAgbWFy
a0JhZEdyYW1tYXIoZ3JhbW1hclNlbGVjdGlvbik7CkBAIC0zMDg2LDIzICszMDc5LDE4IEBAIHZv
aWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgU3RyCiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5k
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKHBvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7
CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50
JiB3aW5kb3dQb2ludCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewogICAgIGF1dG8gZG9jdW1lbnQgPSBt
X2RvY3VtZW50LmZyYW1lKCktPmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYg
KCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIGF1dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAg
ICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGZy
YW1lUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAg
IGF1dG8gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChmcmFtZVBvaW50KSB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCkpIH0udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRp
dGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0
ZW50T3B0aW9uIHJldmVhbEV4dGVudE9wdGlvbikKQEAgLTMxMjksMTcgKzMxMTcsMTYgQEAgdm9p
ZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNl
bGVjdGlvbiBzaG91bGRSZXZlYWwKICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5n
T3BlcmF0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmV2ZWFsRXh0
ZW50KTsKIH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2UoKSBjb25z
dAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29tcG9zaXRpb25SYW5nZSgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2NvbXBvc2l0aW9uTm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9j
b21wb3NpdGlvbk5vZGUtPmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4o
bV9jb21wb3NpdGlvblN0YXJ0LCBsZW5ndGgpOwotICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWlu
KHN0ZDo6bWF4KHN0YXJ0LCBtX2NvbXBvc2l0aW9uRW5kKSwgbGVuZ3RoKTsKLSAgICAvLyBGSVhN
RTogV2h5IGlzIHRoaXMgZWFybHkgcmV0dXJuIG5lZWVkPworICAgIHVuc2lnbmVkIGVuZCA9IHN0
ZDo6Y2xhbXAobV9jb21wb3NpdGlvbkVuZCwgc3RhcnQsIGxlbmd0aCk7CiAgICAgaWYgKHN0YXJ0
ID49IGVuZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVh
dGUobV9jb21wb3NpdGlvbk5vZGUtPmRvY3VtZW50KCksIG1fY29tcG9zaXRpb25Ob2RlLmdldCgp
LCBzdGFydCwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIGVuZCk7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyB7ICptX2NvbXBvc2l0aW9uTm9kZSwgc3RhcnQg
fSwgeyAqbV9jb21wb3NpdGlvbk5vZGUsIGVuZCB9IH0gfTsKIH0KIAogYm9vbCBFZGl0b3I6Omdl
dENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQm
IHNlbGVjdGlvbkVuZCkgY29uc3QKQEAgLTMyMDEsNyArMzE4OCw3IEBAIHZvaWQgRWRpdG9yOjp0
cmFuc3Bvc2UoKQogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0
ZXJzLgotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0cmFuc3Bvc2VkLCByYW5nZS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRy
YW5zcG9zZWQsIG5ld1NlbGVjdGlvbi5maXJzdFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQogICAgICAgICByZXR1cm47CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRy
YW5zcG9zZWQsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFj
dGlvbjo6SW5zZXJ0KTsKIH0KQEAgLTMzNjAsMTMgKzMzNDcsMTMgQEAgc3RhdGljIGlubGluZSB2
b2lkIGNvbGxhcHNlQ2FyZXRXaWR0aChJbnRSZWN0JiByZWN0KQogICAgICAgICByZWN0LnNldEhl
aWdodCgwKTsKIH0KIAotSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiBy
YW5nZSkgY29uc3QKK0ludFJlY3QgRWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKKyAgICByYW5nZS5zdGFydC5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwog
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQ
b3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBET1dOU1RS
RUFNKTsKIAotICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKCkpIHsKKyAgICBpZiAocmFuZ2UuY29s
bGFwc2VkKCkpIHsKICAgICAgICAgLy8gRklYTUU6IEdldHRpbmcgY2FyZXQgcmVjdCBhbmQgcmVt
b3ZpbmcgY2FyZXQgd2lkdGggaXMgYSB2ZXJ5IHJvdW5kYWJvdXQgd2F5IHRvIGdldCBjb2xsYXBz
ZWQgcmFuZ2UgbG9jYXRpb24uCiAgICAgICAgIC8vIEluIHBhcnRpY3VsYXIsIHdpZHRoIGFkanVz
dG1lbnQgZG9lc24ndCB3b3JrIGZvciByb3RhdGVkIHRleHQuCiAgICAgICAgIEludFJlY3Qgc3Rh
cnRDYXJldFJlY3QgPSBSZW5kZXJlZFBvc2l0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uKS5hYnNv
bHV0ZVJlY3QoKTsKQEAgLTMzNzQsMTAgKzMzNjEsMTAgQEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0
UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKICAgICAgICAgcmV0dXJuIHN0YXJ0Q2Fy
ZXRSZWN0OwogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24o
cmFuZ2UtPmVuZFBvc2l0aW9uKCksIFVQU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5k
VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpLCBV
UFNUUkVBTSk7CiAKICAgICBpZiAoaW5TYW1lTGluZShzdGFydFZpc2libGVQb3NpdGlvbiwgZW5k
VmlzaWJsZVBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodW5pdGVk
Qm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSkpKTsK
KyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5k
ZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwogCiAgICAgTGF5b3V0VW5pdCBl
eHRyYVdpZHRoVG9FbmRPZkxpbmU7CiAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IFJlbmRl
cmVkUG9zaXRpb24oc3RhcnRWaXNpYmxlUG9zaXRpb24pLmFic29sdXRlUmVjdCgmZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKTsKQEAgLTM0MDMsNyArMzM5MCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25z
dCBWCiAgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LmZyYW1lKCktPnNl
bGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
I2VuZGlmCi0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAgcmV0dXJuIGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpLCBuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgYWZmaW5p
dHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBp
bmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBA
IC0zNDkwLDcgKzM0NzcsNyBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcm
IHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAotICAgIGF1dG8g
cmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKKyAgICBhdXRvIHJlc3VsdFJhbmdl
ID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCksIG9wdGlvbnMp
OwogICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzUw
MiwxMDYgKzM0ODksMTA5IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQ
dHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFu
Z2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RhdGljIGF1dG8mIHN0YXJ0KFQmJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykK
K3sKKyAgICByZXR1cm4gb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpID8gcmFuZ2UuZW5kIDog
cmFuZ2Uuc3RhcnQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBhdXRvJiBlbmQo
VCYmIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBvcHRpb25zLmNv
bnRhaW5zKEJhY2t3YXJkcykgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDsKK30KKworc3RhdGlj
IEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhOb2RlJiBu
b2RlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBvcHRpb25zLmNvbnRhaW5z
KEJhY2t3YXJkcykgPyBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSA6
IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSk7Cit9CisKK3N0YXRpYyBP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZShOb2RlJiBu
b2RlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBvcHRpb25zLmNvbnRhaW5z
KEJhY2t3YXJkcykgPyBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGUobm9kZSkgOiBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZShub2RlKTsKK30KKworc3RhdGljIFNpbXBsZVJhbmdlIGNvbGxh
cHNlSWZSb290c0RpZmZlcihTaW1wbGVSYW5nZSYmIHJhbmdlKQoreworICAgIC8vIEZJWE1FOiBU
aGlzIGhlbHBzIGNvcnJlY3QgcmVzdWx0cyBpbiBzb21lIGNhc2VzIGludm9sdmluZyBzaGFkb3cg
dHJlZXMuIEJ1dCB3ZSBjYW4gaW5jb3JyZWN0bHkgZmluZCBhIHN0cmluZyB3aXRoIG1pZGRsZSBj
aGFyYWN0ZXJzIGluIGFuIGlucHV0IGVsZW1lbnQgYW5kIGZpcnN0IGFuZCBsYXN0IGNoYXJhY3Rl
cnMgb3V0c2lkZSBpdC4KKyAgICByZXR1cm4gJnJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+cm9vdE5v
ZGUoKSA9PSAmcmFuZ2UuZW5kLmNvbnRhaW5lci0+cm9vdE5vZGUoKQorICAgICAgICA/IFdURk1v
dmUocmFuZ2UpIDogU2ltcGxlUmFuZ2UgeyByYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQgfTsKK30K
KworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJp
bmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByZWZlcmVuY2VSYW5nZSwg
RmluZE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAv
LyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHJlZmVyZW5jZSByYW5nZSwgaWYgdGhlcmUncyBh
IHJlZmVyZW5jZSByYW5nZSB0aGF0J3Mgbm90IGluIHNoYWRvdyBjb250ZW50LiBXaGljaCBlZGdl
CiAgICAgLy8gaXMgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgc2VhcmNoaW5nIGZvcndh
cmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rpb24gaXMgc2V0LgotICAg
IFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpKTsK
IAotICAgIGJvb2wgZm9yd2FyZCA9ICFvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyk7CiAgICAg
Ym9vbCBzdGFydEluUmVmZXJlbmNlUmFuZ2UgPSByZWZlcmVuY2VSYW5nZSAmJiBvcHRpb25zLmNv
bnRhaW5zKFN0YXJ0SW5TZWxlY3Rpb24pOwotICAgIGlmIChyZWZlcmVuY2VSYW5nZSkgewotICAg
ICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFy
dEluUmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpIDogcmVm
ZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0RW5kKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdl
LT5lbmRQb3NpdGlvbigpIDogcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAg
fQorICAgIGF1dG8gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJh
bmdlLT5zdGFydENvbnRhaW5lcigpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkgOiBudWxscHRyOwog
Ci0gICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoYWRvd1RyZWVSb290ID0gcmVmZXJlbmNlUmFuZ2Ug
PyByZWZlcmVuY2VSYW5nZS0+c3RhcnRDb250YWluZXIoKS5jb250YWluaW5nU2hhZG93Um9vdCgp
IDogbnVsbHB0cjsKLSAgICBpZiAoc2hhZG93VHJlZVJvb3QpIHsKLSAgICAgICAgaWYgKGZvcndh
cmQpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hh
ZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7Ci0gICAgfQorICAg
IGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1l
bnQoKSk7CisgICAgaWYgKHJlZmVyZW5jZVJhbmdlKQorICAgICAgICBzdGFydChzZWFyY2hSYW5n
ZSwgb3B0aW9ucykgPSBzdGFydEluUmVmZXJlbmNlUmFuZ2UgPyBzdGFydCgqcmVmZXJlbmNlUmFu
Z2UsIG9wdGlvbnMpIDogZW5kKCpyZWZlcmVuY2VSYW5nZSwgb3B0aW9ucyk7CisgICAgaWYgKHNo
YWRvd1RyZWVSb290KQorICAgICAgICBlbmQoc2VhcmNoUmFuZ2UsIG9wdGlvbnMpID0gbWFrZUJv
dW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2hhZG93VHJlZVJvb3QsIG9wdGlvbnMpOwor
ICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSBjb2xsYXBzZUlmUm9vdHNEaWZmZXIoZmluZFBsYWluVGV4
dChzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJl
c3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJhbmdlLCB0
YXJnZXQsIG9wdGlvbnMpKTsKICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZlcmVuY2Ug
cmFuZ2UgYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVyZW5jZSBy
YW5nZSwgZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3Vu
ZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSBy
YW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0
IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJlZmVyZW5j
ZVJhbmdlICYmIGFyZVJhbmdlc0VxdWFsKGNyZWF0ZUxpdmVSYW5nZShWaXNpYmxlU2VsZWN0aW9u
KCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIHJlZmVyZW5jZVJhbmdl
KSkgewotICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsK
LSAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQo
cmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kKHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwot
Ci0gICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICAgICAgaWYgKGZvcndhcmQp
Ci0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqc2hhZG93VHJlZVJvb3QsIHNo
YWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxh
aW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CisgICAgaWYgKHN0YXJ0SW5S
ZWZlcmVuY2VSYW5nZSAmJiBWaXNpYmxlU2VsZWN0aW9uKHJlc3VsdFJhbmdlKS50b05vcm1hbGl6
ZWRSYW5nZSgpID09IHJlZmVyZW5jZVJhbmdlKSB7CisgICAgICAgIHNlYXJjaFJhbmdlID0gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KCkpOworICAgICAgICBzdGFydChz
ZWFyY2hSYW5nZSwgb3B0aW9ucykgPSBlbmQoKnJlZmVyZW5jZVJhbmdlLCBvcHRpb25zKTsKKyAg
ICAgICAgaWYgKHNoYWRvd1RyZWVSb290KQorICAgICAgICAgICAgZW5kKHNlYXJjaFJhbmdlLCBv
cHRpb25zKSA9IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVS
b290LCBvcHRpb25zKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBjb2xsYXBzZUlmUm9vdHNEaWZm
ZXIoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAgICAgfQog
CiAgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW4gdGhlIHNoYWRvdyB0cmVlLCBzZWFyY2gg
aW4gbWFpbiBjb250ZW50IGZvbGxvd2luZyB0aGUgc2hhZG93IHRyZWUuCi0gICAgaWYgKHJlc3Vs
dFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICBzZWFyY2hS
YW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKHNoYWRvd1Ry
ZWVSb290LT5zaGFkb3dIb3N0KCkpIHsKLSAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpzaGFkb3dUcmVlUm9vdC0+c2hh
ZG93SG9zdCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c2V0RW5kQmVmb3JlKCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQbGFpblRleHQo
KnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICBpZiAocmVzdWx0UmFuZ2UuY29s
bGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChhdXRv
IGhvc3QgPSBzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKQorICAgICAgICAgICAgc3RhcnQo
c2VhcmNoUmFuZ2UsIG9wdGlvbnMpID0gKm1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKCpob3N0
LCBvcHRpb25zKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBjb2xsYXBzZUlmUm9vdHNEaWZmZXIo
ZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAgICAgfQogCiAg
ICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdyYXBwaW5nLCBzZWFy
Y2ggYWdhaW4gaW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxsCiAgICAgLy8gcmVkdW5k
YW50bHkgcmUtc2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQgaW4gc29tZSBjYXNlcyku
Ci0gICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdy
YXBBcm91bmQpKSB7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQ
bGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsK
KyAgICBpZiAocmVzdWx0UmFuZ2UuY29sbGFwc2VkKCkgJiYgb3B0aW9ucy5jb250YWlucyhXcmFw
QXJvdW5kKSkgeworICAgICAgICByZXN1bHRSYW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihm
aW5kUGxhaW5UZXh0KHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKSwgdGFyZ2V0LCBvcHRpb25z
KSk7CiAgICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQg
dXAgd2l0aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAogICAgICAgICAvLyAo
ZS5nLiwgdGhlIHJlZmVyZW5jZSByYW5nZSB3YXMgYWxyZWFkeSB0aGUgb25seSBpbnN0YW5jZSBv
ZiB0aGlzIHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0CiAgICAgICAgIC8vIHRoaXMgc2hvdWxk
IGJlIGEgc3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIGlu
IHRoYXQgY2FzZS4KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgp
ID8gbnVsbHB0ciA6IHJlc3VsdFJhbmdlOworICAgIHJldHVybiByZXN1bHRSYW5nZS5jb2xsYXBz
ZWQoKSA/IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbChyZXN1bHRSYW5nZSk7CiB9CiAKLXN0
YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlKQorc3Rh
dGljIGJvb2wgaXNGcmFtZUluUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7CiAgICAgZm9yIChhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1l
bnQoKTsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50
KCkub3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRvY3VtZW50
KCkgPT0gJnJhbmdlLm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSByYW5nZS5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50KTsKKyAgICAgICAgaWYgKCZvd25l
ckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJnJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+aW50ZXJzZWN0c05v
ZGUoKm93bmVyRWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gIXJlc3VsdC5oYXNFeGNlcHRp
b24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi11bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRl
eHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9u
cywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiogbWF0Y2hlcykKK3Vuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBT
dHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRmluZE9w
dGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxT
aW1wbGVSYW5nZT4qIG1hdGNoZXMpCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZTsKKyAgICBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gc2VhcmNoUmFuZ2U7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAg
IGlmICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlID0gcmFuZ2U7CisgICAgICAgIGlmICgmcmFuZ2UtPnN0YXJ0LmRvY3VtZW50
KCkgPT0gJmRvY3VtZW50KCkpCisgICAgICAgICAgICBzZWFyY2hSYW5nZSA9ICpyYW5nZTsKICAg
ICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdlKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5n
ZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkK
LSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CisgICAg
ICAgIHNlYXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50
KCkpOwogCi0gICAgTm9kZSYgb3JpZ2luYWxFbmRDb250YWluZXIgPSBzZWFyY2hSYW5nZS0+ZW5k
Q29udGFpbmVyKCk7Ci0gICAgaW50IG9yaWdpbmFsRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2UtPmVu
ZE9mZnNldCgpOworICAgIGF1dG8gb3JpZ2luYWxFbmQgPSBzZWFyY2hSYW5nZS0+ZW5kOwogCiAg
ICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CiAgICAgZG8gewpAQCAtMzYxMCw4ICszNjAwLDgg
QEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2Uu
c3RhcnQuY29udGFpbmVyLT5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcigqcmVzdWx0UmFuZ2Uu
c3RhcnQuY29udGFpbmVyLT5zaGFkb3dIb3N0KCkpOwotICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldEVuZChvcmlnaW5hbEVuZENvbnRhaW5lciwgb3JpZ2luYWxFbmRPZmZzZXQpOworICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250
ZW50cygqcmVzdWx0UmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5zaGFkb3dIb3N0KCkpOworICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UtPmVuZCA9IG9yaWdpbmFsRW5kOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KIApAQCAtMzYyNiwxNSArMzYxNiwxNCBAQCB1bnNpZ25lZCBFZGl0b3I6
OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwg
RmluZE9wdAogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1hdGNoQ291bnQgPj0gbGltaXQpCiAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAvLyBTZXQgdGhlIG5ldyBzdGFydCBmb3IgdGhl
IHNlYXJjaCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cwotICAgICAgICAvLyBy
ZXN1bHQgcmFuZ2UuIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGEgVmlzaWJsZVBvc2l0aW9uIGhl
cmUsCi0gICAgICAgIC8vIHNpbmNlIGZpbmRQbGFpblRleHQgd2lsbCB1c2UgYSBUZXh0SXRlcmF0
b3IgdG8gZ28gb3ZlciB0aGUgdmlzaWJsZQotICAgICAgICAvLyB0ZXh0IG5vZGVzLiAKLSAgICAg
ICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KFdURk1vdmUocmVzdWx0UmFuZ2UuZW5kLmNvbnRhaW5l
ciksIHJlc3VsdFJhbmdlLmVuZC5vZmZzZXQpOworICAgICAgICAvLyBTZXQgdGhlIG5ldyBzdGFy
dCBmb3IgdGhlIHNlYXJjaCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyByZXN1
bHQgcmFuZ2UuCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIFZpc2libGVQb3Np
dGlvbiBoZXJlOiBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIFRleHRJdGVyYXRvciB0byBnbyBvdmVy
IHZpc2libGUgdGV4dCBub2Rlcy4KKyAgICAgICAgc2VhcmNoUmFuZ2UtPnN0YXJ0ID0gV1RGTW92
ZShyZXN1bHRSYW5nZS5lbmQpOwogCi0gICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2Vh
cmNoUmFuZ2UtPnNoYWRvd1Jvb3QoKTsKLSAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBz
ZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQo
KnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAg
ICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zdGFydC5jb250YWluZXItPmNvbnRhaW5p
bmdTaGFkb3dSb290KCkpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPmVuZCA9IG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNoYWRvd1RyZWVSb290KTsKKyAgICAgICAg
fQogICAgIH0gd2hpbGUgKHRydWUpOwogCiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CkBAIC0zOTQz
LDIyICszOTMyLDI0IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3Qo
KSBjb25zdAogICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlKTsKIH0KIAotUmVmUHRyPFJhbmdl
PiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAorT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgp
IGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKSkpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSk7CisgICAgYXV0
byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJs
ZUVuZCgpKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHJldHVybiB7IHsgKnN0YXJ0LCAqZW5kIH0gfTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRleHRDaGVja2lu
Z1Jlc3VsdCYgcmVzdWx0KSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFu
Z2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQp
IGNvbnN0CiB7CiAgICAgaWYgKCFyZXN1bHQucmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlID0gY29udGV4dFJhbmdl
Rm9yQ2FuZGlkYXRlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGF1dG8gY29udGV4dFJhbmdlID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwog
ICAgIGlmICghY29udGV4dFJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjb250ZXh0UmFuZ2Us
IHJlc3VsdC5yYW5nZSkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVy
biByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0LnJhbmdlKTsKIH0K
IAogdm9pZCBFZGl0b3I6OnNjaGVkdWxlRWRpdG9yVUlVcGRhdGUoKQpAQCAtNDIyOCw4ICs0MjE5
LDggQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jl
c3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSA9IHRydWU7CiAKICAgICBpZiAoYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4dENoZWNraW5nUmVz
dWx0KGFjY2VwdGVkQ2FuZGlkYXRlKSkgewotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dChh
Y2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQotICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpj
cmVhdGUocmFuZ2UuZ2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHko
KTsKKyAgICAgICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFj
ZW1lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICAgICAgICAgIFJl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSks
IGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKICAgICB9IGVsc2UKICAg
ICAgICAgaW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVsbHB0cik7
CiAKQEAgLTQyNjEsMTYgKzQyNTIsMTYgQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1v
ZGVFbmFibGVkKCkKICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9j
a0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRv
cjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCiB7Ci0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBu
ZWVkIHRvIGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQn
cyBpbj8KLSAgICAvLyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0
byBsZWF2ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0
b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBBU1NFUlQoY29tbW9u
QW5jZXN0b3IpOwotICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFU
YWcpOwotICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkp
LCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQo
KmVuY2xvc2luZ0FuY2hvciwgMCk7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFk
anVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8gV2hv
ZXZlciB3cm90ZSB0aGlzIGNvZGUgb3JpZ2luYWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21t
ZW50IGV4cGxhaW5pbmcgdGhlIHJhdGlvbmFsZS4KKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRS
YW5nZSgpOworICAgIGlmIChyYW5nZSkgeworICAgICAgICBpZiAoYXV0byBlbmNsb3NpbmdBbmNo
b3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbklu
Y2x1c2l2ZUFuY2VzdG9yKHJhbmdlLT5zdGFydC5jb250YWluZXIsIHJhbmdlLT5lbmQuY29udGFp
bmVyKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKKyAgICAgICAgICAgIGlmIChjb21wYXJl
UG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShyYW5nZS0+c3RhcnQuY29udGFp
bmVyLnB0cigpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkpID49
IDApCisgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZv
cmVOb2RlQ29udGVudHMoKmVuY2xvc2luZ0FuY2hvcik7CisgICAgICAgIH0KKyAgICB9CiAgICAg
cmV0dXJuIHJhbmdlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA2OWQ2MDU5MzAy
NjUyZjY3MmZkMjU5MTUyZDNkY2ZiNDVmZjA5MjZmLi45ZGVkZGNhMzgzNmYxNTMwMzZjZmFmOWM4
MGRhZDM5OTQ0ZjQ0OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjEzLDEwICsyMTMsMTAgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgb3V0ZGVudCgpOwogICAgIHZvaWQgdHJhbnNwb3NlKCk7CiAKLSAgICBib29sIHNob3VsZElu
c2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlv
bik7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRp
dG9ySW5zZXJ0QWN0aW9uKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZERl
bGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxl
UHJvcGVydGllcyosIFJhbmdlKik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1
bWVudEZyYWdtZW50JiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0
QWN0aW9uKTsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVBy
b3BlcnRpZXMmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgdm9pZCByZXNwb25kVG9DaGFu
Z2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsKIApA
QCAtMzIyLDE2ICszMjIsMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5h
YmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdDsKICAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJs
ZWRGb3IoTm9kZSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxh
Y2VtZW50KTsKLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJr
TWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJr
R3JhbW1hciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAgICAg
dm9pZCBtYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYsIGNvbnN0IFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBs
YWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKFJhbmdlJiwgY29uc3QgU3RyaW5nJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGlzT3ZlcndyaXRlTW9kZUVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX292ZXJ3cml0ZU1vZGVFbmFibGVkOyB9CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwogCi0gICAgdm9pZCBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hl
Y2tpbmdUeXBlPiwgUmVmUHRyPFJhbmdlPiYmIHNwZWxsaW5nUmFuZ2UsIFJlZlB0cjxSYW5nZT4m
JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgZ3JhbW1hclJhbmdl
KTsKKyAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNw
ZWxsaW5nUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFj
ZW1lbnRSYW5nZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpOwog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQKICNl
bmRpZgpAQCAtMzQzLDggKzM0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dTcGVsbGluZ0d1
ZXNzUGFuZWwoKTsKICAgICBib29sIHNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKTsKIAotICAgIGJv
b2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKik7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5n
KFJhbmdlKik7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2Um
KTsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogICAg
IHZvaWQgY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKICAgICBib29sIGNhblVuZG8oKSBjb25z
dDsKQEAgLTM1Niw3ICszNTYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGlu
ZygpOwogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKik7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAgICAgdm9pZCBkaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogCiAgICAgdm9pZCBzaG93Rm9udFBhbmVsKCk7CkBA
IC0zODAsNyArMzgwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmly
bUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYpOyAvLyBpZiBubyBleGlzdGluZyBjb21wb3NpdGlv
biwgcmVwbGFjZXMgc2VsZWN0aW9uCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYW5jZWxDb21w
b3NpdGlvbigpOwogICAgIGJvb2wgY2FuY2VsQ29tcG9zaXRpb25JZlNlbGVjdGlvbklzSW52YWxp
ZCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjb21wb3Np
dGlvblJhbmdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRDb21wb3NpdGlv
blNlbGVjdGlvbih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3Rpb25F
bmQpIGNvbnN0OwogCiAgICAgLy8gZ2V0dGluZyBpbnRlcm5hdGlvbmFsIHRleHQgaW5wdXQgY29t
cG9zaXRpb24gc3RhdGUgKGZvciB1c2UgYnkgSW5saW5lVGV4dEJveCkKQEAgLTQwMCw3ICs0MDAs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKGJvb2wsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWxFeGlzdGluZ1NlbGVjdGlv
biA9IFJldmVhbFNlbGVjdGlvbjo6WWVzKTsKICAgICBib29sIGlnbm9yZVNlbGVjdGlvbkNoYW5n
ZXMoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZVNlbGVjdGlvbkNoYW5nZXM7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYg
d2luZG93UG9pbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBy
YW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CiAKICAgICB2b2lkIGNs
ZWFyKCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAKICAgICBFZGl0aW5nQmVoYXZp
b3IgYmVoYXZpb3IoKSBjb25zdDsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSgp
OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzZWxlY3RlZFJhbmdlKCk7CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybU1hcmtlZFRl
eHQoKTsKQEAgLTQ0Niw3ICs0NDYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlbGVjdGVkVGV4
dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZmluZFN0
cmluZyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBGaW5kT3B0
aW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlT2ZT
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRmluZE9w
dGlvbnMpOwogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyaygpIGNvbnN0OyAvLyBN
YXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCiAgICAgdm9pZCBzZXRNYXJrKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mKTsKQEAgLTQ1NSwxMyArNDU1LDEzIEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRp
ZXMmICwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0OwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZmlyc3RSZWN0Rm9yUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmKSBjb25zdDsKIAogICAgIHZvaWQgc2VsZWN0aW9uV2lsbENoYW5nZSgpOwogICAg
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24sIE9wdGlvblNldDxGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9u
Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVk
KCk7CiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVB
ZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRP
cHRpb25zLCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcywgVmVjdG9yPFJlZlB0cjxS
YW5nZT4+Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4
dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBGaW5kT3B0aW9u
cywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMsIFZlY3RvcjxTaW1wbGVSYW5nZT4q
KTsKICAgICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQo
Ym9vbCk7CiAKQEAgLTU0NSw4ICs1NDUsOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0KTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0
ZVJlcXVlc3QoKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yVGV4dENoZWNraW5n
UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
KCkgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yVGV4dENoZWNraW5n
UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYpIGNvbnN0OwogICAgIGJvb2wgaXNIYW5k
bGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0hhbmRsaW5nQWNjZXB0
ZWRDYW5kaWRhdGU7IH0KIAogICAgIHZvaWQgc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5m
byhib29sIGIpIHsgbV9pc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvID0gYjsgfQpAQCAtNTc5
LDcgKzU3OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCi0gICAgYm9vbCBjYW5EZWxldGVSYW5nZShS
YW5nZSopIGNvbnN0OworICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
KSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9h
cmQmKTsKICAgICB2b2lkIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJk
Jik7CiAgICAgdm9pZCBwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqLCBPcHRpb25TZXQ8
UGFzdGVPcHRpb24+KTsKQEAgLTU4OCw3ICs1ODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcXVv
dGVGcmFnbWVudEZvclBhc3RpbmcoRG9jdW1lbnRGcmFnbWVudCYpOwogCiAgICAgdm9pZCByZXZl
YWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiA9
IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50T3B0aW9u
ID0gRG9Ob3RSZXZlYWxFeHRlbnQpOwotICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3Jh
bW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8
UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5n
c09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5n
LCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25z
dCBOb2RlJiByb290RWRpdGFibGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4p
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JC
ZWhhdmlvcikgY29uc3Q7CkBAIC02MDgsNyArNjA4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPFJhbmdlPiBh
ZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGFkanVz
dGVkU2VsZWN0aW9uUmFuZ2UoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggZDZlYTQyNmQ3ZjdmZTc2NWZiMDA5N2Uz
ZDk1YWVjNzU5ZGE0MjdlZi4uNDQwZmNmNmZhNWZmZjFmZGI4MmU2ZDU0NTIyOTEwZTY1YzZhOTEz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xNzYsMTUg
KzE3NiwxNSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0Tm9kZShGcmFtZSYgZnJhbWUsIFJl
ZjxOb2RlPiYmIGNvbnRlbnQpCiBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFy
aXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CisgICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IHNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKICAgICBhdXRv
IG5ld1JhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFuZXdS
YW5nZSB8fCBuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBhdXRvIG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0
byBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAgIGlmICghZnJhbWUuZWRpdG9y
KCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9s
ZFJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHks
IGZhbHNlKSkKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKCpvbGRSYW5nZSwgKm5ld1JhbmdlLCBhZmZpbml0eSwgZmFsc2UpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpuZXdSYW5nZSkucHRyKCksIGFmZmluaXR5LCBG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTIyNiwxMSArMjI2LDExIEBAIHN0YXRpYyB1bnNpZ25lZCB2ZXJ0aWNhbFNjcm9s
bERpc3RhbmNlKEZyYW1lJiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFNjcm9sbGJhcjo6cGFnZVN0ZXAoaGVpZ2h0KSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+
IHVuaW9uRE9NUmFuZ2VzKFJhbmdlJiBhLCBSYW5nZSYgYikKK3N0YXRpYyBTaW1wbGVSYW5nZSB1
bmlvblJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIpCiB7
Ci0gICAgUmFuZ2UmIHN0YXJ0ID0gYS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJU
X1RPX1NUQVJULCBiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7Ci0gICAgUmFu
Z2UmIGVuZCA9IGEuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiKS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVh
dGUoYS5vd25lckRvY3VtZW50KCksICZzdGFydC5zdGFydENvbnRhaW5lcigpLCBzdGFydC5zdGFy
dE9mZnNldCgpLCAmZW5kLmVuZENvbnRhaW5lcigpLCBlbmQuZW5kT2Zmc2V0KCkpOworICAgIGF1
dG8mIHN0YXJ0ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UoYikpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDw9IDAgPyBhIDogYjsKKyAgICBhdXRvJiBlbmQgPSBjcmVhdGVMaXZlUmFuZ2UoYSktPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKGIp
KS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYiA6IGE7CisgICAgcmV0dXJuIHsgc3RhcnQu
c3RhcnQsIGVuZC5lbmQgfTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9ucwpAQCAt
MzU0LDcgKzM1NCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgYXV0byBtYXJrID0g
ZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byYgc2Vs
ZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9y
KCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24u
c2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFuZ2UoKm1hcmspLCAq
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBib29sIHNlbGVjdGVk
ID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHVuaW9uUmFuZ2Vz
KCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSkucHRyKCksIERPV05TVFJF
QU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgQVNT
RVJUKHNlbGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RU
b01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAg
ICAgICAgIFBBTDo6c3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3Jl
YXRlTGl2ZVJhbmdlKCptYXJrKSwgKnNlbGVjdGlvbikuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKnNl
bGVjdGlvbikpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggMTQ3NWZlNTNhMWMzN2I4NzM3YjhhYTUwNTA0ZjE3
NDhiYTg3NjA4MC4uNTJhNjdhOGY2MWVhNjMxYzE4NDU4ZThkOWU5YzcxYjEwZjA5ODQzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIzMTEsNyArMjMx
MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1l
KCkgJiYgbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9kb2N1bWVu
dC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBtX2RvY3Vt
ZW50LT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlv
bkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGM1Y2Jj
M2Y5N2NkOGE5OTJjMGFlZTdhMzFhODllZmQ4N2NmYTNkNzguLmVlZmU4ZmQ5NTFjY2ZhNGViNjYx
ODI3ZDU4ZTY5ZWE1OWI1ODZiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQpAQCAtODgsMTQgKzg4LDEzIEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlv
bkluSFRNTEZvcm1hdCgpCiAKIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRh
Rm9yQXR0YWNobWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyaW5nPiYgb3V0VHlwZXMs
IFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIG91dERhdGEpCiB7Ci0gICAgYXV0byYgZG9j
dW1lbnQgPSBlbGVtZW50LmRvY3VtZW50KCk7Ci0gICAgYXV0byBlbGVtZW50UmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9y
ZUFuY2hvciB9LCB7ICZlbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yIH0p
OwotICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKGVsZW1lbnRS
YW5nZS5wdHIoKSwgb3V0VHlwZXMsIG91dERhdGEpOworICAgIGF1dG8gZWxlbWVudFJhbmdlID0g
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZShlbGVtZW50KTsKKyAgICBjbGllbnQoKS0+Z2V0Q2xpZW50
UGFzdGVib2FyZERhdGEoZWxlbWVudFJhbmdlLCBvdXRUeXBlcywgb3V0RGF0YSk7CiAKICAgICBv
dXRUeXBlcy5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKTsKLSAgICBv
dXREYXRhLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGRvY3VtZW50Lm9yaWdpbklkZW50
aWZpZXJGb3JQYXN0ZWJvYXJkKCksIHsgfSB9LmNyZWF0ZVNoYXJlZEJ1ZmZlcigpKTsKKyAgICBv
dXREYXRhLmFwcGVuZChQYXN0ZWJvYXJkQ3VzdG9tRGF0YSB7IGVsZW1lbnQuZG9jdW1lbnQoKS5v
cmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVhdGVTaGFyZWRCdWZmZXIo
KSk7CiAKLSAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGVs
ZW1lbnRSYW5nZS5wdHIoKSkpIHsKKyAgICBpZiAoYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFuZ2UpLmdldCgpKSkgewogICAg
ICAgICBpZiAoYXV0byB3ZWJBcmNoaXZlRGF0YSA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRh
dGlvbigpKSB7CiAgICAgICAgICAgICBvdXRUeXBlcy5hcHBlbmQoV2ViQXJjaGl2ZVBib2FyZFR5
cGUpOwogICAgICAgICAgICAgb3V0RGF0YS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUod2Vi
QXJjaGl2ZURhdGEuZ2V0KCkpKTsKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIEVkaXRvcjo6d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICAgICAg
Y29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/
IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CiAgICAgICAgIGNvbnRl
bnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CiAgICAg
ICAgIGNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZv
ckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKLSAgICAgICAgY2xpZW50KCktPmdldENs
aWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjb250ZW50
LmNsaWVudFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOworICAgICAgICBjbGllbnQoKS0+Z2V0
Q2xpZW50UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgpLCBjb250ZW50LmNsaWVudFR5cGVz
LCBjb250ZW50LmNsaWVudERhdGEpOwogICAgIH0KICAgICBjb250ZW50LmRhdGFJbkhUTUxGb3Jt
YXQgPSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zv
cm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CkBA
IC0xNDQsNyArMTQzLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRX
cml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKICAgICB3ZWJDb250ZW50LmRhdGFJbkF0
dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0
cmluZy5nZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9u
SW5IVE1MRm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwotICAgIGNsaWVudCgp
LT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
d2ViQ29udGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnREYXRhKTsKKyAgICBjbGll
bnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoc2VsZWN0ZWRSYW5nZSgpLCB3ZWJDb250ZW50
LmNsaWVudFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwogCiAgICAgcGFzdGVib2FyZFdy
aXRlckRhdGEuc2V0V2ViQ29udGVudChXVEZNb3ZlKHdlYkNvbnRlbnQpKTsKIH0KQEAgLTE4NCwx
MiArMTgzLDEyIEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRT
dHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkCiAKICAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMo
Km1fZG9jdW1lbnQuZnJhbWUoKSwgYXR0cmlidXRlZFN0cmluZykpIHsKLSAgICAgICAgICAgIGlm
IChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICAgICAgaWYgKHNob3VsZEluc2Vy
dEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlBhc3RlZCkpCiAgICAgICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVh
c2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGF0dHJpYnV0ZWRTdHJp
bmcuc3RyaW5nOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJh
bmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgaWYgKHNo
b3VsZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlBhc3RlZCkpCiAgICAgICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0KHRleHQsIGZhbHNlKTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCA5OWFh
MTE5MjJjMzI4MTRiYzBhNmY1ZTBjYWJkOWY2M2IzOGU4NzFjLi5kYTdlOTQxY2I4ZjFmYmUyM2Iw
MDJlMjVkZTAwZDk2ODU5YWZjZTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2d0ay9FZGl0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRv
ckd0ay5jcHAKQEAgLTUwLDE3ICs1MCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQg
RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlv
blNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
c2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAg
aWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsK
LSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBh
c3RlYm9hcmQoKnBhc3RlYm9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlv
bjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgYXV0byBmcmFnbWVudCA9
IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBvcHRpb25zLmNv
bnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAog
ICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3Rh
dGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAg
ICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBz
aG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpQYXN0ZWQpKQogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51
bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBs
YWluVGV4dCwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVv
dGUpID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9j
a3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IDMxMjMyNWYyNzYyMWNiYjg4NDkyYTA0MjZlZTU5
MTY1NjdlNGExNjAuLjZjMjU0Nzk2NTUzNjA4NGIxNjM4ODA0OWQ0NWE1OTljZjk2MDY3MmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTIwNiwzMCArMjA2LDI2
IEBAIHZvaWQgRWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQsIEVsZW1lbnQmIGltYWdlRWxlbWVuCiAgICAgcGFzdGVib2FyZEltYWdlLnJlc291cmNl
TUlNRVR5cGUgPSBwYXN0ZWJvYXJkLnJlc291cmNlTUlNRVR5cGUoY2FjaGVkSW1hZ2UtPnJlc3Bv
bnNlKCkubWltZVR5cGUoKSk7CiAgICAgcGFzdGVib2FyZEltYWdlLnJlc291cmNlRGF0YSA9IGNh
Y2hlZEltYWdlLT5yZXNvdXJjZUJ1ZmZlcigpOwogCi0gICAgaWYgKCFwYXN0ZWJvYXJkLmlzU3Rh
dGljKCkpIHsKLSAgICAgICAgUG9zaXRpb24gYmVmb3JlSW1hZ2VQb3NpdGlvbigmaW1hZ2VFbGVt
ZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcik7Ci0gICAgICAgIFBvc2l0aW9u
IGFmdGVySW1hZ2VQb3NpdGlvbigmaW1hZ2VFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0Fm
dGVyQW5jaG9yKTsKLSAgICAgICAgYXV0byBpbWFnZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShpbWFn
ZUVsZW1lbnQuZG9jdW1lbnQoKSwgYmVmb3JlSW1hZ2VQb3NpdGlvbiwgYWZ0ZXJJbWFnZVBvc2l0
aW9uKTsKLSAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
aW1hZ2VSYW5nZS5wdHIoKSwgcGFzdGVib2FyZEltYWdlLmNsaWVudFR5cGVzLCBwYXN0ZWJvYXJk
SW1hZ2UuY2xpZW50RGF0YSk7Ci0gICAgfQorICAgIGlmICghcGFzdGVib2FyZC5pc1N0YXRpYygp
KQorICAgICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZShpbWFnZUVsZW1lbnQpLCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50VHlwZXMsIHBh
c3RlYm9hcmRJbWFnZS5jbGllbnREYXRhKTsKIAogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVi
b2FyZEltYWdlKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9
IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5UZXh0ID0gb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwogICAgIFdlYkNvbnRlbnRSZWFkZXIg
cmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOwogICAg
IGludCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNsaWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRl
bXNDb3VudCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRl
bXM7ICsraSkgewotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBj
bGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpKTsKKyAgICAgICAgYXV0byBm
cmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKGkpOwogICAg
ICAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJlYWRl
ci5hZGRGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSByZWFkZXIuZnJhZ21lbnQ7CisgICAg
YXV0byBmcmFnbWVudCA9IFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKICAgICBpZiAoIWZyYWdt
ZW50KSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHRJZ25vcmVkOwogICAgICAgICBmcmFn
bWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBhbGxv
d1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHRJZ25vcmVkKTsKQEAgLTIzOCw3ICsyMzQsNyBAQCB2
b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBP
cHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFp
bnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBh
c3RpbmcoKmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFn
bWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50
KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJk
KCpwYXN0ZWJvYXJkKSwgZmFsc2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9y
ZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVv
dGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCmluZGV4IDEy
ZmQ2YTQzZWEwNWEyYTBlNzJiNzRiYTcyZDk2Mjg2NDcwNWJhZTMuLjBiN2MyNjI1M2EwMDgyZTNj
NTRhZWVmZWEwNjE2MzI0ZTYyNDhjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9s
aWJ3cGUvRWRpdG9yTGliV1BFLmNwcApAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRnJhbWUmIGZyYW1lLCBS
YW5nZSYgcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQor
c3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJv
YXJkRGF0YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQp
CiB7CiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIApAQCAtNDcsOCArNDcsNyBAQCBzdGF0
aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmRE
YXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L2h0bWw7
Y2hhcnNldD11dGYtOCIpICYmIGZyYW1lLmRvY3VtZW50KCkpIHsKICAgICAgICAgU3RyaW5nIG1h
cmt1cCA9IHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiKTsK
LSAgICAgICAgaWYgKFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwLCBlbXB0eVN0cmluZygp
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGZyYWdtZW50OworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFt
ZS5kb2N1bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5k
UGx1Z2luQ29udGVudCk7CiAgICAgfQogCiAgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKQEAgLTU2
LDggKzU1LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0eXBlcy5jb250
YWlucygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpIHsKICAgICAgICAgY2hvc2VQbGFpblRl
eHQgPSB0cnVlOwotICAgICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZSwgcGFzdGVib2FyZC5yZWFkU3RyaW5nKCJ0
ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
CisgICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkuZ2V0KCksIHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0
Zi04IikpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTcgKzc3LDE3IEBA
IHZvaWQgRWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBFbGVtZW50
JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyCiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9u
cykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVi
b2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3Rl
T3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBhdXRvIGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2Rv
Y3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxs
b3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0
aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZy
YWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3Vs
ZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZy
YWdtZW50LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFz
dGVBc0ZyYWdtZW50KCpmcmFnbWVudCwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBh
c3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6
SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxv
Y2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDFjZDhjMzk0YTc2
OTFjNTVmNGQ4ZGQzNmRlODU5NmU3MDc3N2I3YjUuLmJhMzFjMTg3NzMyMzRiOWFkOTM5YWQwZDMz
MTkzMThjNjJkOGIzYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
QEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBFZGl0b3I6OnNob3dDb2xvclBhbmVsKCkKIAogdm9pZCBF
ZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9u
U2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBz
ZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKIAogICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgLy8gRklYTUU6IEhvdyBj
YW4gdGhpcyBoYXJkLWNvZGVkIHBhc3RlYm9hcmQgbmFtZSBiZSByaWdodCwgZ2l2ZW4gdGhhdCB0
aGUgcGFzc2VkLWluIHBhc3RlYm9hcmQgaGFzIGEgbmFtZT8KQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0
aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0
aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21l
bnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQor
ICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdl
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChm
cmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgq
cGFzdGVib2FyZCksIGZhbHNlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVN
YWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3Rl
IDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUgKTsKIAogICAgIGNs
aWVudCgpLT5zZXRJbnNlcnRpb25QYXN0ZWJvYXJkKFN0cmluZygpKTsKQEAgLTE1OSw3ICsxNTks
NyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZChOb2RlKiBub2RlLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7CiAg
ICAgaWYgKGF1dG8gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2Fy
ZCwgcmFuZ2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KSkgewogICAgICAgICBtYXliZUNvcHlOb2Rl
QXR0cmlidXRlc1RvRnJhZ21lbnQoKm5vZGUsICpmcmFnbWVudCk7Ci0gICAgICAgIGlmIChzaG91
bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCks
IEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgaWYgKHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAg
ICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgZmFsc2UsIE1haWxCbG9ja3F1
b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUpOwogICAgIH0KIApAQCAtMTc2LDExICsxNzYs
OSBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmltYWdlSW5XZWJBcmNoaXZlRm9ybWF0
KEVsZW1lbnQmIGltYWdlRWxlbWVudCkKIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpk
YXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQog
ewotICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJmYWNlIHRvIHRoaXMgZnVuY3Rpb24gaXMgYXdrd2Fy
ZC4gV2UnZCBwcm9iYWJseSBiZSBiZXR0ZXIgb2ZmIHdpdGggdGhyZWUgc2VwYXJhdGUgZnVuY3Rp
b25zLgotICAgIC8vIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4gV2Vi
S2l0MiB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZDp0eXBlczpdLAotICAgIC8vIHdoaWNoIGlzIG9ubHkgdXNlZCB0byBzdXBwb3J0IE9T
IFggc2VydmljZXMuCisgICAgLy8gRklYTUU6IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlv
biBpcyBhd2t3YXJkLiBXZSdkIHByb2JhYmx5IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBh
cmF0ZSBmdW5jdGlvbnMuIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBpcyBvbmx5IHVzZWQgaW4g
V2ViS2l0MiB0byBpbXBsZW1lbnQgdGhlIG1ldGhvZCAtW1dLVmlldyB3cml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZDp0eXBlczpdLCB3aGljaCBpcyBvbmx5IHVzZWQgdG8gc3VwcG9ydCBPUyBYIHNl
cnZpY2VzLgogCi0gICAgLy8gRklYTUU6IERvZXMgdGhpcyBmdW5jdGlvbiByZWFsbHkgbmVlZCB0
byB1c2UgYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpPyBCZWNhdXNlIHdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKCkganVzdCB1c2VzIHNlbGVjdGVkUmFuZ2UoKS4KKyAgICAvLyBGSVhNRTogRG9l
cyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBuZWVkIHRvIHVzZSBhZGp1c3RlZFNlbGVjdGlvblJhbmdl
KCk/IEJlY2F1c2Ugd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBqdXN0IHVzZXMgc2VsZWN0
ZWRSYW5nZSgpLiBUaGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGluIFdlYktpdCB0aGF0IHVzZXMg
YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZS4KICAgICBpZiAoIWNhbkNvcHkoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0Vk
aXRvcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmlu
ZGV4IGM3OTZiZmFhZjY2ZWU5NGE4NWM1NWYzOTIzNDkxNTVkMjc0YTg2MGMuLjkzZGRlYWY4ODg5
YjhlN2ZjYzI2OTM0MTI0MDg1ODI4NDQ3NmM4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93
aW4vRWRpdG9yV2luLmNwcApAQCAtMzcsMTcgKzM3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2Fy
ZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2Uo
KTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxh
aW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9h
cmQtPmRvY3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsK
KyAgICBhdXRvIGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1
bWVudC5mcmFtZSgpLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgb3B0aW9ucy5jb250YWlucyhQ
YXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAo
ZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQog
ICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZy
YWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5z
ZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNh
blNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQs
IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1h
aWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhh
bmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9G
VFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKaW5kZXggZGNmM2JmNDQ4NjViMDRjYzgyN2Y3MTMzZWRk
OGUxOTFmYWJhYmQ1Yi4uMjVmMTdhMzNmZDIwYTQxYzcxYmFmYjk1YjMzZjRhNDAwMjc0MDhiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKQEAgLTE1
NSw3ICsxNTUsNyBAQCBSZWY8RWxlbWVudD4gRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNy
ZWF0ZVRERm9yRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbgogICAgIGF1dG8gdGRFbGVtZW50
ID0gSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgZG9jdW1lbnQpOwogICAgIHRk
RWxlbWVudC0+YXBwZW5kQ2hpbGQoYW5jaG9yRWxlbWVudCk7CiAKLSAgICByZXR1cm4gV1RGTW92
ZSh0ZEVsZW1lbnQpOworICAgIHJldHVybiB0ZEVsZW1lbnQ7CiB9CiAKIHN0YXRpYyBTdHJpbmcg
cHJvY2Vzc0ZpbGVzaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgc2l6ZSwgYm9vbCBpc0RpcmVjdG9y
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggOTRmYjMwZjUxMWIz
YjM3OTUyMmFhNjlkMmNmZmZkYWU5MDA1NzAyNi4uMGMxNGFlNjkwY2QzZjQ2YTYzYmFlNjE2MDg1
NGYxYTAzYjgxMWI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKQEAg
LTE5MSw3ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgRW1wdHlFZGl0b3JDbGllbnQoKSA9IGRlZmF1
bHQ7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgc21h
cnRJbnNlcnREZWxldGVFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29s
IGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yMDAsMTUgKzIwMCwxNSBAQCBwcml2YXRlOgogICAg
IHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgZmluYWwgeyB9CiAgICAgaW50IHNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnKCkgZmluYWwgeyByZXR1cm4gLTE7IH0KIAotICAgIGJvb2wgc2hvdWxk
QmVnaW5FZGl0aW5nKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNo
b3VsZEVuZEVkaXRpbmcoUmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wg
c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmlu
ZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJhbmdlKiwgRUFmZmlu
aXR5LCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVBZmZpbml0eSwgYm9v
bCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShT
dHlsZVByb3BlcnRpZXMqLCBSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBkaWRBcHBs
eVN0eWxlKCkgZmluYWwgeyB9Ci0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShS
YW5nZSosIFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZE1v
dmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2Um
KSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSBm
aW5hbCB7IH0KICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIGZpbmFsIHsgfQpA
QCAtMjE5LDkgKzIxOSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlv
bigpIGZpbmFsIHsgfQogICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFsIHsgfQogICAgIHZv
aWQgZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopIGZpbmFsIHsgfQorICAg
IHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYpIGZpbmFsIHsgfQogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoKSBmaW5hbCB7IH0KLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZm
ZXI+PiYpIGZpbmFsIHsgfQogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsIHsgfQogICAgIHZvaWQgaGFuZGxlQWNjZXB0
ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyhUZXh0Q2hlY2tpbmdSZXN1bHQpIGZpbmFsIHsgfQog
CkBAIC0yNjEsNyArMjYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVN0cmluZ0ZvckZp
bmQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3
b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBSYW5nZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYs
IGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29u
dHJvbGxlci5jcHAKaW5kZXggNDFmN2E3ZWM3YTQxOTE3NzkxYjI4NWIxOTQzOWQyYzFiZTlkYWVm
ZC4uYzdlZmNmYzkzYmQ0NzcxMjcwZWEwYjA2OWRjYjkyNDdjOTFhMmFmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMjEzLDcgKzIxMyw3
IEBAIHN0YXRpYyB2b2lkIG9wZW5OZXdXaW5kb3coY29uc3QgVVJMJiB1cmxUb0xvYWQsIEZyYW1l
JiBmcmFtZSwgU2hvdWxkT3BlbkV4dGVybmFsCiBzdGF0aWMgdm9pZCBpbnNlcnRVbmljb2RlQ2hh
cmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgRnJhbWUmIGZyYW1lKQogewogICAgIFN0cmluZyB0ZXh0
KCZjaGFyYWN0ZXIsIDEpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4
dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAg
IGlmICghZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkp
OwpAQCAtMzc0LDcgKzM3NCw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAjZW5kaWYKICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6IHsKICAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0g
ICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgY3JlYXRl
TGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpQYXN0ZWQpKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxk
SW5zZXJ0VGV4dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkgewogICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9uPiByZXBsYWNlT3B0aW9ucyB7IFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVu
dE5lc3RpbmcgfTsKIAogICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigp
LnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBlNDM0NmUxNjk3NWRjM2Q2ZTBi
YTI2MzM3NGRjZGZmYmNmZWJmMWZhLi42Zjk4YWFlOGQ3NTZkMjJkODcwOGJkN2E2M2NlYWRiN2Vh
NWMxZTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNTY4LDcg
KzU2OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJh
Z0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRv
IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xv
ciksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQor
ICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUs
ICppbm5lclJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2xpZW50
KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
OjpFZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGlubmVyRnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5
bGUoc3R5bGUucHRyKCksIEVkaXRBY3Rpb246OlNldENvbG9yKTsKQEAgLTYwMyw3ICs2MDMsNyBA
QCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBk
cmFnRGF0YSkKICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpKSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKICAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZyb21E
cmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0
cnVlLCBjaG9zZVBsYWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5z
aG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIGlmICghZnJhZ21lbnQg
fHwgIWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5h
dGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpAQCAtNjI5LDcgKzYyOSw3IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBkcmFnRGF0YS5h
c1BsYWluVGV4dCgpOwotICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91
bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVk
aXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpE
cm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVk
aXQsIGRyYWdEYXRhKTsKQEAgLTEwMjIsNyArMTAyMiw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8
RHJhCiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0
aW9uUmFuZ2UpOwogCi0gICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKTsKKyAg
ICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKnNl
bGVjdGlvblJhbmdlKTsKIAogICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJv
bChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpIHsKICAgICAgICAgICAgICAg
ICBpZiAobXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBib29s
IERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBz
dGF0ZSwgT3B0aW9uU2V0PERyYQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAgICAgaWYg
KCFwcm9taXNlZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNsaWVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBzcGVjaWZpZWQsIGNhbGwgb3V0IHRv
IHRoZSBpbmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhlIHBhc3RlYm9hcmQgd2l0aCBkYXRh
LgotICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
Y3JlYXRlTGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci5kaWRX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RWRpdG9yQ2xpZW50LmgKaW5kZXggNzc5MzE3MWZlMGFkYjExN2RhZmY0MTYwZGFmZjY5MWNhNDQ2
MGMzMS4uOWRlNzA2NTRmMjBiNTgyM2Y3NjU2MDBlMTQxNmI5ZDhjM2E5MWRmNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCkBAIC00Myw3ICs0Myw2IEBAIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBGcmFtZTsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmFu
Z2U7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBU
ZXh0Q2hlY2tlckNsaWVudDsKQEAgLTUxLDEyICs1MCwxMyBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCiBzdHJ1Y3QgR2FwUmVjdHM7CiBzdHJ1Y3QgR3JhbW1hckRldGFpbDsKK3N0cnVjdCBT
aW1wbGVSYW5nZTsKIAogY2xhc3MgRWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5FZGl0b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVs
ZXRlUmFuZ2UoUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdl
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc21h
cnRJbnNlcnREZWxldGVFbmFibGVkKCkgPSAwOyAKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RU
cmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpID0gMDsKQEAgLTY1LDE3ICs2NSwxNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpID0gMDsK
ICAgICB2aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpID0gMDsKIAotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIHNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0
b3JJbnNlcnRBY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGlu
Zyhjb25zdCBTaW1wbGVSYW5nZSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRp
dGluZyhjb25zdCBTaW1wbGVSYW5nZSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5z
ZXJ0Tm9kZShOb2RlJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0
QWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9
IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYgdG9SYW5nZSwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH07CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1cHByZXNzUGFz
c3dvcmRFY2hvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgCi0gICAgdmlydHVhbCBi
b29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSA9IDA7CisgICAg
dmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBs
eVN0eWxlKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShSYW5nZSosIFJhbmdlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VB
ZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikgPSAwOwog
CiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIC8qIGlkZW50aWZpZXIgKi8sIGNv
bnN0IFN0cmluZyYgLyogY29udGVudFR5cGUgKi8sIGNvbnN0IFN0cmluZyYgLyogcHJlZmVycmVk
RmlsZU5hbWUgKi8sIFJlZjxTaGFyZWRCdWZmZXI+JiYpIHsgfQpAQCAtOTUsOSArOTUsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFu
Z2VzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0
SWZFZGl0YWJpbGl0eUNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRp
bmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChSYW5nZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYg
cGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJk
RGF0YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
V2l0aFNvZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0KSB7IH0KIApAQCAtMTg3LDcgKzE4Nyw3
IEBAIHB1YmxpYzoKICAgICAvLyBzZWxlY3Rpb24gYXMgYSB0eXBlIG9mIGNsaXBib2FyZC4KICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKSB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50
JiwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFNpbXBsZVJhbmdl
JiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5T
aG93Rm9udFBhbmVsKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggNmYxZjFiNGFkODBiMjFmOTk1YzFmZWU4ZDcyYWFkYzk2MjcxNWIyYi4uNWVkYTgz
MGVjZjQ2NWQwZGQwYjI0N2ZhZTAwMjBjNWUyNTJlYjhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMzA4Miw4ICszMDgyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNl
bmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCkKICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlv
bi5zdGFydCgpOwogCiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlv
bi5yb290RWRpdGFibGVFbGVtZW50KCkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkpIHsKLSAgICAg
ICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9y
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKS5nZXQoKSk7CisgICAgICAgIElu
dFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgICAgIGludCB4ID0gcmlnaHRBbGln
bmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54KCk7CiAgICAgICAgIC8vIEluIGEg
bXVsdGlsaW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkgd291bGQgZW5kdXAgb24gdGhlIG5leHQg
bGluZSwgc28gLTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXgg
M2YzNzIzMmM3ZTk1YmEyMDA1MzkxMTA0OWFlODA0MDI0ZjYxNjc4OS4uN2UyMTJlYWY0Yjk1MmE4
NmRiNGZkMTA4MDc2ZDIwNTk2ZDE2NTIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcApAQCAtNzUyLDE3ICs3NTIsMTYgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVy
OjpwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnRPclNjb3BlT3duZXIoY29uc3QgRm9jdXNOYXZpZ2EK
ICAgICByZXR1cm4gcHJldmlvdXNFbGVtZW50V2l0aExvd2VyVGFiSW5kZXgoc2NvcGUsIGxhc3Qs
IHN0YXJ0aW5nVGFiSW5kZXgsIGV2ZW50KTsKIH0KIAotc3RhdGljIGJvb2wgcmVsaW5xdWlzaGVz
RWRpdGluZ0ZvY3VzKE5vZGUgKm5vZGUpCitzdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5n
Rm9jdXMoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJU
KG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQuaGFzRWRpdGFi
bGVTdHlsZSgpKTsKIAotICAgIE5vZGUqIHJvb3QgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50
KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1
dG8gcm9vdCA9IGVsZW1lbnQucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8gZnJhbWUg
PSBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lIHx8ICFyb290KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNob3Vs
ZEVuZEVkaXRpbmcocmFuZ2VPZkNvbnRlbnRzKCpyb290KS5wdHIoKSk7CisgICAgcmV0dXJuIGZy
YW1lLT5lZGl0b3IoKS5zaG91bGRFbmRFZGl0aW5nKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cygqcm9vdCkpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVlZGVkKEZy
YW1lKiBvbGRGb2N1c2VkRnJhbWUsIEZyYW1lKiBuZXdGb2N1c2VkRnJhbWUsIE5vZGUqIG5ld0Zv
Y3VzZWROb2RlKQpAQCAtODQxLDcgKzg0MCw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjpzZXRG
b2N1c2VkRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGcmFtZSYgbmV3Rm9jdXNlZEZyYW1lCiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IE1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGNoZWNrIGZv
ciBjYXJldEJyb3dzaW5nCi0gICAgaWYgKG9sZEZvY3VzZWRFbGVtZW50ICYmIG9sZEZvY3VzZWRF
bGVtZW50LT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiAhcmVsaW5xdWlzaGVzRWRpdGluZ0Zv
Y3VzKG9sZEZvY3VzZWRFbGVtZW50KSkKKyAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQgJiYgb2xk
Rm9jdXNlZEVsZW1lbnQtPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmICFyZWxpbnF1aXNoZXNF
ZGl0aW5nRm9jdXMoKm9sZEZvY3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgbV9wYWdlLmVkaXRvckNsaWVudCgpLndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCmluZGV4IDRkMDM0ZjNiZDJiZmE5YWFhZDBlNmUyYTQ5NDM4NGQzYWMz
MmFlZWEuLjM1NTFiNGQ2MmI4NDYwZGJjNjE3NGI3ZGU1ZjJiOWYzODNhZjA3NWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC04MTgsMjggKzgxOCwyNSBAQCBEb2N1bWVudCogRnJhbWU6OmRvY3Vt
ZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAKIFJlZlB0cjxSYW5nZT4gRnJhbWU6
OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCiB7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7
Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkg
PSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFwb3NpdGlvbkJvdW5kYXJ5
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFBvc2l0aW9uIGRlZXBQb3NpdGlvbiA9
IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgVGV4dCogY29udGFpbmVyVGV4dCA9IGRl
ZXBQb3NpdGlvbi5jb250YWluZXJUZXh0KCk7CisgICAgYXV0byBjb250YWluZXJUZXh0ID0gcG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJUZXh0KCk7CiAgICAgaWYgKCFjb250YWlu
ZXJUZXh0IHx8ICFjb250YWluZXJUZXh0LT5yZW5kZXJlcigpIHx8IGNvbnRhaW5lclRleHQtPnJl
bmRlcmVyKCktPnN0eWxlKCkudXNlclNlbGVjdCgpID09IFVzZXJTZWxlY3Q6Ok5vbmUpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gcG9z
aXRpb24ucHJldmlvdXMoKTsKLSAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxsKCkpIHsKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHByZXZp
b3VzLCBwb3NpdGlvbik7Ci0gICAgICAgIExheW91dFJlY3QgcmVjdCA9IGVkaXRvcigpLmZpcnN0
UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAo
cmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0No
YXJhY3RlclJhbmdlOworICAgIGlmIChhdXRvIHByZXZpb3VzID0gbWFrZUJvdW5kYXJ5UG9pbnQo
cG9zaXRpb24ucHJldmlvdXMoKSkpIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYXJhY3RlclJh
bmdlID0gU2ltcGxlUmFuZ2UgeyAqcHJldmlvdXMsICpwb3NpdGlvbkJvdW5kYXJ5IH07CisgICAg
ICAgIGlmIChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdl
KS5jb250YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFu
Z2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZSk7CiAgICAgfQogCi0gICAgVmlzaWJsZVBvc2l0aW9u
IG5leHQgPSBwb3NpdGlvbi5uZXh0KCk7Ci0gICAgaWYgKFJlZlB0cjxSYW5nZT4gbmV4dENoYXJh
Y3RlclJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KSkgewotICAgICAgICBMYXlvdXRS
ZWN0IHJlY3QgPSBlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShuZXh0Q2hhcmFjdGVyUmFuZ2Uu
Z2V0KCkpOwotICAgICAgICBpZiAocmVjdC5jb250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2U7CisgICAgaWYgKGF1dG8gbmV4dCA9IG1ha2VC
b3VuZGFyeVBvaW50KHBvc2l0aW9uLm5leHQoKSkpIHsKKyAgICAgICAgYXV0byBuZXh0Q2hhcmFj
dGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpwb3NpdGlvbkJvdW5kYXJ5LCAqbmV4dCB9OworICAg
ICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlKS5j
b250YWlucyhmcmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uo
bmV4dENoYXJhY3RlclJhbmdlKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCmluZGV4IDU0NWJlYzFjZWIxZmMxMGRkYzY2ZjNhN2FmYzM0Y2M4NzA5MmIzOWYu
LjZmYTJlMzc2MjI0OWJhOTJmYTllZTJkMjkyZDU3ODEyZWU1OGFhZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcApAQCAtNzEzLDM0ICs3MTMsMzYgQEAgYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBEaWRXcmFwKiBkaWRXcmEKIAogdm9p
ZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIGludCBsaW1pdCwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBtYXRj
aFJhbmdlcywgaW50JiBpbmRleEZvclNlbGVjdGlvbikKIHsKKyAgICBWZWN0b3I8U2ltcGxlUmFu
Z2U+IHJlc3VsdFJhbmdlczsKKwogICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gMDsKIAogICAgIEZy
YW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsKICAgICBGcmFtZSogZnJhbWVXaXRoU2VsZWN0aW9u
ID0gbnVsbHB0cjsKICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNo
ZXNGb3JUZXh0KHRhcmdldCwgMCwgb3B0aW9ucywgbGltaXQgPyAobGltaXQgLSBtYXRjaFJhbmdl
cy5zaXplKCkpIDogMCwgdHJ1ZSwgJm1hdGNoUmFuZ2VzKTsKKyAgICAgICAgZnJhbWUtPmVkaXRv
cigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGFyZ2V0LCB7IH0sIG9wdGlvbnMsIGxpbWl0ID8gKGxp
bWl0IC0gcmVzdWx0UmFuZ2VzLnNpemUoKSkgOiAwLCB0cnVlLCAmcmVzdWx0UmFuZ2VzKTsKICAg
ICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCiAgICAgICAgICAgICBmcmFt
ZVdpdGhTZWxlY3Rpb24gPSBmcmFtZTsKICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShm
cmFtZSwgdHJ1ZSwgQ2FuV3JhcDo6Tm8pOwogICAgIH0gd2hpbGUgKGZyYW1lKTsKIAotICAgIGlm
IChtYXRjaFJhbmdlcy5pc0VtcHR5KCkpCisgICAgaWYgKHJlc3VsdFJhbmdlcy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChmcmFtZVdpdGhTZWxlY3Rpb24pIHsKICAgICAg
ICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uOwogICAgICAg
ICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFj
a3dhcmRzKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hdGNoUmFuZ2VzLnNpemUo
KTsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2
ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kgLSAxXSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdl
c1tpIC0gMV0pKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAg
IGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9f
RU5ELCAqbWF0Y2hSYW5nZXNbaV0pOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNp
emUgPSByZXN1bHRSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0
UmFuZ2VzW2ldKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAgICAgICAgICAg
ICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NzQ5LDEwICs3NTEsMTMgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpCi0gICAg
ICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IG1hdGNoUmFuZ2VzLnNpemUoKSAtIDE7CisgICAg
ICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IHJlc3VsdFJhbmdlcy5zaXplKCkgLSAxOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IDA7CiAgICAgfQorCisg
ICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykKKyAgICAgICAgbWF0Y2hSYW5nZXMu
YXBwZW5kKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkpOwogfQogCiBSZWZQdHI8UmFuZ2U+IFBhZ2U6
OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5n
ZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKQEAgLTc2NywxNyArNzcyLDE2IEBAIFJlZlB0cjxSYW5n
ZT4gUGFnZTo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVy
ZW5jZVJhbmdlLCBGCiAgICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVu
Y2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkgOiAmbWFpbkZyYW1lKCk7CiAgICAgRnJh
bWUqIHN0YXJ0RnJhbWUgPSBmcmFtZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFu
Z2U+IHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBm
cmFtZSA9PSBzdGFydEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiAwLCBvcHRpb25zIC0gV3JhcEFy
b3VuZCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7Ci0KKyAgICAgICAgaWYgKGF1
dG8gcmVzdWx0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIGZy
YW1lID09IHN0YXJ0RnJhbWUgPyBtYWtlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpIDogV1RGOjpudWxs
b3B0LCBvcHRpb25zIC0gV3JhcEFyb3VuZCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKHJlc3VsdFJhbmdlKTsKICAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFt
ZSwgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSwgY2FuV3JhcCk7CiAgICAgfSB3aGlsZSAo
ZnJhbWUgJiYgZnJhbWUgIT0gc3RhcnRGcmFtZSk7CiAKICAgICAvLyBTZWFyY2ggY29udGVudHMg
b2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHJlZmVyZW5jZSByYW5nZSB0
aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0IGEgYml0IGFuZCBqdXN0IHNlYXJj
aCBhZ2FpbiB3aXRoIHdyYXAgb24uCiAgICAgaWYgKGNhbldyYXAgPT0gQ2FuV3JhcDo6WWVzICYm
IHJlZmVyZW5jZVJhbmdlKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdl
ID0gc3RhcnRGcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyh0YXJnZXQsIHJlZmVyZW5jZVJh
bmdlLCBvcHRpb25zIHwgV3JhcEFyb3VuZCB8IFN0YXJ0SW5TZWxlY3Rpb24pKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdFJhbmdlOworICAgICAgICBpZiAoYXV0byByZXN1bHRSYW5nZSA9IHN0
YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBtYWtlUmFuZ2UoKnJlZmVy
ZW5jZVJhbmdlKSwgb3B0aW9ucyB8IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2UpOwogICAgIH0KIAog
ICAgIHJldHVybiBudWxscHRyOwpAQCAtNzk0LDcgKzc5OCw3IEBAIHVuc2lnbmVkIFBhZ2U6OmZp
bmRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9u
cywgdW5zCiAgICAgZG8gewogICAgICAgICBpZiAoc2hvdWxkTWFya01hdGNoZXMgPT0gTWFya01h
dGNoZXMpCiAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuc2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZChzaG91bGRIaWdobGlnaHRNYXRjaGVzID09IEhpZ2hsaWdodE1hdGNoZXMp
OwotICAgICAgICBtYXRjaENvdW50ICs9IGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JU
ZXh0KHRhcmdldCwgMCwgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCA/IChtYXhNYXRjaENvdW50IC0g
bWF0Y2hDb3VudCkgOiAwLCBzaG91bGRNYXJrTWF0Y2hlcyA9PSBNYXJrTWF0Y2hlcywgMCk7Cisg
ICAgICAgIG1hdGNoQ291bnQgKz0gZnJhbWUtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQo
dGFyZ2V0LCBXVEY6Om51bGxvcHQsIG9wdGlvbnMsIG1heE1hdGNoQ291bnQgPyAobWF4TWF0Y2hD
b3VudCAtIG1hdGNoQ291bnQpIDogMCwgc2hvdWxkTWFya01hdGNoZXMgPT0gTWFya01hdGNoZXMs
IG51bGxwdHIpOwogICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBD
YW5XcmFwOjpObyk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKaW5kZXggYzJmYTZjODE0YzRiMGViNmNjYmJlY2YxMDk2OTBiNWE2MDI2NGRh
Yy4uNDZhYWI4MDkzZTQ3ZWJiNmU0NmQwMjU2NTQ1ZmQwYTM3YzQ1MmNjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjYxNyw3ICsyNjE3LDcgQEAgRXhjZXB0aW9uT3I8
UmVmUHRyPFJhbmdlPj4gSW50ZXJuYWxzOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4
dCwgUmVmUHRyPFIKICAgICBpZiAocGFyc2VkT3B0aW9ucy5oYXNFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIHBhcnNlZE9wdGlvbnMucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgcmV0dXJu
IGRvY3VtZW50LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRleHQsIHJlZmVyZW5jZVJhbmdlLmdl
dCgpLCBwYXJzZWRPcHRpb25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICByZXR1cm4gY3Jl
YXRlTGl2ZVJhbmdlKGRvY3VtZW50LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHRleHQsIG1ha2VS
YW5nZShyZWZlcmVuY2VSYW5nZSksIHBhcnNlZE9wdGlvbnMucmVsZWFzZVJldHVyblZhbHVlKCkp
KTsKIH0KIAogRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6Y291bnRNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaW5kT3B0aW9u
cywgY29uc3QgU3RyaW5nJiBtYXJrTWF0Y2hlcykKQEAgLTI2MzEsNyArMjYzMSw3IEBAIEV4Y2Vw
dGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBWCiAgICAgICAgIHJldHVybiBwYXJzZWRPcHRpb25zLnJlbGVhc2VF
eGNlcHRpb24oKTsKIAogICAgIGJvb2wgbWFyayA9IG1hcmtNYXRjaGVzID09ICJtYXJrIjsKLSAg
ICByZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigpLmNvdW50TWF0Y2hlc0ZvclRleHQodGV4dCwgbnVs
bHB0ciwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgMTAwMCwgbWFyaywgbnVs
bHB0cik7CisgICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0
KHRleHQsIFdURjo6bnVsbG9wdCwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJuVmFsdWUoKSwg
MTAwMCwgbWFyaywgbnVsbHB0cik7CiB9CiAKIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5h
bHM6OmNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZmluZE9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tQcmludGluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmlu
dGluZ1ZpZXcubW0KaW5kZXggYjJkYWRjNjk3NDA1ZDY5MTFjNmMyOTUyYjdjOWQ0NGZmZmU1YWQ0
MS4uMmIwNDIyMjRmMzljODE2MjhhOGY4ZGZmOTVhZGRhOGI5NjlhMTEyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQpAQCAtNjYzLDcgKzY2Myw3
IEBAIC0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKICAgICAgICAgTE9HKFBy
aW50aW5nLCAiLVtXS1ByaW50aW5nVmlldyAlcCByZWN0Rm9yUGFnZTolZF0gLSBkYXRhIGlzIG5v
dCB5ZXQgYXZhaWxhYmxlIiwgc2VsZiwgKGludClwYWdlKTsKICAgICAgICAgaWYgKCFfd2ViRnJh
bWUtPnBhZ2UoKSkgewogICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgbm90IHRvbGQgQXBwS2l0
IGhvdyBtYW55IHBhZ2VzIHRoZXJlIGFyZSwgc28gaXQgd2lsbCB0cnkgdG8gcHJpbnQgdW50aWwg
YSBudWxsIHJlY3QgaXMgcmV0dXJuZWQuCi0gICAgICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgw
LCAwLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBOU1plcm9SZWN0OwogICAgICAgICB9CiAg
ICAgICAgIC8vIFdlIG11c3QgYmUgc3RpbGwgY2FsY3VsYXRpbmcgdGhlIHBhZ2UgcmFuZ2UuCiAg
ICAgICAgIEFTU0VSVChfZXhwZWN0ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2spOwpAQCAtNjc0LDcg
KzY3NCw3IEBAIC0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKICAgICAvLyBS
ZXR1cm5pbmcgYSBudWxsIHJlY3QgcHJldmVudHMgc2VsZWN0aW5nIG5vbi1leGlzdGVudCBwYWdl
cyBpbiBwcmV2aWV3IGRpYWxvZy4KICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBhZ2Up
ID4gX3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSkgewogICAgICAgICBBU1NFUlQoIV93ZWJGcmFt
ZS0+cGFnZSgpKTsKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAg
ICAgIHJldHVybiBOU1plcm9SZWN0OwogICAgIH0KIAogICAgIFdlYkNvcmU6OkludFJlY3QgcmVj
dCA9IF9wcmludGluZ1BhZ2VSZWN0c1twYWdlIC0gMV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmlu
ZGV4IDc5YTM3NDAwYzNmNDE1OGJmNDI4ZjY5NDJiYzg4NmYxYWNkMjIwM2QuLmRkOWMzNTI2MDVm
MDhmMzk0MGQ5MDBkOGYwMjY1MjQ3ZTA0YmEzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBA
IC03NCwxMSArNzQsOSBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1
ZXN0SUQoKQogICAgIHJldHVybiB1bmlxdWVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQrKzsKIH0KIAot
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkKK2Jv
b2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJhbmdlKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKCptX3BhZ2UsIHJhbmdlKTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGREZWxldGVSYW5nZSgqbV9wYWdl
LCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC0xMTQsNTAgKzExMiwzNyBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKIGludCBXZWJFZGl0b3JD
bGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAg
ICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91
bGRCZWdpbkVkaXRpbmcoKm1fcGFnZSwgcmFuZ2UpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLnNob3VsZEJlZ2luRWRpdGluZygqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2UpLnB0cigpKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmco
UmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmpl
Y3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1fcGFnZSwgcmFuZ2Up
OwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEVuZEVkaXRpbmcoKm1f
cGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7CiB9CiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUqIG5vZGUsIFJhbmdlKiByYW5nZVRvUmVwbGFj
ZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgYm9vbCByZXN1
bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0Tm9k
ZSgqbV9wYWdlLCBub2RlLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJbnNlcnROb2RlKCptX3BhZ2UsICZub2RlLCBjcmVh
dGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLmdldCgpLCBhY3Rpb24pOwogfQogCi1ib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFJhbmdl
KiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFj
dGlvbikKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5zaG91bGRJbnNlcnRUZXh0KCptX3BhZ2UsIHRleHQuaW1wbCgpLCByYW5nZVRvUmVw
bGFjZSwgYWN0aW9uKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRJ
bnNlcnRUZXh0KCptX3BhZ2UsIHRleHQuaW1wbCgpLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1Jl
cGxhY2UpLmdldCgpLCBhY3Rpb24pOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFm
ZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQorYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmlu
aXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewotICAgIGJvb2wgcmVzdWx0ID0g
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoKm1fcGFnZSwgZnJvbVJhbmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKGZyb21SYW5nZSkuZ2V0KCksIGNyZWF0
ZUxpdmVSYW5nZSh0b1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0K
ICAgICAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRB
cHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11
dGFibGVTdHlsZShzdHlsZS0+aXNNdXRhYmxlKCkgPyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4oc3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydGllcyY+KCpzdHlsZSkpIDogc3R5bGUt
Pm11dGFibGVDb3B5KCkpOwotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRs
ZUVkaXRvckNsaWVudCgpLnNob3VsZEFwcGx5U3R5bGUoKm1fcGFnZSwgJm11dGFibGVTdHlsZS0+
ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
RWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHlsZSgqbV9wYWdlLCAmc3R5bGUubXV0YWJsZUNv
cHkoKS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LmdldCgpKTsKIH0KIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0yMTEsOSAr
MTk2LDggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEFwcGx5U3R5bGUoKQogICAgIG1fcGFn
ZS0+ZGlkQXBwbHlTdHlsZSgpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92
ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopCitib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1w
bGVSYW5nZSYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjIyLDcgKzIwNiw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRp
bmcoKQogICAgIC8vIEZJWE1FOiBXaGF0IGdvb2QgaXMgYSBub3RpZmljYXRpb24gbmFtZSwgaWYg
aXQncyBhbHdheXMgdGhlIHNhbWU/CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
V2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgiV2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbiIpKTsKICAgICBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZGlkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIFdlYlZp
ZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24uZ2V0KCkuaW1wbCgpKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZENv
bnRlbnRzKCkKQEAgLTI3NSw3ICsyNTgsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkRW5k
RWRpdGluZygpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0Rp
ZEVuZEVkaXRpbmdOb3RpZmljYXRpb24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIldlYlZpZXdE
aWRFbmRFZGl0aW5nTm90aWZpY2F0aW9uIikpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQoKS5kaWRFbmRFZGl0aW5nKCptX3BhZ2UsIFdlYlZpZXdEaWRFbmRFZGl0aW5n
Tm90aWZpY2F0aW9uLmdldCgpLmltcGwoKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAog
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKQEAg
LTI4MywxOSArMjY1LDE5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCgpCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LmRpZFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2UpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVu
dDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKiByYW5nZSkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJkKCptX3BhZ2UsIHJhbmdlKTsKKyAgICBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkud2lsbFdyaXRlVG9QYXN0ZWJvYXJk
KCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYkVk
aXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShSYW5nZSogcmFuZ2Us
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVm
ZmVyPj4mIHBhc3RlYm9hcmREYXRhKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBh
c3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKQogewotICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQo
KS5nZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKCptX3BhZ2UsIHJhbmdlLCBwYXN0ZWJvYXJkVHlw
ZXMsIHBhc3RlYm9hcmREYXRhKTsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkVHlwZXMsIHBhc3RlYm9hcmREYXRhKTsKIH0KIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBm
cmFnbWVudCwgUmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKK2Jvb2wgV2ViRWRpdG9y
Q2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNv
bnN0IFNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpCiB7Ci0gICAgcmV0dXJu
IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5wZXJmb3JtVHdvU3RlcERyb3Ao
Km1fcGFnZSwgZnJhZ21lbnQsIGRlc3RpbmF0aW9uLCBpc01vdmUpOworICAgIHJldHVybiBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCptX3Bh
Z2UsIGZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoZGVzdGluYXRpb24pLCBpc01vdmUpOwogfQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3RlcCYgc3RlcCkK
QEAgLTQyNSwxMiArNDA3LDEwIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdl
SW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50KQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6b3Zl
cmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzdWJGcmFtZVNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogI2VuZGlmCkBAIC02MTgsNyArNTk4LDYg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdGUoRWxlbWVudCogZWxl
bWVudCkKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICBtX3BhZ2UtPnNl
dElucHV0TWV0aG9kU3RhdGUoZWxlbWVudCk7CiAjZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgK
aW5kZXggMGRmNzc1OWUxYjgyZGQ0MDNjZmRhOGNhNzMwOTllYmM2ZGRkODA4Yy4uMjNlMzk0ZjI3
ZWMzMjY5Mjc4YzQ1YjhlMTQ0ZDM2ZGM3YzdiZmQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAt
NDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxk
RGVsZXRlUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0
ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAg
IGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgZmluYWw7CiAgICAgYm9vbCBpc1NlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgZmluYWw7CkBAIC01NCwxNSArNTQsMTUgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpIGZpbmFsOwogICAgIGlu
dCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxk
QmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRF
ZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2Rl
KFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFdl
YkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBi
b29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwg
V2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNl
bGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3Qg
V2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUo
V2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFdl
YkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnRU
ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYs
IFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJv
bVJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdl
YkNvcmU6OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CiAgICAgCi0gICAg
Ym9vbCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyosIFdlYkNvcmU6
OlJhbmdlKikgZmluYWw7CisgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYkNvcmU6
OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYp
IGZpbmFsOwogICAgIHZvaWQgZGlkQXBwbHlTdHlsZSgpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSopIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6
U2ltcGxlUmFuZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOwogCiAjaWYg
RU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3Qg
U3RyaW5nJiBwcmVmZXJyZWRGaWxlTmFtZSwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJikg
ZmluYWw7CkBAIC04NSw5ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5jZWxlZENvbXBv
c2l0aW9uKCkgZmluYWw7CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZpbmFsOwog
ICAgIHZvaWQgZGlkRW5kRWRpdGluZygpIGZpbmFsOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgdm9pZCB3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+JikgZmluYWw7CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZp
bmFsOwotICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpS
YW5nZSosIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdl
dENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdl
PiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKICAgICAKICAgICB2b2lk
IHJlZ2lzdGVyVW5kb1N0ZXAoV2ViQ29yZTo6VW5kb1N0ZXAmKSBmaW5hbDsKICAgICB2b2lkIHJl
Z2lzdGVyUmVkb1N0ZXAoV2ViQ29yZTo6VW5kb1N0ZXAmKSBmaW5hbDsKQEAgLTE5MSw3ICsxOTEs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NQYXNzd29yZEVjaG8oKSBjb25z
dCBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6
RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiwgYm9vbCBpc01vdmUpIGZpbmFsOwor
ICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBj
b25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYsIGJvb2wgaXNNb3ZlKSBmaW5hbDsKICAgICBib29s
IHN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkgZmluYWw7CiAKICAgICBib29sIGNhblNob3dGb250
UGFuZWwoKSBjb25zdCBmaW5hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAppbmRleCBhZGE1MmNkZDc5NzExYTgyM2U5Y2EzMmQyZWVlMGM4ZjA4MGQ4Njhi
Li5lZDdkNTAxNzA5NWM1MDJjMTRmZjBmOTViNmEwNDVkOTY4MzY4MzM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQyNiw0MyArNTQyNiwz
NiBAQCB2b2lkIFdlYlBhZ2U6Omhhc01hcmtlZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2VB
c3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0
aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5n
ZSgpLmdldCgpKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihlZGl0aW5nUmFuZ2UpOworICAgIGNv
bXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZl
UmFuZ2UoZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKS5nZXQoKSkpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IEVkaXRpbmdSYW5nZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1l
JiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7
Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwg
Y3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihlZGl0aW5nUmFuZ2UpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVh
dGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50
QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiB7CiAgICAgY29uc3RleHByIE9wdGlvblNldDxIaXRUZXN0UmVxdWVzdDo6UmVxdWVzdFR5
cGU+IGhpdFR5cGUgeyBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksIEhpdFRlc3RSZXF1ZXN0OjpB
Y3RpdmUsIEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQsICBI
aXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9OwotICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVz
dWx0QXRQb2ludChwb2ludCwgaGl0VHlwZSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9kZUZyYW1lKCkgOiAmbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICAKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5kZWRQb2ludElu
SW5uZXJOb2RlRnJhbWUoKSk7Ci0gICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6
OmZyb21SYW5nZSgqZnJhbWUsIHJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQs
IGhpdFR5cGUpOworICAgIGF1dG8mIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
ID8gKnJlc3VsdC5pbm5lck5vZGVGcmFtZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2lu
dChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKTsKKyAgICBhdXRvIGVkaXRp
bmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZS5nZXQoKSk7CiAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihlZGl0aW5nUmFuZ2UubG9jYXRpb24pLCBjYWxsYmFja0lEKSk7CiB9CiAK
IHZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0
aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIEZy
YW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7Ci0gICAgSW50UmVjdCByZXN1bHQoSW50UG9pbnQoMCwgMCksIEludFNpemUoMCwgMCkpOwot
ICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJh
bWUsIGVkaXRpbmdSYW5nZSk7CisgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBFZGl0aW5nUmFu
Z2U6OnRvUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7CiAgICAgaWYgKCFyYW5nZSkgewotICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNh
bGxiYWNrKHJlc3VsdCwgRWRpdGluZ1JhbmdlKG5vdEZvdW5kLCAwKSwgY2FsbGJhY2tJRCkpOwor
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZUNhbGxiYWNrKHsgfSwgeyB9LCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KLSAgICByZXN1bHQgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWUuZWRp
dG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpKTsKLQotICAgIC8vIEZJWE1FOiBV
cGRhdGUgYWN0dWFsUmFuZ2UgdG8gbWF0Y2ggdGhlIHJhbmdlIG9mIGZpcnN0IHJlY3QuCi0gICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFj
ayhyZXN1bHQsIGVkaXRpbmdSYW5nZSwgY2FsbGJhY2tJRCkpOworICAgIC8vIEZJWE1FOiBQYXNz
IGFuIEVkaXRpbmdSYW5nZSB0aGF0IG1hdGNoZXMgdGhlIHJhbmdlIG9mIHRoZSBmaXJzdCByZWN0
LCByYXRoZXIgdGhhbiB0aGUgZW50aXJlIHBhc3NlZC1pbiByYW5nZT8KKyAgICBhdXRvIHJlY3Qg
PSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0
Rm9yUmFuZ2UoKnJhbmdlKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhyZWN0LCBlZGl0aW5nUmFuZ2UsIGNhbGxiYWNrSUQp
KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgY29u
c3QgVmVjdG9yPENvbXBvc2l0aW9uSGlnaGxpZ2h0PiYgaGlnaGxpZ2h0cywgY29uc3QgRWRpdGlu
Z1JhbmdlJiBzZWxlY3Rpb24sIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRFZGl0aW5n
UmFuZ2UpCkBAIC01NDcwLDE1ICs1NDYzLDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRp
b25Bc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuCiAg
ICAgcGxhdGZvcm1XaWxsUGVyZm9ybUVkaXRpbmdDb21tYW5kKCk7CiAKICAgICBhdXRvJiBmcmFt
ZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0KICAg
ICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkg
ewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2U7CiAgICAgICAgIGlmIChy
ZXBsYWNlbWVudEVkaXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICAg
ICAgcmVwbGFjZW1lbnRSYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgcmVwbGFj
ZW1lbnRFZGl0aW5nUmFuZ2UpOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCisg
ICAgICAgICAgICBpZiAoYXV0byByZXBsYWNlbWVudFJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1Jh
bmdlKGZyYW1lLCByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlcGxhY2VtZW50
UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgIH0KLQogICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBoaWdobGlnaHRzLCBz
ZWxlY3Rpb24ubG9jYXRpb24sIHNlbGVjdGlvbi5sb2NhdGlvbiArIHNlbGVjdGlvbi5sZW5ndGgp
OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2dsaWIvV2ViUGFnZUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z2xpYi9XZWJQYWdlR0xpYi5jcHAKaW5kZXggNGM1MDBlMzY2OGEzMjEyM2I5ZTI0YjI3OGRhYWIw
NzQ1NzNmZmEzMC4uNDY5MjU1M2EwYTgwOWRkM2Y3MDM5NTNlMzU4ZGYzMzQ2MjJlYzU5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xp
Yi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdl
R0xpYi5jcHAKQEAgLTEwOSwxMCArMTA5LDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1F
ZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAg
ICAgIGF1dG8gc3Vycm91bmRpbmdFbmQgPSBlbmRPZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25T
dGFydCk7CiAgICAgICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5nZShzdXJyb3Vu
ZGluZ1N0YXJ0LCBzdXJyb3VuZGluZ0VuZCk7CiAgICAgICAgIGF1dG8gY29tcG9zaXRpb25SYW5n
ZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICAgICAgaWYgKGNvbXBv
c2l0aW9uUmFuZ2UgJiYgc3Vycm91bmRpbmdSYW5nZSAmJiBzdXJyb3VuZGluZ1JhbmdlLT5jb250
YWlucygqY29tcG9zaXRpb25SYW5nZSkpIHsKKyAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2Ug
JiYgc3Vycm91bmRpbmdSYW5nZSAmJiBzdXJyb3VuZGluZ1JhbmdlLT5jb250YWlucyhjcmVhdGVM
aXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLmdldCgpKSkgewogICAgICAgICAgICAgYXV0byBj
bG9uZWRSYW5nZSA9IHN1cnJvdW5kaW5nUmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAgICAgICAgICAg
IHN1cnJvdW5kaW5nUmFuZ2UtPnNldEVuZChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpOwotICAgICAgICAgICAgY2xvbmVkUmFuZ2UtPnNldFN0YXJ0KGNvbXBvc2l0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCkpOworICAgICAgICAgICAgc3Vycm91bmRpbmdSYW5nZS0+c2V0RW5kKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCkpOworICAg
ICAgICAgICAgY2xvbmVkUmFuZ2UtPnNldFN0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihjb21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1
cnJvdW5kaW5nQ29udGV4dCA9IHBsYWluVGV4dCgqc3Vycm91bmRpbmdSYW5nZSkgKyBwbGFpblRl
eHQoY2xvbmVkUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdD
b250ZXh0Q3Vyc29yUG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCgqc3Vycm91bmRpbmdSYW5nZSk7
CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Q
b3NpdGlvbiA9IHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCBkOWM2YzRhNWM4YTZmMmI0MjVmMTIyMDhlNDMzYzU0YzliMDhmNGY3Li45NGE2
NzUwYTM4Y2RjZDQ1ZjJhMmZkNDdkN2MzNzhlMzQ0NmMxZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjY3LDEwICsy
NjcsMTAgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFt
ZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKIAogICAgIGlmIChmcmFtZS5lZGl0b3IoKS5o
YXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBm
cmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBvc2l0
aW9uUmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0
UmVjdHMpOworICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS0+
Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CiAg
ICAgICAgICAgICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cyh2aWV3LCBw
b3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOwogCi0gICAgICAgICAgICBwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChjb21wb3NpdGlvblJhbmdlLmdl
dCgpKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHQgPSBwbGFpblRleHRG
b3JDb250ZXh0KCpjb21wb3NpdGlvblJhbmdlKTsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gY29tcG9zaXRpb25TZWxlY3Rpb24oKmNvbXBvc2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAg
cG9zdExheW91dERhdGEubWFya2VkVGV4dENhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50
c1RvUm9vdFZpZXcoY29tcG9zaXRpb25TZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkuYWJzb2x1dGVD
YXJldEJvdW5kcyhudWxscHRyIC8qIGluc2lkZUZpeGVkICovKSk7CiAgICAgICAgICAgICBwb3N0
TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcoY29tcG9zaXRpb25TZWxlY3Rpb24udmlzaWJsZUVuZCgpLmFic29sdXRlQ2FyZXRCb3Vu
ZHMobnVsbHB0ciAvKiBpbnNpZGVGaXhlZCAqLykpOwpAQCAtMTM3NywxMyArMTM3NywxNSBAQCB2
b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2Vz
dHVyZVR5cGUgZ2VzdHVyZVR5cGUsCiAgICAgewogICAgICAgICBpZiAoIWZyYW1lLmVkaXRvcigp
Lmhhc0NvbXBvc2l0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgUmVmUHRyPFJh
bmdlPiBtYXJrZWRSYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAg
ICAgICAgaWYgKHBvc2l0aW9uIDwgbWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAg
ICAgICAgIHBvc2l0aW9uID0gbWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAg
aWYgKHBvc2l0aW9uID4gbWFya2VkUmFuZ2UtPmVuZFBvc2l0aW9uKCkpCi0gICAgICAgICAgICBw
b3NpdGlvbiA9IG1hcmtlZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBhdXRvIG1hcmtl
ZFJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgICAgICBhdXRv
IHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFya2VkUmFuZ2Ut
PnN0YXJ0KTsKKyAgICAgICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihtYXJrZWRSYW5nZS0+ZW5kKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQ
b3NpdGlvbikKKyAgICAgICAgICAgIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAg
aWYgKHBvc2l0aW9uID4gZW5kUG9zaXRpb24pCisgICAgICAgICAgICBwb3NpdGlvbiA9IGVuZFBv
c2l0aW9uOwogICAgICAgICBpZiAod2tHZXN0dXJlU3RhdGUgIT0gR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZTo6QmVnYW4pCi0gICAgICAgICAgICBmbGFncyA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9u
cyhtYXJrZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpKSAhPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMobWFya2VkUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9u
U2V0PFNlbGVjdGlvbkZsYWdzPiB7IH07CisgICAgICAgICAgICBmbGFncyA9IGRpc3RhbmNlQmV0
d2VlblBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpKSAhPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgcG9z
aXRpb24pID8gUGhyYXNlQm91bmRhcnlDaGFuZ2VkIDogT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdz
PiB7IH07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZsYWdzID0gUGhyYXNlQm91bmRhcnlD
aGFuZ2VkOwogICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHBvc2l0aW9uLCBwb3NpdGlvbik7CkBAIC0yNDgzLDcgKzI0ODUsNiBAQCBXZWJBdXRvY29ycmVj
dGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICBFZGl0aW5n
UmFuZ2UgbWFya2VkVGV4dFJhbmdlOwogCiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2U7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgIGNvbnN0IHVuc2lnbmVk
IG1pbkNvbnRleHRXb3JkQ291bnQgPSAzOwpAQCAtMjQ5NCwxNCArMjQ5NSwxMiBAQCBXZWJBdXRv
Y29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICAg
ICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBvc2l0
aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBjb21wb3NpdGlvblJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIHN0YXJ0UG9zaXRpb24pOwogICAgICAgICBTdHJpbmcgbWFya2Vk
VGV4dEJlZm9yZTsKLSAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgbWFya2VkVGV4dEJl
Zm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOwotICAgICAgICByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGVuZFBvc2l0aW9uLCBjb21wb3NpdGlv
blJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSkKKyAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUg
PSBwbGFpblRleHRGb3JDb250ZXh0KHsgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQsICpzdGFydCB9
KTsKICAgICAgICAgU3RyaW5nIG1hcmtlZFRleHRBZnRlcjsKLSAgICAgICAgaWYgKHJhbmdlKQot
ICAgICAgICAgICAgbWFya2VkVGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChyYW5nZS5n
ZXQoKSk7CisgICAgICAgIGlmIChhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0
aW9uKSkKKyAgICAgICAgICAgIG1hcmtlZFRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQo
eyAqZW5kLCBjb21wb3NpdGlvblJhbmdlLT5lbmQgfSk7CiAgICAgICAgIG1hcmtlZFRleHQgPSBt
YXJrZWRUZXh0QmVmb3JlICsgc2VsZWN0ZWRUZXh0ICsgbWFya2VkVGV4dEFmdGVyOwogICAgICAg
ICBpZiAoIW1hcmtlZFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtYXJrZWRUZXh0UmFu
Z2UubG9jYXRpb24gPSBtYXJrZWRUZXh0QmVmb3JlLmxlbmd0aCgpOwpAQCAtMjYxNywxNCArMjYx
NiwxNiBAQCBzdGF0aWMgdm9pZCBmb2N1c2VkRWxlbWVudFBvc2l0aW9uSW5mb3JtYXRpb24oV2Vi
UGFnZSYgcGFnZSwgRWxlbWVudCYgZm9jdXNlZEVsZQogICAgIEludFBvaW50IGNvbnN0cmFpbmVk
UG9pbnQgPSBjb25zdHJhaW5Qb2ludChhZGp1c3RlZFBvaW50LCBmcmFtZSwgZm9jdXNlZEVsZW1l
bnQpOwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGNvbnN0cmFpbmVkUG9pbnQpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBjb21wb3Np
dGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGF1dG8g
Y29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAg
ICBpZiAoIWNvbXBvc2l0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwb3Np
dGlvbiA8IGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKLSAgICAgICAgcG9zaXRp
b24gPSBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgZWxzZSBpZiAocG9z
aXRpb24gPiBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpKQotICAgICAgICBwb3NpdGlv
biA9IGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgYXV0byBzdGFydFBvc2l0
aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0
KTsKKyAgICBhdXRvIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNv
bXBvc2l0aW9uUmFuZ2UtPmVuZCk7CisgICAgaWYgKHBvc2l0aW9uIDwgc3RhcnRQb3NpdGlvbikK
KyAgICAgICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIGVsc2UgaWYgKHBvc2l0aW9u
ID4gZW5kUG9zaXRpb24pCisgICAgICAgIHBvc2l0aW9uID0gZW5kUG9zaXRpb247CiAgICAgSW50
UmVjdCBjYXJldFJlY3QgPSB2aWV3LmNvbnRlbnRzVG9Sb290Vmlldyhwb3NpdGlvbi5hYnNvbHV0
ZUNhcmV0Qm91bmRzKCkpOwogICAgIGZsb2F0IGRlbHRhWCA9IGFicyhjYXJldFJlY3QueCgpICsg
KGNhcmV0UmVjdC53aWR0aCgpIC8gMikgLSByZXF1ZXN0LnBvaW50LngoKSk7CiAgICAgZmxvYXQg
ZGVsdGFZRnJvbVRoZVRvcCA9IGFicyhjYXJldFJlY3QueSgpIC0gcmVxdWVzdC5wb2ludC55KCkp
OwpAQCAtNDI1NSw4ICs0MjU2LDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0
aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAg
aWYgKHdhbnRzTWFya2VkVGV4dFJlY3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAg
ICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBtYXJrZWQg
dGV4dCByZWN0cyBtYWtlIHN1cmUgdGhhdCB0aGUgY29udGV4dAogICAgICAgICAgICAgLy8gcmFu
Z2UgZW5jb21wYXNzZXMgdGhlIGVudGlyZSBtYXJrZWQgdGV4dCByYW5nZSBzbyB0aGF0IHdlIGRv
bid0IHJldHVybiBhIHRydW5jYXRlZCByZXN1bHQuCi0gICAgICAgICAgICBhdXRvIGNvbXBvc2l0
aW9uU3RhcnQgPSBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgICAg
ICBhdXRvIGNvbXBvc2l0aW9uRW5kID0gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKTsK
KyAgICAgICAgICAgIGF1dG8gY29tcG9zaXRpb25TdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5zdGFydCk7CisgICAgICAgICAgICBhdXRvIGNvbXBv
c2l0aW9uRW5kID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2Ut
PmVuZCk7CiAgICAgICAgICAgICBpZiAoY29udGV4dEJlZm9yZVN0YXJ0ID4gY29tcG9zaXRpb25T
dGFydCkKICAgICAgICAgICAgICAgICBjb250ZXh0QmVmb3JlU3RhcnQgPSBjb21wb3NpdGlvblN0
YXJ0OwogICAgICAgICAgICAgaWYgKGNvbnRleHRBZnRlckVuZCA8IGNvbXBvc2l0aW9uRW5kKQpA
QCAtNDI3Niw5ICs0Mjc3LDkgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5n
Q29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBjb250ZXh0
LmNvbnRleHRCZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJh
bmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IG1h
a2VTdHJpbmcoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBlbmRPZlJhbmdlT2ZJ
bnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LmNvbnRleHRBZnRlciA9IG1ha2VTdHJp
bmcoZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29udGV4dEFmdGVyRW5kKTsKLSAg
ICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5n
ZXQoKSwgY29tcG9zaXRpb25SYW5nZS5nZXQoKSkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGNvbXBvc2l0aW9uU3RhcnQoY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKGNvbXBvc2l0aW9uUmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpOworICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAo
cmFuZ2VPZkludGVyZXN0LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2Up
LnB0cigpKSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjb21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0
ID0gbWFrZVN0cmluZyhjb21wb3NpdGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CiAgICAgICAg
IGNvbnRleHQuc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sb2NhdGlvbiA9IGRpc3RhbmNlQmV0
d2VlblBvc2l0aW9ucyhzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGNvbXBvc2l0
aW9uU3RhcnQpOwogICAgICAgICBjb250ZXh0LnNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQubGVu
Z3RoID0gW2NvbnRleHQuc2VsZWN0ZWRUZXh0LnN0cmluZyBsZW5ndGhdOwpAQCAtNDMwNSwxMCAr
NDMwNiw4IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9j
dW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgICAgICBjb250ZXh0LnRl
eHRSZWN0cyA9IGNoYXJhY3RlclJlY3RzRm9yUmFuZ2UoKmNvbnRleHRSYW5nZSwgMCk7CiAgICAg
fSBlbHNlIGlmICh3YW50c01hcmtlZFRleHRSZWN0cyAmJiBjb21wb3NpdGlvblJhbmdlKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBpZiAo
YXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1
aXZhbGVudCgpKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQoY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKSkKLSAgICAgICAgICAgICAgICBj
b21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gV2ViQ29yZTo6cGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsg
V1RGTW92ZSgqc3RhcnQpLCBXVEZNb3ZlKCplbmQpIH0pLmxlbmd0aCgpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0
YXJ0LmRlZXBFcXVpdmFsZW50KCkpKQorICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNl
dCA9IFdlYkNvcmU6OnBsYWluVGV4dCh7IFdURk1vdmUoKnN0YXJ0KSwgY29tcG9zaXRpb25SYW5n
ZS0+c3RhcnQgfSkubGVuZ3RoKCk7CiAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFj
dGVyUmVjdHNGb3JSYW5nZSgqY29tcG9zaXRpb25SYW5nZSwgY29tcG9zaXRpb25TdGFydE9mZnNl
dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4IDhkNmM0ODc5MWQ0N2RmOTRlZjlhMjEzOGIzODIz
NTQwMDM1YmEwNGMuLmVjY2ZiNTAxZTZlYzMyMTg3NmEwNmE0MDQyZmRiOTNjMTgwNmQ4YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lSU9TLm1tCkBAIC0xNDAsNyArMTQwLDcgQEAgLSAoQ0dSZWN0KWNsb3Nlc3RDYXJldFJlY3RJ
bk1hcmtlZFRleHRSYW5nZUZvclBvaW50OihDR1BvaW50KXBvaW50CiAKICAgICBkb2N1bWVudC0+
dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBhdXRvIG1hcmtlZFRleHRSYW5nZSA9IGZyYW1lLT5lZGl0
b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7CisgICAgYXV0byBtYXJrZWRUZXh0UmFuZ2Ug
PSBmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGF1dG8gbWFya2VkVGV4
dFJhbmdlU2VsZWN0aW9uID0gbWFya2VkVGV4dFJhbmdlID8gVmlzaWJsZVNlbGVjdGlvbigqbWFy
a2VkVGV4dFJhbmdlKSA6IFZpc2libGVTZWxlY3Rpb24oKTsKIAogICAgIGlmICghbWFya2VkVGV4
dFJhbmdlU2VsZWN0aW9uLmlzUmFuZ2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01S
YW5nZS5tbQppbmRleCBhMGI2Yjc5NmEzYTgyNzlkODg0YzY0NzMwMTUzOTEzNDUwNzE2MGQ4Li5k
MGQzMGNlOWE4MWI3MThiOWFjMjI4MDM0ZWIwNTcxNTk5ZWRkNzEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCkBAIC0zMDksNCArMzA5LDkgQEAgRE9NUmFuZ2UgKmtp
dChXZWJDb3JlOjpSYW5nZSogdmFsdWUpCiAgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNl
XTsKIH0KIAorRE9NUmFuZ2UgKmtpdChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mIHZhbHVlKQoreworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHZhbHVlKS5nZXQo
KSk7Cit9CisKICN1bmRlZiBJTVBMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVJhbmdlSW50ZXJuYWwuaAppbmRleCBhZjU1OTMyNzA5MzE2NDViYTcyYWUxYTE5OTFhZWQ5MTUw
OWRmY2Q3Li5lNjgxOWE1ZjhkNTg4ZDJlOWI2ODdmMGQ5NzlmNjdjYjIzYTg5YTE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKQEAgLTIzLDEx
ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxl
UmFuZ2UuaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01SYW5nZS5oPgogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBSYW5nZTsKLX0KLQogV2ViQ29yZTo6UmFuZ2UqIGNvcmUoRE9NUmFu
Z2UgKik7CiBET01SYW5nZSAqa2l0KFdlYkNvcmU6OlJhbmdlKik7CitET01SYW5nZSAqa2l0KGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRl
eCBlMWI0MmVhNmQyZmJlZmUzYTFlZGYxMTMyMmM2ZDVlOGIzMDNmZjQ1Li42ZjA4ZmFhYTk1MzVj
NGFiOTc1ZjI3YjdjYmY0MjU3Njk1ZjhiNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtNjMsMjQg
KzYzLDI0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSBm
aW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0
IGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJD
b3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpS
YW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiwg
V2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAg
IGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIFdl
YkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0
b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwor
ICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikg
ZmluYWw7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUmLCBj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcm
LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJ
bnNlcnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxl
KFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlk
QXBwbHlTdHlsZSgpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OlJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCkgZmlu
YWw7CisgICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3JlOjpT
aW1wbGVSYW5nZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNl
ZCkgZmluYWw7CiAKICAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFsOwogICAgIHZvaWQg
ZGlkRW5kRWRpdGluZygpIGZpbmFsOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmlu
YWw7CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsOwotICAg
IHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZl
Y3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdldENsaWVudFBh
c3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKSBmaW5hbDsKIAogICAgIHZvaWQgc2V0SW5zZXJ0aW9u
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBXZWJDb3JlOjpET01QYXN0ZUFj
Y2Vzc1Jlc3BvbnNlIHJlcXVlc3RET01QYXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmKSBmaW5hbCB7
IHJldHVybiBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JHZXN0dXJl
OyB9CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFN1cHByZXNz
UGFzc3dvcmRFY2hvKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAotICAgIGJvb2wgcGVyZm9ybVR3
b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5nZSYgZGVz
dGluYXRpb24sIGJvb2wgaXNNb3ZlKSBmaW5hbDsKKyAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJv
cChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2Um
IGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7CiAgICAgCiAgICAgYm9vbCBzaG91bGRF
cmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBl
KSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3Qg
U3RyaW5nJikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggOWFiMWMyOWQ0ODc4NzdkNmU4
NTgzOWY5ZDVmNGM4OTA2OTgxMjliMi4uYmQ5NWE2NjQ4YTMwMzJjMDU3YTk4MWUwOTQ2OTA4MGU4
ODEwNjM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMjM0LDEwICsyMzQsOSBAQCBpbnQgV2Vi
RWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAKICNlbmRpZgogCi1ib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVG
b3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3Ci0gICAgICAgIHNob3VsZERlbGV0ZURPTVJhbmdl
OmtpdChyYW5nZSldOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGREZWxldGVET01SYW5nZTpraXQocmFuZ2Up
XTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgp
CkBAIC0yNTYsMTEgKzI1NSwxMSBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6aXNTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3Mo
KS5zZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiBy
YW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxl
UHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7
Ci0gICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZShzdHlsZS0+aXNN
dXRhYmxlKCkgPyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4oc3RhdGljX2Nhc3Q8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcyY+KCpzdHlsZSkpIDogc3R5bGUtPm11dGFibGVDb3B5KCkpOwogICAg
IHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1f
d2ViVmlldwotICAgICAgICBzaG91bGRBcHBseVN0eWxlOmtpdCgmbXV0YWJsZVN0eWxlLT5lbnN1
cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkpIHRvRWxlbWVudHNJbkRPTVJhbmdlOmtpdChyYW5nZSld
OworICAgICAgICBzaG91bGRBcHBseVN0eWxlOmtpdCgmc3R5bGUubXV0YWJsZUNvcHkoKS0+ZW5z
dXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKQorICAgICAgICB0b0VsZW1lbnRzSW5ET01SYW5nZTpr
aXQocmFuZ2UpXTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlRm9udFBhbmVsKFdlYlZpZXcgKndl
YlZpZXcpCkBAIC0yNzksMzMgKzI3OCwyOSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQXBw
bHlTdHlsZSgpCiAgICAgdXBkYXRlRm9udFBhbmVsKG1fd2ViVmlldyk7CiB9CiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSogcmFuZ2UsIFJh
bmdlKiByYW5nZVRvQmVSZXBsYWNlZCkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZVRvQmVSZXBsYWNlZCkKIHsKICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRp
bmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKICAgICAgICAgc2hvdWxkTW92
ZVJhbmdlQWZ0ZXJEZWxldGU6a2l0KHJhbmdlKSByZXBsYWNpbmdSYW5nZTpraXQocmFuZ2VUb0Jl
UmVwbGFjZWQpXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGlu
ZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5n
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxk
QmVnaW5FZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKLQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzptX3dlYlZpZXcgc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKIH0K
IAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQor
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQogewotICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91
bGRFbmRFZGl0aW5nSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKKyAgICByZXR1cm4gW1ttX3dlYlZp
ZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxkRW5k
RWRpdGluZ0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0
b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewogICAgIFdlYlZpZXcqIHdlYlZpZXcg
PSBtX3dlYlZpZXc7CiAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJh
bmdlOmtpdChyYW5nZSkgZ2l2ZW5BY3Rpb246a2l0KGFjdGlvbildOwogfQogCi1ib29sIFdlYkVk
aXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBS
YW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Y29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgdG9SYW5nZSwgRUFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKQogewogICAgIHJldHVybiBbbV93ZWJWaWV3IF9zaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOmtpdChmcm9tUmFuZ2UpIHRvRE9NUmFuZ2U6a2l0KHRvUmFuZ2UpIGFmZmlu
aXR5OmtpdChzZWxlY3Rpb25BZmZpbml0eSkgc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3Rpbmdd
OwogfQpAQCAtNDExLDEyICs0MDYsMTIgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKICNlbmRpZgogfQogCi12b2lkIFdlYkVkaXRvckNsaWVu
dDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlJhbmdlKikKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+JikKIHsKICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgV2ViS2l0LCBv
bmx5IFdlYktpdDIuCiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJv
YXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2Fy
ZERhdGEpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBl
cywgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEp
CiB7CiAgICAgLy8gTm90IGltcGxlbWVudGVkIFdlYktpdCwgb25seSBXZWJLaXQyLgogfQpAQCAt
NTc3LDkgKzU3Miw5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb24oKQogCiAjZW5kaWYgLy8gVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VN
RU5UKQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlICpub2Rl
LCBSYW5nZSogcmVwbGFjaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikK
K2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmVwbGFjaW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlv
biBnaXZlbkFjdGlvbikKIHsgCi0gICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6a2l0KG5vZGUp
IHJlcGxhY2luZ0RPTVJhbmdlOmtpdChyZXBsYWNpbmdSYW5nZSkgZ2l2ZW5BY3Rpb246KFdlYlZp
ZXdJbnNlcnRBY3Rpb24pZ2l2ZW5BY3Rpb25dOworICAgIHJldHVybiBbW21fd2ViVmlldyBfZWRp
dGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzaG91bGRJbnNlcnROb2Rl
OmtpdCgmbm9kZSkgcmVwbGFjaW5nRE9NUmFuZ2U6a2l0KHJlcGxhY2luZ1JhbmdlKSBnaXZlbkFj
dGlvbjooV2ViVmlld0luc2VydEFjdGlvbilnaXZlbkFjdGlvbl07CiB9CiAKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZWdpc3RlclVuZG9PclJlZG9TdGVwKFVuZG9TdGVwJiBzdGVwLCBib29sIGlz
UmVkbykKQEAgLTg1NiwxMCArODUxLDEwIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3Jt
c1R3b1N0ZXBQYXN0ZShXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERy
b3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBp
c01vdmUpCitib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50
RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wg
aXNNb3ZlKQogewogICAgIGlmIChbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0g
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZXJmb3JtVHdvU3RlcERyb3A6YXREZXN0aW5h
dGlvbjppc01vdmU6KV0pCi0gICAgICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0
ZUZvcndhcmRlcl0gcGVyZm9ybVR3b1N0ZXBEcm9wOmtpdCgmZnJhZ21lbnQpIGF0RGVzdGluYXRp
b246a2l0KCZkZXN0aW5hdGlvbikgaXNNb3ZlOmlzTW92ZV07CisgICAgICAgIHJldHVybiBbW21f
d2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gcGVyZm9ybVR3b1N0ZXBEcm9wOmtpdCgm
ZnJhZ21lbnQpIGF0RGVzdGluYXRpb246a2l0KGRlc3RpbmF0aW9uKSBpc01vdmU6aXNNb3ZlXTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTg4Nyw3ICs4ODIsNyBAQCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmlu
Z1ZpZXcgc3RyaQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIFJhbmdlJiwgYm9v
bCkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFn
bWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0YzU0
YzQ0NGFjZjE3ODE5MDJkNjU4YTkxNWE0NjI4ODNiYjUyMWEwLi43NjNjNzc3Y2UyYjAyNjZkNDA5
M2RhZmNhYzJhNjM2MjVmMWJiZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KQEAgLTcyMCwxMyArNzIwLDE1IEBAIC0gKE5TUmVjdClfY2FyZXRSZWN0
QXRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6UG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxl
Y3RpCiAKIC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UK
IHsKLSAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JS
YW5nZShjb3JlKHJhbmdlKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TWmVy
b1JlY3Q7CisgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZpcnN0UmVj
dEZvclJhbmdlKCptYWtlUmFuZ2UoY29yZShyYW5nZSkpKTsKIH0KIAogLSAodm9pZClfc2Nyb2xs
RE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBib29sIGluc2lkZUZp
eGVkID0gZmFsc2U7IC8vIEZJWE1FOiBnZXQgdmlhIGZpcnN0UmVjdEZvclJhbmdlKCkuCi0gICAg
TlNSZWN0IHJhbmdlUmVjdCA9IFtzZWxmIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07ICAg
IAorICAgIE5TUmVjdCByYW5nZVJlY3QgPSBbc2VsZiBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFu
Z2VdOwogICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGNvcmUoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7
CiAgICAgICAgIAogICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7
CkBAIC03ODQsNyArNzg2LDcgQEAgLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVu
dFNlbGVjdGlvbjooV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkVBbHRlcmEKICAgICBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0
aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpOwogfQogI2VuZGlmCiAKQEAgLTg1Myw3ICs4NTUsNyBAQCAtIChO
U1JhbmdlKV9jb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAo
RE9NUmFuZ2UgKilfbWFya0RPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFu
Z2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigp
Lm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBT
dHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCkBAIC0xMTA2LDEy
ICsxMTA4LDEyIEBAIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDoo
Q0dQb2ludClmaXJzdCBzZWNvbmRQb2ludDooQ0dQb2ludClzCiB7CiAgICAgYXV0byBmaXJzdFBv
c2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OmZpcnN0XTsKICAgICBhdXRv
IHNlY29uZFBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnNlY29uZF07
Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlv
bihmaXJzdFBvc2l0aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpOworICAgIHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0
aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIC0gKERPTVJh
bmdlICopX3NlbGVjdGlvblJhbmdlRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92
aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgp
KTsKKyAgICByZXR1cm4ga2l0KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKICNl
bmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTQ1NCw3ICsxNDU2LDcgQEAgLSAoQk9P
TClpc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0
ZWRET01SYW5nZQogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZikt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAg
ICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpOwogfQogCiAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkgY2xvc2VUeXBp
bmc6KEJPT0wpY2xvc2VUeXBpbmcKQEAgLTE0OTYsNyArMTQ5OCw3IEBAIC0gKHZvaWQpZXhwYW5k
U2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdl
ICopZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2Vs
ZiktPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKTsK
IH0KIAogLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b24KQEAgLTE1MjYsNyArMTUyOCw3IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNl
bGVjdGlvbgogCiAtIChET01SYW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bgogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlv
bigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CisgICAgcmV0
dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRT
ZWxlY3Rpb24oKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKQEAgLTE1ODksMTIgKzE1OTEsMTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFy
dAogCiAtIChET01SYW5nZSAqKXJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1v
dW50CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0
aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRT
ZWxlY3Rpb24oYW1vdW50KSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeUV4dGVuZGluZ0N1
cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVS
YW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVj
dGlvbihhbW91bnQpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rp
b24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpKTsKIH0KIAogLSAo
dm9pZClzZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAq
KWVsZW1lbnQKQEAgLTE2MTgsNyArMTYyMCw3IEBAIC0gKERPTVJhbmdlICopbWFya2VkVGV4dERP
TVJhbmdlCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVy
biBraXQoZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0
dXJuIGtpdChmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpKTsKIH0KIAogLSAodm9p
ZClzZXRNYXJrZWRUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlu
ZXdTZWxSYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KaW5kZXggMTExY2Y4YmRjMjlkYzYxZTI4ZjgyMmU5NTdiOTM4ODJhNDI3OTlhNS4uNGUz
YTA4YjJkYzVkMDRiZTgwZjExYzI5Y2IyMjk5MTBiNGU4OGVmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0xMzMyLDcgKzEzMzIsNyBA
QCAtIChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4
dCBnaXZlbkFjdGlvbjooV2ViVmlld0lucwogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQog
ewogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJu
IGNvcmVGcmFtZSA/IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CisgICAgcmV0dXJu
IGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpIDogbmlsOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNjM0Niw3
ICs2MzQ2LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgRE9N
UmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2Vd
OwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICgwLCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0
aW9uLCB0aGVSYW5nZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAw
LCAwKTsKKyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAgICAgfQogICAgIAogICAgIEFTU0VS
VChbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsKQEAgLTcwNzUsNyArNzA3NSw3IEBAIC0gKE5TVUlu
dGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgaW5ET01SYW5nZToo
RE9NUmFuZ2UgKilyYW5nCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dChzdHJp
bmcsIGNvcmUocmFuZ2UpLCBjb3JlT3B0aW9ucyhvcHRpb25zKSwgbGltaXQsIG1hcmtNYXRjaGVz
LCAwKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0
KHN0cmluZywgbWFrZVJhbmdlKGNvcmUocmFuZ2UpKSwgY29yZU9wdGlvbnMob3B0aW9ucyksIGxp
bWl0LCBtYXJrTWF0Y2hlcywgMCk7CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZDooQk9PTCluZXdWYWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQpp
bmRleCAxZTNiNzlkMDM4MWFlOTlkNmNhMzRlY2EyMmY1NjM5ZDQ4YTNhOTRlLi44MDFiZWZlYzc2
ZDA5NmY5M2YwZjQ4ZDYzY2Y4N2RmOTVkNTUxYmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxl
ci5tbQpAQCAtMTc2LDcgKzE3Niw3IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAg
Ly8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVtCiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtf
aHRtbFZpZXcgX2ZyYW1lXTsKLSAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjcmVh
dGVMaXZlUmFuZ2UoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChj
b3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1
cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQKICAgICAgICAg
ICAgIGRpcmVjdGlvbjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkIGdyYW51bGFyaXR5OlRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5XTsKICAgICAgICAgRE9NUmFuZ2UgKnByZWZp
eCA9IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlRleHRJdGVyYXRvci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCmluZGV4IDhjN2U3ZWUwMGY3ZjMxNTBkODk3
NzQzYTA3MjQwOTZiMzg4MjE3Y2UuLjkzYjgzNDc3ZmM4YTQyYWQzZjc0ZDM2OWU4MTc5NGJiZWZk
YTAzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4
dEl0ZXJhdG9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4
dEl0ZXJhdG9yLm1tCkBAIC05NSw3ICs5NSw3IEBAIC0gKERPTVJhbmdlICopY3VycmVudFJhbmdl
CiAgICAgYXV0byYgdGV4dEl0ZXJhdG9yID0gKl9wcml2YXRlLT5fdGV4dEl0ZXJhdG9yOwogICAg
IGlmICh0ZXh0SXRlcmF0b3IuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZSh0ZXh0SXRlcmF0b3IucmFuZ2UoKSkucHRyKCkpOworICAg
IHJldHVybiBraXQodGV4dEl0ZXJhdG9yLnJhbmdlKCkpOwogfQogCiAvLyBGSVhNRTogQ29uc2lk
ZXIgZGVwcmVjYXRpbmcgdGhpcyBtZXRob2QgYW5kIGNyZWF0aW5nIG9uZSB0aGF0IGRvZXMgbm90
IHJlcXVpcmUgY29weWluZyA4LWJpdCBjaGFyYWN0ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDg1ZDY5NDNlMzZiYWU2MzdhMGUwOWI1NDc5ZGFi
MzViMzlhYTdjY2MuLjA3MzNmNWUwNDQ0Zjc5YWRkN2RiOTdjZGExNWQ2OTc4MjhiNjk3MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQ1OTQsNyAr
NDU5NCw3IEBAIC0gKFdlYlRleHRJdGVyYXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVj
dClyZWN0CiAgICAgYXV0byBpbnRSZWN0ID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyZWN0
KTsKICAgICBhdXRvIHJhbmdlID0gV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihjb3JlRnJhbWUt
PnZpc2libGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWluWE1pbllDb3JuZXIoKSksCiAgICAg
ICAgIGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5tYXhYTWF4WUNv
cm5lcigpKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJh
dG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOmtpdChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgp
KV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGlu
aXRXaXRoUmFuZ2U6a2l0KHJhbmdlKV0gYXV0b3JlbGVhc2VdOwogfQogCiAjaWYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCkBAIC04NDE3LDcgKzg0MTcsNyBAQCAtIChET01SYW5nZSAqKWVkaXRhYmxl
RE9NUmFuZ2VGb3JQb2ludDooTlNQb2ludClwb2ludAogICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNl
bGYpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0
KHBhZ2UtPm1haW5GcmFtZSgpLmVkaXRvcigpLnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9p
bnQoW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdKSkuZ2V0KCkpOworICAgIHJl
dHVybiBraXQocGFnZS0+bWFpbkZyYW1lKCkuZWRpdG9yKCkucmFuZ2VGb3JQb2ludChXZWJDb3Jl
OjpJbnRQb2ludChbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0pKSk7CiB9CiAK
IC0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVu
dFJhbmdlIHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNT
ZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClm
bGFnCkBAIC04NDY1LDcgKzg0NjUsNyBAQCAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UK
ICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7
CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiAtIChOU1NlbGVj
dGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9E
T01Db3JlQ2xhc3Nlcy5jcHAKaW5kZXggYjYyNjQzNzNkNjVjODk2NTllMDc1NDkyMzBhMmMxMTI5
OGVlMmIxOS4uYjAzNjFmZWFkNTdkMDMxMmY1NGM5NWU0MWJhNGNhZjJiY2MyY2RmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmNwcApAQCAtNTQsNiArNTQsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyVHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsSW50b1ZpZXdPcHRp
b25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU3R5bGVkRWxlbWVudC5oPgogI2luY2x1ZGUgPGluaXRndWlkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvd2luL1dDaGFyU3RyaW5nRXh0cmFzLmg+CkBAIC05NjgsMTAgKzk2OSwxMiBAQCBIUkVT
VUxUIERPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVudChfSW5fb3B0XyBJRE9NRXZlbnQqIGV2dCwgX091
dF8gQk9PTCogcmVzdWx0KQogRE9NV2luZG93OjpET01XaW5kb3coV2ViQ29yZTo6RE9NV2luZG93
KiB3KQogICAgIDogbV93aW5kb3codykKIHsKKyAgICBtX3dpbmRvdy0+cmVmKCk7CiB9CiAKIERP
TVdpbmRvdzo6fkRPTVdpbmRvdygpCiB7CisgICAgbV93aW5kb3ctPmRlcmVmKCk7CiB9CiAKIElE
T01XaW5kb3cqIERPTVdpbmRvdzo6Y3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6RE9NV2luZG93KiB3
KQpAQCAtMTU5NSwxMCArMTU5OCwxMiBAQCBIUkVTVUxUIERPTVJhbmdlOjpRdWVyeUludGVyZmFj
ZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdAogRE9NUmFu
Z2U6OkRPTVJhbmdlKFdlYkNvcmU6OlJhbmdlKiBlKQogICAgIDogbV9yYW5nZShlKQogeworICAg
IG1fcmFuZ2UtPnJlZigpOwogfQogCiBET01SYW5nZTo6fkRPTVJhbmdlKCkKIHsKKyAgICBtX3Jh
bmdlLT5kZXJlZigpOwogfQogCiBJRE9NUmFuZ2UqIERPTVJhbmdlOjpjcmVhdGVJbnN0YW5jZShX
ZWJDb3JlOjpSYW5nZSogcmFuZ2UpCkBAIC0xNjE1LDYgKzE2MjAsMTEgQEAgSURPTVJhbmdlKiBE
T01SYW5nZTo6Y3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogICAgIHJldHVy
biBuZXdSYW5nZTsKIH0KIAorSURPTVJhbmdlKiBET01SYW5nZTo6Y3JlYXRlSW5zdGFuY2UoY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiByYW5nZSkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlSW5zdGFuY2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7Cit9CisKIEhSRVNV
TFQgRE9NUmFuZ2U6OnN0YXJ0Q29udGFpbmVyKF9DT01fT3V0cHRyX29wdF8gSURPTU5vZGUqKiBu
b2RlKQogewogICAgIGlmICghbm9kZSkKQEAgLTE4MTYsMTAgKzE4MjYsMTIgQEAgSFJFU1VMVCBE
T01SYW5nZTo6ZGV0YWNoKCkKIERPTU5hbWVkTm9kZU1hcDo6RE9NTmFtZWROb2RlTWFwKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcCogbm9kZU1hcCkKICAgICA6IG1fbm9kZU1hcChub2RlTWFwKQogewor
ICAgIG1fbm9kZU1hcC0+cmVmKCk7CiB9CiAKIERPTU5hbWVkTm9kZU1hcDo6fkRPTU5hbWVkTm9k
ZU1hcCgpCiB7CisgICAgbV9ub2RlTWFwLT5kZXJlZigpOwogfQogCiBJRE9NTmFtZWROb2RlTWFw
KiBET01OYW1lZE5vZGVNYXA6OmNyZWF0ZUluc3RhbmNlKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCog
bm9kZU1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFz
c2VzLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5oCmluZGV4IGFj
NjQzYjZmY2Y0M2FlZWNkMTJiMzdlOTkwMWQ3YjMyY2QwMjljODkuLjU2ZjhjZjA3Y2Y4ZmZiODI1
ZWM1MzNiMmFjM2RhNjQ5ZGE0NDE5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0RPTUNvcmVDbGFzc2VzLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9NQ29y
ZUNsYXNzZXMuaApAQCAtMzcsOSArMzcsOSBAQCBjbGFzcyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7
CiBjbGFzcyBSYW5nZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKK3N0cnVjdCBTaW1wbGVSYW5nZTsK
IH0KIAotCiBjbGFzcyBET01PYmplY3QgOiBwdWJsaWMgV2ViU2NyaXB0T2JqZWN0LCBwdWJsaWMg
SURPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAgLy8gSVVua25vd24KQEAgLTgyMyw2ICs4MjMsNyBA
QCBwcm90ZWN0ZWQ6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgSURPTVJhbmdlKiBjcmVhdGVJbnN0
YW5jZShXZWJDb3JlOjpSYW5nZSopOworICAgIHN0YXRpYyBJRE9NUmFuZ2UqIGNyZWF0ZUluc3Rh
bmNlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpOwogCiBwdWJsaWM6CiAg
ICAgLy8gSVVua25vd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IGVmZWRhNDRhOTgxOTgwOTVk
MDE3YTA5MGJmYzdhYTdlODcyOGRkNzAuLjRhMWU2ODVlZTI0NGFlNmI1NTQ1ODkwNmU0MzZhNWNj
NzA1OTFkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIGludCBX
ZWJFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKICAgICByZXR1cm4gMDsK
IH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpS
YW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNv
bnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBDT01QdHI8SVdlYkVkaXRp
bmdEZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0
ZSgmZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC0yMDAsNyArMjAwLDcgQEAgYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiAgICAgcmV0
dXJuIHNob3VsZEJlZ2luOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRp
dGluZyhSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGlu
Zyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgQ09NUHRyPElXZWJF
ZGl0aW5nRGVsZWdhdGU+IGVkOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVs
ZWdhdGUoJmVkKSkgfHwgIWVkLmdldCgpKQpAQCAtMjQwLDEyICsyNDAsMTAgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oRnJhbWUqKQogCiB2b2lkIFdl
YkVkaXRvckNsaWVudDo6ZGlzY2FyZGVkQ29tcG9zaXRpb24oRnJhbWUqKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjYW5jZWxlZENvbXBvc2l0
aW9uKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6ZGlkRW5kRWRpdGluZygpCkBAIC0yNTcsMjAgKzI1NSwxOCBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6ZGlkRW5kRWRpdGluZygpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3Jl
OjpSYW5nZSopCit2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3Rl
Ym9hcmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3Rv
cjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiA+JikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiA+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdlYkVkaXRvckNs
aWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdl
PiYgcmFuZ2UpCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGVkOwogICAgIGlm
IChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdhdGUoJmVkKSkgfHwgIWVkLmdldCgpKQpA
QCAtMzAwLDcgKzI5Niw3IEBAIHN0YXRpYyBXZWJWaWV3SW5zZXJ0QWN0aW9uIGtpdChFZGl0b3JJ
bnNlcnRBY3Rpb24gYWN0aW9uKQogICAgIHJldHVybiBXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQ7
CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUqIG5vZGUs
IFJhbmdlKiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQor
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSYgbm9kZSwgY29uc3Qg
T3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQogeyAKICAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0
ZT4gZWRpdGluZ0RlbGVnYXRlOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVs
ZWdhdGUoJmVkaXRpbmdEZWxlZ2F0ZSkpIHx8ICFlZGl0aW5nRGVsZWdhdGUuZ2V0KCkpCkBAIC0z
MTAsNyArMzA2LDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9k
ZSogbm9kZSwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3IKICAgICBpZiAoIWluc2VydGlu
Z0RPTVJhbmdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIENPTVB0cjxJRE9NTm9kZT4g
aW5zZXJ0RE9NTm9kZShBZG9wdENPTSwgRE9NTm9kZTo6Y3JlYXRlSW5zdGFuY2Uobm9kZSkpOwor
ICAgIENPTVB0cjxJRE9NTm9kZT4gaW5zZXJ0RE9NTm9kZShBZG9wdENPTSwgRE9NTm9kZTo6Y3Jl
YXRlSW5zdGFuY2UoJm5vZGUpKTsKICAgICBpZiAoIWluc2VydERPTU5vZGUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCkBAIC0zMjQsNyArMzIwLDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZEluc2VydE5vZGUoTm9kZSogbm9kZSwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBFZGl0b3IK
ICAgICByZXR1cm4gc2hvdWxkSW5zZXJ0OwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0ciwgUmFuZ2UqIGluc2VydGluZ1JhbmdlLCBF
ZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0
aW9uKQogewogICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZGl0aW5nRGVsZWdhdGU7
CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0ZSgmZWRpdGluZ0RlbGVn
YXRlKSkgfHwgIWVkaXRpbmdEZWxlZ2F0ZS5nZXQoKSkKQEAgLTM0Miw3ICszMzgsNyBAQCBib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHN0ciwgUmFu
Z2UqIGluc2VydGluZ1JhbmdlLAogICAgIHJldHVybiBzaG91bGRJbnNlcnQ7CiB9CiAKLWJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdl
KiBjdXJyZW50UmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiBwcm9wb3NlZFJhbmdlLCBXZWJDb3JlOjpF
QWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgZmxhZykKK2Jvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNp
bXBsZVJhbmdlPiYgY3VycmVudFJhbmdlLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4mIHByb3Bvc2VkUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0eSBzZWxlY3Rpb25BZmZpbml0
eSwgYm9vbCBmbGFnKQogewogICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAg
ICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQo
KSkKQEAgLTM1OCwyMCArMzU0LDE3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBjdXJyZW50UmFuZ2UsIFdlCiAgICAgcmV0
dXJuIHNob3VsZENoYW5nZTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5
U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQXBwbHlTdHlsZSgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFm
dGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1v
dmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggNzdmNjQzNmU3YjU0ODBhZjA0YzQ4NWI4
MGI1NDA4OTMwMzE1OTE2Mi4uYjRjYWQwMDFmYTMzNjU0NjE4ZDc2ZWFmNjhiOTU4ZWI0ZjQ5ZDM1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAgLTQ3LDE1ICs0NywxNSBAQCBwcml2YXRlOgogICAgIHZv
aWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKSBmaW5hbDsKICAgICBpbnQgc3BlbGxD
aGVja2VyRG9jdW1lbnRUYWcoKSBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5n
KFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdlYkNv
cmU6OlJhbmdlKikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdURjo6
U3RyaW5nJiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNp
bXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdURjo6
U3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgV2ViQ29yZTo6
RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkg
ZmluYWw7CiAgICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgZmluYWw7Ci0gICAgdm9pZCB3aWxsV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICB2b2lk
IHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKCkgZmluYWw7Ci0gICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdl
YkNvcmU6OlJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOworICAg
IHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2lt
cGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpIGZpbmFsOwogCiAgICAg
dm9pZCBkaWRFbmRVc2VyVHJpZ2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpIGZpbmFsIHsgfQogICAg
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgZmluYWw7CkBAIC02NSwxMiArNjUsMTIg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc2NhcmRlZENvbXBvc2l0aW9uKFdlYkNvcmU6OkZyYW1l
KikgZmluYWw7CiAgICAgdm9pZCBkaWRVcGRhdGVDb21wb3NpdGlvbigpIGZpbmFsIHsgfQogCi0g
ICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJv
b2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
JikgZmluYWw7CiAKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViQ29yZTo6Tm9kZSosIFdl
YkNvcmU6OlJhbmdlKiByZXBsYWNpbmdSYW5nZSwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9u
KSBmaW5hbDsKLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
aWVzKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUo
V2ViQ29yZTo6Tm9kZSYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgcmVw
bGFjaW5nUmFuZ2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CisgICAgYm9v
bCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyYsIGNvbnN0
IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkQXBw
bHlTdHlsZSgpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2Vi
Q29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkTW92
ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBjb25zdCBXZWJD
b3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOwogCiAgICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSBmaW5hbDsKICAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZCgpIGNvbnN0IGZpbmFsOwpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdW5k
bygpIGZpbmFsOwogICAgIHZvaWQgcmVkbygpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpS
YW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBm
aW5hbDsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYgdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKSBmaW5hbDsKICAgICB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhXZWJDb3Jl
OjpFbGVtZW50KikgZmluYWw7CiAgICAgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKFdlYkNv
cmU6OkVsZW1lbnQqKSBmaW5hbDsKICAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZChX
ZWJDb3JlOjpFbGVtZW50KikgZmluYWw7CkBAIC0xMTUsNyArMTE1LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgZmluYWw7CiAgICAgdm9pZCBzZXRJbnB1
dE1ldGhvZFN0YXRlKFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKICAgICB2b2lkIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJikgZmluYWwgeyB9Ci0gICAgYm9vbCBwZXJmb3JtVHdvU3Rl
cERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIFdlYkNvcmU6OlJhbmdlJiwgYm9vbCkg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJD
b3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBib29s
KSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NS
ZXNwb25zZSByZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1
cm4gV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZTo6RGVuaWVkRm9yR2VzdHVyZTsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IDhjMTdiNWVmZTc5YzNhOWQ1NmFj
YWIxYThlNzAzNDA1Y2QwYzg2MzYuLmY1NTgzNDAzMzRmNDY5ZTNkNGExOWZhNjZjYzI3ODAzYjcy
NTQwNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC02MjAwLDcgKzYyMDAs
NyBAQCB2b2lkIFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3coRnJhbWUqIHRhcmdldEZy
YW1lLCBISU1DIGhJbnB1dENvbnRleHQpCiB7CiAgICAgSW50UmVjdCBjYXJldDsKICAgICBpZiAo
YXV0byByYW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKQotICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSk7CisgICAgICAgIGNh
cmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpyYW5nZSk7CiAg
ICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsK
ICAgICBjYXJldC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKIApAQCAtNjQ1NiwxNCArNjQ1
NiwxNCBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihGcmFtZSog
dGFyZ2V0RnJhbWUsIElNRUNIQVJQT1NJVElPTiogYwogICAgIGlmIChjaGFyUG9zLT5kd0NoYXJQ
b3MgJiYgIXRhcmdldEZyYW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBJbnRSZWN0IGNhcmV0OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Cisg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgIGlmICh0YXJnZXRGcmFtZS0+ZWRp
dG9yKCkuaGFzQ29tcG9zaXRpb24oKSkKICAgICAgICAgcmFuZ2UgPSB0YXJnZXRGcmFtZS0+ZWRp
dG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGVsc2UKLSAgICAgICAgcmFuZ2UgPSBjcmVh
dGVMaXZlUmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpOworICAgICAgICByYW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewotICAgICAg
ICByYW5nZS0+c2V0U3RhcnQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9m
ZnNldCgpICsgY2hhclBvcy0+ZHdDaGFyUG9zKTsKLSAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFt
ZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOworICAgICAgICByYW5n
ZS0+c3RhcnQub2Zmc2V0ICs9IGNoYXJQb3MtPmR3Q2hhclBvczsKKyAgICAgICAgY2FyZXQgPSB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnJhbmdlKTsKICAgICB9CiAg
ICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsK
ICAgICBjYXJldC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKQEAgLTc3NjQsMTggKzc3NjQs
MTUgQEAgSFJFU1VMVCBXZWJWaWV3Ojpjb21wb3NpdGlvblJhbmdlRm9yVGVzdGluZyhfT3V0XyBV
SU5UKiBzdGFydFBvc2l0aW9uLCBfT3V0XyBVSU4KICAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNh
bkVkaXQoKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7Ci0KKyAgICBhdXRvIHJhbmdl
ID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICAqc3RhcnRQb3NpdGlvbiA9IHJhbmdlLT5zdGFy
dE9mZnNldCgpOwotICAgICpsZW5ndGggPSByYW5nZS0+c3RhcnRPZmZzZXQoKSArIHJhbmdlLT5l
bmRPZmZzZXQoKTsKLQorICAgICpzdGFydFBvc2l0aW9uID0gcmFuZ2UtPnN0YXJ0Lm9mZnNldDsK
KyAgICAqbGVuZ3RoID0gcmFuZ2UtPnN0YXJ0Lm9mZnNldCArIHJhbmdlLT5lbmQub2Zmc2V0Owog
ICAgIHJldHVybiBTX09LOwogfQogCi0KIEhSRVNVTFQgV2ViVmlldzo6Zmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2VGb3JUZXN0aW5nKFVJTlQgbG9jYXRpb24sIFVJTlQgbGVuZ3RoLCBfT3V0XyBS
RUNUKiByZXN1bHRSZWN0KQogewogICAgIGlmICghcmVzdWx0UmVjdCkKQEAgLTc3OTAsMTIgKzc3
ODcsOCBAQCBIUkVTVUxUIFdlYlZpZXc6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlRm9yVGVz
dGluZyhVSU5UIGxvY2F0aW9uLCBVSU5UIGxlbmd0aAogICAgICAgICByZXR1cm4gRV9GQUlMOwog
CiAgICAgYXV0byBjaGFyYWN0ZXJSYW5nZSA9IENoYXJhY3RlclJhbmdlKGxvY2F0aW9uLCBsZW5n
dGgpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNo
YXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZWxlbWVudCksIGNo
YXJhY3RlclJhbmdlKSk7Ci0KLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gRV9GQUlM
OwotCi0gICAgSW50UmVjdCByZWN0ID0gZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uo
cmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gcmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgY2hhcmFjdGVyUmFuZ2UpOwor
ICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHJhbmdl
KTsKICAgICBJbnRSZWN0IHJlc3VsdEludFJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9X
aW5kb3cocmVjdCk7CiAKICAgICByZXN1bHRJbnRSZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9y
KCkpOwpAQCAtNzgyMSw3ICs3ODE0LDcgQEAgSFJFU1VMVCBXZWJWaWV3OjpzZWxlY3RlZFJhbmdl
Rm9yVGVzdGluZyhfT3V0XyBVSU5UKiBsb2NhdGlvbiwgX091dF8gVUlOVCogbGVuZ3QKIAogICAg
IEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0
ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA5MGIxNDA1OTUwZTI4ZjM2YjA1M2NkMDRkY2Q1NTg3ZTQyZTUxMmZm
Li5iMDQzYjcxZjZmYThhMDJhZGQ3MDdmNTA3NzY4NDExN2I5M2EwZDlhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTE0MCw3ICsxMTQwLDYgQEAKIAkJRjRDRDc0QzkyMEZEQjQ5NjAwREUz
Nzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDRDc0QzgyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxT
Y2hlbWVIYW5kbGVyLm1tICovOyB9OwogCQlGNENGMzI4MDIzNjY1NTIyMDBEM0FEMDcgLyogRW50
ZXJLZXlIaW50VGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNENGMzI3RjIzNjY1NTIyMDBEM0FEMDcgLyogRW50ZXJLZXlIaW50VGVzdHMubW0g
Ki87IH07CiAJCUY0Q0ZDRERBMjQ5RkM5RTQwMDUyNzQ4MiAvKiBTcGFjZU9ubHkub3RmIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0ZDREQ4
MjQ5RkM5RDkwMDUyNzQ4MiAvKiBTcGFjZU9ubHkub3RmICovOyB9OwotCQlGNENGQ0REQjI0OUZD
OUU5MDA1Mjc0ODIgLyogQWhlbS50dGYgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDRkNERDkyNDlGQzlEOTAwNTI3NDgyIC8qIEFoZW0udHRm
ICovOyB9OwogCQlGNEQyOTg2RTIwRkVFNzM3MDA5MkQ2MzYgLyogUnVuU2NyaXB0QWZ0ZXJEb2N1
bWVudExvYWQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNEQyOTg2RDIwRkVFNzM3MDA5MkQ2MzYgLyogUnVuU2NyaXB0QWZ0ZXJEb2N1bWVudExvYWQu
bW0gKi87IH07CiAJCUY0RDRGM0I2MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFNpbXVs
YXRvcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0RDRGM0I0MUU0RTJCQ0IwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbSAq
LzsgfTsKIAkJRjRENEYzQjkxRTRFMzZFNDAwQkIyNzY3IC8qIERyYWdBbmREcm9wVGVzdHNJT1Mu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0RjNC
NzFFNEUzNkU0MDBCQjI3NjcgLyogRHJhZ0FuZERyb3BUZXN0c0lPUy5tbSAqLzsgfTsKQEAgLTEy
NDUsNyArMTI0NCw2IEBACiAJCQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAt
Z3JlZW4ucG5nIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTM3OTAyOEI5MTRGQUMyNEMwMDdF
NkI0MyAvKiBhY2NlcHRzRmlyc3RNb3VzZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CTcyNUMzRUYzMjIwNThBNUIwMDdDMzZGQyAvKiBBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
cy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAotCQkJCUY0Q0ZDRERCMjQ5RkM5RTkwMDUyNzQ4
MiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkxQzJCODE4NzFDODkyNUEw
MDBBNTUyOUYgLyogQWhlbS50dGYgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE2MzQ3OUYx
ODNENzJBNDAwNUIxNzA3IC8qIGFsbC1jb250ZW50LWluLW9uZS1pZnJhbWUuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLywKIAkJCQlDMjVDQ0EwRDFFNTE0MTg0MDAyNkNCOEEgLyogQWxsQWhlbS5z
dmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404691</attachid>
            <date>2020-07-19 18:03:11 -0700</date>
            <delta_ts>2020-07-21 16:42:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214261-20200719180310.patch</filename>
            <type>text/plain</type>
            <size>191280</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE1Njc3YmRmNTQzN2M4
Yjc2YWQ2YWUwZWY3ZGQyMjJhZTZmOTc2ZC4uZjhmMjYxNzMzNDYwMjhiZGQ1MWVhNGRiNWViOTcz
MzE0NGRmYjNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NiBAQAorMjAyMC0wNy0xOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGxpdmUgcmFuZ2Vz
IGZyb20gRWRpdG9yLmggYW5kIEVkaXRvckNsaWVudC5oCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyNjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVs
bGluZ1JhbmdlIGNvbnN0KTogVXBkYXRlIHNpbmNlCisgICAgICAgIHJhbmdlRm9yVGV4dENoZWNr
aW5nUmVzdWx0IG5vIGxvbmdlciByZXR1cm5zIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGly
ZWN0aW9uIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHNpbmNlIHJhbmdlT2ZTdHJpbmcgbm8gbG9u
Z2VyIHJldHVybnMgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChhY2Nlc3NpYmls
aXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUpOiBVc2UgbWFrZVJhbmdl
CisgICAgICAgIChmb3JtZXJseSBtYWtlU2ltcGxlUmFuZ2UpLgorCisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFjY2VwdHNFZGl0aW5nRm9jdXMpOiBVc2Ug
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzCisgICAgICAgIHNpbmNlIHNob3VsZEJlZ2lu
RWRpdGluZyBubyBsb25nZXIgdGFrZXMgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogZG9tL1Jh
bmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZSk6IFJlbmFtZWQgZnJvbSBtYWtl
U2ltcGxlUmFuZ2UuCisgICAgICAgICogZG9tL1JhbmdlLmg6IFJlbmFtZWQgYW5kIGV4cG9ydGVk
IGZvciB1c2Ugb3V0c2lkZSBXZWJDb3JlLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZSk6IEFkZGVkLiBUYWtlcyB0d28gb3B0aW9u
YWwgYm91bmRhcnkgcG9pbnRzIGFuZAorICAgICAgICByZXR1cm5zIGFuIG9wdGlvbmFsIHJhbmdl
LgorICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5oOiBBZGRlZCB0aGUgYWJvdmUuCisKKyAgICAg
ICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCk6IFJlbW92ZWQgY2Fs
bHMgdG8KKyAgICAgICAgY3JhdGVMaXZlUmFuZ2Ugc2luY2UgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyBubworICAgICAgICBsb25nZXIgdGFrZXMgbGl2ZSByYW5nZXMu
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3Rh
dGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgVXBkYXRlcyBzaW5jZSBzaG91bGRJbnNlcnRUZXh0
IG5vIGxvbmdlciB0YWtlcyBhIGxpdmUgcmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKTogVXBkYXRlZCBzaW5jZQorICAgICAgICBzaG91bGRN
b3ZlUmFuZ2VBZnRlckRlbGV0ZSBubyBsb25nZXIgdGFrZXMgbGl2ZSByYW5nZXMuCisKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRl
bGV0ZVJhbmdlIGNvbnN0KTogVXBkYXRlZCB0byBub3QgdGFrZSBhCisgICAgICAgIGxpdmUgcmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24pOiBVcGRh
dGVkIHNpbmNlCisgICAgICAgIGFkZFJhbmdlVG9LaWxsUmluZyBubyBsb25nZXIgdGFrZXMgYSBs
aXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0V2l0
aFBhc3RlYm9hcmQpOiBVcGRhdGVkIHNpbmNlCisgICAgICAgIHNob3VsZEluc2VydFRleHQgbm8g
bG9uZ2VyIHRha2VzIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkSW5zZXJ0RnJhZ21lbnQpOiBObyBsb25nZXIgdGFrZSBhIGxpdmUgcmFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dCk6IFVwZGF0ZWQgc2lu
Y2UKKyAgICAgICAgc2VsZWN0ZWRSYW5nZSBubyBsb25nZXIgcmV0dXJucyBhIGxpdmUgcmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOiBEbyBub3QgcmV0dXJu
IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkRGVsZXRlUmFu
Z2UgY29uc3QpOiBEbyBub3QgdGFrZSBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZSk6IERpdHRvLiBBbHNvIHRha2UgYSBjb25zdCYgdG8K
KyAgICAgICAgdGhlIHN0eWxlIGluc3RlYWQgb2YgYSBub24tY29uc3QqLgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24pOiBQYXNzIGEgc3R5bGUgcmVmZXJl
bmNlCisgICAgICAgIGFuZCBhIG5vbi1saXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24pOiBVcGRhdGVkIGZvcgorICAgICAg
ICB0aGUgY2hhbmdlIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0
V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOiBObyBuZWVkIHRvCisgICAgICAgIHBhc3MgYSBsaXZl
IHJhbmdlIGFueSBtb3JlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRMaW5lQnJl
YWspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkpOiBVcGRhdGVkIHRvIG5vdCB1c2UgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybURlbGV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
aG91bGRFbmRFZGl0aW5nKTogRG8gbm90IHRha2UgYSBsaXZlIHJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6d2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKTogVXBkYXRlIHNpbmNlIGNv
bXBvc2l0aW9uUmFuZ2UKKyAgICAgICAgaXMgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKTogVXBkYXRl
IHNpbmNlCisgICAgICAgIHdlIGRvbid0IG5lZWQgdG8gcGFzcyBsaXZlIHJhbmdlcyB0byBtYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKTogRG9uJ3QgcmV0dXJuIGEKKyAg
ICAgICAgbGl2ZSByYW5nZSBpbiB0dGhlIG91dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrQmFkR3JhbW1hcik6IFVwZGF0ZSBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKTog
RG8gbm90CisgICAgICAgIHRha2UgbGl2ZSByYW5nZXMgZm9yIHRoZSBhcmd1bWVudHMuCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcpOiBEbyBu
b3QgdGFrZSBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKTogVXBkYXRlIHNpbmNlIHNob3VsZEluc2VydFRleHQgZG9lcworICAgICAgICBu
b3QgdGFrZSBhIGxpdmUgcmFuZ2UgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKTogVXBkYXRlIHRvIG5vdCB1c2UgbGl2ZQorICAg
ICAgICByYW5nZXMgYXMgbXVjaC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXIpOiBVcGRhZSBzaW5jZQorICAgICAgICB3ZSBkb24ndCBuZWVk
IHRvIHBhc3MgbGl2ZSByYW5nZXMgdG8gbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6IERvbid0
IHJldHVybiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbXBvc2l0
aW9uUmFuZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dHJhbnNw
b3NlKTogVXBkYXRlZCBzaW5jZSB3ZSBkb24ndCBwYXNzIGEgbGl2ZSByYW5nZS4KKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UgY29uc3QpOiBEb24ndCB0YWtlIGEg
bGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uIGNvbnN0KTogVXBkYXRlZCBzaW5jZSB3ZSBkb24ndAorICAgICAgICBuZWVkIHRvIHBhc3Mg
YSBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpzdGFydCk6IEFkZGVkLiBIZWxwZXIgdG8gbWFrZSByYW5n
ZU9mU3RyaW5nIGVhc2llciB0byByZWFkLgorICAgICAgICAoV2ViQ29yZTo6ZW5kKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGFwc2VJZlJvb3RzRGlmZmVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlT2ZTdHJpbmcpOiBVcGRhdGVkIHRvIG5vdCB0
YWtlIG9yIHJldHVybiBhCisgICAgICAgIGxpdmUgcmFuZ2UgYW5kIG5vdCB1c2UgaXQgaW50ZXJu
YWxseSBlaXRoZXIuCisgICAgICAgIChXZWJDb3JlOjppc0ZyYW1lSW5SYW5nZSk6IERvbid0IHRh
a2UgYSBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNG
b3JUZXh0KTogRG9uJ3QgdGFrZSBvciByZXR1cm4gbGl2ZSByYW5nZXMuCisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOiBEb24n
dCByZXR1cm4KKyAgICAgICAgYSBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSk6IFVwZGF0ZSBmb3IgdGhlIGFi
b3ZlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKTog
RG9uJ3QgcmV0dXJuIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6
IFVwZGF0ZWQgZm9yIGFsbCB0aGUgY2hhZ25lcyBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRTZWxlY3Rpb25Ub0dy
YW51bGFyaXR5KTogVXBkYXRlZCB0byByZWR1Y2UgdGhlIHVzZSBvZgorICAgICAgICBsaXZlIHJh
bmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OnVuaW9uUmFuZ2VzKTogVXBkYXRlZCB0byBubyBsb25n
ZXIgdGFrZSBvciByZXR1cm4gYSBsaXZlCisgICAgICAgIHJhbmdlLiBTdGlsbCB1c2VzIGxpdmUg
cmFuZ2VzIGluIHRoZSBhbGdvcml0aG0gZm9yIG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1
dGVEZWxldGVUb01hcmspOiBVcGRhdGVkIHNpbmNlIHNlbGVjdGVkUmFuZ2Ugbm8gbG9uZ2VyCisg
ICAgICAgIHJldHVybnMgYSBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVNl
bGVjdFRvTWFyayk6IFVwZGF0ZSB0byB1c2UgdGhlIG5ldyB1bmlvblJhbmdlcy4KKworICAgICAg
ICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbiBjb25zdCk6IFVwZGF0ZWQKKyAgICAgICAg
c2luY2Ugc2hvdWxkRGVsZXRlUmFuZ2Ugbm8gbG9uZ2VyIHJlcXVpcmVzIGEgbGl2ZSByYW5nZS4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50KTogVXBk
YXRlZAorICAgICAgICBmb3IgY2hhbmdlcyB0byB1c2UgZmV3ZXIgbGl2ZSByYW5nZXMuCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmlu
Zyk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOiBEaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Ondy
aXRlSW1hZ2VUb1Bhc3RlYm9hcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvbGlid3BlL0Vk
aXRvckxpYldQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21QYXN0
ZWJvYXJkRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQp
OiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKTogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZUUERp
cmVjdG9yeURvY3VtZW50UGFyc2VyOjpjcmVhdGVUREZvckZpbGVuYW1lKToKKyAgICAgICAgUmVt
b3ZlZCBhIFdURk1vdmUgdGhhdCBtZXNzZXMgdXAgdGhlIHJldHVybiB2YWx1ZSBvcHRpbWl6YXRp
b24uCisgICAgICAgIE5vdGljZWQgd2hpbGUgZml4aW5nIGVycm9ycyBjYXVzZWQgYnkgbGl2ZSBy
YW5nZSBjaGFuZ2VzLgorCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHA6IFVwZGF0
ZWQgZm9yIGNoYW5nZXMgdG8gRWRpdG9yQ2xpZW50LgorCisgICAgICAgICogcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5zZXJ0VW5pY29kZUNoYXJh
Y3Rlcik6IFVwZGF0ZWQgdG8gdXNlIGZld2VyIGxpdmUgcmFuZ2VzLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IERJdHRv
LgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdDb250cm9sbGVyOjpzdGFydERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2Uv
RWRpdG9yQ2xpZW50Lmg6IERvbid0IHRha2Ugb3IgcmV0dXJuIGxpdmUgcmFuZ2VzLgorCisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSk6IFNpbXBsaWZpZWQKKyAgICAgICAgc2lu
Y2Ugd2UgZG9uJ3QgbmVlZCB0byB1c2UgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVsaW5xdWlzaGVzRWRpdGlu
Z0ZvY3VzKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlIHRvIGJlCisgICAgICAgIG1vcmUgc3BlY2lm
aWMsIGFuZCBjaGFuZ2VkIHRvIG5vdCB1c2UgYSBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkRWxlbWVudCk6IFVwZGF0ZWQgZm9yIHRoZSBh
Ym92ZS4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnJhbmdlRm9yUG9pbnQpOiBVcGRhdGVkIHRvIG5vdCB1c2UgbGl2ZSByYW5nZXMuCisKKyAg
ICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZmluZFN0cmlu
Z01hdGNoaW5nUmFuZ2VzKTogVXBkYXRlZCB0byBub3QgdXNlCisgICAgICAgIGxpdmUgcmFuZ2Vz
IGFzIG11Y2guCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyYW5nZU9mU3RyaW5nKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5kTWF0Y2hlc0ZvclRleHQpOiBEaXR0by4KKwor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cmFuZ2VPZlN0cmluZyk6IFVwZGF0ZWQgc2luY2UgcmV0dXJuIHZhbHVlCisgICAgICAg
IG9mIHRoZSBFZGl0b3IgbWVtYmVyIGZ1bmN0aW9uIGlzIG5vIGxvbmdlciBhIGxpdmUgcmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQpOiBEaXR0
by4KKwogMjAyMC0wNy0xOSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIENvbG9yQnVpbGRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmNzY0MTNiN2FkNGE3NjkxMDQzNDVk
ZTI3MTg1NTRiNDc1ZTQ2ODUzLi5iYTA1MjE4MjFlZmRhZDVmNTY4MTBmMjk2MWFkMTQzMGVmZmZm
MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIwLTA3LTE5ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMgZnJvbSBFZGl0
b3IuaCBhbmQgRWRpdG9yQ2xpZW50LmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAg
ICAgKC1bV0tQcmludGluZ1ZpZXcgcmVjdEZvclBhZ2U6XSk6IFVzZSBOU1plcm9SZWN0LgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKTogVXBk
YXRlZCBmb3IgbGl2ZQorICAgICAgICByYW5nZSBjaGFuZ2VzIGFuZCBhbHNvIHJlbW92ZWQgZ3Jh
dHVpdG91cyBjYWxsIHRvIG5vdEltcGxlbWVudGVkCisgICAgICAgIHNpbmNlIHRoZSBmdW5jdGlv
biBpcyBpbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRFbmRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNs
aWVudDo6c2hvdWxkSW5zZXJ0Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZSk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0
aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlkRW5kRWRp
dGluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzdWJGcmFtZVNjcm9s
bFBvc2l0aW9uQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OnNldElucHV0TWV0aG9kU3RhdGUpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6IFVwZGF0ZWQKKyAgICAgICAgZm9yIGNo
YW5nZXMgdG8gRWRpdG9yQ2xpZW50LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5j
KTogVXBkYXRlZCB0byByZWR1Y2UKKyAgICAgICAgdGhlIHVzZSBvZiBsb2NhbCB2YWx1ZXMgYW5k
IGxpdmUgcmFuZ2VzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdl
QXN5bmMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhG
b3JQb2ludEFzeW5jKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlQXN5bmMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c2V0Q29tcG9zaXRpb25Bc3luYyk6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0
UGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0
UGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpzZWxlY3RXaXRoR2VzdHVyZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjphdXRvY29ycmVjdGlvbkNvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Zm9jdXNl
ZEVsZW1lbnRQb3NpdGlvbkluZm9ybWF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTogRGl0dG8uCisKIDIwMjAtMDct
MTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBDb2xv
ckJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwppbmRleCBjMzVjYWY4MzY0YmJkOGEy
Y2QxNmNhMWRjNWI1NjE0ZDAzODJkZDQ4Li4yNGEwNmM5YzIzYmExZmFjMjJlMGYyNWQwYjA2YzNl
OWUzNjUyNmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMjAtMDctMTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
bW92ZSBsaXZlIHJhbmdlcyBmcm9tIEVkaXRvci5oIGFuZCBFZGl0b3JDbGllbnQuaAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjYxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgY2xvc2VzdENhcmV0UmVjdElu
TWFya2VkVGV4dFJhbmdlRm9yUG9pbnQ6XSk6CisgICAgICAgIFVwZGF0ZWQgc2luY2UgY29tcG9z
aXRpb25SYW5nZSBpcyBubyBsb25nZXIgYSBsaXZlIHJhbmdlLgorCiAyMDIwLTA3LTAzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdl
IHRoZSBuYW1lcyBvZiBNSU1FVHlwZVJlZ2lzdHJ5IG1ldGhvZHMgdG8gY29tcGx5IHdpdGggd2Vi
a2l0IG5hbWluZyBzdHlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDYwMzI0ZmZm
MjY3NzMzMzVkZTUyMjEzMGI4Mzg1Zjk1NmE3ZWRlNTguLmJhZjJmMThiZTIxNTNjOTAzMjVkNjQy
ZDMzMDFlOGZiMGM4MzljYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1OCBAQAorMjAyMC0wNy0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmVtb3ZlIGxpdmUgcmFuZ2VzIGZyb20gRWRpdG9yLmggYW5kIEVkaXRvckNsaWVudC5o
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyNjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9E
T01SYW5nZS5tbToKKyAgICAgICAgKGtpdCk6IEFkZGVkIGFuIG92ZXJsb2FkIHRvIGNvbnZlcnQg
dG8gYSBsaXZlIHJhbmdlIHNvIHdlIGRvbid0IGhhdmUKKyAgICAgICAgdG8gdG91Y2ggZXZlcnkg
Y2FsbCBzaXRlLgorICAgICAgICAqIERPTS9ET01SYW5nZUludGVybmFsLmg6IEFkZGVkIHRoZSBh
Ym92ZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOiBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvIEVkaXRvckNsaWVudC4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
RGVsZXRlUmFuZ2UpOiBDaGFuZ2VkIHR5cGVzIHRvIG5vdCB1c2UgbGl2ZSByYW5nZXMuCisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAg
KFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dCk6IERpdHRvLgorICAgICAgICAoV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKTogRGl0dG8uCisgICAgICAg
IChXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6IERpdHRv
LgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YSk6IERp
dHRvLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKTogRGl0dG8u
CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29TdGVwRHJvcCk6IERpdHRvLgor
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2Zp
cnN0UmVjdEZvckRPTVJhbmdlOl0pOiBVcGRhdGUgdG8gbm90IHVzZSBsaXZlIHJhbmdlLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpkaXJlY3Rp
b246Z3JhbnVsYXJpdHk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfbWFya0RPTVJh
bmdlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfc2VsZWN0aW9uUmFuZ2VGb3JGaXJz
dFBvaW50OnNlY29uZFBvaW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVj
dGlvblJhbmdlRm9yUG9pbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3Rl
ZERPTVJhbmdlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIHdvcmRS
YW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJh
bWUgcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJGcmFtZSByYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbjpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkZyYW1lIG1hcmtlZFRleHRET01SYW5nZV0pOiBEaXR0by4KKworICAgICAgICAq
IFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zZWxlY3Rl
ZFJhbmdlXSk6IFVwZGF0ZSB0byBub3QgdXNlIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOl0pOiBVc2UgTlNaZXJvUmVjdC4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgY291bnRNYXRjaGVzRm9yVGV4dDppbkRPTVJhbmdlOm9wdGlv
bnM6bGltaXQ6bWFya01hdGNoZXM6XSk6CisgICAgICAgIFVwZGF0ZSB0byBub3QgdXNlIGxpdmUg
cmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW06
CisgICAgICAgICgtW1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciBkb0NvbXBsZXRpb25dKTog
RGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW06CisgICAgICAgICgt
W1dlYlRleHRJdGVyYXRvciBjdXJyZW50UmFuZ2VdKTogRGl0dG8uCisgICAgICAgICogV2ViVmll
dy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IHRleHRJdGVyYXRvckZvclJlY3Q6XSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IGVkaXRhYmxlRE9NUmFuZ2VGb3JQb2ludDpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2VsZWN0ZWRET01SYW5nZV0pOiBEaXR0by4KKwog
MjAyMC0wNy0xNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIGZpbmFsIHZlc3RpZ2F0ZXMgb2YgU2ltcGxlQ29sb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZwppbmRleCBlNTA2NWQ4OTY1ZDM0ZTcwM2RmZGI5YjNkODAyODU5MmU2NTFmZTk4Li40MTgx
MmNmYzk5OGJjZWI1NmIzYmE5ZmMwNzc1OTYzY2FkNTE2YzgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMjAtMDctMTkgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBsaXZlIHJhbmdlcyBmcm9tIEVkaXRvci5o
IGFuZCBFZGl0b3JDbGllbnQuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE0MjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBET01Db3JlQ2xhc3Nlcy5jcHA6CisgICAgICAgIChET01XaW5kb3c6OkRP
TVdpbmRvdyk6IEFkZGVkIHJlZiBmb3IgdW5kZXJseWluZyBXZWJDb3JlOjpET01XaW5kb3cuCisg
ICAgICAgIChET01XaW5kb3c6On5ET01XaW5kb3cpOiBBZGRlZCBkZXJlZiBmb3IgdW5kZXJseWlu
ZyBXZWJDb3JlOjpET01XaW5kb3cuCisgICAgICAgIChET01SYW5nZTo6RE9NUmFuZ2UpOiBBZGRl
ZCByZWYgZm9yIHVuZGVybHlpbmcgbGl2ZSByYW5nZS4KKyAgICAgICAgKERPTVJhbmdlOjp+RE9N
UmFuZ2UpOiBBZGRlZCBkZXJlZiBmb3IgdW5kZXJseWluZyBsaXZlIHJhbmdlLgorICAgICAgICAo
RE9NUmFuZ2U6OmNyZWF0ZUluc3RhbmNlKTogQWRkZWQgb3ZlcmxvYWQgZm9yIGNyZWF0aW5nIGEg
RE9NUmFuZ2UgZnJvbQorICAgICAgICBhIFNpbXBsZVJhbmdlIHRoYXQgY3JlYXRlcyB0aGUgbGl2
ZSByYW5nZS4KKyAgICAgICAgKERPTU5hbWVkTm9kZU1hcDo6RE9NTmFtZWROb2RlTWFwKTogQWRk
ZWQgcmVmIGZvciB1bmRlcmx5aW5nIGxpdmUgcmFuZ2UuCisgICAgICAgIChET01OYW1lZE5vZGVN
YXA6On5ET01OYW1lZE5vZGVNYXApOiBBZGRlZCBkZXJlZiBmb3IgdW5kZXJseWluZyBsaXZlIHJh
bmdlLgorCisgICAgICAgICogRE9NQ29yZUNsYXNzZXMuaDogQWRkZWQgY3JlYXRlSW5zdGFuY2Ug
b3ZlcmxvYWQgYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVn
aW5FZGl0aW5nKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBub3QgdXNlCisgICAgICAgIGxpdmUg
cmFuZ2VzLiBBbHNvIHJlbW92ZWQgdW5uZWNlc3Nhcnkgbm90SW1wbGVtZW50ZWQgY2FsbHMuCisg
ICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkVkaXRvckNsaWVudDo6ZGlzY2FyZGVkQ29tcG9zaXRpb24pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkVkaXRvckNsaWVudDo6Y2FuY2VsZWRDb21wb3NpdGlvbik6IERpdHRvLgorICAgICAg
ICAoV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6IERpdHRv
LgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2Fy
ZERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFu
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZSk6
IERpdHRvLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KTogRGl0
dG8uCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZSk6IERp
dHRvLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpkaWRBcHBseVN0eWxlKTogRGl0dG8uCisg
ICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKTogRGl0
dG8uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDogVXBkYXRl
ZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBFZGl0b3JDbGllbnQuCisKKyAgICAgICAgKiBXZWJW
aWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3cpOiBVcGRh
dGVkIHRvIG5vdCB1c2UgbGl2ZSByYW5nZXMuCisgICAgICAgIChXZWJWaWV3OjpvbklNRVJlcXVl
c3RDaGFyUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OmNvbXBvc2l0aW9uUmFu
Z2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZUZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnNlbGVjdGVk
UmFuZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisKIDIwMjAtMDctMTcgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBmaW5hbCB2ZXN0aWdhdGVzIG9mIFNpbXBs
ZUNvbG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAppbmRleCA2Yzg5NjdlMmI3YzI3NmYxNzIwZjM3YjhkZTU3MzNkZmI3MTJj
MjFiLi45N2QzMDg4MzFiMzdhMmMzNTE1NzBjNTk1MTcwZDFiODkyZjJmM2VmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
QEAgLTMwNiw4ICszMDYsOCBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9i
amVjdDo6bWlzc3BlbGxpbmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcwogICAgICAgICAgICAg
aWYgKCFtaXNzcGVsbGluZ1JhbmdlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZSgqbWlzc3BlbGxp
bmdSYW5nZSk7CisgICAgICAgICAgICBpZiAoY3JlYXRlTGl2ZVJhbmdlKCptaXNzcGVsbGluZ1Jh
bmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZl
UmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApCisgICAgICAgICAgICAgICAg
cmV0dXJuICptaXNzcGVsbGluZ1JhbmdlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChkaXJl
Y3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXMpIHsKICAgICAg
ICAgZm9yIChhdXRvIHJpdCA9IG1pc3NwZWxsaW5ncy5yYmVnaW4oKTsgcml0ICE9IG1pc3NwZWxs
aW5ncy5yZW5kKCk7ICsrcml0KSB7CkBAIC0zMTUsOCArMzE1LDggQEAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2ltcGxl
UmFuZ2UmIHMKICAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShz
dGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVNpbXBsZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChjcmVh
dGVMaXZlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICptaXNzcGVsbGluZ1JhbmdlOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC02MDEsMTUgKzYwMSwxNCBAQCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5E
aXJlY3RpbwogICAgIAogICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBjbG9zZXN0U3RyaW5nUmFu
Z2U7CiAgICAgZm9yIChhdXRvJiBzZWFyY2hTdHJpbmcgOiBzZWFyY2hTdHJpbmdzKSB7Ci0gICAg
ICAgIGlmIChhdXRvIHNlYXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZT
dHJpbmcoc2VhcmNoU3RyaW5nLCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpLnB0cigp
LCBmaW5kT3B0aW9ucykpIHsKLSAgICAgICAgICAgIGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZSgqc2VhcmNoU3RyaW5nUmFuZ2UpOworICAgICAgICBpZiAoYXV0byBmb3Vu
ZFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3RyaW5n
LCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CiAgICAgICAgICAgICBpZiAoIWNsb3Nl
c3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSBmb3Vu
ZFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpmb3Vu
ZFN0cmluZ1JhbmdlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSWYg
c2VhcmNoaW5nIGJhY2t3YXJkLCB1c2UgdGhlIHRyYWlsaW5nIHJhbmdlIGVkZ2VzIHRvIGNvcnJl
Y3RseSBkZXRlcm1pbmUgd2hpY2gKICAgICAgICAgICAgICAgICAvLyByYW5nZSBpcyBjbG9zZXN0
LiBTaW1pbGFybHksIGlmIHNlYXJjaGluZyBmb3J3YXJkLCB1c2UgdGhlIGxlYWRpbmcgcmFuZ2Ug
ZWRnZXMuCiAgICAgICAgICAgICAgICAgYXV0byYgY2xvc2VzdFN0cmluZ1Bvc2l0aW9uID0gaXNC
YWNrd2FyZFNlYXJjaCA/IGNsb3Nlc3RTdHJpbmdSYW5nZS0+ZW5kIDogY2xvc2VzdFN0cmluZ1Jh
bmdlLT5zdGFydDsKLSAgICAgICAgICAgICAgICBhdXRvJiBmb3VuZFN0cmluZ1Bvc2l0aW9uID0g
aXNCYWNrd2FyZFNlYXJjaCA/IGZvdW5kU3RyaW5nUmFuZ2UuZW5kIDogZm91bmRTdHJpbmdSYW5n
ZS5zdGFydDsKKyAgICAgICAgICAgICAgICBhdXRvJiBmb3VuZFN0cmluZ1Bvc2l0aW9uID0gaXNC
YWNrd2FyZFNlYXJjaCA/IGZvdW5kU3RyaW5nUmFuZ2UtPmVuZCA6IGZvdW5kU3RyaW5nUmFuZ2Ut
PnN0YXJ0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGF1dG8gY2xvc2VzdFBv
c2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLm9mZnNldDsKICAgICAgICAgICAg
ICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0ID0gZm91bmRTdHJpbmdQb3NpdGlvbi5vZmZz
ZXQ7CkBAIC02MTgsNyArNjE3LDcgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW8KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCwg
c2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0
ID4gMCkgfHwgKGlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkpCi0gICAgICAgICAgICAg
ICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5nUmFuZ2U7CisgICAgICAgICAg
ICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9ICpmb3VuZFN0cmluZ1JhbmdlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQppbmRleCBlNDRjYjRiN2VhNjVkOTNlNTEzOThkMjVlMjRjNTRkMWFhZDMxZGQwLi5m
NzM0ZjI3NTYxOGVlYTI0M2RmMTUyMTk1MDBmZDcyYTk1MjUyN2M3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtNjkyLDcgKzY5Miw3IEBAIHN0YXRpYyBBY2Nl
c3NpYmlsaXR5VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFt
ZXRlcml6ZWRBdHRyCiAKICAgICBpZiAoW21hcmtlclJhbmdlcyBpc0tpbmRPZkNsYXNzOltOU0Fy
cmF5IGNsYXNzXV0pIHsKICAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMgPSBtYWtlVmVjdG9y
KG1hcmtlclJhbmdlcywgW3dyYXBwZXJdIChpZCBtYXJrZXJSYW5nZSkgewotICAgICAgICAgICAg
cmV0dXJuIG1ha2VTaW1wbGVSYW5nZShbd3JhcHBlciByYW5nZUZvclRleHRNYXJrZXJSYW5nZTpt
YXJrZXJSYW5nZV0pOworICAgICAgICAgICAgcmV0dXJuIG1ha2VSYW5nZShbd3JhcHBlciByYW5n
ZUZvclRleHRNYXJrZXJSYW5nZTptYXJrZXJSYW5nZV0pOwogICAgICAgICB9KTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGE2MjY5NGRlMWI4NmNmYzFiMzNjZGYxNjcwMmIw
ZTY1NDEzOGFmNGEuLjQ4OTI3YzM2ZWZhYTdjMTk4MmNlNjdmOTIwZGNhZjY0YTMwNDUxMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDczLDcgKzQ3Myw3IEBAIHN0YXRpYyBib29sIGFj
Y2VwdHNFZGl0aW5nRm9jdXMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoIWZyYW1l
IHx8ICFyb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZnJhbWUtPmVk
aXRvcigpLnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZU9mQ29udGVudHMoKnJvb3QpLnB0cigpKTsK
KyAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLnNob3VsZEJlZ2luRWRpdGluZyhtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpKTsKIH0KIAogc3RhdGljIGJvb2wgY2FuQWNjZXNz
QW5jZXN0b3IoY29uc3QgU2VjdXJpdHlPcmlnaW4mIGFjdGl2ZVNlY3VyaXR5T3JpZ2luLCBGcmFt
ZSogdGFyZ2V0RnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA5YjdhMWE2MjEyMTk1YTJlNDc0
OGNiMjk3MTk0NGMxNjYzMjgwMDk2Li45ZWExNDlkMmY1MWRlMjRjMzM3MTYwYjUzYWY3YzFlZGNk
Yzg4ZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTE4MzMsMjYgKzE4MzMsMjYgQEAgRmxvYXRS
ZWN0IFJhbmdlOjphYnNvbHV0ZUJvdW5kaW5nUmVjdChPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVo
YXZpb3I+IHJlY3RPcHRpb24KICAgICByZXR1cm4gYm91bmRpbmdSZWN0KENvb3JkaW5hdGVTcGFj
ZTo6QWJzb2x1dGUsIHJlY3RPcHRpb25zKTsKIH0KIAotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25zdCBSYW5n
ZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIHsgeyByYW5nZS5zdGFydENvbnRhaW5lcigpLCByYW5n
ZS5zdGFydE9mZnNldCgpIH0sIHsgcmFuZ2UuZW5kQ29udGFpbmVyKCksIHJhbmdlLmVuZE9mZnNl
dCgpIH0gfTsKIH0KIAotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5n
ZT4mIHJhbmdlKQorU2ltcGxlUmFuZ2UgbWFrZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mIHJhbmdl
KQogewotICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkpOworICAgIHJldHVy
biBtYWtlUmFuZ2UocmFuZ2UuZ2V0KCkpOwogfQogCi1PcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZSgqcmFuZ2Up
OworICAgIHJldHVybiBtYWtlUmFuZ2UoKnJhbmdlKTsKIH0KIAotT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+JiByYW5nZSkKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYgcmFuZ2UpCiB7Ci0g
ICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VS
YW5nZShyYW5nZS5nZXQoKSk7CiB9CiAKIFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggYTg2MTljYjk0NjM0MzRlOGNl
ODFkMmI4NDdjMzI1YTAxMjA3ZTExMC4uOTM1YmJkYTQ3Yjc2MTA3OTA3N2M0MTYzZTFjODk5NzQ4
MjVkOTlmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTE3NiwxMCArMTc2LDEwIEBAIFdFQkNPUkVfRVhQ
T1JUIFJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIGJv
b2wgYXJlUmFuZ2VzRXF1YWwoY29uc3QgUmFuZ2UqLCBjb25zdCBSYW5nZSopOwogV0VCQ09SRV9F
WFBPUlQgYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIAot
U2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7Ci1TaW1wbGVSYW5nZSBt
YWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwotT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwotT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CitTaW1wbGVSYW5nZSBtYWtlUmFu
Z2UoY29uc3QgUmFuZ2UmKTsKK1NpbXBsZVJhbmdlIG1ha2VSYW5nZShjb25zdCBSZWY8UmFuZ2U+
Jik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlKGNvbnN0
IFJhbmdlKik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdl
KGNvbnN0IFJlZlB0cjxSYW5nZT4mKTsKIAogV0VCQ09SRV9FWFBPUlQgUmVmPFJhbmdlPiBjcmVh
dGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxS
YW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggNGE4ZDAwNGRlOTEyODlhMzRhZjBjMTUxYjM2
OWMzNTNkZmFkYmNjOS4uMjY1YzQ5N2I2MDgyODNkYjExYmUzZjA3ZjY0ZGVkNzUzYTY0MTVlNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC04Miw2ICs4MiwyMCBAQCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJiBub2RlKQogICAgIHJl
dHVybiBTaW1wbGVSYW5nZSB7IHsgKnBhcmVudCwgb2Zmc2V0IH0sIHsgKnBhcmVudCwgb2Zmc2V0
ICsgMSB9IH07CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgT3B0
aW9uYWw8Qm91bmRhcnlQb2ludD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50
PiYgZW5kKQoreworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpzdGFydCwgKmVuZCB9IH07Cit9CisKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2UoT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiBzdGFydCwg
T3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mJiBlbmQpCit7CisgICAgaWYgKCFzdGFydCB8fCAhZW5k
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgV1RGTW92ZSgq
c3RhcnQpLCBXVEZNb3ZlKCplbmQpIH0gfTsKK30KKwogU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHsgbWFrZUJvdW5k
YXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlQ29udGVudHMobm9kZSkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggNzBlN2M0
MjUxY2RkZjMxN2I0OWQ5YWEyZGM0MmU2ZDQ1NDdhNzRkZC4uMDM3NzgwYTYyMjQ5MWU3NTRkMDUw
ZTJhZmFkMzBlMTQ5NjI5OGZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBs
ZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTQ2LDEx
ICs0NiwxNCBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2UgewogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBs
ZVJhbmdlKEJvdW5kYXJ5UG9pbnQmJiwgQm91bmRhcnlQb2ludCYmKTsKIAogICAgIC8vIENvbnZl
bmllbmNlIG92ZXJsb2FkcyB0byBoZWxwIHdpdGggdHJhbnNpdGlvbiBmcm9tIHVzaW5nIGEgbG90
IG9mIGxpdmUgcmFuZ2VzLgotICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zaXRpb24gaXMgb3Zlciwg
cmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVNpbXBsZVJhbmdlIGluc3RlYWQu
CisgICAgLy8gRklYTUU6IE9uY2UgdHJhbnNpdGlvbiBpcyBvdmVyLCByZW1vdmUgYW5kIGNoYW5n
ZSBjYWxsZXJzIHRvIHVzZSBtYWtlUmFuZ2UgaW5zdGVhZC4KICAgICBXRUJDT1JFX0VYUE9SVCBT
aW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwogICAgIFNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5n
ZT4mKTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFu
Z2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25zdCBPcHRpb25hbDxCb3VuZGFy
eVBvaW50PiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5n
ZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmKTsK
KwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGUoTm9kZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKE5vZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZTJlODk0Y2I5Mzc5YzQzYTMz
M2JjYjNmMDgzMzIwMTQzM2Q3ZjIzMC4uOWFjMmU5ZDg2MTZkZDZhM2MxNGFmMDM1NTIyYzMwZTYw
ZTcxMzE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBz
dGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKICAg
ICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRD
aGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlv
blBhbmVsIH0sIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVS
YW5nZShhZGphY2VudFdvcmRSYW5nZSksIG51bGxwdHIpOworICAgICAgICBtX2RvY3VtZW50LmVk
aXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRD
aGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGFk
amFjZW50V29yZFJhbmdlLCBXVEY6Om51bGxvcHQpOwogICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CkBAIC02NTMsNyArNjUzLDcg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFsdGVybmF0
aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXQKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZF
UykKICAgICBhdXRvJiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8gc2Vs
ZWN0aW9uID0gZWRpdG9yLnNlbGVjdGVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGlvbiB8fCAh
ZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmICghc2VsZWN0aW9uIHx8ICFl
ZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgKnNlbGVjdGlvbiwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRv
KiBtYXJrZXIgOiBzZWxlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJz
KCkubWFya2Vyc0luUmFuZ2UoKnNlbGVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFs
dGVybmF0aXZlcykpCiAgICAgICAgIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtl
cigqbWFya2VyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCmluZGV4IDExMmY5N2IyYTBiNjU0NjI1NDY2Mjg4MjY3ZTYzM2JkYmJmZmI1
ZjEuLjg3MGM0ZGJiNjhkMzgwZjlhMWI4MWEwYzBlNWYxM2FhMzI3NGE0ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNzQ5
LDkgKzc0OSw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCku
Y2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRv
QmVSZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgp
LT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZSwgcmFuZ2VUb0JlUmVwbGFjZWQpKQog
ICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBtb3ZlUGFyYWdyYXBocyB3aWxsIGluc2Vy
dCBwbGFjZWhvbGRlcnMgaWYgaXQgcmVtb3ZlcyBibG9ja3MgdGhhdCB3b3VsZCByZXF1aXJlIHRo
ZWlyIHVzZSwgZG9uJ3QgbGV0IGJsb2NrCiAgICAgLy8gcmVtb3ZhbHMgdGhhdCBpdCBkb2VzIGNh
dXNlIHRoZSBpbnNlcnRpb24gb2YgKmFub3RoZXIqIHBsYWNlaG9sZGVyLgogICAgIGJvb2wgbmVl
ZFBsYWNlaG9sZGVyID0gbV9uZWVkUGxhY2Vob2xkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggMmQ3YWUyYWE2ZDU0MTE5MTgwMWM4ZmMwMjQ0MTBiZTZiMzUzMTI5Ny4uM2I1Zjdk
ZTc5ODM4OGEyNzM0MTM5Y2NmNzMyNjIxOTEwZjQ0OGExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtNTA3LDIxICs1MDcsMTggQEAgYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZSgpIGNv
bnN0CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKIH0KIAotYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZVJhbmdlKFJhbmdlKiBy
YW5nZSkgY29uc3QKK2Jvb2wgRWRpdG9yOjpjYW5EZWxldGVSYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3Rh
cnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFp
bmVyKCk7Ci0gICAgCi0gICAgaWYgKCFzdGFydENvbnRhaW5lci5oYXNFZGl0YWJsZVN0eWxlKCkg
fHwgIWVuZENvbnRhaW5lci5oYXNFZGl0YWJsZVN0eWxlKCkpCisgICAgaWYgKCFyYW5nZS5zdGFy
dC5jb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCAhcmFuZ2UuZW5kLmNvbnRhaW5lci0+
aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmFu
Z2UtPmNvbGxhcHNlZCgpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChyYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzID0gc3RhcnQucHJldmlvdXMoKTsKKyAgICBpZiAocmFuZ2UuY29sbGFwc2VkKCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNvbWV0aW1lcyBhbGxvdyBkZWxldGlvbnMgYXQgdGhlIHN0
YXJ0IG9mIGVkaXRhYmxlIHJvb3RzLCBsaWtlIHdoZW4gdGhlIGNhcmV0IGlzIGluIGFuIGVtcHR5
IGxpc3QgaXRlbS4KLSAgICAgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9
IHN0YXJ0Q29udGFpbmVyLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgYXV0byBwcmV2
aW91cyA9IFZpc2libGVQb3NpdGlvbiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5n
ZS5zdGFydCksIERPV05TVFJFQU0gfS5wcmV2aW91cygpOworICAgICAgICBpZiAocHJldmlvdXMu
aXNOdWxsKCkgfHwgcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5y
b290RWRpdGFibGVFbGVtZW50KCkgIT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yb290RWRpdGFi
bGVFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTU1OCw3ICs1NTUsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRlV2l0
aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkg
ZwogICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAg
ICAgICAgICAgICAgICBhZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgICAgICAgICBhZGRS
YW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVkUmFuZ2UoKSwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpB
cHBlbmRUZXh0KTsKICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShj
YW5TbWFydENvcHlPckRlbGV0ZSgpKTsKICAgICAgICAgICAgIC8vIEltcGxpY2l0bHkgY2FsbHMg
cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCkuCiAgICAgICAgIH0KQEAgLTYy
Nyw3ICs2MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dEJ5cGFzc2luZ0RIVE1M
KCkKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCYgcGFzdGVib2FyZCkKIHsKICAgICBTdHJpbmcgdGV4dCA9IHJlYWRQbGFpblRleHRGcm9tUGFz
dGVib2FyZChwYXN0ZWJvYXJkKTsKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3Vs
ZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRU
ZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0KHRleHQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKHBhc3RlYm9hcmQpKTsKIH0KIApAQCAtNjUyLDcgKzY0OSw3IEBAIGJvb2wgRWRpdG9yOjpj
YW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAg
IHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkg
JiYgcGFzdGVib2FyZC5jYW5TbWFydFJlcGxhY2UoKTsKIH0KIAotYm9vbCBFZGl0b3I6OnNob3Vs
ZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFj
aW5nRE9NUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wgRWRpdG9y
OjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByZXBsYWNpbmdET01SYW5nZSwgRWRpdG9ySW5zZXJ0QWN0
aW9uIGdpdmVuQWN0aW9uKQogewogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTY2MSw3ICs2NTgsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21l
bnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlKiByZXBsYWNpbmdETwogICAgIGlm
IChpczxDaGFyYWN0ZXJEYXRhPihjaGlsZCkgJiYgZnJhZ21lbnQubGFzdENoaWxkKCkgPT0gY2hp
bGQpCiAgICAgICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dChkb3duY2FzdDxD
aGFyYWN0ZXJEYXRhPigqY2hpbGQpLmRhdGEoKSwgcmVwbGFjaW5nRE9NUmFuZ2UsIGdpdmVuQWN0
aW9uKTsKIAotICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZSgmZnJhZ21lbnQs
IHJlcGxhY2luZ0RPTVJhbmdlLCBnaXZlbkFjdGlvbik7CisgICAgcmV0dXJuIGNsaWVudCgpLT5z
aG91bGRJbnNlcnROb2RlKGZyYWdtZW50LCByZXBsYWNpbmdET01SYW5nZSwgZ2l2ZW5BY3Rpb24p
OwogfQogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVu
dEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZWN0UmVwbGFjZW1lbnQs
IFNtYXJ0UmVwbGFjZSBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGUgbWF0Y2hTdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3Rl
SGFuZGxpbmcpCkBAIC03MjQsMjcgKzcyMSwyMSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbAog
CiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4
dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZWN0UmVwbGFjZW1lbnQsIFNtYXJ0UmVwbGFjZSBzbWFy
dFJlcGxhY2UsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdl
KCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCksIHNl
bGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGU6OlllcywgZWRpdGluZ0Fj
dGlvbik7CisgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZy
b21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQs
IHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZTo6WWVzLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAotUmVm
UHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwor
ICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiB9CiAKLWJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFu
Z2UpIGNvbnN0Citib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiByYW5nZSkgY29uc3QKIHsKLSAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5j
b2xsYXBzZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghY2FuRGVs
ZXRlUmFuZ2UocmFuZ2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY2xp
ZW50KCkgJiYgY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4g
cmFuZ2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQoKSAmJiBjYW5EZWxldGVSYW5nZSgqcmFuZ2UpICYm
IGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZSgqcmFuZ2UpOwogfQogCiBi
b29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKQEAgLTc2Myw3ICs3NTQsNyBAQCBib29sIEVkaXRv
cjo6dHJ5REhUTUxDdXQoKQogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5k
RXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50S2luZDo6Q3V0KTsKIH0K
IAotYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5n
ZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGNvbnN0Citib29sIEVkaXRvcjo6
c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGNvbnN0CiB7CiAgICAg
aWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJl
c3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05ODAsNyArOTcxLDcgQEAgdm9pZCBF
ZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uLAogICAgICAgICBkaXNwYXRjaElucHV0RXZlbnQoKmVsZW1lbnQsIGlu
cHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0KICAgICAKLWJvb2wgRWRpdG9yOjpzaG91
bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIFJhbmdlKiByYW5nZSkKK2Jvb2wg
RWRpdG9yOjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsgICAKICAgICByZXR1cm4gY2xpZW50KCktPnNob3Vs
ZEFwcGx5U3R5bGUoc3R5bGUsIHJhbmdlKTsKIH0KQEAgLTEwMTEsNyArMTAwMiw3IEBAIHZvaWQg
RWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8
ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2xpZW50KCkg
fHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoKnN0
eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlv
bik7CiB9CkBAIC0xMDIyLDcgKzEwMTMsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uKFJlZjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZwogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4dCBkZWNv
cmF0aW9ucyBzaW5jZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNsaWVudCgp
IHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRU
ZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmICgh
Y2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhS
ZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0
eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAt
MTAzMyw3ICsxMDI0LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVj
dGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxl
IHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShz
dHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZSgqc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUo
c3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQogCkBAIC0xMjY3LDcgKzEyNTgsNyBAQCBib29sIEVk
aXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4
dCwgYm9vbCBzZWxlY3RJbgogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0
LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBF
ZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQodGV4
dCwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlw
ZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyBm
YWxzZSB0byB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZygpIHRvIG5vdCBy
ZW1vdmUgbWFya2VycyBpZgpAQCAtMTMyNiw3ICsxMzE3LDcgQEAgYm9vbCBFZGl0b3I6Omluc2Vy
dExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJc
biJfcywgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpOwpAQCAtMTM0Niw3ICsxMzM3LDcgQEAgYm9vbCBFZGl0b3I6
Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAg
ICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKICAgICAKLSAgICBpZiAoIXNob3VsZElu
c2VydFRleHQoIlxuIiwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iX3MsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9u
IGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KTsKQEAgLTE0MDYsMTAgKzEzOTcsMTAgQEAgdm9pZCBFZGl0b3I6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb25Gb3JDdXQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMKIAogdm9p
ZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikK
IHsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICB3
aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoc2VsZWN0aW9uLmdldCgpKTsKKyAgICBhdXRv
IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmQoc2VsZWN0aW9uKTsKICAgICBpZiAoYWN0aW9uID09IEN1dEFjdGlvbikgewotICAg
ICAgICBpZiAoIXNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi5nZXQoKSkpCisgICAgICAgIGlm
ICghc2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyh0cnVlKTsKQEAg
LTE0MzQsNyArMTQyNSw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFj
dGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgICAgICAgICB3cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkpOwogI2Vsc2UKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBEZWxldGUgYWZ0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc3NjE4
PiBsYW5kcy4KLSAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgp
LT53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCAqbV9k
b2N1bWVudC5mcmFtZSgpLCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKKyAg
ICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVNlbGVj
dGlvbihjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvbikuZ2V0KCksIGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCksICptX2RvY3VtZW50LmZyYW1lKCksIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJh
bnNmZXIpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CkBAIC0xNTI2LDcgKzE1MTcsNyBAQCB2
b2lkIEVkaXRvcjo6cGVyZm9ybURlbGV0ZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgS2lsbFJpbmdJbnNl
cnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICBhZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGVk
UmFuZ2UoKSwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICBkZWxldGVT
ZWxlY3Rpb25XaXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAKICAgICAv
LyBjbGVhciB0aGUgInN0YXJ0IG5ldyBraWxsIHJpbmcgc2VxdWVuY2UiIHNldHRpbmcsIGJlY2F1
c2UgaXQgd2FzIHNldCB0byB0cnVlCkBAIC0xNzg0LDEyICsxNzc1LDEyIEBAIHZvaWQgRWRpdG9y
Ojp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQogCiAjZW5kaWYKIAotYm9vbCBF
ZGl0b3I6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNob3Vs
ZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIHJldHVybiBjbGll
bnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkRW5kRWRpdGluZyhyYW5nZSk7CiB9CiAKLWJvb2wgRWRp
dG9yOjpzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBFZGl0b3I6OnNob3Vs
ZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIGNs
aWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRCZWdpbkVkaXRpbmcocmFuZ2UpOwogfQpAQCAtMTg0
MSw3ICsxODMyLDcgQEAgdm9pZCBFZGl0b3I6OmRpZEVuZEVkaXRpbmcoKQogICAgICAgICBjbGll
bnQoKS0+ZGlkRW5kRWRpdGluZygpOwogfQogCi12b2lkIEVkaXRvcjo6d2lsbFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKFJhbmdlKiByYW5nZSkKK3ZvaWQgRWRpdG9yOjp3aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsK
ICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT53aWxsV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQocmFuZ2UpOwpAQCAtMTkyNCwxNCArMTkxNSwxNCBAQCBXcml0aW5nRGlyZWN0
aW9uIEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0
CiAKIHZvaWQgRWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbigpCiB7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGNvbXBvc2l0aW9uUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gY29tcG9zaXRp
b25SYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAv
LyBUaGUgY29tcG9zaXRpb24gY2FuIHN0YXJ0IGluc2lkZSBhIGNvbXBvc2VkIGNoYXJhY3RlciBz
ZXF1ZW5jZSwgc28gd2UgaGF2ZSB0byBvdmVycmlkZSBjaGVja3MuCiAgICAgLy8gU2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4MT4KICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbjsKLSAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24ocmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgIHNlbGVjdGlv
bi5zZXRXaXRob3V0VmFsaWRhdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Ut
PnN0YXJ0KSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5lbmQpKTsKICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7CiB9CiAK
QEAgLTI0ODUsOSArMjQ3Niw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgaWYgKCF0
ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0g
VmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5k
YXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAg
YXV0byBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSk7CiAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29y
ZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShhZGphY2Vu
dFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxp
dmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSkpOworICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3JkUmFuZ2Us
IGFkamFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSk7CiAjZWxzZQogI2lmICFVU0Uo
QVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCiAgICAgVU5VU0VEX1BBUkFNKGRvUmVwbGFjZW1l
bnQpOwpAQCAtMjU3Miw3ICsyNTYzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NB
ZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAg
ICAgLy8gZnVsbCBzZW50ZW5jZSBhcyB3ZSBjYW4sIHJlc3BlY3RpbmcgYm91bmRhcmllcyB3aGVy
ZSBzcGVsbGNoZWNraW5nIGlzIGRpc2FibGVkLgogICAgICAgICBmdWxsU2VudGVuY2VSYW5nZS0+
c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgc3BlbGxDaGVja2luZ1Jhbmdl
LT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5n
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2
ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRS
YW5nZSksIGNyZWF0ZUxpdmVSYW5nZShmdWxsU2VudGVuY2VSYW5nZSkpOworICAgICAgICBtYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMs
IHNwZWxsQ2hlY2tpbmdSYW5nZSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGZ1bGxTZW50ZW5jZVJhbmdl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjU4MCw3ICsyNTcxLDcgQEAgdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9z
aXRpb24gJndvcmRTdGFydCwKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ2hlY2sgc3BlbGxp
bmcgb2Ygb25lIHdvcmQKLSAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxs
aW5ncyhWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSwg
bWlzc3BlbGxpbmdSYW5nZSk7CiAKICAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlzc3BlbGxlZCB3
b3JkLgpAQCAtMjU5OSw3ICsyNTkwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NB
ZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAg
ICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigp
LnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IG1fZG9jdW1lbnQuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0
ZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFj
dGlvbjo6SW5zZXJ0KTsKIApAQCAtMjYxNiw3ICsyNjA3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRT
dGFydCwKICNlbmRpZgogfQogICAgIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJh
ZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3Bl
bGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKK3ZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgYm9vbCBjaGVja1NwZWxsaW5nLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSkKIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5kZWQg
dG8gd29yZCBib3VuZGFyaWVzLgpAQCAtMjY0NCw5ICsyNjM1LDExIEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgYm9vCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBUZXh0Q2hlY2tpbmdIZWxwZXIg
Y2hlY2tlcigqY2xpZW50KCksICpzZWFyY2hSYW5nZSk7Ci0gICAgaWYgKGNoZWNrU3BlbGxpbmcp
Ci0gICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpOwotICAgIGVsc2UgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgIGlmIChj
aGVja1NwZWxsaW5nKSB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ0xp
dmVSYW5nZTsKKyAgICAgICAgY2hlY2tlci5tYXJrQWxsTWlzc3BlbGxpbmdzKGZpcnN0TWlzc3Bl
bGxpbmdMaXZlUmFuZ2UpOworICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtYWtlUmFu
Z2UoZmlyc3RNaXNzcGVsbGluZ0xpdmVSYW5nZSk7CisgICAgfSBlbHNlIGlmIChpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgY2hlY2tlci5tYXJrQWxsQmFkR3JhbW1hcigpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKQEAgLTI2NzQsMTggKzI2NjcsMTgg
QEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29u
c3QKICAgICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKLXZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICBtYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKHNlbGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1Jhbmdl
KTsKIH0KICAgICAKIHZvaWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsK
ICAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHNlbGVjdGlvbiwgZmFsc2UsIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hl
Y2tpbmdPcHRpb25zLCBSZWZQdHI8UmFuZ2U+JiYgc3BlbGxpbmdSYW5nZSwgUmVmUHRyPFJhbmdl
PiYmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBncmFtbWFyUmFu
Z2UpCit2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucywgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZ3JhbW1hclJhbmdlKQogewogICAgIGlmIChwbGF0Zm9ybURyaXZlblRleHRDaGVj
a2VyRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzEwLDggKzI3MDMsOCBAQCB2b2lk
IEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25T
ZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcigm
ZWRpdGFibGVOb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByYW5nZVRvQ2hlY2sg
PSBzaG91bGRNYXJrR3JhbW1hciA/IGdyYW1tYXJSYW5nZS5yZWxlYXNlTm9uTnVsbCgpIDogc3Bl
bGxpbmdSYW5nZS5yZWxlYXNlTm9uTnVsbCgpOwotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBw
YXJhZ3JhcGhUb0NoZWNrKHJhbmdlVG9DaGVjay5nZXQoKSk7CisgICAgYXV0byYgcmFuZ2VUb0No
ZWNrID0gc2hvdWxkTWFya0dyYW1tYXIgPyAqZ3JhbW1hclJhbmdlIDogKnNwZWxsaW5nUmFuZ2U7
CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaFRvQ2hlY2soY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlVG9DaGVjaykpOwogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzE5LDggKzI3MTIsOCBAQCB2b2lkIEVkaXRvcjo6bWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZQogCiAgICAgLy8gSW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlvbmFsbHkg
Y2hlY2sgcGFyYWdyYXBoLXdpZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNvbHZlZE9w
dGlvbnMgPSByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0Q2hl
Y2tpbmdPcHRpb25zKTsKLSAgICBhdXRvIHRleHRSZXBsYWNlbWVudFJhbmdlID0gYXV0b21hdGlj
UmVwbGFjZW1lbnRSYW5nZSA/IG1ha2VSZWYoKmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UpIDog
cmFuZ2VUb0NoZWNrLmNvcHlSZWYoKTsKLSAgICBhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVx
dWVzdDo6Y3JlYXRlKHJlc29sdmVkT3B0aW9ucywgVGV4dENoZWNraW5nUHJvY2Vzc0luY3JlbWVu
dGFsLCBhc3luY2hyb25vdXMgPyBtYWtlUmVmKHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFu
Z2UoKSkgOiBXVEZNb3ZlKHJhbmdlVG9DaGVjayksIFdURk1vdmUodGV4dFJlcGxhY2VtZW50UmFu
Z2UpLCBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCkpOworICAgIGF1dG8mIHRleHRS
ZXBsYWNlbWVudFJhbmdlID0gYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSA/ICphdXRvbWF0aWNS
ZXBsYWNlbWVudFJhbmdlIDogcmFuZ2VUb0NoZWNrOworICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxs
Q2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNz
SW5jcmVtZW50YWwsIGFzeW5jaHJvbm91cyA/IFJlZjxSYW5nZT4geyBwYXJhZ3JhcGhUb0NoZWNr
LnBhcmFncmFwaFJhbmdlKCkgfSA6IGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvQ2hlY2spLCBjcmVh
dGVMaXZlUmFuZ2UodGV4dFJlcGxhY2VtZW50UmFuZ2UpLCBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFn
cmFwaFJhbmdlKCkpOwogICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
NzUzLDkgKzI3NDYsOSBAQCBzdGF0aWMgYm9vbCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5
cGUoVGV4dENoZWNraW5nVHlwZSB0eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBF
ZGl0b3I6OnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoUmFuZ2UmIHJhbmdlVG9SZXBsYWNl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQordm9pZCBFZGl0b3I6OnJlcGxhY2VSYW5nZUZv
clNwZWxsQ2hlY2tpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50KQogewotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNy
ZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2Up
LCByZXBsYWNlbWVudCktPmFwcGx5KCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNo
ZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGgmIHBhcmFncmFwaCwgUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50LCBDaGFyYWN0ZXJSYW5nZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKQEAgLTI4OTUsNyAr
Mjg4OCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNr
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAgICAgcmVzdG9y
ZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVk
aXRSaWNobHkoKSkKICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlTGlua0NvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpLCByZXBsYWNlbWVudCktPmFwcGx5KCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VtZW50LCByYW5nZVRvUmVw
bGFjZS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2VydFRleHQocmVwbGFjZW1lbnQsIG1ha2VS
YW5nZShyYW5nZVRvUmVwbGFjZSksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7CiAgICAg
ICAgICAgICAgICAgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFy
YWdyYXBoKHBhcmFncmFwaCwgcmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50LCB7IHJlc3VsdExv
Y2F0aW9uLCByZXN1bHRMZW5ndGggfSk7CiAKICAgICAgICAgICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7CkBAIC0y
OTQ4LDEyICsyOTQxLDEyIEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIGlmIChyZXBsYWNlZFN0cmluZy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9u
ID0gc2VsZWN0ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0aW9uIHx8ICFzaG91bGRJbnNlcnRU
ZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
UGFzdGVkKSkKKyAgICBhdXRvIHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAo
IXNlbGVjdGlvbiB8fCAhc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9u
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCAqc2Vs
ZWN0aW9uKTsKLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKCpzZWxlY3Rpb24p
OworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKCpz
ZWxlY3Rpb24pKTsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcs
IFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5z
ZXJ0KTsKICAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShDaGFyYWN0
ZXJSYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgo
KSkpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQs
IFN0cmluZygpKTsKQEAgLTI5NzksMTEgKzI5NzIsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2Vs
ZWMKICAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgp
KQogICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4dENoZWNraW5nVHlwZTo6
R3JhbW1hcik7CiAgICAgICAgIGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gc3BlbGxpbmdTZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uo
c3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSks
IGNyZWF0ZUxpdmVSYW5nZShncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKTsK
KyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hl
Y2tpbmdPcHRpb25zLCBzcGVsbENoZWNraW5nUmFuZ2UsIHNwZWxsQ2hlY2tpbmdSYW5nZSwgZ3Jh
bW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CiAgICAgbWFya01pc3NwZWxs
aW5ncyhzcGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBpZiAo
bWFya0dyYW1tYXIpCiAgICAgICAgIG1hcmtCYWRHcmFtbWFyKGdyYW1tYXJTZWxlY3Rpb24pOwpA
QCAtMzA4NiwyMyArMzA3OSwxOCBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9u
QXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgogICAgIG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihw
b3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFu
Z2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCitPcHRpb25hbDxTaW1wbGVS
YW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkK
IHsKICAgICBhdXRvIGRvY3VtZW50ID0gbV9kb2N1bWVudC5mcmFtZSgpLT5kb2N1bWVudEF0UG9p
bnQod2luZG93UG9pbnQpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1dG8gZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBhdXRvIGZyYW1l
VmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBmcmFtZVBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0Nv
bnRlbnRzKHdpbmRvd1BvaW50KTsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rp
b24geyBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkgfTsKLSAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbiB7
IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVZpZXctPndpbmRvd1RvQ29udGVu
dHMod2luZG93UG9pbnQpKSB9LnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lbnQsIFJldmVhbEV4dGVudE9wdGlvbiByZXZlYWxFeHRlbnRPcHRpb24pCkBA
IC0zMTI5LDE3ICszMTE3LDE2IEBAIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFu
Z2VzKGJvb2wgaWdub3JlLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsCiAgICAgICAgIHJl
dmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQsIFJldmVhbEV4dGVudCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9y
Ojpjb21wb3NpdGlvblJhbmdlKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6
OmNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdAogewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fY29tcG9zaXRpb25Ob2RlLT5sZW5ndGgoKTsKICAgICB1
bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWluKG1fY29tcG9zaXRpb25TdGFydCwgbGVuZ3RoKTsKLSAg
ICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1pbihzdGQ6Om1heChzdGFydCwgbV9jb21wb3NpdGlvbkVu
ZCksIGxlbmd0aCk7Ci0gICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGVhcmx5IHJldHVybiBuZWVl
ZD8KKyAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6OmNsYW1wKG1fY29tcG9zaXRpb25FbmQsIHN0YXJ0
LCBsZW5ndGgpOwogICAgIGlmIChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG1fY29tcG9zaXRpb25Ob2RlLT5kb2N1bWVudCgp
LCBtX2NvbXBvc2l0aW9uTm9kZS5nZXQoKSwgc3RhcnQsIG1fY29tcG9zaXRpb25Ob2RlLmdldCgp
LCBlbmQpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgeyAq
bV9jb21wb3NpdGlvbk5vZGUsIHN0YXJ0IH0sIHsgKm1fY29tcG9zaXRpb25Ob2RlLCBlbmQgfSB9
IH07CiB9CiAKIGJvb2wgRWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbih1bnNpZ25lZCYg
c2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3Rpb25FbmQpIGNvbnN0CkBAIC0zMjAxLDcg
KzMxODgsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICB9CiAKICAgICAvLyBJbnNl
cnQgdGhlIHRyYW5zcG9zZWQgY2hhcmFjdGVycy4KLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQo
dHJhbnNwb3NlZCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAg
IGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0cmFuc3Bvc2VkLCBuZXdTZWxlY3Rpb24uZmlyc3RSYW5n
ZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dCh0cmFuc3Bvc2VkLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8s
IFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiB9CkBAIC0zMzYwLDEzICsz
MzQ3LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lkdGgoSW50UmVjdCYg
cmVjdCkKICAgICAgICAgcmVjdC5zZXRIZWlnaHQoMCk7CiB9CiAKLUludFJlY3QgRWRpdG9yOjpm
aXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CitJbnRSZWN0IEVkaXRvcjo6Zmly
c3RSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIHJh
bmdlLT5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CisgICAgcmFuZ2Uuc3RhcnQuZG9j
dW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2li
bGVQb3NpdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLnN0YXJ0KSwgRE9XTlNUUkVBTSk7CiAKLSAgICBpZiAocmFuZ2UtPmNvbGxhcHNl
ZCgpKSB7CisgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBH
ZXR0aW5nIGNhcmV0IHJlY3QgYW5kIHJlbW92aW5nIGNhcmV0IHdpZHRoIGlzIGEgdmVyeSByb3Vu
ZGFib3V0IHdheSB0byBnZXQgY29sbGFwc2VkIHJhbmdlIGxvY2F0aW9uLgogICAgICAgICAvLyBJ
biBwYXJ0aWN1bGFyLCB3aWR0aCBhZGp1c3RtZW50IGRvZXNuJ3Qgd29yayBmb3Igcm90YXRlZCB0
ZXh0LgogICAgICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gUmVuZGVyZWRQb3NpdGlvbihz
dGFydFZpc2libGVQb3NpdGlvbikuYWJzb2x1dGVSZWN0KCk7CkBAIC0zMzc0LDEwICszMzYxLDEw
IEBAIEludFJlY3QgRWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0
CiAgICAgICAgIHJldHVybiBzdGFydENhcmV0UmVjdDsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9z
aXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5lbmRQb3NpdGlvbigpLCBVUFNUUkVBTSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSwgVVBTVFJFQU0pOwogCiAgICAgaWYgKGluU2FtZUxpbmUo
c3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlvbikpCi0gICAgICAgIHJldHVy
biBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRRdWFkcygqcmFuZ2UpKSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5n
ZSkpKTsKIAogICAgIExheW91dFVuaXQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lOwogICAgIEludFJl
Y3Qgc3RhcnRDYXJldFJlY3QgPSBSZW5kZXJlZFBvc2l0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9u
KS5hYnNvbHV0ZVJlY3QoJmV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CkBAIC0zNDAzLDcgKzMzOTAs
NyBAQCBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVgogICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkg
JiYgbV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBjbGllbnQoKSAmJiBj
bGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkU2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3U2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOworICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0
ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSwgbmV3U2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKIHZvaWQg
RWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ5MCw3ICszNDc3LDcgQEAgYm9vbCBFZGl0b3I6
OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiAK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAKLSAgICBhdXRvIHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJn
ZXQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQoKSwgb3B0aW9u
cyk7CisgICAgYXV0byByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rp
b24uZmlyc3RSYW5nZSgpLCBvcHRpb25zKTsKICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTM1MDIsMTA2ICszNDg5LDEwOSBAQCBib29sIEVkaXRvcjo6
ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmco
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMg
b3B0aW9ucykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBhdXRvJiBzdGFydChUJiYgcmFu
Z2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG9wdGlvbnMuY29udGFpbnMo
QmFja3dhcmRzKSA/IHJhbmdlLmVuZCA6IHJhbmdlLnN0YXJ0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdGF0aWMgYXV0byYgZW5kKFQmJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykK
K3sKKyAgICByZXR1cm4gb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpID8gcmFuZ2Uuc3RhcnQg
OiByYW5nZS5lbmQ7Cit9CisKK3N0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50
QWZ0ZXJOb2RlQ29udGVudHMoTm9kZSYgbm9kZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKK3sKKyAg
ICByZXR1cm4gb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpID8gbWFrZUJvdW5kYXJ5UG9pbnRC
ZWZvcmVOb2RlQ29udGVudHMobm9kZSkgOiBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRl
bnRzKG5vZGUpOworfQorCitzdGF0aWMgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5k
YXJ5UG9pbnRBZnRlck5vZGUoTm9kZSYgbm9kZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKK3sKKyAg
ICByZXR1cm4gb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpID8gbWFrZUJvdW5kYXJ5UG9pbnRC
ZWZvcmVOb2RlKG5vZGUpIDogbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGUobm9kZSk7Cit9CisK
K3N0YXRpYyBTaW1wbGVSYW5nZSBjb2xsYXBzZUlmUm9vdHNEaWZmZXIoU2ltcGxlUmFuZ2UmJiBy
YW5nZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBoZWxwcyBjb3JyZWN0IHJlc3VsdHMgaW4gc29t
ZSBjYXNlcyBpbnZvbHZpbmcgc2hhZG93IHRyZWVzLiBCdXQgd2UgY2FuIGluY29ycmVjdGx5IGZp
bmQgYSBzdHJpbmcgd2l0aCBtaWRkbGUgY2hhcmFjdGVycyBpbiBhbiBpbnB1dCBlbGVtZW50IGFu
ZCBmaXJzdCBhbmQgbGFzdCBjaGFyYWN0ZXJzIG91dHNpZGUgaXQuCisgICAgcmV0dXJuICZyYW5n
ZS5zdGFydC5jb250YWluZXItPnJvb3ROb2RlKCkgPT0gJnJhbmdlLmVuZC5jb250YWluZXItPnJv
b3ROb2RlKCkKKyAgICAgICAgPyBXVEZNb3ZlKHJhbmdlKSA6IFNpbXBsZVJhbmdlIHsgcmFuZ2Uu
c3RhcnQsIHJhbmdlLnN0YXJ0IH07Cit9CisKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6
OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgcmVmZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgaWYg
KHRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gU3RhcnQgZnJvbSBhbiBlZGdlIG9mIHRoZSByZWZl
cmVuY2UgcmFuZ2UsIGlmIHRoZXJlJ3MgYSByZWZlcmVuY2UgcmFuZ2UgdGhhdCdzIG5vdCBpbiBz
aGFkb3cgY29udGVudC4gV2hpY2ggZWRnZQogICAgIC8vIGlzIHVzZWQgZGVwZW5kcyBvbiB3aGV0
aGVyIHdlJ3JlIHNlYXJjaGluZyBmb3J3YXJkIG9yIGJhY2t3YXJkLCBhbmQgd2hldGhlciBzdGFy
dEluU2VsZWN0aW9uIGlzIHNldC4KLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdl
T2ZDb250ZW50cyhkb2N1bWVudCgpKSk7CiAKLSAgICBib29sIGZvcndhcmQgPSAhb3B0aW9ucy5j
b250YWlucyhCYWNrd2FyZHMpOwogICAgIGJvb2wgc3RhcnRJblJlZmVyZW5jZVJhbmdlID0gcmVm
ZXJlbmNlUmFuZ2UgJiYgb3B0aW9ucy5jb250YWlucyhTdGFydEluU2VsZWN0aW9uKTsKLSAgICBp
ZiAocmVmZXJlbmNlUmFuZ2UpIHsKLSAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzdGFydEluUmVmZXJl
bmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdl
LT5zdGFydFBvc2l0aW9uKCkpOwotICAgIH0KKyAgICBhdXRvIHNoYWRvd1RyZWVSb290ID0gcmVm
ZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+c3RhcnRDb250YWluZXIoKS5jb250YWluaW5n
U2hhZG93Um9vdCgpIDogbnVsbHB0cjsKIAotICAgIFJlZlB0cjxTaGFkb3dSb290PiBzaGFkb3dU
cmVlUm9vdCA9IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSA6IG51bGxwdHI7Ci0gICAgaWYgKHNoYWRvd1RyZWVS
b290KSB7Ci0gICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dEVuZCgqc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc2hhZG93
VHJlZVJvb3QsIDApOwotICAgIH0KKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KCkpOworICAgIGlmIChyZWZlcmVuY2VSYW5nZSkK
KyAgICAgICAgc3RhcnQoc2VhcmNoUmFuZ2UsIG9wdGlvbnMpID0gc3RhcnRJblJlZmVyZW5jZVJh
bmdlID8gc3RhcnQoKnJlZmVyZW5jZVJhbmdlLCBvcHRpb25zKSA6IGVuZCgqcmVmZXJlbmNlUmFu
Z2UsIG9wdGlvbnMpOworICAgIGlmIChzaGFkb3dUcmVlUm9vdCkKKyAgICAgICAgZW5kKHNlYXJj
aFJhbmdlLCBvcHRpb25zKSA9IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNo
YWRvd1RyZWVSb290LCBvcHRpb25zKTsKKyAgICBhdXRvIHJlc3VsdFJhbmdlID0gY29sbGFwc2VJ
ZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykp
OwogCi0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5k
UGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAgICAgLy8gSWYgd2Ug
c3RhcnRlZCBpbiB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhhY3Rs
eSBtYXRjaGVzIHRoZSByZWZlcmVuY2UgcmFuZ2UsIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVpbGQg
YSBzZWxlY3Rpb24gd2l0aCB0aGUgZm91bmQgcmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0
ZXNwYWNlLgogICAgIC8vIENvbXBhcmUgcmFuZ2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVj
dHMgdG8gaWdub3JlIHRoZSB3YXkgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1hZGUu
Ci0gICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChjcmVhdGVM
aXZlUmFuZ2UoVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5n
ZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7Ci0gICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAg
ICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChyZWZlcmVuY2VS
YW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLQotICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QpIHsK
LSAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dCgqc2hhZG93VHJlZVJvb3QsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0UmFuZ2Ug
PSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0
aW9ucykpOworICAgIGlmIChzdGFydEluUmVmZXJlbmNlUmFuZ2UgJiYgVmlzaWJsZVNlbGVjdGlv
bihyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKSA9PSByZWZlcmVuY2VSYW5nZSkgewor
ICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1
bWVudCgpKTsKKyAgICAgICAgc3RhcnQoc2VhcmNoUmFuZ2UsIG9wdGlvbnMpID0gZW5kKCpyZWZl
cmVuY2VSYW5nZSwgb3B0aW9ucyk7CisgICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkKKyAgICAg
ICAgICAgIGVuZChzZWFyY2hSYW5nZSwgb3B0aW9ucykgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVy
Tm9kZUNvbnRlbnRzKCpzaGFkb3dUcmVlUm9vdCwgb3B0aW9ucyk7CisgICAgICAgIHJlc3VsdFJh
bmdlID0gY29sbGFwc2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRh
cmdldCwgb3B0aW9ucykpOwogICAgIH0KIAogICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGlu
IHRoZSBzaGFkb3cgdHJlZSwgc2VhcmNoIGluIG1haW4gY29udGVudCBmb2xsb3dpbmcgdGhlIHNo
YWRvdyB0cmVlLgotICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJl
ZVJvb3QpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQo
KSk7Ci0gICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRB
ZnRlcigqc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZSgqc2hhZG93VHJlZVJvb3Qt
PnNoYWRvd0hvc3QoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHRSYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7
CisgICAgaWYgKHJlc3VsdFJhbmdlLmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7Cisg
ICAgICAgIHNlYXJjaFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3Vt
ZW50KCkpOworICAgICAgICBpZiAoYXV0byBob3N0ID0gc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hv
c3QoKSkKKyAgICAgICAgICAgIHN0YXJ0KHNlYXJjaFJhbmdlLCBvcHRpb25zKSA9ICptYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZSgqaG9zdCwgb3B0aW9ucyk7CisgICAgICAgIHJlc3VsdFJhbmdl
ID0gY29sbGFwc2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRhcmdl
dCwgb3B0aW9ucykpOwogICAgIH0KIAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5n
IGFuZCB3ZSdyZSB3cmFwcGluZywgc2VhcmNoIGFnYWluIGluIHRoZSBlbnRpcmUgZG9jdW1lbnQg
KHRoaXMgd2lsbAogICAgIC8vIHJlZHVuZGFudGx5IHJlLXNlYXJjaCB0aGUgYXJlYSBhbHJlYWR5
IHNlYXJjaGVkIGluIHNvbWUgY2FzZXMpLgotICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2Vk
KCkgJiYgb3B0aW9ucy5jb250YWlucyhXcmFwQXJvdW5kKSkgewotICAgICAgICByZXN1bHRSYW5n
ZSA9IGNyZWF0ZUxpdmVSYW5nZShmaW5kUGxhaW5UZXh0KHJhbmdlT2ZDb250ZW50cyhkb2N1bWVu
dCgpKSwgdGFyZ2V0LCBvcHRpb25zKSk7CisgICAgaWYgKHJlc3VsdFJhbmdlLmNvbGxhcHNlZCgp
ICYmIG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKKyAgICAgICAgcmVzdWx0UmFuZ2Ug
PSBjb2xsYXBzZUlmUm9vdHNEaWZmZXIoZmluZFBsYWluVGV4dChyYW5nZU9mQ29udGVudHMoZG9j
dW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOwogICAgICAgICAvLyBXZSB1c2VkIHRvIHJldHVy
biBmYWxzZSBoZXJlIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHNhbWUgcmFuZ2UgdGhhdCB3ZSBz
dGFydGVkIHdpdGgKICAgICAgICAgLy8gKGUuZy4sIHRoZSByZWZlcmVuY2UgcmFuZ2Ugd2FzIGFs
cmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyB0ZXh0KS4gQnV0IHdlIGRlY2lkZWQgdGhh
dAogICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBhIHN1Y2Nlc3MgY2FzZSBpbnN0ZWFkLCBzbyB3
ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCBpbiB0aGF0IGNhc2UuCiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSA/IG51bGxwdHIgOiByZXN1bHRSYW5nZTsKKyAgICBy
ZXR1cm4gcmVzdWx0UmFuZ2UuY29sbGFwc2VkKCkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0aW9u
YWwocmVzdWx0UmFuZ2UpOwogfQogCi1zdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSYg
ZnJhbWUsIFJhbmdlJiByYW5nZSkKK3N0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lJiBm
cmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIGZvciAoYXV0byogb3duZXJF
bGVtZW50ID0gZnJhbWUub3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50
ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGlm
ICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5vd25lckRvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UuaW50ZXJzZWN0c05vZGUoKm93bmVyRWxl
bWVudCk7CisgICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS5z
dGFydC5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSktPmludGVyc2VjdHNOb2RlKCpvd25lckVsZW1lbnQpOwogICAgICAgICAgICAg
cmV0dXJuICFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdW5zaWduZWQg
RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSog
cmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRj
aGVzLCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4qIG1hdGNoZXMpCit1bnNpZ25lZCBFZGl0b3I6OmNv
dW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgcmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBi
b29sIG1hcmtNYXRjaGVzLCBWZWN0b3I8U2ltcGxlUmFuZ2U+KiBtYXRjaGVzKQogewogICAgIGlm
ICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlYXJjaFJhbmdlOwog
ICAgIGlmIChyYW5nZSkgewotICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0g
JmRvY3VtZW50KCkpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOworICAgICAgICBp
ZiAoJnJhbmdlLT5zdGFydC5kb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQorICAgICAgICAgICAg
c2VhcmNoUmFuZ2UgPSAqcmFuZ2U7CiAgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZSgq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGlmICghc2VhcmNoUmFuZ2UpCi0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNv
bnRlbnRzKGRvY3VtZW50KCkpOworICAgICAgICBzZWFyY2hSYW5nZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKTsKIAotICAgIE5vZGUmIG9yaWdpbmFsRW5kQ29u
dGFpbmVyID0gc2VhcmNoUmFuZ2UtPmVuZENvbnRhaW5lcigpOwotICAgIGludCBvcmlnaW5hbEVu
ZE9mZnNldCA9IHNlYXJjaFJhbmdlLT5lbmRPZmZzZXQoKTsKKyAgICBhdXRvIG9yaWdpbmFsRW5k
ID0gc2VhcmNoUmFuZ2UtPmVuZDsKIAogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAg
IGRvIHsKQEAgLTM2MTAsOCArMzYwMCw4IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVz
Rm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAg
ICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNJblNoYWRvd1RyZWUo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dFN0YXJ0QWZ0ZXIoKnJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+c2hhZG93SG9zdCgpKTsK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQob3JpZ2luYWxFbmRDb250YWluZXIsIG9y
aWdpbmFsRW5kT2Zmc2V0KTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnJlc3VsdFJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5lbmQgPSBvcmlnaW5h
bEVuZDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM2MjYsMTUgKzM2
MTYsMTQgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgaWYgKGxpbWl0ID4gMCAm
JiBtYXRjaENvdW50ID49IGxpbWl0KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8g
U2V0IHRoZSBuZXcgc3RhcnQgZm9yIHRoZSBzZWFyY2ggcmFuZ2UgdG8gYmUgdGhlIGVuZCBvZiB0
aGUgcHJldmlvdXMKLSAgICAgICAgLy8gcmVzdWx0IHJhbmdlLiBUaGVyZSBpcyBubyBuZWVkIHRv
IHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAotICAgICAgICAvLyBzaW5jZSBmaW5kUGxhaW5U
ZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdGhlIHZpc2libGUKLSAgICAg
ICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChXVEZNb3Zl
KHJlc3VsdFJhbmdlLmVuZC5jb250YWluZXIpLCByZXN1bHRSYW5nZS5lbmQub2Zmc2V0KTsKKyAg
ICAgICAgLy8gU2V0IHRoZSBuZXcgc3RhcnQgZm9yIHRoZSBzZWFyY2ggcmFuZ2UgdG8gYmUgdGhl
IGVuZCBvZiB0aGUgcHJldmlvdXMgcmVzdWx0IHJhbmdlLgorICAgICAgICAvLyBUaGVyZSBpcyBu
byBuZWVkIHRvIHVzZSBWaXNpYmxlUG9zaXRpb24gaGVyZTogZmluZFBsYWluVGV4dCB3aWxsIHVz
ZSBUZXh0SXRlcmF0b3IgdG8gZ28gb3ZlciB2aXNpYmxlIHRleHQgbm9kZXMuCisgICAgICAgIHNl
YXJjaFJhbmdlLT5zdGFydCA9IFdURk1vdmUocmVzdWx0UmFuZ2UuZW5kKTsKIAotICAgICAgICBO
b2RlKiBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zaGFkb3dSb290KCk7Ci0gICAgICAg
IGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3Qt
PmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQo
KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+
c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5lbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpz
aGFkb3dUcmVlUm9vdCk7CisgICAgICAgIH0KICAgICB9IHdoaWxlICh0cnVlKTsKIAogICAgIHJl
dHVybiBtYXRjaENvdW50OwpAQCAtMzk0MywyMiArMzkzMiwyNCBAQCBTdHJpbmcgRWRpdG9yOjpz
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKICAgICByZXR1cm4gcGxhaW5UZXh0KCpy
YW5nZSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRh
dGVSZXF1ZXN0KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmNvbnRleHRS
YW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKKyAgICBhdXRv
JiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1
dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKSkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQ
YXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOworICAgIGlmICghc3RhcnQgfHwgIWVu
ZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpzdGFydCwg
KmVuZCB9IH07CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2lu
Z1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29uc3QKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENoZWNraW5nUmVzdWx0KGNvbnN0IFRl
eHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdAogewogICAgIGlmICghcmVzdWx0LnJhbmdl
Lmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IGNv
bnRleHRSYW5nZSA9IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGNvbnRleHRSYW5nZSA9IGNvbnRleHRSYW5n
ZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKICAgICBpZiAoIWNvbnRleHRSYW5nZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFy
YWN0ZXJSYW5nZSgqY29udGV4dFJhbmdlLCByZXN1bHQucmFuZ2UpKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjb250ZXh0
UmFuZ2UsIHJlc3VsdC5yYW5nZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpzY2hlZHVsZUVkaXRvclVJ
VXBkYXRlKCkKQEAgLTQyMjgsOCArNDIxOSw4IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAgICAgbV9p
c0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0cnVlOwogCiAgICAgaWYgKGF1dG8gcmFuZ2Ug
PSByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChhY2NlcHRlZENhbmRpZGF0ZSkpIHsKLSAgICAg
ICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIHJh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKLSAgICAgICAgICAgIFJlcGxh
Y2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6Y3JlYXRlKHJhbmdlLmdldCgpLCBhY2NlcHRlZENhbmRp
ZGF0ZS5yZXBsYWNlbWVudCktPmFwcGx5KCk7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0
KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCisgICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCkt
PmFwcGx5KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQsIG51bGxwdHIpOwogCkBAIC00MjYxLDE2ICs0MjUyLDE2IEBAIHZvaWQg
RWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpCiAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7
CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQogewot
ICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNlbGVjdGlvbiB0byBp
bmNsdWRlIHRoZSBhbmNob3IgdGFnIGl0J3MgaW4/Ci0gICAgLy8gV2hvZXZlciB3cm90ZSB0aGlz
IGNvZGUgb3JpZ2luYWxseSBmb3Jnb3QgdG8gbGVhdmUgdXMgYSBjb21tZW50IGV4cGxhaW5pbmcg
dGhlIHJhdGlvbmFsZS4KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwotICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKCk7Ci0gICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKLSAgICBhdXRvKiBlbmNsb3NpbmdB
bmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1v
bkFuY2VzdG9yKSwgSFRNTE5hbWVzOjphVGFnKTsKLSAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYm
IGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpKSwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgPj0gMCkK
LSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDApOworICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNlbGVjdGlvbiB0byBpbmNsdWRlIHRo
ZSBhbmNob3IgdGFnIGl0J3MgaW4/IFdob2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkg
Zm9yZ290IHRvIGxlYXZlIHVzIGEgY29tbWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCisg
ICAgYXV0byByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmly
c3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS0+c3RhcnQuY29u
dGFpbmVyLCByYW5nZS0+ZW5kLmNvbnRhaW5lcikuZ2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7
CisgICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS0+c3RhcnQpKSA+PSAwKQorICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbmNsb3NpbmdBbmNob3Ip
OworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiByYW5nZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgKaW5kZXggNjlkNjA1OTMwMjY1MmY2NzJmZDI1OTE1MmQzZGNmYjQ1ZmYwOTI2Zi4u
OWRlZGRjYTM4MzZmMTUzMDM2Y2ZhZjljODBkYWQzOTk0NGY0NDlmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxMywxMCArMjEzLDEwIEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG91dGRlbnQoKTsKICAgICB2b2lkIHRyYW5zcG9z
ZSgpOwogCi0gICAgYm9vbCBzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50Jiwg
UmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwotICAgIGJv
b2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBSYW5nZSopOworICAgIGJvb2wg
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlvbik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRU
ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvcklu
c2VydEFjdGlvbikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGREZWxldGVS
YW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSBjb25zdDsKKyAgICBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsK
IAogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbik7CiAKQEAgLTMyMiwxNiArMzIyLDE2IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3Q7CiAgICAg
Ym9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCk7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAg
IHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQg
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGdyYW1tYXJTZWxlY3Rpb24pOwogICAgIHZvaWQgbWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVJhbmdlRm9yU3BlbGxDaGVja2luZyhSYW5nZSYs
IGNvbnN0IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVJhbmdlRm9y
U3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAg
Ym9vbCBpc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9vdmVyd3JpdGVN
b2RlRW5hYmxlZDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdG9nZ2xlT3ZlcndyaXRlTW9k
ZUVuYWJsZWQoKTsKIAotICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFJlZlB0cjxSYW5nZT4mJiBzcGVs
bGluZ1JhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgUmVm
UHRyPFJhbmdlPiYmIGdyYW1tYXJSYW5nZSk7CisgICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgZ3JhbW1hclJhbmdlKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIE5P
X1JFVFVSTl9EVUVfVE9fQVNTRVJUCiAjZW5kaWYKQEAgLTM0Myw4ICszNDMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzaG93U3BlbGxpbmdHdWVzc1BhbmVsKCk7CiAgICAgYm9vbCBzcGVsbGluZ1Bh
bmVsSXNTaG93aW5nKCk7CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopOwot
ICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopOworICAgIGJvb2wgc2hvdWxkQmVnaW5F
ZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJik7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKICAgICB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7
CiAgICAgYm9vbCBjYW5VbmRvKCkgY29uc3Q7CkBAIC0zNTYsNyArMzU2LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKTsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKTsK
LSAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopOworICAgIHZv
aWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYpOwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKIAogICAg
IHZvaWQgc2hvd0ZvbnRQYW5lbCgpOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmKTsgLy8g
aWYgbm8gZXhpc3RpbmcgY29tcG9zaXRpb24sIHJlcGxhY2VzIHNlbGVjdGlvbgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKICAgICBib29sIGNhbmNlbENvbXBv
c2l0aW9uSWZTZWxlY3Rpb25Jc0ludmFsaWQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gY29tcG9zaXRpb25SYW5nZSgpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZ2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0
YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9uRW5kKSBjb25zdDsKIAogICAgIC8vIGdldHRpbmcgaW50
ZXJuYXRpb25hbCB0ZXh0IGlucHV0IGNvbXBvc2l0aW9uIHN0YXRlIChmb3IgdXNlIGJ5IElubGlu
ZVRleHRCb3gpCkBAIC00MDAsNyArNDAwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sLCBSZXZlYWxTZWxlY3Rpb24gc2hv
dWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24gPSBSZXZlYWxTZWxlY3Rpb246Olllcyk7CiAgICAg
Ym9vbCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdl
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC00MTEsNyArNDExLDcgQEAgcHVi
bGljOgogCiAgICAgRWRpdGluZ0JlaGF2aW9yIGJlaGF2aW9yKCkgY29uc3Q7CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNvbmZpcm1NYXJrZWRUZXh0KCk7CkBAIC00NDYsNyArNDQ2LDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0
IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYsIEZpbmRPcHRpb25zKTsKIAogICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0
LgogICAgIHZvaWQgc2V0TWFyayhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CkBAIC00NTUsMTMg
KzQ1NSwxMyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uOjpV
bnNwZWNpZmllZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZmlyc3RS
ZWN0Rm9yUmFuZ2UoUmFuZ2UqKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGZp
cnN0UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAKICAgICB2b2lkIHNl
bGVjdGlvbldpbGxDaGFuZ2UoKTsKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBPcHRpb25TZXQ8RnJhbWVTZWxl
Y3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbj4pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBk
YXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29u
c3QgU3RyaW5nJiwgUmFuZ2UqLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFy
a01hdGNoZXMsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiopOworICAgIFdFQkNPUkVfRVhQT1JUIHVu
c2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRj
aGVzLCBWZWN0b3I8U2ltcGxlUmFuZ2U+Kik7CiAgICAgYm9vbCBtYXJrZWRUZXh0TWF0Y2hlc0Fy
ZUhpZ2hsaWdodGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wpOwogCkBAIC01NDUsOCArNTQ1LDggQEAgcHVi
bGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlKFRleHRDaGVja2luZ1Jlc3VsdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdl
PiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gY29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQm
KSBjb25zdDsKICAgICBib29sIGlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlOyB9CiAKICAgICB2b2lkIHNldElz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oYm9vbCBiKSB7IG1faXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyA9IGI7IH0KQEAgLTU3OSw3ICs1NzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAot
ICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKKyAgICBib29sIGNhbkRlbGV0
ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0
V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYpOwogICAgIHZvaWQgcGFzdGVXaXRoUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkKiwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPik7CkBAIC01ODgsNyArNTg4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKERvY3VtZW50RnJh
Z21lbnQmKTsKIAogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9u
KGNvbnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZO
ZWVkZWQsIFJldmVhbEV4dGVudE9wdGlvbiA9IERvTm90UmV2ZWFsRXh0ZW50KTsKLSAgICB2b2lk
IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJv
b2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
KyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOwogICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiByZXNvbHZl
VGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdEVkaXRhYmxlRWxlbWVudCwgT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IpIGNvbnN0OwpAQCAtNjA4LDcgKzYwOCw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25z
dDsKIAotICAgIFJlZlB0cjxSYW5nZT4gYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpOworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZWxlY3Rpb25JbldlYkFyY2hp
dmVGb3JtYXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4
IGQ2ZWE0MjZkN2Y3ZmU3NjVmYjAwOTdlM2Q5NWFlYzc1OWRhNDI3ZWYuLjQ0MGZjZjZmYTVmZmYx
ZmRiODJlNmQ1NDUyMjkxMGU2NWM2YTkxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcApAQCAtMTc2LDE1ICsxNzYsMTUgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUlu
c2VydE5vZGUoRnJhbWUmIGZyYW1lLCBSZWY8Tm9kZT4mJiBjb250ZW50KQogc3RhdGljIGJvb2wg
ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eShGcmFtZSYgZnJhbWUsIFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gb2xkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0
eShncmFudWxhcml0eSk7CiAgICAgYXV0byBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHko
KTsKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRSYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShu
ZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCisgICAgaWYgKCFmcmFtZS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgqb2xkUmFuZ2UsICpuZXdSYW5n
ZSwgYWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQo
KSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqbmV3
UmFuZ2UpLnB0cigpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMjYsMTEgKzIyNiwxMSBAQCBzdGF0
aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxiYXI6OnBhZ2VTdGVwKGhlaWdodCkpOwog
fQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJhbmdlcyhSYW5nZSYgYSwgUmFuZ2Um
IGIpCitzdGF0aWMgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIGEs
IGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogewotICAgIFJhbmdlJiBzdGFydCA9IGEuY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYikucmVsZWFzZVJldHVyblZhbHVl
KCkgPD0gMCA/IGEgOiBiOwotICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6RU5EX1RPX0VORCwgYikucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIgOiBh
OwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3RhcnQuc3Rh
cnRDb250YWluZXIoKSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWluZXIoKSwg
ZW5kLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvJiBzdGFydCA9IGNyZWF0ZUxpdmVSYW5nZShhKS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJh
bmdlKGIpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gYSA6IGI7CisgICAgYXV0byYgZW5k
ID0gY3JlYXRlTGl2ZVJhbmdlKGEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsIGNyZWF0ZUxpdmVSYW5nZShiKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IGIg
OiBhOworICAgIHJldHVybiB7IHN0YXJ0LnN0YXJ0LCBlbmQuZW5kIH07CiB9CiAKIC8vIEV4ZWN1
dGUgY29tbWFuZCBmdW5jdGlvbnMKQEAgLTM1NCw3ICszNTQsNyBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdAogICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAg
IGlmIChtYXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
Y3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSku
Z2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKGNy
ZWF0ZUxpdmVSYW5nZSh1bmlvblJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVk
UmFuZ2UoKSkpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2Vs
ZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpzZWxlY3Rpb24p
LmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFu
Z2UodW5pb25SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pKS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDE0NzVm
ZTUzYTFjMzdiODczN2I4YWE1MDUwNGYxNzQ4YmE4NzYwODAuLjUyYTY3YThmNjFlYTYzMWMxODQ1
OGU4ZDllOWM3MWIxMGYwOTg0M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCkBAIC0yMzExLDcgKzIzMTEsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91
bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwog
ICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVj
dGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCi0gICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxl
dGVSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERl
bGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogRmxvYXRSZWN0
IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQppbmRleCBjNWNiYzNmOTdjZDhhOTkyYzBhZWU3YTMxYTg5ZWZkODdjZmEz
ZDc4Li5lZWZlOGZkOTUxY2NmYTRlYjY2MTgyN2Q1OGU2OWVhNTliNTg2YjdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTg4LDE0ICs4OCwxMyBA
QCBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKQogCiB2b2lkIEVkaXRvcjo6
Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwg
VmVjdG9yPFN0cmluZz4mIG91dFR5cGVzLCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBv
dXREYXRhKQogewotICAgIGF1dG8mIGRvY3VtZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOwotICAg
IGF1dG8gZWxlbWVudFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgeyAmZWxlbWVudCwg
UG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IgfSwgeyAmZWxlbWVudCwgUG9zaXRpb246
OlBvc2l0aW9uSXNBZnRlckFuY2hvciB9KTsKLSAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShlbGVtZW50UmFuZ2UucHRyKCksIG91dFR5cGVzLCBvdXREYXRhKTsK
KyAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoZWxlbWVudCk7
CisgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKGVsZW1lbnRSYW5nZSwgb3V0
VHlwZXMsIG91dERhdGEpOwogCiAgICAgb3V0VHlwZXMuYXBwZW5kKFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpjb2NvYVR5cGUoKSk7Ci0gICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURh
dGEgeyBkb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpLCB7IH0gfS5jcmVh
dGVTaGFyZWRCdWZmZXIoKSk7CisgICAgb3V0RGF0YS5hcHBlbmQoUGFzdGVib2FyZEN1c3RvbURh
dGEgeyBlbGVtZW50LmRvY3VtZW50KCkub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKSwg
eyB9IH0uY3JlYXRlU2hhcmVkQnVmZmVyKCkpOwogCi0gICAgaWYgKGF1dG8gYXJjaGl2ZSA9IExl
Z2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShlbGVtZW50UmFuZ2UucHRyKCkpKSB7CisgICAgaWYgKGF1
dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UoZWxl
bWVudFJhbmdlKS5nZXQoKSkpIHsKICAgICAgICAgaWYgKGF1dG8gd2ViQXJjaGl2ZURhdGEgPSBh
cmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSkgewogICAgICAgICAgICAgb3V0VHlwZXMu
YXBwZW5kKFdlYkFyY2hpdmVQYm9hcmRUeXBlKTsKICAgICAgICAgICAgIG91dERhdGEuYXBwZW5k
KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdlYkFyY2hpdmVEYXRhLmdldCgpKSk7CkBAIC0xMjMsNyAr
MTIyLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9h
cmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJp
bmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkg
OiBudWxscHRyOwogICAgICAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZv
cm1hdChzdHJpbmcuZ2V0KCkpOwogICAgICAgICBjb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJp
bmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSk7
Ci0gICAgICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVj
dGVkUmFuZ2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRh
KTsKKyAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKHNlbGVjdGVkUmFu
Z2UoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKICAgICB9CiAg
ICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0KCk7CiAg
ICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJv
YXJkV2l0aEltYWdlQWx0VGV4dCgpOwpAQCAtMTQ0LDcgKzE0Myw3IEBAIHZvaWQgRWRpdG9yOjp3
cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEp
CiAgICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWRE
YXRhRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAgIHdlYkNvbnRlbnQuZGF0
YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQu
ZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFn
ZUFsdFRleHQoKTsKLSAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5n
ZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHdlYkNvbnRlbnQuY2xpZW50VHlwZXMsIHdlYkNvbnRl
bnQuY2xpZW50RGF0YSk7CisgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhKHNl
bGVjdGVkUmFuZ2UoKSwgd2ViQ29udGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnRE
YXRhKTsKIAogICAgIHBhc3RlYm9hcmRXcml0ZXJEYXRhLnNldFdlYkNvbnRlbnQoV1RGTW92ZSh3
ZWJDb250ZW50KSk7CiB9CkBAIC0xODQsMTIgKzE4MywxMiBAQCB2b2lkIEVkaXRvcjo6cmVwbGFj
ZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZAogCiAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50LmZyYW1lKCksIGF0dHJpYnV0ZWRT
dHJpbmcpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50
LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAg
ICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFu
Z2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgICAgIHBhc3Rl
QXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxC
bG9ja3F1b3RlSGFuZGxpbmcpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3Ry
aW5nIHRleHQgPSBhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZzsKLSAgICAgICAgaWYgKHNob3VsZElu
c2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlBhc3RlZCkpCisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFu
Z2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgcGFzdGVBc1Bs
YWluVGV4dCh0ZXh0LCBmYWxzZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3Rr
L0VkaXRvckd0ay5jcHAKaW5kZXggOTlhYTExOTIyYzMyODE0YmMwYTZmNWUwY2FiZDlmNjNiMzhl
ODcxYy4uZGE3ZTk0MWNiOGYxZmJlMjNiMDAyZTI1ZGUwMGQ5Njg1OWFmY2U5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC01MCwxNyArNTAsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0
ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkLCAqcmFuZ2UsIG9w
dGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRl
eHQpOworICAgIGF1dG8gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoKnBhc3Rl
Ym9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRl
eHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9y
UGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCAq
cmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdt
ZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Okln
bm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAzMTIz
MjVmMjc2MjFjYmI4ODQ5MmEwNDI2ZWU1OTE2NTY3ZTRhMTYwLi42YzI1NDc5NjU1MzYwODRiMTYz
ODgwNDlkNDVhNTk5Y2Y5NjA2NzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCkBAIC0yMDYsMzAgKzIwNiwyNiBAQCB2b2lkIEVkaXRvcjo6d3JpdGVJbWFnZVRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBFbGVtZW50JiBpbWFnZUVsZW1lbgogICAg
IHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlID0gcGFzdGVib2FyZC5yZXNvdXJjZU1J
TUVUeXBlKGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgIHBhc3RlYm9h
cmRJbWFnZS5yZXNvdXJjZURhdGEgPSBjYWNoZWRJbWFnZS0+cmVzb3VyY2VCdWZmZXIoKTsKIAot
ICAgIGlmICghcGFzdGVib2FyZC5pc1N0YXRpYygpKSB7Ci0gICAgICAgIFBvc2l0aW9uIGJlZm9y
ZUltYWdlUG9zaXRpb24oJmltYWdlRWxlbWVudCwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVB
bmNob3IpOwotICAgICAgICBQb3NpdGlvbiBhZnRlckltYWdlUG9zaXRpb24oJmltYWdlRWxlbWVu
dCwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7Ci0gICAgICAgIGF1dG8gaW1hZ2VS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoaW1hZ2VFbGVtZW50LmRvY3VtZW50KCksIGJlZm9yZUltYWdl
UG9zaXRpb24sIGFmdGVySW1hZ2VQb3NpdGlvbik7Ci0gICAgICAgIGNsaWVudCgpLT5nZXRDbGll
bnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKGltYWdlUmFuZ2UucHRyKCksIHBhc3RlYm9hcmRJbWFn
ZS5jbGllbnRUeXBlcywgcGFzdGVib2FyZEltYWdlLmNsaWVudERhdGEpOwotICAgIH0KKyAgICBp
ZiAoIXBhc3RlYm9hcmQuaXNTdGF0aWMoKSkKKyAgICAgICAgY2xpZW50KCktPmdldENsaWVudFBh
c3RlYm9hcmREYXRhKG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoaW1hZ2VFbGVtZW50KSwgcGFzdGVi
b2FyZEltYWdlLmNsaWVudFR5cGVzLCBwYXN0ZWJvYXJkSW1hZ2UuY2xpZW50RGF0YSk7CiAKICAg
ICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpw
YXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0
ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRS
YW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgYm9vbCBhbGxv
d1BsYWluVGV4dCA9IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
KTsKICAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFu
Z2UsIGFsbG93UGxhaW5UZXh0KTsKICAgICBpbnQgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXMgPSBj
bGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVs
ZWdhdGUoaSk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFn
bWVudEZyb21EZWxlZ2F0ZShpKTsKICAgICAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICByZWFkZXIuYWRkRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gcmVhZGVyLmZyYWdtZW50OworICAgIGF1dG8gZnJhZ21lbnQgPSBXVEZNb3ZlKHJlYWRlci5m
cmFnbWVudCk7CiAgICAgaWYgKCFmcmFnbWVudCkgewogICAgICAgICBib29sIGNob3NlUGxhaW5U
ZXh0SWdub3JlZDsKICAgICAgICAgZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQo
KnBhc3RlYm9hcmQsICpyYW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0SWdub3Jl
ZCk7CkBAIC0yMzgsNyArMjM0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgIGlmIChm
cmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAg
ICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CiAKLSAgICBpZiAoZnJh
Z21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGZhbHNlLCBvcHRpb25zLmNv
bnRhaW5zKFBhc3RlT3B0aW9uOjpJZ25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6UmVz
cGVjdEJsb2NrcXVvdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUv
RWRpdG9yTGliV1BFLmNwcAppbmRleCAxMmZkNmE0M2VhMDVhMmEwZTcyYjc0YmE3MmQ5NjI4NjQ3
MDViYWUzLi4wYjdjMjYyNTNhMDA4MmUzYzU0YWVlZmVhMDYxNjMyNGU2MjQ4YzdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAgLTM3LDcg
KzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9hcmQmIHBh
c3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGFsbG93UGxhaW5UZXh0
LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3N0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwg
RnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRl
eHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
CiAKQEAgLTQ3LDggKzQ3LDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVh
dGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmICh0
eXBlcy5jb250YWlucygidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiKSAmJiBmcmFtZS5kb2N1bWVu
dCgpKSB7CiAgICAgICAgIFN0cmluZyBtYXJrdXAgPSBwYXN0ZWJvYXJkLnJlYWRTdHJpbmcoInRl
eHQvaHRtbDtjaGFyc2V0PXV0Zi04Iik7Ci0gICAgICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50
KCksIG1hcmt1cCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250
ZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwLCBlbXB0eVN0cmlu
ZygpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAgIH0KIAogICAgIGlm
ICghYWxsb3dQbGFpblRleHQpCkBAIC01Niw4ICs1NSw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYg
cGFzCiAKICAgICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIp
KSB7CiAgICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgaWYgKFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFuZ2Us
IHBhc3RlYm9hcmQucmVhZFN0cmluZygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpKQotICAg
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBwYXN0ZWJvYXJkLnJlYWRTdHJp
bmcoInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIpKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTc5LDE3ICs3NywxNyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVJbWFnZVRvUGFzdGVi
b2FyZChQYXN0ZWJvYXJkJiwgRWxlbWVudCYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cgogCiB2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRp
b25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7
Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksICpyYW5n
ZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBs
YWluVGV4dCk7CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9h
cmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMu
Y29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwog
CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVv
dGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKIAot
ICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdl
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKGZyYWdtZW50ICYm
IHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgKnJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudCgqZnJhZ21lbnQsIGNhblNtYXJ0
UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQsIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9j
a3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5n
OjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQppbmRleCAxY2Q4YzM5NGE3NjkxYzU1ZjRkOGRkMzZkZTg1OTZlNzA3NzdiN2I1Li5i
YTMxYzE4NzczMjM0YjlhZDkzOWFkMGQzMzE5MzE4YzYyZDhiM2JkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgRWRpdG9yOjpz
aG93Q29sb3JQYW5lbCgpCiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3Rl
Ym9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9ucykKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2Ug
PSBzZWxlY3RlZFJhbmdlKCk7CiAKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19C
RUdJTgogICAgIC8vIEZJWE1FOiBIb3cgY2FuIHRoaXMgaGFyZC1jb2RlZCBwYXN0ZWJvYXJkIG5h
bWUgYmUgcmlnaHQsIGdpdmVuIHRoYXQgdGhlIHBhc3NlZC1pbiBwYXN0ZWJvYXJkIGhhcyBhIG5h
bWU/CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICBpZiAoZnJh
Z21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAg
ICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwogCi0gICAgaWYgKGZyYWdt
ZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0
RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQog
ICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21h
cnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBmYWxzZSwgb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFpbEJsb2NrcXVvdGVI
YW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3Bl
Y3RCbG9ja3F1b3RlICk7CiAKICAgICBjbGllbnQoKS0+c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChT
dHJpbmcoKSk7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJv
bVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKICAg
ICBib29sIGNob3NlUGxhaW5UZXh0OwogICAgIGlmIChhdXRvIGZyYWdtZW50ID0gd2ViQ29udGVu
dEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQsIHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCkp
IHsKICAgICAgICAgbWF5YmVDb3B5Tm9kZUF0dHJpYnV0ZXNUb0ZyYWdtZW50KCpub2RlLCAqZnJh
Z21lbnQpOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisg
ICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21l
bnQucmVsZWFzZU5vbk51bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVi
b2FyZCksIGZhbHNlLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlKTsK
ICAgICB9CiAKQEAgLTE3NiwxMSArMTc2LDkgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9y
OjppbWFnZUluV2ViQXJjaGl2ZUZvcm1hdChFbGVtZW50JiBpbWFnZUVsZW1lbnQpCiAKIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKIHsKLSAgICAvLyBGSVhNRTogVGhlIGludGVyZmFjZSB0
byB0aGlzIGZ1bmN0aW9uIGlzIGF3a3dhcmQuIFdlJ2QgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiB3
aXRoIHRocmVlIHNlcGFyYXRlIGZ1bmN0aW9ucy4KLSAgICAvLyBBcyBvZiB0aGlzIHdyaXRpbmcs
IHRoaXMgaXMgb25seSB1c2VkIGluIFdlYktpdDIgdG8gaW1wbGVtZW50IHRoZSBtZXRob2QgLVtX
S1ZpZXcgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6dHlwZXM6XSwKLSAgICAvLyB3aGljaCBp
cyBvbmx5IHVzZWQgdG8gc3VwcG9ydCBPUyBYIHNlcnZpY2VzLgorICAgIC8vIEZJWE1FOiBUaGUg
aW50ZXJmYWNlIHRvIHRoaXMgZnVuY3Rpb24gaXMgYXdrd2FyZC4gV2UnZCBwcm9iYWJseSBiZSBi
ZXR0ZXIgb2ZmIHdpdGggdGhyZWUgc2VwYXJhdGUgZnVuY3Rpb25zLiBBcyBvZiB0aGlzIHdyaXRp
bmcsIHRoaXMgaXMgb25seSB1c2VkIGluIFdlYktpdDIgdG8gaW1wbGVtZW50IHRoZSBtZXRob2Qg
LVtXS1ZpZXcgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6dHlwZXM6XSwgd2hpY2ggaXMgb25s
eSB1c2VkIHRvIHN1cHBvcnQgT1MgWCBzZXJ2aWNlcy4KIAotICAgIC8vIEZJWE1FOiBEb2VzIHRo
aXMgZnVuY3Rpb24gcmVhbGx5IG5lZWQgdG8gdXNlIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKT8g
QmVjYXVzZSB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGp1c3QgdXNlcyBzZWxlY3RlZFJh
bmdlKCkuCisgICAgLy8gRklYTUU6IERvZXMgdGhpcyBmdW5jdGlvbiByZWFsbHkgbmVlZCB0byB1
c2UgYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpPyBCZWNhdXNlIHdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKCkganVzdCB1c2VzIHNlbGVjdGVkUmFuZ2UoKS4gVGhpcyBpcyB0aGUgb25seSBmdW5j
dGlvbiBpbiBXZWJLaXQgdGhhdCB1c2VzIGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UuCiAgICAgaWYg
KCFjYW5Db3B5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy93aW4vRWRpdG9yV2luLmNwcAppbmRleCBjNzk2YmZhYWY2NmVlOTRhODVjNTVmMzkyMzQ5
MTU1ZDI3NGE4NjBjLi45M2RkZWFmODg4OWI4ZTdmY2MyNjkzNDEyNDA4NTgyODQ0NzZjOGQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKQEAgLTM3LDE3ICszNywx
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4gb3B0aW9u
cykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50
LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFp
blRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgYXV0byBmcmFnbWVudCA9IHBhc3RlYm9hcmQt
PmRvY3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSksIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hv
c2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFz
dGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3Rpbmco
KmZyYWdtZW50KTsKIAotICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudCgq
ZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAg
aWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgKnJhbmdlLCBF
ZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFn
bWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFz
dGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpJ
Z25vcmVNYWlsQmxvY2txdW90ZSkgPyBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9j
a3F1b3RlIDogTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IGRj
ZjNiZjQ0ODY1YjA0Y2M4MjdmNzEzM2VkZDhlMTkxZmFiYWJkNWIuLjI1ZjE3YTMzZmQyMGE0MWM3
MWJhZmI5NWIzM2Y0YTQwMDI3NDA4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGly
ZWN0b3J5RG9jdW1lbnQuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgUmVmPEVsZW1lbnQ+IEZUUERp
cmVjdG9yeURvY3VtZW50UGFyc2VyOjpjcmVhdGVUREZvckZpbGVuYW1lKGNvbnN0IFN0cmluZyYg
ZmlsZW4KICAgICBhdXRvIHRkRWxlbWVudCA9IEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjcmVhdGUo
dGRUYWcsIGRvY3VtZW50KTsKICAgICB0ZEVsZW1lbnQtPmFwcGVuZENoaWxkKGFuY2hvckVsZW1l
bnQpOwogCi0gICAgcmV0dXJuIFdURk1vdmUodGRFbGVtZW50KTsKKyAgICByZXR1cm4gdGRFbGVt
ZW50OwogfQogCiBzdGF0aWMgU3RyaW5nIHByb2Nlc3NGaWxlc2l6ZVN0cmluZyhjb25zdCBTdHJp
bmcmIHNpemUsIGJvb2wgaXNEaXJlY3RvcnkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuY3BwCmluZGV4IDk0ZmIzMGY1MTFiM2IzNzk1MjJhYTY5ZDJjZmZmZGFlOTAwNTcwMjYuLjBj
MTRhZTY5MGNkM2Y0NmE2M2JhZTYxNjA4NTRmMWEwM2I4MTFiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgcHVibGljOgogICAgIEVt
cHR5RWRpdG9yQ2xpZW50KCkgPSBkZWZhdWx0OwogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hv
dWxkRGVsZXRlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JikgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjAwLDE1
ICsyMDAsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpIGZp
bmFsIHsgfQogICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGZpbmFsIHsgcmV0dXJu
IC0xOyB9CiAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdlKikgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwg
RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2UoUmFuZ2UqLCBSYW5nZSosIEVBZmZpbml0eSwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEluc2VydE5v
ZGUoTm9kZSYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlv
bikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29u
c3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgRWRpdG9ySW5zZXJ0QWN0
aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mLCBFQWZmaW5pdHksIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVBy
b3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZvaWQgZGlkQXBwbHlTdHlsZSgpIGZpbmFsIHsgfQotICAgIGJvb2wgc2hv
dWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopIGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBTaW1wbGVS
YW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkgZmluYWwgeyB9CiAgICAgdm9pZCByZXNwb25kVG9DaGFu
Z2VkQ29udGVudHMoKSBmaW5hbCB7IH0KQEAgLTIxOSw5ICsyMTksOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGlkVXBkYXRlQ29tcG9zaXRpb24oKSBmaW5hbCB7IH0KICAgICB2b2lkIGRpZEVuZEVk
aXRpbmcoKSBmaW5hbCB7IH0KICAgICB2b2lkIGRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25D
aGFuZ2VzKCkgZmluYWwgeyB9Ci0gICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoUmFuZ2UqKSBmaW5hbCB7IH0KKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSBmaW5hbCB7IH0KICAgICB2b2lkIGRp
ZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBnZXRDbGll
bnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFJhbmdlKiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JikgZmluYWwgeyB9CisgICAgdm9pZCBnZXRDbGllbnRQYXN0
ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYs
IFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mKSBmaW5hbCB7IH0KICAgICB2b2lkIHJlcXVl
c3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBmaW5hbCB7
IH0KICAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoVGV4dENo
ZWNraW5nUmVzdWx0KSBmaW5hbCB7IH0KIApAQCAtMjYxLDcgKzI2MSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB1cGRhdGVTdHJpbmdGb3JGaW5kKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQogI2Vu
ZGlmCiAKLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgUmFu
Z2UmLCBib29sKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgcGVyZm9ybVR3b1N0
ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHNldElu
c2VydGlvblBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDQxZjdhN2VjN2E0MTkx
Nzc5MWIyODViMTk0MzlkMmMxYmU5ZGFlZmQuLmM3ZWZjZmM5M2JkNDc3MTI3MGVhMGIwNjlkY2I5
MjQ3YzkxYTJhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHAKQEAgLTIxMyw3ICsyMTMsNyBAQCBzdGF0aWMgdm9pZCBvcGVuTmV3V2luZG93KGNv
bnN0IFVSTCYgdXJsVG9Mb2FkLCBGcmFtZSYgZnJhbWUsIFNob3VsZE9wZW5FeHRlcm5hbAogc3Rh
dGljIHZvaWQgaW5zZXJ0VW5pY29kZUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIEZyYW1lJiBm
cmFtZSkKIHsKICAgICBTdHJpbmcgdGV4dCgmY2hhcmFjdGVyLCAxKTsKLSAgICBpZiAoIWZyYW1l
LmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLnNob3VsZEluc2Vy
dFRleHQodGV4dCwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEFTU0VSVChmcmFtZS5kb2N1bWVudCgpKTsKQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIENvbnRl
eHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rp
b24gYWN0aW9uLCBjbwogI2VuZGlmCiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGlu
Z0d1ZXNzOiB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3Vs
ZEluc2VydFRleHQodGl0bGUsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkgeworICAgICAgICBp
ZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGl0bGUsIHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpIHsKICAgICAgICAg
ICAgIE9wdGlvblNldDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbj4gcmVw
bGFjZU9wdGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH07CiAKICAgICAgICAgICAgIGlmIChm
cmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNX
aXRob3V0U2VsZWN0aW9uKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
aW5kZXggZTQzNDZlMTY5NzVkYzNkNmUwYmEyNjMzNzRkY2RmZmJjZmViZjFmYS4uNmY5OGFhZThk
NzU2ZDIyZDg3MDhiZDdhNjNjZWFkYjdlYTVjMWU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFn
Q29udHJvbGxlci5jcHAKQEAgLTU2OCw3ICs1NjgsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpj
b25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwg
c2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghaW5uZXJG
cmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgY3JlYXRlTGl2ZVJh
bmdlKGlubmVyUmFuZ2UpLmdldCgpKSkKKyAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3Io
KS5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCAqaW5uZXJSYW5nZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5l
ckZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRD
b2xvcik7CkBAIC02MDMsNyArNjAzLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVF
ZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKGlzTW92ZSB8fCBkcmFn
Q2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxh
aW5UZXh0ID0gZmFsc2U7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCBj
cmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOwotICAgICAgICBp
ZiAoIWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBj
cmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQp
KQorICAgICAgICBpZiAoIWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQo
KmZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKQEAg
LTYyOSw3ICs2MjksNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IFN0cmluZyB0ZXh0ID0gZHJhZ0RhdGEuYXNQbGFpblRleHQoKTsKLSAgICAgICAgaWYgKHRleHQu
aXNFbXB0eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFu
Z2UoKnJhbmdlKS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAg
aWYgKHRleHQuaXNFbXB0eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCAqcmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24o
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CkBAIC0xMDIyLDcgKzEwMjIs
NyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJh
Z1N0YXRlJiBzdGF0ZSwgT3B0aW9uU2V0PERyYQogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25S
YW5nZSA9IHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgICAgICAgICAgQVNTRVJUKHNlbGVjdGlvblJhbmdlKTsKIAotICAgICAgICAgICAgc3JjLmVk
aXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2UoKnNl
bGVjdGlvblJhbmdlKS5wdHIoKSk7CisgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCpzZWxlY3Rpb25SYW5nZSk7CiAKICAgICAgICAgICAgIGlm
IChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0
YXJ0KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG11c3RVc2VMZWdhY3lEcmFnQ2xpZW50KQpA
QCAtMTE5MCw3ICsxMTkwLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1l
JiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIE9wdGlvblNldDxEcmEKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICAgICAgICAgIGlmICghcHJvbWlzZWRBdHRhY2htZW50ICYmIGVkaXRvci5j
bGllbnQoKSkgewogICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbm8gZmlsZSBVUkwg
aXMgc3BlY2lmaWVkLCBjYWxsIG91dCB0byB0aGUgaW5qZWN0ZWQgYnVuZGxlIHRvIHBvcHVsYXRl
IHRoZSBwYXN0ZWJvYXJkIHdpdGggZGF0YS4KLSAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZShzcmMuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoc3JjLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci53
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICAg
ICAgICAgICAgICAgICBlZGl0b3IuZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCmluZGV4IDc3OTMxNzFmZTBh
ZGIxMTdkYWZmNDE2MGRhZmY2OTFjYTQ0NjBjMzEuLjlkZTcwNjU0ZjIwYjU4MjNmNzY1NjAwZTE0
MTZiOWQ4YzNhOTFkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaApAQCAtNDMsNyAr
NDMsNiBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBLZXlib2FyZEV2ZW50
OwogY2xhc3MgTm9kZTsKLWNsYXNzIFJhbmdlOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3Mg
U3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CkBAIC01MSwxMiArNTAs
MTMgQEAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAogc3RydWN0IEdhcFJlY3RzOwogc3RydWN0
IEdyYW1tYXJEZXRhaWw7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKIGNsYXNzIEVkaXRvckNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RWRpdG9yQ2xpZW50KCkgPSBkZWZhdWx0OwogCi0g
ICAgdmlydHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKSA9
IDA7CiAgICAgdmlydHVhbCBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpID0gMDsgCiAg
ICAgdmlydHVhbCBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSA9IDA7CkBAIC02NSwxNyArNjUsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0b2dn
bGVHcmFtbWFyQ2hlY2tpbmcoKSA9IDA7CiAgICAgdmlydHVhbCBpbnQgc3BlbGxDaGVja2VyRG9j
dW1lbnRUYWcoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJh
bmdlKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdlKikgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVkaXRv
ckluc2VydEFjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNv
bnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2Uq
IHRvUmFuZ2UsIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSA9IDA7CisgICAg
dmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSYsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYsIEVkaXRvckluc2VydEFjdGlvbikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYsIEVkaXRvckluc2VydEFjdGlvbikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSwgYm9vbCBzdGls
bFNlbGVjdGluZykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXZlYWxDdXJyZW50U2Vs
ZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9OwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRTdXBwcmVzc1Bhc3N3b3JkRWNobygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVy
dGllcyosIFJhbmdlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNv
bnN0IFN0eWxlUHJvcGVydGllcyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQXBwbHlTdHlsZSgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgU2ltcGxlUmFuZ2UmLCBj
b25zdCBTaW1wbGVSYW5nZSYpID0gMDsKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQp
CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3Ry
aW5nJiAvKiBpZGVudGlmaWVyICovLCBjb25zdCBTdHJpbmcmIC8qIGNvbnRlbnRUeXBlICovLCBj
b25zdCBTdHJpbmcmIC8qIHByZWZlcnJlZEZpbGVOYW1lICovLCBSZWY8U2hhcmVkQnVmZmVyPiYm
KSB7IH0KQEAgLTk1LDkgKzk1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRV
c2VyVHJpZ2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0aW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB3aWxs
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdl
KFJhbmdlKiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxT
aGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9y
PFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYg
cGFzdGVib2FyZERhdGEpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNG
b3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3Vs
dCkgeyB9CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCBwdWJsaWM6CiAgICAgLy8gc2VsZWN0aW9uIGFz
IGEgdHlwZSBvZiBjbGlwYm9hcmQuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzR2xvYmFsU2Vs
ZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtVHdv
U3RlcERyb3AoRG9jdW1lbnRGcmFnbWVudCYsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01v
dmUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJh
Z21lbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKSA9IDA7
CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2hvd0ZvbnRQYW5lbCgpIGNvbnN0ID0gMDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDZmMWYxYjRhZDgwYjIxZjk5NWMxZmVl
OGQ3MmFhZGM5NjI3MTViMmIuLjVlZGE4MzBlY2Y0NjVkMGRkMGIyNDdmYWUwMDIwYzVlMjUyZWI4
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTMwODIsOCArMzA4Miw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpCiAgICAg
UG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKIAogICAgIGlmIChzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpICYmIChzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpIHx8IHNlbGVj
dGlvbi5pc1JhbmdlKCkpKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2Zy
YW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25S
YW5nZSkuZ2V0KCkpOworICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9y
KCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAog
ICAgICAgICBpbnQgeCA9IHJpZ2h0QWxpZ25lZCA/IGZpcnN0UmVjdC5tYXhYKCkgOiBmaXJzdFJl
Y3QueCgpOwogICAgICAgICAvLyBJbiBhIG11bHRpbGluZSBlZGl0LCBmaXJzdFJlY3QubWF4WSgp
IHdvdWxkIGVuZHVwIG9uIHRoZSBuZXh0IGxpbmUsIHNvIC0xLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDNmMzcyMzJjN2U5NWJhMjAwNTM5MTEwNDlhZTgwNDAy
NGY2MTY3ODkuLjdlMjEyZWFmNGI5NTJhODZkYjRmZDEwODA3NmQyMDU5NmQxNjUyMjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTc1MiwxNyArNzUyLDE2IEBA
IEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50T3JTY29w
ZU93bmVyKGNvbnN0IEZvY3VzTmF2aWdhCiAgICAgcmV0dXJuIHByZXZpb3VzRWxlbWVudFdpdGhM
b3dlclRhYkluZGV4KHNjb3BlLCBsYXN0LCBzdGFydGluZ1RhYkluZGV4LCBldmVudCk7CiB9CiAK
LXN0YXRpYyBib29sIHJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cyhOb2RlICpub2RlKQorc3RhdGlj
IGJvb2wgcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
QVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVChub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpOworICAg
IEFTU0VSVChlbGVtZW50Lmhhc0VkaXRhYmxlU3R5bGUoKSk7CiAKLSAgICBOb2RlKiByb290ID0g
bm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKTsKKyAgICBhdXRvIHJvb3QgPSBlbGVtZW50LnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKKyAgICBhdXRvIGZyYW1lID0gZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCk7CiAg
ICAgaWYgKCFmcmFtZSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIGZyYW1lLT5lZGl0b3IoKS5zaG91bGRFbmRFZGl0aW5nKHJhbmdlT2ZDb250ZW50cygqcm9v
dCkucHRyKCkpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkRW5kRWRpdGluZyht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpKTsKIH0KIAogc3RhdGljIHZvaWQg
Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZChGcmFtZSogb2xkRm9jdXNlZEZyYW1lLCBGcmFtZSogbmV3
Rm9jdXNlZEZyYW1lLCBOb2RlKiBuZXdGb2N1c2VkTm9kZSkKQEAgLTg0MSw3ICs4NDAsNyBAQCBi
b29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwg
RnJhbWUmIG5ld0ZvY3VzZWRGcmFtZQogICAgIH0KIAogICAgIC8vIEZJWE1FOiBNaWdodCB3YW50
IHRvIGRpc2FibGUgdGhpcyBjaGVjayBmb3IgY2FyZXRCcm93c2luZwotICAgIGlmIChvbGRGb2N1
c2VkRWxlbWVudCAmJiBvbGRGb2N1c2VkRWxlbWVudC0+aXNSb290RWRpdGFibGVFbGVtZW50KCkg
JiYgIXJlbGlucXVpc2hlc0VkaXRpbmdGb2N1cyhvbGRGb2N1c2VkRWxlbWVudCkpCisgICAgaWYg
KG9sZEZvY3VzZWRFbGVtZW50ICYmIG9sZEZvY3VzZWRFbGVtZW50LT5pc1Jvb3RFZGl0YWJsZUVs
ZW1lbnQoKSAmJiAhcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKCpvbGRGb2N1c2VkRWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fcGFnZS5lZGl0b3JDbGllbnQoKS53aWxs
U2V0SW5wdXRNZXRob2RTdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCA0ZDAzNGYzYmQy
YmZhOWFhYWQwZTZlMmE0OTQzODRkM2FjMzJhZWVhLi4zNTUxYjRkNjJiODQ2MGRiYzYxNzRiN2Rl
NWYyYjlmMzgzYWYwNzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtODE4LDI4ICs4MTgsMjUg
QEAgRG9jdW1lbnQqIEZyYW1lOjpkb2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50
KQogCiBSZWZQdHI8UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBm
cmFtZVBvaW50KQogewotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3Np
dGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwotICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAg
ICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7Cisg
ICAgYXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwor
ICAgIGlmICghcG9zaXRpb25Cb3VuZGFyeSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBQb3NpdGlvbiBkZWVwUG9zaXRpb24gPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwotICAg
IFRleHQqIGNvbnRhaW5lclRleHQgPSBkZWVwUG9zaXRpb24uY29udGFpbmVyVGV4dCgpOworICAg
IGF1dG8gY29udGFpbmVyVGV4dCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVy
VGV4dCgpOwogICAgIGlmICghY29udGFpbmVyVGV4dCB8fCAhY29udGFpbmVyVGV4dC0+cmVuZGVy
ZXIoKSB8fCBjb250YWluZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLnVzZXJTZWxlY3QoKSA9
PSBVc2VyU2VsZWN0OjpOb25lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFZpc2li
bGVQb3NpdGlvbiBwcmV2aW91cyA9IHBvc2l0aW9uLnByZXZpb3VzKCk7Ci0gICAgaWYgKHByZXZp
b3VzLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcHJldmlvdXNDaGFyYWN0
ZXJSYW5nZSA9IG1ha2VSYW5nZShwcmV2aW91cywgcG9zaXRpb24pOwotICAgICAgICBMYXlvdXRS
ZWN0IHJlY3QgPSBlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJh
bmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMoZnJhbWVQb2ludCkpCi0gICAg
ICAgICAgICByZXR1cm4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZTsKKyAgICBpZiAoYXV0byBwcmV2
aW91cyA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnByZXZpb3VzKCkpKSB7CisgICAgICAg
IGF1dG8gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnByZXZpb3VzLCAq
cG9zaXRpb25Cb3VuZGFyeSB9OworICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFu
Z2UocHJldmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2ludCkpCisgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UpOwogICAg
IH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zaXRpb24ubmV4dCgpOwotICAgIGlm
IChSZWZQdHI8UmFuZ2U+IG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwb3NpdGlvbiwg
bmV4dCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gZWRpdG9yKCkuZmlyc3RSZWN0Rm9y
UmFuZ2UobmV4dENoYXJhY3RlclJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJlY3QuY29udGFp
bnMoZnJhbWVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gbmV4dENoYXJhY3RlclJhbmdlOwor
ICAgIGlmIChhdXRvIG5leHQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5uZXh0KCkpKSB7
CisgICAgICAgIGF1dG8gbmV4dENoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqcG9zaXRp
b25Cb3VuZGFyeSwgKm5leHQgfTsKKyAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJh
bmdlKG5leHRDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2ludCkpCisgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA1NDViZWMxY2ViMWZjMTBk
ZGM2NmYzYTdhZmMzNGNjODcwOTJiMzlmLi42ZmEyZTM3NjIyNDliYTkyZmE5ZWUyZDI5MmQ1Nzgx
MmVlNThhYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTcxMywzNCArNzEzLDM2IEBAIGJvb2wg
UGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9u
cywgRGlkV3JhcCogZGlkV3JhCiAKIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2Vz
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpbnQgbGltaXQsIFZl
Y3RvcjxSZWZQdHI8UmFuZ2U+PiYgbWF0Y2hSYW5nZXMsIGludCYgaW5kZXhGb3JTZWxlY3Rpb24p
CiB7CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByZXN1bHRSYW5nZXM7CisKICAgICBpbmRleEZv
clNlbGVjdGlvbiA9IDA7CiAKICAgICBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7CiAgICAg
RnJhbWUqIGZyYW1lV2l0aFNlbGVjdGlvbiA9IG51bGxwdHI7CiAgICAgZG8gewotICAgICAgICBm
cmFtZS0+ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIDAsIG9wdGlvbnMsIGxp
bWl0ID8gKGxpbWl0IC0gbWF0Y2hSYW5nZXMuc2l6ZSgpKSA6IDAsIHRydWUsICZtYXRjaFJhbmdl
cyk7CisgICAgICAgIGZyYW1lLT5lZGl0b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwg
eyB9LCBvcHRpb25zLCBsaW1pdCA/IChsaW1pdCAtIHJlc3VsdFJhbmdlcy5zaXplKCkpIDogMCwg
dHJ1ZSwgJnJlc3VsdFJhbmdlcyk7CiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNS
YW5nZSgpKQogICAgICAgICAgICAgZnJhbWVXaXRoU2VsZWN0aW9uID0gZnJhbWU7CiAgICAgICAg
IGZyYW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIENhbldyYXA6Ok5vKTsKICAgICB9
IHdoaWxlIChmcmFtZSk7CiAKLSAgICBpZiAobWF0Y2hSYW5nZXMuaXNFbXB0eSgpKQorICAgIGlm
IChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZnJh
bWVXaXRoU2VsZWN0aW9uKSB7CiAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gTm9NYXRjaEFm
dGVyVXNlclNlbGVjdGlvbjsKICAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRo
U2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAg
IGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0pOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdFJhbmdlcy5zaXplKCk7IGkgPiAwOyAt
LWkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIGNy
ZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZXNbaSAtIDFdKSk7CiAgICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4g
MCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAxOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9
IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcmVzdWx0UmFuZ2VzLnNpemUoKTsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdl
KHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VO
RCwgY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlc1tpXSkpOwogICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8
IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTc0OSwxMCArNzUxLDEzIEBAIHZvaWQgUGFnZTo6Zmlu
ZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBv
cHRpb25zLCBpCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAob3B0aW9ucy5j
b250YWlucyhCYWNrd2FyZHMpKQotICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBtYXRj
aFJhbmdlcy5zaXplKCkgLSAxOworICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSByZXN1
bHRSYW5nZXMuc2l6ZSgpIC0gMTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5kZXhGb3JT
ZWxlY3Rpb24gPSAwOwogICAgIH0KKworICAgIGZvciAoYXV0byYgcmFuZ2UgOiByZXN1bHRSYW5n
ZXMpCisgICAgICAgIG1hdGNoUmFuZ2VzLmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpKTsK
IH0KIAogUmVmUHRyPFJhbmdlPiBQYWdlOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCkBAIC03Njcs
MTcgKzc3MiwxNiBAQCBSZWZQdHI8UmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwgRgogICAgIEZyYW1lKiBmcmFtZSA9
IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgp
IDogJm1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBzdGFydEZyYW1lID0gZnJhbWU7CiAgICAgZG8g
ewotICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IGZyYW1lLT5lZGl0b3Io
KS5yYW5nZU9mU3RyaW5nKHRhcmdldCwgZnJhbWUgPT0gc3RhcnRGcmFtZSA/IHJlZmVyZW5jZVJh
bmdlIDogMCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dFJhbmdlOwotCisgICAgICAgIGlmIChhdXRvIHJlc3VsdFJhbmdlID0gZnJhbWUtPmVkaXRvcigp
LnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBmcmFtZSA9PSBzdGFydEZyYW1lID8gbWFrZVJhbmdlKHJl
ZmVyZW5jZVJhbmdlKSA6IFdURjo6bnVsbG9wdCwgb3B0aW9ucyAtIFdyYXBBcm91bmQpKQorICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSk7CiAgICAgICAgIGZy
YW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsICFvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyks
IGNhbldyYXApOwogICAgIH0gd2hpbGUgKGZyYW1lICYmIGZyYW1lICE9IHN0YXJ0RnJhbWUpOwog
CiAgICAgLy8gU2VhcmNoIGNvbnRlbnRzIG9mIHN0YXJ0RnJhbWUsIG9uIHRoZSBvdGhlciBzaWRl
IG9mIHRoZSByZWZlcmVuY2UgcmFuZ2UgdGhhdCB3ZSBkaWQgZWFybGllci4KICAgICAvLyBXZSBj
aGVhdCBhIGJpdCBhbmQganVzdCBzZWFyY2ggYWdhaW4gd2l0aCB3cmFwIG9uLgogICAgIGlmIChj
YW5XcmFwID09IENhbldyYXA6OlllcyAmJiByZWZlcmVuY2VSYW5nZSkgewotICAgICAgICBpZiAo
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHN0YXJ0RnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZT
dHJpbmcodGFyZ2V0LCByZWZlcmVuY2VSYW5nZSwgb3B0aW9ucyB8IFdyYXBBcm91bmQgfCBTdGFy
dEluU2VsZWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRSYW5nZTsKKyAgICAgICAg
aWYgKGF1dG8gcmVzdWx0UmFuZ2UgPSBzdGFydEZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5n
KHRhcmdldCwgbWFrZVJhbmdlKCpyZWZlcmVuY2VSYW5nZSksIG9wdGlvbnMgfCBXcmFwQXJvdW5k
IHwgU3RhcnRJblNlbGVjdGlvbikpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdl
KHJlc3VsdFJhbmdlKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc5NCw3ICs3
OTgsNyBAQCB1bnNpZ25lZCBQYWdlOjpmaW5kTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVucwogICAgIGRvIHsKICAgICAgICAgaWYgKHNo
b3VsZE1hcmtNYXRjaGVzID09IE1hcmtNYXRjaGVzKQogICAgICAgICAgICAgZnJhbWUtPmVkaXRv
cigpLnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoc2hvdWxkSGlnaGxpZ2h0TWF0
Y2hlcyA9PSBIaWdobGlnaHRNYXRjaGVzKTsKLSAgICAgICAgbWF0Y2hDb3VudCArPSBmcmFtZS0+
ZWRpdG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIDAsIG9wdGlvbnMsIG1heE1hdGNo
Q291bnQgPyAobWF4TWF0Y2hDb3VudCAtIG1hdGNoQ291bnQpIDogMCwgc2hvdWxkTWFya01hdGNo
ZXMgPT0gTWFya01hdGNoZXMsIDApOworICAgICAgICBtYXRjaENvdW50ICs9IGZyYW1lLT5lZGl0
b3IoKS5jb3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgV1RGOjpudWxsb3B0LCBvcHRpb25zLCBt
YXhNYXRjaENvdW50ID8gKG1heE1hdGNoQ291bnQgLSBtYXRjaENvdW50KSA6IDAsIHNob3VsZE1h
cmtNYXRjaGVzID09IE1hcmtNYXRjaGVzLCBudWxscHRyKTsKICAgICAgICAgZnJhbWUgPSBpbmNy
ZW1lbnRGcmFtZShmcmFtZSwgdHJ1ZSwgQ2FuV3JhcDo6Tm8pOwogICAgIH0gd2hpbGUgKGZyYW1l
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGMyZmE2YzgxNGM0YjBl
YjZjY2JiZWNmMTA5NjkwYjVhNjAyNjRkYWMuLjQ2YWFiODA5M2U0N2ViYjZlNDZkMDI1NjU0NWZk
MGEzN2M0NTJjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTI2MTcs
NyArMjYxNyw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxSYW5nZT4+IEludGVybmFsczo6cmFuZ2VP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxSCiAgICAgaWYgKHBhcnNlZE9wdGlv
bnMuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBwYXJzZWRPcHRpb25zLnJlbGVhc2VF
eGNlcHRpb24oKTsKIAotICAgIHJldHVybiBkb2N1bWVudC0+ZWRpdG9yKCkucmFuZ2VPZlN0cmlu
Zyh0ZXh0LCByZWZlcmVuY2VSYW5nZS5nZXQoKSwgcGFyc2VkT3B0aW9ucy5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShkb2N1bWVudC0+ZWRpdG9yKCku
cmFuZ2VPZlN0cmluZyh0ZXh0LCBtYWtlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpLCBwYXJzZWRPcHRp
b25zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJ
bnRlcm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmluZE9wdGlvbnMsIGNvbnN0IFN0cmluZyYgbWFya01hdGNoZXMpCkBA
IC0yNjMxLDcgKzI2MzEsNyBAQCBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb3Vu
dE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVgogICAgICAgICByZXR1
cm4gcGFyc2VkT3B0aW9ucy5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAgICBib29sIG1hcmsgPSBt
YXJrTWF0Y2hlcyA9PSAibWFyayI7Ci0gICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5jb3Vu
dE1hdGNoZXNGb3JUZXh0KHRleHQsIG51bGxwdHIsIHBhcnNlZE9wdGlvbnMucmVsZWFzZVJldHVy
blZhbHVlKCksIDEwMDAsIG1hcmssIG51bGxwdHIpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRp
dG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dCh0ZXh0LCBXVEY6Om51bGxvcHQsIHBhcnNlZE9wdGlv
bnMucmVsZWFzZVJldHVyblZhbHVlKCksIDEwMDAsIG1hcmssIG51bGxwdHIpOwogfQogCiBFeGNl
cHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbmRPcHRpb25zKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGIyZGFkYzY5NzQwNWQ2
OTExYzZjMjk1MmI3YzlkNDRmZmZlNWFkNDEuLjJiMDQyMjI0ZjM5YzgxNjI4YThmOGRmZjk1YWRk
YThiOTY5YTExMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1By
aW50aW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGlu
Z1ZpZXcubW0KQEAgLTY2Myw3ICs2NjMsNyBAQCAtIChOU1JlY3QpcmVjdEZvclBhZ2U6KE5TSW50
ZWdlcilwYWdlCiAgICAgICAgIExPRyhQcmludGluZywgIi1bV0tQcmludGluZ1ZpZXcgJXAgcmVj
dEZvclBhZ2U6JWRdIC0gZGF0YSBpcyBub3QgeWV0IGF2YWlsYWJsZSIsIHNlbGYsIChpbnQpcGFn
ZSk7CiAgICAgICAgIGlmICghX3dlYkZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgICAgIC8vIFdl
IG1heSBoYXZlIG5vdCB0b2xkIEFwcEtpdCBob3cgbWFueSBwYWdlcyB0aGVyZSBhcmUsIHNvIGl0
IHdpbGwgdHJ5IHRvIHByaW50IHVudGlsIGEgbnVsbCByZWN0IGlzIHJldHVybmVkLgotICAgICAg
ICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4g
TlNaZXJvUmVjdDsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBtdXN0IGJlIHN0aWxsIGNhbGN1
bGF0aW5nIHRoZSBwYWdlIHJhbmdlLgogICAgICAgICBBU1NFUlQoX2V4cGVjdGVkQ29tcHV0ZWRQ
YWdlc0NhbGxiYWNrKTsKQEAgLTY3NCw3ICs2NzQsNyBAQCAtIChOU1JlY3QpcmVjdEZvclBhZ2U6
KE5TSW50ZWdlcilwYWdlCiAgICAgLy8gUmV0dXJuaW5nIGEgbnVsbCByZWN0IHByZXZlbnRzIHNl
bGVjdGluZyBub24tZXhpc3RlbnQgcGFnZXMgaW4gcHJldmlldyBkaWFsb2cuCiAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwYWdlKSA+IF9wcmludGluZ1BhZ2VSZWN0cy5zaXplKCkpIHsK
ICAgICAgICAgQVNTRVJUKCFfd2ViRnJhbWUtPnBhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBOU01h
a2VSZWN0KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKICAgICB9CiAK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QgPSBfcHJpbnRpbmdQYWdlUmVjdHNbcGFnZSAtIDFd
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCA3OWEzNzQwMGMzZjQxNThiZjQyOGY2OTQyYmM4
ODZmMWFjZDIyMDNkLi5kZDljMzUyNjA1ZjA4ZjM5NDBkOTAwZDhmMDI2NTI0N2UwNGJhMzc5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNzQsMTEgKzc0LDkgQEAgc3RhdGljIHVpbnQ2NF90
IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCkKICAgICByZXR1cm4gdW5pcXVlVGV4dENo
ZWNraW5nUmVxdWVzdElEKys7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxl
dGVSYW5nZShSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRl
UmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKLSAgICBib29sIHJl
c3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGREZWxldGVS
YW5nZSgqbV9wYWdlLCByYW5nZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
c2hvdWxkRGVsZXRlUmFuZ2UoKm1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7
CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpA
QCAtMTE0LDUwICsxMTIsMzcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUdyYW1tYXJD
aGVja2luZygpCiBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IDA7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2Uq
IHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQmVnaW5FZGl0aW5nKCptX3BhZ2UsIHJhbmdlKTsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1f
cGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRCZWdpbkVkaXRpbmcoKm1f
cGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7CiB9CiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBi
b29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRF
bmRFZGl0aW5nKCptX3BhZ2UsIHJhbmdlKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGRFbmRFZGl0aW5nKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRy
KCkpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiBu
b2RlLCBSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiti
b29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlJiBub2RlLCBjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24g
YWN0aW9uKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUoKm1fcGFnZSwgbm9kZSwgcmFuZ2VUb1JlcGxhY2Us
IGFjdGlvbik7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0
Tm9kZSgqbV9wYWdlLCAmbm9kZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQo
KSwgYWN0aW9uKTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFj
dGlvbiBhY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2VUb1JlcGxh
Y2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0VGV4dCgqbV9wYWdl
LCB0ZXh0LmltcGwoKSwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVu
ZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5zZXJ0VGV4dCgqbV9wYWdlLCB0ZXh0LmltcGwoKSwg
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKS5nZXQoKSwgYWN0aW9uKTsKIH0KIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21S
YW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVj
dGluZykKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJvbVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGlu
ZykKIHsKLSAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGZyb21SYW5nZSwgdG9SYW5n
ZSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JD
bGllbnQoKS5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKCptX3BhZ2UsIGNyZWF0ZUxpdmVSYW5n
ZShmcm9tUmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UodG9SYW5nZSkuZ2V0KCksIGFmZmlu
aXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAgICAgCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBSYW5nZSogcmFuZ2UpCitib29s
IFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMm
IHN0eWxlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIFJlZjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUoc3R5bGUtPmlzTXV0YWJsZSgpID8g
UmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+KHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmPigqc3R5bGUpKSA6IHN0eWxlLT5tdXRhYmxlQ29weSgpKTsKLSAgICBib29sIHJlc3Vs
dCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRBcHBseVN0eWxl
KCptX3BhZ2UsICZtdXRhYmxlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgcmFu
Z2UpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZEFwcGx5U3R5bGUo
Km1fcGFnZSwgJnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24o
KSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQpAQCAtMjExLDkgKzE5Niw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpk
aWRBcHBseVN0eWxlKCkKICAgICBtX3BhZ2UtPmRpZEFwcGx5U3R5bGUoKTsKIH0KIAotYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2Uq
KQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0
IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIyMiw3ICsyMDYsNiBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKCkKICAgICAvLyBGSVhNRTogV2hhdCBnb29kIGlz
IGEgbm90aWZpY2F0aW9uIG5hbWUsIGlmIGl0J3MgYWx3YXlzIHRoZSBzYW1lPwogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IFdlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRp
b24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIldlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmlj
YXRpb24iKSk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmRpZEJl
Z2luRWRpdGluZygqbV9wYWdlLCBXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uLmdl
dCgpLmltcGwoKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCkBAIC0yNzUsNyArMjU4LDYgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoKQogewogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IFdlYlZpZXdEaWRFbmRFZGl0aW5nTm90aWZpY2F0aW9uKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNhdGlvbiIpKTsKICAg
ICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZGlkRW5kRWRpdGluZygqbV9w
YWdlLCBXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNhdGlvbi5nZXQoKS5pbXBsKCkpOwotICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZCgpCkBAIC0yODMsMTkgKzI2NSwxOSBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQogICAgIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQoKS5kaWRXcml0ZVRvUGFzdGVib2FyZCgqbV9wYWdlKTsK
IH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChSYW5nZSogcmFuZ2UpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7Ci0gICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLndpbGxXcml0ZVRvUGFzdGVib2Fy
ZCgqbV9wYWdlLCByYW5nZSk7CisgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVu
dCgpLndpbGxXcml0ZVRvUGFzdGVib2FyZCgqbV9wYWdlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LmdldCgpKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldENsaWVudFBhc3RlYm9hcmRE
YXRhRm9yUmFuZ2UoUmFuZ2UqIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkKIHsKLSAgICBtX3BhZ2UtPmlu
amVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZSgqbV9w
YWdlLCByYW5nZSwgcGFzdGVib2FyZFR5cGVzLCBwYXN0ZWJvYXJkRGF0YSk7CisgICAgbV9wYWdl
LT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
Km1fcGFnZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgcGFzdGVib2FyZFR5cGVzLCBw
YXN0ZWJvYXJkRGF0YSk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3Rl
cERyb3AoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlJiBkZXN0aW5hdGlvbiwgYm9v
bCBpc01vdmUpCitib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJv
b2wgaXNNb3ZlKQogewotICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkucGVyZm9ybVR3b1N0ZXBEcm9wKCptX3BhZ2UsIGZyYWdtZW50LCBkZXN0aW5hdGlvbiwg
aXNNb3ZlKTsKKyAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LnBlcmZvcm1Ud29TdGVwRHJvcCgqbV9wYWdlLCBmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKGRl
c3RpbmF0aW9uKSwgaXNNb3ZlKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVy
VW5kb1N0ZXAoVW5kb1N0ZXAmIHN0ZXApCkBAIC00MjUsMTIgKzQwNywxMCBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCogZWxlbWVudCkKIAog
dm9pZCBXZWJFZGl0b3JDbGllbnQ6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6c3ViRnJh
bWVTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
ICNlbmRpZgpAQCAtNjE4LDcgKzU5OCw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnB1
dE1ldGhvZFN0YXRlKEVsZW1lbnQqIGVsZW1lbnQpCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXUEUpCiAgICAgbV9wYWdlLT5zZXRJbnB1dE1ldGhvZFN0YXRlKGVsZW1lbnQpOwogI2Vs
c2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKICNl
bmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDBkZjc3NTllMWI4MmRkNDAzY2ZkYThjYTcz
MDk5ZWJjNmRkZDgwOGMuLjIzZTM5NGYyN2VjMzI2OTI3OGM0NWI4ZTE0NGQzNmRjN2M3YmZkNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFdlYkNvcmU6OlJhbmdlKikgZmlu
YWw7CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgp
IGZpbmFsOwogICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkgY29u
c3QgZmluYWw7CiAgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGZp
bmFsOwpAQCAtNTQsMTUgKzU0LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b2dnbGVHcmFtbWFy
Q2hlY2tpbmcoKSBmaW5hbDsKICAgICBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBmaW5h
bDsKICAgICAKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZp
bmFsOwotICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwot
ICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2Uq
LCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkSW5z
ZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkVkaXRvcklu
c2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdl
YkNvcmU6OlJhbmdlKiBmcm9tUmFuZ2UsIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLCBXZWJDb3Jl
OjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
QmVnaW5FZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7CisgICAgYm9v
bCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikgZmluYWw7Cisg
ICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFs
OworICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZp
bmFsOworICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGZyb21SYW5nZSwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
U2ltcGxlUmFuZ2U+JiB0b1JhbmdlLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpT
dHlsZVByb3BlcnRpZXMqLCBXZWJDb3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
QXBwbHlTdHlsZShjb25zdCBXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mKSBmaW5hbDsKICAgICB2b2lkIGRpZEFwcGx5U3R5bGUo
KSBmaW5hbDsKLSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFdlYkNvcmU6OlJh
bmdlKiwgV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZE1vdmVSYW5nZUFm
dGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiwgY29uc3QgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UmKSBmaW5hbDsKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAg
dm9pZCByZWdpc3RlckF0dGFjaG1lbnRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgcHJlZmVycmVkRmlsZU5hbWUsIFJlZjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwpAQCAtODUsOSArODUsOSBAQCBwcml2YXRl
OgogICAgIHZvaWQgY2FuY2VsZWRDb21wb3NpdGlvbigpIGZpbmFsOwogICAgIHZvaWQgZGlkVXBk
YXRlQ29tcG9zaXRpb24oKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKSBmaW5hbDsK
LSAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3JlOjpSYW5nZSop
IGZpbmFsOworICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBmaW5hbDsKLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2Fy
ZFR5cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJk
RGF0YSkgZmluYWw7CisgICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0
YSkgZmluYWw7CiAgICAgCiAgICAgdm9pZCByZWdpc3RlclVuZG9TdGVwKFdlYkNvcmU6OlVuZG9T
dGVwJikgZmluYWw7CiAgICAgdm9pZCByZWdpc3RlclJlZG9TdGVwKFdlYkNvcmU6OlVuZG9TdGVw
JikgZmluYWw7CkBAIC0xOTEsNyArMTkxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFN1
cHByZXNzUGFzc3dvcmRFY2hvKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAotICAgIGJvb2wgcGVy
Zm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQmLCBXZWJDb3JlOjpSYW5n
ZSYsIGJvb2wgaXNNb3ZlKSBmaW5hbDsKKyAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJD
b3JlOjpEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBib29s
IGlzTW92ZSkgZmluYWw7CiAgICAgYm9vbCBzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpIGZpbmFs
OwogCiAgICAgYm9vbCBjYW5TaG93Rm9udFBhbmVsKCkgY29uc3QgZmluYWwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYWRhNTJjZGQ3OTcxMWE4
MjNlOWNhMzJkMmVlZTBjOGYwODBkODY4Yi4uZWQ3ZDUwMTcwOTVjNTAyYzE0ZmYwZjk1YjZhMDQ1
ZDk2ODM2ODMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTU0MjYsNDMgKzU0MjYsMzYgQEAgdm9pZCBXZWJQYWdlOjpoYXNNYXJrZWRUZXh0
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB2b2lk
IFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlQXN5bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAg
IGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1l
LmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSk7Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIoZWRpdGluZ1JhbmdlKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0aW5nUmFuZ2U6OmZy
b21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKSkuZ2V0KCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlQXN5
bmMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFZGl0aW5nUmFuZ2UmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGlu
Z1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZWRpdGluZ1JhbmdlKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihFZGl0aW5nUmFu
Z2U6OmZyb21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b2ludCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8
SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVzdFJlcXVlc3Q6OlJl
YWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dV
c2VyQWdlbnRTaGFkb3dDb250ZW50LCAgSGl0VGVzdFJlcXVlc3Q6OkFsbG93Q2hpbGRGcmFtZUNv
bnRlbnQgfTsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwotICAg
IEZyYW1lKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5l
ck5vZGVGcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLT5yYW5nZUZvclBv
aW50KHJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOwotICAgIGF1dG8gZWRp
dGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoKmZyYW1lLCByYW5nZS5nZXQoKSk7
CisgICAgYXV0byByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhp
dFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBoaXRUeXBlKTsKKyAgICBhdXRvJiBmcmFtZSA9IHJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/ICpyZXN1bHQuaW5uZXJOb2RlRnJhbWUoKSA6IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgYXV0byBy
YW5nZSA9IGZyYW1lLnJhbmdlRm9yUG9pbnQocmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2Rl
RnJhbWUoKSk7CisgICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5n
ZShmcmFtZSwgcmFuZ2UuZ2V0KCkpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
VW5zaWduZWRDYWxsYmFjayhzdGF0aWNfY2FzdDx1aW50NjRfdD4oZWRpdGluZ1JhbmdlLmxvY2F0
aW9uKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2UsIENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIEludFJlY3QgcmVzdWx0KEludFBvaW50
KDAsIDApLCBJbnRTaXplKDAsIDApKTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
RWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCBlZGl0aW5nUmFuZ2UpOworICAgIGF1dG8mIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAg
ICBhdXRvIHJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKGZyYW1lLCBlZGl0aW5nUmFuZ2Up
OwogICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhyZXN1bHQsIEVkaXRpbmdSYW5nZShub3RG
b3VuZCwgMCksIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayh7IH0sIHsgfSwgY2FsbGJhY2tJRCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgcmVzdWx0ID0gZnJhbWUudmlldygpLT5j
b250ZW50c1RvV2luZG93KGZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHJhbmdlLmdl
dCgpKSk7Ci0KLSAgICAvLyBGSVhNRTogVXBkYXRlIGFjdHVhbFJhbmdlIHRvIG1hdGNoIHRoZSBy
YW5nZSBvZiBmaXJzdCByZWN0LgotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVj
dEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2socmVzdWx0LCBlZGl0aW5nUmFuZ2UsIGNhbGxiYWNr
SUQpKTsKKyAgICAvLyBGSVhNRTogUGFzcyBhbiBFZGl0aW5nUmFuZ2UgdGhhdCBtYXRjaGVzIHRo
ZSByYW5nZSBvZiB0aGUgZmlyc3QgcmVjdCwgcmF0aGVyIHRoYW4gdGhlIGVudGlyZSBwYXNzZWQt
aW4gcmFuZ2U/CisgICAgYXV0byByZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93
KGZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpyYW5nZSkpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2socmVjdCwg
ZWRpdGluZ1JhbmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9z
aXRpb25Bc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluZT4mIHVuZGVybGluZXMsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvbkhpZ2hsaWdodD4m
IGhpZ2hsaWdodHMsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2VsZWN0aW9uLCBjb25zdCBFZGl0aW5n
UmFuZ2UmIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlKQpAQCAtNTQ3MCwxNSArNTQ2MywxMSBAQCB2
b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8Q29tcG9zaXRpb25VbgogICAgIHBsYXRmb3JtV2lsbFBlcmZvcm1FZGl0aW5nQ29t
bWFuZCgpOwogCiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwotCiAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNl
bWVudFJhbmdlOwogICAgICAgICBpZiAocmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UubG9jYXRpb24g
IT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2UgPSBFZGl0aW5nUmFu
Z2U6OnRvUmFuZ2UoZnJhbWUsIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlKTsKLSAgICAgICAgICAg
IGlmIChyZXBsYWNlbWVudFJhbmdlKQorICAgICAgICAgICAgaWYgKGF1dG8gcmVwbGFjZW1lbnRS
YW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFu
Z2UpKQogICAgICAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKCpyZXBsYWNlbWVudFJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwog
ICAgICAgICB9Ci0KICAgICAgICAgZnJhbWUuZWRpdG9yKCkuc2V0Q29tcG9zaXRpb24odGV4dCwg
dW5kZXJsaW5lcywgaGlnaGxpZ2h0cywgc2VsZWN0aW9uLmxvY2F0aW9uLCBzZWxlY3Rpb24ubG9j
YXRpb24gKyBzZWxlY3Rpb24ubGVuZ3RoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCmluZGV4IDRjNTAw
ZTM2NjhhMzIxMjNiOWUyNGIyNzhkYWFiMDc0NTczZmZhMzAuLjQ2OTI1NTNhMGE4MDlkZDNmNzAz
OTUzZTM1OGRmMzM0NjIyZWM1OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCkBAIC0xMDksMTAgKzEwOSwxMCBAQCB2
b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JT
dGF0ZSYgcmVzdWx0KSBjb25zdAogICAgICAgICBhdXRvIHN1cnJvdW5kaW5nRW5kID0gZW5kT2ZF
ZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBhdXRvIHN1cnJvdW5kaW5n
UmFuZ2UgPSBtYWtlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgc3Vycm91bmRpbmdFbmQpOwogICAg
ICAgICBhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJh
bmdlKCk7Ci0gICAgICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIHN1cnJvdW5kaW5nUmFuZ2Ug
JiYgc3Vycm91bmRpbmdSYW5nZS0+Y29udGFpbnMoKmNvbXBvc2l0aW9uUmFuZ2UpKSB7CisgICAg
ICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIHN1cnJvdW5kaW5nUmFuZ2UgJiYgc3Vycm91bmRp
bmdSYW5nZS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5nZXQo
KSkpIHsKICAgICAgICAgICAgIGF1dG8gY2xvbmVkUmFuZ2UgPSBzdXJyb3VuZGluZ1JhbmdlLT5j
bG9uZVJhbmdlKCk7Ci0gICAgICAgICAgICBzdXJyb3VuZGluZ1JhbmdlLT5zZXRFbmQoY29tcG9z
aXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGNsb25lZFJhbmdlLT5z
ZXRTdGFydChjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHN1
cnJvdW5kaW5nUmFuZ2UtPnNldEVuZChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9z
aXRpb25SYW5nZS0+c3RhcnQpKTsKKyAgICAgICAgICAgIGNsb25lZFJhbmdlLT5zZXRTdGFydChj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAg
ICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQgPSBwbGFpblRleHQoKnN1
cnJvdW5kaW5nUmFuZ2UpICsgcGxhaW5UZXh0KGNsb25lZFJhbmdlKTsKICAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uID0gY2hhcmFjdGVy
Q291bnQoKnN1cnJvdW5kaW5nUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vy
cm91bmRpbmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSBwb3N0TGF5b3V0RGF0YS5zdXJyb3Vu
ZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZDljNmM0YTVjOGE2ZjJiNDI1ZjEy
MjA4ZTQzM2M1NGM5YjA4ZjRmNy4uOTRhNjc1MGEzOGNkY2Q0NWYyYTJmZDQ3ZDdjMzc4ZTM0NDZj
MWY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KQEAgLTI2NywxMCArMjY3LDEwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZv
cm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAK
ICAgICBpZiAoZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICBpZiAo
YXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgp
KSB7Ci0gICAgICAgICAgICBjb21wb3NpdGlvblJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMo
cG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKKyAgICAgICAgICAgIGNyZWF0ZUxpdmVS
YW5nZSgqY29tcG9zaXRpb25SYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0UmVjdHMpOwogICAgICAgICAgICAgY29udmVydENvbnRlbnRUb1Jvb3RW
aWV3U2VsZWN0aW9uUmVjdHModmlldywgcG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsK
IAotICAgICAgICAgICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dCA9IHBsYWluVGV4dEZvckNv
bnRleHQoY29tcG9zaXRpb25SYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0
YS5tYXJrZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dCgqY29tcG9zaXRpb25SYW5nZSk7CiAg
ICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGNvbXBvc2l0aW9uU2VsZWN0aW9uKCpjb21wb3Np
dGlvblJhbmdlKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRDYXJldFJl
Y3RBdFN0YXJ0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGNvbXBvc2l0aW9uU2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLmFic29sdXRlQ2FyZXRCb3VuZHMobnVsbHB0ciAvKiBpbnNpZGVGaXhl
ZCAqLykpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dENhcmV0UmVjdEF0
RW5kID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGNvbXBvc2l0aW9uU2VsZWN0aW9uLnZpc2li
bGVFbmQoKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxwdHIgLyogaW5zaWRlRml4ZWQgKi8pKTsK
QEAgLTEzNzcsMTMgKzEzNzcsMTUgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShj
b25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgIHsKICAg
ICAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gbWFya2VkUmFuZ2UgPSBmcmFtZS5lZGl0b3Io
KS5jb21wb3NpdGlvblJhbmdlKCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IG1hcmtlZFJhbmdl
LT5zdGFydFBvc2l0aW9uKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG1hcmtlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA+IG1hcmtlZFJhbmdlLT5lbmRQ
b3NpdGlvbigpKQotICAgICAgICAgICAgcG9zaXRpb24gPSBtYXJrZWRSYW5nZS0+ZW5kUG9zaXRp
b24oKTsKKyAgICAgICAgYXV0byBtYXJrZWRSYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0
aW9uUmFuZ2UoKTsKKyAgICAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG1hcmtlZFJhbmdlLT5zdGFydCk7CisgICAgICAgIGF1dG8gZW5kUG9zaXRp
b24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obWFya2VkUmFuZ2UtPmVuZCk7CisgICAg
ICAgIGlmIChwb3NpdGlvbiA8IHN0YXJ0UG9zaXRpb24pCisgICAgICAgICAgICBwb3NpdGlvbiA9
IHN0YXJ0UG9zaXRpb247CisgICAgICAgIGlmIChwb3NpdGlvbiA+IGVuZFBvc2l0aW9uKQorICAg
ICAgICAgICAgcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKICAgICAgICAgaWYgKHdrR2VzdHVyZVN0
YXRlICE9IEdlc3R1cmVSZWNvZ25pemVyU3RhdGU6OkJlZ2FuKQotICAgICAgICAgICAgZmxhZ3Mg
PSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMobWFya2VkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgIT0gZGlzdGFuY2VCZXR3ZWVu
UG9zaXRpb25zKG1hcmtlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKSA/IFBocmFz
ZUJvdW5kYXJ5Q2hhbmdlZCA6IE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4geyB9OworICAgICAg
ICAgICAgZmxhZ3MgPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgIT0gZGlzdGFuY2VCZXR3ZWVuUG9z
aXRpb25zKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKSA/IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZCA6
IE9wdGlvblNldDxTZWxlY3Rpb25GbGFncz4geyB9OwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBmbGFncyA9IFBocmFzZUJvdW5kYXJ5Q2hhbmdlZDsKICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pOwpAQCAtMjQ4Myw3
ICsyNDg1LDYgQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0
aW9uQ29udGV4dCgpCiAgICAgRWRpdGluZ1JhbmdlIG1hcmtlZFRleHRSYW5nZTsKIAogICAgIGF1
dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKICAgICBWaXNp
YmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5l
bmQoKTsKICAgICBjb25zdCB1bnNpZ25lZCBtaW5Db250ZXh0V29yZENvdW50ID0gMzsKQEAgLTI0
OTQsMTQgKzI0OTUsMTIgQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9j
b3JyZWN0aW9uQ29udGV4dCgpCiAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNv
bnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CiAKICAgICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9z
aXRpb25SYW5nZSgpKSB7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9j
dW1lbnQoKSwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzdGFydFBvc2l0aW9u
KTsKICAgICAgICAgU3RyaW5nIG1hcmtlZFRleHRCZWZvcmU7Ci0gICAgICAgIGlmIChyYW5nZSkK
LSAgICAgICAgICAgIG1hcmtlZFRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KHJhbmdl
LmdldCgpKTsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgp
LCBlbmRQb3NpdGlvbiwgY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAg
IGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbikpCisgICAg
ICAgICAgICBtYXJrZWRUZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dCh7IGNvbXBvc2l0
aW9uUmFuZ2UtPnN0YXJ0LCAqc3RhcnQgfSk7CiAgICAgICAgIFN0cmluZyBtYXJrZWRUZXh0QWZ0
ZXI7Ci0gICAgICAgIGlmIChyYW5nZSkKLSAgICAgICAgICAgIG1hcmtlZFRleHRBZnRlciA9IHBs
YWluVGV4dEZvckNvbnRleHQocmFuZ2UuZ2V0KCkpOworICAgICAgICBpZiAoYXV0byBlbmQgPSBt
YWtlQm91bmRhcnlQb2ludChlbmRQb3NpdGlvbikpCisgICAgICAgICAgICBtYXJrZWRUZXh0QWZ0
ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KHsgKmVuZCwgY29tcG9zaXRpb25SYW5nZS0+ZW5kIH0p
OwogICAgICAgICBtYXJrZWRUZXh0ID0gbWFya2VkVGV4dEJlZm9yZSArIHNlbGVjdGVkVGV4dCAr
IG1hcmtlZFRleHRBZnRlcjsKICAgICAgICAgaWYgKCFtYXJrZWRUZXh0LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgbWFya2VkVGV4dFJhbmdlLmxvY2F0aW9uID0gbWFya2VkVGV4dEJlZm9yZS5s
ZW5ndGgoKTsKQEAgLTI2MTcsMTQgKzI2MTYsMTYgQEAgc3RhdGljIHZvaWQgZm9jdXNlZEVsZW1l
bnRQb3NpdGlvbkluZm9ybWF0aW9uKFdlYlBhZ2UmIHBhZ2UsIEVsZW1lbnQmIGZvY3VzZWRFbGUK
ICAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBvaW50ID0gY29uc3RyYWluUG9pbnQoYWRqdXN0ZWRQ
b2ludCwgZnJhbWUsIGZvY3VzZWRFbGVtZW50KTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdHJhaW5lZFBvaW50KTsKIAot
ICAgIFJlZlB0cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBv
c2l0aW9uUmFuZ2UoKTsKKyAgICBhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3Io
KS5jb21wb3NpdGlvblJhbmdlKCk7CiAgICAgaWYgKCFjb21wb3NpdGlvblJhbmdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAocG9zaXRpb24gPCBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBv
c2l0aW9uKCkpCi0gICAgICAgIHBvc2l0aW9uID0gY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3Np
dGlvbigpOwotICAgIGVsc2UgaWYgKHBvc2l0aW9uID4gY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9z
aXRpb24oKSkKLSAgICAgICAgcG9zaXRpb24gPSBjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlv
bigpOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihjb21wb3NpdGlvblJhbmdlLT5zdGFydCk7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5lbmQpOworICAgIGlmIChw
b3NpdGlvbiA8IHN0YXJ0UG9zaXRpb24pCisgICAgICAgIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlv
bjsKKyAgICBlbHNlIGlmIChwb3NpdGlvbiA+IGVuZFBvc2l0aW9uKQorICAgICAgICBwb3NpdGlv
biA9IGVuZFBvc2l0aW9uOwogICAgIEludFJlY3QgY2FyZXRSZWN0ID0gdmlldy5jb250ZW50c1Rv
Um9vdFZpZXcocG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKICAgICBmbG9hdCBkZWx0
YVggPSBhYnMoY2FyZXRSZWN0LngoKSArIChjYXJldFJlY3Qud2lkdGgoKSAvIDIpIC0gcmVxdWVz
dC5wb2ludC54KCkpOwogICAgIGZsb2F0IGRlbHRhWUZyb21UaGVUb3AgPSBhYnMoY2FyZXRSZWN0
LnkoKSAtIHJlcXVlc3QucG9pbnQueSgpKTsKQEAgLTQyNTUsOCArNDI1Niw4IEBAIHZvaWQgV2Vi
UGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4
dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIGlmICh3YW50c01hcmtlZFRleHRSZWN0cyAmJiBjb21w
b3NpdGlvblJhbmdlKSB7CiAgICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgY2xp
ZW50IGhhcyByZXF1ZXN0ZWQgbWFya2VkIHRleHQgcmVjdHMgbWFrZSBzdXJlIHRoYXQgdGhlIGNv
bnRleHQKICAgICAgICAgICAgIC8vIHJhbmdlIGVuY29tcGFzc2VzIHRoZSBlbnRpcmUgbWFya2Vk
IHRleHQgcmFuZ2Ugc28gdGhhdCB3ZSBkb24ndCByZXR1cm4gYSB0cnVuY2F0ZWQgcmVzdWx0Lgot
ICAgICAgICAgICAgYXV0byBjb21wb3NpdGlvblN0YXJ0ID0gY29tcG9zaXRpb25SYW5nZS0+c3Rh
cnRQb3NpdGlvbigpOwotICAgICAgICAgICAgYXV0byBjb21wb3NpdGlvbkVuZCA9IGNvbXBvc2l0
aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGNvbXBvc2l0aW9uU3Rh
cnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQp
OworICAgICAgICAgICAgYXV0byBjb21wb3NpdGlvbkVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5lbmQpOwogICAgICAgICAgICAgaWYgKGNvbnRleHRC
ZWZvcmVTdGFydCA+IGNvbXBvc2l0aW9uU3RhcnQpCiAgICAgICAgICAgICAgICAgY29udGV4dEJl
Zm9yZVN0YXJ0ID0gY29tcG9zaXRpb25TdGFydDsKICAgICAgICAgICAgIGlmIChjb250ZXh0QWZ0
ZXJFbmQgPCBjb21wb3NpdGlvbkVuZCkKQEAgLTQyNzYsOSArNDI3Nyw5IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJl
cXVlc3QgcmVxdWVzCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhjb250
ZXh0QmVmb3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAg
Y29udGV4dC5zZWxlY3RlZFRleHQgPSBtYWtlU3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJ
blNlbGVjdGlvbiwgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAgY29udGV4
dC5jb250ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5nKGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24sIGNvbnRleHRBZnRlckVuZCk7Ci0gICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2Vz
T3ZlcmxhcChyYW5nZU9mSW50ZXJlc3QuZ2V0KCksIGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkpKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0YXJ0KGNvbXBvc2l0aW9uUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlv
bkVuZChjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICBpZiAoY29tcG9zaXRp
b25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2
ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIGNvbXBvc2l0aW9uU3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0
aW9uUmFuZ2UtPnN0YXJ0KSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvbkVu
ZChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAg
ICAgICAgIGNvbnRleHQubWFya2VkVGV4dCA9IG1ha2VTdHJpbmcoY29tcG9zaXRpb25TdGFydCwg
Y29tcG9zaXRpb25FbmQpOwogICAgICAgICBjb250ZXh0LnNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRl
eHQubG9jYXRpb24gPSBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRPZlJhbmdlT2ZJbnRl
cmVzdEluU2VsZWN0aW9uLCBjb21wb3NpdGlvblN0YXJ0KTsKICAgICAgICAgY29udGV4dC5zZWxl
Y3RlZFJhbmdlSW5NYXJrZWRUZXh0Lmxlbmd0aCA9IFtjb250ZXh0LnNlbGVjdGVkVGV4dC5zdHJp
bmcgbGVuZ3RoXTsKQEAgLTQzMDUsMTAgKzQzMDYsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RE
b2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVl
cwogICAgICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdl
KCpjb250ZXh0UmFuZ2UsIDApOwogICAgIH0gZWxzZSBpZiAod2FudHNNYXJrZWRUZXh0UmVjdHMg
JiYgY29tcG9zaXRpb25SYW5nZSkgewogICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGlvblN0YXJ0
T2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChj
b250ZXh0QmVmb3JlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpIHsKLSAgICAgICAgICAgIGlmIChh
dXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSkpCi0gICAgICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IFdlYkNvcmU6
OnBsYWluVGV4dChTaW1wbGVSYW5nZSB7IFdURk1vdmUoKnN0YXJ0KSwgV1RGTW92ZSgqZW5kKSB9
KS5sZW5ndGgoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSkKKyAgICAgICAg
ICAgIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQgPSBXZWJDb3JlOjpwbGFpblRleHQoeyBXVEZNb3Zl
KCpzdGFydCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0IH0pLmxlbmd0aCgpOwogICAgICAgICBj
b250ZXh0LnRleHRSZWN0cyA9IGNoYXJhY3RlclJlY3RzRm9yUmFuZ2UoKmNvbXBvc2l0aW9uUmFu
Z2UsIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCA4ZDZj
NDg3OTFkNDdkZjk0ZWY5YTIxMzhiMzgyMzU0MDAzNWJhMDRjLi5lY2NmYjUwMWU2ZWMzMjE4NzZh
MDZhNDA0MmZkYjkzYzE4MDZkOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lv
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtMTQwLDcgKzE0MCw3IEBAIC0g
KENHUmVjdCljbG9zZXN0Q2FyZXRSZWN0SW5NYXJrZWRUZXh0UmFuZ2VGb3JQb2ludDooQ0dQb2lu
dClwb2ludAogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogCi0gICAgYXV0byBtYXJr
ZWRUZXh0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpOwor
ICAgIGF1dG8gbWFya2VkVGV4dFJhbmdlID0gZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFu
Z2UoKTsKICAgICBhdXRvIG1hcmtlZFRleHRSYW5nZVNlbGVjdGlvbiA9IG1hcmtlZFRleHRSYW5n
ZSA/IFZpc2libGVTZWxlY3Rpb24oKm1hcmtlZFRleHRSYW5nZSkgOiBWaXNpYmxlU2VsZWN0aW9u
KCk7CiAKICAgICBpZiAoIW1hcmtlZFRleHRSYW5nZVNlbGVjdGlvbi5pc1JhbmdlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KaW5kZXggYTBiNmI3OTZhM2E4Mjc5ZDg4
NGM2NDczMDE1MzkxMzQ1MDcxNjBkOC4uZDBkMzBjZTlhODFiNzE4YjlhYzIyODAzNGViMDU3MTU5
OWVkZDcxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQpAQCAtMzA5
LDQgKzMwOSw5IEBAIERPTVJhbmdlICpraXQoV2ViQ29yZTo6UmFuZ2UqIHZhbHVlKQogICAgIHJl
dHVybiBbd3JhcHBlciBhdXRvcmVsZWFzZV07CiB9CiAKK0RPTVJhbmdlICpraXQoY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZSh2YWx1ZSkuZ2V0KCkpOworfQorCiAjdW5kZWYgSU1QTApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKaW5kZXggYWY1NTkzMjcw
OTMxNjQ1YmE3MmFlMWExOTkxYWVkOTE1MDlkZmNkNy4uZTY4MTlhNWY4ZDU4OGQyZTliNjg3ZjBk
OTc5ZjY3Y2IyM2E4OWExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTVJhbmdlSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
UmFuZ2VJbnRlcm5hbC5oCkBAIC0yMywxMSArMjMsOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kv
RE9NUmFuZ2UuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUmFuZ2U7Ci19Ci0KIFdl
YkNvcmU6OlJhbmdlKiBjb3JlKERPTVJhbmdlICopOwogRE9NUmFuZ2UgKmtpdChXZWJDb3JlOjpS
YW5nZSopOworRE9NUmFuZ2UgKmtpdChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggZTFiNDJlYTZkMmZiZWZlM2ExZWRmMTEzMjJjNmQ1
ZThiMzAzZmY0NS4uNmYwOGZhYWE5NTM1YzRhYjk3NWYyN2I3Y2JmNDI1NzY5NWY4YjRlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgKQEAgLTYzLDI0ICs2MywyNCBAQCBwcml2YXRlOgogICAgIGJvb2wgc21h
cnRJbnNlcnREZWxldGVFbmFibGVkKCkgZmluYWw7CiAgICAgYm9vbCBpc1NlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgc2hvdWxkRGVsZXRl
UmFuZ2UoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdl
KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogCi0gICAgYm9v
bCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNo
b3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKSBmaW5hbDsKLSAgICBib29sIHNob3VsZElu
c2VydE5vZGUoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RWRpdG9y
SW5zZXJ0QWN0aW9uKSBmaW5hbDsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3Ry
aW5nJiwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pIGZpbmFs
OwotICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJv
bVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25z
dCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGlu
Zyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkSW5z
ZXJ0Tm9kZShXZWJDb3JlOjpOb2RlJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3Vs
ZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxl
UmFuZ2U+JiwgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+JiBmcm9tUmFuZ2UsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgdG9S
YW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBmaW5hbDsKIAot
ICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpTdHlsZVByb3BlcnRpZXMqLCBXZWJD
b3JlOjpSYW5nZSopIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBXZWJD
b3JlOjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5n
ZT4mKSBmaW5hbDsKICAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbDsKIAotICAgIGJvb2wg
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5n
ZSogcmFuZ2VUb0JlUmVwbGFjZWQpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0
ZXJEZWxldGUoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmLCBjb25zdCBXZWJDb3JlOjpTaW1w
bGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRCZWdpbkVk
aXRpbmcoKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwor
ICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKSBmaW5hbDsKLSAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UoV2ViQ29yZTo6UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmlu
YWw7CisgICAgdm9pZCBnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YShjb25zdCBPcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgZmluYWw7
CiAKICAgICB2b2lkIHNldEluc2VydGlvblBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJikgZmluYWw7
CiAgICAgV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZSByZXF1ZXN0RE9NUGFzdGVBY2Nl
c3MoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4gV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NS
ZXNwb25zZTo6RGVuaWVkRm9yR2VzdHVyZTsgfQpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBzaG91bGRTdXBwcmVzc1Bhc3N3b3JkRWNobygpIGNvbnN0IGZpbmFsOwogI2Vu
ZGlmCiAKLSAgICBib29sIHBlcmZvcm1Ud29TdGVwRHJvcChXZWJDb3JlOjpEb2N1bWVudEZyYWdt
ZW50JiwgV2ViQ29yZTo6UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkgZmluYWw7Cisg
ICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNv
bnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiBkZXN0aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFs
OwogICAgIAogICAgIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24o
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBpZ25vcmVX
b3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CmluZGV4IDlhYjFjMjlkNDg3ODc3ZDZlODU4MzlmOWQ1ZjRjODkwNjk4MTI5YjIuLmJkOTVhNjY0
OGEzMDMyYzA1N2E5ODFlMDk0NjkwODBlODgxMDYzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAg
LTIzNCwxMCArMjM0LDkgQEAgaW50IFdlYkVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1l
bnRUYWcoKQogCiAjZW5kaWYKIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJh
bmdlKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5n
ZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIHJldHVybiBbW21f
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldwotICAg
ICAgICBzaG91bGREZWxldGVET01SYW5nZTpraXQocmFuZ2UpXTsKKyAgICByZXR1cm4gW1ttX3dl
YlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgc2hvdWxk
RGVsZXRlRE9NUmFuZ2U6a2l0KHJhbmdlKV07CiB9CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtMjU2LDExICsyNTUsMTEgQEAgYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHBhZ2UtPnNldHRpbmdzKCkuc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZCgpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlLCBSYW5nZSogcmFuZ2UpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkQXBwbHlTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewotICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBtdXRhYmxlU3R5bGUoc3R5bGUtPmlzTXV0YWJsZSgpID8gUmVmPE11dGFibGVTdHlsZVByb3Bl
cnRpZXM+KHN0YXRpY19jYXN0PE11dGFibGVTdHlsZVByb3BlcnRpZXMmPigqc3R5bGUpKSA6IHN0
eWxlLT5tdXRhYmxlQ29weSgpKTsKICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAgc2hvdWxkQXBwbHlTdHls
ZTpraXQoJm11dGFibGVTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpKSB0b0VsZW1l
bnRzSW5ET01SYW5nZTpraXQocmFuZ2UpXTsKKyAgICAgICAgc2hvdWxkQXBwbHlTdHlsZTpraXQo
JnN0eWxlLm11dGFibGVDb3B5KCktPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSkKKyAgICAg
ICAgdG9FbGVtZW50c0luRE9NUmFuZ2U6a2l0KHJhbmdlKV07CiB9CiAKIHN0YXRpYyB2b2lkIHVw
ZGF0ZUZvbnRQYW5lbChXZWJWaWV3ICp3ZWJWaWV3KQpAQCAtMjc5LDMzICsyNzgsMjkgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEFwcGx5U3R5bGUoKQogICAgIHVwZGF0ZUZvbnRQYW5lbCht
X3dlYlZpZXcpOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0
ZXJEZWxldGUoUmFuZ2UqIHJhbmdlLCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQpCitib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQpCiB7CiAgICAg
cmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93
ZWJWaWV3CiAgICAgICAgIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlOmtpdChyYW5nZSkgcmVw
bGFjaW5nUmFuZ2U6a2l0KHJhbmdlVG9CZVJlcGxhY2VkKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JD
bGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0g
ICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
bV93ZWJWaWV3Ci0gICAgICAgIHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6a2l0KHJhbmdl
KV07Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5n
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHNob3VsZEJlZ2luRWRpdGluZ0lu
RE9NUmFuZ2U6a2l0KHJhbmdlKV07CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRF
bmRFZGl0aW5nKFJhbmdlKiByYW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRF
ZGl0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gW1ttX3dlYlZp
ZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6a2l0KHJhbmdl
KV07CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6bV93ZWJWaWV3IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOmtpdChyYW5nZSldOwog
fQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK2Jvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikK
IHsKICAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbV93ZWJWaWV3OwogICAgIHJldHVybiBbW3dlYlZp
ZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2Vy
dFRleHQ6dGV4dCByZXBsYWNpbmdET01SYW5nZTpraXQocmFuZ2UpIGdpdmVuQWN0aW9uOmtpdChh
Y3Rpb24pXTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UsIEVBZmZpbml0eSBzZWxlY3Rp
b25BZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZnJv
bVJhbmdlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIEVBZmZpbml0eSBz
ZWxlY3Rpb25BZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKICAgICByZXR1cm4gW21f
d2ViVmlldyBfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpraXQoZnJvbVJhbmdlKSB0b0RP
TVJhbmdlOmtpdCh0b1JhbmdlKSBhZmZpbml0eTpraXQoc2VsZWN0aW9uQWZmaW5pdHkpIHN0aWxs
U2VsZWN0aW5nOnN0aWxsU2VsZWN0aW5nXTsKIH0KQEAgLTQxMSwxMiArNDA2LDEyIEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCiAjZW5kaWYK
IH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChXZWJDb3JlOjpSYW5nZSopCit2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpCiB7CiAgICAgLy8g
Tm90IGltcGxlbWVudGVkIFdlYktpdCwgb25seSBXZWJLaXQyLgogfQogCi12b2lkIFdlYkVkaXRv
ckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSos
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6Omdl
dENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPj4mIHBhc3RlYm9hcmREYXRhKQogewogICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBXZWJL
aXQsIG9ubHkgV2ViS2l0Mi4KIH0KQEAgLTU3Nyw5ICs1NzIsOSBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKIAogI2VuZGlmIC8vIFVT
RShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZEluc2VydE5vZGUoTm9kZSAqbm9kZSwgUmFuZ2UqIHJlcGxhY2luZ1JhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkSW5z
ZXJ0Tm9kZShOb2RlJiBub2RlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJlcGxhY2lu
Z1JhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pCiB7IAotICAgIHJldHVybiBb
W21fd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBz
aG91bGRJbnNlcnROb2RlOmtpdChub2RlKSByZXBsYWNpbmdET01SYW5nZTpraXQocmVwbGFjaW5n
UmFuZ2UpIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWdpdmVuQWN0aW9uXTsKKyAg
ICByZXR1cm4gW1ttX3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpt
X3dlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTpraXQoJm5vZGUpIHJlcGxhY2luZ0RPTVJhbmdlOmtp
dChyZXBsYWNpbmdSYW5nZSkgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pZ2l2ZW5B
Y3Rpb25dOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvT3JSZWRvU3Rl
cChVbmRvU3RlcCYgc3RlcCwgYm9vbCBpc1JlZG8pCkBAIC04NTYsMTAgKzg1MSwxMCBAQCBib29s
IFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybXNUd29TdGVwUGFzdGUoV2ViQ29yZTo6RG9jdW1lbnRG
cmFnbWVudCogZnJhZ21lbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkVkaXRv
ckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBS
YW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3ZlKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBl
cmZvcm1Ud29TdGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgU2ltcGxl
UmFuZ2UmIGRlc3RpbmF0aW9uLCBib29sIGlzTW92ZSkKIHsKICAgICBpZiAoW1ttX3dlYlZpZXcg
X1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGVy
Zm9ybVR3b1N0ZXBEcm9wOmF0RGVzdGluYXRpb246aXNNb3ZlOildKQotICAgICAgICByZXR1cm4g
W1ttX3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHBlcmZvcm1Ud29TdGVwRHJvcDpr
aXQoJmZyYWdtZW50KSBhdERlc3RpbmF0aW9uOmtpdCgmZGVzdGluYXRpb24pIGlzTW92ZTppc01v
dmVdOworICAgICAgICByZXR1cm4gW1ttX3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJd
IHBlcmZvcm1Ud29TdGVwRHJvcDpraXQoJmZyYWdtZW50KSBhdERlc3RpbmF0aW9uOmtpdChkZXN0
aW5hdGlvbikgaXNNb3ZlOmlzTW92ZV07CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC04ODcs
NyArODgyLDcgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmkKIAogI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9ybVR3b1N0ZXBEcm9wKERvY3Vt
ZW50RnJhZ21lbnQmLCBSYW5nZSYsIGJvb2wpCitib29sIFdlYkVkaXRvckNsaWVudDo6cGVyZm9y
bVR3b1N0ZXBEcm9wKERvY3VtZW50RnJhZ21lbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KaW5kZXggNGM1NGM0NDRhY2YxNzgxOTAyZDY1OGE5MTVhNDYyODgzYmI1
MjFhMC4uNzYzYzc3N2NlMmIwMjY2ZDQwOTNkYWZjYWMyYTYzNjI1ZjFiYmQ2YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC03MjAsMTMgKzcyMCwx
NSBAQCAtIChOU1JlY3QpX2NhcmV0UmVjdEF0UG9zaXRpb246KGNvbnN0IFdlYkNvcmU6OlBvc2l0
aW9uJilwb3MgYWZmaW5pdHk6KE5TU2VsZWN0aQogCiAtIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRP
TVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoY29yZShyYW5nZSkpOworICAgIGlmICghcmFu
Z2UpCisgICAgICAgIHJldHVybiBOU1plcm9SZWN0OworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqbWFrZVJhbmdlKGNvcmUocmFuZ2Up
KSk7CiB9CiAKIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJh
bmdlCiB7CiAgICAgYm9vbCBpbnNpZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhNRTogZ2V0IHZpYSBm
aXJzdFJlY3RGb3JSYW5nZSgpLgotICAgIE5TUmVjdCByYW5nZVJlY3QgPSBbc2VsZiBfZmlyc3RS
ZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOyAgICAKKyAgICBOU1JlY3QgcmFuZ2VSZWN0ID0gW3NlbGYg
X2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsKICAgICBhdXRvKiBzdGFydE5vZGUgPSBjb3Jl
KFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwogICAgICAgICAKICAgICBpZiAoc3RhcnROb2RlICYm
IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgewpAQCAtNzg0LDcgKzc4Niw3IEBAIC0gKERPTVJhbmdl
ICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpFQWx0ZXJhCiAgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAg
IHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9u
LCBncmFudWxhcml0eSk7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0
KHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KICNlbmRpZgog
CkBAIC04NTMsNyArODU1LDcgQEAgLSAoTlNSYW5nZSlfY29udmVydERPTVJhbmdlVG9OU1Jhbmdl
OihET01SYW5nZSAqKXJhbmdlCiAKIC0gKERPTVJhbmdlICopX21hcmtET01SYW5nZQogewotICAg
IHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigp
Lm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9
CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBT
dHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICop
YmFzZVVSTFN0cmluZwpAQCAtMTEwNiwxMiArMTEwOCwxMiBAQCAtIChET01SYW5nZSAqKV9zZWxl
Y3Rpb25SYW5nZUZvckZpcnN0UG9pbnQ6KENHUG9pbnQpZmlyc3Qgc2Vjb25kUG9pbnQ6KENHUG9p
bnQpcwogewogICAgIGF1dG8gZmlyc3RQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25G
b3JQb2ludDpmaXJzdF07CiAgICAgYXV0byBzZWNvbmRQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxl
UG9zaXRpb25Gb3JQb2ludDpzZWNvbmRdOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdl
KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24p
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24pLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpOwogfQogCiAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvclBvaW50OihD
R1BvaW50KXBvaW50CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKS50
b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChXZWJDb3JlOjpWaXNp
YmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAg
LTE0NTQsNyArMTQ1Niw3IEBAIC0gKEJPT0wpaXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxl
ZAogCiAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogLSAodm9pZClzZXRT
ZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFm
ZmluaXR5KWFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCkBAIC0xNDk2LDcg
KzE0OTgsNyBAQCAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJl
dFNlbGVjdGlvbgogCiAtIChET01SYW5nZSAqKWVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbgogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNl
bGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSk7CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9X
b3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCkBAIC0xNTI2LDcgKzE1MjgsNyBAQCAtICh1bmlj
aGFyKWNoYXJhY3RlckFmdGVyQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKil3b3JkUmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVS
YW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCku
d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpOwogfQogCiAtIChOU1N0cmluZyAq
KXdvcmRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCkBAIC0xNTg5LDEyICsxNTkxLDEyIEBAIC0g
KEJPT0wpc2VsZWN0aW9uQXRXb3JkU3RhcnQKIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5TW92aW5n
Q3VycmVudFNlbGVjdGlvbjooaW50KWFtb3VudAogewotICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0
aW9uKGFtb3VudCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNvcmUoc2VsZiktPnNlbGVjdGlv
bigpLnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpOwogfQogCiAtIChET01S
YW5nZSAqKXJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0g
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFu
Z2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOworICAgIHJldHVy
biBraXQoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxl
Y3Rpb24oYW1vdW50KSk7CiB9CiAKIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5n
ZSBvbkVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CkBAIC0xNjE4LDcgKzE2MjAsNyBAQCAt
IChET01SYW5nZSAqKW1hcmtlZFRleHRET01SYW5nZQogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4ga2l0KGZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlv
blJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoZnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0
aW9uUmFuZ2UoKSk7CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooTlNTdHJpbmcgKil0ZXh0
IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDExMWNmOGJkYzI5ZGM2MWUyOGY4
MjJlOTU3YjkzODgyYTQyNzk5YTUuLjRlM2EwOGIyZGM1ZDA0YmU4MGYxMWMyOWNiMjI5OTEwYjRl
ODhlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQpAQCAtMTMzMiw3ICsxMzMyLDcgQEAgLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnMKIC0gKERP
TVJhbmdlICopX3NlbGVjdGVkUmFuZ2UKIHsKICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY3JlYXRlTGl2ZVJhbmdl
KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCkpIDogbmlsOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSA6IG5pbDsKIH0KIAogI2lm
IFBMQVRGT1JNKE1BQykKQEAgLTYzNDYsNyArNjM0Niw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogICAgIERPTVJhbmdlICpyYW5nZSA9IFtmcmFtZSBfY29udmVydE5T
UmFuZ2VUb0RPTVJhbmdlOnRoZVJhbmdlXTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgIExP
RyhUZXh0SW5wdXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAtPiAoMCwg
MCwgMCwgMCkiLCB0aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3RoKTsKLSAgICAgICAg
cmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBOU1plcm9SZWN0
OwogICAgIH0KICAgICAKICAgICBBU1NFUlQoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7CkBAIC03
MDc1LDcgKzcwNzUsNyBAQCAtIChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRleHQ6KE5TU3Ry
aW5nICopc3RyaW5nIGluRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZwogICAgIGlmICghY29yZUZy
YW1lKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigp
LmNvdW50TWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjb3JlKHJhbmdlKSwgY29yZU9wdGlvbnMob3B0
aW9ucyksIGxpbWl0LCBtYXJrTWF0Y2hlcywgMCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRp
dG9yKCkuY291bnRNYXRjaGVzRm9yVGV4dChzdHJpbmcsIG1ha2VSYW5nZShjb3JlKHJhbmdlKSks
IGNvcmVPcHRpb25zKG9wdGlvbnMpLCBsaW1pdCwgbWFya01hdGNoZXMsIDApOwogfQogCiAtICh2
b2lkKXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3VmFsdWUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0
Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KaW5kZXggMWUzYjc5ZDAzODFhZTk5ZDZjYTM0ZWNhMjJm
NTYzOWQ0OGEzYTk0ZS4uODAxYmVmZWM3NmQwOTZmOTNmMGY0OGQ2M2NmODdkZjk1ZDU1MWJhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxl
dGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KQEAgLTE3Niw3ICsxNzYsNyBAQCAtICh2b2lk
KWRvQ29tcGxldGlvbgogCiAgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdvcmQgc3RlbQogICAg
ICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX2h0bWxWaWV3IF9mcmFtZV07Ci0gICAgICAgIERPTVJh
bmdlICpzZWxlY3Rpb24gPSBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoZnJhbWUpLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgICAgIERP
TVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgICAgICBET01SYW5nZSAqd2hvbGVXb3JkID0g
W2ZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOkZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kCiAgICAgICAgICAgICBkaXJlY3Rpb246U2VsZWN0aW9uRGlyZWN0aW9u
OjpCYWNrd2FyZCBncmFudWxhcml0eTpUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eV07
CiAgICAgICAgIERPTVJhbmdlICpwcmVmaXggPSBbd2hvbGVXb3JkIGNsb25lUmFuZ2VdOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3Iu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRJdGVyYXRvci5tbQpp
bmRleCA4YzdlN2VlMDBmN2YzMTUwZDg5Nzc0M2EwNzI0MDk2YjM4ODIxN2NlLi45M2I4MzQ3N2Zj
OGE0MmFkM2Y3NGQzNjllODE3OTRiYmVmZGEwM2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRJdGVyYXRvci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRJdGVyYXRvci5tbQpAQCAtOTUsNyArOTUsNyBAQCAt
IChET01SYW5nZSAqKWN1cnJlbnRSYW5nZQogICAgIGF1dG8mIHRleHRJdGVyYXRvciA9ICpfcHJp
dmF0ZS0+X3RleHRJdGVyYXRvcjsKICAgICBpZiAodGV4dEl0ZXJhdG9yLmF0RW5kKCkpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UodGV4dEl0ZXJh
dG9yLnJhbmdlKCkpLnB0cigpKTsKKyAgICByZXR1cm4ga2l0KHRleHRJdGVyYXRvci5yYW5nZSgp
KTsKIH0KIAogLy8gRklYTUU6IENvbnNpZGVyIGRlcHJlY2F0aW5nIHRoaXMgbWV0aG9kIGFuZCBj
cmVhdGluZyBvbmUgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGNvcHlpbmcgOC1iaXQgY2hhcmFjdGVy
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA4NWQ2
OTQzZTM2YmFlNjM3YTBlMDliNTQ3OWRhYjM1YjM5YWE3Y2NjLi4wNzMzZjVlMDQ0NGY3OWFkZDdk
Yjk3Y2RhMTVkNjk3ODI4YjY5NzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCkBAIC00NTk0LDcgKzQ1OTQsNyBAQCAtIChXZWJUZXh0SXRlcmF0b3IgKil0
ZXh0SXRlcmF0b3JGb3JSZWN0OihOU1JlY3QpcmVjdAogICAgIGF1dG8gaW50UmVjdCA9IFdlYkNv
cmU6OmVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiAgICAgYXV0byByYW5nZSA9IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24oY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0
Lm1pblhNaW5ZQ29ybmVyKCkpLAogICAgICAgICBjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KGludFJlY3QubWF4WE1heFlDb3JuZXIoKSkpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQoY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tb
V2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOmtpdChyYW5nZSldIGF1dG9yZWxl
YXNlXTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODQxNyw3ICs4NDE3LDcg
QEAgLSAoRE9NUmFuZ2UgKillZGl0YWJsZURPTVJhbmdlRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQK
ICAgICBhdXRvKiBwYWdlID0gY29yZShzZWxmKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChwYWdlLT5tYWluRnJhbWUoKS5lZGl0b3IoKS5yYW5n
ZUZvclBvaW50KFdlYkNvcmU6OkludFBvaW50KFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1Zp
ZXc6bmlsXSkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KHBhZ2UtPm1haW5GcmFtZSgpLmVkaXRv
cigpLnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQoW3NlbGYgY29udmVydFBvaW50OnBv
aW50IHRvVmlldzpuaWxdKSkpOwogfQogCiAtIChCT09MKV9zaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOihET01SYW5nZSAqKXBy
b3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5p
dHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZwpAQCAtODQ2NSw3ICs4NDY1LDcgQEAgLSAoRE9N
UmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiAgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJl
dHVybiBraXQoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9NQ29yZUNsYXNzZXMuY3BwIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCmluZGV4IGI2MjY0Mzcz
ZDY1Yzg5NjU5ZTA3NTQ5MjMwYTJjMTEyOThlZTJiMTkuLmIwMzYxZmVhZDU3ZDAzMTJmNTRjOTVl
NDFiYTRjYWYyYmNjMmNkZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0RP
TUNvcmVDbGFzc2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xh
c3Nlcy5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckVsZW1l
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Njcm9sbEludG9WaWV3T3B0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxl
UmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlZEVsZW1lbnQuaD4KICNpbmNsdWRlIDxp
bml0Z3VpZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L3dpbi9XQ2hhclN0cmluZ0V4dHJhcy5oPgpA
QCAtOTY4LDEwICs5NjksMTIgQEAgSFJFU1VMVCBET01XaW5kb3c6OmRpc3BhdGNoRXZlbnQoX0lu
X29wdF8gSURPTUV2ZW50KiBldnQsIF9PdXRfIEJPT0wqIHJlc3VsdCkKIERPTVdpbmRvdzo6RE9N
V2luZG93KFdlYkNvcmU6OkRPTVdpbmRvdyogdykKICAgICA6IG1fd2luZG93KHcpCiB7CisgICAg
bV93aW5kb3ctPnJlZigpOwogfQogCiBET01XaW5kb3c6On5ET01XaW5kb3coKQogeworICAgIG1f
d2luZG93LT5kZXJlZigpOwogfQogCiBJRE9NV2luZG93KiBET01XaW5kb3c6OmNyZWF0ZUluc3Rh
bmNlKFdlYkNvcmU6OkRPTVdpbmRvdyogdykKQEAgLTE1OTUsMTAgKzE1OTgsMTIgQEAgSFJFU1VM
VCBET01SYW5nZTo6UXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJf
IHZvaWQqKiBwcHZPYmplY3QKIERPTVJhbmdlOjpET01SYW5nZShXZWJDb3JlOjpSYW5nZSogZSkK
ICAgICA6IG1fcmFuZ2UoZSkKIHsKKyAgICBtX3JhbmdlLT5yZWYoKTsKIH0KIAogRE9NUmFuZ2U6
On5ET01SYW5nZSgpCiB7CisgICAgbV9yYW5nZS0+ZGVyZWYoKTsKIH0KIAogSURPTVJhbmdlKiBE
T01SYW5nZTo6Y3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQpAQCAtMTYxNSw2
ICsxNjIwLDExIEBAIElET01SYW5nZSogRE9NUmFuZ2U6OmNyZWF0ZUluc3RhbmNlKFdlYkNvcmU6
OlJhbmdlKiByYW5nZSkKICAgICByZXR1cm4gbmV3UmFuZ2U7CiB9CiAKK0lET01SYW5nZSogRE9N
UmFuZ2U6OmNyZWF0ZUluc3RhbmNlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdl
PiYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkuZ2V0KCkpOworfQorCiBIUkVTVUxUIERPTVJhbmdlOjpzdGFydENvbnRhaW5lcihfQ09N
X091dHB0cl9vcHRfIElET01Ob2RlKiogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkBAIC0xODE2
LDEwICsxODI2LDEyIEBAIEhSRVNVTFQgRE9NUmFuZ2U6OmRldGFjaCgpCiBET01OYW1lZE5vZGVN
YXA6OkRPTU5hbWVkTm9kZU1hcChXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIG5vZGVNYXApCiAgICAg
OiBtX25vZGVNYXAobm9kZU1hcCkKIHsKKyAgICBtX25vZGVNYXAtPnJlZigpOwogfQogCiBET01O
YW1lZE5vZGVNYXA6On5ET01OYW1lZE5vZGVNYXAoKQogeworICAgIG1fbm9kZU1hcC0+ZGVyZWYo
KTsKIH0KIAogSURPTU5hbWVkTm9kZU1hcCogRE9NTmFtZWROb2RlTWFwOjpjcmVhdGVJbnN0YW5j
ZShXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIG5vZGVNYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
RE9NQ29yZUNsYXNzZXMuaAppbmRleCBhYzY0M2I2ZmNmNDNhZWVjZDEyYjM3ZTk5MDFkN2IzMmNk
MDI5Yzg5Li41NmY4Y2YwN2NmOGZmYjgyNWVjNTMzYjJhYzNkYTY0OWRhNDQxOWIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9ET01Db3JlQ2xhc3Nlcy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL0RPTUNvcmVDbGFzc2VzLmgKQEAgLTM3LDkgKzM3LDkgQEAgY2xh
c3MgTm9kZTsKIGNsYXNzIE5vZGVMaXN0OwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBOYW1lZE5vZGVN
YXA7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiB9CiAKLQogY2xhc3MgRE9NT2JqZWN0IDogcHVibGlj
IFdlYlNjcmlwdE9iamVjdCwgcHVibGljIElET01PYmplY3QgewogcHVibGljOgogICAgIC8vIElV
bmtub3duCkBAIC04MjMsNiArODIzLDcgQEAgcHJvdGVjdGVkOgogCiBwdWJsaWM6CiAgICAgc3Rh
dGljIElET01SYW5nZSogY3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6UmFuZ2UqKTsKKyAgICBzdGF0
aWMgSURPTVJhbmdlKiBjcmVhdGVJbnN0YW5jZShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4mKTsKIAogcHVibGljOgogICAgIC8vIElVbmtub3duCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAppbmRleCBlZmVkYTQ0YTk4MTk4MDk1ZDAxN2EwOTBiZmM3YWE3ZTg3MjhkZDcwLi40YTFlNjg1
ZWUyNDRhZTZiNTU0NTg5MDZlNDM2YTVjYzcwNTkxZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAK
QEAgLTE4NSw3ICsxODUsNyBAQCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1
bWVudFRhZygpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGVkOwogICAgIGlmIChGQUlMRUQo
bV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdhdGUoJmVkKSkgfHwgIWVkLmdldCgpKQpAQCAtMjAwLDcg
KzIwMCw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlKQogICAgIHJldHVybiBzaG91bGRCZWdpbjsKIH0KIAotYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKQorYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmIHJh
bmdlKQogewogICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAgICBpZiAoRkFJ
TEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkKQEAgLTI0
MCwxMiArMjQwLDEwIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKEZyYW1lKikKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc2NhcmRlZENvbXBvc2l0
aW9uKEZyYW1lKikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Y2FuY2VsZWRDb21wb3NpdGlvbigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoKQpAQCAtMjU3LDIwICsy
NTUsMTggQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoKQogCiB2b2lkIFdl
YkVkaXRvckNsaWVudDo6ZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3aWxsV3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoV2ViQ29yZTo6UmFuZ2UqKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4mKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpnZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYkNvcmU6OlJhbmdl
KiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4g
PiYpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3Qg
T3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gPiYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiBy
YW5nZSkKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIENPTVB0cjxJV2ViRWRp
dGluZ0RlbGVnYXRlPiBlZDsKICAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVn
YXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkKQEAgLTMwMCw3ICsyOTYsNyBAQCBzdGF0aWMgV2ViVmll
d0luc2VydEFjdGlvbiBraXQoRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKICAgICByZXR1cm4g
V2ViVmlld0luc2VydEFjdGlvblR5cGVkOwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hv
dWxkSW5zZXJ0Tm9kZShOb2RlKiBub2RlLCBSYW5nZSogaW5zZXJ0aW5nUmFuZ2UsIEVkaXRvcklu
c2VydEFjdGlvbiBnaXZlbkFjdGlvbikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNl
cnROb2RlKE5vZGUmIG5vZGUsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYg
aW5zZXJ0aW5nUmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsgCiAgICAg
Q09NUHRyPElXZWJFZGl0aW5nRGVsZWdhdGU+IGVkaXRpbmdEZWxlZ2F0ZTsKICAgICBpZiAoRkFJ
TEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZGl0aW5nRGVsZWdhdGUpKSB8fCAhZWRp
dGluZ0RlbGVnYXRlLmdldCgpKQpAQCAtMzEwLDcgKzMwNiw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUqIG5vZGUsIFJhbmdlKiBpbnNlcnRpbmdSYW5nZSwg
RWRpdG9yCiAgICAgaWYgKCFpbnNlcnRpbmdET01SYW5nZSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBDT01QdHI8SURPTU5vZGU+IGluc2VydERPTU5vZGUoQWRvcHRDT00sIERPTU5vZGU6
OmNyZWF0ZUluc3RhbmNlKG5vZGUpKTsKKyAgICBDT01QdHI8SURPTU5vZGU+IGluc2VydERPTU5v
ZGUoQWRvcHRDT00sIERPTU5vZGU6OmNyZWF0ZUluc3RhbmNlKCZub2RlKSk7CiAgICAgaWYgKCFp
bnNlcnRET01Ob2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMzI0LDcgKzMyMCw3IEBA
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnROb2RlKE5vZGUqIG5vZGUsIFJhbmdl
KiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9yCiAgICAgcmV0dXJuIHNob3VsZEluc2VydDsKIH0KIAot
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiBzdHIs
IFJhbmdlKiBpbnNlcnRpbmdSYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKQor
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiBzdHIs
IGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgaW5zZXJ0aW5nUmFuZ2UsIEVk
aXRvckluc2VydEFjdGlvbiBnaXZlbkFjdGlvbikKIHsKICAgICBDT01QdHI8SVdlYkVkaXRpbmdE
ZWxlZ2F0ZT4gZWRpdGluZ0RlbGVnYXRlOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0
aW5nRGVsZWdhdGUoJmVkaXRpbmdEZWxlZ2F0ZSkpIHx8ICFlZGl0aW5nRGVsZWdhdGUuZ2V0KCkp
CkBAIC0zNDIsNyArMzM4LDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRl
eHQoY29uc3QgU3RyaW5nJiBzdHIsIFJhbmdlKiBpbnNlcnRpbmdSYW5nZSwKICAgICByZXR1cm4g
c2hvdWxkSW5zZXJ0OwogfQogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogY3VycmVudFJhbmdlLCBXZWJDb3JlOjpSYW5nZSog
cHJvcG9zZWRSYW5nZSwgV2ViQ29yZTo6RUFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LCBib29s
IGZsYWcpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIGN1cnJlbnRSYW5nZSwgY29uc3Qg
T3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JiBwcm9wb3NlZFJhbmdlLCBXZWJDb3JlOjpF
QWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgZmxhZykKIHsKICAgICBDT01QdHI8SVdl
YkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdE
ZWxlZ2F0ZSgmZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC0zNTgsMjAgKzM1NCwxNyBAQCBib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSog
Y3VycmVudFJhbmdlLCBXZQogICAgIHJldHVybiBzaG91bGRDaGFuZ2U7CiB9CiAKLWJvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIFJhbmdlKikK
K2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVy
dGllcyYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZEFw
cGx5U3R5bGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKikKK2Jvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShjb25zdCBXZWJDb3Jl
OjpTaW1wbGVSYW5nZSYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJikKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4
IDc3ZjY0MzZlN2I1NDgwYWYwNGM0ODViODBiNTQwODkzMDMxNTkxNjIuLmI0Y2FkMDAxZmEzMzY1
NDYxOGQ3NmVhZjY4Yjk1OGViNGY0OWQzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC00NywxNSAr
NDcsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5n
KCkgZmluYWw7CiAgICAgaW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgZmluYWw7CiAKLSAg
ICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJv
b2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopIGZpbmFsOwotICAgIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29y
ZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbDsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGlu
Zyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkRW5k
RWRpdGluZyhjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpIGZpbmFsOworICAgIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiYsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7CiAKICAg
ICB2b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFsOwogICAgIHZvaWQgZGlkRW5kRWRpdGluZygp
IGZpbmFsOwotICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFdlYkNvcmU6
OlJhbmdlKikgZmluYWw7CisgICAgdm9pZCB3aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
Y29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+JikgZmluYWw7CiAgICAgdm9pZCBk
aWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q2xpZW50
UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJDb3JlOjpSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBh
c3RlYm9hcmREYXRhKSBmaW5hbDsKKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYsIFZlY3RvcjxTdHJpbmc+JiBwYXN0
ZWJvYXJkVHlwZXMsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4mIHBhc3Rl
Ym9hcmREYXRhKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlv
bkNoYW5nZXMoKSBmaW5hbCB7IH0KICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygp
IGZpbmFsOwpAQCAtNjUsMTIgKzY1LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNjYXJkZWRD
b21wb3NpdGlvbihXZWJDb3JlOjpGcmFtZSopIGZpbmFsOwogICAgIHZvaWQgZGlkVXBkYXRlQ29t
cG9zaXRpb24oKSBmaW5hbCB7IH0KIAotICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViQ29y
ZTo6UmFuZ2UqKSBmaW5hbDsKKyAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IE9wdGlv
bmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYpIGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRJbnNl
cnROb2RlKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpSYW5nZSogcmVwbGFjaW5nUmFuZ2UsIFdl
YkNvcmU6OkVkaXRvckluc2VydEFjdGlvbikgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRBcHBseVN0
eWxlKFdlYkNvcmU6OlN0eWxlUHJvcGVydGllcyosIFdlYkNvcmU6OlJhbmdlKikgZmluYWw7Cisg
ICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUmLCBjb25zdCBPcHRpb25hbDxX
ZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHJlcGxhY2luZ1JhbmdlLCBXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24pIGZpbmFsOworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBXZWJDb3Jl
OjpTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4m
KSBmaW5hbDsKICAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBmaW5hbDsKLSAgICBib29sIHNob3Vs
ZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6UmFuZ2UqKSBm
aW5hbDsKKyAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKGNvbnN0IFdlYkNvcmU6
OlNpbXBsZVJhbmdlJiwgY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKSBmaW5hbDsKIAogICAg
IGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgZmluYWw7CiAgICAgYm9vbCBpc1NlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBjb25zdCBmaW5hbDsKQEAgLTg3LDcgKzg3LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHVuZG8oKSBmaW5hbDsKICAgICB2b2lkIHJlZG8oKSBmaW5h
bDsKICAgICAKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV2ViQ29yZTo6UmFu
Z2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIFdlYkNvcmU6OkVBZmZpbml0
eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiYgZnJvbVJhbmdl
LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4mIHRvUmFuZ2UsIFdlYkNvcmU6
OkVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgZmluYWw7CiAgICAgdm9pZCB0ZXh0Rmll
bGREaWRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQgdGV4
dEZpZWxkRGlkRW5kRWRpdGluZyhXZWJDb3JlOjpFbGVtZW50KikgZmluYWw7CiAgICAgdm9pZCB0
ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwpAQCAtMTE1
LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgp
IGZpbmFsOwogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShXZWJDb3JlOjpFbGVtZW50Kikg
ZmluYWw7CiAgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsIHsg
fQotICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQm
LCBXZWJDb3JlOjpSYW5nZSYsIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBwZXJmb3JtVHdvU3RlcERyb3AoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFdl
YkNvcmU6OlNpbXBsZVJhbmdlJiwgYm9vbCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgcmVxdWVzdERPTVBhc3RlQWNjZXNzKGNv
bnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9u
c2U6OkRlbmllZEZvckdlc3R1cmU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApp
bmRleCA4YzE3YjVlZmU3OWMzYTlkNTZhY2FiMWE4ZTcwMzQwNWNkMGM4NjM2Li5mNTU4MzQwMzM0
ZjQ2OWUzZDRhMTlmYTY2Y2MyNzgwM2I3MjU0MDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJW
aWV3LmNwcApAQCAtNjIwMCw3ICs2MjAwLDcgQEAgdm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlk
YXRlV2luZG93KEZyYW1lKiB0YXJnZXRGcmFtZSwgSElNQyBoSW5wdXRDb250ZXh0KQogewogICAg
IEludFJlY3QgY2FyZXQ7CiAgICAgaWYgKGF1dG8gcmFuZ2UgPSB0YXJnZXRGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgY2FyZXQgPSB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSkucHRyKCkpOworICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZSgqcmFuZ2UpOwogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CiAgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CiAKQEAgLTY0NTYsMTQgKzY0NTYsMTQgQEAgTFJFU1VMVCBXZWJWaWV3OjpvbklNRVJl
cXVlc3RDaGFyUG9zaXRpb24oRnJhbWUqIHRhcmdldEZyYW1lLCBJTUVDSEFSUE9TSVRJT04qIGMK
ICAgICBpZiAoY2hhclBvcy0+ZHdDaGFyUG9zICYmICF0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuaGFz
Q29tcG9zaXRpb24oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSW50UmVjdCBjYXJldDsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsK
ICAgICBpZiAodGFyZ2V0RnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAgICAgICAg
IHJhbmdlID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICBl
bHNlCi0gICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHRhcmdldEZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgcmFuZ2UgPSB0
YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KHJhbmdlLT5zdGFydENv
bnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSArIGNoYXJQb3MtPmR3Q2hhclBvcyk7Ci0g
ICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHJh
bmdlLmdldCgpKTsKKyAgICAgICAgcmFuZ2UtPnN0YXJ0Lm9mZnNldCArPSBjaGFyUG9zLT5kd0No
YXJQb3M7CisgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZv
clJhbmdlKCpyYW5nZSk7CiAgICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CiAgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CkBAIC03NzY0LDE4ICs3NzY0LDE1IEBAIEhSRVNVTFQgV2ViVmlldzo6Y29tcG9zaXRp
b25SYW5nZUZvclRlc3RpbmcoX091dF8gVUlOVCogc3RhcnRQb3NpdGlvbiwgX091dF8gVUlOCiAg
ICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7
CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25S
YW5nZSgpOwotCisgICAgYXV0byByYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgKnN0
YXJ0UG9zaXRpb24gPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAqbGVuZ3RoID0gcmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCkgKyByYW5nZS0+ZW5kT2Zmc2V0KCk7Ci0KKyAgICAqc3RhcnRQb3NpdGlv
biA9IHJhbmdlLT5zdGFydC5vZmZzZXQ7CisgICAgKmxlbmd0aCA9IHJhbmdlLT5zdGFydC5vZmZz
ZXQgKyByYW5nZS0+ZW5kLm9mZnNldDsKICAgICByZXR1cm4gU19PSzsKIH0KIAotCiBIUkVTVUxU
IFdlYlZpZXc6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlRm9yVGVzdGluZyhVSU5UIGxvY2F0
aW9uLCBVSU5UIGxlbmd0aCwgX091dF8gUkVDVCogcmVzdWx0UmVjdCkKIHsKICAgICBpZiAoIXJl
c3VsdFJlY3QpCkBAIC03NzkwLDEyICs3Nzg3LDggQEAgSFJFU1VMVCBXZWJWaWV3OjpmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZUZvclRlc3RpbmcoVUlOVCBsb2NhdGlvbiwgVUlOVCBsZW5ndGgK
ICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2UgPSBDaGFy
YWN0ZXJSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
Y3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoKmVsZW1lbnQpLCBjaGFyYWN0ZXJSYW5nZSkpOwotCi0gICAgaWYgKCFyYW5n
ZSkKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLQotICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLmVk
aXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHJhbmdlID0g
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZWxl
bWVudCksIGNoYXJhY3RlclJhbmdlKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZSk7CiAgICAgSW50UmVjdCByZXN1bHRJbnRSZWN0ID0g
ZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOwogCiAgICAgcmVzdWx0SW50UmVj
dC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKQEAgLTc4MjEsNyArNzgxNCw3IEBAIEhSRVNV
TFQgV2ViVmlldzo6c2VsZWN0ZWRSYW5nZUZvclRlc3RpbmcoX091dF8gVUlOVCogbG9jYXRpb24s
IF9PdXRfIFVJTlQqIGxlbmd0CiAKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJh
bWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybiBFX0ZBSUw7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCBkZjZiMTU0NDBlMDc3ODFjZDhlODJkYmFlMjkwNmMyNzZmYjI3NTY3Li40Y2Qy
NjkzNDc0YjMwMDVlN2JhMTQ5NjEwNDFhYmUzZjAzMzRkNTJkIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDct
MTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBsaXZl
IHJhbmdlcyBmcm9tIEVkaXRvci5oIGFuZCBFZGl0b3JDbGllbnQuaAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjYxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlZCBkdXBsaWNh
dGUgaW5zdGFsbCBvZiBBaGVtLnR0ZiB0aGF0IHdhcyBsZWFkaW5nIG5ldyB2ZXJzaW9ucworICAg
ICAgICBvZiBYY29kZSB0byBmYWlsIHdoZW4gdHJ5aW5nIHRvIGJ1aWxkIHRoaXMuCisKIDIwMjAt
MDctMTkgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAKICAgICAg
ICAgY3BwLnB5OjM2ODg6IEZ1dHVyZVdhcm5pbmc6IFBvc3NpYmxlIG5lc3RlZCBzZXQgYXQgcG9z
aXRpb24gMTAxCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkwYjE0MDU5NTBlMjhmMzZiMDUz
Y2QwNGRjZDU1ODdlNDJlNTEyZmYuLmIwNDNiNzFmNmZhOGEwMmFkZDcwN2Y1MDc3Njg0MTE3Yjkz
YTBkOWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQwLDcgKzExNDAsNiBAQAogCQlG
NENENzRDOTIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENENzRDODIwRkRCNDk2
MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gKi87IH07CiAJCUY0Q0YzMjgwMjM2
NjU1MjIwMEQzQUQwNyAvKiBFbnRlcktleUhpbnRUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0YzMjdGMjM2NjU1MjIwMEQzQUQwNyAvKiBF
bnRlcktleUhpbnRUZXN0cy5tbSAqLzsgfTsKIAkJRjRDRkNEREEyNDlGQzlFNDAwNTI3NDgyIC8q
IFNwYWNlT25seS5vdGYgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjRDRkNERDgyNDlGQzlEOTAwNTI3NDgyIC8qIFNwYWNlT25seS5vdGYgKi87
IH07Ci0JCUY0Q0ZDRERCMjQ5RkM5RTkwMDUyNzQ4MiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENGQ0REOTI0OUZDOUQ5
MDA1Mjc0ODIgLyogQWhlbS50dGYgKi87IH07CiAJCUY0RDI5ODZFMjBGRUU3MzcwMDkyRDYzNiAv
KiBSdW5TY3JpcHRBZnRlckRvY3VtZW50TG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDI5ODZEMjBGRUU3MzcwMDkyRDYzNiAvKiBSdW5TY3Jp
cHRBZnRlckRvY3VtZW50TG9hZC5tbSAqLzsgfTsKIAkJRjRENEYzQjYxRTRFMkJDQjAwQkIyNzY3
IC8qIERyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENEYzQjQxRTRFMkJDQjAwQkIyNzY3IC8qIERyYWdBbmRE
cm9wU2ltdWxhdG9ySU9TLm1tICovOyB9OwogCQlGNEQ0RjNCOTFFNEUzNkU0MDBCQjI3NjcgLyog
RHJhZ0FuZERyb3BUZXN0c0lPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEcmFnQW5kRHJvcFRlc3Rz
SU9TLm1tICovOyB9OwpAQCAtMTI0NSw3ICsxMjQ0LDYgQEAKIAkJCQk1NUE4MTgwMDIxODEwMjIx
MDAwNEEzOUEgLyogNDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
Mzc5MDI4QjkxNEZBQzI0QzAwN0U2QjQzIC8qIGFjY2VwdHNGaXJzdE1vdXNlLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJNzI1QzNFRjMyMjA1OEE1QjAwN0MzNkZDIC8qIEFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCi0JCQkJRjRD
RkNEREIyNDlGQzlFOTAwNTI3NDgyIC8qIEFoZW0udHRmIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCTFDMkI4MTg3MUM4OTI1QTAwMEE1NTI5RiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNl
cyAqLywKIAkJCQkxQTYzNDc5RjE4M0Q3MkE0MDA1QjE3MDcgLyogYWxsLWNvbnRlbnQtaW4tb25l
LWlmcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUMyNUNDQTBEMUU1MTQxODQw
MDI2Q0I4QSAvKiBBbGxBaGVtLnN2ZyBpbiBDb3B5IFJlc291cmNlcyAqLywK
</data>
<flag name="review"
          id="420072"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>