<?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>226497</bug_id>
          
          <creation_ts>2021-06-01 05:48:03 -0700</creation_ts>
          <short_desc>REGRESSION(r277744): Broke build on s390x mainframes</short_desc>
          <delta_ts>2021-06-03 06:11:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225839</see_also>
          <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="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765587</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-01 05:48:03 -0700</bug_when>
    <thetext>r277744 broke the build on s390x mainframes (yes, these run WebKit). The failure occurs when linking JSC&apos;s LLIntSettingsExtractor:

Source/WTF/wtf/CMakeFiles/WTF.dir/./text/StringBuilderJSON.cpp.o:StringBuilderJSON.cpp:function WTF::StringBuilder::appendQuotedJSONString(WTF::String const&amp;): error: undefined reference to &apos;void WTF::StringBuilder::allocateBuffer&lt;char16_t, unsigned char&gt;(unsigned char const*, unsigned int)&apos;
collect2: error: ld returned 1 exit status

I wound up asking for help and was told to suspect template instantiation. Indeed, we have templates defined in the source file, but of course templates belong in the header file. Apparently s390x&apos;s GCC is more or less aggressive about inlining. Fortunately it&apos;s easy to fix by just moving the template function definitions to the header. (Note there&apos;s also another template function defined in StringBuilderJSON.cpp, but this one is OK because it&apos;s private to that file, only used in that one place.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765588</commentid>
    <comment_count>1</comment_count>
      <attachid>430259</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-01 05:49:49 -0700</bug_when>
    <thetext>Created attachment 430259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765683</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-01 11:07:21 -0700</bug_when>
    <thetext>Is this a substandard compiler that doesn’t correctly implement modern C++, or is it a mistake in our code?

Can we work around this with explicit instantiatiation rather than moving everything to the header?

I’m not thrilled with putting so much more code in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765687</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-01 11:24:32 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Is this a substandard compiler that doesn’t correctly implement modern C++,
&gt; or is it a mistake in our code?

Well it&apos;s GCC 11-point-something. I think it&apos;s a mistake in our code. I was taught that templates have to be defined in headers, and I&apos;m actually more surprised that other platforms did not fail than that GCC did fail.

The tip I received was:

&quot;&quot;&quot;
if C++ templates are in play, then it&apos;s likely an incorrect C++ code that a different optimization on s390x discovers

if you add &quot;--param=inline-min-speedup=2 --param=max-inline-insns-auto=80&quot; to compiler flags you might be able to reproduce the issue on other arches as well
&quot;&quot;&quot;

Haven&apos;t tried it though.

&gt; Can we work around this with explicit instantiatiation rather than moving
&gt; everything to the header?
&gt; 
&gt; I’m not thrilled with putting so much more code in the header.

Yes, it should be possible to do with explicit instantiation. See https://gcc.gnu.org/onlinedocs/gcc/Template-Instantiation.html:

&quot;&quot;&quot;
Duplicate instances of a template can be avoided by defining an explicit instantiation in one object file, and preventing the compiler from doing implicit instantiations in any other object files by using an explicit instantiation declaration, using the extern template syntax:

extern template int max (int, int);

This syntax is defined in the C++ 2011 standard, but has been supported by G++ and other compilers since well before 2011.

Explicit instantiations can be used for the largest or most frequently duplicated instances, without having to know exactly which other instances are used in the rest of the program. You can scatter the explicit instantiations throughout your program, perhaps putting them in the translation units where the instances are used or the translation units that define the templates themselves; you can put all of the explicit instantiations you need into one big file; or you can create small files like

#include &quot;Foo.h&quot;
#include &quot;Foo.cc&quot;

template class Foo&lt;int&gt;;
template ostream&amp; operator &lt;&lt;
                (ostream&amp;, const Foo&lt;int&gt;&amp;);

for each of the instances you need, and create a template instantiation library from those.

This is the simplest option, but also offers flexibility and fine-grained control when necessary. It is also the most portable alternative and programs using this approach will work with most modern compilers.
&quot;&quot;&quot;

I can try this and figure out how complex it turns out to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765720</commentid>
    <comment_count>4</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-06-01 13:10:09 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Is this a substandard compiler that doesn’t correctly implement modern C++,
&gt; or is it a mistake in our code?
&gt; 
&gt; Can we work around this with explicit instantiatiation rather than moving
&gt; everything to the header?
&gt; 
&gt; I’m not thrilled with putting so much more code in the header.

A couple of times in the past while fixing non-unified builds I&apos;ve seen
cases in which templates in .cpp files would work fine because by chance
the .cpp file where they were defined and where they were used both ended
up in the same unified translation unit. I haven&apos;t checked if this was
the case here, but I can confirm this also fixed the build for me with
with GCC 11.1.0 on x86_64 😶️</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765726</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-01 13:22:15 -0700</bug_when>
    <thetext>This class is StringBuilder, used across multiple frameworks. Seems unlikely that the issue has to do with unified translation units. Pretty sure these are used outside WTF, and therefore definitely outside the translation unit.

Ideally I’d like to know more about exactly what’s wrong before we make the change. I understand that &quot;putting it in the header makes the bug go away&quot; but I’d like to go a little deeper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765833</commentid>
    <comment_count>6</comment_count>
      <attachid>430259</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-01 17:50:26 -0700</bug_when>
    <thetext>Comment on attachment 430259
Patch

The problem is the template &apos;void WTF::StringBuilder::allocateBuffer&lt;char16_t, unsigned char&gt;(unsigned char const*, unsigned int)&apos; is not instantiated in the object file StringBuilderJSON.cpp.o. If using templates in source files rather than header files, we have to explicitly instantiate the templates in the desired object files, which we have not done here. Otherwise, toolchain decides for itself which object file the template will be instantiated in, and either we get lucky and it builds, or not. When defining templates in headers -- that&apos;s normal practice, it&apos;s what we do for huge WTF headers like Vector.h and HashTable.h, for example -- then this problem goes away because the templates get instantiated separately in each object file. That probably bloats binary size, but it works.

I&apos;ve actually never used -- or even heard of -- explicit template instantiation before. I&apos;ve just always defined templates in header files, following the general rule &quot;never define templates in source files&quot; that most C++ programmers learn. At least, that is what we were taught at university back before C++11 was finished. I suspect it&apos;s going to be ugly, but I need to investigate more and see for myself. I&apos;ll try to get to this soon, hopefully tomorrow (because the longer we go failing s390x CI, the more likely some big endian regression will sneak in, and we won&apos;t know which day it happened).

(In reply to Adrian Perez from comment #4)
&gt; A couple of times in the past while fixing non-unified builds I&apos;ve seen
&gt; cases in which templates in .cpp files would work fine because by chance
&gt; the .cpp file where they were defined and where they were used both ended
&gt; up in the same unified translation unit. I haven&apos;t checked if this was
&gt; the case here, but I can confirm this also fixed the build for me with
&gt; with GCC 11.1.0 on x86_64 😶️

Weird, it works fine for us on x86_64. *shrug* Anyway, I guess that&apos;s sufficient proof that it&apos;s not some weird s390x bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765849</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-01 18:50:43 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; The problem is the template &apos;void
&gt; WTF::StringBuilder::allocateBuffer&lt;char16_t, unsigned char&gt;(unsigned char
&gt; const*, unsigned int)&apos; is not instantiated in the object file
&gt; StringBuilderJSON.cpp.o. If using templates in source files rather than
&gt; header files, we have to explicitly instantiate the templates in the desired
&gt; object files, which we have not done here.

OK, I think I figured it out.

My guess is that this is caused by the call to allocateBuffer in StringBuilderJSON.cpp. I hate to move these templates into the header just so it can be shared by another part of the StringBuilder implementation. All the callers are inside StringBuilder itself, it’s just that is divided across two source files.

Here are some different fixes:

1) Move these function template definitions into the StringBuilder.h.

2) Explicitly instantiate this function template in StringBuilder.cpp.

