<?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>225839</bug_id>
          
          <creation_ts>2021-05-14 20:36:31 -0700</creation_ts>
          <short_desc>Move CFStringRef and NSString support from StringBuilder into StringConcatenateCF</short_desc>
          <delta_ts>2021-06-01 05:51:08 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=226497</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jamesr</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1760346</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-14 20:36:31 -0700</bug_when>
    <thetext>Move CFStringRef and NSString support from StringBuilder into StringConcatenateCF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760354</commentid>
    <comment_count>1</comment_count>
      <attachid>428707</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-14 20:54:08 -0700</bug_when>
    <thetext>Created attachment 428707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760357</commentid>
    <comment_count>2</comment_count>
      <attachid>428709</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-14 21:00:01 -0700</bug_when>
    <thetext>Created attachment 428709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760359</commentid>
    <comment_count>3</comment_count>
      <attachid>428710</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-14 21:00:33 -0700</bug_when>
    <thetext>Created attachment 428710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760380</commentid>
    <comment_count>4</comment_count>
      <attachid>428715</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-14 22:19:42 -0700</bug_when>
    <thetext>Created attachment 428715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760393</commentid>
    <comment_count>5</comment_count>
      <attachid>428721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-14 23:59:39 -0700</bug_when>
    <thetext>Created attachment 428721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760408</commentid>
    <comment_count>6</comment_count>
      <attachid>428721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-15 08:57:16 -0700</bug_when>
    <thetext>Comment on attachment 428721
Patch

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

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:439
&gt; +        &quot;, &quot;, InjectedBundlePage::responseHeaderCount(response), &quot; headers&quot;);

Missing “&gt;” on the end of this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760495</commentid>
    <comment_count>7</comment_count>
      <attachid>428749</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-15 16:53:43 -0700</bug_when>
    <thetext>Created attachment 428749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760502</commentid>
    <comment_count>8</comment_count>
      <attachid>428752</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-15 17:00:55 -0700</bug_when>
    <thetext>Created attachment 428752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760525</commentid>
    <comment_count>9</comment_count>
      <attachid>428759</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-15 18:41:40 -0700</bug_when>
    <thetext>Created attachment 428759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760621</commentid>
    <comment_count>10</comment_count>
      <attachid>428759</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 09:49:49 -0700</bug_when>
    <thetext>Comment on attachment 428759
Patch

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

&gt; Source/WTF/wtf/text/StringBuilder.h:124
&gt; +    LChar* m_bufferCharacters { nullptr };

What is the intent of removing the union here and replacing its uses with reinterpret_casts&lt;&gt;? An alternative formulation we could consider (though it may have downsides I am not considering) is using a Variant&lt;LChar*, UChar*&gt; and removing the m_is8Bit bool.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:327
&gt;      Color textColor = captionsTextColor(important);

auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760678</commentid>
    <comment_count>11</comment_count>
      <attachid>428759</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-16 22:55:54 -0700</bug_when>
    <thetext>Comment on attachment 428759
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringBuilder.h:124
&gt;&gt; +    LChar* m_bufferCharacters { nullptr };
&gt; 
&gt; What is the intent of removing the union here and replacing its uses with reinterpret_casts&lt;&gt;? An alternative formulation we could consider (though it may have downsides I am not considering) is using a Variant&lt;LChar*, UChar*&gt; and removing the m_is8Bit bool.

Your suggestion is excellent. To be honest I do not know why I chose to make the change I did, on reflection now. At one point I had changed it to a void* and was using static_cast.

I should probably switch back to the union.

I am tempted to switch to the Variant.

But one reason not to is the possibility of getting rid of m_is8Bit because m_string and m_buffer both already can answer that question, and there is no need to store the state redundantly.

It occurs to me that these bufferCharacters pointers don’t really have much value; they are used to optimize the fast path for append but I am not convinced the benefit is significant over calling m_buffer-&gt;characters() and chasing one more pointer; after all, we are already chasing the pointer to check m_buffer-&gt;length().

So likely could and should remove both m_bufferCharacters and m_is8Bit.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:312
&gt; +    Color textColor(adoptCF(MACaptionAppearanceCopyForegroundColor(kMACaptionAppearanceDomainUser, &amp;behavior)).get());

Should use = style here instead of construction syntax I think.

&gt;&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:327
&gt;&gt;      Color textColor = captionsTextColor(important);
&gt; 
&gt; auto?

Will do.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:417
&gt; +    auto name = adoptCF(CTFontDescriptorCopyAttribute(font.get(), kCTFontNameAttribute));

Should probably move the cast to CFStringRef up here because this is where we call the function guaranteed to return that type for this key.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:428
&gt;              auto fontCascadeName = adoptCF(CTFontDescriptorCopyAttribute(fontCascade, kCTFontNameAttribute));

Here too. As is done just above for CFArrayRef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761073</commentid>
    <comment_count>12</comment_count>
      <attachid>428916</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-18 00:37:47 -0700</bug_when>
    <thetext>Created attachment 428916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761242</commentid>
    <comment_count>13</comment_count>
      <attachid>428964</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-18 12:31:36 -0700</bug_when>
    <thetext>Created attachment 428964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761264</commentid>
    <comment_count>14</comment_count>
      <attachid>428970</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-18 13:03:04 -0700</bug_when>
    <thetext>Created attachment 428970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761302</commentid>
    <comment_count>15</comment_count>
      <attachid>428977</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-18 14:07:24 -0700</bug_when>
    <thetext>Created attachment 428977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761657</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-19 12:37:30 -0700</bug_when>
    <thetext>Committed r277744 (237916@main): &lt;https://commits.webkit.org/237916@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761658</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-19 12:38:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/78218765&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428707</attachid>
            <date>2021-05-14 20:54:08 -0700</date>
            <delta_ts>2021-05-14 20:59:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210514205407.patch</filename>
            <type>text/plain</type>
            <size>24354</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ2ZDkwNDUwZTRkOTljNmIwOTEzODA1
NjAzMTU4NjE0Mjk0MTMwMTUuLmYzYzNhYmRlYjJlOWY3YjgwNTA2ZmIyOTM2Y2M2MGYyNjkwZWMy
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBv
cnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgKiB3dGYvUGxhdGZv
cm1GVFcuY21ha2U6IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0
dG8uCisgICAgICAgICogd3RmL1BsYXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjphcHBlbmQpOiBEZWxldGVkIHRoZSBvdmVybG9hZCBmb3IgQ0ZTdHJpbmdSZWYuCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBEZWxldGVkIHRoZSBzcGVjaWFsIGNhc2UgZm9y
IENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQuIFNwZWNpYWxpemVzIFN0cmluZ1R5cGVBZGFwdGVyIGZv
cgorICAgICAgICBib3RoIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyAqLiBJZiBDRlN0cmluZ0dl
dENTdHJpbmdQdHIgd29ya3MgZm9yIExhdGluLTEsIHRoZW4KKyAgICAgICAgZG9lcyB0aGUgOC1i
aXQgY29kZSBwYXRoLCBvdGhlcndpc2UgdGhlIDE2LWJpdC4KKworICAgICAgICAqIHd0Zi90ZXh0
L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbTogSW5jbHVkZSBTdHJpbmdDb25jYXRlbmF0ZUNGLmgs
IHNpbmNlIGl0J3MKKyAgICAgICAgbm93IG5lZWRlZCB0byB1c2UgQ0ZTdHJpbmdSZWYgd2l0aCBT
dHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE0ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBQcm9tb3RlIGAtW1dLV2ViVmlldyBfcGFnZUV4dGVuZGVkQmFja2dy
b3VuZENvbG9yXWAgU1BJIHRvIGAtW1dLV2ViVmlldyB1bmRlclBhZ2VCYWNrZ3JvdW5kQ29sb3Jd
YCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkY2QxMzYyYzdhZTE1MjNjNGMwNWQ0ZWQ1YTQ1NmQ5YzZlNDdm
ODZmLi5lZTQ3MThmNzk1NDMxNWFiODM1ZDc2ODQzZDc3ZDI1YmU3NGE0NzY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJv
bSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvciBjb25zdCk6IFR3ZWFrZWQKKyAgICAgICAgY29k
aW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ1NTKTogVXNlIHZhcmlh
ZGljIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCBpbnN0ZWFkIG9mIG1hbnkKKyAgICAgICAgc2VwYXJh
dGUgY2FsbHMuCisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUyBjb25zdCk6CisgICAgICAgIFR3ZWFrZWQgY29kaW5n
IHN0eWxlIGEgYml0LCBhbmQgdXNlIHZhcmlhZGljIFN0cmluQnVpbGRlcjo6YXBwZW5kIGNhbGxz
CisgICAgICAgIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIGFuZCBzdHJlYW1saW5lIHRo
ZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgRGl0dG8uIEFsc28g
cmVtb3ZlZCB1bm5lY2Vzc2FyeSBjaGVja3MgdGhhdCBzdHJpbmdzIGFyZSBlbXB0eSBiZWZvcmUg
YXBwZW5kaW5nLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZXNGb3JTZXNzaW9uIGNvbnN0KTogRGl0dG8uCisKIDIwMjEtMDUtMTQgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFByb21vdGUgYC1bV0tXZWJW
aWV3IF9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3JdYCBTUEkgdG8gYC1bV0tXZWJWaWV3IHVu
ZGVyUGFnZUJhY2tncm91bmRDb2xvcl1gIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxOGFmYmVlMTM4NDMxYzAz
ZDdiMmRiZGU3ODgyODVmNWRiOGEzN2E0Li43MzQ2NGY2MzBmOWY3OTQ0ZmY5YzY3MGVhMjMyOGZi
ZWI0N2FlYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTE0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBO
U1N0cmluZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRl
Q0YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVy
cyk6IFVzZSBtYWtlU3RyaW5nIGluc3RlYWQKKyAgICAgICAgb2YgU3RyaW5nQnVpbGRlci4KKwog
MjAyMS0wNS0xNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAg
UHJvbW90ZSBgLVtXS1dlYlZpZXcgX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcl1gIFNQSSB0
byBgLVtXS1dlYlZpZXcgdW5kZXJQYWdlQmFja2dyb3VuZENvbG9yXWAgQVBJCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYWUwNWU3MDE1ZTU2MmRkZDRkMjYz
ZGIxM2YwNzQ5NzMxMGNmZTJjLi5kMWZlMDY1YjNmOTk2NWVhODkyODE0ZDBkY2MwY2U3MmZjYzFh
MGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ5OCw2
ICs0OTgsNyBAQAogCQk5M0FDOTFBNzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTENoYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNCNUI0NEQyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXhOdW1iZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0I1QjQ1MDIyMTcxRUU5MDA0QjdBQTcgLyogTG9nZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRDAwMTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJp
bmdDb25jYXRlbmF0ZUNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTkxQ0Yy
MENBRUNFODAwQzUxQjhFIC8qIG9iamNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb2JqY1NQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0RERTkzMTFDREMwNTJEMDBGRDM0OTEgLyog
ZHlsZFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkeWxkU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBT
dHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmlu
Z1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI1LDYgKzkyNiw3IEBA
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBNUJBMTVGNzE4MjQzNUE2MDBBODJFNjkgLyogQXRvbVN0
cmluZ0ltcGxDRi5jcHAgKi8sCiAJCQkJQTVCQTE1RjgxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmlu
Z0NGLmNwcCAqLywKKwkJCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyogU3RyaW5nQ29uY2F0
ZW5hdGVDRi5oICovLAogCQkJCUE1QkExNUY5MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBs
Q0YuY3BwICovLAogCQkJCTkzOTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0Yu
Y3BwICovLAogCQkJCTFDQ0RCMTQ5MUU1NjY2MjYwMDZDNzNDMCAvKiBUZXh0QnJlYWtJdGVyYXRv
ckNGLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZSBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDk3MWZkZWIyNTk1MGVlYjc3
OGQ1ZDcwZTFhZGNmZDUyYWQ2YWQyOWUuLmJmYTEzZDFmZTgwYjMwN2E1MmIzZmRkYmVkYTFlNjk3
ZDM4ZTUzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC0zOSw2ICszOSw3IEBAIGlm
IChVU0VfQ0YpCiAgICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAgY2YvVHlwZUNhc3Rz
Q0YuaAogCisgICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCiAgICAgICAgIHRl
eHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9T
T1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZSBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGUyODA5OTc0MjcxOWM3NzlhYzNl
YWRmNDY2MTMzM2Q4NzhlZmRjZGQuLjdjZGNjNGIxNmJlMjJlNDc1ZTIyYTg2YWQwZTdhYzQ4ZGUx
ZGQxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC00MSw2ICs0MSw3IEBAIGxpc3Qo
QVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgc3BpL21hYy9NZXRhZGF0YVNQSS5oCiAK
KyAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgIHRleHQvY2YvVGV4dEJyZWFr
SXRlcmF0b3JDRi5oCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2lu
LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNmU4MGI5OWEw
NGE2YzZkZTRlMmZmNTlhN2I0ZWQ0YzhjNGFhZmFiOS4uOTBmZDI2ZDc4YzY5NGRiMzZkZDA4MjQx
ZTk4OGU0MmY1NTU3ZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4u
Y21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTM3LDYgKzM3
LDcgQEAgaWYgKFVTRV9DRikKICAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9U
eXBlQ2FzdHNDRi5oCiAKKyAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAg
ICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKICAgICApCiAgICAgbGlzdChBUFBF
TkQgV1RGX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDFl
MGMxOGFjOWQyMGVkODIwZmViODY4NWZjY2Y4MmIxMDYwMTE0MmQuLmZlMzYxMDYwOGRjMzNkN2Ni
MDhlNWZkNTc0OGRmOGRmN2QzZGUwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcApAQCAtMzc5LDIwICszNzksNiBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJh
Y3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB9CiB9
CiAKLSNpZiBVU0UoQ0YpCi0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVm
IHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGg6IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBv
cmFyeSBTdHJpbmcgd2hlbiBwb3NzaWJsZS4KLSAgICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENG
U3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkg
ewotICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihjaGFyYWN0ZXJzKSwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgYXBwZW5kKFN0cmluZyhzdHJpbmcpKTsKLX0KLQotI2VuZGlmCi0KIGJv
b2wgU3RyaW5nQnVpbGRlcjo6Y2FuU2hyaW5rKCkgY29uc3QKIHsKICAgICBpZiAoaGFzT3ZlcmZs
b3dlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA3MDE4YTFhYjdiZGJk
NzRlNmNiN2FmY2QzNTQ0ZWFlYjkzOTBiZTVlLi5iNWY5NTE2MTliNWVhYmVmNjExOGY1MzViMzM2
YTRiOWNlMjZjYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4LDEwICsyOCw4IEBACiAKICNp
bmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTEzNSwxMyArMTMzLDYgQEAgcHVibGljOgogICAg
ICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJp
bmdWaWV3Lmxlbmd0aCgpKTsKICAgICB9CiAKLSNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYXBwZW5kKENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmIFVTRShDRikgJiYg
ZGVmaW5lZChfX09CSkNfXykKLSAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFw
cGVuZCgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsgfQotI2VuZGlmCi0gICAgCiAgICAg
dm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5nOjpNYXhMZW5ndGgpCiAgICAgewogICAgICAgICBp
ZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9T
dHJpbmdDb25jYXRlbmF0ZUNGLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzc3NTliNGIyNmUwMjgyODc2YjhkMTIz
ZGE0NzFkZjA1YTI1ZTE2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
Y2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisK
KyNpZiBVU0UoQ0YpCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmlu
Z1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0
ZXIoQ0ZTdHJpbmdSZWYpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIENG
U3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyBy
ZXR1cm4gQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lT
T0xhdGluMSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdy
aXRlVG8oQ2hhcmFjdGVyVHlwZSopIGNvbnN0OworCitwcml2YXRlOgorICAgIENGU3RyaW5nUmVm
IG1fc3RyaW5nOworfTsKKworaW5saW5lIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPjo6
U3RyaW5nVHlwZUFkYXB0ZXIoQ0ZTdHJpbmdSZWYgc3RyaW5nKQorICAgIDogbV9zdHJpbmcgeyBz
dHJpbmcgfQoreworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVy
PENGU3RyaW5nUmVmPjo6d3JpdGVUbzxMQ2hhcj4oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAor
eworICAgIHN0ZDo6bWVtY3B5KGRlc3RpbmF0aW9uLCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9z
dHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSwgQ0ZTdHJpbmdHZXRMZW5ndGgobV9z
dHJpbmcpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBTdHJpbmdUeXBlQWRhcHRlcjxD
RlN0cmluZ1JlZj46OndyaXRlVG88VUNoYXI+KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKK3sK
KyAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3Ry
aW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3Rp
bmF0aW9uKSk7Cit9CisKKyNpZmRlZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmlu
Z1R5cGVBZGFwdGVyPE5TU3RyaW5nICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3Ry
aW5nUmVmPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmlu
ZykKKyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENG
U3RyaW5nUmVmKXN0cmluZykKKyAgICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2Vu
ZGlmIC8vIFVTRShDRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4
dFN0cmVhbUNvY29hLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29j
b2EubW0KaW5kZXggYzc0YmY5Y2NmZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2
YjlkM2Y0MTZhZDI0OTczNDY0NWRmZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBv
cnQgImNvbmZpZy5oIgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0
IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewog
CiBUZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3Qp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwCmluZGV4IDczYzgwMWI5MzhjN2E4ZDhmNGQ0ZDc1NTNlYWU2Zjc1MTNhMTgxNWUu
LjJhYmI1MTIxMmFjMDVlYzFkMDk5NTZmNDRmNThmMjQyMTAyZjRkNGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBA
IC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0
ZUNGLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVh
ZFJ1bi5oIgpAQCAtMzA4LDEyICszMDksMTEgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MoKSBjb25zdAogQ29sb3IgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9ydGFudCkg
Y29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAg
UmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNl
Q29weUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhh
dmlvcikpOwotICAgIENvbG9yIHRleHRDb2xvcihjb2xvci5nZXQoKSk7Ci0gICAgaWYgKCF0ZXh0
Q29sb3IuaXNWYWxpZCgpKQorICAgIENvbG9yIHRleHRDb2xvcihhZG9wdENGKE1BQ2FwdGlvbkFw
cGVhcmFuY2VDb3B5Rm9yZWdyb3VuZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNl
ciwgJmJlaGF2aW9yKSkuZ2V0KCkpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkgewog
ICAgICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25l
IHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRy
YWNrLWNvbnRhaW5lci4KICAgICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAor
ICAgIH0KICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJl
aGF2aW9yVXNlVmFsdWU7CiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5j
ZUdldEZvcmVncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJl
aGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKQEAgLTMyNSwyMSArMzI1LDE0IEBAIFN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBj
b25zdAogewogICAgIGJvb2wgaW1wb3J0YW50OwogICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRp
b25zVGV4dENvbG9yKGltcG9ydGFudCk7Ci0KICAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgcmV0dXJuIGNvbG9yUHJvcGVy
dHlDU1MoQ1NTUHJvcGVydHlDb2xvciwgdGV4dENvbG9yLCBpbXBvcnRhbnQpOwogfQogCiBzdGF0
aWMgdm9pZCBhcHBlbmRDU1MoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgQ1NTUHJvcGVydHlJRCBp
ZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgYnVpbGRlci5h
cHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzon
KTsKLSAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSk7Ci0gICAgaWYgKGltcG9ydGFudCkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKCc7Jyk7CisgICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSwg
JzonLCB2YWx1ZSwgaW1wb3J0YW50ID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogfQogICAgIAog
U3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjp3aW5kb3dSb3VuZGVkQ29ybmVy
UmFkaXVzQ1NTKCkgY29uc3QKQEAgLTM3OSw3ICszNzIsNiBAQCBib29sIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uU3Ryb2tlV2lkdGhGb3JGb250KGZsb2F0IGZvbnRTaXpl
LCBjbwogICAgIC8vIFNpbmNlIG9ubHkgaGFsZiBvZiB0aGUgc3Ryb2tlIGlzIHZpc2libGUgYmVj
YXVzZSB0aGUgc3Ryb2tlIGlzIGRyYXduIGJlZm9yZSB0aGUgZmlsbCwgd2UgZG91YmxlIHRoZSBz
dHJva2Ugd2lkdGggaGVyZS4KICAgICBzdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoUHQgKiAyOwog
ICAgIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JV
c2VWYWx1ZTsKLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE4LDI0ICs0MTAsMTcg
QEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0RlZmF1bHRG
b250Q1NTKCkgY29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZp
b3I7CiAgICAgCi0gICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnQgPSBhZG9w
dENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0
aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VG
b250U3R5bGVEZWZhdWx0KSk7CisgICAgYXV0byBmb250ID0gYWRvcHRDRihNQUNhcHRpb25BcHBl
YXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVsdCkp
OwogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBS
ZXRhaW5QdHI8Q0ZUeXBlUmVmPiBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0
dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOworICAgIGF1dG8gbmFt
ZSA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NU
Rm9udE5hbWVBdHRyaWJ1dGUpKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIAotICAgIGJ1aWxk
ZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjogXCIiKTsKLSAgICBidWlsZGVyLmFwcGVuZChz
dGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4obmFtZS5nZXQoKSkpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KCciJyk7Ci0KLSAgICBhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkFy
cmF5UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250
Q2FzY2FkZUxpc3RBdHRyaWJ1dGUpKSk7Ci0KLSAgICBpZiAoY2FzY2FkZUxpc3QpIHsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiZm9udC1mYW1pbHk6IFwiIiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+
KG5hbWUuZ2V0KCkpLCAnIicpOworICAgIGlmIChhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250
LmdldCgpLCBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUpKSkpIHsKICAgICAgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGNhc2NhZGVMaXN0LmdldCgpKTsgaSsr
KSB7CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVz
Y3JpcHRvclJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjYXNjYWRlTGlzdC5nZXQoKSwgaSkp
OwogICAgICAgICAgICAgaWYgKCFmb250Q2FzY2FkZSkKQEAgLTQ0MywxNiArNDI4LDEwIEBAIFN0
cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENT
UygpIGNvbnN0CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlTmFtZSA9IGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udENhc2NhZGUsIGtDVEZvbnROYW1lQXR0cmli
dXRlKSk7CiAgICAgICAgICAgICBpZiAoIWZvbnRDYXNjYWRlTmFtZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwiIik7Ci0gICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2NhZGVO
YW1lLmdldCgpKSk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIiwgXCIiLCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENh
c2NhZGVOYW1lLmdldCgpKSwgJyInKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAo
YmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKQotICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAhaW1wb3J0YW50Iik7Ci0gICAgYnVpbGRlci5hcHBl
bmQoJzsnKTsKLSAgICAKKyAgICBidWlsZGVyLmFwcGVuZChiZWhhdmlvciA9PSBrTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUgPyAiICFpbXBvcnRhbnQ7IiA6ICI7Iik7CiAgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApAQCAtNTYxLDQzICs1NDAsMTggQEAgU3Ry
aW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVy
cmlkZSgpIGNvbnN0CiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKICAg
ICBpZiAoIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7Ci0gICAgCisK
ICAgICBTdHJpbmcgY2FwdGlvbnNDb2xvciA9IGNhcHRpb25zVGV4dENvbG9yQ1NTKCk7CiAgICAg
U3RyaW5nIGVkZ2VTdHlsZSA9IGNhcHRpb25zVGV4dEVkZ2VDU1MoKTsKICAgICBTdHJpbmcgZm9u
dE5hbWUgPSBjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCk7CiAgICAgU3RyaW5nIGJhY2tncm91bmQg
PSBjYXB0aW9uc0JhY2tncm91bmRDU1MoKTsKLSAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgp
IHx8ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAh
Zm9udE5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0
LmFwcGVuZExpdGVyYWwoIiA6OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVl
dC5hcHBlbmQoVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2Fw
dGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0
eWxlU2hlZXQuYXBwZW5kKGJhY2tncm91bmQpOwotICAgICAgICBpZiAoIWNhcHRpb25zQ29sb3Iu
aXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5k
KGNhcHRpb25zQ29sb3IpOwotICAgICAgICBpZiAoIWVkZ2VTdHlsZS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoZWRnZVN0eWxlKTsKLSAg
ICAgICAgaWYgKCFmb250TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJy
aWRlU3R5bGVTaGVldC5hcHBlbmQoZm9udE5hbWUpOwotICAgICAgICAKLSAgICAgICAgY2FwdGlv
bnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQotICAgIAorICAgIGlmICgh
YmFja2dyb3VuZC5pc0VtcHR5KCkgfHwgIWNhcHRpb25zQ29sb3IuaXNFbXB0eSgpIHx8ICFlZGdl
U3R5bGUuaXNFbXB0eSgpIHx8ICFmb250TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25z
T3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6IiwgVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQ
c2V1ZG9JZCgpLCAneycsIGJhY2tncm91bmQsIGNhcHRpb25zQ29sb3IsIGVkZ2VTdHlsZSwgZm9u
dE5hbWUsICd9Jyk7CisKICAgICBTdHJpbmcgd2luZG93Q29sb3IgPSBjYXB0aW9uc1dpbmRvd0NT
UygpOwogICAgIFN0cmluZyB3aW5kb3dDb3JuZXJSYWRpdXMgPSB3aW5kb3dSb3VuZGVkQ29ybmVy
UmFkaXVzQ1NTKCk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nv
cm5lclJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hl
ZXQuYXBwZW5kTGl0ZXJhbCgiIDo6Iik7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNo
ZWV0LmFwcGVuZChUZXh0VHJhY2tDdWU6OmN1ZUJhY2tkcm9wU2hhZG93UHNldWRvSWQoKSk7Ci0g
ICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgneycpOwotICAgICAgICAK
LSAgICAgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9u
c092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29sb3IpOwotICAgICAgICBpZiAoIXdp
bmRvd0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJp
ZGVTdHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb3JuZXJSYWRpdXMpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ30nKTsKLSAg
ICB9CisgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5lclJhZGl1
cy5pc0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgi
IDo6IiwgVGV4dFRyYWNrQ3VlOjpjdWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCksICd7Jywgd2lu
ZG93Q29sb3IsIHdpbmRvd0Nvcm5lclJhZGl1cywgJ30nKTsKICNlbmRpZiAvLyBIQVZFKE1FRElB
X0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogCiAgICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlU2V0dGluZyBzdHls
ZSB0bzpcbiVzIiwgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQudG9TdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29j
b2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IDYwZTY3
MGYyMDY2ZDYwNThiMmU1ZWI3OWViN2RjMzBjNWNiNGIyOGUuLjExYzlhMjM4M2NkNmM4YzMwMWEx
YTA4ZGNkZWFmYWU3OWQyNjJiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2Nv
YS5tbQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisjaW1wb3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKIEBpbnRlcmZh
Y2UgTlNVUkwgKCkKIC0gKENGVVJMUmVmKV9jZnVybDsKQEAgLTM0OSwzMSArMzUwLDIzIEBAIHN0
ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvclNl
c3Npb24oY29uc3QgVVJMJiBmaXJzCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
IAotICAgIFJldGFpblB0cjxOU0FycmF5PiBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBh
cnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNo
b3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKLSAgICBpZiAoIWNvb2tpZXMgfHwg
IVtjb29raWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8v
IFJldHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3RyaW5nQnVpbGRl
ciB3b3VsZCBjcmVhdGUgYmVsb3cuCisgICAgYXV0byBjb29raWVzID0gY29va2llc0ZvclVSTChm
aXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJ
VFAsIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKKyAgICBpZiAoIVtjb29r
aWVzIGNvdW50XSkKKyAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVy
biBhIG51bGwgc3RyaW5nOyBTdHJpbmdCdWlsZGVyIGJlbG93IHdvdWxkIGNyZWF0ZSBhbiBlbXB0
eSBvbmUuCiAKICAgICBTdHJpbmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwogICAgIGJvb2wgZGlk
QWNjZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOwogICAgIGZvciAoTlNIVFRQQ29va2llICpjb29r
aWUgaW4gY29va2llcy5nZXQoKSkgewogICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0
aF0pCiAgICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25s
eSAmJiBbY29va2llIGlzSFRUUE9ubHldKQogICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAg
ICAgaWYgKFtjb29raWUgaXNTZWN1cmVdKSB7CiAgICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVD
b29raWVzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJ
bmNsdWRlU2VjdXJlQ29va2llczo6Tm8pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2ll
c0J1aWxkZXIuYXBwZW5kKFtjb29raWUgbmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5h
cHBlbmQoJz0nKTsKLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVd
KTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKGNvb2tpZXNCdWlsZGVyLmlzRW1wdHko
KSA/ICIiIDogIjsgIiwgW2Nvb2tpZSBuYW1lXSwgJz0nLCBbY29va2llIHZhbHVlXSk7CiAgICAg
fQogICAgIHJldHVybiB7IGNvb2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3Vy
ZUNvb2tpZXMgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IGYy
ZDkyZjE5N2QxN2NhMjk3MGQwN2RjMTQwYWIwMGE2MWMxMzU4ZmMuLmNmY2Q5ZjNjMDNjOWM2YTFh
M2QzNGVkMWNjOTc3N2E4MDcyN2U5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+
CiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+
Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9j
Zi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2lt
cG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpAQCAtMTE1LDE1ICsxMTUsMTAgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzJgogICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0
Q29va2llczsKICAgICB9CiAKLSAgICBhdXRvKiBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtk
ZWZhdWx0cyBzdHJpbmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdOwotICAg
IGlmIChtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICBVUkwgdXJsIHsgVVJMKCks
IG1hbnVhbFByZXZhbGVudFJlc291cmNlIH07Ci0gICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkg
ewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJodHRwOi8vIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCht
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICB1cmwgPSB7IFVSTCgpLCBidWls
ZGVyLnRvU3RyaW5nKCkgfTsKLSAgICAgICAgfQorICAgIGlmIChhdXRvIG1hbnVhbFByZXZhbGVu
dFJlc291cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1hbnVhbFByZXZhbGVudFJl
c291cmNlIl0pIHsKKyAgICAgICAgVVJMIHVybCB7IHsgfSwgbWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UgfTsKKyAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgdXJsID0geyB7
IH0sIG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgfTsKICAg
ICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9OwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428709</attachid>
            <date>2021-05-14 21:00:01 -0700</date>
            <delta_ts>2021-05-14 21:00:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210514210000.patch</filename>
            <type>text/plain</type>
            <size>24405</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ2ZDkwNDUwZTRkOTljNmIwOTEzODA1
NjAzMTU4NjE0Mjk0MTMwMTUuLmYzYzNhYmRlYjJlOWY3YjgwNTA2ZmIyOTM2Y2M2MGYyNjkwZWMy
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBv
cnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgKiB3dGYvUGxhdGZv
cm1GVFcuY21ha2U6IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0
dG8uCisgICAgICAgICogd3RmL1BsYXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjphcHBlbmQpOiBEZWxldGVkIHRoZSBvdmVybG9hZCBmb3IgQ0ZTdHJpbmdSZWYuCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBEZWxldGVkIHRoZSBzcGVjaWFsIGNhc2UgZm9y
IENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQuIFNwZWNpYWxpemVzIFN0cmluZ1R5cGVBZGFwdGVyIGZv
cgorICAgICAgICBib3RoIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyAqLiBJZiBDRlN0cmluZ0dl
dENTdHJpbmdQdHIgd29ya3MgZm9yIExhdGluLTEsIHRoZW4KKyAgICAgICAgZG9lcyB0aGUgOC1i
aXQgY29kZSBwYXRoLCBvdGhlcndpc2UgdGhlIDE2LWJpdC4KKworICAgICAgICAqIHd0Zi90ZXh0
L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbTogSW5jbHVkZSBTdHJpbmdDb25jYXRlbmF0ZUNGLmgs
IHNpbmNlIGl0J3MKKyAgICAgICAgbm93IG5lZWRlZCB0byB1c2UgQ0ZTdHJpbmdSZWYgd2l0aCBT
dHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE0ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBQcm9tb3RlIGAtW1dLV2ViVmlldyBfcGFnZUV4dGVuZGVkQmFja2dy
b3VuZENvbG9yXWAgU1BJIHRvIGAtW1dLV2ViVmlldyB1bmRlclBhZ2VCYWNrZ3JvdW5kQ29sb3Jd
YCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkY2QxMzYyYzdhZTE1MjNjNGMwNWQ0ZWQ1YTQ1NmQ5YzZlNDdm
ODZmLi5lZTQ3MThmNzk1NDMxNWFiODM1ZDc2ODQzZDc3ZDI1YmU3NGE0NzY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJv
bSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvciBjb25zdCk6IFR3ZWFrZWQKKyAgICAgICAgY29k
aW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ1NTKTogVXNlIHZhcmlh
ZGljIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCBpbnN0ZWFkIG9mIG1hbnkKKyAgICAgICAgc2VwYXJh
dGUgY2FsbHMuCisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUyBjb25zdCk6CisgICAgICAgIFR3ZWFrZWQgY29kaW5n
IHN0eWxlIGEgYml0LCBhbmQgdXNlIHZhcmlhZGljIFN0cmluQnVpbGRlcjo6YXBwZW5kIGNhbGxz
CisgICAgICAgIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIGFuZCBzdHJlYW1saW5lIHRo
ZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgRGl0dG8uIEFsc28g
cmVtb3ZlZCB1bm5lY2Vzc2FyeSBjaGVja3MgdGhhdCBzdHJpbmdzIGFyZSBlbXB0eSBiZWZvcmUg
YXBwZW5kaW5nLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZXNGb3JTZXNzaW9uIGNvbnN0KTogRGl0dG8uCisKIDIwMjEtMDUtMTQgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFByb21vdGUgYC1bV0tXZWJW
aWV3IF9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3JdYCBTUEkgdG8gYC1bV0tXZWJWaWV3IHVu
ZGVyUGFnZUJhY2tncm91bmRDb2xvcl1gIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxOGFmYmVlMTM4NDMxYzAz
ZDdiMmRiZGU3ODgyODVmNWRiOGEzN2E0Li43MzQ2NGY2MzBmOWY3OTQ0ZmY5YzY3MGVhMjMyOGZi
ZWI0N2FlYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTE0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBO
U1N0cmluZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRl
Q0YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVy
cyk6IFVzZSBtYWtlU3RyaW5nIGluc3RlYWQKKyAgICAgICAgb2YgU3RyaW5nQnVpbGRlci4KKwog
MjAyMS0wNS0xNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAg
UHJvbW90ZSBgLVtXS1dlYlZpZXcgX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcl1gIFNQSSB0
byBgLVtXS1dlYlZpZXcgdW5kZXJQYWdlQmFja2dyb3VuZENvbG9yXWAgQVBJCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYWUwNWU3MDE1ZTU2MmRkZDRkMjYz
ZGIxM2YwNzQ5NzMxMGNmZTJjLi5kMWZlMDY1YjNmOTk2NWVhODkyODE0ZDBkY2MwY2U3MmZjYzFh
MGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ5OCw2
ICs0OTgsNyBAQAogCQk5M0FDOTFBNzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTENoYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNCNUI0NEQyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXhOdW1iZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0I1QjQ1MDIyMTcxRUU5MDA0QjdBQTcgLyogTG9nZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRDAwMTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJp
bmdDb25jYXRlbmF0ZUNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTkxQ0Yy
MENBRUNFODAwQzUxQjhFIC8qIG9iamNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb2JqY1NQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0RERTkzMTFDREMwNTJEMDBGRDM0OTEgLyog
ZHlsZFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkeWxkU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBT
dHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmlu
Z1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI1LDYgKzkyNiw3IEBA
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBNUJBMTVGNzE4MjQzNUE2MDBBODJFNjkgLyogQXRvbVN0
cmluZ0ltcGxDRi5jcHAgKi8sCiAJCQkJQTVCQTE1RjgxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmlu
Z0NGLmNwcCAqLywKKwkJCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyogU3RyaW5nQ29uY2F0
ZW5hdGVDRi5oICovLAogCQkJCUE1QkExNUY5MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBs
Q0YuY3BwICovLAogCQkJCTkzOTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0Yu
Y3BwICovLAogCQkJCTFDQ0RCMTQ5MUU1NjY2MjYwMDZDNzNDMCAvKiBUZXh0QnJlYWtJdGVyYXRv
ckNGLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZSBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDk3MWZkZWIyNTk1MGVlYjc3
OGQ1ZDcwZTFhZGNmZDUyYWQ2YWQyOWUuLmJmYTEzZDFmZTgwYjMwN2E1MmIzZmRkYmVkYTFlNjk3
ZDM4ZTUzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC0zOSw2ICszOSw3IEBAIGlm
IChVU0VfQ0YpCiAgICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAgY2YvVHlwZUNhc3Rz
Q0YuaAogCisgICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCiAgICAgICAgIHRl
eHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9T
T1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZSBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGUyODA5OTc0MjcxOWM3NzlhYzNl
YWRmNDY2MTMzM2Q4NzhlZmRjZGQuLjdjZGNjNGIxNmJlMjJlNDc1ZTIyYTg2YWQwZTdhYzQ4ZGUx
ZGQxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC00MSw2ICs0MSw3IEBAIGxpc3Qo
QVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgc3BpL21hYy9NZXRhZGF0YVNQSS5oCiAK
KyAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgIHRleHQvY2YvVGV4dEJyZWFr
SXRlcmF0b3JDRi5oCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2lu
LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNmU4MGI5OWEw
NGE2YzZkZTRlMmZmNTlhN2I0ZWQ0YzhjNGFhZmFiOS4uOTBmZDI2ZDc4YzY5NGRiMzZkZDA4MjQx
ZTk4OGU0MmY1NTU3ZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4u
Y21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTM3LDYgKzM3
LDcgQEAgaWYgKFVTRV9DRikKICAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9U
eXBlQ2FzdHNDRi5oCiAKKyAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAg
ICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKICAgICApCiAgICAgbGlzdChBUFBF
TkQgV1RGX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDFl
MGMxOGFjOWQyMGVkODIwZmViODY4NWZjY2Y4MmIxMDYwMTE0MmQuLmZlMzYxMDYwOGRjMzNkN2Ni
MDhlNWZkNTc0OGRmOGRmN2QzZGUwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcApAQCAtMzc5LDIwICszNzksNiBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJh
Y3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB9CiB9
CiAKLSNpZiBVU0UoQ0YpCi0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVm
IHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGg6IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBv
cmFyeSBTdHJpbmcgd2hlbiBwb3NzaWJsZS4KLSAgICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENG
U3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkg
ewotICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihjaGFyYWN0ZXJzKSwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgYXBwZW5kKFN0cmluZyhzdHJpbmcpKTsKLX0KLQotI2VuZGlmCi0KIGJv
b2wgU3RyaW5nQnVpbGRlcjo6Y2FuU2hyaW5rKCkgY29uc3QKIHsKICAgICBpZiAoaGFzT3ZlcmZs
b3dlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA3MDE4YTFhYjdiZGJk
NzRlNmNiN2FmY2QzNTQ0ZWFlYjkzOTBiZTVlLi5iNWY5NTE2MTliNWVhYmVmNjExOGY1MzViMzM2
YTRiOWNlMjZjYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4LDEwICsyOCw4IEBACiAKICNp
bmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTEzNSwxMyArMTMzLDYgQEAgcHVibGljOgogICAg
ICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJp
bmdWaWV3Lmxlbmd0aCgpKTsKICAgICB9CiAKLSNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYXBwZW5kKENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmIFVTRShDRikgJiYg
ZGVmaW5lZChfX09CSkNfXykKLSAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFw
cGVuZCgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsgfQotI2VuZGlmCi0gICAgCiAgICAg
dm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5nOjpNYXhMZW5ndGgpCiAgICAgewogICAgICAgICBp
ZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9T
dHJpbmdDb25jYXRlbmF0ZUNGLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA4ZjEwNDk4MzQyMjc4MzMwNGJkMTBj
NTk0ZTU0YWQwMzYxNDNmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
Y2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisK
KyNpZiBVU0UoQ0YpCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmlu
Z1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0
ZXIoQ0ZTdHJpbmdSZWYpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nID8gQ0ZTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcpIDogMDsgfQorICAgIGJvb2wgaXM4
Qml0KCkgY29uc3QgeyByZXR1cm4gIW1fc3RyaW5nIHx8IENGU3RyaW5nR2V0Q1N0cmluZ1B0ciht
X3N0cmluZywga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEpOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBDRlN0cmluZ1JlZiBtX3N0cmluZzsKK307CisKK2lubGluZSBTdHJp
bmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj46OlN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVm
IHN0cmluZykKKyAgICA6IG1fc3RyaW5nIHsgc3RyaW5nIH0KK3sKK30KKwordGVtcGxhdGU8PiBp
bmxpbmUgdm9pZCBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj46OndyaXRlVG88TENoYXI+
KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBpZiAobV9zdHJpbmcpCisgICAgICAg
IHN0ZDo6bWVtY3B5KGRlc3RpbmF0aW9uLCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcs
IGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSwgQ0ZTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcp
KTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmlu
Z1JlZj46OndyaXRlVG88VUNoYXI+KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBD
RlN0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0
TGVuZ3RoKG1fc3RyaW5nKSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3RpbmF0aW9u
KSk7Cit9CisKKyNpZmRlZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVB
ZGFwdGVyPE5TU3RyaW5nICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVm
PiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmluZykKKyAg
ICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENGU3RyaW5n
UmVmKXN0cmluZykKKyAgICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2VuZGlmIC8v
IFVTRShDRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVh
bUNvY29hLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0K
aW5kZXggYzc0YmY5Y2NmZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2YjlkM2Y0
MTZhZDI0OTczNDY0NWRmZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0IDx3dGYv
dGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBUZXh0
U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwCmluZGV4IDczYzgwMWI5MzhjN2E4ZDhmNGQ0ZDc1NTNlYWU2Zjc1MTNhMTgxNWUuLjJhYmI1
MTIxMmFjMDVlYzFkMDk5NTZmNDRmNThmMjQyMTAyZjRkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC00OCw2
ICs0OCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5o
IgpAQCAtMzA4LDEyICszMDksMTEgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MoKSBjb25zdAogQ29sb3IgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9ydGFudCkgY29uc3QK
IHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWlu
UHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZv
cmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikp
OwotICAgIENvbG9yIHRleHRDb2xvcihjb2xvci5nZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29sb3Iu
aXNWYWxpZCgpKQorICAgIENvbG9yIHRleHRDb2xvcihhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFu
Y2VDb3B5Rm9yZWdyb3VuZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJl
aGF2aW9yKSkuZ2V0KCkpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkgewogICAgICAg
ICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNp
ZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWNv
bnRhaW5lci4KICAgICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAorICAgIH0K
ICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9y
VXNlVmFsdWU7CiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldEZv
cmVncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9y
KTsKICAgICBpZiAoIWltcG9ydGFudCkKQEAgLTMyNSwyMSArMzI1LDE0IEBAIFN0cmluZyBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdAog
ewogICAgIGJvb2wgaW1wb3J0YW50OwogICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRpb25zVGV4
dENvbG9yKGltcG9ydGFudCk7Ci0KICAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlDU1Mo
Q1NTUHJvcGVydHlDb2xvciwgdGV4dENvbG9yLCBpbXBvcnRhbnQpOwogfQogCiBzdGF0aWMgdm9p
ZCBhcHBlbmRDU1MoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgQ1NTUHJvcGVydHlJRCBpZCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgYnVpbGRlci5hcHBlbmQo
Z2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzonKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCh2YWx1ZSk7Ci0gICAgaWYgKGltcG9ydGFudCkKLSAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7
Jyk7CisgICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSwgJzonLCB2
YWx1ZSwgaW1wb3J0YW50ID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogfQogICAgIAogU3RyaW5n
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjp3aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVz
Q1NTKCkgY29uc3QKQEAgLTM3OSw3ICszNzIsNiBAQCBib29sIENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uU3Ryb2tlV2lkdGhGb3JGb250KGZsb2F0IGZvbnRTaXplLCBjbwog
ICAgIC8vIFNpbmNlIG9ubHkgaGFsZiBvZiB0aGUgc3Ryb2tlIGlzIHZpc2libGUgYmVjYXVzZSB0
aGUgc3Ryb2tlIGlzIGRyYXduIGJlZm9yZSB0aGUgZmlsbCwgd2UgZG91YmxlIHRoZSBzdHJva2Ug
d2lkdGggaGVyZS4KICAgICBzdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoUHQgKiAyOwogICAgIGlt
cG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1
ZTsKLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE4LDI0ICs0MTAsMTcgQEAgU3Ry
aW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0RlZmF1bHRGb250Q1NT
KCkgY29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7CiAg
ICAgCi0gICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnQgPSBhZG9wdENGKE1B
Q2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0aW9uQXBw
ZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VGb250U3R5
bGVEZWZhdWx0KSk7CisgICAgYXV0byBmb250ID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNl
Q29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2Vy
LCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVsdCkpOwogICAg
IGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZXRhaW5Q
dHI8Q0ZUeXBlUmVmPiBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0
ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOworICAgIGF1dG8gbmFtZSA9IGFk
b3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udE5h
bWVBdHRyaWJ1dGUpKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIAotICAgIGJ1aWxkZXIuYXBw
ZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsKLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIjogXCIiKTsKLSAgICBidWlsZGVyLmFwcGVuZChzdGF0aWNf
Y2FzdDxDRlN0cmluZ1JlZj4obmFtZS5nZXQoKSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7
Ci0KLSAgICBhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkFycmF5UmVm
PihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250Q2FzY2Fk
ZUxpc3RBdHRyaWJ1dGUpKSk7Ci0KLSAgICBpZiAoY2FzY2FkZUxpc3QpIHsKKyAgICBidWlsZGVy
LmFwcGVuZCgiZm9udC1mYW1pbHk6IFwiIiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG5hbWUu
Z2V0KCkpLCAnIicpOworICAgIGlmIChhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0aWNf
Y2FzdDxDRkFycmF5UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgp
LCBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUpKSkpIHsKICAgICAgICAgZm9yIChDRkluZGV4
IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGNhc2NhZGVMaXN0LmdldCgpKTsgaSsrKSB7CiAg
ICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3JpcHRv
clJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjYXNjYWRlTGlzdC5nZXQoKSwgaSkpOwogICAg
ICAgICAgICAgaWYgKCFmb250Q2FzY2FkZSkKQEAgLTQ0MywxNiArNDI4LDEwIEBAIFN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNv
bnN0CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlTmFtZSA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udENhc2NhZGUsIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7
CiAgICAgICAgICAgICBpZiAoIWZvbnRDYXNjYWRlTmFtZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwiIik7Ci0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2NhZGVOYW1lLmdl
dCgpKSk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiwgXCIiLCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2NhZGVO
YW1lLmdldCgpKSwgJyInKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoYmVoYXZp
b3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKQotICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiAhaW1wb3J0YW50Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzsn
KTsKLSAgICAKKyAgICBidWlsZGVyLmFwcGVuZChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFy
YW5jZUJlaGF2aW9yVXNlVmFsdWUgPyAiICFpbXBvcnRhbnQ7IiA6ICI7Iik7CiAgICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApAQCAtNTYxLDQzICs1NDAsMTggQEAgU3RyaW5nIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgp
IGNvbnN0CiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKICAgICBpZiAo
IU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXM6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7Ci0gICAgCisKICAgICBT
dHJpbmcgY2FwdGlvbnNDb2xvciA9IGNhcHRpb25zVGV4dENvbG9yQ1NTKCk7CiAgICAgU3RyaW5n
IGVkZ2VTdHlsZSA9IGNhcHRpb25zVGV4dEVkZ2VDU1MoKTsKICAgICBTdHJpbmcgZm9udE5hbWUg
PSBjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCk7CiAgICAgU3RyaW5nIGJhY2tncm91bmQgPSBjYXB0
aW9uc0JhY2tncm91bmRDU1MoKTsKLSAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8ICFj
YXB0aW9uc0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9udE5h
bWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZExpdGVyYWwoIiA6OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBl
bmQoVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2FwdGlvbnNP
dmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJh
Y2tncm91bmQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hl
ZXQuYXBwZW5kKGJhY2tncm91bmQpOwotICAgICAgICBpZiAoIWNhcHRpb25zQ29sb3IuaXNFbXB0
eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGNhcHRp
b25zQ29sb3IpOwotICAgICAgICBpZiAoIWVkZ2VTdHlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoZWRnZVN0eWxlKTsKLSAgICAgICAg
aWYgKCFmb250TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5
bGVTaGVldC5hcHBlbmQoZm9udE5hbWUpOwotICAgICAgICAKLSAgICAgICAgY2FwdGlvbnNPdmVy
cmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQotICAgIAorICAgIGlmICghYmFja2dy
b3VuZC5pc0VtcHR5KCkgfHwgIWNhcHRpb25zQ29sb3IuaXNFbXB0eSgpIHx8ICFlZGdlU3R5bGUu
aXNFbXB0eSgpIHx8ICFmb250TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25zT3ZlcnJp
ZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6IiwgVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1ZG9J
ZCgpLCAneycsIGJhY2tncm91bmQsIGNhcHRpb25zQ29sb3IsIGVkZ2VTdHlsZSwgZm9udE5hbWUs
ICd9Jyk7CisKICAgICBTdHJpbmcgd2luZG93Q29sb3IgPSBjYXB0aW9uc1dpbmRvd0NTUygpOwog
ICAgIFN0cmluZyB3aW5kb3dDb3JuZXJSYWRpdXMgPSB3aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVz
Q1NTKCk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5lclJh
ZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBw
ZW5kTGl0ZXJhbCgiIDo6Iik7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFw
cGVuZChUZXh0VHJhY2tDdWU6OmN1ZUJhY2tkcm9wU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgICAg
IGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgneycpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJy
aWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29sb3IpOwotICAgICAgICBpZiAoIXdpbmRvd0Nv
cm5lclJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHls
ZVNoZWV0LmFwcGVuZCh3aW5kb3dDb3JuZXJSYWRpdXMpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ30nKTsKLSAgICB9Cisg
ICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5lclJhZGl1cy5pc0Vt
cHR5KCkpCisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6Iiwg
VGV4dFRyYWNrQ3VlOjpjdWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCksICd7Jywgd2luZG93Q29s
b3IsIHdpbmRvd0Nvcm5lclJhZGl1cywgJ30nKTsKICNlbmRpZiAvLyBIQVZFKE1FRElBX0FDQ0VT
U0lCSUxJVFlfRlJBTUVXT1JLKQogCiAgICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlU2V0dGluZyBzdHlsZSB0bzpc
biVzIiwgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IDYwZTY3MGYyMDY2
ZDYwNThiMmU1ZWI3OWViN2RjMzBjNWNiNGIyOGUuLjExYzlhMjM4M2NkNmM4YzMwMWExYTA4ZGNk
ZWFmYWU3OWQyNjJiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpA
QCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2NvY29h
L1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1w
b3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKIEBpbnRlcmZhY2UgTlNV
UkwgKCkKIC0gKENGVVJMUmVmKV9jZnVybDsKQEAgLTM0OSwzMSArMzUwLDIzIEBAIHN0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Npb24o
Y29uc3QgVVJMJiBmaXJzCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAg
IFJldGFpblB0cjxOU0FycmF5PiBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5LCBz
YW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3VsZFJl
bGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKLSAgICBpZiAoIWNvb2tpZXMgfHwgIVtjb29r
aWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVy
biBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3Vs
ZCBjcmVhdGUgYmVsb3cuCisgICAgYXV0byBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBh
cnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNo
b3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKKyAgICBpZiAoIVtjb29raWVzIGNv
dW50XSkKKyAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51
bGwgc3RyaW5nOyBTdHJpbmdCdWlsZGVyIGJlbG93IHdvdWxkIGNyZWF0ZSBhbiBlbXB0eSBvbmUu
CiAKICAgICBTdHJpbmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwogICAgIGJvb2wgZGlkQWNjZXNz
U2VjdXJlQ29va2llcyA9IGZhbHNlOwogICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4g
Y29va2llcy5nZXQoKSkgewogICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCiAg
ICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAmJiBb
Y29va2llIGlzSFRUUE9ubHldKQogICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgaWYg
KFtjb29raWUgaXNTZWN1cmVdKSB7CiAgICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29raWVz
ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRl
U2VjdXJlQ29va2llczo6Tm8pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
LQotICAgICAgICBpZiAoIWNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNv
b2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1aWxk
ZXIuYXBwZW5kKFtjb29raWUgbmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQo
Jz0nKTsKLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsKKyAg
ICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKGNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSA/ICIi
IDogIjsgIiwgW2Nvb2tpZSBuYW1lXSwgJz0nLCBbY29va2llIHZhbHVlXSk7CiAgICAgfQogICAg
IHJldHVybiB7IGNvb2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNvb2tp
ZXMgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IGYyZDkyZjE5
N2QxN2NhMjk3MGQwN2RjMTQwYWIwMGE2MWMxMzU4ZmMuLmNmY2Q5ZjNjMDNjOWM2YTFhM2QzNGVk
MWNjOTc3N2E4MDcyN2U5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0K
QEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1w
b3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+Ci0jaW1w
b3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9jZi9TdHJp
bmdDb25jYXRlbmF0ZUNGLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCA8
VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpAQCAtMTE1LDE1ICsxMTUsMTAgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzJgogICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUg
PSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2ll
czsKICAgICB9CiAKLSAgICBhdXRvKiBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtkZWZhdWx0
cyBzdHJpbmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdOwotICAgIGlmICht
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICBVUkwgdXJsIHsgVVJMKCksIG1hbnVh
bFByZXZhbGVudFJlc291cmNlIH07Ci0gICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkgewotICAg
ICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJodHRwOi8vIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICB1cmwgPSB7IFVSTCgpLCBidWlsZGVyLnRv
U3RyaW5nKCkgfTsKLSAgICAgICAgfQorICAgIGlmIChhdXRvIG1hbnVhbFByZXZhbGVudFJlc291
cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1hbnVhbFByZXZhbGVudFJlc291cmNl
Il0pIHsKKyAgICAgICAgVVJMIHVybCB7IHsgfSwgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgfTsK
KyAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgdXJsID0geyB7IH0sIG1h
a2VTdHJpbmcoImh0dHA6Ly8iLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgfTsKICAgICAgICAg
aWYgKHVybC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
OwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428710</attachid>
            <date>2021-05-14 21:00:33 -0700</date>
            <delta_ts>2021-05-14 22:19:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210514210032.patch</filename>
            <type>text/plain</type>
            <size>24428</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ2ZDkwNDUwZTRkOTljNmIwOTEzODA1
NjAzMTU4NjE0Mjk0MTMwMTUuLmYzYzNhYmRlYjJlOWY3YjgwNTA2ZmIyOTM2Y2M2MGYyNjkwZWMy
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBv
cnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgKiB3dGYvUGxhdGZv
cm1GVFcuY21ha2U6IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0
dG8uCisgICAgICAgICogd3RmL1BsYXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjphcHBlbmQpOiBEZWxldGVkIHRoZSBvdmVybG9hZCBmb3IgQ0ZTdHJpbmdSZWYuCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBEZWxldGVkIHRoZSBzcGVjaWFsIGNhc2UgZm9y
IENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQuIFNwZWNpYWxpemVzIFN0cmluZ1R5cGVBZGFwdGVyIGZv
cgorICAgICAgICBib3RoIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyAqLiBJZiBDRlN0cmluZ0dl
dENTdHJpbmdQdHIgd29ya3MgZm9yIExhdGluLTEsIHRoZW4KKyAgICAgICAgZG9lcyB0aGUgOC1i
aXQgY29kZSBwYXRoLCBvdGhlcndpc2UgdGhlIDE2LWJpdC4KKworICAgICAgICAqIHd0Zi90ZXh0
L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbTogSW5jbHVkZSBTdHJpbmdDb25jYXRlbmF0ZUNGLmgs
IHNpbmNlIGl0J3MKKyAgICAgICAgbm93IG5lZWRlZCB0byB1c2UgQ0ZTdHJpbmdSZWYgd2l0aCBT
dHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE0ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBQcm9tb3RlIGAtW1dLV2ViVmlldyBfcGFnZUV4dGVuZGVkQmFja2dy
b3VuZENvbG9yXWAgU1BJIHRvIGAtW1dLV2ViVmlldyB1bmRlclBhZ2VCYWNrZ3JvdW5kQ29sb3Jd
YCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkY2QxMzYyYzdhZTE1MjNjNGMwNWQ0ZWQ1YTQ1NmQ5YzZlNDdm
ODZmLi5lZTQ3MThmNzk1NDMxNWFiODM1ZDc2ODQzZDc3ZDI1YmU3NGE0NzY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJv
bSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvciBjb25zdCk6IFR3ZWFrZWQKKyAgICAgICAgY29k
aW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ1NTKTogVXNlIHZhcmlh
ZGljIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCBpbnN0ZWFkIG9mIG1hbnkKKyAgICAgICAgc2VwYXJh
dGUgY2FsbHMuCisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUyBjb25zdCk6CisgICAgICAgIFR3ZWFrZWQgY29kaW5n
IHN0eWxlIGEgYml0LCBhbmQgdXNlIHZhcmlhZGljIFN0cmluQnVpbGRlcjo6YXBwZW5kIGNhbGxz
CisgICAgICAgIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIGFuZCBzdHJlYW1saW5lIHRo
ZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgRGl0dG8uIEFsc28g
cmVtb3ZlZCB1bm5lY2Vzc2FyeSBjaGVja3MgdGhhdCBzdHJpbmdzIGFyZSBlbXB0eSBiZWZvcmUg
YXBwZW5kaW5nLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZXNGb3JTZXNzaW9uIGNvbnN0KTogRGl0dG8uCisKIDIwMjEtMDUtMTQgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFByb21vdGUgYC1bV0tXZWJW
aWV3IF9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3JdYCBTUEkgdG8gYC1bV0tXZWJWaWV3IHVu
ZGVyUGFnZUJhY2tncm91bmRDb2xvcl1gIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxOGFmYmVlMTM4NDMxYzAz
ZDdiMmRiZGU3ODgyODVmNWRiOGEzN2E0Li43MzQ2NGY2MzBmOWY3OTQ0ZmY5YzY3MGVhMjMyOGZi
ZWI0N2FlYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTE0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBO
U1N0cmluZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRl
Q0YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVy
cyk6IFVzZSBtYWtlU3RyaW5nIGluc3RlYWQKKyAgICAgICAgb2YgU3RyaW5nQnVpbGRlci4KKwog
MjAyMS0wNS0xNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAg
UHJvbW90ZSBgLVtXS1dlYlZpZXcgX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcl1gIFNQSSB0
byBgLVtXS1dlYlZpZXcgdW5kZXJQYWdlQmFja2dyb3VuZENvbG9yXWAgQVBJCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYWUwNWU3MDE1ZTU2MmRkZDRkMjYz
ZGIxM2YwNzQ5NzMxMGNmZTJjLi5kMWZlMDY1YjNmOTk2NWVhODkyODE0ZDBkY2MwY2U3MmZjYzFh
MGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ5OCw2
ICs0OTgsNyBAQAogCQk5M0FDOTFBNzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTENoYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNCNUI0NEQyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXhOdW1iZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0I1QjQ1MDIyMTcxRUU5MDA0QjdBQTcgLyogTG9nZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRDAwMTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJp
bmdDb25jYXRlbmF0ZUNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTkxQ0Yy
MENBRUNFODAwQzUxQjhFIC8qIG9iamNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb2JqY1NQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0RERTkzMTFDREMwNTJEMDBGRDM0OTEgLyog
ZHlsZFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkeWxkU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBT
dHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmlu
Z1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI1LDYgKzkyNiw3IEBA
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBNUJBMTVGNzE4MjQzNUE2MDBBODJFNjkgLyogQXRvbVN0
cmluZ0ltcGxDRi5jcHAgKi8sCiAJCQkJQTVCQTE1RjgxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmlu
Z0NGLmNwcCAqLywKKwkJCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyogU3RyaW5nQ29uY2F0
ZW5hdGVDRi5oICovLAogCQkJCUE1QkExNUY5MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBs
Q0YuY3BwICovLAogCQkJCTkzOTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0Yu
Y3BwICovLAogCQkJCTFDQ0RCMTQ5MUU1NjY2MjYwMDZDNzNDMCAvKiBUZXh0QnJlYWtJdGVyYXRv
ckNGLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZSBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDk3MWZkZWIyNTk1MGVlYjc3
OGQ1ZDcwZTFhZGNmZDUyYWQ2YWQyOWUuLmJmYTEzZDFmZTgwYjMwN2E1MmIzZmRkYmVkYTFlNjk3
ZDM4ZTUzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC0zOSw2ICszOSw3IEBAIGlm
IChVU0VfQ0YpCiAgICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAgY2YvVHlwZUNhc3Rz
Q0YuaAogCisgICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCiAgICAgICAgIHRl
eHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9T
T1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZSBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGUyODA5OTc0MjcxOWM3NzlhYzNl
YWRmNDY2MTMzM2Q4NzhlZmRjZGQuLjdjZGNjNGIxNmJlMjJlNDc1ZTIyYTg2YWQwZTdhYzQ4ZGUx
ZGQxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC00MSw2ICs0MSw3IEBAIGxpc3Qo
QVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgc3BpL21hYy9NZXRhZGF0YVNQSS5oCiAK
KyAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgIHRleHQvY2YvVGV4dEJyZWFr
SXRlcmF0b3JDRi5oCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2lu
LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNmU4MGI5OWEw
NGE2YzZkZTRlMmZmNTlhN2I0ZWQ0YzhjNGFhZmFiOS4uOTBmZDI2ZDc4YzY5NGRiMzZkZDA4MjQx
ZTk4OGU0MmY1NTU3ZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4u
Y21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTM3LDYgKzM3
LDcgQEAgaWYgKFVTRV9DRikKICAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9U
eXBlQ2FzdHNDRi5oCiAKKyAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAg
ICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKICAgICApCiAgICAgbGlzdChBUFBF
TkQgV1RGX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDFl
MGMxOGFjOWQyMGVkODIwZmViODY4NWZjY2Y4MmIxMDYwMTE0MmQuLmZlMzYxMDYwOGRjMzNkN2Ni
MDhlNWZkNTc0OGRmOGRmN2QzZGUwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcApAQCAtMzc5LDIwICszNzksNiBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJh
Y3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB9CiB9
CiAKLSNpZiBVU0UoQ0YpCi0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVm
IHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGg6IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBv
cmFyeSBTdHJpbmcgd2hlbiBwb3NzaWJsZS4KLSAgICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENG
U3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkg
ewotICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihjaGFyYWN0ZXJzKSwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgYXBwZW5kKFN0cmluZyhzdHJpbmcpKTsKLX0KLQotI2VuZGlmCi0KIGJv
b2wgU3RyaW5nQnVpbGRlcjo6Y2FuU2hyaW5rKCkgY29uc3QKIHsKICAgICBpZiAoaGFzT3ZlcmZs
b3dlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA3MDE4YTFhYjdiZGJk
NzRlNmNiN2FmY2QzNTQ0ZWFlYjkzOTBiZTVlLi5iNWY5NTE2MTliNWVhYmVmNjExOGY1MzViMzM2
YTRiOWNlMjZjYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4LDEwICsyOCw4IEBACiAKICNp
bmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTEzNSwxMyArMTMzLDYgQEAgcHVibGljOgogICAg
ICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJp
bmdWaWV3Lmxlbmd0aCgpKTsKICAgICB9CiAKLSNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYXBwZW5kKENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmIFVTRShDRikgJiYg
ZGVmaW5lZChfX09CSkNfXykKLSAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFw
cGVuZCgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsgfQotI2VuZGlmCi0gICAgCiAgICAg
dm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5nOjpNYXhMZW5ndGgpCiAgICAgewogICAgICAgICBp
ZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9T
dHJpbmdDb25jYXRlbmF0ZUNGLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJhODFkMjI2ZDczNGIwOThjNjIwYTBk
YWE2OTJmYzI1ODg3MGRiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
Y2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisK
KyNpZiBVU0UoQ0YpCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmlu
Z1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0
ZXIoQ0ZTdHJpbmdSZWYpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nID8gQ0ZTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcpIDogMDsgfQorICAgIGJvb2wgaXM4
Qml0KCkgY29uc3QgeyByZXR1cm4gIW1fc3RyaW5nIHx8IENGU3RyaW5nR2V0Q1N0cmluZ1B0ciht
X3N0cmluZywga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEpOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBDRlN0cmluZ1JlZiBtX3N0cmluZzsKK307CisKK2lubGluZSBTdHJp
bmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj46OlN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVm
IHN0cmluZykKKyAgICA6IG1fc3RyaW5nIHsgc3RyaW5nIH0KK3sKK30KKwordGVtcGxhdGU8PiBp
bmxpbmUgdm9pZCBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj46OndyaXRlVG88TENoYXI+
KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBpZiAobV9zdHJpbmcpCisgICAgICAg
IHN0ZDo6bWVtY3B5KGRlc3RpbmF0aW9uLCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcs
IGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSwgQ0ZTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcp
KTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmlu
Z1JlZj46OndyaXRlVG88VUNoYXI+KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBp
ZiAobV9zdHJpbmcpCisgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhtX3N0cmluZywgQ0ZS
YW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcpKSwgcmVpbnRlcnByZXRfY2Fz
dDxVbmlDaGFyKj4oZGVzdGluYXRpb24pKTsKK30KKworI2lmZGVmIF9fT0JKQ19fCisKK3RlbXBs
YXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8TlNTdHJpbmcgKj4gOiBwdWJsaWMgU3RyaW5n
VHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRl
cihOU1N0cmluZyAqc3RyaW5nKQorICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5n
UmVmPigoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKQorICAgIHsKKyAgICB9Cit9OworCisj
ZW5kaWYKKworfQorCisjZW5kaWYgLy8gVVNFKENGKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2Nv
Y29hL1RleHRTdHJlYW1Db2NvYS5tbQppbmRleCBjNzRiZjljY2ZlMzRhNzNlYmRlNDUzMmVjYzM5
NGRiMjY1MjlhNzA3Li5lODZiOWQzZjQxNmFkMjQ5NzM0NjQ1ZGZlZmVlMGVjOTIyYmE0ZjFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbQor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbQpAQCAtMjEs
NiArMjEsOCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKKyNpbXBvcnQgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KKwog
bmFtZXNwYWNlIFdURiB7CiAKIFRleHRTdHJlYW0mIFRleHRTdHJlYW06Om9wZXJhdG9yPDwoaWQ8
TlNPYmplY3Q+IG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKaW5kZXggNzNjODAxYjkzOGM3YThkOGY0ZDRkNzU1
M2VhZTZmNzUxM2ExODE1ZS4uMmFiYjUxMjEyYWMwNWVjMWQwOTk1NmY0NGY1OGYyNDIxMDJmNGQ0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L2Nm
L1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1w
b3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCkBAIC0zMDgsMTIgKzMwOSwxMSBAQCBTdHJpbmcgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zQmFja2dyb3VuZENTUygpIGNvbnN0
CiBDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3Io
Ym9vbCYgaW1wb3J0YW50KSBjb25zdAogewogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlv
ciBiZWhhdmlvcjsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKE1B
Q2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9yZWdyb3VuZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNl
RG9tYWluVXNlciwgJmJlaGF2aW9yKSk7Ci0gICAgQ29sb3IgdGV4dENvbG9yKGNvbG9yLmdldCgp
KTsKLSAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpCisgICAgQ29sb3IgdGV4dENvbG9yKGFk
b3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3Ioa01BQ2FwdGlvbkFw
cGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKS5nZXQoKSk7CisgICAgaWYgKCF0ZXh0Q29s
b3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgZGVmYXVsdCB2YWx1ZSBtdXN0IGJlIHRo
ZSBzYW1lIGFzIHRoZSBvbmUgc3BlY2lmaWVkIGluIG1lZGlhQ29udHJvbHMuY3NzIGZvciAtd2Vi
a2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyLgogICAgICAgICB0ZXh0Q29sb3IgPSBDb2xv
cjo6d2hpdGU7Ci0gICAgCisgICAgfQogICAgIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNh
cHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBN
QUNhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFu
Y2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQpAQCAtMzI1LDIx
ICszMjUsMTQgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9u
c1RleHRDb2xvckNTUygpIGNvbnN0CiB7CiAgICAgYm9vbCBpbXBvcnRhbnQ7CiAgICAgQ29sb3Ig
dGV4dENvbG9yID0gY2FwdGlvbnNUZXh0Q29sb3IoaW1wb3J0YW50KTsKLQogICAgIGlmICghdGV4
dENvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KICAgICBy
ZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUNvbG9yLCB0ZXh0Q29sb3IsIGltcG9y
dGFudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwcGVuZENTUyhTdHJpbmdCdWlsZGVyJiBidWlsZGVy
LCBDU1NQcm9wZXJ0eUlEIGlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCkK
IHsKLSAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoaWQpKTsKLSAgICBi
dWlsZGVyLmFwcGVuZCgnOicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlKTsKLSAgICBpZiAo
aW1wb3J0YW50KQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAhaW1wb3J0YW50Iik7
Ci0gICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKKyAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0
eU5hbWVTdHJpbmcoaWQpLCAnOicsIHZhbHVlLCBpbXBvcnRhbnQgPyAiICFpbXBvcnRhbnQ7IiA6
ICI7Iik7CiB9CiAgICAgCiBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6Ondp
bmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKSBjb25zdApAQCAtMzc5LDcgKzM3Miw2IEBAIGJv
b2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25TdHJva2VXaWR0aEZvckZv
bnQoZmxvYXQgZm9udFNpemUsIGNvCiAgICAgLy8gU2luY2Ugb25seSBoYWxmIG9mIHRoZSBzdHJv
a2UgaXMgdmlzaWJsZSBiZWNhdXNlIHRoZSBzdHJva2UgaXMgZHJhd24gYmVmb3JlIHRoZSBmaWxs
LCB3ZSBkb3VibGUgdGhlIHN0cm9rZSB3aWR0aCBoZXJlLgogICAgIHN0cm9rZVdpZHRoID0gc3Ry
b2tlV2lkdGhQdCAqIDI7CiAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFw
cGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC00MTgsMjQgKzQxMCwxNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKSBjb25zdAogewogICAgIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VCZWhhdmlvciBiZWhhdmlvcjsKICAgICAKLSAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRv
clJlZj4gZm9udCA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb250RGVzY3JpcHRv
ckZvclN0eWxlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yLCBrTUFD
YXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZURlZmF1bHQpKTsKKyAgICBhdXRvIGZvbnQgPSBhZG9w
dENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0
aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VG
b250U3R5bGVEZWZhdWx0KSk7CiAgICAgaWYgKCFmb250KQogICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKIAotICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IG5hbWUgPSBhZG9wdENGKENURm9u
dERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnROYW1lQXR0cmlidXRl
KSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0
ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOwogICAgIGlmICghbmFtZSkKICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgCi0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKENTU1Byb3Bl
cnR5Rm9udEZhbWlseSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOiBcIiIpOwotICAg
IGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihuYW1lLmdldCgpKSk7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoJyInKTsKLQotICAgIGF1dG8gY2FzY2FkZUxpc3QgPSBhZG9wdENG
KHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZv
bnQuZ2V0KCksIGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSkpKTsKLQotICAgIGlmIChjYXNj
YWRlTGlzdCkgeworICAgIGJ1aWxkZXIuYXBwZW5kKCJmb250LWZhbWlseTogXCIiLCBzdGF0aWNf
Y2FzdDxDRlN0cmluZ1JlZj4obmFtZS5nZXQoKSksICciJyk7CisgICAgaWYgKGF1dG8gY2FzY2Fk
ZUxpc3QgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udERlc2NyaXB0b3JD
b3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSkpKSkg
ewogICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoY2FzY2Fk
ZUxpc3QuZ2V0KCkpOyBpKyspIHsKICAgICAgICAgICAgIGF1dG8gZm9udENhc2NhZGUgPSBzdGF0
aWNfY2FzdDxDVEZvbnREZXNjcmlwdG9yUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNhc2Nh
ZGVMaXN0LmdldCgpLCBpKSk7CiAgICAgICAgICAgICBpZiAoIWZvbnRDYXNjYWRlKQpAQCAtNDQz
LDE2ICs0MjgsMTAgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0
aW9uc0RlZmF1bHRGb250Q1NTKCkgY29uc3QKICAgICAgICAgICAgIGF1dG8gZm9udENhc2NhZGVO
YW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250Q2FzY2FkZSwg
a0NURm9udE5hbWVBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgIGlmICghZm9udENhc2NhZGVOYW1l
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiwgXCIiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5n
UmVmPihmb250Q2FzY2FkZU5hbWUuZ2V0KCkpKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCciJyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBcIiIsIHN0YXRpY19jYXN0PENG
U3RyaW5nUmVmPihmb250Q2FzY2FkZU5hbWUuZ2V0KCkpLCAnIicpOwogICAgICAgICB9CiAgICAg
fQotICAgIAotICAgIGlmIChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9y
VXNlVmFsdWUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICFpbXBvcnRhbnQiKTsK
LSAgICBidWlsZGVyLmFwcGVuZCgnOycpOwotICAgIAorICAgIGJ1aWxkZXIuYXBwZW5kKGJlaGF2
aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSA/ICIgIWltcG9ydGFu
dDsiIDogIjsiKTsKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCkBAIC01NjEs
NDMgKzU0MCwxOCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRp
b25zU3R5bGVTaGVldE92ZXJyaWRlKCkgY29uc3QKICNpZiBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJ
VFlfRlJBTUVXT1JLKQogICAgIGlmICghTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQogICAg
ICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbnNTdHlsZVNoZWV0T3Zl
cnJpZGUoKTsKLSAgICAKKwogICAgIFN0cmluZyBjYXB0aW9uc0NvbG9yID0gY2FwdGlvbnNUZXh0
Q29sb3JDU1MoKTsKICAgICBTdHJpbmcgZWRnZVN0eWxlID0gY2FwdGlvbnNUZXh0RWRnZUNTUygp
OwogICAgIFN0cmluZyBmb250TmFtZSA9IGNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKTsKICAgICBT
dHJpbmcgYmFja2dyb3VuZCA9IGNhcHRpb25zQmFja2dyb3VuZENTUygpOwotICAgIGlmICghYmFj
a2dyb3VuZC5pc0VtcHR5KCkgfHwgIWNhcHRpb25zQ29sb3IuaXNFbXB0eSgpIHx8ICFlZGdlU3R5
bGUuaXNFbXB0eSgpIHx8ICFmb250TmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FwdGlvbnNP
dmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kTGl0ZXJhbCgiIDo6Iik7Ci0gICAgICAgIGNhcHRpb25z
T3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChUZXh0VHJhY2tDdWU6OmN1ZVNoYWRvd1BzZXVkb0lk
KCkpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ3snKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmICghYmFja2dyb3VuZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBj
YXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoYmFja2dyb3VuZCk7Ci0gICAgICAgIGlm
ICghY2FwdGlvbnNDb2xvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRl
U3R5bGVTaGVldC5hcHBlbmQoY2FwdGlvbnNDb2xvcik7Ci0gICAgICAgIGlmICghZWRnZVN0eWxl
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZChlZGdlU3R5bGUpOwotICAgICAgICBpZiAoIWZvbnROYW1lLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChmb250TmFtZSk7Ci0gICAgICAg
IAotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ30nKTsKLSAgICB9
Ci0gICAgCisgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAhY2FwdGlvbnNDb2xvci5p
c0VtcHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnROYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCIgOjoiLCBUZXh0VHJh
Y2tDdWU6OmN1ZVNoYWRvd1BzZXVkb0lkKCksICd7JywgYmFja2dyb3VuZCwgY2FwdGlvbnNDb2xv
ciwgZWRnZVN0eWxlLCBmb250TmFtZSwgJ30nKTsKKwogICAgIFN0cmluZyB3aW5kb3dDb2xvciA9
IGNhcHRpb25zV2luZG93Q1NTKCk7CiAgICAgU3RyaW5nIHdpbmRvd0Nvcm5lclJhZGl1cyA9IHdp
bmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKTsKLSAgICBpZiAoIXdpbmRvd0NvbG9yLmlzRW1w
dHkoKSB8fCAhd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkgewotICAgICAgICBjYXB0aW9u
c092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmRMaXRlcmFsKCIgOjoiKTsKLSAgICAgICAgY2FwdGlv
bnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZTo6Y3VlQmFja2Ryb3BTaGFk
b3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5k
KCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXdpbmRvd0NvbG9yLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb2xvcik7
Ci0gICAgICAgIGlmICghd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKHdpbmRvd0Nvcm5lclJhZGl1cyk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0
LmFwcGVuZCgnfScpOwotICAgIH0KKyAgICBpZiAoIXdpbmRvd0NvbG9yLmlzRW1wdHkoKSB8fCAh
d2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkKKyAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0
eWxlU2hlZXQuYXBwZW5kKCIgOjoiLCBUZXh0VHJhY2tDdWU6OmN1ZUJhY2tkcm9wU2hhZG93UHNl
dWRvSWQoKSwgJ3snLCB3aW5kb3dDb2xvciwgd2luZG93Q29ybmVyUmFkaXVzLCAnfScpOwogI2Vu
ZGlmIC8vIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAKICAgICBMT0coTWVk
aWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNTdHlsZVNoZWV0T3Zl
cnJpZGVTZXR0aW5nIHN0eWxlIHRvOlxuJXMiLCBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29j
b2EubW0KaW5kZXggNjBlNjcwZjIwNjZkNjA1OGIyZTVlYjc5ZWI3ZGMzMGM1Y2I0YjI4ZS4uMTFj
OWEyMzgzY2Q2YzhjMzAxYTFhMDhkY2RlYWZhZTc5ZDI2MmI0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbkNvY29hLm1tCkBAIC0zOSw2ICszOSw3IEBACiAjaW1wb3J0IDx3dGYvVVJM
Lmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRl
Q0YuaD4KIAogQGludGVyZmFjZSBOU1VSTCAoKQogLSAoQ0ZVUkxSZWYpX2NmdXJsOwpAQCAtMzQ5
LDMxICszNTAsMjMgQEAgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpjb29raWVzRm9yU2Vzc2lvbihjb25zdCBVUkwmIGZpcnMKIAogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwogCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGNvb2tpZXMgPSBjb29r
aWVzRm9yVVJMKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBwYWdlSUQs
IHNob3VsZEFza0lUUCwgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcpOwotICAg
IGlmICghY29va2llcyB8fCAhW2Nvb2tpZXMgY291bnRdKQotICAgICAgICByZXR1cm4geyBTdHJp
bmcoKSwgZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmcsIG5vdCBhbiBlbXB0eSBvbmUg
dGhhdCBTdHJpbmdCdWlsZGVyIHdvdWxkIGNyZWF0ZSBiZWxvdy4KKyAgICBhdXRvIGNvb2tpZXMg
PSBjb29raWVzRm9yVVJMKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlELCBw
YWdlSUQsIHNob3VsZEFza0lUUCwgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcp
OworICAgIGlmICghW2Nvb2tpZXMgY291bnRdKQorICAgICAgICByZXR1cm4geyBTdHJpbmcoKSwg
ZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmc7IFN0cmluZ0J1aWxkZXIgYmVsb3cgd291
bGQgY3JlYXRlIGFuIGVtcHR5IG9uZS4KIAogICAgIFN0cmluZ0J1aWxkZXIgY29va2llc0J1aWxk
ZXI7CiAgICAgYm9vbCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gZmFsc2U7CiAgICAgZm9yIChO
U0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzLmdldCgpKSB7CiAgICAgICAgIGlmICghW1tj
b29raWUgbmFtZV0gbGVuZ3RoXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgIGlm
ICghaW5jbHVkZUhUVFBPbmx5ICYmIFtjb29raWUgaXNIVFRQT25seV0pCiAgICAgICAgICAgICBj
b250aW51ZTsKLQogICAgICAgICBpZiAoW2Nvb2tpZSBpc1NlY3VyZV0pIHsKICAgICAgICAgICAg
IGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVlOwogICAgICAgICAgICAgaWYgKGluY2x1ZGVT
ZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVDb29raWVzOjpObykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmICghY29va2llc0J1aWxkZXIuaXNF
bXB0eSgpKQotICAgICAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOyAiKTsK
LQotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoW2Nvb2tpZSBuYW1lXSk7Ci0gICAgICAg
IGNvb2tpZXNCdWlsZGVyLmFwcGVuZCgnPScpOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmQoW2Nvb2tpZSB2YWx1ZV0pOworICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoY29va2ll
c0J1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiOyAiLCBbY29va2llIG5hbWVdLCAnPScsIFtjb29r
aWUgdmFsdWVdKTsKICAgICB9CiAgICAgcmV0dXJuIHsgY29va2llc0J1aWxkZXIudG9TdHJpbmco
KSwgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KaW5kZXggZjJkOTJmMTk3ZDE3Y2EyOTcwZDA3ZGMxNDBhYjAwYTYxYzEzNThmYy4u
Y2ZjZDlmM2MwM2M5YzZhMWEzZDM0ZWQxY2M5Nzc3YTgwNzI3ZTk5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtNDcsNyArNDcsNyBAQAogI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KICNpbXBvcnQgPHd0Zi9jb2Nv
YS9FbnRpdGxlbWVudHMuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CkBAIC0xMTUsMTUg
KzExNSwxMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFt
ZXRlcnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwogICAgIH0KIAotICAgIGF1dG8qIG1hbnVhbFByZXZh
bGVudFJlc291cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1hbnVhbFByZXZhbGVu
dFJlc291cmNlIl07Ci0gICAgaWYgKG1hbnVhbFByZXZhbGVudFJlc291cmNlKSB7Ci0gICAgICAg
IFVSTCB1cmwgeyBVUkwoKSwgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgfTsKLSAgICAgICAgaWYg
KCF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHA6Ly8iKTsKLSAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1hbnVhbFByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgICAgIHVy
bCA9IHsgVVJMKCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OwotICAgICAgICB9CisgICAgaWYgKGF1
dG8gbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OkAiSVRQ
TWFudWFsUHJldmFsZW50UmVzb3VyY2UiXSkgeworICAgICAgICBVUkwgdXJsIHsgeyB9LCBtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSB9OworICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICB1cmwgPSB7IHsgfSwgbWFrZVN0cmluZygiaHR0cDovLyIsIG1hbnVhbFByZXZhbGVu
dFJlc291cmNlKSB9OwogICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH07CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428715</attachid>
            <date>2021-05-14 22:19:42 -0700</date>
            <delta_ts>2021-05-14 23:59:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210514221941.patch</filename>
            <type>text/plain</type>
            <size>61422</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk3ZjEzYTEyNWQyM2ZkODg2YWJlYzFk
YjFmNTJjOTc2OWY0YTc4NTkuLjQxM2IzOGViOTdhYWNkOTJmODY5NjhjMzdlNzQxYmYzNzgzNzEx
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBv
cnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgKiB3dGYvUGxhdGZv
cm1GVFcuY21ha2U6IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0
dG8uCisgICAgICAgICogd3RmL1BsYXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjphcHBlbmQpOiBEZWxldGVkIHRoZSBvdmVybG9hZCBmb3IgQ0ZTdHJpbmdSZWYuCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBEZWxldGVkIHRoZSBzcGVjaWFsIGNhc2UgZm9y
IENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQuIFNwZWNpYWxpemVzIFN0cmluZ1R5cGVBZGFwdGVyIGZv
cgorICAgICAgICBib3RoIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyAqLiBJZiBDRlN0cmluZ0dl
dENTdHJpbmdQdHIgd29ya3MgZm9yIExhdGluLTEsIHRoZW4KKyAgICAgICAgZG9lcyB0aGUgOC1i
aXQgY29kZSBwYXRoLCBvdGhlcndpc2UgdGhlIDE2LWJpdC4KKworICAgICAgICAqIHd0Zi90ZXh0
L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbTogSW5jbHVkZSBTdHJpbmdDb25jYXRlbmF0ZUNGLmgs
IHNpbmNlIGl0J3MKKyAgICAgICAgbm93IG5lZWRlZCB0byB1c2UgQ0ZTdHJpbmdSZWYgd2l0aCBT
dHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgRHJvcCBsZWdhY3kgLyBwcmVmaXhlZCBXZWJBdWRpbyBpbXBsZW1lbnRh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGNlMjRhY2RkMmZiMWU4MGY5MDEyMjBlZTgxNGQ0NTg2MzZjMDM1
MTIuLjkwYTI3YTg5ZDdkNTQ1MzVhNGU2ZTY1Y2E2MThmZWJlNDVmYTFmZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMyBAQAorMjAyMS0wNS0xNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBmcm9t
IFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yIGNvbnN0KTogVHdlYWtlZAorICAgICAgICBjb2Rp
bmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDU1MpOiBVc2UgdmFyaWFk
aWMgU3RyaW5nQnVpbGRlcjo6YXBwZW5kIGluc3RlYWQgb2YgbWFueQorICAgICAgICBzZXBhcmF0
ZSBjYWxscy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
OjpjYXB0aW9uc0RlZmF1bHRGb250Q1NTIGNvbnN0KToKKyAgICAgICAgVHdlYWtlZCBjb2Rpbmcg
c3R5bGUgYSBiaXQsIGFuZCB1c2UgdmFyaWFkaWMgU3RyaW5CdWlsZGVyOjphcHBlbmQgY2FsbHMK
KyAgICAgICAgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgYW5kIHN0cmVhbWxpbmUgdGhl
IGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6
Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUgY29uc3QpOgorICAgICAgICBEaXR0by4gQWxzbyBy
ZW1vdmVkIHVubmVjZXNzYXJ5IGNoZWNrcyB0aGF0IHN0cmluZ3MgYXJlIGVtcHR5IGJlZm9yZSBh
cHBlbmRpbmcuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFn
ZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6Y29va2llc0ZvclNlc3Npb24gY29uc3QpOiBEaXR0by4KKwogMjAyMS0wNS0xNCAgUm9iIEJ1
aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFByb3ZpZGUgY3VzdG9tIFNldElubGlu
ZUZpbGxHcmFkaWVudCBjb3B5IGN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWE2YjFlNTgwYTY5MzQyYWRiMGRh
MzI0NzdmZjk3OGM3NTk4MzUxYy4uZDNmZWI0ZTBiNDFmYTdiM2ExZWEwYzY4MGUwYzE4OWJkNzU5
NmZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0xNCAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJp
bmcgc3VwcG9ydCBmcm9tIFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOiBV
c2UgbWFrZVN0cmluZyBpbnN0ZWFkCisgICAgICAgIG9mIFN0cmluZ0J1aWxkZXIuCisKIDIwMjEt
MDUtMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UkVHUkVTU0lPTiAocjI2OTgyNCk6IFJhbmRvbSB0aWxlIGNvcnJ1cHRpb24gd2hlbiBzY3JvbGxp
bmcvem9vbWluZyBpbiBtYWNDYXRhbHlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggM2FlMDVlNzAxNWU1NjJkZGQ0ZDI2M2RiMTNmMDc0OTczMTBjZmUyYy4u
ZDFmZTA2NWIzZjk5NjVlYTg5MjgxNGQwZGNjMGNlNzJmY2MxYTBmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OTgsNiArNDk4LDcgQEAKIAkJOTNBQzkx
QTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjVCNDREMjIx
M0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSGV4TnVtYmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNCNUI0NTAyMjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMb2dnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyogU3RyaW5nQ29uY2F0ZW5hdGVDRi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdDb25jYXRlbmF0ZUNGLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDE5MUNGMjBDQUVDRTgwMEM1MUI4RSAvKiBv
YmpjU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9iamNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNEREU5MzExQ0RDMDUyRDAwRkQzNDkxIC8qIGR5bGRTUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZHlsZFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0YxOTkzRDE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdWaWV3LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyNSw2ICs5MjYsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQTVCQTE1RjcxODI0MzVBNjAwQTgyRTY5IC8qIEF0b21TdHJpbmdJbXBsQ0YuY3BwICovLAog
CQkJCUE1QkExNUY4MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgKi8sCisJCQkJOTNE
MDAxN0IyNjREQkFDRjAwQkNGMTA5IC8qIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaCAqLywKIAkJCQlB
NUJBMTVGOTE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENGLmNwcCAqLywKIAkJCQk5Mzkz
NEJENDE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNwcCAqLywKIAkJCQkxQ0NEQjE0
OTFFNTY2NjI2MDA2QzczQzAgLyogVGV4dEJyZWFrSXRlcmF0b3JDRi5oICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUZUVy5jbWFrZQppbmRleCA5NzFmZGViMjU5NTBlZWI3NzhkNWQ3MGUxYWRjZmQ1MmFkNmFk
MjllLi5iZmExM2QxZmU4MGIzMDdhNTJiM2ZkZGJlZGExZTY5N2QzOGU1M2M5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUZUVy5jbWFrZQpAQCAtMzksNiArMzksNyBAQCBpZiAoVVNFX0NGKQogICAgICAgICBj
Zi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVDYXN0c0NGLmgKIAorICAgICAgICB0ZXh0
L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgICAgICB0ZXh0L2NmL1RleHRCcmVha0l0ZXJh
dG9yQ0YuaAogICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCBlMjgwOTk3NDI3MTljNzc5YWMzZWFkZjQ2NjEzMzNkODc4ZWZkY2Rk
Li43Y2RjYzRiMTZiZTIyZTQ3NWUyMmE4NmFkMGU3YWM0OGRlMWRkMTE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtNDEsNiArNDEsNyBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hF
QURFUlMKIAogICAgIHNwaS9tYWMvTWV0YWRhdGFTUEkuaAogCisgICAgdGV4dC9jZi9TdHJpbmdD
b25jYXRlbmF0ZUNGLmgKICAgICB0ZXh0L2NmL1RleHRCcmVha0l0ZXJhdG9yQ0YuaAogKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDZlODBiOTlhMDRhNmM2ZGU0ZTJmZjU5YTdiNGVk
NGM4YzRhYWZhYjkuLjkwZmQyNmQ3OGM2OTRkYjM2ZGQwODI0MWU5ODhlNDJmNTU1N2U1MTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0zNyw2ICszNyw3IEBAIGlmIChVU0VfQ0YpCiAg
ICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAgY2YvVHlwZUNhc3RzQ0YuaAogCisgICAg
ICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCiAgICAgICAgIHRleHQvY2YvVGV4dEJy
ZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCAxZTBjMThhYzlkMjBlZDgyMGZlYjg2
ODVmY2NmODJiMTA2MDExNDJkLi5mZTM2MTA2MDhkYzMzZDdjYjA4ZTVmZDU3NDhkZjhkZjdkM2Rl
MDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTM3OSwyMCArMzc5
LDYgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgfQogfQogCi0jaWYgVVNFKENGKQotCi12
b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChDRlN0cmluZ1JlZiBzdHJpbmcpCi17Ci0gICAgLy8g
RmFzdCBwYXRoOiBhdm9pZCBjb25zdHJ1Y3RpbmcgYSB0ZW1wb3JhcnkgU3RyaW5nIHdoZW4gcG9z
c2libGUuCi0gICAgaWYgKGF1dG8qIGNoYXJhY3RlcnMgPSBDRlN0cmluZ0dldENTdHJpbmdQdHIo
c3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSkpIHsKLSAgICAgICAgYXBwZW5kQ2hh
cmFjdGVycyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIENGU3Ry
aW5nR2V0TGVuZ3RoKHN0cmluZykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGFwcGVu
ZChTdHJpbmcoc3RyaW5nKSk7Ci19Ci0KLSNlbmRpZgotCiBib29sIFN0cmluZ0J1aWxkZXI6OmNh
blNocmluaygpIGNvbnN0CiB7CiAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmgKaW5kZXggNzAxOGExYWI3YmRiZDc0ZTZjYjdhZmNkMzU0NGVhZWI5
MzkwYmU1ZS4uYjVmOTUxNjE5YjVlYWJlZjYxMThmNTM1YjMzNmE0YjljZTI2Y2I1YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0yOCwxMCArMjgsOCBAQAogCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC0xMzUsMTMgKzEzMyw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGFwcGVuZENoYXJh
Y3RlcnMoc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7CiAg
ICAgfQogCi0jaWYgVVNFKENGKQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChD
RlN0cmluZ1JlZik7Ci0jZW5kaWYKLSNpZiBVU0UoQ0YpICYmIGRlZmluZWQoX19PQkpDX18pCi0g
ICAgdm9pZCBhcHBlbmQoTlNTdHJpbmcgKnN0cmluZykgeyBhcHBlbmQoKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKXN0cmluZyk7IH0KLSNlbmRpZgotICAgIAogICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCA9
IFN0cmluZzo6TWF4TGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKG9mZnNldCA+PSBzdHJpbmcu
bGVuZ3RoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNh
dGVuYXRlQ0YuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjAyYTgxZDIyNmQ3MzRiMDk4YzYyMGEwZGFhNjkyZmMyNTg4NzBkYjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRl
Q0YuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCisjaWYgVVNFKENGKQorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmlu
Z1JlZj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVmKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IENGU3RyaW5nR2V0
TGVuZ3RoKG1fc3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3N0cmluZyB8fCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcsIGtDRlN0cmluZ0Vu
Y29kaW5nSVNPTGF0aW4xKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0ZT
dHJpbmdSZWYgbV9zdHJpbmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJp
bmdSZWY+OjpTdHJpbmdUeXBlQWRhcHRlcihDRlN0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0
cmluZyB7IHN0cmluZyB9Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlw
ZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciogZGVzdGluYXRpb24p
IGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBzdGQ6Om1lbWNweShkZXN0aW5h
dGlvbiwgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lT
T0xhdGluMSksIENGU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSk7Cit9CisKK3RlbXBsYXRlPD4g
aW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFy
PihVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAg
ICBDRlN0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5n
R2V0TGVuZ3RoKG1fc3RyaW5nKSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3RpbmF0
aW9uKSk7Cit9CisKKyNpZmRlZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5
cGVBZGFwdGVyPE5TU3RyaW5nICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5n
UmVmPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmluZykK
KyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKXN0cmluZykKKyAgICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2VuZGlm
IC8vIFVTRShDRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0
cmVhbUNvY29hLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2Eu
bW0KaW5kZXggYzc0YmY5Y2NmZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2Yjlk
M2Y0MTZhZDI0OTczNDY0NWRmZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0IDx3
dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBU
ZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwCmluZGV4IDczYzgwMWI5MzhjN2E4ZDhmNGQ0ZDc1NTNlYWU2Zjc1MTNhMTgxNWUuLjJh
YmI1MTIxMmFjMDVlYzFkMDk5NTZmNDRmNThmMjQyMTAyZjRkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC00
OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNG
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1
bi5oIgpAQCAtMzA4LDEyICszMDksMTEgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MoKSBjb25zdAogQ29sb3IgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9ydGFudCkgY29u
c3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0
YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29w
eUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlv
cikpOwotICAgIENvbG9yIHRleHRDb2xvcihjb2xvci5nZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29s
b3IuaXNWYWxpZCgpKQorICAgIENvbG9yIHRleHRDb2xvcihhZG9wdENGKE1BQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5Rm9yZWdyb3VuZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
JmJlaGF2aW9yKSkuZ2V0KCkpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkgewogICAg
ICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNw
ZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNr
LWNvbnRhaW5lci4KICAgICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAorICAg
IH0KICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yVXNlVmFsdWU7CiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdl
dEZvcmVncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2
aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKQEAgLTMyNSwyMSArMzI1LDE0IEBAIFN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25z
dAogewogICAgIGJvb2wgaW1wb3J0YW50OwogICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRpb25z
VGV4dENvbG9yKGltcG9ydGFudCk7Ci0KICAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlD
U1MoQ1NTUHJvcGVydHlDb2xvciwgdGV4dENvbG9yLCBpbXBvcnRhbnQpOwogfQogCiBzdGF0aWMg
dm9pZCBhcHBlbmRDU1MoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgQ1NTUHJvcGVydHlJRCBpZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgYnVpbGRlci5hcHBl
bmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzonKTsK
LSAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSk7Ci0gICAgaWYgKGltcG9ydGFudCkKLSAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KCc7Jyk7CisgICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSwgJzon
LCB2YWx1ZSwgaW1wb3J0YW50ID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogfQogICAgIAogU3Ry
aW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjp3aW5kb3dSb3VuZGVkQ29ybmVyUmFk
aXVzQ1NTKCkgY29uc3QKQEAgLTM3OSw3ICszNzIsNiBAQCBib29sIENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGOjpjYXB0aW9uU3Ryb2tlV2lkdGhGb3JGb250KGZsb2F0IGZvbnRTaXplLCBj
bwogICAgIC8vIFNpbmNlIG9ubHkgaGFsZiBvZiB0aGUgc3Ryb2tlIGlzIHZpc2libGUgYmVjYXVz
ZSB0aGUgc3Ryb2tlIGlzIGRyYXduIGJlZm9yZSB0aGUgZmlsbCwgd2UgZG91YmxlIHRoZSBzdHJv
a2Ugd2lkdGggaGVyZS4KICAgICBzdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoUHQgKiAyOwogICAg
IGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VW
YWx1ZTsKLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE4LDI0ICs0MTAsMTcgQEAg
U3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0RlZmF1bHRGb250
Q1NTKCkgY29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7
CiAgICAgCi0gICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnQgPSBhZG9wdENG
KE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0aW9u
QXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VGb250
U3R5bGVEZWZhdWx0KSk7CisgICAgYXV0byBmb250ID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJh
bmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5V
c2VyLCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVsdCkpOwog
ICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZXRh
aW5QdHI8Q0ZUeXBlUmVmPiBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJp
YnV0ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOworICAgIGF1dG8gbmFtZSA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9u
dE5hbWVBdHRyaWJ1dGUpKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIAotICAgIGJ1aWxkZXIu
YXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjogXCIiKTsKLSAgICBidWlsZGVyLmFwcGVuZChzdGF0
aWNfY2FzdDxDRlN0cmluZ1JlZj4obmFtZS5nZXQoKSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCci
Jyk7Ci0KLSAgICBhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkFycmF5
UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250Q2Fz
Y2FkZUxpc3RBdHRyaWJ1dGUpKSk7Ci0KLSAgICBpZiAoY2FzY2FkZUxpc3QpIHsKKyAgICBidWls
ZGVyLmFwcGVuZCgiZm9udC1mYW1pbHk6IFwiIiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG5h
bWUuZ2V0KCkpLCAnIicpOworICAgIGlmIChhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0
aWNfY2FzdDxDRkFycmF5UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250Lmdl
dCgpLCBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUpKSkpIHsKICAgICAgICAgZm9yIChDRklu
ZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGNhc2NhZGVMaXN0LmdldCgpKTsgaSsrKSB7
CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3Jp
cHRvclJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjYXNjYWRlTGlzdC5nZXQoKSwgaSkpOwog
ICAgICAgICAgICAgaWYgKCFmb250Q2FzY2FkZSkKQEAgLTQ0MywxNiArNDI4LDEwIEBAIFN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygp
IGNvbnN0CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlTmFtZSA9IGFkb3B0Q0YoQ1RGb250
RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udENhc2NhZGUsIGtDVEZvbnROYW1lQXR0cmlidXRl
KSk7CiAgICAgICAgICAgICBpZiAoIWZvbnRDYXNjYWRlTmFtZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwiIik7Ci0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2NhZGVOYW1l
LmdldCgpKSk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiwgXCIiLCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2Nh
ZGVOYW1lLmdldCgpKSwgJyInKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoYmVo
YXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKQotICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAhaW1wb3J0YW50Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
JzsnKTsKLSAgICAKKyAgICBidWlsZGVyLmFwcGVuZChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBw
ZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUgPyAiICFpbXBvcnRhbnQ7IiA6ICI7Iik7CiAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApAQCAtNTYxLDQzICs1NDAsMTggQEAgU3RyaW5n
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlk
ZSgpIGNvbnN0CiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKICAgICBp
ZiAoIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7Ci0gICAgCisKICAg
ICBTdHJpbmcgY2FwdGlvbnNDb2xvciA9IGNhcHRpb25zVGV4dENvbG9yQ1NTKCk7CiAgICAgU3Ry
aW5nIGVkZ2VTdHlsZSA9IGNhcHRpb25zVGV4dEVkZ2VDU1MoKTsKICAgICBTdHJpbmcgZm9udE5h
bWUgPSBjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCk7CiAgICAgU3RyaW5nIGJhY2tncm91bmQgPSBj
YXB0aW9uc0JhY2tncm91bmRDU1MoKTsKLSAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8
ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9u
dE5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFw
cGVuZExpdGVyYWwoIiA6OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQoVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2FwdGlv
bnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWJhY2tncm91bmQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKGJhY2tncm91bmQpOwotICAgICAgICBpZiAoIWNhcHRpb25zQ29sb3IuaXNF
bXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGNh
cHRpb25zQ29sb3IpOwotICAgICAgICBpZiAoIWVkZ2VTdHlsZS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoZWRnZVN0eWxlKTsKLSAgICAg
ICAgaWYgKCFmb250TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRl
U3R5bGVTaGVldC5hcHBlbmQoZm9udE5hbWUpOwotICAgICAgICAKLSAgICAgICAgY2FwdGlvbnNP
dmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQotICAgIAorICAgIGlmICghYmFj
a2dyb3VuZC5pc0VtcHR5KCkgfHwgIWNhcHRpb25zQ29sb3IuaXNFbXB0eSgpIHx8ICFlZGdlU3R5
bGUuaXNFbXB0eSgpIHx8ICFmb250TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25zT3Zl
cnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6IiwgVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1
ZG9JZCgpLCAneycsIGJhY2tncm91bmQsIGNhcHRpb25zQ29sb3IsIGVkZ2VTdHlsZSwgZm9udE5h
bWUsICd9Jyk7CisKICAgICBTdHJpbmcgd2luZG93Q29sb3IgPSBjYXB0aW9uc1dpbmRvd0NTUygp
OwogICAgIFN0cmluZyB3aW5kb3dDb3JuZXJSYWRpdXMgPSB3aW5kb3dSb3VuZGVkQ29ybmVyUmFk
aXVzQ1NTKCk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5l
clJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQu
YXBwZW5kTGl0ZXJhbCgiIDo6Iik7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0
LmFwcGVuZChUZXh0VHJhY2tDdWU6OmN1ZUJhY2tkcm9wU2hhZG93UHNldWRvSWQoKSk7Ci0gICAg
ICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgneycpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092
ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29sb3IpOwotICAgICAgICBpZiAoIXdpbmRv
d0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb3JuZXJSYWRpdXMpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ30nKTsKLSAgICB9
CisgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5lclJhZGl1cy5p
c0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6
IiwgVGV4dFRyYWNrQ3VlOjpjdWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCksICd7Jywgd2luZG93
Q29sb3IsIHdpbmRvd0Nvcm5lclJhZGl1cywgJ30nKTsKICNlbmRpZiAvLyBIQVZFKE1FRElBX0FD
Q0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogCiAgICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlU2V0dGluZyBzdHlsZSB0
bzpcbiVzIiwgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQudG9TdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2Ev
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IDYwZTY3MGYy
MDY2ZDYwNThiMmU1ZWI3OWViN2RjMzBjNWNiNGIyOGUuLjExYzlhMjM4M2NkNmM4YzMwMWExYTA4
ZGNkZWFmYWU3OWQyNjJiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKIEBpbnRlcmZhY2Ug
TlNVUkwgKCkKIC0gKENGVVJMUmVmKV9jZnVybDsKQEAgLTM0OSwzMSArMzUwLDIzIEBAIHN0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Np
b24oY29uc3QgVVJMJiBmaXJzCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAot
ICAgIFJldGFpblB0cjxOU0FycmF5PiBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3Vs
ZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKLSAgICBpZiAoIWNvb2tpZXMgfHwgIVtj
b29raWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJl
dHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3
b3VsZCBjcmVhdGUgYmVsb3cuCisgICAgYXV0byBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJz
dFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAs
IHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKKyAgICBpZiAoIVtjb29raWVz
IGNvdW50XSkKKyAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBh
IG51bGwgc3RyaW5nOyBTdHJpbmdCdWlsZGVyIGJlbG93IHdvdWxkIGNyZWF0ZSBhbiBlbXB0eSBv
bmUuCiAKICAgICBTdHJpbmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwogICAgIGJvb2wgZGlkQWNj
ZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOwogICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUg
aW4gY29va2llcy5nZXQoKSkgewogICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0p
CiAgICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAm
JiBbY29va2llIGlzSFRUUE9ubHldKQogICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAg
aWYgKFtjb29raWUgaXNTZWN1cmVdKSB7CiAgICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29r
aWVzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNs
dWRlU2VjdXJlQ29va2llczo6Tm8pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLQotICAgICAgICBpZiAoIWNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGNvb2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1
aWxkZXIuYXBwZW5kKFtjb29raWUgbmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmQoJz0nKTsKLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsK
KyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKGNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSA/
ICIiIDogIjsgIiwgW2Nvb2tpZSBuYW1lXSwgJz0nLCBbY29va2llIHZhbHVlXSk7CiAgICAgfQog
ICAgIHJldHVybiB7IGNvb2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNv
b2tpZXMgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IGYyZDky
ZjE5N2QxN2NhMjk3MGQwN2RjMTQwYWIwMGE2MWMxMzU4ZmMuLmNmY2Q5ZjNjMDNjOWM2YTFhM2Qz
NGVkMWNjOTc3N2E4MDcyN2U5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0KQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+Ci0j
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9jZi9T
dHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9y
dCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpAQCAtMTE1LDE1ICsxMTUsMTAgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzJgogICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29v
a2llczsKICAgICB9CiAKLSAgICBhdXRvKiBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtkZWZh
dWx0cyBzdHJpbmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdOwotICAgIGlm
IChtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICBVUkwgdXJsIHsgVVJMKCksIG1h
bnVhbFByZXZhbGVudFJlc291cmNlIH07Ci0gICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkgewot
ICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJodHRwOi8vIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICB1cmwgPSB7IFVSTCgpLCBidWlsZGVy
LnRvU3RyaW5nKCkgfTsKLSAgICAgICAgfQorICAgIGlmIChhdXRvIG1hbnVhbFByZXZhbGVudFJl
c291cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1hbnVhbFByZXZhbGVudFJlc291
cmNlIl0pIHsKKyAgICAgICAgVVJMIHVybCB7IHsgfSwgbWFudWFsUHJldmFsZW50UmVzb3VyY2Ug
fTsKKyAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgdXJsID0geyB7IH0s
IG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgfTsKICAgICAg
ICAgaWYgKHVybC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAzNWVmNmQ1YWQ5MTIzNmE2OGU5NjRmMTAwYzRjYmNhY2M0OTllNmJhLi4xZDVhNTIx
ZmUyNGY3NWE4NmM5Y2IwYzU3MzA5MDBjOTAxMDYyYjc5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjEtMDUtMTQg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdS
ZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29u
Y2F0ZW5hdGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5j
cHA6CisgICAgICAgIEFkZGVkIGluY2x1ZGUgb2YgU3RyaW5nQ29uY2F0ZW5hdGVDRi5oLgorICAg
ICAgICBBZGRlZCBTdHJpbmdUeXBlQWRhcHRlciBmb3IgV0tTdHJpbmdSZWYuCisgICAgICAgIChX
VFI6OnN0eWxlRGVjVG9TdHIpOiBVc2UgQVNDSUlMaXRlcmFsIGluc3RlYWQgb2YgU3RyaW5nQnVp
bGRlci4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVtb3ZlZCB1bm5lZWRlZCB0b1dURlN0cmlu
ZyBzaW5jZSB0aGUgV0tTdHJpbmdSZWYKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXIgdGFrZXMg
Y2FyZSBvZiBpdC4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9tIGZyYW1lVG9T
dHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpkdW1wUmVzb3VyY2VVUkwpOiBVc2Ug
YXBwZW5kIGluc3RlYWQgb2YgYXBwZW5kTGl0ZXJhbC4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1l
RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpkdW1wTG9hZEV2ZW50KTogVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OnN0cmluZyk6
IFJlbmFtZWQgZnJvbSBhIGxvbmdlciBuYW1lLiBSZXR1cm4gYSBTdHJpbmcKKyAgICAgICAgaW5z
dGVhZCBvZiBidWlsZGluZyBpbiBhIFN0cmluZ0J1aWxkZXIuIFVzZSBtYWtlU3RyaW5nLgorICAg
ICAgICAoV1RSOjpzdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6ZHVtcEVycm9yRGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBSZW1vdmVkCisgICAgICAgIHVubmVlZGVkIHRv
V1RGU3RyaW5nLgorICAgICAgICAoV1RSOjpkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKTogUmVtb3Zl
ZCBhbgorICAgICAgICB1bm5lZWRlZCBsb2NhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKTogUmVtb3ZlZCB1bm5lZWRlZCB0b1dURlN0cmluZy4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvckZyYW1lKToKKyAgICAgICAgVXBkYXRlZCBmb3IgZnVuY3RvbiBuYW1lIGNoYW5n
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JG
cmFtZSk6IERpdHRvLgorICAgICAgICBBbHNvIHVzZSB2YXJpYWRpYyBhcHBlbmQuIEFsc28gdXNl
IG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlRm9yUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsTG9hZEZvclJlc291cmNlKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBv
bGljeUZvclJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbEFkZE1lc3NhZ2VUb0NvbnNvbGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5v
ZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNl
cnRUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxk
RGVsZXRlUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkQXBwbHlTdHlsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlzdG9yeSk6IERpdHRvLgorCiAyMDIxLTA1LTE0
ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViS2l0
VGVzdFJ1bm5lcl0gRm9yd2FyZCBXZWJDb250ZW50IHRlcm1pbmF0aW9uIHJlYXNvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGFiZDNhZmRlOTFmMDhlODc5NGYxMGFiZDZkMTBkYzM4OGQ0
NWIyODQuLjI1MmU3ZjU3MDc3NzdjZmViYTg5ZGQ0YzUzMjE4ZDg5YWJlN2M3ZWMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVD
Ri5oPgogCiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVD
VDJEKQogI2luY2x1ZGUgIldlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIgpAQCAtNTgsNiArNTksMzYg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+IHsKK3B1YmxpYzoKKyAgICBT
dHJpbmdUeXBlQWRhcHRlcihXS1N0cmluZ1JlZik7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmcgPyBXS1N0cmluZ0dldExlbmd0aChtX3N0cmluZykgOiAwOyB9
CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9zdHJpbmc7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSop
IGNvbnN0OworCitwcml2YXRlOgorICAgIFdLU3RyaW5nUmVmIG1fc3RyaW5nOworfTsKKworaW5s
aW5lIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6U3RyaW5nVHlwZUFkYXB0ZXIoV0tT
dHJpbmdSZWYgc3RyaW5nKQorICAgIDogbV9zdHJpbmcgeyBzdHJpbmcgfQoreworfQorCit0ZW1w
bGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVU
bzxMQ2hhcj4oTENoYXIqKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0
cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVUbzxVQ2hhcj4oVUNoYXIqIGRlc3Rp
bmF0aW9uKSBjb25zdAoreworICAgIGlmIChtX3N0cmluZykKKyAgICAgICAgV0tTdHJpbmdHZXRD
aGFyYWN0ZXJzKG1fc3RyaW5nLCByZWludGVycHJldF9jYXN0PFdLQ2hhcio+KGRlc3RpbmF0aW9u
KSwgV0tTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcpKTsKK30KKworfQorCiBuYW1lc3BhY2UgV1RS
IHsKIAogc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHkoV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKQEAgLTg5LDcgKzEyMCw3IEBAIHN0YXRpYyBXVEY6
OlN0cmluZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZiB3b3JsZCwKICAgICByZXR1cm4gZHVtcFBhdGgoY29udGV4dCwgbm9kZU9iamVjdCk7CiB9
CiAKLXN0YXRpYyBXVEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdl
UmVmKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
dW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZVJl
ZikKIHsKICAgICBpZiAoIXJhbmdlUmVmKQogICAgICAgICByZXR1cm4gIihudWxsKSI7CkBAIC0x
MzAsNDMgKzE2MSwyNiBAQCBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRp
b25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cAogICAgIHJldHVybiB0b1dL
KCJpbGxlZ2FsIHZhbHVlIik7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3Ry
KFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKK3N0YXRpYyBXVEY6OlN0cmlu
ZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZikKIHsKICAgICAv
LyBEdW1wUmVuZGVyVHJlZSBjYWxscyAtW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gZGVzY3JpcHRp
b25dLCB3aGljaCBqdXN0IGR1bXBzIGNsYXNzIG5hbWUgYW5kIG9iamVjdCBhZGRyZXNzLgogICAg
IC8vIE5vIGV4aXN0aW5nIHRlc3RzIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgcGF0aCBhdCB0aGUg
dGltZSBvZiB0aGlzIHdyaXRpbmcsIGJlY2F1c2UgV2ViQ29yZSBkb2Vzbid0IGNhbGwKICAgICAv
LyB0aGUgZWRpdGluZyBjbGllbnQgaWYgdGhlIHN0eWxpbmcgb3BlcmF0aW9uIHNvdXJjZSBpcyBD
b21tYW5kRnJvbURPTSBvciBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlLgotICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Iik7Ci0gICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gIjxET01DU1NTdHlsZURlY2xhcmF0aW9u
IEFERFJFU1M+Il9zOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLU2VjdXJpdHlP
cmlnaW5SZWYgb3JpZ2luKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKCd7JywgdG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpKSwgIiwgIiwg
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpLCAi
LCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pLCAnfScpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKCd7JywgYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdp
bikpLmdldCgpLCAiLCAiLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4p
KS5nZXQoKSwgIiwgIiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSwgJ30nKTsKIH0K
IAotc3RhdGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkK
K3N0YXRpYyBXVEY6OlN0cmluZyBzdHJpbmcoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKICAg
ICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAg
IFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFp
bkZyYW1lKGZyYW1lKSkgewotICAgICAgICBpZiAoIVdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgp
KSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1l
IFwiIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1l
KSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkp
KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZyYW1lIFwiIik7
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFu
b255bW91cykiKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICBib29sIGlzTWFpbiA9IFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSk7
CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGlz
TWFpbiA/ICJtYWluIGZyYW1lIl9zIDogImZyYW1lIChhbm9ueW1vdXMpIl9zOworICAgIHJldHVy
biBtYWtlU3RyaW5nKGlzTWFpbiA/ICJtYWluIGZyYW1lIFwiIiA6ICJmcmFtZSBcIiIsIG5hbWUu
Z2V0KCksICciJyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xvY2FsRmlsZVNjaGVtZShX
S1N0cmluZ1JlZiBzY2hlbWUpCkBAIC0yMTAsNyArMjI0LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGR1bXBSZXNvdXJjZVVSTCh1aW50NjRfdCBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWkKICAgICBpZiAoYXNzaWduZWRVcmxzQ2FjaGUoKS5jb250YWlucyhpZGVudGlmaWVyKSkK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYXNzaWduZWRVcmxzQ2FjaGUoKS5nZXQoaWRl
bnRpZmllcikpOwogICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCI8dW5rbm93bj4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjx1bmtub3duPiIp
OwogfQogCiBJbmplY3RlZEJ1bmRsZVBhZ2U6OkluamVjdGVkQnVuZGxlUGFnZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSkKQEAgLTM5Myw2NyArNDA3LDMzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpyZXNldEFmdGVyVGVzdCgpCiAKIC8vIExvYWRlciBDbGllbnQgQ2FsbGJhY2tzCiAKLS8vIFN0
cmluZyBvdXRwdXQgbXVzdCBiZSBpZGVudGljYWwgdG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XS4KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1
aWxkZXImIHN0cmluZ0J1aWxkZXIpCi17Ci0gICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKLSAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1l
KGZyYW1lKSkgewotICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSBcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUu
Z2V0KCkpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFu
b255bW91cykiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhuYW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyInKTsKLX0KLQogc3Rh
dGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFy
KiBldmVudE5hbWUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGR1
bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWls
ZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtICIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGV2ZW50TmFtZSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0
VGV4dChtYWtlU3RyaW5nKHN0cmluZyhmcmFtZSksICIgLSAiLCBldmVudE5hbWUsICdcbicpKTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZv
clRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIpCitzdGF0aWMgU3RyaW5nIHN0cmluZyhXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCkK
IHsKICAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7
CiAgICAgYXV0byBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQYXJ0
eUZvckNvb2tpZXMocmVxdWVzdCkpOwogICAgIGF1dG8gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tV
UkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIjxOU1VSTFJlcXVlc3QgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJs
LmdldCgpKSwgIiwgbWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChmaXJzdFBhcnR5LmdldCgpKSwgIiwgaHR0cCBtZXRob2QgIik7Ci0gICAgaWYgKFdLU3RyaW5n
SXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIobm9uZSkiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicp
OworICAgIHJldHVybiBtYWtlU3RyaW5nKCI8TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksCisgICAgICAgICIsIG1haW4gZG9jdW1lbnQgVVJM
ICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSksCisgICAgICAg
ICIsIGh0dHAgbWV0aG9kICIsIFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSA/ICIo
bm9uZSkiIDogIiIsIGh0dHBNZXRob2QuZ2V0KCksICc+Jyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJl
c3BvbnNlUmVmIHJlc3BvbnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBib29sIHNo
b3VsZER1bXBSZXNwb25zZUhlYWRlcnMgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgc3RyaW5nKFdL
VVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGJvb2wgc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycyA9
IGZhbHNlKQogewogICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChy
ZXNwb25zZSkpOwotICAgIGlmICghdXJsKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiKG51bGwpIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIXVybCkKKyAgICAg
ICAgcmV0dXJuICIobnVsbCkiX3M7CisgICAgaWYgKCFzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJz
KSB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksCisgICAgICAgICAgICAiLCBodHRwIHN0YXR1
cyBjb2RlICIsIFdLVVJMUmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSksICc+Jyk7CiAg
ICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tV
UkxSZXNwb25zZUhUVFBTdGF0dXNDb2RlKHJlc3BvbnNlKSk7Ci0gICAgaWYgKHNob3VsZER1bXBS
ZXNwb25zZUhlYWRlcnMpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIsIEluamVj
dGVkQnVuZGxlUGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNwb25zZSksICIgaGVhZGVycyIp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
IjxOU1VSTFJlc3BvbnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwK
KyAgICAgICAgIiwgaHR0cCBzdGF0dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0Nv
ZGUocmVzcG9uc2UpLAorICAgICAgICAiLCAiLCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNl
SGVhZGVyQ291bnQocmVzcG9uc2UpLCAiIGhlYWRlcnMiKTsKIH0KIAogI2lmICFQTEFURk9STShD
T0NPQSkKQEAgLTQ4MCw3ICs0NjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgUwogCiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJvckRvbWFpbiwgIiwg
Y29kZSAiLCBlcnJvckNvZGUpOwogICAgIGlmIChhdXRvIHVybCA9IGFkb3B0V0soV0tFcnJvckNv
cHlGYWlsaW5nVVJMKGVycm9yKSkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZh
aWxpbmcgVVJMIFwiIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdl
dCgpKSkpLCAnIicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVS
TCBcIiIsIGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdldCgpLCAnIicpOwog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKQEAgLTcwMCw3ICs2ODAsNyBAQCBz
dGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYg
ZmFicyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHNob3VsZElu
Y2x1ZGVGcmFtZU5hbWUpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAnIiwg
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKSksICInICIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiZnJhbWUgJyIsIGFkb3B0V0soV0tCdW5k
bGVGcmFtZUNvcHlOYW1lKGZyYW1lKSkuZ2V0KCksICInICIpOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJzY3JvbGxlZCB0byAiLCB4LCAnLCcsIHksICdcbicpOwogfQogCkBAIC03NTgsOSAr
NzM4LDcgQEAgc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmkKICAgICAgICAgaWYgKCFoYXNEb2N1bWVu
dEVsZW1lbnQoc3ViZnJhbWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdWJmcmFtZU5hbWUpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCInXG4tLS0tLS0tLVxuIik7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIsIHN1YmZyYW1lTmFt
ZS5nZXQoKSwgIidcbi0tLS0tLS0tXG4iKTsKIAogICAgICAgICBkdW1wRnJhbWVUZXh0KHN1YmZy
YW1lLCBzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KHN1
YmZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKQEAgLTc4MCw4ICs3NTgsNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBT
dHJpbmdCdWlsZAogI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShE
SVJFQ1QyRCkKICAgICBhdXRvIHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJB
cmNoaXZlKGZyYW1lKSk7CiAgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgw
LCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQo
KSkpKTsKLSAgICBhdXRvIGNmU3RyaW5nID0gV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxT
dHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChjZlN0cmluZy5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV2ViQ29y
ZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdl
dCgpKS5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtODA3LDkgKzc4NCw5IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBzd2l0Y2ggKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+d2hhdFRvRHVtcCgpKSB7CiAgICAgY2FzZSBXaGF0VG9EdW1wOjpSZW5kZXJUcmVlOiB7
CiAgICAgICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmcoKSkK
LSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tC
dW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmco
bV9wYWdlKSkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0
V0soV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJp
bnRpbmcobV9wYWdlKSkuZ2V0KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+cmVuZGVyVHJlZUR1bXBPcHRpb25zKCkpKS5nZXQoKSkpOworICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVy
bmFsUmVwcmVzZW50YXRpb24obV9wYWdlLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnJl
bmRlclRyZWVEdW1wT3B0aW9ucygpKSkuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBXaGF0VG9EdW1wOjpNYWluRnJhbWVUZXh0OgpAQCAtODkwLDE5ICs4NjcsMTAgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLU3RyaW5n
UmVmIHRpdGxlLCBXS0J1bmRsZUZyYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNj
cmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVRpdGxlOiAiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgfQotCi0gICAgaWYgKGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKSB7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVElUTEUgQ0hBTkdFRDogJyIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIidcbiIpOwotICAgIH0KLQorICAgIGlmIChpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RyaW5nKGZyYW1lKSwgIiAtIGRpZFJlY2VpdmVU
aXRsZTogIiwgdGl0bGUsICdcbicpOworICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIlRJVExFIENIQU5HRUQ6ICciLCB0aXRsZSwgIidcbiIpOwogICAgIGluamVjdGVkQnVuZGxl
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIApAQCAtOTUxLDEwICs5
MTksNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBkdW1wRnJhbWVE
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VS
TDogIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpLCAnXG4nKTsKLSAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKHN0cmluZyhmcmFtZSksICIgLSB3aWxsUGVy
Zm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6ICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJs
KSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbkZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURvY3VtZW50
TmF2aWdhdGlvblR5cGUgdHlwZSkKQEAgLTk4Miw3ICs5NDcsNyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKICAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZEZpbmlzaERvY3VtZW50TG9h
ZEZvckZyYW1lIik7CiAKICAgICBpZiAodW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRz
ID0gV0tCdW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChmcmFtZSkpCi0gICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZyhmcmFtZVRvU3RyKGZyYW1lKSwgIiAt
IGhhcyAiLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQgaGFuZGxlcihzKVxu
IikpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5n
KGZyYW1lKSwgIiAtIGhhcyAiLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQg
aGFuZGxlcihzKVxuIikpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSGFuZGxl
T25sb2FkRXZlbnRzRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKQEAgLTEwNDksMTEg
KzEwMTQsOCBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJl
cXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICAmJiBpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewog
ICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIGR1bXBSZXNvdXJj
ZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgLSB3aWxsU2VuZFJlcXVlc3QgIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0
RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlZGlyZWN0UmVzcG9uc2Ug
Iik7Ci0gICAgICAgIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KHJlc3BvbnNlLCBzdHJpbmdCdWlsZGVyLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBBbGxIVFRQUmVkaXJlY3RlZFJlc3BvbnNlSGVhZGVycygpKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
LSB3aWxsU2VuZFJlcXVlc3QgIiwgc3RyaW5nKHJlcXVlc3QpLAorICAgICAgICAgICAgIiByZWRp
cmVjdFJlc3BvbnNlICIsIHN0cmluZyhyZXNwb25zZSwgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wQWxsSFRUUFJlZGlyZWN0ZWRSZXNwb25zZUhlYWRlcnMoKSksICdcbicp
OwogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CiAgICAgfQogCkBAIC0xMDg2LDExICsxMDQ4LDcgQEAgV0tVUkxSZXF1ZXN0UmVmIElu
amVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBPckhUVFBTU2No
ZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1haW5GcmFtZUhvc3Qu
Z2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNFeHRlcm5hbCAmJiAh
aXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJC
bG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChtYWtlU3RyaW5nKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIiwg
dXJsU3RyaW5nLmdldCgpLCAnXG4nKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogICAgIH0KQEAgLTExMTcsOSArMTA3NSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tCCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKICAgICAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVSZXNwb25z
ZSAiKTsKLSAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZFJlY2VpdmVSZXNw
b25zZSAiLCBzdHJpbmcocmVzcG9uc2UpLCAnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIApAQCAtMTEzMiwx
NCArMTA4OCwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNl
Rm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQgogICAgIGF1dG8gbWltZVR5cGVT
dHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBoYXMgTUlNRSB0eXBlICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG1pbWVUeXBlU3RyaW5nKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXJsU3RyaW5n
LmdldCgpLCAiIGhhcyBNSU1FIHR5cGUgIiwgbWltZVR5cGVTdHJpbmcuZ2V0KCkpOwogCiAgICAg
U3RyaW5nIHBsYXRmb3JtTWltZVR5cGUgPSBwbGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUocmVzcG9u
c2UpOwogICAgIGlmICghcGxhdGZvcm1NaW1lVHlwZS5pc0VtcHR5KCkgJiYgcGxhdGZvcm1NaW1l
VHlwZSAhPSB0b1dURlN0cmluZyhtaW1lVHlwZVN0cmluZykpIHsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGxhdGZvcm1NaW1lVHlwZSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiLCBwbGF0Zm9ybU1p
bWVUeXBlKTsKICAgICB9CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTEx
NjIsNyArMTExNSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9y
UmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lCiAKICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmlu
Z0J1aWxkZXIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmluaXNo
TG9hZGluZ1xuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZEZpbmlzaExvYWRp
bmdcbiIpOwogICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKIH0KIApAQCAtMTE3Nyw3ICsxMTMwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZEZhaWxMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1l
UmUKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VV
UkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKIAogICAgIGR1bXBFcnJv
ckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGVycm9yLCBzdHJpbmdCdWlsZGVyKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTExOTksNyArMTE1Miw2IEBAIGJv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDYWNoZVJlc3BvbnNlKFdLQnVuZGxlUGFnZVJl
ZiwgV0tCdW5kbGVGcmFtZVJlZiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiAvLyBQb2xpY3kg
Q2xpZW50IENhbGxiYWNrcwogCiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYg
bmF2aWdhdGlvbkFjdGlvbiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdLVHlwZVJlZiogdXNl
ckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xMjI5LDEzICsxMTgxLDkgQEAgV0tC
dW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFj
dGlvblVzZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBQb2xpY3lDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvblxuIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01h
aW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVz
IiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIiAtIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb25cbiIsIHN0cmluZyhyZXF1ZXN0KSwKKyAgICAgICAgICAgICIg
aXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVz
IiA6ICJubyIsCisgICAgICAgICAgICAiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIs
IFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdh
dGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIsICdcbicpKTsKICAgICB9CiAKICAgICBpZiAoIWlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKQEAg
LTEyNDUsMTkgKzExOTMsMTYgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBhdXRvIHVy
bFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwogCiAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwogICAgIGlmIChp
c0xvY2FsRmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVy
bC5nZXQoKSkpKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0soV0tVUkxD
b3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdldCgpKSkuZ2V0KCkpOwogICAgIGVsc2UKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJp
bmcodXJsLmdldCgpKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRo
IG5hdmlnYXRpb24gdHlwZSBcJyIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2
aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcJyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdL
VVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKS5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIsIE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikp
LmdldCgpLCAnXCcnKTsKICAgICBhdXRvIGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9wdFdLKFdLQnVu
ZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25BY3Rpb24pKTsK
ICAgICBpZiAoaGl0VGVzdFJlc3VsdFJlZikgewogICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYg
PSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1
bHRSZWYuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3Jp
Z2luYXRpbmcgZnJvbSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgo
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2RlSGFuZGxlUmVmLmdldCgpKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgb3JpZ2luYXRpbmcgZnJvbSAiLCBkdW1wUGF0aChtX3BhZ2Us
IG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAgICB9CiAKICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTEyNzcsNyArMTIyMiw3IEBAIFdLQnVuZGxlUGFn
ZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNl
KFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKSAmJiBp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgJiYg
V0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRl
OiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3Bv
bnNlKSkpLCAiXCdcbiIpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRh
Y2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29w
eVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSkuZ2V0KCksICInXG4iKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTM2Nyw3
ICsxMzEyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25z
b2xlKFdLU3RyaW5nUmVmIG1lc3NhZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6U3RyaW5nIG1lc3NhZ2VTdHJp
bmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKKyAgICBhdXRvIG1lc3NhZ2VTdHJpbmcgPSB0b1dU
RlN0cmluZyhtZXNzYWdlKTsKICAgICBzaXplX3QgbnVsbENoYXJQb3MgPSBtZXNzYWdlU3RyaW5n
LmZpbmQoVUNoYXIoMCkpOwogICAgIGlmIChudWxsQ2hhclBvcyAhPSBXVEY6Om5vdEZvdW5kKQog
ICAgICAgICBtZXNzYWdlU3RyaW5nLnRydW5jYXRlKG51bGxDaGFyUG9zKTsKQEAgLTEzOTMsNyAr
MTMzOCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChX
S1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgU1RB
VFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQp
LCAnXG4nKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBE
RUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iiwgc3RhdHVzYmFyVGV4dCwg
J1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRB
bGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTQxNiw3ICsx
MzYxLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0Q29uZmly
bShXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUYKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLU3RyaW5n
UmVmIGRlZmF1bHRWYWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6ICIsIHRvV1RGU3Ry
aW5nKG1lc3NhZ2UpLCAiLCBkZWZhdWx0IHRleHQ6IiwgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFp
bGluZ1NwYWNlc0FkZE5ld2xpbmUodG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSkpKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6
ICIsIG1lc3NhZ2UsICIsIGRlZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWls
aW5nU3BhY2VzQWRkTmV3bGluZSh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKSkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIGludDY0X3QgdG90YWxCeXRlc05lZWRlZCkK
QEAgLTE0NDIsNyArMTM4Nyw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhj
ZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKIHsKICAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3Mo
KSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlP
cmlnaW46Iiwgc3RyaW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJh
c2VOYW1lKSwgJ1xuJykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVv
dGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCBkYXRh
YmFzZU5hbWUsICdcbicpKTsKIAogICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0
ICogMTAyNDsKICAgICBkb3VibGUgdGVzdERlZmF1bHRRdW90YSA9IGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKQEAgLTE1MjUsNyArMTQ3MCw3IEBA
IGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5n
ZUhhbmRsZVJlZiByYW5nZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0lu
RE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7
CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0
aW5nKCk7CiB9CiAKQEAgLTE1MzYsNyArMTQ4MSw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01S
YW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7
CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBE
RUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTE1NDYsMjIgKzE0OTEs
MTcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVO
b2RlSGFuZGxlUmVmIG5vZGUsIFdLQnVuZGxlUmEKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKICAgICAgICAgIldlYlZpZXdJbnNlcnRB
Y3Rpb25UeXBlZCIsCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIiwKICAgICAg
ICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCiAgICAgaWYgKGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewot
ICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCBub2RlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxh
Y2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3Ry
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxk
SW5zZXJ0Tm9kZToiLCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpLAorICAg
ICAgICAgICAgIiByZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCByYW5nZVRvUmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0aW9uOiIsIGluc2Vy
dGFjdGlvbnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJldHVybiBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTU3Miwy
MiArMTUxMiwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChX
S1N0cmluZ1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlSGFuZGxlUgogICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRp
YyBjb25zdCBjaGFyICppbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewogICAgICAgICAiV2ViVmll
d0luc2VydEFjdGlvblR5cGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQi
LAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKICAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRU
ZXh0OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdl
OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3Ry
aW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxkSW5zZXJ0VGV4dDoi
LCB0ZXh0LAorICAgICAgICAgICAgIiByZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0
aW9uOiIsIGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJl
dHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwog
fQpAQCAtMTU5OCwxMyArMTUzMyw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRE
ZWxldGVSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0
ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURP
TVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5n
ZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICBy
ZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsK
IH0KIApAQCAtMTYxNCwyNyArMTU0NCwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGZyb21SYQogICAg
IGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICphZmZpbml0eXN0cmluZ1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogYWZmaW5pdHlzdHJpbmdbXSA9IHsKICAgICAgICAg
Ik5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbSIsCiAgICAgICAgICJOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbSIKICAgICB9OwotICAgIHN0YXRpYyBjb25zdCBjaGFyICpib29sc3RyaW5n
W10gPSB7Ci0gICAgICAgICJGQUxTRSIsCi0gICAgICAgICJUUlVFIgotICAgIH07CiAKICAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRv
U3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSk7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGFmZmluaXR5OiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZmZpbml0eXN0cmluZ1thZmZpbml0eV0pOyAKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgc3RpbGxTZWxlY3Rpbmc6Iik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCi0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURToiCisgICAgICAg
ICAgICAiIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSwKKyAgICAgICAgICAgICIgdG9ET01SYW5nZToiLCBzdHJp
bmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSwKKyAgICAgICAgICAgICIgYWZmaW5p
dHk6IiwgYWZmaW5pdHlzdHJpbmdbYWZmaW5pdHldLAorICAgICAgICAgICAgIiBzdGlsbFNlbGVj
dGluZzoiLCBzdGlsbFNlbGVjdGluZyA/ICJUUlVFIiA6ICJGQUxTRSIsICdcbicpKTsKICAgICB9
CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0
aW5nKCk7CiB9CkBAIC0xNjQ2LDEzICsxNTY2LDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OnNob3VsZEFwcGx5U3R5bGUoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlLAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgdG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAg
ICAgICAgIiBzaG91bGRBcHBseVN0eWxlOiIsIHN0eWxlRGVjVG9TdHIoc3R5bGUpLAorICAgICAg
ICAgICAgIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCByYW5nZSksICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjY1LDExICsxNTgxLDcg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBu
b3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCht
YWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIsIG5v
dGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZEVuZEVkaXRpbmcoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTE2ODAsMTEgKzE1
OTIsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
bWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6Iiwgbm90
aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
Q2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xNjk1LDExICsxNjAzLDcg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cmluZ1JlZiBub3RpZmlj
YXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdc
bicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihX
S1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTcxMCwxMSArMTYxNCw3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZp
Y2F0aW9uTmFtZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiKTsKLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFr
ZVN0cmluZygiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiLCBu
b3RpZmljYXRpb25OYW1lLCAnXG4nKSk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CkBAIC0xNzgzLDcgKzE2ODMsNyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlz
dG9yeSgpCiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoCiAgICAgICAgICJcbj09PT09PT09PT09
PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09PT09PT09PT09PT09XG4iLAotICAgICAgICB0b1dURlN0
cmluZyhhZG9wdFdLKFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UsIHRv
V0soIi9MYXlvdXRUZXN0cy8iKS5nZXQoKSkpLmdldCgpKSwKKyAgICAgICAgYWRvcHRXSyhXS0J1
bmRsZVBhZ2VEdW1wSGlzdG9yeUZvclRlc3RpbmcobV9wYWdlLCB0b1dLKCIvTGF5b3V0VGVzdHMv
IikuZ2V0KCkpKS5nZXQoKSwKICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09XG4iCiAgICAgKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428721</attachid>
            <date>2021-05-14 23:59:39 -0700</date>
            <delta_ts>2021-05-15 16:53:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210514235939.patch</filename>
            <type>text/plain</type>
            <size>61410</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk3ZjEzYTEyNWQyM2ZkODg2YWJlYzFk
YjFmNTJjOTc2OWY0YTc4NTkuLjQxM2IzOGViOTdhYWNkOTJmODY5NjhjMzdlNzQxYmYzNzgzNzEx
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMDUtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBv
cnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgKiB3dGYvUGxhdGZv
cm1GVFcuY21ha2U6IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0
dG8uCisgICAgICAgICogd3RmL1BsYXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjphcHBlbmQpOiBEZWxldGVkIHRoZSBvdmVybG9hZCBmb3IgQ0ZTdHJpbmdSZWYuCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBEZWxldGVkIHRoZSBzcGVjaWFsIGNhc2UgZm9y
IENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmlu
Z0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQuIFNwZWNpYWxpemVzIFN0cmluZ1R5cGVBZGFwdGVyIGZv
cgorICAgICAgICBib3RoIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyAqLiBJZiBDRlN0cmluZ0dl
dENTdHJpbmdQdHIgd29ya3MgZm9yIExhdGluLTEsIHRoZW4KKyAgICAgICAgZG9lcyB0aGUgOC1i
aXQgY29kZSBwYXRoLCBvdGhlcndpc2UgdGhlIDE2LWJpdC4KKworICAgICAgICAqIHd0Zi90ZXh0
L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbTogSW5jbHVkZSBTdHJpbmdDb25jYXRlbmF0ZUNGLmgs
IHNpbmNlIGl0J3MKKyAgICAgICAgbm93IG5lZWRlZCB0byB1c2UgQ0ZTdHJpbmdSZWYgd2l0aCBT
dHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgRHJvcCBsZWdhY3kgLyBwcmVmaXhlZCBXZWJBdWRpbyBpbXBsZW1lbnRh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGNlMjRhY2RkMmZiMWU4MGY5MDEyMjBlZTgxNGQ0NTg2MzZjMDM1
MTIuLjkwYTI3YTg5ZDdkNTQ1MzVhNGU2ZTY1Y2E2MThmZWJlNDVmYTFmZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMyBAQAorMjAyMS0wNS0xNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBmcm9t
IFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yIGNvbnN0KTogVHdlYWtlZAorICAgICAgICBjb2Rp
bmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRDU1MpOiBVc2UgdmFyaWFk
aWMgU3RyaW5nQnVpbGRlcjo6YXBwZW5kIGluc3RlYWQgb2YgbWFueQorICAgICAgICBzZXBhcmF0
ZSBjYWxscy4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
OjpjYXB0aW9uc0RlZmF1bHRGb250Q1NTIGNvbnN0KToKKyAgICAgICAgVHdlYWtlZCBjb2Rpbmcg
c3R5bGUgYSBiaXQsIGFuZCB1c2UgdmFyaWFkaWMgU3RyaW5CdWlsZGVyOjphcHBlbmQgY2FsbHMK
KyAgICAgICAgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgYW5kIHN0cmVhbWxpbmUgdGhl
IGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6
Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUgY29uc3QpOgorICAgICAgICBEaXR0by4gQWxzbyBy
ZW1vdmVkIHVubmVjZXNzYXJ5IGNoZWNrcyB0aGF0IHN0cmluZ3MgYXJlIGVtcHR5IGJlZm9yZSBh
cHBlbmRpbmcuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFn
ZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6Y29va2llc0ZvclNlc3Npb24gY29uc3QpOiBEaXR0by4KKwogMjAyMS0wNS0xNCAgUm9iIEJ1
aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFByb3ZpZGUgY3VzdG9tIFNldElubGlu
ZUZpbGxHcmFkaWVudCBjb3B5IGN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWE2YjFlNTgwYTY5MzQyYWRiMGRh
MzI0NzdmZjk3OGM3NTk4MzUxYy4uZDNmZWI0ZTBiNDFmYTdiM2ExZWEwYzY4MGUwYzE4OWJkNzU5
NmZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0xNCAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJp
bmcgc3VwcG9ydCBmcm9tIFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOiBV
c2UgbWFrZVN0cmluZyBpbnN0ZWFkCisgICAgICAgIG9mIFN0cmluZ0J1aWxkZXIuCisKIDIwMjEt
MDUtMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UkVHUkVTU0lPTiAocjI2OTgyNCk6IFJhbmRvbSB0aWxlIGNvcnJ1cHRpb24gd2hlbiBzY3JvbGxp
bmcvem9vbWluZyBpbiBtYWNDYXRhbHlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggM2FlMDVlNzAxNWU1NjJkZGQ0ZDI2M2RiMTNmMDc0OTczMTBjZmUyYy4u
ZDFmZTA2NWIzZjk5NjVlYTg5MjgxNGQwZGNjMGNlNzJmY2MxYTBmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OTgsNiArNDk4LDcgQEAKIAkJOTNBQzkx
QTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjVCNDREMjIx
M0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSGV4TnVtYmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNCNUI0NTAyMjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMb2dnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyogU3RyaW5nQ29uY2F0ZW5hdGVDRi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdDb25jYXRlbmF0ZUNGLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDE5MUNGMjBDQUVDRTgwMEM1MUI4RSAvKiBv
YmpjU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9iamNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNEREU5MzExQ0RDMDUyRDAwRkQzNDkxIC8qIGR5bGRTUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZHlsZFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0YxOTkzRDE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdWaWV3LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyNSw2ICs5MjYsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQTVCQTE1RjcxODI0MzVBNjAwQTgyRTY5IC8qIEF0b21TdHJpbmdJbXBsQ0YuY3BwICovLAog
CQkJCUE1QkExNUY4MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgKi8sCisJCQkJOTNE
MDAxN0IyNjREQkFDRjAwQkNGMTA5IC8qIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaCAqLywKIAkJCQlB
NUJBMTVGOTE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENGLmNwcCAqLywKIAkJCQk5Mzkz
NEJENDE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNwcCAqLywKIAkJCQkxQ0NEQjE0
OTFFNTY2NjI2MDA2QzczQzAgLyogVGV4dEJyZWFrSXRlcmF0b3JDRi5oICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUZUVy5jbWFrZQppbmRleCA5NzFmZGViMjU5NTBlZWI3NzhkNWQ3MGUxYWRjZmQ1MmFkNmFk
MjllLi5iZmExM2QxZmU4MGIzMDdhNTJiM2ZkZGJlZGExZTY5N2QzOGU1M2M5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUZUVy5jbWFrZQpAQCAtMzksNiArMzksNyBAQCBpZiAoVVNFX0NGKQogICAgICAgICBj
Zi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVDYXN0c0NGLmgKIAorICAgICAgICB0ZXh0
L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgICAgICB0ZXh0L2NmL1RleHRCcmVha0l0ZXJh
dG9yQ0YuaAogICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCBlMjgwOTk3NDI3MTljNzc5YWMzZWFkZjQ2NjEzMzNkODc4ZWZkY2Rk
Li43Y2RjYzRiMTZiZTIyZTQ3NWUyMmE4NmFkMGU3YWM0OGRlMWRkMTE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtNDEsNiArNDEsNyBAQCBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hF
QURFUlMKIAogICAgIHNwaS9tYWMvTWV0YWRhdGFTUEkuaAogCisgICAgdGV4dC9jZi9TdHJpbmdD
b25jYXRlbmF0ZUNGLmgKICAgICB0ZXh0L2NmL1RleHRCcmVha0l0ZXJhdG9yQ0YuaAogKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDZlODBiOTlhMDRhNmM2ZGU0ZTJmZjU5YTdiNGVk
NGM4YzRhYWZhYjkuLjkwZmQyNmQ3OGM2OTRkYjM2ZGQwODI0MWU5ODhlNDJmNTU1N2U1MTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0zNyw2ICszNyw3IEBAIGlmIChVU0VfQ0YpCiAg
ICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAgY2YvVHlwZUNhc3RzQ0YuaAogCisgICAg
ICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCiAgICAgICAgIHRleHQvY2YvVGV4dEJy
ZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCAxZTBjMThhYzlkMjBlZDgyMGZlYjg2
ODVmY2NmODJiMTA2MDExNDJkLi5mZTM2MTA2MDhkYzMzZDdjYjA4ZTVmZDU3NDhkZjhkZjdkM2Rl
MDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTM3OSwyMCArMzc5
LDYgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgfQogfQogCi0jaWYgVVNFKENGKQotCi12
b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChDRlN0cmluZ1JlZiBzdHJpbmcpCi17Ci0gICAgLy8g
RmFzdCBwYXRoOiBhdm9pZCBjb25zdHJ1Y3RpbmcgYSB0ZW1wb3JhcnkgU3RyaW5nIHdoZW4gcG9z
c2libGUuCi0gICAgaWYgKGF1dG8qIGNoYXJhY3RlcnMgPSBDRlN0cmluZ0dldENTdHJpbmdQdHIo
c3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSkpIHsKLSAgICAgICAgYXBwZW5kQ2hh
cmFjdGVycyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIENGU3Ry
aW5nR2V0TGVuZ3RoKHN0cmluZykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGFwcGVu
ZChTdHJpbmcoc3RyaW5nKSk7Ci19Ci0KLSNlbmRpZgotCiBib29sIFN0cmluZ0J1aWxkZXI6OmNh
blNocmluaygpIGNvbnN0CiB7CiAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmgKaW5kZXggNzAxOGExYWI3YmRiZDc0ZTZjYjdhZmNkMzU0NGVhZWI5
MzkwYmU1ZS4uYjVmOTUxNjE5YjVlYWJlZjYxMThmNTM1YjMzNmE0YjljZTI2Y2I1YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0yOCwxMCArMjgsOCBAQAogCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC0xMzUsMTMgKzEzMyw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGFwcGVuZENoYXJh
Y3RlcnMoc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7CiAg
ICAgfQogCi0jaWYgVVNFKENGKQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChD
RlN0cmluZ1JlZik7Ci0jZW5kaWYKLSNpZiBVU0UoQ0YpICYmIGRlZmluZWQoX19PQkpDX18pCi0g
ICAgdm9pZCBhcHBlbmQoTlNTdHJpbmcgKnN0cmluZykgeyBhcHBlbmQoKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKXN0cmluZyk7IH0KLSNlbmRpZgotICAgIAogICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCA9
IFN0cmluZzo6TWF4TGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKG9mZnNldCA+PSBzdHJpbmcu
bGVuZ3RoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNh
dGVuYXRlQ0YuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjAyYTgxZDIyNmQ3MzRiMDk4YzYyMGEwZGFhNjkyZmMyNTg4NzBkYjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRl
Q0YuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCisjaWYgVVNFKENGKQorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmlu
Z1JlZj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVmKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IENGU3RyaW5nR2V0
TGVuZ3RoKG1fc3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3N0cmluZyB8fCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcsIGtDRlN0cmluZ0Vu
Y29kaW5nSVNPTGF0aW4xKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0ZT
dHJpbmdSZWYgbV9zdHJpbmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJp
bmdSZWY+OjpTdHJpbmdUeXBlQWRhcHRlcihDRlN0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0
cmluZyB7IHN0cmluZyB9Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlw
ZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciogZGVzdGluYXRpb24p
IGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBzdGQ6Om1lbWNweShkZXN0aW5h
dGlvbiwgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lT
T0xhdGluMSksIENGU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSk7Cit9CisKK3RlbXBsYXRlPD4g
aW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFy
PihVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAg
ICBDRlN0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5n
R2V0TGVuZ3RoKG1fc3RyaW5nKSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3RpbmF0
aW9uKSk7Cit9CisKKyNpZmRlZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5
cGVBZGFwdGVyPE5TU3RyaW5nICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5n
UmVmPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmluZykK
KyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKXN0cmluZykKKyAgICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2VuZGlm
IC8vIFVTRShDRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0
cmVhbUNvY29hLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2Eu
bW0KaW5kZXggYzc0YmY5Y2NmZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2Yjlk
M2Y0MTZhZDI0OTczNDY0NWRmZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0IDx3
dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBU
ZXh0U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwCmluZGV4IDczYzgwMWI5MzhjN2E4ZDhmNGQ0ZDc1NTNlYWU2Zjc1MTNhMTgxNWUuLjJh
YmI1MTIxMmFjMDVlYzFkMDk5NTZmNDRmNThmMjQyMTAyZjRkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC00
OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNG
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1
bi5oIgpAQCAtMzA4LDEyICszMDksMTEgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MoKSBjb25zdAogQ29sb3IgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9ydGFudCkgY29u
c3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0
YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29w
eUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlv
cikpOwotICAgIENvbG9yIHRleHRDb2xvcihjb2xvci5nZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29s
b3IuaXNWYWxpZCgpKQorICAgIENvbG9yIHRleHRDb2xvcihhZG9wdENGKE1BQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5Rm9yZWdyb3VuZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
JmJlaGF2aW9yKSkuZ2V0KCkpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkgewogICAg
ICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNw
ZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNr
LWNvbnRhaW5lci4KICAgICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAorICAg
IH0KICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yVXNlVmFsdWU7CiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdl
dEZvcmVncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2
aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKQEAgLTMyNSwyMSArMzI1LDE0IEBAIFN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25z
dAogewogICAgIGJvb2wgaW1wb3J0YW50OwogICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRpb25z
VGV4dENvbG9yKGltcG9ydGFudCk7Ci0KICAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlD
U1MoQ1NTUHJvcGVydHlDb2xvciwgdGV4dENvbG9yLCBpbXBvcnRhbnQpOwogfQogCiBzdGF0aWMg
dm9pZCBhcHBlbmRDU1MoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgQ1NTUHJvcGVydHlJRCBpZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgYnVpbGRlci5hcHBl
bmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzonKTsK
LSAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSk7Ci0gICAgaWYgKGltcG9ydGFudCkKLSAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KCc7Jyk7CisgICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSwgJzon
LCB2YWx1ZSwgaW1wb3J0YW50ID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogfQogICAgIAogU3Ry
aW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjp3aW5kb3dSb3VuZGVkQ29ybmVyUmFk
aXVzQ1NTKCkgY29uc3QKQEAgLTM3OSw3ICszNzIsNiBAQCBib29sIENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGOjpjYXB0aW9uU3Ryb2tlV2lkdGhGb3JGb250KGZsb2F0IGZvbnRTaXplLCBj
bwogICAgIC8vIFNpbmNlIG9ubHkgaGFsZiBvZiB0aGUgc3Ryb2tlIGlzIHZpc2libGUgYmVjYXVz
ZSB0aGUgc3Ryb2tlIGlzIGRyYXduIGJlZm9yZSB0aGUgZmlsbCwgd2UgZG91YmxlIHRoZSBzdHJv
a2Ugd2lkdGggaGVyZS4KICAgICBzdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoUHQgKiAyOwogICAg
IGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VW
YWx1ZTsKLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE4LDI0ICs0MTAsMTcgQEAg
U3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0RlZmF1bHRGb250
Q1NTKCkgY29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7
CiAgICAgCi0gICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnQgPSBhZG9wdENG
KE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0aW9u
QXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VGb250
U3R5bGVEZWZhdWx0KSk7CisgICAgYXV0byBmb250ID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJh
bmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5V
c2VyLCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVsdCkpOwog
ICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZXRh
aW5QdHI8Q0ZUeXBlUmVmPiBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJp
YnV0ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOworICAgIGF1dG8gbmFtZSA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9u
dE5hbWVBdHRyaWJ1dGUpKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIAotICAgIGJ1aWxkZXIu
YXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjogXCIiKTsKLSAgICBidWlsZGVyLmFwcGVuZChzdGF0
aWNfY2FzdDxDRlN0cmluZ1JlZj4obmFtZS5nZXQoKSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCci
Jyk7Ci0KLSAgICBhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkFycmF5
UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250Q2Fz
Y2FkZUxpc3RBdHRyaWJ1dGUpKSk7Ci0KLSAgICBpZiAoY2FzY2FkZUxpc3QpIHsKKyAgICBidWls
ZGVyLmFwcGVuZCgiZm9udC1mYW1pbHk6IFwiIiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG5h
bWUuZ2V0KCkpLCAnIicpOworICAgIGlmIChhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0
aWNfY2FzdDxDRkFycmF5UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250Lmdl
dCgpLCBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUpKSkpIHsKICAgICAgICAgZm9yIChDRklu
ZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGNhc2NhZGVMaXN0LmdldCgpKTsgaSsrKSB7
CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3Jp
cHRvclJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjYXNjYWRlTGlzdC5nZXQoKSwgaSkpOwog
ICAgICAgICAgICAgaWYgKCFmb250Q2FzY2FkZSkKQEAgLTQ0MywxNiArNDI4LDEwIEBAIFN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygp
IGNvbnN0CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlTmFtZSA9IGFkb3B0Q0YoQ1RGb250
RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udENhc2NhZGUsIGtDVEZvbnROYW1lQXR0cmlidXRl
KSk7CiAgICAgICAgICAgICBpZiAoIWZvbnRDYXNjYWRlTmFtZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwiIik7Ci0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2NhZGVOYW1l
LmdldCgpKSk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiwgXCIiLCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2Nh
ZGVOYW1lLmdldCgpKSwgJyInKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoYmVo
YXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKQotICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAhaW1wb3J0YW50Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
JzsnKTsKLSAgICAKKyAgICBidWlsZGVyLmFwcGVuZChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBw
ZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUgPyAiICFpbXBvcnRhbnQ7IiA6ICI7Iik7CiAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApAQCAtNTYxLDQzICs1NDAsMTggQEAgU3RyaW5n
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlk
ZSgpIGNvbnN0CiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKICAgICBp
ZiAoIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRpb25V
c2VyUHJlZmVyZW5jZXM6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7Ci0gICAgCisKICAg
ICBTdHJpbmcgY2FwdGlvbnNDb2xvciA9IGNhcHRpb25zVGV4dENvbG9yQ1NTKCk7CiAgICAgU3Ry
aW5nIGVkZ2VTdHlsZSA9IGNhcHRpb25zVGV4dEVkZ2VDU1MoKTsKICAgICBTdHJpbmcgZm9udE5h
bWUgPSBjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCk7CiAgICAgU3RyaW5nIGJhY2tncm91bmQgPSBj
YXB0aW9uc0JhY2tncm91bmRDU1MoKTsKLSAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8
ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9u
dE5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFw
cGVuZExpdGVyYWwoIiA6OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQoVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2FwdGlv
bnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWJhY2tncm91bmQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKGJhY2tncm91bmQpOwotICAgICAgICBpZiAoIWNhcHRpb25zQ29sb3IuaXNF
bXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGNh
cHRpb25zQ29sb3IpOwotICAgICAgICBpZiAoIWVkZ2VTdHlsZS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoZWRnZVN0eWxlKTsKLSAgICAg
ICAgaWYgKCFmb250TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRl
U3R5bGVTaGVldC5hcHBlbmQoZm9udE5hbWUpOwotICAgICAgICAKLSAgICAgICAgY2FwdGlvbnNP
dmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQotICAgIAorICAgIGlmICghYmFj
a2dyb3VuZC5pc0VtcHR5KCkgfHwgIWNhcHRpb25zQ29sb3IuaXNFbXB0eSgpIHx8ICFlZGdlU3R5
bGUuaXNFbXB0eSgpIHx8ICFmb250TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25zT3Zl
cnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6IiwgVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1
ZG9JZCgpLCAneycsIGJhY2tncm91bmQsIGNhcHRpb25zQ29sb3IsIGVkZ2VTdHlsZSwgZm9udE5h
bWUsICd9Jyk7CisKICAgICBTdHJpbmcgd2luZG93Q29sb3IgPSBjYXB0aW9uc1dpbmRvd0NTUygp
OwogICAgIFN0cmluZyB3aW5kb3dDb3JuZXJSYWRpdXMgPSB3aW5kb3dSb3VuZGVkQ29ybmVyUmFk
aXVzQ1NTKCk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5l
clJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQu
YXBwZW5kTGl0ZXJhbCgiIDo6Iik7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0
LmFwcGVuZChUZXh0VHJhY2tDdWU6OmN1ZUJhY2tkcm9wU2hhZG93UHNldWRvSWQoKSk7Ci0gICAg
ICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgneycpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092
ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29sb3IpOwotICAgICAgICBpZiAoIXdpbmRv
d0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb3JuZXJSYWRpdXMpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ30nKTsKLSAgICB9
CisgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5lclJhZGl1cy5p
c0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6
IiwgVGV4dFRyYWNrQ3VlOjpjdWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCksICd7Jywgd2luZG93
Q29sb3IsIHdpbmRvd0Nvcm5lclJhZGl1cywgJ30nKTsKICNlbmRpZiAvLyBIQVZFKE1FRElBX0FD
Q0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogCiAgICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlU2V0dGluZyBzdHlsZSB0
bzpcbiVzIiwgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQudG9TdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2Ev
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IDYwZTY3MGYy
MDY2ZDYwNThiMmU1ZWI3OWViN2RjMzBjNWNiNGIyOGUuLjExYzlhMjM4M2NkNmM4YzMwMWExYTA4
ZGNkZWFmYWU3OWQyNjJiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKIEBpbnRlcmZhY2Ug
TlNVUkwgKCkKIC0gKENGVVJMUmVmKV9jZnVybDsKQEAgLTM0OSwzMSArMzUwLDIzIEBAIHN0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Np
b24oY29uc3QgVVJMJiBmaXJzCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAot
ICAgIFJldGFpblB0cjxOU0FycmF5PiBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5
LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3Vs
ZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKLSAgICBpZiAoIWNvb2tpZXMgfHwgIVtj
b29raWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJl
dHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3
b3VsZCBjcmVhdGUgYmVsb3cuCisgICAgYXV0byBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJz
dFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAs
IHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKKyAgICBpZiAoIVtjb29raWVz
IGNvdW50XSkKKyAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBh
IG51bGwgc3RyaW5nOyBTdHJpbmdCdWlsZGVyIGJlbG93IHdvdWxkIGNyZWF0ZSBhbiBlbXB0eSBv
bmUuCiAKICAgICBTdHJpbmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwogICAgIGJvb2wgZGlkQWNj
ZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOwogICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUg
aW4gY29va2llcy5nZXQoKSkgewogICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0p
CiAgICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAm
JiBbY29va2llIGlzSFRUUE9ubHldKQogICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAg
aWYgKFtjb29raWUgaXNTZWN1cmVdKSB7CiAgICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29r
aWVzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNs
dWRlU2VjdXJlQ29va2llczo6Tm8pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLQotICAgICAgICBpZiAoIWNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGNvb2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1
aWxkZXIuYXBwZW5kKFtjb29raWUgbmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmQoJz0nKTsKLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsK
KyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKGNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSA/
ICIiIDogIjsgIiwgW2Nvb2tpZSBuYW1lXSwgJz0nLCBbY29va2llIHZhbHVlXSk7CiAgICAgfQog
ICAgIHJldHVybiB7IGNvb2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNv
b2tpZXMgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IGYyZDky
ZjE5N2QxN2NhMjk3MGQwN2RjMTQwYWIwMGE2MWMxMzU4ZmMuLmNmY2Q5ZjNjMDNjOWM2YTFhM2Qz
NGVkMWNjOTc3N2E4MDcyN2U5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0KQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAj
aW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvRW50aXRsZW1lbnRzLmg+Ci0j
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9jZi9T
dHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9y
dCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpAQCAtMTE1LDE1ICsxMTUsMTAgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzJgogICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29v
a2llczsKICAgICB9CiAKLSAgICBhdXRvKiBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtkZWZh
dWx0cyBzdHJpbmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdOwotICAgIGlm
IChtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICBVUkwgdXJsIHsgVVJMKCksIG1h
bnVhbFByZXZhbGVudFJlc291cmNlIH07Ci0gICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkgewot
ICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJodHRwOi8vIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICB1cmwgPSB7IFVSTCgpLCBidWlsZGVy
LnRvU3RyaW5nKCkgfTsKLSAgICAgICAgfQorICAgIGlmIChhdXRvIG1hbnVhbFByZXZhbGVudFJl
c291cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1hbnVhbFByZXZhbGVudFJlc291
cmNlIl0pIHsKKyAgICAgICAgVVJMIHVybCB7IHsgfSwgbWFudWFsUHJldmFsZW50UmVzb3VyY2Ug
fTsKKyAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgdXJsID0geyB7IH0s
IG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgfTsKICAgICAg
ICAgaWYgKHVybC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAzNWVmNmQ1YWQ5MTIzNmE2OGU5NjRmMTAwYzRjYmNhY2M0OTllNmJhLi4xZDVhNTIx
ZmUyNGY3NWE4NmM5Y2IwYzU3MzA5MDBjOTAxMDYyYjc5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjEtMDUtMTQg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdS
ZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29u
Y2F0ZW5hdGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5j
cHA6CisgICAgICAgIEFkZGVkIGluY2x1ZGUgb2YgU3RyaW5nQ29uY2F0ZW5hdGVDRi5oLgorICAg
ICAgICBBZGRlZCBTdHJpbmdUeXBlQWRhcHRlciBmb3IgV0tTdHJpbmdSZWYuCisgICAgICAgIChX
VFI6OnN0eWxlRGVjVG9TdHIpOiBVc2UgQVNDSUlMaXRlcmFsIGluc3RlYWQgb2YgU3RyaW5nQnVp
bGRlci4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVtb3ZlZCB1bm5lZWRlZCB0b1dURlN0cmlu
ZyBzaW5jZSB0aGUgV0tTdHJpbmdSZWYKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXIgdGFrZXMg
Y2FyZSBvZiBpdC4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9tIGZyYW1lVG9T
dHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpkdW1wUmVzb3VyY2VVUkwpOiBVc2Ug
YXBwZW5kIGluc3RlYWQgb2YgYXBwZW5kTGl0ZXJhbC4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1l
RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpkdW1wTG9hZEV2ZW50KTogVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OnN0cmluZyk6
IFJlbmFtZWQgZnJvbSBhIGxvbmdlciBuYW1lLiBSZXR1cm4gYSBTdHJpbmcKKyAgICAgICAgaW5z
dGVhZCBvZiBidWlsZGluZyBpbiBhIFN0cmluZ0J1aWxkZXIuIFVzZSBtYWtlU3RyaW5nLgorICAg
ICAgICAoV1RSOjpzdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6ZHVtcEVycm9yRGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBSZW1vdmVkCisgICAgICAgIHVubmVlZGVkIHRv
V1RGU3RyaW5nLgorICAgICAgICAoV1RSOjpkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKTogUmVtb3Zl
ZCBhbgorICAgICAgICB1bm5lZWRlZCBsb2NhbCB2YXJpYWJsZS4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKTogUmVtb3ZlZCB1bm5lZWRlZCB0b1dURlN0cmluZy4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvckZyYW1lKToKKyAgICAgICAgVXBkYXRlZCBmb3IgZnVuY3RvbiBuYW1lIGNoYW5n
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JG
cmFtZSk6IERpdHRvLgorICAgICAgICBBbHNvIHVzZSB2YXJpYWRpYyBhcHBlbmQuIEFsc28gdXNl
IG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlRm9yUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsTG9hZEZvclJlc291cmNlKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBv
bGljeUZvclJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbEFkZE1lc3NhZ2VUb0NvbnNvbGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5v
ZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNl
cnRUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxk
RGVsZXRlUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkQXBwbHlTdHlsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlzdG9yeSk6IERpdHRvLgorCiAyMDIxLTA1LTE0
ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViS2l0
VGVzdFJ1bm5lcl0gRm9yd2FyZCBXZWJDb250ZW50IHRlcm1pbmF0aW9uIHJlYXNvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGFiZDNhZmRlOTFmMDhlODc5NGYxMGFiZDZkMTBkYzM4OGQ0
NWIyODQuLmVjOGJlNGQ0ZjIxOTUzNGEwYTgxZTM2Mzk5OWMwNTBjMmNjZGY1NzcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZS5jcHAKQEAgLTUyLDEyICs1Miw0NiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBV
U0UoQ0YpCisjaW5jbHVkZSA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgorI2Vu
ZGlmCisKICNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNU
MkQpCiAjaW5jbHVkZSAiV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmgiCiAjZW5kaWYKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gY2xhc3MgU3Ry
aW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRh
cHRlcihXS1N0cmluZ1JlZik7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmcgPyBXS1N0cmluZ0dldExlbmd0aChtX3N0cmluZykgOiAwOyB9CisgICAgYm9vbCBp
czhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9zdHJpbmc7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSopIGNvbnN0OworCitw
cml2YXRlOgorICAgIFdLU3RyaW5nUmVmIG1fc3RyaW5nOworfTsKKworaW5saW5lIFN0cmluZ1R5
cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6U3RyaW5nVHlwZUFkYXB0ZXIoV0tTdHJpbmdSZWYgc3Ry
aW5nKQorICAgIDogbV9zdHJpbmcgeyBzdHJpbmcgfQoreworfQorCit0ZW1wbGF0ZTw+IGlubGlu
ZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVUbzxMQ2hhcj4oTENo
YXIqKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFw
dGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVUbzxVQ2hhcj4oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25z
dAoreworICAgIGlmIChtX3N0cmluZykKKyAgICAgICAgV0tTdHJpbmdHZXRDaGFyYWN0ZXJzKG1f
c3RyaW5nLCByZWludGVycHJldF9jYXN0PFdLQ2hhcio+KGRlc3RpbmF0aW9uKSwgV0tTdHJpbmdH
ZXRMZW5ndGgobV9zdHJpbmcpKTsKK30KKworfQorCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGlj
IGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29u
c3QgY2hhciogbmFtZSkKQEAgLTg5LDcgKzEyMyw3IEBAIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1w
UGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwK
ICAgICByZXR1cm4gZHVtcFBhdGgoY29udGV4dCwgbm9kZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBX
VEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlw
dFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlUmVmKQorc3RhdGlj
IFdURjo6U3RyaW5nIHN0cmluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRX
b3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZVJlZikKIHsKICAgICBp
ZiAoIXJhbmdlUmVmKQogICAgICAgICByZXR1cm4gIihudWxsKSI7CkBAIC0xMzAsNDMgKzE2NCwy
NiBAQCBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9TdHJp
bmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cAogICAgIHJldHVybiB0b1dLKCJpbGxlZ2FsIHZh
bHVlIik7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NT
U3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKK3N0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1Rv
U3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZikKIHsKICAgICAvLyBEdW1wUmVuZGVy
VHJlZSBjYWxscyAtW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gZGVzY3JpcHRpb25dLCB3aGljaCBq
dXN0IGR1bXBzIGNsYXNzIG5hbWUgYW5kIG9iamVjdCBhZGRyZXNzLgogICAgIC8vIE5vIGV4aXN0
aW5nIHRlc3RzIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgcGF0aCBhdCB0aGUgdGltZSBvZiB0aGlz
IHdyaXRpbmcsIGJlY2F1c2UgV2ViQ29yZSBkb2Vzbid0IGNhbGwKICAgICAvLyB0aGUgZWRpdGlu
ZyBjbGllbnQgaWYgdGhlIHN0eWxpbmcgb3BlcmF0aW9uIHNvdXJjZSBpcyBDb21tYW5kRnJvbURP
TSBvciBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlLgotICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxET01DU1NT
dHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Iik7Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICByZXR1cm4gIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Il9z
OwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3Jp
Z2luKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKCd7JywgdG9XVEZTdHJpbmcoYWRvcHRXSyhX
S1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpKSwgIiwgIiwgdG9XVEZTdHJpbmco
YWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpLCAiLCAiLCBXS1NlY3Vy
aXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pLCAnfScpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCd7
JywgYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpLmdldCgpLCAi
LCAiLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKS5nZXQoKSwgIiwg
IiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSwgJ30nKTsKIH0KIAotc3RhdGljIFdU
Rjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKK3N0YXRpYyBXVEY6
OlN0cmluZyBzdHJpbmcoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKICAgICBhdXRvIG5hbWUg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1l
KSkgewotICAgICAgICBpZiAoIVdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkgewotICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZyYW1lIFwiIik7Ci0gICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91cykiKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBi
b29sIGlzTWFpbiA9IFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSk7CisgICAgaWYgKFdL
U3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGlzTWFpbiA/ICJtYWlu
IGZyYW1lIl9zIDogImZyYW1lIChhbm9ueW1vdXMpIl9zOworICAgIHJldHVybiBtYWtlU3RyaW5n
KGlzTWFpbiA/ICJtYWluIGZyYW1lIFwiIiA6ICJmcmFtZSBcIiIsIG5hbWUuZ2V0KCksICciJyk7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xvY2FsRmlsZVNjaGVtZShXS1N0cmluZ1JlZiBz
Y2hlbWUpCkBAIC0yMTAsNyArMjI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXNvdXJj
ZVVSTCh1aW50NjRfdCBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWkKICAgICBp
ZiAoYXNzaWduZWRVcmxzQ2FjaGUoKS5jb250YWlucyhpZGVudGlmaWVyKSkKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoYXNzaWduZWRVcmxzQ2FjaGUoKS5nZXQoaWRlbnRpZmllcikpOwog
ICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8dW5rbm93bj4i
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjx1bmtub3duPiIpOwogfQogCiBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OkluamVjdGVkQnVuZGxlUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkK
QEAgLTM5Myw2NyArNDEwLDMzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVy
VGVzdCgpCiAKIC8vIExvYWRlciBDbGllbnQgQ2FsbGJhY2tzCiAKLS8vIFN0cmluZyBvdXRwdXQg
bXVzdCBiZSBpZGVudGljYWwgdG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0XS4KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIpCi17Ci0gICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5h
bWUoZnJhbWUpKTsKLSAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewot
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
bWFpbiBmcmFtZSBcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhuYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91cykiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiZnJhbWUgXCIiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1l
KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyInKTsKLX0KLQogc3RhdGljIHZvaWQgZHVt
cExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBldmVudE5hbWUp
CiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGV2ZW50TmFtZSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3Ry
aW5nKHN0cmluZyhmcmFtZSksICIgLSAiLCBldmVudE5hbWUsICdcbicpKTsKIH0KIAotc3RhdGlj
IGlubGluZSB2b2lkIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
V0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCitz
dGF0aWMgU3RyaW5nIHN0cmluZyhXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCkKIHsKICAgICBhdXRv
IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAgYXV0byBm
aXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
cmVxdWVzdCkpOwogICAgIGF1dG8gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29w
eUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VS
TFJlcXVlc3QgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwg
bWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5
LmdldCgpKSwgIiwgaHR0cCBtZXRob2QgIik7Ci0gICAgaWYgKFdLU3RyaW5nSXNFbXB0eShodHRw
TWV0aG9kLmdldCgpKSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9u
ZSkiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KGh0dHBNZXRob2QpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOworICAgIHJldHVy
biBtYWtlU3RyaW5nKCI8TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHVybC5nZXQoKSksCisgICAgICAgICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0
YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSksCisgICAgICAgICIsIGh0dHAgbWV0
aG9kICIsIFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSA/ICIobm9uZSkiIDogIiIs
IGh0dHBNZXRob2QuZ2V0KCksICc+Jyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVz
cG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVmIHJl
c3BvbnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBib29sIHNob3VsZER1bXBSZXNw
b25zZUhlYWRlcnMgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgc3RyaW5nKFdLVVJMUmVzcG9uc2VS
ZWYgcmVzcG9uc2UsIGJvb2wgc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlKQogewog
ICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwot
ICAgIGlmICghdXJsKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51
bGwpIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIXVybCkKKyAgICAgICAgcmV0dXJuICIo
bnVsbCkiX3M7CisgICAgaWYgKCFzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzKSB7CisgICAgICAg
IHJldHVybiBtYWtlU3RyaW5nKCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHVybC5nZXQoKSksCisgICAgICAgICAgICAiLCBodHRwIHN0YXR1cyBjb2RlICIsIFdL
VVJMUmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSksICc+Jyk7CiAgICAgfQotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHVybC5nZXQoKSksICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tVUkxSZXNwb25zZUhU
VFBTdGF0dXNDb2RlKHJlc3BvbnNlKSk7Ci0gICAgaWYgKHNob3VsZER1bXBSZXNwb25zZUhlYWRl
cnMpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIsIEluamVjdGVkQnVuZGxlUGFn
ZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNwb25zZSksICIgaGVhZGVycyIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlc3Bv
bnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAgICAgIiwg
aHR0cCBzdGF0dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2Up
LAorICAgICAgICAiLCAiLCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQo
cmVzcG9uc2UpLCAiIGhlYWRlcnMiKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTQ4
MCw3ICs0NjMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0
YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgUwogCiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJvckRvbWFpbiwgIiwgY29kZSAiLCBlcnJv
ckNvZGUpOwogICAgIGlmIChhdXRvIHVybCA9IGFkb3B0V0soV0tFcnJvckNvcHlGYWlsaW5nVVJM
KGVycm9yKSkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwi
IiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpLCAnIicp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVSTCBcIiIsIGFkb3B0
V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdldCgpLCAnIicpOwogICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKQEAgLTcwMCw3ICs2ODMsNyBAQCBzdGF0aWMgdm9pZCBk
dW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWls
ZGVyJiBzdHJpbgogICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAw
LjAwMDAwMDAxKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHNob3VsZEluY2x1ZGVGcmFtZU5h
bWUpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAnIiwgdG9XVEZTdHJpbmco
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKSksICInICIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiZnJhbWUgJyIsIGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlO
YW1lKGZyYW1lKSkuZ2V0KCksICInICIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJzY3Jv
bGxlZCB0byAiLCB4LCAnLCcsIHksICdcbicpOwogfQogCkBAIC03NTgsOSArNzQxLDcgQEAgc3Rh
dGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFN0cmluZ0J1aWxkZXImIHN0cmkKICAgICAgICAgaWYgKCFoYXNEb2N1bWVudEVsZW1lbnQoc3Vi
ZnJhbWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdWJmcmFtZU5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCInXG4tLS0tLS0tLVxuIik7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIsIHN1YmZyYW1lTmFtZS5nZXQoKSwgIidc
bi0tLS0tLS0tXG4iKTsKIAogICAgICAgICBkdW1wRnJhbWVUZXh0KHN1YmZyYW1lLCBzdHJpbmdC
dWlsZGVyKTsKICAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KHN1YmZyYW1lLCBzdHJp
bmdCdWlsZGVyKTsKQEAgLTc4MCw4ICs3NjEsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZHVtcERPTUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZAog
I2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKICAg
ICBhdXRvIHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1l
KSk7CiAgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRC
eXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBh
dXRvIGNmU3RyaW5nID0gV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2Vi
QXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0
cmluZy5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV2ViQ29yZVRlc3RTdXBwb3J0
OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKS5nZXQoKSk7
CiAjZW5kaWYKIH0KIApAQCAtODA3LDkgKzc4Nyw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkdW1wKCkKICAgICBzd2l0Y2ggKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+d2hhdFRv
RHVtcCgpKSB7CiAgICAgY2FzZSBXaGF0VG9EdW1wOjpSZW5kZXJUcmVlOiB7CiAgICAgICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmcoKSkKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29w
eVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmcobV9wYWdlKSkuZ2V0
KCkpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0soV0tCdW5kbGVQ
YWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmcobV9wYWdl
KSkuZ2V0KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJUcmVlRXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihtX3BhZ2UsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+cmVuZGVy
VHJlZUR1bXBPcHRpb25zKCkpKS5nZXQoKSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50
YXRpb24obV9wYWdlLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnJlbmRlclRyZWVEdW1w
T3B0aW9ucygpKSkuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXaGF0
VG9EdW1wOjpNYWluRnJhbWVUZXh0OgpAQCAtODkwLDE5ICs4NzAsMTAgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLU3RyaW5nUmVmIHRpdGxlLCBX
S0J1bmRsZUZyYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVRpdGxlOiAiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgfQotCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiVElUTEUgQ0hBTkdFRDogJyIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIidcbiIpOwotICAgIH0KLQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoc3RyaW5nKGZyYW1lKSwgIiAtIGRpZFJlY2VpdmVUaXRsZTogIiwgdGl0
bGUsICdcbicpOworICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBUaXRsZUNoYW5nZXMoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlRJVExFIENI
QU5HRUQ6ICciLCB0aXRsZSwgIidcbiIpOwogICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIApAQCAtOTUxLDEwICs5MjIsNyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdEZvckZyYW1lKFdL
QnVuZGxlUGFnZVJlZiwgV0tCdQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIiAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIiwgcGF0aFN1
aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpLCAnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKHN0cmluZyhmcmFtZSksICIgLSB3aWxsUGVyZm9ybUNsaWVudFJl
ZGlyZWN0VG9VUkw6ICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsKSwgJ1xuJykpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZv
ckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5
cGUgdHlwZSkKQEAgLTk4Miw3ICs5NTAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
RmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAg
ICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lIik7
CiAKICAgICBpZiAodW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzID0gV0tCdW5kbGVG
cmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChmcmFtZSkpCi0gICAgICAgIGluamVjdGVkQnVuZGxl
Lm91dHB1dFRleHQobWFrZVN0cmluZyhmcmFtZVRvU3RyKGZyYW1lKSwgIiAtIGhhcyAiLCBwZW5k
aW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQgaGFuZGxlcihzKVxuIikpOworICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAt
IGhhcyAiLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQgaGFuZGxlcihzKVxu
IikpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRz
Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKQEAgLTEwNDksMTEgKzEwMTcsOCBAQCBX
S1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFt
ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlm
aWVyLCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgLSB3aWxsU2VuZFJlcXVlc3QgIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlZGlyZWN0UmVzcG9uc2UgIik7Ci0gICAgICAg
IGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlc3BvbnNlLCBz
dHJpbmdCdWlsZGVyLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxI
VFRQUmVkaXJlY3RlZFJlc3BvbnNlSGVhZGVycygpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ1xuJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgLSB3aWxsU2VuZFJl
cXVlc3QgIiwgc3RyaW5nKHJlcXVlc3QpLAorICAgICAgICAgICAgIiByZWRpcmVjdFJlc3BvbnNl
ICIsIHN0cmluZyhyZXNwb25zZSwgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wQWxsSFRUUFJlZGlyZWN0ZWRSZXNwb25zZUhlYWRlcnMoKSksICdcbicpOwogICAgICAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAg
fQogCkBAIC0xMDg2LDExICsxMDUxLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAg
ICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFt
ZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAg
ICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9z
dChob3N0LmdldCgpKSkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJCbG9ja2VkIGFjY2Vz
cyB0byBleHRlcm5hbCBVUkwgIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0
b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwotICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCht
YWtlU3RyaW5nKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIiwgdXJsU3RyaW5nLmdl
dCgpLCAnXG4nKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAg
IH0KQEAgLTExMTcsOSArMTA3OCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNl
aXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAg
ZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiKTsKLSAgICAg
ICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2Us
IHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiLCBzdHJp
bmcocmVzcG9uc2UpLCAnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIApAQCAtMTEzMiwxNCArMTA5MSwxMSBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2Uo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQgogICAgIGF1dG8gbWltZVR5cGVTdHJpbmcgPSBhZG9w
dFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKIAogICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
Zyh1cmxTdHJpbmcpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBoYXMgTUlN
RSB0eXBlICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1pbWVUeXBl
U3RyaW5nKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXJsU3RyaW5nLmdldCgpLCAiIGhh
cyBNSU1FIHR5cGUgIiwgbWltZVR5cGVTdHJpbmcuZ2V0KCkpOwogCiAgICAgU3RyaW5nIHBsYXRm
b3JtTWltZVR5cGUgPSBwbGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUocmVzcG9uc2UpOwogICAgIGlm
ICghcGxhdGZvcm1NaW1lVHlwZS5pc0VtcHR5KCkgJiYgcGxhdGZvcm1NaW1lVHlwZSAhPSB0b1dU
RlN0cmluZyhtaW1lVHlwZVN0cmluZykpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQocGxhdGZvcm1NaW1lVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiLCBwbGF0Zm9ybU1pbWVUeXBlKTsKICAg
ICB9CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTExNjIsNyArMTExOCw3
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UoV0tC
dW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lCiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CiAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmluaXNoTG9hZGluZ1xuIik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZEZpbmlzaExvYWRpbmdcbiIpOwogICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0K
IApAQCAtMTE3Nyw3ICsxMTMzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxM
b2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmUKIAogICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmll
ciwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBk
aWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAt
IGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKIAogICAgIGR1bXBFcnJvckRlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGVycm9yLCBzdHJpbmdCdWlsZGVyKTsKICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTExOTksNyArMTE1NSw2IEBAIGJvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpzaG91bGRDYWNoZVJlc3BvbnNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVG
cmFtZVJlZiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiAvLyBQb2xpY3kgQ2xpZW50IENhbGxi
YWNrcwogCiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFj
dGlvbiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdLVHlwZVJlZiogdXNlckRhdGEsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xMjI5LDEzICsxMTg0LDkgQEAgV0tCdW5kbGVQYWdlUG9s
aWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbihXS0IKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblVzZTsKIAog
ICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBQb2xpY3lDYWxs
YmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvblxuIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgaXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFt
ZSkgPyAieWVzIiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3Vs
ZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNo
b3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb25cbiIsIHN0cmluZyhyZXF1ZXN0KSwKKyAgICAgICAgICAgICIgaXMgbWFpbiBmcmFt
ZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIsCisg
ICAgICAgICAgICAiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2
aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikg
PyAieWVzIiA6ICJubyIsICdcbicpKTsKICAgICB9CiAKICAgICBpZiAoIWluamVjdGVkQnVuZGxl
LnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKQEAgLTEyNDUsMTkgKzEx
OTYsMTYgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBhdXRvIHVybFNjaGVtZSA9IGFk
b3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRl
bGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlBv
bGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwogICAgIGlmIChpc0xvY2FsRmlsZVNj
aGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhD
b21wb25lbnQodXJsLmdldCgpKSkuZ2V0KCkpOwogICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgp
KSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRoIG5hdmlnYXRpb24g
dHlwZSBcJyIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKE5hdmlnYXRp
b25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUo
bmF2aWdhdGlvbkFjdGlvbikpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJc
JyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdLVVJMQ29weVN0cmlu
Zyh1cmwuZ2V0KCkpKS5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiB3aXRoIG5h
dmlnYXRpb24gdHlwZSBcJyIsIE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpLmdldCgpLCAnXCcn
KTsKICAgICBhdXRvIGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9wdFdLKFdLQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25BY3Rpb24pKTsKICAgICBpZiAoaGl0
VGVzdFJlc3VsdFJlZikgewogICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdL
QnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJv
bSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dv
cmxkLmdldCgpLCBub2RlSGFuZGxlUmVmLmdldCgpKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgb3JpZ2luYXRpbmcgZnJvbSAiLCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0
KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAgICB9CiAKICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnXG4nKTsKQEAgLTEyNzcsNyArMTIyNSw3IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlv
biBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKFdLQnVuZGxlUGFn
CiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKSAmJiBpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgJiYgV0tVUkxSZXNwb25z
ZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBp
cyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgdG9XVEZTdHJpbmcoYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSkpLCAiXCdc
biIpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFr
ZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdn
ZXN0ZWQgZmlsZSBuYW1lIFwnIiwgYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZp
bGVuYW1lKHJlc3BvbnNlKSkuZ2V0KCksICInXG4iKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFdL
QnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTM2Nyw3ICsxMzE1LDcgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKFdLU3RyaW5n
UmVmIG1lc3NhZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFdURjo6U3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSB0b1dURlN0
cmluZyhtZXNzYWdlKTsKKyAgICBhdXRvIG1lc3NhZ2VTdHJpbmcgPSB0b1dURlN0cmluZyhtZXNz
YWdlKTsKICAgICBzaXplX3QgbnVsbENoYXJQb3MgPSBtZXNzYWdlU3RyaW5nLmZpbmQoVUNoYXIo
MCkpOwogICAgIGlmIChudWxsQ2hhclBvcyAhPSBXVEY6Om5vdEZvdW5kKQogICAgICAgICBtZXNz
YWdlU3RyaW5nLnRydW5jYXRlKG51bGxDaGFyUG9zKTsKQEAgLTEzOTMsNyArMTM0MSw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1JlZiBz
dGF0dXNiYXJUZXh0KQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNL
OiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpLCAnXG4nKSk7Cisg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBTVEFU
VVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iiwgc3RhdHVzYmFyVGV4dCwgJ1xuJykpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmlu
Z1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTQxNiw3ICsxMzY0LDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0Q29uZmlybShXS1N0cmluZ1Jl
ZiBtZXNzYWdlLCBXS0J1bmRsZUYKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5K
YXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLU3RyaW5nUmVmIGRlZmF1bHRW
YWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6ICIsIHRvV1RGU3RyaW5nKG1lc3NhZ2Up
LCAiLCBkZWZhdWx0IHRleHQ6IiwgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFpbGluZ1NwYWNlc0Fk
ZE5ld2xpbmUodG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSkpKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6ICIsIG1lc3NhZ2Us
ICIsIGRlZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWlsaW5nU3BhY2VzQWRk
TmV3bGluZSh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKSkpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0
eU9yaWdpblJlZiBvcmlnaW4sIGludDY0X3QgdG90YWxCeXRlc05lZWRlZCkKQEAgLTE0NDIsNyAr
MTM5MCw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VR
dW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKLSAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFT
RSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3Ry
aW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xu
JykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERF
TEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCBkYXRhYmFzZU5hbWUsICdc
bicpKTsKIAogICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKICAg
ICBkb3VibGUgdGVzdERlZmF1bHRRdW90YSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKQEAgLTE1MjUsNyArMTQ3Myw3IEBAIGJvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBy
YW5nZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJl
Z2luRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCks
IHJhbmdlKSwgJ1xuJykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iiwg
c3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJu
IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAK
QEAgLTE1MzYsNyArMTQ4NCw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRF
ZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3Ry
aW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiLCByYW5n
ZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CisgICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hv
dWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
cmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTE1NDYsMjIgKzE0OTQsMTcgQEAgYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVm
IG5vZGUsIFdLQnVuZGxlUmEKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBzdGF0aWMgY29uc3QgY2hhciogaW5zZXJ0
YWN0aW9uc3RyaW5nW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBpbnNl
cnRhY3Rpb25zdHJpbmdbXSA9IHsKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZCIs
CiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIiwKICAgICAgICAgIldlYlZpZXdJ
bnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2RlKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdl
OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3Ry
aW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxkSW5zZXJ0Tm9kZToi
LCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpLAorICAgICAgICAgICAgIiBy
ZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRv
UmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0aW9uOiIsIGluc2VydGFjdGlvbnN0cmlu
Z1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTU3MiwyMiArMTUxNSwxNyBA
QCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmluZ1JlZiB0
ZXh0LCBXS0J1bmRsZVJhbmdlSGFuZGxlUgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFy
ICppbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNo
YXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlv
blR5cGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQiLAogICAgICAgICAi
V2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKICAgICBpZiAoaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
cmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
Z2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlv
bnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0g
ICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5H
IERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxkSW5zZXJ0VGV4dDoiLCB0ZXh0LAorICAg
ICAgICAgICAgIiByZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCByYW5nZVRvUmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0aW9uOiIsIGluc2Vy
dGFjdGlvbnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJldHVybiBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTU5OCwx
MyArMTUzNiw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGREZWxldGVSYW5nZShX
S0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNU
ZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURPTVJhbmdlOiIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5n
ZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAg
ICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
LSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtl
U3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiLCBzdHJpbmco
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTYx
NCwyNyArMTU0NywxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGZyb21SYQogICAgIGlmICghaW5qZWN0
ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0
YXRpYyBjb25zdCBjaGFyICphZmZpbml0eXN0cmluZ1tdID0geworICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgY2hhciogYWZmaW5pdHlzdHJpbmdbXSA9IHsKICAgICAgICAgIk5TU2VsZWN0aW9u
QWZmaW5pdHlVcHN0cmVhbSIsCiAgICAgICAgICJOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSIKICAgICB9OwotICAgIHN0YXRpYyBjb25zdCBjaGFyICpib29sc3RyaW5nW10gPSB7Ci0gICAg
ICAgICJGQUxTRSIsCi0gICAgICAgICJUUlVFIgotICAgIH07CiAKICAgICBpZiAoaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJh
bmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwg
bV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIHRvRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJh
bmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGFmZmluaXR5OiIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChhZmZpbml0eXN0cmluZ1thZmZpbml0eV0pOyAKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgc3RpbGxTZWxlY3Rpbmc6Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCi0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1
dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURToiCisgICAgICAgICAgICAiIHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
ZnJvbVJhbmdlKSwKKyAgICAgICAgICAgICIgdG9ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCB0b1JhbmdlKSwKKyAgICAgICAgICAgICIgYWZmaW5pdHk6IiwgYWZmaW5p
dHlzdHJpbmdbYWZmaW5pdHldLAorICAgICAgICAgICAgIiBzdGlsbFNlbGVjdGluZzoiLCBzdGls
bFNlbGVjdGluZyA/ICJUUlVFIiA6ICJGQUxTRSIsICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJu
IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBA
IC0xNjQ2LDEzICsxNTY5LDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5
U3R5bGUoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlLAogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZEFwcGx5U3R5bGU6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0
eWxlRGVjVG9TdHIoc3R5bGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgdG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAgIiBzaG91
bGRBcHBseVN0eWxlOiIsIHN0eWxlRGVjVG9TdHIoc3R5bGUpLAorICAgICAgICAgICAgIiB0b0Vs
ZW1lbnRzSW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSks
ICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjY1LDExICsxNTg0LDcgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25O
YW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRp
dGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIsIG5vdGlmaWNhdGlvbk5h
bWUsICdcbicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmco
V0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTE2ODAsMTEgKzE1OTUsNyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRp
b25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygi
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6Iiwgbm90aWZpY2F0aW9uTmFt
ZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3Ry
aW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xNjk1LDExICsxNjA2LDcgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQog
ICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsK
LSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBu
b3RpZmljYXRpb25OYW1lKQpAQCAtMTcxMCwxMSArMTYxNyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkK
ICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiLCBub3RpZmljYXRpb25O
YW1lLCAnXG4nKSk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC0xNzgzLDcg
KzE2ODYsNyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlzdG9yeSgpCiB7CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoCiAgICAgICAgICJcbj09PT09PT09PT09PT09IEJhY2sgRm9y
d2FyZCBMaXN0ID09PT09PT09PT09PT09XG4iLAotICAgICAgICB0b1dURlN0cmluZyhhZG9wdFdL
KFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UsIHRvV0soIi9MYXlvdXRU
ZXN0cy8iKS5nZXQoKSkpLmdldCgpKSwKKyAgICAgICAgYWRvcHRXSyhXS0J1bmRsZVBhZ2VEdW1w
SGlzdG9yeUZvclRlc3RpbmcobV9wYWdlLCB0b1dLKCIvTGF5b3V0VGVzdHMvIikuZ2V0KCkpKS5n
ZXQoKSwKICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09XG4iCiAgICAgKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428749</attachid>
            <date>2021-05-15 16:53:43 -0700</date>
            <delta_ts>2021-05-15 17:09:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210515165342.patch</filename>
            <type>text/plain</type>
            <size>126174</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBmYTFjNzdhYjQ5Y2Y1YzQ1YWYyOGVi
NmU0NGNhNWJkODJiNmRlMjEuLjMzMDRhODNmOGVjM2ZlN2QzODFmOWVmZWM4OGRjMjI5NjM3ZWFl
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTgzIEBACisyMDIxLTA1LTE1ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBw
b3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgIEFsc28gbWFkZSBtYW55IG90aGVyIHNtYWxs
IGltcHJvdmVtZW50cyB0byB0aGUgU3RyaW5nQnVpbGRlciBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBTdHJpbmdDb25jYXRl
bmF0ZUNGLmguCisKKyAgICAgICAgKiB3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaDogUmVtb3ZlZCBD
b25kaXRpb25hbENyYXNoT25PdmVyZmxvdywgd2hpY2ggd2FzIG9ubHkKKyAgICAgICAgaGVyZSBm
b3IgdXNlIGJ5IFN0cmluZ0J1aWxkZXIsIHdoaWNoIGRvZXMgbm90IHVzZSBDaGVja2VkQXJpdGht
ZXRpYyBhbnkgbW9yZS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUZUVy5jbWFrZTogQWRkZWQg
U3RyaW5nQ29uY2F0ZW5hdGVDRi5oLi4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1NYWMuY21ha2U6
IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVdpbi5jbWFrZTogRGl0dG8uCisKKyAgICAg
ICAgKiB3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oOiBNb3ZlZCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGluc2lkZSB0aGUKKyAgICAgICAgV1RGIG5hbWVzcGFjZS4KKyAgICAgICAgKFdURjo6
c2lnbmVkQWRkSW50MzJPdmVyZmxvd3MpOiBSZW5hbWVkIHRoaXMgZnVuY3Rpb24uIFRoZSB0eXBl
IGhlcmUgaXMKKyAgICAgICAgaW1wb3J0YW50LCBhbmQgd2UgYXJlIG5vdCBkb2luZyBhbnl0aGlu
ZyB0byBwcmV2ZW50IHR5cGUgY29udmVyc2lvbiBvcgorICAgICAgICBjcmVhdGUgYW1iaWd1aXR5
LCBzbyBpdCdzIGdvb2QgdG8gYmUgZXhwbGljaXQgaW4gdGhlIGZ1bmN0aW9uIG5hbWUuCisgICAg
ICAgIChXVEY6OnNhdHVyYXRlZFN1bTxpbnQzMl90Pik6IFJlbmFtZWQgdGhpcyBmcm9tIHNhdHVy
YXRlZEFkZGl0aW9uIGZvcgorICAgICAgICBjbGFyaXR5LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBh
IHN1bSwgc28gdGhhdCdzIGEgYmV0dGVyIG5hbWUgdGhhbiBjYWxsaW5nCisgICAgICAgIGl0ICJh
ZGRpdGlvbiIuIEFsc28sIGl0J3MgY2xlYXJlciB0byBiZSBleHBsaWNpdCBhYm91dCB0aGUgcmV0
dXJuIHR5cGUuCisgICAgICAgIChXVEY6OnNpZ25lZFN1YnRyYWN0SW50MzJPdmVyZmxvd3MpOiBS
ZW5hbWVkLiBTYW1lIHJlYXNvbiBhcyBhYm92ZS4KKyAgICAgICAgKFdURjo6c2F0dXJhdGVkRGlm
ZmVyZW5jZTxpbnQzMl90Pik6IERpdHRvLgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWRTdW08dWlu
dDMyX3Q+KTogQWRkZWQuIERvZXMgdGhlIHVuc2lnbmVkIDMyLWJpdCBzYXR1cmF0ZWQKKyAgICAg
ICAgYWRkaXRpb24gb3BlcmF0aW9uLiBUaGlzIG9uZSBjYW4gYmUgd3JpdHRlbiBpbiBhIHBvcnRh
YmxlIG1hbm5lciBhbmQKKyAgICAgICAgc3RpbGwgZ2V0IHJlYWxseSBlZmZpY2llbnQgY29kZSBv
biBhdCBsZWFzdCBJbnRlbCBhbmQgQVJNNjQuCisgICAgICAgIChXVEY6OnNhdHVyYXRlZFN1bSk6
IEFkZGVkIGEgZnVuY3Rpb24gdGVtcGxhdGUgdGhhdCBsZXRzIGNhbGxlcnMgcGFzcworICAgICAg
ICBsYXJnZXIgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBzYXR1cmF0ZWRTdW0sIHJhdGhlciB0aGFu
IGV4YWN0bHkgdHdvLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXVEY6OmV4cGFuZGVkQ2FwYWNpdHkpOiBSZW5hbWVkIHRvIHVzZSB0aGUgdGVybSBj
YXBhY2l0eSByYXRoZXIgdGhhbgorICAgICAgICBsZW5naHQgZm9yIHRoZSBuZXcgcmVxdWlyZWQg
Y2FwYWNpdHkuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlaWZ5U3RyaW5nIGNvbnN0
KTogQ2hhbmdlZCB0aGUgb3ZlcmZsb3cgY2hlY2sKKyAgICAgICAgaW50byBhIFJFTEVBU0VfQVNT
RVJULiBUaGlzIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgZG9pbmcgdGhlIGNoZWNrIHRoYXQKKyAg
ICAgICAgY2FsbGVycyB3ZXJlIGRvaW5nIGVhcmxpZXIsIHNvIHdlIHdhbnQgaXQgaW4gcHJvZHVj
dGlvbiBidWlsZHMuIEFsc28KKyAgICAgICAgc2ltcGxpZmllZCB0aGlzIHNpbmNlIG91ciBtX2xl
bmd0aCBtZW1iZXIgaXMgYSBzaW1wbGUgaW50ZWdlciBub3cuCisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OnJlc2l6ZSk6IEZpeGVkIHRoZSBvdmVyZmxvdyBjaGVjayB0byB3b3JrIHByb3Bl
cmx5CisgICAgICAgIGV2ZW4gaW4gdGhlICJyZWNvcmQgb3ZlcmZsb3ciIG1vZGUuIFdlIG5vdyBk
byBpdCBleHBsaWNpdGx5IGluc3RlYWQKKyAgICAgICAgb2YgcmVseWluZyBvbiBtX2xlbmd0aCBh
c3NpZ25tZW50LCBzbyB3ZSBrbm93IHRvIHJldHVybiBlYXJseS4gVGhlIG9sZAorICAgICAgICBj
b2RlIGhhZCBhbiBhc3NlcnRpb24gaW5zdGVhZCwgd2hpY2ggZGlkIG5vdCBnb29kIGluIHByb2R1
Y3Rpb24gYnVpbGRzLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZl
cik6IFJlcGxhY2VkIHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMKKyAgICAgICAgd2l0aCBhIHNpbmds
ZSBzaW1wbGVyIGZ1bmN0aW9uIHRlbXBsYXRlLiBBbHNvIGNoYW5nZWQgdGhpcyBzaW5jZSB0aGUK
KyAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzIGRhdGEgbWVtYmVyIGlzIG5vdyBhbHdheXMgZGVm
aW5lZCBhcyBhbiBMQ2hhciosCisgICAgICAgIGV2ZW4gdGhvdWdoIHNvbWV0aW1lcyBpdCdzIGEg
VUNoYXIqIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHdpdGgKKyAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdC4gUmVtb3ZlZCBleHRyYSBvdmVyZmxvdyBjaGVja3MgYmVjYXVzZSB0aGUKKyAgICAgICAg
U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBmdW5jdGlvbiBhbHJlYWR5IGRvZXMg
dGhlIG9ubHkKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2sgd2UgbmVlZC4gQWxzbyBtb3ZlIHRvIFN0
cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzCisgICAgICAgIGZvciBjb3B5aW5nIGNoYXJhY3RlcnMg
cmF0aGVyIHRoYW4gdXNpbmcgc3RkOjptZW1jcHkgZGlyZWN0bHkuCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIpOiBSZXBsYWNlZCB0d28gc2VwYXJhdGUKKyAg
ICAgICAgZnVuY3Rpb25zIHdpdGggYSBmdW5jdGlvbiB0ZW1wbGF0ZSBhbmQgYSBjb3ZlciB0aGF0
IGNhbGxzIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUg
Zm9yIHBsYWNlcyB3aGVyZSB3ZSBhcmVuJ3QKKyAgICAgICAgYWxyZWFkeSBpbiBjaGFyYWN0ZXIt
dHlwZS1zcGVjaWZpYyBjb2RlIHBhdGhzLiBUaGlzIHZlcnNpb24gbm93CisgICAgICAgIHN1cHBv
cnRzIGFsbG9jYXRpbmcgYSBidWZmZXIgZm9yIHRoZSBmaXJzdCB0aW1lIGluIGNhc2VzIHdoZXJl
CisgICAgICAgIHdlIGhhdmUgbV9zdHJpbmcgYW5kIG5vdCBtX2J1ZmZlciwgd2hpY2ggdXNlZCB0
byBiZSBoYW5kbGVkIGF0CisgICAgICAgIHRoZSBoaWdoZXIgbGV2ZWwuCisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSk6IFJld3JvdGUgZm9yIHNpbXBsaWNpdHku
CisgICAgICAgIEJ5IHJlbHlpbmcgb24gdGhlIG92ZXJmbG93IGNoZWNraW5nIGluc2lkZSByZWFs
bG9jYXRlQnVmZmVyIGFuZAorICAgICAgICBhbGxvY2F0ZUJ1ZmZlciB3ZSBubyBsb25nZXIgbmVl
ZCBjaGVja2luZyBvZiB0aGUgcGFzc2VkLWluIHZhbHVlCisgICAgICAgIGF0IHRoaXMgbGV2ZWwu
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyk6
IFJlbW92ZWQgdGhlCisgICAgICAgIHZlcnNpb24gb2YgdGhpcyB0aGF0IHRha2VzIGFkZGl0aW9u
YWxMZW5ndGggc2luY2UgaXQncworICAgICAgICBwb3RlbnRpYWxseSBjb25mdXNpbmcgdG8gaGF2
ZSBhIGZhbWlseSBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIHRoZQorICAgICAgICBzYW1lIG5hbWUg
YW5kIHRha2UgdGhlIHNhbWUgdHlwZSBvZiBhcmd1bWVudCwgYnV0IGludGVycHJldCBpdAorICAg
ICAgICBzdWJ0bHkgZGlmZmVyZW50bHkuIFN0cmVhbWxpbmVkIHRoZSBjb2RlIHVzaW5nIHN0ZDo6
ZXhjaGFuZ2UuCisgICAgICAgIFRoaXMgZnVuY3Rpb24gbm93IGFsc28gaW5jbHVkZXMgdGhlIGxv
Z2ljIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWVkCisgICAgICAgIGV4dGVuZEJ1ZmZlckZvckFwcGVu
ZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrLCB3aGljaCB3YXMgc3VidGx5CisgICAgICAgIG1pc25h
bWVkIHNpbmNlIHRoYXQgd2FzIG5vdCB0aGUgb25seSBzZW1hbnRpYyBkaWZmZXJlbmNlLgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2Fz
ZSk6IFN0cmVhbWxpbmVkCisgICAgICAgIHRoaXMgYnkgdXNpbmcgc3RkOjpleGNoYW5nZSBhbmQg
cmVtb3ZlZCBhZGRpdGlvbmFsIG92ZXJmbG93IGNoZWNrcworICAgICAgICBhdCB0aGlzIGxldmVs
IHNpbmNlIHJlYWxsb2NhdGVCdWZmZXIgYWxyZWFkeSBkb2VzIHRoZW0uIEFsc28gYWRkZWQKKyAg
ICAgICAgYSBjaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG5ldyB0b3RhbCBsZW5ndGggaXMg
MCwgd2hpY2ggd291bGQKKyAgICAgICAgbm90IGJlIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBlZmZp
Y2llbnRseSBieSB0aGUgcmVhbGxvY2F0ZUJ1ZmZlcgorICAgICAgICBhbmQgYnVmZmVyQ2hhcmFj
dGVycyBmdW5jdGlvbnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZ0xDaGFyKTogUmVuYW1lZCB0aGlzCisgICAgICAgIGZyb20gZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nOCwgc2luY2UgaXQncyBub3cgaWRlbnRpY2FsIHRvIGNhbGxpbmcKKyAg
ICAgICAgZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nPExDaGFyPiwgZXhjZXB0IGZvciBpbmxpbmlu
ZyBhbmQgbGlua2FnZS4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVy
Rm9yQXBwZW5kaW5nV2l0aFVwY29udmVydCk6CisgICAgICAgIFJlbmFtZWQgdGhpcyBmcm9tIGV4
dGVuZEJ1ZmZlckZvckFwcGVuZGluZzE2LiBJdCBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAgICB0
aGUgb3RoZXIgZXh0ZW5kQnVmZmVyIGZ1bmN0aW9ucyBiZWNhdXNlIGlzIHN1cHBvcnRzIHVwY29u
dmVydGluZworICAgICAgICBmcm9tIExDaGFyIHRvIFVDaGFyLiBMaWtlIHRoZSBvdGhlcnMgaXQg
cmVsaWVzIG9uIGFsbG9jYXRlQnVmZmVyCisgICAgICAgIGZvciB0aGUgb3ZlcmZsb3cgY2hlY2tp
bmcuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMpOiBSZW1v
dmVkIGFuIHVubmVjZXNzYXJ5CisgICAgICAgIGFzc2VydGlvbiB0aGF0IHRoZSBjaGFyYWN0ZXJz
IHBvaW50ZXIgaXMgbm9uLW51bGw7IHRoYXQgd2lsbCBmYWlsCisgICAgICAgIGluIGFuIG9idmlv
dXMgd2F5IHdpdGhvdXQgYW4gYXNzZXJ0aW9uLiBTaW1wbGlmaWVkIHRoZSBsb2dpYyBhbmQKKyAg
ICAgICAgcmVtb3ZlZCBzb21lIGludmFyaWFudCBhc3NlcnRpb25zIHRoYXQgZG9uJ3QgaGVscCB1
cyBtdWNoLiBDaGFuZ2VkCisgICAgICAgIG92ZXJmbG93IGNoZWNraW5nIGJ5IHVzaW5nIHNhdHVy
YXRlZFN1bSB0byBjb21wdXRlIHRoZSBuZXcgbGVuZ3RoLgorICAgICAgICBJbiBvdmVyZmxvdyBj
YXNlcywgdGhlIG5ldyBzdW0gd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bQorICAgICAg
ICBzdHJpbmcgbGVuZ3RoLCBidXQgd2lsbCBmaXQgaW4gYW4gdW5zaWduZWQsIHNvIHdlIGNhbiBw
YXNzIGl0CisgICAgICAgIGRvd24gdG8gbG93ZXIgbGV2ZWxzIGFuZCBsZXQgZnVuY3Rpb25zIGxp
a2UgcmVhbGxvY2F0ZUJ1ZmZlciBkbworICAgICAgICB0aGUgYWN0dWFsIG92ZXJmbG93IGNoZWNr
aW5nLiBBbHNvIHVzZSBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycy4KKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6YXBwZW5kKTogUmVtb3ZlZCB0aGUgQ0ZTdHJpbmdSZWYgb3ZlcmxvYWQu
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNhblNocmluayBjb25zdCk6IFNpbXBsaWZ5
IHRoZSBmdW5jdGlvbiBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSB2YWd1ZSBGSVhNRSB0aGF0IHNh
eXMgInRoaXMgc2hvdWxkIGJlIHR1bmVkIi4gVGhhdCBtYXkKKyAgICAgICAgYmUgc28sIGJ1dCB0
aGUgRklYTUUgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6c2hy
aW5rVG9GaXQpOiBTaW1wbGlmeSBieSB1c2luZyB0aGUgbmV3CisgICAgICAgIHJlYWxsb2NhdGVC
dWZmZXIgYW5kIHN0ZDo6ZXhjaGFuZ2UuIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uCisgICAg
ICAgIGFib3V0IG92ZXJmbG93IHRoYXQgZG9lc24ndCBoZWxwIHVzIG1haW50YWluIHRoZSBpbnZh
cmlhbnQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmlzQWxsQVNDSUkgY29uc3QpOiBX
YXMgdGVtcHRlZCB0byByZW1vdmUKKyAgICAgICAgdGhpcyBmdW5jdGlvbiwgYnV0IGZvciBub3cg
anVzdCBtYWRlIGl0IHVzZSB0aGUgU3RyaW5nVmlldworICAgICAgICB2ZXJzaW9uIGZvciBicmV2
aXR5LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBSZW1vdmVkIG1hbnkg
dW5uZWVkZWQgaW5jbHVkZXMsIGFuZAorICAgICAgICBub3RhYmx5IGluY2x1ZGVkIFNhdHVyYXRl
ZEFyaXRobWV0aWMuaCBpbnN0ZWFkIG9mCisgICAgICAgIENoZWNrZWRBcml0aG1ldGljLmggYmVj
YXVzZSB3ZSBub3cgdXNlIHRoZSBmb3JtZXIgaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgbGF0dGVy
LiBDaGFuZ2VkIHRoZSBvdmVyZmxvdyBjaGVja2luZyBpbXBsZW1lbnRhdGlvbiB0byB3b3JrCisg
ICAgICAgIG1vcmUgc2ltcGx5IGJhc2VkIG9uIHNhdHVyYXRlZCBhZGRpdGlvbiByYXRoZXIgdGhh
biBDaGVja2VkLgorICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gZ2V0IHJpZCBvZiBkZXBlbmRl
bmN5IG9uIG91ciBvd24gdW5pcXVlIG1vZGUKKyAgICAgICAgZm9yIENoZWNrZWQsIGNhbGxlZCBD
b25kaXRpb25hbENyYXNoT25PdmVyZmxvdy4gUmVtb3ZlZCBhCisgICAgICAgIGNvbW1lbnQgYWJv
dXQgbWFraW5nIGEgdGVtcGxhdGl6ZWQgdmVyc2lvbiBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAg
ICBXZSBjYW4gZG8gaXQgaWYgd2UgbGlrZSwgYnV0IGRvZXMgbm90IHNlZW0gdXJnZW50LiBNb3Zl
ZAorICAgICAgICBmdWNudGlvbiBib2RpZXMgb3V0IG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIHNv
IGl0J3MgZWFzaWVyIHRvCisgICAgICAgIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGNsYXNz
LiBTaW5jZSBtX2xlbmd0aCBpcyBub3cgYW4KKyAgICAgICAgb3JkaW5hcnkgaW50ZWdlciwgdGhl
IGNoZWNrIGZvciBvdmVyZmxvd2VkIHNpbXBseSBjaGVja3MgdG8gc2VlCisgICAgICAgIGlmIHRo
ZSBsZW5ndGggaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aC4gV2hlbiB3
ZQorICAgICAgICBlbmNvdW50ZXIgb3ZlcmZsb3cgdGhhdCBpcyBub3QgYWJvdXQgbGVuZ3RoIGNv
bXB1dGF0aW9uLCB3ZSBzZXQKKyAgICAgICAgdGhlIGxlbmd0aCB0byB0aGUgbWF4aW11bSBpbnRl
Z2VyIHRvIGluZGljYXRlIHRoZSBmYWlsdXJlLgorICAgICAgICBEZWxldGVkIHRoZSBhcHBlbmQg
b3ZlcmxvYWRzIGZvciBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcuCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOiBTaW1wbGlmaWVkIHRoZSBjb25zdHJ1Y3Rvcgor
ICAgICAgICBzaW5jZSB3ZSBvbmx5IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgbV9zaG91bGRDcmFz
aE9uT3ZlcmZsb3cgbWVtYmVyLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6
IEZpeGVkIGEgbWlzdGFrZSB3aGVyZSB0aGlzIHdhcyBub3QKKyAgICAgICAgcmVzZXR0aW5nIHRo
ZSBtX2lzUmVpZmllZCBmbGFnLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzd2FwKTog
VXBkYXRlZCBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0YSBtZW1iZXJzLgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjpvcGVyYXRvciBTdHJpbmdWaWV3IGNvbnN0KTogTW92ZWQgb3V0IG9mIGxp
bmUuCisgICAgICAgIE1hZGUgc3VyZSB0byBjYWxsIHRoZSBsZW5ndGgoKSBmdW5jdGlvbiBzbyB3
ZSBjcmFzaCBpZiB0aGlzIGlzCisgICAgICAgIGNhbGxlZCBhZnRlciBvdmVyZmxvdy4KKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4pOiBSZW5hbWVk
IGZyb20KKyAgICAgICAgZ2V0QnVmZmVyQ2hhcmFjdGVycywgb3RoZXJ3aXNlIHVuY2hhbmdlZC4K
KyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4pOiBE
aXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZGlkT3ZlcmZsb3cpOiBJbXBsZW1l
bnQgdGhlIG5ldyBhcHByb2FjaCB0bworICAgICAgICBvdmVyZmxvdywgbWVhbmluZyB3ZSBuZWVk
IHRvIHdyaXRlIHRoZSBDUkFTSCgpIGhlcmUgZXhwbGljaXRseSBhbmQKKyAgICAgICAgaW4gdGhl
IG5vbi1jcmFzaGluZyBtb2RlLCBzZXQgbV9sZW5ndGguCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OmFwcGVuZCk6IEtlZXAgdGhlIHNpbmdsZS1jaGFyYWN0ZXIgYXBwZW5kCisgICAgICAg
IGZ1bmN0aW9uIHNpbXBsZSB1c2luZyB0aGUgYnVmZmVyQ2hhcmFjdGVycyBmdW5jdGlvbi4gUmVt
b3ZlIHNvbWUKKyAgICAgICAgb2YgdGhlIHVubmVjY2Vzc2FyeSBjaGVja3MgYW5kIHNwZWNpYWwg
Y2FzZXMgaW4gdGhlIG90aGVyIHZlcnNpb25zCisgICAgICAgIG9mIGFwcGVuZC4gTW9zdCBvZiB0
aGUgY2hlY2tpbmcgaXMgZG9uZSBpbnNpZGUgYXBwZW5kQ2hhcmFjdGVycywKKyAgICAgICAgd2l0
aCBvbmx5IGEgZmV3IGV4Y2VwdGlvbnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFw
cGVuZFN1YnN0cmluZyk6IE1vdmVkIG91dCBvZiB0aGUgY2xhc3MKKyAgICAgICAgZGVmaW5pdGlv
biB3aXRob3V0IG1ha2luZyBzaWduaWZpY2FudCBjaGFuZ2VzLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXIpOiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6dG9TdHJpbmcpOiBHcmVhdGx5IHNpbXBsaWZpZWQgdGhpcyBmdW5jdGlvbgorICAg
ICAgICBieSByZWx5aW5nIG9uIG92ZXJmbG93IGNoZWNraW5nIGluIHRoZSByZWlmeVN0cmluZyBm
dW5jdGlvbiBpbnN0ZWFkCisgICAgICAgIG9mIGRvaW5nIGl0IGhlcmUgYW5kIHJlbW92aW5nIHVu
bmVlZGVkIGludmFyaWFudCBhc3NlcnRpb25zLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
Ojp0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6dG9BdG9tU3RyaW5nIGNvbnN0KTogUmV3cm90ZSB0aGlzIHRvIHN0cmVh
bWxpbmUsCisgICAgICAgIHJlbW92aW5nIGV4cGxpY2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6bGVuZ3RoIGNvbnN0KTogTW92ZWQgb3V0IG9mIHRoZSBj
bGFzcworICAgICAgICBkZWZpbml0aW9uIHdpdGhvdXQgbWFraW5nIHNpZ25pZmljYW50IGNoYW5n
ZXMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNhcGFjaXR5IGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2hhcmFjdGVycyBjb25zdCk6IEltcGxlbWVu
dGVkIHRoaXMgb3BlcmF0aW9uCisgICAgICAgIGluIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZS4gTm93
IHJhdGhlciB0aGFuIGhhdmluZyB0aGlzIGNhbGwgdGhlCisgICAgICAgIGNoYXJhY3RlcnM4IGFu
ZCBjaGFyYWN0ZXJzMTYgZnVuY3Rpb25zLCB0aGV5IGNhbiBjYWxsIGl0LgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMpOiBVc2Ugc2F0dXJhdGVkU3VtIHRv
CisgICAgICAgIGNvbXB1dGUgdGhlIHJlcXVpcmVkIGxlbmd0aCwgd2hpY2ggYWxsb3dzIHRoZSBl
eHRlbmRCdWZmZXIKKyAgICAgICAgZnVuY3Rpb25zIHRvIGRvIG92ZXJmbG93IGNoZWNraW5nIHdp
dGhvdXQgaGF2aW5nIHRvIHRha2Ugc3BlY2lhbAorICAgICAgICBjaGVja2VkIGludGVnZXIgdHlw
ZXMgZm9yIGFyZ3VtZW50cy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXJKU09O
LmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmlu
Zyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlCisgICAgICAgIGFuZCBtYWRlIHRoaXMgdXNlIHRoZSBi
dWZmZXJDaGFyYWN0ZXJzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGdldHRpbmcKKyAgICAgICAgZGly
ZWN0bHkgYXQgdGhlIG1fYnVmZmVyQ2hhcmFjdGVycyBkYXRhIG1lbWJlci4KKworICAgICAgICAq
IHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQuIFNwZWNpYWxpemVzIFN0
cmluZ1R5cGVBZGFwdGVyIGZvcgorICAgICAgICBib3RoIENGU3RyaW5nUmVmIGFuZCBOU1N0cmlu
ZyAqLiBJZiBDRlN0cmluZ0dldENTdHJpbmdQdHIgd29ya3MgZm9yIExhdGluLTEsIHRoZW4KKyAg
ICAgICAgZG9lcyB0aGUgOC1iaXQgY29kZSBwYXRoLCBvdGhlcndpc2UgdGhlIDE2LWJpdC4KKwor
ICAgICAgICAqIHd0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbTogSW5jbHVkZSBTdHJp
bmdDb25jYXRlbmF0ZUNGLmgsIHNpbmNlIGl0J3MKKyAgICAgICAgbm93IG5lZWRlZCB0byB1c2Ug
Q0ZTdHJpbmdSZWYgd2l0aCBTdHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBGaWxlU3lzdGVtOjpmaWxlTWV0
YWRhdGEoKSAvIGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxpbmtzKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2
MTQzMDdhNTU1MjcyMmE1NWEwZjRlMmUyZTdlMTk0NTQwNTdmYjg1Li4yNzljNmVmMGE4MjIyZjk0
NjQ0NTA0OThjNGRmNzY2Njg0MmE3MzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIw
MjEtMDUtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
Q0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8g
U3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1Rl
eHRDb2xvciBjb25zdCk6IFR3ZWFrZWQKKyAgICAgICAgY29kaW5nIHN0eWxlIGEgYml0LgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kQ1NTKTogVXNlIHZhcmlhZGljIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZCBpbnN0ZWFkIG9mIG1hbnkKKyAgICAgICAgc2VwYXJhdGUgY2FsbHMuCisgICAgICAgIChX
ZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9u
dENTUyBjb25zdCk6CisgICAgICAgIFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LCBhbmQgdXNl
IHZhcmlhZGljIFN0cmluQnVpbGRlcjo6YXBwZW5kIGNhbGxzCisgICAgICAgIHRvIHJlZHVjZSB0
aGUgbnVtYmVyIG9mIGNhbGxzIGFuZCBzdHJlYW1saW5lIHRoZSBjb2RlLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92
ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgRGl0dG8uIEFsc28gcmVtb3ZlZCB1bm5lY2Vzc2FyeSBj
aGVja3MgdGhhdCBzdHJpbmdzIGFyZSBlbXB0eSBiZWZvcmUgYXBwZW5kaW5nLgorCisgICAgICAg
ICogcGxhdGZvcm0vTGF5b3V0VW5pdC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0VW5pdDo6
cm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yLSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcis9KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yLT0pOgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Npb24gY29uc3QpOiBUd2Vha2VkIGNv
ZGluCisgICAgICAgIHN0eWxlIGEgYml0LCBhbmQgdXNlIHZhcmlhZGljIFN0cmluQnVpbGRlcjo6
YXBwZW5kIGNhbGxzIHRvIHJlZHVjZSB0aGUKKyAgICAgICAgbnVtYmVyIG9mIGNhbGxzIGFuZCBz
dHJlYW1saW5lIHRoZSBjb2RlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cGxhbkNvdW50ZXIpOgorICAgICAgICAqIHN0eWxlL1N0
eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVDb3VudGVyKToKKwogMjAyMS0wNS0xNSAgQWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gTW92ZSBibG9jayBmb3JtYXR0aW5nIGdlb21l
dHJ5IHRvIGl0cyBvd24gY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmUzZjVlYmFlYjBhYWUzODZjZjZjMDE0
ZmU4MmRjZDE2ZGMyN2Y1Ni4uYzZlZjg3OTc4YjZjMTI4ZWZkZDJlZGFmYjJlOGRlZTlhMmMxNmZm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0xNSAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcg
c3VwcG9ydCBmcm9tIFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOiBVc2Ug
bWFrZVN0cmluZyBpbnN0ZWFkCisgICAgICAgIG9mIFN0cmluZ0J1aWxkZXIuCisKIDIwMjEtMDUt
MTUgIElhbiBHaWxiZXJ0ICA8aWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlIHdpdGggVmFyaWFudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3ZDY5ZDg2
OWIyZjE1ZTc1M2M5OTNlMTgwMzdlNi4uY2M1NjFmM2VmODk0ZDk2NDg0N2U2ODgwNzAxMjM3OWQ2
MTg2ZjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00
OTgsNiArNDk4LDcgQEAKIAkJOTNBQzkxQTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzQjVCNDREMjIxM0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGV4TnVtYmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNUI0NTAyMjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2dnZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyog
U3RyaW5nQ29uY2F0ZW5hdGVDRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpbmdDb25jYXRlbmF0ZUNGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDE5
MUNGMjBDQUVDRTgwMEM1MUI4RSAvKiBvYmpjU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9iamNTUEku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEREU5MzExQ0RDMDUyRDAwRkQzNDkx
IC8qIGR5bGRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZHlsZFNQSS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0YxOTkzRDE5RDc5NThEMDBDMjM5MEIg
LyogU3RyaW5nVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dHJpbmdWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyNCw2ICs5MjUs
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQTVCQTE1RjcxODI0MzVBNjAwQTgyRTY5IC8qIEF0
b21TdHJpbmdJbXBsQ0YuY3BwICovLAogCQkJCUE1QkExNUY4MTgyNDM1QTYwMEE4MkU2OSAvKiBT
dHJpbmdDRi5jcHAgKi8sCisJCQkJOTNEMDAxN0IyNjREQkFDRjAwQkNGMTA5IC8qIFN0cmluZ0Nv
bmNhdGVuYXRlQ0YuaCAqLywKIAkJCQlBNUJBMTVGOTE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5n
SW1wbENGLmNwcCAqLywKIAkJCQk5MzkzNEJENDE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmll
d0NGLmNwcCAqLywKIAkJCQkxQ0NEQjE0OTFFNTY2NjI2MDA2QzczQzAgLyogVGV4dEJyZWFrSXRl
cmF0b3JDRi5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaCBiL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKaW5kZXggYjg1MTZmODgx
ZTBjNGJhM2ZmMWFhYzE1ODYwNmM5ZWY5ZDU3MzBhYy4uNzNhY2RjNzJkNWNiY2M2MWRhN2VjNjIz
M2MyYzVjZTc2NDgyOWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCkBAIC05NSwz
MSArOTUsNiBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCi1jbGFzcyBDb25kaXRpb25hbENyYXNoT25PdmVy
ZmxvdyB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBvdmVyZmxvd2VkKCkKLSAgICB7Ci0gICAgICAgIG1f
b3ZlcmZsb3dlZCA9IHRydWU7Ci0gICAgICAgIGlmIChtX3Nob3VsZENyYXNoT25PdmVyZmxvdykK
LSAgICAgICAgICAgIGNyYXNoKCk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRDcmFzaE9uT3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENyYXNoT25PdmVyZmxvdzsgfQotICAgIHZv
aWQgc2V0U2hvdWxkQ3Jhc2hPbk92ZXJmbG93KGJvb2wgdmFsdWUpIHsgbV9zaG91bGRDcmFzaE9u
T3ZlcmZsb3cgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVyZmxvd2VkOyB9Ci0gICAgdm9pZCBjbGVhck92ZXJmbG93KCkgeyBtX292ZXJm
bG93ZWQgPSBmYWxzZTsgfQotCi0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCBjcmFzaCgpCi0gICAgewotICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIG1fb3ZlcmZsb3dlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZENyYXNoT25P
dmVyZmxvdyB7IHRydWUgfTsKLX07Ci0KIGNsYXNzIENyYXNoT25PdmVyZmxvdyB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBvdmVyZmxvd2VkKCkKQEAg
LTI1MiwxMSArMjI3LDYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVj
a2VkIHsKICAgICBzdGF0aWMgY29uc3RleHByIENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOwog
fTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8
VCwgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c+PiB7Ci0gICAgdXNpbmcgQ2xlYW5UeXBlID0g
dHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxUPjo6Q2xlYW5UeXBlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7Ci19OwotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gc3RydWN0IFJlbW92ZUNoZWNrZWQ8Q2hlY2tlZDxULCBDcmFzaE9uT3ZlcmZsb3c+PiB7CiAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5cGUgQ2xlYW5UeXBl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7CkBAIC0x
MDY5LDcgKzEwMzksNiBAQCB1c2luZyBXVEY6OkNoZWNrZWRVaW50MzI7CiB1c2luZyBXVEY6OkNo
ZWNrZWRJbnQ2NDsKIHVzaW5nIFdURjo6Q2hlY2tlZFVpbnQ2NDsKIHVzaW5nIFdURjo6Q2hlY2tl
ZFNpemU7Ci11c2luZyBXVEY6OkNvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93OwogdXNpbmcgV1RG
OjpDcmFzaE9uT3ZlcmZsb3c7CiB1c2luZyBXVEY6OlJlY29yZE92ZXJmbG93OwogdXNpbmcgV1RG
OjpjaGVja2VkU3VtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21h
a2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCA5NzFmZGViMjU5NTBl
ZWI3NzhkNWQ3MGUxYWRjZmQ1MmFkNmFkMjllLi5iZmExM2QxZmU4MGIzMDdhNTJiM2ZkZGJlZGEx
ZTY5N2QzOGU1M2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFr
ZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtMzksNiArMzksNyBA
QCBpZiAoVVNFX0NGKQogICAgICAgICBjZi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVD
YXN0c0NGLmgKIAorICAgICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgICAg
ICB0ZXh0L2NmL1RleHRCcmVha0l0ZXJhdG9yQ0YuaAogICAgICkKICAgICBsaXN0KEFQUEVORCBX
VEZfU09VUkNFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2Ug
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBlMjgwOTk3NDI3MTljNzc5
YWMzZWFkZjQ2NjEzMzNkODc4ZWZkY2RkLi43Y2RjYzRiMTZiZTIyZTQ3NWUyMmE4NmFkMGU3YWM0
OGRlMWRkMTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNDEsNiArNDEsNyBAQCBs
aXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKIAogICAgIHNwaS9tYWMvTWV0YWRhdGFTUEku
aAogCisgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAgICB0ZXh0L2NmL1RleHRC
cmVha0l0ZXJhdG9yQ0YuaAogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVdpbi5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDZlODBi
OTlhMDRhNmM2ZGU0ZTJmZjU5YTdiNGVkNGM4YzRhYWZhYjkuLjkwZmQyNmQ3OGM2OTRkYjM2ZGQw
ODI0MWU5ODhlNDJmNTU1N2U1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
V2luLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0zNyw2
ICszNyw3IEBAIGlmIChVU0VfQ0YpCiAgICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAg
Y2YvVHlwZUNhc3RzQ0YuaAogCisgICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5o
CiAgICAgICAgIHRleHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3Qo
QVBQRU5EIFdURl9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRB
cml0aG1ldGljLmggYi9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmgKaW5kZXgg
NjA3YmMwMTEyNWRmNTBiYjg5NDk2MDgwZTg4ZTY1ZDc0NWM4YmY5Ni4uNjVmMDJkZGIwMmQ4MTVk
NzM2YjI3NjM1NDIxMGY4YzY3NmI2OWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU2F0
dXJhdGVkQXJpdGhtZXRpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0
aWMuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMzYsNyArMzYsMTMgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KIAotaW5saW5lIGJvb2wgc2lnbmVkQWRkT3ZlcmZsb3dzKGludDMyX3Qg
YSwgaW50MzJfdCBiLCBpbnQzMl90JiByZXN1bHQpCituYW1lc3BhY2UgV1RGIHsKKworLy8gRklY
TUU6IEVuaGFuY2UgdGhpcyBzbyBpdCBmYWlscyB0byBjb21waWxlIGNhbGxzIHdoZXJlIGVpdGhl
ciBvZiB0aGUgYXJndW1lbnRzIGNhbiBiZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgaW50ZWdy
YWwgdHlwZSBpbnN0ZWFkIG9mIHF1aWV0bHkgY29udmVydGluZy4KK3RlbXBsYXRlPHR5cGVuYW1l
IEludGVncmFsVHlwZT4gSW50ZWdyYWxUeXBlIHNhdHVyYXRlZFN1bShJbnRlZ3JhbFR5cGUsIElu
dGVncmFsVHlwZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IEludGVncmFsVHlw
ZSBzYXR1cmF0ZWREaWZmZXJlbmNlKEludGVncmFsVHlwZSwgSW50ZWdyYWxUeXBlKTsKKworaW5s
aW5lIGJvb2wgc2lnbmVkQWRkSW50MzJPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGlu
dDMyX3QmIHJlc3VsdCkKIHsKICNpZiBDT01QSUxFUl9IQVNfQ0xBTkdfQlVJTFRJTihfX2J1aWx0
aW5fc2FkZF9vdmVyZmxvdykgJiYgIShkZWZpbmVkIF9fY2xhbmdfbWFqb3JfXyAmJiBfX2NsYW5n
X21ham9yX18gPCA3KQogICAgIHJldHVybiBfX2J1aWx0aW5fc2FkZF9vdmVyZmxvdyhhLCBiLCAm
cmVzdWx0KTsKQEAgLTUyLDcgKzU4LDcgQEAgaW5saW5lIGJvb2wgc2lnbmVkQWRkT3ZlcmZsb3dz
KGludDMyX3QgYSwgaW50MzJfdCBiLCBpbnQzMl90JiByZXN1bHQpCiAjZW5kaWYKIH0KIAotaW5s
aW5lIGludDMyX3Qgc2F0dXJhdGVkQWRkaXRpb24oaW50MzJfdCBhLCBpbnQzMl90IGIpCit0ZW1w
bGF0ZTw+IGlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1bTxpbnQzMl90PihpbnQzMl90IGEsIGlu
dDMyX3QgYikKIHsKICAgICBpbnQzMl90IHJlc3VsdDsKICNpZiBDUFUoQVJNX1RIVU1CMikKQEAg
LTYyLDEzICs2OCwxMyBAQCBpbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRBZGRpdGlvbihpbnQzMl90
IGEsIGludDMyX3QgYikKICAgICAgICAgOiAvKiBOb3RoaW5nIGlzIGNsb2JiZXJlZC4gKi8KICAg
ICAgICAgKTsKICNlbHNlCi0gICAgaWYgKHNpZ25lZEFkZE92ZXJmbG93cyhhLCBiLCByZXN1bHQp
KQorICAgIGlmIChzaWduZWRBZGRJbnQzMk92ZXJmbG93cyhhLCBiLCByZXN1bHQpKQogICAgICAg
ICByZXN1bHQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSArIChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oYSkgPj4gMzEpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotaW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90
IGIsIGludDMyX3QmIHJlc3VsdCkKK2lubGluZSBib29sIHNpZ25lZFN1YnRyYWN0SW50MzJPdmVy
Zmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKIHsKICNpZiBDT01Q
SUxFUl9IQVNfQ0xBTkdfQlVJTFRJTihfX2J1aWx0aW5fc3N1Yl9vdmVyZmxvdykgJiYgIShkZWZp
bmVkIF9fY2xhbmdfbWFqb3JfXyAmJiBfX2NsYW5nX21ham9yX18gPCA3KQogICAgIHJldHVybiBf
X2J1aWx0aW5fc3N1Yl9vdmVyZmxvdyhhLCBiLCAmcmVzdWx0KTsKQEAgLTg0LDcgKzkwLDggQEAg
aW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIs
IGludDMyX3QmIHJlc3VsdCkKICNlbmRpZgogfQogCi1pbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRT
dWJ0cmFjdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKKy8vIEZJWE1FOiBFbmhhbmNlIHRoaXMg
c28gaXQgZmFpbHMgdG8gY29tcGlsZSBjYWxscyB3aGVyZSBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50
cyBjYW4gYmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgaW50MzJfdCBpbnN0ZWFkIG9mIHF1aWV0bHkg
Y29udmVydGluZy4KK3RlbXBsYXRlPD4gaW5saW5lIGludDMyX3Qgc2F0dXJhdGVkRGlmZmVyZW5j
ZTxpbnQzMl90PihpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICBpbnQzMl90IHJlc3VsdDsK
ICNpZiBDUFUoQVJNX1RIVU1CMikKQEAgLTk0LDggKzEwMSwyNCBAQCBpbmxpbmUgaW50MzJfdCBz
YXR1cmF0ZWRTdWJ0cmFjdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKICAgICAgICAgOiAvKiBO
b3RoaW5nIGlzIGNsb2JiZXJlZC4gKi8KICAgICAgICAgKTsKICNlbHNlCi0gICAgaWYgKHNpZ25l
ZFN1YnRyYWN0T3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCisgICAgaWYgKHNpZ25lZFN1YnRyYWN0
SW50MzJPdmVyZmxvd3MoYSwgYiwgcmVzdWx0KSkKICAgICAgICAgcmVzdWx0ID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgKyAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+
IDMxKTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK3RlbXBsYXRlPD4gY29uc3Rl
eHByIHVpbnQzMl90IHNhdHVyYXRlZFN1bTx1aW50MzJfdD4odWludDMyX3QgYSwgdWludDMyX3Qg
YikKK3sKKyAgICBhdXRvIHN1bSA9IGEgKyBiOworICAgIHJldHVybiBzdW0gPCBhID8gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIDogc3VtOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJbnRlZ3JhbFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciB1
aW50MzJfdCBzYXR1cmF0ZWRTdW0oSW50ZWdyYWxUeXBlIHZhbHVlLCBBcmd1bWVudFR5cGVzLi4u
IGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gc2F0dXJhdGVkU3VtPEludGVncmFsVHlwZT4odmFs
dWUsIHNhdHVyYXRlZFN1bTxJbnRlZ3JhbFR5cGU+KGFyZ3VtZW50cy4uLikpOworfQorCit9CisK
K3VzaW5nIFdURjo6c2F0dXJhdGVkU3VtOwordXNpbmcgV1RGOjpzYXR1cmF0ZWREaWZmZXJlbmNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggMWUwYzE4YWM5ZDIwZWQ4
MjBmZWI4Njg1ZmNjZjgyYjEwNjAxMTQyZC4uOGQxYWEzZDI4MWNmNzZkYjVhMDZhM2E4MmYwYWY4
NjM4MDgwMzg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzMsMTkgKzMzLDE5IEBAIG5h
bWVzcGFjZSBXVEYgewogCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heENhcGFjaXR5ID0g
U3RyaW5nOjpNYXhMZW5ndGg7CiAKLXN0YXRpYyB1bnNpZ25lZCBleHBhbmRlZENhcGFjaXR5KHVu
c2lnbmVkIGNhcGFjaXR5LCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3N0YXRpYyB1bnNpZ25l
ZCBleHBhbmRlZENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5LCB1bnNpZ25lZCByZXF1aXJlZENh
cGFjaXR5KQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5
ID0gMTY7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5p
bXVtQ2FwYWNpdHksIHN0ZDo6bWluKGNhcGFjaXR5ICogMiwgbWF4Q2FwYWNpdHkpKSk7CisgICAg
cmV0dXJuIHN0ZDo6bWF4KHJlcXVpcmVkQ2FwYWNpdHksIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0
eSwgc3RkOjptaW4oY2FwYWNpdHkgKiAyLCBtYXhDYXBhY2l0eSkpKTsKIH0KIAogdm9pZCBTdHJp
bmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxv
d2VkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgLy8g
Q2hlY2sgaWYgdGhlIHN0cmluZyBhbHJlYWR5IGV4aXN0cy4KICAgICBpZiAoIW1fc3RyaW5nLmlz
TnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51
bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkg
PT0gbV9sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MCwxMSArNjAsMTEg
QEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiAgICAgfQogCiAgICAg
Ly8gTXVzdCBiZSB2YWxpZCBpbiB0aGUgYnVmZmVyLCB0YWtlIGEgc3Vic3RyaW5nICh1bmxlc3Mg
c3RyaW5nIGZpbGxzIHRoZSBidWZmZXIpLgotICAgIEFTU0VSVChtX2J1ZmZlciAmJiBtX2xlbmd0
aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkgPD0gbV9idWZmZXItPmxlbmd0aCgpKTsKLSAgICBpZiAo
bV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpID09IG1fYnVmZmVyLT5sZW5ndGgoKSkKKyAg
ICBBU1NFUlQobV9idWZmZXIgJiYgbV9sZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKTsKKyAg
ICBpZiAobV9sZW5ndGggPT0gbV9idWZmZXItPmxlbmd0aCgpKQogICAgICAgICBtX3N0cmluZyA9
IG1fYnVmZmVyLmdldCgpOwogICAgIGVsc2UKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBs
OjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9idWZmZXIsIDAsIG1fbGVuZ3RoLnVuc2Fm
ZUdldCgpKTsKKyAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdT
aGFyaW5nSW1wbCgqbV9idWZmZXIsIDAsIG1fbGVuZ3RoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWls
ZGVyOjpyZXNpemUodW5zaWduZWQgbmV3U2l6ZSkKQEAgLTczLDI1ICs3MywyOCBAQCB2b2lkIFN0
cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBDaGVjayBuZXdTaXplIDwgbV9sZW5ndGgsIGhlbmNlIG1fbGVuZ3RoID4gMC4KLSAg
ICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKKyAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBtX2xlbmd0aDsKICAgICBBU1NFUlQobmV3U2l6ZSA8PSBvbGRMZW5ndGgp
OwogICAgIGlmIChuZXdTaXplID09IG9sZExlbmd0aCkKICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVChvbGRMZW5ndGgpOwogCisgICAgaWYgKG5ld1NpemUgPiBtYXhDYXBhY2l0eSkgeworICAg
ICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1fbGVuZ3Ro
ID0gbmV3U2l6ZTsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CiAKICAgICAvLyBJZiB0
aGVyZSBpcyBhIGJ1ZmZlciwgd2Ugb25seSBuZWVkIHRvIGR1cGxpY2F0ZSBpdCBpZiBpdCBoYXMg
bW9yZSB0aGFuIG9uZSByZWYuCiAgICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAgIG1fc3RyaW5n
ID0gU3RyaW5nKCk7IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZlcmVuY2Ug
dG8gbV9idWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9m
IG1fYnVmZmVyLgorICAgICAgICBtX3N0cmluZyA9IHsgfTsgLy8gQ2xlYXIgdGhlIHN0cmluZyB0
byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBtX2J1ZmZlciBpZiBhbnkgYmVmb3JlIGNoZWNraW5n
IHRoZSByZWZlcmVuY2UgY291bnQgb2YgbV9idWZmZXIuCiAgICAgICAgIGlmICghbV9idWZmZXIt
Pmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQotICAg
ICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCBtX2J1
ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKG1faXM4Qml0KQorICAgICAgICAgICAg
ICAgIGFsbG9jYXRlQnVmZmVyPExDaGFyPihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgbV9idWZm
ZXItPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhbGxvY2F0
ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIG1fYnVmZmVyLT5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fYnVmZmVyLT5jaGFyYWN0ZXJz
MTYoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQoaGFz
T3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aC51bnNhZmVHZXQ8
dW5zaWduZWQ+KCkpOworICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVy
LT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEw
MiwzMjcgKzEwNSwxNjAgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNpemUodW5zaWduZWQgbmV3
U2l6ZSkKICAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJ
bXBsKCptX3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOwogfQogCi0vLyBBbGxvY2F0ZSBhIG5l
dyA4IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBj
b21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCi0vLyBvciBtX2J1ZmZlciwgbmVpdGhlciB3aWxsIGJl
IHJlYXNzaWduZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCi12b2lkIFN0cmluZ0J1
aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5z
aWduZWQgcmVxdWlyZWRMZW5ndGgpCisvLyBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcg
aW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5n
IG9yIG1fYnVmZmVyLgordGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUs
IHR5cGVuYW1lIEN1cnJlbnRDaGFyYWN0ZXJUeXBlPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyKGNvbnN0IEN1cnJlbnRDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywg
dW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQo
KSk7Ci0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRh
IGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhl
IGV4aXN0aW5nIGRhdGEuCi0gICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotCi0g
ICAgaWYgKG1fbGVuZ3RoKQotICAgICAgICBzdGQ6Om1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4
LCBjdXJyZW50Q2hhcmFjdGVycywgbV9sZW5ndGgudW5zYWZlR2V0KCkpOwotCi0gICAgLy8gVXBk
YXRlIHRoZSBidWlsZGVyIHN0YXRlLgotICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwot
ICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9
PSByZXF1aXJlZExlbmd0aCk7Ci19CisgICAgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUqIGJ1ZmZl
ckNoYXJhY3RlcnM7CisgICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHJlcXVpcmVkQ2FwYWNpdHksIGJ1ZmZlckNoYXJhY3RlcnMpOworICAgIGlmIChV
TkxJS0VMWSghYnVmZmVyKSkgeworICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0vLyBBbGxvY2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGlu
IGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVpdGhlciBtX3N0cmluZwot
Ly8gb3IgbV9idWZmZXIsICBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29w
eSBoYXMgY29tcGxldGVkKS4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29u
c3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsK
ICAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0g
ICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3Vs
dCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgotICAgIGF1dG8gYnVm
ZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwg
bV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKLSAgICAg
ICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7Ci0gICAgc3RkOjptZW1jcHkobV9idWZmZXJDaGFyYWN0
ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoLnVu
c2FmZUdldCgpKSAqIHNpemVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgotICAg
IAotICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KLSAgICBtX2J1ZmZlciA9IFdURk1v
dmUoYnVmZmVyKTsKLSAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOwotfQorICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFyYWN0ZXJzKGJ1ZmZlckNoYXJhY3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aCk7
CiAKLS8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHdoaWNoIGlzIDggYml0IGFuZCBtYXkgY29tZQotLy8gZnJvbSBlaXRoZXIgbV9z
dHJpbmcgb3IgbV9idWZmZXIsIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBj
b3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlclVw
Q29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQotewotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9p
czhCaXQpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
IEFTU0VSVChyZXF1aXJlZExlbmd0aCA8PSBtYXhDYXBhY2l0eSAmJiByZXF1aXJlZExlbmd0aCA+
PSBsZW5ndGgpOwotICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZm
ZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4K
LSAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVx
dWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKLSAgICBpZiAoVU5MSUtFTFkoIWJ1
ZmZlcikpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOyAvLyBUcmVhdCBhIGZhaWx1cmUg
dG8gYWxsY29hdGUgYXMgYW4gb3ZlcmZsb3cuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQotICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRD
aGFyYWN0ZXJzW2ldOwotICAgIAotICAgIG1faXM4Qml0ID0gZmFsc2U7Ci0gICAgCi0gICAgLy8g
VXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgorICAgIG1faXM4Qml0ID0gc3RkOjppc19zYW1lX3Y8
QWxsb2NhdGlvbkNoYXJhY3RlclR5cGUsIExDaGFyPjsKICAgICBtX2J1ZmZlciA9IFdURk1vdmUo
YnVmZmVyKTsKLSAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+
bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOworICAgIG1fYnVmZmVyQ2hhcmFjdGVycyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TENoYXIqPihidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICBtX3N0cmluZyA9
IHsgfTsKIH0KIAotdGVtcGxhdGU8Pgotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVm
ZmVyPExDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25l
ZCByZXF1aXJlZENhcGFjaXR5KQogewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25l
IHJlZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhl
cndpc2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIgbWV0aG9kLgotICAgIG1fc3Ry
aW5nID0gU3RyaW5nKCk7Ci0gICAgCi0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICBBU1NFUlQo
bV9idWZmZXItPmlzOEJpdCgpKTsKLSAgICAKLSAgICBpZiAobV9idWZmZXItPmhhc09uZVJlZigp
KSB7Ci0gICAgICAgIGF1dG8gZXhwZWN0ZWRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVh
bGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZm
ZXJDaGFyYWN0ZXJzOCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBs
KSkKLSAgICAgICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotICAgICAgICBtX2J1ZmZlciA9
IFdURk1vdmUoZXhwZWN0ZWRTdHJpbmdJbXBsLnZhbHVlKCkpOwotICAgIH0gZWxzZQotICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgp
OwotICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkgfHwgbV9idWZmZXItPmxlbmd0aCgpID09IHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5
IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQuCisgICAgaWYgKG1fYnVmZmVyKSB7
CisgICAgICAgIG1fc3RyaW5nID0geyB9OyAvLyBDbGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0
aGUgcmVmZXJlbmNlIHRvIG1fYnVmZmVyIGlmIGFueSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVy
ZW5jZSBjb3VudCBvZiBtX2J1ZmZlci4KKyAgICAgICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkgeworICAgICAgICAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICAg
ICAgICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5y
ZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkgeworICAgICAgICAgICAgICAgIGRpZE92
ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKChtX2lzOEJpdCA9PSBzdGQ6OmlzX3NhbWVfdjxDaGFyYWN0ZXJUeXBlLCBM
Q2hhcj4pKTsKKyAgICAgICAgICAgIG1fYnVmZmVyID0gV1RGTW92ZSgqYnVmZmVyKTsKKyAgICAg
ICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TENoYXIqPihidWZm
ZXJDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGFsbG9jYXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlw
ZT4oKSwgcmVxdWlyZWRDYXBhY2l0eSk7CiB9CiAKLXRlbXBsYXRlPD4KLXZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit2
b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBh
Y2l0eSkKIHsKLSAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMg
U3RyaW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQsCi0gICAgLy8gb3RoZXJ3aXNlIGZhbGwgYmFj
ayB0byAiYWxsb2NhdGUgYW5kIGNvcHkiIG1ldGhvZC4KLSAgICBtX3N0cmluZyA9IFN0cmluZygp
OwotICAgIAotICAgIGlmIChtX2J1ZmZlci0+aXM4Qml0KCkpCi0gICAgICAgIGFsbG9jYXRlQnVm
ZmVyVXBDb252ZXJ0KG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0aCk7Ci0g
ICAgZWxzZSBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAgICAgIGF1dG8gZXhwZWN0
ZWRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNl
Tm9uTnVsbCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIWV4cGVjdGVkU3RyaW5nSW1wbCkpCi0gICAgICAgICAgICByZXR1cm4g
ZGlkT3ZlcmZsb3coKTsKLSAgICAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGV4cGVjdGVkU3RyaW5n
SW1wbC52YWx1ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZm
ZXItPmNoYXJhY3RlcnMxNigpLCByZXF1aXJlZExlbmd0aCk7Ci0gICAgQVNTRVJUKGhhc092ZXJm
bG93ZWQoKSB8fCBtX2J1ZmZlci0+bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOworICAgIGlm
IChtX2lzOEJpdCkKKyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4ocmVxdWlyZWRDYXBh
Y2l0eSk7CisgICAgZWxzZQorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPihyZXF1aXJl
ZENhcGFjaXR5KTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5z
aWduZWQgbmV3Q2FwYWNpdHkpCiB7CiAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChuZXdDYXBhY2l0eSA8PSBTdHJpbmc6Ok1heExlbmd0aCk7CisK
ICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGJ1
ZmZlciwgdGhlbiBncm93IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4g
bV9idWZmZXItPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgp
KQotICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KG5ld0NhcGFjaXR5KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFy
PihuZXdDYXBhY2l0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9i
dWZmZXItPmxlbmd0aCgpKQorICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0
eSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gR3JvdyB0aGUgc3RyaW5nLCBpZiBuZWNlc3Nh
cnkuCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICBpZiAobmV3Q2FwYWNpdHkgPiBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgTENoYXIqIG51bGxQbGFjZWhvbGRlciA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobnVsbFBsYWNlaG9sZGVyLCBuZXdDYXBhY2l0
eSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAg
ICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5
KTsKKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9sZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
ICghbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8TENoYXI+KHN0YXRp
Y19jYXN0PExDaGFyKj4obnVsbHB0ciksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1fc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPExD
aGFyPihtX3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBuZXdDYXBhY2l0eSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVyczE2
KCksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4o
bV9zdHJpbmcuY2hhcmFjdGVyczE2KCksIG5ld0NhcGFjaXR5KTsKICAgICAgICAgfQogICAgIH0K
ICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8ICFuZXdDYXBhY2l0eSB8fCBtX2J1ZmZlci0+
bGVuZ3RoKCkgPj0gbmV3Q2FwYWNpdHkpOwogfQogCi0vLyBNYWtlICdhZGRpdGlvbmFsTGVuZ3Ro
JyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1f
c3RyaW5nICYgbV9sZW5ndGgsCi0vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxv
Y2F0ZWQgc3RvcmFnZS4KLS8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGUgc2l6ZSBvZiB0aGUgbmV3
IGJ1aWxkZXIgd291bGQgaGF2ZSBvdmVyZmxvd2VkCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCBhZGRpdGlvbmFsTGVuZ3RoKQorLy8gTWFrZSAn
YWRkaXRpb25hbExlbmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9i
dWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoIHRvIHVzZSwKKy8vIHRoYXQgY2FwYWNp
dHkgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlIHNv
IHRoZSBjYWxsZXIgY2FuIHdyaXRlIGNoYXJhY3RlcnMgdGhlcmUuCisvLyBSZXR1cm5zIG51bGxw
dHIgaWYgYWxsb2NhdGlvbiBmYWlscywgbGVuZ3RoIG92ZXJmbG93cywgb3IgaWYgdG90YWwgY2Fw
YWNpdHkgaXMgMCBzbyBubyBidWZmZXIgaXMgbmVlZGVkLgorLy8gVGhlIGNhbGxlciBoYXMgdGhl
IHJlc3BvbnNpYmlsaXR5IGZvciBjaGVja2luZyB0aGF0IENoYXJhY3RlclR5cGUgaXMgdGhlIHR5
cGUgb2YgdGhlIGV4aXN0aW5nIGJ1ZmZlci4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIEFTU0VSVChh
ZGRpdGlvbmFsTGVuZ3RoKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNpemUgb2YgdGhl
IGJ1aWxkZXIgYWZ0ZXIgYXBwZW5kaW5nLgotICAgIENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0
aCA9IG1fbGVuZ3RoICsgYWRkaXRpb25hbExlbmd0aDsKLSAgICBpZiAocmVxdWlyZWRMZW5ndGgu
aGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGlmIChtX2J1ZmZlciAmJiByZXF1aXJlZExlbmd0aCA8PSBtX2J1ZmZl
ci0+bGVuZ3RoKCkpIHsKKyAgICAgICAgbV9zdHJpbmcgPSB7IH07CisgICAgICAgIHJldHVybiBi
dWZmZXJDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBzdGQ6OmV4Y2hhbmdlKG1fbGVuZ3Ro
LCByZXF1aXJlZExlbmd0aCk7CiAgICAgfQotCi0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrPENoYXJhY3RlclR5cGU+KHJlcXVpcmVkTGVuZ3Ro
KTsKKyAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2U8Q2hhcmFjdGVy
VHlwZT4ocmVxdWlyZWRMZW5ndGgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1
ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrKENoZWNrZWRJbnQzMiByZXF1aXJl
ZExlbmd0aCkKKy8vIFNoYXJlZCBieSB0aGUgb3RoZXIgZXh0ZW5kQnVmZmVyIGZ1bmN0aW9ucy4K
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1
aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQogewotICAgIEFTU0VSVCghcmVxdWlyZWRMZW5ndGguaGFzT3ZlcmZsb3dlZCgpKTsK
LQotICAgIGlmIChtX2J1ZmZlciAmJiAocmVxdWlyZWRMZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVk
PigpIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBp
cyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRl
ciBjb250ZW50cyEKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0
aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICB1bnNpZ25lZCBjdXJyZW50TGVuZ3Ro
ID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0g
ICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgICAgIHJldHVybiBnZXRCdWZm
ZXJDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBjdXJyZW50TGVuZ3RoOwotICAgIH0KLQot
ICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZTxDaGFyYWN0ZXJUeXBl
PihyZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKSk7CisgICAgQVNTRVJUKCFoYXNPdmVyZmxvd2Vk
KCkpOworICAgIGlmICghcmVxdWlyZWRMZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJlYWxsb2NhdGVCdWZmZXIoZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJl
ZExlbmd0aCkpOworICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyQ2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBl
PigpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwgcmVxdWlyZWRMZW5ndGgpOwogfQogCi1MQ2hh
ciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nOChDaGVja2VkSW50MzIg
cmVxdWlyZWRMZW5ndGgpCisvLyBBbHRlcmF0aXZlIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyB0
aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgaGVhZGVyIHdpdGhvdXQgaW5saW5pbmcuCitMQ2hh
ciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nTENoYXIodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHJlcXVpcmVkTGVuZ3RoLmhhc092
ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgZGlkT3ZlcmZsb3coKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRob3V0
T3ZlcmZsb3dDaGVjazxMQ2hhcj4ocmVxdWlyZWRMZW5ndGgpOworICAgIHJldHVybiBleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmc8TENoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAotVUNoYXIqIFN0
cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzE2KENoZWNrZWRJbnQzMiByZXF1
aXJlZExlbmd0aCkKK1VDaGFyKiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmdXaXRoVXBjb252ZXJ0KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIGlmIChVTkxJ
S0VMWShyZXF1aXJlZExlbmd0aC5oYXNPdmVyZmxvd2VkKCkpKSB7Ci0gICAgICAgIGRpZE92ZXJm
bG93KCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KICAgICBpZiAobV9pczhCaXQp
IHsKLSAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM7Ci0gICAgICAgIGlmIChtX2J1ZmZl
cikgewotICAgICAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aC51
bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICAgICAgY2hhcmFjdGVycyA9IG1fYnVmZmVy
LT5jaGFyYWN0ZXJzOCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1f
c3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAg
ICAgICAgICBjaGFyYWN0ZXJzID0gbV9zdHJpbmcuaXNOdWxsKCkgPyBudWxscHRyIDogbV9zdHJp
bmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgfQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29u
dmVydChjaGFyYWN0ZXJzLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVu
Z3RoLnVuc2FmZUdldCgpKSk7CisgICAgICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihjaGFyYWN0
ZXJzOCgpLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdl
dCgpOwotICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBvbGRMZW5ndGg7CisgICAgICAgIHJl
dHVybiBidWZmZXJDaGFyYWN0ZXJzPFVDaGFyPigpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwg
cmVxdWlyZWRMZW5ndGgpOwogICAgIH0KLSAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5k
aW5nV2l0aG91dE92ZXJmbG93Q2hlY2s8VUNoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKLX0KLQotLy8g
TWFrZSAncmVxdWlyZWRMZW5ndGgnIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwg
dXBkYXRlIG1fc3RyaW5nICYgbV9sZW5ndGgsCi0vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgc3RvcmFnZS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Ns
b3dDYXNlKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQotewotICAgIEFTU0VSVCghaGFzT3ZlcmZs
b3dlZCgpKTsKLSAgICBBU1NFUlQocmVxdWlyZWRMZW5ndGgpOwotCi0gICAgaWYgKG1fYnVmZmVy
KSB7Ci0gICAgICAgIC8vIElmIHRoZSBidWZmZXIgaXMgdmFsaWQgaXQgbXVzdCBiZSBhdCBsZWFz
dCBhcyBsb25nIGFzIHRoZSBjdXJyZW50IGJ1aWxkZXIgY29udGVudHMhCi0gICAgICAgIEFTU0VS
VChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsK
LSAgICAgICAgCi0gICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oZXhwYW5k
ZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5z
aWduZWQ+KCkpOwotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2xlbmd0aCA/IG1fc3RyaW5nLmNo
YXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSA6IG51bGxwdHIsIGV4cGFuZGVkQ2FwYWNpdHkoY2Fw
YWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKGhhc092
ZXJmbG93ZWQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hhcmFjdGVyVHlw
ZSogcmVzdWx0ID0gZ2V0QnVmZmVyQ2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgbV9sZW5n
dGgudW5zYWZlR2V0KCk7Ci0gICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aDsKLSAgICBBU1NF
UlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBt
X2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzxVQ2hhcj4ocmVxdWlyZWRMZW5ndGgpOwog
fQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCB8fCBoYXNPdmVy
Zmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKLQog
ICAgIGlmIChtX2lzOEJpdCAmJiBsZW5ndGggPT0gMSAmJiBpc0xhdGluMShjaGFyYWN0ZXJzWzBd
KSkgewogICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcnNbMF0pKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugb3B0aW1p
emUgbWVtb3J5IGJ5IGtlZXBpbmcgdGhlIHN0cmluZyA4LWJpdCB3aGVuIGFsbCB0aGUgY2hhcmFj
dGVycyBhcmUgTGF0aW4tMT8KLQotICAgIFVDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZzE2KG1fbGVuZ3RoICsgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRl
c3RpbmF0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN0ZDo6bWVtY3B5KGRlc3RpbmF0aW9u
LCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBzaXplb2YoVUNoYXIp
KTsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgIGlmIChhdXRv
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydChzYXR1
cmF0ZWRTdW08dWludDMyX3Q+KG1fbGVuZ3RoLCBsZW5ndGgpKSkKKyAgICAgICAgU3RyaW5nSW1w
bDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAK
IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVycyhjb25zdCBMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoIHx8IGhhc092ZXJmbG93
ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNoYXJhY3RlcnMpOwotCiAgICAg
aWYgKG1faXM4Qml0KSB7Ci0gICAgICAgIExDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZzxMQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikg
ewotICAgICAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlbmd0aCA+IDgpCi0gICAgICAgICAgICBzdGQ6
Om1lbWNweShkZXN0aW5hdGlvbiwgY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSG93IHN0cm9uZyBpcyBvdXIgZXZpZGVuY2UgdGhhdCB0
aGlzIGlzIGZhc3RlciB0aGFuIG1lbWNweT8gV2hhdCBwbGF0Zm9ybXMgaXMgdGhpcyB0cnVlIGZv
cj8KLSAgICAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwot
ICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCi0gICAgICAgICAgICAgICAgKmRl
c3RpbmF0aW9uKysgPSAqY2hhcmFjdGVycysrOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRv
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nPExDaGFyPihzYXR1cmF0ZWRT
dW08dWludDMyX3Q+KG1fbGVuZ3RoLCBsZW5ndGgpKSkKKyAgICAgICAgICAgIFN0cmluZ0ltcGw6
OmNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFwcGVu
ZGluZzxVQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikgewotICAgICAg
ICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgY29uc3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0g
ICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgKmRlc3RpbmF0aW9u
KysgPSAqY2hhcmFjdGVycysrOworICAgICAgICBpZiAoYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZzxVQ2hhcj4oc2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xlbmd0
aCwgbGVuZ3RoKSkpCisgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0
aW5hdGlvbiwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICB9CiB9CiAKLSNpZiBVU0UoQ0YpCi0K
LXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICAv
LyBGYXN0IHBhdGg6IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBTdHJpbmcgd2hlbiBw
b3NzaWJsZS4KLSAgICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENGU3RyaW5nR2V0Q1N0cmluZ1B0
cihzdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkgewotICAgICAgICBhcHBlbmRD
aGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwgQ0ZT
dHJpbmdHZXRMZW5ndGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXBw
ZW5kKFN0cmluZyhzdHJpbmcpKTsKLX0KLQotI2VuZGlmCi0KIGJvb2wgU3RyaW5nQnVpbGRlcjo6
Y2FuU2hyaW5rKCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgLy8gT25seSBzaHJpbmsgdGhlIGJ1ZmZlciBpZiBpdCdzIGxlc3Mg
dGhhbiA4MCUgZnVsbC4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1bmUgdGhpcyBoZXVyaXN0
aWMgYmFzZWQgc29tZSBhY3R1YWwgdGVzdCBjYXNlIG1lYXN1cmVtZW50cy4KLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICByZXR1cm4gbV9idWZmZXIgJiYg
bV9idWZmZXItPmxlbmd0aCgpID4gKGxlbmd0aCArIChsZW5ndGggPj4gMikpOworICAgIHJldHVy
biAhaGFzT3ZlcmZsb3dlZCgpICYmIG1fYnVmZmVyICYmIG1fYnVmZmVyLT5sZW5ndGgoKSA+IG1f
bGVuZ3RoICsgKG1fbGVuZ3RoID4+IDIpOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlu
a1RvRml0KCkKIHsKICAgICBpZiAoY2FuU2hyaW5rKCkpIHsKLSAgICAgICAgaWYgKG1faXM4Qml0
KQotICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obV9sZW5ndGgudW5zYWZlR2V0
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPiht
X2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsK
LSAgICAgICAgbV9zdHJpbmcgPSBXVEZNb3ZlKG1fYnVmZmVyKTsKKyAgICAgICAgcmVhbGxvY2F0
ZUJ1ZmZlcihtX2xlbmd0aCk7CisgICAgICAgIG1fc3RyaW5nID0gc3RkOjpleGNoYW5nZShtX2J1
ZmZlciwgbnVsbHB0cik7CiAgICAgfQogfQogCiBib29sIFN0cmluZ0J1aWxkZXI6OmlzQWxsQVND
SUkoKSBjb25zdAogewotICAgIGF1dG8gbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7Ci0gICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2lzOEJpdCkKLSAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShjaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwot
ICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7
CisgICAgcmV0dXJuIFN0cmluZ1ZpZXcgeyAqdGhpcyB9LmlzQWxsQVNDSUkoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDcwMThh
MWFiN2JkYmQ3NGU2Y2I3YWZjZDM1NDRlYWViOTM5MGJlNWUuLjkyYmEwNDM1MTVhOWFhYzYyMGRh
MTY3OWQ1MDRiODg0NTE2Nzg3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjYsNDAwICsyNiwz
NTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9TYXR1cmF0ZWRBcml0
aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotLy8gU3RyaW5nQnVpbGRlciBjdXJyZW50
bHkgdXNlcyBhIENoZWNrZWQ8aW50MzJfdCwgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c+IGZv
ciBtX2xlbmd0aC4KLS8vIElkZWFsbHksIHdlIHdvdWxkIHdhbnQgdG8gbWFrZSBTdHJpbmdCdWls
ZGVyIGEgdGVtcGxhdGUgd2l0aCBhbiBPdmVyZmxvd0hhbmRsZXIgcGFyYW1ldGVyLCBhbmQKLS8v
IG1fbGVuZ3RoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYmFzZWQgb24gdGhhdCBPdmVyZmxvd0hhbmRs
ZXIgaW5zdGVhZC4gSG93ZXZlciwgY3VycmVudGx5LCB3ZSdyZQotLy8gbm90IGFibGUgdG8gZ2V0
IGNsYW5nIHRvIGV4cG9ydCBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCB0ZW1wbGF0ZSBtZXRob2Rz
ICh3aGljaCB3b3VsZCBiZSBuZWVkZWQKLS8vIGlmIHdlIHRlbXBsYXRpemUgU3RyaW5nQnVpbGRl
cikuIEFzIGEgd29ya2Fyb3VuZCwgd2UgdXNlIHRoZSBDb25kaXRpb25hbENyYXNoT25PdmVyZmxv
dyBoYW5kbGVyCi0vLyBpbnN0ZWFkIHRvIGRvIGEgcnVudGltZSBjaGVjayBvbiB3aGV0aGVyIGl0
IHNob3VsZCBjcmFzaCBvbiBvdmVyZmxvd3Mgb3Igbm90LgotLy8KLS8vIFdoZW4gY2xhbmcgaXMg
YWJsZSB0byBleHBvcnQgZXhwbGljaXRseSBpbnN0YW50aWF0ZWQgdGVtcGxhdGUgbWV0aG9kcywg
d2UgY2FuIHRlbXBsYXRpemUKLS8vIFN0cmluZ0J1aWxkZXIgYW5kIGRvIGF3YXkgd2l0aCBDb25k
aXRpb25hbENyYXNoT25PdmVyZmxvdy4KLS8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkxMDUwLgotCiBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKLSAgICAvLyBE
aXNhbGxvdyBjb3B5aW5nIHNpbmNlIGl0J3MgZXhwZW5zaXZlIGFuZCB3ZSBkb24ndCB3YW50IGNv
ZGUgdG8gZG8gaXQgYnkgYWNjaWRlbnQuCisgICAgLy8gRGlzYWxsb3cgY29weWluZyBzaW5jZSBp
dCdzIGV4cGVuc2l2ZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyBpdCBieSBhY2NpZGVudC4KICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdCdWlsZGVyKTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIGVudW0gY2xhc3MgT3ZlcmZsb3dIYW5kbGVyIHsK
LSAgICAgICAgQ3Jhc2hPbk92ZXJmbG93LAotICAgICAgICBSZWNvcmRPdmVyZmxvdwotICAgIH07
Ci0KLSAgICBTdHJpbmdCdWlsZGVyKE92ZXJmbG93SGFuZGxlciBoYW5kbGVyID0gT3ZlcmZsb3dI
YW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cpCi0gICAgICAgIDogbV9idWZmZXJDaGFyYWN0ZXJzOChu
dWxscHRyKQotICAgIHsKLSAgICAgICAgbV9sZW5ndGguc2V0U2hvdWxkQ3Jhc2hPbk92ZXJmbG93
KGhhbmRsZXIgPT0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cpOwotICAgIH0KKyAg
ICBTdHJpbmdCdWlsZGVyKCkgPSBkZWZhdWx0OwogICAgIFN0cmluZ0J1aWxkZXIoU3RyaW5nQnVp
bGRlciYmKSA9IGRlZmF1bHQ7CiAgICAgU3RyaW5nQnVpbGRlciYgb3BlcmF0b3I9KFN0cmluZ0J1
aWxkZXImJikgPSBkZWZhdWx0OwogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRpZE92ZXJmbG93
KCkgeyBtX2xlbmd0aC5vdmVyZmxvd2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFz
T3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoLmhhc092ZXJmbG93ZWQoKTsgfQot
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjcmFzaGVzT25PdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoLnNob3VsZENyYXNoT25PdmVyZmxvdygpOyB9CisgICAgZW51bSBjbGFzcyBPdmVy
Zmxvd0hhbmRsZXIgeyBDcmFzaE9uT3ZlcmZsb3csIFJlY29yZE92ZXJmbG93IH07IC8vIEZJWE1F
OiBEZXNwaXRlIGl0cyB1c2UgaW4gQ2hlY2tlZDw+LCAiaGFuZGxlciIgZG9lcyBub3Qgc2VlbSB0
aGUgY29ycmVjdCBuYW1lIGZvciB0aGlzLgorICAgIGV4cGxpY2l0IFN0cmluZ0J1aWxkZXIoT3Zl
cmZsb3dIYW5kbGVyKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHN3YXAoU3RyaW5n
QnVpbGRlciYpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRpZE92ZXJmbG93KCk7CisgICAg
QUxXQVlTX0lOTElORSBib29sIGhhc092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aCA+IFN0cmluZzo6TWF4TGVuZ3RoOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGNyYXNoZXNP
bk92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KIAog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kQ2hhcmFjdGVy
cyhjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKLQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkgeyBh
cHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJz
KSwgbGVuZ3RoKTsgfQogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQXRvbVN0cmluZyYgYXRvbVN0
cmluZykKLSAgICB7Ci0gICAgICAgIGFwcGVuZChhdG9tU3RyaW5nLnN0cmluZygpKTsKLSAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+IHZvaWQgYXBwZW5kKFN0cmlu
Z1R5cGVzLi4uKTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAg
IHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGtlZXAgdGhlc2Ugb3ZlcmxvYWRzIG9ubHkgaWYgb3B0aW1p
emF0aW9ucyBtYWtlIHRoZW0gbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgc2luZ2xlLWFyZ3VtZW50
IGZvcm0gb2YgdGhlIHZhcmlhZGljIGFwcGVuZCBhYm92ZS4KKyAgICB2b2lkIGFwcGVuZChjb25z
dCBBdG9tU3RyaW5nJiBzdHJpbmcpIHsgYXBwZW5kKHN0cmluZy5zdHJpbmcoKSk7IH0KKyAgICB2
b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFwcGVuZChTdHJpbmdWaWV3KTsK
KyAgICB2b2lkIGFwcGVuZChVQ2hhcik7CisgICAgdm9pZCBhcHBlbmQoTENoYXIpOworICAgIHZv
aWQgYXBwZW5kKGNoYXIgY2hhcmFjdGVyKSB7IGFwcGVuZChzdGF0aWNfY2FzdDxMQ2hhcj4oY2hh
cmFjdGVyKSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKik7CiAKLSAgICAgICAgaWYg
KCFzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEFk
ZCBhIFN0cmluZ1R5cGVBZGFwdGVyIHNvIHdlIGNhbiBhcHBlbmQgb25lIHN0cmluZyBidWlsZGVy
IHRvIGFub3RoZXIgd2l0aCB2YXJpYWRpYyBhcHBlbmQuCisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
U3RyaW5nQnVpbGRlciYpOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBl
bXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBo
YXMgbm90IGJlZW4gY2FsbGVkKQotICAgICAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJp
bmcuCi0gICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyKSB7Ci0gICAgICAgICAgICBt
X3N0cmluZyA9IHN0cmluZzsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgp
OwotICAgICAgICAgICAgbV9pczhCaXQgPSBtX3N0cmluZy5pczhCaXQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50
PiBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kTGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVy
cylbY2hhcmFjdGVyQ291bnRdKSB7IGFwcGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgY2hhcmFj
dGVyQ291bnQgLSAxKTsgfQogCi0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAg
ICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3Ro
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmdCdWlsZGVyJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChoYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKKyAgICB2b2lkIGFw
cGVuZENoYXJhY3RlcihVQ2hhcikgPSBkZWxldGU7CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIo
TENoYXIpID0gZGVsZXRlOworICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKGNoYXIpID0gZGVsZXRl
OworICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIpOwogCi0gICAgICAgIGlmICghb3Ro
ZXIubV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47CisgICAgdm9pZCBhcHBlbmRTdWJzdHJp
bmcoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGggPSBTdHJp
bmc6Ok1heExlbmd0aCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kUXVvdGVk
SlNPTlN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICAvLyBJZiB3ZSdyZSBhcHBlbmRp
bmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQgdGhlcmUgaXMgbm90IGEgYnVmZmVyIChyZXNlcnZl
Q2FwYWNpdHkgaGFzIG5vdCBiZWVuIGNhbGxlZCkKLSAgICAgICAgLy8gdGhlbiBqdXN0IHJldGFp
biB0aGUgc3RyaW5nLgotICAgICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlciAmJiAhb3Ro
ZXIubV9zdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gb3RoZXIubV9z
dHJpbmc7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IG90aGVyLm1fbGVuZ3RoOwotICAgICAgICAg
ICAgbV9pczhCaXQgPSBvdGhlci5tX2lzOEJpdDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgIC8vIEZJWE1FOiBVbmNsZWFyIHdoeSB0b1N0cmluZyByZXR1cm5zIFN0cmluZyBh
bmQgdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5IHJldHVybnMgY29uc3QgU3RyaW5nJi4gTWFrZSB0
aGVtIGNvbnNpc3RlbnQuCisgICAgU3RyaW5nIHRvU3RyaW5nKCk7CisgICAgY29uc3QgU3RyaW5n
JiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdDsKKyAgICBBdG9tU3RyaW5nIHRvQXRv
bVN0cmluZygpIGNvbnN0OwogCi0gICAgICAgIGlmIChvdGhlci5pczhCaXQoKSkKLSAgICAgICAg
ICAgIGFwcGVuZENoYXJhY3RlcnMob3RoZXIuY2hhcmFjdGVyczgoKSwgb3RoZXIubV9sZW5ndGgu
dW5zYWZlR2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJz
KG90aGVyLmNoYXJhY3RlcnMxNigpLCBvdGhlci5tX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2xlbmd0aDsgfQorICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBlbmQoU3RyaW5nVmlldyBzdHJp
bmdWaWV3KQotICAgIHsKLSAgICAgICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCi0gICAgICAg
ICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmll
dy5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMo
c3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7Ci0gICAgfQor
ICAgIG9wZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdDsKKyAgICBVQ2hhciBvcGVyYXRvcltdKHVu
c2lnbmVkIGkpIGNvbnN0OwogCi0jaWYgVVNFKENGKQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGFwcGVuZChDRlN0cmluZ1JlZik7Ci0jZW5kaWYKLSNpZiBVU0UoQ0YpICYmIGRlZmluZWQo
X19PQkpDX18pCi0gICAgdm9pZCBhcHBlbmQoTlNTdHJpbmcgKnN0cmluZykgeyBhcHBlbmQoKF9f
YnJpZGdlIENGU3RyaW5nUmVmKXN0cmluZyk7IH0KLSNlbmRpZgorICAgIGJvb2wgaXM4Qml0KCkg
Y29uc3QgeyByZXR1cm4gbV9pczhCaXQ7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgY29u
c3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVyczxMQ2hhcj4o
KTsgfQorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IHJldHVybiBjaGFy
YWN0ZXJzPFVDaGFyPigpOyB9CiAgICAgCi0gICAgdm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5n
OjpNYXhMZW5ndGgpCi0gICAgewotICAgICAgICBpZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0Owor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdD
YXBhY2l0eSk7CiAKLSAgICAgICAgdW5zaWduZWQgY2xhbXBlZExlbmd0aCA9IHN0ZDo6bWluKGxl
bmd0aCwgc3RyaW5nLmxlbmd0aCgpIC0gb2Zmc2V0KTsKLSAgICAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSkKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCkg
KyBvZmZzZXQsIGNsYW1wZWRMZW5ndGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBl
bmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgY2xhbXBlZExlbmd0
aCk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBu
ZXdMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGNhblNocmluaygpIGNvbnN0
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNocmlua1RvRml0KCk7CiAKLSAgICB2b2lk
IGFwcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQotICAgIHsKLSAgICAgICAgaWYgKGNoYXJh
Y3RlcnMpCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIHN0cmxlbihj
aGFyYWN0ZXJzKSk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzQWxsQVND
SUkoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyKSA9IGRlbGV0ZTsK
LSAgICB2b2lkIGFwcGVuZChVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9s
ZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpOwotICAgICAgICBpZiAobV9idWZmZXIgJiYgbGVu
Z3RoIDwgbV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1faXM4Qml0KSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJz
MTZbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAgICAgICAgbV9sZW5ndGgrKzsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0xhdGluMShj
KSkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczhbbGVuZ3RoXSA9IHN0YXRp
Y19jYXN0PExDaGFyPihjKTsKLSAgICAgICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhcHBlbmRD
aGFyYWN0ZXJzKCZjLCAxKTsKLSAgICB9Citwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEFsbG9jYXRpb25DaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBDdXJyZW50Q2hhcmFjdGVyVHlwZT4g
dm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBDdXJyZW50Q2hhcmFjdGVyVHlwZSogY3VycmVudENo
YXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJl
ZENhcGFjaXR5KTsKKyAgICB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRD
YXBhY2l0eSk7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihMQ2hhcikgPSBkZWxldGU7Ci0g
ICAgdm9pZCBhcHBlbmQoTENoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChoYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVu
Z3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKTsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIGxlbmd0
aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAg
ICAgaWYgKG1faXM4Qml0KQotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczhbbGVu
Z3RoXSA9IGM7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9idWZmZXJDaGFy
YWN0ZXJzMTZbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoJmMsIDEpOwotICAgIH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5
cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlwZSogZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBMQ2hhciogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nTENoYXIo
dW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBVQ2hhciog
ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydCh1bnNpZ25lZCByZXF1aXJlZExl
bmd0aCk7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihjaGFyKSA9IGRlbGV0ZTsKLSAgICB2
b2lkIGFwcGVuZChjaGFyIGMpCi0gICAgewotICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8TENo
YXI+KGMpKTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxX
QVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBidWZmZXJDaGFyYWN0ZXJzKCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVpZnlTdHJpbmcoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5k
Q2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIGlmIChVX0lTX0JNUChjKSkgewot
ICAgICAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYXBwZW5kKFUxNl9MRUFEKGMpKTsKLSAgICAgICAg
YXBwZW5kKFUxNl9UUkFJTChjKSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0
cmluZ1R5cGVBZGFwdGVycz4gdm9pZCBhcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0
ZXJzLi4uKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFF1b3RlZEpTT05T
dHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmc7CisgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG1fYnVmZmVyOworICAgIExDaGFyKiBtX2J1ZmZlckNoYXJhY3Rl
cnMgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07CisgICAgYm9vbCBt
X2lzOEJpdCB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93IHsgdHJ1
ZSB9OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbXV0YWJsZSBib29sIG1faXNSZWlmaWVkIHsg
ZmFsc2UgfTsKKyNlbmRpZgorfTsKIAotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNv
dW50PgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0IGNoYXIgKCZj
aGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0pIHsgYXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJz
LCBjaGFyYWN0ZXJDb3VudCAtIDEpOyB9Cit0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRlZ2VyVG9TdHJp
bmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nQnVpbGRlcj47CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBTdHJpbmdUeXBlcz4gdm9pZCBhcHBlbmQoU3RyaW5nVHlwZXMuLi4pOworLy8gRklYTUU6
IE1vdmUgdGhpcyB0byBTdHJpbmdWaWV3IGFuZCBtYWtlIGl0IHRha2UgYSBTdHJpbmdWaWV3IGlu
c3RlYWQgb2YgYSBTdHJpbmdCdWlsZGVyPwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBlcXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiwgY29uc3QgQ2hhcmFjdGVyVHlwZSos
IHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2J1ZmZl
ciB8fCBtX2lzUmVpZmllZCk7Ci0gICAgICAgICAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAgICAgIH0KKy8vIElubGluZSBmdW5j
dGlvbiBpbXBsZW1lbnRhdGlvbnMuCiAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJm
bG93ZWQoKSk7Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJlaWZ5U3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9CitpbmxpbmUgU3RyaW5nQnVpbGRlcjo6
U3RyaW5nQnVpbGRlcihPdmVyZmxvd0hhbmRsZXIgcG9saWN5KQorICAgIDogbV9zaG91bGRDcmFz
aE9uT3ZlcmZsb3cgeyBwb2xpY3kgPT0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cg
fQoreworfQogCi0gICAgY29uc3QgU3RyaW5nJiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBj
b25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0g
ICAgICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJlaWZ5U3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWls
ZGVyOjpjbGVhcigpCit7CisgICAgbV9zdHJpbmcgPSB7IH07CisgICAgbV9idWZmZXIgPSBudWxs
cHRyOworICAgIG1fYnVmZmVyQ2hhcmFjdGVycyA9IG51bGxwdHI7CisgICAgbV9sZW5ndGggPSAw
OworICAgIG1faXM4Qml0ID0gdHJ1ZTsKKyAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBj
aGFuZ2UgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cuCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBt
X2lzUmVpZmllZCA9IGZhbHNlOworI2VuZGlmCit9CiAKLSAgICBBdG9tU3RyaW5nIHRvQXRvbVN0
cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dl
ZCgpKTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eUF0
b20oKTsKLQotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHN1ZmZpY2llbnRseSBvdmVyLWFs
bG9jYXRlZCwgbWFrZSBhIG5ldyBBdG9tU3RyaW5nIGZyb20gYSBjb3B5IHNvIGl0cyBidWZmZXIg
aXMgbm90IHNvIGxhcmdlLgotICAgICAgICBpZiAoY2FuU2hyaW5rKCkpIHsKLSAgICAgICAgICAg
IGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhjaGFyYWN0
ZXJzOCgpLCBsZW5ndGgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCkpOyAgICAgICAgICAgIAotICAgICAgICB9CitpbmxpbmUgdm9pZCBT
dHJpbmdCdWlsZGVyOjpzd2FwKFN0cmluZ0J1aWxkZXImIG90aGVyKQoreworICAgIG1fc3RyaW5n
LnN3YXAob3RoZXIubV9zdHJpbmcpOworICAgIG1fYnVmZmVyLnN3YXAob3RoZXIubV9idWZmZXIp
OworICAgIHN0ZDo6c3dhcChtX2J1ZmZlckNoYXJhY3RlcnMsIG90aGVyLm1fYnVmZmVyQ2hhcmFj
dGVycyk7CisgICAgc3RkOjpzd2FwKG1fbGVuZ3RoLCBvdGhlci5tX2xlbmd0aCk7CisgICAgc3Rk
Ojpzd2FwKG1faXM4Qml0LCBvdGhlci5tX2lzOEJpdCk7CisgICAgc3RkOjpzd2FwKG1fc2hvdWxk
Q3Jhc2hPbk92ZXJmbG93LCBvdGhlci5tX3Nob3VsZENyYXNoT25PdmVyZmxvdyk7CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICBzdGQ6OnN3YXAobV9pc1JlaWZpZWQsIG90aGVyLm1faXNSZWlmaWVk
KTsKKyNlbmRpZgorfQorCitpbmxpbmUgU3RyaW5nQnVpbGRlcjo6b3BlcmF0b3IgU3RyaW5nVmll
dygpIGNvbnN0Cit7CisgICAgaWYgKG1faXM4Qml0KQorICAgICAgICByZXR1cm4geyBjaGFyYWN0
ZXJzOCgpLCBsZW5ndGgoKSB9OworICAgIHJldHVybiB7IGNoYXJhY3RlcnMxNigpLCBsZW5ndGgo
KSB9OworfQogCi0gICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gQXRvbVN0cmluZyhtX3N0cmluZyk7Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgTENo
YXIqIFN0cmluZ0J1aWxkZXI6OmJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkKK3sKKyAgICBBU1NF
UlQobV9pczhCaXQpOworICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnM7Cit9CiAKLSAgICAg
ICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcobV9idWZmZXIu
Z2V0KCksIDAsIG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKQoreworICAg
IEFTU0VSVCghbV9pczhCaXQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFVDaGFyKj4o
bV9idWZmZXJDaGFyYWN0ZXJzKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cmluZ0J1aWxk
ZXI6OmRpZE92ZXJmbG93KCkKK3sKKyAgICBpZiAobV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpCisg
ICAgICAgIENSQVNIKCk7CisgICAgbV9sZW5ndGggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCk7Cit9CisKK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChVQ2hh
ciBjaGFyYWN0ZXIpCit7CisgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwgbV9idWZmZXIt
Pmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghbV9pczhCaXQp
IHsKKyAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KClbbV9sZW5ndGgrK10gPSBj
aGFyYWN0ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
TGF0aW4xKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+
KClbbV9sZW5ndGgrK10gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KKyAgICBhcHBlbmRDaGFyYWN0ZXJzKCZjaGFy
YWN0ZXIsIDEpOworfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICByZXR1cm4gbV9s
ZW5ndGgudW5zYWZlR2V0KCk7CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoTENo
YXIgY2hhcmFjdGVyKQoreworICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1fYnVmZmVy
LT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgeworICAgICAgICBpZiAobV9pczhCaXQp
CisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXJzPExDaGFyPigpW21fbGVuZ3RoKytdID0gY2hh
cmFjdGVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXJzPFVDaGFy
PigpW21fbGVuZ3RoKytdID0gY2hhcmFjdGVyOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IGFwcGVuZENoYXJhY3RlcnMoJmNoYXJhY3RlciwgMSk7Cit9CiAKLSAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhbV9sZW5ndGg7IH0KK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6
OmFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBJZiB3ZSdyZSBhcHBlbmRp
bmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQgdGhlcmUgaXMgbm90IGEgYnVmZmVyIChyZXNlcnZl
Q2FwYWNpdHkgaGFzIG5vdCBiZWVuIGNhbGxlZCkKKyAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRo
ZSBzdHJpbmcuCisgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKKyAgICAgICAgbV9z
dHJpbmcgPSBzdHJpbmc7CisgICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAg
ICAgICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVk
IG5ld0NhcGFjaXR5KTsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICBhcHBlbmRD
aGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIGVs
c2UKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmlu
Zy5sZW5ndGgoKSk7Cit9CiAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgcmV0dXJu
IG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0aCgpIDogbV9sZW5ndGgudW5zYWZlR2V0KCk7Citp
bmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nQnVpbGRlciYgb3Ro
ZXIpCit7CisgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5k
IHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBjYWxs
ZWQpCisgICAgLy8gdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgorICAgIGlmICghbV9sZW5n
dGggJiYgIW1fYnVmZmVyICYmICFvdGhlci5tX3N0cmluZy5pc051bGwoKSkgeworICAgICAgICAv
LyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNyYXNoIG9uIG92ZXJmbG93IHdp
dGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgICAgICBtX3N0cmluZyA9IG90aGVy
Lm1fc3RyaW5nOworICAgICAgICBtX2xlbmd0aCA9IG90aGVyLmxlbmd0aCgpOworICAgICAgICBt
X2lzOEJpdCA9IG90aGVyLm1faXM4Qml0OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzaXplKHVuc2lnbmVkIG5ld1NpemUpOworICAgIGlm
IChvdGhlci5pczhCaXQoKSkKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhvdGhlci5jaGFyYWN0
ZXJzOCgpLCBvdGhlci5tX2xlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmRDaGFyYWN0
ZXJzKG90aGVyLmNoYXJhY3RlcnMxNigpLCBvdGhlci5tX2xlbmd0aCk7Cit9CiAKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5TaHJpbmsoKSBjb25zdDsKK2lubGluZSB2b2lkIFN0cmlu
Z0J1aWxkZXI6OmFwcGVuZChTdHJpbmdWaWV3IHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBz
dHJpbmcubGVuZ3RoKCkpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7Cit9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzaHJpbmtUb0ZpdCgpOworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6
YXBwZW5kU3Vic3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY2xhbXBlZExlbmd0aCA9IHN0ZDo6bWluKGxl
bmd0aCwgc3RyaW5nLmxlbmd0aCgpIC0gb2Zmc2V0KTsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgp
KQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpICsgb2Zmc2V0
LCBjbGFtcGVkTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3Ry
aW5nLmNoYXJhY3RlcnMxNigpICsgb2Zmc2V0LCBjbGFtcGVkTGVuZ3RoKTsKK30KIAotICAgIFVD
aGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWhhc092ZXJmbG93ZWQoKSAmJiBpIDwg
bV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgaWYgKG1faXM4Qml0KQot
ICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaV07Ci0gICAgICAgIHJldHVybiBjaGFy
YWN0ZXJzMTYoKVtpXTsKLSAgICB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQo
Y29uc3QgY2hhciogY2hhcmFjdGVycykKK3sKKyAgICBpZiAoY2hhcmFjdGVycykKKyAgICAgICAg
YXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBzdHJsZW4oY2hhcmFjdGVycykpOworfQogCi0g
ICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX2lzOEJpdCk7Ci0gICAgICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBBU1NFUlQobV9idWZmZXIpOwot
ICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnM4KCk7CitpbmxpbmUgdm9pZCBTdHJp
bmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIGlmIChVX0lTX0JN
UChjKSkgeworICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGMpKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBhcHBlbmQoVTE2X0xFQUQoYykpOworICAgIGFwcGVuZChVMTZf
VFJBSUwoYykpOworfQogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoIW1faXM4Qml0KTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAg
ICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnMx
NigpOworaW5saW5lIFN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b1N0cmluZygpCit7CisgICAgaWYg
KG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAgICAgIHJl
aWZ5U3RyaW5nKCk7CiAgICAgfQotICAgIAotICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gbV9pczhCaXQ7IH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FsbEFTQ0lJKCkg
Y29uc3Q7Ci0KLSAgICBvcGVyYXRvciBTdHJpbmdWaWV3KCkgY29uc3Q7CisgICAgcmV0dXJuIG1f
c3RyaW5nOworfQogCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX2xlbmd0aCA9
IDA7Ci0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVs
bHB0cjsKLSAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzOCA9IG51bGxwdHI7Ci0gICAgICAgIG1f
aXM4Qml0ID0gdHJ1ZTsKLSAgICB9CitpbmxpbmUgY29uc3QgU3RyaW5nJiBTdHJpbmdCdWlsZGVy
Ojp0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdAoreworICAgIGlmIChtX3N0cmluZy5p
c051bGwoKSkKKyAgICAgICAgcmVpZnlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9
CiAKLSAgICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgc3RyaW5nQnVpbGRlci5tX2xlbmd0aCk7Ci0gICAg
ICAgIG1fc3RyaW5nLnN3YXAoc3RyaW5nQnVpbGRlci5tX3N0cmluZyk7Ci0gICAgICAgIG1fYnVm
ZmVyLnN3YXAoc3RyaW5nQnVpbGRlci5tX2J1ZmZlcik7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2lz
OEJpdCwgc3RyaW5nQnVpbGRlci5tX2lzOEJpdCk7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZl
ckNoYXJhY3RlcnM4LCBzdHJpbmdCdWlsZGVyLm1fYnVmZmVyQ2hhcmFjdGVyczgpOwotICAgICAg
ICBBU1NFUlQoIW1fYnVmZmVyIHx8IGhhc092ZXJmbG93ZWQoKSB8fCBtX2J1ZmZlci0+bGVuZ3Ro
KCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICB9CitpbmxpbmUgQXRv
bVN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b0F0b21TdHJpbmcoKSBjb25zdAoreworICAgIGlmIChp
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKIAotcHJpdmF0ZToKLSAgICB2
b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWdu
ZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgVUNoYXIq
IGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdm9pZCBh
bGxvY2F0ZUJ1ZmZlclVwQ29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVu
c2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVy
VHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVkIGFkZGl0aW9uYWxMZW5ndGgp
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hh
cmFjdGVyVHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2so
Q2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2Fz
ZSh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIExDaGFy
KiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc4KENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCk7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFVDaGFyKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcx
NihDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpOworICAgIC8vIElmIHRoZSBidWZmZXIgaXMg
c3VmZmljaWVudGx5IG92ZXItYWxsb2NhdGVkLCBtYWtlIGEgbmV3IEF0b21TdHJpbmcgZnJvbSBh
IGNvcHkgc28gaXRzIGJ1ZmZlciBpcyBub3Qgc28gbGFyZ2UuCisgICAgaWYgKGNhblNocmluaygp
KQorICAgICAgICByZXR1cm4gU3RyaW5nVmlldyB7ICp0aGlzIH0udG9BdG9tU3RyaW5nKCk7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJh
Y3RlclR5cGUqIGdldEJ1ZmZlckNoYXJhY3RlcnMoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCByZWlmeVN0cmluZygpIGNvbnN0OworICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBtX3N0cmluZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmlu
Z1R5cGVBZGFwdGVycz4gdm9pZCBhcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0ZXJz
Li4uKTsKKyAgICAvLyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNyYXNoIG9u
IG92ZXJmbG93IHdpdGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgIEFTU0VSVCht
X2J1ZmZlcik7CisgICAgcmV0dXJuIHsgbV9idWZmZXIuZ2V0KCksIDAsIGxlbmd0aCgpIH07Cit9
CiAKLSAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmluZzsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bV9idWZmZXI7Ci0gICAgdW5pb24gewotICAgICAgICBMQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJz
ODsKLSAgICAgICAgVUNoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczE2OwotICAgIH07Ci0gICAgc3Rh
dGljX2Fzc2VydChTdHJpbmc6Ok1heExlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptYXgoKSwgIiIpOwotICAgIENoZWNrZWQ8aW50MzJfdCwgQ29uZGl0aW9uYWxDcmFzaE9u
T3ZlcmZsb3c+IG1fbGVuZ3RoOwotICAgIGJvb2wgbV9pczhCaXQgeyB0cnVlIH07Ci0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBtdXRhYmxlIGJvb2wgbV9pc1JlaWZpZWQgeyBmYWxzZSB9OwotI2Vu
ZGlmCi19OworaW5saW5lIHVuc2lnbmVkIFN0cmluZ0J1aWxkZXI6Omxlbmd0aCgpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAgcmV0dXJuIG1fbGVu
Z3RoOworfQogCi1pbmxpbmUgU3RyaW5nQnVpbGRlcjo6b3BlcmF0b3IgU3RyaW5nVmlldygpIGNv
bnN0CitpbmxpbmUgdW5zaWduZWQgU3RyaW5nQnVpbGRlcjo6Y2FwYWNpdHkoKSBjb25zdAogewot
ICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAgcmV0dXJuIHsgY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
KCkgfTsKLSAgICByZXR1cm4geyBjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkgfTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1
ZmZlci0+bGVuZ3RoKCkgOiBtX2xlbmd0aDsKIH0KIAotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElO
RSBMQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4oKQoraW5s
aW5lIFVDaGFyIFN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKIHsK
LSAgICBBU1NFUlQobV9pczhCaXQpOwotICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnM4Owor
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWhhc092ZXJmbG93
ZWQoKSAmJiBpIDwgbV9sZW5ndGgpOworICAgIHJldHVybiBtX2lzOEJpdCA/IGNoYXJhY3RlcnM4
KClbaV0gOiBjaGFyYWN0ZXJzMTYoKVtpXTsKIH0KIAotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElO
RSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIGNvbnN0IENoYXJhY3RlclR5cGUq
IFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9pczhC
aXQpOwotICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMxNjsKKyAgICBBU1NFUlQoKG1faXM4
Qml0ID09IHN0ZDo6aXNfc2FtZV92PENoYXJhY3RlclR5cGUsIExDaGFyPikpOworICAgIGlmICgh
bV9sZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV9zdHJpbmcuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+
KCk7CisgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVBZGFwdGVycz4KLXZvaWQgU3RyaW5n
QnVpbGRlcjo6YXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLiBhZGFwdGVy
cykKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVBZGFwdGVycz4gdm9pZCBTdHJpbmdC
dWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0ZXJzLi4uIGFkYXB0ZXJz
KQogewotICAgIGF1dG8gcmVxdWlyZWRMZW5ndGggPSBjaGVja2VkU3VtPGludDMyX3Q+KG1fbGVu
Z3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7CisgICAgYXV0byByZXF1aXJlZExlbmd0aCA9IHNh
dHVyYXRlZFN1bTx1aW50MzJfdD4obV9sZW5ndGgsIGFkYXB0ZXJzLmxlbmd0aCgpLi4uKTsKICAg
ICBpZiAobV9pczhCaXQgJiYgYXJlOEJpdChhZGFwdGVycy4uLikpIHsKLSAgICAgICAgTENoYXIq
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nOChyZXF1aXJlZExlbmd0aCk7
Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVy
Zmxvd2VkKCkpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBw
ZW5kaW5nTENoYXIocmVxdWlyZWRMZW5ndGgpOworICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIHN0cmluZ1R5cGVBZGFwdGVy
QWNjdW11bGF0b3IoZGVzdGluYXRpb24sIGFkYXB0ZXJzLi4uKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihyZXF1
aXJlZExlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFT
U0VSVChoYXNPdmVyZmxvd2VkKCkpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uID0gZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydChyZXF1aXJlZExlbmd0aCk7CisgICAgICAg
IGlmICghZGVzdGluYXRpb24pCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAg
ICAgc3RyaW5nVHlwZUFkYXB0ZXJBY2N1bXVsYXRvcihkZXN0aW5hdGlvbiwgYWRhcHRlcnMuLi4p
OwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+Ci12b2lkIFN0
cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdUeXBlcy4uLiBzdHJpbmdzKQordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gU3RyaW5nVHlwZXM+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKFN0cmluZ1R5
cGVzLi4uIHN0cmluZ3MpCiB7CiAgICAgYXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGVzPihzdHJpbmdzKS4uLik7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gU3RyaW5nVmlldyBhbmQgbWFrZSBpdCB0YWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEg
U3RyaW5nQnVpbGRlcj8KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIHMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiBzLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBidWZmZXIs
IHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAocy5sZW5ndGgoKSAhPSBsZW5ndGgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQzMyw3ICszODgsNyBAQCBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0J1aWxkZXImIHMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGJ1ZmZlciwgdW5zaWduZWQgbGVu
Z3RoKQogdGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0
cmluZ0J1aWxkZXI+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gdm9pZDsKICAgICB1c2luZyBB
ZGRpdGlvbmFsQXJndW1lbnRUeXBlID0gU3RyaW5nQnVpbGRlcjsKLSAgICBzdGF0aWMgdm9pZCBm
bHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBz
dHJpbmdCdWlsZGVyKSB7IHN0cmluZ0J1aWxkZXItPmFwcGVuZENoYXJhY3RlcnMoY2hhcmFjdGVy
cywgbGVuZ3RoKTsgfQorICAgIHN0YXRpYyB2b2lkIGZsdXNoKGNvbnN0IExDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpIHsgYnVpbGRlci0+
YXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpT
T04uY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKaW5kZXgg
YzMxMThiNjM5MWJmZWYyYjhjZWY4N2Q2NmFmM2JkNmI5YjcxYjkwYi4uZWYxZjk0OTIxYTAzNTVj
NWRlYWQ1NDQwYzk4ZjJjMTlhMTcxODUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdC
dWlsZGVySlNPTi5jcHAKQEAgLTEwNSw2ICsxMDUsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKGhh
c092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhh
dmUgZW5vdWdoIGJ1ZmZlciBzcGFjZSB0byBhcHBlbmQgdGhpcyBzdHJpbmcgd2l0aG91dCBoYXZp
bmcKICAgICAvLyB0byB3b3JyeSBhYm91dCByZWFsbG9jYXRpbmcgaW4gdGhlIG1pZGRsZS4KICAg
ICAvLyBUaGUgMiBpcyBmb3IgdGhlICciJyBxdW90ZXMgb24gZWFjaCBlbmQuCkBAIC0xMTMsMTkg
KzExNCwyMSBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7CiAgICAgbWF4aW11bUNhcGFjaXR5
UmVxdWlyZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7CiAgICAgdW5zaWduZWQgYWxsb2NhdGlv
blNpemU7Ci0gICAgaWYgKENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cgPT0gbWF4aW11bUNhcGFj
aXR5UmVxdWlyZWQuc2FmZUdldChhbGxvY2F0aW9uU2l6ZSkpCi0gICAgICAgIHJldHVybiBkaWRP
dmVyZmxvdygpOworICAgIGlmIChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09IG1heGltdW1D
YXBhY2l0eVJlcXVpcmVkLnNhZmVHZXQoYWxsb2NhdGlvblNpemUpKSB7CisgICAgICAgIGRpZE92
ZXJmbG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgLy8gVGhpcyBtYXgoKSBpcyBo
ZXJlIHRvIGFsbG93IHVzIHRvIGFsbG9jYXRlIHNpemVzIGJldHdlZW4gdGhlIHJhbmdlIFsyXjMx
LCAyXjMyIC0gMl0gYmVjYXVzZSByb3VuZFVwVG9Qb3dlck9mVHdvKDE8PDMxICsgc29tZSBpbnQg
c21hbGxlciB0aGFuIDE8PDMxKSA9PSAwLgotICAgIC8vIEZJWE1FOiByb3VuZFVwVG9Qb3dlck9m
VHdvIHNob3VsZCB0YWtlIENoZWNrZWQ8dW5zaWduZWQ+IGFuZCBhYm9ydCBpZiBpdCBmYWlscyB0
byByb3VuZCB1cC4KKyAgICAvLyBGSVhNRTogSW5zdGVhZCwgcm91bmRVcFRvUG93ZXJPZlR3byBz
aG91bGQgYmUgZml4ZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsIGluIHRob3NlIGNhc2Vz
LCBwZXJoYXBzIHVzaW5nIGNoZWNrZWQgb3Igc2F0dXJhdGVkIGFyaXRobWV0aWMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjA4NgogICAgIGFsbG9j
YXRpb25TaXplID0gc3RkOjptYXgoYWxsb2NhdGlvblNpemUsIHJvdW5kVXBUb1Bvd2VyT2ZUd28o
YWxsb2NhdGlvblNpemUpKTsKLQotICAgIC8vIEFsbG9jYXRpbmcgdGhpcyBtdWNoIHdpbGwgZGVm
aW5pdGVseSBmYWlsLgotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA+IFN0cmluZzo6TWF4TGVuZ3Ro
KQotICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKKyAgICBpZiAoYWxsb2NhdGlvblNpemUg
PiBTdHJpbmc6Ok1heExlbmd0aCkgeworICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0KCkpCi0g
ICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXI8VUNoYXI+KGJ1ZmZlckNoYXJhY3Rl
cnM8TENoYXI+KCksIGFsbG9jYXRpb25TaXplKTsKICAgICBlbHNlCiAgICAgICAgIHJlc2VydmVD
YXBhY2l0eShhbGxvY2F0aW9uU2l6ZSk7CiAgICAgaWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQo
KSkpCkBAIC0xMzMsMjQgKzEzNiwyMiBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3Rl
ZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBhbGxvY2F0aW9uU2l6ZSk7CiAKICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAg
ICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7Ci0gICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1
ZmZlckNoYXJhY3RlcnM4ICsgbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpOworICAgICAg
ICBhdXRvIG91dHB1dCA9IGJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkgKyBtX2xlbmd0aDsKICAg
ICAgICAgKm91dHB1dCsrID0gJyInOwogICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50
ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAg
ICAgICAgKm91dHB1dCsrID0gJyInOwotICAgICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIG1fYnVm
ZmVyQ2hhcmFjdGVyczg7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gYnVmZmVyQ2hhcmFj
dGVyczxMQ2hhcj4oKTsKICAgICB9IGVsc2UgewotICAgICAgICBVQ2hhciogb3V0cHV0ID0gbV9i
dWZmZXJDaGFyYWN0ZXJzMTYgKyBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAg
ICAgIGF1dG8gb3V0cHV0ID0gYnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKSArIG1fbGVuZ3RoOwog
ICAgICAgICAqb3V0cHV0KysgPSAnIic7CiAgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAg
ICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAg
ICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9idWZmZXJDaGFyYWN0ZXJzMTY7CisgICAgICAgIG1f
bGVuZ3RoID0gb3V0cHV0IC0gYnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKTsKICAgICB9Ci0gICAg
QVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkg
Pj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbSBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVhbUNvY29hLm1tCmluZGV4IGM3NGJmOWNjZmUz
NGE3M2ViZGU0NTMyZWNjMzk0ZGIyNjUyOWE3MDcuLmU4NmI5ZDNmNDE2YWQyNDk3MzQ2NDVkZmVm
ZWUwZWM5MjJiYTRmMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4
dFN0cmVhbUNvY29hLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVh
bUNvY29hLm1tCkBAIC0yMSw2ICsyMSw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAorI2ltcG9ydCA8d3RmL3RleHQvY2YvU3RyaW5nQ29u
Y2F0ZW5hdGVDRi5oPgorCiBuYW1lc3BhY2UgV1RGIHsKIAogVGV4dFN0cmVhbSYgVGV4dFN0cmVh
bTo6b3BlcmF0b3I8PChpZDxOU09iamVjdD4gb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAppbmRleCA3M2M4MDFi
OTM4YzdhOGQ4ZjRkNGQ3NTUzZWFlNmY3NTEzYTE4MTVlLi4yYWJiNTEyMTJhYzA1ZWMxZDA5OTU2
ZjQ0ZjU4ZjI0MjEwMmY0ZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKQEAgLTMwOCwxMiArMzA5
LDExIEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNCYWNr
Z3JvdW5kQ1NTKCkgY29uc3QKIENvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpj
YXB0aW9uc1RleHRDb2xvcihib29sJiBpbXBvcnRhbnQpIGNvbnN0CiB7CiAgICAgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBj
b2xvciA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3Ioa01B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKTsKLSAgICBDb2xvciB0ZXh0
Q29sb3IoY29sb3IuZ2V0KCkpOwotICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKKyAgICBD
b2xvciB0ZXh0Q29sb3IoYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRD
b2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpLmdldCgpKTsK
KyAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gVGhpcyBkZWZhdWx0
IHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4gbWVkaWFDb250
cm9scy5jc3MgZm9yIC13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIuCiAgICAgICAg
IHRleHRDb2xvciA9IENvbG9yOjp3aGl0ZTsKLSAgICAKKyAgICB9CiAgICAgaW1wb3J0YW50ID0g
YmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwogICAgIENH
RmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eShr
TUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBv
cnRhbnQpCkBAIC0zMjUsMjEgKzMyNSwxNCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKIHsKICAgICBib29sIGltcG9y
dGFudDsKICAgICBDb2xvciB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihpbXBvcnRhbnQp
OwotCiAgICAgaWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLQogICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5Q29sb3Is
IHRleHRDb2xvciwgaW1wb3J0YW50KTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kQ1NTKFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGJvb2wgaW1wb3J0YW50KQogewotICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0
cmluZyhpZCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Ci0gICAgYnVpbGRlci5hcHBlbmQo
dmFsdWUpOwotICAgIGlmIChpbXBvcnRhbnQpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOworICAgIGJ1aWxkZXIu
YXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhpZCksICc6JywgdmFsdWUsIGltcG9ydGFudCA/
ICIgIWltcG9ydGFudDsiIDogIjsiKTsKIH0KICAgICAKIFN0cmluZyBDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRjo6d2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0CkBAIC0z
NzksNyArMzcyLDYgQEAgYm9vbCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlv
blN0cm9rZVdpZHRoRm9yRm9udChmbG9hdCBmb250U2l6ZSwgY28KICAgICAvLyBTaW5jZSBvbmx5
IGhhbGYgb2YgdGhlIHN0cm9rZSBpcyB2aXNpYmxlIGJlY2F1c2UgdGhlIHN0cm9rZSBpcyBkcmF3
biBiZWZvcmUgdGhlIGZpbGwsIHdlIGRvdWJsZSB0aGUgc3Ryb2tlIHdpZHRoIGhlcmUuCiAgICAg
c3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aFB0ICogMjsKICAgICBpbXBvcnRhbnQgPSBiZWhhdmlv
ciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTQxOCwyNCArNDEwLDE3IEBAIFN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNvbnN0CiB7CiAgICAg
TUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOwogICAgIAotICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250ID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNl
Q29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2Vy
LCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVsdCkpOworICAg
IGF1dG8gZm9udCA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb250RGVzY3JpcHRv
ckZvclN0eWxlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yLCBrTUFD
YXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZURlZmF1bHQpKTsKICAgICBpZiAoIWZvbnQpCiAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGVHlwZVJlZj4gbmFt
ZSA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NU
Rm9udE5hbWVBdHRyaWJ1dGUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdENGKENURm9udERlc2Ny
aXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7CiAg
ICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKLSAgICAKLSAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5h
bWVTdHJpbmcoQ1NTUHJvcGVydHlGb250RmFtaWx5KSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCI6IFwiIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+
KG5hbWUuZ2V0KCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotCi0gICAgYXV0byBjYXNj
YWRlTGlzdCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250RGVzY3JpcHRv
ckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlKSkp
OwotCi0gICAgaWYgKGNhc2NhZGVMaXN0KSB7CisgICAgYnVpbGRlci5hcHBlbmQoImZvbnQtZmFt
aWx5OiBcIiIsIHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihuYW1lLmdldCgpKSwgJyInKTsKKyAg
ICBpZiAoYXV0byBjYXNjYWRlTGlzdCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4o
Q1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udENhc2NhZGVM
aXN0QXR0cmlidXRlKSkpKSB7CiAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENGQXJy
YXlHZXRDb3VudChjYXNjYWRlTGlzdC5nZXQoKSk7IGkrKykgewogICAgICAgICAgICAgYXV0byBm
b250Q2FzY2FkZSA9IHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0b3JSZWY+KENGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgoY2FzY2FkZUxpc3QuZ2V0KCksIGkpKTsKICAgICAgICAgICAgIGlmICghZm9u
dENhc2NhZGUpCkBAIC00NDMsMTYgKzQyOCwxMCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKSBjb25zdAogICAgICAgICAgICAg
YXV0byBmb250Q2FzY2FkZU5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDb3B5QXR0cmli
dXRlKGZvbnRDYXNjYWRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOwogICAgICAgICAgICAgaWYg
KCFmb250Q2FzY2FkZU5hbWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiLCBcIiIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQoKSkpOwotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwi
Iiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQoKSksICciJyk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGJlaGF2aW9yID09IGtNQUNhcHRpb25B
cHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7Ci0gICAgCisgICAgYnVp
bGRlci5hcHBlbmQoYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZh
bHVlID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7CiB9CiAKQEAgLTU2MSw0MyArNTQwLDE4IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKSBjb25zdAogI2lmIEhBVkUo
TUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAgICAgaWYgKCFNZWRpYUFjY2Vzc2liaWxp
dHlMaWJyYXJ5KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0
aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpOwotICAgIAorCiAgICAgU3RyaW5nIGNhcHRpb25zQ29s
b3IgPSBjYXB0aW9uc1RleHRDb2xvckNTUygpOwogICAgIFN0cmluZyBlZGdlU3R5bGUgPSBjYXB0
aW9uc1RleHRFZGdlQ1NTKCk7CiAgICAgU3RyaW5nIGZvbnROYW1lID0gY2FwdGlvbnNEZWZhdWx0
Rm9udENTUygpOwogICAgIFN0cmluZyBiYWNrZ3JvdW5kID0gY2FwdGlvbnNCYWNrZ3JvdW5kQ1NT
KCk7Ci0gICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAhY2FwdGlvbnNDb2xvci5pc0Vt
cHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnROYW1lLmlzRW1wdHkoKSkgewot
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmRMaXRlcmFsKCIgOjoiKTsK
LSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZTo6
Y3VlU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0
LmFwcGVuZCgneycpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChiYWNrZ3Jv
dW5kKTsKLSAgICAgICAgaWYgKCFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChjYXB0aW9uc0NvbG9yKTsKLSAgICAg
ICAgaWYgKCFlZGdlU3R5bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlk
ZVN0eWxlU2hlZXQuYXBwZW5kKGVkZ2VTdHlsZSk7Ci0gICAgICAgIGlmICghZm9udE5hbWUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGZv
bnROYW1lKTsKLSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFw
cGVuZCgnfScpOwotICAgIH0KLSAgICAKKyAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8
ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9u
dE5hbWUuaXNFbXB0eSgpKQorICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBl
bmQoIiA6OiIsIFRleHRUcmFja0N1ZTo6Y3VlU2hhZG93UHNldWRvSWQoKSwgJ3snLCBiYWNrZ3Jv
dW5kLCBjYXB0aW9uc0NvbG9yLCBlZGdlU3R5bGUsIGZvbnROYW1lLCAnfScpOworCiAgICAgU3Ry
aW5nIHdpbmRvd0NvbG9yID0gY2FwdGlvbnNXaW5kb3dDU1MoKTsKICAgICBTdHJpbmcgd2luZG93
Q29ybmVyUmFkaXVzID0gd2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpOwotICAgIGlmICgh
d2luZG93Q29sb3IuaXNFbXB0eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZExpdGVyYWwoIiA6OiIp
OwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoVGV4dFRyYWNrQ3Vl
OjpjdWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCkpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRl
U3R5bGVTaGVldC5hcHBlbmQoJ3snKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghd2luZG93Q29s
b3IuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBw
ZW5kKHdpbmRvd0NvbG9yKTsKLSAgICAgICAgaWYgKCF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2lu
ZG93Q29ybmVyUmFkaXVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FwdGlvbnNP
dmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQorICAgIGlmICghd2luZG93Q29s
b3IuaXNFbXB0eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKQorICAgICAgICBj
YXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoIiA6OiIsIFRleHRUcmFja0N1ZTo6Y3Vl
QmFja2Ryb3BTaGFkb3dQc2V1ZG9JZCgpLCAneycsIHdpbmRvd0NvbG9yLCB3aW5kb3dDb3JuZXJS
YWRpdXMsICd9Jyk7CiAjZW5kaWYgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09S
SykKIAogICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0
aW9uc1N0eWxlU2hlZXRPdmVycmlkZVNldHRpbmcgc3R5bGUgdG86XG4lcyIsIGNhcHRpb25zT3Zl
cnJpZGVTdHlsZVNoZWV0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MYXlvdXRVbml0LmgKaW5kZXggMTU2YTAxYmQyZGZkZGE0NzJiMDgxZDRhZWY0MWRhMzgy
ODZmNjAzMC4uMWU1NzEyODIwMWRiZjA1NzRmYTIwOTA2YmJlOTEwNzVlNzJiYWVhOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaApAQCAtMTUwLDggKzE1MCw4IEBAIHB1YmxpYzoK
ICAgICBpbnQgcm91bmQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fdmFsdWUgPiAwKQot
ICAgICAgICAgICAgcmV0dXJuIHNhdHVyYXRlZEFkZGl0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBv
aW50RGVub21pbmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgICAgIHJl
dHVybiBzYXR1cmF0ZWRTdWJ0cmFjdGlvbihyYXdWYWx1ZSgpLCAoa0ZpeGVkUG9pbnREZW5vbWlu
YXRvciAvIDIpIC0gMSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICAgICAgcmV0
dXJuIHNhdHVyYXRlZFN1bTxpbnQ+KHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3Ig
LyAyKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiBzYXR1cmF0ZWRE
aWZmZXJlbmNlPGludD4ocmF3VmFsdWUoKSwgKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAt
IDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKICAgICB9CiAKICAgICBpbnQgZmxvb3IoKSBj
b25zdApAQCAtNTg4LDcgKzU4OCw3IEBAIGlubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNp
Z25lZCBsb25nIGxvbmcgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIGlubGluZSBMYXlvdXRVbml0
IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewog
ICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1
cmF0ZWRBZGRpdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdW08aW50PihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUo
KSkpOwogICAgIHJldHVybiByZXR1cm5WYWw7CiB9CiAKQEAgLTYyNSw3ICs2MjUsNyBAQCBpbmxp
bmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikK
IGlubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBM
YXlvdXRVbml0JiBiKQogewogICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFs
dWUoKSkpOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWREaWZmZXJlbmNlPGlu
dD4oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwog
fQogCkBAIC02OTEsNyArNjkxLDcgQEAgaW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IlKGludCBh
LCBjb25zdCBMYXlvdXRVbml0JiBiKQogCiBpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShM
YXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIGEuc2V0UmF3VmFsdWUo
c2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAgICBhLnNl
dFJhd1ZhbHVlKHNhdHVyYXRlZFN1bTxpbnQ+KGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7
CiAgICAgcmV0dXJuIGE7CiB9CiAKQEAgLTcyMSw3ICs3MjEsNyBAQCBpbmxpbmUgTGF5b3V0VW5p
dCYgb3BlcmF0b3ItPShMYXlvdXRVbml0JiBhLCBpbnQgYikKIAogaW5saW5lIExheW91dFVuaXQm
IG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBh
LnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1
ZSgpKSk7CisgICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWREaWZmZXJlbmNlPGludD4oYS5yYXdW
YWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICAgICByZXR1cm4gYTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Np
b25Db2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KaW5kZXggNjBlNjcwZjIwNjZkNjA1OGIyZTVlYjc5ZWI3
ZGMzMGM1Y2I0YjI4ZS4uMTFjOWEyMzgzY2Q2YzhjMzAxYTFhMDhkY2RlYWZhZTc5ZDI2MmI0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4K
ICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L2Nm
L1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KIAogQGludGVyZmFjZSBOU1VSTCAoKQogLSAoQ0ZVUkxS
ZWYpX2NmdXJsOwpAQCAtMzQ5LDMxICszNTAsMjMgQEAgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yU2Vzc2lvbihjb25zdCBVUkwmIGZpcnMK
IAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCi0gICAgUmV0YWluUHRyPE5TQXJy
YXk+IGNvb2tpZXMgPSBjb29raWVzRm9yVVJMKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJs
LCBmcmFtZUlELCBwYWdlSUQsIHNob3VsZEFza0lUUCwgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29v
a2llQmxvY2tpbmcpOwotICAgIGlmICghY29va2llcyB8fCAhW2Nvb2tpZXMgY291bnRdKQotICAg
ICAgICByZXR1cm4geyBTdHJpbmcoKSwgZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmcs
IG5vdCBhbiBlbXB0eSBvbmUgdGhhdCBTdHJpbmdCdWlsZGVyIHdvdWxkIGNyZWF0ZSBiZWxvdy4K
KyAgICBhdXRvIGNvb2tpZXMgPSBjb29raWVzRm9yVVJMKGZpcnN0UGFydHksIHNhbWVTaXRlSW5m
bywgdXJsLCBmcmFtZUlELCBwYWdlSUQsIHNob3VsZEFza0lUUCwgc2hvdWxkUmVsYXhUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmcpOworICAgIGlmICghW2Nvb2tpZXMgY291bnRdKQorICAgICAgICBy
ZXR1cm4geyBTdHJpbmcoKSwgZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmc7IFN0cmlu
Z0J1aWxkZXIgYmVsb3cgd291bGQgY3JlYXRlIGFuIGVtcHR5IG9uZS4KIAogICAgIFN0cmluZ0J1
aWxkZXIgY29va2llc0J1aWxkZXI7CiAgICAgYm9vbCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0g
ZmFsc2U7CiAgICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzLmdldCgpKSB7
CiAgICAgICAgIGlmICghW1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotCiAgICAgICAgIGlmICghaW5jbHVkZUhUVFBPbmx5ICYmIFtjb29raWUgaXNIVFRQT25s
eV0pCiAgICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICBpZiAoW2Nvb2tpZSBpc1NlY3Vy
ZV0pIHsKICAgICAgICAgICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVlOwogICAgICAg
ICAgICAgaWYgKGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVDb29raWVzOjpO
bykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmICgh
Y29va2llc0J1aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29va2llc0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiOyAiKTsKLQotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoW2Nvb2tp
ZSBuYW1lXSk7Ci0gICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZCgnPScpOwotICAgICAgICBj
b29raWVzQnVpbGRlci5hcHBlbmQoW2Nvb2tpZSB2YWx1ZV0pOworICAgICAgICBjb29raWVzQnVp
bGRlci5hcHBlbmQoY29va2llc0J1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiOyAiLCBbY29va2ll
IG5hbWVdLCAnPScsIFtjb29raWUgdmFsdWVdKTsKICAgICB9CiAgICAgcmV0dXJuIHsgY29va2ll
c0J1aWxkZXIudG9TdHJpbmcoKSwgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXggN2Y2MGQ5MDE5M2NjM2Iz
ZmM0OWY1OWNiMDkyZWY0YzIwYTdmMTE4Yy4uNDM2OTlmZWFkOWY2NWM1OTcyYmZkZDQyOWM3N2Fl
YTEwMTZhNjk5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
dW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNw
cApAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb3VudGVyUGxhbj4gcGxhbkNv
dW50ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpCiAgICAgfQogCiAg
ICAgaWYgKGRpcmVjdGl2ZXMucmVzZXRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIENvdW50ZXJQbGFu
IHsgdHJ1ZSwgc2F0dXJhdGVkQWRkaXRpb24oKmRpcmVjdGl2ZXMucmVzZXRWYWx1ZSwgZGlyZWN0
aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1ZU9yKDApKSB9OworICAgICAgICByZXR1cm4gQ291bnRl
clBsYW4geyB0cnVlLCBzYXR1cmF0ZWRTdW08aW50PigqZGlyZWN0aXZlcy5yZXNldFZhbHVlLCBk
aXJlY3RpdmVzLmluY3JlbWVudFZhbHVlLnZhbHVlT3IoMCkpIH07CiAgICAgaWYgKGRpcmVjdGl2
ZXMuaW5jcmVtZW50VmFsdWUpCiAgICAgICAgIHJldHVybiBDb3VudGVyUGxhbiB7IGZhbHNlLCAq
ZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZSB9OwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDk5ZTU3MWJmNjI3
MTUzNTM2NTg5MGI0NGRkMWFjMmFlMTIxNDNhNTkuLjk4YTY0NmRmZjczMjFhMDhkYmYxMGJiNmJj
MmY3OTYxZTFhNDdiZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVp
bGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3Rv
bS5oCkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlQ291bnRlcihCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdQogICAgICAg
ICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQogICAgICAgICAgICAgZGlyZWN0aXZlcy5y
ZXNldFZhbHVlID0gdmFsdWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpcmVjdGl2ZXMu
aW5jcmVtZW50VmFsdWUgPSBzYXR1cmF0ZWRBZGRpdGlvbihkaXJlY3RpdmVzLmluY3JlbWVudFZh
bHVlLnZhbHVlT3IoMCksIHZhbHVlKTsKKyAgICAgICAgICAgIGRpcmVjdGl2ZXMuaW5jcmVtZW50
VmFsdWUgPSBzYXR1cmF0ZWRTdW08aW50PihkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlLnZhbHVl
T3IoMCksIHZhbHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQppbmRleCBmMmQ5MmYxOTdkMTdjYTI5NzBkMDdkYzE0MGFiMDBhNjFjMTM1OGZjLi5jZmNk
OWYzYzAzYzljNmExYTNkMzRlZDFjYzk3NzdhODA3MjdlOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0
ZURhdGFTdG9yZUNvY29hLm1tCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW1wb3J0IDx3dGYvUHJvY2Vz
c1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL0Vu
dGl0bGVtZW50cy5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9y
dCA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24uaD4KQEAgLTExNSwxNSArMTE1
LDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVy
cyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICAgICAgICAgIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6OkFsbEJ1dENvb2tpZXM7CiAgICAgfQogCi0gICAgYXV0byogbWFudWFsUHJldmFsZW50
UmVzb3VyY2UgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OkAiSVRQTWFudWFsUHJldmFsZW50UmVz
b3VyY2UiXTsKLSAgICBpZiAobWFudWFsUHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAgVVJM
IHVybCB7IFVSTCgpLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9OwotICAgICAgICBpZiAoIXVy
bC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0cDovLyIpOwotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQobWFudWFsUHJldmFsZW50UmVzb3VyY2UpOwotICAgICAgICAgICAgdXJsID0g
eyBVUkwoKSwgYnVpbGRlci50b1N0cmluZygpIH07Ci0gICAgICAgIH0KKyAgICBpZiAoYXV0byBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6QCJJVFBNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSJdKSB7CisgICAgICAgIFVSTCB1cmwgeyB7IH0sIG1hbnVhbFBy
ZXZhbGVudFJlc291cmNlIH07CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIHVybCA9IHsgeyB9LCBtYWtlU3RyaW5nKCJodHRwOi8vIiwgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UpIH07CiAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlID0gV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTA1Zjk4ZTczMjkyMTMwYTg5Y2FkY2NjODA0ODFkYTg4
NTYyYTA3ZC4uMDYzNTVkY2I4ODEyYTIyMTFhZDU3ZTY3NWVlMjljZDVlYTdlMzExNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1
IEBACisyMDIxLTA1LTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRl
ciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwOgorICAgICAgICBBZGRlZCBpbmNsdWRlIG9mIFN0cmluZ0NvbmNh
dGVuYXRlQ0YuaC4KKyAgICAgICAgQWRkZWQgU3RyaW5nVHlwZUFkYXB0ZXIgZm9yIFdLU3RyaW5n
UmVmLgorICAgICAgICAoV1RSOjpzdHlsZURlY1RvU3RyKTogVXNlIEFTQ0lJTGl0ZXJhbCBpbnN0
ZWFkIG9mIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIChXVFI6OnN0cmluZyk6IFJlbW92ZWQgdW5u
ZWVkZWQgdG9XVEZTdHJpbmcgc2luY2UgdGhlIFdLU3RyaW5nUmVmCisgICAgICAgIFN0cmluZ1R5
cGVBZGFwdGVyIHRha2VzIGNhcmUgb2YgaXQuCisgICAgICAgIChXVFI6OnN0cmluZyk6IFJlbmFt
ZWQgZnJvbSBmcmFtZVRvU3RyLiBVc2UgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6ZHVtcFJl
c291cmNlVVJMKTogVXNlIGFwcGVuZCBpbnN0ZWFkIG9mIGFwcGVuZExpdGVyYWwuCisgICAgICAg
IChXVFI6OmR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdUUjo6ZHVtcExvYWRFdmVudCk6IFVzZSBtYWtlU3RyaW5nLgorICAgICAg
ICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gYSBsb25nZXIgbmFtZS4gUmV0dXJuIGEgU3Ry
aW5nCisgICAgICAgIGluc3RlYWQgb2YgYnVpbGRpbmcgaW4gYSBTdHJpbmdCdWlsZGVyLiBVc2Ug
bWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6
OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogUmVtb3ZlZAorICAg
ICAgICB1bm5lZWRlZCB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xs
UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6ZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFzV2Vi
QXJjaGl2ZSk6IFJlbW92ZWQgYW4KKyAgICAgICAgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGUuCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcCk6IFJlbW92ZWQgdW5uZWVkZWQg
dG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2
ZVRpdGxlRm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSk6CisgICAgICAgIFVwZGF0ZWQgZm9yIGZ1
bmN0b24gbmFtZSBjaGFuZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFNlbmRSZXF1ZXN0Rm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAgQWxzbyB1c2UgdmFyaWFkaWMg
YXBwZW5kLiBBbHNvIHVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoTG9hZEZvclJlc291cmNlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdFBy
b21wdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2Vl
ZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdl
OjpzaG91bGRJbnNlcnROb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6c2hvdWxkSW5zZXJ0VGV4dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5U3R5bGUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEhpc3RvcnkpOiBEaXR0
by4KKwogMjAyMS0wNS0xNSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgcmVwb3J0LW5vbi1pbmNsdXNpdmUtbGFuZ3VhZ2Ugc2hvdWxkIHNraXAgbm9kZV9t
b2R1bGVzIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGFiZDNhZmRlOTFm
MDhlODc5NGYxMGFiZDZkMTBkYzM4OGQ0NWIyODQuLjFkZWNmMzA3M2FhZjMxNDViMWQ5Yjk3MjVi
NWNkNWJlM2EyNzcyZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTUyLDEyICs1Miw0
NiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL3RleHQvY2YvU3Ry
aW5nQ29uY2F0ZW5hdGVDRi5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0YpICYmICFQTEFURk9STShX
SU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCiAjaW5jbHVkZSAiV2ViQXJjaGl2ZUR1bXBTdXBw
b3J0LmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+IHsKK3B1
YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihXS1N0cmluZ1JlZik7CisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcgPyBXS1N0cmluZ0dldExlbmd0aChtX3N0
cmluZykgOiAwOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9zdHJpbmc7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hh
cmFjdGVyVHlwZSopIGNvbnN0OworCitwcml2YXRlOgorICAgIFdLU3RyaW5nUmVmIG1fc3RyaW5n
OworfTsKKworaW5saW5lIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6U3RyaW5nVHlw
ZUFkYXB0ZXIoV0tTdHJpbmdSZWYgc3RyaW5nKQorICAgIDogbV9zdHJpbmcgeyBzdHJpbmcgfQor
eworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5n
UmVmPjo6d3JpdGVUbzxMQ2hhcj4oTENoYXIqKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTw+IGlu
bGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVUbzxVQ2hhcj4o
VUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAoreworICAgIGlmIChtX3N0cmluZykKKyAgICAgICAg
V0tTdHJpbmdHZXRDaGFyYWN0ZXJzKG1fc3RyaW5nLCByZWludGVycHJldF9jYXN0PFdLQ2hhcio+
KGRlc3RpbmF0aW9uKSwgV0tTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcpKTsKK30KKworfQorCiBu
YW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHkoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKQEAgLTg5LDcgKzEyMyw3IEBA
IHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5k
bGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwKICAgICByZXR1cm4gZHVtcFBhdGgoY29udGV4dCwgbm9k
ZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIHJhbmdlUmVmKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVSYW5nZUhhbmRs
ZVJlZiByYW5nZVJlZikKIHsKICAgICBpZiAoIXJhbmdlUmVmKQogICAgICAgICByZXR1cm4gIihu
dWxsKSI7CkBAIC0xMzAsNDMgKzE2NCwyNiBAQCBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cAogICAg
IHJldHVybiB0b1dLKCJpbGxlZ2FsIHZhbHVlIik7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyBz
dHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKK3N0YXRp
YyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJl
ZikKIHsKICAgICAvLyBEdW1wUmVuZGVyVHJlZSBjYWxscyAtW0RPTUNTU1N0eWxlRGVjbGFyYXRp
b24gZGVzY3JpcHRpb25dLCB3aGljaCBqdXN0IGR1bXBzIGNsYXNzIG5hbWUgYW5kIG9iamVjdCBh
ZGRyZXNzLgogICAgIC8vIE5vIGV4aXN0aW5nIHRlc3RzIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUg
cGF0aCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGJlY2F1c2UgV2ViQ29yZSBkb2Vzbid0
IGNhbGwKICAgICAvLyB0aGUgZWRpdGluZyBjbGllbnQgaWYgdGhlIHN0eWxpbmcgb3BlcmF0aW9u
IHNvdXJjZSBpcyBDb21tYW5kRnJvbURPTSBvciBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJm
YWNlLgotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Iik7Ci0gICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gIjxET01DU1NTdHls
ZURlY2xhcmF0aW9uIEFERFJFU1M+Il9zOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5n
KFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKCd7
JywgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdp
bikpKSwgIiwgIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qo
b3JpZ2luKSkpLCAiLCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pLCAnfScpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCd7JywgYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVBy
b3RvY29sKG9yaWdpbikpLmdldCgpLCAiLCAiLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5
SG9zdChvcmlnaW4pKS5nZXQoKSwgIiwgIiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2lu
KSwgJ30nKTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSkKK3N0YXRpYyBXVEY6OlN0cmluZyBzdHJpbmcoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKIHsKICAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShm
cmFtZSkpOwotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBpZiAoV0tCdW5k
bGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewotICAgICAgICBpZiAoIVdLU3RyaW5nSXNFbXB0
eShuYW1lLmdldCgpKSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJtYWluIGZyYW1lIFwiIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhuYW1lKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
bWFpbiBmcmFtZSIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5
KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
ImZyYW1lIFwiIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhuYW1lKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiZnJhbWUgKGFub255bW91cykiKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICBib29sIGlzTWFpbiA9IFdLQnVuZGxlRnJhbWVJc01haW5G
cmFtZShmcmFtZSk7CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIGlzTWFpbiA/ICJtYWluIGZyYW1lIl9zIDogImZyYW1lIChhbm9ueW1vdXMpIl9z
OworICAgIHJldHVybiBtYWtlU3RyaW5nKGlzTWFpbiA/ICJtYWluIGZyYW1lIFwiIiA6ICJmcmFt
ZSBcIiIsIG5hbWUuZ2V0KCksICciJyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xvY2Fs
RmlsZVNjaGVtZShXS1N0cmluZ1JlZiBzY2hlbWUpCkBAIC0yMTAsNyArMjI3LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGR1bXBSZXNvdXJjZVVSTCh1aW50NjRfdCBpZGVudGlmaWVyLCBTdHJpbmdC
dWlsZGVyJiBzdHJpbmdCdWkKICAgICBpZiAoYXNzaWduZWRVcmxzQ2FjaGUoKS5jb250YWlucyhp
ZGVudGlmaWVyKSkKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYXNzaWduZWRVcmxzQ2Fj
aGUoKS5nZXQoaWRlbnRpZmllcikpOwogICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI8dW5rbm93bj4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
Ijx1bmtub3duPiIpOwogfQogCiBJbmplY3RlZEJ1bmRsZVBhZ2U6OkluamVjdGVkQnVuZGxlUGFn
ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKQEAgLTM5Myw3NiArNDEwLDQzIEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgpCiAKIC8vIExvYWRlciBDbGllbnQgQ2FsbGJh
Y2tzCiAKLS8vIFN0cmluZyBvdXRwdXQgbXVzdCBiZSBpZGVudGljYWwgdG8gLVtXZWJGcmFtZSBf
ZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XS4KLXN0YXRpYyB2b2lkIGR1bXBG
cmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCi17Ci0gICAgYXV0byBuYW1lID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKLSAgICBpZiAoV0tCdW5kbGVGcmFt
ZUlzTWFpbkZyYW1lKGZyYW1lKSkgewotICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUu
Z2V0KCkpKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4g
ZnJhbWUiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSBcIiIpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCciJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoV0tTdHJpbmdJ
c0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiZnJhbWUgKGFub255bW91cykiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyIn
KTsKLX0KLQogc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBjb25zdCBjaGFyKiBldmVudE5hbWUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwotICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1l
LCBzdHJpbmdCdWlsZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtICIp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGV2ZW50TmFtZSk7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRl
eHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKHN0cmluZyhmcmFtZSksICIgLSAiLCBldmVudE5h
bWUsICdcbicpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXF1ZXN0RGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFN0cmluZ0J1
aWxkZXImIHN0cmluZ0J1aWxkZXIpCitzdGF0aWMgU3RyaW5nIHN0cmluZyhXS1VSTFJlcXVlc3RS
ZWYgcmVxdWVzdCkKIHsKICAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVS
TChyZXF1ZXN0KSk7CiAgICAgYXV0byBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RD
b3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOwogICAgIGF1dG8gaHR0cE1ldGhvZCA9
IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlcXVlc3QgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRl
c3RSZXN1bHQodXJsLmdldCgpKSwgIiwgbWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSwgIiwgaHR0cCBtZXRob2QgIik7Ci0gICAg
aWYgKFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSkKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnPicpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCI8TlNVUkxSZXF1ZXN0IFVSTCAi
LCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksCisgICAgICAgICIsIG1haW4g
ZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQo
KSksCisgICAgICAgICIsIGh0dHAgbWV0aG9kICIsIFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9k
LmdldCgpKSA/ICIobm9uZSkiIDogIiIsIGh0dHBNZXRob2QuZ2V0KCksICc+Jyk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWls
ZGVyLCBib29sIHNob3VsZER1bXBSZXNwb25zZUhlYWRlcnMgPSBmYWxzZSkKK3N0YXRpYyBTdHJp
bmcgc3RyaW5nKFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGJvb2wgc2hvdWxkRHVtcFJlc3Bv
bnNlSGVhZGVycyA9IGZhbHNlKQogewogICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3Bv
bnNlQ29weVVSTChyZXNwb25zZSkpOwotICAgIGlmICghdXJsKSB7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51bGwpIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
IXVybCkKKyAgICAgICAgcmV0dXJuICIobnVsbCkiX3M7CisgICAgaWYgKCFzaG91bGREdW1wUmVz
cG9uc2VIZWFkZXJzKSB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCI8TlNVUkxSZXNwb25z
ZSAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksCisgICAgICAgICAgICAi
LCBodHRwIHN0YXR1cyBjb2RlICIsIFdLVVJMUmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25z
ZSksICc+Jyk7CiAgICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNVUkxSZXNwb25z
ZSAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksICIsIGh0dHAgc3RhdHVz
IGNvZGUgIiwgV0tVUkxSZXNwb25zZUhUVFBTdGF0dXNDb2RlKHJlc3BvbnNlKSk7Ci0gICAgaWYg
KHNob3VsZER1bXBSZXNwb25zZUhlYWRlcnMpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIsICIsIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNwb25zZSks
ICIgaGVhZGVycyIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIjxOU1VSTFJlc3BvbnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQo
dXJsLmdldCgpKSwKKyAgICAgICAgIiwgaHR0cCBzdGF0dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNl
SFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpLAorICAgICAgICAiLCAiLCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnJlc3BvbnNlSGVhZGVyQ291bnQocmVzcG9uc2UpLCAiIGhlYWRlcnM+Iik7CiB9CiAKICNp
ZiAhUExBVEZPUk0oQ09DT0EpCi0vLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG5vbiBjb2Nv
YSBwb3J0cy4KLS8vICAgICAgICBbR1RLXVtXUEVdIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODQyOTUKKworLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBub24t
Q29jb2EgcG9ydHMuIFtHVEtdW1dQRV0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NDI5NQogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhlYWRl
ckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7CiAgICAgcmV0dXJuIDA7CiB9CisK
ICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlcikKQEAgLTQ4MCw3ICs0NjQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgUwogCiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJvckRvbWFpbiwgIiwg
Y29kZSAiLCBlcnJvckNvZGUpOwogICAgIGlmIChhdXRvIHVybCA9IGFkb3B0V0soV0tFcnJvckNv
cHlGYWlsaW5nVVJMKGVycm9yKSkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZh
aWxpbmcgVVJMIFwiIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdl
dCgpKSkpLCAnIicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVS
TCBcIiIsIGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdldCgpLCAnIicpOwog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKQEAgLTcwMCw3ICs2ODQsNyBAQCBz
dGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYg
ZmFicyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHNob3VsZElu
Y2x1ZGVGcmFtZU5hbWUpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAnIiwg
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKSksICInICIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiZnJhbWUgJyIsIGFkb3B0V0soV0tCdW5k
bGVGcmFtZUNvcHlOYW1lKGZyYW1lKSkuZ2V0KCksICInICIpOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJzY3JvbGxlZCB0byAiLCB4LCAnLCcsIHksICdcbicpOwogfQogCkBAIC03NTgsOSAr
NzQyLDcgQEAgc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmkKICAgICAgICAgaWYgKCFoYXNEb2N1bWVu
dEVsZW1lbnQoc3ViZnJhbWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdWJmcmFtZU5hbWUpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCInXG4tLS0tLS0tLVxuIik7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIsIHN1YmZyYW1lTmFt
ZS5nZXQoKSwgIidcbi0tLS0tLS0tXG4iKTsKIAogICAgICAgICBkdW1wRnJhbWVUZXh0KHN1YmZy
YW1lLCBzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KHN1
YmZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKQEAgLTc4MCw4ICs3NjIsNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBT
dHJpbmdCdWlsZAogI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShE
SVJFQ1QyRCkKICAgICBhdXRvIHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJB
cmNoaXZlKGZyYW1lKSk7CiAgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgw
LCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQo
KSkpKTsKLSAgICBhdXRvIGNmU3RyaW5nID0gV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxT
dHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChjZlN0cmluZy5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV2ViQ29y
ZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdl
dCgpKS5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtODA3LDkgKzc4OCw5IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBzd2l0Y2ggKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+d2hhdFRvRHVtcCgpKSB7CiAgICAgY2FzZSBXaGF0VG9EdW1wOjpSZW5kZXJUcmVlOiB7
CiAgICAgICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmcoKSkK
LSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tC
dW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmco
bV9wYWdlKSkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0
V0soV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJp
bnRpbmcobV9wYWdlKSkuZ2V0KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+cmVuZGVyVHJlZUR1bXBPcHRpb25zKCkpKS5nZXQoKSkpOworICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVy
bmFsUmVwcmVzZW50YXRpb24obV9wYWdlLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnJl
bmRlclRyZWVEdW1wT3B0aW9ucygpKSkuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBXaGF0VG9EdW1wOjpNYWluRnJhbWVUZXh0OgpAQCAtODkwLDE5ICs4NzEsMTAgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLU3RyaW5n
UmVmIHRpdGxlLCBXS0J1bmRsZUZyYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNj
cmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVRpdGxlOiAiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgfQotCi0gICAgaWYgKGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKSB7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVElUTEUgQ0hBTkdFRDogJyIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIidcbiIpOwotICAgIH0KLQorICAgIGlmIChpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RyaW5nKGZyYW1lKSwgIiAtIGRpZFJlY2VpdmVU
aXRsZTogIiwgdGl0bGUsICdcbicpOworICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIlRJVExFIENIQU5HRUQ6ICciLCB0aXRsZSwgIidcbiIpOwogICAgIGluamVjdGVkQnVuZGxl
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIApAQCAtOTUxLDEwICs5
MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBkdW1wRnJhbWVE
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VS
TDogIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpLCAnXG4nKTsKLSAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKHN0cmluZyhmcmFtZSksICIgLSB3aWxsUGVy
Zm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6ICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJs
KSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbkZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURvY3VtZW50
TmF2aWdhdGlvblR5cGUgdHlwZSkKQEAgLTk4Miw3ICs5NTEsNyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKICAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZEZpbmlzaERvY3VtZW50TG9h
ZEZvckZyYW1lIik7CiAKICAgICBpZiAodW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRz
ID0gV0tCdW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChmcmFtZSkpCi0gICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZyhmcmFtZVRvU3RyKGZyYW1lKSwgIiAt
IGhhcyAiLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQgaGFuZGxlcihzKVxu
IikpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5n
KGZyYW1lKSwgIiAtIGhhcyAiLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQg
aGFuZGxlcihzKVxuIikpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSGFuZGxl
T25sb2FkRXZlbnRzRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKQEAgLTEwNDksMTEg
KzEwMTgsOCBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJl
cXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICAmJiBpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewog
ICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIGR1bXBSZXNvdXJj
ZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgLSB3aWxsU2VuZFJlcXVlc3QgIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0
RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlZGlyZWN0UmVzcG9uc2Ug
Iik7Ci0gICAgICAgIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KHJlc3BvbnNlLCBzdHJpbmdCdWlsZGVyLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBBbGxIVFRQUmVkaXJlY3RlZFJlc3BvbnNlSGVhZGVycygpKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
LSB3aWxsU2VuZFJlcXVlc3QgIiwgc3RyaW5nKHJlcXVlc3QpLAorICAgICAgICAgICAgIiByZWRp
cmVjdFJlc3BvbnNlICIsIHN0cmluZyhyZXNwb25zZSwgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wQWxsSFRUUFJlZGlyZWN0ZWRSZXNwb25zZUhlYWRlcnMoKSksICdcbicp
OwogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CiAgICAgfQogCkBAIC0xMDg2LDExICsxMDUyLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIElu
amVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBPckhUVFBTU2No
ZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1haW5GcmFtZUhvc3Qu
Z2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNFeHRlcm5hbCAmJiAh
aXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJC
bG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChtYWtlU3RyaW5nKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIiwg
dXJsU3RyaW5nLmdldCgpLCAnXG4nKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogICAgIH0KQEAgLTExMTcsOSArMTA3OSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tCCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKICAgICAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVSZXNwb25z
ZSAiKTsKLSAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZFJlY2VpdmVSZXNw
b25zZSAiLCBzdHJpbmcocmVzcG9uc2UpLCAnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIApAQCAtMTEzMiwx
NCArMTA5MiwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNl
Rm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQgogICAgIGF1dG8gbWltZVR5cGVT
dHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBoYXMgTUlNRSB0eXBlICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG1pbWVUeXBlU3RyaW5nKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXJsU3RyaW5n
LmdldCgpLCAiIGhhcyBNSU1FIHR5cGUgIiwgbWltZVR5cGVTdHJpbmcuZ2V0KCkpOwogCiAgICAg
U3RyaW5nIHBsYXRmb3JtTWltZVR5cGUgPSBwbGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUocmVzcG9u
c2UpOwogICAgIGlmICghcGxhdGZvcm1NaW1lVHlwZS5pc0VtcHR5KCkgJiYgcGxhdGZvcm1NaW1l
VHlwZSAhPSB0b1dURlN0cmluZyhtaW1lVHlwZVN0cmluZykpIHsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGxhdGZvcm1NaW1lVHlwZSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiLCBwbGF0Zm9ybU1p
bWVUeXBlKTsKICAgICB9CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTEx
NjIsNyArMTExOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9y
UmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lCiAKICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmlu
Z0J1aWxkZXIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmluaXNo
TG9hZGluZ1xuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZEZpbmlzaExvYWRp
bmdcbiIpOwogICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKIH0KIApAQCAtMTE3Nyw3ICsxMTM0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZEZhaWxMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1l
UmUKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VV
UkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKIAogICAgIGR1bXBFcnJv
ckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGVycm9yLCBzdHJpbmdCdWlsZGVyKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTExOTksNyArMTE1Niw2IEBAIGJv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDYWNoZVJlc3BvbnNlKFdLQnVuZGxlUGFnZVJl
ZiwgV0tCdW5kbGVGcmFtZVJlZiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiAvLyBQb2xpY3kg
Q2xpZW50IENhbGxiYWNrcwogCiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYg
bmF2aWdhdGlvbkFjdGlvbiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdLVHlwZVJlZiogdXNl
ckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xMjI5LDEzICsxMTg1LDkgQEAgV0tC
dW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFj
dGlvblVzZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBQb2xpY3lDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvblxuIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01h
aW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVz
IiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIiAtIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb25cbiIsIHN0cmluZyhyZXF1ZXN0KSwKKyAgICAgICAgICAgICIg
aXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVz
IiA6ICJubyIsCisgICAgICAgICAgICAiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIs
IFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdh
dGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIsICdcbicpKTsKICAgICB9CiAKICAgICBpZiAoIWlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKQEAg
LTEyNDUsMTkgKzExOTcsMTYgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBhdXRvIHVy
bFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwogCiAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwogICAgIGlmIChp
c0xvY2FsRmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVy
bC5nZXQoKSkpKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0soV0tVUkxD
b3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdldCgpKSkuZ2V0KCkpOwogICAgIGVsc2UKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJp
bmcodXJsLmdldCgpKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRo
IG5hdmlnYXRpb24gdHlwZSBcJyIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2
aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcJyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdL
VVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKS5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIsIE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikp
LmdldCgpLCAnXCcnKTsKICAgICBhdXRvIGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9wdFdLKFdLQnVu
ZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25BY3Rpb24pKTsK
ICAgICBpZiAoaGl0VGVzdFJlc3VsdFJlZikgewogICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYg
PSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1
bHRSZWYuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3Jp
Z2luYXRpbmcgZnJvbSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgo
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2RlSGFuZGxlUmVmLmdldCgpKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgb3JpZ2luYXRpbmcgZnJvbSAiLCBkdW1wUGF0aChtX3BhZ2Us
IG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAgICB9CiAKICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTEyNzcsNyArMTIyNiw3IEBAIFdLQnVuZGxlUGFn
ZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNl
KFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKSAmJiBp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgJiYg
V0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRl
OiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3Bv
bnNlKSkpLCAiXCdcbiIpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRh
Y2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29w
eVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSkuZ2V0KCksICInXG4iKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTM2Nyw3
ICsxMzE2LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25z
b2xlKFdLU3RyaW5nUmVmIG1lc3NhZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6U3RyaW5nIG1lc3NhZ2VTdHJp
bmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKKyAgICBhdXRvIG1lc3NhZ2VTdHJpbmcgPSB0b1dU
RlN0cmluZyhtZXNzYWdlKTsKICAgICBzaXplX3QgbnVsbENoYXJQb3MgPSBtZXNzYWdlU3RyaW5n
LmZpbmQoVUNoYXIoMCkpOwogICAgIGlmIChudWxsQ2hhclBvcyAhPSBXVEY6Om5vdEZvdW5kKQog
ICAgICAgICBtZXNzYWdlU3RyaW5nLnRydW5jYXRlKG51bGxDaGFyUG9zKTsKQEAgLTEzOTMsNyAr
MTM0Miw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChX
S1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgU1RB
VFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQp
LCAnXG4nKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBE
RUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iiwgc3RhdHVzYmFyVGV4dCwg
J1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRB
bGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTQxNiw3ICsx
MzY1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0Q29uZmly
bShXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUYKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLU3RyaW5n
UmVmIGRlZmF1bHRWYWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6ICIsIHRvV1RGU3Ry
aW5nKG1lc3NhZ2UpLCAiLCBkZWZhdWx0IHRleHQ6IiwgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFp
bGluZ1NwYWNlc0FkZE5ld2xpbmUodG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSkpKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6
ICIsIG1lc3NhZ2UsICIsIGRlZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWls
aW5nU3BhY2VzQWRkTmV3bGluZSh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKSkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIGludDY0X3QgdG90YWxCeXRlc05lZWRlZCkK
QEAgLTE0NDIsNyArMTM5MSw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhj
ZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKIHsKICAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3Mo
KSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlP
cmlnaW46Iiwgc3RyaW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJh
c2VOYW1lKSwgJ1xuJykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVv
dGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCBkYXRh
YmFzZU5hbWUsICdcbicpKTsKIAogICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0
ICogMTAyNDsKICAgICBkb3VibGUgdGVzdERlZmF1bHRRdW90YSA9IGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKQEAgLTE1MjUsNyArMTQ3NCw3IEBA
IGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5n
ZUhhbmRsZVJlZiByYW5nZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0lu
RE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7
CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0
aW5nKCk7CiB9CiAKQEAgLTE1MzYsNyArMTQ4NSw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01S
YW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7
CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBE
RUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTE1NDYsMjIgKzE0OTUs
MTcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVO
b2RlSGFuZGxlUmVmIG5vZGUsIFdLQnVuZGxlUmEKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKICAgICAgICAgIldlYlZpZXdJbnNlcnRB
Y3Rpb25UeXBlZCIsCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIiwKICAgICAg
ICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCiAgICAgaWYgKGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewot
ICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCBub2RlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxh
Y2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3Ry
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxk
SW5zZXJ0Tm9kZToiLCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpLAorICAg
ICAgICAgICAgIiByZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCByYW5nZVRvUmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0aW9uOiIsIGluc2Vy
dGFjdGlvbnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJldHVybiBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTU3Miwy
MiArMTUxNiwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChX
S1N0cmluZ1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlSGFuZGxlUgogICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRp
YyBjb25zdCBjaGFyICppbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewogICAgICAgICAiV2ViVmll
d0luc2VydEFjdGlvblR5cGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQi
LAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKICAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRU
ZXh0OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdl
OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3Ry
aW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxkSW5zZXJ0VGV4dDoi
LCB0ZXh0LAorICAgICAgICAgICAgIiByZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0
aW9uOiIsIGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJl
dHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwog
fQpAQCAtMTU5OCwxMyArMTUzNyw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRE
ZWxldGVSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0
ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURP
TVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5n
ZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICBy
ZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsK
IH0KIApAQCAtMTYxNCwyNyArMTU0OCwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGZyb21SYQogICAg
IGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICphZmZpbml0eXN0cmluZ1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogYWZmaW5pdHlzdHJpbmdbXSA9IHsKICAgICAgICAg
Ik5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbSIsCiAgICAgICAgICJOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbSIKICAgICB9OwotICAgIHN0YXRpYyBjb25zdCBjaGFyICpib29sc3RyaW5n
W10gPSB7Ci0gICAgICAgICJGQUxTRSIsCi0gICAgICAgICJUUlVFIgotICAgIH07CiAKICAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRv
U3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSk7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGFmZmluaXR5OiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZmZpbml0eXN0cmluZ1thZmZpbml0eV0pOyAKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgc3RpbGxTZWxlY3Rpbmc6Iik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCi0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURToiCisgICAgICAg
ICAgICAiIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSwKKyAgICAgICAgICAgICIgdG9ET01SYW5nZToiLCBzdHJp
bmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSwKKyAgICAgICAgICAgICIgYWZmaW5p
dHk6IiwgYWZmaW5pdHlzdHJpbmdbYWZmaW5pdHldLAorICAgICAgICAgICAgIiBzdGlsbFNlbGVj
dGluZzoiLCBzdGlsbFNlbGVjdGluZyA/ICJUUlVFIiA6ICJGQUxTRSIsICdcbicpKTsKICAgICB9
CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0
aW5nKCk7CiB9CkBAIC0xNjQ2LDEzICsxNTcwLDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OnNob3VsZEFwcGx5U3R5bGUoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlLAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgdG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAg
ICAgICAgIiBzaG91bGRBcHBseVN0eWxlOiIsIHN0eWxlRGVjVG9TdHIoc3R5bGUpLAorICAgICAg
ICAgICAgIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCByYW5nZSksICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjY1LDExICsxNTg1LDcg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBu
b3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCht
YWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIsIG5v
dGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZEVuZEVkaXRpbmcoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTE2ODAsMTEgKzE1
OTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
bWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6Iiwgbm90
aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
Q2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xNjk1LDExICsxNjA3LDcg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cmluZ1JlZiBub3RpZmlj
YXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdc
bicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihX
S1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTcxMCwxMSArMTYxOCw3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZp
Y2F0aW9uTmFtZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiKTsKLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFr
ZVN0cmluZygiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiLCBu
b3RpZmljYXRpb25OYW1lLCAnXG4nKSk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CkBAIC0xNzgzLDcgKzE2ODcsNyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlz
dG9yeSgpCiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoCiAgICAgICAgICJcbj09PT09PT09PT09
PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09PT09PT09PT09PT09XG4iLAotICAgICAgICB0b1dURlN0
cmluZyhhZG9wdFdLKFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UsIHRv
V0soIi9MYXlvdXRUZXN0cy8iKS5nZXQoKSkpLmdldCgpKSwKKyAgICAgICAgYWRvcHRXSyhXS0J1
bmRsZVBhZ2VEdW1wSGlzdG9yeUZvclRlc3RpbmcobV9wYWdlLCB0b1dLKCIvTGF5b3V0VGVzdHMv
IikuZ2V0KCkpKS5nZXQoKSwKICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09XG4iCiAgICAgKTsKIH0K
</data>
<flag name="commit-queue"
          id="449775"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428752</attachid>
            <date>2021-05-15 17:00:55 -0700</date>
            <delta_ts>2021-05-15 18:42:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210515170054.patch</filename>
            <type>text/plain</type>
            <size>129254</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBmYTFjNzdhYjQ5Y2Y1YzQ1YWYyOGVi
NmU0NGNhNWJkODJiNmRlMjEuLjMzMDRhODNmOGVjM2ZlN2QzODFmOWVmZWM4OGRjMjI5NjM3ZWFl
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTgzIEBACisyMDIxLTA1LTE1ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBw
b3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgIEFsc28gbWFkZSBtYW55IG90aGVyIHNtYWxs
IGltcHJvdmVtZW50cyB0byB0aGUgU3RyaW5nQnVpbGRlciBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBTdHJpbmdDb25jYXRl
bmF0ZUNGLmguCisKKyAgICAgICAgKiB3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaDogUmVtb3ZlZCBD
b25kaXRpb25hbENyYXNoT25PdmVyZmxvdywgd2hpY2ggd2FzIG9ubHkKKyAgICAgICAgaGVyZSBm
b3IgdXNlIGJ5IFN0cmluZ0J1aWxkZXIsIHdoaWNoIGRvZXMgbm90IHVzZSBDaGVja2VkQXJpdGht
ZXRpYyBhbnkgbW9yZS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUZUVy5jbWFrZTogQWRkZWQg
U3RyaW5nQ29uY2F0ZW5hdGVDRi5oLi4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1NYWMuY21ha2U6
IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVdpbi5jbWFrZTogRGl0dG8uCisKKyAgICAg
ICAgKiB3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oOiBNb3ZlZCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGluc2lkZSB0aGUKKyAgICAgICAgV1RGIG5hbWVzcGFjZS4KKyAgICAgICAgKFdURjo6
c2lnbmVkQWRkSW50MzJPdmVyZmxvd3MpOiBSZW5hbWVkIHRoaXMgZnVuY3Rpb24uIFRoZSB0eXBl
IGhlcmUgaXMKKyAgICAgICAgaW1wb3J0YW50LCBhbmQgd2UgYXJlIG5vdCBkb2luZyBhbnl0aGlu
ZyB0byBwcmV2ZW50IHR5cGUgY29udmVyc2lvbiBvcgorICAgICAgICBjcmVhdGUgYW1iaWd1aXR5
LCBzbyBpdCdzIGdvb2QgdG8gYmUgZXhwbGljaXQgaW4gdGhlIGZ1bmN0aW9uIG5hbWUuCisgICAg
ICAgIChXVEY6OnNhdHVyYXRlZFN1bTxpbnQzMl90Pik6IFJlbmFtZWQgdGhpcyBmcm9tIHNhdHVy
YXRlZEFkZGl0aW9uIGZvcgorICAgICAgICBjbGFyaXR5LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBh
IHN1bSwgc28gdGhhdCdzIGEgYmV0dGVyIG5hbWUgdGhhbiBjYWxsaW5nCisgICAgICAgIGl0ICJh
ZGRpdGlvbiIuIEFsc28sIGl0J3MgY2xlYXJlciB0byBiZSBleHBsaWNpdCBhYm91dCB0aGUgcmV0
dXJuIHR5cGUuCisgICAgICAgIChXVEY6OnNpZ25lZFN1YnRyYWN0SW50MzJPdmVyZmxvd3MpOiBS
ZW5hbWVkLiBTYW1lIHJlYXNvbiBhcyBhYm92ZS4KKyAgICAgICAgKFdURjo6c2F0dXJhdGVkRGlm
ZmVyZW5jZTxpbnQzMl90Pik6IERpdHRvLgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWRTdW08dWlu
dDMyX3Q+KTogQWRkZWQuIERvZXMgdGhlIHVuc2lnbmVkIDMyLWJpdCBzYXR1cmF0ZWQKKyAgICAg
ICAgYWRkaXRpb24gb3BlcmF0aW9uLiBUaGlzIG9uZSBjYW4gYmUgd3JpdHRlbiBpbiBhIHBvcnRh
YmxlIG1hbm5lciBhbmQKKyAgICAgICAgc3RpbGwgZ2V0IHJlYWxseSBlZmZpY2llbnQgY29kZSBv
biBhdCBsZWFzdCBJbnRlbCBhbmQgQVJNNjQuCisgICAgICAgIChXVEY6OnNhdHVyYXRlZFN1bSk6
IEFkZGVkIGEgZnVuY3Rpb24gdGVtcGxhdGUgdGhhdCBsZXRzIGNhbGxlcnMgcGFzcworICAgICAg
ICBsYXJnZXIgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBzYXR1cmF0ZWRTdW0sIHJhdGhlciB0aGFu
IGV4YWN0bHkgdHdvLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXVEY6OmV4cGFuZGVkQ2FwYWNpdHkpOiBSZW5hbWVkIHRvIHVzZSB0aGUgdGVybSBj
YXBhY2l0eSByYXRoZXIgdGhhbgorICAgICAgICBsZW5naHQgZm9yIHRoZSBuZXcgcmVxdWlyZWQg
Y2FwYWNpdHkuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlaWZ5U3RyaW5nIGNvbnN0
KTogQ2hhbmdlZCB0aGUgb3ZlcmZsb3cgY2hlY2sKKyAgICAgICAgaW50byBhIFJFTEVBU0VfQVNT
RVJULiBUaGlzIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgZG9pbmcgdGhlIGNoZWNrIHRoYXQKKyAg
ICAgICAgY2FsbGVycyB3ZXJlIGRvaW5nIGVhcmxpZXIsIHNvIHdlIHdhbnQgaXQgaW4gcHJvZHVj
dGlvbiBidWlsZHMuIEFsc28KKyAgICAgICAgc2ltcGxpZmllZCB0aGlzIHNpbmNlIG91ciBtX2xl
bmd0aCBtZW1iZXIgaXMgYSBzaW1wbGUgaW50ZWdlciBub3cuCisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OnJlc2l6ZSk6IEZpeGVkIHRoZSBvdmVyZmxvdyBjaGVjayB0byB3b3JrIHByb3Bl
cmx5CisgICAgICAgIGV2ZW4gaW4gdGhlICJyZWNvcmQgb3ZlcmZsb3ciIG1vZGUuIFdlIG5vdyBk
byBpdCBleHBsaWNpdGx5IGluc3RlYWQKKyAgICAgICAgb2YgcmVseWluZyBvbiBtX2xlbmd0aCBh
c3NpZ25tZW50LCBzbyB3ZSBrbm93IHRvIHJldHVybiBlYXJseS4gVGhlIG9sZAorICAgICAgICBj
b2RlIGhhZCBhbiBhc3NlcnRpb24gaW5zdGVhZCwgd2hpY2ggZGlkIG5vdCBnb29kIGluIHByb2R1
Y3Rpb24gYnVpbGRzLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZl
cik6IFJlcGxhY2VkIHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMKKyAgICAgICAgd2l0aCBhIHNpbmds
ZSBzaW1wbGVyIGZ1bmN0aW9uIHRlbXBsYXRlLiBBbHNvIGNoYW5nZWQgdGhpcyBzaW5jZSB0aGUK
KyAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzIGRhdGEgbWVtYmVyIGlzIG5vdyBhbHdheXMgZGVm
aW5lZCBhcyBhbiBMQ2hhciosCisgICAgICAgIGV2ZW4gdGhvdWdoIHNvbWV0aW1lcyBpdCdzIGEg
VUNoYXIqIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHdpdGgKKyAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdC4gUmVtb3ZlZCBleHRyYSBvdmVyZmxvdyBjaGVja3MgYmVjYXVzZSB0aGUKKyAgICAgICAg
U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBmdW5jdGlvbiBhbHJlYWR5IGRvZXMg
dGhlIG9ubHkKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2sgd2UgbmVlZC4gQWxzbyBtb3ZlIHRvIFN0
cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzCisgICAgICAgIGZvciBjb3B5aW5nIGNoYXJhY3RlcnMg
cmF0aGVyIHRoYW4gdXNpbmcgc3RkOjptZW1jcHkgZGlyZWN0bHkuCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIpOiBSZXBsYWNlZCB0d28gc2VwYXJhdGUKKyAg
ICAgICAgZnVuY3Rpb25zIHdpdGggYSBmdW5jdGlvbiB0ZW1wbGF0ZSBhbmQgYSBjb3ZlciB0aGF0
IGNhbGxzIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUg
Zm9yIHBsYWNlcyB3aGVyZSB3ZSBhcmVuJ3QKKyAgICAgICAgYWxyZWFkeSBpbiBjaGFyYWN0ZXIt
dHlwZS1zcGVjaWZpYyBjb2RlIHBhdGhzLiBUaGlzIHZlcnNpb24gbm93CisgICAgICAgIHN1cHBv
cnRzIGFsbG9jYXRpbmcgYSBidWZmZXIgZm9yIHRoZSBmaXJzdCB0aW1lIGluIGNhc2VzIHdoZXJl
CisgICAgICAgIHdlIGhhdmUgbV9zdHJpbmcgYW5kIG5vdCBtX2J1ZmZlciwgd2hpY2ggdXNlZCB0
byBiZSBoYW5kbGVkIGF0CisgICAgICAgIHRoZSBoaWdoZXIgbGV2ZWwuCisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSk6IFJld3JvdGUgZm9yIHNpbXBsaWNpdHku
CisgICAgICAgIEJ5IHJlbHlpbmcgb24gdGhlIG92ZXJmbG93IGNoZWNraW5nIGluc2lkZSByZWFs
bG9jYXRlQnVmZmVyIGFuZAorICAgICAgICBhbGxvY2F0ZUJ1ZmZlciB3ZSBubyBsb25nZXIgbmVl
ZCBjaGVja2luZyBvZiB0aGUgcGFzc2VkLWluIHZhbHVlCisgICAgICAgIGF0IHRoaXMgbGV2ZWwu
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyk6
IFJlbW92ZWQgdGhlCisgICAgICAgIHZlcnNpb24gb2YgdGhpcyB0aGF0IHRha2VzIGFkZGl0aW9u
YWxMZW5ndGggc2luY2UgaXQncworICAgICAgICBwb3RlbnRpYWxseSBjb25mdXNpbmcgdG8gaGF2
ZSBhIGZhbWlseSBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIHRoZQorICAgICAgICBzYW1lIG5hbWUg
YW5kIHRha2UgdGhlIHNhbWUgdHlwZSBvZiBhcmd1bWVudCwgYnV0IGludGVycHJldCBpdAorICAg
ICAgICBzdWJ0bHkgZGlmZmVyZW50bHkuIFN0cmVhbWxpbmVkIHRoZSBjb2RlIHVzaW5nIHN0ZDo6
ZXhjaGFuZ2UuCisgICAgICAgIFRoaXMgZnVuY3Rpb24gbm93IGFsc28gaW5jbHVkZXMgdGhlIGxv
Z2ljIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWVkCisgICAgICAgIGV4dGVuZEJ1ZmZlckZvckFwcGVu
ZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrLCB3aGljaCB3YXMgc3VidGx5CisgICAgICAgIG1pc25h
bWVkIHNpbmNlIHRoYXQgd2FzIG5vdCB0aGUgb25seSBzZW1hbnRpYyBkaWZmZXJlbmNlLgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2Fz
ZSk6IFN0cmVhbWxpbmVkCisgICAgICAgIHRoaXMgYnkgdXNpbmcgc3RkOjpleGNoYW5nZSBhbmQg
cmVtb3ZlZCBhZGRpdGlvbmFsIG92ZXJmbG93IGNoZWNrcworICAgICAgICBhdCB0aGlzIGxldmVs
IHNpbmNlIHJlYWxsb2NhdGVCdWZmZXIgYWxyZWFkeSBkb2VzIHRoZW0uIEFsc28gYWRkZWQKKyAg
ICAgICAgYSBjaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG5ldyB0b3RhbCBsZW5ndGggaXMg
MCwgd2hpY2ggd291bGQKKyAgICAgICAgbm90IGJlIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBlZmZp
Y2llbnRseSBieSB0aGUgcmVhbGxvY2F0ZUJ1ZmZlcgorICAgICAgICBhbmQgYnVmZmVyQ2hhcmFj
dGVycyBmdW5jdGlvbnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZ0xDaGFyKTogUmVuYW1lZCB0aGlzCisgICAgICAgIGZyb20gZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nOCwgc2luY2UgaXQncyBub3cgaWRlbnRpY2FsIHRvIGNhbGxpbmcKKyAg
ICAgICAgZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nPExDaGFyPiwgZXhjZXB0IGZvciBpbmxpbmlu
ZyBhbmQgbGlua2FnZS4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVy
Rm9yQXBwZW5kaW5nV2l0aFVwY29udmVydCk6CisgICAgICAgIFJlbmFtZWQgdGhpcyBmcm9tIGV4
dGVuZEJ1ZmZlckZvckFwcGVuZGluZzE2LiBJdCBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAgICB0
aGUgb3RoZXIgZXh0ZW5kQnVmZmVyIGZ1bmN0aW9ucyBiZWNhdXNlIGlzIHN1cHBvcnRzIHVwY29u
dmVydGluZworICAgICAgICBmcm9tIExDaGFyIHRvIFVDaGFyLiBMaWtlIHRoZSBvdGhlcnMgaXQg
cmVsaWVzIG9uIGFsbG9jYXRlQnVmZmVyCisgICAgICAgIGZvciB0aGUgb3ZlcmZsb3cgY2hlY2tp
bmcuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMpOiBSZW1v
dmVkIGFuIHVubmVjZXNzYXJ5CisgICAgICAgIGFzc2VydGlvbiB0aGF0IHRoZSBjaGFyYWN0ZXJz
IHBvaW50ZXIgaXMgbm9uLW51bGw7IHRoYXQgd2lsbCBmYWlsCisgICAgICAgIGluIGFuIG9idmlv
dXMgd2F5IHdpdGhvdXQgYW4gYXNzZXJ0aW9uLiBTaW1wbGlmaWVkIHRoZSBsb2dpYyBhbmQKKyAg
ICAgICAgcmVtb3ZlZCBzb21lIGludmFyaWFudCBhc3NlcnRpb25zIHRoYXQgZG9uJ3QgaGVscCB1
cyBtdWNoLiBDaGFuZ2VkCisgICAgICAgIG92ZXJmbG93IGNoZWNraW5nIGJ5IHVzaW5nIHNhdHVy
YXRlZFN1bSB0byBjb21wdXRlIHRoZSBuZXcgbGVuZ3RoLgorICAgICAgICBJbiBvdmVyZmxvdyBj
YXNlcywgdGhlIG5ldyBzdW0gd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bQorICAgICAg
ICBzdHJpbmcgbGVuZ3RoLCBidXQgd2lsbCBmaXQgaW4gYW4gdW5zaWduZWQsIHNvIHdlIGNhbiBw
YXNzIGl0CisgICAgICAgIGRvd24gdG8gbG93ZXIgbGV2ZWxzIGFuZCBsZXQgZnVuY3Rpb25zIGxp
a2UgcmVhbGxvY2F0ZUJ1ZmZlciBkbworICAgICAgICB0aGUgYWN0dWFsIG92ZXJmbG93IGNoZWNr
aW5nLiBBbHNvIHVzZSBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycy4KKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6YXBwZW5kKTogUmVtb3ZlZCB0aGUgQ0ZTdHJpbmdSZWYgb3ZlcmxvYWQu
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNhblNocmluayBjb25zdCk6IFNpbXBsaWZ5
IHRoZSBmdW5jdGlvbiBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSB2YWd1ZSBGSVhNRSB0aGF0IHNh
eXMgInRoaXMgc2hvdWxkIGJlIHR1bmVkIi4gVGhhdCBtYXkKKyAgICAgICAgYmUgc28sIGJ1dCB0
aGUgRklYTUUgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6c2hy
aW5rVG9GaXQpOiBTaW1wbGlmeSBieSB1c2luZyB0aGUgbmV3CisgICAgICAgIHJlYWxsb2NhdGVC
dWZmZXIgYW5kIHN0ZDo6ZXhjaGFuZ2UuIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uCisgICAg
ICAgIGFib3V0IG92ZXJmbG93IHRoYXQgZG9lc24ndCBoZWxwIHVzIG1haW50YWluIHRoZSBpbnZh
cmlhbnQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmlzQWxsQVNDSUkgY29uc3QpOiBX
YXMgdGVtcHRlZCB0byByZW1vdmUKKyAgICAgICAgdGhpcyBmdW5jdGlvbiwgYnV0IGZvciBub3cg
anVzdCBtYWRlIGl0IHVzZSB0aGUgU3RyaW5nVmlldworICAgICAgICB2ZXJzaW9uIGZvciBicmV2
aXR5LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oOiBSZW1vdmVkIG1hbnkg
dW5uZWVkZWQgaW5jbHVkZXMsIGFuZAorICAgICAgICBub3RhYmx5IGluY2x1ZGVkIFNhdHVyYXRl
ZEFyaXRobWV0aWMuaCBpbnN0ZWFkIG9mCisgICAgICAgIENoZWNrZWRBcml0aG1ldGljLmggYmVj
YXVzZSB3ZSBub3cgdXNlIHRoZSBmb3JtZXIgaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgbGF0dGVy
LiBDaGFuZ2VkIHRoZSBvdmVyZmxvdyBjaGVja2luZyBpbXBsZW1lbnRhdGlvbiB0byB3b3JrCisg
ICAgICAgIG1vcmUgc2ltcGx5IGJhc2VkIG9uIHNhdHVyYXRlZCBhZGRpdGlvbiByYXRoZXIgdGhh
biBDaGVja2VkLgorICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gZ2V0IHJpZCBvZiBkZXBlbmRl
bmN5IG9uIG91ciBvd24gdW5pcXVlIG1vZGUKKyAgICAgICAgZm9yIENoZWNrZWQsIGNhbGxlZCBD
b25kaXRpb25hbENyYXNoT25PdmVyZmxvdy4gUmVtb3ZlZCBhCisgICAgICAgIGNvbW1lbnQgYWJv
dXQgbWFraW5nIGEgdGVtcGxhdGl6ZWQgdmVyc2lvbiBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAg
ICBXZSBjYW4gZG8gaXQgaWYgd2UgbGlrZSwgYnV0IGRvZXMgbm90IHNlZW0gdXJnZW50LiBNb3Zl
ZAorICAgICAgICBmdWNudGlvbiBib2RpZXMgb3V0IG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIHNv
IGl0J3MgZWFzaWVyIHRvCisgICAgICAgIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGNsYXNz
LiBTaW5jZSBtX2xlbmd0aCBpcyBub3cgYW4KKyAgICAgICAgb3JkaW5hcnkgaW50ZWdlciwgdGhl
IGNoZWNrIGZvciBvdmVyZmxvd2VkIHNpbXBseSBjaGVja3MgdG8gc2VlCisgICAgICAgIGlmIHRo
ZSBsZW5ndGggaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aC4gV2hlbiB3
ZQorICAgICAgICBlbmNvdW50ZXIgb3ZlcmZsb3cgdGhhdCBpcyBub3QgYWJvdXQgbGVuZ3RoIGNv
bXB1dGF0aW9uLCB3ZSBzZXQKKyAgICAgICAgdGhlIGxlbmd0aCB0byB0aGUgbWF4aW11bSBpbnRl
Z2VyIHRvIGluZGljYXRlIHRoZSBmYWlsdXJlLgorICAgICAgICBEZWxldGVkIHRoZSBhcHBlbmQg
b3ZlcmxvYWRzIGZvciBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcuCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOiBTaW1wbGlmaWVkIHRoZSBjb25zdHJ1Y3Rvcgor
ICAgICAgICBzaW5jZSB3ZSBvbmx5IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgbV9zaG91bGRDcmFz
aE9uT3ZlcmZsb3cgbWVtYmVyLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6
IEZpeGVkIGEgbWlzdGFrZSB3aGVyZSB0aGlzIHdhcyBub3QKKyAgICAgICAgcmVzZXR0aW5nIHRo
ZSBtX2lzUmVpZmllZCBmbGFnLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzd2FwKTog
VXBkYXRlZCBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0YSBtZW1iZXJzLgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjpvcGVyYXRvciBTdHJpbmdWaWV3IGNvbnN0KTogTW92ZWQgb3V0IG9mIGxp
bmUuCisgICAgICAgIE1hZGUgc3VyZSB0byBjYWxsIHRoZSBsZW5ndGgoKSBmdW5jdGlvbiBzbyB3
ZSBjcmFzaCBpZiB0aGlzIGlzCisgICAgICAgIGNhbGxlZCBhZnRlciBvdmVyZmxvdy4KKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4pOiBSZW5hbWVk
IGZyb20KKyAgICAgICAgZ2V0QnVmZmVyQ2hhcmFjdGVycywgb3RoZXJ3aXNlIHVuY2hhbmdlZC4K
KyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4pOiBE
aXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZGlkT3ZlcmZsb3cpOiBJbXBsZW1l
bnQgdGhlIG5ldyBhcHByb2FjaCB0bworICAgICAgICBvdmVyZmxvdywgbWVhbmluZyB3ZSBuZWVk
IHRvIHdyaXRlIHRoZSBDUkFTSCgpIGhlcmUgZXhwbGljaXRseSBhbmQKKyAgICAgICAgaW4gdGhl
IG5vbi1jcmFzaGluZyBtb2RlLCBzZXQgbV9sZW5ndGguCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OmFwcGVuZCk6IEtlZXAgdGhlIHNpbmdsZS1jaGFyYWN0ZXIgYXBwZW5kCisgICAgICAg
IGZ1bmN0aW9uIHNpbXBsZSB1c2luZyB0aGUgYnVmZmVyQ2hhcmFjdGVycyBmdW5jdGlvbi4gUmVt
b3ZlIHNvbWUKKyAgICAgICAgb2YgdGhlIHVubmVjY2Vzc2FyeSBjaGVja3MgYW5kIHNwZWNpYWwg
Y2FzZXMgaW4gdGhlIG90aGVyIHZlcnNpb25zCisgICAgICAgIG9mIGFwcGVuZC4gTW9zdCBvZiB0
aGUgY2hlY2tpbmcgaXMgZG9uZSBpbnNpZGUgYXBwZW5kQ2hhcmFjdGVycywKKyAgICAgICAgd2l0
aCBvbmx5IGEgZmV3IGV4Y2VwdGlvbnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFw
cGVuZFN1YnN0cmluZyk6IE1vdmVkIG91dCBvZiB0aGUgY2xhc3MKKyAgICAgICAgZGVmaW5pdGlv
biB3aXRob3V0IG1ha2luZyBzaWduaWZpY2FudCBjaGFuZ2VzLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXIpOiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6dG9TdHJpbmcpOiBHcmVhdGx5IHNpbXBsaWZpZWQgdGhpcyBmdW5jdGlvbgorICAg
ICAgICBieSByZWx5aW5nIG9uIG92ZXJmbG93IGNoZWNraW5nIGluIHRoZSByZWlmeVN0cmluZyBm
dW5jdGlvbiBpbnN0ZWFkCisgICAgICAgIG9mIGRvaW5nIGl0IGhlcmUgYW5kIHJlbW92aW5nIHVu
bmVlZGVkIGludmFyaWFudCBhc3NlcnRpb25zLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
Ojp0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6dG9BdG9tU3RyaW5nIGNvbnN0KTogUmV3cm90ZSB0aGlzIHRvIHN0cmVh
bWxpbmUsCisgICAgICAgIHJlbW92aW5nIGV4cGxpY2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6bGVuZ3RoIGNvbnN0KTogTW92ZWQgb3V0IG9mIHRoZSBj
bGFzcworICAgICAgICBkZWZpbml0aW9uIHdpdGhvdXQgbWFraW5nIHNpZ25pZmljYW50IGNoYW5n
ZXMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNhcGFjaXR5IGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2hhcmFjdGVycyBjb25zdCk6IEltcGxlbWVu
dGVkIHRoaXMgb3BlcmF0aW9uCisgICAgICAgIGluIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZS4gTm93
IHJhdGhlciB0aGFuIGhhdmluZyB0aGlzIGNhbGwgdGhlCisgICAgICAgIGNoYXJhY3RlcnM4IGFu
ZCBjaGFyYWN0ZXJzMTYgZnVuY3Rpb25zLCB0aGV5IGNhbiBjYWxsIGl0LgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMpOiBVc2Ugc2F0dXJhdGVkU3VtIHRv
CisgICAgICAgIGNvbXB1dGUgdGhlIHJlcXVpcmVkIGxlbmd0aCwgd2hpY2ggYWxsb3dzIHRoZSBl
eHRlbmRCdWZmZXIKKyAgICAgICAgZnVuY3Rpb25zIHRvIGRvIG92ZXJmbG93IGNoZWNraW5nIHdp
dGhvdXQgaGF2aW5nIHRvIHRha2Ugc3BlY2lhbAorICAgICAgICBjaGVja2VkIGludGVnZXIgdHlw
ZXMgZm9yIGFyZ3VtZW50cy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXJKU09O
LmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmlu
Zyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlCisgICAgICAgIGFuZCBtYWRlIHRoaXMgdXNlIHRoZSBi
dWZmZXJDaGFyYWN0ZXJzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGdldHRpbmcKKyAgICAgICAgZGly
ZWN0bHkgYXQgdGhlIG1fYnVmZmVyQ2hhcmFjdGVycyBkYXRhIG1lbWJlci4KKworICAgICAgICAq
IHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQuIFNwZWNpYWxpemVzIFN0
cmluZ1R5cGVBZGFwdGVyIGZvcgorICAgICAgICBib3RoIENGU3RyaW5nUmVmIGFuZCBOU1N0cmlu
ZyAqLiBJZiBDRlN0cmluZ0dldENTdHJpbmdQdHIgd29ya3MgZm9yIExhdGluLTEsIHRoZW4KKyAg
ICAgICAgZG9lcyB0aGUgOC1iaXQgY29kZSBwYXRoLCBvdGhlcndpc2UgdGhlIDE2LWJpdC4KKwor
ICAgICAgICAqIHd0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbTogSW5jbHVkZSBTdHJp
bmdDb25jYXRlbmF0ZUNGLmgsIHNpbmNlIGl0J3MKKyAgICAgICAgbm93IG5lZWRlZCB0byB1c2Ug
Q0ZTdHJpbmdSZWYgd2l0aCBTdHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE0ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBGaWxlU3lzdGVtOjpmaWxlTWV0
YWRhdGEoKSAvIGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxpbmtzKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2
MTQzMDdhNTU1MjcyMmE1NWEwZjRlMmUyZTdlMTk0NTQwNTdmYjg1Li4yNzljNmVmMGE4MjIyZjk0
NjQ0NTA0OThjNGRmNzY2Njg0MmE3MzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIw
MjEtMDUtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
Q0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8g
U3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1Rl
eHRDb2xvciBjb25zdCk6IFR3ZWFrZWQKKyAgICAgICAgY29kaW5nIHN0eWxlIGEgYml0LgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kQ1NTKTogVXNlIHZhcmlhZGljIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZCBpbnN0ZWFkIG9mIG1hbnkKKyAgICAgICAgc2VwYXJhdGUgY2FsbHMuCisgICAgICAgIChX
ZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9u
dENTUyBjb25zdCk6CisgICAgICAgIFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LCBhbmQgdXNl
IHZhcmlhZGljIFN0cmluQnVpbGRlcjo6YXBwZW5kIGNhbGxzCisgICAgICAgIHRvIHJlZHVjZSB0
aGUgbnVtYmVyIG9mIGNhbGxzIGFuZCBzdHJlYW1saW5lIHRoZSBjb2RlLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92
ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgRGl0dG8uIEFsc28gcmVtb3ZlZCB1bm5lY2Vzc2FyeSBj
aGVja3MgdGhhdCBzdHJpbmdzIGFyZSBlbXB0eSBiZWZvcmUgYXBwZW5kaW5nLgorCisgICAgICAg
ICogcGxhdGZvcm0vTGF5b3V0VW5pdC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0VW5pdDo6
cm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yLSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcis9KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yLT0pOgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Npb24gY29uc3QpOiBUd2Vha2VkIGNv
ZGluCisgICAgICAgIHN0eWxlIGEgYml0LCBhbmQgdXNlIHZhcmlhZGljIFN0cmluQnVpbGRlcjo6
YXBwZW5kIGNhbGxzIHRvIHJlZHVjZSB0aGUKKyAgICAgICAgbnVtYmVyIG9mIGNhbGxzIGFuZCBz
dHJlYW1saW5lIHRoZSBjb2RlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cGxhbkNvdW50ZXIpOgorICAgICAgICAqIHN0eWxlL1N0
eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVDb3VudGVyKToKKwogMjAyMS0wNS0xNSAgQWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gTW92ZSBibG9jayBmb3JtYXR0aW5nIGdlb21l
dHJ5IHRvIGl0cyBvd24gY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmUzZjVlYmFlYjBhYWUzODZjZjZjMDE0
ZmU4MmRjZDE2ZGMyN2Y1Ni4uYzZlZjg3OTc4YjZjMTI4ZWZkZDJlZGFmYjJlOGRlZTlhMmMxNmZm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0xNSAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcg
c3VwcG9ydCBmcm9tIFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMpOiBVc2Ug
bWFrZVN0cmluZyBpbnN0ZWFkCisgICAgICAgIG9mIFN0cmluZ0J1aWxkZXIuCisKIDIwMjEtMDUt
MTUgIElhbiBHaWxiZXJ0ICA8aWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlIHdpdGggVmFyaWFudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3ZDY5ZDg2
OWIyZjE1ZTc1M2M5OTNlMTgwMzdlNi4uY2M1NjFmM2VmODk0ZDk2NDg0N2U2ODgwNzAxMjM3OWQ2
MTg2ZjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00
OTgsNiArNDk4LDcgQEAKIAkJOTNBQzkxQTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzQjVCNDREMjIxM0Q2MTYwMDRCN0FBNyAvKiBIZXhOdW1iZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGV4TnVtYmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNUI0NTAyMjE3MUVFOTAwNEI3QUE3IC8qIExvZ2dl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2dnZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyog
U3RyaW5nQ29uY2F0ZW5hdGVDRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpbmdDb25jYXRlbmF0ZUNGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDE5
MUNGMjBDQUVDRTgwMEM1MUI4RSAvKiBvYmpjU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9iamNTUEku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEREU5MzExQ0RDMDUyRDAwRkQzNDkx
IC8qIGR5bGRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZHlsZFNQSS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0YxOTkzRDE5RDc5NThEMDBDMjM5MEIg
LyogU3RyaW5nVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dHJpbmdWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyNCw2ICs5MjUs
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQTVCQTE1RjcxODI0MzVBNjAwQTgyRTY5IC8qIEF0
b21TdHJpbmdJbXBsQ0YuY3BwICovLAogCQkJCUE1QkExNUY4MTgyNDM1QTYwMEE4MkU2OSAvKiBT
dHJpbmdDRi5jcHAgKi8sCisJCQkJOTNEMDAxN0IyNjREQkFDRjAwQkNGMTA5IC8qIFN0cmluZ0Nv
bmNhdGVuYXRlQ0YuaCAqLywKIAkJCQlBNUJBMTVGOTE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5n
SW1wbENGLmNwcCAqLywKIAkJCQk5MzkzNEJENDE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmll
d0NGLmNwcCAqLywKIAkJCQkxQ0NEQjE0OTFFNTY2NjI2MDA2QzczQzAgLyogVGV4dEJyZWFrSXRl
cmF0b3JDRi5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaCBiL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKaW5kZXggYjg1MTZmODgx
ZTBjNGJhM2ZmMWFhYzE1ODYwNmM5ZWY5ZDU3MzBhYy4uNzNhY2RjNzJkNWNiY2M2MWRhN2VjNjIz
M2MyYzVjZTc2NDgyOWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCkBAIC05NSwz
MSArOTUsNiBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCi1jbGFzcyBDb25kaXRpb25hbENyYXNoT25PdmVy
ZmxvdyB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBvdmVyZmxvd2VkKCkKLSAgICB7Ci0gICAgICAgIG1f
b3ZlcmZsb3dlZCA9IHRydWU7Ci0gICAgICAgIGlmIChtX3Nob3VsZENyYXNoT25PdmVyZmxvdykK
LSAgICAgICAgICAgIGNyYXNoKCk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRDcmFzaE9uT3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENyYXNoT25PdmVyZmxvdzsgfQotICAgIHZv
aWQgc2V0U2hvdWxkQ3Jhc2hPbk92ZXJmbG93KGJvb2wgdmFsdWUpIHsgbV9zaG91bGRDcmFzaE9u
T3ZlcmZsb3cgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVyZmxvd2VkOyB9Ci0gICAgdm9pZCBjbGVhck92ZXJmbG93KCkgeyBtX292ZXJm
bG93ZWQgPSBmYWxzZTsgfQotCi0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCBjcmFzaCgpCi0gICAgewotICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIG1fb3ZlcmZsb3dlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZENyYXNoT25P
dmVyZmxvdyB7IHRydWUgfTsKLX07Ci0KIGNsYXNzIENyYXNoT25PdmVyZmxvdyB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBvdmVyZmxvd2VkKCkKQEAg
LTI1MiwxMSArMjI3LDYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVj
a2VkIHsKICAgICBzdGF0aWMgY29uc3RleHByIENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOwog
fTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8
VCwgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c+PiB7Ci0gICAgdXNpbmcgQ2xlYW5UeXBlID0g
dHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxUPjo6Q2xlYW5UeXBlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7Ci19OwotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gc3RydWN0IFJlbW92ZUNoZWNrZWQ8Q2hlY2tlZDxULCBDcmFzaE9uT3ZlcmZsb3c+PiB7CiAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5cGUgQ2xlYW5UeXBl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7CkBAIC0x
MDY5LDcgKzEwMzksNiBAQCB1c2luZyBXVEY6OkNoZWNrZWRVaW50MzI7CiB1c2luZyBXVEY6OkNo
ZWNrZWRJbnQ2NDsKIHVzaW5nIFdURjo6Q2hlY2tlZFVpbnQ2NDsKIHVzaW5nIFdURjo6Q2hlY2tl
ZFNpemU7Ci11c2luZyBXVEY6OkNvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93OwogdXNpbmcgV1RG
OjpDcmFzaE9uT3ZlcmZsb3c7CiB1c2luZyBXVEY6OlJlY29yZE92ZXJmbG93OwogdXNpbmcgV1RG
OjpjaGVja2VkU3VtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21h
a2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCA5NzFmZGViMjU5NTBl
ZWI3NzhkNWQ3MGUxYWRjZmQ1MmFkNmFkMjllLi5iZmExM2QxZmU4MGIzMDdhNTJiM2ZkZGJlZGEx
ZTY5N2QzOGU1M2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFr
ZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtMzksNiArMzksNyBA
QCBpZiAoVVNFX0NGKQogICAgICAgICBjZi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVD
YXN0c0NGLmgKIAorICAgICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgICAg
ICB0ZXh0L2NmL1RleHRCcmVha0l0ZXJhdG9yQ0YuaAogICAgICkKICAgICBsaXN0KEFQUEVORCBX
VEZfU09VUkNFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2Ug
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBlMjgwOTk3NDI3MTljNzc5
YWMzZWFkZjQ2NjEzMzNkODc4ZWZkY2RkLi43Y2RjYzRiMTZiZTIyZTQ3NWUyMmE4NmFkMGU3YWM0
OGRlMWRkMTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNDEsNiArNDEsNyBAQCBs
aXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURFUlMKIAogICAgIHNwaS9tYWMvTWV0YWRhdGFTUEku
aAogCisgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAgICB0ZXh0L2NmL1RleHRC
cmVha0l0ZXJhdG9yQ0YuaAogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVdpbi5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDZlODBi
OTlhMDRhNmM2ZGU0ZTJmZjU5YTdiNGVkNGM4YzRhYWZhYjkuLjkwZmQyNmQ3OGM2OTRkYjM2ZGQw
ODI0MWU5ODhlNDJmNTU1N2U1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
V2luLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0zNyw2
ICszNyw3IEBAIGlmIChVU0VfQ0YpCiAgICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAg
Y2YvVHlwZUNhc3RzQ0YuaAogCisgICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5o
CiAgICAgICAgIHRleHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3Qo
QVBQRU5EIFdURl9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRB
cml0aG1ldGljLmggYi9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmgKaW5kZXgg
NjA3YmMwMTEyNWRmNTBiYjg5NDk2MDgwZTg4ZTY1ZDc0NWM4YmY5Ni4uNjVmMDJkZGIwMmQ4MTVk
NzM2YjI3NjM1NDIxMGY4YzY3NmI2OWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU2F0
dXJhdGVkQXJpdGhtZXRpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0
aWMuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMzYsNyArMzYsMTMgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KIAotaW5saW5lIGJvb2wgc2lnbmVkQWRkT3ZlcmZsb3dzKGludDMyX3Qg
YSwgaW50MzJfdCBiLCBpbnQzMl90JiByZXN1bHQpCituYW1lc3BhY2UgV1RGIHsKKworLy8gRklY
TUU6IEVuaGFuY2UgdGhpcyBzbyBpdCBmYWlscyB0byBjb21waWxlIGNhbGxzIHdoZXJlIGVpdGhl
ciBvZiB0aGUgYXJndW1lbnRzIGNhbiBiZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgaW50ZWdy
YWwgdHlwZSBpbnN0ZWFkIG9mIHF1aWV0bHkgY29udmVydGluZy4KK3RlbXBsYXRlPHR5cGVuYW1l
IEludGVncmFsVHlwZT4gSW50ZWdyYWxUeXBlIHNhdHVyYXRlZFN1bShJbnRlZ3JhbFR5cGUsIElu
dGVncmFsVHlwZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IEludGVncmFsVHlw
ZSBzYXR1cmF0ZWREaWZmZXJlbmNlKEludGVncmFsVHlwZSwgSW50ZWdyYWxUeXBlKTsKKworaW5s
aW5lIGJvb2wgc2lnbmVkQWRkSW50MzJPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGlu
dDMyX3QmIHJlc3VsdCkKIHsKICNpZiBDT01QSUxFUl9IQVNfQ0xBTkdfQlVJTFRJTihfX2J1aWx0
aW5fc2FkZF9vdmVyZmxvdykgJiYgIShkZWZpbmVkIF9fY2xhbmdfbWFqb3JfXyAmJiBfX2NsYW5n
X21ham9yX18gPCA3KQogICAgIHJldHVybiBfX2J1aWx0aW5fc2FkZF9vdmVyZmxvdyhhLCBiLCAm
cmVzdWx0KTsKQEAgLTUyLDcgKzU4LDcgQEAgaW5saW5lIGJvb2wgc2lnbmVkQWRkT3ZlcmZsb3dz
KGludDMyX3QgYSwgaW50MzJfdCBiLCBpbnQzMl90JiByZXN1bHQpCiAjZW5kaWYKIH0KIAotaW5s
aW5lIGludDMyX3Qgc2F0dXJhdGVkQWRkaXRpb24oaW50MzJfdCBhLCBpbnQzMl90IGIpCit0ZW1w
bGF0ZTw+IGlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1bTxpbnQzMl90PihpbnQzMl90IGEsIGlu
dDMyX3QgYikKIHsKICAgICBpbnQzMl90IHJlc3VsdDsKICNpZiBDUFUoQVJNX1RIVU1CMikKQEAg
LTYyLDEzICs2OCwxMyBAQCBpbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRBZGRpdGlvbihpbnQzMl90
IGEsIGludDMyX3QgYikKICAgICAgICAgOiAvKiBOb3RoaW5nIGlzIGNsb2JiZXJlZC4gKi8KICAg
ICAgICAgKTsKICNlbHNlCi0gICAgaWYgKHNpZ25lZEFkZE92ZXJmbG93cyhhLCBiLCByZXN1bHQp
KQorICAgIGlmIChzaWduZWRBZGRJbnQzMk92ZXJmbG93cyhhLCBiLCByZXN1bHQpKQogICAgICAg
ICByZXN1bHQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSArIChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oYSkgPj4gMzEpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotaW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90
IGIsIGludDMyX3QmIHJlc3VsdCkKK2lubGluZSBib29sIHNpZ25lZFN1YnRyYWN0SW50MzJPdmVy
Zmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKIHsKICNpZiBDT01Q
SUxFUl9IQVNfQ0xBTkdfQlVJTFRJTihfX2J1aWx0aW5fc3N1Yl9vdmVyZmxvdykgJiYgIShkZWZp
bmVkIF9fY2xhbmdfbWFqb3JfXyAmJiBfX2NsYW5nX21ham9yX18gPCA3KQogICAgIHJldHVybiBf
X2J1aWx0aW5fc3N1Yl9vdmVyZmxvdyhhLCBiLCAmcmVzdWx0KTsKQEAgLTg0LDcgKzkwLDggQEAg
aW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIs
IGludDMyX3QmIHJlc3VsdCkKICNlbmRpZgogfQogCi1pbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRT
dWJ0cmFjdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKKy8vIEZJWE1FOiBFbmhhbmNlIHRoaXMg
c28gaXQgZmFpbHMgdG8gY29tcGlsZSBjYWxscyB3aGVyZSBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50
cyBjYW4gYmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgaW50MzJfdCBpbnN0ZWFkIG9mIHF1aWV0bHkg
Y29udmVydGluZy4KK3RlbXBsYXRlPD4gaW5saW5lIGludDMyX3Qgc2F0dXJhdGVkRGlmZmVyZW5j
ZTxpbnQzMl90PihpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICBpbnQzMl90IHJlc3VsdDsK
ICNpZiBDUFUoQVJNX1RIVU1CMikKQEAgLTk0LDggKzEwMSwyNCBAQCBpbmxpbmUgaW50MzJfdCBz
YXR1cmF0ZWRTdWJ0cmFjdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKICAgICAgICAgOiAvKiBO
b3RoaW5nIGlzIGNsb2JiZXJlZC4gKi8KICAgICAgICAgKTsKICNlbHNlCi0gICAgaWYgKHNpZ25l
ZFN1YnRyYWN0T3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCisgICAgaWYgKHNpZ25lZFN1YnRyYWN0
SW50MzJPdmVyZmxvd3MoYSwgYiwgcmVzdWx0KSkKICAgICAgICAgcmVzdWx0ID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgKyAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+
IDMxKTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK3RlbXBsYXRlPD4gY29uc3Rl
eHByIHVpbnQzMl90IHNhdHVyYXRlZFN1bTx1aW50MzJfdD4odWludDMyX3QgYSwgdWludDMyX3Qg
YikKK3sKKyAgICBhdXRvIHN1bSA9IGEgKyBiOworICAgIHJldHVybiBzdW0gPCBhID8gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIDogc3VtOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJbnRlZ3JhbFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+IGNvbnN0ZXhwciB1
aW50MzJfdCBzYXR1cmF0ZWRTdW0oSW50ZWdyYWxUeXBlIHZhbHVlLCBBcmd1bWVudFR5cGVzLi4u
IGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gc2F0dXJhdGVkU3VtPEludGVncmFsVHlwZT4odmFs
dWUsIHNhdHVyYXRlZFN1bTxJbnRlZ3JhbFR5cGU+KGFyZ3VtZW50cy4uLikpOworfQorCit9CisK
K3VzaW5nIFdURjo6c2F0dXJhdGVkU3VtOwordXNpbmcgV1RGOjpzYXR1cmF0ZWREaWZmZXJlbmNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggMWUwYzE4YWM5ZDIwZWQ4
MjBmZWI4Njg1ZmNjZjgyYjEwNjAxMTQyZC4uOGQxYWEzZDI4MWNmNzZkYjVhMDZhM2E4MmYwYWY4
NjM4MDgwMzg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzMsMTkgKzMzLDE5IEBAIG5h
bWVzcGFjZSBXVEYgewogCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heENhcGFjaXR5ID0g
U3RyaW5nOjpNYXhMZW5ndGg7CiAKLXN0YXRpYyB1bnNpZ25lZCBleHBhbmRlZENhcGFjaXR5KHVu
c2lnbmVkIGNhcGFjaXR5LCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3N0YXRpYyB1bnNpZ25l
ZCBleHBhbmRlZENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5LCB1bnNpZ25lZCByZXF1aXJlZENh
cGFjaXR5KQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5
ID0gMTY7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5p
bXVtQ2FwYWNpdHksIHN0ZDo6bWluKGNhcGFjaXR5ICogMiwgbWF4Q2FwYWNpdHkpKSk7CisgICAg
cmV0dXJuIHN0ZDo6bWF4KHJlcXVpcmVkQ2FwYWNpdHksIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0
eSwgc3RkOjptaW4oY2FwYWNpdHkgKiAyLCBtYXhDYXBhY2l0eSkpKTsKIH0KIAogdm9pZCBTdHJp
bmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxv
d2VkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgLy8g
Q2hlY2sgaWYgdGhlIHN0cmluZyBhbHJlYWR5IGV4aXN0cy4KICAgICBpZiAoIW1fc3RyaW5nLmlz
TnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51
bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkg
PT0gbV9sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MCwxMSArNjAsMTEg
QEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiAgICAgfQogCiAgICAg
Ly8gTXVzdCBiZSB2YWxpZCBpbiB0aGUgYnVmZmVyLCB0YWtlIGEgc3Vic3RyaW5nICh1bmxlc3Mg
c3RyaW5nIGZpbGxzIHRoZSBidWZmZXIpLgotICAgIEFTU0VSVChtX2J1ZmZlciAmJiBtX2xlbmd0
aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkgPD0gbV9idWZmZXItPmxlbmd0aCgpKTsKLSAgICBpZiAo
bV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpID09IG1fYnVmZmVyLT5sZW5ndGgoKSkKKyAg
ICBBU1NFUlQobV9idWZmZXIgJiYgbV9sZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKTsKKyAg
ICBpZiAobV9sZW5ndGggPT0gbV9idWZmZXItPmxlbmd0aCgpKQogICAgICAgICBtX3N0cmluZyA9
IG1fYnVmZmVyLmdldCgpOwogICAgIGVsc2UKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBs
OjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9idWZmZXIsIDAsIG1fbGVuZ3RoLnVuc2Fm
ZUdldCgpKTsKKyAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdT
aGFyaW5nSW1wbCgqbV9idWZmZXIsIDAsIG1fbGVuZ3RoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWls
ZGVyOjpyZXNpemUodW5zaWduZWQgbmV3U2l6ZSkKQEAgLTczLDI1ICs3MywyOCBAQCB2b2lkIFN0
cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBDaGVjayBuZXdTaXplIDwgbV9sZW5ndGgsIGhlbmNlIG1fbGVuZ3RoID4gMC4KLSAg
ICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKKyAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBtX2xlbmd0aDsKICAgICBBU1NFUlQobmV3U2l6ZSA8PSBvbGRMZW5ndGgp
OwogICAgIGlmIChuZXdTaXplID09IG9sZExlbmd0aCkKICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVChvbGRMZW5ndGgpOwogCisgICAgaWYgKG5ld1NpemUgPiBtYXhDYXBhY2l0eSkgeworICAg
ICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1fbGVuZ3Ro
ID0gbmV3U2l6ZTsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CiAKICAgICAvLyBJZiB0
aGVyZSBpcyBhIGJ1ZmZlciwgd2Ugb25seSBuZWVkIHRvIGR1cGxpY2F0ZSBpdCBpZiBpdCBoYXMg
bW9yZSB0aGFuIG9uZSByZWYuCiAgICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAgIG1fc3RyaW5n
ID0gU3RyaW5nKCk7IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZlcmVuY2Ug
dG8gbV9idWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9m
IG1fYnVmZmVyLgorICAgICAgICBtX3N0cmluZyA9IHsgfTsgLy8gQ2xlYXIgdGhlIHN0cmluZyB0
byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBtX2J1ZmZlciBpZiBhbnkgYmVmb3JlIGNoZWNraW5n
IHRoZSByZWZlcmVuY2UgY291bnQgb2YgbV9idWZmZXIuCiAgICAgICAgIGlmICghbV9idWZmZXIt
Pmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQotICAg
ICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCBtX2J1
ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKG1faXM4Qml0KQorICAgICAgICAgICAg
ICAgIGFsbG9jYXRlQnVmZmVyPExDaGFyPihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgbV9idWZm
ZXItPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhbGxvY2F0
ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIG1fYnVmZmVyLT5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fYnVmZmVyLT5jaGFyYWN0ZXJz
MTYoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQoaGFz
T3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aC51bnNhZmVHZXQ8
dW5zaWduZWQ+KCkpOworICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVy
LT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEw
MiwzMjcgKzEwNSwxNjAgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNpemUodW5zaWduZWQgbmV3
U2l6ZSkKICAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJ
bXBsKCptX3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOwogfQogCi0vLyBBbGxvY2F0ZSBhIG5l
dyA4IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBj
b21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCi0vLyBvciBtX2J1ZmZlciwgbmVpdGhlciB3aWxsIGJl
IHJlYXNzaWduZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCi12b2lkIFN0cmluZ0J1
aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5z
aWduZWQgcmVxdWlyZWRMZW5ndGgpCisvLyBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcg
aW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5n
IG9yIG1fYnVmZmVyLgordGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUs
IHR5cGVuYW1lIEN1cnJlbnRDaGFyYWN0ZXJUeXBlPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyKGNvbnN0IEN1cnJlbnRDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywg
dW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQo
KSk7Ci0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRh
IGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhl
IGV4aXN0aW5nIGRhdGEuCi0gICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotCi0g
ICAgaWYgKG1fbGVuZ3RoKQotICAgICAgICBzdGQ6Om1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4
LCBjdXJyZW50Q2hhcmFjdGVycywgbV9sZW5ndGgudW5zYWZlR2V0KCkpOwotCi0gICAgLy8gVXBk
YXRlIHRoZSBidWlsZGVyIHN0YXRlLgotICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwot
ICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9
PSByZXF1aXJlZExlbmd0aCk7Ci19CisgICAgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUqIGJ1ZmZl
ckNoYXJhY3RlcnM7CisgICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHJlcXVpcmVkQ2FwYWNpdHksIGJ1ZmZlckNoYXJhY3RlcnMpOworICAgIGlmIChV
TkxJS0VMWSghYnVmZmVyKSkgeworICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0vLyBBbGxvY2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGlu
IGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVpdGhlciBtX3N0cmluZwot
Ly8gb3IgbV9idWZmZXIsICBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29w
eSBoYXMgY29tcGxldGVkKS4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29u
c3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsK
ICAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0g
ICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3Vs
dCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgotICAgIGF1dG8gYnVm
ZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwg
bV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKLSAgICAg
ICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7Ci0gICAgc3RkOjptZW1jcHkobV9idWZmZXJDaGFyYWN0
ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoLnVu
c2FmZUdldCgpKSAqIHNpemVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgotICAg
IAotICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KLSAgICBtX2J1ZmZlciA9IFdURk1v
dmUoYnVmZmVyKTsKLSAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOwotfQorICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFyYWN0ZXJzKGJ1ZmZlckNoYXJhY3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aCk7
CiAKLS8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHdoaWNoIGlzIDggYml0IGFuZCBtYXkgY29tZQotLy8gZnJvbSBlaXRoZXIgbV9z
dHJpbmcgb3IgbV9idWZmZXIsIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBj
b3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlclVw
Q29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQotewotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9p
czhCaXQpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
IEFTU0VSVChyZXF1aXJlZExlbmd0aCA8PSBtYXhDYXBhY2l0eSAmJiByZXF1aXJlZExlbmd0aCA+
PSBsZW5ndGgpOwotICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZm
ZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4K
LSAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVx
dWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKLSAgICBpZiAoVU5MSUtFTFkoIWJ1
ZmZlcikpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOyAvLyBUcmVhdCBhIGZhaWx1cmUg
dG8gYWxsY29hdGUgYXMgYW4gb3ZlcmZsb3cuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQotICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRD
aGFyYWN0ZXJzW2ldOwotICAgIAotICAgIG1faXM4Qml0ID0gZmFsc2U7Ci0gICAgCi0gICAgLy8g
VXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgorICAgIG1faXM4Qml0ID0gc3RkOjppc19zYW1lX3Y8
QWxsb2NhdGlvbkNoYXJhY3RlclR5cGUsIExDaGFyPjsKICAgICBtX2J1ZmZlciA9IFdURk1vdmUo
YnVmZmVyKTsKLSAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+
bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOworICAgIG1fYnVmZmVyQ2hhcmFjdGVycyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TENoYXIqPihidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICBtX3N0cmluZyA9
IHsgfTsKIH0KIAotdGVtcGxhdGU8Pgotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVm
ZmVyPExDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25l
ZCByZXF1aXJlZENhcGFjaXR5KQogewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25l
IHJlZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhl
cndpc2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIgbWV0aG9kLgotICAgIG1fc3Ry
aW5nID0gU3RyaW5nKCk7Ci0gICAgCi0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICBBU1NFUlQo
bV9idWZmZXItPmlzOEJpdCgpKTsKLSAgICAKLSAgICBpZiAobV9idWZmZXItPmhhc09uZVJlZigp
KSB7Ci0gICAgICAgIGF1dG8gZXhwZWN0ZWRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVh
bGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZm
ZXJDaGFyYWN0ZXJzOCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBs
KSkKLSAgICAgICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotICAgICAgICBtX2J1ZmZlciA9
IFdURk1vdmUoZXhwZWN0ZWRTdHJpbmdJbXBsLnZhbHVlKCkpOwotICAgIH0gZWxzZQotICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgp
OwotICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkgfHwgbV9idWZmZXItPmxlbmd0aCgpID09IHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5
IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQuCisgICAgaWYgKG1fYnVmZmVyKSB7
CisgICAgICAgIG1fc3RyaW5nID0geyB9OyAvLyBDbGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0
aGUgcmVmZXJlbmNlIHRvIG1fYnVmZmVyIGlmIGFueSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVy
ZW5jZSBjb3VudCBvZiBtX2J1ZmZlci4KKyAgICAgICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkgeworICAgICAgICAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICAg
ICAgICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5y
ZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkgeworICAgICAgICAgICAgICAgIGRpZE92
ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKChtX2lzOEJpdCA9PSBzdGQ6OmlzX3NhbWVfdjxDaGFyYWN0ZXJUeXBlLCBM
Q2hhcj4pKTsKKyAgICAgICAgICAgIG1fYnVmZmVyID0gV1RGTW92ZSgqYnVmZmVyKTsKKyAgICAg
ICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TENoYXIqPihidWZm
ZXJDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGFsbG9jYXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlw
ZT4oKSwgcmVxdWlyZWRDYXBhY2l0eSk7CiB9CiAKLXRlbXBsYXRlPD4KLXZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit2
b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBh
Y2l0eSkKIHsKLSAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMg
U3RyaW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQsCi0gICAgLy8gb3RoZXJ3aXNlIGZhbGwgYmFj
ayB0byAiYWxsb2NhdGUgYW5kIGNvcHkiIG1ldGhvZC4KLSAgICBtX3N0cmluZyA9IFN0cmluZygp
OwotICAgIAotICAgIGlmIChtX2J1ZmZlci0+aXM4Qml0KCkpCi0gICAgICAgIGFsbG9jYXRlQnVm
ZmVyVXBDb252ZXJ0KG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0aCk7Ci0g
ICAgZWxzZSBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAgICAgIGF1dG8gZXhwZWN0
ZWRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNl
Tm9uTnVsbCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIWV4cGVjdGVkU3RyaW5nSW1wbCkpCi0gICAgICAgICAgICByZXR1cm4g
ZGlkT3ZlcmZsb3coKTsKLSAgICAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGV4cGVjdGVkU3RyaW5n
SW1wbC52YWx1ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZm
ZXItPmNoYXJhY3RlcnMxNigpLCByZXF1aXJlZExlbmd0aCk7Ci0gICAgQVNTRVJUKGhhc092ZXJm
bG93ZWQoKSB8fCBtX2J1ZmZlci0+bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOworICAgIGlm
IChtX2lzOEJpdCkKKyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4ocmVxdWlyZWRDYXBh
Y2l0eSk7CisgICAgZWxzZQorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPihyZXF1aXJl
ZENhcGFjaXR5KTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5z
aWduZWQgbmV3Q2FwYWNpdHkpCiB7CiAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChuZXdDYXBhY2l0eSA8PSBTdHJpbmc6Ok1heExlbmd0aCk7CisK
ICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGJ1
ZmZlciwgdGhlbiBncm93IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4g
bV9idWZmZXItPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgp
KQotICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KG5ld0NhcGFjaXR5KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFy
PihuZXdDYXBhY2l0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9i
dWZmZXItPmxlbmd0aCgpKQorICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0
eSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gR3JvdyB0aGUgc3RyaW5nLCBpZiBuZWNlc3Nh
cnkuCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICBpZiAobmV3Q2FwYWNpdHkgPiBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgTENoYXIqIG51bGxQbGFjZWhvbGRlciA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobnVsbFBsYWNlaG9sZGVyLCBuZXdDYXBhY2l0
eSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAg
ICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5
KTsKKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9sZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
ICghbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8TENoYXI+KHN0YXRp
Y19jYXN0PExDaGFyKj4obnVsbHB0ciksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1fc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPExD
aGFyPihtX3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBuZXdDYXBhY2l0eSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVyczE2
KCksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4o
bV9zdHJpbmcuY2hhcmFjdGVyczE2KCksIG5ld0NhcGFjaXR5KTsKICAgICAgICAgfQogICAgIH0K
ICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8ICFuZXdDYXBhY2l0eSB8fCBtX2J1ZmZlci0+
bGVuZ3RoKCkgPj0gbmV3Q2FwYWNpdHkpOwogfQogCi0vLyBNYWtlICdhZGRpdGlvbmFsTGVuZ3Ro
JyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1f
c3RyaW5nICYgbV9sZW5ndGgsCi0vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxv
Y2F0ZWQgc3RvcmFnZS4KLS8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGUgc2l6ZSBvZiB0aGUgbmV3
IGJ1aWxkZXIgd291bGQgaGF2ZSBvdmVyZmxvd2VkCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCBhZGRpdGlvbmFsTGVuZ3RoKQorLy8gTWFrZSAn
YWRkaXRpb25hbExlbmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9i
dWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoIHRvIHVzZSwKKy8vIHRoYXQgY2FwYWNp
dHkgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlIHNv
IHRoZSBjYWxsZXIgY2FuIHdyaXRlIGNoYXJhY3RlcnMgdGhlcmUuCisvLyBSZXR1cm5zIG51bGxw
dHIgaWYgYWxsb2NhdGlvbiBmYWlscywgbGVuZ3RoIG92ZXJmbG93cywgb3IgaWYgdG90YWwgY2Fw
YWNpdHkgaXMgMCBzbyBubyBidWZmZXIgaXMgbmVlZGVkLgorLy8gVGhlIGNhbGxlciBoYXMgdGhl
IHJlc3BvbnNpYmlsaXR5IGZvciBjaGVja2luZyB0aGF0IENoYXJhY3RlclR5cGUgaXMgdGhlIHR5
cGUgb2YgdGhlIGV4aXN0aW5nIGJ1ZmZlci4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIEFTU0VSVChh
ZGRpdGlvbmFsTGVuZ3RoKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNpemUgb2YgdGhl
IGJ1aWxkZXIgYWZ0ZXIgYXBwZW5kaW5nLgotICAgIENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0
aCA9IG1fbGVuZ3RoICsgYWRkaXRpb25hbExlbmd0aDsKLSAgICBpZiAocmVxdWlyZWRMZW5ndGgu
aGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGlmIChtX2J1ZmZlciAmJiByZXF1aXJlZExlbmd0aCA8PSBtX2J1ZmZl
ci0+bGVuZ3RoKCkpIHsKKyAgICAgICAgbV9zdHJpbmcgPSB7IH07CisgICAgICAgIHJldHVybiBi
dWZmZXJDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBzdGQ6OmV4Y2hhbmdlKG1fbGVuZ3Ro
LCByZXF1aXJlZExlbmd0aCk7CiAgICAgfQotCi0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrPENoYXJhY3RlclR5cGU+KHJlcXVpcmVkTGVuZ3Ro
KTsKKyAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2U8Q2hhcmFjdGVy
VHlwZT4ocmVxdWlyZWRMZW5ndGgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1
ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrKENoZWNrZWRJbnQzMiByZXF1aXJl
ZExlbmd0aCkKKy8vIFNoYXJlZCBieSB0aGUgb3RoZXIgZXh0ZW5kQnVmZmVyIGZ1bmN0aW9ucy4K
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1
aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQogewotICAgIEFTU0VSVCghcmVxdWlyZWRMZW5ndGguaGFzT3ZlcmZsb3dlZCgpKTsK
LQotICAgIGlmIChtX2J1ZmZlciAmJiAocmVxdWlyZWRMZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVk
PigpIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBp
cyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRl
ciBjb250ZW50cyEKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0
aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICB1bnNpZ25lZCBjdXJyZW50TGVuZ3Ro
ID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0g
ICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgICAgIHJldHVybiBnZXRCdWZm
ZXJDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBjdXJyZW50TGVuZ3RoOwotICAgIH0KLQot
ICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZTxDaGFyYWN0ZXJUeXBl
PihyZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKSk7CisgICAgQVNTRVJUKCFoYXNPdmVyZmxvd2Vk
KCkpOworICAgIGlmICghcmVxdWlyZWRMZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJlYWxsb2NhdGVCdWZmZXIoZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJl
ZExlbmd0aCkpOworICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyQ2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBl
PigpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwgcmVxdWlyZWRMZW5ndGgpOwogfQogCi1MQ2hh
ciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nOChDaGVja2VkSW50MzIg
cmVxdWlyZWRMZW5ndGgpCisvLyBBbHRlcmF0aXZlIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyB0
aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgaGVhZGVyIHdpdGhvdXQgaW5saW5pbmcuCitMQ2hh
ciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nTENoYXIodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHJlcXVpcmVkTGVuZ3RoLmhhc092
ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgZGlkT3ZlcmZsb3coKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRob3V0
T3ZlcmZsb3dDaGVjazxMQ2hhcj4ocmVxdWlyZWRMZW5ndGgpOworICAgIHJldHVybiBleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmc8TENoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAotVUNoYXIqIFN0
cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzE2KENoZWNrZWRJbnQzMiByZXF1
aXJlZExlbmd0aCkKK1VDaGFyKiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmdXaXRoVXBjb252ZXJ0KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIGlmIChVTkxJ
S0VMWShyZXF1aXJlZExlbmd0aC5oYXNPdmVyZmxvd2VkKCkpKSB7Ci0gICAgICAgIGRpZE92ZXJm
bG93KCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KICAgICBpZiAobV9pczhCaXQp
IHsKLSAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM7Ci0gICAgICAgIGlmIChtX2J1ZmZl
cikgewotICAgICAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aC51
bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICAgICAgY2hhcmFjdGVycyA9IG1fYnVmZmVy
LT5jaGFyYWN0ZXJzOCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1f
c3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAg
ICAgICAgICBjaGFyYWN0ZXJzID0gbV9zdHJpbmcuaXNOdWxsKCkgPyBudWxscHRyIDogbV9zdHJp
bmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgfQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29u
dmVydChjaGFyYWN0ZXJzLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVu
Z3RoLnVuc2FmZUdldCgpKSk7CisgICAgICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihjaGFyYWN0
ZXJzOCgpLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdl
dCgpOwotICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBvbGRMZW5ndGg7CisgICAgICAgIHJl
dHVybiBidWZmZXJDaGFyYWN0ZXJzPFVDaGFyPigpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwg
cmVxdWlyZWRMZW5ndGgpOwogICAgIH0KLSAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5k
aW5nV2l0aG91dE92ZXJmbG93Q2hlY2s8VUNoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKLX0KLQotLy8g
TWFrZSAncmVxdWlyZWRMZW5ndGgnIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwg
dXBkYXRlIG1fc3RyaW5nICYgbV9sZW5ndGgsCi0vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgc3RvcmFnZS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Ns
b3dDYXNlKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQotewotICAgIEFTU0VSVCghaGFzT3ZlcmZs
b3dlZCgpKTsKLSAgICBBU1NFUlQocmVxdWlyZWRMZW5ndGgpOwotCi0gICAgaWYgKG1fYnVmZmVy
KSB7Ci0gICAgICAgIC8vIElmIHRoZSBidWZmZXIgaXMgdmFsaWQgaXQgbXVzdCBiZSBhdCBsZWFz
dCBhcyBsb25nIGFzIHRoZSBjdXJyZW50IGJ1aWxkZXIgY29udGVudHMhCi0gICAgICAgIEFTU0VS
VChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsK
LSAgICAgICAgCi0gICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oZXhwYW5k
ZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5z
aWduZWQ+KCkpOwotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2xlbmd0aCA/IG1fc3RyaW5nLmNo
YXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSA6IG51bGxwdHIsIGV4cGFuZGVkQ2FwYWNpdHkoY2Fw
YWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKGhhc092
ZXJmbG93ZWQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hhcmFjdGVyVHlw
ZSogcmVzdWx0ID0gZ2V0QnVmZmVyQ2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgbV9sZW5n
dGgudW5zYWZlR2V0KCk7Ci0gICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aDsKLSAgICBBU1NF
UlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBt
X2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzxVQ2hhcj4ocmVxdWlyZWRMZW5ndGgpOwog
fQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCB8fCBoYXNPdmVy
Zmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKLQog
ICAgIGlmIChtX2lzOEJpdCAmJiBsZW5ndGggPT0gMSAmJiBpc0xhdGluMShjaGFyYWN0ZXJzWzBd
KSkgewogICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcnNbMF0pKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugb3B0aW1p
emUgbWVtb3J5IGJ5IGtlZXBpbmcgdGhlIHN0cmluZyA4LWJpdCB3aGVuIGFsbCB0aGUgY2hhcmFj
dGVycyBhcmUgTGF0aW4tMT8KLQotICAgIFVDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZzE2KG1fbGVuZ3RoICsgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRl
c3RpbmF0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN0ZDo6bWVtY3B5KGRlc3RpbmF0aW9u
LCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBzaXplb2YoVUNoYXIp
KTsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgIGlmIChhdXRv
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydChzYXR1
cmF0ZWRTdW08dWludDMyX3Q+KG1fbGVuZ3RoLCBsZW5ndGgpKSkKKyAgICAgICAgU3RyaW5nSW1w
bDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAK
IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVycyhjb25zdCBMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoIHx8IGhhc092ZXJmbG93
ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNoYXJhY3RlcnMpOwotCiAgICAg
aWYgKG1faXM4Qml0KSB7Ci0gICAgICAgIExDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZzxMQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikg
ewotICAgICAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlbmd0aCA+IDgpCi0gICAgICAgICAgICBzdGQ6
Om1lbWNweShkZXN0aW5hdGlvbiwgY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSG93IHN0cm9uZyBpcyBvdXIgZXZpZGVuY2UgdGhhdCB0
aGlzIGlzIGZhc3RlciB0aGFuIG1lbWNweT8gV2hhdCBwbGF0Zm9ybXMgaXMgdGhpcyB0cnVlIGZv
cj8KLSAgICAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwot
ICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCi0gICAgICAgICAgICAgICAgKmRl
c3RpbmF0aW9uKysgPSAqY2hhcmFjdGVycysrOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRv
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nPExDaGFyPihzYXR1cmF0ZWRT
dW08dWludDMyX3Q+KG1fbGVuZ3RoLCBsZW5ndGgpKSkKKyAgICAgICAgICAgIFN0cmluZ0ltcGw6
OmNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFwcGVu
ZGluZzxVQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikgewotICAgICAg
ICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgY29uc3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0g
ICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgKmRlc3RpbmF0aW9u
KysgPSAqY2hhcmFjdGVycysrOworICAgICAgICBpZiAoYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZzxVQ2hhcj4oc2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xlbmd0
aCwgbGVuZ3RoKSkpCisgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0
aW5hdGlvbiwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICB9CiB9CiAKLSNpZiBVU0UoQ0YpCi0K
LXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICAv
LyBGYXN0IHBhdGg6IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBTdHJpbmcgd2hlbiBw
b3NzaWJsZS4KLSAgICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENGU3RyaW5nR2V0Q1N0cmluZ1B0
cihzdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkgewotICAgICAgICBhcHBlbmRD
aGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwgQ0ZT
dHJpbmdHZXRMZW5ndGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXBw
ZW5kKFN0cmluZyhzdHJpbmcpKTsKLX0KLQotI2VuZGlmCi0KIGJvb2wgU3RyaW5nQnVpbGRlcjo6
Y2FuU2hyaW5rKCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgLy8gT25seSBzaHJpbmsgdGhlIGJ1ZmZlciBpZiBpdCdzIGxlc3Mg
dGhhbiA4MCUgZnVsbC4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1bmUgdGhpcyBoZXVyaXN0
aWMgYmFzZWQgc29tZSBhY3R1YWwgdGVzdCBjYXNlIG1lYXN1cmVtZW50cy4KLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICByZXR1cm4gbV9idWZmZXIgJiYg
bV9idWZmZXItPmxlbmd0aCgpID4gKGxlbmd0aCArIChsZW5ndGggPj4gMikpOworICAgIHJldHVy
biAhaGFzT3ZlcmZsb3dlZCgpICYmIG1fYnVmZmVyICYmIG1fYnVmZmVyLT5sZW5ndGgoKSA+IG1f
bGVuZ3RoICsgKG1fbGVuZ3RoID4+IDIpOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlu
a1RvRml0KCkKIHsKICAgICBpZiAoY2FuU2hyaW5rKCkpIHsKLSAgICAgICAgaWYgKG1faXM4Qml0
KQotICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obV9sZW5ndGgudW5zYWZlR2V0
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPiht
X2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsK
LSAgICAgICAgbV9zdHJpbmcgPSBXVEZNb3ZlKG1fYnVmZmVyKTsKKyAgICAgICAgcmVhbGxvY2F0
ZUJ1ZmZlcihtX2xlbmd0aCk7CisgICAgICAgIG1fc3RyaW5nID0gc3RkOjpleGNoYW5nZShtX2J1
ZmZlciwgbnVsbHB0cik7CiAgICAgfQogfQogCiBib29sIFN0cmluZ0J1aWxkZXI6OmlzQWxsQVND
SUkoKSBjb25zdAogewotICAgIGF1dG8gbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7Ci0gICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2lzOEJpdCkKLSAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShjaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwot
ICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7
CisgICAgcmV0dXJuIFN0cmluZ1ZpZXcgeyAqdGhpcyB9LmlzQWxsQVNDSUkoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDcwMThh
MWFiN2JkYmQ3NGU2Y2I3YWZjZDM1NDRlYWViOTM5MGJlNWUuLjkyYmEwNDM1MTVhOWFhYzYyMGRh
MTY3OWQ1MDRiODg0NTE2Nzg3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjYsNDAwICsyNiwz
NTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9TYXR1cmF0ZWRBcml0
aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotLy8gU3RyaW5nQnVpbGRlciBjdXJyZW50
bHkgdXNlcyBhIENoZWNrZWQ8aW50MzJfdCwgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c+IGZv
ciBtX2xlbmd0aC4KLS8vIElkZWFsbHksIHdlIHdvdWxkIHdhbnQgdG8gbWFrZSBTdHJpbmdCdWls
ZGVyIGEgdGVtcGxhdGUgd2l0aCBhbiBPdmVyZmxvd0hhbmRsZXIgcGFyYW1ldGVyLCBhbmQKLS8v
IG1fbGVuZ3RoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYmFzZWQgb24gdGhhdCBPdmVyZmxvd0hhbmRs
ZXIgaW5zdGVhZC4gSG93ZXZlciwgY3VycmVudGx5LCB3ZSdyZQotLy8gbm90IGFibGUgdG8gZ2V0
IGNsYW5nIHRvIGV4cG9ydCBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCB0ZW1wbGF0ZSBtZXRob2Rz
ICh3aGljaCB3b3VsZCBiZSBuZWVkZWQKLS8vIGlmIHdlIHRlbXBsYXRpemUgU3RyaW5nQnVpbGRl
cikuIEFzIGEgd29ya2Fyb3VuZCwgd2UgdXNlIHRoZSBDb25kaXRpb25hbENyYXNoT25PdmVyZmxv
dyBoYW5kbGVyCi0vLyBpbnN0ZWFkIHRvIGRvIGEgcnVudGltZSBjaGVjayBvbiB3aGV0aGVyIGl0
IHNob3VsZCBjcmFzaCBvbiBvdmVyZmxvd3Mgb3Igbm90LgotLy8KLS8vIFdoZW4gY2xhbmcgaXMg
YWJsZSB0byBleHBvcnQgZXhwbGljaXRseSBpbnN0YW50aWF0ZWQgdGVtcGxhdGUgbWV0aG9kcywg
d2UgY2FuIHRlbXBsYXRpemUKLS8vIFN0cmluZ0J1aWxkZXIgYW5kIGRvIGF3YXkgd2l0aCBDb25k
aXRpb25hbENyYXNoT25PdmVyZmxvdy4KLS8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkxMDUwLgotCiBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKLSAgICAvLyBE
aXNhbGxvdyBjb3B5aW5nIHNpbmNlIGl0J3MgZXhwZW5zaXZlIGFuZCB3ZSBkb24ndCB3YW50IGNv
ZGUgdG8gZG8gaXQgYnkgYWNjaWRlbnQuCisgICAgLy8gRGlzYWxsb3cgY29weWluZyBzaW5jZSBp
dCdzIGV4cGVuc2l2ZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyBpdCBieSBhY2NpZGVudC4KICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdCdWlsZGVyKTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIGVudW0gY2xhc3MgT3ZlcmZsb3dIYW5kbGVyIHsK
LSAgICAgICAgQ3Jhc2hPbk92ZXJmbG93LAotICAgICAgICBSZWNvcmRPdmVyZmxvdwotICAgIH07
Ci0KLSAgICBTdHJpbmdCdWlsZGVyKE92ZXJmbG93SGFuZGxlciBoYW5kbGVyID0gT3ZlcmZsb3dI
YW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cpCi0gICAgICAgIDogbV9idWZmZXJDaGFyYWN0ZXJzOChu
dWxscHRyKQotICAgIHsKLSAgICAgICAgbV9sZW5ndGguc2V0U2hvdWxkQ3Jhc2hPbk92ZXJmbG93
KGhhbmRsZXIgPT0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cpOwotICAgIH0KKyAg
ICBTdHJpbmdCdWlsZGVyKCkgPSBkZWZhdWx0OwogICAgIFN0cmluZ0J1aWxkZXIoU3RyaW5nQnVp
bGRlciYmKSA9IGRlZmF1bHQ7CiAgICAgU3RyaW5nQnVpbGRlciYgb3BlcmF0b3I9KFN0cmluZ0J1
aWxkZXImJikgPSBkZWZhdWx0OwogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRpZE92ZXJmbG93
KCkgeyBtX2xlbmd0aC5vdmVyZmxvd2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFz
T3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoLmhhc092ZXJmbG93ZWQoKTsgfQot
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjcmFzaGVzT25PdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoLnNob3VsZENyYXNoT25PdmVyZmxvdygpOyB9CisgICAgZW51bSBjbGFzcyBPdmVy
Zmxvd0hhbmRsZXIgeyBDcmFzaE9uT3ZlcmZsb3csIFJlY29yZE92ZXJmbG93IH07IC8vIEZJWE1F
OiBEZXNwaXRlIGl0cyB1c2UgaW4gQ2hlY2tlZDw+LCAiaGFuZGxlciIgZG9lcyBub3Qgc2VlbSB0
aGUgY29ycmVjdCBuYW1lIGZvciB0aGlzLgorICAgIGV4cGxpY2l0IFN0cmluZ0J1aWxkZXIoT3Zl
cmZsb3dIYW5kbGVyKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHN3YXAoU3RyaW5n
QnVpbGRlciYpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRpZE92ZXJmbG93KCk7CisgICAg
QUxXQVlTX0lOTElORSBib29sIGhhc092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aCA+IFN0cmluZzo6TWF4TGVuZ3RoOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGNyYXNoZXNP
bk92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KIAog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kQ2hhcmFjdGVy
cyhjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKLQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkgeyBh
cHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJz
KSwgbGVuZ3RoKTsgfQogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQXRvbVN0cmluZyYgYXRvbVN0
cmluZykKLSAgICB7Ci0gICAgICAgIGFwcGVuZChhdG9tU3RyaW5nLnN0cmluZygpKTsKLSAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+IHZvaWQgYXBwZW5kKFN0cmlu
Z1R5cGVzLi4uKTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAg
IHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGtlZXAgdGhlc2Ugb3ZlcmxvYWRzIG9ubHkgaWYgb3B0aW1p
emF0aW9ucyBtYWtlIHRoZW0gbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgc2luZ2xlLWFyZ3VtZW50
IGZvcm0gb2YgdGhlIHZhcmlhZGljIGFwcGVuZCBhYm92ZS4KKyAgICB2b2lkIGFwcGVuZChjb25z
dCBBdG9tU3RyaW5nJiBzdHJpbmcpIHsgYXBwZW5kKHN0cmluZy5zdHJpbmcoKSk7IH0KKyAgICB2
b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFwcGVuZChTdHJpbmdWaWV3KTsK
KyAgICB2b2lkIGFwcGVuZChVQ2hhcik7CisgICAgdm9pZCBhcHBlbmQoTENoYXIpOworICAgIHZv
aWQgYXBwZW5kKGNoYXIgY2hhcmFjdGVyKSB7IGFwcGVuZChzdGF0aWNfY2FzdDxMQ2hhcj4oY2hh
cmFjdGVyKSk7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKik7CiAKLSAgICAgICAgaWYg
KCFzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEFk
ZCBhIFN0cmluZ1R5cGVBZGFwdGVyIHNvIHdlIGNhbiBhcHBlbmQgb25lIHN0cmluZyBidWlsZGVy
IHRvIGFub3RoZXIgd2l0aCB2YXJpYWRpYyBhcHBlbmQuCisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
U3RyaW5nQnVpbGRlciYpOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBl
bXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBo
YXMgbm90IGJlZW4gY2FsbGVkKQotICAgICAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJp
bmcuCi0gICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyKSB7Ci0gICAgICAgICAgICBt
X3N0cmluZyA9IHN0cmluZzsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgp
OwotICAgICAgICAgICAgbV9pczhCaXQgPSBtX3N0cmluZy5pczhCaXQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50
PiBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kTGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVy
cylbY2hhcmFjdGVyQ291bnRdKSB7IGFwcGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgY2hhcmFj
dGVyQ291bnQgLSAxKTsgfQogCi0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAg
ICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3Ro
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmdCdWlsZGVyJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChoYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKKyAgICB2b2lkIGFw
cGVuZENoYXJhY3RlcihVQ2hhcikgPSBkZWxldGU7CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIo
TENoYXIpID0gZGVsZXRlOworICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKGNoYXIpID0gZGVsZXRl
OworICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIpOwogCi0gICAgICAgIGlmICghb3Ro
ZXIubV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47CisgICAgdm9pZCBhcHBlbmRTdWJzdHJp
bmcoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGggPSBTdHJp
bmc6Ok1heExlbmd0aCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kUXVvdGVk
SlNPTlN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICAvLyBJZiB3ZSdyZSBhcHBlbmRp
bmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQgdGhlcmUgaXMgbm90IGEgYnVmZmVyIChyZXNlcnZl
Q2FwYWNpdHkgaGFzIG5vdCBiZWVuIGNhbGxlZCkKLSAgICAgICAgLy8gdGhlbiBqdXN0IHJldGFp
biB0aGUgc3RyaW5nLgotICAgICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlciAmJiAhb3Ro
ZXIubV9zdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gb3RoZXIubV9z
dHJpbmc7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IG90aGVyLm1fbGVuZ3RoOwotICAgICAgICAg
ICAgbV9pczhCaXQgPSBvdGhlci5tX2lzOEJpdDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgIC8vIEZJWE1FOiBVbmNsZWFyIHdoeSB0b1N0cmluZyByZXR1cm5zIFN0cmluZyBh
bmQgdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5IHJldHVybnMgY29uc3QgU3RyaW5nJi4gTWFrZSB0
aGVtIGNvbnNpc3RlbnQuCisgICAgU3RyaW5nIHRvU3RyaW5nKCk7CisgICAgY29uc3QgU3RyaW5n
JiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdDsKKyAgICBBdG9tU3RyaW5nIHRvQXRv
bVN0cmluZygpIGNvbnN0OwogCi0gICAgICAgIGlmIChvdGhlci5pczhCaXQoKSkKLSAgICAgICAg
ICAgIGFwcGVuZENoYXJhY3RlcnMob3RoZXIuY2hhcmFjdGVyczgoKSwgb3RoZXIubV9sZW5ndGgu
dW5zYWZlR2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJz
KG90aGVyLmNoYXJhY3RlcnMxNigpLCBvdGhlci5tX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2xlbmd0aDsgfQorICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBlbmQoU3RyaW5nVmlldyBzdHJp
bmdWaWV3KQotICAgIHsKLSAgICAgICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCi0gICAgICAg
ICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmll
dy5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMo
c3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7Ci0gICAgfQor
ICAgIG9wZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdDsKKyAgICBVQ2hhciBvcGVyYXRvcltdKHVu
c2lnbmVkIGkpIGNvbnN0OwogCi0jaWYgVVNFKENGKQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGFwcGVuZChDRlN0cmluZ1JlZik7Ci0jZW5kaWYKLSNpZiBVU0UoQ0YpICYmIGRlZmluZWQo
X19PQkpDX18pCi0gICAgdm9pZCBhcHBlbmQoTlNTdHJpbmcgKnN0cmluZykgeyBhcHBlbmQoKF9f
YnJpZGdlIENGU3RyaW5nUmVmKXN0cmluZyk7IH0KLSNlbmRpZgorICAgIGJvb2wgaXM4Qml0KCkg
Y29uc3QgeyByZXR1cm4gbV9pczhCaXQ7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgY29u
c3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVyczxMQ2hhcj4o
KTsgfQorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IHJldHVybiBjaGFy
YWN0ZXJzPFVDaGFyPigpOyB9CiAgICAgCi0gICAgdm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5n
OjpNYXhMZW5ndGgpCi0gICAgewotICAgICAgICBpZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0Owor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdD
YXBhY2l0eSk7CiAKLSAgICAgICAgdW5zaWduZWQgY2xhbXBlZExlbmd0aCA9IHN0ZDo6bWluKGxl
bmd0aCwgc3RyaW5nLmxlbmd0aCgpIC0gb2Zmc2V0KTsKLSAgICAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSkKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCkg
KyBvZmZzZXQsIGNsYW1wZWRMZW5ndGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBl
bmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgY2xhbXBlZExlbmd0
aCk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBu
ZXdMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGNhblNocmluaygpIGNvbnN0
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNocmlua1RvRml0KCk7CiAKLSAgICB2b2lk
IGFwcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQotICAgIHsKLSAgICAgICAgaWYgKGNoYXJh
Y3RlcnMpCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIHN0cmxlbihj
aGFyYWN0ZXJzKSk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzQWxsQVND
SUkoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyKSA9IGRlbGV0ZTsK
LSAgICB2b2lkIGFwcGVuZChVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9s
ZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpOwotICAgICAgICBpZiAobV9idWZmZXIgJiYgbGVu
Z3RoIDwgbV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1faXM4Qml0KSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJz
MTZbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAgICAgICAgbV9sZW5ndGgrKzsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0xhdGluMShj
KSkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczhbbGVuZ3RoXSA9IHN0YXRp
Y19jYXN0PExDaGFyPihjKTsKLSAgICAgICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhcHBlbmRD
aGFyYWN0ZXJzKCZjLCAxKTsKLSAgICB9Citwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEFsbG9jYXRpb25DaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBDdXJyZW50Q2hhcmFjdGVyVHlwZT4g
dm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBDdXJyZW50Q2hhcmFjdGVyVHlwZSogY3VycmVudENo
YXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJl
ZENhcGFjaXR5KTsKKyAgICB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRD
YXBhY2l0eSk7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihMQ2hhcikgPSBkZWxldGU7Ci0g
ICAgdm9pZCBhcHBlbmQoTENoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChoYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVu
Z3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKTsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIGxlbmd0
aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAg
ICAgaWYgKG1faXM4Qml0KQotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczhbbGVu
Z3RoXSA9IGM7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9idWZmZXJDaGFy
YWN0ZXJzMTZbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoJmMsIDEpOwotICAgIH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5
cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlwZSogZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBMQ2hhciogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nTENoYXIo
dW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBVQ2hhciog
ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydCh1bnNpZ25lZCByZXF1aXJlZExl
bmd0aCk7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihjaGFyKSA9IGRlbGV0ZTsKLSAgICB2
b2lkIGFwcGVuZChjaGFyIGMpCi0gICAgewotICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8TENo
YXI+KGMpKTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxX
QVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBidWZmZXJDaGFyYWN0ZXJzKCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVpZnlTdHJpbmcoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5k
Q2hhcmFjdGVyKFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIGlmIChVX0lTX0JNUChjKSkgewot
ICAgICAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYXBwZW5kKFUxNl9MRUFEKGMpKTsKLSAgICAgICAg
YXBwZW5kKFUxNl9UUkFJTChjKSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0
cmluZ1R5cGVBZGFwdGVycz4gdm9pZCBhcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0
ZXJzLi4uKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFF1b3RlZEpTT05T
dHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmc7CisgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG1fYnVmZmVyOworICAgIExDaGFyKiBtX2J1ZmZlckNoYXJhY3Rl
cnMgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07CisgICAgYm9vbCBt
X2lzOEJpdCB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93IHsgdHJ1
ZSB9OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbXV0YWJsZSBib29sIG1faXNSZWlmaWVkIHsg
ZmFsc2UgfTsKKyNlbmRpZgorfTsKIAotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNv
dW50PgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0IGNoYXIgKCZj
aGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0pIHsgYXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJz
LCBjaGFyYWN0ZXJDb3VudCAtIDEpOyB9Cit0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRlZ2VyVG9TdHJp
bmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nQnVpbGRlcj47CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBTdHJpbmdUeXBlcz4gdm9pZCBhcHBlbmQoU3RyaW5nVHlwZXMuLi4pOworLy8gRklYTUU6
IE1vdmUgdGhpcyB0byBTdHJpbmdWaWV3IGFuZCBtYWtlIGl0IHRha2UgYSBTdHJpbmdWaWV3IGlu
c3RlYWQgb2YgYSBTdHJpbmdCdWlsZGVyPwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBlcXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiwgY29uc3QgQ2hhcmFjdGVyVHlwZSos
IHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2J1ZmZl
ciB8fCBtX2lzUmVpZmllZCk7Ci0gICAgICAgICAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAgICAgIH0KKy8vIElubGluZSBmdW5j
dGlvbiBpbXBsZW1lbnRhdGlvbnMuCiAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJm
bG93ZWQoKSk7Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJlaWZ5U3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9CitpbmxpbmUgU3RyaW5nQnVpbGRlcjo6
U3RyaW5nQnVpbGRlcihPdmVyZmxvd0hhbmRsZXIgcG9saWN5KQorICAgIDogbV9zaG91bGRDcmFz
aE9uT3ZlcmZsb3cgeyBwb2xpY3kgPT0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cg
fQoreworfQogCi0gICAgY29uc3QgU3RyaW5nJiB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBj
b25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0g
ICAgICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJlaWZ5U3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWls
ZGVyOjpjbGVhcigpCit7CisgICAgbV9zdHJpbmcgPSB7IH07CisgICAgbV9idWZmZXIgPSBudWxs
cHRyOworICAgIG1fYnVmZmVyQ2hhcmFjdGVycyA9IG51bGxwdHI7CisgICAgbV9sZW5ndGggPSAw
OworICAgIG1faXM4Qml0ID0gdHJ1ZTsKKyAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBj
aGFuZ2UgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cuCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBt
X2lzUmVpZmllZCA9IGZhbHNlOworI2VuZGlmCit9CiAKLSAgICBBdG9tU3RyaW5nIHRvQXRvbVN0
cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dl
ZCgpKTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eUF0
b20oKTsKLQotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHN1ZmZpY2llbnRseSBvdmVyLWFs
bG9jYXRlZCwgbWFrZSBhIG5ldyBBdG9tU3RyaW5nIGZyb20gYSBjb3B5IHNvIGl0cyBidWZmZXIg
aXMgbm90IHNvIGxhcmdlLgotICAgICAgICBpZiAoY2FuU2hyaW5rKCkpIHsKLSAgICAgICAgICAg
IGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhjaGFyYWN0
ZXJzOCgpLCBsZW5ndGgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCkpOyAgICAgICAgICAgIAotICAgICAgICB9CitpbmxpbmUgdm9pZCBT
dHJpbmdCdWlsZGVyOjpzd2FwKFN0cmluZ0J1aWxkZXImIG90aGVyKQoreworICAgIG1fc3RyaW5n
LnN3YXAob3RoZXIubV9zdHJpbmcpOworICAgIG1fYnVmZmVyLnN3YXAob3RoZXIubV9idWZmZXIp
OworICAgIHN0ZDo6c3dhcChtX2J1ZmZlckNoYXJhY3RlcnMsIG90aGVyLm1fYnVmZmVyQ2hhcmFj
dGVycyk7CisgICAgc3RkOjpzd2FwKG1fbGVuZ3RoLCBvdGhlci5tX2xlbmd0aCk7CisgICAgc3Rk
Ojpzd2FwKG1faXM4Qml0LCBvdGhlci5tX2lzOEJpdCk7CisgICAgc3RkOjpzd2FwKG1fc2hvdWxk
Q3Jhc2hPbk92ZXJmbG93LCBvdGhlci5tX3Nob3VsZENyYXNoT25PdmVyZmxvdyk7CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICBzdGQ6OnN3YXAobV9pc1JlaWZpZWQsIG90aGVyLm1faXNSZWlmaWVk
KTsKKyNlbmRpZgorfQorCitpbmxpbmUgU3RyaW5nQnVpbGRlcjo6b3BlcmF0b3IgU3RyaW5nVmll
dygpIGNvbnN0Cit7CisgICAgaWYgKG1faXM4Qml0KQorICAgICAgICByZXR1cm4geyBjaGFyYWN0
ZXJzOCgpLCBsZW5ndGgoKSB9OworICAgIHJldHVybiB7IGNoYXJhY3RlcnMxNigpLCBsZW5ndGgo
KSB9OworfQogCi0gICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gQXRvbVN0cmluZyhtX3N0cmluZyk7Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgTENo
YXIqIFN0cmluZ0J1aWxkZXI6OmJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkKK3sKKyAgICBBU1NF
UlQobV9pczhCaXQpOworICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnM7Cit9CiAKLSAgICAg
ICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcobV9idWZmZXIu
Z2V0KCksIDAsIG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6YnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKQoreworICAg
IEFTU0VSVCghbV9pczhCaXQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFVDaGFyKj4o
bV9idWZmZXJDaGFyYWN0ZXJzKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cmluZ0J1aWxk
ZXI6OmRpZE92ZXJmbG93KCkKK3sKKyAgICBpZiAobV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpCisg
ICAgICAgIENSQVNIKCk7CisgICAgbV9sZW5ndGggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCk7Cit9CisKK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChVQ2hh
ciBjaGFyYWN0ZXIpCit7CisgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwgbV9idWZmZXIt
Pmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghbV9pczhCaXQp
IHsKKyAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KClbbV9sZW5ndGgrK10gPSBj
aGFyYWN0ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
TGF0aW4xKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+
KClbbV9sZW5ndGgrK10gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KKyAgICBhcHBlbmRDaGFyYWN0ZXJzKCZjaGFy
YWN0ZXIsIDEpOworfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICByZXR1cm4gbV9s
ZW5ndGgudW5zYWZlR2V0KCk7CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoTENo
YXIgY2hhcmFjdGVyKQoreworICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1fYnVmZmVy
LT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgeworICAgICAgICBpZiAobV9pczhCaXQp
CisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXJzPExDaGFyPigpW21fbGVuZ3RoKytdID0gY2hh
cmFjdGVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXJzPFVDaGFy
PigpW21fbGVuZ3RoKytdID0gY2hhcmFjdGVyOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IGFwcGVuZENoYXJhY3RlcnMoJmNoYXJhY3RlciwgMSk7Cit9CiAKLSAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhbV9sZW5ndGg7IH0KK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6
OmFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBJZiB3ZSdyZSBhcHBlbmRp
bmcgdG8gYW4gZW1wdHkgc3RyaW5nLCBhbmQgdGhlcmUgaXMgbm90IGEgYnVmZmVyIChyZXNlcnZl
Q2FwYWNpdHkgaGFzIG5vdCBiZWVuIGNhbGxlZCkKKyAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRo
ZSBzdHJpbmcuCisgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKKyAgICAgICAgbV9z
dHJpbmcgPSBzdHJpbmc7CisgICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAg
ICAgICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVk
IG5ld0NhcGFjaXR5KTsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICBhcHBlbmRD
aGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIGVs
c2UKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmlu
Zy5sZW5ndGgoKSk7Cit9CiAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgcmV0dXJu
IG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0aCgpIDogbV9sZW5ndGgudW5zYWZlR2V0KCk7Citp
bmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nQnVpbGRlciYgb3Ro
ZXIpCit7CisgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5k
IHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBjYWxs
ZWQpCisgICAgLy8gdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgorICAgIGlmICghbV9sZW5n
dGggJiYgIW1fYnVmZmVyICYmICFvdGhlci5tX3N0cmluZy5pc051bGwoKSkgeworICAgICAgICAv
LyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNyYXNoIG9uIG92ZXJmbG93IHdp
dGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgICAgICBtX3N0cmluZyA9IG90aGVy
Lm1fc3RyaW5nOworICAgICAgICBtX2xlbmd0aCA9IG90aGVyLmxlbmd0aCgpOworICAgICAgICBt
X2lzOEJpdCA9IG90aGVyLm1faXM4Qml0OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzaXplKHVuc2lnbmVkIG5ld1NpemUpOworICAgIGlm
IChvdGhlci5pczhCaXQoKSkKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhvdGhlci5jaGFyYWN0
ZXJzOCgpLCBvdGhlci5tX2xlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmRDaGFyYWN0
ZXJzKG90aGVyLmNoYXJhY3RlcnMxNigpLCBvdGhlci5tX2xlbmd0aCk7Cit9CiAKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5TaHJpbmsoKSBjb25zdDsKK2lubGluZSB2b2lkIFN0cmlu
Z0J1aWxkZXI6OmFwcGVuZChTdHJpbmdWaWV3IHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBz
dHJpbmcubGVuZ3RoKCkpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7Cit9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzaHJpbmtUb0ZpdCgpOworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6
YXBwZW5kU3Vic3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY2xhbXBlZExlbmd0aCA9IHN0ZDo6bWluKGxl
bmd0aCwgc3RyaW5nLmxlbmd0aCgpIC0gb2Zmc2V0KTsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgp
KQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpICsgb2Zmc2V0
LCBjbGFtcGVkTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3Ry
aW5nLmNoYXJhY3RlcnMxNigpICsgb2Zmc2V0LCBjbGFtcGVkTGVuZ3RoKTsKK30KIAotICAgIFVD
aGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWhhc092ZXJmbG93ZWQoKSAmJiBpIDwg
bV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgaWYgKG1faXM4Qml0KQot
ICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaV07Ci0gICAgICAgIHJldHVybiBjaGFy
YWN0ZXJzMTYoKVtpXTsKLSAgICB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQo
Y29uc3QgY2hhciogY2hhcmFjdGVycykKK3sKKyAgICBpZiAoY2hhcmFjdGVycykKKyAgICAgICAg
YXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBzdHJsZW4oY2hhcmFjdGVycykpOworfQogCi0g
ICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX2lzOEJpdCk7Ci0gICAgICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBBU1NFUlQobV9idWZmZXIpOwot
ICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnM4KCk7CitpbmxpbmUgdm9pZCBTdHJp
bmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIGlmIChVX0lTX0JN
UChjKSkgeworICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGMpKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBhcHBlbmQoVTE2X0xFQUQoYykpOworICAgIGFwcGVuZChVMTZf
VFJBSUwoYykpOworfQogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoIW1faXM4Qml0KTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAg
ICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnMx
NigpOworaW5saW5lIFN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b1N0cmluZygpCit7CisgICAgaWYg
KG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAgICAgIHJl
aWZ5U3RyaW5nKCk7CiAgICAgfQotICAgIAotICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gbV9pczhCaXQ7IH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FsbEFTQ0lJKCkg
Y29uc3Q7Ci0KLSAgICBvcGVyYXRvciBTdHJpbmdWaWV3KCkgY29uc3Q7CisgICAgcmV0dXJuIG1f
c3RyaW5nOworfQogCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX2xlbmd0aCA9
IDA7Ci0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVs
bHB0cjsKLSAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzOCA9IG51bGxwdHI7Ci0gICAgICAgIG1f
aXM4Qml0ID0gdHJ1ZTsKLSAgICB9CitpbmxpbmUgY29uc3QgU3RyaW5nJiBTdHJpbmdCdWlsZGVy
Ojp0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdAoreworICAgIGlmIChtX3N0cmluZy5p
c051bGwoKSkKKyAgICAgICAgcmVpZnlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9
CiAKLSAgICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgc3RyaW5nQnVpbGRlci5tX2xlbmd0aCk7Ci0gICAg
ICAgIG1fc3RyaW5nLnN3YXAoc3RyaW5nQnVpbGRlci5tX3N0cmluZyk7Ci0gICAgICAgIG1fYnVm
ZmVyLnN3YXAoc3RyaW5nQnVpbGRlci5tX2J1ZmZlcik7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2lz
OEJpdCwgc3RyaW5nQnVpbGRlci5tX2lzOEJpdCk7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZl
ckNoYXJhY3RlcnM4LCBzdHJpbmdCdWlsZGVyLm1fYnVmZmVyQ2hhcmFjdGVyczgpOwotICAgICAg
ICBBU1NFUlQoIW1fYnVmZmVyIHx8IGhhc092ZXJmbG93ZWQoKSB8fCBtX2J1ZmZlci0+bGVuZ3Ro
KCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICB9CitpbmxpbmUgQXRv
bVN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b0F0b21TdHJpbmcoKSBjb25zdAoreworICAgIGlmIChp
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKIAotcHJpdmF0ZToKLSAgICB2
b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWdu
ZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgVUNoYXIq
IGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdm9pZCBh
bGxvY2F0ZUJ1ZmZlclVwQ29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVu
c2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVy
VHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVkIGFkZGl0aW9uYWxMZW5ndGgp
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hh
cmFjdGVyVHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2so
Q2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2Fz
ZSh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIExDaGFy
KiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc4KENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCk7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFVDaGFyKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcx
NihDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpOworICAgIC8vIElmIHRoZSBidWZmZXIgaXMg
c3VmZmljaWVudGx5IG92ZXItYWxsb2NhdGVkLCBtYWtlIGEgbmV3IEF0b21TdHJpbmcgZnJvbSBh
IGNvcHkgc28gaXRzIGJ1ZmZlciBpcyBub3Qgc28gbGFyZ2UuCisgICAgaWYgKGNhblNocmluaygp
KQorICAgICAgICByZXR1cm4gU3RyaW5nVmlldyB7ICp0aGlzIH0udG9BdG9tU3RyaW5nKCk7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJh
Y3RlclR5cGUqIGdldEJ1ZmZlckNoYXJhY3RlcnMoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCByZWlmeVN0cmluZygpIGNvbnN0OworICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBtX3N0cmluZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmlu
Z1R5cGVBZGFwdGVycz4gdm9pZCBhcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0ZXJz
Li4uKTsKKyAgICAvLyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNyYXNoIG9u
IG92ZXJmbG93IHdpdGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgIEFTU0VSVCht
X2J1ZmZlcik7CisgICAgcmV0dXJuIHsgbV9idWZmZXIuZ2V0KCksIDAsIGxlbmd0aCgpIH07Cit9
CiAKLSAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmluZzsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bV9idWZmZXI7Ci0gICAgdW5pb24gewotICAgICAgICBMQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJz
ODsKLSAgICAgICAgVUNoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczE2OwotICAgIH07Ci0gICAgc3Rh
dGljX2Fzc2VydChTdHJpbmc6Ok1heExlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptYXgoKSwgIiIpOwotICAgIENoZWNrZWQ8aW50MzJfdCwgQ29uZGl0aW9uYWxDcmFzaE9u
T3ZlcmZsb3c+IG1fbGVuZ3RoOwotICAgIGJvb2wgbV9pczhCaXQgeyB0cnVlIH07Ci0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBtdXRhYmxlIGJvb2wgbV9pc1JlaWZpZWQgeyBmYWxzZSB9OwotI2Vu
ZGlmCi19OworaW5saW5lIHVuc2lnbmVkIFN0cmluZ0J1aWxkZXI6Omxlbmd0aCgpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAgcmV0dXJuIG1fbGVu
Z3RoOworfQogCi1pbmxpbmUgU3RyaW5nQnVpbGRlcjo6b3BlcmF0b3IgU3RyaW5nVmlldygpIGNv
bnN0CitpbmxpbmUgdW5zaWduZWQgU3RyaW5nQnVpbGRlcjo6Y2FwYWNpdHkoKSBjb25zdAogewot
ICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAgcmV0dXJuIHsgY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
KCkgfTsKLSAgICByZXR1cm4geyBjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkgfTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1
ZmZlci0+bGVuZ3RoKCkgOiBtX2xlbmd0aDsKIH0KIAotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElO
RSBMQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4oKQoraW5s
aW5lIFVDaGFyIFN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKIHsK
LSAgICBBU1NFUlQobV9pczhCaXQpOwotICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnM4Owor
ICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWhhc092ZXJmbG93
ZWQoKSAmJiBpIDwgbV9sZW5ndGgpOworICAgIHJldHVybiBtX2lzOEJpdCA/IGNoYXJhY3RlcnM4
KClbaV0gOiBjaGFyYWN0ZXJzMTYoKVtpXTsKIH0KIAotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElO
RSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIGNvbnN0IENoYXJhY3RlclR5cGUq
IFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9pczhC
aXQpOwotICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMxNjsKKyAgICBBU1NFUlQoKG1faXM4
Qml0ID09IHN0ZDo6aXNfc2FtZV92PENoYXJhY3RlclR5cGUsIExDaGFyPikpOworICAgIGlmICgh
bV9sZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV9zdHJpbmcuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+
KCk7CisgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVBZGFwdGVycz4KLXZvaWQgU3RyaW5n
QnVpbGRlcjo6YXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLiBhZGFwdGVy
cykKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVBZGFwdGVycz4gdm9pZCBTdHJpbmdC
dWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0ZXJzLi4uIGFkYXB0ZXJz
KQogewotICAgIGF1dG8gcmVxdWlyZWRMZW5ndGggPSBjaGVja2VkU3VtPGludDMyX3Q+KG1fbGVu
Z3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7CisgICAgYXV0byByZXF1aXJlZExlbmd0aCA9IHNh
dHVyYXRlZFN1bTx1aW50MzJfdD4obV9sZW5ndGgsIGFkYXB0ZXJzLmxlbmd0aCgpLi4uKTsKICAg
ICBpZiAobV9pczhCaXQgJiYgYXJlOEJpdChhZGFwdGVycy4uLikpIHsKLSAgICAgICAgTENoYXIq
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nOChyZXF1aXJlZExlbmd0aCk7
Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVy
Zmxvd2VkKCkpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBw
ZW5kaW5nTENoYXIocmVxdWlyZWRMZW5ndGgpOworICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIHN0cmluZ1R5cGVBZGFwdGVy
QWNjdW11bGF0b3IoZGVzdGluYXRpb24sIGFkYXB0ZXJzLi4uKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihyZXF1
aXJlZExlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFT
U0VSVChoYXNPdmVyZmxvd2VkKCkpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uID0gZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydChyZXF1aXJlZExlbmd0aCk7CisgICAgICAg
IGlmICghZGVzdGluYXRpb24pCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAg
ICAgc3RyaW5nVHlwZUFkYXB0ZXJBY2N1bXVsYXRvcihkZXN0aW5hdGlvbiwgYWRhcHRlcnMuLi4p
OwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+Ci12b2lkIFN0
cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdUeXBlcy4uLiBzdHJpbmdzKQordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gU3RyaW5nVHlwZXM+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKFN0cmluZ1R5
cGVzLi4uIHN0cmluZ3MpCiB7CiAgICAgYXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGVzPihzdHJpbmdzKS4uLik7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gU3RyaW5nVmlldyBhbmQgbWFrZSBpdCB0YWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEg
U3RyaW5nQnVpbGRlcj8KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIHMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiBzLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBidWZmZXIs
IHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAocy5sZW5ndGgoKSAhPSBsZW5ndGgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQzMyw3ICszODgsNyBAQCBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0J1aWxkZXImIHMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGJ1ZmZlciwgdW5zaWduZWQgbGVu
Z3RoKQogdGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0
cmluZ0J1aWxkZXI+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gdm9pZDsKICAgICB1c2luZyBB
ZGRpdGlvbmFsQXJndW1lbnRUeXBlID0gU3RyaW5nQnVpbGRlcjsKLSAgICBzdGF0aWMgdm9pZCBm
bHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBz
dHJpbmdCdWlsZGVyKSB7IHN0cmluZ0J1aWxkZXItPmFwcGVuZENoYXJhY3RlcnMoY2hhcmFjdGVy
cywgbGVuZ3RoKTsgfQorICAgIHN0YXRpYyB2b2lkIGZsdXNoKGNvbnN0IExDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpIHsgYnVpbGRlci0+
YXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpT
T04uY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKaW5kZXgg
YzMxMThiNjM5MWJmZWYyYjhjZWY4N2Q2NmFmM2JkNmI5YjcxYjkwYi4uZWYxZjk0OTIxYTAzNTVj
NWRlYWQ1NDQwYzk4ZjJjMTlhMTcxODUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdC
dWlsZGVySlNPTi5jcHAKQEAgLTEwNSw2ICsxMDUsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKGhh
c092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhh
dmUgZW5vdWdoIGJ1ZmZlciBzcGFjZSB0byBhcHBlbmQgdGhpcyBzdHJpbmcgd2l0aG91dCBoYXZp
bmcKICAgICAvLyB0byB3b3JyeSBhYm91dCByZWFsbG9jYXRpbmcgaW4gdGhlIG1pZGRsZS4KICAg
ICAvLyBUaGUgMiBpcyBmb3IgdGhlICciJyBxdW90ZXMgb24gZWFjaCBlbmQuCkBAIC0xMTMsMTkg
KzExNCwyMSBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7CiAgICAgbWF4aW11bUNhcGFjaXR5
UmVxdWlyZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7CiAgICAgdW5zaWduZWQgYWxsb2NhdGlv
blNpemU7Ci0gICAgaWYgKENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cgPT0gbWF4aW11bUNhcGFj
aXR5UmVxdWlyZWQuc2FmZUdldChhbGxvY2F0aW9uU2l6ZSkpCi0gICAgICAgIHJldHVybiBkaWRP
dmVyZmxvdygpOworICAgIGlmIChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09IG1heGltdW1D
YXBhY2l0eVJlcXVpcmVkLnNhZmVHZXQoYWxsb2NhdGlvblNpemUpKSB7CisgICAgICAgIGRpZE92
ZXJmbG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgLy8gVGhpcyBtYXgoKSBpcyBo
ZXJlIHRvIGFsbG93IHVzIHRvIGFsbG9jYXRlIHNpemVzIGJldHdlZW4gdGhlIHJhbmdlIFsyXjMx
LCAyXjMyIC0gMl0gYmVjYXVzZSByb3VuZFVwVG9Qb3dlck9mVHdvKDE8PDMxICsgc29tZSBpbnQg
c21hbGxlciB0aGFuIDE8PDMxKSA9PSAwLgotICAgIC8vIEZJWE1FOiByb3VuZFVwVG9Qb3dlck9m
VHdvIHNob3VsZCB0YWtlIENoZWNrZWQ8dW5zaWduZWQ+IGFuZCBhYm9ydCBpZiBpdCBmYWlscyB0
byByb3VuZCB1cC4KKyAgICAvLyBGSVhNRTogSW5zdGVhZCwgcm91bmRVcFRvUG93ZXJPZlR3byBz
aG91bGQgYmUgZml4ZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsIGluIHRob3NlIGNhc2Vz
LCBwZXJoYXBzIHVzaW5nIGNoZWNrZWQgb3Igc2F0dXJhdGVkIGFyaXRobWV0aWMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjA4NgogICAgIGFsbG9j
YXRpb25TaXplID0gc3RkOjptYXgoYWxsb2NhdGlvblNpemUsIHJvdW5kVXBUb1Bvd2VyT2ZUd28o
YWxsb2NhdGlvblNpemUpKTsKLQotICAgIC8vIEFsbG9jYXRpbmcgdGhpcyBtdWNoIHdpbGwgZGVm
aW5pdGVseSBmYWlsLgotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA+IFN0cmluZzo6TWF4TGVuZ3Ro
KQotICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKKyAgICBpZiAoYWxsb2NhdGlvblNpemUg
PiBTdHJpbmc6Ok1heExlbmd0aCkgeworICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0KCkpCi0g
ICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXI8VUNoYXI+KGJ1ZmZlckNoYXJhY3Rl
cnM8TENoYXI+KCksIGFsbG9jYXRpb25TaXplKTsKICAgICBlbHNlCiAgICAgICAgIHJlc2VydmVD
YXBhY2l0eShhbGxvY2F0aW9uU2l6ZSk7CiAgICAgaWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQo
KSkpCkBAIC0xMzMsMjQgKzEzNiwyMiBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3Rl
ZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBhbGxvY2F0aW9uU2l6ZSk7CiAKICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAg
ICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7Ci0gICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1
ZmZlckNoYXJhY3RlcnM4ICsgbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpOworICAgICAg
ICBhdXRvIG91dHB1dCA9IGJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkgKyBtX2xlbmd0aDsKICAg
ICAgICAgKm91dHB1dCsrID0gJyInOwogICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50
ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAg
ICAgICAgKm91dHB1dCsrID0gJyInOwotICAgICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIG1fYnVm
ZmVyQ2hhcmFjdGVyczg7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gYnVmZmVyQ2hhcmFj
dGVyczxMQ2hhcj4oKTsKICAgICB9IGVsc2UgewotICAgICAgICBVQ2hhciogb3V0cHV0ID0gbV9i
dWZmZXJDaGFyYWN0ZXJzMTYgKyBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAg
ICAgIGF1dG8gb3V0cHV0ID0gYnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKSArIG1fbGVuZ3RoOwog
ICAgICAgICAqb3V0cHV0KysgPSAnIic7CiAgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAg
ICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAg
ICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9idWZmZXJDaGFyYWN0ZXJzMTY7CisgICAgICAgIG1f
bGVuZ3RoID0gb3V0cHV0IC0gYnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKTsKICAgICB9Ci0gICAg
QVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkg
Pj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyYTgx
ZDIyNmQ3MzRiMDk4YzYyMGEwZGFhNjkyZmMyNTg4NzBkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaApAQCAtMCwwICsxLDc2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oPgorCisjaWYgVVNFKENGKQorCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVmKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IENGU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSA6
IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cmluZyB8fCBDRlN0
cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKTsg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFy
YWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0ZTdHJpbmdSZWYgbV9zdHJpbmc7
Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+OjpTdHJpbmdUeXBl
QWRhcHRlcihDRlN0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0cmluZyB7IHN0cmluZyB9Cit7
Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdS
ZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYg
KG1fc3RyaW5nKQorICAgICAgICBzdGQ6Om1lbWNweShkZXN0aW5hdGlvbiwgQ0ZTdHJpbmdHZXRD
U3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSksIENGU3RyaW5n
R2V0TGVuZ3RoKG1fc3RyaW5nKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5n
VHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFyPihVQ2hhciogZGVzdGluYXRp
b24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBDRlN0cmluZ0dldENoYXJh
Y3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5n
KSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3RpbmF0aW9uKSk7Cit9CisKKyNpZmRl
ZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPE5TU3RyaW5n
ICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPiB7CitwdWJsaWM6Cisg
ICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmluZykKKyAgICAgICAgOiBTdHJpbmdU
eXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENGU3RyaW5nUmVmKXN0cmluZykKKyAg
ICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2VuZGlmIC8vIFVTRShDRikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVhbUNvY29hLm1tIGIvU291
cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KaW5kZXggYzc0YmY5Y2Nm
ZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2YjlkM2Y0MTZhZDI0OTczNDY0NWRm
ZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9U
ZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3Ry
ZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdD
b25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBUZXh0U3RyZWFtJiBUZXh0U3Ry
ZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCmluZGV4IDczYzgw
MWI5MzhjN2E4ZDhmNGQ0ZDc1NTNlYWU2Zjc1MTNhMTgxNWUuLjJhYmI1MTIxMmFjMDVlYzFkMDk5
NTZmNDRmNThmMjQyMTAyZjRkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgpAQCAtMzA4LDEyICsz
MDksMTEgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0Jh
Y2tncm91bmRDU1MoKSBjb25zdAogQ29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9ydGFudCkgY29uc3QKIHsKICAgICBNQUNhcHRp
b25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+
IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvcihr
TUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpOwotICAgIENvbG9yIHRl
eHRDb2xvcihjb2xvci5nZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQorICAg
IENvbG9yIHRleHRDb2xvcihhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9yZWdyb3Vu
ZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKSkuZ2V0KCkp
OworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAvLyBUaGlzIGRlZmF1
bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNv
bnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWNvbnRhaW5lci4KICAgICAg
ICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAorICAgIH0KICAgICBpbXBvcnRhbnQg
PSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7CiAgICAg
Q0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldEZvcmVncm91bmRPcGFjaXR5
KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKICAgICBpZiAoIWlt
cG9ydGFudCkKQEAgLTMyNSwyMSArMzI1LDE0IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdAogewogICAgIGJvb2wgaW1w
b3J0YW50OwogICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRpb25zVGV4dENvbG9yKGltcG9ydGFu
dCk7Ci0KICAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotCiAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlDb2xv
ciwgdGV4dENvbG9yLCBpbXBvcnRhbnQpOwogfQogCiBzdGF0aWMgdm9pZCBhcHBlbmRDU1MoU3Ry
aW5nQnVpbGRlciYgYnVpbGRlciwgQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1l
U3RyaW5nKGlkKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzonKTsKLSAgICBidWlsZGVyLmFwcGVu
ZCh2YWx1ZSk7Ci0gICAgaWYgKGltcG9ydGFudCkKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7CisgICAgYnVpbGRl
ci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSwgJzonLCB2YWx1ZSwgaW1wb3J0YW50
ID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogfQogICAgIAogU3RyaW5nIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjp3aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVzQ1NTKCkgY29uc3QKQEAg
LTM3OSw3ICszNzIsNiBAQCBib29sIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0
aW9uU3Ryb2tlV2lkdGhGb3JGb250KGZsb2F0IGZvbnRTaXplLCBjbwogICAgIC8vIFNpbmNlIG9u
bHkgaGFsZiBvZiB0aGUgc3Ryb2tlIGlzIHZpc2libGUgYmVjYXVzZSB0aGUgc3Ryb2tlIGlzIGRy
YXduIGJlZm9yZSB0aGUgZmlsbCwgd2UgZG91YmxlIHRoZSBzdHJva2Ugd2lkdGggaGVyZS4KICAg
ICBzdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoUHQgKiAyOwogICAgIGltcG9ydGFudCA9IGJlaGF2
aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE4LDI0ICs0MTAsMTcgQEAgU3RyaW5nIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29uc3QKIHsKICAg
ICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7CiAgICAgCi0gICAgUmV0YWlu
UHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnQgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFu
Y2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VGb250U3R5bGVEZWZhdWx0KSk7Cisg
ICAgYXV0byBmb250ID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvbnREZXNjcmlw
dG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IsIGtN
QUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVsdCkpOwogICAgIGlmICghZm9udCkKICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBu
YW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBr
Q1RGb250TmFtZUF0dHJpYnV0ZSkpOworICAgIGF1dG8gbmFtZSA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udE5hbWVBdHRyaWJ1dGUpKTsK
ICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIAotICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5
TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsKLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIjogXCIiKTsKLSAgICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxDRlN0cmluZ1Jl
Zj4obmFtZS5nZXQoKSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7Ci0KLSAgICBhdXRvIGNh
c2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDVEZvbnREZXNjcmlw
dG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUp
KSk7Ci0KLSAgICBpZiAoY2FzY2FkZUxpc3QpIHsKKyAgICBidWlsZGVyLmFwcGVuZCgiZm9udC1m
YW1pbHk6IFwiIiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG5hbWUuZ2V0KCkpLCAnIicpOwor
ICAgIGlmIChhdXRvIGNhc2NhZGVMaXN0ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkFycmF5UmVm
PihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250Q2FzY2Fk
ZUxpc3RBdHRyaWJ1dGUpKSkpIHsKICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgQ0ZB
cnJheUdldENvdW50KGNhc2NhZGVMaXN0LmdldCgpKTsgaSsrKSB7CiAgICAgICAgICAgICBhdXRv
IGZvbnRDYXNjYWRlID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3JpcHRvclJlZj4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChjYXNjYWRlTGlzdC5nZXQoKSwgaSkpOwogICAgICAgICAgICAgaWYgKCFm
b250Q2FzY2FkZSkKQEAgLTQ0MywxNiArNDI4LDEwIEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNvbnN0CiAgICAgICAgICAg
ICBhdXRvIGZvbnRDYXNjYWRlTmFtZSA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRy
aWJ1dGUoZm9udENhc2NhZGUsIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7CiAgICAgICAgICAgICBp
ZiAoIWZvbnRDYXNjYWRlTmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwiIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChz
dGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2NhZGVOYW1lLmdldCgpKSk7Ci0gICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwg
XCIiLCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oZm9udENhc2NhZGVOYW1lLmdldCgpKSwgJyIn
KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoYmVoYXZpb3IgPT0ga01BQ2FwdGlv
bkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIiAhaW1wb3J0YW50Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKLSAgICAKKyAgICBi
dWlsZGVyLmFwcGVuZChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNl
VmFsdWUgPyAiICFpbXBvcnRhbnQ7IiA6ICI7Iik7CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIApAQCAtNTYxLDQzICs1NDAsMTggQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpIGNvbnN0CiAjaWYgSEFW
RShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKICAgICBpZiAoIU1lZGlhQWNjZXNzaWJp
bGl0eUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNh
cHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7Ci0gICAgCisKICAgICBTdHJpbmcgY2FwdGlvbnND
b2xvciA9IGNhcHRpb25zVGV4dENvbG9yQ1NTKCk7CiAgICAgU3RyaW5nIGVkZ2VTdHlsZSA9IGNh
cHRpb25zVGV4dEVkZ2VDU1MoKTsKICAgICBTdHJpbmcgZm9udE5hbWUgPSBjYXB0aW9uc0RlZmF1
bHRGb250Q1NTKCk7CiAgICAgU3RyaW5nIGJhY2tncm91bmQgPSBjYXB0aW9uc0JhY2tncm91bmRD
U1MoKTsKLSAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8ICFjYXB0aW9uc0NvbG9yLmlz
RW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9udE5hbWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZExpdGVyYWwoIiA6OiIp
OwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoVGV4dFRyYWNrQ3Vl
OjpjdWVTaGFkb3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hl
ZXQuYXBwZW5kKCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGJhY2tn
cm91bmQpOwotICAgICAgICBpZiAoIWNhcHRpb25zQ29sb3IuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGNhcHRpb25zQ29sb3IpOwotICAg
ICAgICBpZiAoIWVkZ2VTdHlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJy
aWRlU3R5bGVTaGVldC5hcHBlbmQoZWRnZVN0eWxlKTsKLSAgICAgICAgaWYgKCFmb250TmFtZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQo
Zm9udE5hbWUpOwotICAgICAgICAKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQu
YXBwZW5kKCd9Jyk7Ci0gICAgfQotICAgIAorICAgIGlmICghYmFja2dyb3VuZC5pc0VtcHR5KCkg
fHwgIWNhcHRpb25zQ29sb3IuaXNFbXB0eSgpIHx8ICFlZGdlU3R5bGUuaXNFbXB0eSgpIHx8ICFm
b250TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFw
cGVuZCgiIDo6IiwgVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1ZG9JZCgpLCAneycsIGJhY2tn
cm91bmQsIGNhcHRpb25zQ29sb3IsIGVkZ2VTdHlsZSwgZm9udE5hbWUsICd9Jyk7CisKICAgICBT
dHJpbmcgd2luZG93Q29sb3IgPSBjYXB0aW9uc1dpbmRvd0NTUygpOwogICAgIFN0cmluZyB3aW5k
b3dDb3JuZXJSYWRpdXMgPSB3aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVzQ1NTKCk7Ci0gICAgaWYg
KCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kTGl0ZXJhbCgiIDo6
Iik7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChUZXh0VHJhY2tD
dWU6OmN1ZUJhY2tkcm9wU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJp
ZGVTdHlsZVNoZWV0LmFwcGVuZCgneycpOwotICAgICAgICAKLSAgICAgICAgaWYgKCF3aW5kb3dD
b2xvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQod2luZG93Q29sb3IpOwotICAgICAgICBpZiAoIXdpbmRvd0Nvcm5lclJhZGl1cy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCh3
aW5kb3dDb3JuZXJSYWRpdXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXB0aW9u
c092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ30nKTsKLSAgICB9CisgICAgaWYgKCF3aW5kb3dD
b2xvci5pc0VtcHR5KCkgfHwgIXdpbmRvd0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpCisgICAgICAg
IGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIDo6IiwgVGV4dFRyYWNrQ3VlOjpj
dWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCksICd7Jywgd2luZG93Q29sb3IsIHdpbmRvd0Nvcm5l
clJhZGl1cywgJ30nKTsKICNlbmRpZiAvLyBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVX
T1JLKQogCiAgICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNh
cHRpb25zU3R5bGVTaGVldE92ZXJyaWRlU2V0dGluZyBzdHlsZSB0bzpcbiVzIiwgY2FwdGlvbnNP
dmVycmlkZVN0eWxlU2hlZXQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xheW91dFVuaXQuaAppbmRleCAxNTZhMDFiZDJkZmRkYTQ3MmIwODFkNGFlZjQxZGEz
ODI4NmY2MDMwLi4xZTU3MTI4MjAxZGJmMDU3NGZhMjA5MDZiYmU5MTA3NWU3MmJhZWE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCkBAIC0xNTAsOCArMTUwLDggQEAgcHVibGlj
OgogICAgIGludCByb3VuZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV92YWx1ZSA+IDAp
Ci0gICAgICAgICAgICByZXR1cm4gc2F0dXJhdGVkQWRkaXRpb24ocmF3VmFsdWUoKSwga0ZpeGVk
UG9pbnREZW5vbWluYXRvciAvIDIpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAg
cmV0dXJuIHNhdHVyYXRlZFN1YnRyYWN0aW9uKHJhd1ZhbHVlKCksIChrRml4ZWRQb2ludERlbm9t
aW5hdG9yIC8gMikgLSAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgICAgICBy
ZXR1cm4gc2F0dXJhdGVkU3VtPGludD4ocmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5vbWluYXRv
ciAvIDIpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJuIHNhdHVyYXRl
ZERpZmZlcmVuY2U8aW50PihyYXdWYWx1ZSgpLCAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIp
IC0gMSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogICAgIH0KIAogICAgIGludCBmbG9vcigp
IGNvbnN0CkBAIC01ODgsNyArNTg4LDcgQEAgaW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IvKHVu
c2lnbmVkIGxvbmcgbG9uZyBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogaW5saW5lIExheW91dFVu
aXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7
CiAgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNh
dHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisgICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1bTxpbnQ+KGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1
ZSgpKSk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKIH0KIApAQCAtNjI1LDcgKzYyNSw3IEBAIGlu
bGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBMYXlvdXRVbml0JiBi
KQogaW5saW5lIExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0
IExheW91dFVuaXQmIGIpCiB7CiAgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdW
YWx1ZSgpKSk7CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZERpZmZlcmVuY2U8
aW50PihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwogICAgIHJldHVybiByZXR1cm5WYWw7
CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiAKIGlubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvcis9
KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgYS5zZXRSYXdWYWx1
ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworICAgIGEu
c2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VtPGludD4oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkp
KTsKICAgICByZXR1cm4gYTsKIH0KIApAQCAtNzIxLDcgKzcyMSw3IEBAIGlubGluZSBMYXlvdXRV
bml0JiBvcGVyYXRvci09KExheW91dFVuaXQmIGEsIGludCBiKQogCiBpbmxpbmUgTGF5b3V0VW5p
dCYgb3BlcmF0b3ItPShMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAg
IGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1Zh
bHVlKCkpKTsKKyAgICBhLnNldFJhd1ZhbHVlKHNhdHVyYXRlZERpZmZlcmVuY2U8aW50PihhLnJh
d1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwogICAgIHJldHVybiBhOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3
b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQppbmRleCA2MGU2NzBmMjA2NmQ2MDU4YjJlNWViNzll
YjdkYzMwYzVjYjRiMjhlLi4xMWM5YTIzODNjZDZjOGMzMDFhMWEwOGRjZGVhZmFlNzlkMjYyYjQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KQEAgLTM5LDYgKzM5LDcg
QEAKICNpbXBvcnQgPHd0Zi9VUkwuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9ydCA8d3RmL3RleHQv
Y2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgogCiBAaW50ZXJmYWNlIE5TVVJMICgpCiAtIChDRlVS
TFJlZilfY2Z1cmw7CkBAIC0zNDksMzEgKzM1MCwyMyBAQCBzdGQ6OnBhaXI8U3RyaW5nLCBib29s
PiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IFVSTCYgZmly
cwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAKLSAgICBSZXRhaW5QdHI8TlNB
cnJheT4gY29va2llcyA9IGNvb2tpZXNGb3JVUkwoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1
cmwsIGZyYW1lSUQsIHBhZ2VJRCwgc2hvdWxkQXNrSVRQLCBzaG91bGRSZWxheFRoaXJkUGFydHlD
b29raWVCbG9ja2luZyk7Ci0gICAgaWYgKCFjb29raWVzIHx8ICFbY29va2llcyBjb3VudF0pCi0g
ICAgICAgIHJldHVybiB7IFN0cmluZygpLCBmYWxzZSB9OyAvLyBSZXR1cm4gYSBudWxsIHN0cmlu
Zywgbm90IGFuIGVtcHR5IG9uZSB0aGF0IFN0cmluZ0J1aWxkZXIgd291bGQgY3JlYXRlIGJlbG93
LgorICAgIGF1dG8gY29va2llcyA9IGNvb2tpZXNGb3JVUkwoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJ
bmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgc2hvdWxkQXNrSVRQLCBzaG91bGRSZWxheFRoaXJk
UGFydHlDb29raWVCbG9ja2luZyk7CisgICAgaWYgKCFbY29va2llcyBjb3VudF0pCisgICAgICAg
IHJldHVybiB7IFN0cmluZygpLCBmYWxzZSB9OyAvLyBSZXR1cm4gYSBudWxsIHN0cmluZzsgU3Ry
aW5nQnVpbGRlciBiZWxvdyB3b3VsZCBjcmVhdGUgYW4gZW1wdHkgb25lLgogCiAgICAgU3RyaW5n
QnVpbGRlciBjb29raWVzQnVpbGRlcjsKICAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMg
PSBmYWxzZTsKICAgICBmb3IgKE5TSFRUUENvb2tpZSAqY29va2llIGluIGNvb2tpZXMuZ2V0KCkp
IHsKICAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQogICAgICAgICAgICAgY29u
dGludWU7Ci0KICAgICAgICAgaWYgKCFpbmNsdWRlSFRUUE9ubHkgJiYgW2Nvb2tpZSBpc0hUVFBP
bmx5XSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgIGlmIChbY29va2llIGlzU2Vj
dXJlXSkgewogICAgICAgICAgICAgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IHRydWU7CiAgICAg
ICAgICAgICBpZiAoaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6
Ok5vKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCFjb29raWVzQnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb29raWVzQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI7ICIpOwotCi0gICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChbY29v
a2llIG5hbWVdKTsKLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKCc9Jyk7Ci0gICAgICAg
IGNvb2tpZXNCdWlsZGVyLmFwcGVuZChbY29va2llIHZhbHVlXSk7CisgICAgICAgIGNvb2tpZXNC
dWlsZGVyLmFwcGVuZChjb29raWVzQnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICI7ICIsIFtjb29r
aWUgbmFtZV0sICc9JywgW2Nvb2tpZSB2YWx1ZV0pOwogICAgIH0KICAgICByZXR1cm4geyBjb29r
aWVzQnVpbGRlci50b1N0cmluZygpLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAppbmRleCA3ZjYwZDkwMTkzY2Mz
YjNmYzQ5ZjU5Y2IwOTJlZjRjMjBhN2YxMThjLi40MzY5OWZlYWQ5ZjY1YzU5NzJiZmRkNDI5Yzc3
YWVhMTAxNmE2OTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIE9wdGlvbmFsPENvdW50ZXJQbGFuPiBwbGFu
Q291bnRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgQXRvbVN0cmkKICAgICB9CiAK
ICAgICBpZiAoZGlyZWN0aXZlcy5yZXNldFZhbHVlKQotICAgICAgICByZXR1cm4gQ291bnRlclBs
YW4geyB0cnVlLCBzYXR1cmF0ZWRBZGRpdGlvbigqZGlyZWN0aXZlcy5yZXNldFZhbHVlLCBkaXJl
Y3RpdmVzLmluY3JlbWVudFZhbHVlLnZhbHVlT3IoMCkpIH07CisgICAgICAgIHJldHVybiBDb3Vu
dGVyUGxhbiB7IHRydWUsIHNhdHVyYXRlZFN1bTxpbnQ+KCpkaXJlY3RpdmVzLnJlc2V0VmFsdWUs
IGRpcmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUudmFsdWVPcigwKSkgfTsKICAgICBpZiAoZGlyZWN0
aXZlcy5pbmNyZW1lbnRWYWx1ZSkKICAgICAgICAgcmV0dXJuIENvdW50ZXJQbGFuIHsgZmFsc2Us
ICpkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlIH07CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggOTllNTcxYmY2
MjcxNTM1MzY1ODkwYjQ0ZGQxYWMyYWUxMjE0M2E1OS4uOThhNjQ2ZGZmNzMyMWEwOGRiZjEwYmI2
YmMyZjc5NjFlMWE0N2JlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3Vz
dG9tLmgKQEAgLTEzNjAsNyArMTM2MCw3IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVDb3VudGVyKEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1CiAgICAg
ICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVz
LnJlc2V0VmFsdWUgPSB2YWx1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlyZWN0aXZl
cy5pbmNyZW1lbnRWYWx1ZSA9IHNhdHVyYXRlZEFkZGl0aW9uKGRpcmVjdGl2ZXMuaW5jcmVtZW50
VmFsdWUudmFsdWVPcigwKSwgdmFsdWUpOworICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmNyZW1l
bnRWYWx1ZSA9IHNhdHVyYXRlZFN1bTxpbnQ+KGRpcmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUudmFs
dWVPcigwKSwgdmFsdWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCmluZGV4IGYyZDkyZjE5N2QxN2NhMjk3MGQwN2RjMTQwYWIwMGE2MWMxMzU4ZmMuLmNm
Y2Q5ZjNjMDNjOWM2YTFhM2QzNGVkMWNjOTc3N2E4MDcyN2U5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbXBvcnQgPHd0Zi9Qcm9j
ZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2Ev
RW50aXRsZW1lbnRzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1w
b3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgpAQCAtMTE1LDE1ICsx
MTUsMTAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0
ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgICAgICAgICAgZmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZTo6QWxsQnV0Q29va2llczsKICAgICB9CiAKLSAgICBhdXRvKiBtYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSJdOwotICAgIGlmIChtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICBV
UkwgdXJsIHsgVVJMKCksIG1hbnVhbFByZXZhbGVudFJlc291cmNlIH07Ci0gICAgICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJodHRwOi8vIik7Ci0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICB1cmwg
PSB7IFVSTCgpLCBidWlsZGVyLnRvU3RyaW5nKCkgfTsKLSAgICAgICAgfQorICAgIGlmIChhdXRv
IG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1h
bnVhbFByZXZhbGVudFJlc291cmNlIl0pIHsKKyAgICAgICAgVVJMIHVybCB7IHsgfSwgbWFudWFs
UHJldmFsZW50UmVzb3VyY2UgfTsKKyAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgdXJsID0geyB7IH0sIG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBtYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSkgfTsKICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMDVmOThlNzMyOTIxMzBhODljYWRjY2M4MDQ4MWRh
ODg1NjJhMDdkLi4wNjM1NWRjYjg4MTJhMjIxMWFkNTdlNjc1ZWUyOWNkNWVhN2UzMTE1IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTUgQEAKKzIwMjEtMDUtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWls
ZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIEFkZGVkIGluY2x1ZGUgb2YgU3RyaW5nQ29u
Y2F0ZW5hdGVDRi5oLgorICAgICAgICBBZGRlZCBTdHJpbmdUeXBlQWRhcHRlciBmb3IgV0tTdHJp
bmdSZWYuCisgICAgICAgIChXVFI6OnN0eWxlRGVjVG9TdHIpOiBVc2UgQVNDSUlMaXRlcmFsIGlu
c3RlYWQgb2YgU3RyaW5nQnVpbGRlci4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVtb3ZlZCB1
bm5lZWRlZCB0b1dURlN0cmluZyBzaW5jZSB0aGUgV0tTdHJpbmdSZWYKKyAgICAgICAgU3RyaW5n
VHlwZUFkYXB0ZXIgdGFrZXMgY2FyZSBvZiBpdC4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVu
YW1lZCBmcm9tIGZyYW1lVG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpkdW1w
UmVzb3VyY2VVUkwpOiBVc2UgYXBwZW5kIGluc3RlYWQgb2YgYXBwZW5kTGl0ZXJhbC4KKyAgICAg
ICAgKFdUUjo6ZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RSOjpkdW1wTG9hZEV2ZW50KTogVXNlIG1ha2VTdHJpbmcuCisgICAg
ICAgIChXVFI6OnN0cmluZyk6IFJlbmFtZWQgZnJvbSBhIGxvbmdlciBuYW1lLiBSZXR1cm4gYSBT
dHJpbmcKKyAgICAgICAgaW5zdGVhZCBvZiBidWlsZGluZyBpbiBhIFN0cmluZ0J1aWxkZXIuIFVz
ZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBSZW1vdmVkCisg
ICAgICAgIHVubmVlZGVkIHRvV1RGU3RyaW5nLgorICAgICAgICAoV1RSOjpkdW1wRnJhbWVTY3Jv
bGxQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpkdW1wRGVzY2VuZGFudEZyYW1lc1Rl
eHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNX
ZWJBcmNoaXZlKTogUmVtb3ZlZCBhbgorICAgICAgICB1bm5lZWRlZCBsb2NhbCB2YXJpYWJsZS4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKTogUmVtb3ZlZCB1bm5lZWRl
ZCB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNl
aXZlVGl0bGVGb3JGcmFtZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKToKKyAgICAgICAgVXBkYXRlZCBmb3Ig
ZnVuY3RvbiBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3
aWxsU2VuZFJlcXVlc3RGb3JGcmFtZSk6IERpdHRvLgorICAgICAgICBBbHNvIHVzZSB2YXJpYWRp
YyBhcHBlbmQuIEFsc28gdXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsTG9hZEZvclJlc291
cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbEFkZE1lc3NhZ2VUb0NvbnNvbGUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0
UHJvbXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhj
ZWVkRGF0YWJhc2VRdW90YSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZEluc2VydE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpzaG91bGRJbnNlcnRUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkRGVsZXRlUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQXBwbHlTdHlsZSk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlzdG9yeSk6IERp
dHRvLgorCiAyMDIxLTA1LTE1ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4K
IAogICAgICAgICByZXBvcnQtbm9uLWluY2x1c2l2ZS1sYW5ndWFnZSBzaG91bGQgc2tpcCBub2Rl
X21vZHVsZXMgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKaW5kZXggYWJkM2FmZGU5
MWYwOGU4Nzk0ZjEwYWJkNmQxMGRjMzg4ZDQ1YjI4NC4uMWRlY2YzMDczYWFmMzE0NWIxZDliOTcy
NWI1Y2Q1YmUzYTI3NzJlNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcApAQCAtNTIsMTIgKzUy
LDQ2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9T
dHJpbmdDb25jYXRlbmF0ZUNGLmg+CisjZW5kaWYKKwogI2lmIFVTRShDRikgJiYgIVBMQVRGT1JN
KFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKICNpbmNsdWRlICJXZWJBcmNoaXZlRHVtcFN1
cHBvcnQuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxXS1N0cmluZ1JlZj4gewor
cHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKFdLU3RyaW5nUmVmKTsKKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IFdLU3RyaW5nR2V0TGVuZ3RoKG1f
c3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cmlu
ZzsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhD
aGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV0tTdHJpbmdSZWYgbV9zdHJp
bmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+OjpTdHJpbmdU
eXBlQWRhcHRlcihXS1N0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0cmluZyB7IHN0cmluZyB9
Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJp
bmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciopIGNvbnN0Cit7Cit9CisKK3RlbXBsYXRlPD4g
aW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFy
PihVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAg
ICBXS1N0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIHJlaW50ZXJwcmV0X2Nhc3Q8V0tDaGFy
Kj4oZGVzdGluYXRpb24pLCBXS1N0cmluZ0dldExlbmd0aChtX3N0cmluZykpOworfQorCit9CisK
IG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eShX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKQpAQCAtODksNyArMTIzLDcg
QEAgc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLAogICAgIHJldHVybiBkdW1wUGF0aChjb250ZXh0LCBu
b2RlT2JqZWN0KTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHJhbmdlVG9TdHIoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxlUmFuZ2VI
YW5kbGVSZWYgcmFuZ2VSZWYpCitzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIHJhbmdlUmVmKQogewogICAgIGlmICghcmFuZ2VSZWYpCiAgICAgICAgIHJldHVybiAi
KG51bGwpIjsKQEAgLTEzMCw0MyArMTY0LDI2IEBAIHN0YXRpYyBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdhdGlvblR5cGUgdHlwCiAg
ICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5n
IHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQorc3Rh
dGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9u
UmVmKQogewogICAgIC8vIER1bXBSZW5kZXJUcmVlIGNhbGxzIC1bRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiBkZXNjcmlwdGlvbl0sIHdoaWNoIGp1c3QgZHVtcHMgY2xhc3MgbmFtZSBhbmQgb2JqZWN0
IGFkZHJlc3MuCiAgICAgLy8gTm8gZXhpc3RpbmcgdGVzdHMgYWN0dWFsbHkgaGl0IHRoaXMgY29k
ZSBwYXRoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgYmVjYXVzZSBXZWJDb3JlIGRvZXNu
J3QgY2FsbAogICAgIC8vIHRoZSBlZGl0aW5nIGNsaWVudCBpZiB0aGUgc3R5bGluZyBvcGVyYXRp
b24gc291cmNlIGlzIENvbW1hbmRGcm9tRE9NIG9yIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRl
cmZhY2UuCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiPERPTUNTU1N0eWxlRGVjbGFyYXRpb24gQUREUkVTUz4iKTsKLSAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiAiPERPTUNTU1N0
eWxlRGVjbGFyYXRpb24gQUREUkVTUz4iX3M7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBzdHJp
bmcoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
J3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3Jp
Z2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9z
dChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG9yaWdpbiksICd9Jyk7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5
UHJvdG9jb2wob3JpZ2luKSkuZ2V0KCksICIsICIsIGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNv
cHlIb3N0KG9yaWdpbikpLmdldCgpLCAiLCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmln
aW4pLCAnfScpOwogfQogCi1zdGF0aWMgV1RGOjpTdHJpbmcgZnJhbWVUb1N0cihXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lKQogewogICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGlmIChXS0J1
bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0Vt
cHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIm1haW4gZnJhbWUgXCIiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJtYWluIGZyYW1lIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1w
dHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiZnJhbWUgXCIiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG5hbWUpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworICAgIGJvb2wgaXNNYWluID0gV0tCdW5kbGVGcmFtZUlzTWFp
bkZyYW1lKGZyYW1lKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gaXNNYWluID8gIm1haW4gZnJhbWUiX3MgOiAiZnJhbWUgKGFub255bW91cyki
X3M7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoaXNNYWluID8gIm1haW4gZnJhbWUgXCIiIDogImZy
YW1lIFwiIiwgbmFtZS5nZXQoKSwgJyInKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzTG9j
YWxGaWxlU2NoZW1lKFdLU3RyaW5nUmVmIHNjaGVtZSkKQEAgLTIxMCw3ICsyMjcsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgZHVtcFJlc291cmNlVVJMKHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0cmlu
Z0J1aWxkZXImIHN0cmluZ0J1aQogICAgIGlmIChhc3NpZ25lZFVybHNDYWNoZSgpLmNvbnRhaW5z
KGlkZW50aWZpZXIpKQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhc3NpZ25lZFVybHND
YWNoZSgpLmdldChpZGVudGlmaWVyKSk7CiAgICAgZWxzZQotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIjx1bmtub3duPiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiPHVua25vd24+Iik7CiB9CiAKIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQ
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQpAQCAtMzkzLDc2ICs0MTAsNDMgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0KCkKIAogLy8gTG9hZGVyIENsaWVudCBDYWxs
YmFja3MKIAotLy8gU3RyaW5nIG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1l
IF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdLgotc3RhdGljIHZvaWQgZHVt
cEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKLXsKLSAgICBhdXRvIG5hbWUgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAgIGlmIChXS0J1bmRsZUZy
YW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFt
ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFp
biBmcmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJyInKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChXS1N0cmlu
Z0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSBcIiIpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
IicpOwotfQotCiBzdGF0aWMgdm9pZCBkdW1wTG9hZEV2ZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7Ci0gICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJh
bWUsIHN0cmluZ0J1aWxkZXIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0g
Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZXZlbnROYW1lKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAtICIsIGV2ZW50
TmFtZSwgJ1xuJykpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlcikKK3N0YXRpYyBTdHJpbmcgc3RyaW5nKFdLVVJMUmVxdWVz
dFJlZiByZXF1ZXN0KQogewogICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKICAgICBhdXRvIGZpcnN0UGFydHkgPSBhZG9wdFdLKFdLVVJMUmVxdWVz
dENvcHlGaXJzdFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7CiAgICAgYXV0byBodHRwTWV0aG9k
ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0KSk7Ci0KLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TVVJMUmVxdWVzdCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9y
VGVzdFJlc3VsdCh1cmwuZ2V0KCkpLCAiLCBtYWluIGRvY3VtZW50IFVSTCAiLCBwYXRoU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpLCAiLCBodHRwIG1ldGhvZCAiKTsKLSAg
ICBpZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpKQotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIihub25lKSIpOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoaHR0cE1ldGhvZCkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlcXVlc3QgVVJM
ICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAgICAgIiwgbWFp
biBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5Lmdl
dCgpKSwKKyAgICAgICAgIiwgaHR0cCBtZXRob2QgIiwgV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRo
b2QuZ2V0KCkpID8gIihub25lKSIgOiAiIiwgaHR0cE1ldGhvZC5nZXQoKSwgJz4nKTsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1
aWxkZXIsIGJvb2wgc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlKQorc3RhdGljIFN0
cmluZyBzdHJpbmcoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgYm9vbCBzaG91bGREdW1wUmVz
cG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7CiAgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVz
cG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAgaWYgKCF1cmwpIHsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlm
ICghdXJsKQorICAgICAgICByZXR1cm4gIihudWxsKSJfczsKKyAgICBpZiAoIXNob3VsZER1bXBS
ZXNwb25zZUhlYWRlcnMpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlc3Bv
bnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAgICAgICAg
ICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tVUkxSZXNwb25zZUhUVFBTdGF0dXNDb2RlKHJlc3Bv
bnNlKSwgJz4nKTsKICAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlc3Bv
bnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgaHR0cCBzdGF0
dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpKTsKLSAgICBp
ZiAoc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycykKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIiwgIiwgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KHJlc3BvbnNl
KSwgIiBoZWFkZXJzIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZygiPE5TVVJMUmVzcG9uc2UgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCh1cmwuZ2V0KCkpLAorICAgICAgICAiLCBodHRwIHN0YXR1cyBjb2RlICIsIFdLVVJMUmVzcG9u
c2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSksCisgICAgICAgICIsICIsIEluamVjdGVkQnVuZGxl
UGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNwb25zZSksICIgaGVhZGVycz4iKTsKIH0KIAog
I2lmICFQTEFURk9STShDT0NPQSkKLS8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igbm9uIGNv
Y29hIHBvcnRzLgotLy8gICAgICAgIFtHVEtdW1dQRV0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NDI5NQorCisvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG5v
bi1Db2NvYSBwb3J0cy4gW0dUS11bV1BFXSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg0Mjk1CiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVh
ZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKICAgICByZXR1cm4gMDsKIH0K
KwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChXS0Vycm9yUmVmIGVycm9yLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdC
dWlsZGVyKQpAQCAtNDgwLDcgKzQ2NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JE
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0Vycm9yUmVmIGVycm9yLCBTCiAKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TRXJyb3IgZG9tYWluICIsIGVycm9yRG9tYWluLCAi
LCBjb2RlICIsIGVycm9yQ29kZSk7CiAgICAgaWYgKGF1dG8gdXJsID0gYWRvcHRXSyhXS0Vycm9y
Q29weUZhaWxpbmdVUkwoZXJyb3IpKSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwg
ZmFpbGluZyBVUkwgXCIiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwu
Z2V0KCkpKSksICciJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZhaWxpbmcg
VVJMIFwiIiwgYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkuZ2V0KCksICciJyk7
CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKIH0KIApAQCAtNzAwLDcgKzY4NCw3IEBA
IHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIFN0cmluZ0J1aWxkZXImIHN0cmluCiAgICAgaWYgKGZhYnMoeCkgPD0gMC4wMDAwMDAwMSAm
JiBmYWJzKHkpIDw9IDAuMDAwMDAwMDEpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoc2hvdWxk
SW5jbHVkZUZyYW1lTmFtZSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoImZyYW1lICci
LCB0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpKSwgIicg
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAnIiwgYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKS5nZXQoKSwgIicgIik7CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoInNjcm9sbGVkIHRvICIsIHgsICcsJywgeSwgJ1xuJyk7CiB9CiAKQEAgLTc1OCw5
ICs3NDIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaQogICAgICAgICBpZiAoIWhhc0RvY3Vt
ZW50RWxlbWVudChzdWJmcmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHN1YmZyYW1lTmFtZSkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIidcbi0tLS0tLS0tXG4iKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIiwgc3ViZnJhbWVO
YW1lLmdldCgpLCAiJ1xuLS0tLS0tLS1cbiIpOwogCiAgICAgICAgIGR1bXBGcmFtZVRleHQoc3Vi
ZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQo
c3ViZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwpAQCAtNzgwLDggKzc2Miw3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFN0cmluZ0J1aWxkCiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNF
KERJUkVDVDJEKQogICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdl
YkFyY2hpdmUoZnJhbWUpKTsKICAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
KDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdl
dCgpKSkpOwotICAgIGF1dG8gY2ZTdHJpbmcgPSBXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhN
TFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGNmU3RyaW5nLmdldCgpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXZWJD
b3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEu
Z2V0KCkpLmdldCgpKTsKICNlbmRpZgogfQogCkBAIC04MDcsOSArNzg4LDkgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAgIHN3aXRjaCAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT53aGF0VG9EdW1wKCkpIHsKICAgICBjYXNlIFdoYXRUb0R1bXA6OlJlbmRlclRyZWU6
IHsKICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQcmludGluZygp
KQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhX
S0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGlu
ZyhtX3BhZ2UpKS5nZXQoKSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYWRv
cHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQ
cmludGluZyhtX3BhZ2UpKS5nZXQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRl
clRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fcGFnZSwgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5yZW5kZXJUcmVlRHVtcE9wdGlvbnMoKSkpLmdldCgpKSk7CisgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJUcmVlRXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
cmVuZGVyVHJlZUR1bXBPcHRpb25zKCkpKS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIFdoYXRUb0R1bXA6Ok1haW5GcmFtZVRleHQ6CkBAIC04OTAsMTkgKzg3MSwxMCBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tTdHJp
bmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURl
c2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlVGl0bGU6ICIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpIHsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJUSVRMRSBDSEFOR0VEOiAnIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJ1xuIik7Ci0gICAgfQotCisgICAgaWYgKGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdHJpbmcoZnJhbWUpLCAiIC0gZGlkUmVjZWl2
ZVRpdGxlOiAiLCB0aXRsZSwgJ1xuJyk7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiVElUTEUgQ0hBTkdFRDogJyIsIHRpdGxlLCAiJ1xuIik7CiAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCkBAIC05NTEsMTAg
KzkyMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUGVyZm9ybUNsaWVudFJlZGly
ZWN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGR1bXBGcmFt
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRv
VVJMOiAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybCksICdcbicpOwotICAgIGluamVj
dGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmpl
Y3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAtIHdpbGxQ
ZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1
cmwpLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uVHlwZSB0eXBlKQpAQCAtOTgyLDcgKzk1MSw3IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWUiKTsKIAogICAgIGlmICh1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVu
dHMgPSBXS0J1bmRsZUZyYW1lR2V0UGVuZGluZ1VubG9hZENvdW50KGZyYW1lKSkKLSAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKGZyYW1lVG9TdHIoZnJhbWUpLCAi
IC0gaGFzICIsIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cywgIiBvbnVubG9hZCBoYW5kbGVyKHMp
XG4iKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZyhzdHJp
bmcoZnJhbWUpLCAiIC0gaGFzICIsIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cywgIiBvbnVubG9h
ZCBoYW5kbGVyKHMpXG4iKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5k
bGVPbmxvYWRFdmVudHNGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQpAQCAtMTA0OSwx
MSArMTAxOCw4IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5k
UmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgICYmIGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7
CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgZHVtcFJlc291
cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiAtIHdpbGxTZW5kUmVxdWVzdCAiKTsKLSAgICAgICAgZHVtcFJlcXVl
c3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJpbmdCdWlsZGVy
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVkaXJlY3RSZXNwb25z
ZSAiKTsKLSAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEFsbEhUVFBSZWRpcmVjdGVkUmVzcG9uc2VIZWFkZXJzKCkpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiAtIHdpbGxTZW5kUmVxdWVzdCAiLCBzdHJpbmcocmVxdWVzdCksCisgICAgICAgICAgICAiIHJl
ZGlyZWN0UmVzcG9uc2UgIiwgc3RyaW5nKHJlc3BvbnNlLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBBbGxIVFRQUmVkaXJlY3RlZFJlc3BvbnNlSGVhZGVycygpKSwgJ1xu
Jyk7CiAgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKICAgICB9CiAKQEAgLTEwODYsMTEgKzEwNTIsNyBAQCBXS1VSTFJlcXVlc3RSZWYg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZQogICAgICAgICAgICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlzSFRUUE9ySFRUUFNT
Y2hlbWUobWFpbkZyYW1lU2NoZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3QobWFpbkZyYW1lSG9z
dC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJc0V4dGVybmFsICYm
ICFpc0FsbG93ZWRIb3N0KGhvc3QuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAi
LCB1cmxTdHJpbmcuZ2V0KCksICdcbicpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTExNyw5ICsxMDc5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS0IKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwogICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVJlc3Bv
bnNlICIpOwotICAgICAgICBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChyZXNwb25zZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCdcbicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkUmVjZWl2ZVJl
c3BvbnNlICIsIHN0cmluZyhyZXNwb25zZSksICdcbicpOwogICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCkBAIC0xMTMy
LDE0ICsxMDkyLDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9u
c2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgYXV0byBtaW1lVHlw
ZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlwZShyZXNwb25zZSkpOwog
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIGhhcyBNSU1FIHR5cGUgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcobWltZVR5cGVTdHJpbmcpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1cmxTdHJp
bmcuZ2V0KCksICIgaGFzIE1JTUUgdHlwZSAiLCBtaW1lVHlwZVN0cmluZy5nZXQoKSk7CiAKICAg
ICBTdHJpbmcgcGxhdGZvcm1NaW1lVHlwZSA9IHBsYXRmb3JtUmVzcG9uc2VNaW1lVHlwZShyZXNw
b25zZSk7CiAgICAgaWYgKCFwbGF0Zm9ybU1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwbGF0Zm9ybU1p
bWVUeXBlICE9IHRvV1RGU3RyaW5nKG1pbWVUeXBlU3RyaW5nKSkgewotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBidXQgcGxhdGZvcm0gcmVzcG9uc2UgaGFzICIpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwbGF0Zm9ybU1pbWVUeXBlKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiBidXQgcGxhdGZvcm0gcmVzcG9uc2UgaGFzICIsIHBsYXRmb3Jt
TWltZVR5cGUpOwogICAgIH0KIAogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAt
MTE2Miw3ICsxMTE5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaExvYWRG
b3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWUKIAogICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3Ry
aW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGaW5p
c2hMb2FkaW5nXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkRmluaXNoTG9h
ZGluZ1xuIik7CiAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCkBAIC0xMTc3LDcgKzExMzQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJh
bWVSZQogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGR1bXBSZXNvdXJj
ZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICIpOwogCiAgICAgZHVtcEVy
cm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJyb3IsIHN0cmluZ0J1aWxkZXIp
OwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAtMTE5OSw3ICsxMTU2LDYgQEAg
Ym9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENhY2hlUmVzcG9uc2UoV0tCdW5kbGVQYWdl
UmVmLCBXS0J1bmRsZUZyYW1lUmVmLAogICAgIHJldHVybiB0cnVlOwogfQogCi0KIC8vIFBvbGlj
eSBDbGllbnQgQ2FsbGJhY2tzCiAKIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJl
ZiBuYXZpZ2F0aW9uQWN0aW9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tUeXBlUmVmKiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTEyMjksMTMgKzExODUsOSBAQCBX
S0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5
QWN0aW9uVXNlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFBvbGljeUNhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uXG4iKTsKLSAgICAgICAgZHVtcFJlcXVlc3REZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIiwgV0tCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5
ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiIC0gZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIiwgc3RyaW5nKHJlcXVlc3QpLAorICAgICAgICAgICAg
IiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5
ZXMiIDogIm5vIiwKKyAgICAgICAgICAgICIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0g
IiwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZp
Z2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIiwgJ1xuJykpOwogICAgIH0KIAogICAgIGlmICgh
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgpKQpA
QCAtMTI0NSwxOSArMTE5NywxNiBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgIGF1dG8g
dXJsU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CiAKICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CiAgICAgaWYg
KGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpCi0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQo
dXJsLmdldCgpKSkpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYWRvcHRXSyhXS1VS
TENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKS5nZXQoKSk7CiAgICAgZWxzZQotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyh1cmwuZ2V0KCkpKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHdp
dGggbmF2aWdhdGlvbiB0eXBlIFwnIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRO
YXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlwnIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0so
V0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdldCgpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIiwgTmF2aWdhdGlvblR5cGVUb1N0cmluZyhX
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9u
KSkuZ2V0KCksICdcJycpOwogICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikp
OwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7CiAgICAgICAgIGF1dG8gbm9kZUhhbmRsZVJl
ZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJl
c3VsdFJlZi5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBv
cmlnaW5hdGluZyBmcm9tICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0
aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiBvcmlnaW5hdGluZyBmcm9tICIsIGR1bXBQYXRoKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgbm9kZUhhbmRsZVJlZi5nZXQoKSkpOwogICAgIH0KIAogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAtMTI3Nyw3ICsxMjI2LDcgQEAgV0tCdW5kbGVQ
YWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9u
c2UoV0tCdW5kbGVQYWcKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpICYm
IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSAm
JiBXS1VSTFJlc3BvbnNlSXNBdHRhY2htZW50KHJlc3BvbnNlKSkgewotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVsZWdh
dGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciLCB0
b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVz
cG9uc2UpKSksICJcJ1xuIikpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
b3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0
dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciLCBhZG9wdFdLKFdLVVJMUmVzcG9uc2VD
b3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9uc2UpKS5nZXQoKSwgIidcbiIpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91Z2g7CkBAIC0xMzY3
LDcgKzEzMTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbEFkZE1lc3NhZ2VUb0Nv
bnNvbGUoV0tTdHJpbmdSZWYgbWVzc2FnZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjpTdHJpbmcgbWVzc2FnZVN0
cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOworICAgIGF1dG8gbWVzc2FnZVN0cmluZyA9IHRv
V1RGU3RyaW5nKG1lc3NhZ2UpOwogICAgIHNpemVfdCBudWxsQ2hhclBvcyA9IG1lc3NhZ2VTdHJp
bmcuZmluZChVQ2hhcigwKSk7CiAgICAgaWYgKG51bGxDaGFyUG9zICE9IFdURjo6bm90Rm91bmQp
CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcudHJ1bmNhdGUobnVsbENoYXJQb3MpOwpAQCAtMTM5Myw3
ICsxMzQyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJUZXh0
KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBT
VEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6IiwgdG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4
dCksICdcbicpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJ
IERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCBzdGF0dXNiYXJUZXh0
LCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlw
dEFsZXJ0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0xNDE2LDcg
KzEzNjUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRDb25m
aXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRgogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdHJp
bmdSZWYgZGVmYXVsdFZhbHVlLCBXS0J1bmRsZUZyYW1lUmVmKQogewotICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBST01QVDogIiwgdG9XVEZT
dHJpbmcobWVzc2FnZSksICIsIGRlZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5nU3BhY2VTdHJpcFRy
YWlsaW5nU3BhY2VzQWRkTmV3bGluZSh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKSkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBST01Q
VDogIiwgbWVzc2FnZSwgIiwgZGVmYXVsdCB0ZXh0OiIsIGFkZExlYWRpbmdTcGFjZVN0cmlwVHJh
aWxpbmdTcGFjZXNBZGROZXdsaW5lKHRvV1RGU3RyaW5nKGRlZmF1bHRWYWx1ZSkpKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgaW50NjRfdCB0b3RhbEJ5dGVzTmVlZGVk
KQpAQCAtMTQ0Miw3ICsxMzkxLDcgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRF
eGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLAogewogICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNr
cygpKQotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERF
TEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCB0b1dURlN0cmluZyhkYXRh
YmFzZU5hbWUpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFr
ZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VR
dW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIGRhdGFiYXNlOiIsIGRh
dGFiYXNlTmFtZSwgJ1xuJykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEw
MjQgKiAxMDI0OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTUyNSw3ICsxNDc0LDcg
QEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIHJhbmdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0g
ICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxF
R0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwg
bV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5n
SW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicp
KTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0Vk
aXRpbmcoKTsKIH0KIApAQCAtMTUzNiw3ICsxNDg1LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRP
TVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicp
KTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTU0NiwyMiArMTQ5
NSwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZShXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgbm9kZSwgV0tCdW5kbGVSYQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUu
aXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewogICAgICAgICAiV2ViVmlld0luc2Vy
dEFjdGlvblR5cGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQiLAogICAg
ICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKICAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIG5vZGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVw
bGFjaW5nRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9T
dHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAgIiBzaG91
bGRJbnNlcnROb2RlOiIsIGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZSksCisg
ICAgICAgICAgICAiIHJlcGxhY2luZ0RPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIHJhbmdlVG9SZXBsYWNlKSwKKyAgICAgICAgICAgICIgZ2l2ZW5BY3Rpb246IiwgaW5z
ZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0sICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNTcy
LDIyICsxNTE2LDE3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnRUZXh0
KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSCiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIgKmluc2VydGFjdGlvbnN0cmluZ1tdID0geworICAgIHN0YXRpYyBjb25z
dGV4cHIgY29uc3QgY2hhciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CiAgICAgICAgICJXZWJW
aWV3SW5zZXJ0QWN0aW9uVHlwZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblBhc3Rl
ZCIsCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uRHJvcHBlZCIsCiAgICAgfTsKIAogICAg
IGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2Vy
dFRleHQ6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHQp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVwbGFjaW5nRE9NUmFu
Z2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAgIiBzaG91bGRJbnNlcnRUZXh0
OiIsIHRleHQsCisgICAgICAgICAgICAiIHJlcGxhY2luZ0RPTVJhbmdlOiIsIHN0cmluZyhtX3Bh
Z2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSwKKyAgICAgICAgICAgICIgZ2l2ZW5B
Y3Rpb246IiwgaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0sICdcbicpKTsKICAgICB9CiAgICAg
cmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7
CiB9CkBAIC0xNTk4LDEzICsxNTM3LDggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3Vs
ZERlbGV0ZVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmpl
Y3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRl
RE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURPTVJh
bmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAg
IHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygp
OwogfQogCkBAIC0xNjE0LDI3ICsxNTQ4LDE3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgZnJvbVJhCiAg
ICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmFmZmluaXR5c3RyaW5nW10gPSB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBhZmZpbml0eXN0cmluZ1tdID0gewogICAgICAg
ICAiTlNTZWxlY3Rpb25BZmZpbml0eVVwc3RyZWFtIiwKICAgICAgICAgIk5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIgogICAgIH07Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJvb2xzdHJp
bmdbXSA9IHsKLSAgICAgICAgIkZBTFNFIiwKLSAgICAgICAgIlRSVUUiCi0gICAgfTsKIAogICAg
IGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdl
VG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG9ET01SYW5nZToiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgYWZmaW5pdHk6Iik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFmZmluaXR5c3RyaW5nW2FmZmluaXR5XSk7IAotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzdGlsbFNlbGVjdGluZzoiKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm9vbHN0cmluZ1tzdGlsbFNlbGVjdGluZ10pOyAK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVu
ZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAg
ICAgICAgICIgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpLAorICAgICAgICAgICAgIiB0b0RPTVJhbmdlOiIsIHN0
cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpLAorICAgICAgICAgICAgIiBhZmZp
bml0eToiLCBhZmZpbml0eXN0cmluZ1thZmZpbml0eV0sCisgICAgICAgICAgICAiIHN0aWxsU2Vs
ZWN0aW5nOiIsIHN0aWxsU2VsZWN0aW5nID8gIlRSVUUiIDogIkZBTFNFIiwgJ1xuJykpOwogICAg
IH0KICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0Vk
aXRpbmcoKTsKIH0KQEAgLTE2NDYsMTMgKzE1NzAsOSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFn
ZTo6c2hvdWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUs
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
RURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc3R5bGVEZWNUb1N0cihzdHlsZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVj
dGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURToiCisgICAg
ICAgICAgICAiIHNob3VsZEFwcGx5U3R5bGU6Iiwgc3R5bGVEZWNUb1N0cihzdHlsZSksCisgICAg
ICAgICAgICAiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIH0KICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE2NjUsMTEgKzE1ODUs
NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVnaW5FZGl0aW5nKFdLU3RyaW5nUmVm
IG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6Iik7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6Iiwg
bm90aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTY4MCwxMSAr
MTU5Niw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFdLU3RyaW5n
UmVmIG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiIpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiLCBu
b3RpZmljYXRpb25OYW1lLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTE2OTUsMTEgKzE2MDcs
NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlm
aWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iiwgbm90aWZpY2F0aW9uTmFtZSwg
J1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9u
KFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xNzEwLDExICsxNjE4LDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBub3Rp
ZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCht
YWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIs
IG5vdGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTE3ODMsNyArMTY4Nyw3IEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBI
aXN0b3J5KCkKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygKICAgICAgICAgIlxuPT09PT09PT09
PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIsCi0gICAgICAgIHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlRHVtcEhpc3RvcnlGb3JUZXN0aW5nKG1fcGFnZSwg
dG9XSygiL0xheW91dFRlc3RzLyIpLmdldCgpKSkuZ2V0KCkpLAorICAgICAgICBhZG9wdFdLKFdL
QnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UsIHRvV0soIi9MYXlvdXRUZXN0
cy8iKS5nZXQoKSkpLmdldCgpLAogICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT1cbiIKICAgICApOwogfQo=
</data>
<flag name="commit-queue"
          id="449784"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428759</attachid>
            <date>2021-05-15 18:41:40 -0700</date>
            <delta_ts>2021-05-16 09:49:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210515184139.patch</filename>
            <type>text/plain</type>
            <size>138629</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBmYTFjNzdhYjQ5Y2Y1YzQ1YWYyOGVi
NmU0NGNhNWJkODJiNmRlMjEuLjllNTFhZjczMGZhOGYwNGU4NmIzMWZmOWYyZGU1MzkyZjdlOWJl
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTgzIEBACisyMDIxLTA1LTE1ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBw
b3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgaGVhZGVyIG1h
a2VzIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyB3b3JrIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRp
b24sCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IG5vdyB3b3JrcyB3aXRoIHRoZSB2YXJpYWRpYyBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgYW5kIG1ha2VTdHJpbmcsCisgICAgICAgIGFuZCBzdGlsbCB3
b3JrcyB3aXRoIHRoZSBzaW5nbGUtYXJndW1lbnQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kLiBNb3Jl
IGVmZmljaWVudAorICAgICAgICB0aGF0IHRoZSBvbGQgdmVyc2lvbiBiZWNhdXNlIGl0IGRvZXMg
bm90IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IFdURjo6U3RyaW5nIGZvcgorICAgICAgICB0aGUgMTYt
Yml0IGNoYXJhY3RlciBwYXRoLgorCisgICAgICAgIEFsc28gbWFkZSBtYW55IG90aGVyIHNtYWxs
IGltcHJvdmVtZW50cyB0byB0aGUgU3RyaW5nQnVpbGRlciBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBTdHJpbmdDb25jYXRl
bmF0ZUNGLmguCisKKyAgICAgICAgKiB3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaDogUmVtb3ZlZCBD
b25kaXRpb25hbENyYXNoT25PdmVyZmxvdywgd2hpY2ggd2FzIG9ubHkKKyAgICAgICAgaGVyZSBm
b3IgdXNlIGJ5IFN0cmluZ0J1aWxkZXIsIHdoaWNoIGRvZXMgbm90IHVzZSBDaGVja2VkQXJpdGht
ZXRpYyBhbnkgbW9yZS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUZUVy5jbWFrZTogQWRkZWQg
U3RyaW5nQ29uY2F0ZW5hdGVDRi5oLi4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1NYWMuY21ha2U6
IERpdHRvLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVdpbi5jbWFrZTogRGl0dG8uCisKKyAgICAg
ICAgKiB3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oOiBNb3ZlZCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGluc2lkZSB0aGUKKyAgICAgICAgV1RGIG5hbWVzcGFjZS4KKyAgICAgICAgKFdURjo6
c2lnbmVkQWRkSW50MzJPdmVyZmxvd3MpOiBSZW5hbWVkIHRoaXMgZnVuY3Rpb24uIFRoZSB0eXBl
IGhlcmUgaXMKKyAgICAgICAgaW1wb3J0YW50LCBhbmQgd2UgYXJlIG5vdCBkb2luZyBhbnl0aGlu
ZyB0byBwcmV2ZW50IHR5cGUgY29udmVyc2lvbiBvcgorICAgICAgICBjcmVhdGUgYW1iaWd1aXR5
LCBzbyBpdCdzIGdvb2QgdG8gYmUgZXhwbGljaXQgaW4gdGhlIGZ1bmN0aW9uIG5hbWUuCisgICAg
ICAgIChXVEY6OnNhdHVyYXRlZFN1bTxpbnQzMl90Pik6IFJlbmFtZWQgdGhpcyBmcm9tIHNhdHVy
YXRlZEFkZGl0aW9uIGZvcgorICAgICAgICBjbGFyaXR5LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBh
IHN1bSwgc28gdGhhdCdzIGEgYmV0dGVyIG5hbWUgdGhhbiBjYWxsaW5nCisgICAgICAgIGl0ICJh
ZGRpdGlvbiIuIEFsc28sIGl0J3MgY2xlYXJlciB0byBiZSBleHBsaWNpdCBhYm91dCB0aGUgcmV0
dXJuIHR5cGUuCisgICAgICAgIChXVEY6OnNpZ25lZFN1YnRyYWN0SW50MzJPdmVyZmxvd3MpOiBS
ZW5hbWVkLiBTYW1lIHJlYXNvbiBhcyBhYm92ZS4KKyAgICAgICAgKFdURjo6c2F0dXJhdGVkRGlm
ZmVyZW5jZTxpbnQzMl90Pik6IERpdHRvLgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWRTdW0pOiBB
ZGRlZC4gRG9lcyB1bnNpZ25lZCBpbnRlZ2VyIHNhdHVyYXRlZCBhZGRpdGlvbi4KKyAgICAgICAg
VGhpcyBvbmUgY2FuIGJlIHdyaXR0ZW4gaW4gYSBwb3J0YWJsZSBtYW5uZXIgYW5kIHN0aWxsIGdl
dCByZWFsbHkKKyAgICAgICAgZWZmaWNpZW50IGNvZGUgb24gYXQgbGVhc3QgSW50ZWwgYW5kIEFS
TTY0LgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWRTdW0pOiBBZGRlZCBhIGZ1bmN0aW9uIHRlbXBs
YXRlIHRoYXQgbGV0cyBjYWxsZXJzIHBhc3MKKyAgICAgICAgbGFyZ2VyIG51bWJlciBvZiBhcmd1
bWVudHMgdG8gc2F0dXJhdGVkU3VtLCByYXRoZXIgdGhhbiBleGFjdGx5IHR3by4KKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV1RGOjpleHBhbmRlZENh
cGFjaXR5KTogUmVuYW1lZCB0byB1c2UgdGhlIHRlcm0gY2FwYWNpdHkgcmF0aGVyIHRoYW4KKyAg
ICAgICAgbGVuZ2h0IGZvciB0aGUgbmV3IHJlcXVpcmVkIGNhcGFjaXR5LgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZyBjb25zdCk6IENoYW5nZWQgdGhlIG92ZXJmbG93
IGNoZWNrCisgICAgICAgIGludG8gYSBSRUxFQVNFX0FTU0VSVC4gVGhpcyBpcyBub3cgcmVzcG9u
c2libGUgZm9yIGRvaW5nIHRoZSBjaGVjayB0aGF0CisgICAgICAgIGNhbGxlcnMgd2VyZSBkb2lu
ZyBlYXJsaWVyLCBzbyB3ZSB3YW50IGl0IGluIHByb2R1Y3Rpb24gYnVpbGRzLiBBbHNvCisgICAg
ICAgIHNpbXBsaWZpZWQgdGhpcyBzaW5jZSBvdXIgbV9sZW5ndGggbWVtYmVyIGlzIGEgc2ltcGxl
IGludGVnZXIgbm93LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOiBGaXhl
ZCB0aGUgb3ZlcmZsb3cgY2hlY2sgdG8gd29yayBwcm9wZXJseQorICAgICAgICBldmVuIGluIHRo
ZSAicmVjb3JkIG92ZXJmbG93IiBtb2RlLiBXZSBub3cgZG8gaXQgZXhwbGljaXRseSBpbnN0ZWFk
CisgICAgICAgIG9mIHJlbHlpbmcgb24gbV9sZW5ndGggYXNzaWdubWVudCwgc28gd2Uga25vdyB0
byByZXR1cm4gZWFybHkuIFRoZSBvbGQKKyAgICAgICAgY29kZSBoYWQgYW4gYXNzZXJ0aW9uIGlu
c3RlYWQsIHdoaWNoIGRpZCBub3QgZ29vZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy4KKyAgICAgICAg
KFdURjo6U3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIpOiBSZXBsYWNlZCB0d28gc2VwYXJh
dGUgZnVuY3Rpb25zCisgICAgICAgIHdpdGggYSBzaW5nbGUgc2ltcGxlciBmdW5jdGlvbiB0ZW1w
bGF0ZS4gQWxzbyBjaGFuZ2VkIHRoaXMgc2luY2UgdGhlCisgICAgICAgIG1fYnVmZmVyQ2hhcmFj
dGVycyBkYXRhIG1lbWJlciBpcyBub3cgYWx3YXlzIGRlZmluZWQgYXMgYW4gTENoYXIqLAorICAg
ICAgICBldmVuIHRob3VnaCBzb21ldGltZXMgaXQncyBhIFVDaGFyKiB0aGF0IGhhcyBiZWVuIGNv
bnZlcnRlZCB3aXRoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3QuIFJlbW92ZWQgZXh0cmEgb3Zl
cmZsb3cgY2hlY2tzIGJlY2F1c2UgdGhlCisgICAgICAgIFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQgZnVuY3Rpb24gYWxyZWFkeSBkb2VzIHRoZSBvbmx5CisgICAgICAgIG92ZXJm
bG93IGNoZWNrIHdlIG5lZWQuIEFsc28gbW92ZSB0byBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVy
cworICAgICAgICBmb3IgY29weWluZyBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIHVzaW5nIHN0ZDo6
bWVtY3B5IGRpcmVjdGx5LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRl
QnVmZmVyKTogUmVwbGFjZWQgdHdvIHNlcGFyYXRlCisgICAgICAgIGZ1bmN0aW9ucyB3aXRoIGEg
ZnVuY3Rpb24gdGVtcGxhdGUgYW5kIGEgY292ZXIgdGhhdCBjYWxscyB0aGUKKyAgICAgICAgYXBw
cm9wcmlhdGUgaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIGZvciBwbGFjZXMgd2hlcmUgd2UgYXJl
bid0CisgICAgICAgIGFscmVhZHkgaW4gY2hhcmFjdGVyLXR5cGUtc3BlY2lmaWMgY29kZSBwYXRo
cy4gVGhpcyB2ZXJzaW9uIG5vdworICAgICAgICBzdXBwb3J0cyBhbGxvY2F0aW5nIGEgYnVmZmVy
IGZvciB0aGUgZmlyc3QgdGltZSBpbiBjYXNlcyB3aGVyZQorICAgICAgICB3ZSBoYXZlIG1fc3Ry
aW5nIGFuZCBub3QgbV9idWZmZXIsIHdoaWNoIHVzZWQgdG8gYmUgaGFuZGxlZCBhdAorICAgICAg
ICB0aGUgaGlnaGVyIGxldmVsLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNlcnZl
Q2FwYWNpdHkpOiBSZXdyb3RlIGZvciBzaW1wbGljaXR5LgorICAgICAgICBCeSByZWx5aW5nIG9u
IHRoZSBvdmVyZmxvdyBjaGVja2luZyBpbnNpZGUgcmVhbGxvY2F0ZUJ1ZmZlciBhbmQKKyAgICAg
ICAgYWxsb2NhdGVCdWZmZXIgd2Ugbm8gbG9uZ2VyIG5lZWQgY2hlY2tpbmcgb2YgdGhlIHBhc3Nl
ZC1pbiB2YWx1ZQorICAgICAgICBhdCB0aGlzIGxldmVsLgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcpOiBSZW1vdmVkIHRoZQorICAgICAgICB2
ZXJzaW9uIG9mIHRoaXMgdGhhdCB0YWtlcyBhZGRpdGlvbmFsTGVuZ3RoIHNpbmNlIGl0J3MKKyAg
ICAgICAgcG90ZW50aWFsbHkgY29uZnVzaW5nIHRvIGhhdmUgYSBmYW1pbHkgb2YgZnVuY3Rpb25z
IHRoYXQgaGF2ZSB0aGUKKyAgICAgICAgc2FtZSBuYW1lIGFuZCB0YWtlIHRoZSBzYW1lIHR5cGUg
b2YgYXJndW1lbnQsIGJ1dCBpbnRlcnByZXQgaXQKKyAgICAgICAgc3VidGx5IGRpZmZlcmVudGx5
LiBTdHJlYW1saW5lZCB0aGUgY29kZSB1c2luZyBzdGQ6OmV4Y2hhbmdlLgorICAgICAgICBUaGlz
IGZ1bmN0aW9uIG5vdyBhbHNvIGluY2x1ZGVzIHRoZSBsb2dpYyBmcm9tIHRoZSBmdW5jdGlvbiBu
YW1lZAorICAgICAgICBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRob3V0T3ZlcmZsb3dDaGVj
aywgd2hpY2ggd2FzIHN1YnRseQorICAgICAgICBtaXNuYW1lZCBzaW5jZSB0aGF0IHdhcyBub3Qg
dGhlIG9ubHkgc2VtYW50aWMgZGlmZmVyZW5jZS4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRl
cjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UpOiBTdHJlYW1saW5lZAorICAgICAg
ICB0aGlzIGJ5IHVzaW5nIHN0ZDo6ZXhjaGFuZ2UgYW5kIHJlbW92ZWQgYWRkaXRpb25hbCBvdmVy
ZmxvdyBjaGVja3MKKyAgICAgICAgYXQgdGhpcyBsZXZlbCBzaW5jZSByZWFsbG9jYXRlQnVmZmVy
IGFscmVhZHkgZG9lcyB0aGVtLiBBbHNvIGFkZGVkCisgICAgICAgIGEgY2hlY2sgZm9yIHRoZSBj
YXNlIHdoZXJlIHRoZSBuZXcgdG90YWwgbGVuZ3RoIGlzIDAsIHdoaWNoIHdvdWxkCisgICAgICAg
IG5vdCBiZSBoYW5kbGVkIGNvcnJlY3RseSBhbmQgZWZmaWNpZW50bHkgYnkgdGhlIHJlYWxsb2Nh
dGVCdWZmZXIKKyAgICAgICAgYW5kIGJ1ZmZlckNoYXJhY3RlcnMgZnVuY3Rpb25zLgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdMQ2hhcik6IFJl
bmFtZWQgdGhpcworICAgICAgICBmcm9tIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgsIHNpbmNl
IGl0J3Mgbm93IGlkZW50aWNhbCB0byBjYWxsaW5nCisgICAgICAgIGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZzxMQ2hhcj4sIGV4Y2VwdCBmb3IgaW5saW5pbmcgYW5kIGxpbmthZ2UuCisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZl
cnQpOgorICAgICAgICBSZW5hbWVkIHRoaXMgZnJvbSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcx
Ni4gSXQgaXMgZGlmZmVyZW50IGZyb20KKyAgICAgICAgdGhlIG90aGVyIGV4dGVuZEJ1ZmZlciBm
dW5jdGlvbnMgYmVjYXVzZSBpcyBzdXBwb3J0cyB1cGNvbnZlcnRpbmcKKyAgICAgICAgZnJvbSBM
Q2hhciB0byBVQ2hhci4gTGlrZSB0aGUgb3RoZXJzIGl0IHJlbGllcyBvbiBhbGxvY2F0ZUJ1ZmZl
cgorICAgICAgICBmb3IgdGhlIG92ZXJmbG93IGNoZWNraW5nLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKTogUmVtb3ZlZCBhbiB1bm5lY2Vzc2FyeQorICAg
ICAgICBhc3NlcnRpb24gdGhhdCB0aGUgY2hhcmFjdGVycyBwb2ludGVyIGlzIG5vbi1udWxsOyB0
aGF0IHdpbGwgZmFpbAorICAgICAgICBpbiBhbiBvYnZpb3VzIHdheSB3aXRob3V0IGFuIGFzc2Vy
dGlvbi4gU2ltcGxpZmllZCB0aGUgbG9naWMgYW5kCisgICAgICAgIHJlbW92ZWQgc29tZSBpbnZh
cmlhbnQgYXNzZXJ0aW9ucyB0aGF0IGRvbid0IGhlbHAgdXMgbXVjaC4gQ2hhbmdlZAorICAgICAg
ICBvdmVyZmxvdyBjaGVja2luZyBieSB1c2luZyBzYXR1cmF0ZWRTdW0gdG8gY29tcHV0ZSB0aGUg
bmV3IGxlbmd0aC4KKyAgICAgICAgSW4gb3ZlcmZsb3cgY2FzZXMsIHRoZSBuZXcgc3VtIHdpbGwg
YmUgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0KKyAgICAgICAgc3RyaW5nIGxlbmd0aCwgYnV0IHdp
bGwgZml0IGluIGFuIHVuc2lnbmVkLCBzbyB3ZSBjYW4gcGFzcyBpdAorICAgICAgICBkb3duIHRv
IGxvd2VyIGxldmVscyBhbmQgbGV0IGZ1bmN0aW9ucyBsaWtlIHJlYWxsb2NhdGVCdWZmZXIgZG8K
KyAgICAgICAgdGhlIGFjdHVhbCBvdmVyZmxvdyBjaGVja2luZy4gQWxzbyB1c2UgU3RyaW5nSW1w
bDo6Y29weUNoYXJhY3RlcnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6
IFJlbW92ZWQgdGhlIENGU3RyaW5nUmVmIG92ZXJsb2FkLgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpjYW5TaHJpbmsgY29uc3QpOiBTaW1wbGlmeSB0aGUgZnVuY3Rpb24gYW5kCisgICAg
ICAgIHJlbW92ZSB0aGUgdmFndWUgRklYTUUgdGhhdCBzYXlzICJ0aGlzIHNob3VsZCBiZSB0dW5l
ZCIuIFRoYXQgbWF5CisgICAgICAgIGJlIHNvLCBidXQgdGhlIEZJWE1FIGlzIG5vdCBuZWVkZWQu
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KTogU2ltcGxpZnkgYnkg
dXNpbmcgdGhlIG5ldworICAgICAgICByZWFsbG9jYXRlQnVmZmVyIGFuZCBzdGQ6OmV4Y2hhbmdl
LiBSZW1vdmVkIHVubmVlZGVkIGFzc2VydGlvbgorICAgICAgICBhYm91dCBvdmVyZmxvdyB0aGF0
IGRvZXNuJ3QgaGVscCB1cyBtYWludGFpbiB0aGUgaW52YXJpYW50LgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjppc0FsbEFTQ0lJIGNvbnN0KTogV2FzIHRlbXB0ZWQgdG8gcmVtb3ZlCisg
ICAgICAgIHRoaXMgZnVuY3Rpb24sIGJ1dCBmb3Igbm93IGp1c3QgbWFkZSBpdCB1c2UgdGhlIFN0
cmluZ1ZpZXcKKyAgICAgICAgdmVyc2lvbiBmb3IgYnJldml0eS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaDogUmVtb3ZlZCBtYW55IHVubmVlZGVkIGluY2x1ZGVzLCBhbmQK
KyAgICAgICAgbm90YWJseSBpbmNsdWRlZCBTYXR1cmF0ZWRBcml0aG1ldGljLmggaW5zdGVhZCBv
ZgorICAgICAgICBDaGVja2VkQXJpdGhtZXRpYy5oIGJlY2F1c2Ugd2Ugbm93IHVzZSB0aGUgZm9y
bWVyIGluc3RlYWQgb2YgdGhlCisgICAgICAgIGxhdHRlci4gQ2hhbmdlZCB0aGUgb3ZlcmZsb3cg
Y2hlY2tpbmcgaW1wbGVtZW50YXRpb24gdG8gd29yaworICAgICAgICBtb3JlIHNpbXBseSBiYXNl
ZCBvbiBzYXR1cmF0ZWQgYWRkaXRpb24gcmF0aGVyIHRoYW4gQ2hlY2tlZC4KKyAgICAgICAgVGhp
cyBhbGxvd2VkIHVzIHRvIGdldCByaWQgb2YgZGVwZW5kZW5jeSBvbiBvdXIgb3duIHVuaXF1ZSBt
b2RlCisgICAgICAgIGZvciBDaGVja2VkLCBjYWxsZWQgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZs
b3cuIFJlbW92ZWQgYQorICAgICAgICBjb21tZW50IGFib3V0IG1ha2luZyBhIHRlbXBsYXRpemVk
IHZlcnNpb24gb2YgU3RyaW5nQnVpbGRlci4KKyAgICAgICAgV2UgY2FuIGRvIGl0IGlmIHdlIGxp
a2UsIGJ1dCBkb2VzIG5vdCBzZWVtIHVyZ2VudC4gTW92ZWQKKyAgICAgICAgZnVjbnRpb24gYm9k
aWVzIG91dCBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBzbyBpdCdzIGVhc2llciB0bworICAgICAg
ICBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBjbGFzcy4gU2luY2UgbV9sZW5ndGggaXMgbm93
IGFuCisgICAgICAgIG9yZGluYXJ5IGludGVnZXIsIHRoZSBjaGVjayBmb3Igb3ZlcmZsb3dlZCBz
aW1wbHkgY2hlY2tzIHRvIHNlZQorICAgICAgICBpZiB0aGUgbGVuZ3RoIGlzIGxhcmdlciB0aGFu
IHRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguIFdoZW4gd2UKKyAgICAgICAgZW5jb3VudGVyIG92
ZXJmbG93IHRoYXQgaXMgbm90IGFib3V0IGxlbmd0aCBjb21wdXRhdGlvbiwgd2Ugc2V0CisgICAg
ICAgIHRoZSBsZW5ndGggdG8gdGhlIG1heGltdW0gaW50ZWdlciB0byBpbmRpY2F0ZSB0aGUgZmFp
bHVyZS4KKyAgICAgICAgRGVsZXRlZCB0aGUgYXBwZW5kIG92ZXJsb2FkcyBmb3IgQ0ZTdHJpbmdS
ZWYgYW5kIE5TU3RyaW5nLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpTdHJpbmdCdWls
ZGVyKTogU2ltcGxpZmllZCB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgc2luY2Ugd2Ugb25seSBo
YXZlIHRvIGluaXRpYWxpemUgdGhlIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93IG1lbWJlci4KKyAg
ICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2xlYXIpOiBGaXhlZCBhIG1pc3Rha2Ugd2hlcmUg
dGhpcyB3YXMgbm90CisgICAgICAgIHJlc2V0dGluZyB0aGUgbV9pc1JlaWZpZWQgZmxhZy4KKyAg
ICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6c3dhcCk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgaW4g
dGhlIGRhdGEgbWVtYmVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6b3BlcmF0b3Ig
U3RyaW5nVmlldyBjb25zdCk6IE1vdmVkIG91dCBvZiBsaW5lLgorICAgICAgICBNYWRlIHN1cmUg
dG8gY2FsbCB0aGUgbGVuZ3RoKCkgZnVuY3Rpb24gc28gd2UgY3Jhc2ggaWYgdGhpcyBpcworICAg
ICAgICBjYWxsZWQgYWZ0ZXIgb3ZlcmZsb3cuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6
OmJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KTogUmVuYW1lZCBmcm9tCisgICAgICAgIGdldEJ1ZmZl
ckNoYXJhY3RlcnMsIG90aGVyd2lzZSB1bmNoYW5nZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OmJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OmRpZE92ZXJmbG93KTogSW1wbGVtZW50IHRoZSBuZXcgYXBwcm9hY2ggdG8K
KyAgICAgICAgb3ZlcmZsb3csIG1lYW5pbmcgd2UgbmVlZCB0byB3cml0ZSB0aGUgQ1JBU0goKSBo
ZXJlIGV4cGxpY2l0bHkgYW5kCisgICAgICAgIGluIHRoZSBub24tY3Jhc2hpbmcgbW9kZSwgc2V0
IG1fbGVuZ3RoLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOiBLZWVwIHRo
ZSBzaW5nbGUtY2hhcmFjdGVyIGFwcGVuZAorICAgICAgICBmdW5jdGlvbiBzaW1wbGUgdXNpbmcg
dGhlIGJ1ZmZlckNoYXJhY3RlcnMgZnVuY3Rpb24uIFJlbW92ZSBzb21lCisgICAgICAgIG9mIHRo
ZSB1bm5lY2Nlc3NhcnkgY2hlY2tzIGFuZCBzcGVjaWFsIGNhc2VzIGluIHRoZSBvdGhlciB2ZXJz
aW9ucworICAgICAgICBvZiBhcHBlbmQuIE1vc3Qgb2YgdGhlIGNoZWNraW5nIGlzIGRvbmUgaW5z
aWRlIGFwcGVuZENoYXJhY3RlcnMsCisgICAgICAgIHdpdGggb25seSBhIGZldyBleGNlcHRpb25z
LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRTdWJzdHJpbmcpOiBNb3ZlZCBv
dXQgb2YgdGhlIGNsYXNzCisgICAgICAgIGRlZmluaXRpb24gd2l0aG91dCBtYWtpbmcgc2lnbmlm
aWNhbnQgY2hhbmdlcy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFj
dGVyKTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRvU3RyaW5nKTogR3Jl
YXRseSBzaW1wbGlmaWVkIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgYnkgcmVseWluZyBvbiBvdmVy
ZmxvdyBjaGVja2luZyBpbiB0aGUgcmVpZnlTdHJpbmcgZnVuY3Rpb24gaW5zdGVhZAorICAgICAg
ICBvZiBkb2luZyBpdCBoZXJlIGFuZCByZW1vdmluZyB1bm5lZWRlZCBpbnZhcmlhbnQgYXNzZXJ0
aW9ucy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6dG9TdHJpbmdQcmVzZXJ2ZUNhcGFj
aXR5IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRvQXRvbVN0
cmluZyBjb25zdCk6IFJld3JvdGUgdGhpcyB0byBzdHJlYW1saW5lLAorICAgICAgICByZW1vdmlu
ZyBleHBsaWNpdCBvdmVyZmxvdyBjaGVja3MuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6
Omxlbmd0aCBjb25zdCk6IE1vdmVkIG91dCBvZiB0aGUgY2xhc3MKKyAgICAgICAgZGVmaW5pdGlv
biB3aXRob3V0IG1ha2luZyBzaWduaWZpY2FudCBjaGFuZ2VzLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjpjYXBhY2l0eSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpvcGVyYXRvcltdIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OmNoYXJhY3RlcnMgY29uc3QpOiBJbXBsZW1lbnRlZCB0aGlzIG9wZXJhdGlvbgorICAg
ICAgICBpbiB0aGUgZnVuY3Rpb24gdGVtcGxhdGUuIE5vdyByYXRoZXIgdGhhbiBoYXZpbmcgdGhp
cyBjYWxsIHRoZQorICAgICAgICBjaGFyYWN0ZXJzOCBhbmQgY2hhcmFjdGVyczE2IGZ1bmN0aW9u
cywgdGhleSBjYW4gY2FsbCBpdC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5k
RnJvbUFkYXB0ZXJzKTogVXNlIHNhdHVyYXRlZFN1bSB0bworICAgICAgICBjb21wdXRlIHRoZSBy
ZXF1aXJlZCBsZW5ndGgsIHdoaWNoIGFsbG93cyB0aGUgZXh0ZW5kQnVmZmVyCisgICAgICAgIGZ1
bmN0aW9ucyB0byBkbyBvdmVyZmxvdyBjaGVja2luZyB3aXRob3V0IGhhdmluZyB0byB0YWtlIHNw
ZWNpYWwKKyAgICAgICAgY2hlY2tlZCBpbnRlZ2VyIHR5cGVzIGZvciBhcmd1bWVudHMuCisKKyAg
ICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHA6CisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmcpOiBUd2Vha2VkIGNvZGluZyBzdHls
ZQorICAgICAgICBhbmQgbWFkZSB0aGlzIHVzZSB0aGUgYnVmZmVyQ2hhcmFjdGVycyBmdW5jdGlv
biByYXRoZXIgdGhhbiBnZXR0aW5nCisgICAgICAgIGRpcmVjdGx5IGF0IHRoZSBtX2J1ZmZlckNo
YXJhY3RlcnMgZGF0YSBtZW1iZXIuCisKKyAgICAgICAgKiB3dGYvdGV4dC9jZi9TdHJpbmdDb25j
YXRlbmF0ZUNGLmg6IEFkZGVkLiBTcGVjaWFsaXplcyBTdHJpbmdUeXBlQWRhcHRlciBmb3IKKyAg
ICAgICAgYm90aCBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgKi4gSWYgQ0ZTdHJpbmdHZXRDU3Ry
aW5nUHRyIHdvcmtzIGZvciBMYXRpbi0xLCB0aGVuCisgICAgICAgIGRvZXMgdGhlIDgtYml0IGNv
ZGUgcGF0aCwgb3RoZXJ3aXNlIHRoZSAxNi1iaXQuCisKKyAgICAgICAgKiB3dGYvdGV4dC9jb2Nv
YS9UZXh0U3RyZWFtQ29jb2EubW06IEluY2x1ZGUgU3RyaW5nQ29uY2F0ZW5hdGVDRi5oLCBzaW5j
ZSBpdCdzCisgICAgICAgIG5vdyBuZWVkZWQgdG8gdXNlIENGU3RyaW5nUmVmIHdpdGggU3RyaW5n
QnVpbGRlci4KKwogMjAyMS0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIERyb3AgRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKCkgLyBmaWxlTWV0YWRhdGFG
b2xsb3dpbmdTeW1saW5rcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE0MzA3YTU1NTI3MjJhNTVhMGY0ZTJl
MmU3ZTE5NDU0MDU3ZmI4NS4uMjc5YzZlZjBhODIyMmY5NDY0NDUwNDk4YzRkZjc2NjY4NDJhNzMx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIxLTA1LTE1ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmlu
ZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFnZS9DYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOiBUd2Vha2Vk
CisgICAgICAgIGNvZGluZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZENT
Uyk6IFVzZSB2YXJpYWRpYyBTdHJpbmdCdWlsZGVyOjphcHBlbmQgaW5zdGVhZCBvZiBtYW55Cisg
ICAgICAgIHNlcGFyYXRlIGNhbGxzLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MgY29uc3QpOgorICAgICAgICBU
d2Vha2VkIGNvZGluZyBzdHlsZSBhIGJpdCwgYW5kIHVzZSB2YXJpYWRpYyBTdHJpbkJ1aWxkZXI6
OmFwcGVuZCBjYWxscworICAgICAgICB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyBhbmQg
c3RyZWFtbGluZSB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSBjb25zdCk6CisgICAgICAg
IERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWNlc3NhcnkgY2hlY2tzIHRoYXQgc3RyaW5ncyBhcmUg
ZW1wdHkgYmVmb3JlIGFwcGVuZGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL0xheW91dFVuaXQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFVuaXQ6OnJvdW5kIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvci0pOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvci09
KToKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNv
b2tpZXNGb3JTZXNzaW9uIGNvbnN0KTogVHdlYWtlZCBjb2RpbgorICAgICAgICBzdHlsZSBhIGJp
dCwgYW5kIHVzZSB2YXJpYWRpYyBTdHJpbkJ1aWxkZXI6OmFwcGVuZCBjYWxscyB0byByZWR1Y2Ug
dGhlCisgICAgICAgIG51bWJlciBvZiBjYWxscyBhbmQgc3RyZWFtbGluZSB0aGUgY29kZS4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBsYW5Db3VudGVyKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRlcik6
CisKIDIwMjEtMDUtMTUgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtMRkNdIE1vdmUgYmxvY2sgZm9ybWF0dGluZyBnZW9tZXRyeSB0byBpdHMgb3duIGNsYXNzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IGJlM2Y1ZWJhZWIwYWFlMzg2Y2Y2YzAxNGZlODJkY2QxNmRjMjdmNTYuLmM2ZWY4
Nzk3OGI2YzEyOGVmZGQyZWRhZmIyZThkZWU5YTJjMTZmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMjEtMDUtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWls
ZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0
ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpw
bGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKTogVXNlIG1ha2VTdHJpbmcgaW5zdGVhZAorICAg
ICAgICBvZiBTdHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE1ICBJYW4gR2lsYmVydCAgPGlhbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6
S2V5ZnJhbWVWYWx1ZSB3aXRoIFZhcmlhbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGIxMWUwOThjZTQ3N2Q2OWQ4NjliMmYxNWU3NTNjOTkzZTE4MDM3ZTYu
LmNjNTYxZjNlZjg5NGQ5NjQ4NDdlNjg4MDcwMTIzNzlkNjE4NmYwMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDk4LDYgKzQ5OCw3IEBACiAJCTkzQUM5
MUE3MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMQ2hhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I1QjQ0RDIy
MTNENjE2MDA0QjdBQTcgLyogSGV4TnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhleE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQjVCNDUwMjIxNzFFRTkwMDRCN0FBNyAvKiBMb2dnZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTG9nZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNEMDAxN0IyNjREQkFDRjAwQkNGMTA5IC8qIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGVDRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxOTFDRjIwQ0FFQ0U4MDBDNTFCOEUgLyog
b2JqY1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvYmpjU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRERFOTMxMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGR5bGRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNGMTk5M0QxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MjQsNiArOTI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUE1QkExNUY3MTgyNDM1QTYwMEE4MkU2OSAvKiBBdG9tU3RyaW5nSW1wbENGLmNwcCAqLywK
IAkJCQlBNUJBMTVGODE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwICovLAorCQkJCTkz
RDAwMTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJpbmdDb25jYXRlbmF0ZUNGLmggKi8sCiAJCQkJ
QTVCQTE1RjkxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDRi5jcHAgKi8sCiAJCQkJOTM5
MzRCRDQxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgKi8sCiAJCQkJMUNDREIx
NDkxRTU2NjYyNjAwNkM3M0MwIC8qIFRleHRCcmVha0l0ZXJhdG9yQ0YuaCAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggYi9Tb3VyY2UvV1RGL3d0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oCmluZGV4IGI4NTE2Zjg4MWUwYzRiYTNmZjFhYWMxNTg2MDZjOWVm
OWQ1NzMwYWMuLjczYWNkYzcyZDVjYmNjNjFkYTdlYzYyMzNjMmM1Y2U3NjQ4MjlkMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaApAQCAtOTUsMzEgKzk1LDYgQEAgcHVibGljOgogICAg
IGNvbnN0ZXhwciBib29sIGhhc092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
fTsKIAotY2xhc3MgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3cgewotcHVibGljOgotICAgIHZv
aWQgb3ZlcmZsb3dlZCgpCi0gICAgewotICAgICAgICBtX292ZXJmbG93ZWQgPSB0cnVlOwotICAg
ICAgICBpZiAobV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpCi0gICAgICAgICAgICBjcmFzaCgpOwot
ICAgIH0KLQotICAgIGJvb2wgc2hvdWxkQ3Jhc2hPbk92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KLSAgICB2b2lkIHNldFNob3VsZENyYXNoT25PdmVy
Zmxvdyhib29sIHZhbHVlKSB7IG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93ID0gdmFsdWU7IH0KLQot
ICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZDsgfQot
ICAgIHZvaWQgY2xlYXJPdmVyZmxvdygpIHsgbV9vdmVyZmxvd2VkID0gZmFsc2U7IH0KLQotICAg
IHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgY3Jhc2goKQotICAgIHsKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX292ZXJmbG93ZWQgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgeyB0cnVlIH07Ci19Owot
CiBjbGFzcyBDcmFzaE9uT3ZlcmZsb3cgewogcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgb3ZlcmZsb3dlZCgpCkBAIC0yNTIsMTEgKzIyNyw2IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZCB7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsKIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENvbmRpdGlvbmFsQ3Jhc2hPbk92
ZXJmbG93Pj4gewotICAgIHVzaW5nIENsZWFuVHlwZSA9IHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8
VD46OkNsZWFuVHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIENsZWFuVHlwZSBEZWZhdWx0VmFs
dWUgPSAwOwotfTsKLQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2Vk
PENoZWNrZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93Pj4gewogICAgIHR5cGVkZWYgdHlwZW5hbWUgUmVt
b3ZlQ2hlY2tlZDxUPjo6Q2xlYW5UeXBlIENsZWFuVHlwZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOwpAQCAtMTA2OSw3ICsxMDM5LDYgQEAgdXNpbmcg
V1RGOjpDaGVja2VkVWludDMyOwogdXNpbmcgV1RGOjpDaGVja2VkSW50NjQ7CiB1c2luZyBXVEY6
OkNoZWNrZWRVaW50NjQ7CiB1c2luZyBXVEY6OkNoZWNrZWRTaXplOwotdXNpbmcgV1RGOjpDb25k
aXRpb25hbENyYXNoT25PdmVyZmxvdzsKIHVzaW5nIFdURjo6Q3Jhc2hPbk92ZXJmbG93OwogdXNp
bmcgV1RGOjpSZWNvcmRPdmVyZmxvdzsKIHVzaW5nIFdURjo6Y2hlY2tlZFN1bTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1GVFcuY21ha2UKaW5kZXggOTcxZmRlYjI1OTUwZWViNzc4ZDVkNzBlMWFkY2ZkNTJhZDZh
ZDI5ZS4uYmZhMTNkMWZlODBiMzA3YTUyYjNmZGRiZWRhMWU2OTdkMzhlNTNjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1GVFcuY21ha2UKQEAgLTM5LDYgKzM5LDcgQEAgaWYgKFVTRV9DRikKICAgICAgICAg
Y2YvQ0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9UeXBlQ2FzdHNDRi5oCiAKKyAgICAgICAgdGV4
dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVy
YXRvckNGLmgKICAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1NYWMuY21ha2UKaW5kZXggZTI4MDk5NzQyNzE5Yzc3OWFjM2VhZGY0NjYxMzMzZDg3OGVmZGNk
ZC4uN2NkY2M0YjE2YmUyMmU0NzVlMjJhODZhZDBlN2FjNDhkZTFkZDExNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1NYWMuY21ha2UKQEAgLTQxLDYgKzQxLDcgQEAgbGlzdChBUFBFTkQgV1RGX1BVQkxJQ19I
RUFERVJTCiAKICAgICBzcGkvbWFjL01ldGFkYXRhU1BJLmgKIAorICAgIHRleHQvY2YvU3RyaW5n
Q29uY2F0ZW5hdGVDRi5oCiAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKICkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA2ZTgwYjk5YTA0YTZjNmRlNGUyZmY1OWE3YjRl
ZDRjOGM0YWFmYWI5Li45MGZkMjZkNzhjNjk0ZGIzNmRkMDgyNDFlOTg4ZTQyZjU1NTdlNTE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMzcsNiArMzcsNyBAQCBpZiAoVVNFX0NGKQog
ICAgICAgICBjZi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVDYXN0c0NGLmgKIAorICAg
ICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgICAgICB0ZXh0L2NmL1RleHRC
cmVha0l0ZXJhdG9yQ0YuaAogICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGIvU291cmNlL1dU
Ri93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oCmluZGV4IDYwN2JjMDExMjVkZjUwYmI4OTQ5NjA4
MGU4OGU2NWQ3NDVjOGJmOTYuLjU3OWI1Yjg1YzhlOGExYjQ0MWUyMWQ3Y2UwN2ZmMGEyMzAxZDI1
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmgKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDcgKzM2LDE0IEBA
CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CiAKLWlubGlu
ZSBib29sIHNpZ25lZEFkZE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYg
cmVzdWx0KQorbmFtZXNwYWNlIFdURiB7CisKKy8vIEZJWE1FOiBFbmhhbmNlIHRoaXMgc28gaXQg
ZmFpbHMgdG8gY29tcGlsZSBjYWxscyB3aGVyZSBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50cyBjYW4g
YmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGludGVncmFsIHR5cGUgaW5zdGVhZCBvZiBxdWll
dGx5IGNvbnZlcnRpbmcuCit0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRJbnRlZ3JhbFR5cGU+IHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbF92PFNpZ25lZEludGVncmFsVHlwZT4gJiYg
c3RkOjppc19zaWduZWRfdjxTaWduZWRJbnRlZ3JhbFR5cGU+LCBTaWduZWRJbnRlZ3JhbFR5cGU+
IHNhdHVyYXRlZFN1bShTaWduZWRJbnRlZ3JhbFR5cGUsIFNpZ25lZEludGVncmFsVHlwZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBVbnNpZ25lZEludGVncmFsVHlwZT4gY29uc3RleHByIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbF92PFVuc2lnbmVkSW50ZWdyYWxUeXBlPiAmJiAhc3Rk
Ojppc19zaWduZWRfdjxVbnNpZ25lZEludGVncmFsVHlwZT4sIFVuc2lnbmVkSW50ZWdyYWxUeXBl
PiBzYXR1cmF0ZWRTdW0oVW5zaWduZWRJbnRlZ3JhbFR5cGUsIFVuc2lnbmVkSW50ZWdyYWxUeXBl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIEludGVncmFsVHlwZT4gSW50ZWdyYWxUeXBlIHNhdHVyYXRl
ZERpZmZlcmVuY2UoSW50ZWdyYWxUeXBlLCBJbnRlZ3JhbFR5cGUpOworCitpbmxpbmUgYm9vbCBz
aWduZWRBZGRJbnQzMk92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYgcmVz
dWx0KQogewogI2lmIENPTVBJTEVSX0hBU19DTEFOR19CVUlMVElOKF9fYnVpbHRpbl9zYWRkX292
ZXJmbG93KSAmJiAhKGRlZmluZWQgX19jbGFuZ19tYWpvcl9fICYmIF9fY2xhbmdfbWFqb3JfXyA8
IDcpCiAgICAgcmV0dXJuIF9fYnVpbHRpbl9zYWRkX292ZXJmbG93KGEsIGIsICZyZXN1bHQpOwpA
QCAtNTIsNyArNTksNyBAQCBpbmxpbmUgYm9vbCBzaWduZWRBZGRPdmVyZmxvd3MoaW50MzJfdCBh
LCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKICNlbmRpZgogfQogCi1pbmxpbmUgaW50MzJf
dCBzYXR1cmF0ZWRBZGRpdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKK3RlbXBsYXRlPD4gaW5s
aW5lIGludDMyX3Qgc2F0dXJhdGVkU3VtPGludDMyX3Q+KGludDMyX3QgYSwgaW50MzJfdCBiKQog
ewogICAgIGludDMyX3QgcmVzdWx0OwogI2lmIENQVShBUk1fVEhVTUIyKQpAQCAtNjIsMTMgKzY5
LDEzIEBAIGlubGluZSBpbnQzMl90IHNhdHVyYXRlZEFkZGl0aW9uKGludDMyX3QgYSwgaW50MzJf
dCBiKQogICAgICAgICA6IC8qIE5vdGhpbmcgaXMgY2xvYmJlcmVkLiAqLwogICAgICAgICApOwog
I2Vsc2UKLSAgICBpZiAoc2lnbmVkQWRkT3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCisgICAgaWYg
KHNpZ25lZEFkZEludDMyT3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpICsgKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhKSA+PiAzMSk7CiAjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUg
Ym9vbCBzaWduZWRTdWJ0cmFjdE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJf
dCYgcmVzdWx0KQoraW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RJbnQzMk92ZXJmbG93cyhpbnQz
Ml90IGEsIGludDMyX3QgYiwgaW50MzJfdCYgcmVzdWx0KQogewogI2lmIENPTVBJTEVSX0hBU19D
TEFOR19CVUlMVElOKF9fYnVpbHRpbl9zc3ViX292ZXJmbG93KSAmJiAhKGRlZmluZWQgX19jbGFu
Z19tYWpvcl9fICYmIF9fY2xhbmdfbWFqb3JfXyA8IDcpCiAgICAgcmV0dXJuIF9fYnVpbHRpbl9z
c3ViX292ZXJmbG93KGEsIGIsICZyZXN1bHQpOwpAQCAtODQsNyArOTEsOCBAQCBpbmxpbmUgYm9v
bCBzaWduZWRTdWJ0cmFjdE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYg
cmVzdWx0KQogI2VuZGlmCiB9CiAKLWlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1YnRyYWN0aW9u
KGludDMyX3QgYSwgaW50MzJfdCBiKQorLy8gRklYTUU6IEVuaGFuY2UgdGhpcyBzbyBpdCBmYWls
cyB0byBjb21waWxlIGNhbGxzIHdoZXJlIGVpdGhlciBvZiB0aGUgYXJndW1lbnRzIGNhbiBiZSBv
dXRzaWRlIHRoZSByYW5nZSBvZiBpbnQzMl90IGluc3RlYWQgb2YgcXVpZXRseSBjb252ZXJ0aW5n
LgordGVtcGxhdGU8PiBpbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+
KGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIGludDMyX3QgcmVzdWx0OwogI2lmIENQVShB
Uk1fVEhVTUIyKQpAQCAtOTQsOCArMTAyLDI0IEBAIGlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1
YnRyYWN0aW9uKGludDMyX3QgYSwgaW50MzJfdCBiKQogICAgICAgICA6IC8qIE5vdGhpbmcgaXMg
Y2xvYmJlcmVkLiAqLwogICAgICAgICApOwogI2Vsc2UKLSAgICBpZiAoc2lnbmVkU3VidHJhY3RP
dmVyZmxvd3MoYSwgYiwgcmVzdWx0KSkKKyAgICBpZiAoc2lnbmVkU3VidHJhY3RJbnQzMk92ZXJm
bG93cyhhLCBiLCByZXN1bHQpKQogICAgICAgICByZXN1bHQgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSArIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYSkgPj4gMzEpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVW5zaWduZWRJ
bnRlZ3JhbFR5cGU+IGNvbnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWxf
djxVbnNpZ25lZEludGVncmFsVHlwZT4gJiYgIXN0ZDo6aXNfc2lnbmVkX3Y8VW5zaWduZWRJbnRl
Z3JhbFR5cGU+LCBVbnNpZ25lZEludGVncmFsVHlwZT4gc2F0dXJhdGVkU3VtKFVuc2lnbmVkSW50
ZWdyYWxUeXBlIGEsIFVuc2lnbmVkSW50ZWdyYWxUeXBlIGIpCit7CisgICAgYXV0byBzdW0gPSBh
ICsgYjsKKyAgICByZXR1cm4gc3VtIDwgYSA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VW5zaWduZWRJ
bnRlZ3JhbFR5cGU+OjptYXgoKSA6IHN1bTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdy
YWxUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPiBjb25zdGV4cHIgdWludDMyX3Qgc2F0
dXJhdGVkU3VtKEludGVncmFsVHlwZSB2YWx1ZSwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgcmV0dXJuIHNhdHVyYXRlZFN1bTxJbnRlZ3JhbFR5cGU+KHZhbHVlLCBzYXR1cmF0
ZWRTdW08SW50ZWdyYWxUeXBlPihhcmd1bWVudHMuLi4pKTsKK30KKworfQorCit1c2luZyBXVEY6
OnNhdHVyYXRlZFN1bTsKK3VzaW5nIFdURjo6c2F0dXJhdGVkRGlmZmVyZW5jZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDFlMGMxOGFjOWQyMGVkODIwZmViODY4NWZj
Y2Y4MmIxMDYwMTE0MmQuLjhkMWFhM2QyODFjZjc2ZGI1YTA2YTNhODJmMGFmODYzODA4MDM4ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDE5ICszMywxOSBAQCBuYW1lc3BhY2UgV1RG
IHsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhDYXBhY2l0eSA9IFN0cmluZzo6TWF4
TGVuZ3RoOwogCi1zdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRDYXBhY2l0eSh1bnNpZ25lZCBjYXBh
Y2l0eSwgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRD
YXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSwgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbmltdW1DYXBhY2l0eSA9IDE2OwotICAg
IHJldHVybiBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5
LCBzdGQ6Om1pbihjYXBhY2l0eSAqIDIsIG1heENhcGFjaXR5KSkpOworICAgIHJldHVybiBzdGQ6
Om1heChyZXF1aXJlZENhcGFjaXR5LCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIHN0ZDo6bWlu
KGNhcGFjaXR5ICogMiwgbWF4Q2FwYWNpdHkpKSk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6
cmVpZnlTdHJpbmcoKSBjb25zdAogewotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIC8vIENoZWNrIGlmIHRo
ZSBzdHJpbmcgYWxyZWFkeSBleGlzdHMuCiAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewot
ICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVu
c2lnbmVkPigpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3Ro
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjAsMTEgKzYwLDExIEBAIHZvaWQgU3Ry
aW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAogICAgIH0KIAogICAgIC8vIE11c3QgYmUg
dmFsaWQgaW4gdGhlIGJ1ZmZlciwgdGFrZSBhIHN1YnN0cmluZyAodW5sZXNzIHN0cmluZyBmaWxs
cyB0aGUgYnVmZmVyKS4KLSAgICBBU1NFUlQobV9idWZmZXIgJiYgbV9sZW5ndGgudW5zYWZlR2V0
PHVuc2lnbmVkPigpIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAgaWYgKG1fbGVuZ3RoLnVu
c2FmZUdldDx1bnNpZ25lZD4oKSA9PSBtX2J1ZmZlci0+bGVuZ3RoKCkpCisgICAgQVNTRVJUKG1f
YnVmZmVyICYmIG1fbGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSk7CisgICAgaWYgKG1fbGVu
Z3RoID09IG1fYnVmZmVyLT5sZW5ndGgoKSkKICAgICAgICAgbV9zdHJpbmcgPSBtX2J1ZmZlci5n
ZXQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vi
c3RyaW5nU2hhcmluZ0ltcGwoKm1fYnVmZmVyLCAwLCBtX2xlbmd0aC51bnNhZmVHZXQoKSk7Cisg
ICAgICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwo
Km1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXpl
KHVuc2lnbmVkIG5ld1NpemUpCkBAIC03MywyNSArNzMsMjggQEAgdm9pZCBTdHJpbmdCdWlsZGVy
OjpyZXNpemUodW5zaWduZWQgbmV3U2l6ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ2hl
Y2sgbmV3U2l6ZSA8IG1fbGVuZ3RoLCBoZW5jZSBtX2xlbmd0aCA+IDAuCi0gICAgdW5zaWduZWQg
b2xkTGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7CisgICAgdW5zaWduZWQgb2xkTGVuZ3Ro
ID0gbV9sZW5ndGg7CiAgICAgQVNTRVJUKG5ld1NpemUgPD0gb2xkTGVuZ3RoKTsKICAgICBpZiAo
bmV3U2l6ZSA9PSBvbGRMZW5ndGgpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQob2xkTGVu
Z3RoKTsKIAorICAgIGlmIChuZXdTaXplID4gbWF4Q2FwYWNpdHkpIHsKKyAgICAgICAgZGlkT3Zl
cmZsb3coKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2xlbmd0aCA9IG5ld1NpemU7
Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBi
dWZmZXIsIHdlIG9ubHkgbmVlZCB0byBkdXBsaWNhdGUgaXQgaWYgaXQgaGFzIG1vcmUgdGhhbiBv
bmUgcmVmLgogICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICBtX3N0cmluZyA9IFN0cmluZygp
OyAvLyBDbGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIG1fYnVmZmVy
IGlmIGFueSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBtX2J1ZmZlci4K
KyAgICAgICAgbV9zdHJpbmcgPSB7IH07IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRo
ZSByZWZlcmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJl
bmNlIGNvdW50IG9mIG1fYnVmZmVyLgogICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkgewotICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgbV9idWZmZXItPmxlbmd0
aCgpKTsKKyAgICAgICAgICAgIGlmIChtX2lzOEJpdCkKKyAgICAgICAgICAgICAgICBhbGxvY2F0
ZUJ1ZmZlcjxMQ2hhcj4obV9idWZmZXItPmNoYXJhY3RlcnM4KCksIG1fYnVmZmVyLT5sZW5ndGgo
KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9i
dWZmZXItPmNoYXJhY3RlcnMxNigpLCBtX2J1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICAgICAg
ICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIG1fYnVm
ZmVyLT5sZW5ndGgoKSk7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQo
KSB8fCBtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigp
KTsKKyAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSB8fCBtX2J1ZmZlci0+bGVuZ3RoKCkg
Pj0gbV9sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDIsMzI3ICsxMDUs
MTYwIEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5ld1NpemUpCiAgICAg
bV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9zdHJp
bmcuaW1wbCgpLCAwLCBuZXdTaXplKTsKIH0KIAotLy8gQWxsb2NhdGUgYSBuZXcgOCBiaXQgYnVm
ZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVp
dGhlciBtX3N0cmluZwotLy8gb3IgbV9idWZmZXIsIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVk
IHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxv
Y2F0ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVp
cmVkTGVuZ3RoKQorLy8gQWxsb2NhdGUgYSBuZXcgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRD
aGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVpdGhlciBtX3N0cmluZyBvciBtX2J1ZmZl
ci4KK3RlbXBsYXRlPHR5cGVuYW1lIEFsbG9jYXRpb25DaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBD
dXJyZW50Q2hhcmFjdGVyVHlwZT4gdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihj
b25zdCBDdXJyZW50Q2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJl
cXVpcmVkQ2FwYWNpdHkpCiB7Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFT
U0VSVChtX2lzOEJpdCk7Ci0gICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3
IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBk
YXRhLgotICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzOCk7Ci0gICAgaWYgKFVOTElLRUxZ
KCFidWZmZXIpKQotICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKLQotICAgIGlmIChtX2xl
bmd0aCkKLSAgICAgICAgc3RkOjptZW1jcHkobV9idWZmZXJDaGFyYWN0ZXJzOCwgY3VycmVudENo
YXJhY3RlcnMsIG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgYnVp
bGRlciBzdGF0ZS4KLSAgICBtX2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKTsKLSAgICBtX3N0cmlu
ZyA9IFN0cmluZygpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPT0gcmVxdWlyZWRM
ZW5ndGgpOwotfQorICAgIEFsbG9jYXRpb25DaGFyYWN0ZXJUeXBlKiBidWZmZXJDaGFyYWN0ZXJz
OworICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChy
ZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICBpZiAoVU5MSUtFTFkoIWJ1
ZmZlcikpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotLy8gQWxsb2NhdGUgYSBuZXcgMTYgYml0IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hh
cmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJpbmcKLS8vIG9yIG1fYnVm
ZmVyLCAgbmVpdGhlciB3aWxsIGJlIHJlYXNzaWduZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNvbXBs
ZXRlZCkuCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFyKiBj
dXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCi17CiAgICAgQVNTRVJU
KCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVCghbV9pczhCaXQpOwotICAgIC8vIENvcHkg
dGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQg
dG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KLSAgICBhdXRvIGJ1ZmZlciA9IFN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hh
cmFjdGVyczE2KTsKLSAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBk
aWRPdmVyZmxvdygpOwotICAgIHN0ZDo6bWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVyczE2LCBjdXJy
ZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aC51bnNhZmVHZXQoKSkg
KiBzaXplb2YoVUNoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4KLSAgICAKLSAgICAvLyBV
cGRhdGUgdGhlIGJ1aWxkZXIgc3RhdGUuCi0gICAgbV9idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7
Ci0gICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgp
ID09IHJlcXVpcmVkTGVuZ3RoKTsKLX0KKyAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhi
dWZmZXJDaGFyYWN0ZXJzLCBjdXJyZW50Q2hhcmFjdGVycywgbV9sZW5ndGgpOwogCi0vLyBBbGxv
Y2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh3
aGljaCBpcyA4IGJpdCBhbmQgbWF5IGNvbWUKLS8vIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1f
YnVmZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29t
cGxldGVkKS4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY29u
c3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsK
LSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICBBU1NFUlQocmVx
dWlyZWRMZW5ndGggPD0gbWF4Q2FwYWNpdHkgJiYgcmVxdWlyZWRMZW5ndGggPj0gbGVuZ3RoKTsK
LSAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVz
dWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCi0gICAgYXV0byBi
dWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3Ro
LCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7Ci0gICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKQotICAg
ICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsgLy8gVHJlYXQgYSBmYWlsdXJlIHRvIGFsbGNvYXRl
IGFzIGFuIG92ZXJmbG93LgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbaV0gPSBjdXJyZW50Q2hhcmFjdGVyc1tp
XTsKLSAgICAKLSAgICBtX2lzOEJpdCA9IGZhbHNlOwotICAgIAotICAgIC8vIFVwZGF0ZSB0aGUg
YnVpbGRlciBzdGF0ZS4KKyAgICBtX2lzOEJpdCA9IHN0ZDo6aXNfc2FtZV92PEFsbG9jYXRpb25D
aGFyYWN0ZXJUeXBlLCBMQ2hhcj47CiAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7Ci0g
ICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID09
IHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBtX2J1ZmZlckNoYXJhY3RlcnMgPSByZWludGVycHJldF9j
YXN0PExDaGFyKj4oYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgbV9zdHJpbmcgPSB7IH07CiB9CiAK
LXRlbXBsYXRlPD4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4o
dW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRD
YXBhY2l0eSkKIHsKLSAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRo
aXMgU3RyaW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQsCi0gICAgLy8gb3RoZXJ3aXNlIGZhbGwg
YmFjayB0byAiYWxsb2NhdGUgYW5kIGNvcHkiIG1ldGhvZC4KLSAgICBtX3N0cmluZyA9IFN0cmlu
ZygpOwotICAgIAotICAgIEFTU0VSVChtX2lzOEJpdCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5p
czhCaXQoKSk7Ci0gICAgCi0gICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgewotICAgICAg
ICBhdXRvIGV4cGVjdGVkU3RyaW5nSW1wbCA9IFN0cmluZ0ltcGw6OnRyeVJlYWxsb2NhdGUobV9i
dWZmZXIucmVsZWFzZU5vbk51bGwoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVy
czgpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWV4cGVjdGVkU3RyaW5nSW1wbCkpCi0gICAgICAg
ICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKLSAgICAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGV4
cGVjdGVkU3RyaW5nSW1wbC52YWx1ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWxsb2NhdGVC
dWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBBU1NF
UlQoaGFzT3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0
aCk7CisgICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmlu
Z0J1aWxkZXIpLCByZWFsbG9jYXRlIGl0LgorICAgIGlmIChtX2J1ZmZlcikgeworICAgICAgICBt
X3N0cmluZyA9IHsgfTsgLy8gQ2xlYXIgdGhlIHN0cmluZyB0byByZW1vdmUgdGhlIHJlZmVyZW5j
ZSB0byBtX2J1ZmZlciBpZiBhbnkgYmVmb3JlIGNoZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQg
b2YgbV9idWZmZXIuCisgICAgICAgIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpIHsKKyAgICAg
ICAgICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlckNoYXJhY3RlcnM7CisgICAgICAgICAgICBhdXRv
IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeVJlYWxsb2NhdGUobV9idWZmZXIucmVsZWFzZU5vbk51
bGwoKSwgcmVxdWlyZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIWJ1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBkaWRPdmVyZmxvdygpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VCgobV9pczhCaXQgPT0gc3RkOjppc19zYW1lX3Y8Q2hhcmFjdGVyVHlwZSwgTENoYXI+KSk7Cisg
ICAgICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUoKmJ1ZmZlcik7CisgICAgICAgICAgICBtX2J1
ZmZlckNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PExDaGFyKj4oYnVmZmVyQ2hhcmFjdGVy
cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhbGxvY2F0
ZUJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPihjaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCksIHJlcXVp
cmVkQ2FwYWNpdHkpOwogfQogCi10ZW1wbGF0ZTw+Ci12b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxs
b2NhdGVCdWZmZXI8VUNoYXI+KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQordm9pZCBTdHJpbmdC
dWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpCiB7Ci0g
ICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1aWxk
ZXIpLCByZWFsbG9jYXRlIGl0LAotICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gImFsbG9j
YXRlIGFuZCBjb3B5IiBtZXRob2QuCi0gICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAKLSAg
ICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVy
dChtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOwotICAgIGVsc2UgaWYg
KG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgewotICAgICAgICBhdXRvIGV4cGVjdGVkU3RyaW5nSW1w
bCA9IFN0cmluZ0ltcGw6OnRyeVJlYWxsb2NhdGUobV9idWZmZXIucmVsZWFzZU5vbk51bGwoKSwg
cmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCFleHBlY3RlZFN0cmluZ0ltcGwpKQotICAgICAgICAgICAgcmV0dXJuIGRpZE92ZXJmbG93
KCk7Ci0gICAgICAgIG1fYnVmZmVyID0gV1RGTW92ZShleHBlY3RlZFN0cmluZ0ltcGwudmFsdWUo
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0
ZXJzMTYoKSwgcmVxdWlyZWRMZW5ndGgpOwotICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkgfHwg
bV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBpZiAobV9pczhCaXQp
CisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KHJlcXVpcmVkQ2FwYWNpdHkpOworICAg
IGVsc2UKKyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4ocmVxdWlyZWRDYXBhY2l0eSk7
CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0Nh
cGFjaXR5KQogewogICAgIGlmIChoYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQobmV3Q2FwYWNpdHkgPD0gU3RyaW5nOjpNYXhMZW5ndGgpOworCiAgICAgaWYgKG1f
YnVmZmVyKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBidWZmZXIsIHRoZW4g
Z3JvdyBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fYnVmZmVyLT5s
ZW5ndGgoKSkgewotICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAgICAg
ICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihuZXdDYXBhY2l0eSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obmV3Q2FwYWNp
dHkpOwotICAgICAgICB9CisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fYnVmZmVyLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIEdyb3cgdGhlIHN0cmluZywgaWYgbmVjZXNzYXJ5LgotICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgaWYgKG5l
d0NhcGFjaXR5ID4gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoIWxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIExDaGFyKiBudWxsUGxhY2Vob2xkZXIgPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgIGFsbG9jYXRlQnVmZmVyKG51bGxQbGFjZWhvbGRlciwgbmV3Q2FwYWNpdHkpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChtX3N0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBuZXdDYXBhY2l0eSk7CisgICAgICAg
IGlmIChuZXdDYXBhY2l0eSA+IG1fbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIW1fbGVuZ3Ro
KQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPExDaGFyPihzdGF0aWNfY2FzdDxMQ2hh
cio+KG51bGxwdHIpLCBuZXdDYXBhY2l0eSk7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0cmlu
Zy5pczhCaXQoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obV9zdHJp
bmcuY2hhcmFjdGVyczgoKSwgbmV3Q2FwYWNpdHkpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBuZXdDYXBh
Y2l0eSk7CisgICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBuZXdDYXBhY2l0eSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgQVNTRVJU
KGhhc092ZXJmbG93ZWQoKSB8fCAhbmV3Q2FwYWNpdHkgfHwgbV9idWZmZXItPmxlbmd0aCgpID49
IG5ld0NhcGFjaXR5KTsKIH0KIAotLy8gTWFrZSAnYWRkaXRpb25hbExlbmd0aCcgYWRkaXRpb25h
bCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1f
bGVuZ3RoLAotLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0b3Jh
Z2UuCi0vLyBSZXR1cm5zIG51bGxwdHIgaWYgdGhlIHNpemUgb2YgdGhlIG5ldyBidWlsZGVyIHdv
dWxkIGhhdmUgb3ZlcmZsb3dlZAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxX
QVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JB
cHBlbmRpbmcodW5zaWduZWQgYWRkaXRpb25hbExlbmd0aCkKKy8vIE1ha2UgJ2FkZGl0aW9uYWxM
ZW5ndGgnIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRh
dGUgbV9zdHJpbmcgJiBtX2xlbmd0aCB0byB1c2UsCisvLyB0aGF0IGNhcGFjaXR5IGFuZCByZXR1
cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3RvcmFnZSBzbyB0aGUgY2FsbGVy
IGNhbiB3cml0ZSBjaGFyYWN0ZXJzIHRoZXJlLgorLy8gUmV0dXJucyBudWxscHRyIGlmIGFsbG9j
YXRpb24gZmFpbHMsIGxlbmd0aCBvdmVyZmxvd3MsIG9yIGlmIHRvdGFsIGNhcGFjaXR5IGlzIDAg
c28gbm8gYnVmZmVyIGlzIG5lZWRlZC4KKy8vIFRoZSBjYWxsZXIgaGFzIHRoZSByZXNwb25zaWJp
bGl0eSBmb3IgY2hlY2tpbmcgdGhhdCBDaGFyYWN0ZXJUeXBlIGlzIHRoZSB0eXBlIG9mIHRoZSBl
eGlzdGluZyBidWZmZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNf
SU5MSU5FIENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVu
ZGluZyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKLSAgICBBU1NFUlQoYWRkaXRpb25hbExl
bmd0aCk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBzaXplIG9mIHRoZSBidWlsZGVyIGFm
dGVyIGFwcGVuZGluZy4KLSAgICBDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGggPSBtX2xlbmd0
aCArIGFkZGl0aW9uYWxMZW5ndGg7Ci0gICAgaWYgKHJlcXVpcmVkTGVuZ3RoLmhhc092ZXJmbG93
ZWQoKSkgewotICAgICAgICBkaWRPdmVyZmxvdygpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAobV9idWZmZXIgJiYgcmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgp
KSB7CisgICAgICAgIG1fc3RyaW5nID0geyB9OworICAgICAgICByZXR1cm4gYnVmZmVyQ2hhcmFj
dGVyczxDaGFyYWN0ZXJUeXBlPigpICsgc3RkOjpleGNoYW5nZShtX2xlbmd0aCwgcmVxdWlyZWRM
ZW5ndGgpOwogICAgIH0KLQotICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRo
b3V0T3ZlcmZsb3dDaGVjazxDaGFyYWN0ZXJUeXBlPihyZXF1aXJlZExlbmd0aCk7CisgICAgcmV0
dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlPENoYXJhY3RlclR5cGU+KHJlcXVp
cmVkTGVuZ3RoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlT
X0lOTElORSBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBl
bmRpbmdXaXRob3V0T3ZlcmZsb3dDaGVjayhDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpCisv
LyBTaGFyZWQgYnkgdGhlIG90aGVyIGV4dGVuZEJ1ZmZlciBmdW5jdGlvbnMuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjpleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsK
LSAgICBBU1NFUlQoIXJlcXVpcmVkTGVuZ3RoLmhhc092ZXJmbG93ZWQoKSk7Ci0KLSAgICBpZiAo
bV9idWZmZXIgJiYgKHJlcXVpcmVkTGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSA8PSBtX2J1
ZmZlci0+bGVuZ3RoKCkpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBidWZmZXIgaXMgdmFsaWQgaXQg
bXVzdCBiZSBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBjdXJyZW50IGJ1aWxkZXIgY29udGVudHMh
Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0
PHVuc2lnbmVkPigpKTsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3Ro
LnVuc2FmZUdldCgpOwotICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgICAgICBtX2xl
bmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAgICAgICByZXR1cm4gZ2V0QnVmZmVyQ2hhcmFjdGVy
czxDaGFyYWN0ZXJUeXBlPigpICsgY3VycmVudExlbmd0aDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2U8Q2hhcmFjdGVyVHlwZT4ocmVxdWlyZWRM
ZW5ndGgudW5zYWZlR2V0KCkpOworICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICBp
ZiAoIXJlcXVpcmVkTGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZWFsbG9j
YXRlQnVmZmVyKGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsK
KyAgICBpZiAoVU5MSUtFTFkoaGFzT3ZlcmZsb3dlZCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIGJ1ZmZlckNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIHN0ZDo6
ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAotTENoYXIqIFN0cmluZ0J1
aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgoQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVu
Z3RoKQorLy8gQWx0ZXJhdGl2ZSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcgdGhhdCBjYW4gYmUg
Y2FsbGVkIGZyb20gdGhlIGhlYWRlciB3aXRob3V0IGlubGluaW5nLgorTENoYXIqIFN0cmluZ0J1
aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2lnbmVkIHJlcXVpcmVkTGVu
Z3RoKQogewotICAgIGlmIChVTkxJS0VMWShyZXF1aXJlZExlbmd0aC5oYXNPdmVyZmxvd2VkKCkp
KSB7Ci0gICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hl
Y2s8TENoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKKyAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBw
ZW5kaW5nPExDaGFyPihyZXF1aXJlZExlbmd0aCk7CiB9CiAKLVVDaGFyKiBTdHJpbmdCdWlsZGVy
OjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgp
CitVQ2hhciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29u
dmVydCh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKLSAgICBpZiAoVU5MSUtFTFkocmVxdWly
ZWRMZW5ndGguaGFzT3ZlcmZsb3dlZCgpKSkgewotICAgICAgICBkaWRPdmVyZmxvdygpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CiAgICAgaWYgKG1faXM4Qml0KSB7Ci0gICAgICAg
IGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOwotICAgICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVu
c2lnbmVkPigpKTsKLSAgICAgICAgICAgIGNoYXJhY3RlcnMgPSBtX2J1ZmZlci0+Y2hhcmFjdGVy
czgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5n
dGgoKSA9PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICAgICAgY2hh
cmFjdGVycyA9IG1fc3RyaW5nLmlzTnVsbCgpID8gbnVsbHB0ciA6IG1fc3RyaW5nLmNoYXJhY3Rl
cnM4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY2hhcmFj
dGVycywgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aC51bnNhZmVH
ZXQoKSkpOworICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4oY2hhcmFjdGVyczgoKSwgZXhw
YW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOwogICAgICAgICBpZiAo
VU5MSUtFTFkoaGFzT3ZlcmZsb3dlZCgpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgcmV0dXJu
IG1fYnVmZmVyQ2hhcmFjdGVyczE2ICsgb2xkTGVuZ3RoOworICAgICAgICByZXR1cm4gYnVmZmVy
Q2hhcmFjdGVyczxVQ2hhcj4oKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVu
Z3RoKTsKICAgICB9Ci0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRP
dmVyZmxvd0NoZWNrPFVDaGFyPihyZXF1aXJlZExlbmd0aCk7Ci19Ci0KLS8vIE1ha2UgJ3JlcXVp
cmVkTGVuZ3RoJyBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0
cmluZyAmIG1fbGVuZ3RoLAotLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2Nh
dGVkIHN0b3JhZ2UuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJU
eXBlKiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSh1bnNp
Z25lZCByZXF1aXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0g
ICAgQVNTRVJUKHJlcXVpcmVkTGVuZ3RoKTsKLQotICAgIGlmIChtX2J1ZmZlcikgewotICAgICAg
ICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBh
cyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAgICAgIAot
ICAgICAgICByZWFsbG9jYXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGV4cGFuZGVkQ2FwYWNpdHko
Y2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsK
LSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9sZW5ndGggPyBtX3N0cmluZy5jaGFyYWN0ZXJzPENo
YXJhY3RlclR5cGU+KCkgOiBudWxscHRyLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJl
cXVpcmVkTGVuZ3RoKSk7Ci0gICAgfQotICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoYXJhY3RlclR5cGUqIHJlc3VsdCA9
IGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIG1fbGVuZ3RoLnVuc2FmZUdl
dCgpOwotICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgQVNTRVJUKCFoYXNPdmVy
Zmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5z
YWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmc8VUNoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAogdm9pZCBT
dHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGggfHwgaGFzT3ZlcmZsb3dlZCgpKQog
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2hhcmFjdGVycyk7Ci0KICAgICBpZiAobV9p
czhCaXQgJiYgbGVuZ3RoID09IDEgJiYgaXNMYXRpbjEoY2hhcmFjdGVyc1swXSkpIHsKICAgICAg
ICAgYXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXJzWzBdKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG9wdGltaXplIG1lbW9yeSBi
eSBrZWVwaW5nIHRoZSBzdHJpbmcgOC1iaXQgd2hlbiBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIExh
dGluLTE/Ci0KLSAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmcxNihtX2xlbmd0aCArIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKCFkZXN0aW5hdGlvbikp
Ci0gICAgICAgIHJldHVybjsKLSAgICBzdGQ6Om1lbWNweShkZXN0aW5hdGlvbiwgY2hhcmFjdGVy
cywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgQVNT
RVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0g
bV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBpZiAoYXV0byBkZXN0aW5hdGlv
biA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZlcnQoc2F0dXJhdGVkU3VtPHVp
bnQzMl90PihtX2xlbmd0aCwgbGVuZ3RoKSkpCisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFy
YWN0ZXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB2b2lkIFN0cmlu
Z0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCB8fCBoYXNPdmVyZmxvd2VkKCkpCiAgICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKLQogICAgIGlmIChtX2lzOEJp
dCkgewotICAgICAgICBMQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmc8TENoYXI+KGxlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAg
ICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChsZW5ndGggPiA4KQotICAgICAgICAgICAgc3RkOjptZW1jcHkoZGVz
dGluYXRpb24sIGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgLy8gRklYTUU6IEhvdyBzdHJvbmcgaXMgb3VyIGV2aWRlbmNlIHRoYXQgdGhpcyBpcyBmYXN0
ZXIgdGhhbiBtZW1jcHk/IFdoYXQgcGxhdGZvcm1zIGlzIHRoaXMgdHJ1ZSBmb3I/Ci0gICAgICAg
ICAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICAgICAgICAg
IHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbisr
ID0gKmNoYXJhY3RlcnMrKzsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBkZXN0aW5hdGlv
biA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzxMQ2hhcj4oc2F0dXJhdGVkU3VtPHVpbnQzMl90
PihtX2xlbmd0aCwgbGVuZ3RoKSkpCisgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFj
dGVycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8VUNoYXI+
KGxlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VS
VChoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgICAgICB3aGls
ZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gKmNoYXJh
Y3RlcnMrKzsKKyAgICAgICAgaWYgKGF1dG8gZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JB
cHBlbmRpbmc8VUNoYXI+KHNhdHVyYXRlZFN1bTx1aW50MzJfdD4obV9sZW5ndGgsIGxlbmd0aCkp
KQorICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNo
YXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgfQogfQogCi0jaWYgVVNFKENGKQotCi12b2lkIFN0cmlu
Z0J1aWxkZXI6OmFwcGVuZChDRlN0cmluZ1JlZiBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRo
OiBhdm9pZCBjb25zdHJ1Y3RpbmcgYSB0ZW1wb3JhcnkgU3RyaW5nIHdoZW4gcG9zc2libGUuCi0g
ICAgaWYgKGF1dG8qIGNoYXJhY3RlcnMgPSBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyaW5nLCBr
Q0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSkpIHsKLSAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIENGU3RyaW5nR2V0TGVu
Z3RoKHN0cmluZykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGFwcGVuZChTdHJpbmco
c3RyaW5nKSk7Ci19Ci0KLSNlbmRpZgotCiBib29sIFN0cmluZ0J1aWxkZXI6OmNhblNocmluaygp
IGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIC8vIE9ubHkgc2hyaW5rIHRoZSBidWZmZXIgaWYgaXQncyBsZXNzIHRoYW4gODAlIGZ1
bGwuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB0dW5lIHRoaXMgaGV1cmlzdGljIGJhc2VkIHNv
bWUgYWN0dWFsIHRlc3QgY2FzZSBtZWFzdXJlbWVudHMuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0g
bV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgcmV0dXJuIG1fYnVmZmVyICYmIG1fYnVmZmVyLT5s
ZW5ndGgoKSA+IChsZW5ndGggKyAobGVuZ3RoID4+IDIpKTsKKyAgICByZXR1cm4gIWhhc092ZXJm
bG93ZWQoKSAmJiBtX2J1ZmZlciAmJiBtX2J1ZmZlci0+bGVuZ3RoKCkgPiBtX2xlbmd0aCArICht
X2xlbmd0aCA+PiAyKTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCgpCiB7
CiAgICAgaWYgKGNhblNocmluaygpKSB7Ci0gICAgICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAg
ICAgIHJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obV9sZW5ndGgudW5z
YWZlR2V0KCkpOwotICAgICAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIG1f
c3RyaW5nID0gV1RGTW92ZShtX2J1ZmZlcik7CisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXIobV9s
ZW5ndGgpOworICAgICAgICBtX3N0cmluZyA9IHN0ZDo6ZXhjaGFuZ2UobV9idWZmZXIsIG51bGxw
dHIpOwogICAgIH0KIH0KIAogYm9vbCBTdHJpbmdCdWlsZGVyOjppc0FsbEFTQ0lJKCkgY29uc3QK
IHsKLSAgICBhdXRvIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9pczhCaXQpCi0gICAgICAgIHJldHVybiBj
aGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICByZXR1cm4g
Y2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOworICAgIHJldHVy
biBTdHJpbmdWaWV3IHsgKnRoaXMgfS5pc0FsbEFTQ0lJKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmggYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA3MDE4YTFhYjdiZGJkNzRl
NmNiN2FmY2QzNTQ0ZWFlYjkzOTBiZTVlLi45MmJhMDQzNTE1YTlhYWM2MjBkYTE2NzlkNTA0Yjg4
NDUxNjc4NzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI2LDQwMCArMjYsMzU1IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0ludGVnZXJUb1N0
cmluZ0NvbnZlcnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIFN0cmluZ0J1aWxkZXIgY3VycmVudGx5IHVzZXMgYSBD
aGVja2VkPGludDMyX3QsIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93PiBmb3IgbV9sZW5ndGgu
Ci0vLyBJZGVhbGx5LCB3ZSB3b3VsZCB3YW50IHRvIG1ha2UgU3RyaW5nQnVpbGRlciBhIHRlbXBs
YXRlIHdpdGggYW4gT3ZlcmZsb3dIYW5kbGVyIHBhcmFtZXRlciwgYW5kCi0vLyBtX2xlbmd0aCBj
YW4gYmUgaW5zdGFudGlhdGVkIGJhc2VkIG9uIHRoYXQgT3ZlcmZsb3dIYW5kbGVyIGluc3RlYWQu
IEhvd2V2ZXIsIGN1cnJlbnRseSwgd2UncmUKLS8vIG5vdCBhYmxlIHRvIGdldCBjbGFuZyB0byBl
eHBvcnQgZXhwbGljaXRseSBpbnN0YW50aWF0ZWQgdGVtcGxhdGUgbWV0aG9kcyAod2hpY2ggd291
bGQgYmUgbmVlZGVkCi0vLyBpZiB3ZSB0ZW1wbGF0aXplIFN0cmluZ0J1aWxkZXIpLiBBcyBhIHdv
cmthcm91bmQsIHdlIHVzZSB0aGUgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3cgaGFuZGxlcgot
Ly8gaW5zdGVhZCB0byBkbyBhIHJ1bnRpbWUgY2hlY2sgb24gd2hldGhlciBpdCBzaG91bGQgY3Jh
c2ggb24gb3ZlcmZsb3dzIG9yIG5vdC4KLS8vCi0vLyBXaGVuIGNsYW5nIGlzIGFibGUgdG8gZXhw
b3J0IGV4cGxpY2l0bHkgaW5zdGFudGlhdGVkIHRlbXBsYXRlIG1ldGhvZHMsIHdlIGNhbiB0ZW1w
bGF0aXplCi0vLyBTdHJpbmdCdWlsZGVyIGFuZCBkbyBhd2F5IHdpdGggQ29uZGl0aW9uYWxDcmFz
aE9uT3ZlcmZsb3cuCi0vLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5MTA1MC4KLQogY2xhc3MgU3RyaW5nQnVpbGRlciB7Ci0gICAgLy8gRGlzYWxsb3cgY29w
eWluZyBzaW5jZSBpdCdzIGV4cGVuc2l2ZSBhbmQgd2UgZG9uJ3Qgd2FudCBjb2RlIHRvIGRvIGl0
IGJ5IGFjY2lkZW50LgorICAgIC8vIERpc2FsbG93IGNvcHlpbmcgc2luY2UgaXQncyBleHBlbnNp
dmUgYW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gaXQgYnkgYWNjaWRlbnQuCiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3RyaW5nQnVpbGRlcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIE92ZXJmbG93SGFuZGxlciB7Ci0gICAgICAgIENy
YXNoT25PdmVyZmxvdywKLSAgICAgICAgUmVjb3JkT3ZlcmZsb3cKLSAgICB9OwotCi0gICAgU3Ry
aW5nQnVpbGRlcihPdmVyZmxvd0hhbmRsZXIgaGFuZGxlciA9IE92ZXJmbG93SGFuZGxlcjo6Q3Jh
c2hPbk92ZXJmbG93KQotICAgICAgICA6IG1fYnVmZmVyQ2hhcmFjdGVyczgobnVsbHB0cikKLSAg
ICB7Ci0gICAgICAgIG1fbGVuZ3RoLnNldFNob3VsZENyYXNoT25PdmVyZmxvdyhoYW5kbGVyID09
IE92ZXJmbG93SGFuZGxlcjo6Q3Jhc2hPbk92ZXJmbG93KTsKLSAgICB9CisgICAgU3RyaW5nQnVp
bGRlcigpID0gZGVmYXVsdDsKICAgICBTdHJpbmdCdWlsZGVyKFN0cmluZ0J1aWxkZXImJikgPSBk
ZWZhdWx0OwogICAgIFN0cmluZ0J1aWxkZXImIG9wZXJhdG9yPShTdHJpbmdCdWlsZGVyJiYpID0g
ZGVmYXVsdDsKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkaWRPdmVyZmxvdygpIHsgbV9sZW5n
dGgub3ZlcmZsb3dlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGhhc092ZXJmbG93ZWQo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aC5oYXNPdmVyZmxvd2VkKCk7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgY3Jhc2hlc09uT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aC5z
aG91bGRDcmFzaE9uT3ZlcmZsb3coKTsgfQorICAgIGVudW0gY2xhc3MgT3ZlcmZsb3dIYW5kbGVy
IHsgQ3Jhc2hPbk92ZXJmbG93LCBSZWNvcmRPdmVyZmxvdyB9OyAvLyBGSVhNRTogRGVzcGl0ZSBp
dHMgdXNlIGluIENoZWNrZWQ8PiwgImhhbmRsZXIiIGRvZXMgbm90IHNlZW0gdGhlIGNvcnJlY3Qg
bmFtZSBmb3IgdGhpcy4KKyAgICBleHBsaWNpdCBTdHJpbmdCdWlsZGVyKE92ZXJmbG93SGFuZGxl
cik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCBzd2FwKFN0cmluZ0J1aWxkZXImKTsK
KworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkaWRPdmVyZmxvdygpOworICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggPiBTdHJpbmc6
Ok1heExlbmd0aDsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjcmFzaGVzT25PdmVyZmxvdygp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93OyB9CiAKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQp
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgTENo
YXIqLCB1bnNpZ25lZCk7Ci0KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kQ2hhcmFjdGVy
cyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpIHsgYXBwZW5kQ2hhcmFj
dGVycyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCk7
IH0KIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IEF0b21TdHJpbmcmIGF0b21TdHJpbmcpCi0gICAg
ewotICAgICAgICBhcHBlbmQoYXRvbVN0cmluZy5zdHJpbmcoKSk7Ci0gICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiB2b2lkIGFwcGVuZChTdHJpbmdUeXBlcy4uLik7
CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAg
IGlmIChoYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBrZWVwIHRoZXNlIG92ZXJsb2FkcyBvbmx5IGlmIG9wdGltaXphdGlvbnMgbWFr
ZSB0aGVtIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIHNpbmdsZS1hcmd1bWVudCBmb3JtIG9mIHRo
ZSB2YXJpYWRpYyBhcHBlbmQgYWJvdmUuCisgICAgdm9pZCBhcHBlbmQoY29uc3QgQXRvbVN0cmlu
ZyYgc3RyaW5nKSB7IGFwcGVuZChzdHJpbmcuc3RyaW5nKCkpOyB9CisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBhcHBlbmQoU3RyaW5nVmlldyk7CisgICAgdm9pZCBh
cHBlbmQoVUNoYXIpOworICAgIHZvaWQgYXBwZW5kKExDaGFyKTsKKyAgICB2b2lkIGFwcGVuZChj
aGFyIGNoYXJhY3RlcikgeyBhcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcikpOyB9
CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciopOwogCi0gICAgICAgIGlmICghc3RyaW5nLmxl
bmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBBZGQgYSBTdHJpbmdU
eXBlQWRhcHRlciBzbyB3ZSBjYW4gYXBwZW5kIG9uZSBzdHJpbmcgYnVpbGRlciB0byBhbm90aGVy
IHdpdGggdmFyaWFkaWMgYXBwZW5kLgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZ0J1aWxk
ZXImKTsKIAotICAgICAgICAvLyBJZiB3ZSdyZSBhcHBlbmRpbmcgdG8gYW4gZW1wdHkgc3RyaW5n
LCBhbmQgdGhlcmUgaXMgbm90IGEgYnVmZmVyIChyZXNlcnZlQ2FwYWNpdHkgaGFzIG5vdCBiZWVu
IGNhbGxlZCkKLSAgICAgICAgLy8gdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgotICAgICAg
ICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgewotICAgICAgICAgICAgbV9zdHJpbmcgPSBz
dHJpbmc7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAg
ICAgIG1faXM4Qml0ID0gbV9zdHJpbmcuaXM4Qml0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4gQUxXQVlTX0lO
TElORSB2b2lkIGFwcGVuZExpdGVyYWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3Rl
ckNvdW50XSkgeyBhcHBlbmRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGNoYXJhY3RlckNvdW50IC0g
MSk7IH0KIAotICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAgYXBwZW5k
Q2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczE2
KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3Ry
aW5nQnVpbGRlciYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0
ZXIoVUNoYXIpID0gZGVsZXRlOworICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVyKExDaGFyKSA9IGRl
bGV0ZTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihjaGFyKSA9IGRlbGV0ZTsKKyAgICB2b2lk
IGFwcGVuZENoYXJhY3RlcihVQ2hhcjMyKTsKIAotICAgICAgICBpZiAoIW90aGVyLm1fbGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5nKGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5nOjpNYXhMZW5n
dGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmco
Y29uc3QgU3RyaW5nJik7CiAKLSAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVt
cHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhh
cyBub3QgYmVlbiBjYWxsZWQpCi0gICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmlu
Zy4KLSAgICAgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIgJiYgIW90aGVyLm1fc3RyaW5n
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX3N0cmluZyA9IG90aGVyLm1fc3RyaW5nOwotICAg
ICAgICAgICAgbV9sZW5ndGggPSBvdGhlci5tX2xlbmd0aDsKLSAgICAgICAgICAgIG1faXM4Qml0
ID0gb3RoZXIubV9pczhCaXQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAv
LyBGSVhNRTogVW5jbGVhciB3aHkgdG9TdHJpbmcgcmV0dXJucyBTdHJpbmcgYW5kIHRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSByZXR1cm5zIGNvbnN0IFN0cmluZyYuIE1ha2UgdGhlbSBjb25zaXN0
ZW50LgorICAgIFN0cmluZyB0b1N0cmluZygpOworICAgIGNvbnN0IFN0cmluZyYgdG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCkgY29uc3Q7CisgICAgQXRvbVN0cmluZyB0b0F0b21TdHJpbmcoKSBj
b25zdDsKIAotICAgICAgICBpZiAob3RoZXIuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBlbmRD
aGFyYWN0ZXJzKG90aGVyLmNoYXJhY3RlcnM4KCksIG90aGVyLm1fbGVuZ3RoLnVuc2FmZUdldCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhvdGhlci5jaGFy
YWN0ZXJzMTYoKSwgb3RoZXIubV9sZW5ndGgudW5zYWZlR2V0KCkpOwotICAgIH0KKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9sZW5ndGg7IH0KKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKLSAg
ICB7Ci0gICAgICAgIGlmIChzdHJpbmdWaWV3LmlzOEJpdCgpKQotICAgICAgICAgICAgYXBwZW5k
Q2hhcmFjdGVycyhzdHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZ1ZpZXcu
Y2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCkpOwotICAgIH0KKyAgICBvcGVyYXRv
ciBTdHJpbmdWaWV3KCkgY29uc3Q7CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBj
b25zdDsKIAotI2lmIFVTRShDRikKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQo
Q0ZTdHJpbmdSZWYpOwotI2VuZGlmCi0jaWYgVVNFKENGKSAmJiBkZWZpbmVkKF9fT0JKQ19fKQot
ICAgIHZvaWQgYXBwZW5kKE5TU3RyaW5nICpzdHJpbmcpIHsgYXBwZW5kKChfX2JyaWRnZSBDRlN0
cmluZ1JlZilzdHJpbmcpOyB9Ci0jZW5kaWYKKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0
dXJuIG1faXM4Qml0OyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycygpIGNvbnN0OworICAgIGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzOCgpIGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlcnM8TENoYXI+KCk7IH0KKyAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVyczxVQ2hh
cj4oKTsgfQogICAgIAotICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCA9IFN0cmluZzo6TWF4TGVuZ3Ro
KQotICAgIHsKLSAgICAgICAgaWYgKG9mZnNldCA+PSBzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdDsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpOwog
Ci0gICAgICAgIHVuc2lnbmVkIGNsYW1wZWRMZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIHN0cmlu
Zy5sZW5ndGgoKSAtIG9mZnNldCk7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAg
ICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzOCgpICsgb2Zmc2V0LCBj
bGFtcGVkTGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVy
cyhzdHJpbmcuY2hhcmFjdGVyczE2KCkgKyBvZmZzZXQsIGNsYW1wZWRMZW5ndGgpOwotICAgIH0K
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNpemUodW5zaWduZWQgbmV3TGVuZ3RoKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5TaHJpbmsoKSBjb25zdDsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCi0gICAgdm9pZCBhcHBlbmQoY29u
c3QgY2hhciogY2hhcmFjdGVycykKLSAgICB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzKQotICAg
ICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBzdHJsZW4oY2hhcmFjdGVycykp
OwotICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihVQ2hhcikgPSBkZWxldGU7Ci0gICAgdm9pZCBh
cHBlbmQoVUNoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChoYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2Fm
ZUdldDx1bnNpZ25lZD4oKTsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIGxlbmd0aCA8IG1fYnVm
ZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKCFt
X2lzOEJpdCkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W2xlbmd0aF0g
PSBjOwotICAgICAgICAgICAgICAgIG1fbGVuZ3RoKys7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaXNMYXRpbjEoYykpIHsKLSAgICAg
ICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4W2xlbmd0aF0gPSBzdGF0aWNfY2FzdDxMQ2hh
cj4oYyk7Ci0gICAgICAgICAgICAgICAgbV9sZW5ndGgrKzsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXBwZW5kQ2hhcmFjdGVycygm
YywgMSk7Ci0gICAgfQorcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0aW9u
Q2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgQ3VycmVudENoYXJhY3RlclR5cGU+IHZvaWQgYWxsb2Nh
dGVCdWZmZXIoY29uc3QgQ3VycmVudENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1
bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSk7
CisgICAgdm9pZCByZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOwog
Ci0gICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoTENoYXIpID0gZGVsZXRlOwotICAgIHZvaWQgYXBw
ZW5kKExDaGFyIGMpCi0gICAgewotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVH
ZXQ8dW5zaWduZWQ+KCk7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBsZW5ndGggPCBtX2J1ZmZl
ci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2lz
OEJpdCkKLSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4W2xlbmd0aF0gPSBjOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W2xl
bmd0aF0gPSBjOwotICAgICAgICAgICAgbV9sZW5ndGgrKzsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKCZjLCAxKTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmcodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5cGUqIGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZ1Nsb3dDYXNlKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgTENoYXIqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2lnbmVkIHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVUNoYXIqIGV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZ1dpdGhVcGNvbnZlcnQodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwogCi0g
ICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoY2hhcikgPSBkZWxldGU7Ci0gICAgdm9pZCBhcHBlbmQo
Y2hhciBjKQotICAgIHsKLSAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjKSk7Ci0g
ICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUg
Q2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVycygpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihV
Q2hhcjMyIGMpCi0gICAgewotICAgICAgICBpZiAoVV9JU19CTVAoYykpIHsKLSAgICAgICAgICAg
IGFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGFwcGVuZChVMTZfTEVBRChjKSk7Ci0gICAgICAgIGFwcGVuZChVMTZf
VFJBSUwoYykpOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRh
cHRlcnM+IHZvaWQgYXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLik7CiAK
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nOworICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBtX2J1ZmZlcjsKKyAgICBMQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJzIHsgbnVsbHB0
ciB9OworICAgIHVuc2lnbmVkIG1fbGVuZ3RoIHsgMCB9OworICAgIGJvb2wgbV9pczhCaXQgeyB0
cnVlIH07CisgICAgYm9vbCBtX3Nob3VsZENyYXNoT25PdmVyZmxvdyB7IHRydWUgfTsKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgIG11dGFibGUgYm9vbCBtX2lzUmVpZmllZCB7IGZhbHNlIH07Cisj
ZW5kaWYKK307CiAKLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kTGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylb
Y2hhcmFjdGVyQ291bnRdKSB7IGFwcGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgY2hhcmFjdGVy
Q291bnQgLSAxKTsgfQordGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
blRyYWl0PFN0cmluZ0J1aWxkZXI+OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5n
VHlwZXM+IHZvaWQgYXBwZW5kKFN0cmluZ1R5cGVzLi4uKTsKKy8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gU3RyaW5nVmlldyBhbmQgbWFrZSBpdCB0YWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIGEg
U3RyaW5nQnVpbGRlcj8KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgZXF1
YWwoY29uc3QgU3RyaW5nQnVpbGRlciYsIGNvbnN0IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCBs
ZW5ndGgpOwogCi0gICAgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9z
dHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9idWZmZXIgfHwgbV9pc1Jl
aWZpZWQpOwotICAgICAgICAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fc3RyaW5nOwotICAgICAgICB9CisvLyBJbmxpbmUgZnVuY3Rpb24gaW1wbGVt
ZW50YXRpb25zLgogCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwot
ICAgICAgICBzaHJpbmtUb0ZpdCgpOwotICAgICAgICByZWlmeVN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gbV9zdHJpbmc7Ci0gICAgfQoraW5saW5lIFN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxk
ZXIoT3ZlcmZsb3dIYW5kbGVyIHBvbGljeSkKKyAgICA6IG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93
IHsgcG9saWN5ID09IE92ZXJmbG93SGFuZGxlcjo6Q3Jhc2hPbk92ZXJmbG93IH0KK3sKK30KIAot
ICAgIGNvbnN0IFN0cmluZyYgdG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBpZiAo
bV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICByZWlmeVN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gbV9zdHJpbmc7Ci0gICAgfQoraW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6Y2xlYXIo
KQoreworICAgIG1fc3RyaW5nID0geyB9OworICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICBt
X2J1ZmZlckNoYXJhY3RlcnMgPSBudWxscHRyOworICAgIG1fbGVuZ3RoID0gMDsKKyAgICBtX2lz
OEJpdCA9IHRydWU7CisgICAgLy8gV2UgaW50ZW50aW9uYWxseSBkbyBub3QgY2hhbmdlIG1fc2hv
dWxkQ3Jhc2hPbk92ZXJmbG93LgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9pc1JlaWZpZWQg
PSBmYWxzZTsKKyNlbmRpZgorfQogCi0gICAgQXRvbVN0cmluZyB0b0F0b21TdHJpbmcoKSBjb25z
dAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAg
ICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlBdG9tKCk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyBzdWZmaWNpZW50bHkgb3Zlci1hbGxvY2F0ZWQsIG1h
a2UgYSBuZXcgQXRvbVN0cmluZyBmcm9tIGEgY29weSBzbyBpdHMgYnVmZmVyIGlzIG5vdCBzbyBs
YXJnZS4KLSAgICAgICAgaWYgKGNhblNocmluaygpKSB7Ci0gICAgICAgICAgICBpZiAoaXM4Qml0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoY2hhcmFjdGVyczgoKSwgbGVu
Z3RoKCkpOwotICAgICAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoY2hhcmFjdGVyczE2KCksIGxl
bmd0aCgpKTsgICAgICAgICAgICAKLSAgICAgICAgfQoraW5saW5lIHZvaWQgU3RyaW5nQnVpbGRl
cjo6c3dhcChTdHJpbmdCdWlsZGVyJiBvdGhlcikKK3sKKyAgICBtX3N0cmluZy5zd2FwKG90aGVy
Lm1fc3RyaW5nKTsKKyAgICBtX2J1ZmZlci5zd2FwKG90aGVyLm1fYnVmZmVyKTsKKyAgICBzdGQ6
OnN3YXAobV9idWZmZXJDaGFyYWN0ZXJzLCBvdGhlci5tX2J1ZmZlckNoYXJhY3RlcnMpOworICAg
IHN0ZDo6c3dhcChtX2xlbmd0aCwgb3RoZXIubV9sZW5ndGgpOworICAgIHN0ZDo6c3dhcChtX2lz
OEJpdCwgb3RoZXIubV9pczhCaXQpOworICAgIHN0ZDo6c3dhcChtX3Nob3VsZENyYXNoT25PdmVy
Zmxvdywgb3RoZXIubV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpOworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgc3RkOjpzd2FwKG1faXNSZWlmaWVkLCBvdGhlci5tX2lzUmVpZmllZCk7CisjZW5kaWYK
K30KKworaW5saW5lIFN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdAor
eworICAgIGlmIChtX2lzOEJpdCkKKyAgICAgICAgcmV0dXJuIHsgY2hhcmFjdGVyczgoKSwgbGVu
Z3RoKCkgfTsKKyAgICByZXR1cm4geyBjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkgfTsKK30KIAot
ICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEF0b21T
dHJpbmcobV9zdHJpbmcpOwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIExDaGFyKiBTdHJpbmdC
dWlsZGVyOjpidWZmZXJDaGFyYWN0ZXJzPExDaGFyPigpCit7CisgICAgQVNTRVJUKG1faXM4Qml0
KTsKKyAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzOworfQogCi0gICAgICAgIEFTU0VSVCht
X2J1ZmZlcik7Ci0gICAgICAgIHJldHVybiBBdG9tU3RyaW5nKG1fYnVmZmVyLmdldCgpLCAwLCBt
X2xlbmd0aC51bnNhZmVHZXQoKSk7Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgVUNoYXIqIFN0
cmluZ0J1aWxkZXI6OmJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KCkKK3sKKyAgICBBU1NFUlQoIW1f
aXM4Qml0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KG1fYnVmZmVyQ2hh
cmFjdGVycyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTdHJpbmdCdWlsZGVyOjpkaWRPdmVy
ZmxvdygpCit7CisgICAgaWYgKG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93KQorICAgICAgICBDUkFT
SCgpOworICAgIG1fbGVuZ3RoID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OworfQorCitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoVUNoYXIgY2hhcmFjdGVy
KQoreworICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAm
JiBtX3N0cmluZy5pc051bGwoKSkgeworICAgICAgICBpZiAoIW1faXM4Qml0KSB7CisgICAgICAg
ICAgICBidWZmZXJDaGFyYWN0ZXJzPFVDaGFyPigpW21fbGVuZ3RoKytdID0gY2hhcmFjdGVyOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpc0xhdGluMShjaGFy
YWN0ZXIpKSB7CisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXJzPExDaGFyPigpW21fbGVuZ3Ro
KytdID0gc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9CisgICAgYXBwZW5kQ2hhcmFjdGVycygmY2hhcmFjdGVyLCAxKTsK
K30KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoLnVuc2Fm
ZUdldCgpOworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKExDaGFyIGNoYXJhY3Rl
cikKK3sKKyAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkg
JiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG1faXM4Qml0KQorICAgICAgICAg
ICAgYnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4oKVttX2xlbmd0aCsrXSA9IGNoYXJhY3RlcjsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKVttX2xlbmd0
aCsrXSA9IGNoYXJhY3RlcjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBhcHBlbmRDaGFy
YWN0ZXJzKCZjaGFyYWN0ZXIsIDEpOworfQogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fbGVuZ3RoOyB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVt
cHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhh
cyBub3QgYmVlbiBjYWxsZWQpCisgICAgLy8gdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgor
ICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyKSB7CisgICAgICAgIG1fc3RyaW5nID0gc3Ry
aW5nOworICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgbV9pczhC
aXQgPSBtX3N0cmluZy5pczhCaXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0
eSk7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhz
dHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAg
IGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkp
OworfQogCi0gICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlciA/
IG1fYnVmZmVyLT5sZW5ndGgoKSA6IG1fbGVuZ3RoLnVuc2FmZUdldCgpOworaW5saW5lIHZvaWQg
U3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IFN0cmluZ0J1aWxkZXImIG90aGVyKQoreworICAg
IC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBu
b3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKQorICAgIC8v
IHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KKyAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1
ZmZlciAmJiAhb3RoZXIubV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBs
ZW5ndGggZnVuY3Rpb24gaGVyZSBzbyB3ZSBjcmFzaCBvbiBvdmVyZmxvdyB3aXRob3V0IGV4cGxp
Y2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICAgICAgbV9zdHJpbmcgPSBvdGhlci5tX3N0cmluZzsK
KyAgICAgICAgbV9sZW5ndGggPSBvdGhlci5sZW5ndGgoKTsKKyAgICAgICAgbV9pczhCaXQgPSBv
dGhlci5tX2lzOEJpdDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKTsKKyAgICBpZiAob3RoZXIuaXM4
Qml0KCkpCisgICAgICAgIGFwcGVuZENoYXJhY3RlcnMob3RoZXIuY2hhcmFjdGVyczgoKSwgb3Ro
ZXIubV9sZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhvdGhlci5j
aGFyYWN0ZXJzMTYoKSwgb3RoZXIubV9sZW5ndGgpOworfQogCi0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgY2FuU2hyaW5rKCkgY29uc3Q7CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjph
cHBlbmQoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAg
ICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgc2hyaW5rVG9GaXQoKTsKK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFN1YnN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgaWYgKG9mZnNldCA+PSBzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVuc2lnbmVkIGNsYW1wZWRMZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIHN0cmlu
Zy5sZW5ndGgoKSAtIG9mZnNldCk7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAg
YXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczgoKSArIG9mZnNldCwgY2xhbXBlZExl
bmd0aCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0
ZXJzMTYoKSArIG9mZnNldCwgY2xhbXBlZExlbmd0aCk7Cit9CiAKLSAgICBVQ2hhciBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFoYXNPdmVyZmxvd2VkKCkgJiYgaSA8IG1fbGVuZ3RoLnVu
c2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAgICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAgICAg
IHJldHVybiBjaGFyYWN0ZXJzOCgpW2ldOwotICAgICAgICByZXR1cm4gY2hhcmFjdGVyczE2KClb
aV07Ci0gICAgfQoraW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IGNoYXIq
IGNoYXJhY3RlcnMpCit7CisgICAgaWYgKGNoYXJhY3RlcnMpCisgICAgICAgIGFwcGVuZENoYXJh
Y3RlcnMoY2hhcmFjdGVycywgc3RybGVuKGNoYXJhY3RlcnMpKTsKK30KIAotICAgIGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9pczhCaXQp
OwotICAgICAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9zdHJp
bmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0
dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpOworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6
YXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sKKyAgICBpZiAoVV9JU19CTVAoYykpIHsKKyAg
ICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisgICAgYXBwZW5kKFUxNl9MRUFEKGMpKTsKKyAgICBhcHBlbmQoVTE2X1RSQUlMKGMpKTsK
K30KIAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0gICAgICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKTsKLSAgICAgICAgQVNTRVJUKG1f
YnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYoKTsKK2lubGlu
ZSBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcoKQoreworICAgIGlmIChtX3N0cmluZy5p
c051bGwoKSkgeworICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAgICAgICByZWlmeVN0cmluZygp
OwogICAgIH0KLSAgICAKLSAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0
OyB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwotCi0g
ICAgb3BlcmF0b3IgU3RyaW5nVmlldygpIGNvbnN0OworICAgIHJldHVybiBtX3N0cmluZzsKK30K
IAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9sZW5ndGggPSAwOwotICAgICAg
ICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7Ci0gICAg
ICAgIG1fYnVmZmVyQ2hhcmFjdGVyczggPSBudWxscHRyOwotICAgICAgICBtX2lzOEJpdCA9IHRy
dWU7Ci0gICAgfQoraW5saW5lIGNvbnN0IFN0cmluZyYgU3RyaW5nQnVpbGRlcjo6dG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCkgY29uc3QKK3sKKyAgICBpZiAobV9zdHJpbmcuaXNOdWxsKCkpCisg
ICAgICAgIHJlaWZ5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fc3RyaW5nOworfQogCi0gICAgdm9p
ZCBzd2FwKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCi0gICAgewotICAgICAgICBzdGQ6
OnN3YXAobV9sZW5ndGgsIHN0cmluZ0J1aWxkZXIubV9sZW5ndGgpOwotICAgICAgICBtX3N0cmlu
Zy5zd2FwKHN0cmluZ0J1aWxkZXIubV9zdHJpbmcpOwotICAgICAgICBtX2J1ZmZlci5zd2FwKHN0
cmluZ0J1aWxkZXIubV9idWZmZXIpOwotICAgICAgICBzdGQ6OnN3YXAobV9pczhCaXQsIHN0cmlu
Z0J1aWxkZXIubV9pczhCaXQpOwotICAgICAgICBzdGQ6OnN3YXAobV9idWZmZXJDaGFyYWN0ZXJz
OCwgc3RyaW5nQnVpbGRlci5tX2J1ZmZlckNoYXJhY3RlcnM4KTsKLSAgICAgICAgQVNTRVJUKCFt
X2J1ZmZlciB8fCBoYXNPdmVyZmxvd2VkKCkgfHwgbV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVu
Z3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAgfQoraW5saW5lIEF0b21TdHJpbmcgU3Ry
aW5nQnVpbGRlcjo6dG9BdG9tU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZW1wdHlBdG9tKCk7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBhbGxvY2F0
ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKTsKLSAgICB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hh
cmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIHZvaWQgYWxsb2NhdGVCdWZm
ZXJVcENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1
aXJlZExlbmd0aCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBy
ZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIGV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCBhZGRpdGlvbmFsTGVuZ3RoKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUq
IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrKENoZWNrZWRJbnQz
MiByZXF1aXJlZExlbmd0aCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Q2hhcmFjdGVyVHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBMQ2hhciogZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nOChDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBVQ2hhciogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nMTYoQ2hlY2tlZElu
dDMyIHJlcXVpcmVkTGVuZ3RoKTsKKyAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHN1ZmZpY2llbnRs
eSBvdmVyLWFsbG9jYXRlZCwgbWFrZSBhIG5ldyBBdG9tU3RyaW5nIGZyb20gYSBjb3B5IHNvIGl0
cyBidWZmZXIgaXMgbm90IHNvIGxhcmdlLgorICAgIGlmIChjYW5TaHJpbmsoKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZ1ZpZXcgeyAqdGhpcyB9LnRvQXRvbVN0cmluZygpOwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBn
ZXRCdWZmZXJDaGFyYWN0ZXJzKCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVpZnlT
dHJpbmcoKSBjb25zdDsKKyAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gbV9zdHJpbmc7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRl
cnM+IHZvaWQgYXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLik7CisgICAg
Ly8gVXNlIHRoZSBsZW5ndGggZnVuY3Rpb24gaGVyZSBzbyB3ZSBjcmFzaCBvbiBvdmVyZmxvdyB3
aXRob3V0IGV4cGxpY2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICBBU1NFUlQobV9idWZmZXIpOwor
ICAgIHJldHVybiB7IG1fYnVmZmVyLmdldCgpLCAwLCBsZW5ndGgoKSB9OworfQogCi0gICAgbXV0
YWJsZSBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fYnVmZmVyOwot
ICAgIHVuaW9uIHsKLSAgICAgICAgTENoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczg7Ci0gICAgICAg
IFVDaGFyKiBtX2J1ZmZlckNoYXJhY3RlcnMxNjsKLSAgICB9OwotICAgIHN0YXRpY19hc3NlcnQo
U3RyaW5nOjpNYXhMZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCks
ICIiKTsKLSAgICBDaGVja2VkPGludDMyX3QsIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93PiBt
X2xlbmd0aDsKLSAgICBib29sIG1faXM4Qml0IHsgdHJ1ZSB9OwotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgbXV0YWJsZSBib29sIG1faXNSZWlmaWVkIHsgZmFsc2UgfTsKLSNlbmRpZgotfTsKK2lu
bGluZSB1bnNpZ25lZCBTdHJpbmdCdWlsZGVyOjpsZW5ndGgoKSBjb25zdAoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOworICAgIHJldHVybiBtX2xlbmd0aDsKK30KIAot
aW5saW5lIFN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdAoraW5saW5l
IHVuc2lnbmVkIFN0cmluZ0J1aWxkZXI6OmNhcGFjaXR5KCkgY29uc3QKIHsKLSAgICBpZiAobV9p
czhCaXQpCi0gICAgICAgIHJldHVybiB7IGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpIH07Ci0gICAg
cmV0dXJuIHsgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpIH07CisgICAgUkVMRUFTRV9BU1NFUlQo
IWhhc092ZXJmbG93ZWQoKSk7CisgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0
aCgpIDogbV9sZW5ndGg7CiB9CiAKLXRlbXBsYXRlPD4KLUFMV0FZU19JTkxJTkUgTENoYXIqIFN0
cmluZ0J1aWxkZXI6OmdldEJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkKK2lubGluZSBVQ2hhciBT
dHJpbmdCdWlsZGVyOjpvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KG1faXM4Qml0KTsKLSAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzODsKKyAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFoYXNPdmVyZmxvd2VkKCkgJiYgaSA8
IG1fbGVuZ3RoKTsKKyAgICByZXR1cm4gbV9pczhCaXQgPyBjaGFyYWN0ZXJzOCgpW2ldIDogY2hh
cmFjdGVyczE2KClbaV07CiB9CiAKLXRlbXBsYXRlPD4KLUFMV0FZU19JTkxJTkUgVUNoYXIqIFN0
cmluZ0J1aWxkZXI6OmdldEJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KCkKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBjb25zdCBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWls
ZGVyOjpjaGFyYWN0ZXJzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1faXM4Qml0KTsKLSAgICBy
ZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzMTY7CisgICAgQVNTRVJUKChtX2lzOEJpdCA9PSBzdGQ6
OmlzX3NhbWVfdjxDaGFyYWN0ZXJUeXBlLCBMQ2hhcj4pKTsKKyAgICBpZiAoIW1fbGVuZ3RoKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOworICAgIHJl
dHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRlcnM+Ci12b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZEZyb21BZGFwdGVycyhTdHJpbmdUeXBlQWRhcHRlcnMuLi4gYWRhcHRlcnMpCit0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRlcnM+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBw
ZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLiBhZGFwdGVycykKIHsKLSAgICBh
dXRvIHJlcXVpcmVkTGVuZ3RoID0gY2hlY2tlZFN1bTxpbnQzMl90PihtX2xlbmd0aCwgYWRhcHRl
cnMubGVuZ3RoKCkuLi4pOworICAgIGF1dG8gcmVxdWlyZWRMZW5ndGggPSBzYXR1cmF0ZWRTdW08
dWludDMyX3Q+KG1fbGVuZ3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7CiAgICAgaWYgKG1faXM4
Qml0ICYmIGFyZThCaXQoYWRhcHRlcnMuLi4pKSB7Ci0gICAgICAgIExDaGFyKiBkZXN0aW5hdGlv
biA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgocmVxdWlyZWRMZW5ndGgpOwotICAgICAgICBp
ZiAoIWRlc3RpbmF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpKTsK
KyAgICAgICAgYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFy
KHJlcXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQogICAgICAgICBzdHJpbmdUeXBlQWRhcHRlckFjY3VtdWxhdG9y
KGRlc3RpbmF0aW9uLCBhZGFwdGVycy4uLik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIq
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nMTYocmVxdWlyZWRMZW5ndGgp
OwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzT3Zl
cmZsb3dlZCgpKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZ1dpdGhVcGNvbnZlcnQocmVxdWlyZWRMZW5ndGgpOworICAgICAgICBpZiAoIWRlc3Rp
bmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIHN0cmluZ1R5
cGVBZGFwdGVyQWNjdW11bGF0b3IoZGVzdGluYXRpb24sIGFkYXB0ZXJzLi4uKTsKICAgICB9CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPgotdm9pZCBTdHJpbmdCdWlsZGVy
OjphcHBlbmQoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0
cmluZ1R5cGVzPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdUeXBlcy4uLiBzdHJp
bmdzKQogewogICAgIGFwcGVuZEZyb21BZGFwdGVycyhTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlcz4oc3RyaW5ncykuLi4pOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGlzIHRvIFN0cmluZ1Zp
ZXcgYW5kIG1ha2UgaXQgdGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIFN0cmluZ0J1aWxk
ZXI/Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdCdWlsZGVyJiBzLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBidWZmZXIsIHVuc2lnbmVkIGxl
bmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgZXF1YWwoY29uc3Qg
U3RyaW5nQnVpbGRlciYgcywgY29uc3QgQ2hhcmFjdGVyVHlwZSogYnVmZmVyLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgaWYgKHMubGVuZ3RoKCkgIT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC00MzMsNyArMzg4LDcgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdCdWlsZGVy
JiBzLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKIHRlbXBs
YXRlPD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmdCdWlsZGVy
PiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHZvaWQ7CiAgICAgdXNpbmcgQWRkaXRpb25hbEFy
Z3VtZW50VHlwZSA9IFN0cmluZ0J1aWxkZXI7Ci0gICAgc3RhdGljIHZvaWQgZmx1c2goTENoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nQnVpbGRlciogc3RyaW5nQnVpbGRl
cikgeyBzdHJpbmdCdWlsZGVyLT5hcHBlbmRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCk7
IH0KKyAgICBzdGF0aWMgdm9pZCBmbHVzaChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBidWlsZGVyKSB7IGJ1aWxkZXItPmFwcGVuZENoYXJh
Y3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXJKU09OLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwCmluZGV4IGMzMTE4YjYzOTFi
ZmVmMmI4Y2VmODdkNjZhZjNiZDZiOWI3MWI5MGIuLmVmMWY5NDkyMWEwMzU1YzVkZWFkNTQ0MGM5
OGYyYzE5YTE3MTg1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlckpTT04uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04u
Y3BwCkBAIC0xMDUsNiArMTA1LDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRRdW90ZWRK
U09OU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGlmIChoYXNPdmVyZmxvd2Vk
KCkpCiAgICAgICAgIHJldHVybjsKKwogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBi
dWZmZXIgc3BhY2UgdG8gYXBwZW5kIHRoaXMgc3RyaW5nIHdpdGhvdXQgaGF2aW5nCiAgICAgLy8g
dG8gd29ycnkgYWJvdXQgcmVhbGxvY2F0aW5nIGluIHRoZSBtaWRkbGUuCiAgICAgLy8gVGhlIDIg
aXMgZm9yIHRoZSAnIicgcXVvdGVzIG9uIGVhY2ggZW5kLgpAQCAtMTEzLDE5ICsxMTQsMjEgQEAg
dm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQogICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBtYXhpbXVtQ2Fw
YWNpdHlSZXF1aXJlZCA9IGxlbmd0aCgpOwogICAgIG1heGltdW1DYXBhY2l0eVJlcXVpcmVkICs9
IDIgKyBzdHJpbmdMZW5ndGggKiA2OwogICAgIHVuc2lnbmVkIGFsbG9jYXRpb25TaXplOwotICAg
IGlmIChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09IG1heGltdW1DYXBhY2l0eVJlcXVpcmVk
LnNhZmVHZXQoYWxsb2NhdGlvblNpemUpKQotICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsK
KyAgICBpZiAoQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdyA9PSBtYXhpbXVtQ2FwYWNpdHlSZXF1
aXJlZC5zYWZlR2V0KGFsbG9jYXRpb25TaXplKSkgeworICAgICAgICBkaWRPdmVyZmxvdygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIC8vIFRoaXMgbWF4KCkgaXMgaGVyZSB0byBhbGxv
dyB1cyB0byBhbGxvY2F0ZSBzaXplcyBiZXR3ZWVuIHRoZSByYW5nZSBbMl4zMSwgMl4zMiAtIDJd
IGJlY2F1c2Ugcm91bmRVcFRvUG93ZXJPZlR3bygxPDwzMSArIHNvbWUgaW50IHNtYWxsZXIgdGhh
biAxPDwzMSkgPT0gMC4KLSAgICAvLyBGSVhNRTogcm91bmRVcFRvUG93ZXJPZlR3byBzaG91bGQg
dGFrZSBDaGVja2VkPHVuc2lnbmVkPiBhbmQgYWJvcnQgaWYgaXQgZmFpbHMgdG8gcm91bmQgdXAu
CisgICAgLy8gRklYTUU6IEluc3RlYWQsIHJvdW5kVXBUb1Bvd2VyT2ZUd28gc2hvdWxkIGJlIGZp
eGVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHVzZWZ1bCBpbiB0aG9zZSBjYXNlcywgcGVyaGFwcyB1
c2luZyBjaGVja2VkIG9yIHNhdHVyYXRlZCBhcml0aG1ldGljLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYwODYKICAgICBhbGxvY2F0aW9uU2l6ZSA9
IHN0ZDo6bWF4KGFsbG9jYXRpb25TaXplLCByb3VuZFVwVG9Qb3dlck9mVHdvKGFsbG9jYXRpb25T
aXplKSk7Ci0KLSAgICAvLyBBbGxvY2F0aW5nIHRoaXMgbXVjaCB3aWxsIGRlZmluaXRlbHkgZmFp
bC4KLSAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBTdHJpbmc6Ok1heExlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGRpZE92ZXJmbG93KCk7CisgICAgaWYgKGFsbG9jYXRpb25TaXplID4gU3RyaW5nOjpN
YXhMZW5ndGgpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIGlmIChpczhCaXQoKSAmJiAhc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBhbGxv
Y2F0ZUJ1ZmZlclVwQ29udmVydChtX2J1ZmZlckNoYXJhY3RlcnM4LCBhbGxvY2F0aW9uU2l6ZSk7
CisgICAgICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihidWZmZXJDaGFyYWN0ZXJzPExDaGFyPigp
LCBhbGxvY2F0aW9uU2l6ZSk7CiAgICAgZWxzZQogICAgICAgICByZXNlcnZlQ2FwYWNpdHkoYWxs
b2NhdGlvblNpemUpOwogICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQpAQCAtMTMz
LDI0ICsxMzYsMjIgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRRdW90ZWRKU09OU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0g
YWxsb2NhdGlvblNpemUpOwogCiAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIEFTU0VSVChz
dHJpbmcuaXM4Qml0KCkpOwotICAgICAgICBMQ2hhciogb3V0cHV0ID0gbV9idWZmZXJDaGFyYWN0
ZXJzOCArIG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKTsKKyAgICAgICAgYXV0byBvdXRw
dXQgPSBidWZmZXJDaGFyYWN0ZXJzPExDaGFyPigpICsgbV9sZW5ndGg7CiAgICAgICAgICpvdXRw
dXQrKyA9ICciJzsKICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1
dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgICpvdXRw
dXQrKyA9ICciJzsKLSAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBtX2J1ZmZlckNoYXJhY3Rl
cnM4OworICAgICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIGJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+
KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIqIG91dHB1dCA9IG1fYnVmZmVyQ2hhcmFj
dGVyczE2ICsgbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpOworICAgICAgICBhdXRvIG91
dHB1dCA9IGJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KCkgKyBtX2xlbmd0aDsKICAgICAgICAgKm91
dHB1dCsrID0gJyInOwogICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQogICAgICAgICAgICAg
YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4
KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFwcGVuZFF1
b3RlZEpTT05TdHJpbmdJbnRlcm5hbChvdXRwdXQsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3Ry
aW5nLmxlbmd0aCgpKTsKICAgICAgICAgKm91dHB1dCsrID0gJyInOwotICAgICAgICBtX2xlbmd0
aCA9IG91dHB1dCAtIG1fYnVmZmVyQ2hhcmFjdGVyczE2OworICAgICAgICBtX2xlbmd0aCA9IG91
dHB1dCAtIGJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KCk7CiAgICAgfQotICAgIEFTU0VSVCghaGFz
T3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3Ro
LnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7CisgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+
PSBtX2xlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmggYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMmE4MWQyMjZkNzM0YjA5
OGM2MjBhMGRhYTY5MmZjMjU4ODcwZGIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KKworI2lmIFVTRShDRikKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gY2xh
c3MgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdU
eXBlQWRhcHRlcihDRlN0cmluZ1JlZik7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmcgPyBDRlN0cmluZ0dldExlbmd0aChtX3N0cmluZykgOiAwOyB9CisgICAg
Ym9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9zdHJpbmcgfHwgQ0ZTdHJpbmdHZXRDU3Ry
aW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSk7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSop
IGNvbnN0OworCitwcml2YXRlOgorICAgIENGU3RyaW5nUmVmIG1fc3RyaW5nOworfTsKKworaW5s
aW5lIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPjo6U3RyaW5nVHlwZUFkYXB0ZXIoQ0ZT
dHJpbmdSZWYgc3RyaW5nKQorICAgIDogbV9zdHJpbmcgeyBzdHJpbmcgfQoreworfQorCit0ZW1w
bGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPjo6d3JpdGVU
bzxMQ2hhcj4oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAoreworICAgIGlmIChtX3N0cmluZykK
KyAgICAgICAgc3RkOjptZW1jcHkoZGVzdGluYXRpb24sIENGU3RyaW5nR2V0Q1N0cmluZ1B0ciht
X3N0cmluZywga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEpLCBDRlN0cmluZ0dldExlbmd0aCht
X3N0cmluZykpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVy
PENGU3RyaW5nUmVmPjo6d3JpdGVUbzxVQ2hhcj4oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAor
eworICAgIGlmIChtX3N0cmluZykKKyAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKG1fc3Ry
aW5nLCBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0aChtX3N0cmluZykpLCByZWludGVy
cHJldF9jYXN0PFVuaUNoYXIqPihkZXN0aW5hdGlvbikpOworfQorCisjaWZkZWYgX19PQkpDX18K
KwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxOU1N0cmluZyAqPiA6IHB1Ymxp
YyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4geworcHVibGljOgorICAgIFN0cmluZ1R5
cGVBZGFwdGVyKE5TU3RyaW5nICpzdHJpbmcpCisgICAgICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8
Q0ZTdHJpbmdSZWY+KChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcpCisgICAgeworICAgIH0K
K307CisKKyNlbmRpZgorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0YpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbSBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvY29jb2EvVGV4dFN0cmVhbUNvY29hLm1tCmluZGV4IGM3NGJmOWNjZmUzNGE3M2ViZGU0
NTMyZWNjMzk0ZGIyNjUyOWE3MDcuLmU4NmI5ZDNmNDE2YWQyNDk3MzQ2NDVkZmVmZWUwZWM5MjJi
YTRmMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVhbUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVhbUNvY29hLm1t
CkBAIC0yMSw2ICsyMSw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAorI2ltcG9ydCA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVD
Ri5oPgorCiBuYW1lc3BhY2UgV1RGIHsKIAogVGV4dFN0cmVhbSYgVGV4dFN0cmVhbTo6b3BlcmF0
b3I8PChpZDxOU09iamVjdD4gb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAppbmRleCA3M2M4MDFiOTM4YzdhOGQ4
ZjRkNGQ3NTUzZWFlNmY3NTEzYTE4MTVlLi4yYWJiNTEyMTJhYzA1ZWMxZDA5OTU2ZjQ0ZjU4ZjI0
MjEwMmY0ZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKQEAgLTMwOCwxMiArMzA5LDExIEBAIFN0
cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNCYWNrZ3JvdW5kQ1NT
KCkgY29uc3QKIENvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1Rl
eHRDb2xvcihib29sJiBpbXBvcnRhbnQpIGNvbnN0CiB7CiAgICAgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yIGJlaGF2aW9yOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFk
b3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3Ioa01BQ2FwdGlvbkFw
cGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKTsKLSAgICBDb2xvciB0ZXh0Q29sb3IoY29s
b3IuZ2V0KCkpOwotICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKKyAgICBDb2xvciB0ZXh0
Q29sb3IoYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvcihrTUFD
YXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpLmdldCgpKTsKKyAgICBpZiAo
IXRleHRDb2xvci5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gVGhpcyBkZWZhdWx0IHZhbHVlIG11
c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4gbWVkaWFDb250cm9scy5jc3Mg
Zm9yIC13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIuCiAgICAgICAgIHRleHRDb2xv
ciA9IENvbG9yOjp3aGl0ZTsKLSAgICAKKyAgICB9CiAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3Ig
PT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwogICAgIENHRmxvYXQgb3Bh
Y2l0eSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eShrTUFDYXB0aW9u
QXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCkBA
IC0zMjUsMjEgKzMyNSwxNCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKIHsKICAgICBib29sIGltcG9ydGFudDsKICAg
ICBDb2xvciB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihpbXBvcnRhbnQpOwotCiAgICAg
aWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LQogICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5Q29sb3IsIHRleHRDb2xv
ciwgaW1wb3J0YW50KTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kQ1NTKFN0cmluZ0J1aWxkZXIm
IGJ1aWxkZXIsIENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50KQogewotICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhpZCkp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Ci0gICAgYnVpbGRlci5hcHBlbmQodmFsdWUpOwot
ICAgIGlmIChpbXBvcnRhbnQpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICFpbXBv
cnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOworICAgIGJ1aWxkZXIuYXBwZW5kKGdl
dFByb3BlcnR5TmFtZVN0cmluZyhpZCksICc6JywgdmFsdWUsIGltcG9ydGFudCA/ICIgIWltcG9y
dGFudDsiIDogIjsiKTsKIH0KICAgICAKIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRjo6d2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0CkBAIC0zNzksNyArMzcy
LDYgQEAgYm9vbCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvblN0cm9rZVdp
ZHRoRm9yRm9udChmbG9hdCBmb250U2l6ZSwgY28KICAgICAvLyBTaW5jZSBvbmx5IGhhbGYgb2Yg
dGhlIHN0cm9rZSBpcyB2aXNpYmxlIGJlY2F1c2UgdGhlIHN0cm9rZSBpcyBkcmF3biBiZWZvcmUg
dGhlIGZpbGwsIHdlIGRvdWJsZSB0aGUgc3Ryb2tlIHdpZHRoIGhlcmUuCiAgICAgc3Ryb2tlV2lk
dGggPSBzdHJva2VXaWR0aFB0ICogMjsKICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFD
YXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTQxOCwyNCArNDEwLDE3IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNvbnN0CiB7CiAgICAgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOwogICAgIAotICAgIFJldGFpblB0cjxDVEZvbnRE
ZXNjcmlwdG9yUmVmPiBmb250ID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvbnRE
ZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZp
b3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVsdCkpOworICAgIGF1dG8gZm9u
dCA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb250RGVzY3JpcHRvckZvclN0eWxl
KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yLCBrTUFDYXB0aW9uQXBw
ZWFyYW5jZUZvbnRTdHlsZURlZmF1bHQpKTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGVHlwZVJlZj4gbmFtZSA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udE5hbWVB
dHRyaWJ1dGUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDb3B5
QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7CiAgICAgaWYgKCFu
YW1lKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLSAgICAKLSAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmco
Q1NTUHJvcGVydHlGb250RmFtaWx5KSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6IFwi
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG5hbWUuZ2V0
KCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotCi0gICAgYXV0byBjYXNjYWRlTGlzdCA9
IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRy
aWJ1dGUoZm9udC5nZXQoKSwga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlKSkpOwotCi0gICAg
aWYgKGNhc2NhZGVMaXN0KSB7CisgICAgYnVpbGRlci5hcHBlbmQoImZvbnQtZmFtaWx5OiBcIiIs
IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihuYW1lLmdldCgpKSwgJyInKTsKKyAgICBpZiAoYXV0
byBjYXNjYWRlTGlzdCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250RGVz
Y3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udENhc2NhZGVMaXN0QXR0cmli
dXRlKSkpKSB7CiAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3Vu
dChjYXNjYWRlTGlzdC5nZXQoKSk7IGkrKykgewogICAgICAgICAgICAgYXV0byBmb250Q2FzY2Fk
ZSA9IHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0b3JSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoY2FzY2FkZUxpc3QuZ2V0KCksIGkpKTsKICAgICAgICAgICAgIGlmICghZm9udENhc2NhZGUp
CkBAIC00NDMsMTYgKzQyOCwxMCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKSBjb25zdAogICAgICAgICAgICAgYXV0byBmb250
Q2FzY2FkZU5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnRD
YXNjYWRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOwogICAgICAgICAgICAgaWYgKCFmb250Q2Fz
Y2FkZU5hbWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgiLCBcIiIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8
Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQoKSkpOwotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIFwiIiwgc3RhdGlj
X2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQoKSksICciJyk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNl
QmVoYXZpb3JVc2VWYWx1ZSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgIWltcG9y
dGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7Ci0gICAgCisgICAgYnVpbGRlci5hcHBl
bmQoYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlID8gIiAh
aW1wb3J0YW50OyIgOiAiOyIpOwogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
QEAgLTU2MSw0MyArNTQwLDE4IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKSBjb25zdAogI2lmIEhBVkUoTUVESUFfQUND
RVNTSUJJTElUWV9GUkFNRVdPUkspCiAgICAgaWYgKCFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5
KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0aW9uc1N0eWxl
U2hlZXRPdmVycmlkZSgpOwotICAgIAorCiAgICAgU3RyaW5nIGNhcHRpb25zQ29sb3IgPSBjYXB0
aW9uc1RleHRDb2xvckNTUygpOwogICAgIFN0cmluZyBlZGdlU3R5bGUgPSBjYXB0aW9uc1RleHRF
ZGdlQ1NTKCk7CiAgICAgU3RyaW5nIGZvbnROYW1lID0gY2FwdGlvbnNEZWZhdWx0Rm9udENTUygp
OwogICAgIFN0cmluZyBiYWNrZ3JvdW5kID0gY2FwdGlvbnNCYWNrZ3JvdW5kQ1NTKCk7Ci0gICAg
aWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAhY2FwdGlvbnNDb2xvci5pc0VtcHR5KCkgfHwg
IWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICBj
YXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmRMaXRlcmFsKCIgOjoiKTsKLSAgICAgICAg
Y2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZTo6Y3VlU2hhZG93
UHNldWRvSWQoKSk7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgn
eycpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChiYWNrZ3JvdW5kKTsKLSAg
ICAgICAgaWYgKCFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25z
T3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChjYXB0aW9uc0NvbG9yKTsKLSAgICAgICAgaWYgKCFl
ZGdlU3R5bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hl
ZXQuYXBwZW5kKGVkZ2VTdHlsZSk7Ci0gICAgICAgIGlmICghZm9udE5hbWUuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGZvbnROYW1lKTsK
LSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgnfScp
OwotICAgIH0KLSAgICAKKyAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8ICFjYXB0aW9u
c0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9udE5hbWUuaXNF
bXB0eSgpKQorICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoIiA6OiIs
IFRleHRUcmFja0N1ZTo6Y3VlU2hhZG93UHNldWRvSWQoKSwgJ3snLCBiYWNrZ3JvdW5kLCBjYXB0
aW9uc0NvbG9yLCBlZGdlU3R5bGUsIGZvbnROYW1lLCAnfScpOworCiAgICAgU3RyaW5nIHdpbmRv
d0NvbG9yID0gY2FwdGlvbnNXaW5kb3dDU1MoKTsKICAgICBTdHJpbmcgd2luZG93Q29ybmVyUmFk
aXVzID0gd2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpOwotICAgIGlmICghd2luZG93Q29s
b3IuaXNFbXB0eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZExpdGVyYWwoIiA6OiIpOwotICAgICAg
ICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoVGV4dFRyYWNrQ3VlOjpjdWVCYWNr
ZHJvcFNoYWRvd1BzZXVkb0lkKCkpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVl
dC5hcHBlbmQoJ3snKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghd2luZG93Q29sb3IuaXNFbXB0
eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKHdpbmRv
d0NvbG9yKTsKLSAgICAgICAgaWYgKCF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29ybmVy
UmFkaXVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0
eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQorICAgIGlmICghd2luZG93Q29sb3IuaXNFbXB0
eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKQorICAgICAgICBjYXB0aW9uc092
ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoIiA6OiIsIFRleHRUcmFja0N1ZTo6Y3VlQmFja2Ryb3BT
aGFkb3dQc2V1ZG9JZCgpLCAneycsIHdpbmRvd0NvbG9yLCB3aW5kb3dDb3JuZXJSYWRpdXMsICd9
Jyk7CiAjZW5kaWYgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKIAogICAg
IExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxl
U2hlZXRPdmVycmlkZVNldHRpbmcgc3R5bGUgdG86XG4lcyIsIGNhcHRpb25zT3ZlcnJpZGVTdHls
ZVNoZWV0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlv
dXRVbml0LmgKaW5kZXggMTU2YTAxYmQyZGZkZGE0NzJiMDgxZDRhZWY0MWRhMzgyODZmNjAzMC4u
MWU1NzEyODIwMWRiZjA1NzRmYTIwOTA2YmJlOTEwNzVlNzJiYWVhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xheW91dFVuaXQuaApAQCAtMTUwLDggKzE1MCw4IEBAIHB1YmxpYzoKICAgICBpbnQg
cm91bmQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fdmFsdWUgPiAwKQotICAgICAgICAg
ICAgcmV0dXJuIHNhdHVyYXRlZEFkZGl0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21p
bmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgICAgIHJldHVybiBzYXR1
cmF0ZWRTdWJ0cmFjdGlvbihyYXdWYWx1ZSgpLCAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIp
IC0gMSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICAgICAgcmV0dXJuIHNhdHVy
YXRlZFN1bTxpbnQ+KHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAvIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiBzYXR1cmF0ZWREaWZmZXJlbmNl
PGludD4ocmF3VmFsdWUoKSwgKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAtIDEpIC8ga0Zp
eGVkUG9pbnREZW5vbWluYXRvcjsKICAgICB9CiAKICAgICBpbnQgZmxvb3IoKSBjb25zdApAQCAt
NTg4LDcgKzU4OCw3IEBAIGlubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNpZ25lZCBsb25n
IGxvbmcgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIGlubGluZSBMYXlvdXRVbml0IG9wZXJhdG9y
Kyhjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIExheW91
dFVuaXQgcmV0dXJuVmFsOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRp
dGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZShzYXR1cmF0ZWRTdW08aW50PihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwogICAg
IHJldHVybiByZXR1cm5WYWw7CiB9CiAKQEAgLTYyNSw3ICs2MjUsNyBAQCBpbmxpbmUgZG91Ymxl
IG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIGlubGluZSBM
YXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0
JiBiKQogewogICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwor
ICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWREaWZmZXJlbmNlPGludD4oYS5yYXdW
YWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwogfQogCkBAIC02
OTEsNyArNjkxLDcgQEAgaW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBjb25zdCBM
YXlvdXRVbml0JiBiKQogCiBpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShMYXlvdXRVbml0
JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVk
QWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAgICBhLnNldFJhd1ZhbHVl
KHNhdHVyYXRlZFN1bTxpbnQ+KGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAgICAgcmV0
dXJuIGE7CiB9CiAKQEAgLTcyMSw3ICs3MjEsNyBAQCBpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0
b3ItPShMYXlvdXRVbml0JiBhLCBpbnQgYikKIAogaW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9y
LT0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBhLnNldFJhd1Zh
bHVlKHNhdHVyYXRlZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7Cisg
ICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWREaWZmZXJlbmNlPGludD4oYS5yYXdWYWx1ZSgpLCBi
LnJhd1ZhbHVlKCkpKTsKICAgICByZXR1cm4gYTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ29jb2EubW0KaW5kZXggNjBlNjcwZjIwNjZkNjA1OGIyZTVlYjc5ZWI3ZGMzMGM1Y2I0
YjI4ZS4uMTFjOWEyMzgzY2Q2YzhjMzAxYTFhMDhkY2RlYWZhZTc5ZDI2MmI0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNl
c3Npb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29h
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCkBAIC0zOSw2ICszOSw3IEBACiAjaW1wb3J0
IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L2NmL1N0cmluZ0Nv
bmNhdGVuYXRlQ0YuaD4KIAogQGludGVyZmFjZSBOU1VSTCAoKQogLSAoQ0ZVUkxSZWYpX2NmdXJs
OwpAQCAtMzQ5LDMxICszNTAsMjMgQEAgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yU2Vzc2lvbihjb25zdCBVUkwmIGZpcnMKIAogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGNvb2tp
ZXMgPSBjb29raWVzRm9yVVJMKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBmcmFtZUlE
LCBwYWdlSUQsIHNob3VsZEFza0lUUCwgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmcpOwotICAgIGlmICghY29va2llcyB8fCAhW2Nvb2tpZXMgY291bnRdKQotICAgICAgICByZXR1
cm4geyBTdHJpbmcoKSwgZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmcsIG5vdCBhbiBl
bXB0eSBvbmUgdGhhdCBTdHJpbmdCdWlsZGVyIHdvdWxkIGNyZWF0ZSBiZWxvdy4KKyAgICBhdXRv
IGNvb2tpZXMgPSBjb29raWVzRm9yVVJMKGZpcnN0UGFydHksIHNhbWVTaXRlSW5mbywgdXJsLCBm
cmFtZUlELCBwYWdlSUQsIHNob3VsZEFza0lUUCwgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmcpOworICAgIGlmICghW2Nvb2tpZXMgY291bnRdKQorICAgICAgICByZXR1cm4geyBT
dHJpbmcoKSwgZmFsc2UgfTsgLy8gUmV0dXJuIGEgbnVsbCBzdHJpbmc7IFN0cmluZ0J1aWxkZXIg
YmVsb3cgd291bGQgY3JlYXRlIGFuIGVtcHR5IG9uZS4KIAogICAgIFN0cmluZ0J1aWxkZXIgY29v
a2llc0J1aWxkZXI7CiAgICAgYm9vbCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gZmFsc2U7CiAg
ICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tpZSBpbiBjb29raWVzLmdldCgpKSB7CiAgICAgICAg
IGlmICghW1tjb29raWUgbmFtZV0gbGVuZ3RoXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAg
ICAgICAgIGlmICghaW5jbHVkZUhUVFBPbmx5ICYmIFtjb29raWUgaXNIVFRQT25seV0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKLQogICAgICAgICBpZiAoW2Nvb2tpZSBpc1NlY3VyZV0pIHsKICAg
ICAgICAgICAgIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSB0cnVlOwogICAgICAgICAgICAgaWYg
KGluY2x1ZGVTZWN1cmVDb29raWVzID09IEluY2x1ZGVTZWN1cmVDb29raWVzOjpObykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmICghY29va2llc0J1
aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiOyAiKTsKLQotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoW2Nvb2tpZSBuYW1lXSk7
Ci0gICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZCgnPScpOwotICAgICAgICBjb29raWVzQnVp
bGRlci5hcHBlbmQoW2Nvb2tpZSB2YWx1ZV0pOworICAgICAgICBjb29raWVzQnVpbGRlci5hcHBl
bmQoY29va2llc0J1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiOyAiLCBbY29va2llIG5hbWVdLCAn
PScsIFtjb29raWUgdmFsdWVdKTsKICAgICB9CiAgICAgcmV0dXJuIHsgY29va2llc0J1aWxkZXIu
dG9TdHJpbmcoKSwgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXggN2Y2MGQ5MDE5M2NjM2IzZmM0OWY1OWNi
MDkyZWY0YzIwYTdmMTE4Yy4uNDM2OTlmZWFkOWY2NWM1OTcyYmZkZDQyOWM3N2FlYTEwMTZhNjk5
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtMTg3
LDcgKzE4Nyw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb3VudGVyUGxhbj4gcGxhbkNvdW50ZXIoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpCiAgICAgfQogCiAgICAgaWYgKGRp
cmVjdGl2ZXMucmVzZXRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIENvdW50ZXJQbGFuIHsgdHJ1ZSwg
c2F0dXJhdGVkQWRkaXRpb24oKmRpcmVjdGl2ZXMucmVzZXRWYWx1ZSwgZGlyZWN0aXZlcy5pbmNy
ZW1lbnRWYWx1ZS52YWx1ZU9yKDApKSB9OworICAgICAgICByZXR1cm4gQ291bnRlclBsYW4geyB0
cnVlLCBzYXR1cmF0ZWRTdW08aW50PigqZGlyZWN0aXZlcy5yZXNldFZhbHVlLCBkaXJlY3RpdmVz
LmluY3JlbWVudFZhbHVlLnZhbHVlT3IoMCkpIH07CiAgICAgaWYgKGRpcmVjdGl2ZXMuaW5jcmVt
ZW50VmFsdWUpCiAgICAgICAgIHJldHVybiBDb3VudGVyUGxhbiB7IGZhbHNlLCAqZGlyZWN0aXZl
cy5pbmNyZW1lbnRWYWx1ZSB9OwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDk5ZTU3MWJmNjI3MTUzNTM2NTg5
MGI0NGRkMWFjMmFlMTIxNDNhNTkuLjk4YTY0NmRmZjczMjFhMDhkYmYxMGJiNmJjMmY3OTYxZTFh
NDdiZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3Rv
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0x
MzYwLDcgKzEzNjAsNyBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291
bnRlcihCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdQogICAgICAgICBpZiAoY291
bnRlckJlaGF2aW9yID09IFJlc2V0KQogICAgICAgICAgICAgZGlyZWN0aXZlcy5yZXNldFZhbHVl
ID0gdmFsdWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpcmVjdGl2ZXMuaW5jcmVtZW50
VmFsdWUgPSBzYXR1cmF0ZWRBZGRpdGlvbihkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlLnZhbHVl
T3IoMCksIHZhbHVlKTsKKyAgICAgICAgICAgIGRpcmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUgPSBz
YXR1cmF0ZWRTdW08aW50PihkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlLnZhbHVlT3IoMCksIHZh
bHVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQppbmRl
eCBmMmQ5MmYxOTdkMTdjYTI5NzBkMDdkYzE0MGFiMDBhNjFjMTM1OGZjLi5jZmNkOWYzYzAzYzlj
NmExYTNkMzRlZDFjYzk3NzdhODA3MjdlOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVn
ZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50
cy5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9ydCA8d3RmL3Rl
eHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24uaD4KQEAgLTExNSwxNSArMTE1LDEwIEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICAgICAgICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFs
bEJ1dENvb2tpZXM7CiAgICAgfQogCi0gICAgYXV0byogbWFudWFsUHJldmFsZW50UmVzb3VyY2Ug
PSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OkAiSVRQTWFudWFsUHJldmFsZW50UmVzb3VyY2UiXTsK
LSAgICBpZiAobWFudWFsUHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAgVVJMIHVybCB7IFVS
TCgpLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9OwotICAgICAgICBpZiAoIXVybC5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0cDovLyIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQobWFudWFsUHJldmFsZW50UmVzb3VyY2UpOwotICAgICAgICAgICAgdXJsID0geyBVUkwoKSwg
YnVpbGRlci50b1N0cmluZygpIH07Ci0gICAgICAgIH0KKyAgICBpZiAoYXV0byBtYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSJdKSB7CisgICAgICAgIFVSTCB1cmwgeyB7IH0sIG1hbnVhbFByZXZhbGVudFJl
c291cmNlIH07CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHVybCA9
IHsgeyB9LCBtYWtlU3RyaW5nKCJodHRwOi8vIiwgbWFudWFsUHJldmFsZW50UmVzb3VyY2UpIH07
CiAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMTA1Zjk4ZTczMjkyMTMwYTg5Y2FkY2NjODA0ODFkYTg4NTYyYTA3ZC4u
OTliMGU3NTYzZmE1OGRkM2IxMjgyZmMyZmY0YzgxYmNjYTVkMGY4YyAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIx
LTA1LTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENG
U3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0
cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICBVcGRhdGVkIHRlc3RzIGZvciBjaGFuZ2VzIHRvIFNhdHVy
YXRlZEFyaXRobWV0aWMuaC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgQWRkZWQgaW5jbHVkZSBvZiBT
dHJpbmdDb25jYXRlbmF0ZUNGLmguCisgICAgICAgIEFkZGVkIFN0cmluZ1R5cGVBZGFwdGVyIGZv
ciBXS1N0cmluZ1JlZi4KKyAgICAgICAgKFdUUjo6c3R5bGVEZWNUb1N0cik6IFVzZSBBU0NJSUxp
dGVyYWwgaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBS
ZW1vdmVkIHVubmVlZGVkIHRvV1RGU3RyaW5nIHNpbmNlIHRoZSBXS1N0cmluZ1JlZgorICAgICAg
ICBTdHJpbmdUeXBlQWRhcHRlciB0YWtlcyBjYXJlIG9mIGl0LgorICAgICAgICAoV1RSOjpzdHJp
bmcpOiBSZW5hbWVkIGZyb20gZnJhbWVUb1N0ci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChX
VFI6OmR1bXBSZXNvdXJjZVVSTCk6IFVzZSBhcHBlbmQgaW5zdGVhZCBvZiBhcHBlbmRMaXRlcmFs
LgorICAgICAgICAoV1RSOjpkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OmR1bXBMb2FkRXZlbnQpOiBVc2UgbWFrZVN0cmlu
Zy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9tIGEgbG9uZ2VyIG5hbWUuIFJl
dHVybiBhIFN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGluIGEgU3RyaW5nQnVp
bGRlci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OnN0cmluZyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFJl
bW92ZWQKKyAgICAgICAgdW5uZWVkZWQgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OmR1bXBG
cmFtZVNjcm9sbFBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OmR1bXBEZXNjZW5kYW50
RnJhbWVzVGV4dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1
bXBET01Bc1dlYkFyY2hpdmUpOiBSZW1vdmVkIGFuCisgICAgICAgIHVubmVlZGVkIGxvY2FsIHZh
cmlhYmxlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXApOiBSZW1vdmVk
IHVubmVlZGVkIHRvV1RGU3RyaW5nLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUpOgorICAgICAgICBVcGRh
dGVkIGZvciBmdW5jdG9uIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKTogRGl0dG8uCisgICAgICAgIEFsc28gdXNl
IHZhcmlhZGljIGFwcGVuZC4gQWxzbyB1c2UgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZSk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaExvYWRGb3JSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2Fk
Rm9yUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRvQ29uc29sZSk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJU
ZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkph
dmFTY3JpcHRQcm9tcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGREZWxldGVSYW5nZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRBcHBseVN0eWxlKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVnaW5FZGl0aW5n
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGlu
Zyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVj
dGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBIaXN0
b3J5KTogRGl0dG8uCisKIDIwMjEtMDUtMTUgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIHJlcG9ydC1ub24taW5jbHVzaXZlLWxhbmd1YWdlIHNob3VsZCBz
a2lwIG5vZGVfbW9kdWxlcyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcApp
bmRleCBlODU0ZTI1NmU4YWRhY2M5MjViOThiN2MwY2U3MTQ2M2FiMWJhZWZlLi45YmQ1MGUyNzNm
NzQwNTk5YmUwMDJiNmQwOWVkNWZmN2JiNjZhNGY1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlv
bnMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTI5LDc3ICszMCw5OCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJsaW1pdHMuaCIKKworI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TYXR1
cmF0ZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChX
VEYsIFNhdHVyYXRlZEFyaXRobWV0aWNBZGRpdGlvbikKIHsKLSAgICBBU1NFUlRfRVEoc2F0dXJh
dGVkQWRkaXRpb24oMCwgMCksIDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigw
LCAxKSwgMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKDAsIDEwMCksIDEwMCk7
Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKDEwMCwgNTApLCAxNTApOwotCi0gICAg
QVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKDAsIC0xKSwgLTEpOwotICAgIEFTU0VSVF9FUShz
YXR1cmF0ZWRBZGRpdGlvbigxLCAtMSksIDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRp
dGlvbigxMDAsIC01MCksIDUwKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oNTAs
IC0xMDApLCAtNTApOwotCi0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NQVgg
LSAxLCAwKSwgSU5UX01BWCAtIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJ
TlRfTUFYIC0gMSwgMSksIElOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlv
bihJTlRfTUFYIC0gMSwgMiksIElOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRp
dGlvbigwLCBJTlRfTUFYIC0gMSksIElOVF9NQVggLSAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJh
dGVkQWRkaXRpb24oMSwgSU5UX01BWCAtIDEpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkQWRkaXRpb24oMiwgSU5UX01BWCAtIDEpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEo
c2F0dXJhdGVkQWRkaXRpb24oSU5UX01BWCAtIDEsIElOVF9NQVggLSAxKSwgSU5UX01BWCk7Ci0g
ICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NQVgsIElOVF9NQVgpLCBJTlRfTUFY
KTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUlOLCAwKSwgSU5UX01J
Tik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NSU4gKyAxLCAwKSwgSU5U
X01JTiArIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUlOICsgMSwg
MSksIElOVF9NSU4gKyAyKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01J
TiArIDEsIDIpLCBJTlRfTUlOICsgMyk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9u
KElOVF9NSU4gKyAxLCAtMSksIElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRp
dGlvbihJTlRfTUlOICsgMSwgLTIpLCBJTlRfTUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
QWRkaXRpb24oMCwgSU5UX01JTiArIDEpLCBJTlRfTUlOICsgMSk7Ci0gICAgQVNTRVJUX0VRKHNh
dHVyYXRlZEFkZGl0aW9uKC0xLCBJTlRfTUlOICsgMSksIElOVF9NSU4pOwotICAgIEFTU0VSVF9F
UShzYXR1cmF0ZWRBZGRpdGlvbigtMiwgSU5UX01JTiArIDEpLCBJTlRfTUlOKTsKLQotICAgIEFT
U0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUFYIC8gMiwgMTAwMDApLCBJTlRfTUFYIC8g
MiArIDEwMDAwKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01BWCAvIDIg
KyAxLCBJTlRfTUFYIC8gMiArIDEpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
QWRkaXRpb24oSU5UX01JTiwgSU5UX01BWCksIC0xKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2F0dXJh
dGVkU3VtPGludDMyX3Q+KDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoMSwgc2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KDAsIDEpKTsKKyAgICBFWFBFQ1RfRVEoMTAwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4o
MCwgMTAwKSk7CisgICAgRVhQRUNUX0VRKDE1MCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDEwMCwg
NTApKTsKKworICAgIEVYUEVDVF9FUSgtMSwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDAsIC0xKSk7
CisgICAgRVhQRUNUX0VRKDAsIHNhdHVyYXRlZFN1bTxpbnQzMl90PigxLCAtMSkpOworICAgIEVY
UEVDVF9FUSg1MCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDEwMCwgLTUwKSk7CisgICAgRVhQRUNU
X0VRKC01MCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDUwLCAtMTAwKSk7CisKKyAgICBFWFBFQ1Rf
RVEoSU5UX01BWCAtIDEsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUFYIC0gMSwgMCkpOwor
ICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAtIDEs
IDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9N
QVggLSAxLCAyKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVggLSAxLCBzYXR1cmF0ZWRTdW08aW50
MzJfdD4oMCwgSU5UX01BWCAtIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVk
U3VtPGludDMyX3Q+KDEsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNh
dHVyYXRlZFN1bTxpbnQzMl90PigyLCBJTlRfTUFYIC0gMSkpOworICAgIEVYUEVDVF9FUShJTlRf
TUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAtIDEsIElOVF9NQVggLSAxKSk7Cisg
ICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUFYLCBJTlRf
TUFYKSk7CisKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElO
VF9NSU4sIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiArIDEsIHNhdHVyYXRlZFN1bTxpbnQz
Ml90PihJTlRfTUlOICsgMSwgMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOICsgMiwgc2F0dXJh
dGVkU3VtPGludDMyX3Q+KElOVF9NSU4gKyAxLCAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4g
KyAzLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01JTiArIDEsIDIpKTsKKyAgICBFWFBFQ1Rf
RVEoSU5UX01JTiwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NSU4gKyAxLCAtMSkpOworICAg
IEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01JTiArIDEsIC0y
KSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4gKyAxLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMCwg
SU5UX01JTiArIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkU3VtPGludDMy
X3Q+KC0xLCBJTlRfTUlOICsgMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0ZWRT
dW08aW50MzJfdD4oLTIsIElOVF9NSU4gKyAxKSk7CisKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCAv
IDIgKyAxMDAwMCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NQVggLyAyLCAxMDAwMCkpOwor
ICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAvIDIg
KyAxLCBJTlRfTUFYIC8gMiArIDEpKTsKKyAgICBFWFBFQ1RfRVEoLTEsIHNhdHVyYXRlZFN1bTxp
bnQzMl90PihJTlRfTUlOLCBJTlRfTUFYKSk7CisKKyAgICBFWFBFQ1RfRVEoMFUsIHNhdHVyYXRl
ZFN1bTx1aW50MzJfdD4oMFUsIDBVKSk7CisgICAgRVhQRUNUX0VRKDFVLCBzYXR1cmF0ZWRTdW08
dWludDMyX3Q+KDBVLCAxVSkpOworICAgIEVYUEVDVF9FUSgxMDBVLCBzYXR1cmF0ZWRTdW08dWlu
dDMyX3Q+KDBVLCAxMDBVKSk7CisgICAgRVhQRUNUX0VRKDE1MFUsIHNhdHVyYXRlZFN1bTx1aW50
MzJfdD4oMTAwVSwgNTBVKSk7CisKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVggLSAxLCBzYXR1cmF0
ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC0gMVUsIDBVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRf
TUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC0gMVUsIDFVKSk7CisgICAgRVhQ
RUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC0gMVUsIDJV
KSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYIC0gMSwgc2F0dXJhdGVkU3VtPHVpbnQzMl90Pigw
VSwgVUlOVF9NQVggLSAxVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3Vt
PHVpbnQzMl90PigxVSwgVUlOVF9NQVggLSAxVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwg
c2F0dXJhdGVkU3VtPHVpbnQzMl90PigyVSwgVUlOVF9NQVggLSAxVSkpOworICAgIEVYUEVDVF9F
UShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAtIDFVLCBVSU5UX01B
WCAtIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+
KFVJTlRfTUFYLCBVSU5UX01BWCkpOworCisgICAgRVhQRUNUX0VRKFVJTlRfTUFYIC8gMiArIDEw
MDAwLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC8gMlUsIDEwMDAwVSkpOworICAg
IEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAvIDJV
LCBVSU5UX01BWCAvIDJVICsgMVUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRl
ZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLyAyVSArIDFVLCBVSU5UX01BWCAvIDJVICsgMVUpKTsK
KyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVgg
LyAzVSArIDFVLCBVSU5UX01BWCAvIDNVLCBVSU5UX01BWCAvIDNVKSk7CisgICAgRVhQRUNUX0VR
KFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC8gM1UgKyAxVSwgVUlO
VF9NQVggLyAzVSArIDFVLCBVSU5UX01BWCAvIDNVICsgMVUpKTsKIH0KIAogVEVTVChXVEYsIFNh
dHVyYXRlZEFyaXRobWV0aWNTdWJ0cmFjdGlvbikKIHsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
U3VidHJhY3Rpb24oMCwgMCksIDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlv
bigwLCAxKSwgLTEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigwLCAxMDAp
LCAtMTAwKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oMTAwLCA1MCksIDUw
KTsKKyAgICBFWFBFQ1RfRVEoMCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigwLCAwKSk7
CisgICAgRVhQRUNUX0VRKC0xLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDAsIDEpKTsK
KyAgICBFWFBFQ1RfRVEoLTEwMCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigwLCAxMDAp
KTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMTAwLCA1
MCkpOwogICAgIAotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigwLCAtMSksIDEp
OwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigxLCAtMSksIDIpOwotICAgIEFT
U0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigxMDAsIC01MCksIDE1MCk7Ci0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDUwLCAtMTAwKSwgMTUwKTsKLQotICAgIEFTU0VSVF9F
UShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYLCAwKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NQVgsIDEpLCBJTlRfTUFYIC0gMSk7Ci0gICAg
QVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NQVggLSAxLCAwKSwgSU5UX01BWCAt
IDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYIC0gMSwgLTEp
LCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCAt
IDEsIC0yKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDAs
IElOVF9NQVggLSAxKSwgLUlOVF9NQVggKyAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3Vi
dHJhY3Rpb24oLTEsIElOVF9NQVggLSAxKSwgLUlOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1
cmF0ZWRTdWJ0cmFjdGlvbigtMiwgSU5UX01BWCAtIDEpLCAtSU5UX01BWCAtIDEpOwotICAgIEFT
U0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigtMywgSU5UX01BWCAtIDEpLCAtSU5UX01BWCAt
IDEpOwotCi0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NSU4sIDApLCBJ
TlRfTUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01JTiArIDEs
IDApLCBJTlRfTUlOICsgMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElO
VF9NSU4gKyAxLCAxKSwgSU5UX01JTik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0
aW9uKElOVF9NSU4gKyAxLCAyKSwgSU5UX01JTik7Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
U3VidHJhY3Rpb24oSU5UX01JTiwgSU5UX01JTiksIDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihJTlRfTUFYLCBJTlRfTUFYKSwgMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVy
YXRlZFN1YnRyYWN0aW9uKElOVF9NQVgsIElOVF9NSU4pLCBJTlRfTUFYKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigwLCAtMSkpOworICAgIEVYUEVDVF9F
USgyLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDEsIC0xKSk7CisgICAgRVhQRUNUX0VR
KDE1MCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigxMDAsIC01MCkpOworICAgIEVYUEVD
VF9FUSgxNTAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oNTAsIC0xMDApKTsKKworICAg
IEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NQVgs
IDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCAtIDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50
MzJfdD4oSU5UX01BWCwgMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYIC0gMSwgc2F0dXJhdGVk
RGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUFYIC0gMSwgMCkpOworICAgIEVYUEVDVF9FUShJTlRf
TUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NQVggLSAxLCAtMSkpOworICAg
IEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NQVgg
LSAxLCAtMikpOworICAgIEVYUEVDVF9FUSgtSU5UX01BWCArIDEsIHNhdHVyYXRlZERpZmZlcmVu
Y2U8aW50MzJfdD4oMCwgSU5UX01BWCAtIDEpKTsKKyAgICBFWFBFQ1RfRVEoLUlOVF9NQVgsIHNh
dHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oLTEsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNU
X0VRKC1JTlRfTUFYIC0gMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigtMiwgSU5UX01B
WCAtIDEpKTsKKyAgICBFWFBFQ1RfRVEoLUlOVF9NQVggLSAxLCBzYXR1cmF0ZWREaWZmZXJlbmNl
PGludDMyX3Q+KC0zLCBJTlRfTUFYIC0gMSkpOworCisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNh
dHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01JTiwgMCkpOworICAgIEVYUEVDVF9FUShJ
TlRfTUlOICsgMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUlOICsgMSwgMCkp
OworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElO
VF9NSU4gKyAxLCAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZERpZmZlcmVu
Y2U8aW50MzJfdD4oSU5UX01JTiArIDEsIDIpKTsKKworICAgIEVYUEVDVF9FUSgwLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NSU4sIElOVF9NSU4pKTsKKyAgICBFWFBFQ1RfRVEo
MCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUFYLCBJTlRfTUFYKSk7CisgICAg
RVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCwg
SU5UX01JTikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZS5jcHAKaW5kZXggYWJkM2FmZGU5MWYwOGU4Nzk0ZjEwYWJkNmQxMGRjMzg4ZDQ1YjI4
NC4uMWRlY2YzMDczYWFmMzE0NWIxZDliOTcyNWI1Y2Q1YmUzYTI3NzJlNCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVQYWdlLmNwcApAQCAtNTIsMTIgKzUyLDQ2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFVTRShD
RikKKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisjZW5kaWYK
KwogI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkK
ICNpbmNsdWRlICJXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCIKICNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxXS1N0cmluZ1JlZj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVy
KFdLU3RyaW5nUmVmKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZyA/IFdLU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJp
dCgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cmluZzsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgV0tTdHJpbmdSZWYgbV9zdHJpbmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFk
YXB0ZXI8V0tTdHJpbmdSZWY+OjpTdHJpbmdUeXBlQWRhcHRlcihXS1N0cmluZ1JlZiBzdHJpbmcp
CisgICAgOiBtX3N0cmluZyB7IHN0cmluZyB9Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZv
aWQgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciop
IGNvbnN0Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8
V0tTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFyPihVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBXS1N0cmluZ0dldENoYXJhY3RlcnMobV9zdHJp
bmcsIHJlaW50ZXJwcmV0X2Nhc3Q8V0tDaGFyKj4oZGVzdGluYXRpb24pLCBXS1N0cmluZ0dldExl
bmd0aChtX3N0cmluZykpOworfQorCit9CisKIG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgZG91
YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBj
aGFyKiBuYW1lKQpAQCAtODksNyArMTIzLDcgQEAgc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRo
KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLAogICAg
IHJldHVybiBkdW1wUGF0aChjb250ZXh0LCBub2RlT2JqZWN0KTsKIH0KIAotc3RhdGljIFdURjo6
U3RyaW5nIHJhbmdlVG9TdHIoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29y
bGRSZWYgd29ybGQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2VSZWYpCitzdGF0aWMgV1RG
OjpTdHJpbmcgc3RyaW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxk
UmVmIHdvcmxkLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlUmVmKQogewogICAgIGlmICgh
cmFuZ2VSZWYpCiAgICAgICAgIHJldHVybiAiKG51bGwpIjsKQEAgLTEzMCw0MyArMTY0LDI2IEBA
IHN0YXRpYyBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhX
S0ZyYW1lTmF2aWdhdGlvblR5cGUgdHlwCiAgICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUi
KTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHls
ZURlY2xhcmF0aW9uUmVmIHN0eWxlKQorc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIo
V0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmKQogewogICAgIC8vIER1bXBSZW5kZXJUcmVl
IGNhbGxzIC1bRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZXNjcmlwdGlvbl0sIHdoaWNoIGp1c3Qg
ZHVtcHMgY2xhc3MgbmFtZSBhbmQgb2JqZWN0IGFkZHJlc3MuCiAgICAgLy8gTm8gZXhpc3Rpbmcg
dGVzdHMgYWN0dWFsbHkgaGl0IHRoaXMgY29kZSBwYXRoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3Jp
dGluZywgYmVjYXVzZSBXZWJDb3JlIGRvZXNuJ3QgY2FsbAogICAgIC8vIHRoZSBlZGl0aW5nIGNs
aWVudCBpZiB0aGUgc3R5bGluZyBvcGVyYXRpb24gc291cmNlIGlzIENvbW1hbmRGcm9tRE9NIG9y
IENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRlcmZhY2UuCi0gICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPERPTUNTU1N0eWxl
RGVjbGFyYXRpb24gQUREUkVTUz4iKTsKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOworICAgIHJldHVybiAiPERPTUNTU1N0eWxlRGVjbGFyYXRpb24gQUREUkVTUz4iX3M7CiB9
CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBzdHJpbmcoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4p
CiB7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2Vj
dXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9w
dFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlP
cmlnaW5HZXRQb3J0KG9yaWdpbiksICd9Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCBh
ZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkuZ2V0KCksICIsICIs
IGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlIb3N0KG9yaWdpbikpLmdldCgpLCAiLCAiLCBX
S1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pLCAnfScpOwogfQogCi1zdGF0aWMgV1RGOjpT
dHJpbmcgZnJhbWVUb1N0cihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQorc3RhdGljIFdURjo6U3Ry
aW5nIHN0cmluZyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewogICAgIGF1dG8gbmFtZSA9IGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7Ci0gICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7
Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUgXCIiKTsKLSAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIGJvb2wg
aXNNYWluID0gV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VtcHR5KG5hbWUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gaXNNYWluID8gIm1haW4gZnJh
bWUiX3MgOiAiZnJhbWUgKGFub255bW91cykiX3M7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoaXNN
YWluID8gIm1haW4gZnJhbWUgXCIiIDogImZyYW1lIFwiIiwgbmFtZS5nZXQoKSwgJyInKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIGlzTG9jYWxGaWxlU2NoZW1lKFdLU3RyaW5nUmVmIHNjaGVt
ZSkKQEAgLTIxMCw3ICsyMjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc291cmNlVVJM
KHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aQogICAgIGlmIChh
c3NpZ25lZFVybHNDYWNoZSgpLmNvbnRhaW5zKGlkZW50aWZpZXIpKQogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChhc3NpZ25lZFVybHNDYWNoZSgpLmdldChpZGVudGlmaWVyKSk7CiAgICAg
ZWxzZQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjx1bmtub3duPiIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPHVua25vd24+Iik7CiB9CiAKIEluamVjdGVk
QnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQpAQCAt
MzkzLDc2ICs0MTAsNDMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0
KCkKIAogLy8gTG9hZGVyIENsaWVudCBDYWxsYmFja3MKIAotLy8gU3RyaW5nIG91dHB1dCBtdXN0
IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHRdLgotc3RhdGljIHZvaWQgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlcikKLXsKLSAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShm
cmFtZSkpOwotICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAg
ICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWlu
IGZyYW1lIFwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5h
bWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyInKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJm
cmFtZSBcIiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotfQotCiBzdGF0aWMgdm9pZCBkdW1wTG9h
ZEV2ZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSkKIHsK
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgZHVtcEZyYW1lRGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
ZXZlbnROYW1lKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
c3RyaW5nKGZyYW1lKSwgIiAtICIsIGV2ZW50TmFtZSwgJ1xuJykpOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VS
TFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKK3N0YXRp
YyBTdHJpbmcgc3RyaW5nKFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0KQogewogICAgIGF1dG8gdXJs
ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBhdXRvIGZpcnN0
UGFydHkgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlGaXJzdFBhcnR5Rm9yQ29va2llcyhyZXF1
ZXN0KSk7CiAgICAgYXV0byBodHRwTWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRU
UE1ldGhvZChyZXF1ZXN0KSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TVVJMUmVx
dWVzdCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpLCAiLCBtYWlu
IGRvY3VtZW50IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0
KCkpLCAiLCBodHRwIG1ldGhvZCAiKTsKLSAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRo
b2QuZ2V0KCkpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIihub25lKSIp
OwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoaHR0
cE1ldGhvZCkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIjxOU1VSTFJlcXVlc3QgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQo
dXJsLmdldCgpKSwKKyAgICAgICAgIiwgbWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSwKKyAgICAgICAgIiwgaHR0cCBtZXRob2Qg
IiwgV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpID8gIihub25lKSIgOiAiIiwgaHR0
cE1ldGhvZC5nZXQoKSwgJz4nKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXNwb25z
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9u
c2UsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIGJvb2wgc2hvdWxkRHVtcFJlc3BvbnNl
SGVhZGVycyA9IGZhbHNlKQorc3RhdGljIFN0cmluZyBzdHJpbmcoV0tVUkxSZXNwb25zZVJlZiBy
ZXNwb25zZSwgYm9vbCBzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7CiAgICAg
YXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAg
aWYgKCF1cmwpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCki
KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghdXJsKQorICAgICAgICByZXR1cm4gIihudWxs
KSJfczsKKyAgICBpZiAoIXNob3VsZER1bXBSZXNwb25zZUhlYWRlcnMpIHsKKyAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlc3BvbnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1
bHQodXJsLmdldCgpKSwKKyAgICAgICAgICAgICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tVUkxS
ZXNwb25zZUhUVFBTdGF0dXNDb2RlKHJlc3BvbnNlKSwgJz4nKTsKICAgICB9Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlc3BvbnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1
bHQodXJsLmdldCgpKSwgIiwgaHR0cCBzdGF0dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNlSFRUUFN0
YXR1c0NvZGUocmVzcG9uc2UpKTsKLSAgICBpZiAoc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycykK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIiwgSW5qZWN0ZWRCdW5kbGVQYWdlOjpy
ZXNwb25zZUhlYWRlckNvdW50KHJlc3BvbnNlKSwgIiBoZWFkZXJzIik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJz4nKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiPE5TVVJMUmVzcG9uc2Ug
IiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpLAorICAgICAgICAiLCBodHRw
IHN0YXR1cyBjb2RlICIsIFdLVVJMUmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSksCisg
ICAgICAgICIsICIsIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNw
b25zZSksICIgaGVhZGVycz4iKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLS8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBmb3Igbm9uIGNvY29hIHBvcnRzLgotLy8gICAgICAgIFtHVEtdW1dQ
RV0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI5NQorCisvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG5vbi1Db2NvYSBwb3J0cy4gW0dUS11bV1BFXSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0Mjk1CiB1aW50NjRfdCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNw
b25zZSkKIHsKICAgICByZXR1cm4gMDsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0Vycm9yUmVmIGVy
cm9yLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQpAQCAtNDgwLDcgKzQ2NCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChXS0Vycm9yUmVmIGVycm9yLCBTCiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TRXJy
b3IgZG9tYWluICIsIGVycm9yRG9tYWluLCAiLCBjb2RlICIsIGVycm9yQ29kZSk7CiAgICAgaWYg
KGF1dG8gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3IpKSkKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgZmFpbGluZyBVUkwgXCIiLCB0b1dURlN0cmluZyhh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSksICciJyk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwiIiwgYWRvcHRXSyhXS1VSTENvcHlTdHJp
bmcodXJsLmdldCgpKSkuZ2V0KCksICciJyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4n
KTsKIH0KIApAQCAtNzAwLDcgKzY4NCw3IEBAIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluCiAgICAg
aWYgKGZhYnMoeCkgPD0gMC4wMDAwMDAwMSAmJiBmYWJzKHkpIDw9IDAuMDAwMDAwMDEpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoImZyYW1lICciLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxl
RnJhbWVDb3B5TmFtZShmcmFtZSkpKSwgIicgIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJmcmFtZSAnIiwgYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKS5nZXQo
KSwgIicgIik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInNjcm9sbGVkIHRvICIsIHgsICcs
JywgeSwgJ1xuJyk7CiB9CiAKQEAgLTc1OCw5ICs3NDIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRGVz
Y2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYg
c3RyaQogICAgICAgICBpZiAoIWhhc0RvY3VtZW50RWxlbWVudChzdWJmcmFtZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlxu
LS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKHN1YmZyYW1lTmFtZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIidcbi0tLS0tLS0tXG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxuLS0t
LS0tLS1cbkZyYW1lOiAnIiwgc3ViZnJhbWVOYW1lLmdldCgpLCAiJ1xuLS0tLS0tLS1cbiIpOwog
CiAgICAgICAgIGR1bXBGcmFtZVRleHQoc3ViZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogICAgICAg
ICBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoc3ViZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwpAQCAt
NzgwLDggKzc2Miw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNo
aXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkCiAjaWYgVVNFKENGKSAmJiAh
UExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQogICAgIGF1dG8gd2tEYXRhID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKICAgICBhdXRvIGNm
RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQo
KSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdldCgpKSkpOwotICAgIGF1dG8gY2ZTdHJpbmcgPSBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRh
dGEuZ2V0KCkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNmU3RyaW5nLmdldCgpKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmlu
Z0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpLmdldCgpKTsKICNlbmRpZgogfQogCkBA
IC04MDcsOSArNzg4LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAgIHN3
aXRjaCAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aGF0VG9EdW1wKCkpIHsKICAgICBj
YXNlIFdoYXRUb0R1bXA6OlJlbmRlclRyZWU6IHsKICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxl
LnRlc3RSdW5uZXIoKS0+aXNQcmludGluZygpKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVy
bmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZyhtX3BhZ2UpKS5nZXQoKSkpOworICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJl
ZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZyhtX3BhZ2UpKS5nZXQoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFk
b3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKG1f
cGFnZSwgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5yZW5kZXJUcmVlRHVtcE9wdGlvbnMo
KSkpLmdldCgpKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdL
QnVuZGxlUGFnZUNvcHlSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UsIGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+cmVuZGVyVHJlZUR1bXBPcHRpb25zKCkpKS5nZXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFdoYXRUb0R1bXA6Ok1haW5GcmFt
ZVRleHQ6CkBAIC04OTAsMTkgKzg3MSwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
UmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tTdHJpbmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbQogICAg
ICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNr
cygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgLSBkaWRSZWNlaXZlVGl0bGU6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4n
KTsKLSAgICB9Ci0KLSAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wVGl0bGVDaGFuZ2VzKCkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJUSVRMRSBDSEFOR0VEOiAnIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKHRpdGxlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJ1xu
Iik7Ci0gICAgfQotCisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChz
dHJpbmcoZnJhbWUpLCAiIC0gZGlkUmVjZWl2ZVRpdGxlOiAiLCB0aXRsZSwgJ1xuJyk7CisgICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygp
KQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiVElUTEUgQ0hBTkdFRDogJyIsIHRpdGxl
LCAiJ1xuIik7CiAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCkBAIC05NTEsMTAgKzkyMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBX
S0J1CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0g
d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOiAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHVybCksICdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJp
bmcoc3RyaW5nKGZyYW1lKSwgIiAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIiwg
cGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSwgV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBlKQpAQCAtOTgy
LDcgKzk1MSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgICAgICBkdW1wTG9hZEV2ZW50
KGZyYW1lLCAiZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUiKTsKIAogICAgIGlmICh1bnNp
Z25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMgPSBXS0J1bmRsZUZyYW1lR2V0UGVuZGluZ1Vu
bG9hZENvdW50KGZyYW1lKSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtl
U3RyaW5nKGZyYW1lVG9TdHIoZnJhbWUpLCAiIC0gaGFzICIsIHBlbmRpbmdGcmFtZVVubG9hZEV2
ZW50cywgIiBvbnVubG9hZCBoYW5kbGVyKHMpXG4iKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxl
Lm91dHB1dFRleHQobWFrZVN0cmluZyhzdHJpbmcoZnJhbWUpLCAiIC0gaGFzICIsIHBlbmRpbmdG
cmFtZVVubG9hZEV2ZW50cywgIiBvbnVubG9hZCBoYW5kbGVyKHMpXG4iKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZShXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lKQpAQCAtMTA0OSwxMSArMTAxOCw4IEBAIFdLVVJMUmVxdWVzdFJlZiBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlCiAgICAgICAgICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKICAgICAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxk
ZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIHdpbGxTZW5kUmVx
dWVzdCAiKTsKLSAgICAgICAgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChyZXF1ZXN0LCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgcmVkaXJlY3RSZXNwb25zZSAiKTsKLSAgICAgICAgZHVtcFJlc3BvbnNlRGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIsIGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEFsbEhUVFBSZWRpcmVjdGVkUmVz
cG9uc2VIZWFkZXJzKCkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIHdpbGxTZW5kUmVxdWVzdCAiLCBzdHJpbmco
cmVxdWVzdCksCisgICAgICAgICAgICAiIHJlZGlyZWN0UmVzcG9uc2UgIiwgc3RyaW5nKHJlc3Bv
bnNlLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxIVFRQUmVkaXJl
Y3RlZFJlc3BvbnNlSGVhZGVycygpKSwgJ1xuJyk7CiAgICAgICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAKQEAgLTEwODYsMTEg
KzEwNTIsNyBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJl
cXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICAgICAgbWFpbkZyYW1l
SXNFeHRlcm5hbCA9IGlzSFRUUE9ySFRUUFNTY2hlbWUobWFpbkZyYW1lU2NoZW1lLmdldCgpKSAm
JiAhaXNMb2NhbEhvc3QobWFpbkZyYW1lSG9zdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCFtYWluRnJhbWVJc0V4dGVybmFsICYmICFpc0FsbG93ZWRIb3N0KGhvc3QuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVS
TCAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0
cmluZykpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkJsb2Nr
ZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiLCB1cmxTdHJpbmcuZ2V0KCksICdcbicpKTsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQpAQCAtMTExNyw5ICsx
MDc5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJl
c291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0IKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBkdW1wUmVzb3VyY2VVUkwo
aWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVJlc3BvbnNlICIpOwotICAgICAgICBkdW1wUmVzcG9uc2VE
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSwgc3RyaW5nQnVpbGRlcik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiIC0gZGlkUmVjZWl2ZVJlc3BvbnNlICIsIHN0cmluZyhyZXNwb25zZSksICdc
bicpOwogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CiAgICAgfQogCkBAIC0xMTMyLDE0ICsxMDkyLDExIEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgV0tCCiAgICAgYXV0byBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25z
ZUNvcHlNSU1FVHlwZShyZXNwb25zZSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGhhcyBNSU1FIHR5cGUgIik7Ci0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobWltZVR5cGVTdHJpbmcpKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh1cmxTdHJpbmcuZ2V0KCksICIgaGFzIE1JTUUgdHlwZSAiLCBt
aW1lVHlwZVN0cmluZy5nZXQoKSk7CiAKICAgICBTdHJpbmcgcGxhdGZvcm1NaW1lVHlwZSA9IHBs
YXRmb3JtUmVzcG9uc2VNaW1lVHlwZShyZXNwb25zZSk7CiAgICAgaWYgKCFwbGF0Zm9ybU1pbWVU
eXBlLmlzRW1wdHkoKSAmJiBwbGF0Zm9ybU1pbWVUeXBlICE9IHRvV1RGU3RyaW5nKG1pbWVUeXBl
U3RyaW5nKSkgewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBidXQgcGxh
dGZvcm0gcmVzcG9uc2UgaGFzICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwbGF0
Zm9ybU1pbWVUeXBlKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBidXQgcGxhdGZv
cm0gcmVzcG9uc2UgaGFzICIsIHBsYXRmb3JtTWltZVR5cGUpOwogICAgIH0KIAogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAtMTE2Miw3ICsxMTE5LDcgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdL
QnVuZGxlRnJhbWUKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1w
UmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGaW5pc2hMb2FkaW5nXG4iKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiIC0gZGlkRmluaXNoTG9hZGluZ1xuIik7CiAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCkBAIC0xMTc3LDcgKzEx
MzQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZShX
S0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZQogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwogICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVy
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZEZhaWxMb2FkaW5nV2l0
aEVycm9yOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkRmFpbExvYWRpbmdX
aXRoRXJyb3I6ICIpOwogCiAgICAgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RS
ZXN1bHQoZXJyb3IsIHN0cmluZ0J1aWxkZXIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdc
bicpOwpAQCAtMTE5OSw3ICsxMTU2LDYgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3Vs
ZENhY2hlUmVzcG9uc2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLAogICAgIHJl
dHVybiB0cnVlOwogfQogCi0KIC8vIFBvbGljeSBDbGllbnQgQ2FsbGJhY2tzCiAKIFdLQnVuZGxl
UGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uLCBXS1VSTFJlcXVl
c3RSZWYgcmVxdWVzdCwgV0tUeXBlUmVmKiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKQEAgLTEyMjksMTMgKzExODUsOSBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgICAg
ICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uVXNlOwogCiAgICAgaWYgKGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFBvbGljeUNhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgLSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uXG4iKTsKLSAg
ICAgICAgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0
LCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWlu
IGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5v
Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRl
cm5hbGx5IC0gIiwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFs
VVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQobWFrZVN0cmluZygiIC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIiwgc3Ry
aW5nKHJlcXVlc3QpLAorICAgICAgICAgICAgIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVG
cmFtZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIiwKKyAgICAgICAgICAgICIgc2hv
dWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIiwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0
U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIiwg
J1xuJykpOwogICAgIH0KIAogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5p
c1BvbGljeURlbGVnYXRlRW5hYmxlZCgpKQpAQCAtMTI0NSwxOSArMTE5NywxNiBAQCBXS0J1bmRs
ZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKFdLQgogICAgIGF1dG8gdXJsU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlT
Y2hlbWUodXJsLmdldCgpKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQg
dG8gbG9hZCAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiUG9saWN5IGRlbGVnYXRlOiBh
dHRlbXB0IHRvIGxvYWQgIik7CiAgICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5n
ZXQoKSkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0so
V0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdldCgpKSkpKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0
KCkpKS5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSkpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIik7Ci0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhX
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9u
KSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwnIik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdl
dCgpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwn
IiwgTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZp
Z2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkuZ2V0KCksICdcJycpOwogICAgIGF1dG8gaGl0
VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRl
c3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7
CiAgICAgICAgIGF1dG8gbm9kZUhhbmRsZVJlZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVz
dWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZi5nZXQoKSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvcmlnaW5hdGluZyBmcm9tICIpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVI
YW5kbGVSZWYuZ2V0KCkpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBvcmlnaW5h
dGluZyBmcm9tICIsIGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZUhhbmRsZVJl
Zi5nZXQoKSkpOwogICAgIH0KIAogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAt
MTI3Nyw3ICsxMjI2LDcgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tCdW5kbGVQYWcKIHsKICAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSAmJiBXS1VSTFJlc3BvbnNlSXNBdHRhY2htZW50KHJl
c3BvbnNlKSkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4
dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQs
IHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVzcG9u
c2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9uc2UpKSksICJcJ1xuIikpOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kg
ZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUg
XCciLCBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9uc2Up
KS5nZXQoKSwgIidcbiIpKTsKICAgICB9CiAKICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5
QWN0aW9uUGFzc1Rocm91Z2g7CkBAIC0xMzY3LDcgKzEzMTYsNyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6d2lsbEFkZE1lc3NhZ2VUb0NvbnNvbGUoV0tTdHJpbmdSZWYgbWVzc2FnZSkKICAg
ICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV1RGOjpTdHJpbmcgbWVzc2FnZVN0cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOwor
ICAgIGF1dG8gbWVzc2FnZVN0cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOwogICAgIHNpemVf
dCBudWxsQ2hhclBvcyA9IG1lc3NhZ2VTdHJpbmcuZmluZChVQ2hhcigwKSk7CiAgICAgaWYgKG51
bGxDaGFyUG9zICE9IFdURjo6bm90Rm91bmQpCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcudHJ1bmNh
dGUobnVsbENoYXJQb3MpOwpAQCAtMTM5Myw3ICsxMzQyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiAg
ICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxs
YmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6
IiwgdG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCksICdcbicpKTsKKyAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0
U3RhdHVzVGV4dDoiLCBzdGF0dXNiYXJUZXh0LCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdL
QnVuZGxlRnJhbWVSZWYpCkBAIC0xNDE2LDcgKzEzNjUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRDb25maXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVu
ZGxlRgogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQo
V0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdHJpbmdSZWYgZGVmYXVsdFZhbHVlLCBXS0J1bmRsZUZy
YW1lUmVmKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1h
a2VTdHJpbmcoIlBST01QVDogIiwgdG9XVEZTdHJpbmcobWVzc2FnZSksICIsIGRlZmF1bHQgdGV4
dDoiLCBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWlsaW5nU3BhY2VzQWRkTmV3bGluZSh0b1dURlN0
cmluZyhkZWZhdWx0VmFsdWUpKSkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5v
dXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBST01QVDogIiwgbWVzc2FnZSwgIiwgZGVmYXVsdCB0ZXh0
OiIsIGFkZExlYWRpbmdTcGFjZVN0cmlwVHJhaWxpbmdTcGFjZXNBZGROZXdsaW5lKHRvV1RGU3Ry
aW5nKGRlZmF1bHRWYWx1ZSkpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRS
ZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdp
biwgaW50NjRfdCB0b3RhbEJ5dGVzTmVlZGVkKQpAQCAtMTQ0Miw3ICsxMzkxLDcgQEAgdWludDY0
X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlP
cmlnaW5SZWYgb3JpZ2luLAogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpOwogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNrcygpKQotICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNl
ZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBk
YXRhYmFzZToiLCB0b1dURlN0cmluZyhkYXRhYmFzZU5hbWUpLCAnXG4nKSk7CisgICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0Ug
Q0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmlu
ZyhvcmlnaW4pLCAiIGRhdGFiYXNlOiIsIGRhdGFiYXNlTmFtZSwgJ1xuJykpOwogCiAgICAgdWlu
dDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGRvdWJsZSB0ZXN0RGVm
YXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRR
dW90YSgpOwpAQCAtMTUyNSw3ICsxNDc0LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNo
b3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01S
YW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7
CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBE
RUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTUzNiw3ICsxNDg1
LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVS
YW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQot
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5E
T01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsK
ICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRp
bmcoKTsKIH0KIApAQCAtMTU0NiwyMiArMTQ5NSwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFn
ZTo6c2hvdWxkSW5zZXJ0Tm9kZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSwgV0tCdW5kbGVS
YQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1td
ID0gewogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblR5cGVkIiwKICAgICAgICAgIldlYlZp
ZXdJbnNlcnRBY3Rpb25QYXN0ZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3Bw
ZWQiLAogICAgIH07CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5n
ZVRvUmVwbGFjZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZl
bkFjdGlvbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3Ry
aW5nW2FjdGlvbl0pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVM
RUdBVEU6IgorICAgICAgICAgICAgIiBzaG91bGRJbnNlcnROb2RlOiIsIGR1bXBQYXRoKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgbm9kZSksCisgICAgICAgICAgICAiIHJlcGxhY2luZ0RPTVJhbmdl
OiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSwKKyAgICAg
ICAgICAgICIgZ2l2ZW5BY3Rpb246IiwgaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0sICdcbicp
KTsKICAgICB9CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
QWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNTcyLDIyICsxNTE2LDE3IEBAIGJvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpzaG91bGRJbnNlcnRUZXh0KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFu
Z2VIYW5kbGVSCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmluc2VydGFjdGlvbnN0
cmluZ1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogaW5zZXJ0YWN0aW9u
c3RyaW5nW10gPSB7CiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQiLAogICAgICAg
ICAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCIsCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0
aW9uRHJvcHBlZCIsCiAgICAgfTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydFRleHQ6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHQpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0p
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmpl
Y3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAg
ICAgICAgICAgIiBzaG91bGRJbnNlcnRUZXh0OiIsIHRleHQsCisgICAgICAgICAgICAiIHJlcGxh
Y2luZ0RPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBs
YWNlKSwKKyAgICAgICAgICAgICIgZ2l2ZW5BY3Rpb246IiwgaW5zZXJ0YWN0aW9uc3RyaW5nW2Fj
dGlvbl0sICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNTk4LDEzICsxNTM3LDggQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5k
bGVSZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJ
VElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcg
REVMRUdBVEU6IHNob3VsZERlbGV0ZURPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCkBAIC0xNjE0LDI3ICsxNTQ4LDE3IEBA
IGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVu
ZGxlUmFuZ2VIYW5kbGVSZWYgZnJvbVJhCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIg
KmFmZmluaXR5c3RyaW5nW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBh
ZmZpbml0eXN0cmluZ1tdID0gewogICAgICAgICAiTlNTZWxlY3Rpb25BZmZpbml0eVVwc3RyZWFt
IiwKICAgICAgICAgIk5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIgogICAgIH07Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIgKmJvb2xzdHJpbmdbXSA9IHsKLSAgICAgICAgIkZBTFNFIiwKLSAg
ICAgICAgIlRSVUUiCi0gICAgfTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBm
cm9tUmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG9ET01S
YW5nZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2Us
IG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgYWZmaW5pdHk6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFmZmlu
aXR5c3RyaW5nW2FmZmluaXR5XSk7IAotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBzdGlsbFNlbGVjdGluZzoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm9v
bHN0cmluZ1tzdGlsbFNlbGVjdGluZ10pOyAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5n
KCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpLAorICAg
ICAgICAgICAgIiB0b0RPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRv
UmFuZ2UpLAorICAgICAgICAgICAgIiBhZmZpbml0eToiLCBhZmZpbml0eXN0cmluZ1thZmZpbml0
eV0sCisgICAgICAgICAgICAiIHN0aWxsU2VsZWN0aW5nOiIsIHN0aWxsU2VsZWN0aW5nID8gIlRS
VUUiIDogIkZBTFNFIiwgJ1xuJykpOwogICAgIH0KICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE2NDYsMTMgKzE1NzAs
OSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQXBwbHlTdHlsZShXS0J1bmRsZUNT
U1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUsCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlT
dHlsZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3R5bGVEZWNUb1N0cihzdHls
ZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0b0VsZW1lbnRzSW5E
T01SYW5nZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3Bh
Z2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmlu
ZygiRURJVElORyBERUxFR0FURToiCisgICAgICAgICAgICAiIHNob3VsZEFwcGx5U3R5bGU6Iiwg
c3R5bGVEZWNUb1N0cihzdHlsZSksCisgICAgICAgICAgICAiIHRvRWxlbWVudHNJbkRPTVJhbmdl
OiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIH0K
ICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRp
bmcoKTsKIH0KQEAgLTE2NjUsMTEgKzE1ODUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkQmVnaW5FZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRCZWdpbkVkaXRpbmc6Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmco
bm90aWZpY2F0aW9uTmFtZSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6Iiwgbm90aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3Rp
ZmljYXRpb25OYW1lKQpAQCAtMTY4MCwxMSArMTU5Niw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRFbmRFZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYg
KCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRFbmRFZGl0aW5nOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiLCBub3RpZmljYXRpb25OYW1lLCAnXG4nKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0
aW9uTmFtZSkKQEAgLTE2OTUsMTEgKzE2MDcsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkQ2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2U6Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9u
TmFtZSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVu
ZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2U6Iiwgbm90aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUp
CkBAIC0xNzEwLDExICsxNjE4LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5n
ZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5v
dGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0K
IAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTE3ODMsNyArMTY4Nyw3IEBAIFN0cmlu
ZyBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBIaXN0b3J5KCkKIHsKICAgICByZXR1cm4gbWFrZVN0
cmluZygKICAgICAgICAgIlxuPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09
PT09PT09PT1cbiIsCi0gICAgICAgIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlRHVt
cEhpc3RvcnlGb3JUZXN0aW5nKG1fcGFnZSwgdG9XSygiL0xheW91dFRlc3RzLyIpLmdldCgpKSku
Z2V0KCkpLAorICAgICAgICBhZG9wdFdLKFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGlu
ZyhtX3BhZ2UsIHRvV0soIi9MYXlvdXRUZXN0cy8iKS5nZXQoKSkpLmdldCgpLAogICAgICAgICAi
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKICAgICAp
OwogfQo=
</data>
<flag name="review"
          id="449783"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428916</attachid>
            <date>2021-05-18 00:37:47 -0700</date>
            <delta_ts>2021-05-18 12:31:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210518003746.patch</filename>
            <type>text/plain</type>
            <size>138374</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY4NGMxODgyYzJhODNiY2FlMzVlNWE1
NmExZTFhZTNiYmMyN2MyZGQuLmZkYzdiZDE1NjZjZTYxZjk0ODhkYzUxZTkyOTI4OTFhNjQ4OWNj
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTg5IEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBw
b3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgVGhlIG5ldyBoZWFkZXIgbWFrZXMg
Q0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHdvcmsgd2l0aCBzdHJpbmcgY29uY2F0ZW5hdGlvbiwK
KyAgICAgICAgd2hpY2ggbWVhbnMgaXQgbm93IHdvcmtzIHdpdGggdGhlIHZhcmlhZGljIFN0cmlu
Z0J1aWxkZXI6OmFwcGVuZCBhbmQgbWFrZVN0cmluZywKKyAgICAgICAgYW5kIHN0aWxsIHdvcmtz
IHdpdGggdGhlIHNpbmdsZS1hcmd1bWVudCBTdHJpbmdCdWlsZGVyOjphcHBlbmQuIE1vcmUgZWZm
aWNpZW50CisgICAgICAgIHRoYXQgdGhlIG9sZCB2ZXJzaW9uIGJlY2F1c2UgaXQgZG9lcyBub3Qg
YWxsb2NhdGUgYSB0ZW1wb3JhcnkgV1RGOjpTdHJpbmcgZm9yCisgICAgICAgIHRoZSAxNi1iaXQg
Y2hhcmFjdGVyIHBhdGguCisKKyAgICAgICAgQWxzbyBtYWRlIG1hbnkgb3RoZXIgc21hbGwgaW1w
cm92ZW1lbnRzIHRvIHRoZSBTdHJpbmdCdWlsZGVyIGltcGxlbWVudGF0aW9uLgorCisgICAgICAg
ICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRl
Q0YuaC4KKworICAgICAgICAqIHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBSZW1vdmVkIENvbmRp
dGlvbmFsQ3Jhc2hPbk92ZXJmbG93LCB3aGljaCB3YXMgb25seQorICAgICAgICBoZXJlIGZvciB1
c2UgYnkgU3RyaW5nQnVpbGRlciwgd2hpY2ggZG9lcyBub3QgdXNlIENoZWNrZWRBcml0aG1ldGlj
IGFueSBtb3JlLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRlRXLmNtYWtlOiBBZGRlZCBTdHJp
bmdDb25jYXRlbmF0ZUNGLmguLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0
dG8uCisgICAgICAgICogd3RmL1BsYXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAq
IHd0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmg6IE1vdmVkIHRoZSBjb250ZW50cyBvZiB0aGlzIGZp
bGUgaW5zaWRlIHRoZQorICAgICAgICBXVEYgbmFtZXNwYWNlLgorICAgICAgICAoV1RGOjpzaWdu
ZWRBZGRJbnQzMk92ZXJmbG93cyk6IFJlbmFtZWQgdGhpcyBmdW5jdGlvbi4gVGhlIHR5cGUgaGVy
ZSBpcworICAgICAgICBpbXBvcnRhbnQsIGFuZCB3ZSBhcmUgbm90IGRvaW5nIGFueXRoaW5nIHRv
IHByZXZlbnQgdHlwZSBjb252ZXJzaW9uIG9yCisgICAgICAgIGNyZWF0ZSBhbWJpZ3VpdHksIHNv
IGl0J3MgZ29vZCB0byBiZSBleHBsaWNpdCBpbiB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAg
KFdURjo6c2F0dXJhdGVkU3VtPGludDMyX3Q+KTogUmVuYW1lZCB0aGlzIGZyb20gc2F0dXJhdGVk
QWRkaXRpb24gZm9yCisgICAgICAgIGNsYXJpdHkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3Vt
LCBzbyB0aGF0J3MgYSBiZXR0ZXIgbmFtZSB0aGFuIGNhbGxpbmcKKyAgICAgICAgaXQgImFkZGl0
aW9uIi4gQWxzbywgaXQncyBjbGVhcmVyIHRvIGJlIGV4cGxpY2l0IGFib3V0IHRoZSByZXR1cm4g
dHlwZS4KKyAgICAgICAgKFdURjo6c2lnbmVkU3VidHJhY3RJbnQzMk92ZXJmbG93cyk6IFJlbmFt
ZWQuIFNhbWUgcmVhc29uIGFzIGFib3ZlLgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWREaWZmZXJl
bmNlPGludDMyX3Q+KTogRGl0dG8uCisgICAgICAgIChXVEY6OnNhdHVyYXRlZFN1bSk6IEFkZGVk
LiBEb2VzIHVuc2lnbmVkIGludGVnZXIgc2F0dXJhdGVkIGFkZGl0aW9uLgorICAgICAgICBUaGlz
IG9uZSBjYW4gYmUgd3JpdHRlbiBpbiBhIHBvcnRhYmxlIG1hbm5lciBhbmQgc3RpbGwgZ2V0IHJl
YWxseQorICAgICAgICBlZmZpY2llbnQgY29kZSBvbiBhdCBsZWFzdCBJbnRlbCBhbmQgQVJNNjQu
CisgICAgICAgIChXVEY6OnNhdHVyYXRlZFN1bSk6IEFkZGVkIGEgZnVuY3Rpb24gdGVtcGxhdGUg
dGhhdCBsZXRzIGNhbGxlcnMgcGFzcworICAgICAgICBsYXJnZXIgbnVtYmVyIG9mIGFyZ3VtZW50
cyB0byBzYXR1cmF0ZWRTdW0sIHJhdGhlciB0aGFuIGV4YWN0bHkgdHdvLgorCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6CisgICAgICAgIChXVEY6OmV4cGFuZGVkQ2FwYWNp
dHkpOiBSZW5hbWVkIHRvIHVzZSB0aGUgdGVybSBjYXBhY2l0eSByYXRoZXIgdGhhbgorICAgICAg
ICBsZW5ndGggZm9yIHRoZSBuZXcgcmVxdWlyZWQgY2FwYWNpdHkuCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OmRpZE92ZXJmbG93KTogSW1wbGVtZW50IHRoZSBuZXcgYXBwcm9hY2ggdG8K
KyAgICAgICAgb3ZlcmZsb3csIG1lYW5pbmcgd2UgbmVlZCB0byB3cml0ZSB0aGUgQ1JBU0goKSBo
ZXJlIGV4cGxpY2l0bHkgYW5kCisgICAgICAgIGluIHRoZSBub24tY3Jhc2hpbmcgbW9kZSwgc2V0
IG1fbGVuZ3RoLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZyBjb25z
dCk6IENoYW5nZWQgdGhlIG92ZXJmbG93IGNoZWNrCisgICAgICAgIGludG8gYSBSRUxFQVNFX0FT
U0VSVC4gVGhpcyBpcyBub3cgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZSBjaGVjayB0aGF0Cisg
ICAgICAgIGNhbGxlcnMgd2VyZSBkb2luZyBlYXJsaWVyLCBzbyB3ZSB3YW50IGl0IGluIHByb2R1
Y3Rpb24gYnVpbGRzLiBBbHNvCisgICAgICAgIHNpbXBsaWZpZWQgdGhpcyBzaW5jZSBvdXIgbV9s
ZW5ndGggbWVtYmVyIGlzIGEgc2ltcGxlIGludGVnZXIgbm93LAorICAgICAgICBhbmQgcmVtb3Zl
ZCB0aGUgdW51c2VkIG1faXNSZWlmaWVkLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpy
ZXNpemUpOiBGaXhlZCB0aGUgb3ZlcmZsb3cgY2hlY2sgdG8gd29yayBwcm9wZXJseQorICAgICAg
ICBldmVuIGluIHRoZSAicmVjb3JkIG92ZXJmbG93IiBtb2RlLiBXZSBub3cgZG8gaXQgZXhwbGlj
aXRseSBpbnN0ZWFkCisgICAgICAgIG9mIHJlbHlpbmcgb24gbV9sZW5ndGggYXNzaWdubWVudCwg
c28gd2Uga25vdyB0byByZXR1cm4gZWFybHkuIFRoZSBvbGQKKyAgICAgICAgY29kZSBoYWQgYW4g
YXNzZXJ0aW9uIGluc3RlYWQsIHdoaWNoIGRpZCBubyBnb29kIGluIHByb2R1Y3Rpb24gYnVpbGRz
LgorICAgICAgICBBbHNvIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBtX2lzOEJpdC4KKyAgICAgICAg
KFdURjo6U3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIpOiBSZXBsYWNlZCB0d28gc2VwYXJh
dGUgZnVuY3Rpb25zCisgICAgICAgIHdpdGggYSBzaW5nbGUgc2ltcGxlciBmdW5jdGlvbiB0ZW1w
bGF0ZS4gQWxzbyBjaGFuZ2VkIHRoaXMgc2luY2UgdGhlCisgICAgICAgIG1fYnVmZmVyQ2hhcmFj
dGVycyBkYXRhIG1lbWJlciBpcyBub3cgYWx3YXlzIGRlZmluZWQgYXMgYW4gTENoYXIqLAorICAg
ICAgICBldmVuIHRob3VnaCBzb21ldGltZXMgaXQncyBhIFVDaGFyKiB0aGF0IGhhcyBiZWVuIGNv
bnZlcnRlZCB3aXRoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3QuIFJlbW92ZWQgZXh0cmEgb3Zl
cmZsb3cgY2hlY2tzIGJlY2F1c2UgdGhlCisgICAgICAgIFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQgZnVuY3Rpb24gYWxyZWFkeSBkb2VzIHRoZSBvbmx5CisgICAgICAgIG92ZXJm
bG93IGNoZWNrIHdlIG5lZWQuIEFsc28gbW92ZSB0byBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVy
cworICAgICAgICBmb3IgY29weWluZyBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIHVzaW5nIHN0ZDo6
bWVtY3B5IGRpcmVjdGx5LgorICAgICAgICBSZW1vdmVkIGNvZGUgdG8gc2V0IG1faXM4Qml0IGFu
ZCBtX2J1ZmZlckNoYXJhY3RlcnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlYWxs
b2NhdGVCdWZmZXIpOiBSZXBsYWNlZCB0d28gc2VwYXJhdGUKKyAgICAgICAgZnVuY3Rpb25zIHdp
dGggYSBmdW5jdGlvbiB0ZW1wbGF0ZSBhbmQgYSBjb3ZlciB0aGF0IGNhbGxzIHRoZQorICAgICAg
ICBhcHByb3ByaWF0ZSBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUgZm9yIHBsYWNlcyB3aGVyZSB3
ZSBhcmVuJ3QKKyAgICAgICAgYWxyZWFkeSBpbiBjaGFyYWN0ZXItdHlwZS1zcGVjaWZpYyBjb2Rl
IHBhdGhzLiBUaGlzIHZlcnNpb24gbm93CisgICAgICAgIHN1cHBvcnRzIGFsbG9jYXRpbmcgYSBi
dWZmZXIgZm9yIHRoZSBmaXJzdCB0aW1lIGluIGNhc2VzIHdoZXJlCisgICAgICAgIHdlIGhhdmUg
bV9zdHJpbmcgYW5kIG5vdCBtX2J1ZmZlciwgd2hpY2ggdXNlZCB0byBiZSBoYW5kbGVkIGF0Cisg
ICAgICAgIHRoZSBoaWdoZXIgbGV2ZWwuIFJlbW92ZWQgY29kZSB0byBzZXQgbV9idWZmZXJDaGFy
YWN0ZXJzLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkpOiBS
ZXdyb3RlIGZvciBzaW1wbGljaXR5LgorICAgICAgICBCeSByZWx5aW5nIG9uIHRoZSBvdmVyZmxv
dyBjaGVja2luZyBpbnNpZGUgcmVhbGxvY2F0ZUJ1ZmZlciBhbmQKKyAgICAgICAgYWxsb2NhdGVC
dWZmZXIgd2Ugbm8gbG9uZ2VyIG5lZWQgY2hlY2tpbmcgb2YgdGhlIHBhc3NlZC1pbiB2YWx1ZQor
ICAgICAgICBhdCB0aGlzIGxldmVsLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmcpOiBSZW1vdmVkIHRoZQorICAgICAgICB2ZXJzaW9uIG9mIHRo
aXMgdGhhdCB0YWtlcyBhZGRpdGlvbmFsTGVuZ3RoIHNpbmNlIGl0J3MKKyAgICAgICAgcG90ZW50
aWFsbHkgY29uZnVzaW5nIHRvIGhhdmUgYSBmYW1pbHkgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSB0
aGUKKyAgICAgICAgc2FtZSBuYW1lIGFuZCB0YWtlIHRoZSBzYW1lIHR5cGUgb2YgYXJndW1lbnQs
IGJ1dCBpbnRlcnByZXQgaXQKKyAgICAgICAgc3VidGx5IGRpZmZlcmVudGx5LiBTdHJlYW1saW5l
ZCB0aGUgY29kZSB1c2luZyBzdGQ6OmV4Y2hhbmdlLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIG5v
dyBhbHNvIGluY2x1ZGVzIHRoZSBsb2dpYyBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lZAorICAgICAg
ICBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRob3V0T3ZlcmZsb3dDaGVjaywgd2hpY2ggd2Fz
IHN1YnRseQorICAgICAgICBtaXNuYW1lZCBzaW5jZSB0aGF0IHdhcyBub3QgdGhlIG9ubHkgc2Vt
YW50aWMgZGlmZmVyZW5jZS4gQWxzbworICAgICAgICByZW1vdmVkIHRoZSBBTFdBWVNfSU5MSU5F
IGJlY2F1c2UgdGhlIGNvbXBpbGVyIHdpbGwgZG8gdGhlIHJpZ2h0CisgICAgICAgIHRoaW5nIHdp
dGhvdXQgc3VjaCBoZWF2eSBoYW5kZWQgYWR2aWNlLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWls
ZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSk6IFN0cmVhbWxpbmVkCisgICAg
ICAgIHRoaXMgYnkgdXNpbmcgc3RkOjpleGNoYW5nZSBhbmQgcmVtb3ZlZCBhZGRpdGlvbmFsIG92
ZXJmbG93IGNoZWNrcworICAgICAgICBhdCB0aGlzIGxldmVsIHNpbmNlIHJlYWxsb2NhdGVCdWZm
ZXIgYWxyZWFkeSBkb2VzIHRoZW0uIEFsc28gYWRkZWQKKyAgICAgICAgYSBjaGVjayBmb3IgdGhl
IGNhc2Ugd2hlcmUgdGhlIG5ldyB0b3RhbCBsZW5ndGggaXMgMCwgd2hpY2ggd291bGQKKyAgICAg
ICAgbm90IGJlIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBlZmZpY2llbnRseSBieSB0aGUgcmVhbGxv
Y2F0ZUJ1ZmZlcgorICAgICAgICBhbmQgYnVmZmVyQ2hhcmFjdGVycyBmdW5jdGlvbnMuCisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKTog
UmVuYW1lZCB0aGlzCisgICAgICAgIGZyb20gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nOCwgc2lu
Y2UgaXQncyBub3cgaWRlbnRpY2FsIHRvIGNhbGxpbmcKKyAgICAgICAgZXh0ZW5kQnVmZmVyRm9y
QXBwZW5kaW5nPExDaGFyPiwgZXhjZXB0IGZvciBpbmxpbmluZyBhbmQgbGlua2FnZS4KKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29u
dmVydCk6CisgICAgICAgIFJlbmFtZWQgdGhpcyBmcm9tIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGlu
ZzE2LiBJdCBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAgICB0aGUgb3RoZXIgZXh0ZW5kQnVmZmVy
IGZ1bmN0aW9ucyBiZWNhdXNlIGlzIHN1cHBvcnRzIHVwY29udmVydGluZworICAgICAgICBmcm9t
IExDaGFyIHRvIFVDaGFyLiBMaWtlIHRoZSBvdGhlcnMgaXQgcmVsaWVzIG9uIGFsbG9jYXRlQnVm
ZmVyCisgICAgICAgIGZvciB0aGUgb3ZlcmZsb3cgY2hlY2tpbmcuCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMpOiBSZW1vdmVkIGFuIHVubmVjZXNzYXJ5Cisg
ICAgICAgIGFzc2VydGlvbiB0aGF0IHRoZSBjaGFyYWN0ZXJzIHBvaW50ZXIgaXMgbm9uLW51bGw7
IHRoYXQgd2lsbCBmYWlsCisgICAgICAgIGluIGFuIG9idmlvdXMgd2F5IHdpdGhvdXQgYW4gYXNz
ZXJ0aW9uLiBTaW1wbGlmaWVkIHRoZSBsb2dpYyBhbmQKKyAgICAgICAgcmVtb3ZlZCBzb21lIGlu
dmFyaWFudCBhc3NlcnRpb25zIHRoYXQgZG9uJ3QgaGVscCB1cyBtdWNoLiBDaGFuZ2VkCisgICAg
ICAgIG92ZXJmbG93IGNoZWNraW5nIGJ5IHVzaW5nIHNhdHVyYXRlZFN1bSB0byBjb21wdXRlIHRo
ZSBuZXcgbGVuZ3RoLgorICAgICAgICBJbiBvdmVyZmxvdyBjYXNlcywgdGhlIG5ldyBzdW0gd2ls
bCBiZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bQorICAgICAgICBzdHJpbmcgbGVuZ3RoLCBidXQg
d2lsbCBmaXQgaW4gYW4gdW5zaWduZWQsIHNvIHdlIGNhbiBwYXNzIGl0CisgICAgICAgIGRvd24g
dG8gbG93ZXIgbGV2ZWxzIGFuZCBsZXQgZnVuY3Rpb25zIGxpa2UgcmVhbGxvY2F0ZUJ1ZmZlciBk
bworICAgICAgICB0aGUgYWN0dWFsIG92ZXJmbG93IGNoZWNraW5nLiBBbHNvIHVzZSBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcmFjdGVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5k
KTogUmVtb3ZlZCB0aGUgQ0ZTdHJpbmdSZWYgb3ZlcmxvYWQuCisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OmNhblNocmluayBjb25zdCk6IFNpbXBsaWZ5IHRoZSBmdW5jdGlvbiBhbmQKKyAg
ICAgICAgcmVtb3ZlIHRoZSB2YWd1ZSBGSVhNRSB0aGF0IHNheXMgInRoaXMgc2hvdWxkIGJlIHR1
bmVkIi4gVGhhdCBtYXkKKyAgICAgICAgYmUgc28sIGJ1dCB0aGUgRklYTUUgaXMgbm90IG5lZWRl
ZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQpOiBTaW1wbGlmeSBi
eSB1c2luZyB0aGUgbmV3CisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXIgYW5kIHN0ZDo6ZXhjaGFu
Z2UuIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uCisgICAgICAgIGFib3V0IG92ZXJmbG93IHRo
YXQgZG9lc24ndCBoZWxwIHVzIG1haW50YWluIHRoZSBpbnZhcmlhbnQuCisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OmlzQWxsQVNDSUkgY29uc3QpOiBXYXMgdGVtcHRlZCB0byByZW1vdmUK
KyAgICAgICAgdGhpcyBmdW5jdGlvbiwgYnV0IGZvciBub3cganVzdCBtYWRlIGl0IHVzZSB0aGUg
U3RyaW5nVmlldworICAgICAgICB2ZXJzaW9uIGZvciBicmV2aXR5LgorCisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oOiBSZW1vdmVkIG1hbnkgdW5uZWVkZWQgaW5jbHVkZXMsIGFu
ZAorICAgICAgICBub3RhYmx5IGluY2x1ZGVkIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbnN0ZWFk
IG9mCisgICAgICAgIENoZWNrZWRBcml0aG1ldGljLmggYmVjYXVzZSB3ZSBub3cgdXNlIHRoZSBm
b3JtZXIgaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgbGF0dGVyLiBDaGFuZ2VkIHRoZSBvdmVyZmxv
dyBjaGVja2luZyBpbXBsZW1lbnRhdGlvbiB0byB3b3JrCisgICAgICAgIG1vcmUgc2ltcGx5IGJh
c2VkIG9uIHNhdHVyYXRlZCBhZGRpdGlvbiByYXRoZXIgdGhhbiBDaGVja2VkLgorICAgICAgICBU
aGlzIGFsbG93ZWQgdXMgdG8gZ2V0IHJpZCBvZiBkZXBlbmRlbmN5IG9uIG91ciBvd24gdW5pcXVl
IG1vZGUKKyAgICAgICAgZm9yIENoZWNrZWQsIGNhbGxlZCBDb25kaXRpb25hbENyYXNoT25PdmVy
Zmxvdy4gUmVtb3ZlZCBhCisgICAgICAgIGNvbW1lbnQgYWJvdXQgbWFraW5nIGEgdGVtcGxhdGl6
ZWQgdmVyc2lvbiBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAgICBXZSBjYW4gZG8gaXQgaWYgd2Ug
bGlrZSwgYnV0IGRvZXMgbm90IHNlZW0gdXJnZW50LiBNb3ZlZAorICAgICAgICBmdWNudGlvbiBi
b2RpZXMgb3V0IG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIHNvIGl0J3MgZWFzaWVyIHRvCisgICAg
ICAgIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGNsYXNzLiBTaW5jZSBtX2xlbmd0aCBpcyBu
b3cgYW4KKyAgICAgICAgb3JkaW5hcnkgaW50ZWdlciwgdGhlIGNoZWNrIGZvciBvdmVyZmxvd2Vk
IHNpbXBseSBjaGVja3MgdG8gc2VlCisgICAgICAgIGlmIHRoZSBsZW5ndGggaXMgbGFyZ2VyIHRo
YW4gdGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aC4gV2hlbiB3ZQorICAgICAgICBlbmNvdW50ZXIg
b3ZlcmZsb3cgdGhhdCBpcyBub3QgYWJvdXQgbGVuZ3RoIGNvbXB1dGF0aW9uLCB3ZSBzZXQKKyAg
ICAgICAgdGhlIGxlbmd0aCB0byB0aGUgbWF4aW11bSBpbnRlZ2VyIHRvIGluZGljYXRlIHRoZSBm
YWlsdXJlLgorICAgICAgICBEZWxldGVkIHRoZSBhcHBlbmQgb3ZlcmxvYWRzIGZvciBDRlN0cmlu
Z1JlZiBhbmQgTlNTdHJpbmcuCisgICAgICAgIFJlbW92ZWQgbV9idWZmZXJDaGFyYWN0ZXJzLCBt
X2lzOEJpdCwgYW5kIG1faXNSZWlmaWVkLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpT
dHJpbmdCdWlsZGVyKTogU2ltcGxpZmllZCB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgc2luY2Ug
d2Ugb25seSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93IG1l
bWJlci4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2xlYXIpOiBGaXhlZCBhIG1pc3Rh
a2Ugd2hlcmUgdGhpcyB3YXMgbm90CisgICAgICAgIHJlc2V0dGluZyB0aGUgbV9pc1JlaWZpZWQg
ZmxhZy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6c3dhcCk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgaW4gdGhlIGRhdGEgbWVtYmVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6
b3BlcmF0b3IgU3RyaW5nVmlldyBjb25zdCk6IE1vdmVkIG91dCBvZiBsaW5lLgorICAgICAgICBN
YWRlIHN1cmUgdG8gY2FsbCB0aGUgbGVuZ3RoKCkgZnVuY3Rpb24gc28gd2UgY3Jhc2ggaWYgdGhp
cyBpcworICAgICAgICBjYWxsZWQgYWZ0ZXIgb3ZlcmZsb3cuCisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OmJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KTogUmVuYW1lZCBmcm9tCisgICAgICAg
IGdldEJ1ZmZlckNoYXJhY3RlcnMsIG90aGVyd2lzZSB1bmNoYW5nZWQuCisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OmJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KTogRGl0dG8uCisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6IEtlZXAgdGhlIHNpbmdsZS1jaGFyYWN0ZXIg
YXBwZW5kCisgICAgICAgIGZ1bmN0aW9uIHNpbXBsZSB1c2luZyB0aGUgYnVmZmVyQ2hhcmFjdGVy
cyBmdW5jdGlvbi4gUmVtb3ZlIHNvbWUKKyAgICAgICAgb2YgdGhlIHVubmVjY2Vzc2FyeSBjaGVj
a3MgYW5kIHNwZWNpYWwgY2FzZXMgaW4gdGhlIG90aGVyIHZlcnNpb25zCisgICAgICAgIG9mIGFw
cGVuZC4gTW9zdCBvZiB0aGUgY2hlY2tpbmcgaXMgZG9uZSBpbnNpZGUgYXBwZW5kQ2hhcmFjdGVy
cywKKyAgICAgICAgd2l0aCBvbmx5IGEgZmV3IGV4Y2VwdGlvbnMuCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OmFwcGVuZFN1YnN0cmluZyk6IE1vdmVkIG91dCBvZiB0aGUgY2xhc3MKKyAg
ICAgICAgZGVmaW5pdGlvbiB3aXRob3V0IG1ha2luZyBzaWduaWZpY2FudCBjaGFuZ2VzLgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXIpOiBEaXR0by4KKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcpOiBHcmVhdGx5IHNpbXBsaWZpZWQgdGhp
cyBmdW5jdGlvbgorICAgICAgICBieSByZWx5aW5nIG9uIG92ZXJmbG93IGNoZWNraW5nIGluIHRo
ZSByZWlmeVN0cmluZyBmdW5jdGlvbiBpbnN0ZWFkCisgICAgICAgIG9mIGRvaW5nIGl0IGhlcmUg
YW5kIHJlbW92aW5nIHVubmVlZGVkIGludmFyaWFudCBhc3NlcnRpb25zLgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjp0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6dG9BdG9tU3RyaW5nIGNvbnN0KTogUmV3cm90
ZSB0aGlzIHRvIHN0cmVhbWxpbmUsCisgICAgICAgIHJlbW92aW5nIGV4cGxpY2l0IG92ZXJmbG93
IGNoZWNrcy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6bGVuZ3RoIGNvbnN0KTogTW92
ZWQgb3V0IG9mIHRoZSBjbGFzcworICAgICAgICBkZWZpbml0aW9uIHdpdGhvdXQgbWFraW5nIHNp
Z25pZmljYW50IGNoYW5nZXMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNhcGFjaXR5
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yW10g
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2hhcmFjdGVycyBj
b25zdCk6IEltcGxlbWVudGVkIHRoaXMgb3BlcmF0aW9uCisgICAgICAgIGluIHRoZSBmdW5jdGlv
biB0ZW1wbGF0ZS4gTm93IHJhdGhlciB0aGFuIGhhdmluZyB0aGlzIGNhbGwgdGhlCisgICAgICAg
IGNoYXJhY3RlcnM4IGFuZCBjaGFyYWN0ZXJzMTYgZnVuY3Rpb25zLCB0aGV5IGNhbiBjYWxsIGl0
LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMpOiBVc2Ug
c2F0dXJhdGVkU3VtIHRvCisgICAgICAgIGNvbXB1dGUgdGhlIHJlcXVpcmVkIGxlbmd0aCwgd2hp
Y2ggYWxsb3dzIHRoZSBleHRlbmRCdWZmZXIKKyAgICAgICAgZnVuY3Rpb25zIHRvIGRvIG92ZXJm
bG93IGNoZWNraW5nIHdpdGhvdXQgaGF2aW5nIHRvIHRha2Ugc3BlY2lhbAorICAgICAgICBjaGVj
a2VkIGludGVnZXIgdHlwZXMgZm9yIGFyZ3VtZW50cy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXJKU09OLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5k
UXVvdGVkSlNPTlN0cmluZyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlCisgICAgICAgIGFuZCBtYWRl
IHRoaXMgdXNlIHRoZSBidWZmZXJDaGFyYWN0ZXJzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGdldHRp
bmcKKyAgICAgICAgZGlyZWN0bHkgYXQgdGhlIG1fYnVmZmVyQ2hhcmFjdGVycyBkYXRhIG1lbWJl
ci4KKworICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaDogQWRkZWQu
IFNwZWNpYWxpemVzIFN0cmluZ1R5cGVBZGFwdGVyIGZvcgorICAgICAgICBib3RoIENGU3RyaW5n
UmVmIGFuZCBOU1N0cmluZyAqLiBJZiBDRlN0cmluZ0dldENTdHJpbmdQdHIgd29ya3MgZm9yIExh
dGluLTEsIHRoZW4KKyAgICAgICAgZG9lcyB0aGUgOC1iaXQgY29kZSBwYXRoLCBvdGhlcndpc2Ug
dGhlIDE2LWJpdC4KKworICAgICAgICAqIHd0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5t
bTogSW5jbHVkZSBTdHJpbmdDb25jYXRlbmF0ZUNGLmgsIHNpbmNlIGl0J3MKKyAgICAgICAgbm93
IG5lZWRlZCB0byB1c2UgQ0ZTdHJpbmdSZWYgd2l0aCBTdHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1
LTE3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBK
UyB0byBlbWl0IHNpZ24gcG9zdHMgYW5kIHRyYWNlIHBvaW50cyB1bmRlciBPcHRpb25zOjpleHBv
c2VQcm9maWxlcnNPbkdsb2JhbE9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUxMmM3MDZmMDU0Y2YyNGVj
YmY3MzkyMWEwMzMzMjQ0OTIwOTBjMDkuLmZlODk4YjMzYjlmZWNjYmY1NjFhNzU1ODYzN2ZmMWRk
ZjM0MzY3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAyMS0wNS0xOCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQg
TlNTdHJpbmcgc3VwcG9ydCBmcm9tIFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0
ZUNGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOiBUd2Vh
a2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVu
ZENTUyk6IFVzZSB2YXJpYWRpYyBTdHJpbmdCdWlsZGVyOjphcHBlbmQgaW5zdGVhZCBvZiBtYW55
CisgICAgICAgIHNlcGFyYXRlIGNhbGxzLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MgY29uc3QpOgorICAgICAg
ICBUd2Vha2VkIGNvZGluZyBzdHlsZSBhIGJpdCwgYW5kIHVzZSB2YXJpYWRpYyBTdHJpbkJ1aWxk
ZXI6OmFwcGVuZCBjYWxscworICAgICAgICB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyBh
bmQgc3RyZWFtbGluZSB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSBjb25zdCk6CisgICAg
ICAgIERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWNlc3NhcnkgY2hlY2tzIHRoYXQgc3RyaW5ncyBh
cmUgZW1wdHkgYmVmb3JlIGFwcGVuZGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL0xheW91dFVu
aXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFVuaXQ6OnJvdW5kIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvci0pOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
ci09KToKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNGb3JTZXNzaW9uIGNvbnN0KTogVHdlYWtlZCBjb2RpbgorICAgICAgICBzdHlsZSBh
IGJpdCwgYW5kIHVzZSB2YXJpYWRpYyBTdHJpbkJ1aWxkZXI6OmFwcGVuZCBjYWxscyB0byByZWR1
Y2UgdGhlCisgICAgICAgIG51bWJlciBvZiBjYWxscyBhbmQgc3RyZWFtbGluZSB0aGUgY29kZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnBsYW5Db3VudGVyKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRl
cik6CisKIDIwMjEtMDUtMTggIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVEIGluIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJhNjg4N2JmZTc0OWZm
ZDY5MDkyMTE5M2RiNDZkOGRiNDUzYTYwODQuLmIwMzM2N2EzZDVlMmIwMzM3OTA2MjBlZmZlZjk0
NGU4ZmNmZDU0MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUtMTggIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5k
IE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5h
dGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMp
OiBVc2UgbWFrZVN0cmluZyBpbnN0ZWFkCisgICAgICAgIG9mIFN0cmluZ0J1aWxkZXIuCisKIDIw
MjEtMDUtMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRW5h
YmxpbmcgSVBDIHRlc3RpbmcgQVBJIHNob3VsZCBwcmV2ZW50IFdlYkNvbnRlbnQgcHJvY2VzcyBm
cm9tIGdldHRpbmcgdGVybWluYXRlZCBpbiBtb3JlIGNhc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMTFlMDk4Y2U0NzdkNjlkODY5YjJmMTVlNzUzYzk5
M2UxODAzN2U2Li5jYzU2MWYzZWY4OTRkOTY0ODQ3ZTY4ODA3MDEyMzc5ZDYxODZmMDI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ5OCw2ICs0OTgsNyBA
QAogCQk5M0FDOTFBNzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTENoYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNCNUI0NEQyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXhOdW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0I1QjQ1MDIyMTcxRUU5MDA0QjdBQTcgLyogTG9nZ2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTkzRDAwMTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJpbmdDb25jYXRl
bmF0ZUNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0NvbmNhdGVu
YXRlQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTkxQ0YyMENBRUNFODAw
QzUxQjhFIC8qIG9iamNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb2JqY1NQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0RERTkzMTFDREMwNTJEMDBGRDM0OTEgLyogZHlsZFNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkeWxkU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ZpZXcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI0LDYgKzkyNSw3IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQlBNUJBMTVGNzE4MjQzNUE2MDBBODJFNjkgLyogQXRvbVN0cmluZ0ltcGxD
Ri5jcHAgKi8sCiAJCQkJQTVCQTE1RjgxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0NGLmNwcCAq
LywKKwkJCQk5M0QwMDE3QjI2NERCQUNGMDBCQ0YxMDkgLyogU3RyaW5nQ29uY2F0ZW5hdGVDRi5o
ICovLAogCQkJCUE1QkExNUY5MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwICov
LAogCQkJCTkzOTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwICovLAog
CQkJCTFDQ0RCMTQ5MUU1NjY2MjYwMDZDNzNDMCAvKiBUZXh0QnJlYWtJdGVyYXRvckNGLmggKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oIGIvU291cmNl
L1dURi93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaAppbmRleCBiODUxNmY4ODFlMGM0YmEzZmYxYWFj
MTU4NjA2YzllZjlkNTczMGFjLi43M2FjZGM3MmQ1Y2JjYzYxZGE3ZWM2MjMzYzJjNWNlNzY0ODI5
ZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKQEAgLTk1LDMxICs5NSw2IEBAIHB1
YmxpYzoKICAgICBjb25zdGV4cHIgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIH07CiAKLWNsYXNzIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93IHsKLXB1Ymxp
YzoKLSAgICB2b2lkIG92ZXJmbG93ZWQoKQotICAgIHsKLSAgICAgICAgbV9vdmVyZmxvd2VkID0g
dHJ1ZTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93KQotICAgICAgICAgICAg
Y3Jhc2goKTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZENyYXNoT25PdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93OyB9Ci0gICAgdm9pZCBzZXRTaG91bGRD
cmFzaE9uT3ZlcmZsb3coYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZENyYXNoT25PdmVyZmxvdyA9IHZh
bHVlOyB9Ci0KLSAgICBib29sIGhhc092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX292ZXJm
bG93ZWQ7IH0KLSAgICB2b2lkIGNsZWFyT3ZlcmZsb3coKSB7IG1fb3ZlcmZsb3dlZCA9IGZhbHNl
OyB9Ci0KLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoKCkKLSAg
ICB7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9vdmVy
Zmxvd2VkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93IHsgdHJ1
ZSB9OwotfTsKLQogY2xhc3MgQ3Jhc2hPbk92ZXJmbG93IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIG92ZXJmbG93ZWQoKQpAQCAtMjUyLDExICsyMjcs
NiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IFJlbW92ZUNoZWNrZWQgewogICAgIHN0
YXRpYyBjb25zdGV4cHIgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7CiB9OwogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gc3RydWN0IFJlbW92ZUNoZWNrZWQ8Q2hlY2tlZDxULCBDb25kaXRpb25h
bENyYXNoT25PdmVyZmxvdz4+IHsKLSAgICB1c2luZyBDbGVhblR5cGUgPSB0eXBlbmFtZSBSZW1v
dmVDaGVja2VkPFQ+OjpDbGVhblR5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBDbGVhblR5cGUg
RGVmYXVsdFZhbHVlID0gMDsKLX07Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVt
b3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENyYXNoT25PdmVyZmxvdz4+IHsKICAgICB0eXBlZGVmIHR5
cGVuYW1lIFJlbW92ZUNoZWNrZWQ8VD46OkNsZWFuVHlwZSBDbGVhblR5cGU7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsKQEAgLTEwNjksNyArMTAzOSw2
IEBAIHVzaW5nIFdURjo6Q2hlY2tlZFVpbnQzMjsKIHVzaW5nIFdURjo6Q2hlY2tlZEludDY0Owog
dXNpbmcgV1RGOjpDaGVja2VkVWludDY0OwogdXNpbmcgV1RGOjpDaGVja2VkU2l6ZTsKLXVzaW5n
IFdURjo6Q29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c7CiB1c2luZyBXVEY6OkNyYXNoT25PdmVy
ZmxvdzsKIHVzaW5nIFdURjo6UmVjb3JkT3ZlcmZsb3c7CiB1c2luZyBXVEY6OmNoZWNrZWRTdW07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDk3MWZkZWIyNTk1MGVlYjc3OGQ1ZDcwZTFh
ZGNmZDUyYWQ2YWQyOWUuLmJmYTEzZDFmZTgwYjMwN2E1MmIzZmRkYmVkYTFlNjk3ZDM4ZTUzYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC0zOSw2ICszOSw3IEBAIGlmIChVU0VfQ0Yp
CiAgICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAgY2YvVHlwZUNhc3RzQ0YuaAogCisg
ICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCiAgICAgICAgIHRleHQvY2YvVGV4
dEJyZWFrSXRlcmF0b3JDRi5oCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGUyODA5OTc0MjcxOWM3NzlhYzNlYWRmNDY2MTMz
M2Q4NzhlZmRjZGQuLjdjZGNjNGIxNmJlMjJlNDc1ZTIyYTg2YWQwZTdhYzQ4ZGUxZGQxMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC00MSw2ICs0MSw3IEBAIGxpc3QoQVBQRU5EIFdU
Rl9QVUJMSUNfSEVBREVSUwogCiAgICAgc3BpL21hYy9NZXRhZGF0YVNQSS5oCiAKKyAgICB0ZXh0
L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgIHRleHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JD
Ri5oCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNmU4MGI5OWEwNGE2YzZkZTRl
MmZmNTlhN2I0ZWQ0YzhjNGFhZmFiOS4uOTBmZDI2ZDc4YzY5NGRiMzZkZDA4MjQxZTk4OGU0MmY1
NTU3ZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKKysr
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTM3LDYgKzM3LDcgQEAgaWYg
KFVTRV9DRikKICAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9UeXBlQ2FzdHND
Ri5oCiAKKyAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAgICAgICAgdGV4
dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKICAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NP
VVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaCBi
L1NvdXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaAppbmRleCA2MDdiYzAxMTI1ZGY1
MGJiODk0OTYwODBlODhlNjVkNzQ1YzhiZjk2Li41NzliNWI4NWM4ZThhMWI0NDFlMjFkN2NlMDdm
ZjBhMjMwMWQyNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRBcml0aG1l
dGljLmgKKysrIGIvU291cmNlL1dURi93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiw3
ICszNiwxNCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9Db21waWxlci5o
PgogCi1pbmxpbmUgYm9vbCBzaWduZWRBZGRPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIs
IGludDMyX3QmIHJlc3VsdCkKK25hbWVzcGFjZSBXVEYgeworCisvLyBGSVhNRTogRW5oYW5jZSB0
aGlzIHNvIGl0IGZhaWxzIHRvIGNvbXBpbGUgY2FsbHMgd2hlcmUgZWl0aGVyIG9mIHRoZSBhcmd1
bWVudHMgY2FuIGJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBpbnRlZ3JhbCB0eXBlIGluc3Rl
YWQgb2YgcXVpZXRseSBjb252ZXJ0aW5nLgordGVtcGxhdGU8dHlwZW5hbWUgU2lnbmVkSW50ZWdy
YWxUeXBlPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWxfdjxTaWduZWRJbnRlZ3Jh
bFR5cGU+ICYmIHN0ZDo6aXNfc2lnbmVkX3Y8U2lnbmVkSW50ZWdyYWxUeXBlPiwgU2lnbmVkSW50
ZWdyYWxUeXBlPiBzYXR1cmF0ZWRTdW0oU2lnbmVkSW50ZWdyYWxUeXBlLCBTaWduZWRJbnRlZ3Jh
bFR5cGUpOwordGVtcGxhdGU8dHlwZW5hbWUgVW5zaWduZWRJbnRlZ3JhbFR5cGU+IGNvbnN0ZXhw
ciBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWxfdjxVbnNpZ25lZEludGVncmFsVHlw
ZT4gJiYgIXN0ZDo6aXNfc2lnbmVkX3Y8VW5zaWduZWRJbnRlZ3JhbFR5cGU+LCBVbnNpZ25lZElu
dGVncmFsVHlwZT4gc2F0dXJhdGVkU3VtKFVuc2lnbmVkSW50ZWdyYWxUeXBlLCBVbnNpZ25lZElu
dGVncmFsVHlwZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IEludGVncmFsVHlw
ZSBzYXR1cmF0ZWREaWZmZXJlbmNlKEludGVncmFsVHlwZSwgSW50ZWdyYWxUeXBlKTsKKworaW5s
aW5lIGJvb2wgc2lnbmVkQWRkSW50MzJPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGlu
dDMyX3QmIHJlc3VsdCkKIHsKICNpZiBDT01QSUxFUl9IQVNfQ0xBTkdfQlVJTFRJTihfX2J1aWx0
aW5fc2FkZF9vdmVyZmxvdykgJiYgIShkZWZpbmVkIF9fY2xhbmdfbWFqb3JfXyAmJiBfX2NsYW5n
X21ham9yX18gPCA3KQogICAgIHJldHVybiBfX2J1aWx0aW5fc2FkZF9vdmVyZmxvdyhhLCBiLCAm
cmVzdWx0KTsKQEAgLTUyLDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgc2lnbmVkQWRkT3ZlcmZsb3dz
KGludDMyX3QgYSwgaW50MzJfdCBiLCBpbnQzMl90JiByZXN1bHQpCiAjZW5kaWYKIH0KIAotaW5s
aW5lIGludDMyX3Qgc2F0dXJhdGVkQWRkaXRpb24oaW50MzJfdCBhLCBpbnQzMl90IGIpCit0ZW1w
bGF0ZTw+IGlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1bTxpbnQzMl90PihpbnQzMl90IGEsIGlu
dDMyX3QgYikKIHsKICAgICBpbnQzMl90IHJlc3VsdDsKICNpZiBDUFUoQVJNX1RIVU1CMikKQEAg
LTYyLDEzICs2OSwxMyBAQCBpbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRBZGRpdGlvbihpbnQzMl90
IGEsIGludDMyX3QgYikKICAgICAgICAgOiAvKiBOb3RoaW5nIGlzIGNsb2JiZXJlZC4gKi8KICAg
ICAgICAgKTsKICNlbHNlCi0gICAgaWYgKHNpZ25lZEFkZE92ZXJmbG93cyhhLCBiLCByZXN1bHQp
KQorICAgIGlmIChzaWduZWRBZGRJbnQzMk92ZXJmbG93cyhhLCBiLCByZXN1bHQpKQogICAgICAg
ICByZXN1bHQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSArIChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oYSkgPj4gMzEpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotaW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90
IGIsIGludDMyX3QmIHJlc3VsdCkKK2lubGluZSBib29sIHNpZ25lZFN1YnRyYWN0SW50MzJPdmVy
Zmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKIHsKICNpZiBDT01Q
SUxFUl9IQVNfQ0xBTkdfQlVJTFRJTihfX2J1aWx0aW5fc3N1Yl9vdmVyZmxvdykgJiYgIShkZWZp
bmVkIF9fY2xhbmdfbWFqb3JfXyAmJiBfX2NsYW5nX21ham9yX18gPCA3KQogICAgIHJldHVybiBf
X2J1aWx0aW5fc3N1Yl9vdmVyZmxvdyhhLCBiLCAmcmVzdWx0KTsKQEAgLTg0LDcgKzkxLDggQEAg
aW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIs
IGludDMyX3QmIHJlc3VsdCkKICNlbmRpZgogfQogCi1pbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRT
dWJ0cmFjdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKKy8vIEZJWE1FOiBFbmhhbmNlIHRoaXMg
c28gaXQgZmFpbHMgdG8gY29tcGlsZSBjYWxscyB3aGVyZSBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50
cyBjYW4gYmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgaW50MzJfdCBpbnN0ZWFkIG9mIHF1aWV0bHkg
Y29udmVydGluZy4KK3RlbXBsYXRlPD4gaW5saW5lIGludDMyX3Qgc2F0dXJhdGVkRGlmZmVyZW5j
ZTxpbnQzMl90PihpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICBpbnQzMl90IHJlc3VsdDsK
ICNpZiBDUFUoQVJNX1RIVU1CMikKQEAgLTk0LDggKzEwMiwyNCBAQCBpbmxpbmUgaW50MzJfdCBz
YXR1cmF0ZWRTdWJ0cmFjdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKICAgICAgICAgOiAvKiBO
b3RoaW5nIGlzIGNsb2JiZXJlZC4gKi8KICAgICAgICAgKTsKICNlbHNlCi0gICAgaWYgKHNpZ25l
ZFN1YnRyYWN0T3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCisgICAgaWYgKHNpZ25lZFN1YnRyYWN0
SW50MzJPdmVyZmxvd3MoYSwgYiwgcmVzdWx0KSkKICAgICAgICAgcmVzdWx0ID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgKyAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+
IDMxKTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFVuc2lnbmVkSW50ZWdyYWxUeXBlPiBjb25zdGV4cHIgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X2ludGVncmFsX3Y8VW5zaWduZWRJbnRlZ3JhbFR5cGU+ICYmICFzdGQ6OmlzX3NpZ25lZF92PFVu
c2lnbmVkSW50ZWdyYWxUeXBlPiwgVW5zaWduZWRJbnRlZ3JhbFR5cGU+IHNhdHVyYXRlZFN1bShV
bnNpZ25lZEludGVncmFsVHlwZSBhLCBVbnNpZ25lZEludGVncmFsVHlwZSBiKQoreworICAgIGF1
dG8gc3VtID0gYSArIGI7CisgICAgcmV0dXJuIHN1bSA8IGEgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PFVuc2lnbmVkSW50ZWdyYWxUeXBlPjo6bWF4KCkgOiBzdW07Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEludGVncmFsVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4gY29uc3RleHByIHVp
bnQzMl90IHNhdHVyYXRlZFN1bShJbnRlZ3JhbFR5cGUgdmFsdWUsIEFyZ3VtZW50VHlwZXMuLi4g
YXJndW1lbnRzKQoreworICAgIHJldHVybiBzYXR1cmF0ZWRTdW08SW50ZWdyYWxUeXBlPih2YWx1
ZSwgc2F0dXJhdGVkU3VtPEludGVncmFsVHlwZT4oYXJndW1lbnRzLi4uKSk7Cit9CisKK30KKwor
dXNpbmcgV1RGOjpzYXR1cmF0ZWRTdW07Cit1c2luZyBXVEY6OnNhdHVyYXRlZERpZmZlcmVuY2U7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCAxZTBjMThhYzlkMjBlZDgy
MGZlYjg2ODVmY2NmODJiMTA2MDExNDJkLi5lZmU5NjdhM2U1ZjUxYjg5NzBjZjMzMzRlNzU0NGM3
ZmVlNDYwZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMywyNiArMzMsMjkgQEAgbmFt
ZXNwYWNlIFdURiB7CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q2FwYWNpdHkgPSBT
dHJpbmc6Ok1heExlbmd0aDsKIAotc3RhdGljIHVuc2lnbmVkIGV4cGFuZGVkQ2FwYWNpdHkodW5z
aWduZWQgY2FwYWNpdHksIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQorc3RhdGljIHVuc2lnbmVk
IGV4cGFuZGVkQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHksIHVuc2lnbmVkIHJlcXVpcmVkQ2Fw
YWNpdHkpCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5pbXVtQ2FwYWNpdHkg
PSAxNjsKLSAgICByZXR1cm4gc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmlt
dW1DYXBhY2l0eSwgc3RkOjptaW4oY2FwYWNpdHkgKiAyLCBtYXhDYXBhY2l0eSkpKTsKKyAgICBy
ZXR1cm4gc3RkOjptYXgocmVxdWlyZWRDYXBhY2l0eSwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5
LCBzdGQ6Om1pbihjYXBhY2l0eSAqIDIsIG1heENhcGFjaXR5KSkpOworfQorCit2b2lkIFN0cmlu
Z0J1aWxkZXI6OmRpZE92ZXJmbG93KCkKK3sKKyAgICBpZiAobV9zaG91bGRDcmFzaE9uT3ZlcmZs
b3cpCisgICAgICAgIENSQVNIKCk7CisgICAgbV9sZW5ndGggPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmco
KSBjb25zdAogewotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxy
ZWFkeSBleGlzdHMuCiAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICBBU1NF
UlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1JlaWZpZWQgPSB0
cnVlOwotI2VuZGlmCi0KICAgICAvLyBDaGVjayBmb3IgZW1wdHkuCiAgICAgaWYgKCFtX2xlbmd0
aCkgewogICAgICAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7CkBAIC02MCwxMSAr
NjMsMTEgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiAgICAgfQog
CiAgICAgLy8gTXVzdCBiZSB2YWxpZCBpbiB0aGUgYnVmZmVyLCB0YWtlIGEgc3Vic3RyaW5nICh1
bmxlc3Mgc3RyaW5nIGZpbGxzIHRoZSBidWZmZXIpLgotICAgIEFTU0VSVChtX2J1ZmZlciAmJiBt
X2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkgPD0gbV9idWZmZXItPmxlbmd0aCgpKTsKLSAg
ICBpZiAobV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpID09IG1fYnVmZmVyLT5sZW5ndGgo
KSkKKyAgICBBU1NFUlQobV9idWZmZXIgJiYgbV9sZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgp
KTsKKyAgICBpZiAobV9sZW5ndGggPT0gbV9idWZmZXItPmxlbmd0aCgpKQogICAgICAgICBtX3N0
cmluZyA9IG1fYnVmZmVyLmdldCgpOwogICAgIGVsc2UKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJp
bmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9idWZmZXIsIDAsIG1fbGVuZ3Ro
LnVuc2FmZUdldCgpKTsKKyAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJz
dHJpbmdTaGFyaW5nSW1wbCgqbV9idWZmZXIsIDAsIG1fbGVuZ3RoKTsKIH0KIAogdm9pZCBTdHJp
bmdCdWlsZGVyOjpyZXNpemUodW5zaWduZWQgbmV3U2l6ZSkKQEAgLTczLDI1ICs3NiwyOCBAQCB2
b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBDaGVjayBuZXdTaXplIDwgbV9sZW5ndGgsIGhlbmNlIG1fbGVuZ3RoID4g
MC4KLSAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKKyAgICB1
bnNpZ25lZCBvbGRMZW5ndGggPSBtX2xlbmd0aDsKICAgICBBU1NFUlQobmV3U2l6ZSA8PSBvbGRM
ZW5ndGgpOwogICAgIGlmIChuZXdTaXplID09IG9sZExlbmd0aCkKICAgICAgICAgcmV0dXJuOwog
ICAgIEFTU0VSVChvbGRMZW5ndGgpOwogCisgICAgaWYgKG5ld1NpemUgPiBtYXhDYXBhY2l0eSkg
eworICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1f
bGVuZ3RoID0gbmV3U2l6ZTsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CiAKICAgICAv
LyBJZiB0aGVyZSBpcyBhIGJ1ZmZlciwgd2Ugb25seSBuZWVkIHRvIGR1cGxpY2F0ZSBpdCBpZiBp
dCBoYXMgbW9yZSB0aGFuIG9uZSByZWYuCiAgICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAgIG1f
c3RyaW5nID0gU3RyaW5nKCk7IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZl
cmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNv
dW50IG9mIG1fYnVmZmVyLgorICAgICAgICBtX3N0cmluZyA9IHsgfTsgLy8gQ2xlYXIgdGhlIHN0
cmluZyB0byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBtX2J1ZmZlciBpZiBhbnkgYmVmb3JlIGNo
ZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbV9idWZmZXIuCiAgICAgICAgIGlmICghbV9i
dWZmZXItPmhhc09uZVJlZigpKSB7CiAgICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgp
KQotICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgp
LCBtX2J1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPExD
aGFyPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxMQ2hhcj4oKSwgbV9idWZmZXItPmxlbmd0aCgpKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZl
ci0+Y2hhcmFjdGVyczE2KCksIG1fYnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAg
YWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPFVDaGFyPigpLCBtX2J1
ZmZlci0+bGVuZ3RoKCkpOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChoYXNPdmVyZmxvd2Vk
KCkgfHwgbV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4o
KSk7CisgICAgICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkgfHwgbV9idWZmZXItPmxlbmd0aCgp
ID49IG1fbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAyLDMyNyArMTA4
LDE1NyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKQogICAg
IG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1fc3Ry
aW5nLmltcGwoKSwgMCwgbmV3U2l6ZSk7CiB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IDggYml0IGJ1
ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBl
aXRoZXIgbV9zdHJpbmcKLS8vIG9yIG1fYnVmZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25l
ZCB1bnRpbCB0aGUgY29weSBoYXMgY29tcGxldGVkKS4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YWxs
b2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1
aXJlZExlbmd0aCkKKy8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50
Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJpbmcgb3IgbV9idWZm
ZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0aW9uQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
Q3VycmVudENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIo
Y29uc3QgQ3VycmVudENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCBy
ZXF1aXJlZENhcGFjaXR5KQogewotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBB
U1NFUlQobV9pczhCaXQpOwotICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5l
dyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3Rpbmcg
ZGF0YS4KLSAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczgpOwotICAgIGlmIChVTkxJS0VM
WSghYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7Ci0KLSAgICBpZiAobV9s
ZW5ndGgpCi0gICAgICAgIHN0ZDo6bWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGN1cnJlbnRD
aGFyYWN0ZXJzLCBtX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIGJ1
aWxkZXIgc3RhdGUuCi0gICAgbV9idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7Ci0gICAgbV9zdHJp
bmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVpcmVk
TGVuZ3RoKTsKLX0KKyAgICBBbGxvY2F0aW9uQ2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVy
czsKKyAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
cmVxdWlyZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgaWYgKFVOTElLRUxZKCFi
dWZmZXIpKSB7CisgICAgICAgIGRpZE92ZXJmbG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLS8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCi0vLyBvciBtX2J1
ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21w
bGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQotewogICAgIEFTU0VS
VCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQoIW1faXM4Qml0KTsKLSAgICAvLyBDb3B5
IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50
IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCi0gICAgYXV0byBidWZmZXIgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNo
YXJhY3RlcnMxNik7Ci0gICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKQotICAgICAgICByZXR1cm4g
ZGlkT3ZlcmZsb3coKTsKLSAgICBzdGQ6Om1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMxNiwgY3Vy
cmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgudW5zYWZlR2V0KCkp
ICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCi0gICAgCi0gICAgLy8g
VXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgotICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIp
OwotICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgo
KSA9PSByZXF1aXJlZExlbmd0aCk7Ci19CisgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMo
YnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMsIG1fbGVuZ3RoKTsKIAotLy8gQWxs
b2NhdGUgYSBuZXcgMTYgYml0IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAo
d2hpY2ggaXMgOCBiaXQgYW5kIG1heSBjb21lCi0vLyBmcm9tIGVpdGhlciBtX3N0cmluZyBvciBt
X2J1ZmZlciwgbmVpdGhlciB3aWxsIGJlIHJlYXNzaWduZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNv
bXBsZXRlZCkuCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNv
bnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCi17
Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2lzOEJpdCk7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgQVNTRVJUKHJl
cXVpcmVkTGVuZ3RoIDw9IG1heENhcGFjaXR5ICYmIHJlcXVpcmVkTGVuZ3RoID49IGxlbmd0aCk7
Ci0gICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJl
c3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgotICAgIGF1dG8g
YnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0
aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKLSAg
ICAgICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7IC8vIFRyZWF0IGEgZmFpbHVyZSB0byBhbGxjb2F0
ZSBhcyBhbiBvdmVyZmxvdy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W2ldID0gY3VycmVudENoYXJhY3RlcnNb
aV07Ci0gICAgCi0gICAgbV9pczhCaXQgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBVcGRhdGUgdGhl
IGJ1aWxkZXIgc3RhdGUuCiAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7Ci0gICAgbV9z
dHJpbmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVp
cmVkTGVuZ3RoKTsKKyAgICBtX3N0cmluZyA9IHsgfTsKIH0KIAotdGVtcGxhdGU8Pgotdm9pZCBT
dHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPExDaGFyPih1bnNpZ25lZCByZXF1aXJlZExl
bmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVpbGRl
cjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQogewotICAgIC8v
IElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwg
cmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBh
bmQgY29weSIgbWV0aG9kLgotICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgCi0gICAgQVNT
RVJUKG1faXM4Qml0KTsKLSAgICBBU1NFUlQobV9idWZmZXItPmlzOEJpdCgpKTsKLSAgICAKLSAg
ICBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAgICAgIGF1dG8gZXhwZWN0ZWRTdHJp
bmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9uTnVs
bCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzOCk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBsKSkKLSAgICAgICAgICAgIHJldHVybiBkaWRPdmVy
ZmxvdygpOwotICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUoZXhwZWN0ZWRTdHJpbmdJbXBsLnZh
bHVlKCkpOwotICAgIH0gZWxzZQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hh
cmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOwotICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkg
fHwgbV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKKyAgICAvLyBJZiB0aGUg
YnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxsb2Nh
dGUgaXQuCisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIG1fc3RyaW5nID0geyB9OyAvLyBD
bGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIG1fYnVmZmVyIGlmIGFu
eSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBtX2J1ZmZlci4KKyAgICAg
ICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgQ2hhcmFjdGVyVHlw
ZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1w
bDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZENhcGFj
aXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVy
KSkgeworICAgICAgICAgICAgICAgIGRpZE92ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKCpidWZm
ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYWxsb2Nh
dGVCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpLCByZXF1
aXJlZENhcGFjaXR5KTsKIH0KIAotdGVtcGxhdGU8Pgotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFs
bG9jYXRlQnVmZmVyPFVDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3ZvaWQgU3RyaW5n
QnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQogewot
ICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkgdGhpcyBTdHJpbmdCdWls
ZGVyKSwgcmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvICJhbGxv
Y2F0ZSBhbmQgY29weSIgbWV0aG9kLgotICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgCi0g
ICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZl
cnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBlbHNlIGlm
IChtX2J1ZmZlci0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgYXV0byBleHBlY3RlZFN0cmluZ0lt
cGwgPSBTdHJpbmdJbXBsOjp0cnlSZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2VOb25OdWxsKCks
IHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBsKSkKLSAgICAgICAgICAgIHJldHVybiBkaWRPdmVyZmxv
dygpOwotICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUoZXhwZWN0ZWRTdHJpbmdJbXBsLnZhbHVl
KCkpOwotICAgIH0gZWxzZQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFj
dGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8
IG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgp
KQorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihyZXF1aXJlZENhcGFjaXR5KTsKKyAg
ICBlbHNlCisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KHJlcXVpcmVkQ2FwYWNpdHkp
OwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdD
YXBhY2l0eSkKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKG5ld0NhcGFjaXR5IDw9IFN0cmluZzo6TWF4TGVuZ3RoKTsKKwogICAgIGlmICht
X2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgYnVmZmVyLCB0aGVu
IGdyb3cgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBtX2J1ZmZlci0+
bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2J1ZmZlci0+aXM4Qml0KCkpCi0gICAgICAg
ICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obmV3Q2FwYWNpdHkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG5ld0NhcGFj
aXR5KTsKLSAgICAgICAgfQorICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBtX2J1ZmZlci0+bGVu
Z3RoKCkpCisgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICB9
IGVsc2UgewotICAgICAgICAvLyBHcm93IHRoZSBzdHJpbmcsIGlmIG5lY2Vzc2FyeS4KLSAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGlmIChu
ZXdDYXBhY2l0eSA+IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICBMQ2hhciogbnVsbFBsYWNlaG9sZGVyID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICBhbGxvY2F0ZUJ1ZmZlcihudWxsUGxhY2Vob2xkZXIsIG5ld0NhcGFjaXR5KTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9zdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgYWxs
b2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbmV3Q2FwYWNpdHkpOworICAgICAg
ICBpZiAobmV3Q2FwYWNpdHkgPiBtX2xlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFtX2xlbmd0
aCkKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4oc3RhdGljX2Nhc3Q8TENo
YXIqPihudWxscHRyKSwgbmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgZWxzZSBpZiAobV9zdHJp
bmcuaXM4Qml0KCkpCisgICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8TENoYXI+KG1fc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbmV3Q2Fw
YWNpdHkpOworICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX3N0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOwogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VS
VChoYXNPdmVyZmxvd2VkKCkgfHwgIW5ld0NhcGFjaXR5IHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+
PSBuZXdDYXBhY2l0eSk7CiB9CiAKLS8vIE1ha2UgJ2FkZGl0aW9uYWxMZW5ndGgnIGFkZGl0aW9u
YWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJpbmcgJiBt
X2xlbmd0aCwKLS8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9y
YWdlLgotLy8gUmV0dXJucyBudWxscHRyIGlmIHRoZSBzaXplIG9mIHRoZSBuZXcgYnVpbGRlciB3
b3VsZCBoYXZlIG92ZXJmbG93ZWQKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFM
V0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9y
QXBwZW5kaW5nKHVuc2lnbmVkIGFkZGl0aW9uYWxMZW5ndGgpCisvLyBNYWtlICdhZGRpdGlvbmFs
TGVuZ3RoJyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBk
YXRlIG1fc3RyaW5nICYgbV9sZW5ndGggdG8gdXNlLAorLy8gdGhhdCBjYXBhY2l0eSBhbmQgcmV0
dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0b3JhZ2Ugc28gdGhlIGNhbGxl
ciBjYW4gd3JpdGUgY2hhcmFjdGVycyB0aGVyZS4KKy8vIFJldHVybnMgbnVsbHB0ciBpZiBhbGxv
Y2F0aW9uIGZhaWxzLCBsZW5ndGggb3ZlcmZsb3dzLCBvciBpZiB0b3RhbCBjYXBhY2l0eSBpcyAw
IHNvIG5vIGJ1ZmZlciBpcyBuZWVkZWQuCisvLyBUaGUgY2FsbGVyIGhhcyB0aGUgcmVzcG9uc2li
aWxpdHkgZm9yIGNoZWNraW5nIHRoYXQgQ2hhcmFjdGVyVHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUg
ZXhpc3RpbmcgYnVmZmVyLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hhcmFj
dGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKQogewotICAgIEFTU0VSVChhZGRpdGlvbmFsTGVuZ3RoKTsKLQotICAg
IC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGJ1aWxkZXIgYWZ0ZXIgYXBwZW5kaW5n
LgotICAgIENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCA9IG1fbGVuZ3RoICsgYWRkaXRpb25h
bExlbmd0aDsKLSAgICBpZiAocmVxdWlyZWRMZW5ndGguaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAg
ICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChtX2J1
ZmZlciAmJiByZXF1aXJlZExlbmd0aCA8PSBtX2J1ZmZlci0+bGVuZ3RoKCkpIHsKKyAgICAgICAg
bV9zdHJpbmcgPSB7IH07CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PENoYXJhY3RlclR5cGUq
PihtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpKSArIHN0ZDo6ZXhjaGFuZ2Uo
bV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKICAgICB9Ci0KLSAgICByZXR1cm4gZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2s8Q2hhcmFjdGVyVHlwZT4ocmVxdWly
ZWRMZW5ndGgpOworICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZTxD
aGFyYWN0ZXJUeXBlPihyZXF1aXJlZExlbmd0aCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6
ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2soQ2hlY2tlZEludDMy
IHJlcXVpcmVkTGVuZ3RoKQorLy8gU2hhcmVkIGJ5IHRoZSBvdGhlciBleHRlbmRCdWZmZXIgZnVu
Y3Rpb25zLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlwZSog
U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFyZXF1aXJlZExlbmd0aC5oYXNPdmVyZmxv
d2VkKCkpOwotCi0gICAgaWYgKG1fYnVmZmVyICYmIChyZXF1aXJlZExlbmd0aC51bnNhZmVHZXQ8
dW5zaWduZWQ+KCkgPD0gbV9idWZmZXItPmxlbmd0aCgpKSkgewotICAgICAgICAvLyBJZiB0aGUg
YnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3VycmVu
dCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49
IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJl
bnRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJp
bmcoKTsKLSAgICAgICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aDsKLSAgICAgICAgcmV0dXJu
IGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIGN1cnJlbnRMZW5ndGg7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlPENoYXJh
Y3RlclR5cGU+KHJlcXVpcmVkTGVuZ3RoLnVuc2FmZUdldCgpKTsKKyAgICBBU1NFUlQoIWhhc092
ZXJmbG93ZWQoKSk7CisgICAgaWYgKCFyZXF1aXJlZExlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmVhbGxvY2F0ZUJ1ZmZlcihleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCks
IHJlcXVpcmVkTGVuZ3RoKSk7CisgICAgaWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQoKSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjb25zdF9jYXN0PENoYXJhY3RlclR5
cGUqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpKSArIHN0ZDo6ZXhjaGFu
Z2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAotTENoYXIqIFN0cmluZ0J1aWxkZXI6
OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgoQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKQor
Ly8gQWx0ZXJhdGl2ZSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcgdGhhdCBjYW4gYmUgY2FsbGVk
IGZyb20gdGhlIGhlYWRlciB3aXRob3V0IGlubGluaW5nLgorTENoYXIqIFN0cmluZ0J1aWxkZXI6
OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQog
ewotICAgIGlmIChVTkxJS0VMWShyZXF1aXJlZExlbmd0aC5oYXNPdmVyZmxvd2VkKCkpKSB7Ci0g
ICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAg
ICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2s8TENo
YXI+KHJlcXVpcmVkTGVuZ3RoKTsKKyAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5n
PExDaGFyPihyZXF1aXJlZExlbmd0aCk7CiB9CiAKLVVDaGFyKiBTdHJpbmdCdWlsZGVyOjpleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmcxNihDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpCitVQ2hh
ciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydCh1
bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKLSAgICBpZiAoVU5MSUtFTFkocmVxdWlyZWRMZW5n
dGguaGFzT3ZlcmZsb3dlZCgpKSkgewotICAgICAgICBkaWRPdmVyZmxvdygpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1faXM4Qml0KSB7Ci0gICAgICAgIGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzOwotICAgICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVk
PigpKTsKLSAgICAgICAgICAgIGNoYXJhY3RlcnMgPSBtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9
PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICAgICAgY2hhcmFjdGVy
cyA9IG1fc3RyaW5nLmlzTnVsbCgpID8gbnVsbHB0ciA6IG1fc3RyaW5nLmNoYXJhY3RlcnM4KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY2hhcmFjdGVycywg
ZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKSkp
OworICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4oY2hh
cmFjdGVyczgoKSwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoaGFzT3ZlcmZsb3dlZCgpKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2xlbmd0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczE2ICsgb2xkTGVuZ3RoOworICAgICAg
ICByZXR1cm4gY29uc3RfY2FzdDxVQ2hhcio+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPFVDaGFyPigp
KSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKICAgICB9Ci0gICAg
cmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrPFVDaGFy
PihyZXF1aXJlZExlbmd0aCk7Ci19Ci0KLS8vIE1ha2UgJ3JlcXVpcmVkTGVuZ3RoJyBjYXBhY2l0
eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoLAot
Ly8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0b3JhZ2UuCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVy
OjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSh1bnNpZ25lZCByZXF1aXJlZExlbmd0
aCkKLXsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKHJlcXVpcmVk
TGVuZ3RoKTsKLQotICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0aGUgYnVmZmVy
IGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWls
ZGVyIGNvbnRlbnRzIQotICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVu
Z3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAgICAgIAotICAgICAgICByZWFsbG9jYXRl
QnVmZmVyPENoYXJhY3RlclR5cGU+KGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWly
ZWRMZW5ndGgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3Ro
KCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgYWxsb2NhdGVC
dWZmZXIobV9sZW5ndGggPyBtX3N0cmluZy5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgOiBu
dWxscHRyLCBleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7Ci0g
ICAgfQotICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxvd2VkKCkpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIENoYXJhY3RlclR5cGUqIHJlc3VsdCA9IGdldEJ1ZmZlckNoYXJhY3Rl
cnM8Q2hhcmFjdGVyVHlwZT4oKSArIG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAgIG1fbGVuZ3Ro
ID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFT
U0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigp
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmc8VUNoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBl
bmRDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7
CiAgICAgaWYgKCFsZW5ndGggfHwgaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoY2hhcmFjdGVycyk7Ci0KLSAgICBpZiAobV9pczhCaXQgJiYgbGVuZ3RoID09
IDEgJiYgaXNMYXRpbjEoY2hhcmFjdGVyc1swXSkpIHsKKyAgICBpZiAobGVuZ3RoID09IDEgJiYg
aXNMYXRpbjEoY2hhcmFjdGVyc1swXSkgJiYgaXM4Qml0KCkpIHsKICAgICAgICAgYXBwZW5kKHN0
YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXJzWzBdKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG9wdGltaXplIG1lbW9yeSBieSBrZWVwaW5nIHRo
ZSBzdHJpbmcgOC1iaXQgd2hlbiBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIExhdGluLTE/Ci0KLSAg
ICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihtX2xlbmd0
aCArIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKCFkZXN0aW5hdGlvbikpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzdGQ6Om1lbWNweShkZXN0aW5hdGlvbiwgY2hhcmFjdGVycywgc3RhdGljX2Nh
c3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgQVNTRVJUKCFoYXNPdmVy
Zmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5z
YWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBpZiAoYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1
ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZlcnQoc2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xl
bmd0aCwgbGVuZ3RoKSkpCisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRlc3Rp
bmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZENoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBpZiAoIWxlbmd0aCB8fCBoYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKLQotICAgIGlmIChtX2lzOEJpdCkgewotICAgICAg
ICBMQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8TENoYXI+KGxl
bmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVCho
YXNPdmVyZmxvd2VkKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChsZW5ndGggPiA4KQotICAgICAgICAgICAgc3RkOjptZW1jcHkoZGVzdGluYXRpb24sIGNo
YXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6
IEhvdyBzdHJvbmcgaXMgb3VyIGV2aWRlbmNlIHRoYXQgdGhpcyBpcyBmYXN0ZXIgdGhhbiBtZW1j
cHk/IFdoYXQgcGxhdGZvcm1zIGlzIHRoaXMgdHJ1ZSBmb3I/Ci0gICAgICAgICAgICBjb25zdCBM
Q2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICAgICAgICAgIHdoaWxlIChjaGFy
YWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gKmNoYXJhY3Rl
cnMrKzsKLSAgICAgICAgfQorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBpZiAoYXV0byBk
ZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzxMQ2hhcj4oc2F0dXJhdGVkU3Vt
PHVpbnQzMl90PihtX2xlbmd0aCwgbGVuZ3RoKSkpCisgICAgICAgICAgICBTdHJpbmdJbXBsOjpj
b3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICB9IGVs
c2UgewotICAgICAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmc8VUNoYXI+KGxlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAg
ICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAg
ICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbisr
ID0gKmNoYXJhY3RlcnMrKzsKLSAgICB9Ci19Ci0KLSNpZiBVU0UoQ0YpCi0KLXZvaWQgU3RyaW5n
QnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGg6
IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBTdHJpbmcgd2hlbiBwb3NzaWJsZS4KLSAg
ICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENGU3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJpbmcsIGtD
RlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkgewotICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwgQ0ZTdHJpbmdHZXRMZW5n
dGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGF1dG8gZGVzdGluYXRp
b24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8VUNoYXI+KHNhdHVyYXRlZFN1bTx1aW50MzJf
dD4obV9sZW5ndGgsIGxlbmd0aCkpKQorICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJh
Y3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgfQotICAgIGFwcGVu
ZChTdHJpbmcoc3RyaW5nKSk7CiB9CiAKLSNlbmRpZgotCiBib29sIFN0cmluZ0J1aWxkZXI6OmNh
blNocmluaygpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIC8vIE9ubHkgc2hyaW5rIHRoZSBidWZmZXIgaWYgaXQncyBsZXNzIHRo
YW4gODAlIGZ1bGwuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB0dW5lIHRoaXMgaGV1cmlzdGlj
IGJhc2VkIHNvbWUgYWN0dWFsIHRlc3QgY2FzZSBtZWFzdXJlbWVudHMuCi0gICAgdW5zaWduZWQg
bGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgcmV0dXJuIG1fYnVmZmVyICYmIG1f
YnVmZmVyLT5sZW5ndGgoKSA+IChsZW5ndGggKyAobGVuZ3RoID4+IDIpKTsKKyAgICAvLyBTaHJp
bmsgdGhlIGJ1ZmZlciBpZiBpdCdzIDgwJSBmdWxsIG9yIGxlc3MuCisgICAgc3RhdGljX2Fzc2Vy
dChzdGF0aWNfY2FzdDxzaXplX3Q+KFN0cmluZzo6TWF4TGVuZ3RoKSArIChTdHJpbmc6Ok1heExl
bmd0aCA+PiAyKSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkpOworICAgIHJldHVybiAhaGFzT3ZlcmZsb3dlZCgpICYmIG1fYnVmZmVy
ICYmIG1fYnVmZmVyLT5sZW5ndGgoKSA+IG1fbGVuZ3RoICsgKG1fbGVuZ3RoID4+IDIpOwogfQog
CiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkKIHsKICAgICBpZiAoY2FuU2hyaW5r
KCkpIHsKLSAgICAgICAgaWYgKG1faXM4Qml0KQotICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZl
cjxMQ2hhcj4obV9sZW5ndGgudW5zYWZlR2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAgICAg
IEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgbV9zdHJpbmcgPSBXVEZNb3ZlKG1f
YnVmZmVyKTsKKyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcihtX2xlbmd0aCk7CisgICAgICAgIG1f
c3RyaW5nID0gc3RkOjpleGNoYW5nZShtX2J1ZmZlciwgbnVsbHB0cik7CiAgICAgfQogfQogCiBi
b29sIFN0cmluZ0J1aWxkZXI6OmlzQWxsQVNDSUkoKSBjb25zdAogewotICAgIGF1dG8gbGVuZ3Ro
ID0gdGhpcy0+bGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJ
SShjaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVND
SUkoY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CisgICAgcmV0dXJuIFN0cmluZ1ZpZXcgeyAqdGhp
cyB9LmlzQWxsQVNDSUkoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oCmluZGV4IDcwMThhMWFiN2JkYmQ3NGU2Y2I3YWZjZDM1NDRlYWViOTM5
MGJlNWUuLjQ1MWZhMzcwYjI3MzdhNTVhNGM4MTM0ZGEyNjg2NzNjODFiODljN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjYsNDE0ICsyNiwzMTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgor
I2luY2x1ZGUgPHd0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmll
dy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IAotLy8gU3RyaW5nQnVpbGRlciBjdXJyZW50bHkgdXNlcyBhIENoZWNrZWQ8aW50MzJfdCwgQ29u
ZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c+IGZvciBtX2xlbmd0aC4KLS8vIElkZWFsbHksIHdlIHdv
dWxkIHdhbnQgdG8gbWFrZSBTdHJpbmdCdWlsZGVyIGEgdGVtcGxhdGUgd2l0aCBhbiBPdmVyZmxv
d0hhbmRsZXIgcGFyYW1ldGVyLCBhbmQKLS8vIG1fbGVuZ3RoIGNhbiBiZSBpbnN0YW50aWF0ZWQg
YmFzZWQgb24gdGhhdCBPdmVyZmxvd0hhbmRsZXIgaW5zdGVhZC4gSG93ZXZlciwgY3VycmVudGx5
LCB3ZSdyZQotLy8gbm90IGFibGUgdG8gZ2V0IGNsYW5nIHRvIGV4cG9ydCBleHBsaWNpdGx5IGlu
c3RhbnRpYXRlZCB0ZW1wbGF0ZSBtZXRob2RzICh3aGljaCB3b3VsZCBiZSBuZWVkZWQKLS8vIGlm
IHdlIHRlbXBsYXRpemUgU3RyaW5nQnVpbGRlcikuIEFzIGEgd29ya2Fyb3VuZCwgd2UgdXNlIHRo
ZSBDb25kaXRpb25hbENyYXNoT25PdmVyZmxvdyBoYW5kbGVyCi0vLyBpbnN0ZWFkIHRvIGRvIGEg
cnVudGltZSBjaGVjayBvbiB3aGV0aGVyIGl0IHNob3VsZCBjcmFzaCBvbiBvdmVyZmxvd3Mgb3Ig
bm90LgotLy8KLS8vIFdoZW4gY2xhbmcgaXMgYWJsZSB0byBleHBvcnQgZXhwbGljaXRseSBpbnN0
YW50aWF0ZWQgdGVtcGxhdGUgbWV0aG9kcywgd2UgY2FuIHRlbXBsYXRpemUKLS8vIFN0cmluZ0J1
aWxkZXIgYW5kIGRvIGF3YXkgd2l0aCBDb25kaXRpb25hbENyYXNoT25PdmVyZmxvdy4KLS8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMDUwLgotCiBjbGFz
cyBTdHJpbmdCdWlsZGVyIHsKLSAgICAvLyBEaXNhbGxvdyBjb3B5aW5nIHNpbmNlIGl0J3MgZXhw
ZW5zaXZlIGFuZCB3ZSBkb24ndCB3YW50IGNvZGUgdG8gZG8gaXQgYnkgYWNjaWRlbnQuCisgICAg
Ly8gRGlzYWxsb3cgY29weWluZyBzaW5jZSBpdCdzIGV4cGVuc2l2ZSBhbmQgd2UgZG9uJ3Qgd2Fu
dCB0byBkbyBpdCBieSBhY2NpZGVudC4KICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdC
dWlsZGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIGVu
dW0gY2xhc3MgT3ZlcmZsb3dIYW5kbGVyIHsKLSAgICAgICAgQ3Jhc2hPbk92ZXJmbG93LAotICAg
ICAgICBSZWNvcmRPdmVyZmxvdwotICAgIH07Ci0KLSAgICBTdHJpbmdCdWlsZGVyKE92ZXJmbG93
SGFuZGxlciBoYW5kbGVyID0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cpCi0gICAg
ICAgIDogbV9idWZmZXJDaGFyYWN0ZXJzOChudWxscHRyKQotICAgIHsKLSAgICAgICAgbV9sZW5n
dGguc2V0U2hvdWxkQ3Jhc2hPbk92ZXJmbG93KGhhbmRsZXIgPT0gT3ZlcmZsb3dIYW5kbGVyOjpD
cmFzaE9uT3ZlcmZsb3cpOwotICAgIH0KKyAgICBTdHJpbmdCdWlsZGVyKCkgPSBkZWZhdWx0Owog
ICAgIFN0cmluZ0J1aWxkZXIoU3RyaW5nQnVpbGRlciYmKSA9IGRlZmF1bHQ7CiAgICAgU3RyaW5n
QnVpbGRlciYgb3BlcmF0b3I9KFN0cmluZ0J1aWxkZXImJikgPSBkZWZhdWx0OwogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGRpZE92ZXJmbG93KCkgeyBtX2xlbmd0aC5vdmVyZmxvd2VkKCk7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuZ3RoLmhhc092ZXJmbG93ZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjcmFzaGVz
T25PdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoLnNob3VsZENyYXNoT25PdmVyZmxv
dygpOyB9CisgICAgZW51bSBjbGFzcyBPdmVyZmxvd0hhbmRsZXIgeyBDcmFzaE9uT3ZlcmZsb3cs
IFJlY29yZE92ZXJmbG93IH07IC8vIEZJWE1FOiBEZXNwaXRlIGl0cyB1c2UgaW4gQ2hlY2tlZDw+
LCAiaGFuZGxlciIgZG9lcyBub3Qgc2VlbSB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGlzLgorICAg
IGV4cGxpY2l0IFN0cmluZ0J1aWxkZXIoT3ZlcmZsb3dIYW5kbGVyKTsKKworICAgIHZvaWQgY2xl
YXIoKTsKKyAgICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYpOworCisgICAgdm9pZCBkaWRPdmVy
ZmxvdygpOworICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
ID4gU3RyaW5nOjpNYXhMZW5ndGg7IH0KKyAgICBib29sIGNyYXNoZXNPbk92ZXJmbG93KCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KIAogICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kQ2hhcmFjdGVycyhjb25zdCBMQ2hhcios
IHVuc2lnbmVkKTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgY2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKSB7IGFwcGVuZENoYXJhY3RlcnMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOyB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpIHsgYXBwZW5kQ2hhcmFjdGVycyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oY2hhcmFjdGVycyksIGxlbmd0aCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJp
bmdUeXBlcz4gdm9pZCBhcHBlbmQoU3RyaW5nVHlwZXMuLi4pOwogCi0gICAgdm9pZCBhcHBlbmQo
Y29uc3QgQXRvbVN0cmluZyYgYXRvbVN0cmluZykKLSAgICB7Ci0gICAgICAgIGFwcGVuZChhdG9t
U3RyaW5nLnN0cmluZygpKTsKLSAgICB9CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBrZWVwIHRo
ZXNlIG92ZXJsb2FkcyBvbmx5IGlmIG9wdGltaXphdGlvbnMgbWFrZSB0aGVtIG1vcmUgZWZmaWNp
ZW50IHRoYW4gdGhlIHNpbmdsZS1hcmd1bWVudCBmb3JtIG9mIHRoZSB2YXJpYWRpYyBhcHBlbmQg
YWJvdmUuCisgICAgdm9pZCBhcHBlbmQoY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKSB7IGFwcGVu
ZChzdHJpbmcuc3RyaW5nKCkpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCBhcHBlbmQoU3RyaW5nVmlldyk7CisgICAgdm9pZCBhcHBlbmQoVUNoYXIpOworICAg
IHZvaWQgYXBwZW5kKExDaGFyKTsKKyAgICB2b2lkIGFwcGVuZChjaGFyIGNoYXJhY3RlcikgeyBh
cHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcikpOyB9CisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgY2hhciopOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0g
ICAgewotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgIC8vIEZJWE1FOiBBZGQgYSBTdHJpbmdUeXBlQWRhcHRlciBzbyB3ZSBjYW4gYXBwZW5kIG9u
ZSBzdHJpbmcgYnVpbGRlciB0byBhbm90aGVyIHdpdGggdmFyaWFkaWMgYXBwZW5kLgorICAgIHZv
aWQgYXBwZW5kKGNvbnN0IFN0cmluZ0J1aWxkZXImKTsKIAotICAgICAgICBpZiAoIXN0cmluZy5s
ZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFy
YWN0ZXJDb3VudD4gdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJDb3VudF0pIHsgYXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJD
b3VudCAtIDEpOyB9CiAKLSAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5
IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBu
b3QgYmVlbiBjYWxsZWQpCi0gICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4K
LSAgICAgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKLSAgICAgICAgICAgIG1fc3Ry
aW5nID0gc3RyaW5nOwotICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgICAgICAgICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAg
ICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFN0cmluZ0J1aWxkZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOworICAgIHZvaWQgYXBw
ZW5kQ2hhcmFjdGVyKFVDaGFyKSA9IGRlbGV0ZTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihM
Q2hhcikgPSBkZWxldGU7CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoY2hhcikgPSBkZWxldGU7
CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoVUNoYXIzMik7CiAKLSAgICAgICAgaWYgKCFvdGhl
ci5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB2b2lkIGFwcGVuZFN1YnN0cmlu
Zyhjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCA9IFN0cmlu
Zzo6TWF4TGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRRdW90ZWRK
U09OU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGlu
ZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVD
YXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKQotICAgICAgICAvLyB0aGVuIGp1c3QgcmV0YWlu
IHRoZSBzdHJpbmcuCi0gICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyICYmICFvdGhl
ci5tX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgbV9zdHJpbmcgPSBvdGhlci5tX3N0
cmluZzsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gb3RoZXIubV9sZW5ndGg7Ci0gICAgICAgICAg
ICBtX2lzOEJpdCA9IG90aGVyLm1faXM4Qml0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgLy8gRklYTUU6IFVuY2xlYXIgd2h5IHRvU3RyaW5nIHJldHVybnMgU3RyaW5nIGFu
ZCB0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkgcmV0dXJucyBjb25zdCBTdHJpbmcmLiBNYWtlIHRo
ZW0gY29uc2lzdGVudC4KKyAgICBTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBjb25zdCBTdHJpbmcm
IHRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpIGNvbnN0OworICAgIEF0b21TdHJpbmcgdG9BdG9t
U3RyaW5nKCkgY29uc3Q7CiAKLSAgICAgICAgaWYgKG90aGVyLmlzOEJpdCgpKQotICAgICAgICAg
ICAgYXBwZW5kQ2hhcmFjdGVycyhvdGhlci5jaGFyYWN0ZXJzOCgpLCBvdGhlci5tX2xlbmd0aC51
bnNhZmVHZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMo
b3RoZXIuY2hhcmFjdGVyczE2KCksIG90aGVyLm1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKLSAgICB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fbGVuZ3RoOyB9CisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZChTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcpCi0gICAgewotICAgICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKLSAgICAgICAg
ICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdWaWV3
Lmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhz
dHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpKTsKLSAgICB9Cisg
ICAgb3BlcmF0b3IgU3RyaW5nVmlldygpIGNvbnN0OworICAgIFVDaGFyIG9wZXJhdG9yW10odW5z
aWduZWQgaSkgY29uc3Q7CiAKLSNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYXBwZW5kKENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmIFVTRShDRikgJiYgZGVmaW5lZChf
X09CSkNfXykKLSAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFwcGVuZCgoX19i
cmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsgfQotI2VuZGlmCisgICAgYm9vbCBpczhCaXQoKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4
KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVyczxMQ2hhcj4oKTsgfQorICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzPFVDaGFyPigpOyB9CiAg
ICAgCi0gICAgdm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5nOjpNYXhMZW5ndGgpCi0gICAgewot
ICAgICAgICBpZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CiAKLSAgICAgICAg
dW5zaWduZWQgY2xhbXBlZExlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgc3RyaW5nLmxlbmd0aCgp
IC0gb2Zmc2V0KTsKLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgIGFw
cGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQsIGNsYW1wZWRMZW5n
dGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgY2xhbXBlZExlbmd0aCk7Ci0gICAgfQorICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBuZXdMZW5ndGgpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGNhblNocmluaygpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHNocmlua1RvRml0KCk7CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzKQotICAgIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnMpCi0gICAgICAgICAgICBh
cHBlbmRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0ZXJzKSk7Ci0gICAgfQor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzQWxsQVNDSUkoKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwZW5kQ2hhcmFjdGVyKFVDaGFyKSA9IGRlbGV0ZTsKLSAgICB2b2lkIGFwcGVuZChVQ2hh
ciBjKQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2ln
bmVkPigpOwotICAgICAgICBpZiAobV9idWZmZXIgJiYgbGVuZ3RoIDwgbV9idWZmZXItPmxlbmd0
aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faXM4Qml0KSB7
Ci0gICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbbGVuZ3RoXSA9IGM7Ci0gICAg
ICAgICAgICAgICAgbV9sZW5ndGgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0xhdGluMShjKSkgewotICAgICAgICAgICAgICAg
IG1fYnVmZmVyQ2hhcmFjdGVyczhbbGVuZ3RoXSA9IHN0YXRpY19jYXN0PExDaGFyPihjKTsKLSAg
ICAgICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKCZjLCAxKTsKLSAg
ICB9Citwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFsbG9jYXRpb25DaGFyYWN0ZXJU
eXBlLCB0eXBlbmFtZSBDdXJyZW50Q2hhcmFjdGVyVHlwZT4gdm9pZCBhbGxvY2F0ZUJ1ZmZlcihj
b25zdCBDdXJyZW50Q2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJl
cXVpcmVkQ2FwYWNpdHkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZv
aWQgcmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKKyAgICB2b2lk
IHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSk7CiAKLSAgICB2b2lk
IGFwcGVuZENoYXJhY3RlcihMQ2hhcikgPSBkZWxldGU7Ci0gICAgdm9pZCBhcHBlbmQoTENoYXIg
YykKLSAgICB7Ci0gICAgICAgIGlmIChoYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25l
ZD4oKTsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIGxlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgo
KSAmJiBtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKG1faXM4Qml0KQotICAg
ICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczhbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbbGVuZ3RoXSA9IGM7
Ci0gICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFw
cGVuZENoYXJhY3RlcnMoJmMsIDEpOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcodW5zaWdu
ZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IENoYXJhY3RlclR5cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTENoYXIqIGV4dGVuZEJ1
ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgVUNoYXIqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZl
cnQodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwogCi0gICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIo
Y2hhcikgPSBkZWxldGU7Ci0gICAgdm9pZCBhcHBlbmQoY2hhciBjKQotICAgIHsKLSAgICAgICAg
YXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjKSk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3Rl
cihVQ2hhcjMyIGMpCi0gICAgewotICAgICAgICBpZiAoVV9JU19CTVAoYykpIHsKLSAgICAgICAg
ICAgIGFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIGFwcGVuZChVMTZfTEVBRChjKSk7Ci0gICAgICAgIGFwcGVuZChV
MTZfVFJBSUwoYykpOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBl
QWRhcHRlcnM+IHZvaWQgYXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLik7
CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nOworICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBtX2J1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKKyAgICBi
b29sIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93IHsgdHJ1ZSB9OworfTsKIAotICAgIHRlbXBsYXRl
PHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRM
aXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0pIHsgYXBwZW5k
Q2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpOyB9Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nQnVpbGRlcj47CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4gdm9pZCBhcHBlbmQoU3RyaW5n
VHlwZXMuLi4pOworLy8gRklYTUU6IE1vdmUgdGhpcyB0byBTdHJpbmdWaWV3IGFuZCBtYWtlIGl0
IHRha2UgYSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgYSBTdHJpbmdCdWlsZGVyPwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBlcXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgQ2hhcmFjdGVyVHlwZSosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBTdHJpbmcgdG9T
dHJpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKCFtX2J1ZmZlciB8fCBtX2lzUmVpZmllZCk7Ci0gICAgICAgICAgICBBU1NF
UlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAg
ICAgIH0KKy8vIElubGluZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMuCiAKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHJlaWZ5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9Citp
bmxpbmUgU3RyaW5nQnVpbGRlcjo6U3RyaW5nQnVpbGRlcihPdmVyZmxvd0hhbmRsZXIgcG9saWN5
KQorICAgIDogbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgeyBwb2xpY3kgPT0gT3ZlcmZsb3dIYW5k
bGVyOjpDcmFzaE9uT3ZlcmZsb3cgfQoreworfQogCi0gICAgY29uc3QgU3RyaW5nJiB0b1N0cmlu
Z1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkKLSAgICAg
ICAgICAgIHJlaWZ5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9Citp
bmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjpjbGVhcigpCit7CisgICAgbV9zdHJpbmcgPSB7IH07
CisgICAgbV9idWZmZXIgPSBudWxscHRyOworICAgIG1fbGVuZ3RoID0gMDsKKyAgICAvLyBXZSBp
bnRlbnRpb25hbGx5IGRvIG5vdCBjaGFuZ2UgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cuCit9CiAK
LSAgICBBdG9tU3RyaW5nIHRvQXRvbVN0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKLQotICAgICAgICAvLyBJZiB0aGUgYnVmZmVy
IGlzIHN1ZmZpY2llbnRseSBvdmVyLWFsbG9jYXRlZCwgbWFrZSBhIG5ldyBBdG9tU3RyaW5nIGZy
b20gYSBjb3B5IHNvIGl0cyBidWZmZXIgaXMgbm90IHNvIGxhcmdlLgotICAgICAgICBpZiAoY2Fu
U2hyaW5rKCkpIHsKLSAgICAgICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQXRvbVN0cmluZyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gQXRvbVN0cmluZyhjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOyAgICAgICAgICAgIAot
ICAgICAgICB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjpzd2FwKFN0cmluZ0J1aWxkZXIm
IG90aGVyKQoreworICAgIG1fc3RyaW5nLnN3YXAob3RoZXIubV9zdHJpbmcpOworICAgIG1fYnVm
ZmVyLnN3YXAob3RoZXIubV9idWZmZXIpOworICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgb3RoZXIu
bV9sZW5ndGgpOworICAgIHN0ZDo6c3dhcChtX3Nob3VsZENyYXNoT25PdmVyZmxvdywgb3RoZXIu
bV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpOworfQogCi0gICAgICAgIGlmICghbV9zdHJpbmcuaXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhtX3N0cmluZyk7CitpbmxpbmUg
U3RyaW5nQnVpbGRlcjo6b3BlcmF0b3IgU3RyaW5nVmlldygpIGNvbnN0Cit7CisgICAgaWYgKGlz
OEJpdCgpKQorICAgICAgICByZXR1cm4geyBjaGFyYWN0ZXJzPExDaGFyPigpLCBsZW5ndGgoKSB9
OworICAgIHJldHVybiB7IGNoYXJhY3RlcnM8VUNoYXI+KCksIGxlbmd0aCgpIH07Cit9CiAKLSAg
ICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcobV9idWZm
ZXIuZ2V0KCksIDAsIG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKK2lubGluZSB2b2lkIFN0cmluZ0J1
aWxkZXI6OmFwcGVuZChVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgaWYgKG1fYnVmZmVyICYmIG1f
bGVuZ3RoIDwgbV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAg
ICAgIGlmICghbV9idWZmZXItPmlzOEJpdCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFVD
aGFyKj4obV9idWZmZXItPmNoYXJhY3RlcnM8VUNoYXI+KCkpW21fbGVuZ3RoKytdID0gY2hhcmFj
dGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpc0xhdGlu
MShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PExDaGFyKj4obV9idWZmZXIt
PmNoYXJhY3RlcnM8TENoYXI+KCkpW21fbGVuZ3RoKytdID0gc3RhdGljX2Nhc3Q8TENoYXI+KGNo
YXJhY3Rlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CisgICAgYXBw
ZW5kQ2hhcmFjdGVycygmY2hhcmFjdGVyLCAxKTsKK30KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsK
LSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoLnVuc2FmZUdldCgpOworaW5saW5lIHZvaWQgU3RyaW5n
QnVpbGRlcjo6YXBwZW5kKExDaGFyIGNoYXJhY3RlcikKK3sKKyAgICBpZiAobV9idWZmZXIgJiYg
bV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAg
ICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8TENo
YXIqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxMQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBjaGFyYWN0
ZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2J1ZmZl
ci0+Y2hhcmFjdGVyczxVQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBjaGFyYWN0ZXI7CisgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgYXBwZW5kQ2hhcmFjdGVycygmY2hhcmFjdGVyLCAxKTsKK30K
IAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2xlbmd0aDsgfQoraW5saW5l
IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBu
b3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKQorICAgIC8v
IHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KKyAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1
ZmZlcikgeworICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKKyAgICAgICAgbV9sZW5ndGggPSBz
dHJpbmcubGVuZ3RoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpOworICAg
IGFwcGVuZChTdHJpbmdWaWV3IHsgc3RyaW5nIH0pOworfQogCi0gICAgdW5zaWduZWQgY2FwYWNp
dHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQo
KSk7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5sZW5ndGgoKSA6IG1fbGVu
Z3RoLnVuc2FmZUdldCgpOworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0
IFN0cmluZ0J1aWxkZXImIG90aGVyKQoreworICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBh
biBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0
eSBoYXMgbm90IGJlZW4gY2FsbGVkKQorICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmlu
Zy4KKyAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlciAmJiAhb3RoZXIubV9zdHJpbmcuaXNO
dWxsKCkpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBsZW5ndGggZnVuY3Rpb24gaGVyZSBzbyB3ZSBj
cmFzaCBvbiBvdmVyZmxvdyB3aXRob3V0IGV4cGxpY2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICAg
ICAgbV9zdHJpbmcgPSBvdGhlci5tX3N0cmluZzsKKyAgICAgICAgbV9sZW5ndGggPSBvdGhlci5s
ZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKTsKKyAgICBhcHBlbmQoU3RyaW5nVmlldyB7
IG90aGVyIH0pOworfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuU2hyaW5rKCkg
Y29uc3Q7CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoU3RyaW5nVmlldyBzdHJp
bmcpCit7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVy
cyhzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAg
ICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3Ro
KCkpOworfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2hyaW5rVG9GaXQoKTsKK2lu
bGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFN1YnN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgYXBwZW5kKFN0
cmluZ1ZpZXcgeyBzdHJpbmcgfS5zdWJzdHJpbmcob2Zmc2V0LCBsZW5ndGgpKTsKK30KIAotICAg
IFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWhhc092ZXJmbG93ZWQoKSAmJiBp
IDwgbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgaWYgKG1faXM4Qml0
KQotICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaV07Ci0gICAgICAgIHJldHVybiBj
aGFyYWN0ZXJzMTYoKVtpXTsKLSAgICB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBl
bmQoY29uc3QgY2hhciogY2hhcmFjdGVycykKK3sKKyAgICBhcHBlbmQoU3RyaW5nVmlldyB7IGNo
YXJhY3RlcnMgfSk7Cit9CiAKLSAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAg
IEFTU0VSVChtX2J1ZmZlcik7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVyczgo
KTsKK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcihVQ2hhcjMyIGMp
Cit7CisgICAgaWYgKFVfSVNfQk1QKGMpKSB7CisgICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxV
Q2hhcj4oYykpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGFwcGVuZChVMTZfTEVBRChj
KSk7CisgICAgYXBwZW5kKFUxNl9UUkFJTChjKSk7Cit9CiAKLSAgICBjb25zdCBVQ2hhciogY2hh
cmFjdGVyczE2KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9pczhCaXQpOwotICAg
ICAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hh
cmFjdGVyczE2KCk7Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlcik7Ci0gICAgICAgIHJldHVybiBt
X2J1ZmZlci0+Y2hhcmFjdGVyczE2KCk7CitpbmxpbmUgU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRv
U3RyaW5nKCkKK3sKKyAgICBpZiAobV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgcmVpZnlTdHJpbmcoKTsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBp
czhCaXQoKSBjb25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGlzQWxsQVNDSUkoKSBjb25zdDsKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9CiAKLSAg
ICBvcGVyYXRvciBTdHJpbmdWaWV3KCkgY29uc3Q7CitpbmxpbmUgY29uc3QgU3RyaW5nJiBTdHJp
bmdCdWlsZGVyOjp0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdAoreworICAgIGlmICht
X3N0cmluZy5pc051bGwoKSkKKyAgICAgICAgcmVpZnlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9z
dHJpbmc7Cit9CiAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0g
MDsKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgbV9idWZmZXIgPSBudWxs
cHRyOwotICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4ID0gbnVsbHB0cjsKLSAgICAgICAgbV9p
czhCaXQgPSB0cnVlOwotICAgIH0KK2lubGluZSBBdG9tU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRv
QXRvbVN0cmluZygpIGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGVtcHR5QXRvbSgpOwogCi0gICAgdm9pZCBzd2FwKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxk
ZXIpCi0gICAgewotICAgICAgICBzdGQ6OnN3YXAobV9sZW5ndGgsIHN0cmluZ0J1aWxkZXIubV9s
ZW5ndGgpOwotICAgICAgICBtX3N0cmluZy5zd2FwKHN0cmluZ0J1aWxkZXIubV9zdHJpbmcpOwot
ICAgICAgICBtX2J1ZmZlci5zd2FwKHN0cmluZ0J1aWxkZXIubV9idWZmZXIpOwotICAgICAgICBz
dGQ6OnN3YXAobV9pczhCaXQsIHN0cmluZ0J1aWxkZXIubV9pczhCaXQpOwotICAgICAgICBzdGQ6
OnN3YXAobV9idWZmZXJDaGFyYWN0ZXJzOCwgc3RyaW5nQnVpbGRlci5tX2J1ZmZlckNoYXJhY3Rl
cnM4KTsKLSAgICAgICAgQVNTRVJUKCFtX2J1ZmZlciB8fCBoYXNPdmVyZmxvd2VkKCkgfHwgbV9i
dWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAg
fQorICAgIC8vIElmIHRoZSBidWZmZXIgaXMgc3VmZmljaWVudGx5IG92ZXItYWxsb2NhdGVkLCBt
YWtlIGEgbmV3IEF0b21TdHJpbmcgZnJvbSBhIGNvcHkgc28gaXRzIGJ1ZmZlciBpcyBub3Qgc28g
bGFyZ2UuCisgICAgaWYgKGNhblNocmluaygpKQorICAgICAgICByZXR1cm4gU3RyaW5nVmlldyB7
ICp0aGlzIH0udG9BdG9tU3RyaW5nKCk7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBhbGxvY2F0ZUJ1
ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVu
Z3RoKTsKLSAgICB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFj
dGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXJV
cENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJl
ZExlbmd0aCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCByZWFs
bG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIGV4dGVuZEJ1
ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCBhZGRpdGlvbmFsTGVuZ3RoKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIGV4
dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrKENoZWNrZWRJbnQzMiBy
ZXF1aXJlZExlbmd0aCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hh
cmFjdGVyVHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWduZWQgcmVx
dWlyZWRMZW5ndGgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBMQ2hhciogZXh0ZW5kQnVmZmVy
Rm9yQXBwZW5kaW5nOChDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGgpOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBVQ2hhciogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nMTYoQ2hlY2tlZEludDMy
IHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gbV9zdHJpbmc7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBB
TFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIGdldEJ1ZmZlckNoYXJhY3RlcnMoKTsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWlmeVN0cmluZygpIGNvbnN0OworICAgIC8vIFVzZSB0
aGUgbGVuZ3RoIGZ1bmN0aW9uIGhlcmUgc28gd2UgY3Jhc2ggb24gb3ZlcmZsb3cgd2l0aG91dCBl
eHBsaWNpdCBvdmVyZmxvdyBjaGVja3MuCisgICAgQVNTRVJUKG1fYnVmZmVyKTsKKyAgICByZXR1
cm4geyBtX2J1ZmZlci5nZXQoKSwgMCwgbGVuZ3RoKCkgfTsKK30KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIFN0cmluZ1R5cGVBZGFwdGVycz4gdm9pZCBhcHBlbmRGcm9tQWRhcHRlcnMoU3Ry
aW5nVHlwZUFkYXB0ZXJzLi4uKTsKK2lubGluZSB1bnNpZ25lZCBTdHJpbmdCdWlsZGVyOjpsZW5n
dGgoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOworICAg
IHJldHVybiBtX2xlbmd0aDsKK30KIAotICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nOwotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBtX2J1ZmZlcjsKLSAgICB1bmlvbiB7Ci0gICAgICAgIExDaGFy
KiBtX2J1ZmZlckNoYXJhY3RlcnM4OwotICAgICAgICBVQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJz
MTY7Ci0gICAgfTsKLSAgICBzdGF0aWNfYXNzZXJ0KFN0cmluZzo6TWF4TGVuZ3RoID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpLCAiIik7Ci0gICAgQ2hlY2tlZDxpbnQzMl90
LCBDb25kaXRpb25hbENyYXNoT25PdmVyZmxvdz4gbV9sZW5ndGg7Ci0gICAgYm9vbCBtX2lzOEJp
dCB7IHRydWUgfTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG11dGFibGUgYm9vbCBtX2lzUmVp
ZmllZCB7IGZhbHNlIH07Ci0jZW5kaWYKLX07CitpbmxpbmUgdW5zaWduZWQgU3RyaW5nQnVpbGRl
cjo6Y2FwYWNpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5s
ZW5ndGgoKSA6IGxlbmd0aCgpOworfQogCi1pbmxpbmUgU3RyaW5nQnVpbGRlcjo6b3BlcmF0b3Ig
U3RyaW5nVmlldygpIGNvbnN0CitpbmxpbmUgVUNoYXIgU3RyaW5nQnVpbGRlcjo6b3BlcmF0b3Jb
XSh1bnNpZ25lZCBpKSBjb25zdAogewotICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAgcmV0dXJu
IHsgY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkgfTsKLSAgICByZXR1cm4geyBjaGFyYWN0ZXJzMTYo
KSwgbGVuZ3RoKCkgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKGkgPCBsZW5ndGgoKSk7CisgICAgcmV0dXJuIGlzOEJpdCgpID8gY2hhcmFjdGVyczxMQ2hh
cj4oKVtpXSA6IGNoYXJhY3RlcnM8VUNoYXI+KClbaV07CiB9CiAKLXRlbXBsYXRlPD4KLUFMV0FZ
U19JTkxJTkUgTENoYXIqIFN0cmluZ0J1aWxkZXI6OmdldEJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+
KCkKK2lubGluZSBib29sIFN0cmluZ0J1aWxkZXI6OmlzOEJpdCgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKG1faXM4Qml0KTsKLSAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzODsKKyAgICByZXR1
cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+aXM4Qml0KCkgOiBtX3N0cmluZy5pczhCaXQoKTsKIH0K
IAotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElORSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVm
ZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
aW5saW5lIGNvbnN0IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMoKSBj
b25zdAogewotICAgIEFTU0VSVCghbV9pczhCaXQpOwotICAgIHJldHVybiBtX2J1ZmZlckNoYXJh
Y3RlcnMxNjsKKyAgICBpZiAoIW1fbGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFj
dGVyczxDaGFyYWN0ZXJUeXBlPigpOworICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVyczxD
aGFyYWN0ZXJUeXBlPigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRh
cHRlcnM+Ci12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZEZyb21BZGFwdGVycyhTdHJpbmdUeXBl
QWRhcHRlcnMuLi4gYWRhcHRlcnMpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRh
cHRlcnM+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVB
ZGFwdGVycy4uLiBhZGFwdGVycykKIHsKLSAgICBhdXRvIHJlcXVpcmVkTGVuZ3RoID0gY2hlY2tl
ZFN1bTxpbnQzMl90PihtX2xlbmd0aCwgYWRhcHRlcnMubGVuZ3RoKCkuLi4pOwotICAgIGlmICht
X2lzOEJpdCAmJiBhcmU4Qml0KGFkYXB0ZXJzLi4uKSkgewotICAgICAgICBMQ2hhciogZGVzdGlu
YXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc4KHJlcXVpcmVkTGVuZ3RoKTsKLSAgICAg
ICAgaWYgKCFkZXN0aW5hdGlvbikgewotICAgICAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQo
KSk7CisgICAgYXV0byByZXF1aXJlZExlbmd0aCA9IHNhdHVyYXRlZFN1bTx1aW50MzJfdD4obV9s
ZW5ndGgsIGFkYXB0ZXJzLmxlbmd0aCgpLi4uKTsKKyAgICBpZiAoaXM4Qml0KCkgJiYgYXJlOEJp
dChhZGFwdGVycy4uLikpIHsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZl
ckZvckFwcGVuZGluZ0xDaGFyKHJlcXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFkZXN0aW5h
dGlvbikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICBzdHJpbmdUeXBl
QWRhcHRlckFjY3VtdWxhdG9yKGRlc3RpbmF0aW9uLCBhZGFwdGVycy4uLik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgVUNoYXIqIGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5n
MTYocmVxdWlyZWRMZW5ndGgpOwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbiA9
IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZlcnQocmVxdWlyZWRMZW5ndGgpOwor
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CiAgICAgICAgIHN0cmluZ1R5cGVBZGFwdGVyQWNjdW11bGF0b3IoZGVzdGluYXRpb24sIGFkYXB0
ZXJzLi4uKTsKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPgot
dm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChT
dHJpbmdUeXBlcy4uLiBzdHJpbmdzKQogewogICAgIGFwcGVuZEZyb21BZGFwdGVycyhTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlcz4oc3RyaW5ncykuLi4pOwogfQogCi0vLyBGSVhNRTogTW92
ZSB0aGlzIHRvIFN0cmluZ1ZpZXcgYW5kIG1ha2UgaXQgdGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVh
ZCBvZiBhIFN0cmluZ0J1aWxkZXI/Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
Ym9vbCBlcXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiBzLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBi
dWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKHMubGVuZ3RoKCkgIT0g
bGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocy5pczhCaXQoKSkKLSAg
ICAgICAgcmV0dXJuIGVxdWFsKHMuY2hhcmFjdGVyczgoKSwgYnVmZmVyLCBsZW5ndGgpOwotCi0g
ICAgcmV0dXJuIGVxdWFsKHMuY2hhcmFjdGVyczE2KCksIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBy
ZXR1cm4gYnVpbGRlciA9PSBTdHJpbmdWaWV3IHsgYnVmZmVyLCBsZW5ndGggfTsKIH0KIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmluZ0J1aWxk
ZXI+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gdm9pZDsKICAgICB1c2luZyBBZGRpdGlvbmFs
QXJndW1lbnRUeXBlID0gU3RyaW5nQnVpbGRlcjsKLSAgICBzdGF0aWMgdm9pZCBmbHVzaChMQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBzdHJpbmdCdWls
ZGVyKSB7IHN0cmluZ0J1aWxkZXItPmFwcGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3Ro
KTsgfQorICAgIHN0YXRpYyB2b2lkIGZsdXNoKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpIHsgYnVpbGRlci0+YXBwZW5kQ2hh
cmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKaW5kZXggYzMxMThiNjM5
MWJmZWYyYjhjZWY4N2Q2NmFmM2JkNmI5YjcxYjkwYi4uMWQ1NTcwNjVmYTA5ZmE1OGY3N2FlZThi
OGEyOGU4MTJlODU2YzU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdC
dWlsZGVySlNPTi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNP
Ti5jcHAKQEAgLTEwNSw2ICsxMDUsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3Rl
ZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKGhhc092ZXJmbG93
ZWQoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdo
IGJ1ZmZlciBzcGFjZSB0byBhcHBlbmQgdGhpcyBzdHJpbmcgd2l0aG91dCBoYXZpbmcKICAgICAv
LyB0byB3b3JyeSBhYm91dCByZWFsbG9jYXRpbmcgaW4gdGhlIG1pZGRsZS4KICAgICAvLyBUaGUg
MiBpcyBmb3IgdGhlICciJyBxdW90ZXMgb24gZWFjaCBlbmQuCkBAIC0xMTMsNDQgKzExNCw0NiBA
QCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG1heGltdW1D
YXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7CiAgICAgbWF4aW11bUNhcGFjaXR5UmVxdWlyZWQg
Kz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7CiAgICAgdW5zaWduZWQgYWxsb2NhdGlvblNpemU7Ci0g
ICAgaWYgKENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cgPT0gbWF4aW11bUNhcGFjaXR5UmVxdWly
ZWQuc2FmZUdldChhbGxvY2F0aW9uU2l6ZSkpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygp
OworICAgIGlmIChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09IG1heGltdW1DYXBhY2l0eVJl
cXVpcmVkLnNhZmVHZXQoYWxsb2NhdGlvblNpemUpKSB7CisgICAgICAgIGRpZE92ZXJmbG93KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgLy8gVGhpcyBtYXgoKSBpcyBoZXJlIHRvIGFs
bG93IHVzIHRvIGFsbG9jYXRlIHNpemVzIGJldHdlZW4gdGhlIHJhbmdlIFsyXjMxLCAyXjMyIC0g
Ml0gYmVjYXVzZSByb3VuZFVwVG9Qb3dlck9mVHdvKDE8PDMxICsgc29tZSBpbnQgc21hbGxlciB0
aGFuIDE8PDMxKSA9PSAwLgotICAgIC8vIEZJWE1FOiByb3VuZFVwVG9Qb3dlck9mVHdvIHNob3Vs
ZCB0YWtlIENoZWNrZWQ8dW5zaWduZWQ+IGFuZCBhYm9ydCBpZiBpdCBmYWlscyB0byByb3VuZCB1
cC4KKyAgICAvLyBGSVhNRTogSW5zdGVhZCwgcm91bmRVcFRvUG93ZXJPZlR3byBzaG91bGQgYmUg
Zml4ZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsIGluIHRob3NlIGNhc2VzLCBwZXJoYXBz
IHVzaW5nIGNoZWNrZWQgb3Igc2F0dXJhdGVkIGFyaXRobWV0aWMuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjA4NgogICAgIGFsbG9jYXRpb25TaXpl
ID0gc3RkOjptYXgoYWxsb2NhdGlvblNpemUsIHJvdW5kVXBUb1Bvd2VyT2ZUd28oYWxsb2NhdGlv
blNpemUpKTsKLQotICAgIC8vIEFsbG9jYXRpbmcgdGhpcyBtdWNoIHdpbGwgZGVmaW5pdGVseSBm
YWlsLgotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA+IFN0cmluZzo6TWF4TGVuZ3RoKQotICAgICAg
ICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKKyAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBTdHJpbmc6
Ok1heExlbmd0aCkgeworICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCiAgICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIGFs
bG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGFsbG9jYXRpb25TaXpl
KTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXI8VUNoYXI+KGNoYXJhY3RlcnM8TENoYXI+KCksIGFs
bG9jYXRpb25TaXplKTsKICAgICBlbHNlCiAgICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxvY2F0
aW9uU2l6ZSk7CiAgICAgaWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IGFsbG9jYXRpb25TaXplKTsK
IAotICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICBBU1NFUlQoc3RyaW5nLmlzOEJpdCgpKTsK
LSAgICAgICAgTENoYXIqIG91dHB1dCA9IG1fYnVmZmVyQ2hhcmFjdGVyczggKyBtX2xlbmd0aC51
bnNhZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkgeworICAg
ICAgICBhdXRvIHN0YXJ0ID0gY29uc3RfY2FzdDxMQ2hhcio+KG1fYnVmZmVyLT5jaGFyYWN0ZXJz
PExDaGFyPigpKSArIG1fbGVuZ3RoOworICAgICAgICBhdXRvIG91dHB1dCA9IHN0YXJ0OwogICAg
ICAgICAqb3V0cHV0KysgPSAnIic7CiAgICAgICAgIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRl
cm5hbChvdXRwdXQsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAg
ICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9idWZm
ZXJDaGFyYWN0ZXJzODsKKyAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBzdGFydDsKICAgICB9
IGVsc2UgewotICAgICAgICBVQ2hhciogb3V0cHV0ID0gbV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBt
X2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAgICAgIGF1dG8gc3RhcnQgPSBjb25z
dF9jYXN0PFVDaGFyKj4obV9idWZmZXItPmNoYXJhY3RlcnM8VUNoYXI+KCkpICsgbV9sZW5ndGg7
CisgICAgICAgIGF1dG8gb3V0cHV0ID0gc3RhcnQ7CiAgICAgICAgICpvdXRwdXQrKyA9ICciJzsK
ICAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKICAgICAgICAgICAgIGFwcGVuZFF1b3RlZEpT
T05TdHJpbmdJbnRlcm5hbChvdXRwdXQsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVu
Z3RoKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5n
SW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7
CiAgICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBt
X2J1ZmZlckNoYXJhY3RlcnMxNjsKKyAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBzdGFydDsK
ICAgICB9Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBBU1NF
UlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRl
Q0YuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAyYTgxZDIyNmQ3MzRiMDk4YzYyMGEwZGFhNjkyZmMyNTg4NzBkYjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaApA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCisjaWYgVVNFKENGKQorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4g
eworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVmKTsKKyAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IENGU3RyaW5nR2V0TGVuZ3Ro
KG1fc3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFtX3N0
cmluZyB8fCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5n
SVNPTGF0aW4xKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQg
d3JpdGVUbyhDaGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0ZTdHJpbmdS
ZWYgbV9zdHJpbmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+
OjpTdHJpbmdUeXBlQWRhcHRlcihDRlN0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0cmluZyB7
IHN0cmluZyB9Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0
ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0
Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBzdGQ6Om1lbWNweShkZXN0aW5hdGlvbiwg
Q0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGlu
MSksIENGU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5l
IHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFyPihVQ2hh
ciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBDRlN0
cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0TGVu
Z3RoKG1fc3RyaW5nKSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3RpbmF0aW9uKSk7
Cit9CisKKyNpZmRlZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFw
dGVyPE5TU3RyaW5nICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPiB7
CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmluZykKKyAgICAg
ICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENGU3RyaW5nUmVm
KXN0cmluZykKKyAgICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2VuZGlmIC8vIFVT
RShDRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVhbUNv
Y29hLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KaW5k
ZXggYzc0YmY5Y2NmZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2YjlkM2Y0MTZh
ZDI0OTczNDY0NWRmZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9j
b2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0IDx3dGYvdGV4
dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBUZXh0U3Ry
ZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3Bw
CmluZGV4IDczYzgwMWI5MzhjN2E4ZDhmNGQ0ZDc1NTNlYWU2Zjc1MTNhMTgxNWUuLjlmMmE3NjU4
MTNkYzZmYTY0MzZkYmNlNzZmZGMxZDIwNWQwMzc1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC00OCw2ICs0
OCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgpA
QCAtMzA4LDM4ICszMDksMzAgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
OjpjYXB0aW9uc0JhY2tncm91bmRDU1MoKSBjb25zdAogQ29sb3IgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9ydGFudCkgY29uc3QKIHsK
ICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWluUHRy
PENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVn
cm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpOwot
ICAgIENvbG9yIHRleHRDb2xvcihjb2xvci5nZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29sb3IuaXNW
YWxpZCgpKQorICAgIENvbG9yIHRleHRDb2xvciA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5j
ZUNvcHlGb3JlZ3JvdW5kQ29sb3Ioa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVo
YXZpb3IpKS5nZXQoKTsKKyAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpIHsKICAgICAgICAg
Ly8gVGhpcyBkZWZhdWx0IHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSBzcGVjaWZp
ZWQgaW4gbWVkaWFDb250cm9scy5jc3MgZm9yIC13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250
YWluZXIuCiAgICAgICAgIHRleHRDb2xvciA9IENvbG9yOjp3aGl0ZTsKLSAgICAKKyAgICB9CiAg
ICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVz
ZVZhbHVlOwogICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRGb3Jl
Z3JvdW5kT3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7
CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKICAgICByZXR1cm4gdGV4dENvbG9y
LmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpOwogfQotICAgIAorCiBTdHJpbmcgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKIHsKICAgICBi
b29sIGltcG9ydGFudDsKLSAgICBDb2xvciB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihp
bXBvcnRhbnQpOwotCisgICAgYXV0byB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihpbXBv
cnRhbnQpOwogICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0KICAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUNv
bG9yLCB0ZXh0Q29sb3IsIGltcG9ydGFudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwcGVuZENTUyhT
dHJpbmdCdWlsZGVyJiBidWlsZGVyLCBDU1NQcm9wZXJ0eUlEIGlkLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5h
bWVTdHJpbmcoaWQpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOicpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKHZhbHVlKTsKLSAgICBpZiAoaW1wb3J0YW50KQotICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiAhaW1wb3J0YW50Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKKyAgICBidWls
ZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoaWQpLCAnOicsIHZhbHVlLCBpbXBvcnRh
bnQgPyAiICFpbXBvcnRhbnQ7IiA6ICI7Iik7CiB9CiAgICAgCiBTdHJpbmcgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OndpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKSBjb25zdApA
QCAtMzc5LDcgKzM3Miw2IEBAIGJvb2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNh
cHRpb25TdHJva2VXaWR0aEZvckZvbnQoZmxvYXQgZm9udFNpemUsIGNvCiAgICAgLy8gU2luY2Ug
b25seSBoYWxmIG9mIHRoZSBzdHJva2UgaXMgdmlzaWJsZSBiZWNhdXNlIHRoZSBzdHJva2UgaXMg
ZHJhd24gYmVmb3JlIHRoZSBmaWxsLCB3ZSBkb3VibGUgdGhlIHN0cm9rZSB3aWR0aCBoZXJlLgog
ICAgIHN0cm9rZVdpZHRoID0gc3Ryb2tlV2lkdGhQdCAqIDI7CiAgICAgaW1wb3J0YW50ID0gYmVo
YXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIAogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC00MTgsMjQgKzQxMCwxNyBAQCBTdHJpbmcgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKSBjb25zdAogewog
ICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKICAgICAKLSAgICBSZXRh
aW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udCA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFy
YW5jZUNvcHlGb250RGVzY3JpcHRvckZvclN0eWxlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWlu
VXNlciwgJmJlaGF2aW9yLCBrTUFDYXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZURlZmF1bHQpKTsK
KyAgICBhdXRvIGZvbnQgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2Ny
aXB0b3JGb3JTdHlsZShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvciwg
a01BQ2FwdGlvbkFwcGVhcmFuY2VGb250U3R5bGVEZWZhdWx0KSk7CiAgICAgaWYgKCFmb250KQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIFJldGFpblB0cjxDRlR5cGVSZWY+
IG5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCks
IGtDVEZvbnROYW1lQXR0cmlidXRlKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRDRihDVEZvbnRE
ZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkp
OwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgCi0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVy
dHlOYW1lU3RyaW5nKENTU1Byb3BlcnR5Rm9udEZhbWlseSkpOwotICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiOiBcIiIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5n
UmVmPihuYW1lLmdldCgpKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJyInKTsKLQotICAgIGF1dG8g
Y2FzY2FkZUxpc3QgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udERlc2Ny
aXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0
ZSkpKTsKLQotICAgIGlmIChjYXNjYWRlTGlzdCkgeworICAgIGJ1aWxkZXIuYXBwZW5kKCJmb250
LWZhbWlseTogXCIiLCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4obmFtZS5nZXQoKSksICciJyk7
CisgICAgaWYgKGF1dG8gY2FzY2FkZUxpc3QgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlS
ZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnRDYXNj
YWRlTGlzdEF0dHJpYnV0ZSkpKSkgewogICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBD
RkFycmF5R2V0Q291bnQoY2FzY2FkZUxpc3QuZ2V0KCkpOyBpKyspIHsKICAgICAgICAgICAgIGF1
dG8gZm9udENhc2NhZGUgPSBzdGF0aWNfY2FzdDxDVEZvbnREZXNjcmlwdG9yUmVmPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGNhc2NhZGVMaXN0LmdldCgpLCBpKSk7CiAgICAgICAgICAgICBpZiAo
IWZvbnRDYXNjYWRlKQpAQCAtNDQzLDE2ICs0MjgsMTAgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29uc3QKICAgICAgICAg
ICAgIGF1dG8gZm9udENhc2NhZGVOYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0
dHJpYnV0ZShmb250Q2FzY2FkZSwga0NURm9udE5hbWVBdHRyaWJ1dGUpKTsKICAgICAgICAgICAg
IGlmICghZm9udENhc2NhZGVOYW1lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiwgXCIiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihmb250Q2FzY2FkZU5hbWUuZ2V0KCkpKTsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgi
LCBcIiIsIHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihmb250Q2FzY2FkZU5hbWUuZ2V0KCkpLCAn
IicpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIGlmIChiZWhhdmlvciA9PSBrTUFDYXB0
aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOwotICAgIAorICAg
IGJ1aWxkZXIuYXBwZW5kKGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JV
c2VWYWx1ZSA/ICIgIWltcG9ydGFudDsiIDogIjsiKTsKICAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOwogfQogCkBAIC01NjEsNDMgKzU0MCwxOCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCkgY29uc3QKICNpZiBI
QVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogICAgIGlmICghTWVkaWFBY2Nlc3Np
YmlsaXR5TGlicmFyeSgpKQogICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6
Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKLSAgICAKKwogICAgIFN0cmluZyBjYXB0aW9u
c0NvbG9yID0gY2FwdGlvbnNUZXh0Q29sb3JDU1MoKTsKICAgICBTdHJpbmcgZWRnZVN0eWxlID0g
Y2FwdGlvbnNUZXh0RWRnZUNTUygpOwogICAgIFN0cmluZyBmb250TmFtZSA9IGNhcHRpb25zRGVm
YXVsdEZvbnRDU1MoKTsKICAgICBTdHJpbmcgYmFja2dyb3VuZCA9IGNhcHRpb25zQmFja2dyb3Vu
ZENTUygpOwotICAgIGlmICghYmFja2dyb3VuZC5pc0VtcHR5KCkgfHwgIWNhcHRpb25zQ29sb3Iu
aXNFbXB0eSgpIHx8ICFlZGdlU3R5bGUuaXNFbXB0eSgpIHx8ICFmb250TmFtZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kTGl0ZXJhbCgiIDo6
Iik7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChUZXh0VHJhY2tD
dWU6OmN1ZVNoYWRvd1BzZXVkb0lkKCkpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVT
aGVldC5hcHBlbmQoJ3snKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYmFja2dyb3VuZC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoYmFj
a2dyb3VuZCk7Ci0gICAgICAgIGlmICghY2FwdGlvbnNDb2xvci5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoY2FwdGlvbnNDb2xvcik7Ci0g
ICAgICAgIGlmICghZWRnZVN0eWxlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3Zl
cnJpZGVTdHlsZVNoZWV0LmFwcGVuZChlZGdlU3R5bGUpOwotICAgICAgICBpZiAoIWZvbnROYW1l
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZChmb250TmFtZSk7Ci0gICAgICAgIAotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVl
dC5hcHBlbmQoJ30nKTsKLSAgICB9Ci0gICAgCisgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHko
KSB8fCAhY2FwdGlvbnNDb2xvci5pc0VtcHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwg
IWZvbnROYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQu
YXBwZW5kKCIgOjoiLCBUZXh0VHJhY2tDdWU6OmN1ZVNoYWRvd1BzZXVkb0lkKCksICd7JywgYmFj
a2dyb3VuZCwgY2FwdGlvbnNDb2xvciwgZWRnZVN0eWxlLCBmb250TmFtZSwgJ30nKTsKKwogICAg
IFN0cmluZyB3aW5kb3dDb2xvciA9IGNhcHRpb25zV2luZG93Q1NTKCk7CiAgICAgU3RyaW5nIHdp
bmRvd0Nvcm5lclJhZGl1cyA9IHdpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKTsKLSAgICBp
ZiAoIXdpbmRvd0NvbG9yLmlzRW1wdHkoKSB8fCAhd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHko
KSkgewotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmRMaXRlcmFsKCIg
OjoiKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFj
a0N1ZTo6Y3VlQmFja2Ryb3BTaGFkb3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2FwdGlvbnNPdmVy
cmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXdpbmRv
d0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0
LmFwcGVuZCh3aW5kb3dDb2xvcik7Ci0gICAgICAgIGlmICghd2luZG93Q29ybmVyUmFkaXVzLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5k
KHdpbmRvd0Nvcm5lclJhZGl1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhcHRp
b25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgnfScpOwotICAgIH0KKyAgICBpZiAoIXdpbmRv
d0NvbG9yLmlzRW1wdHkoKSB8fCAhd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCIgOjoiLCBUZXh0VHJhY2tDdWU6
OmN1ZUJhY2tkcm9wU2hhZG93UHNldWRvSWQoKSwgJ3snLCB3aW5kb3dDb2xvciwgd2luZG93Q29y
bmVyUmFkaXVzLCAnfScpOwogI2VuZGlmIC8vIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFN
RVdPUkspCiAKICAgICBMT0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6
Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGVTZXR0aW5nIHN0eWxlIHRvOlxuJXMiLCBjYXB0aW9u
c092ZXJyaWRlU3R5bGVTaGVldC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGF5b3V0VW5pdC5oCmluZGV4IDE1NmEwMWJkMmRmZGRhNDcyYjA4MWQ0YWVmNDFk
YTM4Mjg2ZjYwMzAuLjFlNTcxMjgyMDFkYmYwNTc0ZmEyMDkwNmJiZTkxMDc1ZTcyYmFlYTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgKQEAgLTE1MCw4ICsxNTAsOCBAQCBwdWJs
aWM6CiAgICAgaW50IHJvdW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3ZhbHVlID4g
MCkKLSAgICAgICAgICAgIHJldHVybiBzYXR1cmF0ZWRBZGRpdGlvbihyYXdWYWx1ZSgpLCBrRml4
ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgICAg
ICByZXR1cm4gc2F0dXJhdGVkU3VidHJhY3Rpb24ocmF3VmFsdWUoKSwgKGtGaXhlZFBvaW50RGVu
b21pbmF0b3IgLyAyKSAtIDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgICAg
IHJldHVybiBzYXR1cmF0ZWRTdW08aW50PihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5h
dG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gc2F0dXJh
dGVkRGlmZmVyZW5jZTxpbnQ+KHJhd1ZhbHVlKCksIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8g
MikgLSAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgfQogCiAgICAgaW50IGZsb29y
KCkgY29uc3QKQEAgLTU4OCw3ICs1ODgsNyBAQCBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8o
dW5zaWduZWQgbG9uZyBsb25nIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiBpbmxpbmUgTGF5b3V0
VW5pdCBvcGVyYXRvcisoY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikK
IHsKICAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
c2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAgICByZXR1
cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VtPGludD4oYS5yYXdWYWx1ZSgpLCBiLnJhd1Zh
bHVlKCkpKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwogfQogCkBAIC02MjUsNyArNjI1LDcgQEAg
aW5saW5lIGRvdWJsZSBvcGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IExheW91dFVuaXQm
IGIpCiBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29u
c3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICByZXR1
cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJh
d1ZhbHVlKCkpKTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkRGlmZmVyZW5j
ZTxpbnQ+KGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIHJldHVyblZh
bDsKIH0KIApAQCAtNjkxLDcgKzY5MSw3IEBAIGlubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShp
bnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIAogaW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9y
Kz0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBhLnNldFJhd1Zh
bHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisgICAg
YS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdW08aW50PihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUo
KSkpOwogICAgIHJldHVybiBhOwogfQogCkBAIC03MjEsNyArNzIxLDcgQEAgaW5saW5lIExheW91
dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiAKIGlubGluZSBMYXlvdXRV
bml0JiBvcGVyYXRvci09KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0g
ICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3
VmFsdWUoKSkpOworICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQ+KGEu
cmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIGE7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IDYwZTY3MGYyMDY2ZDYwNThiMmU1ZWI3
OWViN2RjMzBjNWNiNGIyOGUuLjExYzlhMjM4M2NkNmM4YzMwMWExYTA4ZGNkZWFmYWU3OWQyNjJi
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpAQCAtMzksNiArMzks
NyBAQAogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29h
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4
dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKIEBpbnRlcmZhY2UgTlNVUkwgKCkKIC0gKENG
VVJMUmVmKV9jZnVybDsKQEAgLTM0OSwzMSArMzUwLDIzIEBAIHN0ZDo6cGFpcjxTdHJpbmcsIGJv
b2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Npb24oY29uc3QgVVJMJiBm
aXJzCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAgIFJldGFpblB0cjxO
U0FycmF5PiBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8s
IHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3VsZFJlbGF4VGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nKTsKLSAgICBpZiAoIWNvb2tpZXMgfHwgIVtjb29raWVzIGNvdW50XSkK
LSAgICAgICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3Ry
aW5nLCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3VsZCBjcmVhdGUgYmVs
b3cuCisgICAgYXV0byBjb29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5LCBzYW1lU2l0
ZUluZm8sIHVybCwgZnJhbWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3VsZFJlbGF4VGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nKTsKKyAgICBpZiAoIVtjb29raWVzIGNvdW50XSkKKyAgICAg
ICAgcmV0dXJuIHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5nOyBT
dHJpbmdCdWlsZGVyIGJlbG93IHdvdWxkIGNyZWF0ZSBhbiBlbXB0eSBvbmUuCiAKICAgICBTdHJp
bmdCdWlsZGVyIGNvb2tpZXNCdWlsZGVyOwogICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2ll
cyA9IGZhbHNlOwogICAgIGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcy5nZXQo
KSkgewogICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCiAgICAgICAgICAgICBj
b250aW51ZTsKLQogICAgICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAmJiBbY29va2llIGlzSFRU
UE9ubHldKQogICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgaWYgKFtjb29raWUgaXNT
ZWN1cmVdKSB7CiAgICAgICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmIChpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2ll
czo6Tm8pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvb2tpZXNCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtj
b29raWUgbmFtZV0pOwotICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoJz0nKTsKLSAgICAg
ICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsKKyAgICAgICAgY29va2ll
c0J1aWxkZXIuYXBwZW5kKGNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIjsgIiwgW2Nv
b2tpZSBuYW1lXSwgJz0nLCBbY29va2llIHZhbHVlXSk7CiAgICAgfQogICAgIHJldHVybiB7IGNv
b2tpZXNCdWlsZGVyLnRvU3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IDdmNjBkOTAxOTNj
YzNiM2ZjNDlmNTljYjA5MmVmNGMyMGE3ZjExOGMuLjQzNjk5ZmVhZDlmNjVjNTk3MmJmZGQ0Mjlj
NzdhZWExMDE2YTY5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAKQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8Q291bnRlclBsYW4+IHBs
YW5Db3VudGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9tU3RyaQogICAgIH0K
IAogICAgIGlmIChkaXJlY3RpdmVzLnJlc2V0VmFsdWUpCi0gICAgICAgIHJldHVybiBDb3VudGVy
UGxhbiB7IHRydWUsIHNhdHVyYXRlZEFkZGl0aW9uKCpkaXJlY3RpdmVzLnJlc2V0VmFsdWUsIGRp
cmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUudmFsdWVPcigwKSkgfTsKKyAgICAgICAgcmV0dXJuIENv
dW50ZXJQbGFuIHsgdHJ1ZSwgc2F0dXJhdGVkU3VtPGludD4oKmRpcmVjdGl2ZXMucmVzZXRWYWx1
ZSwgZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1ZU9yKDApKSB9OwogICAgIGlmIChkaXJl
Y3RpdmVzLmluY3JlbWVudFZhbHVlKQogICAgICAgICByZXR1cm4gQ291bnRlclBsYW4geyBmYWxz
ZSwgKmRpcmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUgfTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCBmOTczZjg5
NTEzZWE0NzE0OTRkN2Q5ZDQzNGJmMGRjMGVkYTUyZDcyLi43ZmY2YzYyZGZlMzNmNzA0NTRhNzBi
NzI2Y2UzNDkyOGVlOThiOWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJD
dXN0b20uaApAQCAtMTM2MCw3ICsxMzYwLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUNvdW50ZXIoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHUKICAg
ICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkKICAgICAgICAgICAgIGRpcmVjdGl2
ZXMucmVzZXRWYWx1ZSA9IHZhbHVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXJlY3Rp
dmVzLmluY3JlbWVudFZhbHVlID0gc2F0dXJhdGVkQWRkaXRpb24oZGlyZWN0aXZlcy5pbmNyZW1l
bnRWYWx1ZS52YWx1ZU9yKDApLCB2YWx1ZSk7CisgICAgICAgICAgICBkaXJlY3RpdmVzLmluY3Jl
bWVudFZhbHVlID0gc2F0dXJhdGVkU3VtPGludD4oZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52
YWx1ZU9yKDApLCB2YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KaW5kZXggZjJkOTJmMTk3ZDE3Y2EyOTcwZDA3ZGMxNDBhYjAwYTYxYzEzNThmYy4u
Y2ZjZDlmM2MwM2M5YzZhMWEzZDM0ZWQxY2M5Nzc3YTgwNzI3ZTk5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtNDcsNyArNDcsNyBAQAogI2ltcG9ydCA8d3RmL1By
b2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KICNpbXBvcnQgPHd0Zi9jb2Nv
YS9FbnRpdGxlbWVudHMuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CkBAIC0xMTUsMTUg
KzExNSwxMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1BhcmFt
ZXRlcnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwogICAgIH0KIAotICAgIGF1dG8qIG1hbnVhbFByZXZh
bGVudFJlc291cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1hbnVhbFByZXZhbGVu
dFJlc291cmNlIl07Ci0gICAgaWYgKG1hbnVhbFByZXZhbGVudFJlc291cmNlKSB7Ci0gICAgICAg
IFVSTCB1cmwgeyBVUkwoKSwgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgfTsKLSAgICAgICAgaWYg
KCF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHA6Ly8iKTsKLSAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1hbnVhbFByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgICAgIHVy
bCA9IHsgVVJMKCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OwotICAgICAgICB9CisgICAgaWYgKGF1
dG8gbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OkAiSVRQ
TWFudWFsUHJldmFsZW50UmVzb3VyY2UiXSkgeworICAgICAgICBVUkwgdXJsIHsgeyB9LCBtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSB9OworICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICB1cmwgPSB7IHsgfSwgbWFrZVN0cmluZygiaHR0cDovLyIsIG1hbnVhbFByZXZhbGVu
dFJlc291cmNlKSB9OwogICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH07CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDc3YjVlNWU3MTZjZGM3OGFhMmJkNzcxZTM2MDA4
ZTNkZjY0Y2I1NjQuLjE4MjYxNTI5NDZkNGFkYmE4NDQ5YTlhMDgyY2UyMWVhYzUwYzBiYjcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1OCBAQAorMjAyMS0wNS0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBmcm9tIFN0cmluZ0J1
aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0g
V2VpbmlnLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVkQXJp
dGhtZXRpY09wZXJhdGlvbnMuY3BwOgorICAgICAgICBVcGRhdGVkIHRlc3RzIGZvciBjaGFuZ2Vz
IHRvIFNhdHVyYXRlZEFyaXRobWV0aWMuaC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgQWRkZWQgaW5j
bHVkZSBvZiBTdHJpbmdDb25jYXRlbmF0ZUNGLmguCisgICAgICAgIEFkZGVkIFN0cmluZ1R5cGVB
ZGFwdGVyIGZvciBXS1N0cmluZ1JlZi4KKyAgICAgICAgKFdUUjo6c3R5bGVEZWNUb1N0cik6IFVz
ZSBBU0NJSUxpdGVyYWwgaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAgICAoV1RSOjpz
dHJpbmcpOiBSZW1vdmVkIHVubmVlZGVkIHRvV1RGU3RyaW5nIHNpbmNlIHRoZSBXS1N0cmluZ1Jl
ZgorICAgICAgICBTdHJpbmdUeXBlQWRhcHRlciB0YWtlcyBjYXJlIG9mIGl0LgorICAgICAgICAo
V1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gZnJhbWVUb1N0ci4gVXNlIG1ha2VTdHJpbmcuCisg
ICAgICAgIChXVFI6OmR1bXBSZXNvdXJjZVVSTCk6IFVzZSBhcHBlbmQgaW5zdGVhZCBvZiBhcHBl
bmRMaXRlcmFsLgorICAgICAgICAoV1RSOjpkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OmR1bXBMb2FkRXZlbnQpOiBVc2Ug
bWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9tIGEgbG9uZ2Vy
IG5hbWUuIFJldHVybiBhIFN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGluIGEg
U3RyaW5nQnVpbGRlci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OnN0cmluZyk6IERp
dHRvLgorICAgICAgICAoV1RSOjpkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdCk6IFJlbW92ZWQKKyAgICAgICAgdW5uZWVkZWQgdG9XVEZTdHJpbmcuCisgICAgICAgIChX
VFI6OmR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OmR1bXBE
ZXNjZW5kYW50RnJhbWVzVGV4dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmR1bXBET01Bc1dlYkFyY2hpdmUpOiBSZW1vdmVkIGFuCisgICAgICAgIHVubmVlZGVk
IGxvY2FsIHZhcmlhYmxlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAp
OiBSZW1vdmVkIHVubmVlZGVkIHRvV1RGU3RyaW5nLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUpOgorICAg
ICAgICBVcGRhdGVkIGZvciBmdW5jdG9uIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKTogRGl0dG8uCisgICAgICAg
IEFsc28gdXNlIHZhcmlhZGljIGFwcGVuZC4gQWxzbyB1c2UgbWFrZVN0cmluZy4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaExvYWRG
b3JSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZEZhaWxMb2FkRm9yUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRvQ29u
c29sZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRT
dGF0dXNiYXJUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGREZWxldGVSYW5nZSk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRBcHBs
eVN0eWxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVn
aW5FZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
RW5kRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZENoYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENo
YW5nZVNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6
OmR1bXBIaXN0b3J5KTogRGl0dG8uCisKIDIwMjEtMDUtMTcgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQcm9jZXNzXSBPYmplY3QgaWRlbnRp
ZmllcnMgd2l0aCB0aGUgZGVsZXRlZCB2YWx1ZSBzaG91bGQgY2F1c2UgTUVTU0FHRV9DSEVDS3MK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRo
bWV0aWNPcGVyYXRpb25zLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NhdHVy
YXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAppbmRleCBlODU0ZTI1NmU4YWRhY2M5MjViOThi
N2MwY2U3MTQ2M2FiMWJhZWZlLi45YmQ1MGUyNzNmNzQwNTk5YmUwMDJiNmQwOWVkNWZmN2JiNjZh
NGY1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TYXR1cmF0ZWRB
cml0aG1ldGljT3BlcmF0aW9ucy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
LSAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI5LDc3ICszMCw5OCBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJsaW1pdHMuaCIKKworI2luY2x1ZGUg
PGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmg+CiAKIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChXVEYsIFNhdHVyYXRlZEFyaXRobWV0aWNBZGRp
dGlvbikKIHsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMCwgMCksIDApOwotICAg
IEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigwLCAxKSwgMSk7Ci0gICAgQVNTRVJUX0VRKHNh
dHVyYXRlZEFkZGl0aW9uKDAsIDEwMCksIDEwMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFk
ZGl0aW9uKDEwMCwgNTApLCAxNTApOwotCi0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9u
KDAsIC0xKSwgLTEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigxLCAtMSksIDAp
OwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigxMDAsIC01MCksIDUwKTsKLSAgICBB
U1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oNTAsIC0xMDApLCAtNTApOwotCi0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NQVggLSAxLCAwKSwgSU5UX01BWCAtIDEpOwotICAg
IEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUFYIC0gMSwgMSksIElOVF9NQVgpOwot
ICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUFYIC0gMSwgMiksIElOVF9NQVgp
OwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigwLCBJTlRfTUFYIC0gMSksIElOVF9N
QVggLSAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMSwgSU5UX01BWCAtIDEp
LCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMiwgSU5UX01BWCAt
IDEpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01BWCAt
IDEsIElOVF9NQVggLSAxKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0
aW9uKElOVF9NQVgsIElOVF9NQVgpLCBJTlRfTUFYKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRBZGRpdGlvbihJTlRfTUlOLCAwKSwgSU5UX01JTik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRl
ZEFkZGl0aW9uKElOVF9NSU4gKyAxLCAwKSwgSU5UX01JTiArIDEpOwotICAgIEFTU0VSVF9FUShz
YXR1cmF0ZWRBZGRpdGlvbihJTlRfTUlOICsgMSwgMSksIElOVF9NSU4gKyAyKTsKLSAgICBBU1NF
UlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01JTiArIDEsIDIpLCBJTlRfTUlOICsgMyk7Ci0g
ICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NSU4gKyAxLCAtMSksIElOVF9NSU4p
OwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUlOICsgMSwgLTIpLCBJTlRf
TUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMCwgSU5UX01JTiArIDEpLCBJ
TlRfTUlOICsgMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKC0xLCBJTlRfTUlO
ICsgMSksIElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigtMiwgSU5U
X01JTiArIDEpLCBJTlRfTUlOKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJ
TlRfTUFYIC8gMiwgMTAwMDApLCBJTlRfTUFYIC8gMiArIDEwMDAwKTsKLSAgICBBU1NFUlRfRVEo
c2F0dXJhdGVkQWRkaXRpb24oSU5UX01BWCAvIDIgKyAxLCBJTlRfTUFYIC8gMiArIDEpLCBJTlRf
TUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01JTiwgSU5UX01BWCks
IC0xKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDAsIDApKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDAsIDEpKTsKKyAgICBFWFBFQ1Rf
RVEoMTAwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMCwgMTAwKSk7CisgICAgRVhQRUNUX0VRKDE1
MCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDEwMCwgNTApKTsKKworICAgIEVYUEVDVF9FUSgtMSwg
c2F0dXJhdGVkU3VtPGludDMyX3Q+KDAsIC0xKSk7CisgICAgRVhQRUNUX0VRKDAsIHNhdHVyYXRl
ZFN1bTxpbnQzMl90PigxLCAtMSkpOworICAgIEVYUEVDVF9FUSg1MCwgc2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KDEwMCwgLTUwKSk7CisgICAgRVhQRUNUX0VRKC01MCwgc2F0dXJhdGVkU3VtPGludDMy
X3Q+KDUwLCAtMTAwKSk7CisKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCAtIDEsIHNhdHVyYXRlZFN1
bTxpbnQzMl90PihJTlRfTUFYIC0gMSwgMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1
cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAtIDEsIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01B
WCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NQVggLSAxLCAyKSk7CisgICAgRVhQRUNUX0VR
KElOVF9NQVggLSAxLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMCwgSU5UX01BWCAtIDEpKTsKKyAg
ICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDEsIElOVF9NQVggLSAx
KSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZFN1bTxpbnQzMl90PigyLCBJTlRf
TUFYIC0gMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4o
SU5UX01BWCAtIDEsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVy
YXRlZFN1bTxpbnQzMl90PihJTlRfTUFYLCBJTlRfTUFYKSk7CisKKyAgICBFWFBFQ1RfRVEoSU5U
X01JTiwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NSU4sIDApKTsKKyAgICBFWFBFQ1RfRVEo
SU5UX01JTiArIDEsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOICsgMSwgMCkpOworICAg
IEVYUEVDVF9FUShJTlRfTUlOICsgMiwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NSU4gKyAx
LCAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4gKyAzLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4o
SU5UX01JTiArIDEsIDIpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KElOVF9NSU4gKyAxLCAtMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0
ZWRTdW08aW50MzJfdD4oSU5UX01JTiArIDEsIC0yKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4g
KyAxLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMCwgSU5UX01JTiArIDEpKTsKKyAgICBFWFBFQ1Rf
RVEoSU5UX01JTiwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KC0xLCBJTlRfTUlOICsgMSkpOworICAg
IEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oLTIsIElOVF9NSU4gKyAx
KSk7CisKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCAvIDIgKyAxMDAwMCwgc2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KElOVF9NQVggLyAyLCAxMDAwMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1
cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAvIDIgKyAxLCBJTlRfTUFYIC8gMiArIDEpKTsKKyAg
ICBFWFBFQ1RfRVEoLTEsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOLCBJTlRfTUFYKSk7
CisKKyAgICBFWFBFQ1RfRVEoMFUsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oMFUsIDBVKSk7Cisg
ICAgRVhQRUNUX0VRKDFVLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KDBVLCAxVSkpOworICAgIEVY
UEVDVF9FUSgxMDBVLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KDBVLCAxMDBVKSk7CisgICAgRVhQ
RUNUX0VRKDE1MFUsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oMTAwVSwgNTBVKSk7CisKKyAgICBF
WFBFQ1RfRVEoVUlOVF9NQVggLSAxLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC0g
MVUsIDBVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+
KFVJTlRfTUFYIC0gMVUsIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRT
dW08dWludDMyX3Q+KFVJTlRfTUFYIC0gMVUsIDJVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFY
IC0gMSwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PigwVSwgVUlOVF9NQVggLSAxVSkpOworICAgIEVY
UEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PigxVSwgVUlOVF9NQVggLSAx
VSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PigyVSwg
VUlOVF9NQVggLSAxVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVp
bnQzMl90PihVSU5UX01BWCAtIDFVLCBVSU5UX01BWCAtIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJ
TlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYLCBVSU5UX01BWCkpOworCisg
ICAgRVhQRUNUX0VRKFVJTlRfTUFYIC8gMiArIDEwMDAwLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+
KFVJTlRfTUFYIC8gMlUsIDEwMDAwVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJh
dGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAvIDJVLCBVSU5UX01BWCAvIDJVICsgMVUpKTsKKyAg
ICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLyAy
VSArIDFVLCBVSU5UX01BWCAvIDJVICsgMVUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNh
dHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLyAzVSArIDFVLCBVSU5UX01BWCAvIDNVLCBV
SU5UX01BWCAvIDNVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWlu
dDMyX3Q+KFVJTlRfTUFYIC8gM1UgKyAxVSwgVUlOVF9NQVggLyAzVSArIDFVLCBVSU5UX01BWCAv
IDNVICsgMVUpKTsKIH0KIAogVEVTVChXVEYsIFNhdHVyYXRlZEFyaXRobWV0aWNTdWJ0cmFjdGlv
bikKIHsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oMCwgMCksIDApOwotICAg
IEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigwLCAxKSwgLTEpOwotICAgIEFTU0VSVF9F
UShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigwLCAxMDApLCAtMTAwKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkU3VidHJhY3Rpb24oMTAwLCA1MCksIDUwKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2F0dXJh
dGVkRGlmZmVyZW5jZTxpbnQzMl90PigwLCAwKSk7CisgICAgRVhQRUNUX0VRKC0xLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KDAsIDEpKTsKKyAgICBFWFBFQ1RfRVEoLTEwMCwgc2F0dXJh
dGVkRGlmZmVyZW5jZTxpbnQzMl90PigwLCAxMDApKTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNhdHVy
YXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMTAwLCA1MCkpOwogICAgIAotICAgIEFTU0VSVF9FUShz
YXR1cmF0ZWRTdWJ0cmFjdGlvbigwLCAtMSksIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRT
dWJ0cmFjdGlvbigxLCAtMSksIDIpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlv
bigxMDAsIC01MCksIDE1MCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDUw
LCAtMTAwKSwgMTUwKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRf
TUFYLCAwKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElO
VF9NQVgsIDEpLCBJTlRfTUFYIC0gMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0
aW9uKElOVF9NQVggLSAxLCAwKSwgSU5UX01BWCAtIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihJTlRfTUFYIC0gMSwgLTEpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEo
c2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCAtIDEsIC0yKSwgSU5UX01BWCk7Ci0gICAgQVNT
RVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDAsIElOVF9NQVggLSAxKSwgLUlOVF9NQVggKyAx
KTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oLTEsIElOVF9NQVggLSAxKSwg
LUlOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigtMiwgSU5UX01B
WCAtIDEpLCAtSU5UX01BWCAtIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlv
bigtMywgSU5UX01BWCAtIDEpLCAtSU5UX01BWCAtIDEpOwotCi0gICAgQVNTRVJUX0VRKHNhdHVy
YXRlZFN1YnRyYWN0aW9uKElOVF9NSU4sIDApLCBJTlRfTUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkU3VidHJhY3Rpb24oSU5UX01JTiArIDEsIDApLCBJTlRfTUlOICsgMSk7Ci0gICAgQVNT
RVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NSU4gKyAxLCAxKSwgSU5UX01JTik7Ci0g
ICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NSU4gKyAxLCAyKSwgSU5UX01J
Tik7Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01JTiwgSU5UX01J
TiksIDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYLCBJTlRf
TUFYKSwgMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NQVgsIElO
VF9NSU4pLCBJTlRfTUFYKTsKKyAgICBFWFBFQ1RfRVEoMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxp
bnQzMl90PigwLCAtMSkpOworICAgIEVYUEVDVF9FUSgyLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGlu
dDMyX3Q+KDEsIC0xKSk7CisgICAgRVhQRUNUX0VRKDE1MCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxp
bnQzMl90PigxMDAsIC01MCkpOworICAgIEVYUEVDVF9FUSgxNTAsIHNhdHVyYXRlZERpZmZlcmVu
Y2U8aW50MzJfdD4oNTAsIC0xMDApKTsKKworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NQVgsIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01B
WCAtIDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCwgMSkpOworICAgIEVY
UEVDVF9FUShJTlRfTUFYIC0gMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUFY
IC0gMSwgMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGlu
dDMyX3Q+KElOVF9NQVggLSAxLCAtMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NQVggLSAxLCAtMikpOworICAgIEVYUEVDVF9FUSgt
SU5UX01BWCArIDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMCwgSU5UX01BWCAtIDEp
KTsKKyAgICBFWFBFQ1RfRVEoLUlOVF9NQVgsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4o
LTEsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKC1JTlRfTUFYIC0gMSwgc2F0dXJhdGVk
RGlmZmVyZW5jZTxpbnQzMl90PigtMiwgSU5UX01BWCAtIDEpKTsKKyAgICBFWFBFQ1RfRVEoLUlO
VF9NQVggLSAxLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KC0zLCBJTlRfTUFYIC0gMSkp
OworCisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4o
SU5UX01JTiwgMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOICsgMSwgc2F0dXJhdGVkRGlmZmVy
ZW5jZTxpbnQzMl90PihJTlRfTUlOICsgMSwgMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBz
YXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NSU4gKyAxLCAxKSk7CisgICAgRVhQRUNU
X0VRKElOVF9NSU4sIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01JTiArIDEsIDIp
KTsKKworICAgIEVYUEVDVF9FUSgwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9N
SU4sIElOVF9NSU4pKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQz
Ml90PihJTlRfTUFYLCBJTlRfTUFYKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRl
ZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCwgSU5UX01JTikpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKaW5kZXggYWJkM2FmZGU5
MWYwOGU4Nzk0ZjEwYWJkNmQxMGRjMzg4ZDQ1YjI4NC4uMWRlY2YzMDczYWFmMzE0NWIxZDliOTcy
NWI1Y2Q1YmUzYTI3NzJlNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcApAQCAtNTIsMTIgKzUy
LDQ2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9T
dHJpbmdDb25jYXRlbmF0ZUNGLmg+CisjZW5kaWYKKwogI2lmIFVTRShDRikgJiYgIVBMQVRGT1JN
KFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKICNpbmNsdWRlICJXZWJBcmNoaXZlRHVtcFN1
cHBvcnQuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxXS1N0cmluZ1JlZj4gewor
cHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKFdLU3RyaW5nUmVmKTsKKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IFdLU3RyaW5nR2V0TGVuZ3RoKG1f
c3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cmlu
ZzsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhD
aGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV0tTdHJpbmdSZWYgbV9zdHJp
bmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+OjpTdHJpbmdU
eXBlQWRhcHRlcihXS1N0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0cmluZyB7IHN0cmluZyB9
Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJp
bmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciopIGNvbnN0Cit7Cit9CisKK3RlbXBsYXRlPD4g
aW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFy
PihVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAg
ICBXS1N0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIHJlaW50ZXJwcmV0X2Nhc3Q8V0tDaGFy
Kj4oZGVzdGluYXRpb24pLCBXS1N0cmluZ0dldExlbmd0aChtX3N0cmluZykpOworfQorCit9CisK
IG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eShX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKQpAQCAtODksNyArMTIzLDcg
QEAgc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLAogICAgIHJldHVybiBkdW1wUGF0aChjb250ZXh0LCBu
b2RlT2JqZWN0KTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHJhbmdlVG9TdHIoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxlUmFuZ2VI
YW5kbGVSZWYgcmFuZ2VSZWYpCitzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIHJhbmdlUmVmKQogewogICAgIGlmICghcmFuZ2VSZWYpCiAgICAgICAgIHJldHVybiAi
KG51bGwpIjsKQEAgLTEzMCw0MyArMTY0LDI2IEBAIHN0YXRpYyBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdhdGlvblR5cGUgdHlwCiAg
ICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5n
IHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQorc3Rh
dGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9u
UmVmKQogewogICAgIC8vIER1bXBSZW5kZXJUcmVlIGNhbGxzIC1bRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiBkZXNjcmlwdGlvbl0sIHdoaWNoIGp1c3QgZHVtcHMgY2xhc3MgbmFtZSBhbmQgb2JqZWN0
IGFkZHJlc3MuCiAgICAgLy8gTm8gZXhpc3RpbmcgdGVzdHMgYWN0dWFsbHkgaGl0IHRoaXMgY29k
ZSBwYXRoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgYmVjYXVzZSBXZWJDb3JlIGRvZXNu
J3QgY2FsbAogICAgIC8vIHRoZSBlZGl0aW5nIGNsaWVudCBpZiB0aGUgc3R5bGluZyBvcGVyYXRp
b24gc291cmNlIGlzIENvbW1hbmRGcm9tRE9NIG9yIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRl
cmZhY2UuCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiPERPTUNTU1N0eWxlRGVjbGFyYXRpb24gQUREUkVTUz4iKTsKLSAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiAiPERPTUNTU1N0
eWxlRGVjbGFyYXRpb24gQUREUkVTUz4iX3M7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBzdHJp
bmcoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
J3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3Jp
Z2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9z
dChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG9yaWdpbiksICd9Jyk7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5
UHJvdG9jb2wob3JpZ2luKSkuZ2V0KCksICIsICIsIGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNv
cHlIb3N0KG9yaWdpbikpLmdldCgpLCAiLCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmln
aW4pLCAnfScpOwogfQogCi1zdGF0aWMgV1RGOjpTdHJpbmcgZnJhbWVUb1N0cihXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lKQogewogICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGlmIChXS0J1
bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0Vt
cHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIm1haW4gZnJhbWUgXCIiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJtYWluIGZyYW1lIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1w
dHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiZnJhbWUgXCIiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG5hbWUpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworICAgIGJvb2wgaXNNYWluID0gV0tCdW5kbGVGcmFtZUlzTWFp
bkZyYW1lKGZyYW1lKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gaXNNYWluID8gIm1haW4gZnJhbWUiX3MgOiAiZnJhbWUgKGFub255bW91cyki
X3M7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoaXNNYWluID8gIm1haW4gZnJhbWUgXCIiIDogImZy
YW1lIFwiIiwgbmFtZS5nZXQoKSwgJyInKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzTG9j
YWxGaWxlU2NoZW1lKFdLU3RyaW5nUmVmIHNjaGVtZSkKQEAgLTIxMCw3ICsyMjcsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgZHVtcFJlc291cmNlVVJMKHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0cmlu
Z0J1aWxkZXImIHN0cmluZ0J1aQogICAgIGlmIChhc3NpZ25lZFVybHNDYWNoZSgpLmNvbnRhaW5z
KGlkZW50aWZpZXIpKQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhc3NpZ25lZFVybHND
YWNoZSgpLmdldChpZGVudGlmaWVyKSk7CiAgICAgZWxzZQotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIjx1bmtub3duPiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiPHVua25vd24+Iik7CiB9CiAKIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQ
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQpAQCAtMzkzLDc2ICs0MTAsNDMgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0KCkKIAogLy8gTG9hZGVyIENsaWVudCBDYWxs
YmFja3MKIAotLy8gU3RyaW5nIG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1l
IF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdLgotc3RhdGljIHZvaWQgZHVt
cEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKLXsKLSAgICBhdXRvIG5hbWUgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAgIGlmIChXS0J1bmRsZUZy
YW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFt
ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFp
biBmcmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJyInKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChXS1N0cmlu
Z0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSBcIiIpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
IicpOwotfQotCiBzdGF0aWMgdm9pZCBkdW1wTG9hZEV2ZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7Ci0gICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJh
bWUsIHN0cmluZ0J1aWxkZXIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0g
Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZXZlbnROYW1lKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAtICIsIGV2ZW50
TmFtZSwgJ1xuJykpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlcikKK3N0YXRpYyBTdHJpbmcgc3RyaW5nKFdLVVJMUmVxdWVz
dFJlZiByZXF1ZXN0KQogewogICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKICAgICBhdXRvIGZpcnN0UGFydHkgPSBhZG9wdFdLKFdLVVJMUmVxdWVz
dENvcHlGaXJzdFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7CiAgICAgYXV0byBodHRwTWV0aG9k
ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0KSk7Ci0KLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TVVJMUmVxdWVzdCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9y
VGVzdFJlc3VsdCh1cmwuZ2V0KCkpLCAiLCBtYWluIGRvY3VtZW50IFVSTCAiLCBwYXRoU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpLCAiLCBodHRwIG1ldGhvZCAiKTsKLSAg
ICBpZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpKQotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIihub25lKSIpOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoaHR0cE1ldGhvZCkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlcXVlc3QgVVJM
ICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAgICAgIiwgbWFp
biBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5Lmdl
dCgpKSwKKyAgICAgICAgIiwgaHR0cCBtZXRob2QgIiwgV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRo
b2QuZ2V0KCkpID8gIihub25lKSIgOiAiIiwgaHR0cE1ldGhvZC5nZXQoKSwgJz4nKTsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1
aWxkZXIsIGJvb2wgc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlKQorc3RhdGljIFN0
cmluZyBzdHJpbmcoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgYm9vbCBzaG91bGREdW1wUmVz
cG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7CiAgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVz
cG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAgaWYgKCF1cmwpIHsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlm
ICghdXJsKQorICAgICAgICByZXR1cm4gIihudWxsKSJfczsKKyAgICBpZiAoIXNob3VsZER1bXBS
ZXNwb25zZUhlYWRlcnMpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlc3Bv
bnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAgICAgICAg
ICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tVUkxSZXNwb25zZUhUVFBTdGF0dXNDb2RlKHJlc3Bv
bnNlKSwgJz4nKTsKICAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlc3Bv
bnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgaHR0cCBzdGF0
dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpKTsKLSAgICBp
ZiAoc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycykKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIiwgIiwgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KHJlc3BvbnNl
KSwgIiBoZWFkZXJzIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZygiPE5TVVJMUmVzcG9uc2UgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCh1cmwuZ2V0KCkpLAorICAgICAgICAiLCBodHRwIHN0YXR1cyBjb2RlICIsIFdLVVJMUmVzcG9u
c2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSksCisgICAgICAgICIsICIsIEluamVjdGVkQnVuZGxl
UGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNwb25zZSksICIgaGVhZGVycz4iKTsKIH0KIAog
I2lmICFQTEFURk9STShDT0NPQSkKLS8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igbm9uIGNv
Y29hIHBvcnRzLgotLy8gICAgICAgIFtHVEtdW1dQRV0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NDI5NQorCisvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG5v
bi1Db2NvYSBwb3J0cy4gW0dUS11bV1BFXSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg0Mjk1CiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVh
ZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKICAgICByZXR1cm4gMDsKIH0K
KwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChXS0Vycm9yUmVmIGVycm9yLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdC
dWlsZGVyKQpAQCAtNDgwLDcgKzQ2NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JE
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0Vycm9yUmVmIGVycm9yLCBTCiAKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TRXJyb3IgZG9tYWluICIsIGVycm9yRG9tYWluLCAi
LCBjb2RlICIsIGVycm9yQ29kZSk7CiAgICAgaWYgKGF1dG8gdXJsID0gYWRvcHRXSyhXS0Vycm9y
Q29weUZhaWxpbmdVUkwoZXJyb3IpKSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwg
ZmFpbGluZyBVUkwgXCIiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwu
Z2V0KCkpKSksICciJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZhaWxpbmcg
VVJMIFwiIiwgYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkuZ2V0KCksICciJyk7
CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKIH0KIApAQCAtNzAwLDcgKzY4NCw3IEBA
IHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIFN0cmluZ0J1aWxkZXImIHN0cmluCiAgICAgaWYgKGZhYnMoeCkgPD0gMC4wMDAwMDAwMSAm
JiBmYWJzKHkpIDw9IDAuMDAwMDAwMDEpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoc2hvdWxk
SW5jbHVkZUZyYW1lTmFtZSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoImZyYW1lICci
LCB0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpKSwgIicg
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAnIiwgYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKS5nZXQoKSwgIicgIik7CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoInNjcm9sbGVkIHRvICIsIHgsICcsJywgeSwgJ1xuJyk7CiB9CiAKQEAgLTc1OCw5
ICs3NDIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaQogICAgICAgICBpZiAoIWhhc0RvY3Vt
ZW50RWxlbWVudChzdWJmcmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHN1YmZyYW1lTmFtZSkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIidcbi0tLS0tLS0tXG4iKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIiwgc3ViZnJhbWVO
YW1lLmdldCgpLCAiJ1xuLS0tLS0tLS1cbiIpOwogCiAgICAgICAgIGR1bXBGcmFtZVRleHQoc3Vi
ZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQo
c3ViZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwpAQCAtNzgwLDggKzc2Miw3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFN0cmluZ0J1aWxkCiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNF
KERJUkVDVDJEKQogICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdl
YkFyY2hpdmUoZnJhbWUpKTsKICAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
KDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdl
dCgpKSkpOwotICAgIGF1dG8gY2ZTdHJpbmcgPSBXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhN
TFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGNmU3RyaW5nLmdldCgpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXZWJD
b3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEu
Z2V0KCkpLmdldCgpKTsKICNlbmRpZgogfQogCkBAIC04MDcsOSArNzg4LDkgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAgIHN3aXRjaCAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT53aGF0VG9EdW1wKCkpIHsKICAgICBjYXNlIFdoYXRUb0R1bXA6OlJlbmRlclRyZWU6
IHsKICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQcmludGluZygp
KQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhX
S0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGlu
ZyhtX3BhZ2UpKS5nZXQoKSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYWRv
cHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQ
cmludGluZyhtX3BhZ2UpKS5nZXQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRl
clRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fcGFnZSwgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5yZW5kZXJUcmVlRHVtcE9wdGlvbnMoKSkpLmdldCgpKSk7CisgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJUcmVlRXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
cmVuZGVyVHJlZUR1bXBPcHRpb25zKCkpKS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIFdoYXRUb0R1bXA6Ok1haW5GcmFtZVRleHQ6CkBAIC04OTAsMTkgKzg3MSwxMCBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tTdHJp
bmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURl
c2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlVGl0bGU6ICIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpIHsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJUSVRMRSBDSEFOR0VEOiAnIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJ1xuIik7Ci0gICAgfQotCisgICAgaWYgKGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdHJpbmcoZnJhbWUpLCAiIC0gZGlkUmVjZWl2
ZVRpdGxlOiAiLCB0aXRsZSwgJ1xuJyk7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiVElUTEUgQ0hBTkdFRDogJyIsIHRpdGxlLCAiJ1xuIik7CiAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCkBAIC05NTEsMTAg
KzkyMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUGVyZm9ybUNsaWVudFJlZGly
ZWN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGR1bXBGcmFt
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRv
VVJMOiAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybCksICdcbicpOwotICAgIGluamVj
dGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmpl
Y3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAtIHdpbGxQ
ZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1
cmwpLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uVHlwZSB0eXBlKQpAQCAtOTgyLDcgKzk1MSw3IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWUiKTsKIAogICAgIGlmICh1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVu
dHMgPSBXS0J1bmRsZUZyYW1lR2V0UGVuZGluZ1VubG9hZENvdW50KGZyYW1lKSkKLSAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKGZyYW1lVG9TdHIoZnJhbWUpLCAi
IC0gaGFzICIsIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cywgIiBvbnVubG9hZCBoYW5kbGVyKHMp
XG4iKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZyhzdHJp
bmcoZnJhbWUpLCAiIC0gaGFzICIsIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cywgIiBvbnVubG9h
ZCBoYW5kbGVyKHMpXG4iKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5k
bGVPbmxvYWRFdmVudHNGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQpAQCAtMTA0OSwx
MSArMTAxOCw4IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5k
UmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgICYmIGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7
CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgZHVtcFJlc291
cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiAtIHdpbGxTZW5kUmVxdWVzdCAiKTsKLSAgICAgICAgZHVtcFJlcXVl
c3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJpbmdCdWlsZGVy
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVkaXJlY3RSZXNwb25z
ZSAiKTsKLSAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEFsbEhUVFBSZWRpcmVjdGVkUmVzcG9uc2VIZWFkZXJzKCkpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiAtIHdpbGxTZW5kUmVxdWVzdCAiLCBzdHJpbmcocmVxdWVzdCksCisgICAgICAgICAgICAiIHJl
ZGlyZWN0UmVzcG9uc2UgIiwgc3RyaW5nKHJlc3BvbnNlLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBBbGxIVFRQUmVkaXJlY3RlZFJlc3BvbnNlSGVhZGVycygpKSwgJ1xu
Jyk7CiAgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKICAgICB9CiAKQEAgLTEwODYsMTEgKzEwNTIsNyBAQCBXS1VSTFJlcXVlc3RSZWYg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZQogICAgICAgICAgICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlzSFRUUE9ySFRUUFNT
Y2hlbWUobWFpbkZyYW1lU2NoZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3QobWFpbkZyYW1lSG9z
dC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJc0V4dGVybmFsICYm
ICFpc0FsbG93ZWRIb3N0KGhvc3QuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAi
LCB1cmxTdHJpbmcuZ2V0KCksICdcbicpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTExNyw5ICsxMDc5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS0IKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwogICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVJlc3Bv
bnNlICIpOwotICAgICAgICBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChyZXNwb25zZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCdcbicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkUmVjZWl2ZVJl
c3BvbnNlICIsIHN0cmluZyhyZXNwb25zZSksICdcbicpOwogICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCkBAIC0xMTMy
LDE0ICsxMDkyLDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9u
c2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgYXV0byBtaW1lVHlw
ZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlwZShyZXNwb25zZSkpOwog
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIGhhcyBNSU1FIHR5cGUgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcobWltZVR5cGVTdHJpbmcpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1cmxTdHJp
bmcuZ2V0KCksICIgaGFzIE1JTUUgdHlwZSAiLCBtaW1lVHlwZVN0cmluZy5nZXQoKSk7CiAKICAg
ICBTdHJpbmcgcGxhdGZvcm1NaW1lVHlwZSA9IHBsYXRmb3JtUmVzcG9uc2VNaW1lVHlwZShyZXNw
b25zZSk7CiAgICAgaWYgKCFwbGF0Zm9ybU1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwbGF0Zm9ybU1p
bWVUeXBlICE9IHRvV1RGU3RyaW5nKG1pbWVUeXBlU3RyaW5nKSkgewotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBidXQgcGxhdGZvcm0gcmVzcG9uc2UgaGFzICIpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwbGF0Zm9ybU1pbWVUeXBlKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiBidXQgcGxhdGZvcm0gcmVzcG9uc2UgaGFzICIsIHBsYXRmb3Jt
TWltZVR5cGUpOwogICAgIH0KIAogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAt
MTE2Miw3ICsxMTE5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaExvYWRG
b3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWUKIAogICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3Ry
aW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGaW5p
c2hMb2FkaW5nXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkRmluaXNoTG9h
ZGluZ1xuIik7CiAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCkBAIC0xMTc3LDcgKzExMzQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJh
bWVSZQogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGR1bXBSZXNvdXJj
ZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICIpOwogCiAgICAgZHVtcEVy
cm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJyb3IsIHN0cmluZ0J1aWxkZXIp
OwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAtMTE5OSw3ICsxMTU2LDYgQEAg
Ym9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENhY2hlUmVzcG9uc2UoV0tCdW5kbGVQYWdl
UmVmLCBXS0J1bmRsZUZyYW1lUmVmLAogICAgIHJldHVybiB0cnVlOwogfQogCi0KIC8vIFBvbGlj
eSBDbGllbnQgQ2FsbGJhY2tzCiAKIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJl
ZiBuYXZpZ2F0aW9uQWN0aW9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tUeXBlUmVmKiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTEyMjksMTMgKzExODUsOSBAQCBX
S0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5
QWN0aW9uVXNlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFBvbGljeUNhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uXG4iKTsKLSAgICAgICAgZHVtcFJlcXVlc3REZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIiwgV0tCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5
ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiIC0gZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIiwgc3RyaW5nKHJlcXVlc3QpLAorICAgICAgICAgICAg
IiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5
ZXMiIDogIm5vIiwKKyAgICAgICAgICAgICIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0g
IiwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZp
Z2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIiwgJ1xuJykpOwogICAgIH0KIAogICAgIGlmICgh
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgpKQpA
QCAtMTI0NSwxOSArMTE5NywxNiBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgIGF1dG8g
dXJsU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CiAKICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CiAgICAgaWYg
KGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpCi0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQo
dXJsLmdldCgpKSkpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYWRvcHRXSyhXS1VS
TENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKS5nZXQoKSk7CiAgICAgZWxzZQotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyh1cmwuZ2V0KCkpKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHdp
dGggbmF2aWdhdGlvbiB0eXBlIFwnIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRO
YXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlwnIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0so
V0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdldCgpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIiwgTmF2aWdhdGlvblR5cGVUb1N0cmluZyhX
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9u
KSkuZ2V0KCksICdcJycpOwogICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikp
OwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7CiAgICAgICAgIGF1dG8gbm9kZUhhbmRsZVJl
ZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJl
c3VsdFJlZi5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBv
cmlnaW5hdGluZyBmcm9tICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0
aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiBvcmlnaW5hdGluZyBmcm9tICIsIGR1bXBQYXRoKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgbm9kZUhhbmRsZVJlZi5nZXQoKSkpOwogICAgIH0KIAogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAtMTI3Nyw3ICsxMjI2LDcgQEAgV0tCdW5kbGVQ
YWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9u
c2UoV0tCdW5kbGVQYWcKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpICYm
IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSAm
JiBXS1VSTFJlc3BvbnNlSXNBdHRhY2htZW50KHJlc3BvbnNlKSkgewotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVsZWdh
dGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciLCB0
b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVz
cG9uc2UpKSksICJcJ1xuIikpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
b3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0
dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciLCBhZG9wdFdLKFdLVVJMUmVzcG9uc2VD
b3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9uc2UpKS5nZXQoKSwgIidcbiIpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91Z2g7CkBAIC0xMzY3
LDcgKzEzMTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbEFkZE1lc3NhZ2VUb0Nv
bnNvbGUoV0tTdHJpbmdSZWYgbWVzc2FnZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjpTdHJpbmcgbWVzc2FnZVN0
cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOworICAgIGF1dG8gbWVzc2FnZVN0cmluZyA9IHRv
V1RGU3RyaW5nKG1lc3NhZ2UpOwogICAgIHNpemVfdCBudWxsQ2hhclBvcyA9IG1lc3NhZ2VTdHJp
bmcuZmluZChVQ2hhcigwKSk7CiAgICAgaWYgKG51bGxDaGFyUG9zICE9IFdURjo6bm90Rm91bmQp
CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcudHJ1bmNhdGUobnVsbENoYXJQb3MpOwpAQCAtMTM5Myw3
ICsxMzQyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJUZXh0
KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBT
VEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6IiwgdG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4
dCksICdcbicpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJ
IERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCBzdGF0dXNiYXJUZXh0
LCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlw
dEFsZXJ0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0xNDE2LDcg
KzEzNjUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRDb25m
aXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRgogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdHJp
bmdSZWYgZGVmYXVsdFZhbHVlLCBXS0J1bmRsZUZyYW1lUmVmKQogewotICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBST01QVDogIiwgdG9XVEZT
dHJpbmcobWVzc2FnZSksICIsIGRlZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5nU3BhY2VTdHJpcFRy
YWlsaW5nU3BhY2VzQWRkTmV3bGluZSh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKSkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBST01Q
VDogIiwgbWVzc2FnZSwgIiwgZGVmYXVsdCB0ZXh0OiIsIGFkZExlYWRpbmdTcGFjZVN0cmlwVHJh
aWxpbmdTcGFjZXNBZGROZXdsaW5lKHRvV1RGU3RyaW5nKGRlZmF1bHRWYWx1ZSkpKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgaW50NjRfdCB0b3RhbEJ5dGVzTmVlZGVk
KQpAQCAtMTQ0Miw3ICsxMzkxLDcgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRF
eGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLAogewogICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNr
cygpKQotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERF
TEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCB0b1dURlN0cmluZyhkYXRh
YmFzZU5hbWUpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFr
ZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VR
dW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIGRhdGFiYXNlOiIsIGRh
dGFiYXNlTmFtZSwgJ1xuJykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEw
MjQgKiAxMDI0OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTUyNSw3ICsxNDc0LDcg
QEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIHJhbmdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0g
ICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxF
R0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwg
bV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5n
SW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicp
KTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0Vk
aXRpbmcoKTsKIH0KIApAQCAtMTUzNiw3ICsxNDg1LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRP
TVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicp
KTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTU0NiwyMiArMTQ5
NSwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZShXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgbm9kZSwgV0tCdW5kbGVSYQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUu
aXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewogICAgICAgICAiV2ViVmlld0luc2Vy
dEFjdGlvblR5cGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQiLAogICAg
ICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKICAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIG5vZGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVw
bGFjaW5nRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9T
dHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAgIiBzaG91
bGRJbnNlcnROb2RlOiIsIGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZSksCisg
ICAgICAgICAgICAiIHJlcGxhY2luZ0RPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIHJhbmdlVG9SZXBsYWNlKSwKKyAgICAgICAgICAgICIgZ2l2ZW5BY3Rpb246IiwgaW5z
ZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0sICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNTcy
LDIyICsxNTE2LDE3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnRUZXh0
KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSCiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIgKmluc2VydGFjdGlvbnN0cmluZ1tdID0geworICAgIHN0YXRpYyBjb25z
dGV4cHIgY29uc3QgY2hhciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CiAgICAgICAgICJXZWJW
aWV3SW5zZXJ0QWN0aW9uVHlwZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblBhc3Rl
ZCIsCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uRHJvcHBlZCIsCiAgICAgfTsKIAogICAg
IGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2Vy
dFRleHQ6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHQp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVwbGFjaW5nRE9NUmFu
Z2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAgIiBzaG91bGRJbnNlcnRUZXh0
OiIsIHRleHQsCisgICAgICAgICAgICAiIHJlcGxhY2luZ0RPTVJhbmdlOiIsIHN0cmluZyhtX3Bh
Z2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSwKKyAgICAgICAgICAgICIgZ2l2ZW5B
Y3Rpb246IiwgaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0sICdcbicpKTsKICAgICB9CiAgICAg
cmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7
CiB9CkBAIC0xNTk4LDEzICsxNTM3LDggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3Vs
ZERlbGV0ZVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmpl
Y3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRl
RE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURPTVJh
bmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAg
IHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygp
OwogfQogCkBAIC0xNjE0LDI3ICsxNTQ4LDE3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgZnJvbVJhCiAg
ICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmFmZmluaXR5c3RyaW5nW10gPSB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBhZmZpbml0eXN0cmluZ1tdID0gewogICAgICAg
ICAiTlNTZWxlY3Rpb25BZmZpbml0eVVwc3RyZWFtIiwKICAgICAgICAgIk5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIgogICAgIH07Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJvb2xzdHJp
bmdbXSA9IHsKLSAgICAgICAgIkZBTFNFIiwKLSAgICAgICAgIlRSVUUiCi0gICAgfTsKIAogICAg
IGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdl
VG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG9ET01SYW5nZToiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgYWZmaW5pdHk6Iik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFmZmluaXR5c3RyaW5nW2FmZmluaXR5XSk7IAotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzdGlsbFNlbGVjdGluZzoiKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm9vbHN0cmluZ1tzdGlsbFNlbGVjdGluZ10pOyAK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVu
ZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAg
ICAgICAgICIgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpLAorICAgICAgICAgICAgIiB0b0RPTVJhbmdlOiIsIHN0
cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpLAorICAgICAgICAgICAgIiBhZmZp
bml0eToiLCBhZmZpbml0eXN0cmluZ1thZmZpbml0eV0sCisgICAgICAgICAgICAiIHN0aWxsU2Vs
ZWN0aW5nOiIsIHN0aWxsU2VsZWN0aW5nID8gIlRSVUUiIDogIkZBTFNFIiwgJ1xuJykpOwogICAg
IH0KICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0Vk
aXRpbmcoKTsKIH0KQEAgLTE2NDYsMTMgKzE1NzAsOSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFn
ZTo6c2hvdWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUs
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
RURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc3R5bGVEZWNUb1N0cihzdHlsZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVj
dGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURToiCisgICAg
ICAgICAgICAiIHNob3VsZEFwcGx5U3R5bGU6Iiwgc3R5bGVEZWNUb1N0cihzdHlsZSksCisgICAg
ICAgICAgICAiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIH0KICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE2NjUsMTEgKzE1ODUs
NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVnaW5FZGl0aW5nKFdLU3RyaW5nUmVm
IG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6Iik7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6Iiwg
bm90aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTY4MCwxMSAr
MTU5Niw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFdLU3RyaW5n
UmVmIG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiIpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiLCBu
b3RpZmljYXRpb25OYW1lLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTE2OTUsMTEgKzE2MDcs
NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlm
aWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iiwgbm90aWZpY2F0aW9uTmFtZSwg
J1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9u
KFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xNzEwLDExICsxNjE4LDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBub3Rp
ZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCht
YWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIs
IG5vdGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTE3ODMsNyArMTY4Nyw3IEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBI
aXN0b3J5KCkKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygKICAgICAgICAgIlxuPT09PT09PT09
PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIsCi0gICAgICAgIHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlRHVtcEhpc3RvcnlGb3JUZXN0aW5nKG1fcGFnZSwg
dG9XSygiL0xheW91dFRlc3RzLyIpLmdldCgpKSkuZ2V0KCkpLAorICAgICAgICBhZG9wdFdLKFdL
QnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UsIHRvV0soIi9MYXlvdXRUZXN0
cy8iKS5nZXQoKSkpLmdldCgpLAogICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT1cbiIKICAgICApOwogfQo=
</data>
<flag name="commit-queue"
          id="449981"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428964</attachid>
            <date>2021-05-18 12:31:36 -0700</date>
            <delta_ts>2021-05-18 13:00:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210518123135.patch</filename>
            <type>text/plain</type>
            <size>147816</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
OWIzN2FlY2Q2MjVhOTU3ZjhmNDU0OGI0NWMxNjE3YWJmZTg1MGRiLi42NGI1NjQ2ZTYwMmM5ZjNj
NWU5MDRkODI5ZDE3NWVhZTQ1MGU1N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAyMS0wNS0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBmcm9tIFN0cmlu
Z0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKTogVXNlIFN0
cmluZ0J1aWxkZXI6OmNsZWFyIGluc3RlYWQgb2YKKyAgICAgICAgU3RyaW5nQnVpbGRlcjo6cmVz
aXplOyBubyBhZHZhbnRhZ2UgdG8gdGhlIGxhdHRlciBhZnRlciBjYWxsaW5nIFN0cmluZ0J1aWxk
ZXI6OnRvU3RyaW5nLgorCisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KTogVXBkYXRl
IGZvciBuYW1lIGNoYW5nZSBvZgorICAgICAgICBTdHJpbmdCdWlsZGVyOjpyZXNpemUgdG8gU3Ry
aW5nQnVpbGRlcjo6c2hyaW5rLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdGlvbik6IERpdHRvLgor
CiAyMDIxLTA1LTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFRlbXBvcmFyaWx5IHJldmVydCByMjc2NTkyIGFzIGl0IGJyZWFrcyBzb21lIG5hdGl2
ZSBhcHBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCmluZGV4IGJmM2UzNTdkYTYwNTZjZmI2ODZjZTU0MzkzMzJiMDQxN2RlMDE0NzMuLjE3
Mzk0OTNhZjNlOWMzYWUxYWE3MzgxYjhhODRjODE1OWMxN2U0ODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgz
IEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRl
ciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCisKKyAgICAgICAgVGhlIG5ldyBoZWFkZXIgbWFrZXMgQ0ZTdHJpbmdSZWYgYW5kIE5TU3Ry
aW5nIHdvcmsgd2l0aCBzdHJpbmcgY29uY2F0ZW5hdGlvbiwKKyAgICAgICAgd2hpY2ggbWVhbnMg
aXQgbm93IHdvcmtzIHdpdGggdGhlIHZhcmlhZGljIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCBhbmQg
bWFrZVN0cmluZywKKyAgICAgICAgYW5kIHN0aWxsIHdvcmtzIHdpdGggdGhlIHNpbmdsZS1hcmd1
bWVudCBTdHJpbmdCdWlsZGVyOjphcHBlbmQuIE1vcmUgZWZmaWNpZW50CisgICAgICAgIHRoYXQg
dGhlIG9sZCB2ZXJzaW9uIGJlY2F1c2UgaXQgZG9lcyBub3QgYWxsb2NhdGUgYSB0ZW1wb3Jhcnkg
V1RGOjpTdHJpbmcgZm9yCisgICAgICAgIHRoZSAxNi1iaXQgY2hhcmFjdGVyIHBhdGguCisKKyAg
ICAgICAgQWxzbyBtYWRlIG1hbnkgb3RoZXIgc21hbGwgaW1wcm92ZW1lbnRzIHRvIHRoZSBTdHJp
bmdCdWlsZGVyIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKworICAgICAgICAqIHd0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBSZW1vdmVkIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93
LCB3aGljaCB3YXMgb25seQorICAgICAgICBoZXJlIGZvciB1c2UgYnkgU3RyaW5nQnVpbGRlciwg
d2hpY2ggZG9lcyBub3QgdXNlIENoZWNrZWRBcml0aG1ldGljIGFueSBtb3JlLgorCisgICAgICAg
ICogd3RmL1BsYXRmb3JtRlRXLmNtYWtlOiBBZGRlZCBTdHJpbmdDb25jYXRlbmF0ZUNGLmguLgor
ICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0dG8uCisgICAgICAgICogd3RmL1Bs
YXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAqIHd0Zi9TYXR1cmF0ZWRBcml0aG1l
dGljLmg6IE1vdmVkIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaW5zaWRlIHRoZQorICAgICAg
ICBXVEYgbmFtZXNwYWNlLgorICAgICAgICAoV1RGOjpzaWduZWRBZGRJbnQzMk92ZXJmbG93cyk6
IFJlbmFtZWQgdGhpcyBmdW5jdGlvbi4gVGhlIHR5cGUgaGVyZSBpcworICAgICAgICBpbXBvcnRh
bnQsIGFuZCB3ZSBhcmUgbm90IGRvaW5nIGFueXRoaW5nIHRvIHByZXZlbnQgdHlwZSBjb252ZXJz
aW9uIG9yCisgICAgICAgIGNyZWF0ZSBhbWJpZ3VpdHksIHNvIGl0J3MgZ29vZCB0byBiZSBleHBs
aWNpdCBpbiB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgKFdURjo6c2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KTogUmVuYW1lZCB0aGlzIGZyb20gc2F0dXJhdGVkQWRkaXRpb24gZm9yCisgICAgICAg
IGNsYXJpdHkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3VtLCBzbyB0aGF0J3MgYSBiZXR0ZXIg
bmFtZSB0aGFuIGNhbGxpbmcKKyAgICAgICAgaXQgImFkZGl0aW9uIi4gQWxzbywgaXQncyBjbGVh
cmVyIHRvIGJlIGV4cGxpY2l0IGFib3V0IHRoZSByZXR1cm4gdHlwZS4KKyAgICAgICAgKFdURjo6
c2lnbmVkU3VidHJhY3RJbnQzMk92ZXJmbG93cyk6IFJlbmFtZWQuIFNhbWUgcmVhc29uIGFzIGFi
b3ZlLgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KTogRGl0dG8u
CisgICAgICAgIChXVEY6OnNhdHVyYXRlZFN1bSk6IEFkZGVkLiBEb2VzIHVuc2lnbmVkIGludGVn
ZXIgc2F0dXJhdGVkIGFkZGl0aW9uLgorICAgICAgICBUaGlzIG9uZSBjYW4gYmUgd3JpdHRlbiBp
biBhIHBvcnRhYmxlIG1hbm5lciBhbmQgc3RpbGwgZ2V0IHJlYWxseQorICAgICAgICBlZmZpY2ll
bnQgY29kZSBvbiBhdCBsZWFzdCBJbnRlbCBhbmQgQVJNNjQuCisgICAgICAgIChXVEY6OnNhdHVy
YXRlZFN1bSk6IEFkZGVkIGEgZnVuY3Rpb24gdGVtcGxhdGUgdGhhdCBsZXRzIGNhbGxlcnMgcGFz
cworICAgICAgICBsYXJnZXIgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBzYXR1cmF0ZWRTdW0sIHJh
dGhlciB0aGFuIGV4YWN0bHkgdHdvLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5jcHA6CisgICAgICAgIChXVEY6OmV4cGFuZGVkQ2FwYWNpdHkpOiBSZW5hbWVkIHRvIHVzZSB0
aGUgdGVybSBjYXBhY2l0eSByYXRoZXIgdGhhbgorICAgICAgICBsZW5ndGggZm9yIHRoZSBuZXcg
cmVxdWlyZWQgY2FwYWNpdHkuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmRpZE92ZXJm
bG93KTogSW1wbGVtZW50IHRoZSBuZXcgYXBwcm9hY2ggdG8KKyAgICAgICAgb3ZlcmZsb3csIG1l
YW5pbmcgd2UgbmVlZCB0byB3cml0ZSB0aGUgQ1JBU0goKSBoZXJlIGV4cGxpY2l0bHkgYW5kCisg
ICAgICAgIGluIHRoZSBub24tY3Jhc2hpbmcgbW9kZSwgc2V0IG1fbGVuZ3RoLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZyBjb25zdCk6IENoYW5nZWQgdGhlIG92ZXJm
bG93IGNoZWNrCisgICAgICAgIGludG8gYSBSRUxFQVNFX0FTU0VSVC4gVGhpcyBpcyBub3cgcmVz
cG9uc2libGUgZm9yIGRvaW5nIHRoZSBjaGVjayB0aGF0CisgICAgICAgIGNhbGxlcnMgd2VyZSBk
b2luZyBlYXJsaWVyLCBzbyB3ZSB3YW50IGl0IGluIHByb2R1Y3Rpb24gYnVpbGRzLiBBbHNvCisg
ICAgICAgIHNpbXBsaWZpZWQgdGhpcyBzaW5jZSBvdXIgbV9sZW5ndGggbWVtYmVyIGlzIGEgc2lt
cGxlIGludGVnZXIgbm93LAorICAgICAgICBhbmQgcmVtb3ZlZCB0aGUgdW51c2VkIG1faXNSZWlm
aWVkLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzaHJpbmspOiBSZW5hbWVkIHRoaXMg
dG8gc2hyaW5rIHRvIG1hdGNoIHRoZQorICAgICAgICBWZWN0b3I6OnNocmluayBmdW5jdGlvbiwg
c2luY2UgdGhpcyBoYXMgbmV2ZXIgc3VwcG9ydGVkIG1ha2luZyB0aGUKKyAgICAgICAgYnVpbGRl
ciBsYXJnZXIuIFJlbW92ZWQgdW5uZWNlc3Nhcnkgb3ZlcmZsb3cgY2hlY2tzLCBzaW5jZSBzaHJp
bmtpbmcKKyAgICAgICAgY2Fubm90IGNhdXNlIG92ZXJmbG93LgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6IFJlcGxhY2VkIHR3byBzZXBhcmF0ZSBmdW5jdGlv
bnMKKyAgICAgICAgd2l0aCBhIHNpbmdsZSBzaW1wbGVyIGZ1bmN0aW9uIHRlbXBsYXRlLiBSZW1v
dmVkIGV4dHJhIG92ZXJmbG93IGNoZWNrcworICAgICAgICBiZWNhdXNlIHRoZSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkIGZ1bmN0aW9uIGFscmVhZHkgZG9lcworICAgICAgICB0
aGUgb25seSBvdmVyZmxvdyBjaGVjayB3ZSBuZWVkLiBBbHNvIG1vdmUgdG8gU3RyaW5nSW1wbDo6
Y29weUNoYXJhY3RlcnMKKyAgICAgICAgZm9yIGNvcHlpbmcgY2hhcmFjdGVycyByYXRoZXIgdGhh
biB1c2luZyBzdGQ6Om1lbWNweSBkaXJlY3RseS4KKyAgICAgICAgUmVtb3ZlZCBjb2RlIHRvIHNl
dCBtX2lzOEJpdCBhbmQgbV9idWZmZXJDaGFyYWN0ZXJzLgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyKTogUmVwbGFjZWQgdHdvIHNlcGFyYXRlCisgICAgICAg
IGZ1bmN0aW9ucyB3aXRoIGEgZnVuY3Rpb24gdGVtcGxhdGUgYW5kIGEgY292ZXIgdGhhdCBjYWxs
cyB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIGZvciBw
bGFjZXMgd2hlcmUgd2UgYXJlbid0CisgICAgICAgIGFscmVhZHkgaW4gY2hhcmFjdGVyLXR5cGUt
c3BlY2lmaWMgY29kZSBwYXRocy4gVGhpcyB2ZXJzaW9uIG5vdworICAgICAgICBzdXBwb3J0cyBh
bGxvY2F0aW5nIGEgYnVmZmVyIGZvciB0aGUgZmlyc3QgdGltZSBpbiBjYXNlcyB3aGVyZQorICAg
ICAgICB3ZSBoYXZlIG1fc3RyaW5nIGFuZCBub3QgbV9idWZmZXIsIHdoaWNoIHVzZWQgdG8gYmUg
aGFuZGxlZCBhdAorICAgICAgICB0aGUgaGlnaGVyIGxldmVsLiBSZW1vdmVkIGNvZGUgdG8gc2V0
IG1fYnVmZmVyQ2hhcmFjdGVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cmVzZXJ2
ZUNhcGFjaXR5KTogUmV3cm90ZSBmb3Igc2ltcGxpY2l0eS4KKyAgICAgICAgQnkgcmVseWluZyBv
biB0aGUgb3ZlcmZsb3cgY2hlY2tpbmcgaW5zaWRlIHJlYWxsb2NhdGVCdWZmZXIgYW5kCisgICAg
ICAgIGFsbG9jYXRlQnVmZmVyIHdlIG5vIGxvbmdlciBuZWVkIGNoZWNraW5nIG9mIHRoZSBwYXNz
ZWQtaW4gdmFsdWUKKyAgICAgICAgYXQgdGhpcyBsZXZlbC4KKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKTogUmVtb3ZlZCB0aGUKKyAgICAgICAg
dmVyc2lvbiBvZiB0aGlzIHRoYXQgdGFrZXMgYWRkaXRpb25hbExlbmd0aCBzaW5jZSBpdCdzCisg
ICAgICAgIHBvdGVudGlhbGx5IGNvbmZ1c2luZyB0byBoYXZlIGEgZmFtaWx5IG9mIGZ1bmN0aW9u
cyB0aGF0IGhhdmUgdGhlCisgICAgICAgIHNhbWUgbmFtZSBhbmQgdGFrZSB0aGUgc2FtZSB0eXBl
IG9mIGFyZ3VtZW50LCBidXQgaW50ZXJwcmV0IGl0CisgICAgICAgIHN1YnRseSBkaWZmZXJlbnRs
eS4gU3RyZWFtbGluZWQgdGhlIGNvZGUgdXNpbmcgc3RkOjpleGNoYW5nZS4KKyAgICAgICAgVGhp
cyBmdW5jdGlvbiBub3cgYWxzbyBpbmNsdWRlcyB0aGUgbG9naWMgZnJvbSB0aGUgZnVuY3Rpb24g
bmFtZWQKKyAgICAgICAgZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hl
Y2ssIHdoaWNoIHdhcyBzdWJ0bHkKKyAgICAgICAgbWlzbmFtZWQgc2luY2UgdGhhdCB3YXMgbm90
IHRoZSBvbmx5IHNlbWFudGljIGRpZmZlcmVuY2UuIEFsc28KKyAgICAgICAgcmVtb3ZlZCB0aGUg
QUxXQVlTX0lOTElORSBiZWNhdXNlIHRoZSBjb21waWxlciB3aWxsIGRvIHRoZSByaWdodAorICAg
ICAgICB0aGluZyB3aXRob3V0IHN1Y2ggaGVhdnkgaGFuZGVkIGFkdmljZS4KKyAgICAgICAgKFdU
Rjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UpOiBTdHJl
YW1saW5lZAorICAgICAgICB0aGlzIGJ5IHVzaW5nIHN0ZDo6ZXhjaGFuZ2UgYW5kIHJlbW92ZWQg
YWRkaXRpb25hbCBvdmVyZmxvdyBjaGVja3MKKyAgICAgICAgYXQgdGhpcyBsZXZlbCBzaW5jZSBy
ZWFsbG9jYXRlQnVmZmVyIGFscmVhZHkgZG9lcyB0aGVtLiBBbHNvIGFkZGVkCisgICAgICAgIGEg
Y2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBuZXcgdG90YWwgbGVuZ3RoIGlzIDAsIHdoaWNo
IHdvdWxkCisgICAgICAgIG5vdCBiZSBoYW5kbGVkIGNvcnJlY3RseSBhbmQgZWZmaWNpZW50bHkg
YnkgcmVhbGxvY2F0ZUJ1ZmZlci4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nTENoYXIpOiBSZW5hbWVkIHRoaXMKKyAgICAgICAgZnJvbSBleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmc4LCBzaW5jZSBpdCdzIG5vdyBpZGVudGljYWwgdG8gY2FsbGlu
ZworICAgICAgICBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8TENoYXI+LCBleGNlcHQgZm9yIGlu
bGluaW5nIGFuZCBsaW5rYWdlLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmdXaXRoVXBjb252ZXJ0KToKKyAgICAgICAgUmVuYW1lZCB0aGlzIGZy
b20gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nMTYuIEl0IGlzIGRpZmZlcmVudCBmcm9tCisgICAg
ICAgIHRoZSBvdGhlciBleHRlbmRCdWZmZXIgZnVuY3Rpb25zIGJlY2F1c2UgaXMgc3VwcG9ydHMg
dXBjb252ZXJ0aW5nCisgICAgICAgIGZyb20gTENoYXIgdG8gVUNoYXIuIExpa2UgdGhlIG90aGVy
cyBpdCByZWxpZXMgb24gYWxsb2NhdGVCdWZmZXIKKyAgICAgICAgZm9yIHRoZSBvdmVyZmxvdyBj
aGVja2luZy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVycyk6
IFJlbW92ZWQgYW4gdW5uZWNlc3NhcnkKKyAgICAgICAgYXNzZXJ0aW9uIHRoYXQgdGhlIGNoYXJh
Y3RlcnMgcG9pbnRlciBpcyBub24tbnVsbDsgdGhhdCB3aWxsIGZhaWwKKyAgICAgICAgaW4gYW4g
b2J2aW91cyB3YXkgd2l0aG91dCBhbiBhc3NlcnRpb24uIFNpbXBsaWZpZWQgdGhlIGxvZ2ljIGFu
ZAorICAgICAgICByZW1vdmVkIHNvbWUgaW52YXJpYW50IGFzc2VydGlvbnMgdGhhdCBkb24ndCBo
ZWxwIHVzIG11Y2guIENoYW5nZWQKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2tpbmcgYnkgdXNpbmcg
c2F0dXJhdGVkU3VtIHRvIGNvbXB1dGUgdGhlIG5ldyBsZW5ndGguCisgICAgICAgIEluIG92ZXJm
bG93IGNhc2VzLCB0aGUgbmV3IHN1bSB3aWxsIGJlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtCisg
ICAgICAgIHN0cmluZyBsZW5ndGgsIGJ1dCB3aWxsIGZpdCBpbiBhbiB1bnNpZ25lZCwgc28gd2Ug
Y2FuIHBhc3MgaXQKKyAgICAgICAgZG93biB0byBsb3dlciBsZXZlbHMgYW5kIGxldCBmdW5jdGlv
bnMgbGlrZSByZWFsbG9jYXRlQnVmZmVyIGRvCisgICAgICAgIHRoZSBhY3R1YWwgb3ZlcmZsb3cg
Y2hlY2tpbmcuIEFsc28gdXNlIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOiBSZW1vdmVkIHRoZSBDRlN0cmluZ1JlZiBvdmVy
bG9hZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6c2hvdWxkU2hyaW5rVG9GaXQgY29u
c3QpOiBSZW5hbWUgdGhpcyBmcm9tCisgICAgICAgIGNhblNocmluay4gU2ltcGxpZnkgdGhlIGZ1
bmN0aW9uIGEgYml0IGFuZCByZW1vdmUgdGhlIHZhZ3VlIEZJWE1FCisgICAgICAgIHRoYXQgc2F5
cyAidGhpcyBzaG91bGQgYmUgdHVuZWQiLiBUaGF0IG1heSBiZSBzbywgYnV0IHRoZSBGSVhNRQor
ICAgICAgICBpcyBub3QgcmVhbGx5IGRyaXZpbmcgdXMgdG8gYWN0aW9uLgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCk6IFNpbXBsaWZ5IGJ5IHVzaW5nIHRoZSBuZXcK
KyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlciBhbmQgc3RkOjpleGNoYW5nZS4gUmVtb3ZlZCB1bm5l
ZWRlZCBhc3NlcnRpb24KKyAgICAgICAgYWJvdXQgb3ZlcmZsb3cgdGhhdCBkb2Vzbid0IGhlbHAg
dXMgbWFpbnRhaW4gdGhlIGludmFyaWFudC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6
aXNBbGxBU0NJSSBjb25zdCk6IFdhcyB0ZW1wdGVkIHRvIHJlbW92ZQorICAgICAgICB0aGlzIGZ1
bmN0aW9uLCBidXQgZm9yIG5vdyBqdXN0IG1hZGUgaXQgdXNlIHRoZSBTdHJpbmdWaWV3CisgICAg
ICAgIHZlcnNpb24gZm9yIGJyZXZpdHkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg6IFJlbW92ZWQgbWFueSB1bm5lZWRlZCBpbmNsdWRlcywgYW5kCisgICAgICAgIG5vdGFi
bHkgaW5jbHVkZWQgU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluc3RlYWQgb2YKKyAgICAgICAgQ2hl
Y2tlZEFyaXRobWV0aWMuaCBiZWNhdXNlIHdlIG5vdyB1c2UgdGhlIGZvcm1lciBpbnN0ZWFkIG9m
IHRoZQorICAgICAgICBsYXR0ZXIuIENoYW5nZWQgdGhlIG92ZXJmbG93IGNoZWNraW5nIGltcGxl
bWVudGF0aW9uIHRvIHdvcmsKKyAgICAgICAgbW9yZSBzaW1wbHkgYmFzZWQgb24gc2F0dXJhdGVk
IGFkZGl0aW9uIHJhdGhlciB0aGFuIENoZWNrZWQuCisgICAgICAgIFRoaXMgYWxsb3dlZCB1cyB0
byBnZXQgcmlkIG9mIGRlcGVuZGVuY3kgb24gb3VyIG93biB1bmlxdWUgbW9kZQorICAgICAgICBm
b3IgQ2hlY2tlZCwgY2FsbGVkIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93LiBSZW1vdmVkIGEK
KyAgICAgICAgY29tbWVudCBhYm91dCBtYWtpbmcgYSB0ZW1wbGF0aXplZCB2ZXJzaW9uIG9mIFN0
cmluZ0J1aWxkZXIuCisgICAgICAgIFdlIGNhbiBkbyBpdCBpZiB3ZSBsaWtlLCBidXQgZG9lcyBu
b3Qgc2VlbSB1cmdlbnQuIE1vdmVkCisgICAgICAgIGZ1Y250aW9uIGJvZGllcyBvdXQgb2YgdGhl
IGNsYXNzIGRlZmluaXRpb24gc28gaXQncyBlYXNpZXIgdG8KKyAgICAgICAgc2VlIHdoYXQncyBn
b2luZyBvbiBpbiB0aGUgY2xhc3MuIFNpbmNlIG1fbGVuZ3RoIGlzIG5vdyBhbgorICAgICAgICBv
cmRpbmFyeSBpbnRlZ2VyLCB0aGUgY2hlY2sgZm9yIG92ZXJmbG93ZWQgc2ltcGx5IGNoZWNrcyB0
byBzZWUKKyAgICAgICAgaWYgdGhlIGxlbmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBz
dHJpbmcgbGVuZ3RoLiBXaGVuIHdlCisgICAgICAgIGVuY291bnRlciBvdmVyZmxvdyB0aGF0IGlz
IG5vdCBhYm91dCBsZW5ndGggY29tcHV0YXRpb24sIHdlIHNldAorICAgICAgICB0aGUgbGVuZ3Ro
IHRvIHRoZSBtYXhpbXVtIGludGVnZXIgdG8gaW5kaWNhdGUgdGhlIGZhaWx1cmUuCisgICAgICAg
IERlbGV0ZWQgdGhlIGFwcGVuZCBvdmVybG9hZHMgZm9yIENGU3RyaW5nUmVmIGFuZCBOU1N0cmlu
Zy4KKyAgICAgICAgUmVtb3ZlZCBtX2J1ZmZlckNoYXJhY3RlcnMsIG1faXM4Qml0LCBhbmQgbV9p
c1JlaWZpZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOiBT
aW1wbGlmaWVkIHRoZSBjb25zdHJ1Y3RvcgorICAgICAgICBzaW5jZSB3ZSBvbmx5IGhhdmUgdG8g
aW5pdGlhbGl6ZSB0aGUgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgbWVtYmVyLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6IEZpeGVkIGEgbWlzdGFrZSB3aGVyZSB0aGlzIHdh
cyBub3QKKyAgICAgICAgcmVzZXR0aW5nIHRoZSBtX2lzUmVpZmllZCBmbGFnLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpzd2FwKTogVXBkYXRlZCBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0
YSBtZW1iZXJzLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpvcGVyYXRvciBTdHJpbmdW
aWV3IGNvbnN0KTogTW92ZWQgb3V0IG9mIGxpbmUuCisgICAgICAgIE1hZGUgc3VyZSB0byBjYWxs
IHRoZSBsZW5ndGgoKSBmdW5jdGlvbiBzbyB3ZSBjcmFzaCBpZiB0aGlzIGlzCisgICAgICAgIGNh
bGxlZCBhZnRlciBvdmVyZmxvdy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5k
KTogUmVtb3ZlIHNvbWUgb2YgdGhlIHVubmVjZXNzYXJ5IGNoZWNrcworICAgICAgICBhbmQgc3Bl
Y2lhbCBjYXNlcyBpbiB0aGUgdmFyaW91cyB2ZXJzaW9ucyBvZiBhcHBlbmQuIE1vc3Qgb2YgdGhl
CisgICAgICAgIGNoZWNraW5nIGlzIGRvbmUgaW5zaWRlIGFwcGVuZENoYXJhY3RlcnMsIHdpdGgg
b25seSBhIGZldyBleGNlcHRpb25zLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBl
bmRTdWJzdHJpbmcpOiBNb3ZlZCBvdXQgb2YgdGhlIGNsYXNzCisgICAgICAgIGRlZmluaXRpb24g
d2l0aG91dCBtYWtpbmcgc2lnbmlmaWNhbnQgY2hhbmdlcy4KKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVyKTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OnRvU3RyaW5nKTogR3JlYXRseSBzaW1wbGlmaWVkIHRoaXMgZnVuY3Rpb24KKyAgICAg
ICAgYnkgcmVseWluZyBvbiBvdmVyZmxvdyBjaGVja2luZyBpbiB0aGUgcmVpZnlTdHJpbmcgZnVu
Y3Rpb24gaW5zdGVhZAorICAgICAgICBvZiBkb2luZyBpdCBoZXJlIGFuZCByZW1vdmluZyB1bm5l
ZWRlZCBpbnZhcmlhbnQgYXNzZXJ0aW9ucy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6
dG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OnRvQXRvbVN0cmluZyBjb25zdCk6IFJld3JvdGUgdGhpcyB0byBzdHJlYW1s
aW5lLAorICAgICAgICByZW1vdmluZyBleHBsaWNpdCBvdmVyZmxvdyBjaGVja3MuCisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6Omxlbmd0aCBjb25zdCk6IE1vdmVkIG91dCBvZiB0aGUgY2xh
c3MKKyAgICAgICAgZGVmaW5pdGlvbiB3aXRob3V0IG1ha2luZyBzaWduaWZpY2FudCBjaGFuZ2Vz
LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjYXBhY2l0eSBjb25zdCk6IERpdHRvLgor
ICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpvcGVyYXRvcltdIGNvbnN0KTogRGl0dG8uCisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMgY29uc3QpOiBJbXBsZW1lbnRl
ZCB0aGlzIG9wZXJhdGlvbgorICAgICAgICBpbiB0aGUgZnVuY3Rpb24gdGVtcGxhdGUuIE5vdyBy
YXRoZXIgdGhhbiBoYXZpbmcgdGhpcyBjYWxsIHRoZQorICAgICAgICBjaGFyYWN0ZXJzOCBhbmQg
Y2hhcmFjdGVyczE2IGZ1bmN0aW9ucywgdGhleSBjYW4gY2FsbCBpdC4KKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4pOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJDaGFyYWN0ZXJzPFVDaGFyPik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZEZyb21BZGFwdGVycyk6
IFVzZSBzYXR1cmF0ZWRTdW0gdG8KKyAgICAgICAgY29tcHV0ZSB0aGUgcmVxdWlyZWQgbGVuZ3Ro
LCB3aGljaCBhbGxvd3MgdGhlIGV4dGVuZEJ1ZmZlcgorICAgICAgICBmdW5jdGlvbnMgdG8gZG8g
b3ZlcmZsb3cgY2hlY2tpbmcgd2l0aG91dCBoYXZpbmcgdG8gdGFrZSBzcGVjaWFsCisgICAgICAg
IGNoZWNrZWQgaW50ZWdlciB0eXBlcyBmb3IgYXJndW1lbnRzLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjplcXVhbCk6IEltcGxlbWVudCB1c2luZyBTdHJpbmdWaWV3LgorCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nKTogU2ltcGxpZmllZCB0aGUgY2hlY2tlZAor
ICAgICAgICBhcml0aG1ldGljIGZvciBjb21wdXRpbmcgdGhlIHJlcXVpcmVkIGNhcGFjaXR5LiBV
cGRhdGVkIHNpbmNlIHdlCisgICAgICAgIHJlbW92ZWQgbV9idWZmZXJDaGFyYWN0ZXJzIGFuZCBj
aGFuZ2VkIHRoZSB0eXBlIG9mIG1fbGVuZ3RoLgorCisgICAgICAgICogd3RmL3RleHQvY2YvU3Ry
aW5nQ29uY2F0ZW5hdGVDRi5oOiBBZGRlZC4gU3BlY2lhbGl6ZXMgU3RyaW5nVHlwZUFkYXB0ZXIg
Zm9yCisgICAgICAgIGJvdGggQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nICouIElmIENGU3RyaW5n
R2V0Q1N0cmluZ1B0ciB3b3JrcyBmb3IgTGF0aW4tMSwgdGhlbgorICAgICAgICBkb2VzIHRoZSA4
LWJpdCBjb2RlIHBhdGgsIG90aGVyd2lzZSB0aGUgMTYtYml0LgorCisgICAgICAgICogd3RmL3Rl
eHQvY29jb2EvVGV4dFN0cmVhbUNvY29hLm1tOiBJbmNsdWRlIFN0cmluZ0NvbmNhdGVuYXRlQ0Yu
aCwgc2luY2UgaXQncworICAgICAgICBub3cgbmVlZGVkIHRvIHVzZSBDRlN0cmluZ1JlZiB3aXRo
IFN0cmluZ0J1aWxkZXIuCisKIDIwMjEtMDUtMTggIFlvc2hpYWtpIEppdHN1a2F3YSAgPHlvc2hp
YWtpLmppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEZpeCBQbGF5
U3RhdGlvbiBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E1Njc1ZGQ3N2Y4MTM0OWY3ZTA4ZmZmNWJlZjZj
NzFlYWIzODgyMy4uYzAxYTIyNDkxODM5YTA0OWNlMDliZTc4MWRiMzA2OWM3YzViOTNiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBw
b3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBNb2R1bGVzL2FpcnBsYXkvV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVByb2R1Y2Vy
U3RhdGVTdHJpbmcpOiBVc2UgU3RyaW5nQnVpbGRlciBleGNsdXNpdmVseSBpbnN0ZWFkIG9mCisg
ICAgICAgIG1peGluZyBpdCB3aXRoIG1ha2VTdHJpbmcuIEFsc28gdXBkYXRlZCBmb3IgU3RyaW5n
QnVpbGRlcjo6c2hyaW5rIG5hbWUuCisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJpcFRyYWlsaW5nTmV3bGluZSk6IFVw
ZGF0ZWQgZm9yIFN0cmluZ0J1aWxkZXI6OnNocmluayBuYW1lLgorCisgICAgICAgICogcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOiBUd2Vh
a2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVu
ZENTUyk6IFVzZSB2YXJpYWRpYyBTdHJpbmdCdWlsZGVyOjphcHBlbmQgaW5zdGVhZCBvZiBtYW55
CisgICAgICAgIHNlcGFyYXRlIGNhbGxzLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MgY29uc3QpOgorICAgICAg
ICBUd2Vha2VkIGNvZGluZyBzdHlsZSBhIGJpdCwgYW5kIHVzZSB2YXJpYWRpYyBTdHJpbkJ1aWxk
ZXI6OmFwcGVuZCBjYWxscworICAgICAgICB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyBh
bmQgc3RyZWFtbGluZSB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSBjb25zdCk6CisgICAg
ICAgIERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWNlc3NhcnkgY2hlY2tzIHRoYXQgc3RyaW5ncyBh
cmUgZW1wdHkgYmVmb3JlIGFwcGVuZGluZy4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnNBc1RleHQpOgorICAgICAgICBVcGRh
dGVkIGZvciBTdHJpbmdCdWlsZGVyOjpzaHJpbmsgbmFtZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L0xheW91dFVuaXQuaDogVXBkYXRlZCBmb3Igc2F0dXJhdGVkU3VtL0RpZmZlcmVuY2UgbmFtZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29r
aWVzRm9yU2Vzc2lvbiBjb25zdCk6IFR3ZWFrZWQgY29kaW4KKyAgICAgICAgc3R5bGUgYSBiaXQs
IGFuZCB1c2UgdmFyaWFkaWMgU3RyaW5CdWlsZGVyOjphcHBlbmQgY2FsbHMgdG8gcmVkdWNlIHRo
ZQorICAgICAgICBudW1iZXIgb2YgY2FsbHMgYW5kIHN0cmVhbWxpbmUgdGhlIGNvZGUuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
bGFuQ291bnRlcik6IFVwZGF0ZWQgZm9yIHNhdHVyYXRlZFN1bSBuYW1lLgorICAgICAgICAqIHN0
eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKTogRGl0dG8uCisKKyAgICAgICAgKiBzdmcvU1ZH
UGF0aFN0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ0J1
aWxkZXI6OnJlc3VsdCk6IFVwZGF0ZWQgZm9yIFN0cmluZ0J1aWxkZXI6OnNocmluayBuYW1lLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cGFnZU1lZGlhU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2F2ZVJlc3VsdFRvU3RyaW5nKTogRGl0
dG8uCisKIDIwMjEtMDUtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBVc2UgVVRGLTggaW50ZXJuYWxseSBmcm9tIFN0cmluZ3MgaW5zaWRlIFNRTGl0ZVN0YXRl
bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCAzYmVjZWZmZTc1NjU0MWM4YWIzMjZkZWJkM2IwZDQ5YTRhYzJkZjMz
Li41MWFkMzQwNzljNjQ0M2ZkN2FkZDA2ZWE1NjQxMDRiYzIwOGRlYmJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0IGZyb20gU3Ry
aW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKTogVXNlIG1ha2VTdHJpbmcgaW5zdGVhZAor
ICAgICAgICBvZiBTdHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE4ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGxvZ2dpbmcgbWluaW1hbCBpbmZv
IGFib3V0IHVwbG9hZGluZyBtZWRpYSBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAppbmRleCAzMzdjYTdlZTBlMjk1OTBiMzVm
MDgxYWM3M2I4ZDU5YjgyMzAyOWE1Li5lZjg5YWVkNWRhZjU5NDViYjE3NGEzMzBmZTlmYzZkNDlm
MmEwMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxl
CiAgICAgICAgIGNhc2UgSlNPTkxvZ1ZhbHVlOjpUeXBlOjpKU09OOgogICAgICAgICAgICAgaWYg
KGJ1aWxkZXIubGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBtX2pzb25Mb2dWYWx1ZXMuYXBw
ZW5kKHsgSlNPTkxvZ1ZhbHVlOjpUeXBlOjpTdHJpbmcsIGJ1aWxkZXIudG9TdHJpbmcoKSB9KTsK
LSAgICAgICAgICAgICAgICBidWlsZGVyLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgICAgICBidWls
ZGVyLmNsZWFyKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fanNvbkxvZ1ZhbHVl
cy5hcHBlbmQobWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05P
YmplY3QuY3BwCmluZGV4IDVlMWNjOWZiZDJlMTUxZjZkMzc4NDA0ZTYwY2ZhOWJiOWU3NmU3NGQu
LjYxMGYzNmNmZWJjZGI0NzdhOTI0NGRlOGQ4YjA4M2E4NGNkNjc1NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCkBAIC01NzUsNyArNTc1LDcgQEAg
Ym9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXIm
IHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAgICAgICAgIC8vIFRoaXMgb25seSBvY2N1cnMg
d2hlbiBnZXQgYW4gdW5kZWZpbmVkIHZhbHVlIG9yIGEgc3ltYm9sIHZhbHVlIGZvcgogICAgICAg
ICAgICAgLy8gYW4gb2JqZWN0IHByb3BlcnR5LiBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0
aGUgc2VwYXJhdG9yIGFuZAogICAgICAgICAgICAgLy8gcHJvcGVydHkgbmFtZSB0aGF0IHdlIGFs
cmVhZHkgYXBwZW5kZWQsIHNvIHJvbGwgYmFjay4KLSAgICAgICAgICAgIGJ1aWxkZXIucmVzaXpl
KHJvbGxCYWNrUG9pbnQpOworICAgICAgICAgICAgYnVpbGRlci5zaHJpbmsocm9sbEJhY2tQb2lu
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVNldC5jcHAKaW5kZXggNjVlYTM1NDU5YzQ0OTc4NDJiNThhYTNiNGQyYzE2YWJj
YzlmZTE1Ni4uNzIxNDEwYjEwZGI0MWFiOTgyYTk4OGY1OWM2MWI3NTA0MWM1ODI0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKQEAgLTQxOSw3ICs0MTksNyBA
QCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnN0cmluZ1JlcHJlc2VudGF0aW9uKCkKICAgICB9CiAK
ICAgICBpZiAocmVwcmVzZW50YXRpb24ubGVuZ3RoKCkgPj0gMykKLSAgICAgICAgcmVwcmVzZW50
YXRpb24ucmVzaXplKHJlcHJlc2VudGF0aW9uLmxlbmd0aCgpIC0gMik7CisgICAgICAgIHJlcHJl
c2VudGF0aW9uLnNocmluayhyZXByZXNlbnRhdGlvbi5sZW5ndGgoKSAtIDIpOwogCiAgICAgcmVw
cmVzZW50YXRpb24uYXBwZW5kKCd9Jyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGIxMWUwOThjZTQ3N2Q2OWQ4NjliMmYxNWU3NTNjOTkzZTE4MDM3ZTYu
LmNjNTYxZjNlZjg5NGQ5NjQ4NDdlNjg4MDcwMTIzNzlkNjE4NmYwMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDk4LDYgKzQ5OCw3IEBACiAJCTkzQUM5
MUE3MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMQ2hhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I1QjQ0RDIy
MTNENjE2MDA0QjdBQTcgLyogSGV4TnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhleE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQjVCNDUwMjIxNzFFRTkwMDRCN0FBNyAvKiBMb2dnZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTG9nZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNEMDAxN0IyNjREQkFDRjAwQkNGMTA5IC8qIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGVDRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxOTFDRjIwQ0FFQ0U4MDBDNTFCOEUgLyog
b2JqY1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvYmpjU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRERFOTMxMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGR5bGRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNGMTk5M0QxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MjQsNiArOTI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUE1QkExNUY3MTgyNDM1QTYwMEE4MkU2OSAvKiBBdG9tU3RyaW5nSW1wbENGLmNwcCAqLywK
IAkJCQlBNUJBMTVGODE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwICovLAorCQkJCTkz
RDAwMTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJpbmdDb25jYXRlbmF0ZUNGLmggKi8sCiAJCQkJ
QTVCQTE1RjkxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDRi5jcHAgKi8sCiAJCQkJOTM5
MzRCRDQxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgKi8sCiAJCQkJMUNDREIx
NDkxRTU2NjYyNjAwNkM3M0MwIC8qIFRleHRCcmVha0l0ZXJhdG9yQ0YuaCAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggYi9Tb3VyY2UvV1RGL3d0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oCmluZGV4IGI4NTE2Zjg4MWUwYzRiYTNmZjFhYWMxNTg2MDZjOWVm
OWQ1NzMwYWMuLjczYWNkYzcyZDVjYmNjNjFkYTdlYzYyMzNjMmM1Y2U3NjQ4MjlkMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaApAQCAtOTUsMzEgKzk1LDYgQEAgcHVibGljOgogICAg
IGNvbnN0ZXhwciBib29sIGhhc092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
fTsKIAotY2xhc3MgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3cgewotcHVibGljOgotICAgIHZv
aWQgb3ZlcmZsb3dlZCgpCi0gICAgewotICAgICAgICBtX292ZXJmbG93ZWQgPSB0cnVlOwotICAg
ICAgICBpZiAobV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpCi0gICAgICAgICAgICBjcmFzaCgpOwot
ICAgIH0KLQotICAgIGJvb2wgc2hvdWxkQ3Jhc2hPbk92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KLSAgICB2b2lkIHNldFNob3VsZENyYXNoT25PdmVy
Zmxvdyhib29sIHZhbHVlKSB7IG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93ID0gdmFsdWU7IH0KLQot
ICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZDsgfQot
ICAgIHZvaWQgY2xlYXJPdmVyZmxvdygpIHsgbV9vdmVyZmxvd2VkID0gZmFsc2U7IH0KLQotICAg
IHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgY3Jhc2goKQotICAgIHsKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX292ZXJmbG93ZWQgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgeyB0cnVlIH07Ci19Owot
CiBjbGFzcyBDcmFzaE9uT3ZlcmZsb3cgewogcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgb3ZlcmZsb3dlZCgpCkBAIC0yNTIsMTEgKzIyNyw2IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZCB7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsKIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENvbmRpdGlvbmFsQ3Jhc2hPbk92
ZXJmbG93Pj4gewotICAgIHVzaW5nIENsZWFuVHlwZSA9IHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8
VD46OkNsZWFuVHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIENsZWFuVHlwZSBEZWZhdWx0VmFs
dWUgPSAwOwotfTsKLQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2Vk
PENoZWNrZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93Pj4gewogICAgIHR5cGVkZWYgdHlwZW5hbWUgUmVt
b3ZlQ2hlY2tlZDxUPjo6Q2xlYW5UeXBlIENsZWFuVHlwZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOwpAQCAtMTA2OSw3ICsxMDM5LDYgQEAgdXNpbmcg
V1RGOjpDaGVja2VkVWludDMyOwogdXNpbmcgV1RGOjpDaGVja2VkSW50NjQ7CiB1c2luZyBXVEY6
OkNoZWNrZWRVaW50NjQ7CiB1c2luZyBXVEY6OkNoZWNrZWRTaXplOwotdXNpbmcgV1RGOjpDb25k
aXRpb25hbENyYXNoT25PdmVyZmxvdzsKIHVzaW5nIFdURjo6Q3Jhc2hPbk92ZXJmbG93OwogdXNp
bmcgV1RGOjpSZWNvcmRPdmVyZmxvdzsKIHVzaW5nIFdURjo6Y2hlY2tlZFN1bTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1GVFcuY21ha2UKaW5kZXggOTcxZmRlYjI1OTUwZWViNzc4ZDVkNzBlMWFkY2ZkNTJhZDZh
ZDI5ZS4uYmZhMTNkMWZlODBiMzA3YTUyYjNmZGRiZWRhMWU2OTdkMzhlNTNjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1GVFcuY21ha2UKQEAgLTM5LDYgKzM5LDcgQEAgaWYgKFVTRV9DRikKICAgICAgICAg
Y2YvQ0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9UeXBlQ2FzdHNDRi5oCiAKKyAgICAgICAgdGV4
dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVy
YXRvckNGLmgKICAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1NYWMuY21ha2UKaW5kZXggZTI4MDk5NzQyNzE5Yzc3OWFjM2VhZGY0NjYxMzMzZDg3OGVmZGNk
ZC4uN2NkY2M0YjE2YmUyMmU0NzVlMjJhODZhZDBlN2FjNDhkZTFkZDExNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1NYWMuY21ha2UKQEAgLTQxLDYgKzQxLDcgQEAgbGlzdChBUFBFTkQgV1RGX1BVQkxJQ19I
RUFERVJTCiAKICAgICBzcGkvbWFjL01ldGFkYXRhU1BJLmgKIAorICAgIHRleHQvY2YvU3RyaW5n
Q29uY2F0ZW5hdGVDRi5oCiAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKICkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA2ZTgwYjk5YTA0YTZjNmRlNGUyZmY1OWE3YjRl
ZDRjOGM0YWFmYWI5Li45MGZkMjZkNzhjNjk0ZGIzNmRkMDgyNDFlOTg4ZTQyZjU1NTdlNTE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMzcsNiArMzcsNyBAQCBpZiAoVVNFX0NGKQog
ICAgICAgICBjZi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVDYXN0c0NGLmgKIAorICAg
ICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgICAgICB0ZXh0L2NmL1RleHRC
cmVha0l0ZXJhdG9yQ0YuaAogICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGIvU291cmNlL1dU
Ri93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oCmluZGV4IDYwN2JjMDExMjVkZjUwYmI4OTQ5NjA4
MGU4OGU2NWQ3NDVjOGJmOTYuLjU3OWI1Yjg1YzhlOGExYjQ0MWUyMWQ3Y2UwN2ZmMGEyMzAxZDI1
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmgKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDcgKzM2LDE0IEBA
CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CiAKLWlubGlu
ZSBib29sIHNpZ25lZEFkZE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYg
cmVzdWx0KQorbmFtZXNwYWNlIFdURiB7CisKKy8vIEZJWE1FOiBFbmhhbmNlIHRoaXMgc28gaXQg
ZmFpbHMgdG8gY29tcGlsZSBjYWxscyB3aGVyZSBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50cyBjYW4g
YmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGludGVncmFsIHR5cGUgaW5zdGVhZCBvZiBxdWll
dGx5IGNvbnZlcnRpbmcuCit0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRJbnRlZ3JhbFR5cGU+IHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbF92PFNpZ25lZEludGVncmFsVHlwZT4gJiYg
c3RkOjppc19zaWduZWRfdjxTaWduZWRJbnRlZ3JhbFR5cGU+LCBTaWduZWRJbnRlZ3JhbFR5cGU+
IHNhdHVyYXRlZFN1bShTaWduZWRJbnRlZ3JhbFR5cGUsIFNpZ25lZEludGVncmFsVHlwZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBVbnNpZ25lZEludGVncmFsVHlwZT4gY29uc3RleHByIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbF92PFVuc2lnbmVkSW50ZWdyYWxUeXBlPiAmJiAhc3Rk
Ojppc19zaWduZWRfdjxVbnNpZ25lZEludGVncmFsVHlwZT4sIFVuc2lnbmVkSW50ZWdyYWxUeXBl
PiBzYXR1cmF0ZWRTdW0oVW5zaWduZWRJbnRlZ3JhbFR5cGUsIFVuc2lnbmVkSW50ZWdyYWxUeXBl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIEludGVncmFsVHlwZT4gSW50ZWdyYWxUeXBlIHNhdHVyYXRl
ZERpZmZlcmVuY2UoSW50ZWdyYWxUeXBlLCBJbnRlZ3JhbFR5cGUpOworCitpbmxpbmUgYm9vbCBz
aWduZWRBZGRJbnQzMk92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYgcmVz
dWx0KQogewogI2lmIENPTVBJTEVSX0hBU19DTEFOR19CVUlMVElOKF9fYnVpbHRpbl9zYWRkX292
ZXJmbG93KSAmJiAhKGRlZmluZWQgX19jbGFuZ19tYWpvcl9fICYmIF9fY2xhbmdfbWFqb3JfXyA8
IDcpCiAgICAgcmV0dXJuIF9fYnVpbHRpbl9zYWRkX292ZXJmbG93KGEsIGIsICZyZXN1bHQpOwpA
QCAtNTIsNyArNTksNyBAQCBpbmxpbmUgYm9vbCBzaWduZWRBZGRPdmVyZmxvd3MoaW50MzJfdCBh
LCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKICNlbmRpZgogfQogCi1pbmxpbmUgaW50MzJf
dCBzYXR1cmF0ZWRBZGRpdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKK3RlbXBsYXRlPD4gaW5s
aW5lIGludDMyX3Qgc2F0dXJhdGVkU3VtPGludDMyX3Q+KGludDMyX3QgYSwgaW50MzJfdCBiKQog
ewogICAgIGludDMyX3QgcmVzdWx0OwogI2lmIENQVShBUk1fVEhVTUIyKQpAQCAtNjIsMTMgKzY5
LDEzIEBAIGlubGluZSBpbnQzMl90IHNhdHVyYXRlZEFkZGl0aW9uKGludDMyX3QgYSwgaW50MzJf
dCBiKQogICAgICAgICA6IC8qIE5vdGhpbmcgaXMgY2xvYmJlcmVkLiAqLwogICAgICAgICApOwog
I2Vsc2UKLSAgICBpZiAoc2lnbmVkQWRkT3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCisgICAgaWYg
KHNpZ25lZEFkZEludDMyT3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpICsgKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhKSA+PiAzMSk7CiAjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUg
Ym9vbCBzaWduZWRTdWJ0cmFjdE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJf
dCYgcmVzdWx0KQoraW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RJbnQzMk92ZXJmbG93cyhpbnQz
Ml90IGEsIGludDMyX3QgYiwgaW50MzJfdCYgcmVzdWx0KQogewogI2lmIENPTVBJTEVSX0hBU19D
TEFOR19CVUlMVElOKF9fYnVpbHRpbl9zc3ViX292ZXJmbG93KSAmJiAhKGRlZmluZWQgX19jbGFu
Z19tYWpvcl9fICYmIF9fY2xhbmdfbWFqb3JfXyA8IDcpCiAgICAgcmV0dXJuIF9fYnVpbHRpbl9z
c3ViX292ZXJmbG93KGEsIGIsICZyZXN1bHQpOwpAQCAtODQsNyArOTEsOCBAQCBpbmxpbmUgYm9v
bCBzaWduZWRTdWJ0cmFjdE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYg
cmVzdWx0KQogI2VuZGlmCiB9CiAKLWlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1YnRyYWN0aW9u
KGludDMyX3QgYSwgaW50MzJfdCBiKQorLy8gRklYTUU6IEVuaGFuY2UgdGhpcyBzbyBpdCBmYWls
cyB0byBjb21waWxlIGNhbGxzIHdoZXJlIGVpdGhlciBvZiB0aGUgYXJndW1lbnRzIGNhbiBiZSBv
dXRzaWRlIHRoZSByYW5nZSBvZiBpbnQzMl90IGluc3RlYWQgb2YgcXVpZXRseSBjb252ZXJ0aW5n
LgordGVtcGxhdGU8PiBpbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+
KGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIGludDMyX3QgcmVzdWx0OwogI2lmIENQVShB
Uk1fVEhVTUIyKQpAQCAtOTQsOCArMTAyLDI0IEBAIGlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1
YnRyYWN0aW9uKGludDMyX3QgYSwgaW50MzJfdCBiKQogICAgICAgICA6IC8qIE5vdGhpbmcgaXMg
Y2xvYmJlcmVkLiAqLwogICAgICAgICApOwogI2Vsc2UKLSAgICBpZiAoc2lnbmVkU3VidHJhY3RP
dmVyZmxvd3MoYSwgYiwgcmVzdWx0KSkKKyAgICBpZiAoc2lnbmVkU3VidHJhY3RJbnQzMk92ZXJm
bG93cyhhLCBiLCByZXN1bHQpKQogICAgICAgICByZXN1bHQgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSArIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYSkgPj4gMzEpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVW5zaWduZWRJ
bnRlZ3JhbFR5cGU+IGNvbnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWxf
djxVbnNpZ25lZEludGVncmFsVHlwZT4gJiYgIXN0ZDo6aXNfc2lnbmVkX3Y8VW5zaWduZWRJbnRl
Z3JhbFR5cGU+LCBVbnNpZ25lZEludGVncmFsVHlwZT4gc2F0dXJhdGVkU3VtKFVuc2lnbmVkSW50
ZWdyYWxUeXBlIGEsIFVuc2lnbmVkSW50ZWdyYWxUeXBlIGIpCit7CisgICAgYXV0byBzdW0gPSBh
ICsgYjsKKyAgICByZXR1cm4gc3VtIDwgYSA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VW5zaWduZWRJ
bnRlZ3JhbFR5cGU+OjptYXgoKSA6IHN1bTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdy
YWxUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPiBjb25zdGV4cHIgdWludDMyX3Qgc2F0
dXJhdGVkU3VtKEludGVncmFsVHlwZSB2YWx1ZSwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgcmV0dXJuIHNhdHVyYXRlZFN1bTxJbnRlZ3JhbFR5cGU+KHZhbHVlLCBzYXR1cmF0
ZWRTdW08SW50ZWdyYWxUeXBlPihhcmd1bWVudHMuLi4pKTsKK30KKworfQorCit1c2luZyBXVEY6
OnNhdHVyYXRlZFN1bTsKK3VzaW5nIFdURjo6c2F0dXJhdGVkRGlmZmVyZW5jZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDFlMGMxOGFjOWQyMGVkODIwZmViODY4NWZj
Y2Y4MmIxMDYwMTE0MmQuLjIzM2FkZjc4OWE2N2YyNjQ5NmI5N2YyMGE1NjgyMWQ4OTZjMzVjNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDI2ICszMywyOSBAQCBuYW1lc3BhY2UgV1RG
IHsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhDYXBhY2l0eSA9IFN0cmluZzo6TWF4
TGVuZ3RoOwogCi1zdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRDYXBhY2l0eSh1bnNpZ25lZCBjYXBh
Y2l0eSwgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRD
YXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSwgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbmltdW1DYXBhY2l0eSA9IDE2OwotICAg
IHJldHVybiBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5
LCBzdGQ6Om1pbihjYXBhY2l0eSAqIDIsIG1heENhcGFjaXR5KSkpOworICAgIHJldHVybiBzdGQ6
Om1heChyZXF1aXJlZENhcGFjaXR5LCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIHN0ZDo6bWlu
KGNhcGFjaXR5ICogMiwgbWF4Q2FwYWNpdHkpKSk7Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6
ZGlkT3ZlcmZsb3coKQoreworICAgIGlmIChtX3Nob3VsZENyYXNoT25PdmVyZmxvdykKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICBtX2xlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNP
dmVyZmxvd2VkKCkpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cmluZyBhbHJlYWR5IGV4aXN0
cy4KICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0cmlu
Zy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgICAgICBB
U1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lzUmVpZmllZCA9IHRydWU7Ci0jZW5k
aWYKLQogICAgIC8vIENoZWNrIGZvciBlbXB0eS4KICAgICBpZiAoIW1fbGVuZ3RoKSB7CiAgICAg
ICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKQEAgLTYwLDM2OSArNjMsMTk2IEBA
IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAogICAgIH0KIAogICAgIC8v
IE11c3QgYmUgdmFsaWQgaW4gdGhlIGJ1ZmZlciwgdGFrZSBhIHN1YnN0cmluZyAodW5sZXNzIHN0
cmluZyBmaWxscyB0aGUgYnVmZmVyKS4KLSAgICBBU1NFUlQobV9idWZmZXIgJiYgbV9sZW5ndGgu
dW5zYWZlR2V0PHVuc2lnbmVkPigpIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAgaWYgKG1f
bGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSA9PSBtX2J1ZmZlci0+bGVuZ3RoKCkpCisgICAg
QVNTRVJUKG1fbGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSk7CisgICAgaWYgKG1fbGVuZ3Ro
ID09IG1fYnVmZmVyLT5sZW5ndGgoKSkKICAgICAgICAgbV9zdHJpbmcgPSBtX2J1ZmZlci5nZXQo
KTsKICAgICBlbHNlCi0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3Ry
aW5nU2hhcmluZ0ltcGwoKm1fYnVmZmVyLCAwLCBtX2xlbmd0aC51bnNhZmVHZXQoKSk7CisgICAg
ICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1f
YnVmZmVyLCAwLCBtX2xlbmd0aCk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVu
c2lnbmVkIG5ld1NpemUpCit2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmluayh1bnNpZ25lZCBuZXdM
ZW5ndGgpCiB7CiAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gQ2hlY2sgbmV3U2l6ZSA8IG1fbGVuZ3RoLCBoZW5jZSBtX2xlbmd0aCA+IDAuCi0gICAg
dW5zaWduZWQgb2xkTGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgQVNTRVJUKG5l
d1NpemUgPD0gb2xkTGVuZ3RoKTsKLSAgICBpZiAobmV3U2l6ZSA9PSBvbGRMZW5ndGgpCisgICAg
QVNTRVJUKG5ld0xlbmd0aCA8PSBtX2xlbmd0aCk7CisgICAgaWYgKG5ld0xlbmd0aCA+PSBtX2xl
bmd0aCkgeworICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9sZW5ndGgpCisgICAgICAgICAgICBk
aWRPdmVyZmxvdygpOwogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG9sZExlbmd0aCk7Cisg
ICAgfQogCi0gICAgbV9sZW5ndGggPSBuZXdTaXplOwotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dl
ZCgpKTsKKyAgICBtX2xlbmd0aCA9IG5ld0xlbmd0aDsKIAotICAgIC8vIElmIHRoZXJlIGlzIGEg
YnVmZmVyLCB3ZSBvbmx5IG5lZWQgdG8gZHVwbGljYXRlIGl0IGlmIGl0IGhhcyBtb3JlIHRoYW4g
b25lIHJlZi4KICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmco
KTsgLy8gQ2xlYXIgdGhlIHN0cmluZyB0byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBtX2J1ZmZl
ciBpZiBhbnkgYmVmb3JlIGNoZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbV9idWZmZXIu
Ci0gICAgICAgIGlmICghbV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICBpZiAo
bV9idWZmZXItPmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVm
ZmVyLT5jaGFyYWN0ZXJzOCgpLCBtX2J1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYo
KSwgbV9idWZmZXItPmxlbmd0aCgpKTsKKyAgICAgICAgbV9zdHJpbmcgPSB7IH07IC8vIENsZWFy
IHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJl
Zm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG1fYnVmZmVyLgorICAgICAgICBp
ZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIGJ1
ZmZlciBoYWQgb25seSB0aGUgb25lIHJlZiwgd2UgY2FuIGp1c3QgcmVkdWNlIHRoZSBsZW5ndGgg
YW5kIGtlZXAgdXNpbmcgdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+
PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgICAgICAvLyBBbGxvY2F0ZSBh
IGZyZXNoIGJ1ZmZlciwgd2l0aCBhIGNvcHkgb2YgdGhlIGNoYXJhY3RlcnMgd2UgYXJlIGtlZXBp
bmcuCisgICAgICAgIGlmIChtX2J1ZmZlci0+aXM4Qml0KCkpCisgICAgICAgICAgICBhbGxvY2F0
ZUJ1ZmZlcjxMQ2hhcj4obV9idWZmZXItPmNoYXJhY3RlcnM8TENoYXI+KCksIG5ld0xlbmd0aCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX2J1ZmZl
ci0+Y2hhcmFjdGVyczxVQ2hhcj4oKSwgbmV3TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIFNpbmNlIG1fbGVuZ3RoICYmICFtX2J1ZmZlciwgdGhlIHN0cmluZyBtdXN0
IGJlIHZhbGlkIGluIG1fc3RyaW5nLCBhbmQgbV9zdHJpbmcubGVuZ3RoKCkgPiAwLgotICAgIEFT
U0VSVCghbV9zdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQob2xkTGVuZ3RoID09IG1fc3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICBBU1NFUlQobmV3U2l6ZSA8IG1fc3RyaW5nLmxlbmd0aCgpKTsK
LSAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpt
X3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOworICAgIC8vIFNpbmNlIHRoZSBvbGQgbGVuZ3Ro
IHdhcyBub3QgMCBhbmQgbV9idWZmZXIgaXMgbnVsbCwgbV9zdHJpbmcgaXMgZ3VhcmFudGVlZCB0
byBiZSBub24tbnVsbC4KKyAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmlu
Z1NoYXJpbmdJbXBsKCptX3N0cmluZy5pbXBsKCksIDAsIG5ld0xlbmd0aCk7CiB9CiAKLS8vIEFs
bG9jYXRlIGEgbmV3IDggYml0IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAo
dGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJpbmcKLS8vIG9yIG1fYnVmZmVyLCBuZWl0
aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29tcGxldGVkKS4KLXZv
aWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFy
YWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKKy8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZl
ciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRo
ZXIgbV9zdHJpbmcgb3IgbV9idWZmZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0aW9uQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgQ3VycmVudENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVp
bGRlcjo6YWxsb2NhdGVCdWZmZXIoY29uc3QgQ3VycmVudENoYXJhY3RlclR5cGUqIGN1cnJlbnRD
aGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQogewotICAgIEFTU0VSVCghaGFz
T3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9pczhCaXQpOwotICAgIC8vIENvcHkgdGhlIGV4
aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhl
IGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KLSAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVy
czgpOwotICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIGRpZE92ZXJm
bG93KCk7Ci0KLSAgICBpZiAobV9sZW5ndGgpCi0gICAgICAgIHN0ZDo6bWVtY3B5KG1fYnVmZmVy
Q2hhcmFjdGVyczgsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0K
LSAgICAvLyBVcGRhdGUgdGhlIGJ1aWxkZXIgc3RhdGUuCi0gICAgbV9idWZmZXIgPSBXVEZNb3Zl
KGJ1ZmZlcik7Ci0gICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKLX0KKyAgICBBbGxvY2F0aW9uQ2hhcmFjdGVy
VHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7
CisgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7CisgICAgICAgIGRpZE92ZXJmbG93KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIs
IGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVy
IG1fc3RyaW5nCi0vLyBvciBtX2J1ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVu
dGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0
ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQotewogICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQoIW1f
aXM4Qml0KTsKLSAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVy
LCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCi0g
ICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcXVp
cmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7Ci0gICAgaWYgKFVOTElLRUxZKCFidWZm
ZXIpKQotICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKLSAgICBzdGQ6Om1lbWNweShtX2J1
ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4o
bV9sZW5ndGgudW5zYWZlR2V0KCkpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3Zl
cmZsb3cuCi0gICAgCi0gICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgotICAgIG1fYnVm
ZmVyID0gV1RGTW92ZShidWZmZXIpOwotICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgQVNT
RVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0aCk7Ci19CisgICAgU3RyaW5n
SW1wbDo6Y29weUNoYXJhY3RlcnMoYnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMs
IG1fbGVuZ3RoKTsKIAotLy8gQWxsb2NhdGUgYSBuZXcgMTYgYml0IGJ1ZmZlciwgY29weWluZyBp
biBjdXJyZW50Q2hhcmFjdGVycyAod2hpY2ggaXMgOCBiaXQgYW5kIG1heSBjb21lCi0vLyBmcm9t
IGVpdGhlciBtX3N0cmluZyBvciBtX2J1ZmZlciwgbmVpdGhlciB3aWxsIGJlIHJlYXNzaWduZWQg
dW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWdu
ZWQgcmVxdWlyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAg
IEFTU0VSVChtX2lzOEJpdCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZl
R2V0KCk7Ci0gICAgQVNTRVJUKHJlcXVpcmVkTGVuZ3RoIDw9IG1heENhcGFjaXR5ICYmIHJlcXVp
cmVkTGVuZ3RoID49IGxlbmd0aCk7Ci0gICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRv
IGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlz
dGluZyBkYXRhLgotICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIGlmIChV
TkxJS0VMWSghYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7IC8vIFRyZWF0
IGEgZmFpbHVyZSB0byBhbGxjb2F0ZSBhcyBhbiBvdmVyZmxvdy4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W2ld
ID0gY3VycmVudENoYXJhY3RlcnNbaV07Ci0gICAgCi0gICAgbV9pczhCaXQgPSBmYWxzZTsKLSAg
ICAKLSAgICAvLyBVcGRhdGUgdGhlIGJ1aWxkZXIgc3RhdGUuCiAgICAgbV9idWZmZXIgPSBXVEZN
b3ZlKGJ1ZmZlcik7Ci0gICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZm
ZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBtX3N0cmluZyA9IHsgfTsKIH0K
IAotdGVtcGxhdGU8Pgotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPExDaGFy
Pih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJl
ZENhcGFjaXR5KQogewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkg
dGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhlcndpc2UgZmFs
bCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIgbWV0aG9kLgotICAgIG1fc3RyaW5nID0gU3Ry
aW5nKCk7Ci0gICAgCi0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICBBU1NFUlQobV9idWZmZXIt
PmlzOEJpdCgpKTsKLSAgICAKLSAgICBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAg
ICAgIGF1dG8gZXhwZWN0ZWRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZSht
X2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0
ZXJzOCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBsKSkKLSAgICAg
ICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUo
ZXhwZWN0ZWRTdHJpbmdJbXBsLnZhbHVlKCkpOwotICAgIH0gZWxzZQotICAgICAgICBhbGxvY2F0
ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOwotICAgIEFT
U0VSVChoYXNPdmVyZmxvd2VkKCkgfHwgbV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVu
Z3RoKTsKKyAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3Ry
aW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQuCisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAg
IG1fc3RyaW5nID0geyB9OyAvLyBDbGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0aGUgcmVmZXJl
bmNlIHRvIG1fYnVmZmVyIGlmIGFueSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVyZW5jZSBjb3Vu
dCBvZiBtX2J1ZmZlci4KKyAgICAgICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgeworICAg
ICAgICAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICAgICAgICAgIGF1
dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9u
TnVsbCgpLCByZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghYnVmZmVyKSkgeworICAgICAgICAgICAgICAgIGRpZE92ZXJmbG93KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9i
dWZmZXIgPSBXVEZNb3ZlKCpidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgYWxsb2NhdGVCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oY2hhcmFjdGVyczxD
aGFyYWN0ZXJUeXBlPigpLCByZXF1aXJlZENhcGFjaXR5KTsKIH0KIAotdGVtcGxhdGU8Pgotdm9p
ZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPFVDaGFyPih1bnNpZ25lZCByZXF1aXJl
ZExlbmd0aCkKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCBy
ZXF1aXJlZENhcGFjaXR5KQogewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJl
ZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhlcndp
c2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIgbWV0aG9kLgotICAgIG1fc3RyaW5n
ID0gU3RyaW5nKCk7Ci0gICAgCi0gICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAgICAg
YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVk
TGVuZ3RoKTsKLSAgICBlbHNlIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAg
YXV0byBleHBlY3RlZFN0cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlSZWFsbG9jYXRlKG1fYnVm
ZmVyLnJlbGVhc2VOb25OdWxsKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMx
Nik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBsKSkKLSAgICAgICAg
ICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUoZXhw
ZWN0ZWRTdHJpbmdJbXBsLnZhbHVlKCkpOwotICAgIH0gZWxzZQotICAgICAgICBhbGxvY2F0ZUJ1
ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBBU1NF
UlQoaGFzT3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0
aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihy
ZXF1aXJlZENhcGFjaXR5KTsKKyAgICBlbHNlCisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNo
YXI+KHJlcXVpcmVkQ2FwYWNpdHkpOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVD
YXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG5ld0NhcGFjaXR5IDw9IFN0cmluZzo6TWF4
TGVuZ3RoKTsKKwogICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
bHJlYWR5IGEgYnVmZmVyLCB0aGVuIGdyb3cgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAobmV3
Q2FwYWNpdHkgPiBtX2J1ZmZlci0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2J1ZmZl
ci0+aXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obmV3
Q2FwYWNpdHkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVC
dWZmZXI8VUNoYXI+KG5ld0NhcGFjaXR5KTsKLSAgICAgICAgfQorICAgICAgICBpZiAobmV3Q2Fw
YWNpdHkgPiBtX2J1ZmZlci0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVy
KG5ld0NhcGFjaXR5KTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBHcm93IHRoZSBzdHJpbmcs
IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IGxlbmd0aCkgewotICAgICAgICAgICAg
aWYgKCFsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBMQ2hhciogbnVsbFBsYWNlaG9sZGVyID0g
bnVsbHB0cjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihudWxsUGxhY2Vob2xkZXIs
IG5ld0NhcGFjaXR5KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdHJpbmcuaXM4Qml0KCkp
Ci0gICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVyczgoKSwg
bmV3Q2FwYWNpdHkpOworICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBtX2xlbmd0aCkgeworICAg
ICAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxM
Q2hhcj4oc3RhdGljX2Nhc3Q8TENoYXIqPihudWxscHRyKSwgbmV3Q2FwYWNpdHkpOworICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICAgICAgYWxsb2Nh
dGVCdWZmZXI8TENoYXI+KG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVm
ZmVyPFVDaGFyPihtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkgfHwgIW5ld0NhcGFjaXR5IHx8
IG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBuZXdDYXBhY2l0eSk7CiB9CiAKLS8vIE1ha2UgJ2FkZGl0
aW9uYWxMZW5ndGgnIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVy
LCB1cGRhdGUgbV9zdHJpbmcgJiBtX2xlbmd0aCwKLS8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhl
IG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlLgotLy8gUmV0dXJucyBudWxscHRyIGlmIHRoZSBzaXpl
IG9mIHRoZSBuZXcgYnVpbGRlciB3b3VsZCBoYXZlIG92ZXJmbG93ZWQKLXRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVp
bGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVkIGFkZGl0aW9uYWxMZW5ndGgp
CisvLyBNYWtlICdhZGRpdGlvbmFsTGVuZ3RoJyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWls
YWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3RyaW5nICYgbV9sZW5ndGggdG8gdXNlLAorLy8g
dGhhdCBjYXBhY2l0eSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVk
IHN0b3JhZ2Ugc28gdGhlIGNhbGxlciBjYW4gd3JpdGUgY2hhcmFjdGVycyB0aGVyZS4KKy8vIFJl
dHVybnMgbnVsbHB0ciBpZiBhbGxvY2F0aW9uIGZhaWxzLCBsZW5ndGggb3ZlcmZsb3dzLCBvciBp
ZiB0b3RhbCBjYXBhY2l0eSBpcyAwIHNvIG5vIGJ1ZmZlciBpcyBuZWVkZWQuCisvLyBUaGUgY2Fs
bGVyIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNoZWNraW5nIHRoYXQgQ2hhcmFjdGVyVHlw
ZSBpcyB0aGUgdHlwZSBvZiB0aGUgZXhpc3RpbmcgYnVmZmVyLgordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVy
Rm9yQXBwZW5kaW5nKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIEFTU0VSVChhZGRp
dGlvbmFsTGVuZ3RoKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGJ1
aWxkZXIgYWZ0ZXIgYXBwZW5kaW5nLgotICAgIENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCA9
IG1fbGVuZ3RoICsgYWRkaXRpb25hbExlbmd0aDsKLSAgICBpZiAocmVxdWlyZWRMZW5ndGguaGFz
T3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmIChtX2J1ZmZlciAmJiByZXF1aXJlZExlbmd0aCA8PSBtX2J1ZmZlci0+
bGVuZ3RoKCkpIHsKKyAgICAgICAgbV9zdHJpbmcgPSB7IH07CisgICAgICAgIHJldHVybiBjb25z
dF9jYXN0PENoYXJhY3RlclR5cGUqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBl
PigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2s8
Q2hhcmFjdGVyVHlwZT4ocmVxdWlyZWRMZW5ndGgpOworICAgIHJldHVybiBleHRlbmRCdWZmZXJG
b3JBcHBlbmRpbmdTbG93Q2FzZTxDaGFyYWN0ZXJUeXBlPihyZXF1aXJlZExlbmd0aCk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVy
VHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJm
bG93Q2hlY2soQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKQorLy8gU2hhcmVkIGJ5IHRoZSBv
dGhlciBleHRlbmRCdWZmZXIgZnVuY3Rpb25zLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5k
aW5nU2xvd0Nhc2UodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFyZXF1
aXJlZExlbmd0aC5oYXNPdmVyZmxvd2VkKCkpOwotCi0gICAgaWYgKG1fYnVmZmVyICYmIChyZXF1
aXJlZExlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkgPD0gbV9idWZmZXItPmxlbmd0aCgpKSkg
ewotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3Qg
YXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICBBU1NFUlQo
bV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgbV9sZW5ndGggPSByZXF1aXJlZExl
bmd0aDsKLSAgICAgICAgcmV0dXJuIGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4o
KSArIGN1cnJlbnRMZW5ndGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZ1Nsb3dDYXNlPENoYXJhY3RlclR5cGU+KHJlcXVpcmVkTGVuZ3RoLnVuc2FmZUdldCgp
KTsKKyAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAgaWYgKCFyZXF1aXJlZExlbmd0
aCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmVhbGxvY2F0ZUJ1ZmZlcihleHBhbmRl
ZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7CisgICAgaWYgKFVOTElLRUxZ
KGhhc092ZXJmbG93ZWQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBj
b25zdF9jYXN0PENoYXJhY3RlclR5cGUqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0ZXJU
eXBlPigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAot
TENoYXIqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgoQ2hlY2tlZElu
dDMyIHJlcXVpcmVkTGVuZ3RoKQorLy8gQWx0ZXJhdGl2ZSBleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmcgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIGhlYWRlciB3aXRob3V0IGlubGluaW5nLgor
TENoYXIqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2ln
bmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIGlmIChVTkxJS0VMWShyZXF1aXJlZExlbmd0aC5o
YXNPdmVyZmxvd2VkKCkpKSB7Ci0gICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0
aG91dE92ZXJmbG93Q2hlY2s8TENoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKKyAgICByZXR1cm4gZXh0
ZW5kQnVmZmVyRm9yQXBwZW5kaW5nPExDaGFyPihyZXF1aXJlZExlbmd0aCk7CiB9CiAKLVVDaGFy
KiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihDaGVja2VkSW50MzIg
cmVxdWlyZWRMZW5ndGgpCitVQ2hhciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBw
ZW5kaW5nV2l0aFVwY29udmVydCh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKLSAgICBpZiAo
VU5MSUtFTFkocmVxdWlyZWRMZW5ndGguaGFzT3ZlcmZsb3dlZCgpKSkgewotICAgICAgICBkaWRP
dmVyZmxvdygpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1faXM4
Qml0KSB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOwotICAgICAgICBpZiAobV9i
dWZmZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5n
dGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgICAgIGNoYXJhY3RlcnMgPSBtX2J1
ZmZlci0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwot
ICAgICAgICAgICAgY2hhcmFjdGVycyA9IG1fc3RyaW5nLmlzTnVsbCgpID8gbnVsbHB0ciA6IG1f
c3RyaW5nLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYWxsb2NhdGVCdWZmZXJV
cENvbnZlcnQoY2hhcmFjdGVycywgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJl
ZExlbmd0aC51bnNhZmVHZXQoKSkpOworICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBhbGxv
Y2F0ZUJ1ZmZlcjxVQ2hhcj4oY2hhcmFjdGVyczxMQ2hhcj4oKSwgZXhwYW5kZWRDYXBhY2l0eShj
YXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoaGFzT3Zl
cmZsb3dlZCgpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgbV9sZW5ndGggPSBy
ZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFj
dGVyczE2ICsgb2xkTGVuZ3RoOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxVQ2hhcio+KG1f
YnVmZmVyLT5jaGFyYWN0ZXJzPFVDaGFyPigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJl
cXVpcmVkTGVuZ3RoKTsKICAgICB9Ci0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGlu
Z1dpdGhvdXRPdmVyZmxvd0NoZWNrPFVDaGFyPihyZXF1aXJlZExlbmd0aCk7Ci19Ci0KLS8vIE1h
a2UgJ3JlcXVpcmVkTGVuZ3RoJyBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVw
ZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoLAotLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3
bHkgYWxsb2NhdGVkIHN0b3JhZ2UuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBD
aGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93
Q2FzZSh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93
ZWQoKSk7Ci0gICAgQVNTRVJUKHJlcXVpcmVkTGVuZ3RoKTsKLQotICAgIGlmIChtX2J1ZmZlcikg
ewotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3Qg
YXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICBBU1NFUlQo
bV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0g
ICAgICAgIAotICAgICAgICByZWFsbG9jYXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGV4cGFuZGVk
Q2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2ln
bmVkPigpKTsKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9sZW5ndGggPyBtX3N0cmluZy5jaGFy
YWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgOiBudWxscHRyLCBleHBhbmRlZENhcGFjaXR5KGNhcGFj
aXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7Ci0gICAgfQotICAgIGlmIChVTkxJS0VMWShoYXNPdmVy
Zmxvd2VkKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoYXJhY3RlclR5cGUq
IHJlc3VsdCA9IGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIG1fbGVuZ3Ro
LnVuc2FmZUdldCgpOwotICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgQVNTRVJU
KCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9s
ZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8VUNoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKIH0K
IAogdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGggfHwgaGFzT3ZlcmZs
b3dlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2hhcmFjdGVycyk7Ci0KLSAg
ICBpZiAobV9pczhCaXQgJiYgbGVuZ3RoID09IDEgJiYgaXNMYXRpbjEoY2hhcmFjdGVyc1swXSkp
IHsKKyAgICBpZiAobGVuZ3RoID09IDEgJiYgaXNMYXRpbjEoY2hhcmFjdGVyc1swXSkgJiYgaXM4
Qml0KCkpIHsKICAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXJzWzBd
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG9w
dGltaXplIG1lbW9yeSBieSBrZWVwaW5nIHRoZSBzdHJpbmcgOC1iaXQgd2hlbiBhbGwgdGhlIGNo
YXJhY3RlcnMgYXJlIExhdGluLTE/Ci0KLSAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmcxNihtX2xlbmd0aCArIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZ
KCFkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybjsKLSAgICBzdGQ6Om1lbWNweShkZXN0aW5h
dGlvbiwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVD
aGFyKSk7Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBpZiAo
YXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZlcnQo
c2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xlbmd0aCwgbGVuZ3RoKSkpCisgICAgICAgIFN0cmlu
Z0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwog
fQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCB8fCBoYXNPdmVy
Zmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKLQot
ICAgIGlmIChtX2lzOEJpdCkgewotICAgICAgICBMQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmc8TENoYXI+KGxlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRp
b24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZW5ndGggPiA4KQotICAgICAgICAgICAg
c3RkOjptZW1jcHkoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gRklYTUU6IEhvdyBzdHJvbmcgaXMgb3VyIGV2aWRlbmNlIHRo
YXQgdGhpcyBpcyBmYXN0ZXIgdGhhbiBtZW1jcHk/IFdoYXQgcGxhdGZvcm1zIGlzIHRoaXMgdHJ1
ZSBmb3I/Ci0gICAgICAgICAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0
aDsKLSAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbisrID0gKmNoYXJhY3RlcnMrKzsKLSAgICAgICAgfQorICAgIGlmIChpczhC
aXQoKSkgeworICAgICAgICBpZiAoYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZzxMQ2hhcj4oc2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xlbmd0aCwgbGVuZ3RoKSkp
CisgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKICAgICB9IGVsc2UgewotICAgICAgICBVQ2hhciogZGVzdGluYXRp
b24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8VUNoYXI+KGxlbmd0aCk7Ci0gICAgICAgIGlm
ICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IExDaGFyKiBlbmQg
PSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkK
LSAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gKmNoYXJhY3RlcnMrKzsKLSAgICB9Ci19Ci0K
LSNpZiBVU0UoQ0YpCi0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVmIHN0
cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGg6IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFy
eSBTdHJpbmcgd2hlbiBwb3NzaWJsZS4KLSAgICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENGU3Ry
aW5nR2V0Q1N0cmluZ1B0cihzdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkgewot
ICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihj
aGFyYWN0ZXJzKSwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKGF1dG8gZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8
VUNoYXI+KHNhdHVyYXRlZFN1bTx1aW50MzJfdD4obV9sZW5ndGgsIGxlbmd0aCkpKQorICAgICAg
ICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiAgICAgfQotICAgIGFwcGVuZChTdHJpbmcoc3RyaW5nKSk7CiB9CiAKLSNlbmRp
ZgotCi1ib29sIFN0cmluZ0J1aWxkZXI6OmNhblNocmluaygpIGNvbnN0Citib29sIFN0cmluZ0J1
aWxkZXI6OnNob3VsZFNocmlua1RvRml0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gT25seSBzaHJpbmsgdGhlIGJ1ZmZl
ciBpZiBpdCdzIGxlc3MgdGhhbiA4MCUgZnVsbC4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1
bmUgdGhpcyBoZXVyaXN0aWMgYmFzZWQgc29tZSBhY3R1YWwgdGVzdCBjYXNlIG1lYXN1cmVtZW50
cy4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICByZXR1
cm4gbV9idWZmZXIgJiYgbV9idWZmZXItPmxlbmd0aCgpID4gKGxlbmd0aCArIChsZW5ndGggPj4g
MikpOworICAgIC8vIFNocmluayB0aGUgYnVmZmVyIGlmIGl0J3MgODAlIGZ1bGwgb3IgbGVzcy4K
KyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RyaW5nOjpNYXhMZW5ndGgp
ICsgKFN0cmluZzo6TWF4TGVuZ3RoID4+IDIpIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7CisgICAgcmV0dXJuICFoYXNPdmVyZmxv
d2VkKCkgJiYgbV9idWZmZXIgJiYgbV9idWZmZXItPmxlbmd0aCgpID4gbV9sZW5ndGggKyAobV9s
ZW5ndGggPj4gMik7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQogewot
ICAgIGlmIChjYW5TaHJpbmsoKSkgewotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAgICAg
ICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihtX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fbGVuZ3RoLnVuc2Fm
ZUdldCgpKTsKLSAgICAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBtX3N0
cmluZyA9IFdURk1vdmUobV9idWZmZXIpOworICAgIGlmIChzaG91bGRTaHJpbmtUb0ZpdCgpKSB7
CisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXIobV9sZW5ndGgpOworICAgICAgICBtX3N0cmluZyA9
IHN0ZDo6ZXhjaGFuZ2UobV9idWZmZXIsIG51bGxwdHIpOwogICAgIH0KIH0KIAogYm9vbCBTdHJp
bmdCdWlsZGVyOjppc0FsbEFTQ0lJKCkgY29uc3QKIHsKLSAgICBhdXRvIGxlbmd0aCA9IHRoaXMt
Pmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAobV9pczhCaXQpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hhcmFj
dGVyczgoKSwgbGVuZ3RoKTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgpOworICAgIHJldHVybiBTdHJpbmdWaWV3IHsgKnRoaXMgfS5pc0Fs
bEFTQ0lJKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaAppbmRleCA3MDE4YTFhYjdiZGJkNzRlNmNiN2FmY2QzNTQ0ZWFlYjkzOTBiZTVlLi41
NGYyYjI0MjU5YzU4MGZmMzE0NWU4ZTdiZmYzYzg4YzYyZjk5N2EyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI2LDQxNCArMjYsMzE1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaD4KKyNpbmNsdWRl
IDx3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIFN0
cmluZ0J1aWxkZXIgY3VycmVudGx5IHVzZXMgYSBDaGVja2VkPGludDMyX3QsIENvbmRpdGlvbmFs
Q3Jhc2hPbk92ZXJmbG93PiBmb3IgbV9sZW5ndGguCi0vLyBJZGVhbGx5LCB3ZSB3b3VsZCB3YW50
IHRvIG1ha2UgU3RyaW5nQnVpbGRlciBhIHRlbXBsYXRlIHdpdGggYW4gT3ZlcmZsb3dIYW5kbGVy
IHBhcmFtZXRlciwgYW5kCi0vLyBtX2xlbmd0aCBjYW4gYmUgaW5zdGFudGlhdGVkIGJhc2VkIG9u
IHRoYXQgT3ZlcmZsb3dIYW5kbGVyIGluc3RlYWQuIEhvd2V2ZXIsIGN1cnJlbnRseSwgd2UncmUK
LS8vIG5vdCBhYmxlIHRvIGdldCBjbGFuZyB0byBleHBvcnQgZXhwbGljaXRseSBpbnN0YW50aWF0
ZWQgdGVtcGxhdGUgbWV0aG9kcyAod2hpY2ggd291bGQgYmUgbmVlZGVkCi0vLyBpZiB3ZSB0ZW1w
bGF0aXplIFN0cmluZ0J1aWxkZXIpLiBBcyBhIHdvcmthcm91bmQsIHdlIHVzZSB0aGUgQ29uZGl0
aW9uYWxDcmFzaE9uT3ZlcmZsb3cgaGFuZGxlcgotLy8gaW5zdGVhZCB0byBkbyBhIHJ1bnRpbWUg
Y2hlY2sgb24gd2hldGhlciBpdCBzaG91bGQgY3Jhc2ggb24gb3ZlcmZsb3dzIG9yIG5vdC4KLS8v
Ci0vLyBXaGVuIGNsYW5nIGlzIGFibGUgdG8gZXhwb3J0IGV4cGxpY2l0bHkgaW5zdGFudGlhdGVk
IHRlbXBsYXRlIG1ldGhvZHMsIHdlIGNhbiB0ZW1wbGF0aXplCi0vLyBTdHJpbmdCdWlsZGVyIGFu
ZCBkbyBhd2F5IHdpdGggQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3cuCi0vLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTA1MC4KLQogY2xhc3MgU3RyaW5n
QnVpbGRlciB7Ci0gICAgLy8gRGlzYWxsb3cgY29weWluZyBzaW5jZSBpdCdzIGV4cGVuc2l2ZSBh
bmQgd2UgZG9uJ3Qgd2FudCBjb2RlIHRvIGRvIGl0IGJ5IGFjY2lkZW50LgorICAgIC8vIERpc2Fs
bG93IGNvcHlpbmcgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBzaGFyZSBtX2J1ZmZlciBiZXR3ZWVu
IHR3byBidWlsZGVycy4KICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdCdWlsZGVyKTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIGVudW0gY2xhc3Mg
T3ZlcmZsb3dIYW5kbGVyIHsKLSAgICAgICAgQ3Jhc2hPbk92ZXJmbG93LAotICAgICAgICBSZWNv
cmRPdmVyZmxvdwotICAgIH07Ci0KLSAgICBTdHJpbmdCdWlsZGVyKE92ZXJmbG93SGFuZGxlciBo
YW5kbGVyID0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cpCi0gICAgICAgIDogbV9i
dWZmZXJDaGFyYWN0ZXJzOChudWxscHRyKQotICAgIHsKLSAgICAgICAgbV9sZW5ndGguc2V0U2hv
dWxkQ3Jhc2hPbk92ZXJmbG93KGhhbmRsZXIgPT0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3Zl
cmZsb3cpOwotICAgIH0KKyAgICBTdHJpbmdCdWlsZGVyKCkgPSBkZWZhdWx0OwogICAgIFN0cmlu
Z0J1aWxkZXIoU3RyaW5nQnVpbGRlciYmKSA9IGRlZmF1bHQ7CiAgICAgU3RyaW5nQnVpbGRlciYg
b3BlcmF0b3I9KFN0cmluZ0J1aWxkZXImJikgPSBkZWZhdWx0OwogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIGRpZE92ZXJmbG93KCkgeyBtX2xlbmd0aC5vdmVyZmxvd2VkKCk7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoLmhh
c092ZXJmbG93ZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjcmFzaGVzT25PdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoLnNob3VsZENyYXNoT25PdmVyZmxvdygpOyB9Cisg
ICAgZW51bSBjbGFzcyBPdmVyZmxvd0hhbmRsZXIgeyBDcmFzaE9uT3ZlcmZsb3csIFJlY29yZE92
ZXJmbG93IH07IC8vIEZJWE1FOiBEZXNwaXRlIGl0cyB1c2UgaW4gQ2hlY2tlZDw+LCAiaGFuZGxl
ciIgZG9lcyBub3Qgc2VlbSB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGlzLgorICAgIGV4cGxpY2l0
IFN0cmluZ0J1aWxkZXIoT3ZlcmZsb3dIYW5kbGVyKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKyAg
ICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYpOworCisgICAgdm9pZCBkaWRPdmVyZmxvdygpOwor
ICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoID4gU3RyaW5n
OjpNYXhMZW5ndGg7IH0KKyAgICBib29sIGNyYXNoZXNPbk92ZXJmbG93KCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kQ2hhcmFjdGVycyhjb25zdCBMQ2hhciosIHVuc2lnbmVk
KTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKSB7IGFwcGVuZENoYXJhY3RlcnMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YXBwZW5kQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
IHsgYXBwZW5kQ2hhcmFjdGVycyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFj
dGVycyksIGxlbmd0aCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4g
dm9pZCBhcHBlbmQoU3RyaW5nVHlwZXMuLi4pOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQXRv
bVN0cmluZyYgYXRvbVN0cmluZykKLSAgICB7Ci0gICAgICAgIGFwcGVuZChhdG9tU3RyaW5nLnN0
cmluZygpKTsKLSAgICB9CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBrZWVwIHRoZXNlIG92ZXJs
b2FkcyBvbmx5IGlmIG9wdGltaXphdGlvbnMgbWFrZSB0aGVtIG1vcmUgZWZmaWNpZW50IHRoYW4g
dGhlIHNpbmdsZS1hcmd1bWVudCBmb3JtIG9mIHRoZSB2YXJpYWRpYyBhcHBlbmQgYWJvdmUuCisg
ICAgdm9pZCBhcHBlbmQoY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKSB7IGFwcGVuZChzdHJpbmcu
c3RyaW5nKCkpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBh
cHBlbmQoU3RyaW5nVmlldyk7CisgICAgdm9pZCBhcHBlbmQoVUNoYXIpOworICAgIHZvaWQgYXBw
ZW5kKExDaGFyKTsKKyAgICB2b2lkIGFwcGVuZChjaGFyIGNoYXJhY3RlcikgeyBhcHBlbmQoc3Rh
dGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcikpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hh
ciopOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAg
ICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIEZJ
WE1FOiBBZGQgYSBTdHJpbmdUeXBlQWRhcHRlciBzbyB3ZSBjYW4gYXBwZW5kIG9uZSBzdHJpbmcg
YnVpbGRlciB0byBhbm90aGVyIHdpdGggdmFyaWFkaWMgYXBwZW5kLgorICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFN0cmluZ0J1aWxkZXImKTsKIAotICAgICAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3Vu
dD4gdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJD
b3VudF0pIHsgYXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEp
OyB9CiAKLSAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywg
YW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBj
YWxsZWQpCi0gICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KLSAgICAgICAg
aWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gc3Ry
aW5nOwotICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgICAg
ICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVu
ZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnMx
NigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0
cmluZ0J1aWxkZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOworICAgIHZvaWQgYXBwZW5kQ2hhcmFj
dGVyKFVDaGFyKSA9IGRlbGV0ZTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihMQ2hhcikgPSBk
ZWxldGU7CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoY2hhcikgPSBkZWxldGU7CisgICAgdm9p
ZCBhcHBlbmRDaGFyYWN0ZXIoVUNoYXIzMik7CiAKLSAgICAgICAgaWYgKCFvdGhlci5tX2xlbmd0
aCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB2b2lkIGFwcGVuZFN1YnN0cmluZyhjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCA9IFN0cmluZzo6TWF4TGVu
Z3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5n
KGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBl
bXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBo
YXMgbm90IGJlZW4gY2FsbGVkKQotICAgICAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJp
bmcuCi0gICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyICYmICFvdGhlci5tX3N0cmlu
Zy5pc051bGwoKSkgewotICAgICAgICAgICAgbV9zdHJpbmcgPSBvdGhlci5tX3N0cmluZzsKLSAg
ICAgICAgICAgIG1fbGVuZ3RoID0gb3RoZXIubV9sZW5ndGg7Ci0gICAgICAgICAgICBtX2lzOEJp
dCA9IG90aGVyLm1faXM4Qml0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
Ly8gRklYTUU6IFVuY2xlYXIgd2h5IHRvU3RyaW5nIHJldHVybnMgU3RyaW5nIGFuZCB0b1N0cmlu
Z1ByZXNlcnZlQ2FwYWNpdHkgcmV0dXJucyBjb25zdCBTdHJpbmcmLiBNYWtlIHRoZW0gY29uc2lz
dGVudC4KKyAgICBTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpIGNvbnN0OworICAgIEF0b21TdHJpbmcgdG9BdG9tU3RyaW5nKCkg
Y29uc3Q7CiAKLSAgICAgICAgaWYgKG90aGVyLmlzOEJpdCgpKQotICAgICAgICAgICAgYXBwZW5k
Q2hhcmFjdGVycyhvdGhlci5jaGFyYWN0ZXJzOCgpLCBvdGhlci5tX2xlbmd0aC51bnNhZmVHZXQo
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMob3RoZXIuY2hh
cmFjdGVyczE2KCksIG90aGVyLm1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKLSAgICB9CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fbGVuZ3RoOyB9CisgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcpCi0g
ICAgewotICAgICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVu
ZENoYXJhY3RlcnMoc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdWaWV3Lmxlbmd0aCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmdWaWV3
LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpKTsKLSAgICB9CisgICAgb3BlcmF0
b3IgU3RyaW5nVmlldygpIGNvbnN0OworICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3Q7CiAKLSNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5k
KENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmIFVTRShDRikgJiYgZGVmaW5lZChfX09CSkNfXykK
LSAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFwcGVuZCgoX19icmlkZ2UgQ0ZT
dHJpbmdSZWYpc3RyaW5nKTsgfQotI2VuZGlmCisgICAgYm9vbCBpczhCaXQoKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3Qg
eyByZXR1cm4gY2hhcmFjdGVyczxMQ2hhcj4oKTsgfQorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzMTYoKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzPFVDaGFyPigpOyB9CiAgICAgCi0gICAg
dm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5nOjpNYXhMZW5ndGgpCi0gICAgewotICAgICAgICBp
ZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB1
bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJl
c2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CiAKLSAgICAgICAgdW5zaWduZWQg
Y2xhbXBlZExlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgc3RyaW5nLmxlbmd0aCgpIC0gb2Zmc2V0
KTsKLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVuZENoYXJh
Y3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQsIGNsYW1wZWRMZW5ndGgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJz
MTYoKSArIG9mZnNldCwgY2xhbXBlZExlbmd0aCk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHNocmluayh1bnNpZ25lZCBuZXdMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIHNob3VsZFNocmlua1RvRml0KCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2hyaW5rVG9GaXQoKTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGNo
YXJhY3RlcnMpCi0gICAgewotICAgICAgICBpZiAoY2hhcmFjdGVycykKLSAgICAgICAgICAgIGFw
cGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgc3RybGVuKGNoYXJhY3RlcnMpKTsKLSAgICB9Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBlbmRDaGFyYWN0ZXIoVUNoYXIpID0gZGVsZXRlOwotICAgIHZvaWQgYXBwZW5kKFVDaGFy
IGMpCi0gICAgewotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWdu
ZWQ+KCk7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBsZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3Ro
KCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmICghbV9pczhCaXQpIHsK
LSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltsZW5ndGhdID0gYzsKLSAgICAg
ICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzTGF0aW4xKGMpKSB7Ci0gICAgICAgICAgICAgICAg
bV9idWZmZXJDaGFyYWN0ZXJzOFtsZW5ndGhdID0gc3RhdGljX2Nhc3Q8TENoYXI+KGMpOwotICAg
ICAgICAgICAgICAgIG1fbGVuZ3RoKys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFwcGVuZENoYXJhY3RlcnMoJmMsIDEpOwotICAg
IH0KK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5
cGUsIHR5cGVuYW1lIEN1cnJlbnRDaGFyYWN0ZXJUeXBlPiB2b2lkIGFsbG9jYXRlQnVmZmVyKGNv
bnN0IEN1cnJlbnRDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVx
dWlyZWRDYXBhY2l0eSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9p
ZCByZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOworICAgIHZvaWQg
cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKIAotICAgIHZvaWQg
YXBwZW5kQ2hhcmFjdGVyKExDaGFyKSA9IGRlbGV0ZTsKLSAgICB2b2lkIGFwcGVuZChMQ2hhciBj
KQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVk
PigpOwotICAgICAgICBpZiAobV9idWZmZXIgJiYgbGVuZ3RoIDwgbV9idWZmZXItPmxlbmd0aCgp
ICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9pczhCaXQpCi0gICAg
ICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzOFtsZW5ndGhdID0gYzsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltsZW5ndGhdID0gYzsK
LSAgICAgICAgICAgIG1fbGVuZ3RoKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXBw
ZW5kQ2hhcmFjdGVycygmYywgMSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IENoYXJhY3RlclR5cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25l
ZCByZXF1aXJlZExlbmd0aCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Q2hhcmFjdGVyVHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBMQ2hhciogZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nTENoYXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBVQ2hhciogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVy
dCh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3Rlcihj
aGFyKSA9IGRlbGV0ZTsKLSAgICB2b2lkIGFwcGVuZChjaGFyIGMpCi0gICAgewotICAgICAgICBh
cHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGMpKTsKLSAgICB9CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgcmVpZnlTdHJpbmcoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVy
KFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIGlmIChVX0lTX0JNUChjKSkgewotICAgICAgICAg
ICAgYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYXBwZW5kKFUxNl9MRUFEKGMpKTsKLSAgICAgICAgYXBwZW5kKFUx
Nl9UUkFJTChjKSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVB
ZGFwdGVycz4gdm9pZCBhcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0ZXJzLi4uKTsK
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29u
c3QgU3RyaW5nJik7CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmc7CisgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG1fYnVmZmVyOworICAgIHVuc2lnbmVkIG1fbGVuZ3RoIHsgMCB9OworICAgIGJv
b2wgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgeyB0cnVlIH07Cit9OwogCi0gICAgdGVtcGxhdGU8
dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZExp
dGVyYWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSkgeyBhcHBlbmRD
aGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGNoYXJhY3RlckNvdW50IC0gMSk7IH0KK3RlbXBsYXRlPD4g
c3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmdCdWlsZGVyPjsKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiB2b2lkIGFwcGVuZChTdHJpbmdU
eXBlcy4uLik7CisvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFN0cmluZ1ZpZXcgYW5kIG1ha2UgaXQg
dGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIFN0cmluZ0J1aWxkZXI/Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImLCBj
b25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIFN0cmluZyB0b1N0
cmluZygpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1fYnVmZmVyIHx8IG1faXNSZWlmaWVkKTsKLSAgICAgICAgICAgIEFTU0VS
VCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICAg
ICAgfQorLy8gSW5saW5lIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KIAotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgcmVpZnlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwotICAgIH0KK2lu
bGluZSBTdHJpbmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKE92ZXJmbG93SGFuZGxlciBwb2xpY3kp
CisgICAgOiBtX3Nob3VsZENyYXNoT25PdmVyZmxvdyB7IHBvbGljeSA9PSBPdmVyZmxvd0hhbmRs
ZXI6OkNyYXNoT25PdmVyZmxvdyB9Cit7Cit9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
aGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgaWYgKG1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmVpZnlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwotICAgIH0KK2lu
bGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmNsZWFyKCkKK3sKKyAgICBtX3N0cmluZyA9IHsgfTsK
KyAgICBtX2J1ZmZlciA9IG51bGxwdHI7CisgICAgbV9sZW5ndGggPSAwOworICAgIC8vIFdlIGlu
dGVudGlvbmFsbHkgZG8gbm90IGNoYW5nZSBtX3Nob3VsZENyYXNoT25PdmVyZmxvdy4KK30KIAot
ICAgIEF0b21TdHJpbmcgdG9BdG9tU3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBpZiAoIW1fbGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgpOwotCi0gICAgICAgIC8vIElmIHRoZSBidWZmZXIg
aXMgc3VmZmljaWVudGx5IG92ZXItYWxsb2NhdGVkLCBtYWtlIGEgbmV3IEF0b21TdHJpbmcgZnJv
bSBhIGNvcHkgc28gaXRzIGJ1ZmZlciBpcyBub3Qgc28gbGFyZ2UuCi0gICAgICAgIGlmIChjYW5T
aHJpbmsoKSkgewotICAgICAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBBdG9tU3RyaW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBBdG9tU3RyaW5nKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7ICAgICAgICAgICAgCi0g
ICAgICAgIH0KK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OnN3YXAoU3RyaW5nQnVpbGRlciYg
b3RoZXIpCit7CisgICAgbV9zdHJpbmcuc3dhcChvdGhlci5tX3N0cmluZyk7CisgICAgbV9idWZm
ZXIuc3dhcChvdGhlci5tX2J1ZmZlcik7CisgICAgc3RkOjpzd2FwKG1fbGVuZ3RoLCBvdGhlci5t
X2xlbmd0aCk7CisgICAgc3RkOjpzd2FwKG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93LCBvdGhlci5t
X3Nob3VsZENyYXNoT25PdmVyZmxvdyk7Cit9CiAKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKG1fc3RyaW5nKTsKK2lubGluZSBT
dHJpbmdCdWlsZGVyOjpvcGVyYXRvciBTdHJpbmdWaWV3KCkgY29uc3QKK3sKKyAgICBpZiAoaXM4
Qml0KCkpCisgICAgICAgIHJldHVybiB7IGNoYXJhY3RlcnM8TENoYXI+KCksIGxlbmd0aCgpIH07
CisgICAgcmV0dXJuIHsgY2hhcmFjdGVyczxVQ2hhcj4oKSwgbGVuZ3RoKCkgfTsKK30KIAotICAg
ICAgICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhtX2J1ZmZl
ci5nZXQoKSwgMCwgbV9sZW5ndGgudW5zYWZlR2V0KCkpOworaW5saW5lIHZvaWQgU3RyaW5nQnVp
bGRlcjo6YXBwZW5kKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICBpZiAobV9idWZmZXIgJiYgbV9s
ZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAg
ICAgaWYgKCFtX2J1ZmZlci0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VUNo
YXIqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxVQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBjaGFyYWN0
ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTGF0aW4x
KGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8TENoYXIqPihtX2J1ZmZlci0+
Y2hhcmFjdGVyczxMQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hh
cmFjdGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KKyAgICBhcHBl
bmRDaGFyYWN0ZXJzKCZjaGFyYWN0ZXIsIDEpOworfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwot
ICAgICAgICByZXR1cm4gbV9sZW5ndGgudW5zYWZlR2V0KCk7CitpbmxpbmUgdm9pZCBTdHJpbmdC
dWlsZGVyOjphcHBlbmQoTENoYXIgY2hhcmFjdGVyKQoreworICAgIGlmIChtX2J1ZmZlciAmJiBt
X2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgeworICAg
ICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICAgICAgY29uc3RfY2FzdDxMQ2hh
cio+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPExDaGFyPigpKVttX2xlbmd0aCsrXSA9IGNoYXJhY3Rl
cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29uc3RfY2FzdDxVQ2hhcio+KG1fYnVmZmVy
LT5jaGFyYWN0ZXJzPFVDaGFyPigpKVttX2xlbmd0aCsrXSA9IGNoYXJhY3RlcjsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBhcHBlbmRDaGFyYWN0ZXJzKCZjaGFyYWN0ZXIsIDEpOworfQog
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fbGVuZ3RoOyB9CitpbmxpbmUg
dm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAg
Ly8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5v
dCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBjYWxsZWQpCisgICAgLy8g
dGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgorICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVm
ZmVyKSB7CisgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBtX2xlbmd0aCA9IHN0
cmluZy5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CisgICAg
YXBwZW5kKFN0cmluZ1ZpZXcgeyBzdHJpbmcgfSk7Cit9CiAKLSAgICB1bnNpZ25lZCBjYXBhY2l0
eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgp
KTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0aCgpIDogbV9sZW5n
dGgudW5zYWZlR2V0KCk7CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3Qg
U3RyaW5nQnVpbGRlciYgb3RoZXIpCit7CisgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFu
IGVtcHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5
IGhhcyBub3QgYmVlbiBjYWxsZWQpCisgICAgLy8gdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5n
LgorICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyICYmICFvdGhlci5tX3N0cmluZy5pc051
bGwoKSkgeworICAgICAgICAvLyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNy
YXNoIG9uIG92ZXJmbG93IHdpdGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgICAg
ICBtX3N0cmluZyA9IG90aGVyLm1fc3RyaW5nOworICAgICAgICBtX2xlbmd0aCA9IG90aGVyLmxl
bmd0aCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcmVzaXplKHVuc2lnbmVkIG5ld1NpemUpOworICAgIGFwcGVuZChTdHJpbmdWaWV3IHsg
b3RoZXIgfSk7Cit9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5TaHJpbmsoKSBj
b25zdDsKK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdWaWV3IHN0cmlu
ZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXJz
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIGVsc2UKKyAgICAg
ICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSk7Cit9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaHJpbmtUb0ZpdCgpOworaW5s
aW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kU3Vic3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBhcHBlbmQoU3Ry
aW5nVmlldyB7IHN0cmluZyB9LnN1YnN0cmluZyhvZmZzZXQsIGxlbmd0aCkpOworfQogCi0gICAg
VUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaGFzT3ZlcmZsb3dlZCgpICYmIGkg
PCBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICBpZiAobV9pczhCaXQp
Ci0gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyczgoKVtpXTsKLSAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcnMxNigpW2ldOwotICAgIH0KK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVu
ZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQoreworICAgIGFwcGVuZChTdHJpbmdWaWV3IHsgY2hh
cmFjdGVycyB9KTsKK30KIAotICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQobV9pczhCaXQpOwotICAgICAgICBpZiAoIW1fbGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAg
QVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgp
OworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYykK
K3sKKyAgICBpZiAoVV9JU19CTVAoYykpIHsKKyAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PFVD
aGFyPihjKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgYXBwZW5kKFUxNl9MRUFEKGMp
KTsKKyAgICBhcHBlbmQoVTE2X1RSQUlMKGMpKTsKK30KIAotICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzMTYoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0gICAg
ICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aWYgKCFtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFy
YWN0ZXJzMTYoKTsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5jaGFyYWN0ZXJzMTYoKTsKK2lubGluZSBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9T
dHJpbmcoKQoreworICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkgeworICAgICAgICBzaHJpbmtU
b0ZpdCgpOworICAgICAgICByZWlmeVN0cmluZygpOwogICAgIH0KLSAgICAKLSAgICBib29sIGlz
OEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OworICAgIHJldHVybiBtX3N0cmluZzsKK30KIAotICAg
IG9wZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdDsKK2lubGluZSBjb25zdCBTdHJpbmcmIFN0cmlu
Z0J1aWxkZXI6OnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
c3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZWlmeVN0cmluZygpOworICAgIHJldHVybiBtX3N0
cmluZzsKK30KIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9sZW5ndGggPSAw
OwotICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgICAgICBtX2J1ZmZlciA9IG51bGxw
dHI7Ci0gICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczggPSBudWxscHRyOwotICAgICAgICBtX2lz
OEJpdCA9IHRydWU7Ci0gICAgfQoraW5saW5lIEF0b21TdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9B
dG9tU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZW1wdHlBdG9tKCk7CiAKLSAgICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
cikKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgc3RyaW5nQnVpbGRlci5tX2xl
bmd0aCk7Ci0gICAgICAgIG1fc3RyaW5nLnN3YXAoc3RyaW5nQnVpbGRlci5tX3N0cmluZyk7Ci0g
ICAgICAgIG1fYnVmZmVyLnN3YXAoc3RyaW5nQnVpbGRlci5tX2J1ZmZlcik7Ci0gICAgICAgIHN0
ZDo6c3dhcChtX2lzOEJpdCwgc3RyaW5nQnVpbGRlci5tX2lzOEJpdCk7Ci0gICAgICAgIHN0ZDo6
c3dhcChtX2J1ZmZlckNoYXJhY3RlcnM4LCBzdHJpbmdCdWlsZGVyLm1fYnVmZmVyQ2hhcmFjdGVy
czgpOwotICAgICAgICBBU1NFUlQoIW1fYnVmZmVyIHx8IGhhc092ZXJmbG93ZWQoKSB8fCBtX2J1
ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICB9
CisgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyBzdWZmaWNpZW50bHkgb3Zlci1hbGxvY2F0ZWQsIG1h
a2UgYSBuZXcgQXRvbVN0cmluZyBmcm9tIGEgY29weSBzbyBpdHMgYnVmZmVyIGlzIG5vdCBzbyBs
YXJnZS4KKyAgICBpZiAoc2hvdWxkU2hyaW5rVG9GaXQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
Z1ZpZXcgeyAqdGhpcyB9LnRvQXRvbVN0cmluZygpOwogCi1wcml2YXRlOgotICAgIHZvaWQgYWxs
b2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1
aXJlZExlbmd0aCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVu
dENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB2b2lkIGFsbG9jYXRl
QnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZv
aWQgcmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBl
eHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcodW5zaWduZWQgYWRkaXRpb25hbExlbmd0aCk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJU
eXBlKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRob3V0T3ZlcmZsb3dDaGVjayhDaGVja2Vk
SW50MzIgcmVxdWlyZWRMZW5ndGgpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IENoYXJhY3RlclR5cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2ln
bmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTENoYXIqIGV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZzgoQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgVUNoYXIqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzE2KENoZWNr
ZWRJbnQzMiByZXF1aXJlZExlbmd0aCk7CisgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIG1fc3RyaW5nOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBnZXRCdWZmZXJDaGFyYWN0ZXJzKCk7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVpZnlTdHJpbmcoKSBjb25zdDsKKyAgICAv
LyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNyYXNoIG9uIG92ZXJmbG93IHdp
dGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgIEFTU0VSVChtX2J1ZmZlcik7Cisg
ICAgcmV0dXJuIHsgbV9idWZmZXIuZ2V0KCksIDAsIGxlbmd0aCgpIH07Cit9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRlcnM+IHZvaWQgYXBwZW5kRnJvbUFkYXB0
ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLik7CitpbmxpbmUgdW5zaWduZWQgU3RyaW5nQnVpbGRl
cjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgp
KTsKKyAgICByZXR1cm4gbV9sZW5ndGg7Cit9CiAKLSAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmlu
ZzsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9idWZmZXI7Ci0gICAgdW5pb24gewotICAgICAg
ICBMQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJzODsKLSAgICAgICAgVUNoYXIqIG1fYnVmZmVyQ2hh
cmFjdGVyczE2OwotICAgIH07Ci0gICAgc3RhdGljX2Fzc2VydChTdHJpbmc6Ok1heExlbmd0aCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIpOwotICAgIENoZWNrZWQ8
aW50MzJfdCwgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c+IG1fbGVuZ3RoOwotICAgIGJvb2wg
bV9pczhCaXQgeyB0cnVlIH07Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtdXRhYmxlIGJvb2wg
bV9pc1JlaWZpZWQgeyBmYWxzZSB9OwotI2VuZGlmCi19OworaW5saW5lIHVuc2lnbmVkIFN0cmlu
Z0J1aWxkZXI6OmNhcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1
ZmZlci0+bGVuZ3RoKCkgOiBsZW5ndGgoKTsKK30KIAotaW5saW5lIFN0cmluZ0J1aWxkZXI6Om9w
ZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdAoraW5saW5lIFVDaGFyIFN0cmluZ0J1aWxkZXI6Om9w
ZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKIHsKLSAgICBpZiAobV9pczhCaXQpCi0gICAgICAg
IHJldHVybiB7IGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpIH07Ci0gICAgcmV0dXJuIHsgY2hhcmFj
dGVyczE2KCksIGxlbmd0aCgpIH07CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpIDwgbGVuZ3RoKCkpOworICAgIHJldHVybiBpczhCaXQoKSA/IGNoYXJhY3Rl
cnM8TENoYXI+KClbaV0gOiBjaGFyYWN0ZXJzPFVDaGFyPigpW2ldOwogfQogCi10ZW1wbGF0ZTw+
Ci1BTFdBWVNfSU5MSU5FIExDaGFyKiBTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJDaGFyYWN0ZXJz
PExDaGFyPigpCitpbmxpbmUgYm9vbCBTdHJpbmdCdWlsZGVyOjppczhCaXQoKSBjb25zdAogewot
ICAgIEFTU0VSVChtX2lzOEJpdCk7Ci0gICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczg7Cisg
ICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmlzOEJpdCgpIDogbV9zdHJpbmcuaXM4Qml0
KCk7CiB9CiAKLXRlbXBsYXRlPD4KLUFMV0FZU19JTkxJTkUgVUNoYXIqIFN0cmluZ0J1aWxkZXI6
OmdldEJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGlubGluZSBjb25zdCBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjpjaGFyYWN0
ZXJzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1faXM4Qml0KTsKLSAgICByZXR1cm4gbV9idWZm
ZXJDaGFyYWN0ZXJzMTY7CisgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5n
LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKKyAgICByZXR1cm4gbV9idWZmZXItPmNoYXJh
Y3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5n
VHlwZUFkYXB0ZXJzPgotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMoU3Ry
aW5nVHlwZUFkYXB0ZXJzLi4uIGFkYXB0ZXJzKQordGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5n
VHlwZUFkYXB0ZXJzPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZEZyb21BZGFwdGVycyhTdHJp
bmdUeXBlQWRhcHRlcnMuLi4gYWRhcHRlcnMpCiB7Ci0gICAgYXV0byByZXF1aXJlZExlbmd0aCA9
IGNoZWNrZWRTdW08aW50MzJfdD4obV9sZW5ndGgsIGFkYXB0ZXJzLmxlbmd0aCgpLi4uKTsKLSAg
ICBpZiAobV9pczhCaXQgJiYgYXJlOEJpdChhZGFwdGVycy4uLikpIHsKLSAgICAgICAgTENoYXIq
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nOChyZXF1aXJlZExlbmd0aCk7
Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVy
Zmxvd2VkKCkpOworICAgIGF1dG8gcmVxdWlyZWRMZW5ndGggPSBzYXR1cmF0ZWRTdW08dWludDMy
X3Q+KG1fbGVuZ3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7CisgICAgaWYgKGlzOEJpdCgpICYm
IGFyZThCaXQoYWRhcHRlcnMuLi4pKSB7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb24gPSBleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmdMQ2hhcihyZXF1aXJlZExlbmd0aCk7CisgICAgICAgIGlmICgh
ZGVzdGluYXRpb24pCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgc3Ry
aW5nVHlwZUFkYXB0ZXJBY2N1bXVsYXRvcihkZXN0aW5hdGlvbiwgYWRhcHRlcnMuLi4pOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZzE2KHJlcXVpcmVkTGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikgewot
ICAgICAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSk7CisgICAgICAgIGF1dG8gZGVzdGlu
YXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRoVXBjb252ZXJ0KHJlcXVpcmVkTGVu
Z3RoKTsKKyAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQogICAgICAgICBzdHJpbmdUeXBlQWRhcHRlckFjY3VtdWxhdG9yKGRlc3RpbmF0aW9u
LCBhZGFwdGVycy4uLik7CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdU
eXBlcz4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKFN0cmluZ1R5cGVzLi4uIHN0cmluZ3Mp
Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4gdm9pZCBTdHJpbmdCdWlsZGVyOjph
cHBlbmQoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKIHsKICAgICBhcHBlbmRGcm9tQWRhcHRlcnMo
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZXM+KHN0cmluZ3MpLi4uKTsKIH0KIAotLy8gRklY
TUU6IE1vdmUgdGhpcyB0byBTdHJpbmdWaWV3IGFuZCBtYWtlIGl0IHRha2UgYSBTdHJpbmdWaWV3
IGluc3RlYWQgb2YgYSBTdHJpbmdCdWlsZGVyPwotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nQnVpbGRlciYgcywgY29uc3QgQ2hhcmFjdGVy
VHlwZSogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IENo
YXJhY3RlclR5cGUqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChzLmxlbmd0
aCgpICE9IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHMuaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBlcXVhbChzLmNoYXJhY3RlcnM4KCksIGJ1ZmZlciwgbGVuZ3Ro
KTsKLQotICAgIHJldHVybiBlcXVhbChzLmNoYXJhY3RlcnMxNigpLCBidWZmZXIsIGxlbmd0aCk7
CisgICAgcmV0dXJuIGJ1aWxkZXIgPT0gU3RyaW5nVmlldyB7IGJ1ZmZlciwgbGVuZ3RoIH07CiB9
CiAKIHRlbXBsYXRlPD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJp
bmdCdWlsZGVyPiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHZvaWQ7CiAgICAgdXNpbmcgQWRk
aXRpb25hbEFyZ3VtZW50VHlwZSA9IFN0cmluZ0J1aWxkZXI7Ci0gICAgc3RhdGljIHZvaWQgZmx1
c2goTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nQnVpbGRlciogc3Ry
aW5nQnVpbGRlcikgeyBzdHJpbmdCdWlsZGVyLT5hcHBlbmRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMs
IGxlbmd0aCk7IH0KKyAgICBzdGF0aWMgdm9pZCBmbHVzaChjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBidWlsZGVyKSB7IGJ1aWxkZXItPmFw
cGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKTsgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXJKU09O
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwCmluZGV4IGMz
MTE4YjYzOTFiZmVmMmI4Y2VmODdkNjZhZjNiZDZiOWI3MWI5MGIuLjgzZWQzOGIxOTgxOTRhMDQ2
OTJlYmUxYTYyOGJlODNmMzczMWFiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlckpTT04uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlckpTT04uY3BwCkBAIC0xMDUsNTIgKzEwNSw1OCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKGhh
c092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZl
IGVub3VnaCBidWZmZXIgc3BhY2UgdG8gYXBwZW5kIHRoaXMgc3RyaW5nIHdpdGhvdXQgaGF2aW5n
Ci0gICAgLy8gdG8gd29ycnkgYWJvdXQgcmVhbGxvY2F0aW5nIGluIHRoZSBtaWRkbGUuCisKKyAg
ICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggYnVmZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlz
IHN0cmluZyBmb3Igd29yc3QgY2FzZSB3aXRob3V0IHJlYWxsb2NhdGluZy4KICAgICAvLyBUaGUg
MiBpcyBmb3IgdGhlICciJyBxdW90ZXMgb24gZWFjaCBlbmQuCi0gICAgLy8gVGhlIDYgaXMgZm9y
IGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIFx1Tk5OTiBlbmNvZGVkLgorICAgIC8vIFRoZSA2
IGlzIHRoZSB3b3JzdCBjYXNlIGZvciBhIHNpbmdsZSBjb2RlIHVuaXQgdGhhdCBjb3VsZCBiZSBl
bmNvZGVkIGFzIFx1Tk5OTi4KICAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
c3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZCA9IGxlbmd0aCgpOwotICAgIG1h
eGltdW1DYXBhY2l0eVJlcXVpcmVkICs9IDIgKyBzdHJpbmdMZW5ndGggKiA2OwotICAgIHVuc2ln
bmVkIGFsbG9jYXRpb25TaXplOwotICAgIGlmIChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09
IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkLnNhZmVHZXQoYWxsb2NhdGlvblNpemUpKQotICAgICAg
ICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKLSAgICAvLyBUaGlzIG1heCgpIGlzIGhlcmUgdG8gYWxs
b3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMgYmV0d2VlbiB0aGUgcmFuZ2UgWzJeMzEsIDJeMzIgLSAy
XSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2VyT2ZUd28oMTw8MzEgKyBzb21lIGludCBzbWFsbGVyIHRo
YW4gMTw8MzEpID09IDAuCi0gICAgLy8gRklYTUU6IHJvdW5kVXBUb1Bvd2VyT2ZUd28gc2hvdWxk
IHRha2UgQ2hlY2tlZDx1bnNpZ25lZD4gYW5kIGFib3J0IGlmIGl0IGZhaWxzIHRvIHJvdW5kIHVw
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYwODYK
LSAgICBhbGxvY2F0aW9uU2l6ZSA9IHN0ZDo6bWF4KGFsbG9jYXRpb25TaXplLCByb3VuZFVwVG9Q
b3dlck9mVHdvKGFsbG9jYXRpb25TaXplKSk7CisgICAgYXV0byBtYXhpbXVtQ2FwYWNpdHlSZXF1
aXJlZCA9IG1fbGVuZ3RoICsgMiArIHN0cmluZ0xlbmd0aCAqIDY7CisgICAgaWYgKG1heGltdW1D
YXBhY2l0eVJlcXVpcmVkLmhhc092ZXJmbG93ZWQoKSkgeworICAgICAgICBkaWRPdmVyZmxvdygp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gQWxsb2NhdGluZyB0aGlzIG11Y2gg
d2lsbCBkZWZpbml0ZWx5IGZhaWwuCi0gICAgaWYgKGFsbG9jYXRpb25TaXplID4gU3RyaW5nOjpN
YXhMZW5ndGgpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOworICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgbWF4aW11bSBsZW5ndGggYmVmb3JlIGNhbGxpbmcgcm91bmRVcFBvd2VyT2ZUd28g
YmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHJldHVybnMgMCBmb3IgdmFsdWVzIGluIHRoZSByYW5nZSBb
Ml4zMSwgMl4zMi0yXS4KKyAgICAvLyBGSVhNRTogSW5zdGVhZCwgcm91bmRVcFRvUG93ZXJPZlR3
byBzaG91bGQgYmUgZml4ZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsIGluIHRob3NlIGNh
c2VzLCBwZXJoYXBzIHVzaW5nIGNoZWNrZWQgb3Igc2F0dXJhdGVkIGFyaXRobWV0aWMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjA4NgorICAgIGF1
dG8gYWxsb2NhdGlvblNpemUgPSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsK
KyAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBTdHJpbmc6Ok1heExlbmd0aCkgeworICAgICAgICBk
aWRPdmVyZmxvdygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFsbG9jYXRpb25TaXpl
ID0gcm91bmRVcFRvUG93ZXJPZlR3byhhbGxvY2F0aW9uU2l6ZSk7CisgICAgaWYgKGFsbG9jYXRp
b25TaXplID4gU3RyaW5nOjpNYXhMZW5ndGgpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIC8vIEZJWE1FOiBDb25zaWRlciBzd2l0Y2hpbmcg
dG8gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nL3NocmluayBpbnN0ZWFkIHRvIHNoYXJlIG1vcmUg
Y29kZSB3aXRoIHRoZSByZXN0IG9mIFN0cmluZ0J1aWxkZXIuCiAgICAgaWYgKGlzOEJpdCgpICYm
ICFzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVm
ZmVyQ2hhcmFjdGVyczgsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXI8
VUNoYXI+KGNoYXJhY3RlcnM8TENoYXI+KCksIGFsbG9jYXRpb25TaXplKTsKICAgICBlbHNlCiAg
ICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxvY2F0aW9uU2l6ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KGhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID49IGFsbG9jYXRpb25TaXplKTsKIAotICAgIGlmIChpczhCaXQoKSkgewotICAg
ICAgICBBU1NFUlQoc3RyaW5nLmlzOEJpdCgpKTsKLSAgICAgICAgTENoYXIqIG91dHB1dCA9IG1f
YnVmZmVyQ2hhcmFjdGVyczggKyBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAg
aWYgKG1fYnVmZmVyLT5pczhCaXQoKSkgeworICAgICAgICBhdXRvIGNoYXJhY3RlcnMgPSBjb25z
dF9jYXN0PExDaGFyKj4obV9idWZmZXItPmNoYXJhY3RlcnM8TENoYXI+KCkpOworICAgICAgICBh
dXRvIG91dHB1dCA9IGNoYXJhY3RlcnMgKyBtX2xlbmd0aDsKICAgICAgICAgKm91dHB1dCsrID0g
JyInOwogICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJp
bmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgKm91dHB1dCsrID0g
JyInOwotICAgICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIG1fYnVmZmVyQ2hhcmFjdGVyczg7Cisg
ICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gY2hhcmFjdGVyczsKICAgICB9IGVsc2UgewotICAg
ICAgICBVQ2hhciogb3V0cHV0ID0gbV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBtX2xlbmd0aC51bnNh
ZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAgICAgIGF1dG8gY2hhcmFjdGVycyA9IGNvbnN0X2Nhc3Q8
VUNoYXIqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxVQ2hhcj4oKSk7CisgICAgICAgIGF1dG8gb3V0
cHV0ID0gY2hhcmFjdGVycyArIG1fbGVuZ3RoOwogICAgICAgICAqb3V0cHV0KysgPSAnIic7CiAg
ICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09O
U3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0lu
dGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwog
ICAgICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9i
dWZmZXJDaGFyYWN0ZXJzMTY7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gY2hhcmFjdGVy
czsKICAgICB9Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1
ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBB
U1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVu
YXRlQ0YuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyYTgxZDIyNmQ3MzRiMDk4YzYyMGEwZGFhNjkyZmMyNTg4NzBkYjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0Yu
aApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCisjaWYgVVNFKENGKQorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1Jl
Zj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVmKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IENGU3RyaW5nR2V0TGVu
Z3RoKG1fc3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFt
X3N0cmluZyB8fCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcsIGtDRlN0cmluZ0VuY29k
aW5nSVNPTGF0aW4xKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZv
aWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0ZTdHJp
bmdSZWYgbV9zdHJpbmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdS
ZWY+OjpTdHJpbmdUeXBlQWRhcHRlcihDRlN0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0cmlu
ZyB7IHN0cmluZyB9Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFk
YXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciogZGVzdGluYXRpb24pIGNv
bnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBzdGQ6Om1lbWNweShkZXN0aW5hdGlv
biwgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xh
dGluMSksIENGU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5s
aW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFyPihV
Q2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBD
RlN0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0
TGVuZ3RoKG1fc3RyaW5nKSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3RpbmF0aW9u
KSk7Cit9CisKKyNpZmRlZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVB
ZGFwdGVyPE5TU3RyaW5nICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVm
PiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmluZykKKyAg
ICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENGU3RyaW5n
UmVmKXN0cmluZykKKyAgICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2VuZGlmIC8v
IFVTRShDRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVh
bUNvY29hLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0K
aW5kZXggYzc0YmY5Y2NmZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2YjlkM2Y0
MTZhZDI0OTczNDY0NWRmZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0IDx3dGYv
dGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBUZXh0
U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FpcnBsYXkvV2ViTWVkaWFTZXNzaW9uTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FpcnBsYXkvV2ViTWVkaWFTZXNzaW9u
TWFuYWdlci5jcHAKaW5kZXggM2ViN2JmOWI4NzVmNGE5YmQ5ZTUyMzgxZWM5N2Y5MGNhMjU4MWU2
NC4uMjk4M2MwZWYxMWFhM2MwNmUyMjYzMTQ3NjU0YmJkNWYzZGRkZjM5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9haXJwbGF5L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYWlycGxheS9XZWJNZWRpYVNlc3Npb25NYW5h
Z2VyLmNwcApAQCAtNzMsNiArNzMsNyBAQCBzdGF0aWMgYm9vbCBmbGFnc0FyZVNldChNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgdmFsdWUsIE1lZGlhUHJvZHVjZXI6Ok1lZAogU3RyaW5n
IG1lZGlhUHJvZHVjZXJTdGF0ZVN0cmluZyhNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mg
ZmxhZ3MpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmc7CisgICAgc3RyaW5nLmFwcGVuZCgi
IHsgIik7CiAgICAgaWYgKGZsYWdzICYgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZTo6SXNQbGF5
aW5nQXVkaW8pCiAgICAgICAgIHN0cmluZy5hcHBlbmQoIklzUGxheWluZ0F1ZGlvKyIpOwogICAg
IGlmIChmbGFncyAmIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGU6OklzUGxheWluZ1ZpZGVvKQpA
QCAtOTIsOSArOTMsOSBAQCBTdHJpbmcgbWVkaWFQcm9kdWNlclN0YXRlU3RyaW5nKE1lZGlhUHJv
ZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBmbGFncykKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgc3RyaW5nLmFwcGVuZCgiSXNOb3RQbGF5aW5nIik7CiAgICAgZWxzZQotICAgICAg
ICBzdHJpbmcucmVzaXplKHN0cmluZy5sZW5ndGgoKSAtIDEpOwotCi0gICAgcmV0dXJuIG1ha2VT
dHJpbmcoIiB7ICIsIHN0cmluZy50b1N0cmluZygpLCAiIH0iKTsKKyAgICAgICAgc3RyaW5nLnNo
cmluayhzdHJpbmcubGVuZ3RoKCkgLSAxKTsKKyAgICBzdHJpbmcuYXBwZW5kKCIgfSIpOworICAg
IHJldHVybiBzdHJpbmcudG9TdHJpbmcoKTsKIH0KIAogY2xhc3MgV2ViTWVkaWFTZXNzaW9uTG9n
Z2VyIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHAKaW5kZXggODJiZjE5YWU4Mjg2NzhkNDRlYWZjZDY0Nzk4ZTdlMGMzNjBlZjYzYy4u
NWIyMzE1NWUwYWU4ZWVhYTk1NDFmZGVhNTkxNDUxMWRlOWJiZjMxZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTU1Niw3
ICs1NTYsNyBAQCBzdGF0aWMgdm9pZCBzdHJpcFRyYWlsaW5nTmV3bGluZShTdHJpbmdCdWlsZGVy
JiByZXN1bHQpCiAgICAgLy8gUmVtb3ZlIG9uZSB0cmFpbGluZyBuZXdsaW5lOyB0aGVyZSdzIGFs
d2F5cyBvbmUgdGhhdCdzIGNvbGxhcHNlZCBvdXQgYnkgcmVuZGVyaW5nLgogICAgIHNpemVfdCBz
aXplID0gcmVzdWx0Lmxlbmd0aCgpOwogICAgIGlmIChzaXplICYmIHJlc3VsdFtzaXplIC0gMV0g
PT0gbmV3bGluZUNoYXJhY3RlcikKLSAgICAgICAgcmVzdWx0LnJlc2l6ZShzaXplIC0gMSk7Cisg
ICAgICAgIHJlc3VsdC5zaHJpbmsoc2l6ZSAtIDEpOwogfQogCiBzdGF0aWMgU3RyaW5nIGlubmVy
VGV4dFZhbHVlRnJvbShUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQmIGlubmVyVGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Ri5jcHAKaW5kZXggNzNjODAxYjkzOGM3YThkOGY0ZDRkNzU1M2VhZTZmNzUxM2ExODE1ZS4uOWYy
YTc2NTgxM2RjNmZhNjQzNmRiY2U3NmZkYzFkMjA1ZDAzNzUyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKQEAgLTQ4
LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0Yu
aD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVu
LmgiCkBAIC0zMDgsMzggKzMwOSwzMCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUY6OmNhcHRpb25zQmFja2dyb3VuZENTUygpIGNvbnN0CiBDb2xvciBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IoYm9vbCYgaW1wb3J0YW50KSBjb25z
dAogewogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKLSAgICBSZXRh
aW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5
Rm9yZWdyb3VuZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9y
KSk7Ci0gICAgQ29sb3IgdGV4dENvbG9yKGNvbG9yLmdldCgpKTsKLSAgICBpZiAoIXRleHRDb2xv
ci5pc1ZhbGlkKCkpCisgICAgQ29sb3IgdGV4dENvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBl
YXJhbmNlQ29weUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIs
ICZiZWhhdmlvcikpLmdldCgpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkgewogICAg
ICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNw
ZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNr
LWNvbnRhaW5lci4KICAgICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAorICAg
IH0KICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yVXNlVmFsdWU7CiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdl
dEZvcmVncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2
aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3Ig
PT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwogICAgIHJldHVybiB0ZXh0
Q29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiB9Ci0gICAgCisKIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdAogewog
ICAgIGJvb2wgaW1wb3J0YW50OwotICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRpb25zVGV4dENv
bG9yKGltcG9ydGFudCk7Ci0KKyAgICBhdXRvIHRleHRDb2xvciA9IGNhcHRpb25zVGV4dENvbG9y
KGltcG9ydGFudCk7CiAgICAgaWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLQogICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3Bl
cnR5Q29sb3IsIHRleHRDb2xvciwgaW1wb3J0YW50KTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5k
Q1NTKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewotICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3Bl
cnR5TmFtZVN0cmluZyhpZCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Ci0gICAgYnVpbGRl
ci5hcHBlbmQodmFsdWUpOwotICAgIGlmIChpbXBvcnRhbnQpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOworICAg
IGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhpZCksICc6JywgdmFsdWUsIGlt
cG9ydGFudCA/ICIgIWltcG9ydGFudDsiIDogIjsiKTsKIH0KICAgICAKIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6d2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNv
bnN0CkBAIC0zNzksNyArMzcyLDYgQEAgYm9vbCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChmbG9hdCBmb250U2l6ZSwgY28KICAgICAvLyBT
aW5jZSBvbmx5IGhhbGYgb2YgdGhlIHN0cm9rZSBpcyB2aXNpYmxlIGJlY2F1c2UgdGhlIHN0cm9r
ZSBpcyBkcmF3biBiZWZvcmUgdGhlIGZpbGwsIHdlIGRvdWJsZSB0aGUgc3Ryb2tlIHdpZHRoIGhl
cmUuCiAgICAgc3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aFB0ICogMjsKICAgICBpbXBvcnRhbnQg
PSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQxOCwyNCArNDEwLDE3IEBAIFN0cmluZyBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNvbnN0
CiB7CiAgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOwogICAgIAotICAg
IFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250ID0gYWRvcHRDRihNQUNhcHRpb25B
cHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW5Vc2VyLCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVs
dCkpOworICAgIGF1dG8gZm9udCA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb250
RGVzY3JpcHRvckZvclN0eWxlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2
aW9yLCBrTUFDYXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZURlZmF1bHQpKTsKICAgICBpZiAoIWZv
bnQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGVHlw
ZVJlZj4gbmFtZSA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5n
ZXQoKSwga0NURm9udE5hbWVBdHRyaWJ1dGUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnROYW1lQXR0cmli
dXRlKSk7CiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAKLSAgICBidWlsZGVyLmFwcGVuZChnZXRQ
cm9wZXJ0eU5hbWVTdHJpbmcoQ1NTUHJvcGVydHlGb250RmFtaWx5KSk7Ci0gICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI6IFwiIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0ZT
dHJpbmdSZWY+KG5hbWUuZ2V0KCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotCi0gICAg
YXV0byBjYXNjYWRlTGlzdCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250
RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udENhc2NhZGVMaXN0QXR0
cmlidXRlKSkpOwotCi0gICAgaWYgKGNhc2NhZGVMaXN0KSB7CisgICAgYnVpbGRlci5hcHBlbmQo
ImZvbnQtZmFtaWx5OiBcIiIsIHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihuYW1lLmdldCgpKSwg
JyInKTsKKyAgICBpZiAoYXV0byBjYXNjYWRlTGlzdCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZB
cnJheVJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9u
dENhc2NhZGVMaXN0QXR0cmlidXRlKSkpKSB7CiAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IENGQXJyYXlHZXRDb3VudChjYXNjYWRlTGlzdC5nZXQoKSk7IGkrKykgewogICAgICAgICAg
ICAgYXV0byBmb250Q2FzY2FkZSA9IHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0b3JSZWY+KENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2FzY2FkZUxpc3QuZ2V0KCksIGkpKTsKICAgICAgICAgICAg
IGlmICghZm9udENhc2NhZGUpCkBAIC00NDMsMTYgKzQyOCwxMCBAQCBTdHJpbmcgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKSBjb25zdAogICAg
ICAgICAgICAgYXV0byBmb250Q2FzY2FkZU5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
b3B5QXR0cmlidXRlKGZvbnRDYXNjYWRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOwogICAgICAg
ICAgICAgaWYgKCFmb250Q2FzY2FkZU5hbWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBcIiIpOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQoKSkpOwot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIsIFwiIiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQo
KSksICciJyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGJlaGF2aW9yID09IGtN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSkKLSAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7Ci0gICAg
CisgICAgYnVpbGRlci5hcHBlbmQoYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhh
dmlvclVzZVZhbHVlID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7CiB9CiAKQEAgLTU2MSw0MyArNTQwLDE4IEBAIFN0cmluZyBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKSBjb25zdAog
I2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAgICAgaWYgKCFNZWRpYUFj
Y2Vzc2liaWxpdHlMaWJyYXJ5KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpOwotICAgIAorCiAgICAgU3RyaW5nIGNh
cHRpb25zQ29sb3IgPSBjYXB0aW9uc1RleHRDb2xvckNTUygpOwogICAgIFN0cmluZyBlZGdlU3R5
bGUgPSBjYXB0aW9uc1RleHRFZGdlQ1NTKCk7CiAgICAgU3RyaW5nIGZvbnROYW1lID0gY2FwdGlv
bnNEZWZhdWx0Rm9udENTUygpOwogICAgIFN0cmluZyBiYWNrZ3JvdW5kID0gY2FwdGlvbnNCYWNr
Z3JvdW5kQ1NTKCk7Ci0gICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAhY2FwdGlvbnND
b2xvci5pc0VtcHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnROYW1lLmlzRW1w
dHkoKSkgewotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmRMaXRlcmFs
KCIgOjoiKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRU
cmFja0N1ZTo6Y3VlU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZCgneycpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5k
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZChiYWNrZ3JvdW5kKTsKLSAgICAgICAgaWYgKCFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChjYXB0aW9uc0NvbG9y
KTsKLSAgICAgICAgaWYgKCFlZGdlU3R5bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlv
bnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGVkZ2VTdHlsZSk7Ci0gICAgICAgIGlmICghZm9u
dE5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQu
YXBwZW5kKGZvbnROYW1lKTsKLSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHls
ZVNoZWV0LmFwcGVuZCgnfScpOwotICAgIH0KLSAgICAKKyAgICBpZiAoIWJhY2tncm91bmQuaXNF
bXB0eSgpIHx8ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHko
KSB8fCAhZm9udE5hbWUuaXNFbXB0eSgpKQorICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVT
aGVldC5hcHBlbmQoIiA6OiIsIFRleHRUcmFja0N1ZTo6Y3VlU2hhZG93UHNldWRvSWQoKSwgJ3sn
LCBiYWNrZ3JvdW5kLCBjYXB0aW9uc0NvbG9yLCBlZGdlU3R5bGUsIGZvbnROYW1lLCAnfScpOwor
CiAgICAgU3RyaW5nIHdpbmRvd0NvbG9yID0gY2FwdGlvbnNXaW5kb3dDU1MoKTsKICAgICBTdHJp
bmcgd2luZG93Q29ybmVyUmFkaXVzID0gd2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpOwot
ICAgIGlmICghd2luZG93Q29sb3IuaXNFbXB0eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZExpdGVy
YWwoIiA6OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoVGV4
dFRyYWNrQ3VlOjpjdWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCkpOwotICAgICAgICBjYXB0aW9u
c092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ3snKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgh
d2luZG93Q29sb3IuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKHdpbmRvd0NvbG9yKTsKLSAgICAgICAgaWYgKCF3aW5kb3dDb3JuZXJSYWRp
dXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQod2luZG93Q29ybmVyUmFkaXVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Y2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQorICAgIGlmICgh
d2luZG93Q29sb3IuaXNFbXB0eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKQor
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoIiA6OiIsIFRleHRUcmFj
a0N1ZTo6Y3VlQmFja2Ryb3BTaGFkb3dQc2V1ZG9JZCgpLCAneycsIHdpbmRvd0NvbG9yLCB3aW5k
b3dDb3JuZXJSYWRpdXMsICd9Jyk7CiAjZW5kaWYgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZ
X0ZSQU1FV09SSykKIAogICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZVNldHRpbmcgc3R5bGUgdG86XG4lcyIsIGNh
cHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAKaW5kZXggMzZjOTk2ODA0Zjk4Mzk1ZmQ2NWYwMjc5NmQxNjRlMzlmZGFhMDBhNC4uOWI2
MjlkMGU1OTMxODliZDkzZDU5ZmU3MzA2N2E4NGU5Nzc1MzM4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAt
NDA0LDcgKzQwNCw3IEBAIFN0cmluZyBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3luY2hyb25vdXNT
Y3JvbGxpbmdSZWFzb25zQXNUZXh0KE9wdGlvblNldDxTeW5jaHJvCiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiSGFzIHNsb3cgcmVwYWludCBkZXNjZW5kYW50IHNjcm9sbGVy
cywgIik7CiAKICAgICBpZiAoc3RyaW5nQnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5yZXNpemUoc3RyaW5nQnVpbGRlci5sZW5ndGgoKSAtIDIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLnNocmluayhzdHJpbmdCdWlsZGVyLmxlbmd0aCgpIC0gMik7CiAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0
VW5pdC5oCmluZGV4IDE1NmEwMWJkMmRmZGRhNDcyYjA4MWQ0YWVmNDFkYTM4Mjg2ZjYwMzAuLjFl
NTcxMjgyMDFkYmYwNTc0ZmEyMDkwNmJiZTkxMDc1ZTcyYmFlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MYXlvdXRVbml0LmgKQEAgLTE1MCw4ICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgaW50IHJv
dW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3ZhbHVlID4gMCkKLSAgICAgICAgICAg
IHJldHVybiBzYXR1cmF0ZWRBZGRpdGlvbihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5h
dG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgICAgICByZXR1cm4gc2F0dXJh
dGVkU3VidHJhY3Rpb24ocmF3VmFsdWUoKSwgKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAt
IDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgICAgIHJldHVybiBzYXR1cmF0
ZWRTdW08aW50PihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLyBrRml4
ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gc2F0dXJhdGVkRGlmZmVyZW5jZTxp
bnQ+KHJhd1ZhbHVlKCksIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLSAxKSAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7CiAgICAgfQogCiAgICAgaW50IGZsb29yKCkgY29uc3QKQEAgLTU4
OCw3ICs1ODgsNyBAQCBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8odW5zaWduZWQgbG9uZyBs
b25nIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciso
Y29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBMYXlvdXRV
bml0IHJldHVyblZhbDsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRp
b24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFs
dWUoc2F0dXJhdGVkU3VtPGludD4oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICAgICBy
ZXR1cm4gcmV0dXJuVmFsOwogfQogCkBAIC02MjUsNyArNjI1LDcgQEAgaW5saW5lIGRvdWJsZSBv
cGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiBpbmxpbmUgTGF5
b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKICAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFs
dWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAg
ICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQ+KGEucmF3VmFs
dWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKIH0KIApAQCAtNjkx
LDcgKzY5MSw3IEBAIGlubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShpbnQgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIAogaW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBhLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFk
ZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisgICAgYS5zZXRSYXdWYWx1ZShz
YXR1cmF0ZWRTdW08aW50PihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwogICAgIHJldHVy
biBhOwogfQogCkBAIC03MjEsNyArNzIxLDcgQEAgaW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9y
LT0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiAKIGlubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci09
KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgYS5zZXRSYXdWYWx1
ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworICAg
IGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQ+KGEucmF3VmFsdWUoKSwgYi5y
YXdWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbkNvY29hLm1tCmluZGV4IDYwZTY3MGYyMDY2ZDYwNThiMmU1ZWI3OWViN2RjMzBjNWNiNGIy
OGUuLjExYzlhMjM4M2NkNmM4YzMwMWExYTA4ZGNkZWFmYWU3OWQyNjJiNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8
d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25j
YXRlbmF0ZUNGLmg+CiAKIEBpbnRlcmZhY2UgTlNVUkwgKCkKIC0gKENGVVJMUmVmKV9jZnVybDsK
QEAgLTM0OSwzMSArMzUwLDIzIEBAIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Npb24oY29uc3QgVVJMJiBmaXJzCiAKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAgIFJldGFpblB0cjxOU0FycmF5PiBjb29raWVz
ID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwg
cGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
KTsKLSAgICBpZiAoIWNvb2tpZXMgfHwgIVtjb29raWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJu
IHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1w
dHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3VsZCBjcmVhdGUgYmVsb3cuCisgICAgYXV0byBj
b29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJh
bWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nKTsKKyAgICBpZiAoIVtjb29raWVzIGNvdW50XSkKKyAgICAgICAgcmV0dXJuIHsgU3Ry
aW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5nOyBTdHJpbmdCdWlsZGVyIGJl
bG93IHdvdWxkIGNyZWF0ZSBhbiBlbXB0eSBvbmUuCiAKICAgICBTdHJpbmdCdWlsZGVyIGNvb2tp
ZXNCdWlsZGVyOwogICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOwogICAg
IGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcy5nZXQoKSkgewogICAgICAgICBp
ZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCiAgICAgICAgICAgICBjb250aW51ZTsKLQogICAg
ICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAmJiBbY29va2llIGlzSFRUUE9ubHldKQogICAgICAg
ICAgICAgY29udGludWU7Ci0KICAgICAgICAgaWYgKFtjb29raWUgaXNTZWN1cmVdKSB7CiAgICAg
ICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChp
bmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm8pCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvb2tpZXNCdWls
ZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgbmFtZV0pOwot
ICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoJz0nKTsKLSAgICAgICAgY29va2llc0J1aWxk
ZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5k
KGNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIjsgIiwgW2Nvb2tpZSBuYW1lXSwgJz0n
LCBbY29va2llIHZhbHVlXSk7CiAgICAgfQogICAgIHJldHVybiB7IGNvb2tpZXNCdWlsZGVyLnRv
U3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IDdmNjBkOTAxOTNjYzNiM2ZjNDlmNTljYjA5
MmVmNGMyMGE3ZjExOGMuLjQzNjk5ZmVhZDlmNjVjNTk3MmJmZGQ0MjljNzdhZWExMDE2YTY5OTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTE4Nyw3
ICsxODcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8Q291bnRlclBsYW4+IHBsYW5Db3VudGVyKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9tU3RyaQogICAgIH0KIAogICAgIGlmIChkaXJl
Y3RpdmVzLnJlc2V0VmFsdWUpCi0gICAgICAgIHJldHVybiBDb3VudGVyUGxhbiB7IHRydWUsIHNh
dHVyYXRlZEFkZGl0aW9uKCpkaXJlY3RpdmVzLnJlc2V0VmFsdWUsIGRpcmVjdGl2ZXMuaW5jcmVt
ZW50VmFsdWUudmFsdWVPcigwKSkgfTsKKyAgICAgICAgcmV0dXJuIENvdW50ZXJQbGFuIHsgdHJ1
ZSwgc2F0dXJhdGVkU3VtPGludD4oKmRpcmVjdGl2ZXMucmVzZXRWYWx1ZSwgZGlyZWN0aXZlcy5p
bmNyZW1lbnRWYWx1ZS52YWx1ZU9yKDApKSB9OwogICAgIGlmIChkaXJlY3RpdmVzLmluY3JlbWVu
dFZhbHVlKQogICAgICAgICByZXR1cm4gQ291bnRlclBsYW4geyBmYWxzZSwgKmRpcmVjdGl2ZXMu
aW5jcmVtZW50VmFsdWUgfTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCBmOTczZjg5NTEzZWE0NzE0OTRkN2Q5
ZDQzNGJmMGRjMGVkYTUyZDcyLi43ZmY2YzYyZGZlMzNmNzA0NTRhNzBiNzI2Y2UzNDkyOGVlOThi
OWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtMTM2
MCw3ICsxMzYwLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50
ZXIoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHUKICAgICAgICAgaWYgKGNvdW50
ZXJCZWhhdmlvciA9PSBSZXNldCkKICAgICAgICAgICAgIGRpcmVjdGl2ZXMucmVzZXRWYWx1ZSA9
IHZhbHVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXJlY3RpdmVzLmluY3JlbWVudFZh
bHVlID0gc2F0dXJhdGVkQWRkaXRpb24oZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1ZU9y
KDApLCB2YWx1ZSk7CisgICAgICAgICAgICBkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlID0gc2F0
dXJhdGVkU3VtPGludD4oZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1ZU9yKDApLCB2YWx1
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVy
LmNwcAppbmRleCA3YTczMDQ1YTJkNGE3MzlkYzFmMGJjYjBmYmMzYWY3OWUwMjQxZTZkLi40ODNi
ZjY5ZWVlMjhjZWMxMWNjNWJiYzBjMWFmOWZmZjA2YjVhZDczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgU3RyaW5nIFNW
R1BhdGhTdHJpbmdCdWlsZGVyOjpyZXN1bHQoKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
ICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc3BhY2UuCi0gICAgbV9zdHJpbmdCdWlsZGVyLnJlc2l6
ZShzaXplIC0gMSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLnNocmluayhzaXplIC0gMSk7CiAgICAg
cmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggMzJkMTVmZDI3YTg0YWIxYzM0MzczNDU5ZTU5YzQ3OWVkNTli
NGQ5My4uODllY2Q2OTIyZjIxYjMxMjA3MzY2ZGFjN2M1MmQ0NzZiYmRkMzE1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNDYzOCw3ICs0NjM4LDcgQEAgU3RyaW5nIElu
dGVybmFsczo6cGFnZU1lZGlhU3RhdGUoKQogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAg
ICAgICBzdHJpbmcuYXBwZW5kKCJJc05vdFBsYXlpbmciKTsKICAgICBlbHNlCi0gICAgICAgIHN0
cmluZy5yZXNpemUoc3RyaW5nLmxlbmd0aCgpIC0gMSk7CisgICAgICAgIHN0cmluZy5zaHJpbmso
c3RyaW5nLmxlbmd0aCgpIC0gMSk7CiAKICAgICByZXR1cm4gc3RyaW5nLnRvU3RyaW5nKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAppbmRleCA3MzA1
NDIxMWEzN2ExODRjMGY3ODg5MDFjMDVhYTZiODY1MzRiYzdlLi5jNzY5YmY4NjgyOTNmZmM5MjU4
Y2FiNjIwOWViMWNmZDg2OTVmMDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3NvckxpYnhzbHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAKQEAgLTIxMiw3ICsyMTIsNyBAQCBzdGF0aWMgYm9vbCBzYXZlUmVzdWx0
VG9TdHJpbmcoeG1sRG9jUHRyIHJlc3VsdERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQsIFN0
cgogCiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5NTY2OD46IGxpYnhzbHQgYXBwZW5kcyBhbiBleHRyYSBsaW5lIGZlZWQg
dG8gdGhlIHJlc3VsdC4KICAgICBpZiAocmVzdWx0QnVpbGRlci5sZW5ndGgoKSA+IDAgJiYgcmVz
dWx0QnVpbGRlcltyZXN1bHRCdWlsZGVyLmxlbmd0aCgpIC0gMV0gPT0gJ1xuJykKLSAgICAgICAg
cmVzdWx0QnVpbGRlci5yZXNpemUocmVzdWx0QnVpbGRlci5sZW5ndGgoKSAtIDEpOworICAgICAg
ICByZXN1bHRCdWlsZGVyLnNocmluayhyZXN1bHRCdWlsZGVyLmxlbmd0aCgpIC0gMSk7CiAKICAg
ICByZXN1bHRTdHJpbmcgPSByZXN1bHRCdWlsZGVyLnRvU3RyaW5nKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQppbmRleCBmMmQ5MmYxOTdkMTdjYTI5NzBkMDdkYzE0MGFi
MDBhNjFjMTM1OGZjLi5jZmNkOWYzYzAzYzljNmExYTNkMzRlZDFjYzk3NzdhODA3MjdlOTkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC00Nyw3ICs0Nyw3IEBACiAj
aW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2lt
cG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorI2ltcG9ydCA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24u
aD4KQEAgLTExNSwxNSArMTE1LDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1T
ZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICAgICAg
ICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXM7CiAgICAgfQogCi0gICAgYXV0
byogbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OkAiSVRQ
TWFudWFsUHJldmFsZW50UmVzb3VyY2UiXTsKLSAgICBpZiAobWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UpIHsKLSAgICAgICAgVVJMIHVybCB7IFVSTCgpLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9
OwotICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0cDovLyIp
OwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobWFudWFsUHJldmFsZW50UmVzb3VyY2UpOwot
ICAgICAgICAgICAgdXJsID0geyBVUkwoKSwgYnVpbGRlci50b1N0cmluZygpIH07Ci0gICAgICAg
IH0KKyAgICBpZiAoYXV0byBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdKSB7CisgICAgICAgIFVSTCB1
cmwgeyB7IH0sIG1hbnVhbFByZXZhbGVudFJlc291cmNlIH07CisgICAgICAgIGlmICghdXJsLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHVybCA9IHsgeyB9LCBtYWtlU3RyaW5nKCJodHRwOi8vIiwg
bWFudWFsUHJldmFsZW50UmVzb3VyY2UpIH07CiAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQog
ICAgICAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfTsKICAgICB9CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzA4ZGVjMzE1YWQ4YjVl
OGQwYmJiMWNiNTE3NjRiMjk0Yjk5MTFlZS4uZTI2ZjAxMWViMGM4ZWI5MTEwNWFiYWJlZGJhOWVi
YTA1OTM1OGY5MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0
IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIFVwZGF0ZWQgdGVz
dHMgZm9yIGNoYW5nZXMgdG8gU2F0dXJhdGVkQXJpdGhtZXRpYy5oLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwOgorICAg
ICAgICBBZGRlZCBpbmNsdWRlIG9mIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgQWRk
ZWQgU3RyaW5nVHlwZUFkYXB0ZXIgZm9yIFdLU3RyaW5nUmVmLgorICAgICAgICAoV1RSOjpzdHls
ZURlY1RvU3RyKTogVXNlIEFTQ0lJTGl0ZXJhbCBpbnN0ZWFkIG9mIFN0cmluZ0J1aWxkZXIuCisg
ICAgICAgIChXVFI6OnN0cmluZyk6IFJlbW92ZWQgdW5uZWVkZWQgdG9XVEZTdHJpbmcgc2luY2Ug
dGhlIFdLU3RyaW5nUmVmCisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyIHRha2VzIGNhcmUgb2Yg
aXQuCisgICAgICAgIChXVFI6OnN0cmluZyk6IFJlbmFtZWQgZnJvbSBmcmFtZVRvU3RyLiBVc2Ug
bWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6ZHVtcFJlc291cmNlVVJMKTogVXNlIGFwcGVuZCBp
bnN0ZWFkIG9mIGFwcGVuZExpdGVyYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6ZHVtcExv
YWRFdmVudCk6IFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVk
IGZyb20gYSBsb25nZXIgbmFtZS4gUmV0dXJuIGEgU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2Yg
YnVpbGRpbmcgaW4gYSBTdHJpbmdCdWlsZGVyLiBVc2UgbWFrZVN0cmluZy4KKyAgICAgICAgKFdU
Ujo6c3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KTogUmVtb3ZlZAorICAgICAgICB1bm5lZWRlZCB0b1dURlN0cmlu
Zy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZSk6IFJlbW92ZWQgYW4KKyAg
ICAgICAgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlUGFnZTo6ZHVtcCk6IFJlbW92ZWQgdW5uZWVkZWQgdG9XVEZTdHJpbmcuCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRG
b3JGcmFtZSk6CisgICAgICAgIFVwZGF0ZWQgZm9yIGZ1bmN0b24gbmFtZSBjaGFuZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUpOiBE
aXR0by4KKyAgICAgICAgQWxzbyB1c2UgdmFyaWFkaWMgYXBwZW5kLiBBbHNvIHVzZSBtYWtlU3Ry
aW5nLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25z
ZUZvclJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkRmluaXNoTG9hZEZvclJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JS
ZXNwb25zZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxB
ZGRNZXNzYWdlVG9Db25zb2xlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdFByb21wdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2RlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJh
bmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZEFwcGx5U3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlUGFnZTo6ZHVtcEhpc3RvcnkpOiBEaXR0by4KKwogMjAyMS0wNS0xOCAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2xpbnQtdGVzdC1leHBl
Y3RhdGlvbnNdIENoYW5nZSBzaGViYW5nIHRvIFB5dGhvbiAzCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAKaW5kZXggZTg1NGUyNTZlOGFkYWNjOTI1Yjk4YjdjMGNlNzE0NjNhYjFiYWVmZS4u
OWJkNTBlMjczZjc0MDU5OWJlMDAyYjZkMDllZDVmZjdiYjY2YTRmNSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC0yOSw3NyArMzAsOTggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAibGltaXRzLmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDx3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CiAKIFRFU1QoV1RGLCBTYXR1cmF0ZWRBcml0aG1ldGljQWRkaXRpb24pCiB7Ci0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZEFkZGl0aW9uKDAsIDApLCAwKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
QWRkaXRpb24oMCwgMSksIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigwLCAx
MDApLCAxMDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigxMDAsIDUwKSwgMTUw
KTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigwLCAtMSksIC0xKTsKLSAgICBB
U1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMSwgLTEpLCAwKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkQWRkaXRpb24oMTAwLCAtNTApLCA1MCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFk
ZGl0aW9uKDUwLCAtMTAwKSwgLTUwKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlv
bihJTlRfTUFYIC0gMSwgMCksIElOVF9NQVggLSAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
QWRkaXRpb24oSU5UX01BWCAtIDEsIDEpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJh
dGVkQWRkaXRpb24oSU5UX01BWCAtIDEsIDIpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkQWRkaXRpb24oMCwgSU5UX01BWCAtIDEpLCBJTlRfTUFYIC0gMSk7Ci0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZEFkZGl0aW9uKDEsIElOVF9NQVggLSAxKSwgSU5UX01BWCk7Ci0gICAgQVNT
RVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKDIsIElOVF9NQVggLSAxKSwgSU5UX01BWCk7Ci0gICAg
QVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NQVggLSAxLCBJTlRfTUFYIC0gMSksIElO
VF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUFYLCBJTlRfTUFY
KSwgSU5UX01BWCk7Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01JTiwg
MCksIElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUlOICsg
MSwgMCksIElOVF9NSU4gKyAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5U
X01JTiArIDEsIDEpLCBJTlRfTUlOICsgMik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0
aW9uKElOVF9NSU4gKyAxLCAyKSwgSU5UX01JTiArIDMpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRBZGRpdGlvbihJTlRfTUlOICsgMSwgLTEpLCBJTlRfTUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkQWRkaXRpb24oSU5UX01JTiArIDEsIC0yKSwgSU5UX01JTik7Ci0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZEFkZGl0aW9uKDAsIElOVF9NSU4gKyAxKSwgSU5UX01JTiArIDEpOwotICAgIEFT
U0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigtMSwgSU5UX01JTiArIDEpLCBJTlRfTUlOKTsKLSAg
ICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oLTIsIElOVF9NSU4gKyAxKSwgSU5UX01JTik7
Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01BWCAvIDIsIDEwMDAwKSwg
SU5UX01BWCAvIDIgKyAxMDAwMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElO
VF9NQVggLyAyICsgMSwgSU5UX01BWCAvIDIgKyAxKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NSU4sIElOVF9NQVgpLCAtMSk7CisgICAgRVhQRUNUX0VR
KDAsIHNhdHVyYXRlZFN1bTxpbnQzMl90PigwLCAwKSk7CisgICAgRVhQRUNUX0VRKDEsIHNhdHVy
YXRlZFN1bTxpbnQzMl90PigwLCAxKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgc2F0dXJhdGVkU3Vt
PGludDMyX3Q+KDAsIDEwMCkpOworICAgIEVYUEVDVF9FUSgxNTAsIHNhdHVyYXRlZFN1bTxpbnQz
Ml90PigxMDAsIDUwKSk7CisKKyAgICBFWFBFQ1RfRVEoLTEsIHNhdHVyYXRlZFN1bTxpbnQzMl90
PigwLCAtMSkpOworICAgIEVYUEVDVF9FUSgwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMSwgLTEp
KTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNhdHVyYXRlZFN1bTxpbnQzMl90PigxMDAsIC01MCkpOwor
ICAgIEVYUEVDVF9FUSgtNTAsIHNhdHVyYXRlZFN1bTxpbnQzMl90Pig1MCwgLTEwMCkpOworCisg
ICAgRVhQRUNUX0VRKElOVF9NQVggLSAxLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAt
IDEsIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElO
VF9NQVggLSAxLCAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZFN1bTxpbnQz
Ml90PihJTlRfTUFYIC0gMSwgMikpOworICAgIEVYUEVDVF9FUShJTlRfTUFYIC0gMSwgc2F0dXJh
dGVkU3VtPGludDMyX3Q+KDAsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgs
IHNhdHVyYXRlZFN1bTxpbnQzMl90PigxLCBJTlRfTUFYIC0gMSkpOworICAgIEVYUEVDVF9FUShJ
TlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMiwgSU5UX01BWCAtIDEpKTsKKyAgICBFWFBF
Q1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NQVggLSAxLCBJTlRfTUFY
IC0gMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5U
X01BWCwgSU5UX01BWCkpOworCisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZFN1bTxp
bnQzMl90PihJTlRfTUlOLCAwKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4gKyAxLCBzYXR1cmF0
ZWRTdW08aW50MzJfdD4oSU5UX01JTiArIDEsIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiAr
IDIsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOICsgMSwgMSkpOworICAgIEVYUEVDVF9F
UShJTlRfTUlOICsgMywgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NSU4gKyAxLCAyKSk7Cisg
ICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOICsgMSwg
LTEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9N
SU4gKyAxLCAtMikpOworICAgIEVYUEVDVF9FUShJTlRfTUlOICsgMSwgc2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KDAsIElOVF9NSU4gKyAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRl
ZFN1bTxpbnQzMl90PigtMSwgSU5UX01JTiArIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwg
c2F0dXJhdGVkU3VtPGludDMyX3Q+KC0yLCBJTlRfTUlOICsgMSkpOworCisgICAgRVhQRUNUX0VR
KElOVF9NQVggLyAyICsgMTAwMDAsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUFYIC8gMiwg
MTAwMDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElO
VF9NQVggLyAyICsgMSwgSU5UX01BWCAvIDIgKyAxKSk7CisgICAgRVhQRUNUX0VRKC0xLCBzYXR1
cmF0ZWRTdW08aW50MzJfdD4oSU5UX01JTiwgSU5UX01BWCkpOworCisgICAgRVhQRUNUX0VRKDBV
LCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KDBVLCAwVSkpOworICAgIEVYUEVDVF9FUSgxVSwgc2F0
dXJhdGVkU3VtPHVpbnQzMl90PigwVSwgMVUpKTsKKyAgICBFWFBFQ1RfRVEoMTAwVSwgc2F0dXJh
dGVkU3VtPHVpbnQzMl90PigwVSwgMTAwVSkpOworICAgIEVYUEVDVF9FUSgxNTBVLCBzYXR1cmF0
ZWRTdW08dWludDMyX3Q+KDEwMFUsIDUwVSkpOworCisgICAgRVhQRUNUX0VRKFVJTlRfTUFYIC0g
MSwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAtIDFVLCAwVSkpOworICAgIEVYUEVD
VF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAtIDFVLCAxVSkp
OworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01B
WCAtIDFVLCAyVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCAtIDEsIHNhdHVyYXRlZFN1bTx1
aW50MzJfdD4oMFUsIFVJTlRfTUFYIC0gMVUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNh
dHVyYXRlZFN1bTx1aW50MzJfdD4oMVUsIFVJTlRfTUFYIC0gMVUpKTsKKyAgICBFWFBFQ1RfRVEo
VUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oMlUsIFVJTlRfTUFYIC0gMVUpKTsKKyAg
ICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLSAx
VSwgVUlOVF9NQVggLSAxVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3Vt
PHVpbnQzMl90PihVSU5UX01BWCwgVUlOVF9NQVgpKTsKKworICAgIEVYUEVDVF9FUShVSU5UX01B
WCAvIDIgKyAxMDAwMCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAvIDJVLCAxMDAw
MFUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlO
VF9NQVggLyAyVSwgVUlOVF9NQVggLyAyVSArIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFY
LCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC8gMlUgKyAxVSwgVUlOVF9NQVggLyAy
VSArIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+
KFVJTlRfTUFYIC8gM1UgKyAxVSwgVUlOVF9NQVggLyAzVSwgVUlOVF9NQVggLyAzVSkpOworICAg
IEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAvIDNV
ICsgMVUsIFVJTlRfTUFYIC8gM1UgKyAxVSwgVUlOVF9NQVggLyAzVSArIDFVKSk7CiB9CiAKIFRF
U1QoV1RGLCBTYXR1cmF0ZWRBcml0aG1ldGljU3VidHJhY3Rpb24pCiB7Ci0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZFN1YnRyYWN0aW9uKDAsIDApLCAwKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
U3VidHJhY3Rpb24oMCwgMSksIC0xKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rp
b24oMCwgMTAwKSwgLTEwMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDEw
MCwgNTApLCA1MCk7CisgICAgRVhQRUNUX0VRKDAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJf
dD4oMCwgMCkpOworICAgIEVYUEVDVF9FUSgtMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90
PigwLCAxKSk7CisgICAgRVhQRUNUX0VRKC0xMDAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJf
dD4oMCwgMTAwKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMy
X3Q+KDEwMCwgNTApKTsKICAgICAKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24o
MCwgLTEpLCAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oMSwgLTEpLCAy
KTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oMTAwLCAtNTApLCAxNTApOwot
ICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbig1MCwgLTEwMCksIDE1MCk7Ci0KLSAg
ICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCwgMCksIElOVF9NQVgpOwot
ICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYLCAxKSwgSU5UX01BWCAt
IDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYIC0gMSwgMCks
IElOVF9NQVggLSAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01B
WCAtIDEsIC0xKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9u
KElOVF9NQVggLSAxLCAtMiksIElOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0
cmFjdGlvbigwLCBJTlRfTUFYIC0gMSksIC1JTlRfTUFYICsgMSk7Ci0gICAgQVNTRVJUX0VRKHNh
dHVyYXRlZFN1YnRyYWN0aW9uKC0xLCBJTlRfTUFYIC0gMSksIC1JTlRfTUFYKTsKLSAgICBBU1NF
UlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oLTIsIElOVF9NQVggLSAxKSwgLUlOVF9NQVggLSAx
KTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oLTMsIElOVF9NQVggLSAxKSwg
LUlOVF9NQVggLSAxKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRf
TUlOLCAwKSwgSU5UX01JTik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElO
VF9NSU4gKyAxLCAwKSwgSU5UX01JTiArIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0
cmFjdGlvbihJTlRfTUlOICsgMSwgMSksIElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihJTlRfTUlOICsgMSwgMiksIElOVF9NSU4pOwotCi0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NSU4sIElOVF9NSU4pLCAwKTsKLSAgICBBU1NFUlRf
RVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCwgSU5UX01BWCksIDApOwotICAgIEFTU0VS
VF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYLCBJTlRfTUlOKSwgSU5UX01BWCk7Cisg
ICAgRVhQRUNUX0VRKDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMCwgLTEpKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigxLCAtMSkpOworICAg
IEVYUEVDVF9FUSgxNTAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMTAwLCAtNTApKTsK
KyAgICBFWFBFQ1RfRVEoMTUwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDUwLCAtMTAw
KSk7CisKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90
PihJTlRfTUFYLCAwKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVggLSAxLCBzYXR1cmF0ZWREaWZm
ZXJlbmNlPGludDMyX3Q+KElOVF9NQVgsIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCAtIDEs
IHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCAtIDEsIDApKTsKKyAgICBFWFBF
Q1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUFYIC0gMSwg
LTEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90
PihJTlRfTUFYIC0gMSwgLTIpKTsKKyAgICBFWFBFQ1RfRVEoLUlOVF9NQVggKyAxLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KDAsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKC1J
TlRfTUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KC0xLCBJTlRfTUFYIC0gMSkpOwor
ICAgIEVYUEVDVF9FUSgtSU5UX01BWCAtIDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4o
LTIsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKC1JTlRfTUFYIC0gMSwgc2F0dXJhdGVk
RGlmZmVyZW5jZTxpbnQzMl90PigtMywgSU5UX01BWCAtIDEpKTsKKworICAgIEVYUEVDVF9FUShJ
TlRfTUlOLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NSU4sIDApKTsKKyAgICBF
WFBFQ1RfRVEoSU5UX01JTiArIDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01J
TiArIDEsIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkRGlmZmVyZW5jZTxp
bnQzMl90PihJTlRfTUlOICsgMSwgMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NSU4gKyAxLCAyKSk7CisKKyAgICBFWFBFQ1RfRVEo
MCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUlOLCBJTlRfTUlOKSk7CisgICAg
RVhQRUNUX0VRKDAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCwgSU5UX01B
WCkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+
KElOVF9NQVgsIElOVF9NSU4pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGFiZDNhZmRlOTFmMDhlODc5NGYxMGFiZDZkMTBk
YzM4OGQ0NWIyODQuLjFkZWNmMzA3M2FhZjMxNDViMWQ5Yjk3MjViNWNkNWJlM2EyNzcyZTQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTUyLDEyICs1Miw0NiBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
KyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5o
PgorI2VuZGlmCisKICNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0Uo
RElSRUNUMkQpCiAjaW5jbHVkZSAiV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmgiCiAjZW5kaWYKIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gY2xh
c3MgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdU
eXBlQWRhcHRlcihXS1N0cmluZ1JlZik7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmcgPyBXS1N0cmluZ0dldExlbmd0aChtX3N0cmluZykgOiAwOyB9CisgICAg
Ym9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9zdHJpbmc7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSopIGNvbnN0
OworCitwcml2YXRlOgorICAgIFdLU3RyaW5nUmVmIG1fc3RyaW5nOworfTsKKworaW5saW5lIFN0
cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6U3RyaW5nVHlwZUFkYXB0ZXIoV0tTdHJpbmdS
ZWYgc3RyaW5nKQorICAgIDogbV9zdHJpbmcgeyBzdHJpbmcgfQoreworfQorCit0ZW1wbGF0ZTw+
IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVUbzxMQ2hh
cj4oTENoYXIqKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5
cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVUbzxVQ2hhcj4oVUNoYXIqIGRlc3RpbmF0aW9u
KSBjb25zdAoreworICAgIGlmIChtX3N0cmluZykKKyAgICAgICAgV0tTdHJpbmdHZXRDaGFyYWN0
ZXJzKG1fc3RyaW5nLCByZWludGVycHJldF9jYXN0PFdLQ2hhcio+KGRlc3RpbmF0aW9uKSwgV0tT
dHJpbmdHZXRMZW5ndGgobV9zdHJpbmcpKTsKK30KKworfQorCiBuYW1lc3BhY2UgV1RSIHsKIAog
c3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSwgY29uc3QgY2hhciogbmFtZSkKQEAgLTg5LDcgKzEyMyw3IEBAIHN0YXRpYyBXVEY6OlN0cmlu
ZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3
b3JsZCwKICAgICByZXR1cm4gZHVtcFBhdGgoY29udGV4dCwgbm9kZU9iamVjdCk7CiB9CiAKLXN0
YXRpYyBXVEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRs
ZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlUmVmKQor
c3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZVJlZikKIHsK
ICAgICBpZiAoIXJhbmdlUmVmKQogICAgICAgICByZXR1cm4gIihudWxsKSI7CkBAIC0xMzAsNDMg
KzE2NCwyNiBAQCBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBl
VG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cAogICAgIHJldHVybiB0b1dLKCJpbGxl
Z2FsIHZhbHVlIik7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVu
ZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKK3N0YXRpYyBXVEY6OlN0cmluZyBzdHls
ZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZikKIHsKICAgICAvLyBEdW1w
UmVuZGVyVHJlZSBjYWxscyAtW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gZGVzY3JpcHRpb25dLCB3
aGljaCBqdXN0IGR1bXBzIGNsYXNzIG5hbWUgYW5kIG9iamVjdCBhZGRyZXNzLgogICAgIC8vIE5v
IGV4aXN0aW5nIHRlc3RzIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgcGF0aCBhdCB0aGUgdGltZSBv
ZiB0aGlzIHdyaXRpbmcsIGJlY2F1c2UgV2ViQ29yZSBkb2Vzbid0IGNhbGwKICAgICAvLyB0aGUg
ZWRpdGluZyBjbGllbnQgaWYgdGhlIHN0eWxpbmcgb3BlcmF0aW9uIHNvdXJjZSBpcyBDb21tYW5k
RnJvbURPTSBvciBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlLgotICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxE
T01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Iik7Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJF
U1M+Il9zOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLU2VjdXJpdHlPcmlnaW5S
ZWYgb3JpZ2luKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKCd7JywgdG9XVEZTdHJpbmcoYWRv
cHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpKSwgIiwgIiwgdG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpLCAiLCAiLCBX
S1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pLCAnfScpOworICAgIHJldHVybiBtYWtlU3Ry
aW5nKCd7JywgYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpLmdl
dCgpLCAiLCAiLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKS5nZXQo
KSwgIiwgIiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSwgJ30nKTsKIH0KIAotc3Rh
dGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKK3N0YXRp
YyBXVEY6OlN0cmluZyBzdHJpbmcoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKICAgICBhdXRv
IG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1l
KGZyYW1lKSkgewotICAgICAgICBpZiAoIVdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkgewot
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZyYW1lIFwiIik7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91
cykiKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICBib29sIGlzTWFpbiA9IFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGlzTWFpbiA/
ICJtYWluIGZyYW1lIl9zIDogImZyYW1lIChhbm9ueW1vdXMpIl9zOworICAgIHJldHVybiBtYWtl
U3RyaW5nKGlzTWFpbiA/ICJtYWluIGZyYW1lIFwiIiA6ICJmcmFtZSBcIiIsIG5hbWUuZ2V0KCks
ICciJyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xvY2FsRmlsZVNjaGVtZShXS1N0cmlu
Z1JlZiBzY2hlbWUpCkBAIC0yMTAsNyArMjI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGR1bXBS
ZXNvdXJjZVVSTCh1aW50NjRfdCBpZGVudGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWkK
ICAgICBpZiAoYXNzaWduZWRVcmxzQ2FjaGUoKS5jb250YWlucyhpZGVudGlmaWVyKSkKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYXNzaWduZWRVcmxzQ2FjaGUoKS5nZXQoaWRlbnRpZmll
cikpOwogICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8dW5r
bm93bj4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjx1bmtub3duPiIpOwogfQog
CiBJbmplY3RlZEJ1bmRsZVBhZ2U6OkluamVjdGVkQnVuZGxlUGFnZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSkKQEAgLTM5Myw3NiArNDEwLDQzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNl
dEFmdGVyVGVzdCgpCiAKIC8vIExvYWRlciBDbGllbnQgQ2FsbGJhY2tzCiAKLS8vIFN0cmluZyBv
dXRwdXQgbXVzdCBiZSBpZGVudGljYWwgdG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0XS4KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXIm
IHN0cmluZ0J1aWxkZXIpCi17Ci0gICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1l
Q29weU5hbWUoZnJhbWUpKTsKLSAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1l
KSkgewotICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUiKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgibWFpbiBmcmFtZSBcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhuYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkp
KSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91
cykiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhuYW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyInKTsKLX0KLQogc3RhdGljIHZv
aWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBldmVu
dE5hbWUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGR1bXBGcmFt
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtICIpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGV2ZW50TmFtZSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCht
YWtlU3RyaW5nKHN0cmluZyhmcmFtZSksICIgLSAiLCBldmVudE5hbWUsICdcbicpKTsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RS
ZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxk
ZXIpCitzdGF0aWMgU3RyaW5nIHN0cmluZyhXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCkKIHsKICAg
ICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAg
YXV0byBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNv
b2tpZXMocmVxdWVzdCkpOwogICAgIGF1dG8gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1
ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IjxOU1VSTFJlcXVlc3QgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgp
KSwgIiwgbWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJz
dFBhcnR5LmdldCgpKSwgIiwgaHR0cCBtZXRob2QgIik7Ci0gICAgaWYgKFdLU3RyaW5nSXNFbXB0
eShodHRwTWV0aG9kLmdldCgpKSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIobm9uZSkiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKGh0dHBNZXRob2QpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOworICAg
IHJldHVybiBtYWtlU3RyaW5nKCI8TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHVybC5nZXQoKSksCisgICAgICAgICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBh
dGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSksCisgICAgICAgICIsIGh0
dHAgbWV0aG9kICIsIFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSA/ICIobm9uZSki
IDogIiIsIGh0dHBNZXRob2QuZ2V0KCksICc+Jyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBk
dW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNl
UmVmIHJlc3BvbnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBib29sIHNob3VsZER1
bXBSZXNwb25zZUhlYWRlcnMgPSBmYWxzZSkKK3N0YXRpYyBTdHJpbmcgc3RyaW5nKFdLVVJMUmVz
cG9uc2VSZWYgcmVzcG9uc2UsIGJvb2wgc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycyA9IGZhbHNl
KQogewogICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25z
ZSkpOwotICAgIGlmICghdXJsKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKG51bGwpIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIXVybCkKKyAgICAgICAgcmV0
dXJuICIobnVsbCkiX3M7CisgICAgaWYgKCFzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzKSB7Cisg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3VpdGFibGVG
b3JUZXN0UmVzdWx0KHVybC5nZXQoKSksCisgICAgICAgICAgICAiLCBodHRwIHN0YXR1cyBjb2Rl
ICIsIFdLVVJMUmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSksICc+Jyk7CiAgICAgfQot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3VpdGFibGVG
b3JUZXN0UmVzdWx0KHVybC5nZXQoKSksICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tVUkxSZXNw
b25zZUhUVFBTdGF0dXNDb2RlKHJlc3BvbnNlKSk7Ci0gICAgaWYgKHNob3VsZER1bXBSZXNwb25z
ZUhlYWRlcnMpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIsIEluamVjdGVkQnVu
ZGxlUGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNwb25zZSksICIgaGVhZGVycyIpOwotICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VS
TFJlc3BvbnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAg
ICAgIiwgaHR0cCBzdGF0dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVz
cG9uc2UpLAorICAgICAgICAiLCAiLCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVy
Q291bnQocmVzcG9uc2UpLCAiIGhlYWRlcnM+Iik7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci0vLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG5vbiBjb2NvYSBwb3J0cy4KLS8vICAgICAg
ICBbR1RLXVtXUEVdIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQy
OTUKKworLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBub24tQ29jb2EgcG9ydHMuIFtHVEtd
W1dQRV0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI5NQogdWlu
dDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9u
c2VSZWYgcmVzcG9uc2UpCiB7CiAgICAgcmV0dXJuIDA7CiB9CisKICNlbmRpZgogCiBzdGF0aWMg
aW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tF
cnJvclJlZiBlcnJvciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKQEAgLTQ4MCw3ICs0
NjQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZv
clRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgUwogCiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJvckRvbWFpbiwgIiwgY29kZSAiLCBlcnJvckNvZGUp
OwogICAgIGlmIChhdXRvIHVybCA9IGFkb3B0V0soV0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9y
KSkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwiIiwgdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpLCAnIicpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVSTCBcIiIsIGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdldCgpLCAnIicpOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCc+Jyk7CiB9CiAKQEAgLTcwMCw3ICs2ODQsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJh
bWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBz
dHJpbgogICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAwMDAw
MDAxKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHNob3VsZEluY2x1ZGVGcmFtZU5hbWUpCi0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAnIiwgdG9XVEZTdHJpbmcoYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKSksICInICIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiZnJhbWUgJyIsIGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZy
YW1lKSkuZ2V0KCksICInICIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJzY3JvbGxlZCB0
byAiLCB4LCAnLCcsIHksICdcbicpOwogfQogCkBAIC03NTgsOSArNzQyLDcgQEAgc3RhdGljIHZv
aWQgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmlu
Z0J1aWxkZXImIHN0cmkKICAgICAgICAgaWYgKCFoYXNEb2N1bWVudEVsZW1lbnQoc3ViZnJhbWUp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhzdWJmcmFtZU5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCInXG4tLS0tLS0tLVxuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIsIHN1YmZyYW1lTmFtZS5nZXQoKSwgIidcbi0tLS0t
LS0tXG4iKTsKIAogICAgICAgICBkdW1wRnJhbWVUZXh0KHN1YmZyYW1lLCBzdHJpbmdCdWlsZGVy
KTsKICAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KHN1YmZyYW1lLCBzdHJpbmdCdWls
ZGVyKTsKQEAgLTc4MCw4ICs3NjIsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERP
TUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZAogI2lmIFVT
RShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKICAgICBhdXRv
IHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CiAg
ICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3
a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBhdXRvIGNm
U3RyaW5nID0gV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2
ZURhdGEoY2ZEYXRhLmdldCgpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0cmluZy5n
ZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVh
dGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKS5nZXQoKSk7CiAjZW5k
aWYKIH0KIApAQCAtODA3LDkgKzc4OCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1w
KCkKICAgICBzd2l0Y2ggKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+d2hhdFRvRHVtcCgp
KSB7CiAgICAgY2FzZSBXaGF0VG9EdW1wOjpSZW5kZXJUcmVlOiB7CiAgICAgICAgIGlmIChpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmcoKSkKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRl
clRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmcobV9wYWdlKSkuZ2V0KCkpKTsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29w
eVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmcobV9wYWdlKSkuZ2V0
KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihtX3BhZ2UsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+cmVuZGVyVHJlZUR1
bXBPcHRpb25zKCkpKS5nZXQoKSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
YWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24o
bV9wYWdlLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnJlbmRlclRyZWVEdW1wT3B0aW9u
cygpKSkuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXaGF0VG9EdW1w
OjpNYWluRnJhbWVUZXh0OgpAQCAtODkwLDE5ICs4NzEsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLU3RyaW5nUmVmIHRpdGxlLCBXS0J1bmRs
ZUZyYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVRpdGxlOiAiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ1xuJyk7Ci0gICAgfQotCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiVElUTEUgQ0hBTkdFRDogJyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIidcbiIpOwotICAgIH0KLQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoc3RyaW5nKGZyYW1lKSwgIiAtIGRpZFJlY2VpdmVUaXRsZTogIiwgdGl0bGUsICdc
bicpOworICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBUaXRs
ZUNoYW5nZXMoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlRJVExFIENIQU5HRUQ6
ICciLCB0aXRsZSwgIidcbiIpOwogICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKIH0KIApAQCAtOTUxLDEwICs5MjMsNyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdEZvckZyYW1lKFdLQnVuZGxl
UGFnZVJlZiwgV0tCdQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIiwgcGF0aFN1aXRhYmxl
Rm9yVGVzdFJlc3VsdCh1cmwpLCAnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChtYWtlU3RyaW5nKHN0cmluZyhmcmFtZSksICIgLSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0
VG9VUkw6ICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsKSwgJ1xuJykpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1l
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUgdHlw
ZSkKQEAgLTk4Miw3ICs5NTEsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNo
RG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgZHVt
cExvYWRFdmVudChmcmFtZSwgImRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lIik7CiAKICAg
ICBpZiAodW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzID0gV0tCdW5kbGVGcmFtZUdl
dFBlbmRpbmdVbmxvYWRDb3VudChmcmFtZSkpCi0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1
dFRleHQobWFrZVN0cmluZyhmcmFtZVRvU3RyKGZyYW1lKSwgIiAtIGhhcyAiLCBwZW5kaW5nRnJh
bWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQgaGFuZGxlcihzKVxuIikpOworICAgICAgICBpbmpl
Y3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAtIGhhcyAi
LCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxvYWQgaGFuZGxlcihzKVxuIikpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJh
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKQEAgLTEwNDksMTEgKzEwMTgsOCBAQCBXS1VSTFJl
cXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyLCBz
dHJpbmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSB3
aWxsU2VuZFJlcXVlc3QgIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlZGlyZWN0UmVzcG9uc2UgIik7Ci0gICAgICAgIGR1bXBS
ZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlc3BvbnNlLCBzdHJpbmdC
dWlsZGVyLCBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxIVFRQUmVk
aXJlY3RlZFJlc3BvbnNlSGVhZGVycygpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgLSB3aWxsU2VuZFJlcXVlc3Qg
Iiwgc3RyaW5nKHJlcXVlc3QpLAorICAgICAgICAgICAgIiByZWRpcmVjdFJlc3BvbnNlICIsIHN0
cmluZyhyZXNwb25zZSwgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQWxs
SFRUUFJlZGlyZWN0ZWRSZXNwb25zZUhlYWRlcnMoKSksICdcbicpOwogICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCkBA
IC0xMDg2LDExICsxMDUyLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6
d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgICAg
IG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVt
ZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0
LmdldCgpKSkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJCbG9ja2VkIGFjY2VzcyB0byBl
eHRlcm5hbCBVUkwgIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0
cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwotICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3Ry
aW5nKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIiwgdXJsU3RyaW5nLmdldCgpLCAn
XG4nKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KQEAg
LTExMTcsOSArMTA3OSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVz
cG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgaWYgKGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygp
KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgZHVtcFJl
c291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiKTsKLSAgICAgICAgZHVt
cFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2UsIHN0cmlu
Z0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiLCBzdHJpbmcocmVz
cG9uc2UpLCAnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIApAQCAtMTEzMiwxNCArMTA5MiwxMSBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2UsIFdLQgogICAgIGF1dG8gbWltZVR5cGVTdHJpbmcgPSBhZG9wdFdLKFdL
VVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKIAogICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxT
dHJpbmcpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBoYXMgTUlNRSB0eXBl
ICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1pbWVUeXBlU3RyaW5n
KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXJsU3RyaW5nLmdldCgpLCAiIGhhcyBNSU1F
IHR5cGUgIiwgbWltZVR5cGVTdHJpbmcuZ2V0KCkpOwogCiAgICAgU3RyaW5nIHBsYXRmb3JtTWlt
ZVR5cGUgPSBwbGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUocmVzcG9uc2UpOwogICAgIGlmICghcGxh
dGZvcm1NaW1lVHlwZS5pc0VtcHR5KCkgJiYgcGxhdGZvcm1NaW1lVHlwZSAhPSB0b1dURlN0cmlu
ZyhtaW1lVHlwZVN0cmluZykpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQocGxhdGZvcm1NaW1lVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
YnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhhcyAiLCBwbGF0Zm9ybU1pbWVUeXBlKTsKICAgICB9CiAK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTExNjIsNyArMTExOSw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQ
YWdlUmVmLCBXS0J1bmRsZUZyYW1lCiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmluaXNoTG9hZGluZ1xuIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZEZpbmlzaExvYWRpbmdcbiIpOwogICAgIGluamVj
dGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIApAQCAt
MTE3Nyw3ICsxMTM0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkRm9y
UmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmUKIAogICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3Ry
aW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGYWls
TG9hZGluZ1dpdGhFcnJvcjogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZEZh
aWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKIAogICAgIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KGVycm9yLCBzdHJpbmdCdWlsZGVyKTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnXG4nKTsKQEAgLTExOTksNyArMTE1Niw2IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpzaG91bGRDYWNoZVJlc3BvbnNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJl
ZiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiAvLyBQb2xpY3kgQ2xpZW50IENhbGxiYWNrcwog
CiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lLCBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvbiwg
V0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdLVHlwZVJlZiogdXNlckRhdGEsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCkBAIC0xMjI5LDEzICsxMTg1LDkgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0
aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihX
S0IKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblVzZTsKIAogICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBQb2xpY3lDYWxsYmFja3Mo
KSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
blxuIik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIgaXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAi
eWVzIiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3VsZCBvcGVu
IFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9w
ZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b25cbiIsIHN0cmluZyhyZXF1ZXN0KSwKKyAgICAgICAgICAgICIgaXMgbWFpbiBmcmFtZSAtICIs
IFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIsCisgICAgICAg
ICAgICAiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVz
IiA6ICJubyIsICdcbicpKTsKICAgICB9CiAKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RS
dW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKQEAgLTEyNDUsMTkgKzExOTcsMTYg
QEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0so
V0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRl
OiBhdHRlbXB0IHRvIGxvYWQgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlBvbGljeSBk
ZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwogICAgIGlmIChpc0xvY2FsRmlsZVNjaGVtZSh1
cmxTY2hlbWUuZ2V0KCkpKQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25l
bnQodXJsLmdldCgpKSkuZ2V0KCkpOwogICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRoIG5hdmlnYXRpb24gdHlwZSBc
JyIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKE5hdmlnYXRpb25UeXBl
VG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdh
dGlvbkFjdGlvbikpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJyIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwu
Z2V0KCkpKS5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiB3aXRoIG5hdmlnYXRp
b24gdHlwZSBcJyIsIE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0
aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpLmdldCgpLCAnXCcnKTsKICAg
ICBhdXRvIGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9wdFdLKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlv
bkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25BY3Rpb24pKTsKICAgICBpZiAoaGl0VGVzdFJl
c3VsdFJlZikgewogICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxl
SGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCBub2RlSGFuZGxlUmVmLmdldCgpKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIgb3JpZ2luYXRpbmcgZnJvbSAiLCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5v
ZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAgICB9CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKQEAgLTEyNzcsNyArMTIyNiw3IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKFdLQnVuZGxlUGFnCiB7CiAg
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAg
ICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgJiYgV0tVUkxSZXNwb25zZUlzQXR0
YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
Lm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBh
dHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhX
S1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSkpLCAiXCdcbiIpKTsK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmlu
ZygiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQg
ZmlsZSBuYW1lIFwnIiwgYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1l
KHJlc3BvbnNlKSkuZ2V0KCksICInXG4iKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFdLQnVuZGxl
UGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTM2Nyw3ICsxMzE2LDcgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKFdLU3RyaW5nUmVmIG1l
c3NhZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFdURjo6U3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSB0b1dURlN0cmluZyht
ZXNzYWdlKTsKKyAgICBhdXRvIG1lc3NhZ2VTdHJpbmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsK
ICAgICBzaXplX3QgbnVsbENoYXJQb3MgPSBtZXNzYWdlU3RyaW5nLmZpbmQoVUNoYXIoMCkpOwog
ICAgIGlmIChudWxsQ2hhclBvcyAhPSBXVEY6Om5vdEZvdW5kKQogICAgICAgICBtZXNzYWdlU3Ry
aW5nLnRydW5jYXRlKG51bGxDaGFyUG9zKTsKQEAgLTEzOTMsNyArMTM0Miw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNi
YXJUZXh0KQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
U3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGluamVjdGVkQnVuZGxl
Lm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRT
dGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpLCAnXG4nKSk7CisgICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FM
TEJBQ0s6IHNldFN0YXR1c1RleHQ6Iiwgc3RhdHVzYmFyVGV4dCwgJ1xuJykpOwogfQogCiB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBt
ZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTQxNiw3ICsxMzY1LDcgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0Q29uZmlybShXS1N0cmluZ1JlZiBtZXNz
YWdlLCBXS0J1bmRsZUYKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2Ny
aXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLU3RyaW5nUmVmIGRlZmF1bHRWYWx1ZSwg
V0tCdW5kbGVGcmFtZVJlZikKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6ICIsIHRvV1RGU3RyaW5nKG1lc3NhZ2UpLCAiLCBk
ZWZhdWx0IHRleHQ6IiwgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFpbGluZ1NwYWNlc0FkZE5ld2xp
bmUodG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSkpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9NUFQ6ICIsIG1lc3NhZ2UsICIsIGRl
ZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWlsaW5nU3BhY2VzQWRkTmV3bGlu
ZSh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdp
blJlZiBvcmlnaW4sIGludDY0X3QgdG90YWxCeXRlc05lZWRlZCkKQEAgLTE0NDIsNyArMTM5MSw3
IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShX
S1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKLSAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxM
QkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5nKG9y
aWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xuJykpOwor
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRF
IERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdp
bjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCBkYXRhYmFzZU5hbWUsICdcbicpKTsK
IAogICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKICAgICBkb3Vi
bGUgdGVzdERlZmF1bHRRdW90YSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZGF0YWJh
c2VEZWZhdWx0UXVvdGEoKTsKQEAgLTE1MjUsNyArMTQ3NCw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRp
dGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdl
KSwgJ1xuJykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iiwgc3RyaW5n
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJuIGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTE1
MzYsNyArMTQ4NSw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5n
KFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiLCByYW5nZVRvU3Ry
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5k
RWRpdGluZ0luRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2Up
LCAnXG4nKSk7CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
QWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTE1NDYsMjIgKzE0OTUsMTcgQEAgYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUs
IFdLQnVuZGxlUmEKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBzdGF0aWMgY29uc3QgY2hhciogaW5zZXJ0YWN0aW9u
c3RyaW5nW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBpbnNlcnRhY3Rp
b25zdHJpbmdbXSA9IHsKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZCIsCiAgICAg
ICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRB
Y3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
RURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2RlKSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5n
ZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2Vy
dGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJF
RElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxkSW5zZXJ0Tm9kZToiLCBkdW1w
UGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpLAorICAgICAgICAgICAgIiByZXBsYWNp
bmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFj
ZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0aW9uOiIsIGluc2VydGFjdGlvbnN0cmluZ1thY3Rp
b25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTU3MiwyMiArMTUxNiwxNyBAQCBib29s
IEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBX
S0J1bmRsZVJhbmdlSGFuZGxlUgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmlu
ZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICppbnNl
cnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGlu
c2VydGFjdGlvbnN0cmluZ1tdID0gewogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblR5cGVk
IiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQiLAogICAgICAgICAiV2ViVmll
d0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VU
b1JlcGxhY2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5B
Y3Rpb246Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmlu
Z1thY3Rpb25dKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAg
ICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVH
QVRFOiIKKyAgICAgICAgICAgICIgc2hvdWxkSW5zZXJ0VGV4dDoiLCB0ZXh0LAorICAgICAgICAg
ICAgIiByZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBy
YW5nZVRvUmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVuQWN0aW9uOiIsIGluc2VydGFjdGlv
bnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAgIHJldHVybiBpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTU5OCwxMyArMTUz
Nyw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGREZWxldGVSYW5nZShXS0J1bmRs
ZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVu
bmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURPTVJhbmdlOiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
cmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9
CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5n
KCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiLCBzdHJpbmcobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTYxNCwyNyAr
MTU0OCwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGZyb21SYQogICAgIGlmICghaW5qZWN0ZWRCdW5k
bGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRpYyBj
b25zdCBjaGFyICphZmZpbml0eXN0cmluZ1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgY2hhciogYWZmaW5pdHlzdHJpbmdbXSA9IHsKICAgICAgICAgIk5TU2VsZWN0aW9uQWZmaW5p
dHlVcHN0cmVhbSIsCiAgICAgICAgICJOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSIKICAg
ICB9OwotICAgIHN0YXRpYyBjb25zdCBjaGFyICpib29sc3RyaW5nW10gPSB7Ci0gICAgICAgICJG
QUxTRSIsCi0gICAgICAgICJUUlVFIgotICAgIH07CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3Js
ZC5nZXQoKSwgZnJvbVJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIHRvRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9T
dHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIGFmZmluaXR5OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChhZmZpbml0eXN0cmluZ1thZmZpbml0eV0pOyAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgc3RpbGxTZWxlY3Rpbmc6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCi0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
bWFrZVN0cmluZygiRURJVElORyBERUxFR0FURToiCisgICAgICAgICAgICAiIHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJh
bmdlKSwKKyAgICAgICAgICAgICIgdG9ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxk
LmdldCgpLCB0b1JhbmdlKSwKKyAgICAgICAgICAgICIgYWZmaW5pdHk6IiwgYWZmaW5pdHlzdHJp
bmdbYWZmaW5pdHldLAorICAgICAgICAgICAgIiBzdGlsbFNlbGVjdGluZzoiLCBzdGlsbFNlbGVj
dGluZyA/ICJUUlVFIiA6ICJGQUxTRSIsICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjQ2
LDEzICsxNTcwLDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5U3R5bGUo
V0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlLAogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0
aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEFwcGx5U3R5bGU6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0eWxlRGVj
VG9TdHIoc3R5bGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG9F
bGVtZW50c0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdl
VG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAgIiBzaG91bGRBcHBs
eVN0eWxlOiIsIHN0eWxlRGVjVG9TdHIoc3R5bGUpLAorICAgICAgICAgICAgIiB0b0VsZW1lbnRz
SW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicp
KTsKICAgICB9CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
QWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjY1LDExICsxNTg1LDcgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQog
ICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdc
bicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcoV0tTdHJp
bmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTE2ODAsMTEgKzE1OTYsNyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1l
KQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0
b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6Iiwgbm90aWZpY2F0aW9uTmFtZSwgJ1xu
JykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyaW5nUmVm
IG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xNjk1LDExICsxNjA3LDcgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlm
ICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5v
dGlmaWNhdGlvbk5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBub3RpZmlj
YXRpb25OYW1lKQpAQCAtMTcxMCwxMSArMTYxOCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKICAgICBp
ZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbjoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiLCBub3RpZmljYXRpb25OYW1lLCAn
XG4nKSk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC0xNzgzLDcgKzE2ODcs
NyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlzdG9yeSgpCiB7CiAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoCiAgICAgICAgICJcbj09PT09PT09PT09PT09IEJhY2sgRm9yd2FyZCBM
aXN0ID09PT09PT09PT09PT09XG4iLAotICAgICAgICB0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVu
ZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UsIHRvV0soIi9MYXlvdXRUZXN0cy8i
KS5nZXQoKSkpLmdldCgpKSwKKyAgICAgICAgYWRvcHRXSyhXS0J1bmRsZVBhZ2VEdW1wSGlzdG9y
eUZvclRlc3RpbmcobV9wYWdlLCB0b1dLKCIvTGF5b3V0VGVzdHMvIikuZ2V0KCkpKS5nZXQoKSwK
ICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
XG4iCiAgICAgKTsKIH0K
</data>
<flag name="commit-queue"
          id="450031"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428970</attachid>
            <date>2021-05-18 13:03:04 -0700</date>
            <delta_ts>2021-05-18 15:05:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210518130303.patch</filename>
            <type>text/plain</type>
            <size>149780</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
OWIzN2FlY2Q2MjVhOTU3ZjhmNDU0OGI0NWMxNjE3YWJmZTg1MGRiLi42NGI1NjQ2ZTYwMmM5ZjNj
NWU5MDRkODI5ZDE3NWVhZTQ1MGU1N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAyMS0wNS0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBmcm9tIFN0cmlu
Z0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKTogVXNlIFN0
cmluZ0J1aWxkZXI6OmNsZWFyIGluc3RlYWQgb2YKKyAgICAgICAgU3RyaW5nQnVpbGRlcjo6cmVz
aXplOyBubyBhZHZhbnRhZ2UgdG8gdGhlIGxhdHRlciBhZnRlciBjYWxsaW5nIFN0cmluZ0J1aWxk
ZXI6OnRvU3RyaW5nLgorCisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KTogVXBkYXRl
IGZvciBuYW1lIGNoYW5nZSBvZgorICAgICAgICBTdHJpbmdCdWlsZGVyOjpyZXNpemUgdG8gU3Ry
aW5nQnVpbGRlcjo6c2hyaW5rLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdGlvbik6IERpdHRvLgor
CiAyMDIxLTA1LTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFRlbXBvcmFyaWx5IHJldmVydCByMjc2NTkyIGFzIGl0IGJyZWFrcyBzb21lIG5hdGl2
ZSBhcHBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCmluZGV4IGJmM2UzNTdkYTYwNTZjZmI2ODZjZTU0MzkzMzJiMDQxN2RlMDE0NzMuLjE3
Mzk0OTNhZjNlOWMzYWUxYWE3MzgxYjhhODRjODE1OWMxN2U0ODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgz
IEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0IGZyb20gU3RyaW5nQnVpbGRl
ciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCisKKyAgICAgICAgVGhlIG5ldyBoZWFkZXIgbWFrZXMgQ0ZTdHJpbmdSZWYgYW5kIE5TU3Ry
aW5nIHdvcmsgd2l0aCBzdHJpbmcgY29uY2F0ZW5hdGlvbiwKKyAgICAgICAgd2hpY2ggbWVhbnMg
aXQgbm93IHdvcmtzIHdpdGggdGhlIHZhcmlhZGljIFN0cmluZ0J1aWxkZXI6OmFwcGVuZCBhbmQg
bWFrZVN0cmluZywKKyAgICAgICAgYW5kIHN0aWxsIHdvcmtzIHdpdGggdGhlIHNpbmdsZS1hcmd1
bWVudCBTdHJpbmdCdWlsZGVyOjphcHBlbmQuIE1vcmUgZWZmaWNpZW50CisgICAgICAgIHRoYXQg
dGhlIG9sZCB2ZXJzaW9uIGJlY2F1c2UgaXQgZG9lcyBub3QgYWxsb2NhdGUgYSB0ZW1wb3Jhcnkg
V1RGOjpTdHJpbmcgZm9yCisgICAgICAgIHRoZSAxNi1iaXQgY2hhcmFjdGVyIHBhdGguCisKKyAg
ICAgICAgQWxzbyBtYWRlIG1hbnkgb3RoZXIgc21hbGwgaW1wcm92ZW1lbnRzIHRvIHRoZSBTdHJp
bmdCdWlsZGVyIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKworICAgICAgICAqIHd0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBSZW1vdmVkIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93
LCB3aGljaCB3YXMgb25seQorICAgICAgICBoZXJlIGZvciB1c2UgYnkgU3RyaW5nQnVpbGRlciwg
d2hpY2ggZG9lcyBub3QgdXNlIENoZWNrZWRBcml0aG1ldGljIGFueSBtb3JlLgorCisgICAgICAg
ICogd3RmL1BsYXRmb3JtRlRXLmNtYWtlOiBBZGRlZCBTdHJpbmdDb25jYXRlbmF0ZUNGLmguLgor
ICAgICAgICAqIHd0Zi9QbGF0Zm9ybU1hYy5jbWFrZTogRGl0dG8uCisgICAgICAgICogd3RmL1Bs
YXRmb3JtV2luLmNtYWtlOiBEaXR0by4KKworICAgICAgICAqIHd0Zi9TYXR1cmF0ZWRBcml0aG1l
dGljLmg6IE1vdmVkIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaW5zaWRlIHRoZQorICAgICAg
ICBXVEYgbmFtZXNwYWNlLgorICAgICAgICAoV1RGOjpzaWduZWRBZGRJbnQzMk92ZXJmbG93cyk6
IFJlbmFtZWQgdGhpcyBmdW5jdGlvbi4gVGhlIHR5cGUgaGVyZSBpcworICAgICAgICBpbXBvcnRh
bnQsIGFuZCB3ZSBhcmUgbm90IGRvaW5nIGFueXRoaW5nIHRvIHByZXZlbnQgdHlwZSBjb252ZXJz
aW9uIG9yCisgICAgICAgIGNyZWF0ZSBhbWJpZ3VpdHksIHNvIGl0J3MgZ29vZCB0byBiZSBleHBs
aWNpdCBpbiB0aGUgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgKFdURjo6c2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KTogUmVuYW1lZCB0aGlzIGZyb20gc2F0dXJhdGVkQWRkaXRpb24gZm9yCisgICAgICAg
IGNsYXJpdHkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3VtLCBzbyB0aGF0J3MgYSBiZXR0ZXIg
bmFtZSB0aGFuIGNhbGxpbmcKKyAgICAgICAgaXQgImFkZGl0aW9uIi4gQWxzbywgaXQncyBjbGVh
cmVyIHRvIGJlIGV4cGxpY2l0IGFib3V0IHRoZSByZXR1cm4gdHlwZS4KKyAgICAgICAgKFdURjo6
c2lnbmVkU3VidHJhY3RJbnQzMk92ZXJmbG93cyk6IFJlbmFtZWQuIFNhbWUgcmVhc29uIGFzIGFi
b3ZlLgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KTogRGl0dG8u
CisgICAgICAgIChXVEY6OnNhdHVyYXRlZFN1bSk6IEFkZGVkLiBEb2VzIHVuc2lnbmVkIGludGVn
ZXIgc2F0dXJhdGVkIGFkZGl0aW9uLgorICAgICAgICBUaGlzIG9uZSBjYW4gYmUgd3JpdHRlbiBp
biBhIHBvcnRhYmxlIG1hbm5lciBhbmQgc3RpbGwgZ2V0IHJlYWxseQorICAgICAgICBlZmZpY2ll
bnQgY29kZSBvbiBhdCBsZWFzdCBJbnRlbCBhbmQgQVJNNjQuCisgICAgICAgIChXVEY6OnNhdHVy
YXRlZFN1bSk6IEFkZGVkIGEgZnVuY3Rpb24gdGVtcGxhdGUgdGhhdCBsZXRzIGNhbGxlcnMgcGFz
cworICAgICAgICBsYXJnZXIgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBzYXR1cmF0ZWRTdW0sIHJh
dGhlciB0aGFuIGV4YWN0bHkgdHdvLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5jcHA6CisgICAgICAgIChXVEY6OmV4cGFuZGVkQ2FwYWNpdHkpOiBSZW5hbWVkIHRvIHVzZSB0
aGUgdGVybSBjYXBhY2l0eSByYXRoZXIgdGhhbgorICAgICAgICBsZW5ndGggZm9yIHRoZSBuZXcg
cmVxdWlyZWQgY2FwYWNpdHkuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmRpZE92ZXJm
bG93KTogSW1wbGVtZW50IHRoZSBuZXcgYXBwcm9hY2ggdG8KKyAgICAgICAgb3ZlcmZsb3csIG1l
YW5pbmcgd2UgbmVlZCB0byB3cml0ZSB0aGUgQ1JBU0goKSBoZXJlIGV4cGxpY2l0bHkgYW5kCisg
ICAgICAgIGluIHRoZSBub24tY3Jhc2hpbmcgbW9kZSwgc2V0IG1fbGVuZ3RoLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZyBjb25zdCk6IENoYW5nZWQgdGhlIG92ZXJm
bG93IGNoZWNrCisgICAgICAgIGludG8gYSBSRUxFQVNFX0FTU0VSVC4gVGhpcyBpcyBub3cgcmVz
cG9uc2libGUgZm9yIGRvaW5nIHRoZSBjaGVjayB0aGF0CisgICAgICAgIGNhbGxlcnMgd2VyZSBk
b2luZyBlYXJsaWVyLCBzbyB3ZSB3YW50IGl0IGluIHByb2R1Y3Rpb24gYnVpbGRzLiBBbHNvCisg
ICAgICAgIHNpbXBsaWZpZWQgdGhpcyBzaW5jZSBvdXIgbV9sZW5ndGggbWVtYmVyIGlzIGEgc2lt
cGxlIGludGVnZXIgbm93LAorICAgICAgICBhbmQgcmVtb3ZlZCB0aGUgdW51c2VkIG1faXNSZWlm
aWVkLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpzaHJpbmspOiBSZW5hbWVkIHRoaXMg
dG8gc2hyaW5rIHRvIG1hdGNoIHRoZQorICAgICAgICBWZWN0b3I6OnNocmluayBmdW5jdGlvbiwg
c2luY2UgdGhpcyBoYXMgbmV2ZXIgc3VwcG9ydGVkIG1ha2luZyB0aGUKKyAgICAgICAgYnVpbGRl
ciBsYXJnZXIuIFJlbW92ZWQgdW5uZWNlc3Nhcnkgb3ZlcmZsb3cgY2hlY2tzLCBzaW5jZSBzaHJp
bmtpbmcKKyAgICAgICAgY2Fubm90IGNhdXNlIG92ZXJmbG93LgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6IFJlcGxhY2VkIHR3byBzZXBhcmF0ZSBmdW5jdGlv
bnMKKyAgICAgICAgd2l0aCBhIHNpbmdsZSBzaW1wbGVyIGZ1bmN0aW9uIHRlbXBsYXRlLiBSZW1v
dmVkIGV4dHJhIG92ZXJmbG93IGNoZWNrcworICAgICAgICBiZWNhdXNlIHRoZSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkIGZ1bmN0aW9uIGFscmVhZHkgZG9lcworICAgICAgICB0
aGUgb25seSBvdmVyZmxvdyBjaGVjayB3ZSBuZWVkLiBBbHNvIG1vdmUgdG8gU3RyaW5nSW1wbDo6
Y29weUNoYXJhY3RlcnMKKyAgICAgICAgZm9yIGNvcHlpbmcgY2hhcmFjdGVycyByYXRoZXIgdGhh
biB1c2luZyBzdGQ6Om1lbWNweSBkaXJlY3RseS4KKyAgICAgICAgUmVtb3ZlZCBjb2RlIHRvIHNl
dCBtX2lzOEJpdCBhbmQgbV9idWZmZXJDaGFyYWN0ZXJzLgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyKTogUmVwbGFjZWQgdHdvIHNlcGFyYXRlCisgICAgICAg
IGZ1bmN0aW9ucyB3aXRoIGEgZnVuY3Rpb24gdGVtcGxhdGUgYW5kIGEgY292ZXIgdGhhdCBjYWxs
cyB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIGZvciBw
bGFjZXMgd2hlcmUgd2UgYXJlbid0CisgICAgICAgIGFscmVhZHkgaW4gY2hhcmFjdGVyLXR5cGUt
c3BlY2lmaWMgY29kZSBwYXRocy4gVGhpcyB2ZXJzaW9uIG5vdworICAgICAgICBzdXBwb3J0cyBh
bGxvY2F0aW5nIGEgYnVmZmVyIGZvciB0aGUgZmlyc3QgdGltZSBpbiBjYXNlcyB3aGVyZQorICAg
ICAgICB3ZSBoYXZlIG1fc3RyaW5nIGFuZCBub3QgbV9idWZmZXIsIHdoaWNoIHVzZWQgdG8gYmUg
aGFuZGxlZCBhdAorICAgICAgICB0aGUgaGlnaGVyIGxldmVsLiBSZW1vdmVkIGNvZGUgdG8gc2V0
IG1fYnVmZmVyQ2hhcmFjdGVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6cmVzZXJ2
ZUNhcGFjaXR5KTogUmV3cm90ZSBmb3Igc2ltcGxpY2l0eS4KKyAgICAgICAgQnkgcmVseWluZyBv
biB0aGUgb3ZlcmZsb3cgY2hlY2tpbmcgaW5zaWRlIHJlYWxsb2NhdGVCdWZmZXIgYW5kCisgICAg
ICAgIGFsbG9jYXRlQnVmZmVyIHdlIG5vIGxvbmdlciBuZWVkIGNoZWNraW5nIG9mIHRoZSBwYXNz
ZWQtaW4gdmFsdWUKKyAgICAgICAgYXQgdGhpcyBsZXZlbC4KKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKTogUmVtb3ZlZCB0aGUKKyAgICAgICAg
dmVyc2lvbiBvZiB0aGlzIHRoYXQgdGFrZXMgYWRkaXRpb25hbExlbmd0aCBzaW5jZSBpdCdzCisg
ICAgICAgIHBvdGVudGlhbGx5IGNvbmZ1c2luZyB0byBoYXZlIGEgZmFtaWx5IG9mIGZ1bmN0aW9u
cyB0aGF0IGhhdmUgdGhlCisgICAgICAgIHNhbWUgbmFtZSBhbmQgdGFrZSB0aGUgc2FtZSB0eXBl
IG9mIGFyZ3VtZW50LCBidXQgaW50ZXJwcmV0IGl0CisgICAgICAgIHN1YnRseSBkaWZmZXJlbnRs
eS4gU3RyZWFtbGluZWQgdGhlIGNvZGUgdXNpbmcgc3RkOjpleGNoYW5nZS4KKyAgICAgICAgVGhp
cyBmdW5jdGlvbiBub3cgYWxzbyBpbmNsdWRlcyB0aGUgbG9naWMgZnJvbSB0aGUgZnVuY3Rpb24g
bmFtZWQKKyAgICAgICAgZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hl
Y2ssIHdoaWNoIHdhcyBzdWJ0bHkKKyAgICAgICAgbWlzbmFtZWQgc2luY2UgdGhhdCB3YXMgbm90
IHRoZSBvbmx5IHNlbWFudGljIGRpZmZlcmVuY2UuIEFsc28KKyAgICAgICAgcmVtb3ZlZCB0aGUg
QUxXQVlTX0lOTElORSBiZWNhdXNlIHRoZSBjb21waWxlciB3aWxsIGRvIHRoZSByaWdodAorICAg
ICAgICB0aGluZyB3aXRob3V0IHN1Y2ggaGVhdnkgaGFuZGVkIGFkdmljZS4KKyAgICAgICAgKFdU
Rjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UpOiBTdHJl
YW1saW5lZAorICAgICAgICB0aGlzIGJ5IHVzaW5nIHN0ZDo6ZXhjaGFuZ2UgYW5kIHJlbW92ZWQg
YWRkaXRpb25hbCBvdmVyZmxvdyBjaGVja3MKKyAgICAgICAgYXQgdGhpcyBsZXZlbCBzaW5jZSBy
ZWFsbG9jYXRlQnVmZmVyIGFscmVhZHkgZG9lcyB0aGVtLiBBbHNvIGFkZGVkCisgICAgICAgIGEg
Y2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBuZXcgdG90YWwgbGVuZ3RoIGlzIDAsIHdoaWNo
IHdvdWxkCisgICAgICAgIG5vdCBiZSBoYW5kbGVkIGNvcnJlY3RseSBhbmQgZWZmaWNpZW50bHkg
YnkgcmVhbGxvY2F0ZUJ1ZmZlci4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nTENoYXIpOiBSZW5hbWVkIHRoaXMKKyAgICAgICAgZnJvbSBleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmc4LCBzaW5jZSBpdCdzIG5vdyBpZGVudGljYWwgdG8gY2FsbGlu
ZworICAgICAgICBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8TENoYXI+LCBleGNlcHQgZm9yIGlu
bGluaW5nIGFuZCBsaW5rYWdlLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmdXaXRoVXBjb252ZXJ0KToKKyAgICAgICAgUmVuYW1lZCB0aGlzIGZy
b20gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nMTYuIEl0IGlzIGRpZmZlcmVudCBmcm9tCisgICAg
ICAgIHRoZSBvdGhlciBleHRlbmRCdWZmZXIgZnVuY3Rpb25zIGJlY2F1c2UgaXMgc3VwcG9ydHMg
dXBjb252ZXJ0aW5nCisgICAgICAgIGZyb20gTENoYXIgdG8gVUNoYXIuIExpa2UgdGhlIG90aGVy
cyBpdCByZWxpZXMgb24gYWxsb2NhdGVCdWZmZXIKKyAgICAgICAgZm9yIHRoZSBvdmVyZmxvdyBj
aGVja2luZy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVycyk6
IFJlbW92ZWQgYW4gdW5uZWNlc3NhcnkKKyAgICAgICAgYXNzZXJ0aW9uIHRoYXQgdGhlIGNoYXJh
Y3RlcnMgcG9pbnRlciBpcyBub24tbnVsbDsgdGhhdCB3aWxsIGZhaWwKKyAgICAgICAgaW4gYW4g
b2J2aW91cyB3YXkgd2l0aG91dCBhbiBhc3NlcnRpb24uIFNpbXBsaWZpZWQgdGhlIGxvZ2ljIGFu
ZAorICAgICAgICByZW1vdmVkIHNvbWUgaW52YXJpYW50IGFzc2VydGlvbnMgdGhhdCBkb24ndCBo
ZWxwIHVzIG11Y2guIENoYW5nZWQKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2tpbmcgYnkgdXNpbmcg
c2F0dXJhdGVkU3VtIHRvIGNvbXB1dGUgdGhlIG5ldyBsZW5ndGguCisgICAgICAgIEluIG92ZXJm
bG93IGNhc2VzLCB0aGUgbmV3IHN1bSB3aWxsIGJlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtCisg
ICAgICAgIHN0cmluZyBsZW5ndGgsIGJ1dCB3aWxsIGZpdCBpbiBhbiB1bnNpZ25lZCwgc28gd2Ug
Y2FuIHBhc3MgaXQKKyAgICAgICAgZG93biB0byBsb3dlciBsZXZlbHMgYW5kIGxldCBmdW5jdGlv
bnMgbGlrZSByZWFsbG9jYXRlQnVmZmVyIGRvCisgICAgICAgIHRoZSBhY3R1YWwgb3ZlcmZsb3cg
Y2hlY2tpbmcuIEFsc28gdXNlIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOiBSZW1vdmVkIHRoZSBDRlN0cmluZ1JlZiBvdmVy
bG9hZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6c2hvdWxkU2hyaW5rVG9GaXQgY29u
c3QpOiBSZW5hbWUgdGhpcyBmcm9tCisgICAgICAgIGNhblNocmluay4gU2ltcGxpZnkgdGhlIGZ1
bmN0aW9uIGEgYml0IGFuZCByZW1vdmUgdGhlIHZhZ3VlIEZJWE1FCisgICAgICAgIHRoYXQgc2F5
cyAidGhpcyBzaG91bGQgYmUgdHVuZWQiLiBUaGF0IG1heSBiZSBzbywgYnV0IHRoZSBGSVhNRQor
ICAgICAgICBpcyBub3QgcmVhbGx5IGRyaXZpbmcgdXMgdG8gYWN0aW9uLgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCk6IFNpbXBsaWZ5IGJ5IHVzaW5nIHRoZSBuZXcK
KyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlciBhbmQgc3RkOjpleGNoYW5nZS4gUmVtb3ZlZCB1bm5l
ZWRlZCBhc3NlcnRpb24KKyAgICAgICAgYWJvdXQgb3ZlcmZsb3cgdGhhdCBkb2Vzbid0IGhlbHAg
dXMgbWFpbnRhaW4gdGhlIGludmFyaWFudC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6
aXNBbGxBU0NJSSBjb25zdCk6IFdhcyB0ZW1wdGVkIHRvIHJlbW92ZQorICAgICAgICB0aGlzIGZ1
bmN0aW9uLCBidXQgZm9yIG5vdyBqdXN0IG1hZGUgaXQgdXNlIHRoZSBTdHJpbmdWaWV3CisgICAg
ICAgIHZlcnNpb24gZm9yIGJyZXZpdHkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg6IFJlbW92ZWQgbWFueSB1bm5lZWRlZCBpbmNsdWRlcywgYW5kCisgICAgICAgIG5vdGFi
bHkgaW5jbHVkZWQgU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluc3RlYWQgb2YKKyAgICAgICAgQ2hl
Y2tlZEFyaXRobWV0aWMuaCBiZWNhdXNlIHdlIG5vdyB1c2UgdGhlIGZvcm1lciBpbnN0ZWFkIG9m
IHRoZQorICAgICAgICBsYXR0ZXIuIENoYW5nZWQgdGhlIG92ZXJmbG93IGNoZWNraW5nIGltcGxl
bWVudGF0aW9uIHRvIHdvcmsKKyAgICAgICAgbW9yZSBzaW1wbHkgYmFzZWQgb24gc2F0dXJhdGVk
IGFkZGl0aW9uIHJhdGhlciB0aGFuIENoZWNrZWQuCisgICAgICAgIFRoaXMgYWxsb3dlZCB1cyB0
byBnZXQgcmlkIG9mIGRlcGVuZGVuY3kgb24gb3VyIG93biB1bmlxdWUgbW9kZQorICAgICAgICBm
b3IgQ2hlY2tlZCwgY2FsbGVkIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93LiBSZW1vdmVkIGEK
KyAgICAgICAgY29tbWVudCBhYm91dCBtYWtpbmcgYSB0ZW1wbGF0aXplZCB2ZXJzaW9uIG9mIFN0
cmluZ0J1aWxkZXIuCisgICAgICAgIFdlIGNhbiBkbyBpdCBpZiB3ZSBsaWtlLCBidXQgZG9lcyBu
b3Qgc2VlbSB1cmdlbnQuIE1vdmVkCisgICAgICAgIGZ1Y250aW9uIGJvZGllcyBvdXQgb2YgdGhl
IGNsYXNzIGRlZmluaXRpb24gc28gaXQncyBlYXNpZXIgdG8KKyAgICAgICAgc2VlIHdoYXQncyBn
b2luZyBvbiBpbiB0aGUgY2xhc3MuIFNpbmNlIG1fbGVuZ3RoIGlzIG5vdyBhbgorICAgICAgICBv
cmRpbmFyeSBpbnRlZ2VyLCB0aGUgY2hlY2sgZm9yIG92ZXJmbG93ZWQgc2ltcGx5IGNoZWNrcyB0
byBzZWUKKyAgICAgICAgaWYgdGhlIGxlbmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBz
dHJpbmcgbGVuZ3RoLiBXaGVuIHdlCisgICAgICAgIGVuY291bnRlciBvdmVyZmxvdyB0aGF0IGlz
IG5vdCBhYm91dCBsZW5ndGggY29tcHV0YXRpb24sIHdlIHNldAorICAgICAgICB0aGUgbGVuZ3Ro
IHRvIHRoZSBtYXhpbXVtIGludGVnZXIgdG8gaW5kaWNhdGUgdGhlIGZhaWx1cmUuCisgICAgICAg
IERlbGV0ZWQgdGhlIGFwcGVuZCBvdmVybG9hZHMgZm9yIENGU3RyaW5nUmVmIGFuZCBOU1N0cmlu
Zy4KKyAgICAgICAgUmVtb3ZlZCBtX2J1ZmZlckNoYXJhY3RlcnMsIG1faXM4Qml0LCBhbmQgbV9p
c1JlaWZpZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOiBT
aW1wbGlmaWVkIHRoZSBjb25zdHJ1Y3RvcgorICAgICAgICBzaW5jZSB3ZSBvbmx5IGhhdmUgdG8g
aW5pdGlhbGl6ZSB0aGUgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgbWVtYmVyLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpjbGVhcik6IEZpeGVkIGEgbWlzdGFrZSB3aGVyZSB0aGlzIHdh
cyBub3QKKyAgICAgICAgcmVzZXR0aW5nIHRoZSBtX2lzUmVpZmllZCBmbGFnLgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpzd2FwKTogVXBkYXRlZCBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0
YSBtZW1iZXJzLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpvcGVyYXRvciBTdHJpbmdW
aWV3IGNvbnN0KTogTW92ZWQgb3V0IG9mIGxpbmUuCisgICAgICAgIE1hZGUgc3VyZSB0byBjYWxs
IHRoZSBsZW5ndGgoKSBmdW5jdGlvbiBzbyB3ZSBjcmFzaCBpZiB0aGlzIGlzCisgICAgICAgIGNh
bGxlZCBhZnRlciBvdmVyZmxvdy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5k
KTogUmVtb3ZlIHNvbWUgb2YgdGhlIHVubmVjZXNzYXJ5IGNoZWNrcworICAgICAgICBhbmQgc3Bl
Y2lhbCBjYXNlcyBpbiB0aGUgdmFyaW91cyB2ZXJzaW9ucyBvZiBhcHBlbmQuIE1vc3Qgb2YgdGhl
CisgICAgICAgIGNoZWNraW5nIGlzIGRvbmUgaW5zaWRlIGFwcGVuZENoYXJhY3RlcnMsIHdpdGgg
b25seSBhIGZldyBleGNlcHRpb25zLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBl
bmRTdWJzdHJpbmcpOiBNb3ZlZCBvdXQgb2YgdGhlIGNsYXNzCisgICAgICAgIGRlZmluaXRpb24g
d2l0aG91dCBtYWtpbmcgc2lnbmlmaWNhbnQgY2hhbmdlcy4KKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVyKTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OnRvU3RyaW5nKTogR3JlYXRseSBzaW1wbGlmaWVkIHRoaXMgZnVuY3Rpb24KKyAgICAg
ICAgYnkgcmVseWluZyBvbiBvdmVyZmxvdyBjaGVja2luZyBpbiB0aGUgcmVpZnlTdHJpbmcgZnVu
Y3Rpb24gaW5zdGVhZAorICAgICAgICBvZiBkb2luZyBpdCBoZXJlIGFuZCByZW1vdmluZyB1bm5l
ZWRlZCBpbnZhcmlhbnQgYXNzZXJ0aW9ucy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6
dG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0
cmluZ0J1aWxkZXI6OnRvQXRvbVN0cmluZyBjb25zdCk6IFJld3JvdGUgdGhpcyB0byBzdHJlYW1s
aW5lLAorICAgICAgICByZW1vdmluZyBleHBsaWNpdCBvdmVyZmxvdyBjaGVja3MuCisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6Omxlbmd0aCBjb25zdCk6IE1vdmVkIG91dCBvZiB0aGUgY2xh
c3MKKyAgICAgICAgZGVmaW5pdGlvbiB3aXRob3V0IG1ha2luZyBzaWduaWZpY2FudCBjaGFuZ2Vz
LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjYXBhY2l0eSBjb25zdCk6IERpdHRvLgor
ICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpvcGVyYXRvcltdIGNvbnN0KTogRGl0dG8uCisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNoYXJhY3RlcnMgY29uc3QpOiBJbXBsZW1lbnRl
ZCB0aGlzIG9wZXJhdGlvbgorICAgICAgICBpbiB0aGUgZnVuY3Rpb24gdGVtcGxhdGUuIE5vdyBy
YXRoZXIgdGhhbiBoYXZpbmcgdGhpcyBjYWxsIHRoZQorICAgICAgICBjaGFyYWN0ZXJzOCBhbmQg
Y2hhcmFjdGVyczE2IGZ1bmN0aW9ucywgdGhleSBjYW4gY2FsbCBpdC4KKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4pOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJDaGFyYWN0ZXJzPFVDaGFyPik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZEZyb21BZGFwdGVycyk6
IFVzZSBzYXR1cmF0ZWRTdW0gdG8KKyAgICAgICAgY29tcHV0ZSB0aGUgcmVxdWlyZWQgbGVuZ3Ro
LCB3aGljaCBhbGxvd3MgdGhlIGV4dGVuZEJ1ZmZlcgorICAgICAgICBmdW5jdGlvbnMgdG8gZG8g
b3ZlcmZsb3cgY2hlY2tpbmcgd2l0aG91dCBoYXZpbmcgdG8gdGFrZSBzcGVjaWFsCisgICAgICAg
IGNoZWNrZWQgaW50ZWdlciB0eXBlcyBmb3IgYXJndW1lbnRzLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjplcXVhbCk6IEltcGxlbWVudCB1c2luZyBTdHJpbmdWaWV3LgorCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdC
dWlsZGVyOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nKTogU2ltcGxpZmllZCB0aGUgY2hlY2tlZAor
ICAgICAgICBhcml0aG1ldGljIGZvciBjb21wdXRpbmcgdGhlIHJlcXVpcmVkIGNhcGFjaXR5LiBV
cGRhdGVkIHNpbmNlIHdlCisgICAgICAgIHJlbW92ZWQgbV9idWZmZXJDaGFyYWN0ZXJzIGFuZCBj
aGFuZ2VkIHRoZSB0eXBlIG9mIG1fbGVuZ3RoLgorCisgICAgICAgICogd3RmL3RleHQvY2YvU3Ry
aW5nQ29uY2F0ZW5hdGVDRi5oOiBBZGRlZC4gU3BlY2lhbGl6ZXMgU3RyaW5nVHlwZUFkYXB0ZXIg
Zm9yCisgICAgICAgIGJvdGggQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nICouIElmIENGU3RyaW5n
R2V0Q1N0cmluZ1B0ciB3b3JrcyBmb3IgTGF0aW4tMSwgdGhlbgorICAgICAgICBkb2VzIHRoZSA4
LWJpdCBjb2RlIHBhdGgsIG90aGVyd2lzZSB0aGUgMTYtYml0LgorCisgICAgICAgICogd3RmL3Rl
eHQvY29jb2EvVGV4dFN0cmVhbUNvY29hLm1tOiBJbmNsdWRlIFN0cmluZ0NvbmNhdGVuYXRlQ0Yu
aCwgc2luY2UgaXQncworICAgICAgICBub3cgbmVlZGVkIHRvIHVzZSBDRlN0cmluZ1JlZiB3aXRo
IFN0cmluZ0J1aWxkZXIuCisKIDIwMjEtMDUtMTggIFlvc2hpYWtpIEppdHN1a2F3YSAgPHlvc2hp
YWtpLmppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEZpeCBQbGF5
U3RhdGlvbiBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E1Njc1ZGQ3N2Y4MTM0OWY3ZTA4ZmZmNWJlZjZj
NzFlYWIzODgyMy4uYzAxYTIyNDkxODM5YTA0OWNlMDliZTc4MWRiMzA2OWM3YzViOTNiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBw
b3J0IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBNb2R1bGVzL2FpcnBsYXkvV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVByb2R1Y2Vy
U3RhdGVTdHJpbmcpOiBVc2UgU3RyaW5nQnVpbGRlciBleGNsdXNpdmVseSBpbnN0ZWFkIG9mCisg
ICAgICAgIG1peGluZyBpdCB3aXRoIG1ha2VTdHJpbmcuIEFsc28gdXBkYXRlZCBmb3IgU3RyaW5n
QnVpbGRlcjo6c2hyaW5rIG5hbWUuCisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJpcFRyYWlsaW5nTmV3bGluZSk6IFVw
ZGF0ZWQgZm9yIFN0cmluZ0J1aWxkZXI6OnNocmluayBuYW1lLgorCisgICAgICAgICogcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOiBUd2Vh
a2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVu
ZENTUyk6IFVzZSB2YXJpYWRpYyBTdHJpbmdCdWlsZGVyOjphcHBlbmQgaW5zdGVhZCBvZiBtYW55
CisgICAgICAgIHNlcGFyYXRlIGNhbGxzLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MgY29uc3QpOgorICAgICAg
ICBUd2Vha2VkIGNvZGluZyBzdHlsZSBhIGJpdCwgYW5kIHVzZSB2YXJpYWRpYyBTdHJpbkJ1aWxk
ZXI6OmFwcGVuZCBjYWxscworICAgICAgICB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyBh
bmQgc3RyZWFtbGluZSB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSBjb25zdCk6CisgICAg
ICAgIERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWNlc3NhcnkgY2hlY2tzIHRoYXQgc3RyaW5ncyBh
cmUgZW1wdHkgYmVmb3JlIGFwcGVuZGluZy4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnNBc1RleHQpOgorICAgICAgICBVcGRh
dGVkIGZvciBTdHJpbmdCdWlsZGVyOjpzaHJpbmsgbmFtZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L0xheW91dFVuaXQuaDogVXBkYXRlZCBmb3Igc2F0dXJhdGVkU3VtL0RpZmZlcmVuY2UgbmFtZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29r
aWVzRm9yU2Vzc2lvbiBjb25zdCk6IFR3ZWFrZWQgY29kaW4KKyAgICAgICAgc3R5bGUgYSBiaXQs
IGFuZCB1c2UgdmFyaWFkaWMgU3RyaW5CdWlsZGVyOjphcHBlbmQgY2FsbHMgdG8gcmVkdWNlIHRo
ZQorICAgICAgICBudW1iZXIgb2YgY2FsbHMgYW5kIHN0cmVhbWxpbmUgdGhlIGNvZGUuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
bGFuQ291bnRlcik6IFVwZGF0ZWQgZm9yIHNhdHVyYXRlZFN1bSBuYW1lLgorICAgICAgICAqIHN0
eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKTogRGl0dG8uCisKKyAgICAgICAgKiBzdmcvU1ZH
UGF0aFN0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ0J1
aWxkZXI6OnJlc3VsdCk6IFVwZGF0ZWQgZm9yIFN0cmluZ0J1aWxkZXI6OnNocmluayBuYW1lLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cGFnZU1lZGlhU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2F2ZVJlc3VsdFRvU3RyaW5nKTogRGl0
dG8uCisKIDIwMjEtMDUtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBVc2UgVVRGLTggaW50ZXJuYWxseSBmcm9tIFN0cmluZ3MgaW5zaWRlIFNRTGl0ZVN0YXRl
bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCAzYmVjZWZmZTc1NjU0MWM4YWIzMjZkZWJkM2IwZDQ5YTRhYzJkZjMz
Li41MWFkMzQwNzljNjQ0M2ZkN2FkZDA2ZWE1NjQxMDRiYzIwOGRlYmJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0IGZyb20gU3Ry
aW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKTogVXNlIG1ha2VTdHJpbmcgaW5zdGVhZAor
ICAgICAgICBvZiBTdHJpbmdCdWlsZGVyLgorCiAyMDIxLTA1LTE4ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGxvZ2dpbmcgbWluaW1hbCBpbmZv
IGFib3V0IHVwbG9hZGluZyBtZWRpYSBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAppbmRleCAzMzdjYTdlZTBlMjk1OTBiMzVm
MDgxYWM3M2I4ZDU5YjgyMzAyOWE1Li5lZjg5YWVkNWRhZjU5NDViYjE3NGEzMzBmZTlmYzZkNDlm
MmEwMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxl
CiAgICAgICAgIGNhc2UgSlNPTkxvZ1ZhbHVlOjpUeXBlOjpKU09OOgogICAgICAgICAgICAgaWYg
KGJ1aWxkZXIubGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBtX2pzb25Mb2dWYWx1ZXMuYXBw
ZW5kKHsgSlNPTkxvZ1ZhbHVlOjpUeXBlOjpTdHJpbmcsIGJ1aWxkZXIudG9TdHJpbmcoKSB9KTsK
LSAgICAgICAgICAgICAgICBidWlsZGVyLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgICAgICBidWls
ZGVyLmNsZWFyKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fanNvbkxvZ1ZhbHVl
cy5hcHBlbmQobWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05P
YmplY3QuY3BwCmluZGV4IDVlMWNjOWZiZDJlMTUxZjZkMzc4NDA0ZTYwY2ZhOWJiOWU3NmU3NGQu
LjYxMGYzNmNmZWJjZGI0NzdhOTI0NGRlOGQ4YjA4M2E4NGNkNjc1NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCkBAIC01NzUsNyArNTc1LDcgQEAg
Ym9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXIm
IHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAgICAgICAgIC8vIFRoaXMgb25seSBvY2N1cnMg
d2hlbiBnZXQgYW4gdW5kZWZpbmVkIHZhbHVlIG9yIGEgc3ltYm9sIHZhbHVlIGZvcgogICAgICAg
ICAgICAgLy8gYW4gb2JqZWN0IHByb3BlcnR5LiBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0
aGUgc2VwYXJhdG9yIGFuZAogICAgICAgICAgICAgLy8gcHJvcGVydHkgbmFtZSB0aGF0IHdlIGFs
cmVhZHkgYXBwZW5kZWQsIHNvIHJvbGwgYmFjay4KLSAgICAgICAgICAgIGJ1aWxkZXIucmVzaXpl
KHJvbGxCYWNrUG9pbnQpOworICAgICAgICAgICAgYnVpbGRlci5zaHJpbmsocm9sbEJhY2tQb2lu
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVNldC5jcHAKaW5kZXggNjVlYTM1NDU5YzQ0OTc4NDJiNThhYTNiNGQyYzE2YWJj
YzlmZTE1Ni4uNzIxNDEwYjEwZGI0MWFiOTgyYTk4OGY1OWM2MWI3NTA0MWM1ODI0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKQEAgLTQxOSw3ICs0MTksNyBA
QCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnN0cmluZ1JlcHJlc2VudGF0aW9uKCkKICAgICB9CiAK
ICAgICBpZiAocmVwcmVzZW50YXRpb24ubGVuZ3RoKCkgPj0gMykKLSAgICAgICAgcmVwcmVzZW50
YXRpb24ucmVzaXplKHJlcHJlc2VudGF0aW9uLmxlbmd0aCgpIC0gMik7CisgICAgICAgIHJlcHJl
c2VudGF0aW9uLnNocmluayhyZXByZXNlbnRhdGlvbi5sZW5ndGgoKSAtIDIpOwogCiAgICAgcmVw
cmVzZW50YXRpb24uYXBwZW5kKCd9Jyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGIxMWUwOThjZTQ3N2Q2OWQ4NjliMmYxNWU3NTNjOTkzZTE4MDM3ZTYu
LmNjNTYxZjNlZjg5NGQ5NjQ4NDdlNjg4MDcwMTIzNzlkNjE4NmYwMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDk4LDYgKzQ5OCw3IEBACiAJCTkzQUM5
MUE3MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMQ2hhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I1QjQ0RDIy
MTNENjE2MDA0QjdBQTcgLyogSGV4TnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhleE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQjVCNDUwMjIxNzFFRTkwMDRCN0FBNyAvKiBMb2dnZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTG9nZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNEMDAxN0IyNjREQkFDRjAwQkNGMTA5IC8qIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGVDRi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxOTFDRjIwQ0FFQ0U4MDBDNTFCOEUgLyog
b2JqY1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvYmpjU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRERFOTMxMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGR5bGRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNGMTk5M0QxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MjQsNiArOTI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUE1QkExNUY3MTgyNDM1QTYwMEE4MkU2OSAvKiBBdG9tU3RyaW5nSW1wbENGLmNwcCAqLywK
IAkJCQlBNUJBMTVGODE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwICovLAorCQkJCTkz
RDAwMTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJpbmdDb25jYXRlbmF0ZUNGLmggKi8sCiAJCQkJ
QTVCQTE1RjkxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDRi5jcHAgKi8sCiAJCQkJOTM5
MzRCRDQxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgKi8sCiAJCQkJMUNDREIx
NDkxRTU2NjYyNjAwNkM3M0MwIC8qIFRleHRCcmVha0l0ZXJhdG9yQ0YuaCAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggYi9Tb3VyY2UvV1RGL3d0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oCmluZGV4IGI4NTE2Zjg4MWUwYzRiYTNmZjFhYWMxNTg2MDZjOWVm
OWQ1NzMwYWMuLjczYWNkYzcyZDVjYmNjNjFkYTdlYzYyMzNjMmM1Y2U3NjQ4MjlkMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaApAQCAtOTUsMzEgKzk1LDYgQEAgcHVibGljOgogICAg
IGNvbnN0ZXhwciBib29sIGhhc092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
fTsKIAotY2xhc3MgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3cgewotcHVibGljOgotICAgIHZv
aWQgb3ZlcmZsb3dlZCgpCi0gICAgewotICAgICAgICBtX292ZXJmbG93ZWQgPSB0cnVlOwotICAg
ICAgICBpZiAobV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpCi0gICAgICAgICAgICBjcmFzaCgpOwot
ICAgIH0KLQotICAgIGJvb2wgc2hvdWxkQ3Jhc2hPbk92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KLSAgICB2b2lkIHNldFNob3VsZENyYXNoT25PdmVy
Zmxvdyhib29sIHZhbHVlKSB7IG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93ID0gdmFsdWU7IH0KLQot
ICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZDsgfQot
ICAgIHZvaWQgY2xlYXJPdmVyZmxvdygpIHsgbV9vdmVyZmxvd2VkID0gZmFsc2U7IH0KLQotICAg
IHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgY3Jhc2goKQotICAgIHsKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX292ZXJmbG93ZWQgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgeyB0cnVlIH07Ci19Owot
CiBjbGFzcyBDcmFzaE9uT3ZlcmZsb3cgewogcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgb3ZlcmZsb3dlZCgpCkBAIC0yNTIsMTEgKzIyNyw2IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZCB7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsKIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENvbmRpdGlvbmFsQ3Jhc2hPbk92
ZXJmbG93Pj4gewotICAgIHVzaW5nIENsZWFuVHlwZSA9IHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8
VD46OkNsZWFuVHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIENsZWFuVHlwZSBEZWZhdWx0VmFs
dWUgPSAwOwotfTsKLQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2Vk
PENoZWNrZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93Pj4gewogICAgIHR5cGVkZWYgdHlwZW5hbWUgUmVt
b3ZlQ2hlY2tlZDxUPjo6Q2xlYW5UeXBlIENsZWFuVHlwZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOwpAQCAtMTA2OSw3ICsxMDM5LDYgQEAgdXNpbmcg
V1RGOjpDaGVja2VkVWludDMyOwogdXNpbmcgV1RGOjpDaGVja2VkSW50NjQ7CiB1c2luZyBXVEY6
OkNoZWNrZWRVaW50NjQ7CiB1c2luZyBXVEY6OkNoZWNrZWRTaXplOwotdXNpbmcgV1RGOjpDb25k
aXRpb25hbENyYXNoT25PdmVyZmxvdzsKIHVzaW5nIFdURjo6Q3Jhc2hPbk92ZXJmbG93OwogdXNp
bmcgV1RGOjpSZWNvcmRPdmVyZmxvdzsKIHVzaW5nIFdURjo6Y2hlY2tlZFN1bTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1GVFcuY21ha2UKaW5kZXggOTcxZmRlYjI1OTUwZWViNzc4ZDVkNzBlMWFkY2ZkNTJhZDZh
ZDI5ZS4uYmZhMTNkMWZlODBiMzA3YTUyYjNmZGRiZWRhMWU2OTdkMzhlNTNjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1GVFcuY21ha2UKQEAgLTM5LDYgKzM5LDcgQEAgaWYgKFVTRV9DRikKICAgICAgICAg
Y2YvQ0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9UeXBlQ2FzdHNDRi5oCiAKKyAgICAgICAgdGV4
dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVy
YXRvckNGLmgKICAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1NYWMuY21ha2UKaW5kZXggZTI4MDk5NzQyNzE5Yzc3OWFjM2VhZGY0NjYxMzMzZDg3OGVmZGNk
ZC4uN2NkY2M0YjE2YmUyMmU0NzVlMjJhODZhZDBlN2FjNDhkZTFkZDExNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1NYWMuY21ha2UKQEAgLTQxLDYgKzQxLDcgQEAgbGlzdChBUFBFTkQgV1RGX1BVQkxJQ19I
RUFERVJTCiAKICAgICBzcGkvbWFjL01ldGFkYXRhU1BJLmgKIAorICAgIHRleHQvY2YvU3RyaW5n
Q29uY2F0ZW5hdGVDRi5oCiAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKICkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA2ZTgwYjk5YTA0YTZjNmRlNGUyZmY1OWE3YjRl
ZDRjOGM0YWFmYWI5Li45MGZkMjZkNzhjNjk0ZGIzNmRkMDgyNDFlOTg4ZTQyZjU1NTdlNTE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMzcsNiArMzcsNyBAQCBpZiAoVVNFX0NGKQog
ICAgICAgICBjZi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVDYXN0c0NGLmgKIAorICAg
ICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAogICAgICAgICB0ZXh0L2NmL1RleHRC
cmVha0l0ZXJhdG9yQ0YuaAogICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGIvU291cmNlL1dU
Ri93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oCmluZGV4IDYwN2JjMDExMjVkZjUwYmI4OTQ5NjA4
MGU4OGU2NWQ3NDVjOGJmOTYuLjU3OWI1Yjg1YzhlOGExYjQ0MWUyMWQ3Y2UwN2ZmMGEyMzAxZDI1
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmgKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDcgKzM2LDE0IEBA
CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CiAKLWlubGlu
ZSBib29sIHNpZ25lZEFkZE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYg
cmVzdWx0KQorbmFtZXNwYWNlIFdURiB7CisKKy8vIEZJWE1FOiBFbmhhbmNlIHRoaXMgc28gaXQg
ZmFpbHMgdG8gY29tcGlsZSBjYWxscyB3aGVyZSBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50cyBjYW4g
YmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGludGVncmFsIHR5cGUgaW5zdGVhZCBvZiBxdWll
dGx5IGNvbnZlcnRpbmcuCit0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRJbnRlZ3JhbFR5cGU+IHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbF92PFNpZ25lZEludGVncmFsVHlwZT4gJiYg
c3RkOjppc19zaWduZWRfdjxTaWduZWRJbnRlZ3JhbFR5cGU+LCBTaWduZWRJbnRlZ3JhbFR5cGU+
IHNhdHVyYXRlZFN1bShTaWduZWRJbnRlZ3JhbFR5cGUsIFNpZ25lZEludGVncmFsVHlwZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBVbnNpZ25lZEludGVncmFsVHlwZT4gY29uc3RleHByIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19pbnRlZ3JhbF92PFVuc2lnbmVkSW50ZWdyYWxUeXBlPiAmJiAhc3Rk
Ojppc19zaWduZWRfdjxVbnNpZ25lZEludGVncmFsVHlwZT4sIFVuc2lnbmVkSW50ZWdyYWxUeXBl
PiBzYXR1cmF0ZWRTdW0oVW5zaWduZWRJbnRlZ3JhbFR5cGUsIFVuc2lnbmVkSW50ZWdyYWxUeXBl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIEludGVncmFsVHlwZT4gSW50ZWdyYWxUeXBlIHNhdHVyYXRl
ZERpZmZlcmVuY2UoSW50ZWdyYWxUeXBlLCBJbnRlZ3JhbFR5cGUpOworCitpbmxpbmUgYm9vbCBz
aWduZWRBZGRJbnQzMk92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYgcmVz
dWx0KQogewogI2lmIENPTVBJTEVSX0hBU19DTEFOR19CVUlMVElOKF9fYnVpbHRpbl9zYWRkX292
ZXJmbG93KSAmJiAhKGRlZmluZWQgX19jbGFuZ19tYWpvcl9fICYmIF9fY2xhbmdfbWFqb3JfXyA8
IDcpCiAgICAgcmV0dXJuIF9fYnVpbHRpbl9zYWRkX292ZXJmbG93KGEsIGIsICZyZXN1bHQpOwpA
QCAtNTIsNyArNTksNyBAQCBpbmxpbmUgYm9vbCBzaWduZWRBZGRPdmVyZmxvd3MoaW50MzJfdCBh
LCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKICNlbmRpZgogfQogCi1pbmxpbmUgaW50MzJf
dCBzYXR1cmF0ZWRBZGRpdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKK3RlbXBsYXRlPD4gaW5s
aW5lIGludDMyX3Qgc2F0dXJhdGVkU3VtPGludDMyX3Q+KGludDMyX3QgYSwgaW50MzJfdCBiKQog
ewogICAgIGludDMyX3QgcmVzdWx0OwogI2lmIENQVShBUk1fVEhVTUIyKQpAQCAtNjIsMTMgKzY5
LDEzIEBAIGlubGluZSBpbnQzMl90IHNhdHVyYXRlZEFkZGl0aW9uKGludDMyX3QgYSwgaW50MzJf
dCBiKQogICAgICAgICA6IC8qIE5vdGhpbmcgaXMgY2xvYmJlcmVkLiAqLwogICAgICAgICApOwog
I2Vsc2UKLSAgICBpZiAoc2lnbmVkQWRkT3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCisgICAgaWYg
KHNpZ25lZEFkZEludDMyT3ZlcmZsb3dzKGEsIGIsIHJlc3VsdCkpCiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpICsgKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhKSA+PiAzMSk7CiAjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUg
Ym9vbCBzaWduZWRTdWJ0cmFjdE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJf
dCYgcmVzdWx0KQoraW5saW5lIGJvb2wgc2lnbmVkU3VidHJhY3RJbnQzMk92ZXJmbG93cyhpbnQz
Ml90IGEsIGludDMyX3QgYiwgaW50MzJfdCYgcmVzdWx0KQogewogI2lmIENPTVBJTEVSX0hBU19D
TEFOR19CVUlMVElOKF9fYnVpbHRpbl9zc3ViX292ZXJmbG93KSAmJiAhKGRlZmluZWQgX19jbGFu
Z19tYWpvcl9fICYmIF9fY2xhbmdfbWFqb3JfXyA8IDcpCiAgICAgcmV0dXJuIF9fYnVpbHRpbl9z
c3ViX292ZXJmbG93KGEsIGIsICZyZXN1bHQpOwpAQCAtODQsNyArOTEsOCBAQCBpbmxpbmUgYm9v
bCBzaWduZWRTdWJ0cmFjdE92ZXJmbG93cyhpbnQzMl90IGEsIGludDMyX3QgYiwgaW50MzJfdCYg
cmVzdWx0KQogI2VuZGlmCiB9CiAKLWlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1YnRyYWN0aW9u
KGludDMyX3QgYSwgaW50MzJfdCBiKQorLy8gRklYTUU6IEVuaGFuY2UgdGhpcyBzbyBpdCBmYWls
cyB0byBjb21waWxlIGNhbGxzIHdoZXJlIGVpdGhlciBvZiB0aGUgYXJndW1lbnRzIGNhbiBiZSBv
dXRzaWRlIHRoZSByYW5nZSBvZiBpbnQzMl90IGluc3RlYWQgb2YgcXVpZXRseSBjb252ZXJ0aW5n
LgordGVtcGxhdGU8PiBpbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+
KGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIGludDMyX3QgcmVzdWx0OwogI2lmIENQVShB
Uk1fVEhVTUIyKQpAQCAtOTQsOCArMTAyLDI0IEBAIGlubGluZSBpbnQzMl90IHNhdHVyYXRlZFN1
YnRyYWN0aW9uKGludDMyX3QgYSwgaW50MzJfdCBiKQogICAgICAgICA6IC8qIE5vdGhpbmcgaXMg
Y2xvYmJlcmVkLiAqLwogICAgICAgICApOwogI2Vsc2UKLSAgICBpZiAoc2lnbmVkU3VidHJhY3RP
dmVyZmxvd3MoYSwgYiwgcmVzdWx0KSkKKyAgICBpZiAoc2lnbmVkU3VidHJhY3RJbnQzMk92ZXJm
bG93cyhhLCBiLCByZXN1bHQpKQogICAgICAgICByZXN1bHQgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSArIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYSkgPj4gMzEpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVW5zaWduZWRJ
bnRlZ3JhbFR5cGU+IGNvbnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWxf
djxVbnNpZ25lZEludGVncmFsVHlwZT4gJiYgIXN0ZDo6aXNfc2lnbmVkX3Y8VW5zaWduZWRJbnRl
Z3JhbFR5cGU+LCBVbnNpZ25lZEludGVncmFsVHlwZT4gc2F0dXJhdGVkU3VtKFVuc2lnbmVkSW50
ZWdyYWxUeXBlIGEsIFVuc2lnbmVkSW50ZWdyYWxUeXBlIGIpCit7CisgICAgYXV0byBzdW0gPSBh
ICsgYjsKKyAgICByZXR1cm4gc3VtIDwgYSA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VW5zaWduZWRJ
bnRlZ3JhbFR5cGU+OjptYXgoKSA6IHN1bTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdy
YWxUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPiBjb25zdGV4cHIgdWludDMyX3Qgc2F0
dXJhdGVkU3VtKEludGVncmFsVHlwZSB2YWx1ZSwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgcmV0dXJuIHNhdHVyYXRlZFN1bTxJbnRlZ3JhbFR5cGU+KHZhbHVlLCBzYXR1cmF0
ZWRTdW08SW50ZWdyYWxUeXBlPihhcmd1bWVudHMuLi4pKTsKK30KKworfQorCit1c2luZyBXVEY6
OnNhdHVyYXRlZFN1bTsKK3VzaW5nIFdURjo6c2F0dXJhdGVkRGlmZmVyZW5jZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDFlMGMxOGFjOWQyMGVkODIwZmViODY4NWZj
Y2Y4MmIxMDYwMTE0MmQuLjIzM2FkZjc4OWE2N2YyNjQ5NmI5N2YyMGE1NjgyMWQ4OTZjMzVjNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDI2ICszMywyOSBAQCBuYW1lc3BhY2UgV1RG
IHsKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhDYXBhY2l0eSA9IFN0cmluZzo6TWF4
TGVuZ3RoOwogCi1zdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRDYXBhY2l0eSh1bnNpZ25lZCBjYXBh
Y2l0eSwgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRD
YXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSwgdW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbmltdW1DYXBhY2l0eSA9IDE2OwotICAg
IHJldHVybiBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5
LCBzdGQ6Om1pbihjYXBhY2l0eSAqIDIsIG1heENhcGFjaXR5KSkpOworICAgIHJldHVybiBzdGQ6
Om1heChyZXF1aXJlZENhcGFjaXR5LCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIHN0ZDo6bWlu
KGNhcGFjaXR5ICogMiwgbWF4Q2FwYWNpdHkpKSk7Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6
ZGlkT3ZlcmZsb3coKQoreworICAgIGlmIChtX3Nob3VsZENyYXNoT25PdmVyZmxvdykKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICBtX2xlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNP
dmVyZmxvd2VkKCkpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cmluZyBhbHJlYWR5IGV4aXN0
cy4KICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0cmlu
Zy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgICAgICBB
U1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lzUmVpZmllZCA9IHRydWU7Ci0jZW5k
aWYKLQogICAgIC8vIENoZWNrIGZvciBlbXB0eS4KICAgICBpZiAoIW1fbGVuZ3RoKSB7CiAgICAg
ICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKQEAgLTYwLDM2OSArNjMsMTk2IEBA
IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAogICAgIH0KIAogICAgIC8v
IE11c3QgYmUgdmFsaWQgaW4gdGhlIGJ1ZmZlciwgdGFrZSBhIHN1YnN0cmluZyAodW5sZXNzIHN0
cmluZyBmaWxscyB0aGUgYnVmZmVyKS4KLSAgICBBU1NFUlQobV9idWZmZXIgJiYgbV9sZW5ndGgu
dW5zYWZlR2V0PHVuc2lnbmVkPigpIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAgaWYgKG1f
bGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSA9PSBtX2J1ZmZlci0+bGVuZ3RoKCkpCisgICAg
QVNTRVJUKG1fbGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSk7CisgICAgaWYgKG1fbGVuZ3Ro
ID09IG1fYnVmZmVyLT5sZW5ndGgoKSkKICAgICAgICAgbV9zdHJpbmcgPSBtX2J1ZmZlci5nZXQo
KTsKICAgICBlbHNlCi0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3Ry
aW5nU2hhcmluZ0ltcGwoKm1fYnVmZmVyLCAwLCBtX2xlbmd0aC51bnNhZmVHZXQoKSk7CisgICAg
ICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1f
YnVmZmVyLCAwLCBtX2xlbmd0aCk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVu
c2lnbmVkIG5ld1NpemUpCit2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmluayh1bnNpZ25lZCBuZXdM
ZW5ndGgpCiB7CiAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gQ2hlY2sgbmV3U2l6ZSA8IG1fbGVuZ3RoLCBoZW5jZSBtX2xlbmd0aCA+IDAuCi0gICAg
dW5zaWduZWQgb2xkTGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgQVNTRVJUKG5l
d1NpemUgPD0gb2xkTGVuZ3RoKTsKLSAgICBpZiAobmV3U2l6ZSA9PSBvbGRMZW5ndGgpCisgICAg
QVNTRVJUKG5ld0xlbmd0aCA8PSBtX2xlbmd0aCk7CisgICAgaWYgKG5ld0xlbmd0aCA+PSBtX2xl
bmd0aCkgeworICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9sZW5ndGgpCisgICAgICAgICAgICBk
aWRPdmVyZmxvdygpOwogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG9sZExlbmd0aCk7Cisg
ICAgfQogCi0gICAgbV9sZW5ndGggPSBuZXdTaXplOwotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dl
ZCgpKTsKKyAgICBtX2xlbmd0aCA9IG5ld0xlbmd0aDsKIAotICAgIC8vIElmIHRoZXJlIGlzIGEg
YnVmZmVyLCB3ZSBvbmx5IG5lZWQgdG8gZHVwbGljYXRlIGl0IGlmIGl0IGhhcyBtb3JlIHRoYW4g
b25lIHJlZi4KICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmco
KTsgLy8gQ2xlYXIgdGhlIHN0cmluZyB0byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBtX2J1ZmZl
ciBpZiBhbnkgYmVmb3JlIGNoZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbV9idWZmZXIu
Ci0gICAgICAgIGlmICghbV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICBpZiAo
bV9idWZmZXItPmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVm
ZmVyLT5jaGFyYWN0ZXJzOCgpLCBtX2J1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYo
KSwgbV9idWZmZXItPmxlbmd0aCgpKTsKKyAgICAgICAgbV9zdHJpbmcgPSB7IH07IC8vIENsZWFy
IHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJl
Zm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG1fYnVmZmVyLgorICAgICAgICBp
ZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIGJ1
ZmZlciBoYWQgb25seSB0aGUgb25lIHJlZiwgd2UgY2FuIGp1c3QgcmVkdWNlIHRoZSBsZW5ndGgg
YW5kIGtlZXAgdXNpbmcgdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+
PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOworICAgICAgICAvLyBBbGxvY2F0ZSBh
IGZyZXNoIGJ1ZmZlciwgd2l0aCBhIGNvcHkgb2YgdGhlIGNoYXJhY3RlcnMgd2UgYXJlIGtlZXBp
bmcuCisgICAgICAgIGlmIChtX2J1ZmZlci0+aXM4Qml0KCkpCisgICAgICAgICAgICBhbGxvY2F0
ZUJ1ZmZlcjxMQ2hhcj4obV9idWZmZXItPmNoYXJhY3RlcnM8TENoYXI+KCksIG5ld0xlbmd0aCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX2J1ZmZl
ci0+Y2hhcmFjdGVyczxVQ2hhcj4oKSwgbmV3TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIFNpbmNlIG1fbGVuZ3RoICYmICFtX2J1ZmZlciwgdGhlIHN0cmluZyBtdXN0
IGJlIHZhbGlkIGluIG1fc3RyaW5nLCBhbmQgbV9zdHJpbmcubGVuZ3RoKCkgPiAwLgotICAgIEFT
U0VSVCghbV9zdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQob2xkTGVuZ3RoID09IG1fc3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICBBU1NFUlQobmV3U2l6ZSA8IG1fc3RyaW5nLmxlbmd0aCgpKTsK
LSAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpt
X3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOworICAgIC8vIFNpbmNlIHRoZSBvbGQgbGVuZ3Ro
IHdhcyBub3QgMCBhbmQgbV9idWZmZXIgaXMgbnVsbCwgbV9zdHJpbmcgaXMgZ3VhcmFudGVlZCB0
byBiZSBub24tbnVsbC4KKyAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmlu
Z1NoYXJpbmdJbXBsKCptX3N0cmluZy5pbXBsKCksIDAsIG5ld0xlbmd0aCk7CiB9CiAKLS8vIEFs
bG9jYXRlIGEgbmV3IDggYml0IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAo
dGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJpbmcKLS8vIG9yIG1fYnVmZmVyLCBuZWl0
aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29tcGxldGVkKS4KLXZv
aWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFy
YWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKKy8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZl
ciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRo
ZXIgbV9zdHJpbmcgb3IgbV9idWZmZXIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBbGxvY2F0aW9uQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgQ3VycmVudENoYXJhY3RlclR5cGU+IHZvaWQgU3RyaW5nQnVp
bGRlcjo6YWxsb2NhdGVCdWZmZXIoY29uc3QgQ3VycmVudENoYXJhY3RlclR5cGUqIGN1cnJlbnRD
aGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KQogewotICAgIEFTU0VSVCghaGFz
T3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9pczhCaXQpOwotICAgIC8vIENvcHkgdGhlIGV4
aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhl
IGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KLSAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVy
czgpOwotICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIGRpZE92ZXJm
bG93KCk7Ci0KLSAgICBpZiAobV9sZW5ndGgpCi0gICAgICAgIHN0ZDo6bWVtY3B5KG1fYnVmZmVy
Q2hhcmFjdGVyczgsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0K
LSAgICAvLyBVcGRhdGUgdGhlIGJ1aWxkZXIgc3RhdGUuCi0gICAgbV9idWZmZXIgPSBXVEZNb3Zl
KGJ1ZmZlcik7Ci0gICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKLX0KKyAgICBBbGxvY2F0aW9uQ2hhcmFjdGVy
VHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7
CisgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7CisgICAgICAgIGRpZE92ZXJmbG93KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIs
IGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVy
IG1fc3RyaW5nCi0vLyBvciBtX2J1ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVu
dGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0
ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQotewogICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQoIW1f
aXM4Qml0KTsKLSAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVy
LCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCi0g
ICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHJlcXVp
cmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7Ci0gICAgaWYgKFVOTElLRUxZKCFidWZm
ZXIpKQotICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKLSAgICBzdGQ6Om1lbWNweShtX2J1
ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4o
bV9sZW5ndGgudW5zYWZlR2V0KCkpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3Zl
cmZsb3cuCi0gICAgCi0gICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgotICAgIG1fYnVm
ZmVyID0gV1RGTW92ZShidWZmZXIpOwotICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgQVNT
RVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0aCk7Ci19CisgICAgU3RyaW5n
SW1wbDo6Y29weUNoYXJhY3RlcnMoYnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENoYXJhY3RlcnMs
IG1fbGVuZ3RoKTsKIAotLy8gQWxsb2NhdGUgYSBuZXcgMTYgYml0IGJ1ZmZlciwgY29weWluZyBp
biBjdXJyZW50Q2hhcmFjdGVycyAod2hpY2ggaXMgOCBiaXQgYW5kIG1heSBjb21lCi0vLyBmcm9t
IGVpdGhlciBtX3N0cmluZyBvciBtX2J1ZmZlciwgbmVpdGhlciB3aWxsIGJlIHJlYXNzaWduZWQg
dW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWdu
ZWQgcmVxdWlyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAg
IEFTU0VSVChtX2lzOEJpdCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZl
R2V0KCk7Ci0gICAgQVNTRVJUKHJlcXVpcmVkTGVuZ3RoIDw9IG1heENhcGFjaXR5ICYmIHJlcXVp
cmVkTGVuZ3RoID49IGxlbmd0aCk7Ci0gICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRv
IGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlz
dGluZyBkYXRhLgotICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIGlmIChV
TkxJS0VMWSghYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7IC8vIFRyZWF0
IGEgZmFpbHVyZSB0byBhbGxjb2F0ZSBhcyBhbiBvdmVyZmxvdy4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W2ld
ID0gY3VycmVudENoYXJhY3RlcnNbaV07Ci0gICAgCi0gICAgbV9pczhCaXQgPSBmYWxzZTsKLSAg
ICAKLSAgICAvLyBVcGRhdGUgdGhlIGJ1aWxkZXIgc3RhdGUuCiAgICAgbV9idWZmZXIgPSBXVEZN
b3ZlKGJ1ZmZlcik7Ci0gICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV9idWZm
ZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBtX3N0cmluZyA9IHsgfTsKIH0K
IAotdGVtcGxhdGU8Pgotdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPExDaGFy
Pih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJl
ZENhcGFjaXR5KQogewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkg
dGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhlcndpc2UgZmFs
bCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIgbWV0aG9kLgotICAgIG1fc3RyaW5nID0gU3Ry
aW5nKCk7Ci0gICAgCi0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICBBU1NFUlQobV9idWZmZXIt
PmlzOEJpdCgpKTsKLSAgICAKLSAgICBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAg
ICAgIGF1dG8gZXhwZWN0ZWRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZSht
X2J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0
ZXJzOCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBsKSkKLSAgICAg
ICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUo
ZXhwZWN0ZWRTdHJpbmdJbXBsLnZhbHVlKCkpOwotICAgIH0gZWxzZQotICAgICAgICBhbGxvY2F0
ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOwotICAgIEFT
U0VSVChoYXNPdmVyZmxvd2VkKCkgfHwgbV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVu
Z3RoKTsKKyAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3Ry
aW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQuCisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAg
IG1fc3RyaW5nID0geyB9OyAvLyBDbGVhciB0aGUgc3RyaW5nIHRvIHJlbW92ZSB0aGUgcmVmZXJl
bmNlIHRvIG1fYnVmZmVyIGlmIGFueSBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVyZW5jZSBjb3Vu
dCBvZiBtX2J1ZmZlci4KKyAgICAgICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgeworICAg
ICAgICAgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyQ2hhcmFjdGVyczsKKyAgICAgICAgICAgIGF1
dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlTm9u
TnVsbCgpLCByZXF1aXJlZENhcGFjaXR5LCBidWZmZXJDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghYnVmZmVyKSkgeworICAgICAgICAgICAgICAgIGRpZE92ZXJmbG93KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9i
dWZmZXIgPSBXVEZNb3ZlKCpidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgYWxsb2NhdGVCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oY2hhcmFjdGVyczxD
aGFyYWN0ZXJUeXBlPigpLCByZXF1aXJlZENhcGFjaXR5KTsKIH0KIAotdGVtcGxhdGU8Pgotdm9p
ZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPFVDaGFyPih1bnNpZ25lZCByZXF1aXJl
ZExlbmd0aCkKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCBy
ZXF1aXJlZENhcGFjaXR5KQogewotICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkgb25lIHJl
ZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdCwKLSAgICAvLyBvdGhlcndp
c2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIgbWV0aG9kLgotICAgIG1fc3RyaW5n
ID0gU3RyaW5nKCk7Ci0gICAgCi0gICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAgICAg
YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVk
TGVuZ3RoKTsKLSAgICBlbHNlIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAg
YXV0byBleHBlY3RlZFN0cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlSZWFsbG9jYXRlKG1fYnVm
ZmVyLnJlbGVhc2VOb25OdWxsKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMx
Nik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghZXhwZWN0ZWRTdHJpbmdJbXBsKSkKLSAgICAgICAg
ICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotICAgICAgICBtX2J1ZmZlciA9IFdURk1vdmUoZXhw
ZWN0ZWRTdHJpbmdJbXBsLnZhbHVlKCkpOwotICAgIH0gZWxzZQotICAgICAgICBhbGxvY2F0ZUJ1
ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBBU1NF
UlQoaGFzT3ZlcmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0
aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihy
ZXF1aXJlZENhcGFjaXR5KTsKKyAgICBlbHNlCisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNo
YXI+KHJlcXVpcmVkQ2FwYWNpdHkpOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVD
YXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSkKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG5ld0NhcGFjaXR5IDw9IFN0cmluZzo6TWF4
TGVuZ3RoKTsKKwogICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
bHJlYWR5IGEgYnVmZmVyLCB0aGVuIGdyb3cgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAobmV3
Q2FwYWNpdHkgPiBtX2J1ZmZlci0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2J1ZmZl
ci0+aXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obmV3
Q2FwYWNpdHkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVC
dWZmZXI8VUNoYXI+KG5ld0NhcGFjaXR5KTsKLSAgICAgICAgfQorICAgICAgICBpZiAobmV3Q2Fw
YWNpdHkgPiBtX2J1ZmZlci0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVy
KG5ld0NhcGFjaXR5KTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBHcm93IHRoZSBzdHJpbmcs
IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IGxlbmd0aCkgewotICAgICAgICAgICAg
aWYgKCFsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBMQ2hhciogbnVsbFBsYWNlaG9sZGVyID0g
bnVsbHB0cjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihudWxsUGxhY2Vob2xkZXIs
IG5ld0NhcGFjaXR5KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdHJpbmcuaXM4Qml0KCkp
Ci0gICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVyczgoKSwg
bmV3Q2FwYWNpdHkpOworICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBtX2xlbmd0aCkgeworICAg
ICAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxM
Q2hhcj4oc3RhdGljX2Nhc3Q8TENoYXIqPihudWxscHRyKSwgbmV3Q2FwYWNpdHkpOworICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICAgICAgYWxsb2Nh
dGVCdWZmZXI8TENoYXI+KG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOworICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVm
ZmVyPFVDaGFyPihtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkgfHwgIW5ld0NhcGFjaXR5IHx8
IG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBuZXdDYXBhY2l0eSk7CiB9CiAKLS8vIE1ha2UgJ2FkZGl0
aW9uYWxMZW5ndGgnIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVy
LCB1cGRhdGUgbV9zdHJpbmcgJiBtX2xlbmd0aCwKLS8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhl
IG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlLgotLy8gUmV0dXJucyBudWxscHRyIGlmIHRoZSBzaXpl
IG9mIHRoZSBuZXcgYnVpbGRlciB3b3VsZCBoYXZlIG92ZXJmbG93ZWQKLXRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVp
bGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nKHVuc2lnbmVkIGFkZGl0aW9uYWxMZW5ndGgp
CisvLyBNYWtlICdhZGRpdGlvbmFsTGVuZ3RoJyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWls
YWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3RyaW5nICYgbV9sZW5ndGggdG8gdXNlLAorLy8g
dGhhdCBjYXBhY2l0eSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVk
IHN0b3JhZ2Ugc28gdGhlIGNhbGxlciBjYW4gd3JpdGUgY2hhcmFjdGVycyB0aGVyZS4KKy8vIFJl
dHVybnMgbnVsbHB0ciBpZiBhbGxvY2F0aW9uIGZhaWxzLCBsZW5ndGggb3ZlcmZsb3dzLCBvciBp
ZiB0b3RhbCBjYXBhY2l0eSBpcyAwIHNvIG5vIGJ1ZmZlciBpcyBuZWVkZWQuCisvLyBUaGUgY2Fs
bGVyIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNoZWNraW5nIHRoYXQgQ2hhcmFjdGVyVHlw
ZSBpcyB0aGUgdHlwZSBvZiB0aGUgZXhpc3RpbmcgYnVmZmVyLgordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVy
Rm9yQXBwZW5kaW5nKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIEFTU0VSVChhZGRp
dGlvbmFsTGVuZ3RoKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGJ1
aWxkZXIgYWZ0ZXIgYXBwZW5kaW5nLgotICAgIENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCA9
IG1fbGVuZ3RoICsgYWRkaXRpb25hbExlbmd0aDsKLSAgICBpZiAocmVxdWlyZWRMZW5ndGguaGFz
T3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmIChtX2J1ZmZlciAmJiByZXF1aXJlZExlbmd0aCA8PSBtX2J1ZmZlci0+
bGVuZ3RoKCkpIHsKKyAgICAgICAgbV9zdHJpbmcgPSB7IH07CisgICAgICAgIHJldHVybiBjb25z
dF9jYXN0PENoYXJhY3RlclR5cGUqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBl
PigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2s8
Q2hhcmFjdGVyVHlwZT4ocmVxdWlyZWRMZW5ndGgpOworICAgIHJldHVybiBleHRlbmRCdWZmZXJG
b3JBcHBlbmRpbmdTbG93Q2FzZTxDaGFyYWN0ZXJUeXBlPihyZXF1aXJlZExlbmd0aCk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVy
VHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJm
bG93Q2hlY2soQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKQorLy8gU2hhcmVkIGJ5IHRoZSBv
dGhlciBleHRlbmRCdWZmZXIgZnVuY3Rpb25zLgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5k
aW5nU2xvd0Nhc2UodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFyZXF1
aXJlZExlbmd0aC5oYXNPdmVyZmxvd2VkKCkpOwotCi0gICAgaWYgKG1fYnVmZmVyICYmIChyZXF1
aXJlZExlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkgPD0gbV9idWZmZXItPmxlbmd0aCgpKSkg
ewotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3Qg
YXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICBBU1NFUlQo
bV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgbV9sZW5ndGggPSByZXF1aXJlZExl
bmd0aDsKLSAgICAgICAgcmV0dXJuIGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4o
KSArIGN1cnJlbnRMZW5ndGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZ1Nsb3dDYXNlPENoYXJhY3RlclR5cGU+KHJlcXVpcmVkTGVuZ3RoLnVuc2FmZUdldCgp
KTsKKyAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAgaWYgKCFyZXF1aXJlZExlbmd0
aCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmVhbGxvY2F0ZUJ1ZmZlcihleHBhbmRl
ZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7CisgICAgaWYgKFVOTElLRUxZ
KGhhc092ZXJmbG93ZWQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBj
b25zdF9jYXN0PENoYXJhY3RlclR5cGUqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxDaGFyYWN0ZXJU
eXBlPigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJlcXVpcmVkTGVuZ3RoKTsKIH0KIAot
TENoYXIqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgoQ2hlY2tlZElu
dDMyIHJlcXVpcmVkTGVuZ3RoKQorLy8gQWx0ZXJhdGl2ZSBleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmcgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIGhlYWRlciB3aXRob3V0IGlubGluaW5nLgor
TENoYXIqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ0xDaGFyKHVuc2ln
bmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIGlmIChVTkxJS0VMWShyZXF1aXJlZExlbmd0aC5o
YXNPdmVyZmxvd2VkKCkpKSB7Ci0gICAgICAgIGRpZE92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0
aG91dE92ZXJmbG93Q2hlY2s8TENoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKKyAgICByZXR1cm4gZXh0
ZW5kQnVmZmVyRm9yQXBwZW5kaW5nPExDaGFyPihyZXF1aXJlZExlbmd0aCk7CiB9CiAKLVVDaGFy
KiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihDaGVja2VkSW50MzIg
cmVxdWlyZWRMZW5ndGgpCitVQ2hhciogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBw
ZW5kaW5nV2l0aFVwY29udmVydCh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKLSAgICBpZiAo
VU5MSUtFTFkocmVxdWlyZWRMZW5ndGguaGFzT3ZlcmZsb3dlZCgpKSkgewotICAgICAgICBkaWRP
dmVyZmxvdygpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1faXM4
Qml0KSB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOwotICAgICAgICBpZiAobV9i
dWZmZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5n
dGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgICAgIGNoYXJhY3RlcnMgPSBtX2J1
ZmZlci0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwot
ICAgICAgICAgICAgY2hhcmFjdGVycyA9IG1fc3RyaW5nLmlzTnVsbCgpID8gbnVsbHB0ciA6IG1f
c3RyaW5nLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYWxsb2NhdGVCdWZmZXJV
cENvbnZlcnQoY2hhcmFjdGVycywgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJl
ZExlbmd0aC51bnNhZmVHZXQoKSkpOworICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBhbGxv
Y2F0ZUJ1ZmZlcjxVQ2hhcj4oY2hhcmFjdGVyczxMQ2hhcj4oKSwgZXhwYW5kZWRDYXBhY2l0eShj
YXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoaGFzT3Zl
cmZsb3dlZCgpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgbV9sZW5ndGggPSBy
ZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFj
dGVyczE2ICsgb2xkTGVuZ3RoOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxVQ2hhcio+KG1f
YnVmZmVyLT5jaGFyYWN0ZXJzPFVDaGFyPigpKSArIHN0ZDo6ZXhjaGFuZ2UobV9sZW5ndGgsIHJl
cXVpcmVkTGVuZ3RoKTsKICAgICB9Ci0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGlu
Z1dpdGhvdXRPdmVyZmxvd0NoZWNrPFVDaGFyPihyZXF1aXJlZExlbmd0aCk7Ci19Ci0KLS8vIE1h
a2UgJ3JlcXVpcmVkTGVuZ3RoJyBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVw
ZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoLAotLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3
bHkgYWxsb2NhdGVkIHN0b3JhZ2UuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBD
aGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93
Q2FzZSh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93
ZWQoKSk7Ci0gICAgQVNTRVJUKHJlcXVpcmVkTGVuZ3RoKTsKLQotICAgIGlmIChtX2J1ZmZlcikg
ewotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3Qg
YXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICBBU1NFUlQo
bV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0g
ICAgICAgIAotICAgICAgICByZWFsbG9jYXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGV4cGFuZGVk
Q2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2ln
bmVkPigpKTsKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9sZW5ndGggPyBtX3N0cmluZy5jaGFy
YWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgOiBudWxscHRyLCBleHBhbmRlZENhcGFjaXR5KGNhcGFj
aXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7Ci0gICAgfQotICAgIGlmIChVTkxJS0VMWShoYXNPdmVy
Zmxvd2VkKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoYXJhY3RlclR5cGUq
IHJlc3VsdCA9IGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIG1fbGVuZ3Ro
LnVuc2FmZUdldCgpOwotICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgQVNTRVJU
KCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9s
ZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8VUNoYXI+KHJlcXVpcmVkTGVuZ3RoKTsKIH0K
IAogdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGggfHwgaGFzT3ZlcmZs
b3dlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2hhcmFjdGVycyk7Ci0KLSAg
ICBpZiAobV9pczhCaXQgJiYgbGVuZ3RoID09IDEgJiYgaXNMYXRpbjEoY2hhcmFjdGVyc1swXSkp
IHsKKyAgICBpZiAobGVuZ3RoID09IDEgJiYgaXNMYXRpbjEoY2hhcmFjdGVyc1swXSkgJiYgaXM4
Qml0KCkpIHsKICAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXJzWzBd
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG9w
dGltaXplIG1lbW9yeSBieSBrZWVwaW5nIHRoZSBzdHJpbmcgOC1iaXQgd2hlbiBhbGwgdGhlIGNo
YXJhY3RlcnMgYXJlIExhdGluLTE/Ci0KLSAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmcxNihtX2xlbmd0aCArIGxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZ
KCFkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybjsKLSAgICBzdGQ6Om1lbWNweShkZXN0aW5h
dGlvbiwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVD
aGFyKSk7Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBpZiAo
YXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZlcnQo
c2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xlbmd0aCwgbGVuZ3RoKSkpCisgICAgICAgIFN0cmlu
Z0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwog
fQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCB8fCBoYXNPdmVy
Zmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKLQot
ICAgIGlmIChtX2lzOEJpdCkgewotICAgICAgICBMQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmc8TENoYXI+KGxlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRp
b24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZW5ndGggPiA4KQotICAgICAgICAgICAg
c3RkOjptZW1jcHkoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gRklYTUU6IEhvdyBzdHJvbmcgaXMgb3VyIGV2aWRlbmNlIHRo
YXQgdGhpcyBpcyBmYXN0ZXIgdGhhbiBtZW1jcHk/IFdoYXQgcGxhdGZvcm1zIGlzIHRoaXMgdHJ1
ZSBmb3I/Ci0gICAgICAgICAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0
aDsKLSAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbisrID0gKmNoYXJhY3RlcnMrKzsKLSAgICAgICAgfQorICAgIGlmIChpczhC
aXQoKSkgeworICAgICAgICBpZiAoYXV0byBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZzxMQ2hhcj4oc2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xlbmd0aCwgbGVuZ3RoKSkp
CisgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKICAgICB9IGVsc2UgewotICAgICAgICBVQ2hhciogZGVzdGluYXRp
b24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8VUNoYXI+KGxlbmd0aCk7Ci0gICAgICAgIGlm
ICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVyZmxvd2VkKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IExDaGFyKiBlbmQg
PSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkK
LSAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gKmNoYXJhY3RlcnMrKzsKLSAgICB9Ci19Ci0K
LSNpZiBVU0UoQ0YpCi0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKENGU3RyaW5nUmVmIHN0
cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGg6IGF2b2lkIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFy
eSBTdHJpbmcgd2hlbiBwb3NzaWJsZS4KLSAgICBpZiAoYXV0byogY2hhcmFjdGVycyA9IENGU3Ry
aW5nR2V0Q1N0cmluZ1B0cihzdHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkgewot
ICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihj
aGFyYWN0ZXJzKSwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKGF1dG8gZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8
VUNoYXI+KHNhdHVyYXRlZFN1bTx1aW50MzJfdD4obV9sZW5ndGgsIGxlbmd0aCkpKQorICAgICAg
ICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMs
IGxlbmd0aCk7CiAgICAgfQotICAgIGFwcGVuZChTdHJpbmcoc3RyaW5nKSk7CiB9CiAKLSNlbmRp
ZgotCi1ib29sIFN0cmluZ0J1aWxkZXI6OmNhblNocmluaygpIGNvbnN0Citib29sIFN0cmluZ0J1
aWxkZXI6OnNob3VsZFNocmlua1RvRml0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gT25seSBzaHJpbmsgdGhlIGJ1ZmZl
ciBpZiBpdCdzIGxlc3MgdGhhbiA4MCUgZnVsbC4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHR1
bmUgdGhpcyBoZXVyaXN0aWMgYmFzZWQgc29tZSBhY3R1YWwgdGVzdCBjYXNlIG1lYXN1cmVtZW50
cy4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQoKTsKLSAgICByZXR1
cm4gbV9idWZmZXIgJiYgbV9idWZmZXItPmxlbmd0aCgpID4gKGxlbmd0aCArIChsZW5ndGggPj4g
MikpOworICAgIC8vIFNocmluayB0aGUgYnVmZmVyIGlmIGl0J3MgODAlIGZ1bGwgb3IgbGVzcy4K
KyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RyaW5nOjpNYXhMZW5ndGgp
ICsgKFN0cmluZzo6TWF4TGVuZ3RoID4+IDIpIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7CisgICAgcmV0dXJuICFoYXNPdmVyZmxv
d2VkKCkgJiYgbV9idWZmZXIgJiYgbV9idWZmZXItPmxlbmd0aCgpID4gbV9sZW5ndGggKyAobV9s
ZW5ndGggPj4gMik7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQogewot
ICAgIGlmIChjYW5TaHJpbmsoKSkgewotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAgICAg
ICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihtX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fbGVuZ3RoLnVuc2Fm
ZUdldCgpKTsKLSAgICAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBtX3N0
cmluZyA9IFdURk1vdmUobV9idWZmZXIpOworICAgIGlmIChzaG91bGRTaHJpbmtUb0ZpdCgpKSB7
CisgICAgICAgIHJlYWxsb2NhdGVCdWZmZXIobV9sZW5ndGgpOworICAgICAgICBtX3N0cmluZyA9
IHN0ZDo6ZXhjaGFuZ2UobV9idWZmZXIsIG51bGxwdHIpOwogICAgIH0KIH0KIAogYm9vbCBTdHJp
bmdCdWlsZGVyOjppc0FsbEFTQ0lJKCkgY29uc3QKIHsKLSAgICBhdXRvIGxlbmd0aCA9IHRoaXMt
Pmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAobV9pczhCaXQpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hhcmFj
dGVyczgoKSwgbGVuZ3RoKTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgpOworICAgIHJldHVybiBTdHJpbmdWaWV3IHsgKnRoaXMgfS5pc0Fs
bEFTQ0lJKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaAppbmRleCA3MDE4YTFhYjdiZGJkNzRlNmNiN2FmY2QzNTQ0ZWFlYjkzOTBiZTVlLi41
NGYyYjI0MjU5YzU4MGZmMzE0NWU4ZTdiZmYzYzg4YzYyZjk5N2EyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI2LDQxNCArMjYsMzE1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaD4KKyNpbmNsdWRl
IDx3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIFN0
cmluZ0J1aWxkZXIgY3VycmVudGx5IHVzZXMgYSBDaGVja2VkPGludDMyX3QsIENvbmRpdGlvbmFs
Q3Jhc2hPbk92ZXJmbG93PiBmb3IgbV9sZW5ndGguCi0vLyBJZGVhbGx5LCB3ZSB3b3VsZCB3YW50
IHRvIG1ha2UgU3RyaW5nQnVpbGRlciBhIHRlbXBsYXRlIHdpdGggYW4gT3ZlcmZsb3dIYW5kbGVy
IHBhcmFtZXRlciwgYW5kCi0vLyBtX2xlbmd0aCBjYW4gYmUgaW5zdGFudGlhdGVkIGJhc2VkIG9u
IHRoYXQgT3ZlcmZsb3dIYW5kbGVyIGluc3RlYWQuIEhvd2V2ZXIsIGN1cnJlbnRseSwgd2UncmUK
LS8vIG5vdCBhYmxlIHRvIGdldCBjbGFuZyB0byBleHBvcnQgZXhwbGljaXRseSBpbnN0YW50aWF0
ZWQgdGVtcGxhdGUgbWV0aG9kcyAod2hpY2ggd291bGQgYmUgbmVlZGVkCi0vLyBpZiB3ZSB0ZW1w
bGF0aXplIFN0cmluZ0J1aWxkZXIpLiBBcyBhIHdvcmthcm91bmQsIHdlIHVzZSB0aGUgQ29uZGl0
aW9uYWxDcmFzaE9uT3ZlcmZsb3cgaGFuZGxlcgotLy8gaW5zdGVhZCB0byBkbyBhIHJ1bnRpbWUg
Y2hlY2sgb24gd2hldGhlciBpdCBzaG91bGQgY3Jhc2ggb24gb3ZlcmZsb3dzIG9yIG5vdC4KLS8v
Ci0vLyBXaGVuIGNsYW5nIGlzIGFibGUgdG8gZXhwb3J0IGV4cGxpY2l0bHkgaW5zdGFudGlhdGVk
IHRlbXBsYXRlIG1ldGhvZHMsIHdlIGNhbiB0ZW1wbGF0aXplCi0vLyBTdHJpbmdCdWlsZGVyIGFu
ZCBkbyBhd2F5IHdpdGggQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3cuCi0vLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTA1MC4KLQogY2xhc3MgU3RyaW5n
QnVpbGRlciB7Ci0gICAgLy8gRGlzYWxsb3cgY29weWluZyBzaW5jZSBpdCdzIGV4cGVuc2l2ZSBh
bmQgd2UgZG9uJ3Qgd2FudCBjb2RlIHRvIGRvIGl0IGJ5IGFjY2lkZW50LgorICAgIC8vIERpc2Fs
bG93IGNvcHlpbmcgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBzaGFyZSBtX2J1ZmZlciBiZXR3ZWVu
IHR3byBidWlsZGVycy4KICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdCdWlsZGVyKTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIGVudW0gY2xhc3Mg
T3ZlcmZsb3dIYW5kbGVyIHsKLSAgICAgICAgQ3Jhc2hPbk92ZXJmbG93LAotICAgICAgICBSZWNv
cmRPdmVyZmxvdwotICAgIH07Ci0KLSAgICBTdHJpbmdCdWlsZGVyKE92ZXJmbG93SGFuZGxlciBo
YW5kbGVyID0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3ZlcmZsb3cpCi0gICAgICAgIDogbV9i
dWZmZXJDaGFyYWN0ZXJzOChudWxscHRyKQotICAgIHsKLSAgICAgICAgbV9sZW5ndGguc2V0U2hv
dWxkQ3Jhc2hPbk92ZXJmbG93KGhhbmRsZXIgPT0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9uT3Zl
cmZsb3cpOwotICAgIH0KKyAgICBTdHJpbmdCdWlsZGVyKCkgPSBkZWZhdWx0OwogICAgIFN0cmlu
Z0J1aWxkZXIoU3RyaW5nQnVpbGRlciYmKSA9IGRlZmF1bHQ7CiAgICAgU3RyaW5nQnVpbGRlciYg
b3BlcmF0b3I9KFN0cmluZ0J1aWxkZXImJikgPSBkZWZhdWx0OwogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIGRpZE92ZXJmbG93KCkgeyBtX2xlbmd0aC5vdmVyZmxvd2VkKCk7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoLmhh
c092ZXJmbG93ZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjcmFzaGVzT25PdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoLnNob3VsZENyYXNoT25PdmVyZmxvdygpOyB9Cisg
ICAgZW51bSBjbGFzcyBPdmVyZmxvd0hhbmRsZXIgeyBDcmFzaE9uT3ZlcmZsb3csIFJlY29yZE92
ZXJmbG93IH07IC8vIEZJWE1FOiBEZXNwaXRlIGl0cyB1c2UgaW4gQ2hlY2tlZDw+LCAiaGFuZGxl
ciIgZG9lcyBub3Qgc2VlbSB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGlzLgorICAgIGV4cGxpY2l0
IFN0cmluZ0J1aWxkZXIoT3ZlcmZsb3dIYW5kbGVyKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKyAg
ICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYpOworCisgICAgdm9pZCBkaWRPdmVyZmxvdygpOwor
ICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoID4gU3RyaW5n
OjpNYXhMZW5ndGg7IH0KKyAgICBib29sIGNyYXNoZXNPbk92ZXJmbG93KCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3c7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kQ2hhcmFjdGVycyhjb25zdCBMQ2hhciosIHVuc2lnbmVk
KTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKSB7IGFwcGVuZENoYXJhY3RlcnMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YXBwZW5kQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
IHsgYXBwZW5kQ2hhcmFjdGVycyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFj
dGVycyksIGxlbmd0aCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4g
dm9pZCBhcHBlbmQoU3RyaW5nVHlwZXMuLi4pOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQXRv
bVN0cmluZyYgYXRvbVN0cmluZykKLSAgICB7Ci0gICAgICAgIGFwcGVuZChhdG9tU3RyaW5nLnN0
cmluZygpKTsKLSAgICB9CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBrZWVwIHRoZXNlIG92ZXJs
b2FkcyBvbmx5IGlmIG9wdGltaXphdGlvbnMgbWFrZSB0aGVtIG1vcmUgZWZmaWNpZW50IHRoYW4g
dGhlIHNpbmdsZS1hcmd1bWVudCBmb3JtIG9mIHRoZSB2YXJpYWRpYyBhcHBlbmQgYWJvdmUuCisg
ICAgdm9pZCBhcHBlbmQoY29uc3QgQXRvbVN0cmluZyYgc3RyaW5nKSB7IGFwcGVuZChzdHJpbmcu
c3RyaW5nKCkpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBh
cHBlbmQoU3RyaW5nVmlldyk7CisgICAgdm9pZCBhcHBlbmQoVUNoYXIpOworICAgIHZvaWQgYXBw
ZW5kKExDaGFyKTsKKyAgICB2b2lkIGFwcGVuZChjaGFyIGNoYXJhY3RlcikgeyBhcHBlbmQoc3Rh
dGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcikpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hh
ciopOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAg
ICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIEZJ
WE1FOiBBZGQgYSBTdHJpbmdUeXBlQWRhcHRlciBzbyB3ZSBjYW4gYXBwZW5kIG9uZSBzdHJpbmcg
YnVpbGRlciB0byBhbm90aGVyIHdpdGggdmFyaWFkaWMgYXBwZW5kLgorICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFN0cmluZ0J1aWxkZXImKTsKIAotICAgICAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3Vu
dD4gdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJD
b3VudF0pIHsgYXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEp
OyB9CiAKLSAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywg
YW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBj
YWxsZWQpCi0gICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KLSAgICAgICAg
aWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gc3Ry
aW5nOwotICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgICAg
ICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVu
ZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnMx
NigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0
cmluZ0J1aWxkZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOworICAgIHZvaWQgYXBwZW5kQ2hhcmFj
dGVyKFVDaGFyKSA9IGRlbGV0ZTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihMQ2hhcikgPSBk
ZWxldGU7CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoY2hhcikgPSBkZWxldGU7CisgICAgdm9p
ZCBhcHBlbmRDaGFyYWN0ZXIoVUNoYXIzMik7CiAKLSAgICAgICAgaWYgKCFvdGhlci5tX2xlbmd0
aCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB2b2lkIGFwcGVuZFN1YnN0cmluZyhjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCA9IFN0cmluZzo6TWF4TGVu
Z3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5n
KGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBl
bXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBo
YXMgbm90IGJlZW4gY2FsbGVkKQotICAgICAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJp
bmcuCi0gICAgICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyICYmICFvdGhlci5tX3N0cmlu
Zy5pc051bGwoKSkgewotICAgICAgICAgICAgbV9zdHJpbmcgPSBvdGhlci5tX3N0cmluZzsKLSAg
ICAgICAgICAgIG1fbGVuZ3RoID0gb3RoZXIubV9sZW5ndGg7Ci0gICAgICAgICAgICBtX2lzOEJp
dCA9IG90aGVyLm1faXM4Qml0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
Ly8gRklYTUU6IFVuY2xlYXIgd2h5IHRvU3RyaW5nIHJldHVybnMgU3RyaW5nIGFuZCB0b1N0cmlu
Z1ByZXNlcnZlQ2FwYWNpdHkgcmV0dXJucyBjb25zdCBTdHJpbmcmLiBNYWtlIHRoZW0gY29uc2lz
dGVudC4KKyAgICBTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpIGNvbnN0OworICAgIEF0b21TdHJpbmcgdG9BdG9tU3RyaW5nKCkg
Y29uc3Q7CiAKLSAgICAgICAgaWYgKG90aGVyLmlzOEJpdCgpKQotICAgICAgICAgICAgYXBwZW5k
Q2hhcmFjdGVycyhvdGhlci5jaGFyYWN0ZXJzOCgpLCBvdGhlci5tX2xlbmd0aC51bnNhZmVHZXQo
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMob3RoZXIuY2hh
cmFjdGVyczE2KCksIG90aGVyLm1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKLSAgICB9CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fbGVuZ3RoOyB9CisgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcpCi0g
ICAgewotICAgICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVu
ZENoYXJhY3RlcnMoc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdWaWV3Lmxlbmd0aCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmdWaWV3
LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpKTsKLSAgICB9CisgICAgb3BlcmF0
b3IgU3RyaW5nVmlldygpIGNvbnN0OworICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3Q7CiAKLSNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5k
KENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmIFVTRShDRikgJiYgZGVmaW5lZChfX09CSkNfXykK
LSAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFwcGVuZCgoX19icmlkZ2UgQ0ZT
dHJpbmdSZWYpc3RyaW5nKTsgfQotI2VuZGlmCisgICAgYm9vbCBpczhCaXQoKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3Qg
eyByZXR1cm4gY2hhcmFjdGVyczxMQ2hhcj4oKTsgfQorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzMTYoKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzPFVDaGFyPigpOyB9CiAgICAgCi0gICAg
dm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoID0gU3RyaW5nOjpNYXhMZW5ndGgpCi0gICAgewotICAgICAgICBp
ZiAob2Zmc2V0ID49IHN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICB1
bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJl
c2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CiAKLSAgICAgICAgdW5zaWduZWQg
Y2xhbXBlZExlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgc3RyaW5nLmxlbmd0aCgpIC0gb2Zmc2V0
KTsKLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVuZENoYXJh
Y3RlcnMoc3RyaW5nLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQsIGNsYW1wZWRMZW5ndGgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJz
MTYoKSArIG9mZnNldCwgY2xhbXBlZExlbmd0aCk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHNocmluayh1bnNpZ25lZCBuZXdMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIHNob3VsZFNocmlua1RvRml0KCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2hyaW5rVG9GaXQoKTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGNo
YXJhY3RlcnMpCi0gICAgewotICAgICAgICBpZiAoY2hhcmFjdGVycykKLSAgICAgICAgICAgIGFw
cGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgc3RybGVuKGNoYXJhY3RlcnMpKTsKLSAgICB9Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBlbmRDaGFyYWN0ZXIoVUNoYXIpID0gZGVsZXRlOwotICAgIHZvaWQgYXBwZW5kKFVDaGFy
IGMpCi0gICAgewotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWdu
ZWQ+KCk7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBsZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3Ro
KCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmICghbV9pczhCaXQpIHsK
LSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltsZW5ndGhdID0gYzsKLSAgICAg
ICAgICAgICAgICBtX2xlbmd0aCsrOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzTGF0aW4xKGMpKSB7Ci0gICAgICAgICAgICAgICAg
bV9idWZmZXJDaGFyYWN0ZXJzOFtsZW5ndGhdID0gc3RhdGljX2Nhc3Q8TENoYXI+KGMpOwotICAg
ICAgICAgICAgICAgIG1fbGVuZ3RoKys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFwcGVuZENoYXJhY3RlcnMoJmMsIDEpOwotICAg
IH0KK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5
cGUsIHR5cGVuYW1lIEN1cnJlbnRDaGFyYWN0ZXJUeXBlPiB2b2lkIGFsbG9jYXRlQnVmZmVyKGNv
bnN0IEN1cnJlbnRDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVx
dWlyZWRDYXBhY2l0eSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9p
ZCByZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpOworICAgIHZvaWQg
cmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKIAotICAgIHZvaWQg
YXBwZW5kQ2hhcmFjdGVyKExDaGFyKSA9IGRlbGV0ZTsKLSAgICB2b2lkIGFwcGVuZChMQ2hhciBj
KQotICAgIHsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVk
PigpOwotICAgICAgICBpZiAobV9idWZmZXIgJiYgbGVuZ3RoIDwgbV9idWZmZXItPmxlbmd0aCgp
ICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9pczhCaXQpCi0gICAg
ICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzOFtsZW5ndGhdID0gYzsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltsZW5ndGhdID0gYzsK
LSAgICAgICAgICAgIG1fbGVuZ3RoKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXBw
ZW5kQ2hhcmFjdGVycygmYywgMSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IENoYXJhY3RlclR5cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25l
ZCByZXF1aXJlZExlbmd0aCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Q2hhcmFjdGVyVHlwZSogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBMQ2hhciogZXh0ZW5kQnVm
ZmVyRm9yQXBwZW5kaW5nTENoYXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBVQ2hhciogZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVy
dCh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3Rlcihj
aGFyKSA9IGRlbGV0ZTsKLSAgICB2b2lkIGFwcGVuZChjaGFyIGMpCi0gICAgewotICAgICAgICBh
cHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGMpKTsKLSAgICB9CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgcmVpZnlTdHJpbmcoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kQ2hhcmFjdGVy
KFVDaGFyMzIgYykKLSAgICB7Ci0gICAgICAgIGlmIChVX0lTX0JNUChjKSkgewotICAgICAgICAg
ICAgYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYXBwZW5kKFUxNl9MRUFEKGMpKTsKLSAgICAgICAgYXBwZW5kKFUx
Nl9UUkFJTChjKSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVB
ZGFwdGVycz4gdm9pZCBhcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0ZXJzLi4uKTsK
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29u
c3QgU3RyaW5nJik7CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmc7CisgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG1fYnVmZmVyOworICAgIHVuc2lnbmVkIG1fbGVuZ3RoIHsgMCB9OworICAgIGJv
b2wgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cgeyB0cnVlIH07Cit9OwogCi0gICAgdGVtcGxhdGU8
dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZExp
dGVyYWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSkgeyBhcHBlbmRD
aGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGNoYXJhY3RlckNvdW50IC0gMSk7IH0KK3RlbXBsYXRlPD4g
c3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmdCdWlsZGVyPjsKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiB2b2lkIGFwcGVuZChTdHJpbmdU
eXBlcy4uLik7CisvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFN0cmluZ1ZpZXcgYW5kIG1ha2UgaXQg
dGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIFN0cmluZ0J1aWxkZXI/Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImLCBj
b25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIFN0cmluZyB0b1N0
cmluZygpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1fYnVmZmVyIHx8IG1faXNSZWlmaWVkKTsKLSAgICAgICAgICAgIEFTU0VS
VCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICAg
ICAgfQorLy8gSW5saW5lIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KIAotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgcmVpZnlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwotICAgIH0KK2lu
bGluZSBTdHJpbmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKE92ZXJmbG93SGFuZGxlciBwb2xpY3kp
CisgICAgOiBtX3Nob3VsZENyYXNoT25PdmVyZmxvdyB7IHBvbGljeSA9PSBPdmVyZmxvd0hhbmRs
ZXI6OkNyYXNoT25PdmVyZmxvdyB9Cit7Cit9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRvU3RyaW5n
UHJlc2VydmVDYXBhY2l0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
aGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgaWYgKG1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmVpZnlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIG1fc3RyaW5nOwotICAgIH0KK2lu
bGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmNsZWFyKCkKK3sKKyAgICBtX3N0cmluZyA9IHsgfTsK
KyAgICBtX2J1ZmZlciA9IG51bGxwdHI7CisgICAgbV9sZW5ndGggPSAwOworICAgIC8vIFdlIGlu
dGVudGlvbmFsbHkgZG8gbm90IGNoYW5nZSBtX3Nob3VsZENyYXNoT25PdmVyZmxvdy4KK30KIAot
ICAgIEF0b21TdHJpbmcgdG9BdG9tU3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBpZiAoIW1fbGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgpOwotCi0gICAgICAgIC8vIElmIHRoZSBidWZmZXIg
aXMgc3VmZmljaWVudGx5IG92ZXItYWxsb2NhdGVkLCBtYWtlIGEgbmV3IEF0b21TdHJpbmcgZnJv
bSBhIGNvcHkgc28gaXRzIGJ1ZmZlciBpcyBub3Qgc28gbGFyZ2UuCi0gICAgICAgIGlmIChjYW5T
aHJpbmsoKSkgewotICAgICAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBBdG9tU3RyaW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBBdG9tU3RyaW5nKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7ICAgICAgICAgICAgCi0g
ICAgICAgIH0KK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OnN3YXAoU3RyaW5nQnVpbGRlciYg
b3RoZXIpCit7CisgICAgbV9zdHJpbmcuc3dhcChvdGhlci5tX3N0cmluZyk7CisgICAgbV9idWZm
ZXIuc3dhcChvdGhlci5tX2J1ZmZlcik7CisgICAgc3RkOjpzd2FwKG1fbGVuZ3RoLCBvdGhlci5t
X2xlbmd0aCk7CisgICAgc3RkOjpzd2FwKG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93LCBvdGhlci5t
X3Nob3VsZENyYXNoT25PdmVyZmxvdyk7Cit9CiAKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKG1fc3RyaW5nKTsKK2lubGluZSBT
dHJpbmdCdWlsZGVyOjpvcGVyYXRvciBTdHJpbmdWaWV3KCkgY29uc3QKK3sKKyAgICBpZiAoaXM4
Qml0KCkpCisgICAgICAgIHJldHVybiB7IGNoYXJhY3RlcnM8TENoYXI+KCksIGxlbmd0aCgpIH07
CisgICAgcmV0dXJuIHsgY2hhcmFjdGVyczxVQ2hhcj4oKSwgbGVuZ3RoKCkgfTsKK30KIAotICAg
ICAgICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhtX2J1ZmZl
ci5nZXQoKSwgMCwgbV9sZW5ndGgudW5zYWZlR2V0KCkpOworaW5saW5lIHZvaWQgU3RyaW5nQnVp
bGRlcjo6YXBwZW5kKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICBpZiAobV9idWZmZXIgJiYgbV9s
ZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAg
ICAgaWYgKCFtX2J1ZmZlci0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VUNo
YXIqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxVQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBjaGFyYWN0
ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTGF0aW4x
KGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8TENoYXIqPihtX2J1ZmZlci0+
Y2hhcmFjdGVyczxMQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hh
cmFjdGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KKyAgICBhcHBl
bmRDaGFyYWN0ZXJzKCZjaGFyYWN0ZXIsIDEpOworfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwot
ICAgICAgICByZXR1cm4gbV9sZW5ndGgudW5zYWZlR2V0KCk7CitpbmxpbmUgdm9pZCBTdHJpbmdC
dWlsZGVyOjphcHBlbmQoTENoYXIgY2hhcmFjdGVyKQoreworICAgIGlmIChtX2J1ZmZlciAmJiBt
X2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgeworICAg
ICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICAgICAgY29uc3RfY2FzdDxMQ2hh
cio+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPExDaGFyPigpKVttX2xlbmd0aCsrXSA9IGNoYXJhY3Rl
cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29uc3RfY2FzdDxVQ2hhcio+KG1fYnVmZmVy
LT5jaGFyYWN0ZXJzPFVDaGFyPigpKVttX2xlbmd0aCsrXSA9IGNoYXJhY3RlcjsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBhcHBlbmRDaGFyYWN0ZXJzKCZjaGFyYWN0ZXIsIDEpOworfQog
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fbGVuZ3RoOyB9CitpbmxpbmUg
dm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAg
Ly8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5v
dCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBjYWxsZWQpCisgICAgLy8g
dGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgorICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVm
ZmVyKSB7CisgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBtX2xlbmd0aCA9IHN0
cmluZy5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CisgICAg
YXBwZW5kKFN0cmluZ1ZpZXcgeyBzdHJpbmcgfSk7Cit9CiAKLSAgICB1bnNpZ25lZCBjYXBhY2l0
eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgp
KTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0aCgpIDogbV9sZW5n
dGgudW5zYWZlR2V0KCk7CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3Qg
U3RyaW5nQnVpbGRlciYgb3RoZXIpCit7CisgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFu
IGVtcHR5IHN0cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5
IGhhcyBub3QgYmVlbiBjYWxsZWQpCisgICAgLy8gdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5n
LgorICAgIGlmICghbV9sZW5ndGggJiYgIW1fYnVmZmVyICYmICFvdGhlci5tX3N0cmluZy5pc051
bGwoKSkgeworICAgICAgICAvLyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNy
YXNoIG9uIG92ZXJmbG93IHdpdGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgICAg
ICBtX3N0cmluZyA9IG90aGVyLm1fc3RyaW5nOworICAgICAgICBtX2xlbmd0aCA9IG90aGVyLmxl
bmd0aCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcmVzaXplKHVuc2lnbmVkIG5ld1NpemUpOworICAgIGFwcGVuZChTdHJpbmdWaWV3IHsg
b3RoZXIgfSk7Cit9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5TaHJpbmsoKSBj
b25zdDsKK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdWaWV3IHN0cmlu
ZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXJz
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIGVsc2UKKyAgICAg
ICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSk7Cit9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaHJpbmtUb0ZpdCgpOworaW5s
aW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kU3Vic3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBhcHBlbmQoU3Ry
aW5nVmlldyB7IHN0cmluZyB9LnN1YnN0cmluZyhvZmZzZXQsIGxlbmd0aCkpOworfQogCi0gICAg
VUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaGFzT3ZlcmZsb3dlZCgpICYmIGkg
PCBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICBpZiAobV9pczhCaXQp
Ci0gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyczgoKVtpXTsKLSAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcnMxNigpW2ldOwotICAgIH0KK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVu
ZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQoreworICAgIGFwcGVuZChTdHJpbmdWaWV3IHsgY2hh
cmFjdGVycyB9KTsKK30KIAotICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQobV9pczhCaXQpOwotICAgICAgICBpZiAoIW1fbGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAg
QVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgp
OworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVyKFVDaGFyMzIgYykK
K3sKKyAgICBpZiAoVV9JU19CTVAoYykpIHsKKyAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PFVD
aGFyPihjKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgYXBwZW5kKFUxNl9MRUFEKGMp
KTsKKyAgICBhcHBlbmQoVTE2X1RSQUlMKGMpKTsKK30KIAotICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzMTYoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0gICAg
ICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aWYgKCFtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFy
YWN0ZXJzMTYoKTsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5jaGFyYWN0ZXJzMTYoKTsKK2lubGluZSBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9T
dHJpbmcoKQoreworICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkgeworICAgICAgICBzaHJpbmtU
b0ZpdCgpOworICAgICAgICByZWlmeVN0cmluZygpOwogICAgIH0KLSAgICAKLSAgICBib29sIGlz
OEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0OworICAgIHJldHVybiBtX3N0cmluZzsKK30KIAotICAg
IG9wZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdDsKK2lubGluZSBjb25zdCBTdHJpbmcmIFN0cmlu
Z0J1aWxkZXI6OnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
c3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZWlmeVN0cmluZygpOworICAgIHJldHVybiBtX3N0
cmluZzsKK30KIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9sZW5ndGggPSAw
OwotICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgICAgICBtX2J1ZmZlciA9IG51bGxw
dHI7Ci0gICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczggPSBudWxscHRyOwotICAgICAgICBtX2lz
OEJpdCA9IHRydWU7Ci0gICAgfQoraW5saW5lIEF0b21TdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9B
dG9tU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZW1wdHlBdG9tKCk7CiAKLSAgICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
cikKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgc3RyaW5nQnVpbGRlci5tX2xl
bmd0aCk7Ci0gICAgICAgIG1fc3RyaW5nLnN3YXAoc3RyaW5nQnVpbGRlci5tX3N0cmluZyk7Ci0g
ICAgICAgIG1fYnVmZmVyLnN3YXAoc3RyaW5nQnVpbGRlci5tX2J1ZmZlcik7Ci0gICAgICAgIHN0
ZDo6c3dhcChtX2lzOEJpdCwgc3RyaW5nQnVpbGRlci5tX2lzOEJpdCk7Ci0gICAgICAgIHN0ZDo6
c3dhcChtX2J1ZmZlckNoYXJhY3RlcnM4LCBzdHJpbmdCdWlsZGVyLm1fYnVmZmVyQ2hhcmFjdGVy
czgpOwotICAgICAgICBBU1NFUlQoIW1fYnVmZmVyIHx8IGhhc092ZXJmbG93ZWQoKSB8fCBtX2J1
ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICB9
CisgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyBzdWZmaWNpZW50bHkgb3Zlci1hbGxvY2F0ZWQsIG1h
a2UgYSBuZXcgQXRvbVN0cmluZyBmcm9tIGEgY29weSBzbyBpdHMgYnVmZmVyIGlzIG5vdCBzbyBs
YXJnZS4KKyAgICBpZiAoc2hvdWxkU2hyaW5rVG9GaXQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
Z1ZpZXcgeyAqdGhpcyB9LnRvQXRvbVN0cmluZygpOwogCi1wcml2YXRlOgotICAgIHZvaWQgYWxs
b2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1
aXJlZExlbmd0aCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVu
dENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICB2b2lkIGFsbG9jYXRl
QnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZv
aWQgcmVhbGxvY2F0ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBl
eHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcodW5zaWduZWQgYWRkaXRpb25hbExlbmd0aCk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJU
eXBlKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRob3V0T3ZlcmZsb3dDaGVjayhDaGVja2Vk
SW50MzIgcmVxdWlyZWRMZW5ndGgpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IENoYXJhY3RlclR5cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2ln
bmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTENoYXIqIGV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZzgoQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgVUNoYXIqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzE2KENoZWNr
ZWRJbnQzMiByZXF1aXJlZExlbmd0aCk7CisgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIG1fc3RyaW5nOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQUxXQVlTX0lOTElORSBDaGFyYWN0ZXJUeXBlKiBnZXRCdWZmZXJDaGFyYWN0ZXJzKCk7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVpZnlTdHJpbmcoKSBjb25zdDsKKyAgICAv
LyBVc2UgdGhlIGxlbmd0aCBmdW5jdGlvbiBoZXJlIHNvIHdlIGNyYXNoIG9uIG92ZXJmbG93IHdp
dGhvdXQgZXhwbGljaXQgb3ZlcmZsb3cgY2hlY2tzLgorICAgIEFTU0VSVChtX2J1ZmZlcik7Cisg
ICAgcmV0dXJuIHsgbV9idWZmZXIuZ2V0KCksIDAsIGxlbmd0aCgpIH07Cit9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRlcnM+IHZvaWQgYXBwZW5kRnJvbUFkYXB0
ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLik7CitpbmxpbmUgdW5zaWduZWQgU3RyaW5nQnVpbGRl
cjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgp
KTsKKyAgICByZXR1cm4gbV9sZW5ndGg7Cit9CiAKLSAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmlu
ZzsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9idWZmZXI7Ci0gICAgdW5pb24gewotICAgICAg
ICBMQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJzODsKLSAgICAgICAgVUNoYXIqIG1fYnVmZmVyQ2hh
cmFjdGVyczE2OwotICAgIH07Ci0gICAgc3RhdGljX2Fzc2VydChTdHJpbmc6Ok1heExlbmd0aCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIpOwotICAgIENoZWNrZWQ8
aW50MzJfdCwgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3c+IG1fbGVuZ3RoOwotICAgIGJvb2wg
bV9pczhCaXQgeyB0cnVlIH07Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtdXRhYmxlIGJvb2wg
bV9pc1JlaWZpZWQgeyBmYWxzZSB9OwotI2VuZGlmCi19OworaW5saW5lIHVuc2lnbmVkIFN0cmlu
Z0J1aWxkZXI6OmNhcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1
ZmZlci0+bGVuZ3RoKCkgOiBsZW5ndGgoKTsKK30KIAotaW5saW5lIFN0cmluZ0J1aWxkZXI6Om9w
ZXJhdG9yIFN0cmluZ1ZpZXcoKSBjb25zdAoraW5saW5lIFVDaGFyIFN0cmluZ0J1aWxkZXI6Om9w
ZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKIHsKLSAgICBpZiAobV9pczhCaXQpCi0gICAgICAg
IHJldHVybiB7IGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpIH07Ci0gICAgcmV0dXJuIHsgY2hhcmFj
dGVyczE2KCksIGxlbmd0aCgpIH07CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpIDwgbGVuZ3RoKCkpOworICAgIHJldHVybiBpczhCaXQoKSA/IGNoYXJhY3Rl
cnM8TENoYXI+KClbaV0gOiBjaGFyYWN0ZXJzPFVDaGFyPigpW2ldOwogfQogCi10ZW1wbGF0ZTw+
Ci1BTFdBWVNfSU5MSU5FIExDaGFyKiBTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJDaGFyYWN0ZXJz
PExDaGFyPigpCitpbmxpbmUgYm9vbCBTdHJpbmdCdWlsZGVyOjppczhCaXQoKSBjb25zdAogewot
ICAgIEFTU0VSVChtX2lzOEJpdCk7Ci0gICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczg7Cisg
ICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmlzOEJpdCgpIDogbV9zdHJpbmcuaXM4Qml0
KCk7CiB9CiAKLXRlbXBsYXRlPD4KLUFMV0FZU19JTkxJTkUgVUNoYXIqIFN0cmluZ0J1aWxkZXI6
OmdldEJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGlubGluZSBjb25zdCBDaGFyYWN0ZXJUeXBlKiBTdHJpbmdCdWlsZGVyOjpjaGFyYWN0
ZXJzKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1faXM4Qml0KTsKLSAgICByZXR1cm4gbV9idWZm
ZXJDaGFyYWN0ZXJzMTY7CisgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5n
LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKKyAgICByZXR1cm4gbV9idWZmZXItPmNoYXJh
Y3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5n
VHlwZUFkYXB0ZXJzPgotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMoU3Ry
aW5nVHlwZUFkYXB0ZXJzLi4uIGFkYXB0ZXJzKQordGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5n
VHlwZUFkYXB0ZXJzPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZEZyb21BZGFwdGVycyhTdHJp
bmdUeXBlQWRhcHRlcnMuLi4gYWRhcHRlcnMpCiB7Ci0gICAgYXV0byByZXF1aXJlZExlbmd0aCA9
IGNoZWNrZWRTdW08aW50MzJfdD4obV9sZW5ndGgsIGFkYXB0ZXJzLmxlbmd0aCgpLi4uKTsKLSAg
ICBpZiAobV9pczhCaXQgJiYgYXJlOEJpdChhZGFwdGVycy4uLikpIHsKLSAgICAgICAgTENoYXIq
IGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nOChyZXF1aXJlZExlbmd0aCk7
Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNPdmVy
Zmxvd2VkKCkpOworICAgIGF1dG8gcmVxdWlyZWRMZW5ndGggPSBzYXR1cmF0ZWRTdW08dWludDMy
X3Q+KG1fbGVuZ3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7CisgICAgaWYgKGlzOEJpdCgpICYm
IGFyZThCaXQoYWRhcHRlcnMuLi4pKSB7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb24gPSBleHRl
bmRCdWZmZXJGb3JBcHBlbmRpbmdMQ2hhcihyZXF1aXJlZExlbmd0aCk7CisgICAgICAgIGlmICgh
ZGVzdGluYXRpb24pCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgc3Ry
aW5nVHlwZUFkYXB0ZXJBY2N1bXVsYXRvcihkZXN0aW5hdGlvbiwgYWRhcHRlcnMuLi4pOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBkZXN0aW5hdGlvbiA9IGV4dGVuZEJ1ZmZlckZvckFw
cGVuZGluZzE2KHJlcXVpcmVkTGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikgewot
ICAgICAgICAgICAgQVNTRVJUKGhhc092ZXJmbG93ZWQoKSk7CisgICAgICAgIGF1dG8gZGVzdGlu
YXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRoVXBjb252ZXJ0KHJlcXVpcmVkTGVu
Z3RoKTsKKyAgICAgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQogICAgICAgICBzdHJpbmdUeXBlQWRhcHRlckFjY3VtdWxhdG9yKGRlc3RpbmF0aW9u
LCBhZGFwdGVycy4uLik7CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdU
eXBlcz4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKFN0cmluZ1R5cGVzLi4uIHN0cmluZ3Mp
Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4gdm9pZCBTdHJpbmdCdWlsZGVyOjph
cHBlbmQoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKIHsKICAgICBhcHBlbmRGcm9tQWRhcHRlcnMo
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZXM+KHN0cmluZ3MpLi4uKTsKIH0KIAotLy8gRklY
TUU6IE1vdmUgdGhpcyB0byBTdHJpbmdWaWV3IGFuZCBtYWtlIGl0IHRha2UgYSBTdHJpbmdWaWV3
IGluc3RlYWQgb2YgYSBTdHJpbmdCdWlsZGVyPwotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nQnVpbGRlciYgcywgY29uc3QgQ2hhcmFjdGVy
VHlwZSogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IENo
YXJhY3RlclR5cGUqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChzLmxlbmd0
aCgpICE9IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHMuaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBlcXVhbChzLmNoYXJhY3RlcnM4KCksIGJ1ZmZlciwgbGVuZ3Ro
KTsKLQotICAgIHJldHVybiBlcXVhbChzLmNoYXJhY3RlcnMxNigpLCBidWZmZXIsIGxlbmd0aCk7
CisgICAgcmV0dXJuIGJ1aWxkZXIgPT0gU3RyaW5nVmlldyB7IGJ1ZmZlciwgbGVuZ3RoIH07CiB9
CiAKIHRlbXBsYXRlPD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJp
bmdCdWlsZGVyPiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHZvaWQ7CiAgICAgdXNpbmcgQWRk
aXRpb25hbEFyZ3VtZW50VHlwZSA9IFN0cmluZ0J1aWxkZXI7Ci0gICAgc3RhdGljIHZvaWQgZmx1
c2goTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nQnVpbGRlciogc3Ry
aW5nQnVpbGRlcikgeyBzdHJpbmdCdWlsZGVyLT5hcHBlbmRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMs
IGxlbmd0aCk7IH0KKyAgICBzdGF0aWMgdm9pZCBmbHVzaChjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBidWlsZGVyKSB7IGJ1aWxkZXItPmFw
cGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKTsgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXJKU09O
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwCmluZGV4IGMz
MTE4YjYzOTFiZmVmMmI4Y2VmODdkNjZhZjNiZDZiOWI3MWI5MGIuLjgzZWQzOGIxOTgxOTRhMDQ2
OTJlYmUxYTYyOGJlODNmMzczMWFiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlckpTT04uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVp
bGRlckpTT04uY3BwCkBAIC0xMDUsNTIgKzEwNSw1OCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKGhh
c092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZl
IGVub3VnaCBidWZmZXIgc3BhY2UgdG8gYXBwZW5kIHRoaXMgc3RyaW5nIHdpdGhvdXQgaGF2aW5n
Ci0gICAgLy8gdG8gd29ycnkgYWJvdXQgcmVhbGxvY2F0aW5nIGluIHRoZSBtaWRkbGUuCisKKyAg
ICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggYnVmZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlz
IHN0cmluZyBmb3Igd29yc3QgY2FzZSB3aXRob3V0IHJlYWxsb2NhdGluZy4KICAgICAvLyBUaGUg
MiBpcyBmb3IgdGhlICciJyBxdW90ZXMgb24gZWFjaCBlbmQuCi0gICAgLy8gVGhlIDYgaXMgZm9y
IGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIFx1Tk5OTiBlbmNvZGVkLgorICAgIC8vIFRoZSA2
IGlzIHRoZSB3b3JzdCBjYXNlIGZvciBhIHNpbmdsZSBjb2RlIHVuaXQgdGhhdCBjb3VsZCBiZSBl
bmNvZGVkIGFzIFx1Tk5OTi4KICAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
c3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZCA9IGxlbmd0aCgpOwotICAgIG1h
eGltdW1DYXBhY2l0eVJlcXVpcmVkICs9IDIgKyBzdHJpbmdMZW5ndGggKiA2OwotICAgIHVuc2ln
bmVkIGFsbG9jYXRpb25TaXplOwotICAgIGlmIChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09
IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkLnNhZmVHZXQoYWxsb2NhdGlvblNpemUpKQotICAgICAg
ICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKLSAgICAvLyBUaGlzIG1heCgpIGlzIGhlcmUgdG8gYWxs
b3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMgYmV0d2VlbiB0aGUgcmFuZ2UgWzJeMzEsIDJeMzIgLSAy
XSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2VyT2ZUd28oMTw8MzEgKyBzb21lIGludCBzbWFsbGVyIHRo
YW4gMTw8MzEpID09IDAuCi0gICAgLy8gRklYTUU6IHJvdW5kVXBUb1Bvd2VyT2ZUd28gc2hvdWxk
IHRha2UgQ2hlY2tlZDx1bnNpZ25lZD4gYW5kIGFib3J0IGlmIGl0IGZhaWxzIHRvIHJvdW5kIHVw
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYwODYK
LSAgICBhbGxvY2F0aW9uU2l6ZSA9IHN0ZDo6bWF4KGFsbG9jYXRpb25TaXplLCByb3VuZFVwVG9Q
b3dlck9mVHdvKGFsbG9jYXRpb25TaXplKSk7CisgICAgYXV0byBtYXhpbXVtQ2FwYWNpdHlSZXF1
aXJlZCA9IG1fbGVuZ3RoICsgMiArIHN0cmluZ0xlbmd0aCAqIDY7CisgICAgaWYgKG1heGltdW1D
YXBhY2l0eVJlcXVpcmVkLmhhc092ZXJmbG93ZWQoKSkgeworICAgICAgICBkaWRPdmVyZmxvdygp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gQWxsb2NhdGluZyB0aGlzIG11Y2gg
d2lsbCBkZWZpbml0ZWx5IGZhaWwuCi0gICAgaWYgKGFsbG9jYXRpb25TaXplID4gU3RyaW5nOjpN
YXhMZW5ndGgpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOworICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgbWF4aW11bSBsZW5ndGggYmVmb3JlIGNhbGxpbmcgcm91bmRVcFBvd2VyT2ZUd28g
YmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHJldHVybnMgMCBmb3IgdmFsdWVzIGluIHRoZSByYW5nZSBb
Ml4zMSwgMl4zMi0yXS4KKyAgICAvLyBGSVhNRTogSW5zdGVhZCwgcm91bmRVcFRvUG93ZXJPZlR3
byBzaG91bGQgYmUgZml4ZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsIGluIHRob3NlIGNh
c2VzLCBwZXJoYXBzIHVzaW5nIGNoZWNrZWQgb3Igc2F0dXJhdGVkIGFyaXRobWV0aWMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjA4NgorICAgIGF1
dG8gYWxsb2NhdGlvblNpemUgPSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsK
KyAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBTdHJpbmc6Ok1heExlbmd0aCkgeworICAgICAgICBk
aWRPdmVyZmxvdygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFsbG9jYXRpb25TaXpl
ID0gcm91bmRVcFRvUG93ZXJPZlR3byhhbGxvY2F0aW9uU2l6ZSk7CisgICAgaWYgKGFsbG9jYXRp
b25TaXplID4gU3RyaW5nOjpNYXhMZW5ndGgpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIC8vIEZJWE1FOiBDb25zaWRlciBzd2l0Y2hpbmcg
dG8gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nL3NocmluayBpbnN0ZWFkIHRvIHNoYXJlIG1vcmUg
Y29kZSB3aXRoIHRoZSByZXN0IG9mIFN0cmluZ0J1aWxkZXIuCiAgICAgaWYgKGlzOEJpdCgpICYm
ICFzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVm
ZmVyQ2hhcmFjdGVyczgsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXI8
VUNoYXI+KGNoYXJhY3RlcnM8TENoYXI+KCksIGFsbG9jYXRpb25TaXplKTsKICAgICBlbHNlCiAg
ICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxvY2F0aW9uU2l6ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KGhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID49IGFsbG9jYXRpb25TaXplKTsKIAotICAgIGlmIChpczhCaXQoKSkgewotICAg
ICAgICBBU1NFUlQoc3RyaW5nLmlzOEJpdCgpKTsKLSAgICAgICAgTENoYXIqIG91dHB1dCA9IG1f
YnVmZmVyQ2hhcmFjdGVyczggKyBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAg
aWYgKG1fYnVmZmVyLT5pczhCaXQoKSkgeworICAgICAgICBhdXRvIGNoYXJhY3RlcnMgPSBjb25z
dF9jYXN0PExDaGFyKj4obV9idWZmZXItPmNoYXJhY3RlcnM8TENoYXI+KCkpOworICAgICAgICBh
dXRvIG91dHB1dCA9IGNoYXJhY3RlcnMgKyBtX2xlbmd0aDsKICAgICAgICAgKm91dHB1dCsrID0g
JyInOwogICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJp
bmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgKm91dHB1dCsrID0g
JyInOwotICAgICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIG1fYnVmZmVyQ2hhcmFjdGVyczg7Cisg
ICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gY2hhcmFjdGVyczsKICAgICB9IGVsc2UgewotICAg
ICAgICBVQ2hhciogb3V0cHV0ID0gbV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBtX2xlbmd0aC51bnNh
ZmVHZXQ8dW5zaWduZWQ+KCk7CisgICAgICAgIGF1dG8gY2hhcmFjdGVycyA9IGNvbnN0X2Nhc3Q8
VUNoYXIqPihtX2J1ZmZlci0+Y2hhcmFjdGVyczxVQ2hhcj4oKSk7CisgICAgICAgIGF1dG8gb3V0
cHV0ID0gY2hhcmFjdGVycyArIG1fbGVuZ3RoOwogICAgICAgICAqb3V0cHV0KysgPSAnIic7CiAg
ICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09O
U3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0lu
dGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwog
ICAgICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9i
dWZmZXJDaGFyYWN0ZXJzMTY7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gY2hhcmFjdGVy
czsKICAgICB9Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAgIEFTU0VSVChtX2J1
ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICBB
U1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVu
YXRlQ0YuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyYTgxZDIyNmQ3MzRiMDk4YzYyMGEwZGFhNjkyZmMyNTg4NzBkYjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0Yu
aApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCisjaWYgVVNFKENGKQorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1Jl
Zj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKENGU3RyaW5nUmVmKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IENGU3RyaW5nR2V0TGVu
Z3RoKG1fc3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFt
X3N0cmluZyB8fCBDRlN0cmluZ0dldENTdHJpbmdQdHIobV9zdHJpbmcsIGtDRlN0cmluZ0VuY29k
aW5nSVNPTGF0aW4xKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZv
aWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0ZTdHJp
bmdSZWYgbV9zdHJpbmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdS
ZWY+OjpTdHJpbmdUeXBlQWRhcHRlcihDRlN0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0cmlu
ZyB7IHN0cmluZyB9Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFk
YXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciogZGVzdGluYXRpb24pIGNv
bnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBzdGQ6Om1lbWNweShkZXN0aW5hdGlv
biwgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xh
dGluMSksIENGU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5s
aW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+Ojp3cml0ZVRvPFVDaGFyPihV
Q2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQorICAgICAgICBD
RlN0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0
TGVuZ3RoKG1fc3RyaW5nKSksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGRlc3RpbmF0aW9u
KSk7Cit9CisKKyNpZmRlZiBfX09CSkNfXworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVB
ZGFwdGVyPE5TU3RyaW5nICo+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVm
PiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoTlNTdHJpbmcgKnN0cmluZykKKyAg
ICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4oKF9fYnJpZGdlIENGU3RyaW5n
UmVmKXN0cmluZykKKyAgICB7CisgICAgfQorfTsKKworI2VuZGlmCisKK30KKworI2VuZGlmIC8v
IFVTRShDRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVh
bUNvY29hLm1tIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0K
aW5kZXggYzc0YmY5Y2NmZTM0YTczZWJkZTQ1MzJlY2MzOTRkYjI2NTI5YTcwNy4uZTg2YjlkM2Y0
MTZhZDI0OTczNDY0NWRmZWZlZTBlYzkyMmJhNGYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2EubW0KQEAgLTIxLDYgKzIxLDggQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0IDx3dGYv
dGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBUZXh0
U3RyZWFtJiBUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGlkPE5TT2JqZWN0PiBvYmplY3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FpcnBsYXkvV2ViTWVkaWFTZXNzaW9uTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FpcnBsYXkvV2ViTWVkaWFTZXNzaW9u
TWFuYWdlci5jcHAKaW5kZXggM2ViN2JmOWI4NzVmNGE5YmQ5ZTUyMzgxZWM5N2Y5MGNhMjU4MWU2
NC4uMjk4M2MwZWYxMWFhM2MwNmUyMjYzMTQ3NjU0YmJkNWYzZGRkZjM5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9haXJwbGF5L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYWlycGxheS9XZWJNZWRpYVNlc3Npb25NYW5h
Z2VyLmNwcApAQCAtNzMsNiArNzMsNyBAQCBzdGF0aWMgYm9vbCBmbGFnc0FyZVNldChNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgdmFsdWUsIE1lZGlhUHJvZHVjZXI6Ok1lZAogU3RyaW5n
IG1lZGlhUHJvZHVjZXJTdGF0ZVN0cmluZyhNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mg
ZmxhZ3MpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmc7CisgICAgc3RyaW5nLmFwcGVuZCgi
IHsgIik7CiAgICAgaWYgKGZsYWdzICYgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZTo6SXNQbGF5
aW5nQXVkaW8pCiAgICAgICAgIHN0cmluZy5hcHBlbmQoIklzUGxheWluZ0F1ZGlvKyIpOwogICAg
IGlmIChmbGFncyAmIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGU6OklzUGxheWluZ1ZpZGVvKQpA
QCAtOTIsOSArOTMsOSBAQCBTdHJpbmcgbWVkaWFQcm9kdWNlclN0YXRlU3RyaW5nKE1lZGlhUHJv
ZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBmbGFncykKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgc3RyaW5nLmFwcGVuZCgiSXNOb3RQbGF5aW5nIik7CiAgICAgZWxzZQotICAgICAg
ICBzdHJpbmcucmVzaXplKHN0cmluZy5sZW5ndGgoKSAtIDEpOwotCi0gICAgcmV0dXJuIG1ha2VT
dHJpbmcoIiB7ICIsIHN0cmluZy50b1N0cmluZygpLCAiIH0iKTsKKyAgICAgICAgc3RyaW5nLnNo
cmluayhzdHJpbmcubGVuZ3RoKCkgLSAxKTsKKyAgICBzdHJpbmcuYXBwZW5kKCIgfSIpOworICAg
IHJldHVybiBzdHJpbmcudG9TdHJpbmcoKTsKIH0KIAogY2xhc3MgV2ViTWVkaWFTZXNzaW9uTG9n
Z2VyIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHAKaW5kZXggODJiZjE5YWU4Mjg2NzhkNDRlYWZjZDY0Nzk4ZTdlMGMzNjBlZjYzYy4u
NWIyMzE1NWUwYWU4ZWVhYTk1NDFmZGVhNTkxNDUxMWRlOWJiZjMxZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTU1Niw3
ICs1NTYsNyBAQCBzdGF0aWMgdm9pZCBzdHJpcFRyYWlsaW5nTmV3bGluZShTdHJpbmdCdWlsZGVy
JiByZXN1bHQpCiAgICAgLy8gUmVtb3ZlIG9uZSB0cmFpbGluZyBuZXdsaW5lOyB0aGVyZSdzIGFs
d2F5cyBvbmUgdGhhdCdzIGNvbGxhcHNlZCBvdXQgYnkgcmVuZGVyaW5nLgogICAgIHNpemVfdCBz
aXplID0gcmVzdWx0Lmxlbmd0aCgpOwogICAgIGlmIChzaXplICYmIHJlc3VsdFtzaXplIC0gMV0g
PT0gbmV3bGluZUNoYXJhY3RlcikKLSAgICAgICAgcmVzdWx0LnJlc2l6ZShzaXplIC0gMSk7Cisg
ICAgICAgIHJlc3VsdC5zaHJpbmsoc2l6ZSAtIDEpOwogfQogCiBzdGF0aWMgU3RyaW5nIGlubmVy
VGV4dFZhbHVlRnJvbShUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQmIGlubmVyVGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Ri5jcHAKaW5kZXggNzNjODAxYjkzOGM3YThkOGY0ZDRkNzU1M2VhZTZmNzUxM2ExODE1ZS4uOWYy
YTc2NTgxM2RjNmZhNjQzNmRiY2U3NmZkYzFkMjA1ZDAzNzUyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKQEAgLTQ4
LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0Yu
aD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVu
LmgiCkBAIC0zMDgsMzggKzMwOSwzMCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUY6OmNhcHRpb25zQmFja2dyb3VuZENTUygpIGNvbnN0CiBDb2xvciBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IoYm9vbCYgaW1wb3J0YW50KSBjb25z
dAogewogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKLSAgICBSZXRh
aW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5
Rm9yZWdyb3VuZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9y
KSk7Ci0gICAgQ29sb3IgdGV4dENvbG9yKGNvbG9yLmdldCgpKTsKLSAgICBpZiAoIXRleHRDb2xv
ci5pc1ZhbGlkKCkpCisgICAgQ29sb3IgdGV4dENvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBl
YXJhbmNlQ29weUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIs
ICZiZWhhdmlvcikpLmdldCgpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkgewogICAg
ICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNw
ZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNr
LWNvbnRhaW5lci4KICAgICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAorICAg
IH0KICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yVXNlVmFsdWU7CiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdl
dEZvcmVncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2
aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3Ig
PT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwogICAgIHJldHVybiB0ZXh0
Q29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiB9Ci0gICAgCisKIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdAogewog
ICAgIGJvb2wgaW1wb3J0YW50OwotICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRpb25zVGV4dENv
bG9yKGltcG9ydGFudCk7Ci0KKyAgICBhdXRvIHRleHRDb2xvciA9IGNhcHRpb25zVGV4dENvbG9y
KGltcG9ydGFudCk7CiAgICAgaWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLQogICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3Bl
cnR5Q29sb3IsIHRleHRDb2xvciwgaW1wb3J0YW50KTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5k
Q1NTKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewotICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3Bl
cnR5TmFtZVN0cmluZyhpZCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Ci0gICAgYnVpbGRl
ci5hcHBlbmQodmFsdWUpOwotICAgIGlmIChpbXBvcnRhbnQpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOworICAg
IGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhpZCksICc6JywgdmFsdWUsIGlt
cG9ydGFudCA/ICIgIWltcG9ydGFudDsiIDogIjsiKTsKIH0KICAgICAKIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6d2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNv
bnN0CkBAIC0zNzksNyArMzcyLDYgQEAgYm9vbCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y2FwdGlvblN0cm9rZVdpZHRoRm9yRm9udChmbG9hdCBmb250U2l6ZSwgY28KICAgICAvLyBT
aW5jZSBvbmx5IGhhbGYgb2YgdGhlIHN0cm9rZSBpcyB2aXNpYmxlIGJlY2F1c2UgdGhlIHN0cm9r
ZSBpcyBkcmF3biBiZWZvcmUgdGhlIGZpbGwsIHdlIGRvdWJsZSB0aGUgc3Ryb2tlIHdpZHRoIGhl
cmUuCiAgICAgc3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aFB0ICogMjsKICAgICBpbXBvcnRhbnQg
PSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQxOCwyNCArNDEwLDE3IEBAIFN0cmluZyBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNvbnN0
CiB7CiAgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOwogICAgIAotICAg
IFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250ID0gYWRvcHRDRihNQUNhcHRpb25B
cHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW5Vc2VyLCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxlRGVmYXVs
dCkpOworICAgIGF1dG8gZm9udCA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb250
RGVzY3JpcHRvckZvclN0eWxlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2
aW9yLCBrTUFDYXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZURlZmF1bHQpKTsKICAgICBpZiAoIWZv
bnQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGVHlw
ZVJlZj4gbmFtZSA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5n
ZXQoKSwga0NURm9udE5hbWVBdHRyaWJ1dGUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnROYW1lQXR0cmli
dXRlKSk7CiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAKLSAgICBidWlsZGVyLmFwcGVuZChnZXRQ
cm9wZXJ0eU5hbWVTdHJpbmcoQ1NTUHJvcGVydHlGb250RmFtaWx5KSk7Ci0gICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI6IFwiIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0ZT
dHJpbmdSZWY+KG5hbWUuZ2V0KCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotCi0gICAg
YXV0byBjYXNjYWRlTGlzdCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250
RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9udENhc2NhZGVMaXN0QXR0
cmlidXRlKSkpOwotCi0gICAgaWYgKGNhc2NhZGVMaXN0KSB7CisgICAgYnVpbGRlci5hcHBlbmQo
ImZvbnQtZmFtaWx5OiBcIiIsIHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihuYW1lLmdldCgpKSwg
JyInKTsKKyAgICBpZiAoYXV0byBjYXNjYWRlTGlzdCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZB
cnJheVJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udC5nZXQoKSwga0NURm9u
dENhc2NhZGVMaXN0QXR0cmlidXRlKSkpKSB7CiAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IENGQXJyYXlHZXRDb3VudChjYXNjYWRlTGlzdC5nZXQoKSk7IGkrKykgewogICAgICAgICAg
ICAgYXV0byBmb250Q2FzY2FkZSA9IHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0b3JSZWY+KENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2FzY2FkZUxpc3QuZ2V0KCksIGkpKTsKICAgICAgICAgICAg
IGlmICghZm9udENhc2NhZGUpCkBAIC00NDMsMTYgKzQyOCwxMCBAQCBTdHJpbmcgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKSBjb25zdAogICAg
ICAgICAgICAgYXV0byBmb250Q2FzY2FkZU5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
b3B5QXR0cmlidXRlKGZvbnRDYXNjYWRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOwogICAgICAg
ICAgICAgaWYgKCFmb250Q2FzY2FkZU5hbWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBcIiIpOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQoKSkpOwot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIsIFwiIiwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZvbnRDYXNjYWRlTmFtZS5nZXQo
KSksICciJyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGJlaGF2aW9yID09IGtN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSkKLSAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7Ci0gICAg
CisgICAgYnVpbGRlci5hcHBlbmQoYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhh
dmlvclVzZVZhbHVlID8gIiAhaW1wb3J0YW50OyIgOiAiOyIpOwogICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7CiB9CiAKQEAgLTU2MSw0MyArNTQwLDE4IEBAIFN0cmluZyBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKSBjb25zdAog
I2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAgICAgaWYgKCFNZWRpYUFj
Y2Vzc2liaWxpdHlMaWJyYXJ5KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpOwotICAgIAorCiAgICAgU3RyaW5nIGNh
cHRpb25zQ29sb3IgPSBjYXB0aW9uc1RleHRDb2xvckNTUygpOwogICAgIFN0cmluZyBlZGdlU3R5
bGUgPSBjYXB0aW9uc1RleHRFZGdlQ1NTKCk7CiAgICAgU3RyaW5nIGZvbnROYW1lID0gY2FwdGlv
bnNEZWZhdWx0Rm9udENTUygpOwogICAgIFN0cmluZyBiYWNrZ3JvdW5kID0gY2FwdGlvbnNCYWNr
Z3JvdW5kQ1NTKCk7Ci0gICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAhY2FwdGlvbnND
b2xvci5pc0VtcHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnROYW1lLmlzRW1w
dHkoKSkgewotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmRMaXRlcmFs
KCIgOjoiKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRU
cmFja0N1ZTo6Y3VlU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZCgneycpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5k
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZChiYWNrZ3JvdW5kKTsKLSAgICAgICAgaWYgKCFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChjYXB0aW9uc0NvbG9y
KTsKLSAgICAgICAgaWYgKCFlZGdlU3R5bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlv
bnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGVkZ2VTdHlsZSk7Ci0gICAgICAgIGlmICghZm9u
dE5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQu
YXBwZW5kKGZvbnROYW1lKTsKLSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHls
ZVNoZWV0LmFwcGVuZCgnfScpOwotICAgIH0KLSAgICAKKyAgICBpZiAoIWJhY2tncm91bmQuaXNF
bXB0eSgpIHx8ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSB8fCAhZWRnZVN0eWxlLmlzRW1wdHko
KSB8fCAhZm9udE5hbWUuaXNFbXB0eSgpKQorICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVT
aGVldC5hcHBlbmQoIiA6OiIsIFRleHRUcmFja0N1ZTo6Y3VlU2hhZG93UHNldWRvSWQoKSwgJ3sn
LCBiYWNrZ3JvdW5kLCBjYXB0aW9uc0NvbG9yLCBlZGdlU3R5bGUsIGZvbnROYW1lLCAnfScpOwor
CiAgICAgU3RyaW5nIHdpbmRvd0NvbG9yID0gY2FwdGlvbnNXaW5kb3dDU1MoKTsKICAgICBTdHJp
bmcgd2luZG93Q29ybmVyUmFkaXVzID0gd2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpOwot
ICAgIGlmICghd2luZG93Q29sb3IuaXNFbXB0eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZExpdGVy
YWwoIiA6OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoVGV4
dFRyYWNrQ3VlOjpjdWVCYWNrZHJvcFNoYWRvd1BzZXVkb0lkKCkpOwotICAgICAgICBjYXB0aW9u
c092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoJ3snKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgh
d2luZG93Q29sb3IuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKHdpbmRvd0NvbG9yKTsKLSAgICAgICAgaWYgKCF3aW5kb3dDb3JuZXJSYWRp
dXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQod2luZG93Q29ybmVyUmFkaXVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Y2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQorICAgIGlmICgh
d2luZG93Q29sb3IuaXNFbXB0eSgpIHx8ICF3aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKQor
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoIiA6OiIsIFRleHRUcmFj
a0N1ZTo6Y3VlQmFja2Ryb3BTaGFkb3dQc2V1ZG9JZCgpLCAneycsIHdpbmRvd0NvbG9yLCB3aW5k
b3dDb3JuZXJSYWRpdXMsICd9Jyk7CiAjZW5kaWYgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZ
X0ZSQU1FV09SSykKIAogICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZVNldHRpbmcgc3R5bGUgdG86XG4lcyIsIGNh
cHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAKaW5kZXggMzZjOTk2ODA0Zjk4Mzk1ZmQ2NWYwMjc5NmQxNjRlMzlmZGFhMDBhNC4uOWI2
MjlkMGU1OTMxODliZDkzZDU5ZmU3MzA2N2E4NGU5Nzc1MzM4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAt
NDA0LDcgKzQwNCw3IEBAIFN0cmluZyBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3luY2hyb25vdXNT
Y3JvbGxpbmdSZWFzb25zQXNUZXh0KE9wdGlvblNldDxTeW5jaHJvCiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiSGFzIHNsb3cgcmVwYWludCBkZXNjZW5kYW50IHNjcm9sbGVy
cywgIik7CiAKICAgICBpZiAoc3RyaW5nQnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5yZXNpemUoc3RyaW5nQnVpbGRlci5sZW5ndGgoKSAtIDIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLnNocmluayhzdHJpbmdCdWlsZGVyLmxlbmd0aCgpIC0gMik7CiAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0
VW5pdC5oCmluZGV4IDE1NmEwMWJkMmRmZGRhNDcyYjA4MWQ0YWVmNDFkYTM4Mjg2ZjYwMzAuLjFl
NTcxMjgyMDFkYmYwNTc0ZmEyMDkwNmJiZTkxMDc1ZTcyYmFlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MYXlvdXRVbml0LmgKQEAgLTE1MCw4ICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgaW50IHJv
dW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3ZhbHVlID4gMCkKLSAgICAgICAgICAg
IHJldHVybiBzYXR1cmF0ZWRBZGRpdGlvbihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5h
dG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgICAgICByZXR1cm4gc2F0dXJh
dGVkU3VidHJhY3Rpb24ocmF3VmFsdWUoKSwgKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAt
IDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgICAgIHJldHVybiBzYXR1cmF0
ZWRTdW08aW50PihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLyBrRml4
ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gc2F0dXJhdGVkRGlmZmVyZW5jZTxp
bnQ+KHJhd1ZhbHVlKCksIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLSAxKSAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7CiAgICAgfQogCiAgICAgaW50IGZsb29yKCkgY29uc3QKQEAgLTU4
OCw3ICs1ODgsNyBAQCBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8odW5zaWduZWQgbG9uZyBs
b25nIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciso
Y29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBMYXlvdXRV
bml0IHJldHVyblZhbDsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRp
b24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFs
dWUoc2F0dXJhdGVkU3VtPGludD4oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICAgICBy
ZXR1cm4gcmV0dXJuVmFsOwogfQogCkBAIC02MjUsNyArNjI1LDcgQEAgaW5saW5lIGRvdWJsZSBv
cGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiBpbmxpbmUgTGF5
b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKICAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFs
dWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAg
ICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQ+KGEucmF3VmFs
dWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKIH0KIApAQCAtNjkx
LDcgKzY5MSw3IEBAIGlubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShpbnQgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIAogaW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBhLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFk
ZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisgICAgYS5zZXRSYXdWYWx1ZShz
YXR1cmF0ZWRTdW08aW50PihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwogICAgIHJldHVy
biBhOwogfQogCkBAIC03MjEsNyArNzIxLDcgQEAgaW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9y
LT0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiAKIGlubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci09
KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgYS5zZXRSYXdWYWx1
ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworICAg
IGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQ+KGEucmF3VmFsdWUoKSwgYi5y
YXdWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbkNvY29hLm1tCmluZGV4IDYwZTY3MGYyMDY2ZDYwNThiMmU1ZWI3OWViN2RjMzBjNWNiNGIy
OGUuLjExYzlhMjM4M2NkNmM4YzMwMWExYTA4ZGNkZWFmYWU3OWQyNjJiNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8
d3RmL1VSTC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9jZi9TdHJpbmdDb25j
YXRlbmF0ZUNGLmg+CiAKIEBpbnRlcmZhY2UgTlNVUkwgKCkKIC0gKENGVVJMUmVmKV9jZnVybDsK
QEAgLTM0OSwzMSArMzUwLDIzIEBAIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6Y29va2llc0ZvclNlc3Npb24oY29uc3QgVVJMJiBmaXJzCiAKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAgIFJldGFpblB0cjxOU0FycmF5PiBjb29raWVz
ID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJhbWVJRCwg
cGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
KTsKLSAgICBpZiAoIWNvb2tpZXMgfHwgIVtjb29raWVzIGNvdW50XSkKLSAgICAgICAgcmV0dXJu
IHsgU3RyaW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1w
dHkgb25lIHRoYXQgU3RyaW5nQnVpbGRlciB3b3VsZCBjcmVhdGUgYmVsb3cuCisgICAgYXV0byBj
b29raWVzID0gY29va2llc0ZvclVSTChmaXJzdFBhcnR5LCBzYW1lU2l0ZUluZm8sIHVybCwgZnJh
bWVJRCwgcGFnZUlELCBzaG91bGRBc2tJVFAsIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nKTsKKyAgICBpZiAoIVtjb29raWVzIGNvdW50XSkKKyAgICAgICAgcmV0dXJuIHsgU3Ry
aW5nKCksIGZhbHNlIH07IC8vIFJldHVybiBhIG51bGwgc3RyaW5nOyBTdHJpbmdCdWlsZGVyIGJl
bG93IHdvdWxkIGNyZWF0ZSBhbiBlbXB0eSBvbmUuCiAKICAgICBTdHJpbmdCdWlsZGVyIGNvb2tp
ZXNCdWlsZGVyOwogICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGZhbHNlOwogICAg
IGZvciAoTlNIVFRQQ29va2llICpjb29raWUgaW4gY29va2llcy5nZXQoKSkgewogICAgICAgICBp
ZiAoIVtbY29va2llIG5hbWVdIGxlbmd0aF0pCiAgICAgICAgICAgICBjb250aW51ZTsKLQogICAg
ICAgICBpZiAoIWluY2x1ZGVIVFRQT25seSAmJiBbY29va2llIGlzSFRUUE9ubHldKQogICAgICAg
ICAgICAgY29udGludWU7Ci0KICAgICAgICAgaWYgKFtjb29raWUgaXNTZWN1cmVdKSB7CiAgICAg
ICAgICAgICBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChp
bmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm8pCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvb2tpZXNCdWls
ZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IjsgIik7Ci0KLSAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5kKFtjb29raWUgbmFtZV0pOwot
ICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmQoJz0nKTsKLSAgICAgICAgY29va2llc0J1aWxk
ZXIuYXBwZW5kKFtjb29raWUgdmFsdWVdKTsKKyAgICAgICAgY29va2llc0J1aWxkZXIuYXBwZW5k
KGNvb2tpZXNCdWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIjsgIiwgW2Nvb2tpZSBuYW1lXSwgJz0n
LCBbY29va2llIHZhbHVlXSk7CiAgICAgfQogICAgIHJldHVybiB7IGNvb2tpZXNCdWlsZGVyLnRv
U3RyaW5nKCksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IDdmNjBkOTAxOTNjYzNiM2ZjNDlmNTljYjA5
MmVmNGMyMGE3ZjExOGMuLjQzNjk5ZmVhZDlmNjVjNTk3MmJmZGQ0MjljNzdhZWExMDE2YTY5OTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTE4Nyw3
ICsxODcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8Q291bnRlclBsYW4+IHBsYW5Db3VudGVyKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9tU3RyaQogICAgIH0KIAogICAgIGlmIChkaXJl
Y3RpdmVzLnJlc2V0VmFsdWUpCi0gICAgICAgIHJldHVybiBDb3VudGVyUGxhbiB7IHRydWUsIHNh
dHVyYXRlZEFkZGl0aW9uKCpkaXJlY3RpdmVzLnJlc2V0VmFsdWUsIGRpcmVjdGl2ZXMuaW5jcmVt
ZW50VmFsdWUudmFsdWVPcigwKSkgfTsKKyAgICAgICAgcmV0dXJuIENvdW50ZXJQbGFuIHsgdHJ1
ZSwgc2F0dXJhdGVkU3VtPGludD4oKmRpcmVjdGl2ZXMucmVzZXRWYWx1ZSwgZGlyZWN0aXZlcy5p
bmNyZW1lbnRWYWx1ZS52YWx1ZU9yKDApKSB9OwogICAgIGlmIChkaXJlY3RpdmVzLmluY3JlbWVu
dFZhbHVlKQogICAgICAgICByZXR1cm4gQ291bnRlclBsYW4geyBmYWxzZSwgKmRpcmVjdGl2ZXMu
aW5jcmVtZW50VmFsdWUgfTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCBmOTczZjg5NTEzZWE0NzE0OTRkN2Q5
ZDQzNGJmMGRjMGVkYTUyZDcyLi43ZmY2YzYyZGZlMzNmNzA0NTRhNzBiNzI2Y2UzNDkyOGVlOThi
OWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtMTM2
MCw3ICsxMzYwLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50
ZXIoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHUKICAgICAgICAgaWYgKGNvdW50
ZXJCZWhhdmlvciA9PSBSZXNldCkKICAgICAgICAgICAgIGRpcmVjdGl2ZXMucmVzZXRWYWx1ZSA9
IHZhbHVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXJlY3RpdmVzLmluY3JlbWVudFZh
bHVlID0gc2F0dXJhdGVkQWRkaXRpb24oZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1ZU9y
KDApLCB2YWx1ZSk7CisgICAgICAgICAgICBkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlID0gc2F0
dXJhdGVkU3VtPGludD4oZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZS52YWx1ZU9yKDApLCB2YWx1
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVy
LmNwcAppbmRleCA3YTczMDQ1YTJkNGE3MzlkYzFmMGJjYjBmYmMzYWY3OWUwMjQxZTZkLi40ODNi
ZjY5ZWVlMjhjZWMxMWNjNWJiYzBjMWFmOWZmZjA2YjVhZDczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgU3RyaW5nIFNW
R1BhdGhTdHJpbmdCdWlsZGVyOjpyZXN1bHQoKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
ICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc3BhY2UuCi0gICAgbV9zdHJpbmdCdWlsZGVyLnJlc2l6
ZShzaXplIC0gMSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLnNocmluayhzaXplIC0gMSk7CiAgICAg
cmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggMzJkMTVmZDI3YTg0YWIxYzM0MzczNDU5ZTU5YzQ3OWVkNTli
NGQ5My4uODllY2Q2OTIyZjIxYjMxMjA3MzY2ZGFjN2M1MmQ0NzZiYmRkMzE1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNDYzOCw3ICs0NjM4LDcgQEAgU3RyaW5nIElu
dGVybmFsczo6cGFnZU1lZGlhU3RhdGUoKQogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAg
ICAgICBzdHJpbmcuYXBwZW5kKCJJc05vdFBsYXlpbmciKTsKICAgICBlbHNlCi0gICAgICAgIHN0
cmluZy5yZXNpemUoc3RyaW5nLmxlbmd0aCgpIC0gMSk7CisgICAgICAgIHN0cmluZy5zaHJpbmso
c3RyaW5nLmxlbmd0aCgpIC0gMSk7CiAKICAgICByZXR1cm4gc3RyaW5nLnRvU3RyaW5nKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAppbmRleCA3MzA1
NDIxMWEzN2ExODRjMGY3ODg5MDFjMDVhYTZiODY1MzRiYzdlLi5jNzY5YmY4NjgyOTNmZmM5MjU4
Y2FiNjIwOWViMWNmZDg2OTVmMDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3NvckxpYnhzbHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAKQEAgLTIxMiw3ICsyMTIsNyBAQCBzdGF0aWMgYm9vbCBzYXZlUmVzdWx0
VG9TdHJpbmcoeG1sRG9jUHRyIHJlc3VsdERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQsIFN0
cgogCiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5NTY2OD46IGxpYnhzbHQgYXBwZW5kcyBhbiBleHRyYSBsaW5lIGZlZWQg
dG8gdGhlIHJlc3VsdC4KICAgICBpZiAocmVzdWx0QnVpbGRlci5sZW5ndGgoKSA+IDAgJiYgcmVz
dWx0QnVpbGRlcltyZXN1bHRCdWlsZGVyLmxlbmd0aCgpIC0gMV0gPT0gJ1xuJykKLSAgICAgICAg
cmVzdWx0QnVpbGRlci5yZXNpemUocmVzdWx0QnVpbGRlci5sZW5ndGgoKSAtIDEpOworICAgICAg
ICByZXN1bHRCdWlsZGVyLnNocmluayhyZXN1bHRCdWlsZGVyLmxlbmd0aCgpIC0gMSk7CiAKICAg
ICByZXN1bHRTdHJpbmcgPSByZXN1bHRCdWlsZGVyLnRvU3RyaW5nKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQppbmRleCBmMmQ5MmYxOTdkMTdjYTI5NzBkMDdkYzE0MGFi
MDBhNjFjMTM1OGZjLi5jZmNkOWYzYzAzYzljNmExYTNkMzRlZDFjYzk3NzdhODA3MjdlOTkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC00Nyw3ICs0Nyw3IEBACiAj
aW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2lt
cG9ydCA8d3RmL2NvY29hL0VudGl0bGVtZW50cy5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorI2ltcG9ydCA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24u
aD4KQEAgLTExNSwxNSArMTE1LDEwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1T
ZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICAgICAg
ICAgIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6Rmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXM7CiAgICAgfQogCi0gICAgYXV0
byogbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OkAiSVRQ
TWFudWFsUHJldmFsZW50UmVzb3VyY2UiXTsKLSAgICBpZiAobWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UpIHsKLSAgICAgICAgVVJMIHVybCB7IFVSTCgpLCBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9
OwotICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0cDovLyIp
OwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobWFudWFsUHJldmFsZW50UmVzb3VyY2UpOwot
ICAgICAgICAgICAgdXJsID0geyBVUkwoKSwgYnVpbGRlci50b1N0cmluZygpIH07Ci0gICAgICAg
IH0KKyAgICBpZiAoYXV0byBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6QCJJVFBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdKSB7CisgICAgICAgIFVSTCB1
cmwgeyB7IH0sIG1hbnVhbFByZXZhbGVudFJlc291cmNlIH07CisgICAgICAgIGlmICghdXJsLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHVybCA9IHsgeyB9LCBtYWtlU3RyaW5nKCJodHRwOi8vIiwg
bWFudWFsUHJldmFsZW50UmVzb3VyY2UpIH07CiAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQog
ICAgICAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNl
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfTsKICAgICB9CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzA4ZGVjMzE1YWQ4YjVl
OGQwYmJiMWNiNTE3NjRiMjk0Yjk5MTFlZS4uZTI2ZjAxMWViMGM4ZWI5MTEwNWFiYWJlZGJhOWVi
YTA1OTM1OGY5MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIxLTA1LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBNb3ZlIENGU3RyaW5nUmVmIGFuZCBOU1N0cmluZyBzdXBwb3J0
IGZyb20gU3RyaW5nQnVpbGRlciBpbnRvIFN0cmluZ0NvbmNhdGVuYXRlQ0YKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgzOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIFVwZGF0ZWQgdGVz
dHMgZm9yIGNoYW5nZXMgdG8gU2F0dXJhdGVkQXJpdGhtZXRpYy5oLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwOgorICAg
ICAgICBBZGRlZCBpbmNsdWRlIG9mIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgQWRk
ZWQgU3RyaW5nVHlwZUFkYXB0ZXIgZm9yIFdLU3RyaW5nUmVmLgorICAgICAgICAoV1RSOjpzdHls
ZURlY1RvU3RyKTogVXNlIEFTQ0lJTGl0ZXJhbCBpbnN0ZWFkIG9mIFN0cmluZ0J1aWxkZXIuCisg
ICAgICAgIChXVFI6OnN0cmluZyk6IFJlbW92ZWQgdW5uZWVkZWQgdG9XVEZTdHJpbmcgc2luY2Ug
dGhlIFdLU3RyaW5nUmVmCisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyIHRha2VzIGNhcmUgb2Yg
aXQuCisgICAgICAgIChXVFI6OnN0cmluZyk6IFJlbmFtZWQgZnJvbSBmcmFtZVRvU3RyLiBVc2Ug
bWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6ZHVtcFJlc291cmNlVVJMKTogVXNlIGFwcGVuZCBp
bnN0ZWFkIG9mIGFwcGVuZExpdGVyYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6ZHVtcExv
YWRFdmVudCk6IFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVk
IGZyb20gYSBsb25nZXIgbmFtZS4gUmV0dXJuIGEgU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2Yg
YnVpbGRpbmcgaW4gYSBTdHJpbmdCdWlsZGVyLiBVc2UgbWFrZVN0cmluZy4KKyAgICAgICAgKFdU
Ujo6c3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KTogUmVtb3ZlZAorICAgICAgICB1bm5lZWRlZCB0b1dURlN0cmlu
Zy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZSk6IFJlbW92ZWQgYW4KKyAg
ICAgICAgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlUGFnZTo6ZHVtcCk6IFJlbW92ZWQgdW5uZWVkZWQgdG9XVEZTdHJpbmcuCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRG
b3JGcmFtZSk6CisgICAgICAgIFVwZGF0ZWQgZm9yIGZ1bmN0b24gbmFtZSBjaGFuZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUpOiBE
aXR0by4KKyAgICAgICAgQWxzbyB1c2UgdmFyaWFkaWMgYXBwZW5kLiBBbHNvIHVzZSBtYWtlU3Ry
aW5nLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25z
ZUZvclJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkRmluaXNoTG9hZEZvclJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JS
ZXNwb25zZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxB
ZGRNZXNzYWdlVG9Db25zb2xlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdFByb21wdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2RlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJh
bmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZEFwcGx5U3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlUGFnZTo6ZHVtcEhpc3RvcnkpOiBEaXR0by4KKwogMjAyMS0wNS0xOCAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2xpbnQtdGVzdC1leHBl
Y3RhdGlvbnNdIENoYW5nZSBzaGViYW5nIHRvIFB5dGhvbiAzCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAKaW5kZXggZTg1NGUyNTZlOGFkYWNjOTI1Yjk4YjdjMGNlNzE0NjNhYjFiYWVmZS4u
OWJkNTBlMjczZjc0MDU5OWJlMDAyYjZkMDllZDVmZjdiYjY2YTRmNSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC0yOSw3NyArMzAsOTggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAibGltaXRzLmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDx3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CiAKIFRFU1QoV1RGLCBTYXR1cmF0ZWRBcml0aG1ldGljQWRkaXRpb24pCiB7Ci0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZEFkZGl0aW9uKDAsIDApLCAwKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
QWRkaXRpb24oMCwgMSksIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigwLCAx
MDApLCAxMDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigxMDAsIDUwKSwgMTUw
KTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigwLCAtMSksIC0xKTsKLSAgICBB
U1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMSwgLTEpLCAwKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkQWRkaXRpb24oMTAwLCAtNTApLCA1MCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFk
ZGl0aW9uKDUwLCAtMTAwKSwgLTUwKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlv
bihJTlRfTUFYIC0gMSwgMCksIElOVF9NQVggLSAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
QWRkaXRpb24oSU5UX01BWCAtIDEsIDEpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJh
dGVkQWRkaXRpb24oSU5UX01BWCAtIDEsIDIpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkQWRkaXRpb24oMCwgSU5UX01BWCAtIDEpLCBJTlRfTUFYIC0gMSk7Ci0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZEFkZGl0aW9uKDEsIElOVF9NQVggLSAxKSwgSU5UX01BWCk7Ci0gICAgQVNT
RVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKDIsIElOVF9NQVggLSAxKSwgSU5UX01BWCk7Ci0gICAg
QVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NQVggLSAxLCBJTlRfTUFYIC0gMSksIElO
VF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUFYLCBJTlRfTUFY
KSwgSU5UX01BWCk7Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01JTiwg
MCksIElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUlOICsg
MSwgMCksIElOVF9NSU4gKyAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5U
X01JTiArIDEsIDEpLCBJTlRfTUlOICsgMik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0
aW9uKElOVF9NSU4gKyAxLCAyKSwgSU5UX01JTiArIDMpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRBZGRpdGlvbihJTlRfTUlOICsgMSwgLTEpLCBJTlRfTUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkQWRkaXRpb24oSU5UX01JTiArIDEsIC0yKSwgSU5UX01JTik7Ci0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZEFkZGl0aW9uKDAsIElOVF9NSU4gKyAxKSwgSU5UX01JTiArIDEpOwotICAgIEFT
U0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbigtMSwgSU5UX01JTiArIDEpLCBJTlRfTUlOKTsKLSAg
ICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oLTIsIElOVF9NSU4gKyAxKSwgSU5UX01JTik7
Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01BWCAvIDIsIDEwMDAwKSwg
SU5UX01BWCAvIDIgKyAxMDAwMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElO
VF9NQVggLyAyICsgMSwgSU5UX01BWCAvIDIgKyAxKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NSU4sIElOVF9NQVgpLCAtMSk7CisgICAgRVhQRUNUX0VR
KDAsIHNhdHVyYXRlZFN1bTxpbnQzMl90PigwLCAwKSk7CisgICAgRVhQRUNUX0VRKDEsIHNhdHVy
YXRlZFN1bTxpbnQzMl90PigwLCAxKSk7CisgICAgRVhQRUNUX0VRKDEwMCwgc2F0dXJhdGVkU3Vt
PGludDMyX3Q+KDAsIDEwMCkpOworICAgIEVYUEVDVF9FUSgxNTAsIHNhdHVyYXRlZFN1bTxpbnQz
Ml90PigxMDAsIDUwKSk7CisKKyAgICBFWFBFQ1RfRVEoLTEsIHNhdHVyYXRlZFN1bTxpbnQzMl90
PigwLCAtMSkpOworICAgIEVYUEVDVF9FUSgwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMSwgLTEp
KTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNhdHVyYXRlZFN1bTxpbnQzMl90PigxMDAsIC01MCkpOwor
ICAgIEVYUEVDVF9FUSgtNTAsIHNhdHVyYXRlZFN1bTxpbnQzMl90Pig1MCwgLTEwMCkpOworCisg
ICAgRVhQRUNUX0VRKElOVF9NQVggLSAxLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAt
IDEsIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElO
VF9NQVggLSAxLCAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZFN1bTxpbnQz
Ml90PihJTlRfTUFYIC0gMSwgMikpOworICAgIEVYUEVDVF9FUShJTlRfTUFYIC0gMSwgc2F0dXJh
dGVkU3VtPGludDMyX3Q+KDAsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVgs
IHNhdHVyYXRlZFN1bTxpbnQzMl90PigxLCBJTlRfTUFYIC0gMSkpOworICAgIEVYUEVDVF9FUShJ
TlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMiwgSU5UX01BWCAtIDEpKTsKKyAgICBFWFBF
Q1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NQVggLSAxLCBJTlRfTUFY
IC0gMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5U
X01BWCwgSU5UX01BWCkpOworCisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZFN1bTxp
bnQzMl90PihJTlRfTUlOLCAwKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4gKyAxLCBzYXR1cmF0
ZWRTdW08aW50MzJfdD4oSU5UX01JTiArIDEsIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiAr
IDIsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOICsgMSwgMSkpOworICAgIEVYUEVDVF9F
UShJTlRfTUlOICsgMywgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NSU4gKyAxLCAyKSk7Cisg
ICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOICsgMSwg
LTEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9N
SU4gKyAxLCAtMikpOworICAgIEVYUEVDVF9FUShJTlRfTUlOICsgMSwgc2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KDAsIElOVF9NSU4gKyAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRl
ZFN1bTxpbnQzMl90PigtMSwgSU5UX01JTiArIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwg
c2F0dXJhdGVkU3VtPGludDMyX3Q+KC0yLCBJTlRfTUlOICsgMSkpOworCisgICAgRVhQRUNUX0VR
KElOVF9NQVggLyAyICsgMTAwMDAsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUFYIC8gMiwg
MTAwMDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElO
VF9NQVggLyAyICsgMSwgSU5UX01BWCAvIDIgKyAxKSk7CisgICAgRVhQRUNUX0VRKC0xLCBzYXR1
cmF0ZWRTdW08aW50MzJfdD4oSU5UX01JTiwgSU5UX01BWCkpOworCisgICAgRVhQRUNUX0VRKDBV
LCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KDBVLCAwVSkpOworICAgIEVYUEVDVF9FUSgxVSwgc2F0
dXJhdGVkU3VtPHVpbnQzMl90PigwVSwgMVUpKTsKKyAgICBFWFBFQ1RfRVEoMTAwVSwgc2F0dXJh
dGVkU3VtPHVpbnQzMl90PigwVSwgMTAwVSkpOworICAgIEVYUEVDVF9FUSgxNTBVLCBzYXR1cmF0
ZWRTdW08dWludDMyX3Q+KDEwMFUsIDUwVSkpOworCisgICAgRVhQRUNUX0VRKFVJTlRfTUFYIC0g
MSwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAtIDFVLCAwVSkpOworICAgIEVYUEVD
VF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAtIDFVLCAxVSkp
OworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01B
WCAtIDFVLCAyVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCAtIDEsIHNhdHVyYXRlZFN1bTx1
aW50MzJfdD4oMFUsIFVJTlRfTUFYIC0gMVUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNh
dHVyYXRlZFN1bTx1aW50MzJfdD4oMVUsIFVJTlRfTUFYIC0gMVUpKTsKKyAgICBFWFBFQ1RfRVEo
VUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oMlUsIFVJTlRfTUFYIC0gMVUpKTsKKyAg
ICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLSAx
VSwgVUlOVF9NQVggLSAxVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3Vt
PHVpbnQzMl90PihVSU5UX01BWCwgVUlOVF9NQVgpKTsKKworICAgIEVYUEVDVF9FUShVSU5UX01B
WCAvIDIgKyAxMDAwMCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAvIDJVLCAxMDAw
MFUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlO
VF9NQVggLyAyVSwgVUlOVF9NQVggLyAyVSArIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFY
LCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC8gMlUgKyAxVSwgVUlOVF9NQVggLyAy
VSArIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+
KFVJTlRfTUFYIC8gM1UgKyAxVSwgVUlOVF9NQVggLyAzVSwgVUlOVF9NQVggLyAzVSkpOworICAg
IEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAvIDNV
ICsgMVUsIFVJTlRfTUFYIC8gM1UgKyAxVSwgVUlOVF9NQVggLyAzVSArIDFVKSk7CiB9CiAKIFRF
U1QoV1RGLCBTYXR1cmF0ZWRBcml0aG1ldGljU3VidHJhY3Rpb24pCiB7Ci0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZFN1YnRyYWN0aW9uKDAsIDApLCAwKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVk
U3VidHJhY3Rpb24oMCwgMSksIC0xKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rp
b24oMCwgMTAwKSwgLTEwMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDEw
MCwgNTApLCA1MCk7CisgICAgRVhQRUNUX0VRKDAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJf
dD4oMCwgMCkpOworICAgIEVYUEVDVF9FUSgtMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90
PigwLCAxKSk7CisgICAgRVhQRUNUX0VRKC0xMDAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJf
dD4oMCwgMTAwKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMy
X3Q+KDEwMCwgNTApKTsKICAgICAKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24o
MCwgLTEpLCAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oMSwgLTEpLCAy
KTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oMTAwLCAtNTApLCAxNTApOwot
ICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbig1MCwgLTEwMCksIDE1MCk7Ci0KLSAg
ICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCwgMCksIElOVF9NQVgpOwot
ICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYLCAxKSwgSU5UX01BWCAt
IDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYIC0gMSwgMCks
IElOVF9NQVggLSAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01B
WCAtIDEsIC0xKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9u
KElOVF9NQVggLSAxLCAtMiksIElOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0
cmFjdGlvbigwLCBJTlRfTUFYIC0gMSksIC1JTlRfTUFYICsgMSk7Ci0gICAgQVNTRVJUX0VRKHNh
dHVyYXRlZFN1YnRyYWN0aW9uKC0xLCBJTlRfTUFYIC0gMSksIC1JTlRfTUFYKTsKLSAgICBBU1NF
UlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oLTIsIElOVF9NQVggLSAxKSwgLUlOVF9NQVggLSAx
KTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oLTMsIElOVF9NQVggLSAxKSwg
LUlOVF9NQVggLSAxKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRf
TUlOLCAwKSwgSU5UX01JTik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElO
VF9NSU4gKyAxLCAwKSwgSU5UX01JTiArIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0
cmFjdGlvbihJTlRfTUlOICsgMSwgMSksIElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihJTlRfTUlOICsgMSwgMiksIElOVF9NSU4pOwotCi0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NSU4sIElOVF9NSU4pLCAwKTsKLSAgICBBU1NFUlRf
RVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCwgSU5UX01BWCksIDApOwotICAgIEFTU0VS
VF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFYLCBJTlRfTUlOKSwgSU5UX01BWCk7Cisg
ICAgRVhQRUNUX0VRKDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMCwgLTEpKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigxLCAtMSkpOworICAg
IEVYUEVDVF9FUSgxNTAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMTAwLCAtNTApKTsK
KyAgICBFWFBFQ1RfRVEoMTUwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDUwLCAtMTAw
KSk7CisKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90
PihJTlRfTUFYLCAwKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVggLSAxLCBzYXR1cmF0ZWREaWZm
ZXJlbmNlPGludDMyX3Q+KElOVF9NQVgsIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCAtIDEs
IHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCAtIDEsIDApKTsKKyAgICBFWFBF
Q1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUFYIC0gMSwg
LTEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90
PihJTlRfTUFYIC0gMSwgLTIpKTsKKyAgICBFWFBFQ1RfRVEoLUlOVF9NQVggKyAxLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KDAsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKC1J
TlRfTUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KC0xLCBJTlRfTUFYIC0gMSkpOwor
ICAgIEVYUEVDVF9FUSgtSU5UX01BWCAtIDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4o
LTIsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKC1JTlRfTUFYIC0gMSwgc2F0dXJhdGVk
RGlmZmVyZW5jZTxpbnQzMl90PigtMywgSU5UX01BWCAtIDEpKTsKKworICAgIEVYUEVDVF9FUShJ
TlRfTUlOLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NSU4sIDApKTsKKyAgICBF
WFBFQ1RfRVEoSU5UX01JTiArIDEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01J
TiArIDEsIDApKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkRGlmZmVyZW5jZTxp
bnQzMl90PihJTlRfTUlOICsgMSwgMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NSU4gKyAxLCAyKSk7CisKKyAgICBFWFBFQ1RfRVEo
MCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUlOLCBJTlRfTUlOKSk7CisgICAg
RVhQRUNUX0VRKDAsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCwgSU5UX01B
WCkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+
KElOVF9NQVgsIElOVF9NSU4pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nQnVpbGRlci5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdCdWlsZGVyLmNwcAppbmRl
eCBiMTJiNTZkZjQyZTQ4OGVjMmY3ZjYzOTU4NjJjMzk5ZGU2ZjBiNTBhLi43OGM2YjliNzhlOTQ0
NmI5NGY0MjRlNjM3N2YzNTc0YTQxZDI0MTRlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9TdHJpbmdCdWlsZGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9TdHJpbmdCdWlsZGVyLmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIFRFU1QoU3Ry
aW5nQnVpbGRlclRlc3QsIFRvU3RyaW5nKQogCiAgICAgLy8gUmVzaXppbmcgdGhlIFN0cmluZ0J1
aWxkZXIgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIG9yaWdpbmFsIHJlc3VsdCBvZiB0b1N0cmluZygp
LgogICAgIHN0cmluZzEgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgYnVpbGRlci5yZXNpemUo
MTApOworICAgIGJ1aWxkZXIuc2hyaW5rKDEwKTsKICAgICBidWlsZGVyLmFwcGVuZCgiIyMjIik7
CiAgICAgRVhQRUNUX0VRKFN0cmluZygiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eHl6QUJDIiksIHN0cmluZzEpOwogfQpAQCAtMjYwLDcgKzI2MCw3IEBAIFRFU1QoU3RyaW5nQnVp
bGRlclRlc3QsIFRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSkKICAgICBzdHJpbmcxID0gYnVpbGRl
ci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKICAgICBFWFBFQ1RfRVEoY2FwYWNpdHksIGJ1
aWxkZXIuY2FwYWNpdHkoKSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBi
dWlsZGVyLmNoYXJhY3RlcnM4KCkpOwotICAgIGJ1aWxkZXIucmVzaXplKDEwKTsKKyAgICBidWls
ZGVyLnNocmluaygxMCk7CiAgICAgYnVpbGRlci5hcHBlbmQoIiMjIyIpOwogICAgIEVYUEVDVF9F
UShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQyIpLCBzdHJp
bmcxKTsKIH0KQEAgLTI4OCwxOCArMjg4LDE4IEBAIFRFU1QoU3RyaW5nQnVpbGRlclRlc3QsIFJl
c2l6ZSkKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5hcHBlbmQo
IjAxMjM0NTY3ODkiKTsKLSAgICBidWlsZGVyLnJlc2l6ZSgxMCk7CisgICAgYnVpbGRlci5zaHJp
bmsoMTApOwogICAgIEVYUEVDVF9FUSgxMFUsIGJ1aWxkZXIubGVuZ3RoKCkpOwogICAgIGV4cGVj
dEJ1aWxkZXJDb250ZW50KCIwMTIzNDU2Nzg5IiwgYnVpbGRlcik7Ci0gICAgYnVpbGRlci5yZXNp
emUoOCk7CisgICAgYnVpbGRlci5zaHJpbmsoOCk7CiAgICAgRVhQRUNUX0VRKDhVLCBidWlsZGVy
Lmxlbmd0aCgpKTsKICAgICBleHBlY3RCdWlsZGVyQ29udGVudCgiMDEyMzQ1NjciLCBidWlsZGVy
KTsKIAogICAgIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICBidWlsZGVyLnJlc2l6ZSg3KTsKKyAg
ICBidWlsZGVyLnNocmluayg3KTsKICAgICBFWFBFQ1RfRVEoN1UsIGJ1aWxkZXIubGVuZ3RoKCkp
OwogICAgIGV4cGVjdEJ1aWxkZXJDb250ZW50KCIwMTIzNDU2IiwgYnVpbGRlcik7Ci0gICAgYnVp
bGRlci5yZXNpemUoMCk7CisgICAgYnVpbGRlci5zaHJpbmsoMCk7CiAgICAgZXhwZWN0RW1wdHko
YnVpbGRlcik7CiB9CiAKQEAgLTMyOSw3ICszMjksNyBAQCBURVNUKFN0cmluZ0J1aWxkZXJUZXN0
LCBFcXVhbCkKICAgICBidWlsZGVyMi50b1N0cmluZygpOyAvLyBUZXN0IGFmdGVyIHJlaWZ5U3Ry
aW5nKCkuCiAgICAgRVhQRUNUX1RSVUUoYnVpbGRlcjEgIT0gYnVpbGRlcjIpOwogCi0gICAgYnVp
bGRlcjIucmVzaXplKDMpOworICAgIGJ1aWxkZXIyLnNocmluaygzKTsKICAgICBFWFBFQ1RfVFJV
RShidWlsZGVyMSA9PSBidWlsZGVyMik7CiAKICAgICBidWlsZGVyMS50b1N0cmluZygpOyAvLyBU
ZXN0IGFmdGVyIHJlaWZ5U3RyaW5nKCkuCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKaW5kZXggYWJk
M2FmZGU5MWYwOGU4Nzk0ZjEwYWJkNmQxMGRjMzg4ZDQ1YjI4NC4uMWRlY2YzMDczYWFmMzE0NWIx
ZDliOTcyNWI1Y2Q1YmUzYTI3NzJlNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcApAQCAtNTIs
MTIgKzUyLDQ2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvdGV4
dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CisjZW5kaWYKKwogI2lmIFVTRShDRikgJiYgIVBM
QVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKICNpbmNsdWRlICJXZWJBcmNoaXZl
RHVtcFN1cHBvcnQuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxXS1N0cmluZ1Jl
Zj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKFdLU3RyaW5nUmVmKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZyA/IFdLU3RyaW5nR2V0TGVu
Z3RoKG1fc3RyaW5nKSA6IDA7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuICFt
X3N0cmluZzsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3Jp
dGVUbyhDaGFyYWN0ZXJUeXBlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV0tTdHJpbmdSZWYg
bV9zdHJpbmc7Cit9OworCitpbmxpbmUgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+OjpT
dHJpbmdUeXBlQWRhcHRlcihXS1N0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX3N0cmluZyB7IHN0
cmluZyB9Cit7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8
V0tTdHJpbmdSZWY+Ojp3cml0ZVRvPExDaGFyPihMQ2hhciopIGNvbnN0Cit7Cit9CisKK3RlbXBs
YXRlPD4gaW5saW5lIHZvaWQgU3RyaW5nVHlwZUFkYXB0ZXI8V0tTdHJpbmdSZWY+Ojp3cml0ZVRv
PFVDaGFyPihVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RyaW5nKQor
ICAgICAgICBXS1N0cmluZ0dldENoYXJhY3RlcnMobV9zdHJpbmcsIHJlaW50ZXJwcmV0X2Nhc3Q8
V0tDaGFyKj4oZGVzdGluYXRpb24pLCBXS1N0cmluZ0dldExlbmd0aChtX3N0cmluZykpOworfQor
Cit9CisKIG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9w
ZXJ0eShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKQpAQCAtODksNyAr
MTIzLDcgQEAgc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLAogICAgIHJldHVybiBkdW1wUGF0aChjb250
ZXh0LCBub2RlT2JqZWN0KTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHJhbmdlVG9TdHIoV0tC
dW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxl
UmFuZ2VIYW5kbGVSZWYgcmFuZ2VSZWYpCitzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIHJhbmdlUmVmKQogewogICAgIGlmICghcmFuZ2VSZWYpCiAgICAgICAgIHJl
dHVybiAiKG51bGwpIjsKQEAgLTEzMCw0MyArMTY0LDI2IEBAIHN0YXRpYyBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdhdGlvblR5cGUg
dHlwCiAgICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0KIAotc3RhdGljIFdURjo6
U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxl
KQorc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xh
cmF0aW9uUmVmKQogewogICAgIC8vIER1bXBSZW5kZXJUcmVlIGNhbGxzIC1bRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiBkZXNjcmlwdGlvbl0sIHdoaWNoIGp1c3QgZHVtcHMgY2xhc3MgbmFtZSBhbmQg
b2JqZWN0IGFkZHJlc3MuCiAgICAgLy8gTm8gZXhpc3RpbmcgdGVzdHMgYWN0dWFsbHkgaGl0IHRo
aXMgY29kZSBwYXRoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgYmVjYXVzZSBXZWJDb3Jl
IGRvZXNuJ3QgY2FsbAogICAgIC8vIHRoZSBlZGl0aW5nIGNsaWVudCBpZiB0aGUgc3R5bGluZyBv
cGVyYXRpb24gc291cmNlIGlzIENvbW1hbmRGcm9tRE9NIG9yIENvbW1hbmRGcm9tRE9NV2l0aFVz
ZXJJbnRlcmZhY2UuCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPERPTUNTU1N0eWxlRGVjbGFyYXRpb24gQUREUkVTUz4i
KTsKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiAiPERP
TUNTU1N0eWxlRGVjbGFyYXRpb24gQUREUkVTUz4iX3M7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmlu
ZyBzdHJpbmcoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1ha2VT
dHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9j
b2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5D
b3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG9yaWdpbiks
ICd9Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmln
aW5Db3B5UHJvdG9jb2wob3JpZ2luKSkuZ2V0KCksICIsICIsIGFkb3B0V0soV0tTZWN1cml0eU9y
aWdpbkNvcHlIb3N0KG9yaWdpbikpLmdldCgpLCAiLCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9y
dChvcmlnaW4pLCAnfScpOwogfQogCi1zdGF0aWMgV1RGOjpTdHJpbmcgZnJhbWVUb1N0cihXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lKQogewogICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlOYW1lKGZyYW1lKSk7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGlm
IChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmICghV0tTdHJp
bmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIm1haW4gZnJhbWUgXCIiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCciJyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJtYWluIGZyYW1lIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFXS1N0cmlu
Z0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIGJvb2wgaXNNYWluID0gV0tCdW5kbGVGcmFt
ZUlzTWFpbkZyYW1lKGZyYW1lKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gaXNNYWluID8gIm1haW4gZnJhbWUiX3MgOiAiZnJhbWUgKGFub255
bW91cykiX3M7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoaXNNYWluID8gIm1haW4gZnJhbWUgXCIi
IDogImZyYW1lIFwiIiwgbmFtZS5nZXQoKSwgJyInKTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IGlzTG9jYWxGaWxlU2NoZW1lKFdLU3RyaW5nUmVmIHNjaGVtZSkKQEAgLTIxMCw3ICsyMjcsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc291cmNlVVJMKHVpbnQ2NF90IGlkZW50aWZpZXIs
IFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aQogICAgIGlmIChhc3NpZ25lZFVybHNDYWNoZSgpLmNv
bnRhaW5zKGlkZW50aWZpZXIpKQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhc3NpZ25l
ZFVybHNDYWNoZSgpLmdldChpZGVudGlmaWVyKSk7CiAgICAgZWxzZQotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIjx1bmtub3duPiIpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiPHVua25vd24+Iik7CiB9CiAKIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRC
dW5kbGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQpAQCAtMzkzLDc2ICs0MTAsNDMgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0KCkKIAogLy8gTG9hZGVyIENsaWVu
dCBDYWxsYmFja3MKIAotLy8gU3RyaW5nIG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dl
YkZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdLgotc3RhdGljIHZv
aWQgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKLXsKLSAgICBhdXRvIG5h
bWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAgIGlmIChXS0J1
bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRW1w
dHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgibWFpbiBmcmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJyInKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChX
S1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSBcIiIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnIicpOwotfQotCiBzdGF0aWMgdm9pZCBkdW1wTG9hZEV2ZW50KFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7Ci0gICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIC0gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZXZlbnROYW1lKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAtICIs
IGV2ZW50TmFtZSwgJ1xuJykpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3RE
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwg
U3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKK3N0YXRpYyBTdHJpbmcgc3RyaW5nKFdLVVJM
UmVxdWVzdFJlZiByZXF1ZXN0KQogewogICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVl
c3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBhdXRvIGZpcnN0UGFydHkgPSBhZG9wdFdLKFdLVVJM
UmVxdWVzdENvcHlGaXJzdFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7CiAgICAgYXV0byBodHRw
TWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0KSk7Ci0K
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TVVJMUmVxdWVzdCBVUkwgIiwgcGF0aFN1aXRh
YmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpLCAiLCBtYWluIGRvY3VtZW50IFVSTCAiLCBwYXRo
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpLCAiLCBodHRwIG1ldGhvZCAi
KTsKLSAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpKQotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIihub25lKSIpOwotICAgIGVsc2UKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoaHR0cE1ldGhvZCkpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCc+Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlcXVl
c3QgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAgICAg
IiwgbWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBh
cnR5LmdldCgpKSwKKyAgICAgICAgIiwgaHR0cCBtZXRob2QgIiwgV0tTdHJpbmdJc0VtcHR5KGh0
dHBNZXRob2QuZ2V0KCkpID8gIihub25lKSIgOiAiIiwgaHR0cE1ldGhvZC5nZXQoKSwgJz4nKTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFN0cmluZ0J1aWxkZXImIHN0
cmluZ0J1aWxkZXIsIGJvb2wgc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlKQorc3Rh
dGljIFN0cmluZyBzdHJpbmcoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgYm9vbCBzaG91bGRE
dW1wUmVzcG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7CiAgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdL
VVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAgaWYgKCF1cmwpIHsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghdXJsKQorICAgICAgICByZXR1cm4gIihudWxsKSJfczsKKyAgICBpZiAoIXNob3Vs
ZER1bXBSZXNwb25zZUhlYWRlcnMpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VS
TFJlc3BvbnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAg
ICAgICAgICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tVUkxSZXNwb25zZUhUVFBTdGF0dXNDb2Rl
KHJlc3BvbnNlKSwgJz4nKTsKICAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VS
TFJlc3BvbnNlICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgaHR0
cCBzdGF0dXMgY29kZSAiLCBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpKTsK
LSAgICBpZiAoc2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycykKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiwgIiwgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KHJl
c3BvbnNlKSwgIiBoZWFkZXJzIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKKyAg
ICByZXR1cm4gbWFrZVN0cmluZygiPE5TVVJMUmVzcG9uc2UgIiwgcGF0aFN1aXRhYmxlRm9yVGVz
dFJlc3VsdCh1cmwuZ2V0KCkpLAorICAgICAgICAiLCBodHRwIHN0YXR1cyBjb2RlICIsIFdLVVJM
UmVzcG9uc2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSksCisgICAgICAgICIsICIsIEluamVjdGVk
QnVuZGxlUGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChyZXNwb25zZSksICIgaGVhZGVycz4iKTsK
IH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLS8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Ig
bm9uIGNvY29hIHBvcnRzLgotLy8gICAgICAgIFtHVEtdW1dQRV0gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI5NQorCisvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
Zm9yIG5vbi1Db2NvYSBwb3J0cy4gW0dUS11bV1BFXSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg0Mjk1CiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3Bv
bnNlSGVhZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKICAgICByZXR1cm4g
MDsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0Vycm9yUmVmIGVycm9yLCBTdHJpbmdCdWlsZGVyJiBz
dHJpbmdCdWlsZGVyKQpAQCAtNDgwLDcgKzQ2NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1w
RXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0Vycm9yUmVmIGVycm9yLCBT
CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TRXJyb3IgZG9tYWluICIsIGVycm9yRG9t
YWluLCAiLCBjb2RlICIsIGVycm9yQ29kZSk7CiAgICAgaWYgKGF1dG8gdXJsID0gYWRvcHRXSyhX
S0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3IpKSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIiwgZmFpbGluZyBVUkwgXCIiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmlu
Zyh1cmwuZ2V0KCkpKSksICciJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZh
aWxpbmcgVVJMIFwiIiwgYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkuZ2V0KCks
ICciJyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKIH0KIApAQCAtNzAwLDcgKzY4
NCw3IEBAIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluCiAgICAgaWYgKGZhYnMoeCkgPD0gMC4wMDAw
MDAwMSAmJiBmYWJzKHkpIDw9IDAuMDAwMDAwMDEpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
c2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoImZy
YW1lICciLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkp
KSwgIicgIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAnIiwgYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKS5nZXQoKSwgIicgIik7CiAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoInNjcm9sbGVkIHRvICIsIHgsICcsJywgeSwgJ1xuJyk7CiB9CiAKQEAg
LTc1OCw5ICs3NDIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaQogICAgICAgICBpZiAoIWhh
c0RvY3VtZW50RWxlbWVudChzdWJmcmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHN1YmZyYW1lTmFtZSkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIidcbi0tLS0tLS0tXG4iKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIiwgc3Vi
ZnJhbWVOYW1lLmdldCgpLCAiJ1xuLS0tLS0tLS1cbiIpOwogCiAgICAgICAgIGR1bXBGcmFtZVRl
eHQoc3ViZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBkdW1wRGVzY2VuZGFudEZyYW1l
c1RleHQoc3ViZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwpAQCAtNzgwLDggKzc2Miw3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUsIFN0cmluZ0J1aWxkCiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAm
JiAhVVNFKERJUkVDVDJEKQogICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1l
Q29weVdlYkFyY2hpdmUoZnJhbWUpKTsKICAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tE
YXRhLmdldCgpKSkpOwotICAgIGF1dG8gY2ZTdHJpbmcgPSBXZWJDb3JlVGVzdFN1cHBvcnQ6OmNy
ZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGNmU3RyaW5nLmdldCgpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShj
ZkRhdGEuZ2V0KCkpLmdldCgpKTsKICNlbmRpZgogfQogCkBAIC04MDcsOSArNzg4LDkgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAgIHN3aXRjaCAoaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT53aGF0VG9EdW1wKCkpIHsKICAgICBjYXNlIFdoYXRUb0R1bXA6OlJlbmRl
clRyZWU6IHsKICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQcmlu
dGluZygpKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRv
cHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQ
cmludGluZyhtX3BhZ2UpKS5nZXQoKSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRp
b25Gb3JQcmludGluZyhtX3BhZ2UpKS5nZXQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29w
eVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fcGFnZSwgaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5yZW5kZXJUcmVlRHVtcE9wdGlvbnMoKSkpLmdldCgpKSk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+cmVuZGVyVHJlZUR1bXBPcHRpb25zKCkpKS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIFdoYXRUb0R1bXA6Ok1haW5GcmFtZVRleHQ6CkBAIC04OTAsMTkgKzg3
MSwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUo
V0tTdHJpbmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbQogICAgICAgICByZXR1cm47CiAKICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBG
cmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVy
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlVGl0
bGU6ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICB9Ci0KLSAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpIHsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJUSVRMRSBDSEFOR0VEOiAnIik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJ1xuIik7Ci0gICAgfQotCisgICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNr
cygpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdHJpbmcoZnJhbWUpLCAiIC0gZGlk
UmVjZWl2ZVRpdGxlOiAiLCB0aXRsZSwgJ1xuJyk7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKQorICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiVElUTEUgQ0hBTkdFRDogJyIsIHRpdGxlLCAiJ1xuIik7CiAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCkBAIC05
NTEsMTAgKzkyMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1CiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGR1
bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWls
ZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRp
cmVjdFRvVVJMOiAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybCksICdcbicpOwotICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAt
IHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJl
c3VsdCh1cmwpLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBlKQpAQCAtOTgyLDcgKzk1MSw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmluaXNoRG9j
dW1lbnRMb2FkRm9yRnJhbWUiKTsKIAogICAgIGlmICh1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxv
YWRFdmVudHMgPSBXS0J1bmRsZUZyYW1lR2V0UGVuZGluZ1VubG9hZENvdW50KGZyYW1lKSkKLSAg
ICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKGZyYW1lVG9TdHIoZnJh
bWUpLCAiIC0gaGFzICIsIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cywgIiBvbnVubG9hZCBoYW5k
bGVyKHMpXG4iKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmlu
ZyhzdHJpbmcoZnJhbWUpLCAiIC0gaGFzICIsIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cywgIiBv
bnVubG9hZCBoYW5kbGVyKHMpXG4iKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQpAQCAt
MTA0OSwxMSArMTAxOCw4IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6Ondp
bGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgICYmIGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgZHVt
cFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIHdpbGxTZW5kUmVxdWVzdCAiKTsKLSAgICAgICAgZHVt
cFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJpbmdC
dWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVkaXJlY3RS
ZXNwb25zZSAiKTsKLSAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIsIGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEFsbEhUVFBSZWRpcmVjdGVkUmVzcG9uc2VIZWFkZXJzKCkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiAtIHdpbGxTZW5kUmVxdWVzdCAiLCBzdHJpbmcocmVxdWVzdCksCisgICAgICAgICAg
ICAiIHJlZGlyZWN0UmVzcG9uc2UgIiwgc3RyaW5nKHJlc3BvbnNlLCBpbmplY3RlZEJ1bmRsZS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxIVFRQUmVkaXJlY3RlZFJlc3BvbnNlSGVhZGVycygp
KSwgJ1xuJyk7CiAgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKICAgICB9CiAKQEAgLTEwODYsMTEgKzEwNTIsNyBAQCBXS1VSTFJlcXVl
c3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZQogICAgICAgICAgICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlzSFRUUE9y
SFRUUFNTY2hlbWUobWFpbkZyYW1lU2NoZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3QobWFpbkZy
YW1lSG9zdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJc0V4dGVy
bmFsICYmICFpc0FsbG93ZWRIb3N0KGhvc3QuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKTsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFs
IFVSTCAiLCB1cmxTdHJpbmcuZ2V0KCksICdcbicpKTsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICB9CiAgICAgfQpAQCAtMTExNyw5ICsxMDc5LDcgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS0IKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwogICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVp
bGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2
ZVJlc3BvbnNlICIpOwotICAgICAgICBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdChyZXNwb25zZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkUmVj
ZWl2ZVJlc3BvbnNlICIsIHN0cmluZyhyZXNwb25zZSksICdcbicpOwogICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCkBA
IC0xMTMyLDE0ICsxMDkyLDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZl
UmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgYXV0byBt
aW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlwZShyZXNwb25z
ZSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiIGhhcyBNSU1FIHR5cGUgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcobWltZVR5cGVTdHJpbmcpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1
cmxTdHJpbmcuZ2V0KCksICIgaGFzIE1JTUUgdHlwZSAiLCBtaW1lVHlwZVN0cmluZy5nZXQoKSk7
CiAKICAgICBTdHJpbmcgcGxhdGZvcm1NaW1lVHlwZSA9IHBsYXRmb3JtUmVzcG9uc2VNaW1lVHlw
ZShyZXNwb25zZSk7CiAgICAgaWYgKCFwbGF0Zm9ybU1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwbGF0
Zm9ybU1pbWVUeXBlICE9IHRvV1RGU3RyaW5nKG1pbWVUeXBlU3RyaW5nKSkgewotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBidXQgcGxhdGZvcm0gcmVzcG9uc2UgaGFzICIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwbGF0Zm9ybU1pbWVUeXBlKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBidXQgcGxhdGZvcm0gcmVzcG9uc2UgaGFzICIsIHBs
YXRmb3JtTWltZVR5cGUpOwogICAgIH0KIAogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwpAQCAtMTE2Miw3ICsxMTE5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlz
aExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWUKIAogICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmll
ciwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBk
aWRGaW5pc2hMb2FkaW5nXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkRmlu
aXNoTG9hZGluZ1xuIik7CiAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOwogfQogCkBAIC0xMTc3LDcgKzExMzQsNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVu
ZGxlRnJhbWVSZQogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGR1bXBS
ZXNvdXJjZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICIpOwogCiAgICAg
ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJyb3IsIHN0cmluZ0J1
aWxkZXIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAtMTE5OSw3ICsxMTU2
LDYgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENhY2hlUmVzcG9uc2UoV0tCdW5k
bGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLAogICAgIHJldHVybiB0cnVlOwogfQogCi0KIC8v
IFBvbGljeSBDbGllbnQgQ2FsbGJhY2tzCiAKIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlTmF2aWdhdGlvbkFj
dGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tUeXBl
UmVmKiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTEyMjksMTMgKzExODUs
OSBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdl
UG9saWN5QWN0aW9uVXNlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcFBvbGljeUNhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uXG4iKTsKLSAgICAgICAgZHVtcFJlcXVlc3REZXNj
cmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJpbmdCdWlsZGVyKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVG
cmFtZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIiwgV0tCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9u
KSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwot
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiIC0gZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIiwgc3RyaW5nKHJlcXVlc3QpLAorICAgICAg
ICAgICAgIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1l
KSA/ICJ5ZXMiIDogIm5vIiwKKyAgICAgICAgICAgICIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5h
bGx5IC0gIiwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJM
cyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIiwgJ1xuJykpOwogICAgIH0KIAogICAg
IGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxl
ZCgpKQpAQCAtMTI0NSwxOSArMTE5NywxNiBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAg
IGF1dG8gdXJsU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CiAK
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CiAg
ICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpCi0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21w
b25lbnQodXJsLmdldCgpKSkpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYWRvcHRX
SyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKS5nZXQoKSk7CiAgICAgZWxz
ZQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJM
Q29weVN0cmluZyh1cmwuZ2V0KCkpKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rp
b25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkpKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIlwnIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFk
b3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpLmdldCgpKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIiwgTmF2aWdhdGlvblR5cGVUb1N0
cmluZyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9u
QWN0aW9uKSkuZ2V0KCksICdcJycpOwogICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0
V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFj
dGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7CiAgICAgICAgIGF1dG8gbm9kZUhh
bmRsZVJlZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0
VGVzdFJlc3VsdFJlZi5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBvcmlnaW5hdGluZyBmcm9tICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChk
dW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBvcmlnaW5hdGluZyBmcm9tICIsIGR1bXBQYXRo
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZUhhbmRsZVJlZi5nZXQoKSkpOwogICAgIH0KIAog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwpAQCAtMTI3Nyw3ICsxMjI2LDcgQEAgV0tC
dW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9y
UmVzcG9uc2UoV0tCdW5kbGVQYWcKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJs
ZWQoKSAmJiBXS1VSTFJlc3BvbnNlSXNBdHRhY2htZW50KHJlc3BvbnNlKSkgewotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kg
ZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUg
XCciLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5h
bWUocmVzcG9uc2UpKSksICJcJ1xuIikpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlz
IGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciLCBhZG9wdFdLKFdLVVJMUmVz
cG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9uc2UpKS5nZXQoKSwgIidcbiIpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91Z2g7CkBA
IC0xMzY3LDcgKzEzMTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbEFkZE1lc3Nh
Z2VUb0NvbnNvbGUoV0tTdHJpbmdSZWYgbWVzc2FnZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxl
LmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjpTdHJpbmcgbWVz
c2FnZVN0cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOworICAgIGF1dG8gbWVzc2FnZVN0cmlu
ZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOwogICAgIHNpemVfdCBudWxsQ2hhclBvcyA9IG1lc3Nh
Z2VTdHJpbmcuZmluZChVQ2hhcigwKSk7CiAgICAgaWYgKG51bGxDaGFyUG9zICE9IFdURjo6bm90
Rm91bmQpCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcudHJ1bmNhdGUobnVsbENoYXJQb3MpOwpAQCAt
MTM5Myw3ICsxMzQyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxF
R0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6IiwgdG9XVEZTdHJpbmcoc3RhdHVz
YmFyVGV4dCksICdcbicpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJp
bmcoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCBzdGF0dXNi
YXJUZXh0LCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2
YVNjcmlwdEFsZXJ0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0x
NDE2LDcgKzEzNjUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3Jp
cHRDb25maXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRgogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVzc2FnZSwg
V0tTdHJpbmdSZWYgZGVmYXVsdFZhbHVlLCBXS0J1bmRsZUZyYW1lUmVmKQogewotICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBST01QVDogIiwg
dG9XVEZTdHJpbmcobWVzc2FnZSksICIsIGRlZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5nU3BhY2VT
dHJpcFRyYWlsaW5nU3BhY2VzQWRkTmV3bGluZSh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKSkp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IlBST01QVDogIiwgbWVzc2FnZSwgIiwgZGVmYXVsdCB0ZXh0OiIsIGFkZExlYWRpbmdTcGFjZVN0
cmlwVHJhaWxpbmdTcGFjZXNBZGROZXdsaW5lKHRvV1RGU3RyaW5nKGRlZmF1bHRWYWx1ZSkpKSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgaW50NjRfdCB0b3RhbEJ5dGVz
TmVlZGVkKQpAQCAtMTQ0Miw3ICsxMzkxLDcgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLAogewog
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwog
ICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRhYmFzZUNh
bGxiYWNrcygpKQotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JT
ZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCB0b1dURlN0cmlu
ZyhkYXRhYmFzZU5hbWUpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0
YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIGRhdGFiYXNl
OiIsIGRhdGFiYXNlTmFtZSwgJ1xuJykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0g
NSAqIDEwMjQgKiAxMDI0OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTUyNSw3ICsx
NDc0LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1
bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCi0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElO
RyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiLCByYW5nZVRvU3RyKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVkQnVu
ZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5F
ZGl0aW5nSW5ET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSks
ICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRB
bGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTUzNiw3ICsxNDg1LDcgQEAgYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRp
bmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSks
ICdcbicpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiLCBzdHJpbmcobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTU0Niwy
MiArMTQ5NSwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZShX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSwgV0tCdW5kbGVSYQogICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewogICAgICAgICAiV2ViVmll
d0luc2VydEFjdGlvblR5cGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQi
LAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKICAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRO
b2RlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIG5vZGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJh
bmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAg
IiBzaG91bGRJbnNlcnROb2RlOiIsIGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9k
ZSksCisgICAgICAgICAgICAiIHJlcGxhY2luZ0RPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSwKKyAgICAgICAgICAgICIgZ2l2ZW5BY3Rpb246
IiwgaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0sICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJu
IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBA
IC0xNTcyLDIyICsxNTE2LDE3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNl
cnRUZXh0KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSCiAgICAgaWYgKCFp
bmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgc3RhdGljIGNvbnN0IGNoYXIgKmluc2VydGFjdGlvbnN0cmluZ1tdID0geworICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgY2hhciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CiAgICAgICAg
ICJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlv
blBhc3RlZCIsCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uRHJvcHBlZCIsCiAgICAgfTsK
IAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEluc2VydFRleHQ6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KHRleHQpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVwbGFjaW5n
RE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IgorICAgICAgICAgICAgIiBzaG91bGRJbnNl
cnRUZXh0OiIsIHRleHQsCisgICAgICAgICAgICAiIHJlcGxhY2luZ0RPTVJhbmdlOiIsIHN0cmlu
ZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSwKKyAgICAgICAgICAgICIg
Z2l2ZW5BY3Rpb246IiwgaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0sICdcbicpKTsKICAgICB9
CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0
aW5nKCk7CiB9CkBAIC0xNTk4LDEzICsxNTM3LDggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OnNob3VsZERlbGV0ZVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgaWYg
KCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxk
RGVsZXRlRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9T
dHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0
ZURPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykp
OwogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRp
dGluZygpOwogfQogCkBAIC0xNjE0LDI3ICsxNTQ4LDE3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgZnJv
bVJhCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmFmZmluaXR5c3RyaW5nW10gPSB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBhZmZpbml0eXN0cmluZ1tdID0gewog
ICAgICAgICAiTlNTZWxlY3Rpb25BZmZpbml0eVVwc3RyZWFtIiwKICAgICAgICAgIk5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIgogICAgIH07Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJv
b2xzdHJpbmdbXSA9IHsKLSAgICAgICAgIkZBTFNFIiwKLSAgICAgICAgIlRSVUUiCi0gICAgfTsK
IAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG9ET01SYW5nZToiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFu
Z2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgYWZmaW5pdHk6Iik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFmZmluaXR5c3RyaW5nW2FmZmluaXR5XSk7
IAotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzdGlsbFNlbGVjdGluZzoi
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm9vbHN0cmluZ1tzdGlsbFNlbGVjdGlu
Z10pOyAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVj
dGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiIK
KyAgICAgICAgICAgICIgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToiLCBzdHJpbmcobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpLAorICAgICAgICAgICAgIiB0b0RPTVJhbmdl
OiIsIHN0cmluZyhtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpLAorICAgICAgICAgICAg
IiBhZmZpbml0eToiLCBhZmZpbml0eXN0cmluZ1thZmZpbml0eV0sCisgICAgICAgICAgICAiIHN0
aWxsU2VsZWN0aW5nOiIsIHN0aWxsU2VsZWN0aW5nID8gIlRSVUUiIDogIkZBTFNFIiwgJ1xuJykp
OwogICAgIH0KICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRB
bGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE2NDYsMTMgKzE1NzAsOSBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYg
c3R5bGUsCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoc3R5bGVEZWNUb1N0cihzdHlsZSkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJh
bmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmpl
Y3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURToi
CisgICAgICAgICAgICAiIHNob3VsZEFwcGx5U3R5bGU6Iiwgc3R5bGVEZWNUb1N0cihzdHlsZSks
CisgICAgICAgICAgICAiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIsIHN0cmluZyhtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIH0KICAgICByZXR1cm4gaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE2NjUsMTEg
KzE1ODUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVnaW5FZGl0aW5nKFdLU3Ry
aW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6Iik7Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1
dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRp
bmc6Iiwgbm90aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTY4
MCwxMSArMTU5Niw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFdL
U3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiIpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGlu
ZzoiLCBub3RpZmljYXRpb25OYW1lLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTE2OTUsMTEg
KzE2MDcsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyaW5nUmVm
IG5vdGlmaWNhdGlvbk5hbWUpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwotICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iiwgbm90aWZpY2F0aW9u
TmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2Vs
ZWN0aW9uKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xNzEwLDExICsxNjE4LDcg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIpOwotICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKQEAgLTE3ODMsNyArMTY4Nyw3IEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmR1bXBIaXN0b3J5KCkKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygKICAgICAgICAgIlxuPT09
PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIsCi0gICAgICAg
IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlRHVtcEhpc3RvcnlGb3JUZXN0aW5nKG1f
cGFnZSwgdG9XSygiL0xheW91dFRlc3RzLyIpLmdldCgpKSkuZ2V0KCkpLAorICAgICAgICBhZG9w
dFdLKFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UsIHRvV0soIi9MYXlv
dXRUZXN0cy8iKS5nZXQoKSkpLmdldCgpLAogICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKICAgICApOwogfQo=
</data>
<flag name="commit-queue"
          id="450032"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428977</attachid>
            <date>2021-05-18 14:07:24 -0700</date>
            <delta_ts>2021-05-18 14:07:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225839-20210518140723.patch</filename>
            <type>text/plain</type>
            <size>151953</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZWQ5NjJmYzE1MGVmMmVlMjg2ZmJjNGJiZTZlYzJlNzIxMDFkNzY5Li4xNjAwMDQ0MDY1ZTc0ZTA0
MTE1NzYwNzM3N2E3MWU3ZjAwOGQ5NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAyMS0wNS0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBmcm9tIFN0cmlu
Z0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKTogVXNlIFN0
cmluZ0J1aWxkZXI6OmNsZWFyIGluc3RlYWQgb2YKKyAgICAgICAgU3RyaW5nQnVpbGRlcjo6cmVz
aXplOyBubyBhZHZhbnRhZ2UgdG8gdGhlIGxhdHRlciBhZnRlciBjYWxsaW5nIFN0cmluZ0J1aWxk
ZXI6OnRvU3RyaW5nLgorCisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KTogVXBkYXRl
IGZvciBuYW1lIGNoYW5nZSBvZgorICAgICAgICBTdHJpbmdCdWlsZGVyOjpyZXNpemUgdG8gU3Ry
aW5nQnVpbGRlcjo6c2hyaW5rLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdGlvbik6IERpdHRvLgor
CiAyMDIxLTA1LTE4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NjY1NS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYmYzZTM1N2RhNjA1
NmNmYjY4NmNlNTQzOTMzMmIwNDE3ZGUwMTQ3My4uMTczOTQ5M2FmM2U5YzNhZTFhYTczODFiOGE4
NGM4MTU5YzE3ZTQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxODMgQEAKKzIwMjEtMDUtMTggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQ0ZTdHJpbmdSZWYgYW5kIE5T
U3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWlsZGVyIGludG8gU3RyaW5nQ29uY2F0ZW5hdGVD
RgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODM5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICBUaGUgbmV3IGhl
YWRlciBtYWtlcyBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgd29yayB3aXRoIHN0cmluZyBjb25j
YXRlbmF0aW9uLAorICAgICAgICB3aGljaCBtZWFucyBpdCBub3cgd29ya3Mgd2l0aCB0aGUgdmFy
aWFkaWMgU3RyaW5nQnVpbGRlcjo6YXBwZW5kIGFuZCBtYWtlU3RyaW5nLAorICAgICAgICBhbmQg
c3RpbGwgd29ya3Mgd2l0aCB0aGUgc2luZ2xlLWFyZ3VtZW50IFN0cmluZ0J1aWxkZXI6OmFwcGVu
ZC4gTW9yZSBlZmZpY2llbnQKKyAgICAgICAgdGhhdCB0aGUgb2xkIHZlcnNpb24gYmVjYXVzZSBp
dCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHRlbXBvcmFyeSBXVEY6OlN0cmluZyBmb3IKKyAgICAgICAg
dGhlIDE2LWJpdCBjaGFyYWN0ZXIgcGF0aC4KKworICAgICAgICBBbHNvIG1hZGUgbWFueSBvdGhl
ciBzbWFsbCBpbXByb3ZlbWVudHMgdG8gdGhlIFN0cmluZ0J1aWxkZXIgaW1wbGVtZW50YXRpb24u
CisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgU3RyaW5n
Q29uY2F0ZW5hdGVDRi5oLgorCisgICAgICAgICogd3RmL0NoZWNrZWRBcml0aG1ldGljLmg6IFJl
bW92ZWQgQ29uZGl0aW9uYWxDcmFzaE9uT3ZlcmZsb3csIHdoaWNoIHdhcyBvbmx5CisgICAgICAg
IGhlcmUgZm9yIHVzZSBieSBTdHJpbmdCdWlsZGVyLCB3aGljaCBkb2VzIG5vdCB1c2UgQ2hlY2tl
ZEFyaXRobWV0aWMgYW55IG1vcmUuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1GVFcuY21ha2U6
IEFkZGVkIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4uCisgICAgICAgICogd3RmL1BsYXRmb3JtTWFj
LmNtYWtlOiBEaXR0by4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1XaW4uY21ha2U6IERpdHRvLgor
CisgICAgICAgICogd3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaDogTW92ZWQgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBpbnNpZGUgdGhlCisgICAgICAgIFdURiBuYW1lc3BhY2UuCisgICAgICAg
IChXVEY6OnNpZ25lZEFkZEludDMyT3ZlcmZsb3dzKTogUmVuYW1lZCB0aGlzIGZ1bmN0aW9uLiBU
aGUgdHlwZSBoZXJlIGlzCisgICAgICAgIGltcG9ydGFudCwgYW5kIHdlIGFyZSBub3QgZG9pbmcg
YW55dGhpbmcgdG8gcHJldmVudCB0eXBlIGNvbnZlcnNpb24gb3IKKyAgICAgICAgY3JlYXRlIGFt
YmlndWl0eSwgc28gaXQncyBnb29kIHRvIGJlIGV4cGxpY2l0IGluIHRoZSBmdW5jdGlvbiBuYW1l
LgorICAgICAgICAoV1RGOjpzYXR1cmF0ZWRTdW08aW50MzJfdD4pOiBSZW5hbWVkIHRoaXMgZnJv
bSBzYXR1cmF0ZWRBZGRpdGlvbiBmb3IKKyAgICAgICAgY2xhcml0eS4gVGhlIGZ1bmN0aW9uIHJl
dHVybnMgYSBzdW0sIHNvIHRoYXQncyBhIGJldHRlciBuYW1lIHRoYW4gY2FsbGluZworICAgICAg
ICBpdCAiYWRkaXRpb24iLiBBbHNvLCBpdCdzIGNsZWFyZXIgdG8gYmUgZXhwbGljaXQgYWJvdXQg
dGhlIHJldHVybiB0eXBlLgorICAgICAgICAoV1RGOjpzaWduZWRTdWJ0cmFjdEludDMyT3ZlcmZs
b3dzKTogUmVuYW1lZC4gU2FtZSByZWFzb24gYXMgYWJvdmUuCisgICAgICAgIChXVEY6OnNhdHVy
YXRlZERpZmZlcmVuY2U8aW50MzJfdD4pOiBEaXR0by4KKyAgICAgICAgKFdURjo6c2F0dXJhdGVk
U3VtKTogQWRkZWQuIERvZXMgdW5zaWduZWQgaW50ZWdlciBzYXR1cmF0ZWQgYWRkaXRpb24uCisg
ICAgICAgIFRoaXMgb25lIGNhbiBiZSB3cml0dGVuIGluIGEgcG9ydGFibGUgbWFubmVyIGFuZCBz
dGlsbCBnZXQgcmVhbGx5CisgICAgICAgIGVmZmljaWVudCBjb2RlIG9uIGF0IGxlYXN0IEludGVs
IGFuZCBBUk02NC4KKyAgICAgICAgKFdURjo6c2F0dXJhdGVkU3VtKTogQWRkZWQgYSBmdW5jdGlv
biB0ZW1wbGF0ZSB0aGF0IGxldHMgY2FsbGVycyBwYXNzCisgICAgICAgIGxhcmdlciBudW1iZXIg
b2YgYXJndW1lbnRzIHRvIHNhdHVyYXRlZFN1bSwgcmF0aGVyIHRoYW4gZXhhY3RseSB0d28uCisK
KyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6ZXhw
YW5kZWRDYXBhY2l0eSk6IFJlbmFtZWQgdG8gdXNlIHRoZSB0ZXJtIGNhcGFjaXR5IHJhdGhlciB0
aGFuCisgICAgICAgIGxlbmd0aCBmb3IgdGhlIG5ldyByZXF1aXJlZCBjYXBhY2l0eS4KKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZGlkT3ZlcmZsb3cpOiBJbXBsZW1lbnQgdGhlIG5ldyBh
cHByb2FjaCB0bworICAgICAgICBvdmVyZmxvdywgbWVhbmluZyB3ZSBuZWVkIHRvIHdyaXRlIHRo
ZSBDUkFTSCgpIGhlcmUgZXhwbGljaXRseSBhbmQKKyAgICAgICAgaW4gdGhlIG5vbi1jcmFzaGlu
ZyBtb2RlLCBzZXQgbV9sZW5ndGguCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlaWZ5
U3RyaW5nIGNvbnN0KTogQ2hhbmdlZCB0aGUgb3ZlcmZsb3cgY2hlY2sKKyAgICAgICAgaW50byBh
IFJFTEVBU0VfQVNTRVJULiBUaGlzIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgZG9pbmcgdGhlIGNo
ZWNrIHRoYXQKKyAgICAgICAgY2FsbGVycyB3ZXJlIGRvaW5nIGVhcmxpZXIsIHNvIHdlIHdhbnQg
aXQgaW4gcHJvZHVjdGlvbiBidWlsZHMuIEFsc28KKyAgICAgICAgc2ltcGxpZmllZCB0aGlzIHNp
bmNlIG91ciBtX2xlbmd0aCBtZW1iZXIgaXMgYSBzaW1wbGUgaW50ZWdlciBub3csCisgICAgICAg
IGFuZCByZW1vdmVkIHRoZSB1bnVzZWQgbV9pc1JlaWZpZWQuCisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OnNocmluayk6IFJlbmFtZWQgdGhpcyB0byBzaHJpbmsgdG8gbWF0Y2ggdGhlCisg
ICAgICAgIFZlY3Rvcjo6c2hyaW5rIGZ1bmN0aW9uLCBzaW5jZSB0aGlzIGhhcyBuZXZlciBzdXBw
b3J0ZWQgbWFraW5nIHRoZQorICAgICAgICBidWlsZGVyIGxhcmdlci4gUmVtb3ZlZCB1bm5lY2Vz
c2FyeSBvdmVyZmxvdyBjaGVja3MsIHNpbmNlIHNocmlua2luZworICAgICAgICBjYW5ub3QgY2F1
c2Ugb3ZlcmZsb3cuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVy
KTogUmVwbGFjZWQgdHdvIHNlcGFyYXRlIGZ1bmN0aW9ucworICAgICAgICB3aXRoIGEgc2luZ2xl
IHNpbXBsZXIgZnVuY3Rpb24gdGVtcGxhdGUuIFJlbW92ZWQgZXh0cmEgb3ZlcmZsb3cgY2hlY2tz
CisgICAgICAgIGJlY2F1c2UgdGhlIFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQg
ZnVuY3Rpb24gYWxyZWFkeSBkb2VzCisgICAgICAgIHRoZSBvbmx5IG92ZXJmbG93IGNoZWNrIHdl
IG5lZWQuIEFsc28gbW92ZSB0byBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycworICAgICAgICBm
b3IgY29weWluZyBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIHVzaW5nIHN0ZDo6bWVtY3B5IGRpcmVj
dGx5LgorICAgICAgICBSZW1vdmVkIGNvZGUgdG8gc2V0IG1faXM4Qml0IGFuZCBtX2J1ZmZlckNo
YXJhY3RlcnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIp
OiBSZXBsYWNlZCB0d28gc2VwYXJhdGUKKyAgICAgICAgZnVuY3Rpb25zIHdpdGggYSBmdW5jdGlv
biB0ZW1wbGF0ZSBhbmQgYSBjb3ZlciB0aGF0IGNhbGxzIHRoZQorICAgICAgICBhcHByb3ByaWF0
ZSBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUgZm9yIHBsYWNlcyB3aGVyZSB3ZSBhcmVuJ3QKKyAg
ICAgICAgYWxyZWFkeSBpbiBjaGFyYWN0ZXItdHlwZS1zcGVjaWZpYyBjb2RlIHBhdGhzLiBUaGlz
IHZlcnNpb24gbm93CisgICAgICAgIHN1cHBvcnRzIGFsbG9jYXRpbmcgYSBidWZmZXIgZm9yIHRo
ZSBmaXJzdCB0aW1lIGluIGNhc2VzIHdoZXJlCisgICAgICAgIHdlIGhhdmUgbV9zdHJpbmcgYW5k
IG5vdCBtX2J1ZmZlciwgd2hpY2ggdXNlZCB0byBiZSBoYW5kbGVkIGF0CisgICAgICAgIHRoZSBo
aWdoZXIgbGV2ZWwuIFJlbW92ZWQgY29kZSB0byBzZXQgbV9idWZmZXJDaGFyYWN0ZXJzLgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkpOiBSZXdyb3RlIGZvciBz
aW1wbGljaXR5LgorICAgICAgICBCeSByZWx5aW5nIG9uIHRoZSBvdmVyZmxvdyBjaGVja2luZyBp
bnNpZGUgcmVhbGxvY2F0ZUJ1ZmZlciBhbmQKKyAgICAgICAgYWxsb2NhdGVCdWZmZXIgd2Ugbm8g
bG9uZ2VyIG5lZWQgY2hlY2tpbmcgb2YgdGhlIHBhc3NlZC1pbiB2YWx1ZQorICAgICAgICBhdCB0
aGlzIGxldmVsLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JB
cHBlbmRpbmcpOiBSZW1vdmVkIHRoZQorICAgICAgICB2ZXJzaW9uIG9mIHRoaXMgdGhhdCB0YWtl
cyBhZGRpdGlvbmFsTGVuZ3RoIHNpbmNlIGl0J3MKKyAgICAgICAgcG90ZW50aWFsbHkgY29uZnVz
aW5nIHRvIGhhdmUgYSBmYW1pbHkgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSB0aGUKKyAgICAgICAg
c2FtZSBuYW1lIGFuZCB0YWtlIHRoZSBzYW1lIHR5cGUgb2YgYXJndW1lbnQsIGJ1dCBpbnRlcnBy
ZXQgaXQKKyAgICAgICAgc3VidGx5IGRpZmZlcmVudGx5LiBTdHJlYW1saW5lZCB0aGUgY29kZSB1
c2luZyBzdGQ6OmV4Y2hhbmdlLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBhbHNvIGluY2x1
ZGVzIHRoZSBsb2dpYyBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lZAorICAgICAgICBleHRlbmRCdWZm
ZXJGb3JBcHBlbmRpbmdXaXRob3V0T3ZlcmZsb3dDaGVjaywgd2hpY2ggd2FzIHN1YnRseQorICAg
ICAgICBtaXNuYW1lZCBzaW5jZSB0aGF0IHdhcyBub3QgdGhlIG9ubHkgc2VtYW50aWMgZGlmZmVy
ZW5jZS4gQWxzbworICAgICAgICByZW1vdmVkIHRoZSBBTFdBWVNfSU5MSU5FIGJlY2F1c2UgdGhl
IGNvbXBpbGVyIHdpbGwgZG8gdGhlIHJpZ2h0CisgICAgICAgIHRoaW5nIHdpdGhvdXQgc3VjaCBo
ZWF2eSBoYW5kZWQgYWR2aWNlLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRC
dWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSk6IFN0cmVhbWxpbmVkCisgICAgICAgIHRoaXMgYnkg
dXNpbmcgc3RkOjpleGNoYW5nZSBhbmQgcmVtb3ZlZCBhZGRpdGlvbmFsIG92ZXJmbG93IGNoZWNr
cworICAgICAgICBhdCB0aGlzIGxldmVsIHNpbmNlIHJlYWxsb2NhdGVCdWZmZXIgYWxyZWFkeSBk
b2VzIHRoZW0uIEFsc28gYWRkZWQKKyAgICAgICAgYSBjaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUg
dGhlIG5ldyB0b3RhbCBsZW5ndGggaXMgMCwgd2hpY2ggd291bGQKKyAgICAgICAgbm90IGJlIGhh
bmRsZWQgY29ycmVjdGx5IGFuZCBlZmZpY2llbnRseSBieSByZWFsbG9jYXRlQnVmZmVyLgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdMQ2hhcik6
IFJlbmFtZWQgdGhpcworICAgICAgICBmcm9tIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgsIHNp
bmNlIGl0J3Mgbm93IGlkZW50aWNhbCB0byBjYWxsaW5nCisgICAgICAgIGV4dGVuZEJ1ZmZlckZv
ckFwcGVuZGluZzxMQ2hhcj4sIGV4Y2VwdCBmb3IgaW5saW5pbmcgYW5kIGxpbmthZ2UuCisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNv
bnZlcnQpOgorICAgICAgICBSZW5hbWVkIHRoaXMgZnJvbSBleHRlbmRCdWZmZXJGb3JBcHBlbmRp
bmcxNi4gSXQgaXMgZGlmZmVyZW50IGZyb20KKyAgICAgICAgdGhlIG90aGVyIGV4dGVuZEJ1ZmZl
ciBmdW5jdGlvbnMgYmVjYXVzZSBpcyBzdXBwb3J0cyB1cGNvbnZlcnRpbmcKKyAgICAgICAgZnJv
bSBMQ2hhciB0byBVQ2hhci4gTGlrZSB0aGUgb3RoZXJzIGl0IHJlbGllcyBvbiBhbGxvY2F0ZUJ1
ZmZlcgorICAgICAgICBmb3IgdGhlIG92ZXJmbG93IGNoZWNraW5nLgorICAgICAgICAoV1RGOjpT
dHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKTogUmVtb3ZlZCBhbiB1bm5lY2Vzc2FyeQor
ICAgICAgICBhc3NlcnRpb24gdGhhdCB0aGUgY2hhcmFjdGVycyBwb2ludGVyIGlzIG5vbi1udWxs
OyB0aGF0IHdpbGwgZmFpbAorICAgICAgICBpbiBhbiBvYnZpb3VzIHdheSB3aXRob3V0IGFuIGFz
c2VydGlvbi4gU2ltcGxpZmllZCB0aGUgbG9naWMgYW5kCisgICAgICAgIHJlbW92ZWQgc29tZSBp
bnZhcmlhbnQgYXNzZXJ0aW9ucyB0aGF0IGRvbid0IGhlbHAgdXMgbXVjaC4gQ2hhbmdlZAorICAg
ICAgICBvdmVyZmxvdyBjaGVja2luZyBieSB1c2luZyBzYXR1cmF0ZWRTdW0gdG8gY29tcHV0ZSB0
aGUgbmV3IGxlbmd0aC4KKyAgICAgICAgSW4gb3ZlcmZsb3cgY2FzZXMsIHRoZSBuZXcgc3VtIHdp
bGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0KKyAgICAgICAgc3RyaW5nIGxlbmd0aCwgYnV0
IHdpbGwgZml0IGluIGFuIHVuc2lnbmVkLCBzbyB3ZSBjYW4gcGFzcyBpdAorICAgICAgICBkb3du
IHRvIGxvd2VyIGxldmVscyBhbmQgbGV0IGZ1bmN0aW9ucyBsaWtlIHJlYWxsb2NhdGVCdWZmZXIg
ZG8KKyAgICAgICAgdGhlIGFjdHVhbCBvdmVyZmxvdyBjaGVja2luZy4gQWxzbyB1c2UgU3RyaW5n
SW1wbDo6Y29weUNoYXJhY3RlcnMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVu
ZCk6IFJlbW92ZWQgdGhlIENGU3RyaW5nUmVmIG92ZXJsb2FkLgorICAgICAgICAoV1RGOjpTdHJp
bmdCdWlsZGVyOjpzaG91bGRTaHJpbmtUb0ZpdCBjb25zdCk6IFJlbmFtZSB0aGlzIGZyb20KKyAg
ICAgICAgY2FuU2hyaW5rLiBTaW1wbGlmeSB0aGUgZnVuY3Rpb24gYSBiaXQgYW5kIHJlbW92ZSB0
aGUgdmFndWUgRklYTUUKKyAgICAgICAgdGhhdCBzYXlzICJ0aGlzIHNob3VsZCBiZSB0dW5lZCIu
IFRoYXQgbWF5IGJlIHNvLCBidXQgdGhlIEZJWE1FCisgICAgICAgIGlzIG5vdCByZWFsbHkgZHJp
dmluZyB1cyB0byBhY3Rpb24uCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnNocmlua1Rv
Rml0KTogU2ltcGxpZnkgYnkgdXNpbmcgdGhlIG5ldworICAgICAgICByZWFsbG9jYXRlQnVmZmVy
IGFuZCBzdGQ6OmV4Y2hhbmdlLiBSZW1vdmVkIHVubmVlZGVkIGFzc2VydGlvbgorICAgICAgICBh
Ym91dCBvdmVyZmxvdyB0aGF0IGRvZXNuJ3QgaGVscCB1cyBtYWludGFpbiB0aGUgaW52YXJpYW50
LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjppc0FsbEFTQ0lJIGNvbnN0KTogV2FzIHRl
bXB0ZWQgdG8gcmVtb3ZlCisgICAgICAgIHRoaXMgZnVuY3Rpb24sIGJ1dCBmb3Igbm93IGp1c3Qg
bWFkZSBpdCB1c2UgdGhlIFN0cmluZ1ZpZXcKKyAgICAgICAgdmVyc2lvbiBmb3IgYnJldml0eS4K
KworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaDogUmVtb3ZlZCBtYW55IHVubmVl
ZGVkIGluY2x1ZGVzLCBhbmQKKyAgICAgICAgbm90YWJseSBpbmNsdWRlZCBTYXR1cmF0ZWRBcml0
aG1ldGljLmggaW5zdGVhZCBvZgorICAgICAgICBDaGVja2VkQXJpdGhtZXRpYy5oIGJlY2F1c2Ug
d2Ugbm93IHVzZSB0aGUgZm9ybWVyIGluc3RlYWQgb2YgdGhlCisgICAgICAgIGxhdHRlci4gQ2hh
bmdlZCB0aGUgb3ZlcmZsb3cgY2hlY2tpbmcgaW1wbGVtZW50YXRpb24gdG8gd29yaworICAgICAg
ICBtb3JlIHNpbXBseSBiYXNlZCBvbiBzYXR1cmF0ZWQgYWRkaXRpb24gcmF0aGVyIHRoYW4gQ2hl
Y2tlZC4KKyAgICAgICAgVGhpcyBhbGxvd2VkIHVzIHRvIGdldCByaWQgb2YgZGVwZW5kZW5jeSBv
biBvdXIgb3duIHVuaXF1ZSBtb2RlCisgICAgICAgIGZvciBDaGVja2VkLCBjYWxsZWQgQ29uZGl0
aW9uYWxDcmFzaE9uT3ZlcmZsb3cuIFJlbW92ZWQgYQorICAgICAgICBjb21tZW50IGFib3V0IG1h
a2luZyBhIHRlbXBsYXRpemVkIHZlcnNpb24gb2YgU3RyaW5nQnVpbGRlci4KKyAgICAgICAgV2Ug
Y2FuIGRvIGl0IGlmIHdlIGxpa2UsIGJ1dCBkb2VzIG5vdCBzZWVtIHVyZ2VudC4gTW92ZWQKKyAg
ICAgICAgZnVjbnRpb24gYm9kaWVzIG91dCBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBzbyBpdCdz
IGVhc2llciB0bworICAgICAgICBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBjbGFzcy4gU2lu
Y2UgbV9sZW5ndGggaXMgbm93IGFuCisgICAgICAgIG9yZGluYXJ5IGludGVnZXIsIHRoZSBjaGVj
ayBmb3Igb3ZlcmZsb3dlZCBzaW1wbHkgY2hlY2tzIHRvIHNlZQorICAgICAgICBpZiB0aGUgbGVu
Z3RoIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguIFdoZW4gd2UKKyAg
ICAgICAgZW5jb3VudGVyIG92ZXJmbG93IHRoYXQgaXMgbm90IGFib3V0IGxlbmd0aCBjb21wdXRh
dGlvbiwgd2Ugc2V0CisgICAgICAgIHRoZSBsZW5ndGggdG8gdGhlIG1heGltdW0gaW50ZWdlciB0
byBpbmRpY2F0ZSB0aGUgZmFpbHVyZS4KKyAgICAgICAgRGVsZXRlZCB0aGUgYXBwZW5kIG92ZXJs
b2FkcyBmb3IgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nLgorICAgICAgICBSZW1vdmVkIG1fYnVm
ZmVyQ2hhcmFjdGVycywgbV9pczhCaXQsIGFuZCBtX2lzUmVpZmllZC4KKyAgICAgICAgKFdURjo6
U3RyaW5nQnVpbGRlcjo6U3RyaW5nQnVpbGRlcik6IFNpbXBsaWZpZWQgdGhlIGNvbnN0cnVjdG9y
CisgICAgICAgIHNpbmNlIHdlIG9ubHkgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBtX3Nob3VsZENy
YXNoT25PdmVyZmxvdyBtZW1iZXIuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNsZWFy
KTogRml4ZWQgYSBtaXN0YWtlIHdoZXJlIHRoaXMgd2FzIG5vdAorICAgICAgICByZXNldHRpbmcg
dGhlIG1faXNSZWlmaWVkIGZsYWcuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnN3YXAp
OiBVcGRhdGVkIGZvciBjaGFuZ2VzIGluIHRoZSBkYXRhIG1lbWJlcnMuCisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6Om9wZXJhdG9yIFN0cmluZ1ZpZXcgY29uc3QpOiBNb3ZlZCBvdXQgb2Yg
bGluZS4KKyAgICAgICAgTWFkZSBzdXJlIHRvIGNhbGwgdGhlIGxlbmd0aCgpIGZ1bmN0aW9uIHNv
IHdlIGNyYXNoIGlmIHRoaXMgaXMKKyAgICAgICAgY2FsbGVkIGFmdGVyIG92ZXJmbG93LgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOiBSZW1vdmUgc29tZSBvZiB0aGUgdW5u
ZWNlc3NhcnkgY2hlY2tzCisgICAgICAgIGFuZCBzcGVjaWFsIGNhc2VzIGluIHRoZSB2YXJpb3Vz
IHZlcnNpb25zIG9mIGFwcGVuZC4gTW9zdCBvZiB0aGUKKyAgICAgICAgY2hlY2tpbmcgaXMgZG9u
ZSBpbnNpZGUgYXBwZW5kQ2hhcmFjdGVycywgd2l0aCBvbmx5IGEgZmV3IGV4Y2VwdGlvbnMuCisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZFN1YnN0cmluZyk6IE1vdmVkIG91dCBv
ZiB0aGUgY2xhc3MKKyAgICAgICAgZGVmaW5pdGlvbiB3aXRob3V0IG1ha2luZyBzaWduaWZpY2Fu
dCBjaGFuZ2VzLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXIp
OiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcpOiBHcmVhdGx5
IHNpbXBsaWZpZWQgdGhpcyBmdW5jdGlvbgorICAgICAgICBieSByZWx5aW5nIG9uIG92ZXJmbG93
IGNoZWNraW5nIGluIHRoZSByZWlmeVN0cmluZyBmdW5jdGlvbiBpbnN0ZWFkCisgICAgICAgIG9m
IGRvaW5nIGl0IGhlcmUgYW5kIHJlbW92aW5nIHVubmVlZGVkIGludmFyaWFudCBhc3NlcnRpb25z
LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjp0b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6dG9BdG9tU3RyaW5n
IGNvbnN0KTogUmV3cm90ZSB0aGlzIHRvIHN0cmVhbWxpbmUsCisgICAgICAgIHJlbW92aW5nIGV4
cGxpY2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6bGVu
Z3RoIGNvbnN0KTogTW92ZWQgb3V0IG9mIHRoZSBjbGFzcworICAgICAgICBkZWZpbml0aW9uIHdp
dGhvdXQgbWFraW5nIHNpZ25pZmljYW50IGNoYW5nZXMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OmNhcGFjaXR5IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxk
ZXI6Om9wZXJhdG9yW10gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRl
cjo6Y2hhcmFjdGVycyBjb25zdCk6IEltcGxlbWVudGVkIHRoaXMgb3BlcmF0aW9uCisgICAgICAg
IGluIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZS4gTm93IHJhdGhlciB0aGFuIGhhdmluZyB0aGlzIGNh
bGwgdGhlCisgICAgICAgIGNoYXJhY3RlcnM4IGFuZCBjaGFyYWN0ZXJzMTYgZnVuY3Rpb25zLCB0
aGV5IGNhbiBjYWxsIGl0LgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJD
aGFyYWN0ZXJzPExDaGFyPik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6
OmdldEJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nQnVpbGRlcjo6YXBwZW5kRnJvbUFkYXB0ZXJzKTogVXNlIHNhdHVyYXRlZFN1bSB0bworICAg
ICAgICBjb21wdXRlIHRoZSByZXF1aXJlZCBsZW5ndGgsIHdoaWNoIGFsbG93cyB0aGUgZXh0ZW5k
QnVmZmVyCisgICAgICAgIGZ1bmN0aW9ucyB0byBkbyBvdmVyZmxvdyBjaGVja2luZyB3aXRob3V0
IGhhdmluZyB0byB0YWtlIHNwZWNpYWwKKyAgICAgICAgY2hlY2tlZCBpbnRlZ2VyIHR5cGVzIGZv
ciBhcmd1bWVudHMuCisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmVxdWFsKTogSW1wbGVt
ZW50IHVzaW5nIFN0cmluZ1ZpZXcuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
SlNPTi5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1b3RlZEpTT05T
dHJpbmcpOiBTaW1wbGlmaWVkIHRoZSBjaGVja2VkCisgICAgICAgIGFyaXRobWV0aWMgZm9yIGNv
bXB1dGluZyB0aGUgcmVxdWlyZWQgY2FwYWNpdHkuIFVwZGF0ZWQgc2luY2Ugd2UKKyAgICAgICAg
cmVtb3ZlZCBtX2J1ZmZlckNoYXJhY3RlcnMgYW5kIGNoYW5nZWQgdGhlIHR5cGUgb2YgbV9sZW5n
dGguCisKKyAgICAgICAgKiB3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg6IEFkZGVk
LiBTcGVjaWFsaXplcyBTdHJpbmdUeXBlQWRhcHRlciBmb3IKKyAgICAgICAgYm90aCBDRlN0cmlu
Z1JlZiBhbmQgTlNTdHJpbmcgKi4gSWYgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyIHdvcmtzIGZvciBM
YXRpbi0xLCB0aGVuCisgICAgICAgIGRvZXMgdGhlIDgtYml0IGNvZGUgcGF0aCwgb3RoZXJ3aXNl
IHRoZSAxNi1iaXQuCisKKyAgICAgICAgKiB3dGYvdGV4dC9jb2NvYS9UZXh0U3RyZWFtQ29jb2Eu
bW06IEluY2x1ZGUgU3RyaW5nQ29uY2F0ZW5hdGVDRi5oLCBzaW5jZSBpdCdzCisgICAgICAgIG5v
dyBuZWVkZWQgdG8gdXNlIENGU3RyaW5nUmVmIHdpdGggU3RyaW5nQnVpbGRlci4KKwogMjAyMS0w
NS0xOCAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9zaGlha2kuaml0c3VrYXdhQHNvbnkuY29tPgog
CiAgICAgICAgIFtQbGF5U3RhdGlvbl0gRml4IFBsYXlTdGF0aW9uIHBvcnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA0OGI1ZDBhNjQ5MjNkMjI2NWI2NzI2ZTNmNGI5MDI3NTdjYjBmZWY3Li5iNGY4NzEwOTNkM2Q3
ZjFkYTA0Mzc5NWJkZmZkOTk1ZWNkOGYwNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAK
KzIwMjEtMDUtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1v
dmUgQ0ZTdHJpbmdSZWYgYW5kIE5TU3RyaW5nIHN1cHBvcnQgZnJvbSBTdHJpbmdCdWlsZGVyIGlu
dG8gU3RyaW5nQ29uY2F0ZW5hdGVDRgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1ODM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4K
KworICAgICAgICAqIE1vZHVsZXMvYWlycGxheS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1lZGlhUHJvZHVjZXJTdGF0ZVN0cmluZyk6IFVzZSBTdHJpbmdC
dWlsZGVyIGV4Y2x1c2l2ZWx5IGluc3RlYWQgb2YKKyAgICAgICAgbWl4aW5nIGl0IHdpdGggbWFr
ZVN0cmluZy4gQWxzbyB1cGRhdGVkIGZvciBTdHJpbmdCdWlsZGVyOjpzaHJpbmsgbmFtZS4KKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0cmlwVHJhaWxpbmdOZXdsaW5lKTogVXBkYXRlZCBmb3IgU3RyaW5nQnVpbGRlcjo6
c2hyaW5rIG5hbWUuCisKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
OjpjYXB0aW9uc1RleHRDb2xvciBjb25zdCk6IFR3ZWFrZWQKKyAgICAgICAgY29kaW5nIHN0eWxl
IGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ1NTKTogVXNlIHZhcmlhZGljIFN0cmlu
Z0J1aWxkZXI6OmFwcGVuZCBpbnN0ZWFkIG9mIG1hbnkKKyAgICAgICAgc2VwYXJhdGUgY2FsbHMu
CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlv
bnNEZWZhdWx0Rm9udENTUyBjb25zdCk6CisgICAgICAgIFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEg
Yml0LCBhbmQgdXNlIHZhcmlhZGljIFN0cmluQnVpbGRlcjo6YXBwZW5kIGNhbGxzCisgICAgICAg
IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIGFuZCBzdHJlYW1saW5lIHRoZSBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25z
U3R5bGVTaGVldE92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgRGl0dG8uIEFsc28gcmVtb3ZlZCB1
bm5lY2Vzc2FyeSBjaGVja3MgdGhhdCBzdHJpbmdzIGFyZSBlbXB0eSBiZWZvcmUgYXBwZW5kaW5n
LgorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN5bmNocm9ub3VzU2Nyb2xs
aW5nUmVhc29uc0FzVGV4dCk6CisgICAgICAgIFVwZGF0ZWQgZm9yIFN0cmluZ0J1aWxkZXI6OnNo
cmluayBuYW1lLgorCisgICAgICAgICogcGxhdGZvcm0vTGF5b3V0VW5pdC5oOiBVcGRhdGVkIGZv
ciBzYXR1cmF0ZWRTdW0vRGlmZmVyZW5jZSBuYW1lcy4KKworICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JTZXNzaW9uIGNvbnN0KTogVHdl
YWtlZCBjb2RpbgorICAgICAgICBzdHlsZSBhIGJpdCwgYW5kIHVzZSB2YXJpYWRpYyBTdHJpbkJ1
aWxkZXI6OmFwcGVuZCBjYWxscyB0byByZWR1Y2UgdGhlCisgICAgICAgIG51bWJlciBvZiBjYWxs
cyBhbmQgc3RyZWFtbGluZSB0aGUgY29kZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJD
b3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBsYW5Db3VudGVyKTogVXBkYXRlZCBmb3Ig
c2F0dXJhdGVkU3VtIG5hbWUuCisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50
ZXIpOiBEaXR0by4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nQnVpbGRlcjo6cmVzdWx0KTogVXBkYXRlZCBm
b3IgU3RyaW5nQnVpbGRlcjo6c2hyaW5rIG5hbWUuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYWdlTWVkaWFTdGF0ZSk6IERp
dHRvLgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzYXZlUmVzdWx0VG9TdHJpbmcpOiBEaXR0by4KKwogMjAyMS0wNS0xOCAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUF0gUmVtb3RlQXVkaW9T
ZXNzaW9uIGNhbGxzIGludG8gQVZBdWRpb1Nlc3Npb24gd2hlbiBHUFVQIGlzIGVuYWJsZWQsIGNh
dXNpbmcgaGFuZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjRlYmYwNzhkMzczZTA1YzlmMzZjNTdkMTE2YWM4Yzc2
Zjg3YjEyMy4uNDFmNDA4MDQ1ZmIxODE5YjMzOGE1NDM2YTE5OTM2ZjUyNDczMTA0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBm
cm9tIFN0cmluZ0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0Nv
Y29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6IFVzZSBtYWtlU3RyaW5nIGlu
c3RlYWQKKyAgICAgICAgb2YgU3RyaW5nQnVpbGRlci4KKwogMjAyMS0wNS0xOCAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBFbmFibGluZyBJUEMgdGVzdGluZyBB
UEkgc2hvdWxkIHByZXZlbnQgV2ViQ29udGVudCBwcm9jZXNzIGZyb20gZ2V0dGluZyB0ZXJtaW5h
dGVkIGluIG1vcmUgY2FzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Db25zb2xlTWVzc2FnZS5jcHAKaW5kZXggMzM3Y2E3ZWUwZTI5NTkwYjM1ZjA4MWFjNzNiOGQ1
OWI4MjMwMjlhNS4uZWY4OWFlZDVkYWY1OTQ1YmIxNzRhMzMwZmU5ZmM2ZDQ5ZjJhMDFjMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5j
cHAKQEAgLTEzNiw3ICsxMzYsNyBAQCBDb25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZQogICAgICAgICBj
YXNlIEpTT05Mb2dWYWx1ZTo6VHlwZTo6SlNPTjoKICAgICAgICAgICAgIGlmIChidWlsZGVyLmxl
bmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgbV9qc29uTG9nVmFsdWVzLmFwcGVuZCh7IEpTT05M
b2dWYWx1ZTo6VHlwZTo6U3RyaW5nLCBidWlsZGVyLnRvU3RyaW5nKCkgfSk7Ci0gICAgICAgICAg
ICAgICAgYnVpbGRlci5yZXNpemUoMCk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5jbGVhcigp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2pzb25Mb2dWYWx1ZXMuYXBwZW5kKG1l
c3NhZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9i
amVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcApp
bmRleCA1ZTFjYzlmYmQyZTE1MWY2ZDM3ODQwNGU2MGNmYTliYjllNzZlNzRkLi42MTBmMzZjZmVi
Y2RiNDc3YTkyNDRkZThkOGIwODNhODRjZDY3NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmNwcApAQCAtNTc1LDcgKzU3NSw3IEBAIGJvb2wgU3RyaW5n
aWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KFN0cmluZ2lmaWVyJiBzdHJpbmdpZmll
ciwgU3RyaW5nQnVpCiAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgb2NjdXJzIHdoZW4gZ2V0IGFu
IHVuZGVmaW5lZCB2YWx1ZSBvciBhIHN5bWJvbCB2YWx1ZSBmb3IKICAgICAgICAgICAgIC8vIGFu
IG9iamVjdCBwcm9wZXJ0eS4gSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdGhlIHNlcGFyYXRv
ciBhbmQKICAgICAgICAgICAgIC8vIHByb3BlcnR5IG5hbWUgdGhhdCB3ZSBhbHJlYWR5IGFwcGVu
ZGVkLCBzbyByb2xsIGJhY2suCi0gICAgICAgICAgICBidWlsZGVyLnJlc2l6ZShyb2xsQmFja1Bv
aW50KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2hyaW5rKHJvbGxCYWNrUG9pbnQpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuY3BwCmluZGV4IDY1ZWEzNTQ1OWM0NDk3ODQyYjU4YWEzYjRkMmMxNmFiY2M5ZmUxNTYuLjcy
MTQxMGIxMGRiNDFhYjk4MmE5ODhmNTljNjFiNzUwNDFjNTgyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCkBAIC00MTksNyArNDE5LDcgQEAgU3RyaW5nIFN0
cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdGlvbigpCiAgICAgfQogCiAgICAgaWYgKHJl
cHJlc2VudGF0aW9uLmxlbmd0aCgpID49IDMpCi0gICAgICAgIHJlcHJlc2VudGF0aW9uLnJlc2l6
ZShyZXByZXNlbnRhdGlvbi5sZW5ndGgoKSAtIDIpOworICAgICAgICByZXByZXNlbnRhdGlvbi5z
aHJpbmsocmVwcmVzZW50YXRpb24ubGVuZ3RoKCkgLSAyKTsKIAogICAgIHJlcHJlc2VudGF0aW9u
LmFwcGVuZCgnfScpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBiMTFlMDk4Y2U0NzdkNjlkODY5YjJmMTVlNzUzYzk5M2UxODAzN2U2Li5jYzU2MWYzZWY4
OTRkOTY0ODQ3ZTY4ODA3MDEyMzc5ZDYxODZmMDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTQ5OCw2ICs0OTgsNyBAQAogCQk5M0FDOTFBNzE4OTQyRkM0
MDAyNDQ5MzkgLyogTENoYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTENo
YXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNUI0NEQyMjEzRDYxNjAwNEI3
QUE3IC8qIEhleE51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIZXhOdW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I1QjQ1MDIy
MTcxRUU5MDA0QjdBQTcgLyogTG9nZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExvZ2dlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRDAw
MTdCMjY0REJBQ0YwMEJDRjEwOSAvKiBTdHJpbmdDb25jYXRlbmF0ZUNGLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0NvbmNhdGVuYXRlQ0YuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTkxQ0YyMENBRUNFODAwQzUxQjhFIC8qIG9iamNTUEkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gb2JqY1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0RERTkzMTFDREMwNTJEMDBGRDM0OTEgLyogZHlsZFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBkeWxkU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
RjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTI0LDYgKzkyNSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBNUJBMTVG
NzE4MjQzNUE2MDBBODJFNjkgLyogQXRvbVN0cmluZ0ltcGxDRi5jcHAgKi8sCiAJCQkJQTVCQTE1
RjgxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0NGLmNwcCAqLywKKwkJCQk5M0QwMDE3QjI2NERC
QUNGMDBCQ0YxMDkgLyogU3RyaW5nQ29uY2F0ZW5hdGVDRi5oICovLAogCQkJCUE1QkExNUY5MTgy
NDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwICovLAogCQkJCTkzOTM0QkQ0MThBMUYx
NjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwICovLAogCQkJCTFDQ0RCMTQ5MUU1NjY2MjYw
MDZDNzNDMCAvKiBUZXh0QnJlYWtJdGVyYXRvckNGLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oIGIvU291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaAppbmRleCBiODUxNmY4ODFlMGM0YmEzZmYxYWFjMTU4NjA2YzllZjlkNTczMGFjLi43
M2FjZGM3MmQ1Y2JjYzYxZGE3ZWM2MjMzYzJjNWNlNzY0ODI5ZDI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0NoZWNr
ZWRBcml0aG1ldGljLmgKQEAgLTk1LDMxICs5NSw2IEBAIHB1YmxpYzoKICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIH07CiAKLWNsYXNz
IENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93IHsKLXB1YmxpYzoKLSAgICB2b2lkIG92ZXJmbG93
ZWQoKQotICAgIHsKLSAgICAgICAgbV9vdmVyZmxvd2VkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1f
c2hvdWxkQ3Jhc2hPbk92ZXJmbG93KQotICAgICAgICAgICAgY3Jhc2goKTsKLSAgICB9Ci0KLSAg
ICBib29sIHNob3VsZENyYXNoT25PdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ3Jh
c2hPbk92ZXJmbG93OyB9Ci0gICAgdm9pZCBzZXRTaG91bGRDcmFzaE9uT3ZlcmZsb3coYm9vbCB2
YWx1ZSkgeyBtX3Nob3VsZENyYXNoT25PdmVyZmxvdyA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhh
c092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ZWQ7IH0KLSAgICB2b2lkIGNs
ZWFyT3ZlcmZsb3coKSB7IG1fb3ZlcmZsb3dlZCA9IGZhbHNlOyB9Ci0KLSAgICBzdGF0aWMgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoKCkKLSAgICB7Ci0gICAgICAgIENSQVNIKCk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9vdmVyZmxvd2VkIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fc2hvdWxkQ3Jhc2hPbk92ZXJmbG93IHsgdHJ1ZSB9OwotfTsKLQogY2xhc3MgQ3Jh
c2hPbk92ZXJmbG93IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCB2b2lkIG92ZXJmbG93ZWQoKQpAQCAtMjUyLDExICsyMjcsNiBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gc3RydWN0IFJlbW92ZUNoZWNrZWQgewogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2xlYW5U
eXBlIERlZmF1bHRWYWx1ZSA9IDA7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0
IFJlbW92ZUNoZWNrZWQ8Q2hlY2tlZDxULCBDb25kaXRpb25hbENyYXNoT25PdmVyZmxvdz4+IHsK
LSAgICB1c2luZyBDbGVhblR5cGUgPSB0eXBlbmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5
cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsKLX07
Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQs
IENyYXNoT25PdmVyZmxvdz4+IHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8
VD46OkNsZWFuVHlwZSBDbGVhblR5cGU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDbGVhblR5cGUg
RGVmYXVsdFZhbHVlID0gMDsKQEAgLTEwNjksNyArMTAzOSw2IEBAIHVzaW5nIFdURjo6Q2hlY2tl
ZFVpbnQzMjsKIHVzaW5nIFdURjo6Q2hlY2tlZEludDY0OwogdXNpbmcgV1RGOjpDaGVja2VkVWlu
dDY0OwogdXNpbmcgV1RGOjpDaGVja2VkU2l6ZTsKLXVzaW5nIFdURjo6Q29uZGl0aW9uYWxDcmFz
aE9uT3ZlcmZsb3c7CiB1c2luZyBXVEY6OkNyYXNoT25PdmVyZmxvdzsKIHVzaW5nIFdURjo6UmVj
b3JkT3ZlcmZsb3c7CiB1c2luZyBXVEY6OmNoZWNrZWRTdW07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNt
YWtlCmluZGV4IDk3MWZkZWIyNTk1MGVlYjc3OGQ1ZDcwZTFhZGNmZDUyYWQ2YWQyOWUuLmJmYTEz
ZDFmZTgwYjMwN2E1MmIzZmRkYmVkYTFlNjk3ZDM4ZTUzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRX
LmNtYWtlCkBAIC0zOSw2ICszOSw3IEBAIGlmIChVU0VfQ0YpCiAgICAgICAgIGNmL0NGVVJMRXh0
cmFzLmgKICAgICAgICAgY2YvVHlwZUNhc3RzQ0YuaAogCisgICAgICAgIHRleHQvY2YvU3RyaW5n
Q29uY2F0ZW5hdGVDRi5oCiAgICAgICAgIHRleHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCiAg
ICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtl
CmluZGV4IGUyODA5OTc0MjcxOWM3NzlhYzNlYWRmNDY2MTMzM2Q4NzhlZmRjZGQuLjdjZGNjNGIx
NmJlMjJlNDc1ZTIyYTg2YWQwZTdhYzQ4ZGUxZGQxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNt
YWtlCkBAIC00MSw2ICs0MSw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAg
ICAgc3BpL21hYy9NZXRhZGF0YVNQSS5oCiAKKyAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRl
Q0YuaAogICAgIHRleHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCiApCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1XaW4uY21ha2UKaW5kZXggNmU4MGI5OWEwNGE2YzZkZTRlMmZmNTlhN2I0ZWQ0YzhjNGFhZmFi
OS4uOTBmZDI2ZDc4YzY5NGRiMzZkZDA4MjQxZTk4OGU0MmY1NTU3ZTUxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1XaW4uY21ha2UKQEAgLTM3LDYgKzM3LDcgQEAgaWYgKFVTRV9DRikKICAgICAgICAgY2Yv
Q0ZVUkxFeHRyYXMuaAogICAgICAgICBjZi9UeXBlQ2FzdHNDRi5oCiAKKyAgICAgICAgdGV4dC9j
Zi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKICAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRv
ckNGLmgKICAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaCBiL1NvdXJjZS9XVEYvd3RmL1NhdHVy
YXRlZEFyaXRobWV0aWMuaAppbmRleCA2MDdiYzAxMTI1ZGY1MGJiODk0OTYwODBlODhlNjVkNzQ1
YzhiZjk2Li41NzliNWI4NWM4ZThhMWI0NDFlMjFkN2NlMDdmZjBhMjMwMWQyNTdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiw3ICszNiwxNCBAQAogI2luY2x1ZGUg
PHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgogCi1pbmxpbmUgYm9vbCBzaWdu
ZWRBZGRPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKK25h
bWVzcGFjZSBXVEYgeworCisvLyBGSVhNRTogRW5oYW5jZSB0aGlzIHNvIGl0IGZhaWxzIHRvIGNv
bXBpbGUgY2FsbHMgd2hlcmUgZWl0aGVyIG9mIHRoZSBhcmd1bWVudHMgY2FuIGJlIG91dHNpZGUg
dGhlIHJhbmdlIG9mIHRoZSBpbnRlZ3JhbCB0eXBlIGluc3RlYWQgb2YgcXVpZXRseSBjb252ZXJ0
aW5nLgordGVtcGxhdGU8dHlwZW5hbWUgU2lnbmVkSW50ZWdyYWxUeXBlPiBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfaW50ZWdyYWxfdjxTaWduZWRJbnRlZ3JhbFR5cGU+ICYmIHN0ZDo6aXNfc2ln
bmVkX3Y8U2lnbmVkSW50ZWdyYWxUeXBlPiwgU2lnbmVkSW50ZWdyYWxUeXBlPiBzYXR1cmF0ZWRT
dW0oU2lnbmVkSW50ZWdyYWxUeXBlLCBTaWduZWRJbnRlZ3JhbFR5cGUpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVW5zaWduZWRJbnRlZ3JhbFR5cGU+IGNvbnN0ZXhwciBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfaW50ZWdyYWxfdjxVbnNpZ25lZEludGVncmFsVHlwZT4gJiYgIXN0ZDo6aXNfc2lnbmVk
X3Y8VW5zaWduZWRJbnRlZ3JhbFR5cGU+LCBVbnNpZ25lZEludGVncmFsVHlwZT4gc2F0dXJhdGVk
U3VtKFVuc2lnbmVkSW50ZWdyYWxUeXBlLCBVbnNpZ25lZEludGVncmFsVHlwZSk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+IEludGVncmFsVHlwZSBzYXR1cmF0ZWREaWZmZXJlbmNl
KEludGVncmFsVHlwZSwgSW50ZWdyYWxUeXBlKTsKKworaW5saW5lIGJvb2wgc2lnbmVkQWRkSW50
MzJPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKIHsKICNp
ZiBDT01QSUxFUl9IQVNfQ0xBTkdfQlVJTFRJTihfX2J1aWx0aW5fc2FkZF9vdmVyZmxvdykgJiYg
IShkZWZpbmVkIF9fY2xhbmdfbWFqb3JfXyAmJiBfX2NsYW5nX21ham9yX18gPCA3KQogICAgIHJl
dHVybiBfX2J1aWx0aW5fc2FkZF9vdmVyZmxvdyhhLCBiLCAmcmVzdWx0KTsKQEAgLTUyLDcgKzU5
LDcgQEAgaW5saW5lIGJvb2wgc2lnbmVkQWRkT3ZlcmZsb3dzKGludDMyX3QgYSwgaW50MzJfdCBi
LCBpbnQzMl90JiByZXN1bHQpCiAjZW5kaWYKIH0KIAotaW5saW5lIGludDMyX3Qgc2F0dXJhdGVk
QWRkaXRpb24oaW50MzJfdCBhLCBpbnQzMl90IGIpCit0ZW1wbGF0ZTw+IGlubGluZSBpbnQzMl90
IHNhdHVyYXRlZFN1bTxpbnQzMl90PihpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICBpbnQz
Ml90IHJlc3VsdDsKICNpZiBDUFUoQVJNX1RIVU1CMikKQEAgLTYyLDEzICs2OSwxMyBAQCBpbmxp
bmUgaW50MzJfdCBzYXR1cmF0ZWRBZGRpdGlvbihpbnQzMl90IGEsIGludDMyX3QgYikKICAgICAg
ICAgOiAvKiBOb3RoaW5nIGlzIGNsb2JiZXJlZC4gKi8KICAgICAgICAgKTsKICNlbHNlCi0gICAg
aWYgKHNpZ25lZEFkZE92ZXJmbG93cyhhLCBiLCByZXN1bHQpKQorICAgIGlmIChzaWduZWRBZGRJ
bnQzMk92ZXJmbG93cyhhLCBiLCByZXN1bHQpKQogICAgICAgICByZXN1bHQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSArIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYSkgPj4g
MzEpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIGJvb2wgc2lnbmVk
U3VidHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkK
K2lubGluZSBib29sIHNpZ25lZFN1YnRyYWN0SW50MzJPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQz
Ml90IGIsIGludDMyX3QmIHJlc3VsdCkKIHsKICNpZiBDT01QSUxFUl9IQVNfQ0xBTkdfQlVJTFRJ
TihfX2J1aWx0aW5fc3N1Yl9vdmVyZmxvdykgJiYgIShkZWZpbmVkIF9fY2xhbmdfbWFqb3JfXyAm
JiBfX2NsYW5nX21ham9yX18gPCA3KQogICAgIHJldHVybiBfX2J1aWx0aW5fc3N1Yl9vdmVyZmxv
dyhhLCBiLCAmcmVzdWx0KTsKQEAgLTg0LDcgKzkxLDggQEAgaW5saW5lIGJvb2wgc2lnbmVkU3Vi
dHJhY3RPdmVyZmxvd3MoaW50MzJfdCBhLCBpbnQzMl90IGIsIGludDMyX3QmIHJlc3VsdCkKICNl
bmRpZgogfQogCi1pbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRTdWJ0cmFjdGlvbihpbnQzMl90IGEs
IGludDMyX3QgYikKKy8vIEZJWE1FOiBFbmhhbmNlIHRoaXMgc28gaXQgZmFpbHMgdG8gY29tcGls
ZSBjYWxscyB3aGVyZSBlaXRoZXIgb2YgdGhlIGFyZ3VtZW50cyBjYW4gYmUgb3V0c2lkZSB0aGUg
cmFuZ2Ugb2YgaW50MzJfdCBpbnN0ZWFkIG9mIHF1aWV0bHkgY29udmVydGluZy4KK3RlbXBsYXRl
PD4gaW5saW5lIGludDMyX3Qgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihpbnQzMl90IGEs
IGludDMyX3QgYikKIHsKICAgICBpbnQzMl90IHJlc3VsdDsKICNpZiBDUFUoQVJNX1RIVU1CMikK
QEAgLTk0LDggKzEwMiwyNCBAQCBpbmxpbmUgaW50MzJfdCBzYXR1cmF0ZWRTdWJ0cmFjdGlvbihp
bnQzMl90IGEsIGludDMyX3QgYikKICAgICAgICAgOiAvKiBOb3RoaW5nIGlzIGNsb2JiZXJlZC4g
Ki8KICAgICAgICAgKTsKICNlbHNlCi0gICAgaWYgKHNpZ25lZFN1YnRyYWN0T3ZlcmZsb3dzKGEs
IGIsIHJlc3VsdCkpCisgICAgaWYgKHNpZ25lZFN1YnRyYWN0SW50MzJPdmVyZmxvd3MoYSwgYiwg
cmVzdWx0KSkKICAgICAgICAgcmVzdWx0ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWF4KCkgKyAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGEpID4+IDMxKTsKICNlbmRpZgogICAgIHJl
dHVybiByZXN1bHQ7CiB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdyYWxUeXBl
PiBjb25zdGV4cHIgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2ludGVncmFsX3Y8VW5zaWduZWRJ
bnRlZ3JhbFR5cGU+ICYmICFzdGQ6OmlzX3NpZ25lZF92PFVuc2lnbmVkSW50ZWdyYWxUeXBlPiwg
VW5zaWduZWRJbnRlZ3JhbFR5cGU+IHNhdHVyYXRlZFN1bShVbnNpZ25lZEludGVncmFsVHlwZSBh
LCBVbnNpZ25lZEludGVncmFsVHlwZSBiKQoreworICAgIGF1dG8gc3VtID0gYSArIGI7CisgICAg
cmV0dXJuIHN1bSA8IGEgPyBzdGQ6Om51bWVyaWNfbGltaXRzPFVuc2lnbmVkSW50ZWdyYWxUeXBl
Pjo6bWF4KCkgOiBzdW07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEludGVncmFsVHlwZSwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4gY29uc3RleHByIHVpbnQzMl90IHNhdHVyYXRlZFN1bShJ
bnRlZ3JhbFR5cGUgdmFsdWUsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQoreworICAgIHJl
dHVybiBzYXR1cmF0ZWRTdW08SW50ZWdyYWxUeXBlPih2YWx1ZSwgc2F0dXJhdGVkU3VtPEludGVn
cmFsVHlwZT4oYXJndW1lbnRzLi4uKSk7Cit9CisKK30KKwordXNpbmcgV1RGOjpzYXR1cmF0ZWRT
dW07Cit1c2luZyBXVEY6OnNhdHVyYXRlZERpZmZlcmVuY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcAppbmRleCAxZTBjMThhYzlkMjBlZDgyMGZlYjg2ODVmY2NmODJiMTA2MDEx
NDJkLi4yMzNhZGY3ODlhNjdmMjY0OTZiOTdmMjBhNTY4MjFkODk2YzM1YzUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0zMywyNiArMzMsMjkgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q2FwYWNpdHkgPSBTdHJpbmc6Ok1heExlbmd0aDsKIAot
c3RhdGljIHVuc2lnbmVkIGV4cGFuZGVkQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHksIHVuc2ln
bmVkIHJlcXVpcmVkTGVuZ3RoKQorc3RhdGljIHVuc2lnbmVkIGV4cGFuZGVkQ2FwYWNpdHkodW5z
aWduZWQgY2FwYWNpdHksIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNpdHkpCiB7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5pbXVtQ2FwYWNpdHkgPSAxNjsKLSAgICByZXR1cm4gc3Rk
OjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgc3RkOjptaW4o
Y2FwYWNpdHkgKiAyLCBtYXhDYXBhY2l0eSkpKTsKKyAgICByZXR1cm4gc3RkOjptYXgocmVxdWly
ZWRDYXBhY2l0eSwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBzdGQ6Om1pbihjYXBhY2l0eSAq
IDIsIG1heENhcGFjaXR5KSkpOworfQorCit2b2lkIFN0cmluZ0J1aWxkZXI6OmRpZE92ZXJmbG93
KCkKK3sKKyAgICBpZiAobV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cpCisgICAgICAgIENSQVNIKCk7
CisgICAgbV9sZW5ndGggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiB9
CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAogewotICAgIEFTU0VS
VCghaGFzT3ZlcmZsb3dlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgp
KTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlzdHMuCiAgICAgaWYg
KCFtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkg
PT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICAgICAgQVNTRVJUKG1fc3Ry
aW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc1JlaWZpZWQgPSB0cnVlOwotI2VuZGlmCi0KICAgICAv
LyBDaGVjayBmb3IgZW1wdHkuCiAgICAgaWYgKCFtX2xlbmd0aCkgewogICAgICAgICBtX3N0cmlu
ZyA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7CkBAIC02MCwzNjkgKzYzLDE5NiBAQCB2b2lkIFN0cmlu
Z0J1aWxkZXI6OnJlaWZ5U3RyaW5nKCkgY29uc3QKICAgICB9CiAKICAgICAvLyBNdXN0IGJlIHZh
bGlkIGluIHRoZSBidWZmZXIsIHRha2UgYSBzdWJzdHJpbmcgKHVubGVzcyBzdHJpbmcgZmlsbHMg
dGhlIGJ1ZmZlcikuCi0gICAgQVNTRVJUKG1fYnVmZmVyICYmIG1fbGVuZ3RoLnVuc2FmZUdldDx1
bnNpZ25lZD4oKSA8PSBtX2J1ZmZlci0+bGVuZ3RoKCkpOwotICAgIGlmIChtX2xlbmd0aC51bnNh
ZmVHZXQ8dW5zaWduZWQ+KCkgPT0gbV9idWZmZXItPmxlbmd0aCgpKQorICAgIEFTU0VSVChtX2xl
bmd0aCA8PSBtX2J1ZmZlci0+bGVuZ3RoKCkpOworICAgIGlmIChtX2xlbmd0aCA9PSBtX2J1ZmZl
ci0+bGVuZ3RoKCkpCiAgICAgICAgIG1fc3RyaW5nID0gbV9idWZmZXIuZ2V0KCk7CiAgICAgZWxz
ZQotICAgICAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJ
bXBsKCptX2J1ZmZlciwgMCwgbV9sZW5ndGgudW5zYWZlR2V0KCkpOworICAgICAgICBtX3N0cmlu
ZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCptX2J1ZmZlciwgMCwg
bV9sZW5ndGgpOwogfQogCi12b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdT
aXplKQordm9pZCBTdHJpbmdCdWlsZGVyOjpzaHJpbmsodW5zaWduZWQgbmV3TGVuZ3RoKQogewog
ICAgIGlmIChoYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIENoZWNr
IG5ld1NpemUgPCBtX2xlbmd0aCwgaGVuY2UgbV9sZW5ndGggPiAwLgotICAgIHVuc2lnbmVkIG9s
ZExlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAgIEFTU0VSVChuZXdTaXplIDw9IG9s
ZExlbmd0aCk7Ci0gICAgaWYgKG5ld1NpemUgPT0gb2xkTGVuZ3RoKQorICAgIEFTU0VSVChuZXdM
ZW5ndGggPD0gbV9sZW5ndGgpOworICAgIGlmIChuZXdMZW5ndGggPj0gbV9sZW5ndGgpIHsKKyAg
ICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fbGVuZ3RoKQorICAgICAgICAgICAgZGlkT3ZlcmZsb3co
KTsKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChvbGRMZW5ndGgpOworICAgIH0KIAotICAg
IG1fbGVuZ3RoID0gbmV3U2l6ZTsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAg
bV9sZW5ndGggPSBuZXdMZW5ndGg7CiAKLSAgICAvLyBJZiB0aGVyZSBpcyBhIGJ1ZmZlciwgd2Ug
b25seSBuZWVkIHRvIGR1cGxpY2F0ZSBpdCBpZiBpdCBoYXMgbW9yZSB0aGFuIG9uZSByZWYuCiAg
ICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7IC8vIENsZWFy
IHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJl
Zm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG1fYnVmZmVyLgotICAgICAgICBp
ZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgewotICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5p
czhCaXQoKSkKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFj
dGVyczgoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIG1fYnVmZmVy
LT5sZW5ndGgoKSk7CisgICAgICAgIG1fc3RyaW5nID0geyB9OyAvLyBDbGVhciB0aGUgc3RyaW5n
IHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIG1fYnVmZmVyIGlmIGFueSBiZWZvcmUgY2hlY2tp
bmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBtX2J1ZmZlci4KKyAgICAgICAgaWYgKG1fYnVmZmVy
LT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIG9sZCBidWZmZXIgaGFkIG9u
bHkgdGhlIG9uZSByZWYsIHdlIGNhbiBqdXN0IHJlZHVjZSB0aGUgbGVuZ3RoIGFuZCBrZWVwIHVz
aW5nIHRoZSBidWZmZXIuCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKGhhc092ZXJmbG93ZWQoKSB8fCBtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgu
dW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKKyAgICAgICAgLy8gQWxsb2NhdGUgYSBmcmVzaCBidWZm
ZXIsIHdpdGggYSBjb3B5IG9mIHRoZSBjaGFyYWN0ZXJzIHdlIGFyZSBrZWVwaW5nLgorICAgICAg
ICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8TENo
YXI+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPExDaGFyPigpLCBuZXdMZW5ndGgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obV9idWZmZXItPmNoYXJhY3Rl
cnM8VUNoYXI+KCksIG5ld0xlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBTaW5jZSBtX2xlbmd0aCAmJiAhbV9idWZmZXIsIHRoZSBzdHJpbmcgbXVzdCBiZSB2YWxpZCBp
biBtX3N0cmluZywgYW5kIG1fc3RyaW5nLmxlbmd0aCgpID4gMC4KLSAgICBBU1NFUlQoIW1fc3Ry
aW5nLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG9sZExlbmd0aCA9PSBtX3N0cmluZy5sZW5ndGgo
KSk7Ci0gICAgQVNTRVJUKG5ld1NpemUgPCBtX3N0cmluZy5sZW5ndGgoKSk7Ci0gICAgbV9zdHJp
bmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9zdHJpbmcuaW1w
bCgpLCAwLCBuZXdTaXplKTsKKyAgICAvLyBTaW5jZSB0aGUgb2xkIGxlbmd0aCB3YXMgbm90IDAg
YW5kIG1fYnVmZmVyIGlzIG51bGwsIG1fc3RyaW5nIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51
bGwuCisgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1w
bCgqbV9zdHJpbmcuaW1wbCgpLCAwLCBuZXdMZW5ndGgpOwogfQogCi0vLyBBbGxvY2F0ZSBhIG5l
dyA4IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBj
b21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCi0vLyBvciBtX2J1ZmZlciwgbmVpdGhlciB3aWxsIGJl
IHJlYXNzaWduZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCi12b2lkIFN0cmluZ0J1
aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5z
aWduZWQgcmVxdWlyZWRMZW5ndGgpCisvLyBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcg
aW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5n
IG9yIG1fYnVmZmVyLgordGVtcGxhdGU8dHlwZW5hbWUgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUs
IHR5cGVuYW1lIEN1cnJlbnRDaGFyYWN0ZXJUeXBlPiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyKGNvbnN0IEN1cnJlbnRDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVycywg
dW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkKIHsKLSAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQo
KSk7Ci0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRh
IGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhl
IGV4aXN0aW5nIGRhdGEuCi0gICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOwotCi0g
ICAgaWYgKG1fbGVuZ3RoKQotICAgICAgICBzdGQ6Om1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4
LCBjdXJyZW50Q2hhcmFjdGVycywgbV9sZW5ndGgudW5zYWZlR2V0KCkpOwotCi0gICAgLy8gVXBk
YXRlIHRoZSBidWlsZGVyIHN0YXRlLgotICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwot
ICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9
PSByZXF1aXJlZExlbmd0aCk7Ci19CisgICAgQWxsb2NhdGlvbkNoYXJhY3RlclR5cGUqIGJ1ZmZl
ckNoYXJhY3RlcnM7CisgICAgYXV0byBidWZmZXIgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHJlcXVpcmVkQ2FwYWNpdHksIGJ1ZmZlckNoYXJhY3RlcnMpOworICAgIGlmIChV
TkxJS0VMWSghYnVmZmVyKSkgeworICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0vLyBBbGxvY2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGlu
IGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVpdGhlciBtX3N0cmluZwot
Ly8gb3IgbV9idWZmZXIsICBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29w
eSBoYXMgY29tcGxldGVkKS4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29u
c3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsK
ICAgICBBU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0g
ICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3Vs
dCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgotICAgIGF1dG8gYnVm
ZmVyID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwg
bV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKLSAgICAg
ICAgcmV0dXJuIGRpZE92ZXJmbG93KCk7Ci0gICAgc3RkOjptZW1jcHkobV9idWZmZXJDaGFyYWN0
ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoLnVu
c2FmZUdldCgpKSAqIHNpemVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgotICAg
IAotICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KLSAgICBtX2J1ZmZlciA9IFdURk1v
dmUoYnVmZmVyKTsKLSAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOwotfQorICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFyYWN0ZXJzKGJ1ZmZlckNoYXJhY3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aCk7
CiAKLS8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHdoaWNoIGlzIDggYml0IGFuZCBtYXkgY29tZQotLy8gZnJvbSBlaXRoZXIgbV9z
dHJpbmcgb3IgbV9idWZmZXIsIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBj
b3B5IGhhcyBjb21wbGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlclVw
Q29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQotewotICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9p
czhCaXQpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
IEFTU0VSVChyZXF1aXJlZExlbmd0aCA8PSBtYXhDYXBhY2l0eSAmJiByZXF1aXJlZExlbmd0aCA+
PSBsZW5ndGgpOwotICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZm
ZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4K
LSAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVx
dWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKLSAgICBpZiAoVU5MSUtFTFkoIWJ1
ZmZlcikpCi0gICAgICAgIHJldHVybiBkaWRPdmVyZmxvdygpOyAvLyBUcmVhdCBhIGZhaWx1cmUg
dG8gYWxsY29hdGUgYXMgYW4gb3ZlcmZsb3cuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQotICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRD
aGFyYWN0ZXJzW2ldOwotICAgIAotICAgIG1faXM4Qml0ID0gZmFsc2U7Ci0gICAgCi0gICAgLy8g
VXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIp
OwotICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgo
KSA9PSByZXF1aXJlZExlbmd0aCk7CisgICAgbV9zdHJpbmcgPSB7IH07CiB9CiAKLXRlbXBsYXRl
PD4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4odW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIFN0
cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSkK
IHsKLSAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5n
QnVpbGRlciksIHJlYWxsb2NhdGUgaXQsCi0gICAgLy8gb3RoZXJ3aXNlIGZhbGwgYmFjayB0byAi
YWxsb2NhdGUgYW5kIGNvcHkiIG1ldGhvZC4KLSAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAg
IAotICAgIEFTU0VSVChtX2lzOEJpdCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5pczhCaXQoKSk7
Ci0gICAgCi0gICAgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgewotICAgICAgICBhdXRvIGV4
cGVjdGVkU3RyaW5nSW1wbCA9IFN0cmluZ0ltcGw6OnRyeVJlYWxsb2NhdGUobV9idWZmZXIucmVs
ZWFzZU5vbk51bGwoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczgpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoIWV4cGVjdGVkU3RyaW5nSW1wbCkpCi0gICAgICAgICAgICByZXR1
cm4gZGlkT3ZlcmZsb3coKTsKLSAgICAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGV4cGVjdGVkU3Ry
aW5nSW1wbC52YWx1ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9i
dWZmZXItPmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBBU1NFUlQoaGFzT3Zl
cmZsb3dlZCgpIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0aCk7CisgICAg
Ly8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1aWxkZXIp
LCByZWFsbG9jYXRlIGl0LgorICAgIGlmIChtX2J1ZmZlcikgeworICAgICAgICBtX3N0cmluZyA9
IHsgfTsgLy8gQ2xlYXIgdGhlIHN0cmluZyB0byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBtX2J1
ZmZlciBpZiBhbnkgYmVmb3JlIGNoZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbV9idWZm
ZXIuCisgICAgICAgIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgICAgIENo
YXJhY3RlclR5cGUqIGJ1ZmZlckNoYXJhY3RlcnM7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9
IFN0cmluZ0ltcGw6OnRyeVJlYWxsb2NhdGUobV9idWZmZXIucmVsZWFzZU5vbk51bGwoKSwgcmVx
dWlyZWRDYXBhY2l0eSwgYnVmZmVyQ2hhcmFjdGVycyk7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIWJ1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBkaWRPdmVyZmxvdygpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYnVmZmVyID0gV1RG
TW92ZSgqYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGFsbG9jYXRlQnVmZmVyPENoYXJhY3RlclR5cGU+KGNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlw
ZT4oKSwgcmVxdWlyZWRDYXBhY2l0eSk7CiB9CiAKLXRlbXBsYXRlPD4KLXZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit2
b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBh
Y2l0eSkKIHsKLSAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMg
U3RyaW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQsCi0gICAgLy8gb3RoZXJ3aXNlIGZhbGwgYmFj
ayB0byAiYWxsb2NhdGUgYW5kIGNvcHkiIG1ldGhvZC4KLSAgICBtX3N0cmluZyA9IFN0cmluZygp
OwotICAgIAotICAgIGlmIChtX2J1ZmZlci0+aXM4Qml0KCkpCi0gICAgICAgIGFsbG9jYXRlQnVm
ZmVyVXBDb252ZXJ0KG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0aCk7Ci0g
ICAgZWxzZSBpZiAobV9idWZmZXItPmhhc09uZVJlZigpKSB7Ci0gICAgICAgIGF1dG8gZXhwZWN0
ZWRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5UmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNl
Tm9uTnVsbCgpLCByZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIWV4cGVjdGVkU3RyaW5nSW1wbCkpCi0gICAgICAgICAgICByZXR1cm4g
ZGlkT3ZlcmZsb3coKTsKLSAgICAgICAgbV9idWZmZXIgPSBXVEZNb3ZlKGV4cGVjdGVkU3RyaW5n
SW1wbC52YWx1ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZm
ZXItPmNoYXJhY3RlcnMxNigpLCByZXF1aXJlZExlbmd0aCk7Ci0gICAgQVNTRVJUKGhhc092ZXJm
bG93ZWQoKSB8fCBtX2J1ZmZlci0+bGVuZ3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOworICAgIGlm
IChpczhCaXQoKSkKKyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4ocmVxdWlyZWRDYXBh
Y2l0eSk7CisgICAgZWxzZQorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPihyZXF1aXJl
ZENhcGFjaXR5KTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5z
aWduZWQgbmV3Q2FwYWNpdHkpCiB7CiAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChuZXdDYXBhY2l0eSA8PSBTdHJpbmc6Ok1heExlbmd0aCk7CisK
ICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGJ1
ZmZlciwgdGhlbiBncm93IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4g
bV9idWZmZXItPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgp
KQotICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KG5ld0NhcGFjaXR5KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFy
PihuZXdDYXBhY2l0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9i
dWZmZXItPmxlbmd0aCgpKQorICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0
eSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gR3JvdyB0aGUgc3RyaW5nLCBpZiBuZWNlc3Nh
cnkuCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICBpZiAobmV3Q2FwYWNpdHkgPiBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgTENoYXIqIG51bGxQbGFjZWhvbGRlciA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobnVsbFBsYWNlaG9sZGVyLCBuZXdDYXBhY2l0
eSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAg
ICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5
KTsKKyAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9sZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
ICghbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXI8TENoYXI+KHN0YXRp
Y19jYXN0PExDaGFyKj4obnVsbHB0ciksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1fc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyPExD
aGFyPihtX3N0cmluZy5jaGFyYWN0ZXJzOCgpLCBuZXdDYXBhY2l0eSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVyczE2
KCksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4o
bV9zdHJpbmcuY2hhcmFjdGVyczE2KCksIG5ld0NhcGFjaXR5KTsKICAgICAgICAgfQogICAgIH0K
ICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpIHx8ICFuZXdDYXBhY2l0eSB8fCBtX2J1ZmZlci0+
bGVuZ3RoKCkgPj0gbmV3Q2FwYWNpdHkpOwogfQogCi0vLyBNYWtlICdhZGRpdGlvbmFsTGVuZ3Ro
JyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1f
c3RyaW5nICYgbV9sZW5ndGgsCi0vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxv
Y2F0ZWQgc3RvcmFnZS4KLS8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGUgc2l6ZSBvZiB0aGUgbmV3
IGJ1aWxkZXIgd291bGQgaGF2ZSBvdmVyZmxvd2VkCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVu
ZEJ1ZmZlckZvckFwcGVuZGluZyh1bnNpZ25lZCBhZGRpdGlvbmFsTGVuZ3RoKQorLy8gTWFrZSAn
YWRkaXRpb25hbExlbmd0aCcgYWRkaXRpb25hbCBjYXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9i
dWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVuZ3RoIHRvIHVzZSwKKy8vIHRoYXQgY2FwYWNp
dHkgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlIHNv
IHRoZSBjYWxsZXIgY2FuIHdyaXRlIGNoYXJhY3RlcnMgdGhlcmUuCisvLyBSZXR1cm5zIG51bGxw
dHIgaWYgYWxsb2NhdGlvbiBmYWlscywgbGVuZ3RoIG92ZXJmbG93cywgb3IgaWYgdG90YWwgY2Fw
YWNpdHkgaXMgMCBzbyBubyBidWZmZXIgaXMgbmVlZGVkLgorLy8gVGhlIGNhbGxlciBoYXMgdGhl
IHJlc3BvbnNpYmlsaXR5IGZvciBjaGVja2luZyB0aGF0IENoYXJhY3RlclR5cGUgaXMgdGhlIHR5
cGUgb2YgdGhlIGV4aXN0aW5nIGJ1ZmZlci4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IENoYXJhY3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGlu
Zyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKLSAgICBBU1NFUlQoYWRkaXRpb25hbExlbmd0
aCk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBzaXplIG9mIHRoZSBidWlsZGVyIGFmdGVy
IGFwcGVuZGluZy4KLSAgICBDaGVja2VkSW50MzIgcmVxdWlyZWRMZW5ndGggPSBtX2xlbmd0aCAr
IGFkZGl0aW9uYWxMZW5ndGg7Ci0gICAgaWYgKHJlcXVpcmVkTGVuZ3RoLmhhc092ZXJmbG93ZWQo
KSkgewotICAgICAgICBkaWRPdmVyZmxvdygpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAobV9idWZmZXIgJiYgcmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKSB7
CisgICAgICAgIG1fc3RyaW5nID0geyB9OworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxDaGFy
YWN0ZXJUeXBlKj4obV9idWZmZXItPmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSkgKyBzdGQ6
OmV4Y2hhbmdlKG1fbGVuZ3RoLCByZXF1aXJlZExlbmd0aCk7CiAgICAgfQotCi0gICAgcmV0dXJu
IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrPENoYXJhY3RlclR5
cGU+KHJlcXVpcmVkTGVuZ3RoKTsKKyAgICByZXR1cm4gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5n
U2xvd0Nhc2U8Q2hhcmFjdGVyVHlwZT4ocmVxdWlyZWRMZW5ndGgpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIENoYXJhY3RlclR5cGUqIFN0cmlu
Z0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxvd0NoZWNrKENo
ZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCkKKy8vIFNoYXJlZCBieSB0aGUgb3RoZXIgZXh0ZW5k
QnVmZmVyIGZ1bmN0aW9ucy4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJh
Y3RlclR5cGUqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNl
KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogewotICAgIEFTU0VSVCghcmVxdWlyZWRMZW5ndGgu
aGFzT3ZlcmZsb3dlZCgpKTsKLQotICAgIGlmIChtX2J1ZmZlciAmJiAocmVxdWlyZWRMZW5ndGgu
dW5zYWZlR2V0PHVuc2lnbmVkPigpIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkpIHsKLSAgICAgICAg
Ly8gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMg
dGhlIGN1cnJlbnQgYnVpbGRlciBjb250ZW50cyEKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICB1bnNp
Z25lZCBjdXJyZW50TGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIG1fc3Ry
aW5nID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAg
ICAgIHJldHVybiBnZXRCdWZmZXJDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBjdXJyZW50
TGVuZ3RoOwotICAgIH0KLQotICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93
Q2FzZTxDaGFyYWN0ZXJUeXBlPihyZXF1aXJlZExlbmd0aC51bnNhZmVHZXQoKSk7CisgICAgQVNT
RVJUKCFoYXNPdmVyZmxvd2VkKCkpOworICAgIGlmICghcmVxdWlyZWRMZW5ndGgpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJlYWxsb2NhdGVCdWZmZXIoZXhwYW5kZWRDYXBhY2l0eShj
YXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOworICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxv
d2VkKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxD
aGFyYWN0ZXJUeXBlKj4obV9idWZmZXItPmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSkgKyBz
dGQ6OmV4Y2hhbmdlKG1fbGVuZ3RoLCByZXF1aXJlZExlbmd0aCk7CiB9CiAKLUxDaGFyKiBTdHJp
bmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc4KENoZWNrZWRJbnQzMiByZXF1aXJl
ZExlbmd0aCkKKy8vIEFsdGVyYXRpdmUgZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nIHRoYXQgY2Fu
IGJlIGNhbGxlZCBmcm9tIHRoZSBoZWFkZXIgd2l0aG91dCBpbmxpbmluZy4KK0xDaGFyKiBTdHJp
bmdCdWlsZGVyOjpleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdMQ2hhcih1bnNpZ25lZCByZXF1aXJl
ZExlbmd0aCkKIHsKLSAgICBpZiAoVU5MSUtFTFkocmVxdWlyZWRMZW5ndGguaGFzT3ZlcmZsb3dl
ZCgpKSkgewotICAgICAgICBkaWRPdmVyZmxvdygpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhvdXRPdmVyZmxv
d0NoZWNrPExDaGFyPihyZXF1aXJlZExlbmd0aCk7CisgICAgcmV0dXJuIGV4dGVuZEJ1ZmZlckZv
ckFwcGVuZGluZzxMQ2hhcj4ocmVxdWlyZWRMZW5ndGgpOwogfQogCi1VQ2hhciogU3RyaW5nQnVp
bGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nMTYoQ2hlY2tlZEludDMyIHJlcXVpcmVkTGVu
Z3RoKQorVUNoYXIqIFN0cmluZ0J1aWxkZXI6OmV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhV
cGNvbnZlcnQodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHJl
cXVpcmVkTGVuZ3RoLmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgZGlkT3ZlcmZsb3coKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChtX2lzOEJpdCkgewotICAg
ICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczsKLSAgICAgICAgaWYgKG1fYnVmZmVyKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdl
dDx1bnNpZ25lZD4oKSk7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzID0gbV9idWZmZXItPmNoYXJh
Y3RlcnM4KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdHJpbmcu
bGVuZ3RoKCkgPT0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgICAg
IGNoYXJhY3RlcnMgPSBtX3N0cmluZy5pc051bGwoKSA/IG51bGxwdHIgOiBtX3N0cmluZy5jaGFy
YWN0ZXJzOCgpOwotICAgICAgICB9Ci0gICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNo
YXJhY3RlcnMsIGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgudW5z
YWZlR2V0KCkpKTsKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXI8
VUNoYXI+KGNoYXJhY3RlcnM8TENoYXI+KCksIGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwg
cmVxdWlyZWRMZW5ndGgpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGhhc092ZXJmbG93ZWQoKSkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3Ro
ID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5n
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG9s
ZExlbmd0aDsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2J1ZmZlci0+Y2hh
cmFjdGVyczxVQ2hhcj4oKSkgKyBzdGQ6OmV4Y2hhbmdlKG1fbGVuZ3RoLCByZXF1aXJlZExlbmd0
aCk7CiAgICAgfQotICAgIHJldHVybiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRob3V0T3Zl
cmZsb3dDaGVjazxVQ2hhcj4ocmVxdWlyZWRMZW5ndGgpOwotfQotCi0vLyBNYWtlICdyZXF1aXJl
ZExlbmd0aCcgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJp
bmcgJiBtX2xlbmd0aCwKLS8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRl
ZCBzdG9yYWdlLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlw
ZSogU3RyaW5nQnVpbGRlcjo6ZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nU2xvd0Nhc2UodW5zaWdu
ZWQgcmVxdWlyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKCFoYXNPdmVyZmxvd2VkKCkpOwotICAg
IEFTU0VSVChyZXF1aXJlZExlbmd0aCk7Ci0KLSAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAg
Ly8gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMg
dGhlIGN1cnJlbnQgYnVpbGRlciBjb250ZW50cyEKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBtX2xlbmd0aC51bnNhZmVHZXQ8dW5zaWduZWQ+KCkpOwotICAgICAgICAKLSAg
ICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPihleHBhbmRlZENhcGFjaXR5KGNh
cGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0g
ICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fbGVuZ3RoID8gbV9zdHJpbmcuY2hhcmFjdGVyczxDaGFy
YWN0ZXJUeXBlPigpIDogbnVsbHB0ciwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1
aXJlZExlbmd0aCkpOwotICAgIH0KLSAgICBpZiAoVU5MSUtFTFkoaGFzT3ZlcmZsb3dlZCgpKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGFyYWN0ZXJUeXBlKiByZXN1bHQgPSBn
ZXRCdWZmZXJDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBtX2xlbmd0aC51bnNhZmVHZXQo
KTsKLSAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAgIEFTU0VSVCghaGFzT3ZlcmZs
b3dlZCgpKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2Fm
ZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nPFVDaGFyPihyZXF1aXJlZExlbmd0aCk7CiB9CiAKIHZvaWQgU3Ry
aW5nQnVpbGRlcjo6YXBwZW5kQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoIHx8IGhhc092ZXJmbG93ZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNoYXJhY3RlcnMpOwotCi0gICAgaWYgKG1faXM4
Qml0ICYmIGxlbmd0aCA9PSAxICYmIGlzTGF0aW4xKGNoYXJhY3RlcnNbMF0pKSB7CisgICAgaWYg
KGxlbmd0aCA9PSAxICYmIGlzTGF0aW4xKGNoYXJhY3RlcnNbMF0pICYmIGlzOEJpdCgpKSB7CiAg
ICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxMQ2hhcj4oY2hhcmFjdGVyc1swXSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBvcHRpbWl6ZSBtZW1v
cnkgYnkga2VlcGluZyB0aGUgc3RyaW5nIDgtYml0IHdoZW4gYWxsIHRoZSBjaGFyYWN0ZXJzIGFy
ZSBMYXRpbi0xPwotCi0gICAgVUNoYXIqIGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBw
ZW5kaW5nMTYobV9sZW5ndGggKyBsZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWSghZGVzdGluYXRp
b24pKQotICAgICAgICByZXR1cm47Ci0gICAgc3RkOjptZW1jcHkoZGVzdGluYXRpb24sIGNoYXJh
Y3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOwotICAg
IEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgp
ID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7CisgICAgaWYgKGF1dG8gZGVzdGlu
YXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdXaXRoVXBjb252ZXJ0KHNhdHVyYXRlZFN1
bTx1aW50MzJfdD4obV9sZW5ndGgsIGxlbmd0aCkpKQorICAgICAgICBTdHJpbmdJbXBsOjpjb3B5
Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogdm9pZCBT
dHJpbmdCdWlsZGVyOjphcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGggfHwgaGFzT3ZlcmZsb3dlZCgpKQog
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2hhcmFjdGVycyk7Ci0KLSAgICBpZiAobV9p
czhCaXQpIHsKLSAgICAgICAgTENoYXIqIGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBw
ZW5kaW5nPExDaGFyPihsZW5ndGgpOwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9uKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobGVuZ3RoID4gOCkKLSAgICAgICAgICAgIHN0ZDo6bWVtY3B5
KGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBIb3cgc3Ryb25nIGlzIG91ciBldmlkZW5jZSB0aGF0IHRoaXMgaXMg
ZmFzdGVyIHRoYW4gbWVtY3B5PyBXaGF0IHBsYXRmb3JtcyBpcyB0aGlzIHRydWUgZm9yPwotICAg
ICAgICAgICAgY29uc3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgICAg
ICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRp
b24rKyA9ICpjaGFyYWN0ZXJzKys7Ci0gICAgICAgIH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmc8TENo
YXI+KHNhdHVyYXRlZFN1bTx1aW50MzJfdD4obV9sZW5ndGgsIGxlbmd0aCkpKQorICAgICAgICAg
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMsIGxl
bmd0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIqIGRlc3RpbmF0aW9uID0gZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nPFVDaGFyPihsZW5ndGgpOwotICAgICAgICBpZiAoIWRlc3RpbmF0
aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVy
cyArIGxlbmd0aDsKLSAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCi0gICAgICAgICAg
ICAqZGVzdGluYXRpb24rKyA9ICpjaGFyYWN0ZXJzKys7Ci0gICAgfQotfQotCi0jaWYgVVNFKENG
KQotCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChDRlN0cmluZ1JlZiBzdHJpbmcpCi17Ci0g
ICAgLy8gRmFzdCBwYXRoOiBhdm9pZCBjb25zdHJ1Y3RpbmcgYSB0ZW1wb3JhcnkgU3RyaW5nIHdo
ZW4gcG9zc2libGUuCi0gICAgaWYgKGF1dG8qIGNoYXJhY3RlcnMgPSBDRlN0cmluZ0dldENTdHJp
bmdQdHIoc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSkpIHsKLSAgICAgICAgYXBw
ZW5kQ2hhcmFjdGVycyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyks
IENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZykpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChhdXRvIGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9yQXBwZW5kaW5nPFVDaGFyPihzYXR1
cmF0ZWRTdW08dWludDMyX3Q+KG1fbGVuZ3RoLCBsZW5ndGgpKSkKKyAgICAgICAgICAgIFN0cmlu
Z0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwog
ICAgIH0KLSAgICBhcHBlbmQoU3RyaW5nKHN0cmluZykpOwogfQogCi0jZW5kaWYKLQotYm9vbCBT
dHJpbmdCdWlsZGVyOjpjYW5TaHJpbmsoKSBjb25zdAorYm9vbCBTdHJpbmdCdWlsZGVyOjpzaG91
bGRTaHJpbmtUb0ZpdCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIE9ubHkgc2hyaW5rIHRoZSBidWZmZXIgaWYgaXQncyBs
ZXNzIHRoYW4gODAlIGZ1bGwuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB0dW5lIHRoaXMgaGV1
cmlzdGljIGJhc2VkIHNvbWUgYWN0dWFsIHRlc3QgY2FzZSBtZWFzdXJlbWVudHMuCi0gICAgdW5z
aWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0KCk7Ci0gICAgcmV0dXJuIG1fYnVmZmVy
ICYmIG1fYnVmZmVyLT5sZW5ndGgoKSA+IChsZW5ndGggKyAobGVuZ3RoID4+IDIpKTsKKyAgICAv
LyBTaHJpbmsgdGhlIGJ1ZmZlciBpZiBpdCdzIDgwJSBmdWxsIG9yIGxlc3MuCisgICAgc3RhdGlj
X2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFN0cmluZzo6TWF4TGVuZ3RoKSArIChTdHJpbmc6
Ok1heExlbmd0aCA+PiAyKSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkpOworICAgIHJldHVybiAhaGFzT3ZlcmZsb3dlZCgpICYmIG1f
YnVmZmVyICYmIG1fYnVmZmVyLT5sZW5ndGgoKSA+IG1fbGVuZ3RoICsgKG1fbGVuZ3RoID4+IDIp
OwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkKIHsKLSAgICBpZiAoY2Fu
U2hyaW5rKCkpIHsKLSAgICAgICAgaWYgKG1faXM4Qml0KQotICAgICAgICAgICAgcmVhbGxvY2F0
ZUJ1ZmZlcjxMQ2hhcj4obV9sZW5ndGgudW5zYWZlR2V0KCkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0g
ICAgICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgbV9zdHJpbmcgPSBXVEZN
b3ZlKG1fYnVmZmVyKTsKKyAgICBpZiAoc2hvdWxkU2hyaW5rVG9GaXQoKSkgeworICAgICAgICBy
ZWFsbG9jYXRlQnVmZmVyKG1fbGVuZ3RoKTsKKyAgICAgICAgbV9zdHJpbmcgPSBzdGQ6OmV4Y2hh
bmdlKG1fYnVmZmVyLCBudWxscHRyKTsKICAgICB9CiB9CiAKIGJvb2wgU3RyaW5nQnVpbGRlcjo6
aXNBbGxBU0NJSSgpIGNvbnN0CiB7Ci0gICAgYXV0byBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsK
LSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1faXM4Qml0
KQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnM4KCksIGxl
bmd0aCk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShjaGFyYWN0ZXJzMTYoKSwg
bGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nVmlldyB7ICp0aGlzIH0uaXNBbGxBU0NJSSgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKaW5k
ZXggNzAxOGExYWI3YmRiZDc0ZTZjYjdhZmNkMzU0NGVhZWI5MzkwYmU1ZS4uNTRmMmIyNDI1OWM1
ODBmZjMxNDVlOGU3YmZmM2M4OGM2MmY5OTdhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNiw0
MTQgKzI2LDMxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJp
dGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+CisjaW5jbHVkZSA8d3RmL1NhdHVy
YXRlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBTdHJpbmdCdWlsZGVy
IGN1cnJlbnRseSB1c2VzIGEgQ2hlY2tlZDxpbnQzMl90LCBDb25kaXRpb25hbENyYXNoT25PdmVy
Zmxvdz4gZm9yIG1fbGVuZ3RoLgotLy8gSWRlYWxseSwgd2Ugd291bGQgd2FudCB0byBtYWtlIFN0
cmluZ0J1aWxkZXIgYSB0ZW1wbGF0ZSB3aXRoIGFuIE92ZXJmbG93SGFuZGxlciBwYXJhbWV0ZXIs
IGFuZAotLy8gbV9sZW5ndGggY2FuIGJlIGluc3RhbnRpYXRlZCBiYXNlZCBvbiB0aGF0IE92ZXJm
bG93SGFuZGxlciBpbnN0ZWFkLiBIb3dldmVyLCBjdXJyZW50bHksIHdlJ3JlCi0vLyBub3QgYWJs
ZSB0byBnZXQgY2xhbmcgdG8gZXhwb3J0IGV4cGxpY2l0bHkgaW5zdGFudGlhdGVkIHRlbXBsYXRl
IG1ldGhvZHMgKHdoaWNoIHdvdWxkIGJlIG5lZWRlZAotLy8gaWYgd2UgdGVtcGxhdGl6ZSBTdHJp
bmdCdWlsZGVyKS4gQXMgYSB3b3JrYXJvdW5kLCB3ZSB1c2UgdGhlIENvbmRpdGlvbmFsQ3Jhc2hP
bk92ZXJmbG93IGhhbmRsZXIKLS8vIGluc3RlYWQgdG8gZG8gYSBydW50aW1lIGNoZWNrIG9uIHdo
ZXRoZXIgaXQgc2hvdWxkIGNyYXNoIG9uIG92ZXJmbG93cyBvciBub3QuCi0vLwotLy8gV2hlbiBj
bGFuZyBpcyBhYmxlIHRvIGV4cG9ydCBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCB0ZW1wbGF0ZSBt
ZXRob2RzLCB3ZSBjYW4gdGVtcGxhdGl6ZQotLy8gU3RyaW5nQnVpbGRlciBhbmQgZG8gYXdheSB3
aXRoIENvbmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93LgotLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEwNTAuCi0KIGNsYXNzIFN0cmluZ0J1aWxkZXIgewot
ICAgIC8vIERpc2FsbG93IGNvcHlpbmcgc2luY2UgaXQncyBleHBlbnNpdmUgYW5kIHdlIGRvbid0
IHdhbnQgY29kZSB0byBkbyBpdCBieSBhY2NpZGVudC4KKyAgICAvLyBEaXNhbGxvdyBjb3B5aW5n
IHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gc2hhcmUgbV9idWZmZXIgYmV0d2VlbiB0d28gYnVpbGRl
cnMuCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nQnVpbGRlcik7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIE92ZXJmbG93SGFu
ZGxlciB7Ci0gICAgICAgIENyYXNoT25PdmVyZmxvdywKLSAgICAgICAgUmVjb3JkT3ZlcmZsb3cK
LSAgICB9OwotCi0gICAgU3RyaW5nQnVpbGRlcihPdmVyZmxvd0hhbmRsZXIgaGFuZGxlciA9IE92
ZXJmbG93SGFuZGxlcjo6Q3Jhc2hPbk92ZXJmbG93KQotICAgICAgICA6IG1fYnVmZmVyQ2hhcmFj
dGVyczgobnVsbHB0cikKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoLnNldFNob3VsZENyYXNoT25P
dmVyZmxvdyhoYW5kbGVyID09IE92ZXJmbG93SGFuZGxlcjo6Q3Jhc2hPbk92ZXJmbG93KTsKLSAg
ICB9CisgICAgU3RyaW5nQnVpbGRlcigpID0gZGVmYXVsdDsKICAgICBTdHJpbmdCdWlsZGVyKFN0
cmluZ0J1aWxkZXImJikgPSBkZWZhdWx0OwogICAgIFN0cmluZ0J1aWxkZXImIG9wZXJhdG9yPShT
dHJpbmdCdWlsZGVyJiYpID0gZGVmYXVsdDsKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkaWRP
dmVyZmxvdygpIHsgbV9sZW5ndGgub3ZlcmZsb3dlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBi
b29sIGhhc092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aC5oYXNPdmVyZmxvd2Vk
KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY3Jhc2hlc09uT3ZlcmZsb3coKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aC5zaG91bGRDcmFzaE9uT3ZlcmZsb3coKTsgfQorICAgIGVudW0gY2xh
c3MgT3ZlcmZsb3dIYW5kbGVyIHsgQ3Jhc2hPbk92ZXJmbG93LCBSZWNvcmRPdmVyZmxvdyB9OyAv
LyBGSVhNRTogRGVzcGl0ZSBpdHMgdXNlIGluIENoZWNrZWQ8PiwgImhhbmRsZXIiIGRvZXMgbm90
IHNlZW0gdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhpcy4KKyAgICBleHBsaWNpdCBTdHJpbmdCdWls
ZGVyKE92ZXJmbG93SGFuZGxlcik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCBzd2Fw
KFN0cmluZ0J1aWxkZXImKTsKKworICAgIHZvaWQgZGlkT3ZlcmZsb3coKTsKKyAgICBib29sIGhh
c092ZXJmbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCA+IFN0cmluZzo6TWF4TGVuZ3Ro
OyB9CisgICAgYm9vbCBjcmFzaGVzT25PdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
Q3Jhc2hPbk92ZXJmbG93OyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRD
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGFwcGVuZENoYXJhY3RlcnMoY29uc3QgTENoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9p
ZCBhcHBlbmRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkgeyBhcHBlbmRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFy
YWN0ZXJzKSwgbGVuZ3RoKTsgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZENoYXJh
Y3RlcnMoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKSB7IGFwcGVuZENo
YXJhY3RlcnMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5n
dGgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+IHZvaWQgYXBwZW5k
KFN0cmluZ1R5cGVzLi4uKTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IEF0b21TdHJpbmcmIGF0
b21TdHJpbmcpCi0gICAgewotICAgICAgICBhcHBlbmQoYXRvbVN0cmluZy5zdHJpbmcoKSk7Ci0g
ICAgfQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQga2VlcCB0aGVzZSBvdmVybG9hZHMgb25seSBp
ZiBvcHRpbWl6YXRpb25zIG1ha2UgdGhlbSBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBzaW5nbGUt
YXJndW1lbnQgZm9ybSBvZiB0aGUgdmFyaWFkaWMgYXBwZW5kIGFib3ZlLgorICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IEF0b21TdHJpbmcmIHN0cmluZykgeyBhcHBlbmQoc3RyaW5nLnN0cmluZygpKTsg
fQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgYXBwZW5kKFN0cmlu
Z1ZpZXcpOworICAgIHZvaWQgYXBwZW5kKFVDaGFyKTsKKyAgICB2b2lkIGFwcGVuZChMQ2hhcik7
CisgICAgdm9pZCBhcHBlbmQoY2hhciBjaGFyYWN0ZXIpIHsgYXBwZW5kKHN0YXRpY19jYXN0PExD
aGFyPihjaGFyYWN0ZXIpKTsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqKTsKIAotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYgKGhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogQWRkIGEg
U3RyaW5nVHlwZUFkYXB0ZXIgc28gd2UgY2FuIGFwcGVuZCBvbmUgc3RyaW5nIGJ1aWxkZXIgdG8g
YW5vdGhlciB3aXRoIHZhcmlhZGljIGFwcGVuZC4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJp
bmdCdWlsZGVyJik7CiAKLSAgICAgICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IHZvaWQgYXBw
ZW5kTGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdKSB7IGFw
cGVuZENoYXJhY3RlcnMoY2hhcmFjdGVycywgY2hhcmFjdGVyQ291bnQgLSAxKTsgfQogCi0gICAg
ICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBp
cyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKQotICAg
ICAgICAvLyB0aGVuIGp1c3QgcmV0YWluIHRoZSBzdHJpbmcuCi0gICAgICAgIGlmICghbV9sZW5n
dGggJiYgIW1fYnVmZmVyKSB7Ci0gICAgICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKLSAgICAg
ICAgICAgIG1fbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICAgICAgbV9pczhCaXQg
PSBtX3N0cmluZy5pczhCaXQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJz
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmdCdWlsZGVy
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChoYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKKyAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihVQ2hhcikg
PSBkZWxldGU7CisgICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoTENoYXIpID0gZGVsZXRlOworICAg
IHZvaWQgYXBwZW5kQ2hhcmFjdGVyKGNoYXIpID0gZGVsZXRlOworICAgIHZvaWQgYXBwZW5kQ2hh
cmFjdGVyKFVDaGFyMzIpOwogCi0gICAgICAgIGlmICghb3RoZXIubV9sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgdm9pZCBhcHBlbmRTdWJzdHJpbmcoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGggPSBTdHJpbmc6Ok1heExlbmd0aCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhjb25zdCBTdHJp
bmcmKTsKIAotICAgICAgICAvLyBJZiB3ZSdyZSBhcHBlbmRpbmcgdG8gYW4gZW1wdHkgc3RyaW5n
LCBhbmQgdGhlcmUgaXMgbm90IGEgYnVmZmVyIChyZXNlcnZlQ2FwYWNpdHkgaGFzIG5vdCBiZWVu
IGNhbGxlZCkKLSAgICAgICAgLy8gdGhlbiBqdXN0IHJldGFpbiB0aGUgc3RyaW5nLgotICAgICAg
ICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlciAmJiAhb3RoZXIubV9zdHJpbmcuaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gb3RoZXIubV9zdHJpbmc7Ci0gICAgICAgICAgICBt
X2xlbmd0aCA9IG90aGVyLm1fbGVuZ3RoOwotICAgICAgICAgICAgbV9pczhCaXQgPSBvdGhlci5t
X2lzOEJpdDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIC8vIEZJWE1FOiBV
bmNsZWFyIHdoeSB0b1N0cmluZyByZXR1cm5zIFN0cmluZyBhbmQgdG9TdHJpbmdQcmVzZXJ2ZUNh
cGFjaXR5IHJldHVybnMgY29uc3QgU3RyaW5nJi4gTWFrZSB0aGVtIGNvbnNpc3RlbnQuCisgICAg
U3RyaW5nIHRvU3RyaW5nKCk7CisgICAgY29uc3QgU3RyaW5nJiB0b1N0cmluZ1ByZXNlcnZlQ2Fw
YWNpdHkoKSBjb25zdDsKKyAgICBBdG9tU3RyaW5nIHRvQXRvbVN0cmluZygpIGNvbnN0OwogCi0g
ICAgICAgIGlmIChvdGhlci5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMo
b3RoZXIuY2hhcmFjdGVyczgoKSwgb3RoZXIubV9sZW5ndGgudW5zYWZlR2V0KCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKG90aGVyLmNoYXJhY3RlcnMxNigp
LCBvdGhlci5tX2xlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAgfQorICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFtX2xlbmd0aDsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBlbmQoU3RyaW5nVmlldyBzdHJpbmdWaWV3KQotICAgIHsKLSAgICAg
ICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJz
KHN0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcnMoc3RyaW5nVmlldy5jaGFyYWN0ZXJz
MTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7Ci0gICAgfQorICAgIG9wZXJhdG9yIFN0cmluZ1Zp
ZXcoKSBjb25zdDsKKyAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0OwogCi0j
aWYgVVNFKENGKQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChDRlN0cmluZ1Jl
Zik7Ci0jZW5kaWYKLSNpZiBVU0UoQ0YpICYmIGRlZmluZWQoX19PQkpDX18pCi0gICAgdm9pZCBh
cHBlbmQoTlNTdHJpbmcgKnN0cmluZykgeyBhcHBlbmQoKF9fYnJpZGdlIENGU3RyaW5nUmVmKXN0
cmluZyk7IH0KLSNlbmRpZgorICAgIGJvb2wgaXM4Qml0KCkgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycygp
IGNvbnN0OworICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsgcmV0dXJuIGNo
YXJhY3RlcnM8TENoYXI+KCk7IH0KKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29u
c3QgeyByZXR1cm4gY2hhcmFjdGVyczxVQ2hhcj4oKTsgfQogICAgIAotICAgIHZvaWQgYXBwZW5k
U3Vic3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCA9IFN0cmluZzo6TWF4TGVuZ3RoKQotICAgIHsKLSAgICAgICAgaWYgKG9mZnNldCA+
PSBzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgY2Fw
YWNpdHkoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNlcnZlQ2FwYWNp
dHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpOwogCi0gICAgICAgIHVuc2lnbmVkIGNsYW1wZWRMZW5n
dGggPSBzdGQ6Om1pbihsZW5ndGgsIHN0cmluZy5sZW5ndGgoKSAtIG9mZnNldCk7Ci0gICAgICAg
IGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKHN0cmlu
Zy5jaGFyYWN0ZXJzOCgpICsgb2Zmc2V0LCBjbGFtcGVkTGVuZ3RoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hhcmFjdGVyczE2KCkgKyBvZmZz
ZXQsIGNsYW1wZWRMZW5ndGgpOwotICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
aHJpbmsodW5zaWduZWQgbmV3TGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBz
aG91bGRTaHJpbmtUb0ZpdCgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNo
cmlua1RvRml0KCk7CiAKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQot
ICAgIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnMpCi0gICAgICAgICAgICBhcHBlbmRDaGFyYWN0
ZXJzKGNoYXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0ZXJzKSk7Ci0gICAgfQorICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGlzQWxsQVNDSUkoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kQ2hh
cmFjdGVyKFVDaGFyKSA9IGRlbGV0ZTsKLSAgICB2b2lkIGFwcGVuZChVQ2hhciBjKQotICAgIHsK
LSAgICAgICAgaWYgKGhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpOwotICAg
ICAgICBpZiAobV9idWZmZXIgJiYgbGVuZ3RoIDwgbV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3Ry
aW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faXM4Qml0KSB7Ci0gICAgICAgICAg
ICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAgICAgICAg
bV9sZW5ndGgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChpc0xhdGluMShjKSkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hh
cmFjdGVyczhbbGVuZ3RoXSA9IHN0YXRpY19jYXN0PExDaGFyPihjKTsKLSAgICAgICAgICAgICAg
ICBtX2xlbmd0aCsrOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBhcHBlbmRDaGFyYWN0ZXJzKCZjLCAxKTsKLSAgICB9Citwcml2YXRl
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFsbG9jYXRpb25DaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBDdXJyZW50Q2hhcmFjdGVyVHlwZT4gdm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25zdCBDdXJyZW50
Q2hhcmFjdGVyVHlwZSogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkQ2FwYWNp
dHkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcmVhbGxvY2F0
ZUJ1ZmZlcih1bnNpZ25lZCByZXF1aXJlZENhcGFjaXR5KTsKKyAgICB2b2lkIHJlYWxsb2NhdGVC
dWZmZXIodW5zaWduZWQgcmVxdWlyZWRDYXBhY2l0eSk7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJh
Y3RlcihMQ2hhcikgPSBkZWxldGU7Ci0gICAgdm9pZCBhcHBlbmQoTENoYXIgYykKLSAgICB7Ci0g
ICAgICAgIGlmIChoYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKTsKLSAgICAg
ICAgaWYgKG1fYnVmZmVyICYmIGxlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmlu
Zy5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKG1faXM4Qml0KQotICAgICAgICAgICAgICAg
IG1fYnVmZmVyQ2hhcmFjdGVyczhbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbbGVuZ3RoXSA9IGM7Ci0gICAgICAgICAg
ICBtX2xlbmd0aCsrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3Rl
cnMoJmMsIDEpOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBD
aGFyYWN0ZXJUeXBlKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcodW5zaWduZWQgcmVxdWlyZWRM
ZW5ndGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IENoYXJhY3RlclR5
cGUqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1Nsb3dDYXNlKHVuc2lnbmVkIHJlcXVpcmVkTGVu
Z3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTENoYXIqIGV4dGVuZEJ1ZmZlckZvckFwcGVu
ZGluZ0xDaGFyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgVUNoYXIqIGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZ1dpdGhVcGNvbnZlcnQodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpOwogCi0gICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoY2hhcikgPSBkZWxl
dGU7Ci0gICAgdm9pZCBhcHBlbmQoY2hhciBjKQotICAgIHsKLSAgICAgICAgYXBwZW5kKHN0YXRp
Y19jYXN0PExDaGFyPihjKSk7Ci0gICAgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJl
aWZ5U3RyaW5nKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZENoYXJhY3RlcihVQ2hhcjMyIGMp
Ci0gICAgewotICAgICAgICBpZiAoVV9JU19CTVAoYykpIHsKLSAgICAgICAgICAgIGFwcGVuZChz
dGF0aWNfY2FzdDxVQ2hhcj4oYykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIGFwcGVuZChVMTZfTEVBRChjKSk7Ci0gICAgICAgIGFwcGVuZChVMTZfVFJBSUwoYykp
OwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRlcnM+IHZv
aWQgYXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVycy4uLik7CiAKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5nKGNvbnN0IFN0cmluZyYp
OworICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBt
X2J1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKKyAgICBib29sIG1fc2hvdWxk
Q3Jhc2hPbk92ZXJmbG93IHsgdHJ1ZSB9OworfTsKIAotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNo
YXJhY3RlckNvdW50PgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0
IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0pIHsgYXBwZW5kQ2hhcmFjdGVycyhj
aGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpOyB9Cit0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nQnVpbGRlcj47CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4gdm9pZCBhcHBlbmQoU3RyaW5nVHlwZXMuLi4pOwor
Ly8gRklYTUU6IE1vdmUgdGhpcyB0byBTdHJpbmdWaWV3IGFuZCBtYWtlIGl0IHRha2UgYSBTdHJp
bmdWaWV3IGluc3RlYWQgb2YgYSBTdHJpbmdCdWlsZGVyPwordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gYm9vbCBlcXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiwgY29uc3QgQ2hhcmFj
dGVyVHlwZSosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgQVNTRVJU
KCFtX2J1ZmZlciB8fCBtX2lzUmVpZmllZCk7Ci0gICAgICAgICAgICBBU1NFUlQoIWhhc092ZXJm
bG93ZWQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAgICAgIH0KKy8vIElu
bGluZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMuCiAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJlaWZ5
U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9CitpbmxpbmUgU3RyaW5n
QnVpbGRlcjo6U3RyaW5nQnVpbGRlcihPdmVyZmxvd0hhbmRsZXIgcG9saWN5KQorICAgIDogbV9z
aG91bGRDcmFzaE9uT3ZlcmZsb3cgeyBwb2xpY3kgPT0gT3ZlcmZsb3dIYW5kbGVyOjpDcmFzaE9u
T3ZlcmZsb3cgfQoreworfQogCi0gICAgY29uc3QgU3RyaW5nJiB0b1N0cmluZ1ByZXNlcnZlQ2Fw
YWNpdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93
ZWQoKSk7Ci0gICAgICAgIGlmIChtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJlaWZ5
U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsKLSAgICB9CitpbmxpbmUgdm9pZCBT
dHJpbmdCdWlsZGVyOjpjbGVhcigpCit7CisgICAgbV9zdHJpbmcgPSB7IH07CisgICAgbV9idWZm
ZXIgPSBudWxscHRyOworICAgIG1fbGVuZ3RoID0gMDsKKyAgICAvLyBXZSBpbnRlbnRpb25hbGx5
IGRvIG5vdCBjaGFuZ2UgbV9zaG91bGRDcmFzaE9uT3ZlcmZsb3cuCit9CiAKLSAgICBBdG9tU3Ry
aW5nIHRvQXRvbVN0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
aGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBlbXB0eUF0b20oKTsKLQotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHN1ZmZpY2ll
bnRseSBvdmVyLWFsbG9jYXRlZCwgbWFrZSBhIG5ldyBBdG9tU3RyaW5nIGZyb20gYSBjb3B5IHNv
IGl0cyBidWZmZXIgaXMgbm90IHNvIGxhcmdlLgotICAgICAgICBpZiAoY2FuU2hyaW5rKCkpIHsK
LSAgICAgICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQXRvbVN0
cmluZyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gQXRvbVN0
cmluZyhjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOyAgICAgICAgICAgIAotICAgICAgICB9Citp
bmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjpzd2FwKFN0cmluZ0J1aWxkZXImIG90aGVyKQorewor
ICAgIG1fc3RyaW5nLnN3YXAob3RoZXIubV9zdHJpbmcpOworICAgIG1fYnVmZmVyLnN3YXAob3Ro
ZXIubV9idWZmZXIpOworICAgIHN0ZDo6c3dhcChtX2xlbmd0aCwgb3RoZXIubV9sZW5ndGgpOwor
ICAgIHN0ZDo6c3dhcChtX3Nob3VsZENyYXNoT25PdmVyZmxvdywgb3RoZXIubV9zaG91bGRDcmFz
aE9uT3ZlcmZsb3cpOworfQogCi0gICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhtX3N0cmluZyk7CitpbmxpbmUgU3RyaW5nQnVpbGRl
cjo6b3BlcmF0b3IgU3RyaW5nVmlldygpIGNvbnN0Cit7CisgICAgaWYgKGlzOEJpdCgpKQorICAg
ICAgICByZXR1cm4geyBjaGFyYWN0ZXJzPExDaGFyPigpLCBsZW5ndGgoKSB9OworICAgIHJldHVy
biB7IGNoYXJhY3RlcnM8VUNoYXI+KCksIGxlbmd0aCgpIH07Cit9CiAKLSAgICAgICAgQVNTRVJU
KG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcobV9idWZmZXIuZ2V0KCksIDAs
IG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKK2lubGluZSB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVu
ZChVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwgbV9i
dWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghbV9i
dWZmZXItPmlzOEJpdCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFVDaGFyKj4obV9idWZm
ZXItPmNoYXJhY3RlcnM8VUNoYXI+KCkpW21fbGVuZ3RoKytdID0gY2hhcmFjdGVyOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpc0xhdGluMShjaGFyYWN0ZXIp
KSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PExDaGFyKj4obV9idWZmZXItPmNoYXJhY3RlcnM8
TENoYXI+KCkpW21fbGVuZ3RoKytdID0gc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3Rlcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CisgICAgYXBwZW5kQ2hhcmFjdGVy
cygmY2hhcmFjdGVyLCAxKTsKK30KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgcmV0
dXJuIG1fbGVuZ3RoLnVuc2FmZUdldCgpOworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBw
ZW5kKExDaGFyIGNoYXJhY3RlcikKK3sKKyAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBt
X2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG1f
YnVmZmVyLT5pczhCaXQoKSkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8TENoYXIqPihtX2J1ZmZl
ci0+Y2hhcmFjdGVyczxMQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBjaGFyYWN0ZXI7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2J1ZmZlci0+Y2hhcmFjdGVy
czxVQ2hhcj4oKSlbbV9sZW5ndGgrK10gPSBjaGFyYWN0ZXI7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisgICAgYXBwZW5kQ2hhcmFjdGVycygmY2hhcmFjdGVyLCAxKTsKK30KIAotICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2xlbmd0aDsgfQoraW5saW5lIHZvaWQgU3RyaW5n
QnVpbGRlcjo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIC8vIElmIHdlJ3Jl
IGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIg
KHJlc2VydmVDYXBhY2l0eSBoYXMgbm90IGJlZW4gY2FsbGVkKQorICAgIC8vIHRoZW4ganVzdCBy
ZXRhaW4gdGhlIHN0cmluZy4KKyAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgeworICAg
ICAgICBtX3N0cmluZyA9IHN0cmluZzsKKyAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3Ro
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCByZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpOworICAgIGFwcGVuZChTdHJp
bmdWaWV3IHsgc3RyaW5nIH0pOworfQogCi0gICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAg
IHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5sZW5ndGgoKSA6IG1fbGVuZ3RoLnVuc2FmZUdl
dCgpOworaW5saW5lIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IFN0cmluZ0J1aWxk
ZXImIG90aGVyKQoreworICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJp
bmcsIGFuZCB0aGVyZSBpcyBub3QgYSBidWZmZXIgKHJlc2VydmVDYXBhY2l0eSBoYXMgbm90IGJl
ZW4gY2FsbGVkKQorICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KKyAgICBpZiAo
IW1fbGVuZ3RoICYmICFtX2J1ZmZlciAmJiAhb3RoZXIubV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAg
ICAgICAgLy8gVXNlIHRoZSBsZW5ndGggZnVuY3Rpb24gaGVyZSBzbyB3ZSBjcmFzaCBvbiBvdmVy
ZmxvdyB3aXRob3V0IGV4cGxpY2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICAgICAgbV9zdHJpbmcg
PSBvdGhlci5tX3N0cmluZzsKKyAgICAgICAgbV9sZW5ndGggPSBvdGhlci5sZW5ndGgoKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2l6
ZSh1bnNpZ25lZCBuZXdTaXplKTsKKyAgICBhcHBlbmQoU3RyaW5nVmlldyB7IG90aGVyIH0pOwor
fQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuU2hyaW5rKCkgY29uc3Q7Citpbmxp
bmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAg
aWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgYXBwZW5kQ2hhcmFjdGVycyhzdHJpbmcuY2hh
cmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZENo
YXJhY3RlcnMoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworfQogCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2hyaW5rVG9GaXQoKTsKK2lubGluZSB2b2lkIFN0
cmluZ0J1aWxkZXI6OmFwcGVuZFN1YnN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgYXBwZW5kKFN0cmluZ1ZpZXcgeyBz
dHJpbmcgfS5zdWJzdHJpbmcob2Zmc2V0LCBsZW5ndGgpKTsKK30KIAotICAgIFVDaGFyIG9wZXJh
dG9yW10odW5zaWduZWQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWhhc092ZXJmbG93ZWQoKSAmJiBpIDwgbV9sZW5ndGgu
dW5zYWZlR2V0PHVuc2lnbmVkPigpKTsKLSAgICAgICAgaWYgKG1faXM4Qml0KQotICAgICAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaV07Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzMTYo
KVtpXTsKLSAgICB9CitpbmxpbmUgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgY2hh
ciogY2hhcmFjdGVycykKK3sKKyAgICBhcHBlbmQoU3RyaW5nVmlldyB7IGNoYXJhY3RlcnMgfSk7
Cit9CiAKLSAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICAgICAgaWYgKCFtX2xlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIEFTU0VSVChtX2J1
ZmZlcik7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKTsKK2lubGluZSB2
b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZENoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgaWYg
KFVfSVNfQk1QKGMpKSB7CisgICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oYykpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGFwcGVuZChVMTZfTEVBRChjKSk7CisgICAgYXBw
ZW5kKFUxNl9UUkFJTChjKSk7Cit9CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9pczhCaXQpOwotICAgICAgICBpZiAoIW1f
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9zdHJp
bmcuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczE2KCk7
Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlcik7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hh
cmFjdGVyczE2KCk7CitpbmxpbmUgU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRvU3RyaW5nKCkKK3sK
KyAgICBpZiAobV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgcmVpZnlTdHJpbmcoKTsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBpczhCaXQoKSBjb25z
dCB7IHJldHVybiBtX2lzOEJpdDsgfQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzQWxs
QVNDSUkoKSBjb25zdDsKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9CiAKLSAgICBvcGVyYXRvciBT
dHJpbmdWaWV3KCkgY29uc3Q7CitpbmxpbmUgY29uc3QgU3RyaW5nJiBTdHJpbmdCdWlsZGVyOjp0
b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSBjb25zdAoreworICAgIGlmIChtX3N0cmluZy5pc051
bGwoKSkKKyAgICAgICAgcmVpZnlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9CiAK
LSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fbGVuZ3RoID0gMDsKLSAgICAgICAg
bV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOwotICAgICAg
ICBtX2J1ZmZlckNoYXJhY3RlcnM4ID0gbnVsbHB0cjsKLSAgICAgICAgbV9pczhCaXQgPSB0cnVl
OwotICAgIH0KK2lubGluZSBBdG9tU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRvQXRvbVN0cmluZygp
IGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgp
OwogCi0gICAgdm9pZCBzd2FwKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCi0gICAgewot
ICAgICAgICBzdGQ6OnN3YXAobV9sZW5ndGgsIHN0cmluZ0J1aWxkZXIubV9sZW5ndGgpOwotICAg
ICAgICBtX3N0cmluZy5zd2FwKHN0cmluZ0J1aWxkZXIubV9zdHJpbmcpOwotICAgICAgICBtX2J1
ZmZlci5zd2FwKHN0cmluZ0J1aWxkZXIubV9idWZmZXIpOwotICAgICAgICBzdGQ6OnN3YXAobV9p
czhCaXQsIHN0cmluZ0J1aWxkZXIubV9pczhCaXQpOwotICAgICAgICBzdGQ6OnN3YXAobV9idWZm
ZXJDaGFyYWN0ZXJzOCwgc3RyaW5nQnVpbGRlci5tX2J1ZmZlckNoYXJhY3RlcnM4KTsKLSAgICAg
ICAgQVNTRVJUKCFtX2J1ZmZlciB8fCBoYXNPdmVyZmxvd2VkKCkgfHwgbV9idWZmZXItPmxlbmd0
aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7Ci0gICAgfQorICAgIC8vIElm
IHRoZSBidWZmZXIgaXMgc3VmZmljaWVudGx5IG92ZXItYWxsb2NhdGVkLCBtYWtlIGEgbmV3IEF0
b21TdHJpbmcgZnJvbSBhIGNvcHkgc28gaXRzIGJ1ZmZlciBpcyBub3Qgc28gbGFyZ2UuCisgICAg
aWYgKHNob3VsZFNocmlua1RvRml0KCkpCisgICAgICAgIHJldHVybiBTdHJpbmdWaWV3IHsgKnRo
aXMgfS50b0F0b21TdHJpbmcoKTsKIAotcHJpdmF0ZToKLSAgICB2b2lkIGFsbG9jYXRlQnVmZmVy
KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgp
OwotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJz
LCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlclVwQ29u
dmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVu
Z3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHJlYWxsb2Nh
dGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogZXh0ZW5kQnVmZmVy
Rm9yQXBwZW5kaW5nKHVuc2lnbmVkIGFkZGl0aW9uYWxMZW5ndGgpOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogZXh0ZW5k
QnVmZmVyRm9yQXBwZW5kaW5nV2l0aG91dE92ZXJmbG93Q2hlY2soQ2hlY2tlZEludDMyIHJlcXVp
cmVkTGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0
ZXJUeXBlKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmdTbG93Q2FzZSh1bnNpZ25lZCByZXF1aXJl
ZExlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIExDaGFyKiBleHRlbmRCdWZmZXJGb3JB
cHBlbmRpbmc4KENoZWNrZWRJbnQzMiByZXF1aXJlZExlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFVDaGFyKiBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihDaGVja2VkSW50MzIgcmVx
dWlyZWRMZW5ndGgpOworICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBtX3N0cmluZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZ
U19JTkxJTkUgQ2hhcmFjdGVyVHlwZSogZ2V0QnVmZmVyQ2hhcmFjdGVycygpOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7CisgICAgLy8gVXNlIHRoZSBs
ZW5ndGggZnVuY3Rpb24gaGVyZSBzbyB3ZSBjcmFzaCBvbiBvdmVyZmxvdyB3aXRob3V0IGV4cGxp
Y2l0IG92ZXJmbG93IGNoZWNrcy4KKyAgICBBU1NFUlQobV9idWZmZXIpOworICAgIHJldHVybiB7
IG1fYnVmZmVyLmdldCgpLCAwLCBsZW5ndGgoKSB9OworfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gU3RyaW5nVHlwZUFkYXB0ZXJzPiB2b2lkIGFwcGVuZEZyb21BZGFwdGVycyhTdHJpbmdU
eXBlQWRhcHRlcnMuLi4pOworaW5saW5lIHVuc2lnbmVkIFN0cmluZ0J1aWxkZXI6Omxlbmd0aCgp
IGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWhhc092ZXJmbG93ZWQoKSk7CisgICAgcmV0
dXJuIG1fbGVuZ3RoOworfQogCi0gICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IG1fYnVmZmVyOwotICAgIHVuaW9uIHsKLSAgICAgICAgTENoYXIqIG1f
YnVmZmVyQ2hhcmFjdGVyczg7Ci0gICAgICAgIFVDaGFyKiBtX2J1ZmZlckNoYXJhY3RlcnMxNjsK
LSAgICB9OwotICAgIHN0YXRpY19hc3NlcnQoU3RyaW5nOjpNYXhMZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCksICIiKTsKLSAgICBDaGVja2VkPGludDMyX3QsIENv
bmRpdGlvbmFsQ3Jhc2hPbk92ZXJmbG93PiBtX2xlbmd0aDsKLSAgICBib29sIG1faXM4Qml0IHsg
dHJ1ZSB9OwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbXV0YWJsZSBib29sIG1faXNSZWlmaWVk
IHsgZmFsc2UgfTsKLSNlbmRpZgotfTsKK2lubGluZSB1bnNpZ25lZCBTdHJpbmdCdWlsZGVyOjpj
YXBhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0
aCgpIDogbGVuZ3RoKCk7Cit9CiAKLWlubGluZSBTdHJpbmdCdWlsZGVyOjpvcGVyYXRvciBTdHJp
bmdWaWV3KCkgY29uc3QKK2lubGluZSBVQ2hhciBTdHJpbmdCdWlsZGVyOjpvcGVyYXRvcltdKHVu
c2lnbmVkIGkpIGNvbnN0CiB7Ci0gICAgaWYgKG1faXM4Qml0KQotICAgICAgICByZXR1cm4geyBj
aGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSB9OwotICAgIHJldHVybiB7IGNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgoKSB9OworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aSA8IGxlbmd0aCgpKTsKKyAgICByZXR1cm4gaXM4Qml0KCkgPyBjaGFyYWN0ZXJzPExDaGFyPigp
W2ldIDogY2hhcmFjdGVyczxVQ2hhcj4oKVtpXTsKIH0KIAotdGVtcGxhdGU8PgotQUxXQVlTX0lO
TElORSBMQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4oKQor
aW5saW5lIGJvb2wgU3RyaW5nQnVpbGRlcjo6aXM4Qml0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
bV9pczhCaXQpOwotICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnM4OworICAgIHJldHVybiBt
X2J1ZmZlciA/IG1fYnVmZmVyLT5pczhCaXQoKSA6IG1fc3RyaW5nLmlzOEJpdCgpOwogfQogCi10
ZW1wbGF0ZTw+Ci1BTFdBWVNfSU5MSU5FIFVDaGFyKiBTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJD
aGFyYWN0ZXJzPFVDaGFyPigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgY29uc3QgQ2hhcmFjdGVyVHlwZSogU3RyaW5nQnVpbGRlcjo6Y2hhcmFjdGVycygpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0gICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVy
czE2OworICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
ICghbV9zdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJz
PENoYXJhY3RlclR5cGU+KCk7CisgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzPENoYXJh
Y3RlclR5cGU+KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVBZGFwdGVy
cz4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFw
dGVycy4uLiBhZGFwdGVycykKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVBZGFwdGVy
cz4gdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0
ZXJzLi4uIGFkYXB0ZXJzKQogewotICAgIGF1dG8gcmVxdWlyZWRMZW5ndGggPSBjaGVja2VkU3Vt
PGludDMyX3Q+KG1fbGVuZ3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7Ci0gICAgaWYgKG1faXM4
Qml0ICYmIGFyZThCaXQoYWRhcHRlcnMuLi4pKSB7Ci0gICAgICAgIExDaGFyKiBkZXN0aW5hdGlv
biA9IGV4dGVuZEJ1ZmZlckZvckFwcGVuZGluZzgocmVxdWlyZWRMZW5ndGgpOwotICAgICAgICBp
ZiAoIWRlc3RpbmF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzT3ZlcmZsb3dlZCgpKTsK
KyAgICBhdXRvIHJlcXVpcmVkTGVuZ3RoID0gc2F0dXJhdGVkU3VtPHVpbnQzMl90PihtX2xlbmd0
aCwgYWRhcHRlcnMubGVuZ3RoKCkuLi4pOworICAgIGlmIChpczhCaXQoKSAmJiBhcmU4Qml0KGFk
YXB0ZXJzLi4uKSkgeworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uID0gZXh0ZW5kQnVmZmVyRm9y
QXBwZW5kaW5nTENoYXIocmVxdWlyZWRMZW5ndGgpOworICAgICAgICBpZiAoIWRlc3RpbmF0aW9u
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIHN0cmluZ1R5cGVBZGFw
dGVyQWNjdW11bGF0b3IoZGVzdGluYXRpb24sIGFkYXB0ZXJzLi4uKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBVQ2hhciogZGVzdGluYXRpb24gPSBleHRlbmRCdWZmZXJGb3JBcHBlbmRpbmcxNihy
ZXF1aXJlZExlbmd0aCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAg
IEFTU0VSVChoYXNPdmVyZmxvd2VkKCkpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uID0gZXh0
ZW5kQnVmZmVyRm9yQXBwZW5kaW5nV2l0aFVwY29udmVydChyZXF1aXJlZExlbmd0aCk7CisgICAg
ICAgIGlmICghZGVzdGluYXRpb24pCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAg
ICAgICAgc3RyaW5nVHlwZUFkYXB0ZXJBY2N1bXVsYXRvcihkZXN0aW5hdGlvbiwgYWRhcHRlcnMu
Li4pOwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+Ci12b2lk
IFN0cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdUeXBlcy4uLiBzdHJpbmdzKQordGVtcGxhdGU8
dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+IHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKFN0cmlu
Z1R5cGVzLi4uIHN0cmluZ3MpCiB7CiAgICAgYXBwZW5kRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGVzPihzdHJpbmdzKS4uLik7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRo
aXMgdG8gU3RyaW5nVmlldyBhbmQgbWFrZSBpdCB0YWtlIGEgU3RyaW5nVmlldyBpbnN0ZWFkIG9m
IGEgU3RyaW5nQnVpbGRlcj8KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIHMsIGNvbnN0IENoYXJhY3RlclR5cGUqIGJ1ZmZl
ciwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpZiAocy5sZW5ndGgoKSAhPSBsZW5n
dGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAg
ICByZXR1cm4gZXF1YWwocy5jaGFyYWN0ZXJzOCgpLCBidWZmZXIsIGxlbmd0aCk7Ci0KLSAgICBy
ZXR1cm4gZXF1YWwocy5jaGFyYWN0ZXJzMTYoKSwgYnVmZmVyLCBsZW5ndGgpOworICAgIHJldHVy
biBidWlsZGVyID09IFN0cmluZ1ZpZXcgeyBidWZmZXIsIGxlbmd0aCB9OwogfQogCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nQnVpbGRlcj4g
ewogICAgIHVzaW5nIFJldHVyblR5cGUgPSB2b2lkOwogICAgIHVzaW5nIEFkZGl0aW9uYWxBcmd1
bWVudFR5cGUgPSBTdHJpbmdCdWlsZGVyOwotICAgIHN0YXRpYyB2b2lkIGZsdXNoKExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFN0cmluZ0J1aWxkZXIqIHN0cmluZ0J1aWxkZXIp
IHsgc3RyaW5nQnVpbGRlci0+YXBwZW5kQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9
CisgICAgc3RhdGljIHZvaWQgZmx1c2goY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCwgU3RyaW5nQnVpbGRlciogYnVpbGRlcikgeyBidWlsZGVyLT5hcHBlbmRDaGFyYWN0
ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXJKU09OLmNwcAppbmRleCBjMzExOGI2MzkxYmZl
ZjJiOGNlZjg3ZDY2YWYzYmQ2YjliNzFiOTBiLi44M2VkMzhiMTk4MTk0YTA0NjkyZWJlMWE2Mjhi
ZTgzZjM3MzFhYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXJKU09OLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXJKU09OLmNw
cApAQCAtMTA1LDUyICsxMDUsNTggQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRRdW90ZWRK
U09OU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGlmIChoYXNPdmVyZmxvd2Vk
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggYnVm
ZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlzIHN0cmluZyB3aXRob3V0IGhhdmluZwotICAgIC8vIHRv
IHdvcnJ5IGFib3V0IHJlYWxsb2NhdGluZyBpbiB0aGUgbWlkZGxlLgorCisgICAgLy8gTWFrZSBz
dXJlIHdlIGhhdmUgZW5vdWdoIGJ1ZmZlciBzcGFjZSB0byBhcHBlbmQgdGhpcyBzdHJpbmcgZm9y
IHdvcnN0IGNhc2Ugd2l0aG91dCByZWFsbG9jYXRpbmcuCiAgICAgLy8gVGhlIDIgaXMgZm9yIHRo
ZSAnIicgcXVvdGVzIG9uIGVhY2ggZW5kLgotICAgIC8vIFRoZSA2IGlzIGZvciBjaGFyYWN0ZXJz
IHRoYXQgbmVlZCB0byBiZSBcdU5OTk4gZW5jb2RlZC4KKyAgICAvLyBUaGUgNiBpcyB0aGUgd29y
c3QgY2FzZSBmb3IgYSBzaW5nbGUgY29kZSB1bml0IHRoYXQgY291bGQgYmUgZW5jb2RlZCBhcyBc
dU5OTk4uCiAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IHN0cmluZ0xlbmd0
aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gbWF4aW11bUNhcGFjaXR5UmVxdWlyZWQgPSBsZW5ndGgoKTsKLSAgICBtYXhpbXVtQ2FwYWNp
dHlSZXF1aXJlZCArPSAyICsgc3RyaW5nTGVuZ3RoICogNjsKLSAgICB1bnNpZ25lZCBhbGxvY2F0
aW9uU2l6ZTsKLSAgICBpZiAoQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdyA9PSBtYXhpbXVtQ2Fw
YWNpdHlSZXF1aXJlZC5zYWZlR2V0KGFsbG9jYXRpb25TaXplKSkKLSAgICAgICAgcmV0dXJuIGRp
ZE92ZXJmbG93KCk7Ci0gICAgLy8gVGhpcyBtYXgoKSBpcyBoZXJlIHRvIGFsbG93IHVzIHRvIGFs
bG9jYXRlIHNpemVzIGJldHdlZW4gdGhlIHJhbmdlIFsyXjMxLCAyXjMyIC0gMl0gYmVjYXVzZSBy
b3VuZFVwVG9Qb3dlck9mVHdvKDE8PDMxICsgc29tZSBpbnQgc21hbGxlciB0aGFuIDE8PDMxKSA9
PSAwLgotICAgIC8vIEZJWE1FOiByb3VuZFVwVG9Qb3dlck9mVHdvIHNob3VsZCB0YWtlIENoZWNr
ZWQ8dW5zaWduZWQ+IGFuZCBhYm9ydCBpZiBpdCBmYWlscyB0byByb3VuZCB1cC4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MDg2Ci0gICAgYWxsb2Nh
dGlvblNpemUgPSBzdGQ6Om1heChhbGxvY2F0aW9uU2l6ZSwgcm91bmRVcFRvUG93ZXJPZlR3byhh
bGxvY2F0aW9uU2l6ZSkpOworICAgIGF1dG8gbWF4aW11bUNhcGFjaXR5UmVxdWlyZWQgPSBtX2xl
bmd0aCArIDIgKyBzdHJpbmdMZW5ndGggKiA2OworICAgIGlmIChtYXhpbXVtQ2FwYWNpdHlSZXF1
aXJlZC5oYXNPdmVyZmxvd2VkKCkpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3coKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIC8vIEFsbG9jYXRpbmcgdGhpcyBtdWNoIHdpbGwgZGVmaW5p
dGVseSBmYWlsLgotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA+IFN0cmluZzo6TWF4TGVuZ3RoKQot
ICAgICAgICByZXR1cm4gZGlkT3ZlcmZsb3coKTsKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIG1h
eGltdW0gbGVuZ3RoIGJlZm9yZSBjYWxsaW5nIHJvdW5kVXBQb3dlck9mVHdvIGJlY2F1c2UgdGhh
dCBmdW5jdGlvbiByZXR1cm5zIDAgZm9yIHZhbHVlcyBpbiB0aGUgcmFuZ2UgWzJeMzEsIDJeMzIt
Ml0uCisgICAgLy8gRklYTUU6IEluc3RlYWQsIHJvdW5kVXBUb1Bvd2VyT2ZUd28gc2hvdWxkIGJl
IGZpeGVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHVzZWZ1bCBpbiB0aG9zZSBjYXNlcywgcGVyaGFw
cyB1c2luZyBjaGVja2VkIG9yIHNhdHVyYXRlZCBhcml0aG1ldGljLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYwODYKKyAgICBhdXRvIGFsbG9jYXRp
b25TaXplID0gbWF4aW11bUNhcGFjaXR5UmVxdWlyZWQudW5zYWZlR2V0KCk7CisgICAgaWYgKGFs
bG9jYXRpb25TaXplID4gU3RyaW5nOjpNYXhMZW5ndGgpIHsKKyAgICAgICAgZGlkT3ZlcmZsb3co
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhbGxvY2F0aW9uU2l6ZSA9IHJvdW5kVXBU
b1Bvd2VyT2ZUd28oYWxsb2NhdGlvblNpemUpOworICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA+IFN0
cmluZzo6TWF4TGVuZ3RoKSB7CisgICAgICAgIGRpZE92ZXJmbG93KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgc3dpdGNoaW5nIHRvIGV4dGVuZEJ1
ZmZlckZvckFwcGVuZGluZy9zaHJpbmsgaW5zdGVhZCB0byBzaGFyZSBtb3JlIGNvZGUgd2l0aCB0
aGUgcmVzdCBvZiBTdHJpbmdCdWlsZGVyLgogICAgIGlmIChpczhCaXQoKSAmJiAhc3RyaW5nLmlz
OEJpdCgpKQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX2J1ZmZlckNoYXJhY3Rl
cnM4LCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIGFsbG9jYXRlQnVmZmVyPFVDaGFyPihjaGFy
YWN0ZXJzPExDaGFyPigpLCBhbGxvY2F0aW9uU2l6ZSk7CiAgICAgZWxzZQogICAgICAgICByZXNl
cnZlQ2FwYWNpdHkoYWxsb2NhdGlvblNpemUpOwogICAgIGlmIChVTkxJS0VMWShoYXNPdmVyZmxv
d2VkKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+
PSBhbGxvY2F0aW9uU2l6ZSk7CiAKLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgQVNTRVJU
KHN0cmluZy5pczhCaXQoKSk7Ci0gICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJh
Y3RlcnM4ICsgbV9sZW5ndGgudW5zYWZlR2V0PHVuc2lnbmVkPigpOworICAgIGlmIChtX2J1ZmZl
ci0+aXM4Qml0KCkpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXJzID0gY29uc3RfY2FzdDxMQ2hh
cio+KG1fYnVmZmVyLT5jaGFyYWN0ZXJzPExDaGFyPigpKTsKKyAgICAgICAgYXV0byBvdXRwdXQg
PSBjaGFyYWN0ZXJzICsgbV9sZW5ndGg7CiAgICAgICAgICpvdXRwdXQrKyA9ICciJzsKICAgICAg
ICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAg
ICAgbV9sZW5ndGggPSBvdXRwdXQgLSBtX2J1ZmZlckNoYXJhY3RlcnM4OworICAgICAgICBtX2xl
bmd0aCA9IG91dHB1dCAtIGNoYXJhY3RlcnM7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIq
IG91dHB1dCA9IG1fYnVmZmVyQ2hhcmFjdGVyczE2ICsgbV9sZW5ndGgudW5zYWZlR2V0PHVuc2ln
bmVkPigpOworICAgICAgICBhdXRvIGNoYXJhY3RlcnMgPSBjb25zdF9jYXN0PFVDaGFyKj4obV9i
dWZmZXItPmNoYXJhY3RlcnM8VUNoYXI+KCkpOworICAgICAgICBhdXRvIG91dHB1dCA9IGNoYXJh
Y3RlcnMgKyBtX2xlbmd0aDsKICAgICAgICAgKm91dHB1dCsrID0gJyInOwogICAgICAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKQogICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVy
bmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChvdXRw
dXQsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgKm91
dHB1dCsrID0gJyInOwotICAgICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIG1fYnVmZmVyQ2hhcmFj
dGVyczE2OworICAgICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIGNoYXJhY3RlcnM7CiAgICAgfQot
ICAgIEFTU0VSVCghaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0
aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldDx1bnNpZ25lZD4oKSk7CisgICAgQVNTRVJUKG1fYnVm
ZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmggYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MmE4MWQyMjZkNzM0YjA5OGM2MjBhMGRhYTY5MmZjMjU4ODcwZGIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmgKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaD4KKworI2lmIFVTRShDRikKKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+IHsKK3B1Ymxp
YzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihDRlN0cmluZ1JlZik7CisgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcgPyBDRlN0cmluZ0dldExlbmd0aChtX3N0cmlu
ZykgOiAwOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9zdHJpbmcgfHwg
Q0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG1fc3RyaW5nLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGlu
MSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8o
Q2hhcmFjdGVyVHlwZSopIGNvbnN0OworCitwcml2YXRlOgorICAgIENGU3RyaW5nUmVmIG1fc3Ry
aW5nOworfTsKKworaW5saW5lIFN0cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPjo6U3RyaW5n
VHlwZUFkYXB0ZXIoQ0ZTdHJpbmdSZWYgc3RyaW5nKQorICAgIDogbV9zdHJpbmcgeyBzdHJpbmcg
fQoreworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPENGU3Ry
aW5nUmVmPjo6d3JpdGVUbzxMQ2hhcj4oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAoreworICAg
IGlmIChtX3N0cmluZykKKyAgICAgICAgc3RkOjptZW1jcHkoZGVzdGluYXRpb24sIENGU3RyaW5n
R2V0Q1N0cmluZ1B0cihtX3N0cmluZywga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEpLCBDRlN0
cmluZ0dldExlbmd0aChtX3N0cmluZykpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0
cmluZ1R5cGVBZGFwdGVyPENGU3RyaW5nUmVmPjo6d3JpdGVUbzxVQ2hhcj4oVUNoYXIqIGRlc3Rp
bmF0aW9uKSBjb25zdAoreworICAgIGlmIChtX3N0cmluZykKKyAgICAgICAgQ0ZTdHJpbmdHZXRD
aGFyYWN0ZXJzKG1fc3RyaW5nLCBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0aChtX3N0
cmluZykpLCByZWludGVycHJldF9jYXN0PFVuaUNoYXIqPihkZXN0aW5hdGlvbikpOworfQorCisj
aWZkZWYgX19PQkpDX18KKwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxOU1N0
cmluZyAqPiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxDRlN0cmluZ1JlZj4geworcHVibGlj
OgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKE5TU3RyaW5nICpzdHJpbmcpCisgICAgICAgIDogU3Ry
aW5nVHlwZUFkYXB0ZXI8Q0ZTdHJpbmdSZWY+KChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcp
CisgICAgeworICAgIH0KK307CisKKyNlbmRpZgorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0YpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1RleHRTdHJlYW1Db2NvYS5tbSBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4dFN0cmVhbUNvY29hLm1tCmluZGV4IGM3NGJm
OWNjZmUzNGE3M2ViZGU0NTMyZWNjMzk0ZGIyNjUyOWE3MDcuLmU4NmI5ZDNmNDE2YWQyNDk3MzQ2
NDVkZmVmZWUwZWM5MjJiYTRmMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29j
b2EvVGV4dFN0cmVhbUNvY29hLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvVGV4
dFN0cmVhbUNvY29hLm1tCkBAIC0yMSw2ICsyMSw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAorI2ltcG9ydCA8d3RmL3RleHQvY2YvU3Ry
aW5nQ29uY2F0ZW5hdGVDRi5oPgorCiBuYW1lc3BhY2UgV1RGIHsKIAogVGV4dFN0cmVhbSYgVGV4
dFN0cmVhbTo6b3BlcmF0b3I8PChpZDxOU09iamVjdD4gb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9haXJwbGF5L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9haXJwbGF5L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3Bw
CmluZGV4IDNlYjdiZjliODc1ZjRhOWJkOWU1MjM4MWVjOTdmOTBjYTI1ODFlNjQuLjI5ODNjMGVm
MTFhYTNjMDZlMjI2MzE0NzY1NGJiZDVmM2RkZGYzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYWlycGxheS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FpcnBsYXkvV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAKQEAg
LTczLDYgKzczLDcgQEAgc3RhdGljIGJvb2wgZmxhZ3NBcmVTZXQoTWVkaWFQcm9kdWNlcjo6TWVk
aWFTdGF0ZUZsYWdzIHZhbHVlLCBNZWRpYVByb2R1Y2VyOjpNZWQKIFN0cmluZyBtZWRpYVByb2R1
Y2VyU3RhdGVTdHJpbmcoTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIGZsYWdzKQogewog
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nOworICAgIHN0cmluZy5hcHBlbmQoIiB7ICIpOwogICAg
IGlmIChmbGFncyAmIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGU6OklzUGxheWluZ0F1ZGlvKQog
ICAgICAgICBzdHJpbmcuYXBwZW5kKCJJc1BsYXlpbmdBdWRpbysiKTsKICAgICBpZiAoZmxhZ3Mg
JiBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlOjpJc1BsYXlpbmdWaWRlbykKQEAgLTkyLDkgKzkz
LDkgQEAgU3RyaW5nIG1lZGlhUHJvZHVjZXJTdGF0ZVN0cmluZyhNZWRpYVByb2R1Y2VyOjpNZWRp
YVN0YXRlRmxhZ3MgZmxhZ3MpCiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHN0
cmluZy5hcHBlbmQoIklzTm90UGxheWluZyIpOwogICAgIGVsc2UKLSAgICAgICAgc3RyaW5nLnJl
c2l6ZShzdHJpbmcubGVuZ3RoKCkgLSAxKTsKLQotICAgIHJldHVybiBtYWtlU3RyaW5nKCIgeyAi
LCBzdHJpbmcudG9TdHJpbmcoKSwgIiB9Iik7CisgICAgICAgIHN0cmluZy5zaHJpbmsoc3RyaW5n
Lmxlbmd0aCgpIC0gMSk7CisgICAgc3RyaW5nLmFwcGVuZCgiIH0iKTsKKyAgICByZXR1cm4gc3Ry
aW5nLnRvU3RyaW5nKCk7CiB9CiAKIGNsYXNzIFdlYk1lZGlhU2Vzc2lvbkxvZ2dlciB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmlu
ZGV4IDgyYmYxOWFlODI4Njc4ZDQ0ZWFmY2Q2NDc5OGU3ZTBjMzYwZWY2M2MuLjViMjMxNTVlMGFl
OGVlYWE5NTQxZmRlYTU5MTQ1MTFkZTliYmYzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC01NTYsNyArNTU2LDcgQEAg
c3RhdGljIHZvaWQgc3RyaXBUcmFpbGluZ05ld2xpbmUoU3RyaW5nQnVpbGRlciYgcmVzdWx0KQog
ICAgIC8vIFJlbW92ZSBvbmUgdHJhaWxpbmcgbmV3bGluZTsgdGhlcmUncyBhbHdheXMgb25lIHRo
YXQncyBjb2xsYXBzZWQgb3V0IGJ5IHJlbmRlcmluZy4KICAgICBzaXplX3Qgc2l6ZSA9IHJlc3Vs
dC5sZW5ndGgoKTsKICAgICBpZiAoc2l6ZSAmJiByZXN1bHRbc2l6ZSAtIDFdID09IG5ld2xpbmVD
aGFyYWN0ZXIpCi0gICAgICAgIHJlc3VsdC5yZXNpemUoc2l6ZSAtIDEpOworICAgICAgICByZXN1
bHQuc2hyaW5rKHNpemUgLSAxKTsKIH0KIAogc3RhdGljIFN0cmluZyBpbm5lclRleHRWYWx1ZUZy
b20oVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50JiBpbm5lclRleHQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCmluZGV4
IDczYzgwMWI5MzhjN2E4ZDhmNGQ0ZDc1NTNlYWU2Zjc1MTNhMTgxNWUuLjlmMmE3NjU4MTNkYzZm
YTY0MzZkYmNlNzZmZGMxZDIwNWQwMzc1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC00OCw2ICs0OCw3IEBA
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgpAQCAtMzA4
LDM4ICszMDksMzAgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0
aW9uc0JhY2tncm91bmRDU1MoKSBjb25zdAogQ29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9ydGFudCkgY29uc3QKIHsKICAgICBN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWluUHRyPENHQ29s
b3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRD
b2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpOwotICAgIENv
bG9yIHRleHRDb2xvcihjb2xvci5nZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgp
KQorICAgIENvbG9yIHRleHRDb2xvciA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlG
b3JlZ3JvdW5kQ29sb3Ioa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3Ip
KS5nZXQoKTsKKyAgICBpZiAoIXRleHRDb2xvci5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gVGhp
cyBkZWZhdWx0IHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4g
bWVkaWFDb250cm9scy5jc3MgZm9yIC13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIu
CiAgICAgICAgIHRleHRDb2xvciA9IENvbG9yOjp3aGl0ZTsKLSAgICAKKyAgICB9CiAgICAgaW1w
b3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVl
OwogICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5k
T3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7CiAgICAg
aWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRp
b25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKICAgICByZXR1cm4gdGV4dENvbG9yLmNvbG9y
V2l0aEFscGhhKG9wYWNpdHkpOwogfQotICAgIAorCiBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKIHsKICAgICBib29sIGlt
cG9ydGFudDsKLSAgICBDb2xvciB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihpbXBvcnRh
bnQpOwotCisgICAgYXV0byB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihpbXBvcnRhbnQp
OwogICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0KICAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUNvbG9yLCB0
ZXh0Q29sb3IsIGltcG9ydGFudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwcGVuZENTUyhTdHJpbmdC
dWlsZGVyJiBidWlsZGVyLCBDU1NQcm9wZXJ0eUlEIGlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sIGltcG9ydGFudCkKIHsKLSAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJp
bmcoaWQpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHZh
bHVlKTsKLSAgICBpZiAoaW1wb3J0YW50KQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IiAhaW1wb3J0YW50Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKKyAgICBidWlsZGVyLmFw
cGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoaWQpLCAnOicsIHZhbHVlLCBpbXBvcnRhbnQgPyAi
ICFpbXBvcnRhbnQ7IiA6ICI7Iik7CiB9CiAgICAgCiBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUY6OndpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKSBjb25zdApAQCAtMzc5
LDcgKzM3Miw2IEBAIGJvb2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25T
dHJva2VXaWR0aEZvckZvbnQoZmxvYXQgZm9udFNpemUsIGNvCiAgICAgLy8gU2luY2Ugb25seSBo
YWxmIG9mIHRoZSBzdHJva2UgaXMgdmlzaWJsZSBiZWNhdXNlIHRoZSBzdHJva2UgaXMgZHJhd24g
YmVmb3JlIHRoZSBmaWxsLCB3ZSBkb3VibGUgdGhlIHN0cm9rZSB3aWR0aCBoZXJlLgogICAgIHN0
cm9rZVdpZHRoID0gc3Ryb2tlV2lkdGhQdCAqIDI7CiAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3Ig
PT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIAogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC00MTgsMjQgKzQxMCwxNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRDU1MoKSBjb25zdAogewogICAgIE1B
Q2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKICAgICAKLSAgICBSZXRhaW5QdHI8
Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udCA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNv
cHlGb250RGVzY3JpcHRvckZvclN0eWxlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
JmJlaGF2aW9yLCBrTUFDYXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZURlZmF1bHQpKTsKKyAgICBh
dXRvIGZvbnQgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JG
b3JTdHlsZShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2Fw
dGlvbkFwcGVhcmFuY2VGb250U3R5bGVEZWZhdWx0KSk7CiAgICAgaWYgKCFmb250KQogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IG5hbWUg
PSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZv
bnROYW1lQXR0cmlidXRlKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOwogICAg
IGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7Ci0gICAgCi0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1l
U3RyaW5nKENTU1Byb3BlcnR5Rm9udEZhbWlseSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiOiBcIiIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihu
YW1lLmdldCgpKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJyInKTsKLQotICAgIGF1dG8gY2FzY2Fk
ZUxpc3QgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udERlc2NyaXB0b3JD
b3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSkpKTsK
LQotICAgIGlmIChjYXNjYWRlTGlzdCkgeworICAgIGJ1aWxkZXIuYXBwZW5kKCJmb250LWZhbWls
eTogXCIiLCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4obmFtZS5nZXQoKSksICciJyk7CisgICAg
aWYgKGF1dG8gY2FzY2FkZUxpc3QgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENU
Rm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnRDYXNjYWRlTGlz
dEF0dHJpYnV0ZSkpKSkgewogICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5
R2V0Q291bnQoY2FzY2FkZUxpc3QuZ2V0KCkpOyBpKyspIHsKICAgICAgICAgICAgIGF1dG8gZm9u
dENhc2NhZGUgPSBzdGF0aWNfY2FzdDxDVEZvbnREZXNjcmlwdG9yUmVmPihDRkFycmF5R2V0VmFs
dWVBdEluZGV4KGNhc2NhZGVMaXN0LmdldCgpLCBpKSk7CiAgICAgICAgICAgICBpZiAoIWZvbnRD
YXNjYWRlKQpAQCAtNDQzLDE2ICs0MjgsMTAgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29uc3QKICAgICAgICAgICAgIGF1
dG8gZm9udENhc2NhZGVOYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0
ZShmb250Q2FzY2FkZSwga0NURm9udE5hbWVBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgIGlmICgh
Zm9udENhc2NhZGVOYW1lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiwgXCIiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRp
Y19jYXN0PENGU3RyaW5nUmVmPihmb250Q2FzY2FkZU5hbWUuZ2V0KCkpKTsKLSAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBcIiIs
IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihmb250Q2FzY2FkZU5hbWUuZ2V0KCkpLCAnIicpOwog
ICAgICAgICB9CiAgICAgfQotICAgIAotICAgIGlmIChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBw
ZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
ICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOwotICAgIAorICAgIGJ1aWxk
ZXIuYXBwZW5kKGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1
ZSA/ICIgIWltcG9ydGFudDsiIDogIjsiKTsKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OwogfQogCkBAIC01NjEsNDMgKzU0MCwxOCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUY6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCkgY29uc3QKICNpZiBIQVZFKE1F
RElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogICAgIGlmICghTWVkaWFBY2Nlc3NpYmlsaXR5
TGlicmFyeSgpKQogICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlv
bnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKLSAgICAKKwogICAgIFN0cmluZyBjYXB0aW9uc0NvbG9y
ID0gY2FwdGlvbnNUZXh0Q29sb3JDU1MoKTsKICAgICBTdHJpbmcgZWRnZVN0eWxlID0gY2FwdGlv
bnNUZXh0RWRnZUNTUygpOwogICAgIFN0cmluZyBmb250TmFtZSA9IGNhcHRpb25zRGVmYXVsdEZv
bnRDU1MoKTsKICAgICBTdHJpbmcgYmFja2dyb3VuZCA9IGNhcHRpb25zQmFja2dyb3VuZENTUygp
OwotICAgIGlmICghYmFja2dyb3VuZC5pc0VtcHR5KCkgfHwgIWNhcHRpb25zQ29sb3IuaXNFbXB0
eSgpIHx8ICFlZGdlU3R5bGUuaXNFbXB0eSgpIHx8ICFmb250TmFtZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kTGl0ZXJhbCgiIDo6Iik7Ci0g
ICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChUZXh0VHJhY2tDdWU6OmN1
ZVNoYWRvd1BzZXVkb0lkKCkpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQoJ3snKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYmFja2dyb3VuZC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoYmFja2dyb3Vu
ZCk7Ci0gICAgICAgIGlmICghY2FwdGlvbnNDb2xvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBj
YXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoY2FwdGlvbnNDb2xvcik7Ci0gICAgICAg
IGlmICghZWRnZVN0eWxlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZChlZGdlU3R5bGUpOwotICAgICAgICBpZiAoIWZvbnROYW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChmb250
TmFtZSk7Ci0gICAgICAgIAotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBl
bmQoJ30nKTsKLSAgICB9Ci0gICAgCisgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAh
Y2FwdGlvbnNDb2xvci5pc0VtcHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnRO
YW1lLmlzRW1wdHkoKSkKKyAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5k
KCIgOjoiLCBUZXh0VHJhY2tDdWU6OmN1ZVNoYWRvd1BzZXVkb0lkKCksICd7JywgYmFja2dyb3Vu
ZCwgY2FwdGlvbnNDb2xvciwgZWRnZVN0eWxlLCBmb250TmFtZSwgJ30nKTsKKwogICAgIFN0cmlu
ZyB3aW5kb3dDb2xvciA9IGNhcHRpb25zV2luZG93Q1NTKCk7CiAgICAgU3RyaW5nIHdpbmRvd0Nv
cm5lclJhZGl1cyA9IHdpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKTsKLSAgICBpZiAoIXdp
bmRvd0NvbG9yLmlzRW1wdHkoKSB8fCAhd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkgewot
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmRMaXRlcmFsKCIgOjoiKTsK
LSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZTo6
Y3VlQmFja2Ryb3BTaGFkb3dQc2V1ZG9JZCgpKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0
eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXdpbmRvd0NvbG9y
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZCh3aW5kb3dDb2xvcik7Ci0gICAgICAgIGlmICghd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKHdpbmRv
d0Nvcm5lclJhZGl1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3Zl
cnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgnfScpOwotICAgIH0KKyAgICBpZiAoIXdpbmRvd0NvbG9y
LmlzRW1wdHkoKSB8fCAhd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkKKyAgICAgICAgY2Fw
dGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCIgOjoiLCBUZXh0VHJhY2tDdWU6OmN1ZUJh
Y2tkcm9wU2hhZG93UHNldWRvSWQoKSwgJ3snLCB3aW5kb3dDb2xvciwgd2luZG93Q29ybmVyUmFk
aXVzLCAnfScpOwogI2VuZGlmIC8vIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUksp
CiAKICAgICBMT0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlv
bnNTdHlsZVNoZWV0T3ZlcnJpZGVTZXR0aW5nIHN0eWxlIHRvOlxuJXMiLCBjYXB0aW9uc092ZXJy
aWRlU3R5bGVTaGVldC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4
IDM2Yzk5NjgwNGY5ODM5NWZkNjVmMDI3OTZkMTY0ZTM5ZmRhYTAwYTQuLjliNjI5ZDBlNTkzMTg5
YmQ5M2Q1OWZlNzMwNjdhODRlOTc3NTMzODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTQwNCw3ICs0MDQs
NyBAQCBTdHJpbmcgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN5bmNocm9ub3VzU2Nyb2xsaW5nUmVh
c29uc0FzVGV4dChPcHRpb25TZXQ8U3luY2hybwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIkhhcyBzbG93IHJlcGFpbnQgZGVzY2VuZGFudCBzY3JvbGxlcnMsICIpOwogCiAg
ICAgaWYgKHN0cmluZ0J1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIucmVz
aXplKHN0cmluZ0J1aWxkZXIubGVuZ3RoKCkgLSAyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5z
aHJpbmsoc3RyaW5nQnVpbGRlci5sZW5ndGgoKSAtIDIpOwogICAgIHJldHVybiBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xheW91dFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAppbmRl
eCAxNTZhMDFiZDJkZmRkYTQ3MmIwODFkNGFlZjQxZGEzODI4NmY2MDMwLi4xZTU3MTI4MjAxZGJm
MDU3NGZhMjA5MDZiYmU5MTA3NWU3MmJhZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9MYXlvdXRVbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0
VW5pdC5oCkBAIC0xNTAsOCArMTUwLDggQEAgcHVibGljOgogICAgIGludCByb3VuZCgpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAobV92YWx1ZSA+IDApCi0gICAgICAgICAgICByZXR1cm4gc2F0
dXJhdGVkQWRkaXRpb24ocmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHNhdHVyYXRlZFN1YnRyYWN0
aW9uKHJhd1ZhbHVlKCksIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLSAxKSAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgICAgICByZXR1cm4gc2F0dXJhdGVkU3VtPGludD4o
cmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpIC8ga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsKKyAgICAgICAgcmV0dXJuIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50PihyYXdWYWx1
ZSgpLCAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpIC0gMSkgLyBrRml4ZWRQb2ludERlbm9t
aW5hdG9yOwogICAgIH0KIAogICAgIGludCBmbG9vcigpIGNvbnN0CkBAIC01ODgsNyArNTg4LDcg
QEAgaW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGxvbmcgbG9uZyBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogaW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IExheW91
dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgTGF5b3V0VW5pdCByZXR1cm5W
YWw7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFs
dWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRl
ZFN1bTxpbnQ+KGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIHJldHVy
blZhbDsKIH0KIApAQCAtNjI1LDcgKzYyNSw3IEBAIGlubGluZSBkb3VibGUgb3BlcmF0b3IrKGNv
bnN0IGRvdWJsZSBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogaW5saW5lIExheW91dFVuaXQgb3Bl
cmF0b3ItKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAg
TGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRl
ZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisgICAgcmV0dXJuVmFs
LnNldFJhd1ZhbHVlKHNhdHVyYXRlZERpZmZlcmVuY2U8aW50PihhLnJhd1ZhbHVlKCksIGIucmF3
VmFsdWUoKSkpOwogICAgIHJldHVybiByZXR1cm5WYWw7CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBA
QCBpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiAKIGlubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvcis9KExheW91dFVuaXQmIGEsIGNvbnN0IExh
eW91dFVuaXQmIGIpCiB7Ci0gICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJh
d1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3Vt
PGludD4oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICAgICByZXR1cm4gYTsKIH0KIApA
QCAtNzIxLDcgKzcyMSw3IEBAIGlubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci09KExheW91dFVu
aXQmIGEsIGludCBiKQogCiBpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShMYXlvdXRVbml0
JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVk
U3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyAgICBhLnNldFJhd1Zh
bHVlKHNhdHVyYXRlZERpZmZlcmVuY2U8aW50PihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkp
OwogICAgIHJldHVybiBhOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bQppbmRleCA2MGU2NzBmMjA2NmQ2MDU4YjJlNWViNzllYjdkYzMwYzVjYjRiMjhlLi4xMWM5YTIz
ODNjZDZjOGMzMDFhMWEwOGRjZGVhZmFlNzlkMjYyYjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uQ29jb2EubW0KQEAgLTM5LDYgKzM5LDcgQEAKICNpbXBvcnQgPHd0Zi9VUkwuaD4K
ICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorI2ltcG9ydCA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5o
PgogCiBAaW50ZXJmYWNlIE5TVVJMICgpCiAtIChDRlVSTFJlZilfY2Z1cmw7CkBAIC0zNDksMzEg
KzM1MCwyMyBAQCBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNGb3JTZXNzaW9uKGNvbnN0IFVSTCYgZmlycwogCiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiAKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gY29va2llcyA9IGNvb2tpZXNG
b3JVUkwoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCwgc2hv
dWxkQXNrSVRQLCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyk7Ci0gICAgaWYg
KCFjb29raWVzIHx8ICFbY29va2llcyBjb3VudF0pCi0gICAgICAgIHJldHVybiB7IFN0cmluZygp
LCBmYWxzZSB9OyAvLyBSZXR1cm4gYSBudWxsIHN0cmluZywgbm90IGFuIGVtcHR5IG9uZSB0aGF0
IFN0cmluZ0J1aWxkZXIgd291bGQgY3JlYXRlIGJlbG93LgorICAgIGF1dG8gY29va2llcyA9IGNv
b2tpZXNGb3JVUkwoZmlyc3RQYXJ0eSwgc2FtZVNpdGVJbmZvLCB1cmwsIGZyYW1lSUQsIHBhZ2VJ
RCwgc2hvdWxkQXNrSVRQLCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyk7Cisg
ICAgaWYgKCFbY29va2llcyBjb3VudF0pCisgICAgICAgIHJldHVybiB7IFN0cmluZygpLCBmYWxz
ZSB9OyAvLyBSZXR1cm4gYSBudWxsIHN0cmluZzsgU3RyaW5nQnVpbGRlciBiZWxvdyB3b3VsZCBj
cmVhdGUgYW4gZW1wdHkgb25lLgogCiAgICAgU3RyaW5nQnVpbGRlciBjb29raWVzQnVpbGRlcjsK
ICAgICBib29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSBmYWxzZTsKICAgICBmb3IgKE5TSFRU
UENvb2tpZSAqY29va2llIGluIGNvb2tpZXMuZ2V0KCkpIHsKICAgICAgICAgaWYgKCFbW2Nvb2tp
ZSBuYW1lXSBsZW5ndGhdKQogICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgaWYgKCFp
bmNsdWRlSFRUUE9ubHkgJiYgW2Nvb2tpZSBpc0hUVFBPbmx5XSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotCiAgICAgICAgIGlmIChbY29va2llIGlzU2VjdXJlXSkgewogICAgICAgICAgICAgZGlk
QWNjZXNzU2VjdXJlQ29va2llcyA9IHRydWU7CiAgICAgICAgICAgICBpZiAoaW5jbHVkZVNlY3Vy
ZUNvb2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6Ok5vKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjb29raWVzQnVpbGRlci5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBjb29raWVzQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI7ICIpOwotCi0g
ICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChbY29va2llIG5hbWVdKTsKLSAgICAgICAgY29v
a2llc0J1aWxkZXIuYXBwZW5kKCc9Jyk7Ci0gICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChb
Y29va2llIHZhbHVlXSk7CisgICAgICAgIGNvb2tpZXNCdWlsZGVyLmFwcGVuZChjb29raWVzQnVp
bGRlci5pc0VtcHR5KCkgPyAiIiA6ICI7ICIsIFtjb29raWUgbmFtZV0sICc9JywgW2Nvb2tpZSB2
YWx1ZV0pOwogICAgIH0KICAgICByZXR1cm4geyBjb29raWVzQnVpbGRlci50b1N0cmluZygpLCBk
aWRBY2Nlc3NTZWN1cmVDb29raWVzIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcAppbmRleCA3ZjYwZDkwMTkzY2MzYjNmYzQ5ZjU5Y2IwOTJlZjRjMjBhN2Yx
MThjLi40MzY5OWZlYWQ5ZjY1YzU5NzJiZmRkNDI5Yzc3YWVhMTAxNmE2OTkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAg
c3RhdGljIE9wdGlvbmFsPENvdW50ZXJQbGFuPiBwbGFuQ291bnRlcihSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgQXRvbVN0cmkKICAgICB9CiAKICAgICBpZiAoZGlyZWN0aXZlcy5yZXNl
dFZhbHVlKQotICAgICAgICByZXR1cm4gQ291bnRlclBsYW4geyB0cnVlLCBzYXR1cmF0ZWRBZGRp
dGlvbigqZGlyZWN0aXZlcy5yZXNldFZhbHVlLCBkaXJlY3RpdmVzLmluY3JlbWVudFZhbHVlLnZh
bHVlT3IoMCkpIH07CisgICAgICAgIHJldHVybiBDb3VudGVyUGxhbiB7IHRydWUsIHNhdHVyYXRl
ZFN1bTxpbnQ+KCpkaXJlY3RpdmVzLnJlc2V0VmFsdWUsIGRpcmVjdGl2ZXMuaW5jcmVtZW50VmFs
dWUudmFsdWVPcigwKSkgfTsKICAgICBpZiAoZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZSkKICAg
ICAgICAgcmV0dXJuIENvdW50ZXJQbGFuIHsgZmFsc2UsICpkaXJlY3RpdmVzLmluY3JlbWVudFZh
bHVlIH07CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggZjk3M2Y4OTUxM2VhNDcxNDk0ZDdkOWQ0MzRiZjBkYzBl
ZGE1MmQ3Mi4uN2ZmNmM2MmRmZTMzZjcwNDU0YTcwYjcyNmNlMzQ5MjhlZTk4YjlhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTEzNjAsNyArMTM2MCw3
IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKEJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1CiAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3Ig
PT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLnJlc2V0VmFsdWUgPSB2YWx1ZTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZSA9IHNhdHVy
YXRlZEFkZGl0aW9uKGRpcmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUudmFsdWVPcigwKSwgdmFsdWUp
OworICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmNyZW1lbnRWYWx1ZSA9IHNhdHVyYXRlZFN1bTxp
bnQ+KGRpcmVjdGl2ZXMuaW5jcmVtZW50VmFsdWUudmFsdWVPcigwKSwgdmFsdWUpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAKaW5kZXgg
N2E3MzA0NWEyZDRhNzM5ZGMxZjBiY2IwZmJjM2FmNzllMDI0MWU2ZC4uNDgzYmY2OWVlZTI4Y2Vj
MTFjYzViYmMwYzFhZjlmZmYwNmI1YWQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFN0cmluZ0J1aWxkZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBAIFN0cmluZyBTVkdQYXRoU3RyaW5n
QnVpbGRlcjo6cmVzdWx0KCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gUmVt
b3ZlIHRyYWlsaW5nIHNwYWNlLgotICAgIG1fc3RyaW5nQnVpbGRlci5yZXNpemUoc2l6ZSAtIDEp
OworICAgIG1fc3RyaW5nQnVpbGRlci5zaHJpbmsoc2l6ZSAtIDEpOwogICAgIHJldHVybiBtX3N0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCmluZGV4IDMyZDE1ZmQyN2E4NGFiMWMzNDM3MzQ1OWU1OWM0NzllZDU5YjRkOTMuLjg5ZWNk
NjkyMmYyMWIzMTIwNzM2NmRhYzdjNTJkNDc2YmJkZDMxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKQEAgLTQ2MzgsNyArNDYzOCw3IEBAIFN0cmluZyBJbnRlcm5hbHM6OnBh
Z2VNZWRpYVN0YXRlKCkKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgc3RyaW5n
LmFwcGVuZCgiSXNOb3RQbGF5aW5nIik7CiAgICAgZWxzZQotICAgICAgICBzdHJpbmcucmVzaXpl
KHN0cmluZy5sZW5ndGgoKSAtIDEpOworICAgICAgICBzdHJpbmcuc2hyaW5rKHN0cmluZy5sZW5n
dGgoKSAtIDEpOwogCiAgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKaW5kZXggNzMwNTQyMTFhMzdhMTg0
YzBmNzg4OTAxYzA1YWE2Yjg2NTM0YmM3ZS4uYzc2OWJmODY4MjkzZmZjOTI1OGNhYjYyMDllYjFj
ZmQ4Njk1ZjAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JM
aWJ4c2x0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHht
bERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0LCBTdHIKIAogICAgIC8v
IFdvcmthcm91bmQgZm9yIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9p
ZD00OTU2Njg+OiBsaWJ4c2x0IGFwcGVuZHMgYW4gZXh0cmEgbGluZSBmZWVkIHRvIHRoZSByZXN1
bHQuCiAgICAgaWYgKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgPiAwICYmIHJlc3VsdEJ1aWxkZXJb
cmVzdWx0QnVpbGRlci5sZW5ndGgoKSAtIDFdID09ICdcbicpCi0gICAgICAgIHJlc3VsdEJ1aWxk
ZXIucmVzaXplKHJlc3VsdEJ1aWxkZXIubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgcmVzdWx0QnVp
bGRlci5zaHJpbmsocmVzdWx0QnVpbGRlci5sZW5ndGgoKSAtIDEpOwogCiAgICAgcmVzdWx0U3Ry
aW5nID0gcmVzdWx0QnVpbGRlci50b1N0cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KaW5kZXggZjJkOTJmMTk3ZDE3Y2EyOTcwZDA3ZGMxNDBhYjAwYTYxYzEzNThm
Yy4uY2ZjZDlmM2MwM2M5YzZhMWEzZDM0ZWQxY2M5Nzc3YTgwNzI3ZTk5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29h
L1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtNDcsNyArNDcsNyBAQAogI2ltcG9ydCA8d3Rm
L1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KICNpbXBvcnQgPHd0Zi9j
b2NvYS9FbnRpdGxlbWVudHMuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbXBvcnQgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CkBAIC0xMTUs
MTUgKzExNSwxMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29ya1Bh
cmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgICAgICAgICBmaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwogICAgIH0KIAotICAgIGF1dG8qIG1hbnVhbFBy
ZXZhbGVudFJlc291cmNlID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpAIklUUE1hbnVhbFByZXZh
bGVudFJlc291cmNlIl07Ci0gICAgaWYgKG1hbnVhbFByZXZhbGVudFJlc291cmNlKSB7Ci0gICAg
ICAgIFVSTCB1cmwgeyBVUkwoKSwgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgfTsKLSAgICAgICAg
aWYgKCF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHA6Ly8iKTsKLSAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKG1hbnVhbFByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgICAg
IHVybCA9IHsgVVJMKCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OwotICAgICAgICB9CisgICAgaWYg
KGF1dG8gbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OkAi
SVRQTWFudWFsUHJldmFsZW50UmVzb3VyY2UiXSkgeworICAgICAgICBVUkwgdXJsIHsgeyB9LCBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9OworICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICB1cmwgPSB7IHsgfSwgbWFrZVN0cmluZygiaHR0cDovLyIsIG1hbnVhbFByZXZh
bGVudFJlc291cmNlKSB9OwogICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKICAgICAgICAgICAg
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH07CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNlNWQxM2JlMGI2ZjkwYWI2YTNkZWIyNjA2
MTQxYTljMDY1YjZmMzcuLjE0ZWQxNGEyOGFkYjZhNDQ4ZjNlZGQ1ZjQ5NzdlZTlkYmNjNTk3MTcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAyMS0wNS0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTW92ZSBDRlN0cmluZ1JlZiBhbmQgTlNTdHJpbmcgc3VwcG9ydCBmcm9tIFN0cmlu
Z0J1aWxkZXIgaW50byBTdHJpbmdDb25jYXRlbmF0ZUNGCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MzkKKworICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVk
QXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOiBVcGRhdGVkCisgICAgICAgIHRlc3RzIGZvciBjaGFu
Z2VzIHRvIFNhdHVyYXRlZEFyaXRobWV0aWMuaC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1N0cmluZ0J1aWxkZXIuY3BwOiBVcGRhdGVkIHRlc3RzIGZvciBjaGFuZ2VzCisg
ICAgICAgIHRvIFN0cmluZ0J1aWxkZXIuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQvR2V0VXNlck1lZGlhLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6d2tNZWRpYUNh
cHR1cmVTdGF0ZVN0cmluZyk6IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwOgorICAgICAgICBBZGRlZCBpbmNs
dWRlIG9mIFN0cmluZ0NvbmNhdGVuYXRlQ0YuaC4KKyAgICAgICAgQWRkZWQgU3RyaW5nVHlwZUFk
YXB0ZXIgZm9yIFdLU3RyaW5nUmVmLgorICAgICAgICAoV1RSOjpzdHlsZURlY1RvU3RyKTogVXNl
IEFTQ0lJTGl0ZXJhbCBpbnN0ZWFkIG9mIFN0cmluZ0J1aWxkZXIuCisgICAgICAgIChXVFI6OnN0
cmluZyk6IFJlbW92ZWQgdW5uZWVkZWQgdG9XVEZTdHJpbmcgc2luY2UgdGhlIFdLU3RyaW5nUmVm
CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyIHRha2VzIGNhcmUgb2YgaXQuCisgICAgICAgIChX
VFI6OnN0cmluZyk6IFJlbmFtZWQgZnJvbSBmcmFtZVRvU3RyLiBVc2UgbWFrZVN0cmluZy4KKyAg
ICAgICAgKFdUUjo6ZHVtcFJlc291cmNlVVJMKTogVXNlIGFwcGVuZCBpbnN0ZWFkIG9mIGFwcGVu
ZExpdGVyYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6ZHVtcExvYWRFdmVudCk6IFVzZSBt
YWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gYSBsb25nZXIg
bmFtZS4gUmV0dXJuIGEgU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgYnVpbGRpbmcgaW4gYSBT
dHJpbmdCdWlsZGVyLiBVc2UgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogRGl0
dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KTogUmVtb3ZlZAorICAgICAgICB1bm5lZWRlZCB0b1dURlN0cmluZy4KKyAgICAgICAgKFdU
Ujo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6ZHVtcERl
c2NlbmRhbnRGcmFtZXNUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZSk6IFJlbW92ZWQgYW4KKyAgICAgICAgdW5uZWVkZWQg
bG9jYWwgdmFyaWFibGUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcCk6
IFJlbW92ZWQgdW5uZWVkZWQgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSk6CisgICAg
ICAgIFVwZGF0ZWQgZm9yIGZ1bmN0b24gbmFtZSBjaGFuZ2UuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAg
QWxzbyB1c2UgdmFyaWFkaWMgYXBwZW5kLiBBbHNvIHVzZSBtYWtlU3RyaW5nLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoTG9hZEZv
clJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
RmFpbExvYWRGb3JSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZSk6IERpdHRv
LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25z
b2xlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0
YXR1c2JhclRleHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3
aWxsUnVuSmF2YVNjcmlwdFByb21wdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2RlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5
U3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdp
bkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRF
bmRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
Q2hhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hh
bmdlU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
ZHVtcEhpc3RvcnkpOiBEaXR0by4KKwogMjAyMS0wNS0xOCAgSm9uYXRoYW4gQmVkYXJkICA8amJl
ZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHB5XSBGb3J3YXJkIGJvb3RlZCBzaW11
bGF0b3JzIHRvIGNoaWxkcmVuIHByb2Nlc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3Bw
CmluZGV4IGU4NTRlMjU2ZThhZGFjYzkyNWI5OGI3YzBjZTcxNDYzYWIxYmFlZmUuLjliZDUwZTI3
M2Y3NDA1OTliZTAwMmI2ZDA5ZWQ1ZmY3YmI2NmE0ZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMjksNzcgKzMwLDk4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgImxpbWl0cy5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1Nh
dHVyYXRlZEFyaXRobWV0aWMuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBURVNU
KFdURiwgU2F0dXJhdGVkQXJpdGhtZXRpY0FkZGl0aW9uKQogewotICAgIEFTU0VSVF9FUShzYXR1
cmF0ZWRBZGRpdGlvbigwLCAwKSwgMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9u
KDAsIDEpLCAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMCwgMTAwKSwgMTAw
KTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMTAwLCA1MCksIDE1MCk7Ci0KLSAg
ICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oMCwgLTEpLCAtMSk7Ci0gICAgQVNTRVJUX0VR
KHNhdHVyYXRlZEFkZGl0aW9uKDEsIC0xKSwgMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFk
ZGl0aW9uKDEwMCwgLTUwKSwgNTApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbig1
MCwgLTEwMCksIC01MCk7Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01B
WCAtIDEsIDApLCBJTlRfTUFYIC0gMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9u
KElOVF9NQVggLSAxLCAxKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0
aW9uKElOVF9NQVggLSAxLCAyKSwgSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFk
ZGl0aW9uKDAsIElOVF9NQVggLSAxKSwgSU5UX01BWCAtIDEpOwotICAgIEFTU0VSVF9FUShzYXR1
cmF0ZWRBZGRpdGlvbigxLCBJTlRfTUFYIC0gMSksIElOVF9NQVgpOwotICAgIEFTU0VSVF9FUShz
YXR1cmF0ZWRBZGRpdGlvbigyLCBJTlRfTUFYIC0gMSksIElOVF9NQVgpOwotICAgIEFTU0VSVF9F
UShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUFYIC0gMSwgSU5UX01BWCAtIDEpLCBJTlRfTUFYKTsK
LSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01BWCwgSU5UX01BWCksIElOVF9N
QVgpOwotCi0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NSU4sIDApLCBJTlRf
TUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRpb24oSU5UX01JTiArIDEsIDApLCBJ
TlRfTUlOICsgMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NSU4gKyAx
LCAxKSwgSU5UX01JTiArIDIpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRf
TUlOICsgMSwgMiksIElOVF9NSU4gKyAzKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkQWRkaXRp
b24oSU5UX01JTiArIDEsIC0xKSwgSU5UX01JTik7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZEFk
ZGl0aW9uKElOVF9NSU4gKyAxLCAtMiksIElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRBZGRpdGlvbigwLCBJTlRfTUlOICsgMSksIElOVF9NSU4gKyAxKTsKLSAgICBBU1NFUlRfRVEo
c2F0dXJhdGVkQWRkaXRpb24oLTEsIElOVF9NSU4gKyAxKSwgSU5UX01JTik7Ci0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZEFkZGl0aW9uKC0yLCBJTlRfTUlOICsgMSksIElOVF9NSU4pOwotCi0gICAg
QVNTRVJUX0VRKHNhdHVyYXRlZEFkZGl0aW9uKElOVF9NQVggLyAyLCAxMDAwMCksIElOVF9NQVgg
LyAyICsgMTAwMDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRBZGRpdGlvbihJTlRfTUFYIC8g
MiArIDEsIElOVF9NQVggLyAyICsgMSksIElOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRBZGRpdGlvbihJTlRfTUlOLCBJTlRfTUFYKSwgLTEpOworICAgIEVYUEVDVF9FUSgwLCBzYXR1
cmF0ZWRTdW08aW50MzJfdD4oMCwgMCkpOworICAgIEVYUEVDVF9FUSgxLCBzYXR1cmF0ZWRTdW08
aW50MzJfdD4oMCwgMSkpOworICAgIEVYUEVDVF9FUSgxMDAsIHNhdHVyYXRlZFN1bTxpbnQzMl90
PigwLCAxMDApKTsKKyAgICBFWFBFQ1RfRVEoMTUwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMTAw
LCA1MCkpOworCisgICAgRVhQRUNUX0VRKC0xLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMCwgLTEp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KDEsIC0xKSk7CisgICAg
RVhQRUNUX0VRKDUwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oMTAwLCAtNTApKTsKKyAgICBFWFBF
Q1RfRVEoLTUwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oNTAsIC0xMDApKTsKKworICAgIEVYUEVD
VF9FUShJTlRfTUFYIC0gMSwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NQVggLSAxLCAwKSk7
CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUFYIC0g
MSwgMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5U
X01BWCAtIDEsIDIpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCAtIDEsIHNhdHVyYXRlZFN1bTxp
bnQzMl90PigwLCBJTlRfTUFYIC0gMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYLCBzYXR1cmF0
ZWRTdW08aW50MzJfdD4oMSwgSU5UX01BWCAtIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01BWCwg
c2F0dXJhdGVkU3VtPGludDMyX3Q+KDIsIElOVF9NQVggLSAxKSk7CisgICAgRVhQRUNUX0VRKElO
VF9NQVgsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUFYIC0gMSwgSU5UX01BWCAtIDEpKTsK
KyAgICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkU3VtPGludDMyX3Q+KElOVF9NQVgsIElO
VF9NQVgpKTsKKworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4o
SU5UX01JTiwgMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOICsgMSwgc2F0dXJhdGVkU3VtPGlu
dDMyX3Q+KElOVF9NSU4gKyAxLCAwKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4gKyAyLCBzYXR1
cmF0ZWRTdW08aW50MzJfdD4oSU5UX01JTiArIDEsIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01J
TiArIDMsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOICsgMSwgMikpOworICAgIEVYUEVD
VF9FUShJTlRfTUlOLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01JTiArIDEsIC0xKSk7Cisg
ICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUlOICsgMSwg
LTIpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiArIDEsIHNhdHVyYXRlZFN1bTxpbnQzMl90Pigw
LCBJTlRfTUlOICsgMSkpOworICAgIEVYUEVDVF9FUShJTlRfTUlOLCBzYXR1cmF0ZWRTdW08aW50
MzJfdD4oLTEsIElOVF9NSU4gKyAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRl
ZFN1bTxpbnQzMl90PigtMiwgSU5UX01JTiArIDEpKTsKKworICAgIEVYUEVDVF9FUShJTlRfTUFY
IC8gMiArIDEwMDAwLCBzYXR1cmF0ZWRTdW08aW50MzJfdD4oSU5UX01BWCAvIDIsIDEwMDAwKSk7
CisgICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZFN1bTxpbnQzMl90PihJTlRfTUFYIC8g
MiArIDEsIElOVF9NQVggLyAyICsgMSkpOworICAgIEVYUEVDVF9FUSgtMSwgc2F0dXJhdGVkU3Vt
PGludDMyX3Q+KElOVF9NSU4sIElOVF9NQVgpKTsKKworICAgIEVYUEVDVF9FUSgwVSwgc2F0dXJh
dGVkU3VtPHVpbnQzMl90PigwVSwgMFUpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHNhdHVyYXRlZFN1
bTx1aW50MzJfdD4oMFUsIDFVKSk7CisgICAgRVhQRUNUX0VRKDEwMFUsIHNhdHVyYXRlZFN1bTx1
aW50MzJfdD4oMFUsIDEwMFUpKTsKKyAgICBFWFBFQ1RfRVEoMTUwVSwgc2F0dXJhdGVkU3VtPHVp
bnQzMl90PigxMDBVLCA1MFUpKTsKKworICAgIEVYUEVDVF9FUShVSU5UX01BWCAtIDEsIHNhdHVy
YXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLSAxVSwgMFUpKTsKKyAgICBFWFBFQ1RfRVEoVUlO
VF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLSAxVSwgMVUpKTsKKyAgICBF
WFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLSAxVSwg
MlUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVggLSAxLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+
KDBVLCBVSU5UX01BWCAtIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRT
dW08dWludDMyX3Q+KDFVLCBVSU5UX01BWCAtIDFVKSk7CisgICAgRVhQRUNUX0VRKFVJTlRfTUFY
LCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KDJVLCBVSU5UX01BWCAtIDFVKSk7CisgICAgRVhQRUNU
X0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC0gMVUsIFVJTlRf
TUFYIC0gMVUpKTsKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJf
dD4oVUlOVF9NQVgsIFVJTlRfTUFYKSk7CisKKyAgICBFWFBFQ1RfRVEoVUlOVF9NQVggLyAyICsg
MTAwMDAsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLyAyVSwgMTAwMDBVKSk7Cisg
ICAgRVhQRUNUX0VRKFVJTlRfTUFYLCBzYXR1cmF0ZWRTdW08dWludDMyX3Q+KFVJTlRfTUFYIC8g
MlUsIFVJTlRfTUFYIC8gMlUgKyAxVSkpOworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJh
dGVkU3VtPHVpbnQzMl90PihVSU5UX01BWCAvIDJVICsgMVUsIFVJTlRfTUFYIC8gMlUgKyAxVSkp
OworICAgIEVYUEVDVF9FUShVSU5UX01BWCwgc2F0dXJhdGVkU3VtPHVpbnQzMl90PihVSU5UX01B
WCAvIDNVICsgMVUsIFVJTlRfTUFYIC8gM1UsIFVJTlRfTUFYIC8gM1UpKTsKKyAgICBFWFBFQ1Rf
RVEoVUlOVF9NQVgsIHNhdHVyYXRlZFN1bTx1aW50MzJfdD4oVUlOVF9NQVggLyAzVSArIDFVLCBV
SU5UX01BWCAvIDNVICsgMVUsIFVJTlRfTUFYIC8gM1UgKyAxVSkpOwogfQogCiBURVNUKFdURiwg
U2F0dXJhdGVkQXJpdGhtZXRpY1N1YnRyYWN0aW9uKQogewotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbigwLCAwKSwgMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0
aW9uKDAsIDEpLCAtMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDAsIDEw
MCksIC0xMDApOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbigxMDAsIDUwKSwg
NTApOworICAgIEVYUEVDVF9FUSgwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDAsIDAp
KTsKKyAgICBFWFBFQ1RfRVEoLTEsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMCwgMSkp
OworICAgIEVYUEVDVF9FUSgtMTAwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDAsIDEw
MCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigxMDAs
IDUwKSk7CiAgICAgCi0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDAsIC0xKSwg
MSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDEsIC0xKSwgMik7Ci0gICAg
QVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKDEwMCwgLTUwKSwgMTUwKTsKLSAgICBBU1NF
UlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oNTAsIC0xMDApLCAxNTApOwotCi0gICAgQVNTRVJU
X0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NQVgsIDApLCBJTlRfTUFYKTsKLSAgICBBU1NF
UlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCwgMSksIElOVF9NQVggLSAxKTsKLSAg
ICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCAtIDEsIDApLCBJTlRfTUFY
IC0gMSk7Ci0gICAgQVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKElOVF9NQVggLSAxLCAt
MSksIElOVF9NQVgpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUFY
IC0gMSwgLTIpLCBJTlRfTUFYKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24o
MCwgSU5UX01BWCAtIDEpLCAtSU5UX01BWCArIDEpOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRT
dWJ0cmFjdGlvbigtMSwgSU5UX01BWCAtIDEpLCAtSU5UX01BWCk7Ci0gICAgQVNTRVJUX0VRKHNh
dHVyYXRlZFN1YnRyYWN0aW9uKC0yLCBJTlRfTUFYIC0gMSksIC1JTlRfTUFYIC0gMSk7Ci0gICAg
QVNTRVJUX0VRKHNhdHVyYXRlZFN1YnRyYWN0aW9uKC0zLCBJTlRfTUFYIC0gMSksIC1JTlRfTUFY
IC0gMSk7Ci0KLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24oSU5UX01JTiwgMCks
IElOVF9NSU4pOwotICAgIEFTU0VSVF9FUShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihJTlRfTUlOICsg
MSwgMCksIElOVF9NSU4gKyAxKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJhY3Rpb24o
SU5UX01JTiArIDEsIDEpLCBJTlRfTUlOKTsKLSAgICBBU1NFUlRfRVEoc2F0dXJhdGVkU3VidHJh
Y3Rpb24oSU5UX01JTiArIDEsIDIpLCBJTlRfTUlOKTsKLQotICAgIEFTU0VSVF9FUShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihJTlRfTUlOLCBJTlRfTUlOKSwgMCk7Ci0gICAgQVNTRVJUX0VRKHNhdHVy
YXRlZFN1YnRyYWN0aW9uKElOVF9NQVgsIElOVF9NQVgpLCAwKTsKLSAgICBBU1NFUlRfRVEoc2F0
dXJhdGVkU3VidHJhY3Rpb24oSU5UX01BWCwgSU5UX01JTiksIElOVF9NQVgpOworICAgIEVYUEVD
VF9FUSgxLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDAsIC0xKSk7CisgICAgRVhQRUNU
X0VRKDIsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oMSwgLTEpKTsKKyAgICBFWFBFQ1Rf
RVEoMTUwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KDEwMCwgLTUwKSk7CisgICAgRVhQ
RUNUX0VRKDE1MCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90Pig1MCwgLTEwMCkpOworCisg
ICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01B
WCwgMCkpOworICAgIEVYUEVDVF9FUShJTlRfTUFYIC0gMSwgc2F0dXJhdGVkRGlmZmVyZW5jZTxp
bnQzMl90PihJTlRfTUFYLCAxKSk7CisgICAgRVhQRUNUX0VRKElOVF9NQVggLSAxLCBzYXR1cmF0
ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NQVggLSAxLCAwKSk7CisgICAgRVhQRUNUX0VRKElO
VF9NQVgsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01BWCAtIDEsIC0xKSk7Cisg
ICAgRVhQRUNUX0VRKElOVF9NQVgsIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01B
WCAtIDEsIC0yKSk7CisgICAgRVhQRUNUX0VRKC1JTlRfTUFYICsgMSwgc2F0dXJhdGVkRGlmZmVy
ZW5jZTxpbnQzMl90PigwLCBJTlRfTUFYIC0gMSkpOworICAgIEVYUEVDVF9FUSgtSU5UX01BWCwg
c2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PigtMSwgSU5UX01BWCAtIDEpKTsKKyAgICBFWFBF
Q1RfRVEoLUlOVF9NQVggLSAxLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KC0yLCBJTlRf
TUFYIC0gMSkpOworICAgIEVYUEVDVF9FUSgtSU5UX01BWCAtIDEsIHNhdHVyYXRlZERpZmZlcmVu
Y2U8aW50MzJfdD4oLTMsIElOVF9NQVggLSAxKSk7CisKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwg
c2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUlOLCAwKSk7CisgICAgRVhQRUNUX0VR
KElOVF9NSU4gKyAxLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NSU4gKyAxLCAw
KSk7CisgICAgRVhQRUNUX0VRKElOVF9NSU4sIHNhdHVyYXRlZERpZmZlcmVuY2U8aW50MzJfdD4o
SU5UX01JTiArIDEsIDEpKTsKKyAgICBFWFBFQ1RfRVEoSU5UX01JTiwgc2F0dXJhdGVkRGlmZmVy
ZW5jZTxpbnQzMl90PihJTlRfTUlOICsgMSwgMikpOworCisgICAgRVhQRUNUX0VRKDAsIHNhdHVy
YXRlZERpZmZlcmVuY2U8aW50MzJfdD4oSU5UX01JTiwgSU5UX01JTikpOworICAgIEVYUEVDVF9F
USgwLCBzYXR1cmF0ZWREaWZmZXJlbmNlPGludDMyX3Q+KElOVF9NQVgsIElOVF9NQVgpKTsKKyAg
ICBFWFBFQ1RfRVEoSU5UX01BWCwgc2F0dXJhdGVkRGlmZmVyZW5jZTxpbnQzMl90PihJTlRfTUFY
LCBJTlRfTUlOKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0J1aWxkZXIuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggYjEyYjU2
ZGY0MmU0ODhlYzJmN2Y2Mzk1ODYyYzM5OWRlNmYwYjUwYS4uZDZlMDVlYzMzN2ZkNDA2M2RlYTVh
OWM0YmI1NGI3ZGQ1MjIwMTg5YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU3RyaW5nQnVpbGRlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTIxNSw3ICsyMTUsNyBAQCBURVNUKFN0cmluZ0J1aWxk
ZXJUZXN0LCBUb1N0cmluZykKIAogICAgIC8vIFJlc2l6aW5nIHRoZSBTdHJpbmdCdWlsZGVyIHNo
b3VsZCBub3QgYWZmZWN0IHRoZSBvcmlnaW5hbCByZXN1bHQgb2YgdG9TdHJpbmcoKS4KICAgICBz
dHJpbmcxID0gYnVpbGRlci50b1N0cmluZygpOwotICAgIGJ1aWxkZXIucmVzaXplKDEwKTsKKyAg
ICBidWlsZGVyLnNocmluaygxMCk7CiAgICAgYnVpbGRlci5hcHBlbmQoIiMjIyIpOwogICAgIEVY
UEVDVF9FUShTdHJpbmcoIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQyIp
LCBzdHJpbmcxKTsKIH0KQEAgLTI2MCw3ICsyNjAsNyBAQCBURVNUKFN0cmluZ0J1aWxkZXJUZXN0
LCBUb1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkpCiAgICAgc3RyaW5nMSA9IGJ1aWxkZXIudG9TdHJp
bmdQcmVzZXJ2ZUNhcGFjaXR5KCk7CiAgICAgRVhQRUNUX0VRKGNhcGFjaXR5LCBidWlsZGVyLmNh
cGFjaXR5KCkpOwogICAgIEVYUEVDVF9FUShzdHJpbmcuY2hhcmFjdGVyczgoKSwgYnVpbGRlci5j
aGFyYWN0ZXJzOCgpKTsKLSAgICBidWlsZGVyLnJlc2l6ZSgxMCk7CisgICAgYnVpbGRlci5zaHJp
bmsoMTApOwogICAgIGJ1aWxkZXIuYXBwZW5kKCIjIyMiKTsKICAgICBFWFBFQ1RfRVEoU3RyaW5n
KCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkMiKSwgc3RyaW5nMSk7CiB9
CkBAIC0yODgsMTggKzI4OCwxOCBAQCBURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBSZXNpemUpCiB7
CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2
Nzg5Iik7Ci0gICAgYnVpbGRlci5yZXNpemUoMTApOworICAgIGJ1aWxkZXIuc2hyaW5rKDEwKTsK
ICAgICBFWFBFQ1RfRVEoMTBVLCBidWlsZGVyLmxlbmd0aCgpKTsKICAgICBleHBlY3RCdWlsZGVy
Q29udGVudCgiMDEyMzQ1Njc4OSIsIGJ1aWxkZXIpOwotICAgIGJ1aWxkZXIucmVzaXplKDgpOwor
ICAgIGJ1aWxkZXIuc2hyaW5rKDgpOwogICAgIEVYUEVDVF9FUSg4VSwgYnVpbGRlci5sZW5ndGgo
KSk7CiAgICAgZXhwZWN0QnVpbGRlckNvbnRlbnQoIjAxMjM0NTY3IiwgYnVpbGRlcik7CiAKICAg
ICBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgYnVpbGRlci5yZXNpemUoNyk7CisgICAgYnVpbGRl
ci5zaHJpbmsoNyk7CiAgICAgRVhQRUNUX0VRKDdVLCBidWlsZGVyLmxlbmd0aCgpKTsKICAgICBl
eHBlY3RCdWlsZGVyQ29udGVudCgiMDEyMzQ1NiIsIGJ1aWxkZXIpOwotICAgIGJ1aWxkZXIucmVz
aXplKDApOworICAgIGJ1aWxkZXIuc2hyaW5rKDApOwogICAgIGV4cGVjdEVtcHR5KGJ1aWxkZXIp
OwogfQogCkBAIC0zMjksMjIgKzMyOSwyMiBAQCBURVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBFcXVh
bCkKICAgICBidWlsZGVyMi50b1N0cmluZygpOyAvLyBUZXN0IGFmdGVyIHJlaWZ5U3RyaW5nKCku
CiAgICAgRVhQRUNUX1RSVUUoYnVpbGRlcjEgIT0gYnVpbGRlcjIpOwogCi0gICAgYnVpbGRlcjIu
cmVzaXplKDMpOworICAgIGJ1aWxkZXIyLnNocmluaygzKTsKICAgICBFWFBFQ1RfVFJVRShidWls
ZGVyMSA9PSBidWlsZGVyMik7CiAKICAgICBidWlsZGVyMS50b1N0cmluZygpOyAvLyBUZXN0IGFm
dGVyIHJlaWZ5U3RyaW5nKCkuCiAgICAgRVhQRUNUX1RSVUUoYnVpbGRlcjEgPT0gYnVpbGRlcjIp
OwogfQogCi1URVNUKFN0cmluZ0J1aWxkZXJUZXN0LCBDYW5TaHJpbmspCitURVNUKFN0cmluZ0J1
aWxkZXJUZXN0LCBTaG91bGRTaHJpbmtUb0ZpdCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CiAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkoMjU2KTsKLSAgICBFWFBFQ1RfVFJVRShi
dWlsZGVyLmNhblNocmluaygpKTsKKyAgICBFWFBFQ1RfVFJVRShidWlsZGVyLnNob3VsZFNocmlu
a1RvRml0KCkpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspCiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCd4Jyk7CiAgICAgRVhQRUNUX0VRKGJ1aWxkZXIubGVuZ3RoKCksIGJ1aWxk
ZXIuY2FwYWNpdHkoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGJ1aWxkZXIuY2FuU2hyaW5rKCkpOwor
ICAgIEVYUEVDVF9GQUxTRShidWlsZGVyLnNob3VsZFNocmlua1RvRml0KCkpOwogfQogCiBURVNU
KFN0cmluZ0J1aWxkZXJUZXN0LCBUb0F0b21TdHJpbmcpCkBAIC0zNTUsNyArMzU1LDcgQEAgVEVT
VChTdHJpbmdCdWlsZGVyVGVzdCwgVG9BdG9tU3RyaW5nKQogICAgIEVYUEVDVF9FUShTdHJpbmco
IjEyMyIpLCBhdG9tU3RyaW5nKTsKIAogICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KDI1Nik7
Ci0gICAgRVhQRUNUX1RSVUUoYnVpbGRlci5jYW5TaHJpbmsoKSk7CisgICAgRVhQRUNUX1RSVUUo
YnVpbGRlci5zaG91bGRTaHJpbmtUb0ZpdCgpKTsKICAgICBmb3IgKGludCBpID0gYnVpbGRlci5s
ZW5ndGgoKTsgaSA8IDEyODsgaSsrKQogICAgICAgICBidWlsZGVyLmFwcGVuZCgneCcpOwogICAg
IEF0b21TdHJpbmcgYXRvbVN0cmluZzEgPSBidWlsZGVyLnRvQXRvbVN0cmluZygpOwpAQCAtMzY3
LDcgKzM2Nyw3IEBAIFRFU1QoU3RyaW5nQnVpbGRlclRlc3QsIFRvQXRvbVN0cmluZykKICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJ3gnKTsKICAgICBFWFBFQ1RfRVEoMTI4dSwgYXRvbVN0cmluZzEu
bGVuZ3RoKCkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGJ1aWxkZXIuY2FuU2hyaW5rKCkpOworICAg
IEVYUEVDVF9GQUxTRShidWlsZGVyLnNob3VsZFNocmlua1RvRml0KCkpOwogICAgIFN0cmluZyBz
dHJpbmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgQXRvbVN0cmluZyBhdG9tU3RyaW5nMiA9
IGJ1aWxkZXIudG9BdG9tU3RyaW5nKCk7CiAgICAgLy8gVGhleSBzaG91bGQgc2hhcmUgdGhlIHNh
bWUgU3RyaW5nSW1wbC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0L0dldFVzZXJNZWRpYS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0dl
dFVzZXJNZWRpYS5tbQppbmRleCBlYmNiYzAxYWY0Y2Y1NzVkNDI3ZmVhMmQ5MmFlODdiNzk3MGNj
MmMyLi41ZTUyNjAzMmFmYTE2YmI1NjZiOGZkMjMyZGFmOGQ0YmJjMzE3MmZkIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9HZXRVc2VyTWVkaWEubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvR2V0VXNlck1lZGlhLm1tCkBAIC0xMjcs
OCArMTI3LDcgQEAgc3RhdGljIFN0cmluZyB3a01lZGlhQ2FwdHVyZVN0YXRlU3RyaW5nKF9XS01l
ZGlhQ2FwdHVyZVN0YXRlRGVwcmVjYXRlZCBmbGFncykKICAgICBpZiAoc3RyaW5nLmlzRW1wdHko
KSkKICAgICAgICAgc3RyaW5nLmFwcGVuZCgiX1dLTWVkaWFDYXB0dXJlU3RhdGVEZXByZWNhdGVk
Tm9uZSIpOwogICAgIGVsc2UKLSAgICAgICAgc3RyaW5nLnJlc2l6ZShzdHJpbmcubGVuZ3RoKCkg
LSAyKTsKLQorICAgICAgICBzdHJpbmcuc2hyaW5rKHN0cmluZy5sZW5ndGgoKSAtIDIpOwogICAg
IHJldHVybiBzdHJpbmcudG9TdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmlu
ZGV4IGFiZDNhZmRlOTFmMDhlODc5NGYxMGFiZDZkMTBkYzM4OGQ0NWIyODQuLjFkZWNmMzA3M2Fh
ZjMxNDViMWQ5Yjk3MjViNWNkNWJlM2EyNzcyZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAK
QEAgLTUyLDEyICs1Miw0NiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8
d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0Yp
ICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCiAjaW5jbHVkZSAiV2Vi
QXJjaGl2ZUR1bXBTdXBwb3J0LmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V0tT
dHJpbmdSZWY+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihXS1N0cmluZ1JlZik7
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcgPyBXS1N0cmlu
Z0dldExlbmd0aChtX3N0cmluZykgOiAwOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJl
dHVybiAhbV9zdHJpbmc7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2
b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSopIGNvbnN0OworCitwcml2YXRlOgorICAgIFdLU3Ry
aW5nUmVmIG1fc3RyaW5nOworfTsKKworaW5saW5lIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5n
UmVmPjo6U3RyaW5nVHlwZUFkYXB0ZXIoV0tTdHJpbmdSZWYgc3RyaW5nKQorICAgIDogbV9zdHJp
bmcgeyBzdHJpbmcgfQoreworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVB
ZGFwdGVyPFdLU3RyaW5nUmVmPjo6d3JpdGVUbzxMQ2hhcj4oTENoYXIqKSBjb25zdAoreworfQor
Cit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFN0cmluZ1R5cGVBZGFwdGVyPFdLU3RyaW5nUmVmPjo6
d3JpdGVUbzxVQ2hhcj4oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAoreworICAgIGlmIChtX3N0
cmluZykKKyAgICAgICAgV0tTdHJpbmdHZXRDaGFyYWN0ZXJzKG1fc3RyaW5nLCByZWludGVycHJl
dF9jYXN0PFdLQ2hhcio+KGRlc3RpbmF0aW9uKSwgV0tTdHJpbmdHZXRMZW5ndGgobV9zdHJpbmcp
KTsKK30KKworfQorCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIGRvdWJsZSBudW1lcmljV2lu
ZG93UHJvcGVydHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKQEAg
LTg5LDcgKzEyMyw3IEBAIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwKICAgICByZXR1cm4gZHVtcFBh
dGgoY29udGV4dCwgbm9kZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyByYW5nZVRv
U3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBX
S0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlUmVmKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmlu
ZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tC
dW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZVJlZikKIHsKICAgICBpZiAoIXJhbmdlUmVmKQogICAg
ICAgICByZXR1cm4gIihudWxsKSI7CkBAIC0xMzAsNDMgKzE2NCwyNiBAQCBzdGF0aWMgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRp
b25UeXBlIHR5cAogICAgIHJldHVybiB0b1dLKCJpbGxlZ2FsIHZhbHVlIik7CiB9CiAKLXN0YXRp
YyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJl
ZiBzdHlsZSkKK3N0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5
bGVEZWNsYXJhdGlvblJlZikKIHsKICAgICAvLyBEdW1wUmVuZGVyVHJlZSBjYWxscyAtW0RPTUNT
U1N0eWxlRGVjbGFyYXRpb24gZGVzY3JpcHRpb25dLCB3aGljaCBqdXN0IGR1bXBzIGNsYXNzIG5h
bWUgYW5kIG9iamVjdCBhZGRyZXNzLgogICAgIC8vIE5vIGV4aXN0aW5nIHRlc3RzIGFjdHVhbGx5
IGhpdCB0aGlzIGNvZGUgcGF0aCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGJlY2F1c2Ug
V2ViQ29yZSBkb2Vzbid0IGNhbGwKICAgICAvLyB0aGUgZWRpdGluZyBjbGllbnQgaWYgdGhlIHN0
eWxpbmcgb3BlcmF0aW9uIHNvdXJjZSBpcyBDb21tYW5kRnJvbURPTSBvciBDb21tYW5kRnJvbURP
TVdpdGhVc2VySW50ZXJmYWNlLgotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFE
RFJFU1M+Iik7Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1
cm4gIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Il9zOwogfQogCiBzdGF0aWMgV1RG
OjpTdHJpbmcgc3RyaW5nKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQogewotICAgIHJldHVy
biBtYWtlU3RyaW5nKCd7JywgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29w
eVByb3RvY29sKG9yaWdpbikpKSwgIiwgIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5
T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpLCAiLCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChv
cmlnaW4pLCAnfScpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCd7JywgYWRvcHRXSyhXS1NlY3Vy
aXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpLmdldCgpLCAiLCAiLCBhZG9wdFdLKFdLU2Vj
dXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKS5nZXQoKSwgIiwgIiwgV0tTZWN1cml0eU9yaWdp
bkdldFBvcnQob3JpZ2luKSwgJ30nKTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIGZyYW1lVG9T
dHIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKK3N0YXRpYyBXVEY6OlN0cmluZyBzdHJpbmcoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKICAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxl
RnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
LSAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewotICAgICAgICBpZiAo
IVdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnIicpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
V0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoImZyYW1lIFwiIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnIicpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91cykiKTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBib29sIGlzTWFpbiA9IFdLQnVu
ZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSk7CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShuYW1l
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGlzTWFpbiA/ICJtYWluIGZyYW1lIl9zIDogImZyYW1l
IChhbm9ueW1vdXMpIl9zOworICAgIHJldHVybiBtYWtlU3RyaW5nKGlzTWFpbiA/ICJtYWluIGZy
YW1lIFwiIiA6ICJmcmFtZSBcIiIsIG5hbWUuZ2V0KCksICciJyk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0xvY2FsRmlsZVNjaGVtZShXS1N0cmluZ1JlZiBzY2hlbWUpCkBAIC0yMTAsNyAr
MjI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXNvdXJjZVVSTCh1aW50NjRfdCBpZGVu
dGlmaWVyLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWkKICAgICBpZiAoYXNzaWduZWRVcmxzQ2Fj
aGUoKS5jb250YWlucyhpZGVudGlmaWVyKSkKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
YXNzaWduZWRVcmxzQ2FjaGUoKS5nZXQoaWRlbnRpZmllcikpOwogICAgIGVsc2UKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8dW5rbm93bj4iKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIjx1bmtub3duPiIpOwogfQogCiBJbmplY3RlZEJ1bmRsZVBhZ2U6Oklu
amVjdGVkQnVuZGxlUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKQEAgLTM5Myw3NiArNDEwLDQz
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgpCiAKIC8vIExvYWRl
ciBDbGllbnQgQ2FsbGJhY2tzCiAKLS8vIFN0cmluZyBvdXRwdXQgbXVzdCBiZSBpZGVudGljYWwg
dG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XS4KLXN0
YXRpYyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCi17Ci0gICAg
YXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKLSAgICBp
ZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewotICAgICAgICBpZiAoV0tTdHJp
bmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIm1haW4gZnJhbWUiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSBcIiIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91cykiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJyInKTsKLX0KLQogc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBldmVudE5hbWUpCiB7Ci0gICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiAtICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGV2ZW50TmFtZSk7Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKHN0cmluZyhmcmFtZSks
ICIgLSAiLCBldmVudE5hbWUsICdcbicpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBS
ZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJl
cXVlc3QsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCitzdGF0aWMgU3RyaW5nIHN0cmlu
ZyhXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCkKIHsKICAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tV
UkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAgYXV0byBmaXJzdFBhcnR5ID0gYWRvcHRX
SyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOwogICAgIGF1
dG8gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVz
dCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlcXVlc3QgVVJMICIsIHBh
dGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgbWFpbiBkb2N1bWVudCBVUkwg
IiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSwgIiwgaHR0cCBt
ZXRob2QgIik7Ci0gICAgaWYgKFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSkKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsKLSAgICBlbHNlCi0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCI8TlNV
UkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksCisg
ICAgICAgICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQo
Zmlyc3RQYXJ0eS5nZXQoKSksCisgICAgICAgICIsIGh0dHAgbWV0aG9kICIsIFdLU3RyaW5nSXNF
bXB0eShodHRwTWV0aG9kLmdldCgpKSA/ICIobm9uZSkiIDogIiIsIGh0dHBNZXRob2QuZ2V0KCks
ICc+Jyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBTdHJpbmdCdWls
ZGVyJiBzdHJpbmdCdWlsZGVyLCBib29sIHNob3VsZER1bXBSZXNwb25zZUhlYWRlcnMgPSBmYWxz
ZSkKK3N0YXRpYyBTdHJpbmcgc3RyaW5nKFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGJvb2wg
c2hvdWxkRHVtcFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlKQogewogICAgIGF1dG8gdXJsID0gYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwotICAgIGlmICghdXJsKSB7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51bGwpIik7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXVybCkKKyAgICAgICAgcmV0dXJuICIobnVsbCkiX3M7CisgICAgaWYg
KCFzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzKSB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSks
CisgICAgICAgICAgICAiLCBodHRwIHN0YXR1cyBjb2RlICIsIFdLVVJMUmVzcG9uc2VIVFRQU3Rh
dHVzQ29kZShyZXNwb25zZSksICc+Jyk7CiAgICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCI8TlNVUkxSZXNwb25zZSAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSks
ICIsIGh0dHAgc3RhdHVzIGNvZGUgIiwgV0tVUkxSZXNwb25zZUhUVFBTdGF0dXNDb2RlKHJlc3Bv
bnNlKSk7Ci0gICAgaWYgKHNob3VsZER1bXBSZXNwb25zZUhlYWRlcnMpCi0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIsICIsIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzcG9uc2VIZWFkZXJD
b3VudChyZXNwb25zZSksICIgaGVhZGVycyIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+
Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxOU1VSTFJlc3BvbnNlICIsIHBhdGhTdWl0YWJs
ZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwKKyAgICAgICAgIiwgaHR0cCBzdGF0dXMgY29kZSAi
LCBXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpLAorICAgICAgICAiLCAiLCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQocmVzcG9uc2UpLCAiIGhlYWRl
cnM+Iik7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi0vLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgZm9yIG5vbiBjb2NvYSBwb3J0cy4KLS8vICAgICAgICBbR1RLXVtXUEVdIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyOTUKKworLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIGZvciBub24tQ29jb2EgcG9ydHMuIFtHVEtdW1dQRV0gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDI5NQogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpyZXNwb25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7CiAgICAg
cmV0dXJuIDA7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgU3RyaW5nQnVp
bGRlciYgc3RyaW5nQnVpbGRlcikKQEAgLTQ4MCw3ICs0NjQsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBl
cnJvciwgUwogCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU0Vycm9yIGRvbWFpbiAiLCBl
cnJvckRvbWFpbiwgIiwgY29kZSAiLCBlcnJvckNvZGUpOwogICAgIGlmIChhdXRvIHVybCA9IGFk
b3B0V0soV0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9yKSkpCi0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwiIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENv
cHlTdHJpbmcodXJsLmdldCgpKSkpLCAnIicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiLCBmYWlsaW5nIFVSTCBcIiIsIGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkp
LmdldCgpLCAnIicpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKQEAgLTcw
MCw3ICs2ODQsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogICAgIGlmIChmYWJzKHgpIDw9
IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKHNob3VsZEluY2x1ZGVGcmFtZU5hbWUpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJmcmFtZSAnIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
ZnJhbWUpKSksICInICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiZnJhbWUgJyIs
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSkuZ2V0KCksICInICIpOwogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJzY3JvbGxlZCB0byAiLCB4LCAnLCcsIHksICdcbicpOwog
fQogCkBAIC03NTgsOSArNzQyLDcgQEAgc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZXNU
ZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmkKICAgICAgICAg
aWYgKCFoYXNEb2N1bWVudEVsZW1lbnQoc3ViZnJhbWUpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbi0tLS0tLS0tXG5GcmFt
ZTogJyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdWJmcmFt
ZU5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCInXG4tLS0tLS0t
LVxuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tXG5GcmFtZTog
JyIsIHN1YmZyYW1lTmFtZS5nZXQoKSwgIidcbi0tLS0tLS0tXG4iKTsKIAogICAgICAgICBkdW1w
RnJhbWVUZXh0KHN1YmZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgZHVtcERlc2NlbmRh
bnRGcmFtZXNUZXh0KHN1YmZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKQEAgLTc4MCw4ICs3NjIsNyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZAogI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9D
QUlSTykgJiYgIVVTRShESVJFQ1QyRCkKICAgICBhdXRvIHdrRGF0YSA9IGFkb3B0V0soV0tCdW5k
bGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CiAgICAgYXV0byBjZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRT
aXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBhdXRvIGNmU3RyaW5nID0gV2ViQ29yZVRlc3RTdXBw
b3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0cmluZy5nZXQoKSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2
ZURhdGEoY2ZEYXRhLmdldCgpKS5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtODA3LDkgKzc4OCw5
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBzd2l0Y2ggKGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+d2hhdFRvRHVtcCgpKSB7CiAgICAgY2FzZSBXaGF0VG9EdW1w
OjpSZW5kZXJUcmVlOiB7CiAgICAgICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PmlzUHJpbnRpbmcoKSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0
aW9uRm9yUHJpbnRpbmcobV9wYWdlKSkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJl
c2VudGF0aW9uRm9yUHJpbnRpbmcobV9wYWdlKSkuZ2V0KCkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxl
UGFnZUNvcHlSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UsIGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+cmVuZGVyVHJlZUR1bXBPcHRpb25zKCkpKS5nZXQoKSkpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5
UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24obV9wYWdlLCBpbmplY3RlZEJ1bmRsZS50
ZXN0UnVubmVyKCktPnJlbmRlclRyZWVEdW1wT3B0aW9ucygpKSkuZ2V0KCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBXaGF0VG9EdW1wOjpNYWluRnJhbWVUZXh0OgpAQCAtODkw
LDE5ICs4NzEsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZv
ckZyYW1lKFdLU3RyaW5nUmVmIHRpdGxlLCBXS0J1bmRsZUZyYW0KICAgICAgICAgcmV0dXJuOwog
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGlmIChpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAg
ICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5n
QnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVj
ZWl2ZVRpdGxlOiAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmco
dGl0bGUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgfQotCi0g
ICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdl
cygpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVElUTEUgQ0hBTkdF
RDogJyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIidcbiIpOwotICAgIH0KLQor
ICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RyaW5nKGZyYW1lKSwg
IiAtIGRpZFJlY2VpdmVUaXRsZTogIiwgdGl0bGUsICdcbicpOworICAgIGlmIChpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIlRJVExFIENIQU5HRUQ6ICciLCB0aXRsZSwgIidcbiIpOwogICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0K
IApAQCAtOTUxLDEwICs5MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdQogICAgIGlmICgh
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
LSAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3Ry
aW5nQnVpbGRlcik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIHdpbGxQZXJmb3JtQ2xp
ZW50UmVkaXJlY3RUb1VSTDogIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpLCAnXG4n
KTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKHN0cmluZyhmcmFt
ZSksICIgLSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6ICIsIHBhdGhTdWl0YWJsZUZv
clRlc3RSZXN1bHQodXJsKSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFdLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUgdHlwZSkKQEAgLTk4Miw3ICs5NTEsNyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZEZp
bmlzaERvY3VtZW50TG9hZEZvckZyYW1lIik7CiAKICAgICBpZiAodW5zaWduZWQgcGVuZGluZ0Zy
YW1lVW5sb2FkRXZlbnRzID0gV0tCdW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChmcmFt
ZSkpCi0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZyhmcmFtZVRv
U3RyKGZyYW1lKSwgIiAtIGhhcyAiLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMsICIgb251bmxv
YWQgaGFuZGxlcihzKVxuIikpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1h
a2VTdHJpbmcoc3RyaW5nKGZyYW1lKSwgIiAtIGhhcyAiLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVu
dHMsICIgb251bmxvYWQgaGFuZGxlcihzKVxuIikpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSkKQEAgLTEwNDksMTEgKzEwMTgsOCBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAg
ICAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAg
ICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSB3aWxsU2VuZFJlcXVlc3QgIik7Ci0gICAg
ICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwg
c3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJl
ZGlyZWN0UmVzcG9uc2UgIik7Ci0gICAgICAgIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KHJlc3BvbnNlLCBzdHJpbmdCdWlsZGVyLCBpbmplY3RlZEJ1bmRsZS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxIVFRQUmVkaXJlY3RlZFJlc3BvbnNlSGVhZGVycygp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgLSB3aWxsU2VuZFJlcXVlc3QgIiwgc3RyaW5nKHJlcXVlc3QpLAorICAg
ICAgICAgICAgIiByZWRpcmVjdFJlc3BvbnNlICIsIHN0cmluZyhyZXNwb25zZSwgaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQWxsSFRUUFJlZGlyZWN0ZWRSZXNwb25zZUhl
YWRlcnMoKSksICdcbicpOwogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCkBAIC0xMDg2LDExICsxMDUyLDcgQEAgV0tV
UkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBp
c0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0
KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1l
SXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewotICAgICAgICAgICAg
U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIik7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICAgICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJCbG9ja2VkIGFjY2VzcyB0byBl
eHRlcm5hbCBVUkwgIiwgdXJsU3RyaW5nLmdldCgpLCAnXG4nKSk7CiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KQEAgLTExMTcsOSArMTA3OSw3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0
cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRp
ZFJlY2VpdmVSZXNwb25zZSAiKTsKLSAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0
YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAt
IGRpZFJlY2VpdmVSZXNwb25zZSAiLCBzdHJpbmcocmVzcG9uc2UpLCAnXG4nKTsKICAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAg
IH0KIApAQCAtMTEzMiwxNCArMTA5MiwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
UmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQgogICAg
IGF1dG8gbWltZVR5cGVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUo
cmVzcG9uc2UpKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiBoYXMgTUlNRSB0eXBlICIpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKG1pbWVUeXBlU3RyaW5nKSk7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodXJsU3RyaW5nLmdldCgpLCAiIGhhcyBNSU1FIHR5cGUgIiwgbWltZVR5cGVTdHJpbmcu
Z2V0KCkpOwogCiAgICAgU3RyaW5nIHBsYXRmb3JtTWltZVR5cGUgPSBwbGF0Zm9ybVJlc3BvbnNl
TWltZVR5cGUocmVzcG9uc2UpOwogICAgIGlmICghcGxhdGZvcm1NaW1lVHlwZS5pc0VtcHR5KCkg
JiYgcGxhdGZvcm1NaW1lVHlwZSAhPSB0b1dURlN0cmluZyhtaW1lVHlwZVN0cmluZykpIHsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNl
IGhhcyAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGxhdGZvcm1NaW1lVHlwZSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgYnV0IHBsYXRmb3JtIHJlc3BvbnNlIGhh
cyAiLCBwbGF0Zm9ybU1pbWVUeXBlKTsKICAgICB9CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKQEAgLTExNjIsNyArMTExOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lCiAK
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgZHVtcFJlc291cmNlVVJMKGlk
ZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIC0gZGlkRmluaXNoTG9hZGluZ1xuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAt
IGRpZEZpbmlzaExvYWRpbmdcbiIpOwogICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIApAQCAtMTE3Nyw3ICsxMTM0LDcgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVm
LCBXS0J1bmRsZUZyYW1lUmUKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAg
ICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogIik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsK
IAogICAgIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGVycm9yLCBz
dHJpbmdCdWlsZGVyKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTExOTks
NyArMTE1Niw2IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDYWNoZVJlc3BvbnNl
KFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotCiAvLyBQb2xpY3kgQ2xpZW50IENhbGxiYWNrcwogCiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rp
b24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdL
QnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZU5hdmln
YXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvbiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3Qs
IFdLVHlwZVJlZiogdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xMjI5LDEz
ICsxMTg1LDkgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICAgICAgcmV0dXJuIFdLQnVu
ZGxlUGFnZVBvbGljeUFjdGlvblVzZTsKIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBQb2xpY3lDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIik7Ci0gICAgICAgIGR1bXBSZXF1
ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRl
cik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFpbiBmcmFtZSAtICIsIFdL
QnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdL
QnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlv
bkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25cbiIsIHN0cmluZyhyZXF1ZXN0KSwK
KyAgICAgICAgICAgICIgaXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFt
ZShmcmFtZSkgPyAieWVzIiA6ICJubyIsCisgICAgICAgICAgICAiIHNob3VsZCBvcGVuIFVSTHMg
ZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRl
cm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIsICdcbicpKTsKICAgICB9
CiAKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0
ZUVuYWJsZWQoKSkKQEAgLTEyNDUsMTkgKzExOTcsMTYgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0
aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihX
S0IKICAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQo
KSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2Fk
ICIpOwogICAgIGlmIChpc0xvY2FsRmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQ
YXRoQ29tcG9uZW50KHVybC5nZXQoKSkpKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdldCgpKSkuZ2V0KCkpOwog
ICAgIGVsc2UKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRX
SyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKS5nZXQoKSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIsIE5hdmlnYXRpb25U
eXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2
aWdhdGlvbkFjdGlvbikpLmdldCgpLCAnXCcnKTsKICAgICBhdXRvIGhpdFRlc3RSZXN1bHRSZWYg
PSBhZG9wdFdLKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmln
YXRpb25BY3Rpb24pKTsKICAgICBpZiAoaGl0VGVzdFJlc3VsdFJlZikgewogICAgICAgICBhdXRv
IG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFu
ZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2RlSGFuZGxlUmVmLmdldCgp
KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgb3JpZ2luYXRpbmcgZnJvbSAiLCBk
dW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAg
ICB9CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTEyNzcsNyArMTIyNiw3
IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBv
bGljeUZvclJlc3BvbnNlKFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdh
dGVFbmFibGVkKCkgJiYgV0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygi
UG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmls
ZSBuYW1lIFwnIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3Rl
ZEZpbGVuYW1lKHJlc3BvbnNlKSkpLCAiXCdcbiIpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiByZXNv
dXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgYWRvcHRXSyhX
S1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSkuZ2V0KCksICInXG4i
KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJv
dWdoOwpAQCAtMTM2Nyw3ICsxMzE2LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxB
ZGRNZXNzYWdlVG9Db25zb2xlKFdLU3RyaW5nUmVmIG1lc3NhZ2UpCiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6U3Ry
aW5nIG1lc3NhZ2VTdHJpbmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKKyAgICBhdXRvIG1lc3Nh
Z2VTdHJpbmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKICAgICBzaXplX3QgbnVsbENoYXJQb3Mg
PSBtZXNzYWdlU3RyaW5nLmZpbmQoVUNoYXIoMCkpOwogICAgIGlmIChudWxsQ2hhclBvcyAhPSBX
VEY6Om5vdEZvdW5kKQogICAgICAgICBtZXNzYWdlU3RyaW5nLnRydW5jYXRlKG51bGxDaGFyUG9z
KTsKQEAgLTEzOTMsNyArMTM0Miw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0
U3RhdHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQogICAgIGlmICghaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygi
VUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5n
KHN0YXR1c2JhclRleHQpLCAnXG4nKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCht
YWtlU3RyaW5nKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iiwg
c3RhdHVzYmFyVGV4dCwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVm
KQpAQCAtMTQxNiw3ICsxMzY1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5K
YXZhU2NyaXB0Q29uZmlybShXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUYKIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1l
c3NhZ2UsIFdLU3RyaW5nUmVmIGRlZmF1bHRWYWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQUk9N
UFQ6ICIsIHRvV1RGU3RyaW5nKG1lc3NhZ2UpLCAiLCBkZWZhdWx0IHRleHQ6IiwgYWRkTGVhZGlu
Z1NwYWNlU3RyaXBUcmFpbGluZ1NwYWNlc0FkZE5ld2xpbmUodG9XVEZTdHJpbmcoZGVmYXVsdFZh
bHVlKSkpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtl
U3RyaW5nKCJQUk9NUFQ6ICIsIG1lc3NhZ2UsICIsIGRlZmF1bHQgdGV4dDoiLCBhZGRMZWFkaW5n
U3BhY2VTdHJpcFRyYWlsaW5nU3BhY2VzQWRkTmV3bGluZSh0b1dURlN0cmluZyhkZWZhdWx0VmFs
dWUpKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIGludDY0X3QgdG90
YWxCeXRlc05lZWRlZCkKQEAgLTE0NDIsNyArMTM5MSw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdp
biwKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0
YWJhc2VDYWxsYmFja3MoKSkKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtl
U3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1
b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9X
VEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xuJykpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNl
ZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBk
YXRhYmFzZToiLCBkYXRhYmFzZU5hbWUsICdcbicpKTsKIAogICAgIHVpbnQ2NF90IGRlZmF1bHRR
dW90YSA9IDUgKiAxMDI0ICogMTAyNDsKICAgICBkb3VibGUgdGVzdERlZmF1bHRRdW90YSA9IGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKQEAgLTE1
MjUsNyArMTQ3NCw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRp
bmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VU
b1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOworICAgICAgICBpbmpl
Y3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iiwgc3RyaW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
cmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTE1MzYsNyArMTQ4NSw3IEBAIGJvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYg
cmFuZ2UpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRF
bmRFZGl0aW5nSW5ET01SYW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
cmFuZ2UpLCAnXG4nKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0
cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iiwgc3Ry
aW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJuIGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAg
LTE1NDYsMjIgKzE0OTUsMTcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2Vy
dE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUsIFdLQnVuZGxlUmEKICAgICBpZiAoIWlu
amVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKICAgICAgICAg
IldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZCIsCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9u
UGFzdGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9Owog
CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxk
SW5zZXJ0Tm9kZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCBub2RlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVu
ZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAg
ICAgICAgICIgc2hvdWxkSW5zZXJ0Tm9kZToiLCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0
KCksIG5vZGUpLAorICAgICAgICAgICAgIiByZXBsYWNpbmdET01SYW5nZToiLCBzdHJpbmcobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSksCisgICAgICAgICAgICAiIGdpdmVu
QWN0aW9uOiIsIGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7CiAgICAgfQogICAg
IHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygp
OwogfQpAQCAtMTU3MiwyMiArMTUxNiwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkSW5zZXJ0VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlSGFuZGxlUgogICAg
IGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICppbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewog
ICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblR5cGVkIiwKICAgICAgICAgIldlYlZpZXdJbnNl
cnRBY3Rpb25QYXN0ZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAog
ICAgIH07CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRJbnNlcnRUZXh0OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyh0ZXh0KSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJl
cGxhY2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRv
U3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiIKKyAgICAgICAgICAgICIgc2hv
dWxkSW5zZXJ0VGV4dDoiLCB0ZXh0LAorICAgICAgICAgICAgIiByZXBsYWNpbmdET01SYW5nZToi
LCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSksCisgICAgICAg
ICAgICAiIGdpdmVuQWN0aW9uOiIsIGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dLCAnXG4nKSk7
CiAgICAgfQogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFs
bG93RWRpdGluZygpOwogfQpAQCAtMTU5OCwxMyArMTUzNyw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpzaG91bGREZWxldGVSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQog
ICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZERlbGV0ZURPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChy
YW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxl
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGREZWxldGVET01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSks
ICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRB
bGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTYxNCwyNyArMTU0OCwxNyBAQCBib29sIEluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxl
UmVmIGZyb21SYQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICphZmZpbml0eXN0cmlu
Z1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogYWZmaW5pdHlzdHJpbmdb
XSA9IHsKICAgICAgICAgIk5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbSIsCiAgICAgICAgICJO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSIKICAgICB9OwotICAgIHN0YXRpYyBjb25zdCBj
aGFyICpib29sc3RyaW5nW10gPSB7Ci0gICAgICAgICJGQUxTRSIsCi0gICAgICAgICJUUlVFIgot
ICAgIH07CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvRE9NUmFuZ2U6Iik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgp
LCB0b1JhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGFmZmlu
aXR5OiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhZmZpbml0eXN0cmluZ1thZmZp
bml0eV0pOyAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgc3RpbGxTZWxl
Y3Rpbmc6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxT
ZWxlY3RpbmddKTsgCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxF
R0FURToiCisgICAgICAgICAgICAiIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iiwgc3Ry
aW5nKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSwKKyAgICAgICAgICAgICIgdG9E
T01SYW5nZToiLCBzdHJpbmcobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSwKKyAgICAg
ICAgICAgICIgYWZmaW5pdHk6IiwgYWZmaW5pdHlzdHJpbmdbYWZmaW5pdHldLAorICAgICAgICAg
ICAgIiBzdGlsbFNlbGVjdGluZzoiLCBzdGlsbFNlbGVjdGluZyA/ICJUUlVFIiA6ICJGQUxTRSIs
ICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjQ2LDEzICsxNTcwLDkgQEAgYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5U3R5bGUoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0
aW9uUmVmIHN0eWxlLAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6Iik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUpKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVM
RUdBVEU6IgorICAgICAgICAgICAgIiBzaG91bGRBcHBseVN0eWxlOiIsIHN0eWxlRGVjVG9TdHIo
c3R5bGUpLAorICAgICAgICAgICAgIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiLCBzdHJpbmcobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICB9CiAgICAgcmV0dXJuIGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0x
NjY1LDExICsxNTg1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGlu
ZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5n
OiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5h
bWUpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVn
aW5FZGl0aW5nOiIsIG5vdGlmaWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkK
QEAgLTE2ODAsMTEgKzE1OTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRp
dGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGlu
ZzoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25O
YW1lKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVu
ZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVu
ZEVkaXRpbmc6Iiwgbm90aWZpY2F0aW9uTmFtZSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0x
Njk1LDExICsxNjA3LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0
cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIsIG5vdGlm
aWNhdGlvbk5hbWUsICdcbicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENo
YW5nZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTcxMCwxMSAr
MTYxOCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tT
dHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoi
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1l
KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxl
Lm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbjoiLCBub3RpZmljYXRpb25OYW1lLCAnXG4nKSk7CiB9CiAKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCkBAIC0xNzgzLDcgKzE2ODcsNyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkdW1wSGlzdG9yeSgpCiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoCiAgICAgICAg
ICJcbj09PT09PT09PT09PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09PT09PT09PT09PT09XG4iLAot
ICAgICAgICB0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVz
dGluZyhtX3BhZ2UsIHRvV0soIi9MYXlvdXRUZXN0cy8iKS5nZXQoKSkpLmdldCgpKSwKKyAgICAg
ICAgYWRvcHRXSyhXS0J1bmRsZVBhZ2VEdW1wSGlzdG9yeUZvclRlc3RpbmcobV9wYWdlLCB0b1dL
KCIvTGF5b3V0VGVzdHMvIikuZ2V0KCkpKS5nZXQoKSwKICAgICAgICAgIj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCiAgICAgKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>