<?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>15519</bug_id>
          
          <creation_ts>2007-10-15 11:18:44 -0700</creation_ts>
          <short_desc>eliminate use of &lt;ctype.h&gt; for processing ASCII</short_desc>
          <delta_ts>2007-10-16 13:26:56 -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>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></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>ggaren</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>58589</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-15 11:18:44 -0700</bug_when>
    <thetext>Since &lt;ctype.h&gt; can give locale-specific results, it&apos;s not good to use it in WebKit. Also, it&apos;s not necessarily fast or efficient enough. We&apos;ll use our own instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58607</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-15 17:04:43 -0700</bug_when>
    <thetext>Committed revision 26638.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58614</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-15 17:59:50 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Committed revision 26638.

Oops. That was for another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58615</commentid>
    <comment_count>3</comment_count>
      <attachid>16683</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-15 18:13:10 -0700</bug_when>
    <thetext>Created attachment 16683
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58632</commentid>
    <comment_count>4</comment_count>
      <attachid>16683</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-15 21:45:18 -0700</bug_when>
    <thetext>Comment on attachment 16683
patch

I&apos;m a big fan of this change.  Those method names are so much cleaner than the ctype ones, and it&apos;s nice to get rid of the ctype include hack.  I was a little surprised you didn&apos;t use template functions to implement the various copy/paste char variants.  I would mark this r+ but I didn&apos;t stare at the individual is* functions long enough to determine if their actually 100% correct.  I expect they are, but I don&apos;t trust my brain at this hour.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58664</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-16 10:59:10 -0700</bug_when>
    <thetext>-          if (isalpha(*p) &amp;&amp; toupper(*p) != *p)
+          if (isASCIIAlpha(*p) &amp;&amp; toASCIILower(*p) != *p)
             lstyle = 0;

As an EBay reviewer once wrote, &quot;BAD BAD FRAUD.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58666</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-16 11:15:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; -          if (isalpha(*p) &amp;&amp; toupper(*p) != *p)
&gt; +          if (isASCIIAlpha(*p) &amp;&amp; toASCIILower(*p) != *p)
&gt;              lstyle = 0;
&gt; 
&gt; As an EBay reviewer once wrote, &quot;BAD BAD FRAUD.&quot;

Oops! I wonder why this one didn&apos;t show up as a test failure. I&apos;ll look into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58667</commentid>
    <comment_count>7</comment_count>
      <attachid>16683</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-16 11:28:56 -0700</bug_when>
    <thetext>Comment on attachment 16683
patch

Would it be reasonable to make these template functions instead of overloads:

+inline bool isASCIIAlpha(char c) { return (c | 0x20) &gt;= &apos;a&apos; &amp;&amp; (c | 0x20) &lt;= &apos;z&apos;; }
+inline bool isASCIIAlpha(unsigned short c) { return (c | 0x20) &gt;= &apos;a&apos; &amp;&amp; (c | 0x20) &lt;= &apos;z&apos;; }
+inline bool isASCIIAlpha(wchar_t c) { return (c | 0x20) &gt;= &apos;a&apos; &amp;&amp; (c | 0x20) &lt;= &apos;z&apos;; }

Perhaps DisallowCType.h or ASCIICType.h should have a comment explaining why ASCIICType functions are preferred to regular ctype functions.

r=me anyway but please consider these suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58669</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-16 11:40:40 -0700</bug_when>
    <thetext>I verified with a table that the ASCII functions are correct.

I agree with Maciej that a better explanation / compiler error would help a developer who run into it down the line.

5948          } else if (c == &apos; &apos; || ispunct(c)) {
 5949         } else if (c == &apos; &apos; || c &gt;= 0x21 &amp;&amp; c &lt;= 0x2F || c &gt;= 0x3A &amp;&amp; c &lt;= 0x40 || c &gt;= 0x5B &amp;&amp; c &lt;= 0x60 || c &gt;= 0x7B &amp;&amp; c &lt;= 0x7D) {
59495950   

Why not provide isASCIIPunct instead?

For ASCIICType.h, I think the preferred style is to indent inside a namespace in header files. 

Also, why so much duplicated code? For instance, why doesn&apos;t isASCIIAlphanumeric call isASCIIAlpha?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58670</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-10-16 11:40:52 -0700</bug_when>
    <thetext>I verified with a table that the ASCII functions are correct.

I agree with Maciej that a better explanation / compiler error would help a developer who run into it down the line.

5948          } else if (c == &apos; &apos; || ispunct(c)) {
 5949         } else if (c == &apos; &apos; || c &gt;= 0x21 &amp;&amp; c &lt;= 0x2F || c &gt;= 0x3A &amp;&amp; c &lt;= 0x40 || c &gt;= 0x5B &amp;&amp; c &lt;= 0x60 || c &gt;= 0x7B &amp;&amp; c &lt;= 0x7D) {
59495950   

Why not provide isASCIIPunct instead?

For ASCIICType.h, I think the preferred style is to indent inside a namespace in header files. 

Also, why so much duplicated code? For instance, why doesn&apos;t isASCIIAlphanumeric call isASCIIAlpha?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58672</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-16 12:06:57 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; -         } else if (c == &apos; &apos; || ispunct(c)) {
&gt; +         } else if (c == &apos; &apos; || c &gt;= 0x21 &amp;&amp; c &lt;= 0x2F || c &gt;= 0x3A &amp;&amp; c
&gt; &lt;= 0x40 || c &gt;= 0x5B &amp;&amp; c &lt;= 0x60 || c &gt;= 0x7B &amp;&amp; c &lt;= 0x7D) {
&gt; 
&gt; Why not provide isASCIIPunct instead?

To me, this category seems far less definitive than the others. And the rule is specifically about Mac OS X behavior. I suspect that ispunct isn&apos;t even the correct rule; at some point we could visit this code and get the rule exactly right for all sorts of keyboards. I don&apos;t think it&apos;s correct to assume that the only punctuation you could type on a keyboard is ASCII punctuation.

I didn&apos;t want to dignify the existing rule with a name, but I also didn&apos;t want to change behavior.

&gt; For ASCIICType.h, I think the preferred style is to indent inside a namespace
&gt; in header files.

Hyatt and Maciej have been debating this point. I could go either way.

&gt; Also, why so much duplicated code? For instance, why doesn&apos;t
&gt; isASCIIAlphanumeric call isASCIIAlpha?

Hard to say exactly why. I like the fact that each of these lines stands alone. I expect that any future changes to this file would primarily be for performance optimization, perhaps to remove some of these functions if we find they aren&apos;t really useful, or maybe to add a few more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58673</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-16 12:07:59 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 16683 [edit])
&gt; Would it be reasonable to make these template functions instead of overloads:
&gt; 
&gt; +inline bool isASCIIAlpha(char c) { return (c | 0x20) &gt;= &apos;a&apos; &amp;&amp; (c | 0x20) &lt;=
&gt; &apos;z&apos;; }
&gt; +inline bool isASCIIAlpha(unsigned short c) { return (c | 0x20) &gt;= &apos;a&apos; &amp;&amp; (c |
&gt; 0x20) &lt;= &apos;z&apos;; }
&gt; +inline bool isASCIIAlpha(wchar_t c) { return (c | 0x20) &gt;= &apos;a&apos; &amp;&amp; (c | 0x20)
&gt; &lt;= &apos;z&apos;; }

Maybe. Template functions are more annoying when debugging. I&apos;m feeling slightly conflicted about it, and I think I&apos;ll leave it as-is for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58675</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-16 13:26:56 -0700</bug_when>
    <thetext>Committed revision 26676.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16683</attachid>
            <date>2007-10-15 18:13:10 -0700</date>
            <delta_ts>2007-10-16 11:28:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>CTypePatch.txt</filename>
            <type>text/plain</type>
            <size>82368</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjM4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDctMTAtMTUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU1MTkKKyAgICAgICAgICBlbGltaW5hdGUgdXNlIG9mIDxjdHlwZS5oPiBmb3IgcHJvY2Vzc2lu