3) Merge StringBuilderJSON.cpp into StringBuilder.cpp.

4) Move these function template definitions into a StringBuilderInternals.h header file, included only by StringBuilder.cpp and StringBuilderJSON.cpp.

I prefer solutions other than (1). I like (2), (3), and (4).

I am probably not in as much of a rush as you are to get compiling on s390x again, and I am sorry for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765850</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-01 18:51:33 -0700</bug_when>
    <thetext>Hah, I just noticed you already mention StringBuilderJSON. I was so proud of figuring it out, but I just didn’t read carefully enough!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765852</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-01 19:07:46 -0700</bug_when>
    <thetext>I wrote a very long comment attempting to explain explicit template instantiation, quoting from Bjarne Stroustrup&apos;s &quot;The C++ Programming Language, Fourth Edition&quot; but I&apos;m just going to throw it out because yes, it&apos;s caused by the call to allocateBuffer in StringBuilderJSON.cpp, and yes, all four of your proposed solutions would fix this.

Of your proposals, (1) (which I implemented) and (4) are the most robust solutions. But yes, (1) is slowest to compile. (2) would fix this particular linker error, but other errors may occur in the future, so it&apos;s the most fragile solution. So (3) and (4) seem more preferable than (2) IMO. I think I prefer (4), simply because defining templates in headers is more natural to me, so this is probably what I&apos;ll implement tomorrow.

By the way, I *will* quote this one part of &quot;The C++ Programming Language&quot; section 26.2.2 &quot;Manual Control of Instantiation&quot; where Bjarne explains why we might not want to do (1):

&quot;The link-time and recompilation efficiency impact of instantiation requests can be significant. I have seen examples in which bundling most template instantiations into a single compilation unit cut the compile time from a number of hours to the equivalent number of minutes.&quot;

Which echos what you&apos;ve said already. (Sadly, that would be impractical to do across WebKit. I assume that C++ modules will be the eventual practical solution for our compilation time woes....)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765855</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-01 19:19:41 -0700</bug_when>
    <thetext>The solutions other than (1) are also better for someone working on StringBuilder who doesn’t want to rebuild the world after each change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766159</commentid>
    <comment_count>11</comment_count>
      <attachid>430405</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-02 14:24:34 -0700</bug_when>
    <thetext>Created attachment 430405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766208</commentid>
    <comment_count>12</comment_count>
      <attachid>430405</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-02 16:32:42 -0700</bug_when>
    <thetext>Comment on attachment 430405
Patch

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

&gt; Source/WTF/wtf/text/StringBuilder.cpp:31
&gt; +#include &lt;wtf/text/StringBuilderInternals.h&gt;
&gt;  
&gt;  #include &lt;wtf/dtoa.h&gt;

Should probably be grouped in with the other includes below, not the special &quot;class header&quot; paragraph.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:16
&gt; +#include &lt;wtf/text/StringBuilderInternals.h&gt;
&gt;  
&gt;  #include &lt;wtf/text/WTFString.h&gt;

Should probably be grouped in with the other includes below, not the special &quot;class header&quot; paragraph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766350</commentid>
    <comment_count>13</comment_count>
      <attachid>430461</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-03 05:20:23 -0700</bug_when>
    <thetext>Created attachment 430461
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766365</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-03 06:10:44 -0700</bug_when>
    <thetext>Committed r278404 (238429@main): &lt;https://commits.webkit.org/238429@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430461.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766366</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-03 06:11:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/78811017&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430259</attachid>
            <date>2021-06-01 05:49:49 -0700</date>
            <delta_ts>2021-06-02 14:24:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226497-20210601074948.patch</filename>
            <type>text/plain</type>
            <size>9808</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRjNGQ4ZDRlZTBmYWQzNjU5Mjc3YTZj
YzFmYjI4NGMzMjI1NTIxNzUuLjI5M2Y5ZjQ2NzVmNmJjMzZhMGM0YzQzOTE4ZjYyOTBkZDdkOGZi
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjEtMDYtMDEgIE1pY2hhZWwgQ2F0YW56YXJvICA8
bWNhdGFuemFyb0Bnbm9tZS5vcmc+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjc3NzQ0KTogQnJv
a2UgYnVpbGQgb24gczM5MHggbWFpbmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSSB3b3VuZCB1cCBhc2tpbmcgZm9yIGhlbHAgYW5kIHdhcyB0
b2xkIHRvIHN1c3BlY3QgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4gSW5kZWVkLCB3ZSBoYXZlCisg
ICAgICAgIHRlbXBsYXRlcyBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmlsZSwgYnV0IG9mIGNvdXJz
ZSB0ZW1wbGF0ZXMgYmVsb25nIGluIHRoZSBoZWFkZXIgZmlsZS4KKyAgICAgICAgQXBwYXJlbnRs
eSBzMzkweCdzIEdDQyBpcyBlaXRoZXIgbW9yZSBvciBsZXNzIGFnZ3Jlc3NpdmUgYWJvdXQgaW5s
aW5pbmcuIEZvcnR1bmF0ZWx5LCBpdCdzCisgICAgICAgIGVhc3kgdG8gZml4IGJ5IGp1c3QgbW92
aW5nIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byB0aGUgaGVhZGVyLiAoTm90
ZSB0aGVyZSdzCisgICAgICAgIGFsc28gYW5vdGhlciB0ZW1wbGF0ZSBmdW5jdGlvbiBkZWZpbmVk
IGluIFN0cmluZ0J1aWxkZXJKU09OLmNwcCwgYnV0IHRoaXMgb25lIGlzIE9LIGJlY2F1c2UKKyAg
ICAgICAgaXQncyBwcml2YXRlIHRvIHRoYXQgZmlsZSwgb25seSB1c2VkIGluIHRoYXQgb25lIHBs
YWNlLikKKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpleHBhbmRlZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6ZXhw
YW5kZWRDYXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFs
bG9jYXRlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0
ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVp
bGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRl
cjo6YWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWFsbG9j
YXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9y
QXBwZW5kaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9y
QXBwZW5kaW5nU2xvd0Nhc2UpOgorCiAyMDIxLTA1LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBVbmNoZWNrZWRDb25kaXRpb24gLyBVbmNoZWNrZWRM
b2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCAyMzNhZGY3ODlhNjdm
MjY0OTZiOTdmMjBhNTY4MjFkODk2YzM1YzUxLi41MjhmOWE3ZTU2ZmRlZWMzMGMzY2U3ZGViNWNm
ODU4OWJhNjE1NDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bWF4Q2FwYWNpdHkgPSBTdHJpbmc6Ok1heExlbmd0aDsKIAotc3RhdGljIHVuc2lnbmVkIGV4cGFu
ZGVkQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHksIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkp
Cit1bnNpZ25lZCBTdHJpbmdCdWlsZGVyOjpleHBhbmRlZENhcGFjaXR5KHVuc2lnbmVkIGNhcGFj
aXR5LCB1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQogewogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7CiAgICAgcmV0dXJuIHN0ZDo6bWF4KHJlcXVp
cmVkQ2FwYWNpdHksIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgc3RkOjptaW4oY2FwYWNpdHkg
KiAyLCBtYXhDYXBhY2l0eSkpKTsKQEAgLTEwMiw0MyArMTAyLDYgQEAgdm9pZCBTdHJpbmdCdWls
ZGVyOjpzaHJpbmsodW5zaWduZWQgbmV3TGVuZ3RoKQogICAgIG1fc3RyaW5nID0gU3RyaW5nSW1w
bDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1fc3RyaW5nLmltcGwoKSwgMCwgbmV3TGVu
Z3RoKTsKIH0KIAotLy8gQWxsb2NhdGUgYSBuZXcgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRD
aGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVpdGhlciBtX3N0cmluZyBvciBtX2J1ZmZl
ci4KLXRlbXBsYXRlPHR5cGVuYW1lIEFsbG9jYXRpb25DaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBD
dXJyZW50Q2hhcmFjdGVyVHlwZT4gdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihj
b25zdCBDdXJyZW50Q2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJl
cXVpcmVkQ2FwYWNpdHkpCi17Ci0gICAgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUqIGJ1ZmZlckNo
YXJhY3RlcnM7Ci0gICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKHJlcXVpcmVkQ2FwYWNpdHksIGJ1ZmZlckNoYXJhY3RlcnMpOwotICAgIGlmIChVTkxJ
S0VMWSghYnVmZmVyKSkgewotICAgICAgICBkaWRPdmVyZmxvdygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIFN0cmluZ0ltcGw6
OmNvcHlDaGFyYWN0ZXJzKGJ1ZmZlckNoYXJhY3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xl
bmd0aCk7Ci0KLSAgICBtX2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKTsKLSAgICBtX3N0cmluZyA9
IHsgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBTdHJpbmdC
dWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpCi17Ci0g
ICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1aWxk
ZXIpLCByZWFsbG9jYXRlIGl0LgotICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICBtX3N0cmlu
ZyA9IHsgfTsgLy8gQ2xlYXIgdGhlIHN0cmluZyB0byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBt
X2J1ZmZlciBpZiBhbnkgYmVmb3JlIGNoZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbV9i
dWZmZXIuCi0gICAgICAgIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAg
IENoYXJhY3RlclR5cGUqIGJ1ZmZlckNoYXJhY3RlcnM7Ci0gICAgICAgICAgICBhdXRvIGJ1ZmZl
ciA9IFN0cmluZ0ltcGw6OnRyeVJlYWxsb2NhdGUobV9idWZmZXIucmVsZWFzZU5vbk51bGwoKSwg
cmVxdWlyZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoIWJ1ZmZlcikpIHsKLSAgICAgICAgICAgICAgICBkaWRPdmVyZmxvdygpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fYnVmZmVyID0g
V1RGTW92ZSgqYnVmZmVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGFsbG9jYXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGNoYXJhY3RlcnM8Q2hhcmFjdGVy
VHlwZT4oKSwgcmVxdWlyZWRDYXBhY2l0eSk7Ci19Ci0KIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVh
bGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQogewogICAgIGlmIChpczhC
aXQoKSkKQEAgLTE2OCwzMSArMTMxLDYgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2Fw
YWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpCiAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSB8
fCAhbmV3Q2FwYWNpdHkgfHwgbV9idWZmZXItPmxlbmd0aCgpID49IG5ld0NhcGFjaXR5KTsKIH0K
IAotLy8gTWFrZSAnYWRkaXRpb25hbExlbmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFp
bGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoIHRvIHVzZSwKLS8v
IHRoYXQgY2FwYWNpdHkgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRl
ZCBzdG9yYWdlIHNvIHRoZSBjYWxsZXIgY2FuIHdyaXRlIGNoYXJhY3RlcnMgdGhlcmUuCi0vLyBS
ZXR1cm5zIG51bGxwdHIgaWYgYWxsb2NhdGlvbiBmYWlscywgbGVuZ3RoIG92ZXJmbG93cywgb3Ig
aWYgdG90YWwgY2FwYWNpdHkgaXMgMCBzbyBubyBidWZmZXIgaXMgbmVlZGVkLgotLy8gVGhlIGNh
bGxlciBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjaGVja2luZyB0aGF0IENoYXJhY3RlclR5
cGUgaXMgdGhlIHR5cGUgb2YgdGhlIGV4aXN0aW5nIGJ1ZmZlci4KLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsKLSAgICBpZiAobV9idWZm
ZXIgJiYgcmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKSB7Ci0gICAgICAgIG1f
c3RyaW5nID0geyB9OwotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxDaGFyYWN0ZXJUeXBlKj4o
bV9idWZmZXItPmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSkgKyBzdGQ6OmV4Y2hhbmdlKG1f
bGVuZ3RoLCByZXF1aXJlZExlbmd0aCk7Ci0gICAgfQotICAgIHJldHVybiBleHRlbmRCdWZmZXJG
b3JBcHBlbmRpbmdTbG93Q2FzZTxDaGFyYWN0ZXJUeXBlPihyZXF1aXJlZExlbmd0aCk7Ci19Ci0K
LS8vIFNoYXJlZCBieSB0aGUgb3RoZXIgZXh0ZW5kQnVmZmVyIGZ1bmN0aW9ucy4KLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4
dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQot
ewotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBpZiAoIXJlcXVpcmVkTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZWFsbG9jYXRlQnVmZmVyKGV4cGFuZGVk
Q2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKLSAgICBpZiAoVU5MSUtFTFko
aGFzT3ZlcmZsb3dlZCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8Q2hhcmFjdGVyVHlwZSo+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5
cGU+KCkpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwgcmVxdWlyZWRMZW5ndGgpOwotfQotCiAv
LyBBbHRlcmF0aXZlIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyB0aGF0IGNhbiBiZSBjYWxsZWQg
ZnJvbSB0aGUgaGVhZGVyIHdpdGhvdXQgaW5saW5pbmcuCiBMQ2hhciogU3RyaW5nQnVpbGRlcjo6
ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nTENoYXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDY2NjhhYzYyNzMwZTA4Njk2NTBi
Mjk4MjBmODM2ZGY3NzFhODQxZWMuLmFjMDVlMzBjOWRkMWJhYTUxNjAxZjNlYzNlZDhkZDBlZDY4
M2U0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBAIC0xMDMsNiArMTAzLDgg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzQWxsQVNDSUkoKSBjb25z
dDsKIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRDYXBhY2l0eSh1bnNp
Z25lZCBjYXBhY2l0eSwgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSk7CisKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBBbGxvY2F0aW9uQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgQ3VycmVudENoYXJh
Y3RlclR5cGU+IHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgQ3VycmVudENoYXJhY3RlclR5cGUq
IGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWdu
ZWQgcmVxdWlyZWRDYXBhY2l0eSk7CiAgICAgdm9pZCByZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVk
IHJlcXVpcmVkQ2FwYWNpdHkpOwpAQCAtMzI5LDYgKzMzMSw2OCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIs
IGNvbnN0CiAgICAgcmV0dXJuIGJ1aWxkZXIgPT0gU3RyaW5nVmlldyB7IGJ1ZmZlciwgbGVuZ3Ro
IH07CiB9CiAKKy8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hh
cmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJpbmcgb3IgbV9idWZmZXIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0aW9uQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgQ3Vy
cmVudENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29u
c3QgQ3VycmVudENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1
aXJlZENhcGFjaXR5KQoreworICAgIEFsbG9jYXRpb25DaGFyYWN0ZXJUeXBlKiBidWZmZXJDaGFy
YWN0ZXJzOworICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChyZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICBpZiAoVU5MSUtF
TFkoIWJ1ZmZlcikpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICBTdHJpbmdJbXBsOjpj
b3B5Q2hhcmFjdGVycyhidWZmZXJDaGFyYWN0ZXJzLCBjdXJyZW50Q2hhcmFjdGVycywgbV9sZW5n
dGgpOworCisgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7CisgICAgbV9zdHJpbmcgPSB7
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQoreworICAg
IC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVy
KSwgcmVhbGxvY2F0ZSBpdC4KKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAgbV9zdHJpbmcg
PSB7IH07IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gbV9i
dWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG1fYnVm
ZmVyLgorICAgICAgICBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7CisgICAgICAgICAgICBD
aGFyYWN0ZXJUeXBlKiBidWZmZXJDaGFyYWN0ZXJzOworICAgICAgICAgICAgYXV0byBidWZmZXIg
PSBTdHJpbmdJbXBsOjp0cnlSZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHJl
cXVpcmVkQ2FwYWNpdHksIGJ1ZmZlckNoYXJhY3RlcnMpOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFidWZmZXIpKSB7CisgICAgICAgICAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2J1ZmZlciA9IFdU
Rk1vdmUoKmJ1ZmZlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBhbGxvY2F0ZUJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPihjaGFyYWN0ZXJzPENoYXJhY3RlclR5
cGU+KCksIHJlcXVpcmVkQ2FwYWNpdHkpOworfQorCisvLyBNYWtlICdhZGRpdGlvbmFsTGVuZ3Ro
JyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1f
c3RyaW5nICYgbV9sZW5ndGggdG8gdXNlLAorLy8gdGhhdCBjYXBhY2l0eSBhbmQgcmV0dXJuIGEg
cG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0b3JhZ2Ugc28gdGhlIGNhbGxlciBjYW4g
d3JpdGUgY2hhcmFjdGVycyB0aGVyZS4KKy8vIFJldHVybnMgbnVsbHB0ciBpZiBhbGxvY2F0aW9u
IGZhaWxzLCBsZW5ndGggb3ZlcmZsb3dzLCBvciBpZiB0b3RhbCBjYXBhY2l0eSBpcyAwIHNvIG5v
IGJ1ZmZlciBpcyBuZWVkZWQuCisvLyBUaGUgY2FsbGVyIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkg
Zm9yIGNoZWNraW5nIHRoYXQgQ2hhcmFjdGVyVHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUgZXhpc3Rp
bmcgYnVmZmVyLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlw
ZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVkIHJlcXVp
cmVkTGVuZ3RoKQoreworICAgIGlmIChtX2J1ZmZlciAmJiByZXF1aXJlZExlbmd0aCA8PSBtX2J1
ZmZlci0+bGVuZ3RoKCkpIHsKKyAgICAgICAgbV9zdHJpbmcgPSB7IH07CisgICAgICAgIHJldHVy
biBjb25zdF9jYXN0PENoYXJhY3RlclR5cGUqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0
ZXJUeXBlPigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKKyAg
ICB9CisgICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlPENoYXJhY3Rl
clR5cGU+KHJlcXVpcmVkTGVuZ3RoKTsKK30KKworLy8gU2hhcmVkIGJ5IHRoZSBvdGhlciBleHRl
bmRCdWZmZXIgZnVuY3Rpb25zLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hh
cmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nh
c2UodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKCFoYXNPdmVyZmxvd2Vk
KCkpOworICAgIGlmICghcmVxdWlyZWRMZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJlYWxsb2NhdGVCdWZmZXIoZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJl
ZExlbmd0aCkpOworICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxDaGFyYWN0ZXJUeXBlKj4obV9i
dWZmZXItPmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSkgKyBzdGQ6OmV4Y2hhbmdlKG1fbGVu
Z3RoLCByZXF1aXJlZExlbmd0aCk7Cit9CisKIHRlbXBsYXRlPD4gc3RydWN0IEludGVnZXJUb1N0
cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmdCdWlsZGVyPiB7CiAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHZvaWQ7CiAgICAgdXNpbmcgQWRkaXRpb25hbEFyZ3VtZW50VHlwZSA9IFN0cmluZ0J1aWxk
ZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430405</attachid>
            <date>2021-06-02 14:24:34 -0700</date>
            <delta_ts>2021-06-03 05:20:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226497-20210602162433.patch</filename>
            <type>text/plain</type>
            <size>14630</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNiMGY2YzQ5Yzk5MDA5MWYzYmE2ZDQ4