ZyBBU0NJSQorCisgICAgICAgICogd3RmL0FTQ0lJQ1R5cGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL0Rpc2FsbG93Q1R5cGUuaDogQWRkZWQuCisKKyAgICAgICAgKiBranMvY29uZmlnLmg6IElu
Y2x1ZGUgRGlzYWxsb3dDVHlwZS5oLgorCisgICAgICAgICoga2pzL2RhdGVfb2JqZWN0LmNwcDoK
KyAgICAgICAgKEtKUzo6c2tpcFNwYWNlc0FuZENvbW1lbnRzKToKKyAgICAgICAgKEtKUzo6Zmlu
ZE1vbnRoKToKKyAgICAgICAgKEtKUzo6cGFyc2VEYXRlKToKKyAgICAgICAgKiBranMvZnVuY3Rp
b24uY3BwOgorICAgICAgICAoS0pTOjpkZWNvZGUpOgorICAgICAgICAqIGtqcy91c3RyaW5nLmNw
cDoKKyAgICAgICAgKEtKUzo6VVN0cmluZzo6dG9Eb3VibGUpOgorICAgICAgICBVc2UgQVNDSUlD
VHlwZS5oIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGN0eXBlLmggb25lcy4KKwogMjAwNy0xMC0xNSAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZWQgdW5u
ZWNlc3NhcnkgI2luY2x1ZGUuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2NjM1KQor
KysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjE3LDYgKzIxNyw4IEBACiAJCTkzNUFGNDZDMDlFOUQ5REIw
MEFDRDFEOCAvKiBGb3J3YXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVBRjQ2OTA5RTlEOURCMDBBQ0QxRDggLyogRm9yd2FyZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNUFGNDZFMDlFOUQ5
REIwMEFDRDFEOCAvKiBVbnVzZWRQYXJhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM1QUY0NkIwOUU5RDlEQjAwQUNEMUQ4IC8qIFVudXNlZFBhcmFt
LmggKi87IH07CiAJCTkzNUY2OUZFMDgyNDUwNTcwMDNEMUE0NSAvKiBkZnRhYmxlcy5jIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MTcyMEUwMzlFMDhC
OTAwNThCRkVCIC8qIGRmdGFibGVzLmMgKi87IH07CisJCTkzOEM0RjZBMENBMDZCQzcwMEQ5MzEw
QSAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzhDNEY2OTBDQTA2QkM3MDBEOTMxMEEgLyogQVNDSUlDVHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzOEM0RjZDMENBMDZC
Q0UwMEQ5MzEwQSAvKiBEaXNhbGxvd0NUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzhDNEY2QjBDQTA2QkNFMDBEOTMxMEEgLyogRGlzYWxsb3dD
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzQUE0Rjc4MDk1NzI1MUYwMDg0QjNBNyAvKiBBbHdheXNJbmxpbmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUE0Rjc3MDk1NzI1MUYwMDg0QjNB
NyAvKiBBbHdheXNJbmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5M0I2QTBERjBBQTY0REE0MDA3NkRFMjcgLyogR2V0UHRyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBERTBBQTY0REE0
MDA3NkRFMjcgLyogR2V0UHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTNFMjZCQ0EwOEIxNTExOTAwRjg1MjI2IC8qIHBjcmVfb3JkMnV0Zjgu
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTI2QkM5
MDhCMTUxMTkwMEY4NTIyNiAvKiBwY3JlX29yZDJ1dGY4LmMgKi87IH07CkBAIC01NjksNiArNTcx
LDggQEAKIAkJOTM3NEQzQTgwMzhEOUQ3NDAwODYzNUNFIC8qIHNjb3BlX2NoYWluLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gc2NvcGVf
Y2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTkz
N0I2M0NDMDlFNzY2RDIwMEE2NzFERCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1ha2U7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBEZXJpdmVkU291cmNlcy5tYWtlOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB1c2VzVGFicyA9IDE7IH07CiAJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVDRSAv
KiBhcnJheV9pbnN0YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGFycmF5X2luc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgfTsKKwkJOTM4QzRGNjkwQ0EwNkJDNzAwRDkzMTBBIC8qIEFTQ0lJQ1R5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNDSUlDVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5MzhDNEY2QjBDQTA2QkNFMDBEOTMxMEEgLyogRGlzYWxs
b3dDVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNhbGxvd0NUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUE0Rjc3MDk1NzI1MUYwMDg0QjNB
NyAvKiBBbHdheXNJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBbHdheXNJbmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwogCQk5M0I2QTBERTBBQTY0REE0MDA3NkRFMjcgLyogR2V0UHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdHIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNFMjZCQzkwOEIxNTExOTAwRjg1MjI2IC8qIHBjcmVfb3JkMnV0Zjgu
YyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gcGNy
ZV9vcmQydXRmOC5jOyBwYXRoID0gcGNyZS9wY3JlX29yZDJ1dGY4LmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKQEAgLTg5NiwxMSArOTAwLDEyIEBACiAJCTY1MTYy
RUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTY1MjI0NkE0MEM4RDdBMEUwMDdCREFGNyAvKiBIYXNoSXRlcmF0
b3JzLmggKi8sCiAJCQkJRTE5NTY3OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVuaWNvZGUgKi8sCiAJ
CQkJOTNBQTRGNzcwOTU3MjUxRjAwODRCM0E3IC8qIEFsd2F5c0lubGluZS5oICovLAorCQkJCTkz
OEM0RjY5MENBMDZCQzcwMEQ5MzEwQSAvKiBBU0NJSUNUeXBlLmggKi8sCiAJCQkJNjVFMjE3Qjgw
OEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuY3BwICovLAogCQkJCTY1RTIxN0I3MDhFN0VF
Q0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLmggKi8sCisJCQkJOTM4QzRGNkIwQ0EwNkJDRTAwRDkz
MTBBIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJCQk2NUUyMTdCOTA4RTdFRUNDMDAyM0U1RjYg
LyogRmFzdE1hbGxvYy5jcHAgKi8sCiAJCQkJNjVFMjE3QkEwOEU3RUVDQzAwMjNFNUY2IC8qIEZh
c3RNYWxsb2MuaCAqLywKIAkJCQk5MzAyMDQzQTBCNzkwNzUwMDAwQzYxMTUgLyogRmFzdE1hbGxv
Y1BDUkUuY3BwICovLApAQCAtOTA4LDYgKzkxMyw3IEBACiAJCQkJOTNCNkEwREUwQUE2NERBNDAw
NzZERTI3IC8qIEdldFB0ci5oICovLAogCQkJCTY1N0VFQkJGMDk0RTQ0NUUwMDhDOUM3QiAvKiBI
YXNoQ291bnRlZFNldC5oICovLAogCQkJCTY1REZDOTJBMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNo
RnVuY3Rpb25zLmggKi8sCisJCQkJNjUyMjQ2QTQwQzhEN0EwRTAwN0JEQUY3IC8qIEhhc2hJdGVy
YXRvcnMuaCAqLywKIAkJCQk2NURGQzkyQjA4RUExNzNBMDBGNzMwMEIgLyogSGFzaE1hcC5oICov
LAogCQkJCTY1REZDOTJDMDhFQTE3M0EwMEY3MzAwQiAvKiBIYXNoU2V0LmggKi8sCiAJCQkJNjVE
RkM5MkQwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgKi8sCkBAIC0xMjUzLDYgKzEy
NTksOCBAQAogCQkJCTVEQkQxOEIwMEM1NDAxQTcwMEMxNUVBRSAvKiBNYWxsb2Nab25lU3VwcG9y
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUyMjQ2QTUwQzhEN0EwRTAwN0JEQUY3IC8qIEhhc2hJ
dGVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1QzE4RDQ5MEM5MEU4MjYwMEU3MkY3MyAv
KiBKU1JldGFpblB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM4QzRGNkEwQ0EwNkJDNzAwRDkz
MTBBIC8qIEFTQ0lJQ1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzOEM0RjZDMENBMDZCQ0Uw
MEQ5MzEwQSAvKiBEaXNhbGxvd0NUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29u
ZmlnLmgJKHJldmlzaW9uIDI2NjM1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC04NSwzICs4NSw1IEBA
CiAjdW5kZWYgZGVsZXRlCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNlbmRpZgorCisj
aW5jbHVkZSA8d3RmL0Rpc2FsbG93Q1R5cGUuaD4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9k
YXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjY2MzUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAogLyoKLSAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTQwLDcgKzM5LDYgQEAKICNpbmNsdWRlIDxzeXMvdGltZWIuaD4KICNlbmRpZgogCi0jaW5j
bHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgog
I2luY2x1ZGUgPGxvY2FsZS5oPgpAQCAtNTQsNiArNTIsNyBAQAogI2luY2x1ZGUgIm9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJEYXRlTWF0aC5oIgogCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KIApAQCAtNjEsNiArNjAsOCBAQAogICAgICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
b3JlRm91bmRhdGlvbi5oPgogI2VuZGlmCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVz
cGFjZSBLSlMgewogCiBzdGF0aWMgZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nJik7CkBA
IC03NDIsMTIgKzc0MywxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IEtub3duWm9uZSB7CiAgICAg
eyAiUERUIiwgLTQyMCB9CiB9OwogCi1pbmxpbmUgc3RhdGljIHZvaWQgc2tpcFNwYWNlc0FuZENv
bW1lbnRzKGNvbnN0IGNoYXIgKiZzKQoraW5saW5lIHN0YXRpYyB2b2lkIHNraXBTcGFjZXNBbmRD
b21tZW50cyhjb25zdCBjaGFyKiYgcykKIHsKICAgICBpbnQgbmVzdGluZyA9IDA7CiAgICAgY2hh
ciBjaDsKICAgICB3aGlsZSAoKGNoID0gKnMpKSB7Ci0gICAgICAgIGlmICghaXNzcGFjZShjaCkp
IHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoY2gpKSB7CiAgICAgICAgICAgICBpZiAoY2gg
PT0gJygnKQogICAgICAgICAgICAgICAgIG5lc3RpbmcrKzsKICAgICAgICAgICAgIGVsc2UgaWYg
KGNoID09ICcpJyAmJiBuZXN0aW5nID4gMCkKQEAgLTc2MCwxNCArNzYxLDE0IEBAIGlubGluZSBz
dGF0aWMgdm9pZCBza2lwU3BhY2VzQW5kQ29tbWVudHMKIH0KIAogLy8gcmV0dXJucyAwLTExIChK
YW4tRGVjKTsgLTEgb24gZmFpbHVyZQotc3RhdGljIGludCBmaW5kTW9udGgoY29uc3QgY2hhciAq
bW9udGhTdHIpCitzdGF0aWMgaW50IGZpbmRNb250aChjb25zdCBjaGFyKiBtb250aFN0cikKIHsK
ICAgICBhc3NlcnQobW9udGhTdHIpOwogICAgIGNoYXIgbmVlZGxlWzRdOwogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgIGlmICghKm1vbnRoU3RyKQogICAgICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICBuZWVkbGVbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih0b2xv
d2VyKCptb250aFN0cisrKSk7CisgICAgICAgIG5lZWRsZVtpXSA9IHN0YXRpY19jYXN0PGNoYXI+
KHRvQVNDSUlMb3dlcigqbW9udGhTdHIrKykpOwogICAgIH0KICAgICBuZWVkbGVbM10gPSAnXDAn
OwogICAgIGNvbnN0IGNoYXIgKmhheXN0YWNrID0gImphbmZlYm1hcmFwcm1heWp1bmp1bGF1Z3Nl
cG9jdG5vdmRlYyI7CkBAIC04MDUsOCArODA2LDggQEAgc3RhdGljIGRvdWJsZSBwYXJzZURhdGUo
Y29uc3QgVVN0cmluZyAmZAogICAgIGxvbmcgbW9udGggPSAtMTsKICAgICBjb25zdCBjaGFyICp3
b3JkU3RhcnQgPSBkYXRlU3RyaW5nOwogICAgIC8vIENoZWNrIGNvbnRlbnRzIG9mIGZpcnN0IHdv
cmRzIGlmIG5vdCBudW1iZXIKLSAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgIWlzZGlnaXQoKmRh
dGVTdHJpbmcpKSB7Ci0gICAgICAgIGlmIChpc3NwYWNlKCpkYXRlU3RyaW5nKSB8fCAqZGF0ZVN0
cmluZyA9PSAnKCcpIHsKKyAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgIWlzQVNDSUlEaWdpdCgq
ZGF0ZVN0cmluZykpIHsKKyAgICAgICAgaWYgKGlzQVNDSUlTcGFjZSgqZGF0ZVN0cmluZykgfHwg
KmRhdGVTdHJpbmcgPT0gJygnKSB7CiAgICAgICAgICAgICBpZiAoZGF0ZVN0cmluZyAtIHdvcmRT
dGFydCA+PSAzKQogICAgICAgICAgICAgICAgIG1vbnRoID0gZmluZE1vbnRoKHdvcmRTdGFydCk7
CiAgICAgICAgICAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CkBAIC05NTUs
NyArOTU2LDcgQEAgc3RhdGljIGRvdWJsZSBwYXJzZURhdGUoY29uc3QgVVN0cmluZyAmZAogICAg
ICAgICAgICAgICAgIHJldHVybiBOYU47CiAKICAgICAgICAgICAgIC8vICc6NDAgR01UJwotICAg
ICAgICAgICAgaWYgKCpkYXRlU3RyaW5nICYmICpkYXRlU3RyaW5nICE9ICc6JyAmJiAhaXNzcGFj
ZSgqZGF0ZVN0cmluZykpCisgICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJp
bmcgIT0gJzonICYmICFpc0FTQ0lJU3BhY2UoKmRhdGVTdHJpbmcpKQogICAgICAgICAgICAgICAg
IHJldHVybiBOYU47CiAKICAgICAgICAgICAgIC8vIHNlY29uZHMgYXJlIG9wdGlvbmFsIGluIHJm
YzgyMiArIHJmYzI4MjIKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY2
MzUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDkgKzEsOCBAQAogLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQogLyoKLSAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC00MCw4ICszOSw4IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8
YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtNTgyLDcgKzU4MSw3IEBAIHN0YXRpYyBKU1Zh
bHVlKiBkZWNvZGUoRXhlY1N0YXRlKiBleGVjLCAKICAgICBVQ2hhciBjID0gKnA7CiAgICAgaWYg
KGMgPT0gJyUnKSB7CiAgICAgICBpbnQgY2hhckxlbiA9IDA7Ci0gICAgICBpZiAoayA8PSBsZW4g
LSAzICYmIGlzeGRpZ2l0KHBbMV0udWMpICYmIGlzeGRpZ2l0KHBbMl0udWMpKSB7CisgICAgICBp
ZiAoayA8PSBsZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChwWzFdLnVjKSAmJiBpc0FTQ0lJSGV4
RGlnaXQocFsyXS51YykpIHsKICAgICAgICAgY29uc3QgY2hhciBiMCA9IExleGVyOjpjb252ZXJ0
SGV4KHBbMV0udWMsIHBbMl0udWMpOwogICAgICAgICBjb25zdCBpbnQgc2VxdWVuY2VMZW4gPSBV
VEY4U2VxdWVuY2VMZW5ndGgoYjApOwogICAgICAgICBpZiAoc2VxdWVuY2VMZW4gIT0gMCAmJiBr
IDw9IGxlbiAtIHNlcXVlbmNlTGVuICogMykgewpAQCAtNTkxLDcgKzU5MCw3IEBAIHN0YXRpYyBK
U1ZhbHVlKiBkZWNvZGUoRXhlY1N0YXRlKiBleGVjLCAKICAgICAgICAgICBzZXF1ZW5jZVswXSA9
IGIwOwogICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2VxdWVuY2VMZW47ICsraSkgewog
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHEgPSBwICsgaSAqIDM7Ci0gICAgICAgICAgICBpZiAo
cVswXSA9PSAnJScgJiYgaXN4ZGlnaXQocVsxXS51YykgJiYgaXN4ZGlnaXQocVsyXS51YykpCisg
ICAgICAgICAgICBpZiAocVswXSA9PSAnJScgJiYgaXNBU0NJSUhleERpZ2l0KHFbMV0udWMpICYm
IGlzQVNDSUlIZXhEaWdpdChxWzJdLnVjKSkKICAgICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBM
ZXhlcjo6Y29udmVydEhleChxWzFdLnVjLCBxWzJdLnVjKTsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICBjaGFyTGVuID0gMDsKQEAgLTYxOSw4ICs2MTgsOCBAQCBzdGF0aWMgSlNW
YWx1ZSogZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAgIC8vIFRoZSBvbmx5IGNhc2Ug
d2hlcmUgd2UgZG9uJ3QgdXNlICJzdHJpY3QiIG1vZGUgaXMgdGhlICJ1bmVzY2FwZSIgZnVuY3Rp
b24uCiAgICAgICAgIC8vIEZvciB0aGF0LCBpdCdzIGdvb2QgdG8gc3VwcG9ydCB0aGUgd29ua3kg
IiV1IiBzeW50YXggZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBXaW5JRS4KICAgICAgICAgaWYgKGsg
PD0gbGVuIC0gNiAmJiBwWzFdID09ICd1JwotICAgICAgICAgICAgJiYgaXN4ZGlnaXQocFsyXS51
YykgJiYgaXN4ZGlnaXQocFszXS51YykKLSAgICAgICAgICAgICYmIGlzeGRpZ2l0KHBbNF0udWMp
ICYmIGlzeGRpZ2l0KHBbNV0udWMpKSB7CisgICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQo
cFsyXS51YykgJiYgaXNBU0NJSUhleERpZ2l0KHBbM10udWMpCisgICAgICAgICAgICAmJiBpc0FT
Q0lJSGV4RGlnaXQocFs0XS51YykgJiYgaXNBU0NJSUhleERpZ2l0KHBbNV0udWMpKSB7CiAgICAg
ICAgICAgY2hhckxlbiA9IDY7CiAgICAgICAgICAgdSA9IExleGVyOjpjb252ZXJ0VW5pY29kZShw
WzJdLnVjLCBwWzNdLnVjLCBwWzRdLnVjLCBwWzVdLnVjKTsKICAgICAgICAgfQpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy91c3RyaW5nLmNwcAkocmV2aXNpb24gMjY2MzUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
dXN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvLyAtKi0gYy1iYXNp
Yy1vZmZzZXQ6IDIgLSotCiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGli
cmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9u
IFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCkBAIC00Nyw4ICs0Niw4IEBACiAjaW5j
bHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLXVzaW5nIHN0ZDo6bWF4OwotdXNpbmcgc3RkOjpt
aW47Cit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIEtKUyB7CiAKQEAgLTk1NCw3ICs5NTMsNyBAQCBkb3VibGUgVVN0cmluZzo6dG9Eb3VibGUo
Ym9vbCB0b2xlcmF0ZVRyCiAgIGNvbnN0IGNoYXIgKmMgPSBhc2NpaSgpOwogCiAgIC8vIHNraXAg
bGVhZGluZyB3aGl0ZSBzcGFjZQotICB3aGlsZSAoaXNzcGFjZSgqYykpCisgIHdoaWxlIChpc0FT
Q0lJU3BhY2UoKmMpKQogICAgIGMrKzsKIAogICAvLyBlbXB0eSBzdHJpbmcgPwpAQCAtMTAwOSw3
ICsxMDA4LDcgQEAgZG91YmxlIFVTdHJpbmc6OnRvRG91YmxlKGJvb2wgdG9sZXJhdGVUcgogICB9
CiAKICAgLy8gYWxsb3cgdHJhaWxpbmcgd2hpdGUgc3BhY2UKLSAgd2hpbGUgKGlzc3BhY2UoKmMp
KQorICB3aGlsZSAoaXNBU0NJSVNwYWNlKCpjKSkKICAgICBjKys7CiAgIC8vIGRvbid0IGFsbG93
IGFueXRoaW5nIGFmdGVyIC0gdW5sZXNzIHRvbGVyYW50PXRydWUKICAgaWYgKCF0b2xlcmF0ZVRy
YWlsaW5nSnVuayAmJiAqYyAhPSAnXDAnKQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJ
Q1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCShy
ZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfQVNDSUlDVHlwZV9oCisjZGVmaW5l
IFdURl9BU0NJSUNUeXBlX2gKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBib29sIGlzQVND
SUlBbHBoYShjaGFyIGMpIHsgcmV0dXJuIChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkg
PD0gJ3onOyB9CitpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGEodW5zaWduZWQgc2hvcnQgYykgeyBy
ZXR1cm4gKGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAneic7IH0KK2lubGluZSBi
b29sIGlzQVNDSUlBbHBoYSh3Y2hhcl90IGMpIHsgcmV0dXJuIChjIHwgMHgyMCkgPj0gJ2EnICYm
IChjIHwgMHgyMCkgPD0gJ3onOyB9CisKK2lubGluZSBib29sIGlzQVNDSUlBbHBoYW51bWVyaWMo
Y2hhciBjKSB7IHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCAoYyB8IDB4MjApID49ICdh
JyAmJiAoYyB8IDB4MjApIDw9ICd6JzsgfQoraW5saW5lIGJvb2wgaXNBU0NJSUFscGhhbnVtZXJp
Yyh1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCAoYyB8
IDB4MjApID49ICdhJyAmJiAoYyB8IDB4MjApIDw9ICd6JzsgfQoraW5saW5lIGJvb2wgaXNBU0NJ
SUFscGhhbnVtZXJpYyh3Y2hhcl90IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8
IChjIHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ3onOyB9CisKK2lubGluZSBib29s
IGlzQVNDSUlEaWdpdChjaGFyIGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknOyB9Citp
bmxpbmUgYm9vbCBpc0FTQ0lJRGlnaXQodW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4gYyA+PSAn
MCcgJiYgYyA8PSAnOSc7IH0KK2lubGluZSBib29sIGlzQVNDSUlEaWdpdCh3Y2hhcl90IGMpIHsg
cmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknOyB9CisKK2lubGluZSBib29sIGlzQVNDSUlIZXhE
aWdpdChjaGFyIGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IChjIHwgMHgyMCkg
Pj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ2YnOyB9CitpbmxpbmUgYm9vbCBpc0FTQ0lJSGV4RGln
aXQodW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgKGMg
fCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAnZic7IH0KK2lubGluZSBib29sIGlzQVND
SUlIZXhEaWdpdCh3Y2hhcl90IGMpIHsgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IChj
IHwgMHgyMCkgPj0gJ2EnICYmIChjIHwgMHgyMCkgPD0gJ2YnOyB9CisKK2lubGluZSBib29sIGlz
QVNDSUlMb3dlcihjaGFyIGMpIHsgcmV0dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3onOyB9Citpbmxp
bmUgYm9vbCBpc0FTQ0lJTG93ZXIodW5zaWduZWQgc2hvcnQgYykgeyByZXR1cm4gYyA+PSAnYScg
JiYgYyA8PSAneic7IH0KK2lubGluZSBib29sIGlzQVNDSUlMb3dlcih3Y2hhcl90IGMpIHsgcmV0
dXJuIGMgPj0gJ2EnICYmIGMgPD0gJ3onOyB9CisKK2lubGluZSBib29sIGlzQVNDSUlTcGFjZShj
aGFyIGMpIHsgcmV0dXJuIGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHYnIHx8IGMg
PT0nXGYnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICcgJzsgfQoraW5saW5lIGJvb2wgaXNBU0NJSVNw
YWNlKHVuc2lnbmVkIHNob3J0IGMpIHsgcmV0dXJuIGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwg
YyA9PSAnXHYnIHx8IGMgPT0nXGYnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICcgJzsgfQoraW5saW5l
IGJvb2wgaXNBU0NJSVNwYWNlKHdjaGFyX3QgYykgeyByZXR1cm4gYyA9PSAnXHQnIHx8IGMgPT0g
J1xuJyB8fCBjID09ICdcdicgfHwgYyA9PSdcZicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJyAnOyB9
CisKK2lubGluZSBjaGFyIHRvQVNDSUlMb3dlcihjaGFyIGMpIHsgcmV0dXJuIGMgfCAoKGMgPj0g
J0EnICYmIGMgPD0gJ1onKSA8PCA1KTsgfQoraW5saW5lIHVuc2lnbmVkIHNob3J0IHRvQVNDSUlM
b3dlcih1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBjIHwgKChjID49ICdBJyAmJiBjIDw9ICda
JykgPDwgNSk7IH0KK2lubGluZSB3Y2hhcl90IHRvQVNDSUlMb3dlcih3Y2hhcl90IGMpIHsgcmV0
dXJuIGMgfCAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSA8PCA1KTsgfQorCitpbmxpbmUgY2hhciB0
b0FTQ0lJVXBwZXIoY2hhciBjKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPihjICYgfigoYyA+
PSAnYScgJiYgYyA8PSAneicpIDw8IDUpKTsgfQoraW5saW5lIHVuc2lnbmVkIHNob3J0IHRvQVND
SUlVcHBlcih1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oYyAmIH4oKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSA8PCA1KSk7IH0KK2lubGluZSB3Y2hh
cl90IHRvQVNDSUlVcHBlcih3Y2hhcl90IGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHdjaGFyX3Q+
KGMgJiB+KChjID49ICdhJyAmJiBjIDw9ICd6JykgPDwgNSkpOyB9CisKK30KKworI2VuZGlmCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBKYXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3d0Zi9EaXNhbGxvd0NUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3Rm
L0Rpc2FsbG93Q1R5cGUuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9EaXNh
bGxvd0NUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RG
X0Rpc2FsbG93Q1R5cGVfaAorI2RlZmluZSBXVEZfRGlzYWxsb3dDVHlwZV9oCisKKyNpbmNsdWRl
IDxjdHlwZS5oPgorCisjdW5kZWYgaXNhbG51bQorI3VuZGVmIGlzYWxwaGEKKyN1bmRlZiBpc2Fz
Y2lpCisjdW5kZWYgaXNibGFuaworI3VuZGVmIGlzY250cmwKKyN1bmRlZiBpc2RpZ2l0CisjdW5k
ZWYgaXNncmFwaAorI3VuZGVmIGlzbG93ZXIKKyN1bmRlZiBpc3ByaW50CisjdW5kZWYgaXNwdW5j
dAorI3VuZGVmIGlzc3BhY2UKKyN1bmRlZiBpc3VwcGVyCisjdW5kZWYgaXN4ZGlnaXQKKyN1bmRl
ZiB0b2FzY2lpCisjdW5kZWYgdG9sb3dlcgorI3VuZGVmIHRvdXBwZXIKKworI2RlZmluZSBpc2Fs
bnVtIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVhZF9vZl9jdHlwZQorI2RlZmluZSBp
c2FscGhhIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVhZF9vZl9jdHlwZQorI2RlZmlu
ZSBpc2FzY2lpIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVhZF9vZl9jdHlwZQorI2Rl
ZmluZSBpc2JsYW5rIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVhZF9vZl9jdHlwZQor
I2RlZmluZSBpc2NudHJsIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVhZF9vZl9jdHlw
ZQorI2RlZmluZSBpc2RpZ2l0IFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVhZF9vZl9j
dHlwZQorI2RlZmluZSBpc2dyYXBoIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVhZF9v
Zl9jdHlwZQorI2RlZmluZSBpc2xvd2VyIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5zdGVh
ZF9vZl9jdHlwZQorI2RlZmluZSBpc3ByaW50IFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVfaW5z
dGVhZF9vZl9jdHlwZQorI2RlZmluZSBpc3B1bmN0IFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5cGVf
aW5zdGVhZF9vZl9jdHlwZQorI2RlZmluZSBpc3NwYWNlIFdURl9wbGVhc2VfdXNlX0FTQ0lJQ1R5
cGVfaW5zdGVhZF9vZl9jdHlwZQorI2RlZmluZSBpc3VwcGVyIFdURl9wbGVhc2VfdXNlX0FTQ0lJ
Q1R5cGVfaW5zdGVhZF9vZl9jdHlwZQorI2RlZmluZSBpc3hkaWdpdCBXVEZfcGxlYXNlX3VzZV9B
U0NJSUNUeXBlX2luc3RlYWRfb2ZfY3R5cGUKKyNkZWZpbmUgdG9hc2NpaSBXVEZfcGxlYXNlX3Vz
ZV9BU0NJSUNUeXBlX2luc3RlYWRfb2ZfY3R5cGUKKyNkZWZpbmUgdG9sb3dlciBXVEZfcGxlYXNl
X3VzZV9BU0NJSUNUeXBlX2luc3RlYWRfb2ZfY3R5cGUKKyNkZWZpbmUgdG91cHBlciBXVEZfcGxl
YXNlX3VzZV9BU0NJSUNUeXBlX2luc3RlYWRfb2ZfY3R5cGUKKworI2VuZGlmCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBKYXZhU2NyaXB0Q29yZS93dGYvRGlzYWxsb3dDVHlwZS5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjYzOCkKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAKKzIwMDctMTAt
MTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU1MTkKKyAgICAgICAgICBlbGltaW5hdGUgdXNlIG9mIDxjdHlwZS5oPiBm
b3IgcHJvY2Vzc2luZyBBU0NJSQorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0FT
Q0lJQ1R5cGUuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Rpc2Fs
bG93Q1R5cGUuaDogQWRkZWQuCisKKyAgICAgICAgKiBXZWJDb3JlUHJlZml4Lmg6IEdldCByaWQg
b2YgaW5jbHVzaW9uIG9mIDxjdHlwZS5oPi4KKyAgICAgICAgKiBjb25maWcuaDogSW5jbHVkZSBE
aXNhbGxvd0NUeXBlLmguCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhcnNlU3RyaW5nOjpsb3dlcik6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQ1NTVG9rZW5pemVySWRlbnRpZmllcik6
CisgICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cHJvcGVydHlJRCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzdHJpcExlYWRpbmdXaGl0ZVNwYWNlKToKKyAgICAgICAgKiBodG1s
L0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGFnTWF0Y2gpOgorICAgICAg
ICAqIGxvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VPbmVGVFBMaW5lKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckhlYWRDaGFy
c2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9EZXByZWNhdGVkQ1N0cmluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEZXByZWNhdGVkQ1N0cmluZzo6bG93ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGVwcmVjYXRlZENTdHJpbmc6OnVwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRD
U3RyaW5nOjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRDU3RyaW5nOjpjb250
YWlucyk6CisgICAgICAgICogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjplcXVhbENhc2VJbnNlbnNpdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0No
YXJhY3RlckFsbG93ZWRJbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFN0cmlu
Zzo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkU3RyaW5nOjpjb250YWlucyk6
CisgICAgICAgIChXZWJDb3JlOjp0b0ludGVncmFsVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
RGVwcmVjYXRlZFN0cmluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZENoYXI6Omlz
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZENoYXI6Omxvd2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRDaGFyOjp1cHBlcik6CisgICAgICAgICogcGxhdGZvcm0v
S1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXJzZSk6CisgICAgICAgICogcGxh
dGZvcm0vU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aXNMb3dlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdJbXBsOjpsb3dlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmaW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2RpbmdOYW1lSGFzaDo6ZXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nTmFtZUhhc2g6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6YXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0tleUV2ZW50TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6a2V5SWRl
bnRpZmllckZvcktleUV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6a2V5SWRlbnRpZmllckZvcldpbmRvd3NLZXlDb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmlzQVNDSUlQcmludGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBXbmRQcm9jKToK
KyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OndpZHRoRnJv
bUNhY2hlKToKKyAgICAgICAgVXNlIEFTQ0lJQ1R5cGUuaCBmdW5jdGlvbnMgaW5zdGVhZCBvZiBj
dHlwZS5oIG9uZXMuCisKIDIwMDctMTAtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1pdHouCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVQcmVm
aXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVQcmVmaXguaAkocmV2aXNpb24gMjY2
MzcpCisrKyBXZWJDb3JlL1dlYkNvcmVQcmVmaXguaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyAr
NTksNiBAQAogCiAjZW5kaWYgLy8gZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzIpCiAK
LSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGZj
bnRsLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgpAQCAtODQsMjQgKzgzLDYgQEAKICNpbmNsdWRl
IDxjc3RkZGVmPgogI2luY2x1ZGUgPG5ldz4KIAotLyogV29yayBhcm91bmQgYnVnIDM1NTMzMDkg
YnkgcmUtaW5jbHVkaW5nIDxjdHlwZS5oPi4gKi8KLSNpbmNsdWRlIDxjY3R5cGU+Ci0jaWYgZGVm
aW5lZChfX0FQUExFX18pCi0jZGVmaW5lIGlzYWxudW0oYykgICAgICBfX2lzdHlwZSgoYyksIChf
Q1RZUEVfQXxfQ1RZUEVfRCkpCi0jZGVmaW5lIGlzYWxwaGEoYykgICAgICBfX2lzdHlwZSgoYyks
IF9DVFlQRV9BKQotI2RlZmluZSBpc2NudHJsKGMpICAgICAgX19pc3R5cGUoKGMpLCBfQ1RZUEVf
QykKLSNkZWZpbmUgaXNkaWdpdChjKSAgICAgIF9faXNjdHlwZSgoYyksIF9DVFlQRV9EKSAgICAg
ICAgLyogQU5TSSAtLSBsb2NhbGUgaW5kZXBlbmRlbnQgKi8KLSNkZWZpbmUgaXNncmFwaChjKSAg
ICAgIF9faXN0eXBlKChjKSwgX0NUWVBFX0cpCi0jZGVmaW5lIGlzbG93ZXIoYykgICAgICBfX2lz
dHlwZSgoYyksIF9DVFlQRV9MKQotI2RlZmluZSBpc3ByaW50KGMpICAgICAgX19pc3R5cGUoKGMp
LCBfQ1RZUEVfUikKLSNkZWZpbmUgaXNwdW5jdChjKSAgICAgIF9faXN0eXBlKChjKSwgX0NUWVBF
X1ApCi0jZGVmaW5lIGlzc3BhY2UoYykgICAgICBfX2lzdHlwZSgoYyksIF9DVFlQRV9TKQotI2Rl
ZmluZSBpc3VwcGVyKGMpICAgICAgX19pc3R5cGUoKGMpLCBfQ1RZUEVfVSkKLSNkZWZpbmUgaXN4
ZGlnaXQoYykgICAgIF9faXNjdHlwZSgoYyksIF9DVFlQRV9YKSAgICAgICAgLyogQU5TSSAtLSBs
b2NhbGUgaW5kZXBlbmRlbnQgKi8KLSNkZWZpbmUgdG9sb3dlcihjKSAgICAgIF9fdG9sb3dlcihj
KQotI2RlZmluZSB0b3VwcGVyKGMpICAgICAgX190b3VwcGVyKGMpCi0jZW5kaWYKLQogI2VuZGlm
CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KSW5kZXg6IFdlYkNvcmUvY29uZmlnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jb25maWcuaAkocmV2aXNpb24gMjY2MzcpCisrKyBXZWJDb3JlL2Nv
bmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjZGVmaW5lIEhBVkVfRlVO
Q19VU0xFRVAgMQogI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwogCi0KICNpZiBQTEFURk9STShXSU5f
T1MpCiAKICNpZm5kZWYgX1dJTjMyX1dJTk5UCkBAIC02Nyw2ICs2Niw4IEBACiAKICNlbmRpZgog
CisjaW5jbHVkZSA8d3RmL0Rpc2FsbG93Q1R5cGUuaD4KKwogI2lmICFDT01QSUxFUihNU1ZDKSAv
LyBjYW4ndCBnZXQgdGhpcyB0byBjb21waWxlIG9uIFZpc3VhbCBDKysgeWV0CiAjZGVmaW5lIEFW
T0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMgMQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9BU0NJSUNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy93dGYvQVNDSUlDVHlwZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvQVNDSUlDVHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBA
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVNDSUlDVHlwZS5oPgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQVNDSUlDVHlwZS5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvd3RmL0Rpc2FsbG93Q1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3d0Zi9EaXNhbGxvd0NUeXBlLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EaXNhbGxvd0NUeXBlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EaXNhbGxvd0NUeXBlLmg+CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EaXNhbGxv
d0NUeXBlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCShyZXZpc2lvbiAyNjYzNykKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFBhcnNlU3RyaW5nOjps
b3dlcigpCiAgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gVW5pY29kZTo6dG9Mb3dlcihjaGFy
YWN0ZXJzW2ldKTsKICAgICBlbHNlCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspCi0gICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gdG9sb3dlcihjaGFyYWN0ZXJzW2ld
KTsKKyAgICAgICAgICAgIGNoYXJhY3RlcnNbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyc1tp
XSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBzdWZmaXgpCkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjYzNykKKysrIFdlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKLS8qKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
Ky8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzI5LDkgQEAKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCi0jaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDEzICs0
NiwxMyBAQCBzdGF0aWMgYm9vbCBpc0NTU1Rva2VuaXplcklkZW50aWZpZXIoY29uCiAgICAgICAg
ICsrcDsKIAogICAgIC8vIHtubXN0YXJ0fQotICAgIGlmIChwID09IGVuZCB8fCAhKHBbMF0gPT0g
J18nIHx8IHBbMF0gPj0gMTI4IHx8IGlzYWxwaGEocFswXSkpKQorICAgIGlmIChwID09IGVuZCB8
fCAhKHBbMF0gPT0gJ18nIHx8IHBbMF0gPj0gMTI4IHx8IGlzQVNDSUlBbHBoYShwWzBdKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICArK3A7CiAKICAgICAvLyB7bm1jaGFyfSoKICAgICBm
b3IgKDsgcCAhPSBlbmQ7ICsrcCkgewotICAgICAgICBpZiAoIShwWzBdID09ICdfJyB8fCBwWzBd
ID09ICctJyB8fCBwWzBdID49IDEyOCB8fCBpc2FsbnVtKHBbMF0pKSkKKyAgICAgICAgaWYgKCEo
cFswXSA9PSAnXycgfHwgcFswXSA9PSAnLScgfHwgcFswXSA+PSAxMjggfHwgaXNBU0NJSUFscGhh
bnVtZXJpYyhwWzBdKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjY2MzcpCisrKyBXZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsx
LDYgQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlv
biBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNyArMjYsOSBAQAog
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5j
bHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgotI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBpbnQgcHJvcGVydHlJRChjb25z
dCBTdHJpbmcmIHMpCiAgICAgICAgIFVDaGFyIGMgPSBzW2ldOwogICAgICAgICBpZiAoYyA9PSAw
IHx8IGMgPj0gMHg3RikKICAgICAgICAgICAgIHJldHVybiAwOyAvLyBpbGxlZ2FsIGNoYXJhY3Rl
cgotICAgICAgICBidWZmZXJbaV0gPSB0b2xvd2VyKGMpOworICAgICAgICBidWZmZXJbaV0gPSB0
b0FTQ0lJTG93ZXIoYyk7CiAgICAgfQogCiAgICAgcmV0dXJuIGdldFByb3BlcnR5SUQoYnVmZmVy
LCBsZW4pOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjYz
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwNiw3ICs5MDYsNyBAQCBzdGF0aWMgU3RyaW5nIHN0cmlwTGVhZGluZ1doaXRlU3BhY2Uo
Y29uCiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAg
ICBpZiAoc3RyaW5nW2ldICE9IG5vQnJlYWtTcGFjZSAmJgotICAgICAgICAgICAgKHN0cmluZ1tp
XSA8PSAweDdGID8gIWlzc3BhY2Uoc3RyaW5nW2ldKSA6IChkaXJlY3Rpb24oc3RyaW5nW2ldKSAh
PSBXaGl0ZVNwYWNlTmV1dHJhbCkpKQorICAgICAgICAgICAgKHN0cmluZ1tpXSA8PSAweDdGID8g
IWlzQVNDSUlTcGFjZShzdHJpbmdbaV0pIDogKGRpcmVjdGlvbihzdHJpbmdbaV0pICE9IFdoaXRl
U3BhY2VOZXV0cmFsKSkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgIHJldHVybiBzdHJpbmcu
c3Vic3RyaW5nKGksIGxlbmd0aCAtIGkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2
aXNpb24gMjY2MzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTMgKzEsMTEgQEAKIC8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBsaWJyYXJpZXMKLQogICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1q
b25lc0BrZGUub3JnKQogICAgICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0Br
ZGUub3JnKQogICAgICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtk
ZS5vcmcpCiAgICAgICAgICAgICAgIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgICAgICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICAgICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgorICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YgKGFwQG55cG9wLmNvbSkKIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQ2LDYgKzQ0LDcgQEAKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJranNf
cHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCiAjaW5jbHVkZSAiSFRNTEVu
dGl0eU5hbWVzLmMiCiAKQEAgLTYxLDYgKzYwLDcgQEAKICNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xMTksNyArMTE5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRhZ01hdGNoKGNvbnN0IGNoYXIq
IAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgdW5zaWduZWQgY2hhciBjMSA9IHMxW2ldOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHVjMSA9
IHRvdXBwZXIoYzEpOworICAgICAgICB1bnNpZ25lZCBjaGFyIHVjMSA9IHRvQVNDSUlVcHBlcihz
dGF0aWNfY2FzdDxjaGFyPihjMSkpOwogICAgICAgICBVQ2hhciBjMiA9IHMyW2ldOwogICAgICAg
ICBpZiAoYzEgIT0gYzIgJiYgdWMxICE9IGMyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5UGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNjYzNykK
KysrIFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDkgQEAKICNpZiBFTkFCTEUoRlRQRElSKQogI2luY2x1ZGUgIkZUUERpcmVj
dG9yeVBhcnNlci5oIgogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMTI3LDkgKzEyOSw5IEBAIEZUUEVudHJ5VHlwZSBwYXJzZU9uZUZUUExp
bmUoY29uc3QgY2hhcioKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gRlRQRmlsZUVudHJ5OyAv
KiBpdHMgYSBmaWxlICovCiAgICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ20nKQogICAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChpc2RpZ2l0KGxpbmVbcG9zXSkpCisgICAgICAgICAgICBpZiAo
aXNBU0NJSURpZ2l0KGxpbmVbcG9zXSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHdo
aWxlIChwb3MgPCBsaW5lbGVuICYmIGlzZGlnaXQobGluZVtwb3NdKSkKKyAgICAgICAgICAgICAg
d2hpbGUgKHBvcyA8IGxpbmVsZW4gJiYgaXNBU0NJSURpZ2l0KGxpbmVbcG9zXSkpCiAgICAgICAg
ICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgIGlmIChwb3MgPCBsaW5lbGVuICYmIGxpbmVb
cG9zXSA9PSAnLCcpCiAgICAgICAgICAgICAgIHsKQEAgLTE0NSwxNSArMTQ3LDE1IEBAIEZUUEVu
dHJ5VHlwZSBwYXJzZU9uZUZUUExpbmUoY29uc3QgY2hhcioKICAgICAgICAgICB9CiAgICAgICAg
ICAgZWxzZSBpZiAoKnAgPT0gJ3MnKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc2Rp
Z2l0KGxpbmVbcG9zXSkpCisgICAgICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KGxpbmVbcG9zXSkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsaW5lbGVuICYmIGlz
ZGlnaXQobGluZVtwb3NdKSkKKyAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGxpbmVsZW4gJiYg
aXNBU0NJSURpZ2l0KGxpbmVbcG9zXSkpCiAgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAg
ICAgICAgIGlmIChwb3MgPCBsaW5lbGVuICYmIGxpbmVbcG9zXSA9PSAnLCcpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0LmZpbGVTaXplID0gU3RyaW5nKHAgKyAxLCAmbGluZVtwb3NdIC0gcCArIDEp
OwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmIChpc2FscGhh
KCpwKSkgLyogJ2knLyd1cCcgb3IgdW5rbm93biAiZmFjdCIgKHByb3BlcnR5KSAqLworICAgICAg
ICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYSgqcCkpIC8qICdpJy8ndXAnIG9yIHVua25vd24gImZh
Y3QiIChwcm9wZXJ0eSkgKi8KICAgICAgICAgICB7CiAgICAgICAgICAgICB3aGlsZSAocG9zIDwg
bGluZWxlbiAmJiAqKytwICE9ICcsJykKICAgICAgICAgICAgICAgcG9zKys7CkBAIC0yMzEsOSAr
MjMzLDkgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAocFtw
b3NdICE9ICcuJyAmJiBwW3Bvc10gIT0gJ34nICYmIAotICAgICAgICAgICAgICAgICAgICAgIWlz
ZGlnaXQocFtwb3NdKSAmJiAhaXNhbHBoYShwW3Bvc10pKQorICAgICAgICAgICAgICAgICAgICAg
IWlzQVNDSUlEaWdpdChwW3Bvc10pICYmICFpc0FTQ0lJQWxwaGEocFtwb3NdKSkKICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc2FscGhhKHBbcG9zXSkgJiYgcFtw
b3NdICE9IHRvdXBwZXIocFtwb3NdKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBo
YShwW3Bvc10pICYmIHBbcG9zXSAhPSB0b0FTQ0lJVXBwZXIocFtwb3NdKSkKICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICAgIGlmIChwb3MgPiAwKQpAQCAtMjQ5LDkg
KzI1MSw5IEBAIEZUUEVudHJ5VHlwZSBwYXJzZU9uZUZUUExpbmUoY29uc3QgY2hhcioKICAgICAg
ICAgICB7CiAgICAgICAgICAgICBwb3MtLTsKICAgICAgICAgICAgIGlmIChwW3Bvc10gIT0gJyQn
ICYmIHBbcG9zXSAhPSAnXycgJiYgcFtwb3NdICE9ICctJyAmJgotICAgICAgICAgICAgICAgIHBb
cG9zXSAhPSAnficgJiYgIWlzZGlnaXQocFtwb3NdKSAmJiAhaXNhbHBoYShwW3Bvc10pKQorICAg
ICAgICAgICAgICAgIHBbcG9zXSAhPSAnficgJiYgIWlzQVNDSUlEaWdpdChwW3Bvc10pICYmICFp
c0FTQ0lJQWxwaGEocFtwb3NdKSkKICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBl
bHNlIGlmIChpc2FscGhhKHBbcG9zXSkgJiYgcFtwb3NdICE9IHRvdXBwZXIocFtwb3NdKSkKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYShwW3Bvc10pICYmIHBbcG9zXSAhPSB0b0FT
Q0lJVXBwZXIocFtwb3NdKSkKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAg
ICAgICAgIGlmIChwb3MgPT0gMCkKQEAgLTI4Nyw5ICsyODksOSBAQCBGVFBFbnRyeVR5cGUgcGFy
c2VPbmVGVFBMaW5lKGNvbnN0IGNoYXIqCiAgICAgICAgICAoKHRva2xlblszXT09MTAgfHwgdG9r
bGVuWzNdPT0xMSApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAodG9rZW5zWzNdW3Rva2xl
blszXS0zXSkgPT0gJy4nICkKICAgICAgICAgKSAmJiAgLyogdGltZSBpbiBbSF1IOk1NWzpTU1su
Q0NdXSBmb3JtYXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZGln
aXQoKnRva2Vuc1sxXSkgJiYgLyogc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNkaWdpdCgqdG9rZW5zWzJdKSAmJiAvKiBkYXRlICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc2RpZ2l0KCp0b2tlbnNbM10pICAgIC8qIHRpbWUgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQVNDSUlEaWdpdCgqdG9rZW5z
WzFdKSAmJiAvKiBzaXplICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c0FTQ0lJRGlnaXQoKnRva2Vuc1syXSkgJiYgLyogZGF0ZSAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXNBU0NJSURpZ2l0KCp0b2tlbnNbM10pICAgIC8qIHRpbWUgKi8K
ICAgICAgICAgICAgICAgICApCiAgICAgICAgIHsKICAgICAgICAgICBsc3R5bGUgPSAnVic7CkBA
IC0zMjYsNyArMzI4LDcgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFy
KgogICAgICAgICAgICAgd2hpbGUgKGxzdHlsZSAmJiBwb3MgPCB0b2tsZW5bMF0gJiYgKnAgIT0g
J10nKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAoKnAgIT0gJyQnICYmICpwICE9
ICcuJyAmJiAqcCAhPSAnXycgJiYgKnAgIT0gJy0nICYmCi0gICAgICAgICAgICAgICAgICAqcCAh
PSAnficgJiYgIWlzZGlnaXQoKnApICYmICFpc2FscGhhKCpwKSkgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgKnAgIT0gJ34nICYmICFpc0FTQ0lJRGlnaXQoKnApICYmICFpc0FTQ0lJ
QWxwaGEoKnApKSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbHN0eWxlID0gMDsKICAg
ICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgIHArKzsKQEAgLTM0MSw5ICszNDMsOSBA
QCBGVFBFbnRyeVR5cGUgcGFyc2VPbmVGVFBMaW5lKGNvbnN0IGNoYXIqCiAgICAgICAgICAgd2hp
bGUgKGxzdHlsZSAmJiBwb3MgPCB0b2tsZW5bMF0gJiYgKnAgIT0gJzsnKQogICAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICgqcCAhPSAnJCcgJiYgKnAgIT0gJy4nICYmICpwICE9ICdfJyAmJiAq
cCAhPSAnLScgJiYKLSAgICAgICAgICAgICAgICAqcCAhPSAnficgJiYgIWlzZGlnaXQoKnApICYm
ICFpc2FscGhhKCpwKSkKKyAgICAgICAgICAgICAgICAqcCAhPSAnficgJiYgIWlzQVNDSUlEaWdp
dCgqcCkgJiYgIWlzQVNDSUlBbHBoYSgqcCkpCiAgICAgICAgICAgICAgIGxzdHlsZSA9IDA7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChpc2FscGhhKCpwKSAmJiAqcCAhPSB0b3VwcGVyKCpwKSkKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYSgqcCkgJiYgKnAgIT0gdG9BU0NJSVVwcGVy
KCpwKSkKICAgICAgICAgICAgICAgbHN0eWxlID0gMDsKICAgICAgICAgICAgIHArKzsKICAgICAg
ICAgICAgIHBvcysrOwpAQCAtMzU0LDcgKzM1Niw3IEBAIEZUUEVudHJ5VHlwZSBwYXJzZU9uZUZU
UExpbmUoY29uc3QgY2hhcioKICAgICAgICAgICAgICAgbHN0eWxlID0gMDsKICAgICAgICAgICAg
IGZvciAocG9zKys7bHN0eWxlICYmIHBvcyA8IHRva2xlblswXTtwb3MrKykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KHRva2Vuc1swXVtwb3NdKSkKKyAgICAgICAg
ICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQodG9rZW5zWzBdW3Bvc10pKQogICAgICAgICAgICAgICAg
IGxzdHlsZSA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQpAQCAtMzc3LDExICszNzks
MTEgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogICAgICAgICAg
ICAgc3RhdGUuY2FycnlCdWZmZXJMZW5ndGggPSBwb3M7CiAgICAgICAgICAgICByZXR1cm4gRlRQ
SnVua0VudHJ5OyAvKiB0ZWxsIGNhbGxlciB0byB0cmVhdCBhcyBqdW5rICovCiAgICAgICAgICAg
fQotICAgICAgICAgIGVsc2UgaWYgKGlzZGlnaXQoKnRva2Vuc1sxXSkpIC8qIG5vdCBuby1wcml2
cyBtZXNzYWdlICovCisgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSURpZ2l0KCp0b2tlbnNbMV0p
KSAvKiBub3Qgbm8tcHJpdnMgbWVzc2FnZSAqLwogICAgICAgICAgIHsKICAgICAgICAgICAgIGZv
ciAocG9zID0gMDsgbHN0eWxlICYmIHBvcyA8ICh0b2tsZW5bMV0pOyBwb3MrKykKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KCh0b2tlbnNbMV1bcG9zXSkpICYmICh0
b2tlbnNbMV1bcG9zXSkgIT0gJy8nKQorICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgo
dG9rZW5zWzFdW3Bvc10pKSAmJiAodG9rZW5zWzFdW3Bvc10pICE9ICcvJykKICAgICAgICAgICAg
ICAgICBsc3R5bGUgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGxzdHlsZSAm
JiBudW10b2tzID4gNCkgLyogTXVsdGluZXQgb3IgVUNYIGJ1dCBub3QgQ01VICovCkBAIC00MDIs
NyArNDA0LDcgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogICAg
ICAgICBzdGF0ZS5wYXJzZWRPbmUgPSB0cnVlOwogICAgICAgICBzdGF0ZS5saXN0U3R5bGUgPSBs
c3R5bGU7CiAKLSAgICAgICAgaWYgKGlzZGlnaXQoKnRva2Vuc1sxXSkpICAvKiBub3QgcGVybWlz
c2lvbiBkZW5pZWQgZXRjICovCisgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoKnRva2Vuc1sxXSkp
ICAvKiBub3QgcGVybWlzc2lvbiBkZW5pZWQgZXRjICovCiAgICAgICAgIHsKICAgICAgICAgICAv
KiBzdHJpcCBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lICovCiAgICAgICAgICAgaWYgKCp0b2tlbnNb
MF0gPT0gJ1snKSAvKiBDTVUgc2VydmVyICovCkBAIC00OTMsOCArNDk1LDggQEAgRlRQRW50cnlU
eXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogICAgICAgICAgIGlmICgqcCA9PSAnLScp
CiAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgdGJ1ZlswXSA9IHBbMF07Ci0gICAgICAgICAg
dGJ1ZlsxXSA9IHRvbG93ZXIocFsxXSk7Ci0gICAgICAgICAgdGJ1ZlsyXSA9IHRvbG93ZXIocFsy
XSk7CisgICAgICAgICAgdGJ1ZlsxXSA9IHRvQVNDSUlMb3dlcihwWzFdKTsKKyAgICAgICAgICB0
YnVmWzJdID0gdG9BU0NJSUxvd2VyKHBbMl0pOwogICAgICAgICAgIG1vbnRoX251bSA9IDA7CiAg
ICAgICAgICAgZm9yIChwb3MgPSAwOyBwb3MgPCAoMTIqMyk7IHBvcys9MykKICAgICAgICAgICB7
CkBAIC01MjAsNyArNTIyLDcgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBj
aGFyKgogICAgICAgCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50eXBlOwogCi0gICAgICAgIH0g
LyogaWYgKGlzZGlnaXQoKnRva2Vuc1sxXSkpICovCisgICAgICAgIH0gLyogaWYgKGlzQVNDSUlE
aWdpdCgqdG9rZW5zWzFdKSkgKi8KIAogICAgICAgICByZXR1cm4gRlRQSnVua0VudHJ5OyAvKiBq
dW5rICovCiAKQEAgLTU3Nyw5ICs1NzksOSBAQCBGVFBFbnRyeVR5cGUgcGFyc2VPbmVGVFBMaW5l
KGNvbnN0IGNoYXIqCiAgICAgICAgICAgICAgICAgaWYgKCAoKnRva2Vuc1twb3MrMV0gPT0gJy0n
ICYmCiAgICAgICAgICAgICAgICAgICAgICAgKnRva2Vuc1twb3MrMl0gPT0gJy0nICYmCiAgICAg
ICAgICAgICAgICAgICAgICAgKnRva2Vuc1twb3MrM10gPT0gJy0nKSAgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAoaXNkaWdpdCgqdG9rZW5zW3BvcysxXSkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgaXNkaWdpdCgqdG9rZW5zW3BvcysyXSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
aXNkaWdpdCgqdG9rZW5zW3BvcyszXSkpICkKKyAgICAgICAgICAgICAgICAgICAgICAoaXNBU0NJ
SURpZ2l0KCp0b2tlbnNbcG9zKzFdKSAmJgorICAgICAgICAgICAgICAgICAgICAgICBpc0FTQ0lJ
RGlnaXQoKnRva2Vuc1twb3MrMl0pICYmCisgICAgICAgICAgICAgICAgICAgICAgIGlzQVNDSUlE
aWdpdCgqdG9rZW5zW3BvcyszXSkpICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICBsc3R5bGUgPSAnQyc7CiAgICAgICAgICAgICAgICAgICB0b2ttYXJrZXIgPSBwb3M7CkBA
IC01OTUsNyArNTk3LDcgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFy
KgogICAgICAgewogICAgICAgICBmb3IgKHBvcyA9IDAsIHAgPSB0b2tlbnNbMF07IGxzdHlsZSAm
JiBwb3MgPCB0b2tsZW5bMF07IHBvcysrLCBwKyspCiAgICAgICAgIHsgIAotICAgICAgICAgIGlm
IChpc2FscGhhKCpwKSAmJiB0b3VwcGVyKCpwKSAhPSAqcCkKKyAgICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhKCpwKSAmJiB0b0FTQ0lJTG93ZXIoKnApICE9ICpwKQogICAgICAgICAgICAgbHN0eWxl
ID0gMDsKICAgICAgICAgfSAKICAgICAgICAgZm9yIChwb3MgPSB0b2ttYXJrZXIrMTsgcG9zIDw9
IHRva21hcmtlciszOyBwb3MrKykKQEAgLTYwNCw3ICs2MDYsNyBAQCBGVFBFbnRyeVR5cGUgcGFy
c2VPbmVGVFBMaW5lKGNvbnN0IGNoYXIqCiAgICAgICAgICAgewogICAgICAgICAgICAgZm9yIChw
ID0gdG9rZW5zW3Bvc107IGxzdHlsZSAmJiBwPCh0b2tlbnNbcG9zXSt0b2tsZW5bcG9zXSk7IHAr
KykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KCpwKSkKKyAgICAg
ICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnApKQogICAgICAgICAgICAgICAgIGxzdHlsZSA9
IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQpAQCAtNjI1LDcgKzYyNyw3IEBAIEZUUEVu
dHJ5VHlwZSBwYXJzZU9uZUZUUExpbmUoY29uc3QgY2hhcioKICAgICAgICAgICAgIGVsc2UgaWYg
KHBvcyAhPSAyICYmIHBvcyAhPSA1KQogICAgICAgICAgICAgICBsc3R5bGUgPSAwOwogICAgICAg
ICAgIH0KLSAgICAgICAgICBlbHNlIGlmICgqcCAhPSAnLScgJiYgIWlzZGlnaXQoKnApKQorICAg
ICAgICAgIGVsc2UgaWYgKCpwICE9ICctJyAmJiAhaXNBU0NJSURpZ2l0KCpwKSkKICAgICAgICAg
ICAgIGxzdHlsZSA9IDA7CiAgICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJy0nICYmIHBvcyAhPSA0
ICYmIHBvcyAhPSA3KQogICAgICAgICAgICAgbHN0eWxlID0gMDsKQEAgLTYzMyw3ICs2MzUsNyBA
QCBGVFBFbnRyeVR5cGUgcGFyc2VPbmVGVFBMaW5lKGNvbnN0IGNoYXIqCiAgICAgICAgIGZvciAo
cG9zID0gMCwgcCA9IHRva2Vuc1t0b2ttYXJrZXIrNV07IAogICAgICAgICAgICAgIGxzdHlsZSAm
JiBwb3MgPCB0b2tsZW5bdG9rbWFya2VyKzVdOyBwb3MrKywgcCsrKQogICAgICAgICB7Ci0gICAg
ICAgICAgaWYgKCpwICE9ICc6JyAmJiAhaXNkaWdpdCgqcCkpCisgICAgICAgICAgaWYgKCpwICE9
ICc6JyAmJiAhaXNBU0NJSURpZ2l0KCpwKSkKICAgICAgICAgICAgIGxzdHlsZSA9IDA7CiAgICAg
ICAgICAgZWxzZSBpZiAoKnAgPT0gJzonICYmIHBvcyAhPSAodG9rbGVuW3Rva21hcmtlcis1XS0z
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwb3MgIT0gKHRva2xlblt0b2ttYXJr
ZXIrNV0tNikpCkBAIC03MjAsMTYgKzcyMiwxNiBAQCBGVFBFbnRyeVR5cGUgcGFyc2VPbmVGVFBM
aW5lKGNvbnN0IGNoYXIqCiAgICAgICAgKiAiMDctMTQtMDAgIDAxOjM4UE0gICAgICAgICAgICAg
IDIyNTA1NDAgVmFsZW50aW5lb2ZmcHJhbmstSGlSZXMuanBnIgogICAgICAgKi8KICAgICAgIGlm
ICgobnVtdG9rcyA+PSA0KSAmJiB0b2tsZW5bMF0gPT0gOCAmJiB0b2tsZW5bMV0gPT0gNyAmJiAK
LSAgICAgICAgICAoKnRva2Vuc1syXSA9PSAnPCcgfHwgaXNkaWdpdCgqdG9rZW5zWzJdKSkgKQor
ICAgICAgICAgICgqdG9rZW5zWzJdID09ICc8JyB8fCBpc0FTQ0lJRGlnaXQoKnRva2Vuc1syXSkp
ICkKICAgICAgIHsKICAgICAgICAgcCA9IHRva2Vuc1swXTsKLSAgICAgICAgaWYgKCBpc2RpZ2l0
KHBbMF0pICYmIGlzZGlnaXQocFsxXSkgJiYgcFsyXT09Jy0nICYmIAotICAgICAgICAgICAgIGlz
ZGlnaXQocFszXSkgJiYgaXNkaWdpdChwWzRdKSAmJiBwWzVdPT0nLScgJiYKLSAgICAgICAgICAg
ICBpc2RpZ2l0KHBbNl0pICYmIGlzZGlnaXQocFs3XSkgKQorICAgICAgICBpZiAoIGlzQVNDSUlE
aWdpdChwWzBdKSAmJiBpc0FTQ0lJRGlnaXQocFsxXSkgJiYgcFsyXT09Jy0nICYmIAorICAgICAg
ICAgICAgIGlzQVNDSUlEaWdpdChwWzNdKSAmJiBpc0FTQ0lJRGlnaXQocFs0XSkgJiYgcFs1XT09
Jy0nICYmCisgICAgICAgICAgICAgaXNBU0NJSURpZ2l0KHBbNl0pICYmIGlzQVNDSUlEaWdpdChw
WzddKSApCiAgICAgICAgIHsKICAgICAgICAgICBwID0gdG9rZW5zWzFdOwotICAgICAgICAgIGlm
ICggaXNkaWdpdChwWzBdKSAmJiBpc2RpZ2l0KHBbMV0pICYmIHBbMl09PSc6JyAmJiAKLSAgICAg
ICAgICAgICAgIGlzZGlnaXQocFszXSkgJiYgaXNkaWdpdChwWzRdKSAmJiAKKyAgICAgICAgICBp
ZiAoIGlzQVNDSUlEaWdpdChwWzBdKSAmJiBpc0FTQ0lJRGlnaXQocFsxXSkgJiYgcFsyXT09Jzon
ICYmIAorICAgICAgICAgICAgICAgaXNBU0NJSURpZ2l0KHBbM10pICYmIGlzQVNDSUlEaWdpdChw
WzRdKSAmJiAKICAgICAgICAgICAgICAgIChwWzVdPT0nQScgfHwgcFs1XT09J1AnKSAmJiBwWzZd
PT0nTScpCiAgICAgICAgICAgewogICAgICAgICAgICAgbHN0eWxlID0gJ1cnOwpAQCAtNzQxLDcg
Kzc0Myw3IEBAIEZUUEVudHJ5VHlwZSBwYXJzZU9uZUZUUExpbmUoY29uc3QgY2hhcioKICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIGZvciAocG9zID0gMTsgKGxzdHlsZSAmJiBwb3Mg
PCB0b2tsZW5bMl0pOyBwb3MrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICBpZiAoIWlzZGlnaXQoKisrcCkpCisgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdp
dCgqKytwKSkKICAgICAgICAgICAgICAgICAgICAgbHN0eWxlID0gMDsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgIH0KQEAgLTg0NSwxNiArODQ3LDE2IEBAIEZUUEVudHJ5VHlwZSBw
YXJzZU9uZUZUUExpbmUoY29uc3QgY2hhcioKICAgICAgICovCiAgICAgICBwID0gJihsaW5lW3Rv
a2xlblswXV0pOwogICAgICAgLyogXHMoXGRcZC1cZFxkLVxkXGQpXHMrKFxkXGQ6XGRcZClccyAq
LwotICAgICAgaWYgKG51bXRva3MgPj0gNCAmJiB0b2tsZW5bMF0gPD0gMTggJiYgaXNkaWdpdCgq
dG9rZW5zWzBdKSAmJgorICAgICAgaWYgKG51bXRva3MgPj0gNCAmJiB0b2tsZW5bMF0gPD0gMTgg
JiYgaXNBU0NJSURpZ2l0KCp0b2tlbnNbMF0pICYmCiAgICAgICAgICAobGluZWxlbiAtIHRva2xl
blswXSkgPj0gKDUzLTE4KSAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBwWzE4
LTE4XSA9PSAnICcgJiYgcFszNC0xOF0gPT0gJyAnICAgICAgICAgICAgICAgICAgICAgICYmCiAg
ICAgICAgICBwWzM3LTE4XSA9PSAnLScgJiYgcFs0MC0xOF0gPT0gJy0nICYmIHBbNDMtMThdID09
ICcgJyAgICYmCiAgICAgICAgICBwWzQ1LTE4XSA9PSAnICcgJiYgcFs0OC0xOF0gPT0gJzonICYm
IHBbNTEtMThdID09ICcgJyAgICYmCi0gICAgICAgICBpc2RpZ2l0KHBbMzUtMThdKSAmJiBpc2Rp
Z2l0KHBbMzYtMThdKSAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBpc2RpZ2l0KHBbMzgt
MThdKSAmJiBpc2RpZ2l0KHBbMzktMThdKSAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBp
c2RpZ2l0KHBbNDEtMThdKSAmJiBpc2RpZ2l0KHBbNDItMThdKSAgICAgICAgICAgICAgICAgICYm
Ci0gICAgICAgICBpc2RpZ2l0KHBbNDYtMThdKSAmJiBpc2RpZ2l0KHBbNDctMThdKSAgICAgICAg
ICAgICAgICAgICYmCi0gICAgICAgICBpc2RpZ2l0KHBbNDktMThdKSAmJiBpc2RpZ2l0KHBbNTAt
MThdKQorICAgICAgICAgaXNBU0NJSURpZ2l0KHBbMzUtMThdKSAmJiBpc0FTQ0lJRGlnaXQocFsz
Ni0xOF0pICAgICAgICAmJgorICAgICAgICAgaXNBU0NJSURpZ2l0KHBbMzgtMThdKSAmJiBpc0FT
Q0lJRGlnaXQocFszOS0xOF0pICAgICAgICAmJgorICAgICAgICAgaXNBU0NJSURpZ2l0KHBbNDEt
MThdKSAmJiBpc0FTQ0lJRGlnaXQocFs0Mi0xOF0pICAgICAgICAmJgorICAgICAgICAgaXNBU0NJ
SURpZ2l0KHBbNDYtMThdKSAmJiBpc0FTQ0lJRGlnaXQocFs0Ny0xOF0pICAgICAgICAmJgorICAg
ICAgICAgaXNBU0NJSURpZ2l0KHBbNDktMThdKSAmJiBpc0FTQ0lJRGlnaXQocFs1MC0xOF0pCiAg
ICAgICApCiAgICAgICB7CiAgICAgICAgIGxzdHlsZSA9ICdPJzsgLyogT1MvMiAqLwpAQCAtODYy
LDcgKzg2NCw3IEBAIEZUUEVudHJ5VHlwZSBwYXJzZU9uZUZUUExpbmUoY29uc3QgY2hhcioKICAg
ICAgICAgeyAgICAgICAgICAgIAogICAgICAgICAgIGZvciAocG9zID0gMTsgbHN0eWxlICYmIHBv
cyA8IHRva2xlblswXTsgcG9zKyspCiAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFpc2Rp
Z2l0KHRva2Vuc1swXVtwb3NdKSkKKyAgICAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KHRva2Vu
c1swXVtwb3NdKSkKICAgICAgICAgICAgICAgbHN0eWxlID0gMDsKICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTEwMDIsMzQgKzEwMDQsMzQgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGlu
ZShjb25zdCBjaGFyKgogICAgICAgICAgICAqICAoXGRcZFxkXGR8XGRcOlxkXGR8XGRcZFw6XGRc
ZHxcZFw6XGRcZFw6XGRcZHxcZFxkXDpcZFxkXDpcZFxkKQogICAgICAgICAgICAqICBccysoLisp
JAogICAgICAgICAgICovCi0gICAgICAgICAgaWYgKGlzZGlnaXQoKnRva2Vuc1twb3NdKSAvKiBz
aXplICovCisgICAgICAgICAgaWYgKGlzQVNDSUlEaWdpdCgqdG9rZW5zW3Bvc10pIC8qIHNpemUg
Ki8KICAgICAgICAgICAgICAgLyogKFx3XHdcdykgKi8KLSAgICAgICAgICAgJiYgdG9rbGVuW3Bv
cysxXSA9PSAzICYmIGlzYWxwaGEoKnRva2Vuc1twb3MrMV0pICYmCi0gICAgICAgICAgICAgIGlz
YWxwaGEodG9rZW5zW3BvcysxXVsxXSkgJiYgaXNhbHBoYSh0b2tlbnNbcG9zKzFdWzJdKQorICAg
ICAgICAgICAmJiB0b2tsZW5bcG9zKzFdID09IDMgJiYgaXNBU0NJSUFscGhhKCp0b2tlbnNbcG9z
KzFdKSAmJgorICAgICAgICAgICAgICBpc0FTQ0lJQWxwaGEodG9rZW5zW3BvcysxXVsxXSkgJiYg
aXNBU0NJSUFscGhhKHRva2Vuc1twb3MrMV1bMl0pCiAgICAgICAgICAgICAgIC8qIChcZHxcZFxk
KSAqLwotICAgICAgICAgICAmJiBpc2RpZ2l0KCp0b2tlbnNbcG9zKzJdKSAmJgorICAgICAgICAg
ICAmJiBpc0FTQ0lJRGlnaXQoKnRva2Vuc1twb3MrMl0pICYmCiAgICAgICAgICAgICAgICAgKHRv
a2xlbltwb3MrMl0gPT0gMSB8fCAKLSAgICAgICAgICAgICAgICAgICh0b2tsZW5bcG9zKzJdID09
IDIgJiYgaXNkaWdpdCh0b2tlbnNbcG9zKzJdWzFdKSkpCi0gICAgICAgICAgICYmIHRva2xlbltw
b3MrM10gPj0gNCAmJiBpc2RpZ2l0KCp0b2tlbnNbcG9zKzNdKSAKKyAgICAgICAgICAgICAgICAg
ICh0b2tsZW5bcG9zKzJdID09IDIgJiYgaXNBU0NJSURpZ2l0KHRva2Vuc1twb3MrMl1bMV0pKSkK
KyAgICAgICAgICAgJiYgdG9rbGVuW3BvcyszXSA+PSA0ICYmIGlzQVNDSUlEaWdpdCgqdG9rZW5z
W3BvcyszXSkgCiAgICAgICAgICAgICAgIC8qIChcZFw6XGRcZFw6XGRcZHxcZFxkXDpcZFxkXDpc
ZFxkKSAqLwogICAgICAgICAgICAmJiAodG9rbGVuW3BvcyszXSA8PSA1IHx8ICgKICAgICAgICAg
ICAgICAgICh0b2tsZW5bcG9zKzNdID09IDcgfHwgdG9rbGVuW3BvcyszXSA9PSA4KSAmJgogICAg
ICAgICAgICAgICAgKHRva2Vuc1twb3MrM11bdG9rbGVuW3BvcyszXS0zXSkgPT0gJzonKSkKLSAg
ICAgICAgICAgJiYgaXNkaWdpdCh0b2tlbnNbcG9zKzNdW3Rva2xlbltwb3MrM10tMl0pCi0gICAg
ICAgICAgICYmIGlzZGlnaXQodG9rZW5zW3BvcyszXVt0b2tsZW5bcG9zKzNdLTFdKQorICAgICAg
ICAgICAmJiBpc0FTQ0lJRGlnaXQodG9rZW5zW3BvcyszXVt0b2tsZW5bcG9zKzNdLTJdKQorICAg
ICAgICAgICAmJiBpc0FTQ0lJRGlnaXQodG9rZW5zW3BvcyszXVt0b2tsZW5bcG9zKzNdLTFdKQog
ICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgIC8qIChcZFxkXGRcZCkgKi8KICAgICAgICAg
ICAgICAgICAgKCh0b2tsZW5bcG9zKzNdID09IDQgfHwgdG9rbGVuW3BvcyszXSA9PSA1KSAmJgot
ICAgICAgICAgICAgICAgICAgaXNkaWdpdCh0b2tlbnNbcG9zKzNdWzFdKSAmJgotICAgICAgICAg
ICAgICAgICAgaXNkaWdpdCh0b2tlbnNbcG9zKzNdWzJdKSAgKQorICAgICAgICAgICAgICAgICAg
aXNBU0NJSURpZ2l0KHRva2Vuc1twb3MrM11bMV0pICYmCisgICAgICAgICAgICAgICAgICBpc0FT
Q0lJRGlnaXQodG9rZW5zW3BvcyszXVsyXSkgICkKICAgICAgICAgICAgICAgLyogKFxkXDpcZFxk
fFxkXDpcZFxkXDpcZFxkKSAqLwogICAgICAgICAgICAgICB8fCAoKHRva2xlbltwb3MrM10gPT0g
NCB8fCB0b2tsZW5bcG9zKzNdID09IDcpICYmIAogICAgICAgICAgICAgICAgICAgKHRva2Vuc1tw
b3MrM11bMV0pID09ICc6JyAmJgotICAgICAgICAgICAgICAgICAgaXNkaWdpdCh0b2tlbnNbcG9z
KzNdWzJdKSAmJiBpc2RpZ2l0KHRva2Vuc1twb3MrM11bM10pKQorICAgICAgICAgICAgICAgICAg
aXNBU0NJSURpZ2l0KHRva2Vuc1twb3MrM11bMl0pICYmIGlzQVNDSUlEaWdpdCh0b2tlbnNbcG9z
KzNdWzNdKSkKICAgICAgICAgICAgICAgLyogKFxkXGRcOlxkXGR8XGRcZFw6XGRcZFw6XGRcZCkg
Ki8KICAgICAgICAgICAgICAgfHwgKCh0b2tsZW5bcG9zKzNdID09IDUgfHwgdG9rbGVuW3Bvcysz
XSA9PSA4KSAmJiAKLSAgICAgICAgICAgICAgICAgIGlzZGlnaXQodG9rZW5zW3BvcyszXVsxXSkg
JiYgKHRva2Vuc1twb3MrM11bMl0pID09ICc6JyAmJgotICAgICAgICAgICAgICAgICAgaXNkaWdp
dCh0b2tlbnNbcG9zKzNdWzNdKSAmJiBpc2RpZ2l0KHRva2Vuc1twb3MrM11bNF0pKSAKKyAgICAg
ICAgICAgICAgICAgIGlzQVNDSUlEaWdpdCh0b2tlbnNbcG9zKzNdWzFdKSAmJiAodG9rZW5zW3Bv
cyszXVsyXSkgPT0gJzonICYmCisgICAgICAgICAgICAgICAgICBpc0FTQ0lJRGlnaXQodG9rZW5z
W3BvcyszXVszXSkgJiYgaXNBU0NJSURpZ2l0KHRva2Vuc1twb3MrM11bNF0pKSAKICAgICAgICAg
ICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgICAgewpAQCAtMTA0MCw3ICsxMDQyLDcgQEAg
RlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogICAgICAgICAgICAgcCA9
IHRva2Vuc1t0b2ttYXJrZXJdOwogICAgICAgICAgICAgZm9yIChwb3MgPSAwOyBsc3R5bGUgJiYg
cG9zIDwgdG9rbGVuW3Rva21hcmtlcl07IHBvcysrKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBpZiAoIWlzZGlnaXQoKnArKykpCisgICAgICAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0
KCpwKyspKQogICAgICAgICAgICAgICAgIGxzdHlsZSA9IDA7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAobHN0eWxlKQpAQCAtMTIwMCw3ICsxMjAyLDcgQEAgRlRQRW50cnlUeXBlIHBh
cnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogICAgICAgKiBDTVQuQ1NWICAgICAgICAgICAgIDAg
ICAgICBKdWwgMDYgMTk5NSAxNDo1NiAgIFJIQQogICAgICAgKi8KICAgICAgIGlmIChudW10b2tz
ID49IDQgJiYgdG9rbGVuWzBdIDwgMTMgJiYgCi0gICAgICAgICAgKCh0b2tsZW5bMV0gPT0gNSAm
JiAqdG9rZW5zWzFdID09ICc8JykgfHwgaXNkaWdpdCgqdG9rZW5zWzFdKSkgKQorICAgICAgICAg
ICgodG9rbGVuWzFdID09IDUgJiYgKnRva2Vuc1sxXSA9PSAnPCcpIHx8IGlzQVNDSUlEaWdpdCgq
dG9rZW5zWzFdKSkgKQogICAgICAgewogICAgICAgICBpZiAobnVtdG9rcyA9PSA0CiAgICAgICAg
ICAmJiAodG9rbGVuWzJdID09IDggfHwgdG9rbGVuWzJdID09IDkpCkBAIC0xMjA4LDEyICsxMjEw
LDEyIEBAIEZUUEVudHJ5VHlwZSBwYXJzZU9uZUZUUExpbmUoY29uc3QgY2hhcioKICAgICAgICAg
ICAgICAoKHRva2Vuc1syXVsyXSkgPT0gJy0nICYmICh0b2tlbnNbMl1bNV0pID09ICctJykpCiAg
ICAgICAgICAmJiAodG9rbGVuWzNdID09IDQgfHwgdG9rbGVuWzNdID09IDUpCiAgICAgICAgICAm
JiAodG9rZW5zWzNdW3Rva2xlblszXS0zXSkgPT0gJzonCi0gICAgICAgICAmJiBpc2RpZ2l0KHRv
a2Vuc1syXVswXSkgJiYgaXNkaWdpdCh0b2tlbnNbMl1bMV0pCi0gICAgICAgICAmJiBpc2RpZ2l0
KHRva2Vuc1syXVszXSkgJiYgaXNkaWdpdCh0b2tlbnNbMl1bNF0pCi0gICAgICAgICAmJiBpc2Rp
Z2l0KHRva2Vuc1syXVs2XSkgJiYgaXNkaWdpdCh0b2tlbnNbMl1bN10pCi0gICAgICAgICAmJiAo
dG9rbGVuWzJdIDwgOSB8fCBpc2RpZ2l0KHRva2Vuc1syXVs4XSkpCi0gICAgICAgICAmJiBpc2Rp
Z2l0KHRva2Vuc1szXVt0b2tsZW5bM10tMV0pICYmIGlzZGlnaXQodG9rZW5zWzNdW3Rva2xlblsz
XS0yXSkKLSAgICAgICAgICYmIGlzZGlnaXQodG9rZW5zWzNdW3Rva2xlblszXS00XSkgJiYgaXNk
aWdpdCgqdG9rZW5zWzNdKSAKKyAgICAgICAgICYmIGlzQVNDSUlEaWdpdCh0b2tlbnNbMl1bMF0p
ICYmIGlzQVNDSUlEaWdpdCh0b2tlbnNbMl1bMV0pCisgICAgICAgICAmJiBpc0FTQ0lJRGlnaXQo
dG9rZW5zWzJdWzNdKSAmJiBpc0FTQ0lJRGlnaXQodG9rZW5zWzJdWzRdKQorICAgICAgICAgJiYg
aXNBU0NJSURpZ2l0KHRva2Vuc1syXVs2XSkgJiYgaXNBU0NJSURpZ2l0KHRva2Vuc1syXVs3XSkK
KyAgICAgICAgICYmICh0b2tsZW5bMl0gPCA5IHx8IGlzQVNDSUlEaWdpdCh0b2tlbnNbMl1bOF0p
KQorICAgICAgICAgJiYgaXNBU0NJSURpZ2l0KHRva2Vuc1szXVt0b2tsZW5bM10tMV0pICYmIGlz
QVNDSUlEaWdpdCh0b2tlbnNbM11bdG9rbGVuWzNdLTJdKQorICAgICAgICAgJiYgaXNBU0NJSURp
Z2l0KHRva2Vuc1szXVt0b2tsZW5bM10tNF0pICYmIGlzQVNDSUlEaWdpdCgqdG9rZW5zWzNdKSAK
ICAgICAgICAgICkKICAgICAgICAgewogICAgICAgICAgIGxzdHlsZSA9ICd3JzsKQEAgLTEyMjIs
MTMgKzEyMjQsMTMgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgog
ICAgICAgICAgJiYgdG9rbGVuWzJdID09IDMgJiYgdG9rbGVuWzNdID09IDIKICAgICAgICAgICYm
IHRva2xlbls0XSA9PSA0ICYmIHRva2xlbls1XSA9PSA1CiAgICAgICAgICAmJiAodG9rZW5zWzVd
WzJdKSA9PSAnOicKLSAgICAgICAgICYmIGlzYWxwaGEodG9rZW5zWzJdWzBdKSAmJiBpc2FscGhh
KHRva2Vuc1syXVsxXSkKLSAgICAgICAgICYmICAgICAgICAgICAgICAgICAgICAgICAgICBpc2Fs
cGhhKHRva2Vuc1syXVsyXSkKLSAgICAgICAgICYmIGlzZGlnaXQodG9rZW5zWzNdWzBdKSAmJiBp
c2RpZ2l0KHRva2Vuc1szXVsxXSkKLSAgICAgICAgICYmIGlzZGlnaXQodG9rZW5zWzRdWzBdKSAm
JiBpc2RpZ2l0KHRva2Vuc1s0XVsxXSkKLSAgICAgICAgICYmIGlzZGlnaXQodG9rZW5zWzRdWzJd
KSAmJiBpc2RpZ2l0KHRva2Vuc1s0XVszXSkKLSAgICAgICAgICYmIGlzZGlnaXQodG9rZW5zWzVd
WzBdKSAmJiBpc2RpZ2l0KHRva2Vuc1s1XVsxXSkKLSAgICAgICAgICYmIGlzZGlnaXQodG9rZW5z
WzVdWzNdKSAmJiBpc2RpZ2l0KHRva2Vuc1s1XVs0XSkKKyAgICAgICAgICYmIGlzQVNDSUlBbHBo
YSh0b2tlbnNbMl1bMF0pICYmIGlzQVNDSUlBbHBoYSh0b2tlbnNbMl1bMV0pCisgICAgICAgICAm
JiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBU0NJSUFscGhhKHRva2Vuc1syXVsyXSkKKyAg
ICAgICAgICYmIGlzQVNDSUlEaWdpdCh0b2tlbnNbM11bMF0pICYmIGlzQVNDSUlEaWdpdCh0b2tl
bnNbM11bMV0pCisgICAgICAgICAmJiBpc0FTQ0lJRGlnaXQodG9rZW5zWzRdWzBdKSAmJiBpc0FT
Q0lJRGlnaXQodG9rZW5zWzRdWzFdKQorICAgICAgICAgJiYgaXNBU0NJSURpZ2l0KHRva2Vuc1s0
XVsyXSkgJiYgaXNBU0NJSURpZ2l0KHRva2Vuc1s0XVszXSkKKyAgICAgICAgICYmIGlzQVNDSUlE
aWdpdCh0b2tlbnNbNV1bMF0pICYmIGlzQVNDSUlEaWdpdCh0b2tlbnNbNV1bMV0pCisgICAgICAg
ICAmJiBpc0FTQ0lJRGlnaXQodG9rZW5zWzVdWzNdKSAmJiBpc0FTQ0lJRGlnaXQodG9rZW5zWzVd
WzRdKQogICAgICAgICAgLyogY291bGQgYWxzbyBjaGVjayB0aGF0ICgmKHRva2Vuc1s1XVs1XSkg
LSB0b2tlbnNbMl0pID09IDE3ICovCiAgICAgICAgICkKICAgICAgICAgewpAQCAtMTI0Miw3ICsx
MjQ0LDcgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogICAgICAg
ICAgIHsKICAgICAgICAgICAgIGZvciAocG9zID0gMDsgbHN0eWxlICYmIHBvcyA8IHRva2xlblsx
XTsgcG9zKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICghaXNkaWdpdCgqcCsr
KSkKKyAgICAgICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnArKykpCiAgICAgICAgICAgICAg
ICAgbHN0eWxlID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9IC8qIG5vdCA8RElSPiAq
LwpAQCAtMTI2MCw3ICsxMjYyLDcgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25z
dCBjaGFyKgogICAgICAgICByZXN1bHQudHlwZSA9IEZUUERpcmVjdG9yeUVudHJ5OwogCiAgICAg
ICAgIHAgPSB0b2tlbnNbMV07Ci0gICAgICAgIGlmIChpc2RpZ2l0KCpwKSkKKyAgICAgICAgaWYg
KGlzQVNDSUlEaWdpdCgqcCkpCiAgICAgICAgIHsKICAgICAgICAgICByZXN1bHQudHlwZSA9IEZU
UEZpbGVFbnRyeTsKICAgICAgICAgICBwb3MgPSB0b2tsZW5bMV07CkBAIC0xMjcwLDkgKzEyNzIs
OSBAQCBGVFBFbnRyeVR5cGUgcGFyc2VPbmVGVFBMaW5lKGNvbnN0IGNoYXIqCiAgICAgICAgIHAg
PSB0b2tlbnNbMl07CiAgICAgICAgIGlmICh0b2tsZW5bMl0gPT0gMykgLyogQ2hhbWVsZW9uICov
CiAgICAgICAgIHsKLSAgICAgICAgICB0YnVmWzBdID0gdG91cHBlcihwWzBdKTsKLSAgICAgICAg
ICB0YnVmWzFdID0gdG9sb3dlcihwWzFdKTsKLSAgICAgICAgICB0YnVmWzJdID0gdG9sb3dlcihw
WzJdKTsKKyAgICAgICAgICB0YnVmWzBdID0gdG9BU0NJSVVwcGVyKHBbMF0pOworICAgICAgICAg
IHRidWZbMV0gPSB0b0FTQ0lJTG93ZXIocFsxXSk7CisgICAgICAgICAgdGJ1ZlsyXSA9IHRvQVND
SUlMb3dlcihwWzJdKTsKICAgICAgICAgICBmb3IgKHBvcyA9IDA7IHBvcyA8ICgxMiozKTsgcG9z
Kz0zKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGlmICh0YnVmWzBdID09IG1vbnRoX25hbWVz
W3BvcyswXSAmJgpAQCAtMTM5MSw3ICsxMzkzLDcgQEAgRlRQRW50cnlUeXBlIHBhcnNlT25lRlRQ
TGluZShjb25zdCBjaGFyKgogICAgICAgICBpZiAobGluZWxlbiA+IHBvcykKICAgICAgICAgewog
ICAgICAgICAgIHAgPSAmbGluZVtwb3NdOwotICAgICAgICAgIGlmICgoKnAgPT0gJy0nIHx8ICpw
ID09ICc9JyB8fCBpc2RpZ2l0KCpwKSkgJiYKKyAgICAgICAgICBpZiAoKCpwID09ICctJyB8fCAq
cCA9PSAnPScgfHwgaXNBU0NJSURpZ2l0KCpwKSkgJiYKICAgICAgICAgICAgICAgKChsaW5lbGVu
ID09IChwb3MrMSkpIHx8IAogICAgICAgICAgICAgICAgKGxpbmVsZW4gPj0gKHBvcyszKSAmJiBw
WzFdID09ICcgJyAmJiBwWzJdID09ICcgJykpICkKICAgICAgICAgICB7CkBAIC0xNDE4LDcgKzE0
MjAsNyBAQCBGVFBFbnRyeVR5cGUgcGFyc2VPbmVGVFBMaW5lKGNvbnN0IGNoYXIqCiAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IDA7IGxzdHlsZSAmJiBwb3MgPCB0
b2tsZW5bdG9rbWFya2VyXTsgcG9zKyspIAogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGlmICghaXNkaWdpdCh0b2tlbnNbdG9rbWFya2VyXVtwb3NdKSkKKyAgICAgICAgICAg
ICAgICAgIGlmICghaXNBU0NJSURpZ2l0KHRva2Vuc1t0b2ttYXJrZXJdW3Bvc10pKQogICAgICAg
ICAgICAgICAgICAgICBsc3R5bGUgPSAwOyAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgIH0KQEAgLTE0NzUsNyArMTQ3Nyw3IEBAIEZUUEVudHJ5VHlwZSBwYXJzZU9uZUZUUExpbmUo
Y29uc3QgY2hhcioKICAgICAgICAgICAgIHJlc3VsdC50eXBlICA9IEZUUERpcmVjdG9yeUVudHJ5
OwogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc2RpZ2l0KCp0b2tl
bnNbdG9rbWFya2VyXSkpCisgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlEaWdpdCgqdG9rZW5zW3Rv
a21hcmtlcl0pKQogICAgICAgICB7CiAgICAgICAgICAgcG9zID0gdG9rbGVuW3Rva21hcmtlcl07
CiAgICAgICAgICAgcmVzdWx0LmZpbGVTaXplID0gU3RyaW5nKHRva2Vuc1t0b2ttYXJrZXJdLCBw
b3MpOwpAQCAtMTQ5MCwyNCArMTQ5MiwyNCBAQCBGVFBFbnRyeVR5cGUgcGFyc2VPbmVGVFBMaW5l
KGNvbnN0IGNoYXIqCiAgICAgICAgICAgcG9zID0gdG9rbGVuW3Bvc107CiAKICAgICAgICAgICBp
ZiAoKHBvcyA9PSA0IHx8IHBvcyA9PSA1KQotICAgICAgICAgICYmICBpc2RpZ2l0KCpwKSAmJiBp
c2RpZ2l0KHBbcG9zLTFdKSAmJiBpc2RpZ2l0KHBbcG9zLTJdKQorICAgICAgICAgICYmICBpc0FT
Q0lJRGlnaXQoKnApICYmIGlzQVNDSUlEaWdpdChwW3Bvcy0xXSkgJiYgaXNBU0NJSURpZ2l0KHBb
cG9zLTJdKQogICAgICAgICAgICYmICAoKHBvcyA9PSA1ICYmIHBbMl0gPT0gJzonKSB8fCAgCi0g
ICAgICAgICAgICAgICAocG9zID09IDQgJiYgKGlzZGlnaXQocFsxXSkgfHwgcFsxXSA9PSAnOicp
KSkKKyAgICAgICAgICAgICAgIChwb3MgPT0gNCAmJiAoaXNBU0NJSURpZ2l0KHBbMV0pIHx8IHBb
MV0gPT0gJzonKSkpCiAgICAgICAgICAgICAgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIG1v
bnRoX251bSA9IHRva21hcmtlcisxOyAvKiBhc3N1bWVkIHBvc2l0aW9uIG9mIG1vbnRoIGZpZWxk
ICovCiAgICAgICAgICAgICBwb3MgPSB0b2ttYXJrZXIrMjsgICAgICAgLyogYXNzdW1lZCBwb3Np
dGlvbiBvZiBtZGF5IGZpZWxkICovCi0gICAgICAgICAgICBpZiAoaXNkaWdpdCgqdG9rZW5zW21v
bnRoX251bV0pKSAvKiBwb3NpdGlvbnMgYXJlIHJldmVyc2VkICovCisgICAgICAgICAgICBpZiAo
aXNBU0NJSURpZ2l0KCp0b2tlbnNbbW9udGhfbnVtXSkpIC8qIHBvc2l0aW9ucyBhcmUgcmV2ZXJz
ZWQgKi8KICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgbW9udGhfbnVtKys7CiAgICAgICAg
ICAgICAgIHBvcy0tOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcCA9IHRva2Vuc1ttb250
aF9udW1dOwotICAgICAgICAgICAgaWYgKGlzZGlnaXQoKnRva2Vuc1twb3NdKSAKKyAgICAgICAg
ICAgIGlmIChpc0FTQ0lJRGlnaXQoKnRva2Vuc1twb3NdKSAKICAgICAgICAgICAgICYmICh0b2ts
ZW5bcG9zXSA9PSAxIHx8IAotICAgICAgICAgICAgICAgICAgKHRva2xlbltwb3NdID09IDIgJiYg
aXNkaWdpdCh0b2tlbnNbcG9zXVsxXSkpKQorICAgICAgICAgICAgICAgICAgKHRva2xlbltwb3Nd
ID09IDIgJiYgaXNBU0NJSURpZ2l0KHRva2Vuc1twb3NdWzFdKSkpCiAgICAgICAgICAgICAmJiB0
b2tsZW5bbW9udGhfbnVtXSA9PSAzCi0gICAgICAgICAgICAmJiBpc2FscGhhKCpwKSAmJiBpc2Fs
cGhhKHBbMV0pICYmIGlzYWxwaGEocFsyXSkgICkKKyAgICAgICAgICAgICYmIGlzQVNDSUlBbHBo
YSgqcCkgJiYgaXNBU0NJSUFscGhhKHBbMV0pICYmIGlzQVNDSUlBbHBoYShwWzJdKSAgKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICBwb3MgPSBhdG9pKHRva2Vuc1twb3NdKTsKICAgICAg
ICAgICAgICAgaWYgKHBvcyA+IDAgJiYgcG9zIDw9IDMxKQpAQCAtMTYwMSw0ICsxNjAzLDMgQEAg
RlRQRW50cnlUeXBlIHBhcnNlT25lRlRQTGluZShjb25zdCBjaGFyKgogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEZUUERJUikKLQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
VGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI2NjM3KQorKysgV2ViQ29yZS9sb2Fk
ZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBA
CiAvKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCi0KICAgICBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw
NyBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAKICAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMSw2
ICsyOSw5IEBACiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjQ5LDcgKzY1MCw3IEBAIGJvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JIZWFkQ2gK
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IGxpbmtUYWcgJiYgdGFnICE9IG1ldGFUYWcg
JiYgdGFnICE9IG9iamVjdFRhZyAmJgogICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gdGl0
bGVUYWcgJiYgdGFnICE9IGJhc2VUYWcgJiYgCiAgICAgICAgICAgICAgICAgICAgICAgIChlbmQg
fHwgdGFnICE9IGh0bWxUYWcpICYmICFlbmNsb3NpbmdUYWdOYW1lICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICh0YWcgIT0gaGVhZFRhZykgJiYgaXNhbHBoYSh0YWdCdWZmZXJbMF0pKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICh0YWcgIT0gaGVhZFRhZykgJiYgaXNBU0NJSUFscGhhKHRh
Z0J1ZmZlclswXSkpIHsKICAgICAgICAgICAgICAgICBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRDU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRDU3RyaW5nLmNwcAkocmV2aXNpb24gMjY2MzcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRDU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw4ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkRlcHJlY2F0ZWRDU3RyaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTEsNyArMTEzLDcgQEAg
RGVwcmVjYXRlZENTdHJpbmcgRGVwcmVjYXRlZENTdHJpbmc6OmxvdwogICAgIHsKICAgICAgICAg
d2hpbGUoICpzdHIgIT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgICpzdHIgPSB0b2xvd2Vy
KCpzdHIpOworICAgICAgICAgICAgKnN0ciA9IHRvQVNDSUlMb3dlcigqc3RyKTsKICAgICAgICAg
ICAgIHN0cisrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI4LDcgKzEzMCw3IEBAIERlcHJlY2F0
ZWRDU3RyaW5nIERlcHJlY2F0ZWRDU3RyaW5nOjp1cHAKICAgICB7CiAgICAgICAgIHdoaWxlKCAq
c3RyICE9IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICAqc3RyID0gdG91cHBlcigqc3RyKTsK
KyAgICAgICAgICAgICpzdHIgPSB0b0FTQ0lJVXBwZXIoKnN0cik7CiAgICAgICAgICAgICBzdHIr
KzsKICAgICAgICAgfQogICAgIH0KQEAgLTE4NCw3ICsxODYsNyBAQCBpbnQgRGVwcmVjYXRlZENT
dHJpbmc6OmZpbmQoY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgd2hpbGUoIChhPXN1Yltw
b3NdKSAmJiAoYj1zdHJbaW5kZXhdKSAmJiBhPT1iICkKICAgICAgICAgICAgICAgICAgICAgcG9z
KyssIGluZGV4Kys7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgd2hpbGUoIChh
PXN1Yltwb3NdKSAmJiAoYj1zdHJbaW5kZXhdKSAmJiB0b2xvd2VyKGEpPT10b2xvd2VyKGIpICkK
KyAgICAgICAgICAgICAgICB3aGlsZSggKGE9c3ViW3Bvc10pICYmIChiPXN0cltpbmRleF0pICYm
IHRvQVNDSUlMb3dlcihhKT09dG9BU0NJSUxvd2VyKGIpICkKICAgICAgICAgICAgICAgICAgICAg
cG9zKyssIGluZGV4Kys7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIHJlYWNoZWQgdGhl
IGVuZCBvZiBvdXIgY29tcGFyZSBzdHJpbmcgd2l0aG91dCBhIG1pc21hdGNoPwpAQCAtMjExLDEx
ICsyMTMsMTEgQEAgaW50IERlcHJlY2F0ZWRDU3RyaW5nOjpjb250YWlucyhjaGFyIGMsIAogICAg
ICAgICAgICAgICAgIGZvdW5kICs9IHN0cltpXSA9PSBjOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYyA9IHRvbG93ZXIoYyk7CisgICAgICAgICAgICBjID0g
dG9BU0NJSUxvd2VyKGMpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9
IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAgICAgY2hhciBjaHIgPSBzdHJbaV07Ci0gICAgICAg
ICAgICAgICAgY2hyID0gdG9sb3dlcihjaHIpOworICAgICAgICAgICAgICAgIGNociA9IHRvQVND
SUlMb3dlcihjaHIpOwogICAgICAgICAgICAgICAgIGZvdW5kICs9IGNociA9PSBjOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5j
cHAJKHJldmlzaW9uIDI2NjM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
OSw2ICs0OSw3IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgS0pT
OwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzUs
NyArMTM2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdWNzdHJjbXAoIGNvbnN0IERlcHJlYwogICAg
IHJldHVybiBhLT51bmljb2RlKCkgLSBiLT51bmljb2RlKCk7CiB9CiAKLQogc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgRGVwcmVjYXRlZENoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIGludCBsKQogewog
ICAgIEFTU0VSVChsID49IDApOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBib29sIGVxdWFs
Q2FzZUluc2Vuc2l0aXZlKGNvbnN0IGMKIHsKICAgICBBU1NFUlQobCA+PSAwKTsKICAgICB3aGls
ZSAobC0tKSB7Ci0gICAgICAgIGlmICh0b2xvd2VyKCphKSAhPSB0b2xvd2VyKCpiKSkKKyAgICAg
ICAgaWYgKHRvQVNDSUlMb3dlcigqYSkgIT0gdG9BU0NJSUxvd2VyKCpiKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgYSsrOyBiKys7CiAgICAgfQpAQCAtMTY0LDcgKzE2NCw3
IEBAIHN0YXRpYyBib29sIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKGNvbnN0IEQKIHsKICAgICBBU1NF
UlQobCA+PSAwKTsKICAgICB3aGlsZSAobC0tKSB7Ci0gICAgICAgIGlmICh0b2xvd2VyKGEtPnVu
aWNvZGUoKSkgIT0gdG9sb3dlcigqYikpCisgICAgICAgIGlmICh0b0FTQ0lJTG93ZXIoYS0+dW5p
Y29kZSgpKSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih0b0FTQ0lJTG93ZXIoKmIpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYSsrOyBiKys7CiAgICAgfQpAQCAt
MTc1LDcgKzE3NSw3IEBAIHN0YXRpYyBib29sIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKGNvbnN0IEQK
IHsKICAgICBBU1NFUlQobCA+PSAwKTsKICAgICB3aGlsZSAobC0tKSB7Ci0gICAgICAgIGlmICh0
b2xvd2VyKGEtPnVuaWNvZGUoKSkgIT0gdG9sb3dlcihiLT51bmljb2RlKCkpKQorICAgICAgICBp
ZiAodG9BU0NJSUxvd2VyKGEtPnVuaWNvZGUoKSkgIT0gdG9BU0NJSUxvd2VyKGItPnVuaWNvZGUo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGErKzsgYisrOwogICAgIH0K
QEAgLTE4NCwyMiArMTg0LDIyIEBAIHN0YXRpYyBib29sIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKGNv
bnN0IEQKIAogc3RhdGljIGlubGluZSBib29sIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKGNoYXIgYzEs
IGNoYXIgYzIpCiB7Ci0gICAgcmV0dXJuIHRvbG93ZXIoYzEpID09IHRvbG93ZXIoYzIpOworICAg
IHJldHVybiB0b0FTQ0lJTG93ZXIoYzEpID09IHRvQVNDSUlMb3dlcihjMik7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBlcXVhbENhc2VJbnNlbnNpdGl2ZShEZXByZWNhdGVkQ2hhciBjMSwgY2hh
ciBjMikKIHsKLSAgICByZXR1cm4gdG9sb3dlcihjMS51bmljb2RlKCkpID09IHRvbG93ZXIoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYzIpKTsKKyAgICByZXR1cm4gdG9BU0NJSUxvd2VyKGMx
LnVuaWNvZGUoKSkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odG9BU0NJSUxvd2VyKGMy
KSk7CiB9CiAKIHN0YXRpYyBib29sIGlzQ2hhcmFjdGVyQWxsb3dlZEluQmFzZShEZXByZWNhdGVk
Q2hhciBjLCBpbnQgYmFzZSkKIHsKLSAgICBpbnQgdWMgPSBjLnVuaWNvZGUoKTsKKyAgICA6OlVD
aGFyIHVjID0gYy51bmljb2RlKCk7CiAgICAgaWYgKHVjID4gMHg3RikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChpc2RpZ2l0KHVjKSkKKyAgICBpZiAoaXNBU0NJSURpZ2l0KHVjKSkK
ICAgICAgICAgcmV0dXJuIHVjIC0gJzAnIDwgYmFzZTsKLSAgICBpZiAoaXNhbHBoYSh1YykpIHsK
KyAgICBpZiAoaXNBU0NJSUFscGhhKHVjKSkgewogICAgICAgICBpZiAoYmFzZSA+IDM2KQogICAg
ICAgICAgICAgYmFzZSA9IDM2OwogICAgICAgICByZXR1cm4gKHVjID49ICdhJyAmJiB1YyA8ICdh
JyArIGJhc2UgLSAxMCkKQEAgLTk3Myw4ICs5NzMsOCBAQCBpbnQgRGVwcmVjYXRlZFN0cmluZzo6
ZmluZChjb25zdCBEZXByZWNhCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3Ig
KCBpID0gMDsgaSA8IGxzdHI7IGkrKyApIHsKLSAgICAgICAgICAgIGh0aGlzICs9IHRvbG93ZXIo
dXRoaXNbaV0udW5pY29kZSgpKTsKLSAgICAgICAgICAgIGhzdHIgKz0gdG9sb3dlcih1c3RyW2ld
LnVuaWNvZGUoKSk7CisgICAgICAgICAgICBodGhpcyArPSB0b0FTQ0lJTG93ZXIodXRoaXNbaV0u
dW5pY29kZSgpKTsKKyAgICAgICAgICAgIGhzdHIgKz0gdG9BU0NJSUxvd2VyKHVzdHJbaV0udW5p
Y29kZSgpKTsKICAgICAgICAgfQogICAgICAgICBpID0gMDsKICAgICAgICAgd2hpbGUgKCB0cnVl
ICkgewpAQCAtOTgyLDggKzk4Miw4IEBAIGludCBEZXByZWNhdGVkU3RyaW5nOjpmaW5kKGNvbnN0
IERlcHJlY2EKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggKyBpOwogICAgICAgICAgICAg
aWYgKCBpID09IGRlbHRhICkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAg
ICBodGhpcyArPSB0b2xvd2VyKHV0aGlzW2kgKyBsc3RyXS51bmljb2RlKCkpOwotICAgICAgICAg
ICAgaHRoaXMgLT0gdG9sb3dlcih1dGhpc1tpXS51bmljb2RlKCkpOworICAgICAgICAgICAgaHRo
aXMgKz0gdG9BU0NJSUxvd2VyKHV0aGlzW2kgKyBsc3RyXS51bmljb2RlKCkpOworICAgICAgICAg
ICAgaHRoaXMgLT0gdG9BU0NJSUxvd2VyKHV0aGlzW2ldLnVuaWNvZGUoKSk7CiAgICAgICAgICAg
ICBpKys7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDIxLDkgKzEwMjEsOSBAQCBpbnQgRGVwcmVj
YXRlZFN0cmluZzo6ZmluZChjb25zdCBjaGFyICpjCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBs
YyA9IHRvbG93ZXIoKmNocyk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxjID0gdG9BU0NJ
SUxvd2VyKCpjaHMpOwogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmICh0b2xv
d2VyKCorK3B0cikgPT0gbGMgJiYgZXF1YWxDYXNlSW5zZW5zaXRpdmUocHRyICsgMSwgY2hzUGx1
c09uZSwgY2hzTGVuZ3RoTWludXNPbmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvQVNDSUlM
b3dlcigqKytwdHIpID09IGxjICYmIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKHB0ciArIDEsIGNoc1Bs
dXNPbmUsIGNoc0xlbmd0aE1pbnVzT25lKSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZGF0YS0+X2xlbmd0aCAtIGNoc0xlbmd0aCAtIG4gKyAxOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gd2hpbGUgKC0tbik7CkBAIC0xMDQwLDkgKzEwNDAsOSBAQCBpbnQgRGVwcmVj
YXRlZFN0cmluZzo6ZmluZChjb25zdCBjaGFyICpjCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBs
YyA9IHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKmNocyk7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGxjID0gdG9BU0NJSUxvd2VyKCpjaHMpOwogICAgICAgICAgICAgZG8gewotICAgICAgICAg
ICAgICAgIGlmICh0b2xvd2VyKCgrK3B0ciktPnVuaWNvZGUoKSkgPT0gbGMgJiYgZXF1YWxDYXNl
SW5zZW5zaXRpdmUocHRyICsgMSwgY2hzUGx1c09uZSwgY2hzTGVuZ3RoTWludXNPbmUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcigoKytwdHIpLT51bmljb2RlKCkpID09IGxj
ICYmIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKHB0ciArIDEsIGNoc1BsdXNPbmUsIGNoc0xlbmd0aE1p
bnVzT25lKSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS0+X2xlbmd0aCAtIGNo
c0xlbmd0aCAtIG4gKyAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gd2hpbGUg
KC0tbik7CkBAIC0xMTYyLDkgKzExNjIsOSBAQCBpbnQgRGVwcmVjYXRlZFN0cmluZzo6Y29udGFp
bnMoRGVwcmVjYXRlCiAgICAgICAgICAgICB3aGlsZSAobi0tKQogICAgICAgICAgICAgICAgIGNv
dW50ICs9ICpjUHRyKysgPT0gYWM7CiAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUKLSAgICAgICAgICAgIGlu
dCBsYyA9IHRvbG93ZXIoYWMpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBsYyA9IHRvQVND
SUlMb3dlcihhYyk7CiAgICAgICAgICAgICB3aGlsZSAobi0tKSB7Ci0gICAgICAgICAgICAgICAg
Y291bnQgKz0gdG9sb3dlcigqY1B0cisrKSA9PSBsYzsKKyAgICAgICAgICAgICAgICBjb3VudCAr
PSB0b0FTQ0lJTG93ZXIoKmNQdHIrKykgPT0gbGM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewpAQCAtMTE3NSw5ICsxMTc1LDkgQEAgaW50IERlcHJlY2F0ZWRTdHJpbmc6
OmNvbnRhaW5zKERlcHJlY2F0ZQogICAgICAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAg
ICAgICAgIGNvdW50ICs9ICp1YysrID09IGM7CiAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUKLSAgICAgICAg
ICAgIGludCBsYyA9IHRvbG93ZXIoYy51bmljb2RlKCkpOworICAgICAgICAgICAgOjpVQ2hhciBs
YyA9IHRvQVNDSUlMb3dlcihjLnVuaWNvZGUoKSk7CiAgICAgICAgICAgICB3aGlsZSAobi0tKSB7
Ci0gICAgICAgICAgICAgICAgY291bnQgKz0gdG9sb3dlcih1Yy0+dW5pY29kZSgpKSA9PSBsYzsK
KyAgICAgICAgICAgICAgICBjb3VudCArPSB0b0FTQ0lJTG93ZXIodWMtPnVuaWNvZGUoKSkgPT0g
bGM7CiAgICAgICAgICAgICAgICAgdWMrKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTIxNiw5ICsxMjE2LDkgQEAgaW50IERlcHJlY2F0ZWRTdHJpbmc6OmNvbnRhaW5zKGNvbnN0IGNo
YQogICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbGMgPSB0b2xvd2VyKGMpOworICAgICAgICAg
ICAgY2hhciBsYyA9IHRvQVNDSUlMb3dlcihjKTsKICAgICAgICAgICAgIGRvIHsKLSAgICAgICAg
ICAgICAgICBjb3VudCArPSB0b2xvd2VyKCpwKSA9PSBsYyAmJiBlcXVhbENhc2VJbnNlbnNpdGl2
ZShwICsgMSwgc3RyICsgMSwgbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgY291bnQgKz0gdG9B
U0NJSUxvd2VyKCpwKSA9PSBsYyAmJiBlcXVhbENhc2VJbnNlbnNpdGl2ZShwICsgMSwgc3RyICsg
MSwgbGVuIC0gMSk7CiAgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAgfSB3aGlsZSAo
LS1uKTsKICAgICAgICAgfQpAQCAtMTIzMSw5ICsxMjMxLDkgQEAgaW50IERlcHJlY2F0ZWRTdHJp
bmc6OmNvbnRhaW5zKGNvbnN0IGNoYQogICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAg
IH0gd2hpbGUgKC0tbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbGMgPSB0
b2xvd2VyKGMpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBsYyA9IHRvQVNDSUlMb3dlcihj
KTsKICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBjb3VudCArPSB0b2xvd2VyKHAt
PnVuaWNvZGUoKSkgPT0gbGMgJiYgZXF1YWxDYXNlSW5zZW5zaXRpdmUocCArIDEsIHN0ciArIDEs
IGxlbiAtIDEpOworICAgICAgICAgICAgICAgIGNvdW50ICs9IHRvQVNDSUlMb3dlcihwLT51bmlj
b2RlKCkpID09IGxjICYmIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKHAgKyAxLCBzdHIgKyAxLCBsZW4g
LSAxKTsKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICB9IHdoaWxlICgtLW4pOwog
ICAgICAgICB9CkBAIC0xNDE0LDggKzE0MTQsOCBAQCBJbnRlZ3JhbFR5cGUgdG9JbnRlZ3JhbFR5
cGUoY29uc3QgRGVwcmVjCiAgICAgd2hpbGUgKGxlbmd0aCAmJiBpc0NoYXJhY3RlckFsbG93ZWRJ
bkJhc2UoKnAsIGJhc2UpKSB7CiAgICAgICAgIGxlbmd0aC0tOwogICAgICAgICBJbnRlZ3JhbFR5
cGUgZGlnaXRWYWx1ZTsKLSAgICAgICAgaW50IGMgPSBwLT51bmljb2RlKCk7Ci0gICAgICAgIGlm
IChpc2RpZ2l0KGMpKQorICAgICAgICA6OlVDaGFyIGMgPSBwLT51bmljb2RlKCk7CisgICAgICAg
IGlmIChpc0FTQ0lJRGlnaXQoYykpCiAgICAgICAgICAgICBkaWdpdFZhbHVlID0gYyAtICcwJzsK
ICAgICAgICAgZWxzZSBpZiAoYyA+PSAnYScpCiAgICAgICAgICAgICBkaWdpdFZhbHVlID0gYyAt
ICdhJyArIDEwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmgJKHJldmlzaW9u
IDI2NjM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTEgKzI3LDkgQEAKICNkZWZpbmUgRGVw
cmVjYXRlZFN0cmluZ19oCiAKICNpbmNsdWRlICJEZXByZWNhdGVkQ1N0cmluZy5oIgotCisjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CiAKLSNpbmNsdWRlIDxjdHlwZS5oPgotCiAvKiBPbiBzb21lIEFSTSBwbGF0Zm9ybXMgR0NDIHdv
bid0IHBhY2sgc3RydWN0dXJlcyBieSBkZWZhdWx0IHNvIHNpemVvZihEZXByZWNhdGVkQ2hhcikK
ICAgIHdpbGwgZW5kIHVwIGJlaW5nICE9IDIgd2hpY2ggY2F1c2VzIGNyYXNoZXMgc2luY2UgdGhl
IGNvZGUgZGVwZW5kcyBvbiB0aGF0LiAqLwogI2lmIENPTVBJTEVSKEdDQykgJiYgUExBVEZPUk0o
Rk9SQ0VfUEFDSykKQEAgLTEyMyw3ICsxMjEsNyBAQCBpbmxpbmUgYm9vbCBEZXByZWNhdGVkQ2hh
cjo6aXNTcGFjZSgpIGNvCiAjaWYgVVNFKElDVV9VTklDT0RFKQogICAgIC8vIFVzZSBpc3NwYWNl
KCkgZm9yIGJhc2ljIExhdGluLTEuCiAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgbmV3bGluZXMs
IHdoaWNoIGFyZW4ndCBpbmNsdWRlZCBpbiB1bmljb2RlIERpcldTLgotICAgIHJldHVybiBjIDw9
IDB4N0YgPyBpc3NwYWNlKGMpIDogKHVfY2hhckRpcmVjdGlvbihjKSA9PSBVX1dISVRFX1NQQUNF
X05FVVRSQUwpOworICAgIHJldHVybiBjIDw9IDB4N0YgPyBXVEY6OmlzQVNDSUlTcGFjZShjKSA6
ICh1X2NoYXJEaXJlY3Rpb24oYykgPT0gVV9XSElURV9TUEFDRV9ORVVUUkFMKTsKICNlbGlmIFVT
RShRVDRfVU5JQ09ERSkKICAgICByZXR1cm4gUUNoYXIoYykuaXNTcGFjZSgpOwogI2VuZGlmCkBA
IC0xMzMsNyArMTMxLDcgQEAgaW5saW5lIERlcHJlY2F0ZWRDaGFyIERlcHJlY2F0ZWRDaGFyOjps
bwogewogI2lmIFVTRShJQ1VfVU5JQ09ERSkKICAgICAvLyBGSVhNRTogSWYgZmFzdCBlbm91Z2gs
IHdlIHNob3VsZCBqdXN0IGNhbGwgdV90b2xvd2VyIGRpcmVjdGx5LgotICAgIHJldHVybiBjIDw9
IDB4N0YgPyB0b2xvd2VyKGMpIDogdV90b2xvd2VyKGMpOworICAgIHJldHVybiBjIDw9IDB4N0Yg
PyBXVEY6OnRvQVNDSUlMb3dlcihjKSA6IHVfdG9sb3dlcihjKTsKICNlbGlmIFVTRShRVDRfVU5J
Q09ERSkKICAgICByZXR1cm4gUUNoYXIoYykudG9Mb3dlcigpLnVuaWNvZGUoKTsKICNlbmRpZgpA
QCAtMTQzLDcgKzE0MSw3IEBAIGlubGluZSBEZXByZWNhdGVkQ2hhciBEZXByZWNhdGVkQ2hhcjo6
dXAKIHsKICNpZiBVU0UoSUNVX1VOSUNPREUpCiAgICAgLy8gRklYTUU6IElmIGZhc3QgZW5vdWdo
LCB3ZSBzaG91bGQganVzdCBjYWxsIHVfdG91cHBlciBkaXJlY3RseS4KLSAgICByZXR1cm4gYyA8
PSAweDdGID8gdG91cHBlcihjKSA6IHVfdG91cHBlcihjKTsKKyAgICByZXR1cm4gYyA8PSAweDdG
ID8gV1RGOjp0b0FTQ0lJVXBwZXIoYykgOiB1X3RvdXBwZXIoYyk7CiAjZWxpZiBVU0UoUVQ0X1VO
SUNPREUpCiAgICAgcmV0dXJuIFFDaGFyKGMpLnRvVXBwZXIoKS51bmljb2RlKCk7CiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMjY2MzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tV
UkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjZW5kaWYKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMTAzMCw3ICsxMDMxLDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1
cmwsIGNvbnN0IAogIAogICAgICAgICAgICAgLy8gcG9zc2libGUgc3RhcnQgb2YgcG9ydAogICAg
ICAgICAgICAgcG9ydEVuZCA9IHBvcnRTdGFydDsKLSAgICAgICAgICAgIHdoaWxlIChpc2RpZ2l0
KHVybFtwb3J0RW5kXSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQodXJsW3Bv
cnRFbmRdKSkgewogICAgICAgICAgICAgICAgIHBvcnRFbmQrKzsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nSW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMjY2
MzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYWNlKFVDaGFyIGMpCiB7CiAg
ICAgLy8gVXNlIGlzc3BhY2UoKSBmb3IgYmFzaWMgTGF0aW4tMS4KICAgICAvLyBUaGlzIHdpbGwg
aW5jbHVkZSBuZXdsaW5lcywgd2hpY2ggYXJlbid0IGluY2x1ZGVkIGluIHVuaWNvZGUgRGlyV1Mu
Ci0gICAgcmV0dXJuIGMgPD0gMHg3RiA/IGlzc3BhY2UoYykgOiBkaXJlY3Rpb24oYykgPT0gV2hp
dGVTcGFjZU5ldXRyYWw7CisgICAgcmV0dXJuIGMgPD0gMHg3RiA/IGlzQVNDSUlTcGFjZShjKSA6
IGRpcmVjdGlvbihjKSA9PSBXaGl0ZVNwYWNlTmV1dHJhbDsKIH0gICAgCiAgICAgCiBzdGF0aWMg
aW5saW5lIFVDaGFyKiBuZXdVQ2hhclZlY3Rvcih1bnNpZ25lZCBuKQpAQCAtMjU3LDcgKzI1Nyw3
IEBAIGJvb2wgU3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgKICAgICAvLyB0aGUg
ImxlbiIgcGFyYW1ldGVyIG1lYW5zIGFyZSBkaWZmZXJlbnQgaGVyZSBmcm9tIHdoYXQncyBkb25l
IGluIFJlbmRlclRleHQuCiAgICAgLy8gRklYTUU6IE5vIHJhbmdlIGNoZWNraW5nIGhlcmUuCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbTsgaSA8IGxlbjsgaSsrKQotICAgICAgICBpZiAobV9k
YXRhW2ldID4gMHg3RiB8fCAhaXNzcGFjZShtX2RhdGFbaV0pKQorICAgICAgICBpZiAobV9kYXRh
W2ldID4gMHg3RiB8fCAhaXNBU0NJSVNwYWNlKG1fZGF0YVtpXSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zODksMTAgKzM4OSw3IEBAIGJvb2wg
U3RyaW5nSW1wbDo6aXNMb3dlcigpIGNvbnN0CiAgICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyBpKyspIHsKICAgICAgICAgVUNoYXIgYyA9
IG1fZGF0YVtpXTsKLSAgICAgICAgLy8gVGhlIGlzbG93ZXIgZnVuY3Rpb24gaXMgb25seSBndWFy
YW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGFuZCAKLSAgICAgICAgLy8gaW4gYSBsb2NhbGUtaW5k
ZXBlbmRlbnQgZmFzaGlvbiBmb3IgQVNDSUkgY2hhcmFjdGVycy4gV2UgbWFzawotICAgICAgICAv
LyB0byBndWFyYW50ZWUgd2UgZG9uJ3QgcGFzcyBhbnkgbm9uLUFTQ0lJIHZhbHVlcyBpbi4KLSAg
ICAgICAgYWxsTG93ZXIgPSBhbGxMb3dlciAmJiBpc2xvd2VyKGMgJiAweDdGKTsKKyAgICAgICAg
YWxsTG93ZXIgPSBhbGxMb3dlciAmJiBpc0FTQ0lJTG93ZXIoYyk7CiAgICAgICAgIG9yZWQgfD0g
YzsKICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKQEAgLTQyNiwxMCArNDIzLDcgQEAg
U3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6bG93ZXIoKSBjb25zdAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKICAgICAg
ICAgb3JlZCB8PSBjOwotICAgICAgICAvLyBUaGUgdG9sb3dlciBmdW5jdGlvbiBpcyBvbmx5IGd1
YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgYW5kIAotICAgICAgICAvLyBpbiBhIGxvY2FsZS1p
bmRlcGVuZGVudCBmYXNoaW9uIGZvciBBU0NJSSBjaGFyYWN0ZXJzLiBXZSBtYXNrCi0gICAgICAg
IC8vIHRvIGd1YXJhbnRlZSB3ZSBkb24ndCBwYXNzIGFueSBub24tQVNDSUkgdmFsdWVzIGluLgot
ICAgICAgICBkYXRhW2ldID0gdG9sb3dlcihjICYgMHg3Rik7CisgICAgICAgIGRhdGFbaV0gPSB0
b0FTQ0lJTG93ZXIoYyk7CiAgICAgfQogICAgIGlmICghKG9yZWQgJiB+MHg3RikpCiAgICAgICAg
IHJldHVybiBjOwpAQCAtODEzLDggKzgwNyw4IEBAIGludCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0
IFN0cmluZ0ltcGwqIHMKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbHN0cjsgaSsrICkgewotICAgICAgICAgICAgaHRoaXMgKz0gdG9sb3dlcih1
dGhpc1tpXSk7Ci0gICAgICAgICAgICBoc3RyICs9IHRvbG93ZXIodXN0cltpXSk7CisgICAgICAg
ICAgICBodGhpcyArPSB0b0FTQ0lJTG93ZXIodXRoaXNbaV0pOworICAgICAgICAgICAgaHN0ciAr
PSB0b0FTQ0lJTG93ZXIodXN0cltpXSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGkgPSAwOwog
ICAgICAgICB3aGlsZSAoMSkgewpAQCAtODIyLDggKzgxNiw4IEBAIGludCBTdHJpbmdJbXBsOjpm
aW5kKGNvbnN0IFN0cmluZ0ltcGwqIHMKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggKyBp
OwogICAgICAgICAgICAgaWYgKGkgPT0gZGVsdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICAgICAgaHRoaXMgKz0gdG9sb3dlcih1dGhpc1tpICsgbHN0cl0pOwotICAgICAg
ICAgICAgaHRoaXMgLT0gdG9sb3dlcih1dGhpc1tpXSk7CisgICAgICAgICAgICBodGhpcyArPSB0
b0FTQ0lJTG93ZXIodXRoaXNbaSArIGxzdHJdKTsKKyAgICAgICAgICAgIGh0aGlzIC09IHRvQVND
SUlMb3dlcih1dGhpc1tpXSk7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KICAgICB9CkBA
IC04ODUsOCArODc5LDggQEAgaW50IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKGNvbnN0IFN0cmlu
ZwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxzdHI7
IGkrKykgewotICAgICAgICAgICAgaHRoaXMgKz0gdG9sb3dlcih1dGhpc1tpbmRleCArIGldKTsK
LSAgICAgICAgICAgIGhzdHIgKz0gdG9sb3dlcih1c3RyW2ldKTsKKyAgICAgICAgICAgIGh0aGlz
ICs9IHRvQVNDSUlMb3dlcih1dGhpc1tpbmRleCArIGldKTsKKyAgICAgICAgICAgIGhzdHIgKz0g
dG9BU0NJSUxvd2VyKHVzdHJbaV0pOwogICAgICAgICB9CiAgICAgICAgIGkgPSBpbmRleDsKICAg
ICAgICAgd2hpbGUgKDEpIHsKQEAgLTg5NSw4ICs4ODksOCBAQCBpbnQgU3RyaW5nSW1wbDo6cmV2
ZXJzZUZpbmQoY29uc3QgU3RyaW5nCiAgICAgICAgICAgICBpZiAoaSA9PSAwKQogICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGh0aGlzIC09
IHRvbG93ZXIodXRoaXNbaSArIGxzdHJdKTsKLSAgICAgICAgICAgIGh0aGlzICs9IHRvbG93ZXIo
dXRoaXNbaV0pOworICAgICAgICAgICAgaHRoaXMgLT0gdG9BU0NJSUxvd2VyKHV0aGlzW2kgKyBs
c3RyXSk7CisgICAgICAgICAgICBodGhpcyArPSB0b0FTQ0lJTG93ZXIodXRoaXNbaV0pOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtMTA4NSwxNiArMTA3OSwxMiBAQCBib29sIGVxdWFsSWdu
b3JpbmdDYXNlKGNvbnN0IFN0cmluZ0ltcGwqCiAgICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgYm9v
bCBlcXVhbCA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsr
aSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKKyAgICAgICAgY2hhciBiYyA9
IGJbaV07CiAgICAgICAgIGlmICghYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIFVDaGFyIGFjID0gYXNbaV07CiAgICAgICAgIG9yZWQgfD0gYWM7Ci0gICAgICAgIC8vIFRo
ZSB0b2xvd2VyIGZ1bmN0aW9uIGlzIG9ubHkgZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBh
bmQgCi0gICAgICAgIC8vIGluIGEgbG9jYWxlLWluZGVwZW5kZW50IGZhc2hpb24gZm9yIEFTQ0lJ
IGNoYXJhY3RlcnMuIFdlIG1hc2sKLSAgICAgICAgLy8gdG8gZ3VhcmFudGVlIHdlIGRvbid0IHBh
c3MgYW55IG5vbi1BU0NJSSB2YWx1ZXMgaW4uCi0gICAgICAgIEFTU0VSVCghKGJjICYgfjB4N0Yp
KTsKLSAgICAgICAgZXF1YWwgPSBlcXVhbCAmJiAodG9sb3dlcihhYyAmIDB4N0YpID09IHRvbG93
ZXIoYmMpKTsKKyAgICAgICAgZXF1YWwgPSBlcXVhbCAmJiAodG9BU0NJSUxvd2VyKGFjKSA9PSB0
b0FTQ0lJTG93ZXIoYmMpKTsKICAgICB9CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRh
dGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI2NjM3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlRleHRDb2RlY0xhdGluMS5oIgogI2luY2x1ZGUgIlRleHRDb2RlY1VURjE2LmgiCi0j
aW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIApAQCAtNDMsNiAr
NDMsOCBAQAogI2luY2x1ZGUgInF0L1RleHRDb2RlY1F0LmgiCiAjZW5kaWYKIAordXNpbmcgbmFt
ZXNwYWNlIFdURjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBzaXplX3QgbWF4RW5j
b2RpbmdOYW1lTGVuZ3RoID0gNjM7CkBAIC02NCwxMSArNjYsMTEgQEAgc3RydWN0IFRleHRFbmNv
ZGluZ05hbWVIYXNoIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgZG8KICAgICAgICAgICAg
ICAgICBjMSA9ICpzMSsrOwotICAgICAgICAgICAgd2hpbGUgKGMxICYmICFpc2FsbnVtKGMxKSk7
CisgICAgICAgICAgICB3aGlsZSAoYzEgJiYgIWlzQVNDSUlBbHBoYW51bWVyaWMoYzEpKTsKICAg
ICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAgYzIgPSAqczIrKzsKLSAgICAgICAgICAgIHdo
aWxlIChjMiAmJiAhaXNhbG51bShjMikpOwotICAgICAgICAgICAgaWYgKHRvbG93ZXIoYzEpICE9
IHRvbG93ZXIoYzIpKQorICAgICAgICAgICAgd2hpbGUgKGMyICYmICFpc0FTQ0lJQWxwaGFudW1l
cmljKGMyKSk7CisgICAgICAgICAgICBpZiAodG9BU0NJSUxvd2VyKGMxKSAhPSB0b0FTQ0lJTG93
ZXIoYzIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSB3aGlsZSAo
YzEgJiYgYzIpOwogICAgICAgICByZXR1cm4gIWMxICYmICFjMjsKQEAgLTkwLDggKzkyLDggQEAg
c3RydWN0IFRleHRFbmNvZGluZ05hbWVIYXNoIHsKICAgICAgICAgICAgICAgICAgICAgaCArPSAo
aCA8PCAxNSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gd2hpbGUgKCFpc2FsbnVtKGMpKTsKLSAgICAgICAgICAgIGggKz0g
dG9sb3dlcihjKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCFpc0FTQ0lJQWxwaGFudW1lcmljKGMp
KTsKKyAgICAgICAgICAgIGggKz0gdG9BU0NJSUxvd2VyKGMpOwogICAgICAgICAgICAgaCArPSAo
aCA8PCAxMCk7IAogICAgICAgICAgICAgaCBePSAoaCA+PiA2KTsgCiAgICAgICAgIH0KQEAgLTIx
OCw3ICsyMjAsNyBAQCBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOCiAg
ICAgc2l6ZV90IGogPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmIChpc2FsbnVt
KGMpKSB7CisgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGMpKSB7CiAgICAgICAgICAg
ICBpZiAoaiA9PSBtYXhFbmNvZGluZ05hbWVMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICBidWZmZXJbaisrXSA9IGM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9LZXlFdmVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9L
ZXlFdmVudE1hYy5tbQkocmV2aXNpb24gMjY2MzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9L
ZXlFdmVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2
ICsyNyw5IEBACiAjaW1wb3J0ICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAogI2ltcG9ydCAi
TG9nZ2luZy5oIgorI2ltcG9ydCA8d3RmL0FTQ0lJQ1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMjIsNyArMzI1LDcgQEAgc3RhdGlj
IFN0cmluZyBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoTgogICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCB1c2Ugc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIHZlbmRvci1hcmVhIFVuaWNv
ZGUgdmFsdWVzIGZvciB0aGUgYWJvdmUga2V5cy4KICAgICAgICAgICAgIC8vIEZvciBub3csIGp1
c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0LgogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b3VwcGVyKGMpKTsKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKGMpKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAJKHJldmlz
aW9uIDI2NjM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjUsMjAgKzI1LDI0IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+
CiAKLSNkZWZpbmUgUkVQRUFUX0NPVU5UX01BU0sgICAgICAgICAgIDB4MDAwMEZGRkYKLSNkZWZp
bmUgTkVXX1JFTEVBU0VfU1RBVEVfTUFTSyAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUFJFVklP
VVNfRE9XTl9TVEFURV9NQVNLICAgIDB4NDAwMDAwMDAKKyNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAotI2RlZmluZSBISUdIX0JJVF9NQVNLX1NIT1JU
ICAgICAgICAgMHg4MDAwCit1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBSRVBFQVRfQ09VTlRfTUFTSyA9IDB4MDAwMEZG
RkY7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTkVXX1JFTEVBU0VfU1RBVEVfTUFTSyA9IDB4ODAw
MDAwMDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgUFJFVklPVVNfRE9XTl9TVEFURV9NQVNLID0g
MHg0MDAwMDAwMDsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IEhJR0hfQklUX01BU0tf
U0hPUlQgPSAweDgwMDA7CisKIC8vIEZJWE1FOiBUaGlzIGlzIGluY29tcGxldGUuIFdlIGNvdWxk
IGNoYW5nZSB0aGlzIHRvIG1pcnJvcgogLy8gbW9yZSBsaWtlIHdoYXQgRmlyZWZveCBkb2VzLCBh
bmQgZ2VuZXJhdGUgdGhlc2Ugc3dpdGNoIHN0YXRlbWVudHMKIC8vIGF0IGJ1aWxkIHRpbWUuCi1z
dGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JXaW5kb3dzS2V5Q29kZShzaG9ydCBrZXlDb2Rl
KQorc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yV2luZG93c0tleUNvZGUodW5zaWduZWQg
c2hvcnQga2V5Q29kZSkKIHsKICAgICBzd2l0Y2ggKGtleUNvZGUpIHsKICAgICAgICAgY2FzZSBW
S19NRU5VOgpAQCAtMTI5LDcgKzEzMyw3IEBAIHN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZv
cldpbmRvd3NLZXkKICAgICAgICAgY2FzZSBWS19ERUxFVEU6CiAgICAgICAgICAgICByZXR1cm4g
IlUrMDA3RiI7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpm
b3JtYXQoIlUrJTA0WCIsIHRvdXBwZXIoa2V5Q29kZSkpOworICAgICAgICAgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoa2V5Q29kZSkpOwogICAgIH0KIH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiAyNjYz
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDYgKzU5LDEyIEBAIHN0YXRpYyBMUENUU1RSIGtQb3B1cFdpbmRvd0NsYXNzTmFt
ZSA9IF8KIHN0YXRpYyBBVE9NIHJlZ2lzdGVyUG9wdXAoKTsKIHN0YXRpYyBMUkVTVUxUIENBTExC
QUNLIFBvcHVwV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAKKy8vIEZJWE1F
OiBSZW1vdmUgdGhpcyBhcyBzb29uIGFzIHByYWN0aWNhbC4KK3N0YXRpYyBpbmxpbmUgYm9vbCBp
c0FTQ0lJUHJpbnRhYmxlKHVuc2lnbmVkIGMpCit7CisgICAgcmV0dXJuIGMgPj0gMHgyMCAmJiBj
IDw9IDB4N0U7Cit9CisKIFBvcHVwTWVudTo6UG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xp
ZW50KQogICAgIDogbV9wb3B1cENsaWVudChjbGllbnQpCiAgICAgLCBtX3Njcm9sbEJhcigwKQpA
QCAtNjczLDcgKzY3OSw3IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBvcHVwV25kUHJvYyhI
V04KICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLT5jbGllbnQoKS0+aGlkZVBvcHVwKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3ByaW50KDo6TWFwVmlydHVhbEtl
eShMT1dPUkQod1BhcmFtKSwgMikpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVND
SUlQcmludGFibGUoOjpNYXBWaXJ0dWFsS2V5KExPV09SRCh3UGFyYW0pLCAyKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCB0aGUga2V5ZG93biB0byB0aGUgV2ViVmlldyBz
byBpdCBjYW4gYmUgdXNlZCBmb3IgdHlwZS1haGVhZCBmaW5kCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOjpTZW5kTWVzc2FnZShwb3B1cC0+Y2xpZW50KCktPmNsaWVudERvY3VtZW50KCkt
PnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
Vmlld1dpbi5jcHAJKHJldmlzaW9uIDI2NjM3KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KICNpbmNsdWRlIDxranMv
dmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCiB1c2luZyBLSlM6OkV4ZWNT
dGF0ZTsKIHVzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7CkBAIC02Nyw2ICs2OCw4IEBAIHVzaW5nIEtK
Uzo6V2luZG93OwogCiB1c2luZyBzdGQ6Om1pbjsKIAordXNpbmcgbmFtZXNwYWNlIFdURjsKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKQEAgLTk0
Miw5ICs5NDUsOSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhCiAg
ICAgICAgIFVDaGFyIGM7CiAKICAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFt
ZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAgICAgICBjID0gdG91cHBlcihu
YW1lW2ldKTsKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtpXSk7CiAgICAgICAg
IGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVb
aV0gPD0gJ1onKQotICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFtZVtpXSk7CisgICAgICAgICAg
ICBjID0gdG9BU0NJSUxvd2VyKG5hbWVbaV0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBj
ID0gbmFtZVtpXTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDI2
NjM3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwNCw3ICs0MDQsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBSZW5kZXJUZXh0Ojp3aWR0aEZy
b21DCiAgICAgICAgICAgICAgICAgICAgIHcgKz0gdGFiV2lkdGggLSAoKHhQb3MgKyB3KSAlIHRh
YldpZHRoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHcgKz0g
bW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKGlzc3BhY2UoYykg
JiYgIWlzc3BhY2UocHJldmlvdXNDaGFyKSkKKyAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVNw
YWNlKGMpICYmICFpc0FTQ0lJU3BhY2UocHJldmlvdXNDaGFyKSkKICAgICAgICAgICAgICAgICAg
ICAgdyArPSBmLndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwcmV2
aW91c0NoYXIgPSBjOwpJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjYzOCkKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwNy0xMC0xNSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgLSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxOQorICAg
ICAgICAgIGVsaW1pbmF0ZSB1c2Ugb2YgPGN0eXBlLmg+IGZvciBwcm9jZXNzaW5nIEFTQ0lJCisK
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvQVNDSUlDVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvRGlzYWxsb3dDVHlwZS5oOiBBZGRlZC4KKwor
ICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06ICgtW05TVVJMIF93ZWJfVVJMV2l0aExv
d2VyY2FzZWRTY2hlbWVdKTogVXNlIHRvQVNDSUlMb3dlci4KKyAgICAgICAgKiBXZWJLaXRQcmVm
aXguaDogSW5jbHVkZSBEaXNhbGxvd0NUeXBlLmguCisgICAgICAgICogV2ViVmlldy9XZWJIVE1M
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY2FsbFdlYkNvcmVDb21tYW5kOl0pOiBV
c2UgdG9BU0NJSVVwcGVyLgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIGZp
bHRlcktleURvd246XSk6IEFkZCBhIGxpc3Qgb2Ygc3BlY2lmaWMgY2hhcmFjdGVyIGNvZGVzLAor
ICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nIGlzcHVuY3QuCisKIDIwMDctMTAtMTUgIEpvaG4gU3Vs
bGl2YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYg
R2FyZW4KSW5kZXg6IFdlYktpdC9XZWJLaXRQcmVmaXguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
V2ViS2l0UHJlZml4LmgJKHJldmlzaW9uIDI2NjM1KQorKysgV2ViS2l0L1dlYktpdFByZWZpeC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw4IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8d3RmL0Rpc2FsbG93Q1R5cGUuaD4KKwogLyogV29y
ayBhcm91bmQgYnVnIHdpdGggQysrIGxpYnJhcnkgdGhhdCBzY3Jld3MgdXAgT2JqZWN0aXZlLUMr
KyB3aGVuIGV4Y2VwdGlvbiBzdXBwb3J0IGlzIGRpc2FibGVkLiAqLwogI3VuZGVmIHRyeQogI3Vu
ZGVmIGNhdGNoCkluZGV4OiBXZWJLaXQvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0FTQ0lJQ1R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0FTQ0lJQ1R5cGUu
aAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQVNDSUlDVHlw
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
QVNDSUlDVHlwZS5oPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0L0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9BU0NJSUNUeXBlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViS2l0L0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EaXNhbGxvd0NUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EaXNhbGxvd0NU
eXBlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Rpc2Fs
bG93Q1R5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Rpc2FsbG93Q1R5cGUuaD4KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvRGlzYWxsb3dDVHlwZS5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVv
bC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYktpdC9NaXNjL1dlYk5TVVJMRXh0cmFzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAy
NjYzNSkKKysrIFdlYktpdC9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcs
MjYgKzI3LDI0IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgPFdlYktpdC9XZWJOU1VS
TEV4dHJhcy5oPgorI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKIAorI2ltcG9ydCAiV2ViS2l0
TlNTdHJpbmdFeHRyYXMuaCIKKyNpbXBvcnQgIldlYkxvY2FsaXphYmxlU3RyaW5ncy5oIgorI2lt
cG9ydCAiV2ViTlNEYXRhRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU09iamVjdEV4dHJhcy5oIgor
I2ltcG9ydCAiV2ViU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJM
UmVxdWVzdC5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8V2ViS2l0L1dlYktpdE5TU3RyaW5nRXh0cmFzLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViTlNE
YXRhRXh0cmFzLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViTlNPYmplY3RFeHRyYXMuaD4KLSNpbXBv
cnQgPFdlYktpdC9XZWJMb2NhbGl6YWJsZVN0cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvS1VS
TC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJOU1VSTEV4dHJhcy5oPgotCiAjaW1wb3J0IDxX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVxdWVzdC5oPgotCiAjaW1wb3J0IDx1bmljb2Rl
L3VjaGFyLmg+CiAjaW1wb3J0IDx1bmljb2RlL3VpZG5hLmg+CiAjaW1wb3J0IDx1bmljb2RlL3Vz
Y3JpcHQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiB0eXBlZGVmIHZvaWQgKCogU3RyaW5nUmFuZ2VBcHBsaWVyRnVuY3Rpb24pKE5TU3RyaW5n
ICpzdHJpbmcsIE5TUmFuZ2UgcmFuZ2UsIHZvaWQgKmNvbnRleHQpOwogCkBAIC02MDQsOCArNjAy
LDggQEAgdHlwZWRlZiBzdHJ1Y3QgewogICAgIGludCBpOwogICAgIEJPT0wgY2hhbmdlZCA9IE5P
OwogICAgIGZvciAoaSA9IDA7IGkgPCByYW5nZS5sZW5ndGg7ICsraSkgewotICAgICAgICBVSW50
OCBjID0gYnVmZmVyW3JhbmdlLmxvY2F0aW9uICsgaV07Ci0gICAgICAgIFVJbnQ4IGxvd2VyID0g
dG9sb3dlcihjKTsKKyAgICAgICAgY2hhciBjID0gYnVmZmVyW3JhbmdlLmxvY2F0aW9uICsgaV07
CisgICAgICAgIGNoYXIgbG93ZXIgPSB0b0FTQ0lJTG93ZXIoYyk7CiAgICAgICAgIGlmIChjICE9
IGxvd2VyKSB7CiAgICAgICAgICAgICBidWZmZXJbcmFuZ2UubG9jYXRpb24gKyBpXSA9IGxvd2Vy
OwogICAgICAgICAgICAgY2hhbmdlZCA9IFlFUzsKSW5kZXg6IFdlYktpdC9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShy
ZXZpc2lvbiAyNjYzNSkKKysrIFdlYktpdC9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogQGludGVy
ZmFjZSBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKIC0gKE5TVmlldyopX3dlYl9ib3JkZXJW
aWV3OwpAQCAtMjA3MCw3ICsyMDcxLDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZU1vdXNlb3ZlclRp
bWVyQ2FsbGJhYwogICAgIEFTU0VSVChzZWxlY3Rvck5hbWVMZW5ndGggPj0gMik7CiAgICAgQVNT
RVJUKHNlbGVjdG9yTmFtZVtzZWxlY3Rvck5hbWVMZW5ndGggLSAxXSA9PSAnOicpOwogICAgIFZl
Y3RvcjxjaGFyLCAyNTY+IGNvbW1hbmROYW1lKHNlbGVjdG9yTmFtZUxlbmd0aCAtIDEgKyAxKTsK
LSAgICBjb21tYW5kTmFtZVswXSA9IHRvdXBwZXIoc2VsZWN0b3JOYW1lWzBdKTsKKyAgICBjb21t
YW5kTmFtZVswXSA9IHRvQVNDSUlVcHBlcihzZWxlY3Rvck5hbWVbMF0pOwogICAgIG1lbWNweSgm
Y29tbWFuZE5hbWVbMV0sICZzZWxlY3Rvck5hbWVbMV0sIHNlbGVjdG9yTmFtZUxlbmd0aCAtIDIp
OwogICAgIGNvbW1hbmROYW1lW3NlbGVjdG9yTmFtZUxlbmd0aCAtIDFdID0gMDsKIApAQCAtNTk0
MiwxMCArNTk0MywxMCBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0
CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBOU0xlZnRBcnJvd0Z1bmN0aW9uS2V5KSB7CiAgICAg
ICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6WUVTXTsKICAgICAg
ICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAweDFiIHx8IGMgPT0g
TlNGNUZ1bmN0aW9uS2V5KSB7CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAweDFCIHx8IGMgPT0g
TlNGNUZ1bmN0aW9uS2V5KSB7CiAgICAgICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6
WUVTIG1vdmVMZWZ0Ok5PXTsKICAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoYyA9PSAnICcgfHwgaXNwdW5jdChjKSkgeworICAgICAgICB9IGVsc2UgaWYgKGMgPT0g
JyAnIHx8IGMgPj0gMHgyMSAmJiBjIDw9IDB4MkYgfHwgYyA+PSAweDNBICYmIGMgPD0gMHg0MCB8
fCBjID49IDB4NUIgJiYgYyA8PSAweDYwIHx8IGMgPj0gMHg3QiAmJiBjIDw9IDB4N0QpIHsKICAg
ICAgICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CiAgICAg
ICAgICAgICByZXR1cm4gTk87ICAvLyBsZXQgdGhlIGNoYXIgZ2V0IGluc2VydGVkCiAgICAgICAg
IH0K
</data>
<flag name="review"
          id="7049"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>