MDcyMWUyMzBjNGQ5ZTllM2UuLmFkNDdiODkxY2NmNWIxZDdlYjNhMzJlZTQxYTVjOWQ1NDYxNDNi
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjEtMDYtMDIgIE1pY2hhZWwgQ2F0YW56YXJvICA8
bWNhdGFuemFyb0Bnbm9tZS5vcmc+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjc3NzQ0KTogQnJv
a2UgYnVpbGQgb24gczM5MHggbWFpbmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgd2UgaGF2ZSBhIHRlbXBsYXRlIGRl
ZmluZWQgaW4gYSBDKysgc291cmNlIGZpbGUsIHVzZWQgYnkgbXVsdGlwbGUgc291cmNlCisgICAg
ICAgIGZpbGVzLiBUaGlzIGlzIG5vdCB2YWxpZCBDKyssIHNvIGxldCdzIHNwbGl0IHRoZSB0ZW1w
bGF0ZXMgZGVmaW5lZCBpbiBTdHJpbmdCdWlsZGVyLmNwcCBvdXQKKyAgICAgICAgaW50byBhIG5l
dyBTdHJpbmdCdWlsZGVySW50ZXJuYWxzLmggdGhhdCB3ZSBjYW4gI2luY2x1ZGUgaW4gYm90aCBT
dHJpbmdCdWlsZGVyLmNwcCBhbmQKKyAgICAgICAgU3RyaW5nQnVpbGRlckpTT04uY3BwLgorCisg
ICAgICAgIElkZWFsbHkgd2Ugd291bGQgbW92ZSB0aGUgdGVtcGxhdGUgZGVmaW5lZCBpbiBTdHJp
bmdCdWlsZGVySlNPTi5jcHAgYXMgd2VsbCwgYW5kIHRoZW4KKyAgICAgICAgZWxpbWluYXRlIFN0
cmluZ0J1aWxkZXJKU09OLmNwcCBzaW5jZSB0aGVyZSB3b3VsZCBvbmx5IGJlIG9uZSBmdW5jdGlv
biBsZWZ0LiBCdXQgdGhhdCBmaWxlCisgICAgICAgIGhhcyBhbiBNUEwgbGljZW5zZS4gSXQncyBl
YXNpZXIgdG8gbGVhdmUgaXQgYmUgdG8ga2VlcCB0aGUgbGljZW5zZSBzaXR1YXRpb24gc2ltcGxl
ci4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXhwYW5kZWRDYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6OmV4cGFuZGVkQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6CisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nQnVpbGRlckludGVybmFscy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjpyZWFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXJKU09OLmNwcDoKKwogMjAyMS0wNi0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIERyb3AgQ2hlY2tlZDo6c2FmZUdldCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5ODQzYjk4ZjFlNDc3NjU3YjVhOTA4M2MyMGY2
ZDg2ZmQ5OWQ4YmQwLi5lYTk0MWEwNzBiYzk3MjNhOTRlYzgzYzFjM2NjNjQyNTVlMzdhMzQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY1NCw2ICs2NTQs
NyBAQAogCQlBOEE0NzMyMzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0J1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzMyNDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdCdWlsZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMjUxNTFBODI1QjAwNDEy
M0ZGIC8qIFN0cmluZ0J1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzMyNTE1
MUE4MjVCMDA0MTIzRUUgLyogU3RyaW5nQnVpbGRlckludGVybmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdCdWlsZGVySW50ZXJuYWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzI2MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25j
YXRlbmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdDb25jYXRl
bmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyNzE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpbmdIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzI4MTUxQTgy
NUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0cmluZ0ltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTQyNCw2ICsxNDI1LDcgQEAKIAkJCQlBOEE0NzMyMzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
QnVmZmVyLmggKi8sCiAJCQkJQThBNDczMjQxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1aWxk
ZXIuY3BwICovLAogCQkJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVy
LmggKi8sCisJCQkJQThBNDczMjUxNTFBODI1QjAwNDEyM0VFIC8qIFN0cmluZ0J1aWxkZXJJbnRl
cm5hbHMuaCAqLywKIAkJCQlFMzhENkUyNjFGNTUyMkUzMDBBNzVDQzQgLyogU3RyaW5nQnVpbGRl
ckpTT04uY3BwICovLAogCQkJCTQzMEI0Nzg3MUFBQUFDMUEwMDEyMjNEQSAvKiBTdHJpbmdDb21t
b24uaCAqLywKIAkJCQlBOEE0NzMyNjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5h
dGUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggOGNmN2Y5OWIyNDE3YzFmMWE1ZWZiMGJj
Yzk3Nzk1M2RiZmM3ZWI0MC4uN2VhMTNkMDExNWU3Y2YxNjZjYTA3ZTlhMzQwOTQ2OTE2MDFiMjUz
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTM0Niw2ICszNDYsNyBAQCBzZXQoV1RGX1BVQkxJ
Q19IRUFERVJTCiAgICAgdGV4dC9PcmRpbmFsTnVtYmVyLmgKICAgICB0ZXh0L1N0cmluZ0J1ZmZl
ci5oCiAgICAgdGV4dC9TdHJpbmdCdWlsZGVyLmgKKyAgICB0ZXh0L1N0cmluZ0J1aWxkZXJJbnRl
cm5hbHMuaAogICAgIHRleHQvU3RyaW5nQ29tbW9uLmgKICAgICB0ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlLmgKICAgICB0ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCAyMzNhZGY3ODlhNjdmMjY0OTZiOTdmMjBhNTY4MjFk
ODk2YzM1YzUxLi4wYTU1MmQwNDM2YjA3NmI4MWEyZDU0NDQ2ODIwMGM4ZGFjOGQ0MjkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVySW50ZXJuYWxzLmg+CiAKICNpbmNsdWRlIDx3
dGYvZHRvYS5oPgogCkBAIC0zMyw3ICszNCw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heENhcGFjaXR5ID0gU3RyaW5nOjpNYXhMZW5ndGg7CiAKLXN0
YXRpYyB1bnNpZ25lZCBleHBhbmRlZENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5LCB1bnNpZ25l
ZCByZXF1aXJlZENhcGFjaXR5KQordW5zaWduZWQgU3RyaW5nQnVpbGRlcjo6ZXhwYW5kZWRDYXBh
Y2l0eSh1bnNpZ25lZCBjYXBhY2l0eSwgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbmltdW1DYXBhY2l0eSA9IDE2OwogICAgIHJl
dHVybiBzdGQ6Om1heChyZXF1aXJlZENhcGFjaXR5LCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHks
IHN0ZDo6bWluKGNhcGFjaXR5ICogMiwgbWF4Q2FwYWNpdHkpKSk7CkBAIC0xMDIsNDMgKzEwMyw2
IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rKHVuc2lnbmVkIG5ld0xlbmd0aCkKICAgICBt
X3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCptX3N0cmlu
Zy5pbXBsKCksIDAsIG5ld0xlbmd0aCk7CiB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciwg
Y29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIg
bV9zdHJpbmcgb3IgbV9idWZmZXIuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0aW9uQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hbWUgQ3VycmVudENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVpbGRl
cjo6YWxsb2NhdGVCdWZmZXIoY29uc3QgQ3VycmVudENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFy
YWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQotewotICAgIEFsbG9jYXRpb25DaGFy
YWN0ZXJUeXBlKiBidWZmZXJDaGFyYWN0ZXJzOwotICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1w
bDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0
ZXJzKTsKLSAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpIHsKLSAgICAgICAgZGlkT3ZlcmZsb3co
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgp
KTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhidWZmZXJDaGFyYWN0ZXJzLCBjdXJy
ZW50Q2hhcmFjdGVycywgbV9sZW5ndGgpOwotCi0gICAgbV9idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZl
cik7Ci0gICAgbV9zdHJpbmcgPSB7IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1
aXJlZENhcGFjaXR5KQotewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAo
YnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdC4KLSAgICBpZiAobV9idWZmZXIp
IHsKLSAgICAgICAgbV9zdHJpbmcgPSB7IH07IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3Zl
IHRoZSByZWZlcmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVm
ZXJlbmNlIGNvdW50IG9mIG1fYnVmZmVyLgotICAgICAgICBpZiAobV9idWZmZXItPmhhc09uZVJl
ZigpKSB7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXJDaGFyYWN0ZXJzOwotICAg
ICAgICAgICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlSZWFsbG9jYXRlKG1fYnVmZmVy
LnJlbGVhc2VOb25OdWxsKCksIHJlcXVpcmVkQ2FwYWNpdHksIGJ1ZmZlckNoYXJhY3RlcnMpOwot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgZGlk
T3ZlcmZsb3coKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUoKmJ1ZmZlcik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhbGxvY2F0ZUJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPihj
aGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCksIHJlcXVpcmVkQ2FwYWNpdHkpOwotfQotCiB2b2lk
IFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0
eSkKIHsKICAgICBpZiAoaXM4Qml0KCkpCkBAIC0xNjgsMzEgKzEzMiw2IEBAIHZvaWQgU3RyaW5n
QnVpbGRlcjo6cmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcGFjaXR5KQogICAgIEFTU0VS
VChoYXNPdmVyZmxvd2VkKCkgfHwgIW5ld0NhcGFjaXR5IHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+
PSBuZXdDYXBhY2l0eSk7CiB9CiAKLS8vIE1ha2UgJ2FkZGl0aW9uYWxMZW5ndGgnIGFkZGl0aW9u
YWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJpbmcgJiBt
X2xlbmd0aCB0byB1c2UsCi0vLyB0aGF0IGNhcGFjaXR5IGFuZCByZXR1cm4gYSBwb2ludGVyIHRv
IHRoZSBuZXdseSBhbGxvY2F0ZWQgc3RvcmFnZSBzbyB0aGUgY2FsbGVyIGNhbiB3cml0ZSBjaGFy
YWN0ZXJzIHRoZXJlLgotLy8gUmV0dXJucyBudWxscHRyIGlmIGFsbG9jYXRpb24gZmFpbHMsIGxl
bmd0aCBvdmVyZmxvd3MsIG9yIGlmIHRvdGFsIGNhcGFjaXR5IGlzIDAgc28gbm8gYnVmZmVyIGlz
IG5lZWRlZC4KLS8vIFRoZSBjYWxsZXIgaGFzIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2hlY2tp
bmcgdGhhdCBDaGFyYWN0ZXJUeXBlIGlzIHRoZSB0eXBlIG9mIHRoZSBleGlzdGluZyBidWZmZXIu
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdC
dWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgp
Ci17Ci0gICAgaWYgKG1fYnVmZmVyICYmIHJlcXVpcmVkTGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5n
dGgoKSkgewotICAgICAgICBtX3N0cmluZyA9IHsgfTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8Q2hhcmFjdGVyVHlwZSo+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkp
ICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwgcmVxdWlyZWRMZW5ndGgpOwotICAgIH0KLSAgICBy
ZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2U8Q2hhcmFjdGVyVHlwZT4ocmVx
dWlyZWRMZW5ndGgpOwotfQotCi0vLyBTaGFyZWQgYnkgdGhlIG90aGVyIGV4dGVuZEJ1ZmZlciBm
dW5jdGlvbnMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBl
KiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSh1bnNpZ25l
ZCByZXF1aXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAg
aWYgKCFyZXF1aXJlZExlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVhbGxv
Y2F0ZUJ1ZmZlcihleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7
Ci0gICAgaWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQoKSkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBjb25zdF9jYXN0PENoYXJhY3RlclR5cGUqPihtX2J1ZmZlci0+Y2hh
cmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVp
cmVkTGVuZ3RoKTsKLX0KLQogLy8gQWx0ZXJhdGl2ZSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcg
dGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIGhlYWRlciB3aXRob3V0IGlubGluaW5nLgogTENo
YXIqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA2
NjY4YWM2MjczMGUwODY5NjUwYjI5ODIwZjgzNmRmNzcxYTg0MWVjLi5jYWQwOTUzYjUyOGEyZDA5
ZTQyMmE4ODI5YjcyYzMyOGJkMTI2ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aApAQCAtMTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBpc0FsbEFTQ0lJKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGV4
cGFuZGVkQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHksIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNp
dHkpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUsIHR5
cGVuYW1lIEN1cnJlbnRDaGFyYWN0ZXJUeXBlPiB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IEN1
cnJlbnRDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRD
YXBhY2l0eSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCByZWFs
bG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOwogICAgIHZvaWQgcmVhbGxv
Y2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckludGVybmFscy5oIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdCdWlsZGVySW50ZXJuYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdkZGZhNzA5NjMwODEw
YzM3MThlOGQxNWM5ZWM2N2ZmMjJhNjM2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQnVpbGRlckludGVybmFscy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCisvLyBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3Rl
cnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1fYnVmZmVyLgordGVt
cGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEN1cnJlbnRD
aGFyYWN0ZXJUeXBlPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IEN1
cnJlbnRDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRD
YXBhY2l0eSkKK3sKKyAgICBBbGxvY2F0aW9uQ2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVy
czsKKyAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
cmVxdWlyZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgaWYgKFVOTElLRUxZKCFi
dWZmZXIpKSB7CisgICAgICAgIGRpZE92ZXJmbG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAgU3RyaW5nSW1wbDo6Y29weUNo
YXJhY3RlcnMoYnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMsIG1fbGVuZ3RoKTsK
KworICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOworICAgIG1fc3RyaW5nID0geyB9Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIFN0cmluZ0J1aWxkZXI6
OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKK3sKKyAgICAvLyBJ
ZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5nQnVpbGRlciksIHJl
YWxsb2NhdGUgaXQuCisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIG1fc3RyaW5nID0geyB9
OyAvLyBDbGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIG1fYnVmZmVy
IGlmIGFueSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBtX2J1ZmZlci4K
KyAgICAgICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgQ2hhcmFj
dGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gU3Ry
aW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJl
ZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSgh
YnVmZmVyKSkgeworICAgICAgICAgICAgICAgIGRpZE92ZXJmbG93KCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXIgPSBXVEZNb3Zl
KCpidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
YWxsb2NhdGVCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigp
LCByZXF1aXJlZENhcGFjaXR5KTsKK30KKworLy8gTWFrZSAnYWRkaXRpb25hbExlbmd0aCcgYWRk
aXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmlu
ZyAmIG1fbGVuZ3RoIHRvIHVzZSwKKy8vIHRoYXQgY2FwYWNpdHkgYW5kIHJldHVybiBhIHBvaW50
ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlIHNvIHRoZSBjYWxsZXIgY2FuIHdyaXRl
IGNoYXJhY3RlcnMgdGhlcmUuCisvLyBSZXR1cm5zIG51bGxwdHIgaWYgYWxsb2NhdGlvbiBmYWls
cywgbGVuZ3RoIG92ZXJmbG93cywgb3IgaWYgdG90YWwgY2FwYWNpdHkgaXMgMCBzbyBubyBidWZm
ZXIgaXMgbmVlZGVkLgorLy8gVGhlIGNhbGxlciBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBj
aGVja2luZyB0aGF0IENoYXJhY3RlclR5cGUgaXMgdGhlIHR5cGUgb2YgdGhlIGV4aXN0aW5nIGJ1
ZmZlci4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIFN0
cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCByZXF1aXJlZExl
bmd0aCkKK3sKKyAgICBpZiAobV9idWZmZXIgJiYgcmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXIt
Pmxlbmd0aCgpKSB7CisgICAgICAgIG1fc3RyaW5nID0geyB9OworICAgICAgICByZXR1cm4gY29u
c3RfY2FzdDxDaGFyYWN0ZXJUeXBlKj4obV9idWZmZXItPmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlw
ZT4oKSkgKyBzdGQ6OmV4Y2hhbmdlKG1fbGVuZ3RoLCByZXF1aXJlZExlbmd0aCk7CisgICAgfQor
ICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZTxDaGFyYWN0ZXJUeXBl
PihyZXF1aXJlZExlbmd0aCk7Cit9CisKKy8vIFNoYXJlZCBieSB0aGUgb3RoZXIgZXh0ZW5kQnVm
ZmVyIGZ1bmN0aW9ucy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3Rl
clR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVu
c2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsK
KyAgICBpZiAoIXJlcXVpcmVkTGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZWFsbG9jYXRlQnVmZmVyKGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5n
dGgpKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzT3ZlcmZsb3dlZCgpKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Q2hhcmFjdGVyVHlwZSo+KG1fYnVmZmVy
LT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwg
cmVxdWlyZWRMZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKaW5kZXggZTZhYTYyMDc5MDFjYTFmM2M0NzNiYjhk
MGZmODRiMzdkZTNlN2QxYy4uZmVjMDM2YzkzZWEwYzdiODRjNDQxMmFhNDkyZTgyYjcwMTRmOGNm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKQEAgLTExLDYg
KzExLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVySW50ZXJuYWxzLmg+
CiAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430461</attachid>
            <date>2021-06-03 05:20:23 -0700</date>
            <delta_ts>2021-06-03 06:10:47 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-226497-20210603072022.patch</filename>
            <type>text/plain</type>
            <size>14639</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFiNWJjN2Y0M2JjNzA3ODM2YTVmM2Yw
NzIyNjRjNTYwNjNiNjA1ZTIuLjc3ZGM0MTgyNGEwMDViNGUxNWY0MTQyODYzMTUyMTgzZDIwZWY1
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjEtMDYtMDMgIE1pY2hhZWwgQ2F0YW56YXJvICA8
bWNhdGFuemFyb0Bnbm9tZS5vcmc+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjc3NzQ0KTogQnJv
a2UgYnVpbGQgb24gczM5MHggbWFpbmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgd2UgaGF2ZSBhIHRlbXBsYXRlIGRlZmlu
ZWQgaW4gYSBDKysgc291cmNlIGZpbGUsIHVzZWQgYnkgbXVsdGlwbGUgc291cmNlCisgICAgICAg
IGZpbGVzLiBUaGlzIGlzIG5vdCB2YWxpZCBDKyssIHNvIGxldCdzIHNwbGl0IHRoZSB0ZW1wbGF0
ZXMgZGVmaW5lZCBpbiBTdHJpbmdCdWlsZGVyLmNwcCBvdXQKKyAgICAgICAgaW50byBhIG5ldyBT
dHJpbmdCdWlsZGVySW50ZXJuYWxzLmggdGhhdCB3ZSBjYW4gI2luY2x1ZGUgaW4gYm90aCBTdHJp
bmdCdWlsZGVyLmNwcCBhbmQKKyAgICAgICAgU3RyaW5nQnVpbGRlckpTT04uY3BwLgorCisgICAg
ICAgIElkZWFsbHkgd2Ugd291bGQgbW92ZSB0aGUgdGVtcGxhdGUgZGVmaW5lZCBpbiBTdHJpbmdC
dWlsZGVySlNPTi5jcHAgYXMgd2VsbCwgYW5kIHRoZW4KKyAgICAgICAgZWxpbWluYXRlIFN0cmlu
Z0J1aWxkZXJKU09OLmNwcCBzaW5jZSB0aGVyZSB3b3VsZCBvbmx5IGJlIG9uZSBmdW5jdGlvbiBs
ZWZ0LiBCdXQgdGhhdCBmaWxlCisgICAgICAgIGhhcyBhbiBNUEwgbGljZW5zZS4gSXQncyBlYXNp
ZXIgdG8gbGVhdmUgaXQgYmUgdG8ga2VlcCB0aGUgbGljZW5zZSBzaXR1YXRpb24gc2ltcGxlci4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXhwYW5kZWRDYXBhY2l0eSk6CisgICAgICAg
IChXVEY6OmV4cGFuZGVkQ2FwYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6CisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlckludGVybmFscy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpy
ZWFsbG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXJKU09OLmNwcDoKKwogMjAyMS0wNi0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIERyb3AgV1RGOjpWZWN0b3Igb3ZlcmxvYWRzIHRha2luZyBpbmRleCBhcyBD
aGVja2VkPHNpemVfdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDk4NDNiOThmMWU0Nzc2NTdiNWE5MDgzYzIwZjZkODZmZDk5ZDhiZDAuLmVhOTQxYTA3MGJj
OTcyM2E5NGVjODNjMWMzY2M2NDI1NWUzN2EzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNjU0LDYgKzY1NCw3IEBACiAJCUE4QTQ3MzIzMTUxQTgyNUIw
MDQxMjNGRiAvKiBTdHJpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RyaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzI0
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBOEE0NzMyNTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNFRSAvKiBTdHJpbmdC
dWlsZGVySW50ZXJuYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmlu
Z0J1aWxkZXJJbnRlcm5hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcz
MjYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0NvbmNhdGVuYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4QTQ3MzI3MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdIYXNoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMjgxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nSW1wbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDI0LDYgKzE0MjUsNyBAQAogCQkJCUE4
QTQ3MzIzMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWZmZXIuaCAqLywKIAkJCQlBOEE0NzMy
NDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgKi8sCiAJCQkJQThBNDczMjUx
NTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1aWxkZXIuaCAqLywKKwkJCQlBOEE0NzMyNTE1MUE4
MjVCMDA0MTIzRUUgLyogU3RyaW5nQnVpbGRlckludGVybmFscy5oICovLAogCQkJCUUzOEQ2RTI2
MUY1NTIyRTMwMEE3NUNDNCAvKiBTdHJpbmdCdWlsZGVySlNPTi5jcHAgKi8sCiAJCQkJNDMwQjQ3
ODcxQUFBQUMxQTAwMTIyM0RBIC8qIFN0cmluZ0NvbW1vbi5oICovLAogCQkJCUE4QTQ3MzI2MTUx
QTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25jYXRlbmF0ZS5oICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAppbmRleCA4Y2Y3Zjk5YjI0MTdjMWYxYTVlZmIwYmNjOTc3OTUzZGJmYzdlYjQwLi43ZWExM2Qw
MTE1ZTdjZjE2NmNhMDdlOWEzNDA5NDY5MTYwMWIyNTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApA
QCAtMzQ2LDYgKzM0Niw3IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICB0ZXh0L09yZGlu
YWxOdW1iZXIuaAogICAgIHRleHQvU3RyaW5nQnVmZmVyLmgKICAgICB0ZXh0L1N0cmluZ0J1aWxk
ZXIuaAorICAgIHRleHQvU3RyaW5nQnVpbGRlckludGVybmFscy5oCiAgICAgdGV4dC9TdHJpbmdD
b21tb24uaAogICAgIHRleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAogICAgIHRleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4
IDIzM2FkZjc4OWE2N2YyNjQ5NmI5N2YyMGE1NjgyMWQ4OTZjMzVjNTEuLjhhOTkzMjk4YjM5MjMw
NzI3MWM4Yjk5ZjJmYTc1OWY2YzE3NGZjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmNwcApAQCAtMjgsMTIgKzI4LDEzIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVySW50ZXJuYWxzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG1heENhcGFjaXR5ID0gU3RyaW5nOjpNYXhMZW5ndGg7CiAKLXN0YXRpYyB1
bnNpZ25lZCBleHBhbmRlZENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5LCB1bnNpZ25lZCByZXF1
aXJlZENhcGFjaXR5KQordW5zaWduZWQgU3RyaW5nQnVpbGRlcjo6ZXhwYW5kZWRDYXBhY2l0eSh1
bnNpZ25lZCBjYXBhY2l0eSwgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbmltdW1DYXBhY2l0eSA9IDE2OwogICAgIHJldHVybiBz
dGQ6Om1heChyZXF1aXJlZENhcGFjaXR5LCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIHN0ZDo6
bWluKGNhcGFjaXR5ICogMiwgbWF4Q2FwYWNpdHkpKSk7CkBAIC0xMDIsNDMgKzEwMyw2IEBAIHZv
aWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rKHVuc2lnbmVkIG5ld0xlbmd0aCkKICAgICBtX3N0cmlu
ZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCptX3N0cmluZy5pbXBs
KCksIDAsIG5ld0xlbmd0aCk7CiB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciwgY29weWlu
ZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJp
bmcgb3IgbV9idWZmZXIuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0aW9uQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hbWUgQ3VycmVudENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxs
b2NhdGVCdWZmZXIoY29uc3QgQ3VycmVudENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXJz
LCB1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQotewotICAgIEFsbG9jYXRpb25DaGFyYWN0ZXJU
eXBlKiBidWZmZXJDaGFyYWN0ZXJzOwotICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpIHsKLSAgICAgICAgZGlkT3ZlcmZsb3coKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhidWZmZXJDaGFyYWN0ZXJzLCBjdXJyZW50Q2hh
cmFjdGVycywgbV9sZW5ndGgpOwotCi0gICAgbV9idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7Ci0g
ICAgbV9zdHJpbmcgPSB7IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENh
cGFjaXR5KQotewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkgdGhp
cyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdC4KLSAgICBpZiAobV9idWZmZXIpIHsKLSAg
ICAgICAgbV9zdHJpbmcgPSB7IH07IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSBy
ZWZlcmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNl
IGNvdW50IG9mIG1fYnVmZmVyLgotICAgICAgICBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7
Ci0gICAgICAgICAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXJDaGFyYWN0ZXJzOwotICAgICAgICAg
ICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlSZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVh
c2VOb25OdWxsKCksIHJlcXVpcmVkQ2FwYWNpdHksIGJ1ZmZlckNoYXJhY3RlcnMpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgZGlkT3ZlcmZs
b3coKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2J1ZmZlciA9IFdURk1vdmUoKmJ1ZmZlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBhbGxvY2F0ZUJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPihjaGFyYWN0
ZXJzPENoYXJhY3RlclR5cGU+KCksIHJlcXVpcmVkQ2FwYWNpdHkpOwotfQotCiB2b2lkIFN0cmlu
Z0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsK
ICAgICBpZiAoaXM4Qml0KCkpCkBAIC0xNjgsMzEgKzEzMiw2IEBAIHZvaWQgU3RyaW5nQnVpbGRl
cjo6cmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcGFjaXR5KQogICAgIEFTU0VSVChoYXNP
dmVyZmxvd2VkKCkgfHwgIW5ld0NhcGFjaXR5IHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBuZXdD
YXBhY2l0eSk7CiB9CiAKLS8vIE1ha2UgJ2FkZGl0aW9uYWxMZW5ndGgnIGFkZGl0aW9uYWwgY2Fw
YWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJpbmcgJiBtX2xlbmd0
aCB0byB1c2UsCi0vLyB0aGF0IGNhcGFjaXR5IGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgc3RvcmFnZSBzbyB0aGUgY2FsbGVyIGNhbiB3cml0ZSBjaGFyYWN0ZXJz
IHRoZXJlLgotLy8gUmV0dXJucyBudWxscHRyIGlmIGFsbG9jYXRpb24gZmFpbHMsIGxlbmd0aCBv
dmVyZmxvd3MsIG9yIGlmIHRvdGFsIGNhcGFjaXR5IGlzIDAgc28gbm8gYnVmZmVyIGlzIG5lZWRl
ZC4KLS8vIFRoZSBjYWxsZXIgaGFzIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2hlY2tpbmcgdGhh
dCBDaGFyYWN0ZXJUeXBlIGlzIHRoZSB0eXBlIG9mIHRoZSBleGlzdGluZyBidWZmZXIuCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVy
OjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCi17Ci0g
ICAgaWYgKG1fYnVmZmVyICYmIHJlcXVpcmVkTGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkg
ewotICAgICAgICBtX3N0cmluZyA9IHsgfTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Q2hh
cmFjdGVyVHlwZSo+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkpICsgc3Rk
OjpleGNoYW5nZShtX2xlbmd0aCwgcmVxdWlyZWRMZW5ndGgpOwotICAgIH0KLSAgICByZXR1cm4g
ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2U8Q2hhcmFjdGVyVHlwZT4ocmVxdWlyZWRM
ZW5ndGgpOwotfQotCi0vLyBTaGFyZWQgYnkgdGhlIG90aGVyIGV4dGVuZEJ1ZmZlciBmdW5jdGlv
bnMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBTdHJp
bmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSh1bnNpZ25lZCByZXF1
aXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgaWYgKCFy
ZXF1aXJlZExlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVhbGxvY2F0ZUJ1
ZmZlcihleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7Ci0gICAg
aWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjb25zdF9jYXN0PENoYXJhY3RlclR5cGUqPihtX2J1ZmZlci0+Y2hhcmFjdGVy
czxDaGFyYWN0ZXJUeXBlPigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVu
Z3RoKTsKLX0KLQogLy8gQWx0ZXJhdGl2ZSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcgdGhhdCBj
YW4gYmUgY2FsbGVkIGZyb20gdGhlIGhlYWRlciB3aXRob3V0IGlubGluaW5nLgogTENoYXIqIFN0
cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2lnbmVkIHJlcXVp
cmVkTGVuZ3RoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA2NjY4YWM2
MjczMGUwODY5NjUwYjI5ODIwZjgzNmRmNzcxYTg0MWVjLi5jYWQwOTUzYjUyOGEyZDA5ZTQyMmE4
ODI5YjcyYzMyOGJkMTI2ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAt
MTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Fs
bEFTQ0lJKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuZGVk
Q2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHksIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOwor
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUsIHR5cGVuYW1l
IEN1cnJlbnRDaGFyYWN0ZXJUeXBlPiB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IEN1cnJlbnRD
aGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0
eSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCByZWFsbG9jYXRl
QnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOwogICAgIHZvaWQgcmVhbGxvY2F0ZUJ1
ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQnVpbGRlckludGVybmFscy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWlsZGVySW50ZXJuYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdkZGZhNzA5NjMwODEwYzM3MThl
OGQxNWM5ZWM2N2ZmMjJhNjM2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlckludGVybmFscy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRo
ZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1fYnVmZmVyLgordGVtcGxhdGU8
dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEN1cnJlbnRDaGFyYWN0
ZXJUeXBlPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IEN1cnJlbnRD
aGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0
eSkKK3sKKyAgICBBbGxvY2F0aW9uQ2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAg
ICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWly
ZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgaWYgKFVOTElLRUxZKCFidWZmZXIp
KSB7CisgICAgICAgIGRpZE92ZXJmbG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3Rl
cnMoYnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMsIG1fbGVuZ3RoKTsKKworICAg
IG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOworICAgIG1fc3RyaW5nID0geyB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxs
b2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKK3sKKyAgICAvLyBJZiB0aGUg
YnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxsb2Nh
dGUgaXQuCisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIG1fc3RyaW5nID0geyB9OyAvLyBD
bGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIG1fYnVmZmVyIGlmIGFu
eSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBtX2J1ZmZlci4KKyAgICAg
ICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgQ2hhcmFjdGVyVHlw
ZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1w
bDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZENhcGFj
aXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVy
KSkgeworICAgICAgICAgICAgICAgIGRpZE92ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKCpidWZm
ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYWxsb2Nh
dGVCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpLCByZXF1
aXJlZENhcGFjaXR5KTsKK30KKworLy8gTWFrZSAnYWRkaXRpb25hbExlbmd0aCcgYWRkaXRpb25h
bCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1f
bGVuZ3RoIHRvIHVzZSwKKy8vIHRoYXQgY2FwYWNpdHkgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8g
dGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlIHNvIHRoZSBjYWxsZXIgY2FuIHdyaXRlIGNoYXJh
Y3RlcnMgdGhlcmUuCisvLyBSZXR1cm5zIG51bGxwdHIgaWYgYWxsb2NhdGlvbiBmYWlscywgbGVu
Z3RoIG92ZXJmbG93cywgb3IgaWYgdG90YWwgY2FwYWNpdHkgaXMgMCBzbyBubyBidWZmZXIgaXMg
bmVlZGVkLgorLy8gVGhlIGNhbGxlciBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjaGVja2lu
ZyB0aGF0IENoYXJhY3RlclR5cGUgaXMgdGhlIHR5cGUgb2YgdGhlIGV4aXN0aW5nIGJ1ZmZlci4K
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1
aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkK
K3sKKyAgICBpZiAobV9idWZmZXIgJiYgcmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0
aCgpKSB7CisgICAgICAgIG1fc3RyaW5nID0geyB9OworICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxDaGFyYWN0ZXJUeXBlKj4obV9idWZmZXItPmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSkg
KyBzdGQ6OmV4Y2hhbmdlKG1fbGVuZ3RoLCByZXF1aXJlZExlbmd0aCk7CisgICAgfQorICAgIHJl
dHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZTxDaGFyYWN0ZXJUeXBlPihyZXF1
aXJlZExlbmd0aCk7Cit9CisKKy8vIFNoYXJlZCBieSB0aGUgb3RoZXIgZXh0ZW5kQnVmZmVyIGZ1
bmN0aW9ucy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUq
IFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICBp
ZiAoIXJlcXVpcmVkTGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZWFsbG9j
YXRlQnVmZmVyKGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsK
KyAgICBpZiAoVU5MSUtFTFkoaGFzT3ZlcmZsb3dlZCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Q2hhcmFjdGVyVHlwZSo+KG1fYnVmZmVyLT5jaGFy
YWN0ZXJzPENoYXJhY3RlclR5cGU+KCkpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwgcmVxdWly
ZWRMZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWlsZGVySlNPTi5jcHAKaW5kZXggZTZhYTYyMDc5MDFjYTFmM2M0NzNiYjhkMGZmODRi
MzdkZTNlN2QxYy4uZTE4YWQ0MWMwMzliYzU2NzUxZDZhNTg1NTY0NjdjMDA1NGZlMzU4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKQEAgLTEyLDYgKzEyLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVySW50ZXJuYWxzLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>