<?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>6310</bug_id>
          
          <creation_ts>2005-12-31 07:12:04 -0800</creation_ts>
          <short_desc>text-transform: uppercase/lowercase don&apos;t handle cases one character becomes two</short_desc>
          <delta_ts>2006-05-11 11:32:11 -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>CSS</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>darin</cc>
    
    <cc>julian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>27302</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-31 07:12:04 -0800</bug_when>
    <thetext>WebCore uppercases and lowercases strings character-by-character, which leads to multiple problems 
with non-ASCII strings. Firefox and Opera are no better at this, but that&apos;s probably not something that 
should be copied from them.

To be really advanced, WebCore should not just transform entire strings, but take the language into 
account (Turkish &apos;i&apos; is the usual example here). However, with :lang being unimplemented (bug 3233), that 
probably has to wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27303</commentid>
    <comment_count>1</comment_count>
      <attachid>5396</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-31 07:12:29 -0800</bug_when>
    <thetext>Created attachment 5396
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27305</commentid>
    <comment_count>2</comment_count>
      <attachid>5397</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-31 07:26:49 -0800</bug_when>
    <thetext>Created attachment 5397
test case

Added Latin ligatures ffi and IJ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27506</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-02 14:41:15 -0800</bug_when>
    <thetext>I don&apos;t think lower() and upper() in DOMString are really to blame here. We won&apos;t usually have the entire 
string we want to upper or lower-case in a DOMString -- words can be split over many separate DOM 
nodes and have a mix of styles. So proper implementation of a more sophisticated upper and lowercasing 
algorithm would probably not affect lower() and upper() at all.

Hence this bug should be retitled to describe the symptom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27507</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-02 14:41:43 -0800</bug_when>
    <thetext>I suggest listing the Turkish &quot;i&quot; in a separate bug, since the issue is different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27517</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-02 16:15:37 -0800</bug_when>
    <thetext>As for DOMString::lower()/upper(), one possible solution could be to dumb it down even further, to handle 
only ASCII text (since it&apos;s mostly used for tag canonicalization). Then, it could be renamed to something 
like asciiLower(), as a warning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29273</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-21 11:36:32 -0800</bug_when>
    <thetext>I like the idea of dumbing lower/upper down and changing their names.

Then we can create functions that take a language parameter and do the right thing, even for the Turkish, and handle cases where the number of characters changes when you change case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29274</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-21 11:45:05 -0800</bug_when>
    <thetext>The ICU functions for this are:

    u_strToLower
    u_strToUpper
    u_strToTitle

I think we can fix a lot of problems if we change things so that text transforms use these functions, either directly or through DOMString functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30515</commentid>
    <comment_count>8</comment_count>
      <attachid>6071</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-29 07:17:51 -0800</bug_when>
    <thetext>Created attachment 6071
dumb down lower() and upper()

I have tried dumbing down lower() and upper() (and equalIgnoringCase(), for that matter), but there are too many cases where I&apos;m not sure what to do. The attached patch has changes that seemed safe to me (although I woudn&apos;t be able to prove even their correctness for functions like getNamedItemNS() or parseMappedAttribute()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38786</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-04-08 10:33:08 -0700</bug_when>
    <thetext>KXMLCore::Unicode has some smarter functions for upper/lowercasing now, perhaps they can be reused in WebCore (no locale support yet, though).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41622</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-05-09 10:51:04 -0700</bug_when>
    <thetext>*** Bug 8805 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41625</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-09 11:23:30 -0700</bug_when>
    <thetext>My QChar -&gt; UChar patch is going to fix this &quot;as a side effect&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41808</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-09 21:55:38 -0700</bug_when>
    <thetext>The test case attached here did not match the bug report. The test case was testing &quot;capitalize&quot; but the bug report mentions &quot;uppercase&quot; and &quot;lowercase&quot;.

I fixed uppercase and lowercase in a recent patch, and I added a test case based on the one here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41815</commentid>
    <comment_count>13</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-05-09 22:54:07 -0700</bug_when>
    <thetext>Landed in r14273.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41966</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-05-10 22:37:21 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; The test case attached here did not match the bug report. The test case was
&gt; testing &quot;capitalize&quot; but the bug report mentions &quot;uppercase&quot; and &quot;lowercase&quot;.

Mea culpa. Capitalize also appears to be broken; I&apos;ll file a separate bug for it.

&gt; I fixed uppercase and lowercase in a recent patch, and I added a test case
&gt; based on the one here.

There&apos;s still a minor bug in the landed test case - the expected result for &quot;IJ&quot; is incorrect, although it looks the same. The actual/correct result is a ligature &quot;ij&quot;, not two separate characters.

As a reminder to myself, I&apos;m seeing an assertion failure when selecting text in the test, should investigate and file a bug:
/Users/ap/WebKit/WebCore/dom/Position.cpp:341: failed assertion `currentOffset &gt;= renderer-&gt;caretMaxOffset()&apos;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42022</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-05-11 11:32:11 -0700</bug_when>
    <thetext>Filed bug 8854, bug 8855.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5396</attachid>
            <date>2005-12-31 07:12:29 -0800</date>
            <delta_ts>2005-12-31 07:26:49 -0800</delta_ts>
            <desc>test case</desc>
            <filename>case-transform.html</filename>
            <type>text/html</type>
            <size>665</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+CjwvaGVhZD4KPGJvZHk+CjxwPmxvd2VyKEHwkJCAKSA9
IDxzcGFuIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2UiPkHwkJCAPC9zcGFuPiAoc2hv
dWxkIGJlIGHwkJCoKTwvcD4KPHA+dXBwZXIoYfCQkKgpID0gPHNwYW4gc3R5bGU9InRleHQtdHJh
bnNmb3JtOmNhcGl0YWxpemUiPmHwkJCoPC9zcGFuPiAoc2hvdWxkIGJlIEHwkJCAKTwvcD4KPHA+
bG93ZXIozprOn86jzpzOn86jKSA9IDxzcGFuIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTpsb3dlcmNh
c2UiPs6azp/Oo86czp/Oozwvc3Bhbj4gKHNob3VsZCBiZSDOus6/z4POvM6/z4IpPC9wPgo8cD51
cHBlcijDnykgPSA8c3BhbiBzdHlsZT0idGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZSI+w588L3Nw
YW4+IChzaG91bGQgYmUgU1MpPC9wPgo8cD51cHBlcijFiSkgPSA8c3BhbiBzdHlsZT0idGV4dC10
cmFuc2Zvcm06Y2FwaXRhbGl6ZSI+xYk8L3NwYW4+IChzaG91bGQgYmUgyrxOKTwvcD4KPHA+dXBw
ZXIox7ApID0gPHNwYW4gc3R5bGU9InRleHQtdHJhbnNmb3JtOmNhcGl0YWxpemUiPsewPC9zcGFu
PiAoc2hvdWxkIGJlIErMjCk8L3A+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5397</attachid>
            <date>2005-12-31 07:26:49 -0800</date>
            <delta_ts>2005-12-31 07:26:49 -0800</delta_ts>
            <desc>test case</desc>
            <filename>case-transform.html</filename>
            <type>text/html</type>
            <size>836</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+CjwvaGVhZD4KPGJvZHk+CjxwPmxvd2VyKEHwkJCAKSA9
IDxzcGFuIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2UiPkHwkJCAPC9zcGFuPiAoc2hv
dWxkIGJlIGHwkJCoKTwvcD4KPHA+dXBwZXIoYfCQkKgpID0gPHNwYW4gc3R5bGU9InRleHQtdHJh
bnNmb3JtOmNhcGl0YWxpemUiPmHwkJCoPC9zcGFuPiAoc2hvdWxkIGJlIEHwkJCAKTwvcD4KPHA+
bG93ZXIozprOn86jzpzOn86jKSA9IDxzcGFuIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTpsb3dlcmNh
c2UiPs6azp/Oo86czp/Oozwvc3Bhbj4gKHNob3VsZCBiZSDOus6/z4POvM6/z4IpPC9wPgo8cD51
cHBlcijDnykgPSA8c3BhbiBzdHlsZT0idGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZSI+w588L3Nw
YW4+IChzaG91bGQgYmUgU1MpPC9wPgo8cD51cHBlcijFiSkgPSA8c3BhbiBzdHlsZT0idGV4dC10
cmFuc2Zvcm06Y2FwaXRhbGl6ZSI+xYk8L3NwYW4+IChzaG91bGQgYmUgyrxOKTwvcD4KPHA+dXBw
ZXIox7ApID0gPHNwYW4gc3R5bGU9InRleHQtdHJhbnNmb3JtOmNhcGl0YWxpemUiPsewPC9zcGFu
PiAoc2hvdWxkIGJlIErMjCk8L3A+CjxwPnVwcGVyKO+sgykgPSA8c3BhbiBzdHlsZT0idGV4dC10
cmFuc2Zvcm06Y2FwaXRhbGl6ZSI+76yDPC9zcGFuPiAoc2hvdWxkIGJlIEZGSSk8L3A+CjxwPmxv
d2VyKMSyKSA9IDxzcGFuIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplIj7Esjwvc3Bh
bj4gKHNob3VsZCBiZSBpaik8L3A+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6071</attachid>
            <date>2006-01-29 07:17:51 -0800</date>
            <delta_ts>2006-01-29 07:17:51 -0800</delta_ts>
            <desc>dumb down lower() and upper()</desc>
            <filename>ASCIILower.txt</filename>
            <type>text/plain</type>
            <size>78934</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2RvbS9kb21fc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9kb20v
ZG9tX3N0cmluZy5jcHAJKHJldmlzaW9uIDEyNDUxKQorKysga2h0bWwvZG9tL2RvbV9zdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDIwIEBAIERPTVN0cmluZyBET01TdHJp
bmc6OnVwcGVyKCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLT51cHBlcigpOwogfQogCitET01T
dHJpbmcgRE9NU3RyaW5nOjphc2NpaUxvd2VyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1wbCkK
KyAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOworICAgIHJldHVybiBtX2ltcGwtPmFzY2lpTG93
ZXIoKTsKK30KKworRE9NU3RyaW5nIERPTVN0cmluZzo6YXNjaWlVcHBlcigpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKKyAgICByZXR1cm4g
bV9pbXBsLT5hc2NpaVVwcGVyKCk7Cit9CisKIGJvb2wgRE9NU3RyaW5nOjpwZXJjZW50YWdlKGlu
dCAmX3BlcmNlbnRhZ2UpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwgfHwgIW1faW1wbC0+bCkK
SW5kZXg6IGtodG1sL2RvbS9kb21fc3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZG9tL2Rv
bV9zdHJpbmcuaAkocmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9kb20vZG9tX3N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMiBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nIGxv
d2VyKCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHVwcGVyKCkgY29uc3Q7CiAKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGEgbG93ZXJjYXNlL3VwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcs
IG9ubHkgbW9kaWZ5aW5nIEFTQ0lJIGNoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBET01TdHJpbmcg
YXNjaWlMb3dlcigpIGNvbnN0OworICAgIERPTVN0cmluZyBhc2NpaVVwcGVyKCkgY29uc3Q7CisK
ICAgICBRQ2hhciAqdW5pY29kZSgpIGNvbnN0OwogICAgIFFTdHJpbmcgcXN0cmluZygpIGNvbnN0
OwogCkBAIC0xNDUsNiArMTUxLDEwIEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNv
bnN0IERPTVMKIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZyYg
YSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIp
OyB9CiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBE
T01TdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEsIGIuaW1wbCgpKTsgfQog
CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IERPTVN0cmluZyYgYSwg
Y29uc3QgRE9NU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuaW1w
bCgpLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29u
c3QgRE9NU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGEuaW1wbCgpLCBiKTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShjb25zdCBjaGFyKiBhLCBjb25zdCBET01TdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoYSwgYi5pbXBsKCkpOyB9CisKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBET01T
dHJpbmcmIGEsIGNvbnN0IFFTdHJpbmcmIGIpOwogaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29u
c3QgUVN0cmluZyYgYiwgY29uc3QgRE9NU3RyaW5nJiBhKSB7IHJldHVybiBhID09IGI7IH0KIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRE9NU3RyaW5nJiBhLCBjb25zdCBRU3RyaW5nJiBi
KSB7IHJldHVybiAhKGEgPT0gYik7IH0KSW5kZXg6IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5oCShyZXZpc2lvbiAxMjQ1
MSkKKysrIGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2
ICs4Nyw4IEBAIHB1YmxpYzoKICAgICBET01TdHJpbmdJbXBsKiBsb3dlcigpIGNvbnN0OwogICAg
IERPTVN0cmluZ0ltcGwqIHVwcGVyKCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nSW1wbCogY2FwaXRh
bGl6ZSgpIGNvbnN0OworICAgIERPTVN0cmluZ0ltcGwqIGFzY2lpTG93ZXIoKSBjb25zdDsKKyAg
ICBET01TdHJpbmdJbXBsKiBhc2NpaVVwcGVyKCkgY29uc3Q7CiAKICAgICBpbnQgZmluZChjb25z
dCBjaGFyICosIGludCBpbmRleCA9IDAsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0
OwogICAgIGludCBmaW5kKFFDaGFyLCBpbnQgaW5kZXggPSAwKSBjb25zdDsKQEAgLTEyNiw2ICsx
MjgsMTAgQEAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBET01TdHJpbmdJbQogYm9vbCBl
cXVhbElnbm9yaW5nQ2FzZShjb25zdCBET01TdHJpbmdJbXBsKiwgY29uc3QgY2hhciopOwogYm9v
bCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiwgY29uc3QgRE9NU3RyaW5nSW1wbCopOwog
Citib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgRE9NU3RyaW5nSW1wbCosIGNvbnN0
IERPTVN0cmluZ0ltcGwqKTsKK2Jvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBET01T
dHJpbmdJbXBsKiwgY29uc3QgY2hhciopOworYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNv
bnN0IGNoYXIqLCBjb25zdCBET01TdHJpbmdJbXBsKik7CisKIH0KIAogbmFtZXNwYWNlIEtYTUxD
b3JlIHsKSW5kZXg6IGtodG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGto
dG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjQ1MSkKKysrIGtodG1sL3htbC9E
b2N1bWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lk
IERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAKICAgICBGcmFtZSAqZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiZGVm
YXVsdC1zdHlsZSIpKSB7CisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZXF1aXYsICJk
ZWZhdWx0LXN0eWxlIikpIHsKICAgICAgICAgLy8gVGhlIHByZWZlcnJlZCBzdHlsZSBzZXQgaGFz
IGJlZW4gb3ZlcnJpZGRlbiBhcyBwZXIgc2VjdGlvbiAKICAgICAgICAgLy8gMTQuMy4yIG9mIHRo
ZSBIVE1MNC4wIHNwZWNpZmljYXRpb24uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUKICAgICAgICAg
Ly8gc2hlZXQgdXNlZCB2YXJpYWJsZSBhbmQgdGhlbiB1cGRhdGUgb3VyIHN0eWxlIHNlbGVjdG9y
LiAKQEAgLTE2MTIsNyArMTYxMiw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpwcm9jZXNzSHR0cEVx
dWl2KGNvbnMKICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0ID0gY29udGVudDsKICAg
ICAgICAgdXBkYXRlU3R5bGVTZWxlY3RvcigpOwogICAgIH0KLSAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShlcXVpdiwgInJlZnJlc2giKSAmJiBmcmFtZS0+bWV0YVJlZnJlc2hFbmFibGVk
KCkpCisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShlcXVpdiwgInJlZnJlc2gi
KSAmJiBmcmFtZS0+bWV0YVJlZnJlc2hFbmFibGVkKCkpCiAgICAgewogICAgICAgICAvLyBnZXQg
ZGVsYXkgYW5kIHVybAogICAgICAgICBRU3RyaW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygpLnN0
cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTY0NiwxOSArMTY0NiwxOSBAQCB2b2lkIERvY3VtZW50SW1w
bDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAgICAgICAgICAgICAgICAgZnJhbWUtPnNjaGVkdWxl
UmVkaXJlY3Rpb24oZGVsYXksIGNvbXBsZXRlVVJMKCBzdHIgKSwgZGVsYXkgPD0gMSk7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJleHBp
cmVzIikpCisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShlcXVpdiwgImV4cGly
ZXMiKSkKICAgICB7CiAgICAgICAgIFFTdHJpbmcgc3RyID0gY29udGVudC5xc3RyaW5nKCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIHRpbWVfdCBleHBpcmVfZGF0ZSA9IHN0ci50b0ludCgp
OwogICAgICAgICBpZiAobV9kb2NMb2FkZXIpCiAgICAgICAgICAgICBtX2RvY0xvYWRlci0+c2V0
RXhwaXJlRGF0ZShleHBpcmVfZGF0ZSk7CiAgICAgfQotICAgIGVsc2UgaWYgKChlcXVhbElnbm9y
aW5nQ2FzZShlcXVpdiwgInByYWdtYSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY2Fj
aGUtY29udHJvbCIpKSAmJiBmcmFtZSkKKyAgICBlbHNlIGlmICgoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShlcXVpdiwgInByYWdtYSIpIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZXF1aXYsICJj
YWNoZS1jb250cm9sIikpICYmIGZyYW1lKQogICAgIHsKLSAgICAgICAgUVN0cmluZyBzdHIgPSBj
b250ZW50LnFzdHJpbmcoKS5sb3dlcigpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBRU3Ry
aW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygpLmFzY2lpTG93ZXIoKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKICAgICAgICAgS1VSTCB1cmwgPSBmcmFtZS0+dXJsKCk7CiAgICAgfQotICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAic2V0LWNvb2tpZSIpKQorICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoZXF1aXYsICJzZXQtY29va2llIikpCiAgICAgewogICAgICAg
ICAvLyAjIyMgbWFrZSBzZXRDb29raWUgd29yayBvbiBYTUwgZG9jdW1lbnRzIHRvbzsgZS5nLiBp
biBjYXNlIG9mIDxodG1sOm1ldGEgLi4uLi4+CiAgICAgICAgIGlmIChpc0hUTUxEb2N1bWVudCgp
KQpJbmRleDoga2h0bWwveG1sL0RPTUltcGxlbWVudGF0aW9uSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2h0bWwveG1sL0RPTUltcGxlbWVudGF0aW9uSW1wbC5jcHAJKHJldmlzaW9uIDEyNDUxKQor
Kysga2h0bWwveG1sL0RPTUltcGxlbWVudGF0aW9uSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgRE9NSW1wbGVtZW50YXRpb25JbXBsOjp+RE9NSW1wbGVtZW50YXRpbwog
CiBib29sIERPTUltcGxlbWVudGF0aW9uSW1wbDo6aGFzRmVhdHVyZSAoY29uc3QgRE9NU3RyaW5n
ICZmZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24pIGNvbnN0CiB7Ci0gICAgRE9NU3Ry
aW5nIGxvd2VyID0gZmVhdHVyZS5sb3dlcigpOworICAgIERPTVN0cmluZyBsb3dlciA9IGZlYXR1
cmUuYXNjaWlMb3dlcigpOwogICAgIGlmIChsb3dlciA9PSAiY29yZSIgfHwgbG93ZXIgPT0gImh0
bWwiIHx8IGxvd2VyID09ICJ4bWwiIHx8IGxvd2VyID09ICJ4aHRtbCIpCiAgICAgICAgIHJldHVy
biB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJzaW9uID09ICIxLjAiIHx8IHZlcnNpb24gPT0gIjIu
MCI7CiAgICAgaWYgKGxvd2VyID09ICJjc3MiCkluZGV4OiBraHRtbC94bWwvTm9kZUltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9Ob2RlSW1wbC5jcHAJKHJldmlzaW9uIDEyNDUxKQor
Kysga2h0bWwveG1sL05vZGVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4Myw3ICsxNTgz
LDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdEltcGw+IE5vZGVJbXBsOjpnZXRFbAogICAgIAogICAg
IERPTVN0cmluZyBuYW1lID0gbG9jYWxOYW1lOwogICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hU
TUxEb2N1bWVudCgpKQotICAgICAgICBuYW1lID0gbG9jYWxOYW1lLmxvd2VyKCk7CisgICAgICAg
IG5hbWUgPSBsb2NhbE5hbWUuYXNjaWlMb3dlcigpOwogICAgIHJldHVybiBuZXcgVGFnTm9kZUxp
c3RJbXBsKHRoaXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLCBBdG9taWNTdHJpbmcobmFt
ZSkpOwogfQogCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBr
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQw
MSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudEltcGw6OmdldEF0dHIKIHsKICAgICBE
T01TdHJpbmcgbG4obG9jYWxOYW1lKTsKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSAmJiBnZXREb2N1
bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBsbiA9IGxvY2FsTmFtZS5sb3dlcigp
OworICAgICAgICBsbiA9IGxvY2FsTmFtZS5hc2NpaUxvd2VyKCk7CiAgICAgUXVhbGlmaWVkTmFt
ZSBuYW1lKG51bGxBdG9tLCBsbi5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpOwogICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUobmFtZSk7CiB9CkBAIC03ODEsNyArNzgxLDcgQEAgdm9pZCBFbGVt
ZW50SW1wbDo6c2V0QXR0cmlidXRlTlMoY29uc3QgRAogICAgIH0KIAogICAgIGlmIChnZXREb2N1
bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBsb2NhbE5hbWUgPSBsb2NhbE5hbWUu
bG93ZXIoKTsKKyAgICAgICAgbG9jYWxOYW1lID0gbG9jYWxOYW1lLmFzY2lpTG93ZXIoKTsKIAog
ICAgIHNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKHByZWZpeC5pbXBsKCksIGxvY2FsTmFtZS5p
bXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpLCB2YWx1ZS5pbXBsKCksIGV4Y2VwdGlvbik7CiB9
CkBAIC03OTAsNyArNzkwLDcgQEAgdm9pZCBFbGVtZW50SW1wbDo6cmVtb3ZlQXR0cmlidXRlTlMo
Y29ucwogewogICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwogICAgIGlmIChnZXREb2N1bWVu
dCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0gbG9j
YWxOYW1lLmxvd2VyKCk7CisgICAgICAgIGxuID0gbG9jYWxOYW1lLmFzY2lpTG93ZXIoKTsKICAg
ICByZW1vdmVBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG4uaW1wbCgpLCBuYW1l
c3BhY2VVUkkuaW1wbCgpKSwgZXhjZXB0aW9uKTsKIH0KIApAQCAtODAxLDcgKzgwMSw3IEBAIEF0
dHJJbXBsICpFbGVtZW50SW1wbDo6Z2V0QXR0cmlidXRlTm9kZU4KICAgICAgICAgcmV0dXJuIDA7
CiAgICAgRE9NU3RyaW5nIGxuKGxvY2FsTmFtZSk7CiAgICAgaWYgKGdldERvY3VtZW50KCkgJiYg
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgbG4gPSBsb2NhbE5hbWUu
bG93ZXIoKTsKKyAgICAgICAgbG4gPSBsb2NhbE5hbWUuYXNjaWlMb3dlcigpOwogICAgIHJldHVy
biBhdHRycy0+Z2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5p
bXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKIH0KIApAQCAtODEyLDcgKzgxMiw3IEBAIGJv
b2wgRWxlbWVudEltcGw6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IEQKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwogICAgIGlmIChnZXREb2N1bWVudCgp
ICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0gbG9jYWxO
YW1lLmxvd2VyKCk7CisgICAgICAgIGxuID0gbG9jYWxOYW1lLmFzY2lpTG93ZXIoKTsKICAgICBy
ZXR1cm4gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9j
YWxOYW1lLmltcGwoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZXNwYWNlVVJJLmltcGwoKSkpOwogfQpAQCAtODY5LDcgKzg2OSw3IEBAIE5v
ZGVJbXBsICpOYW1lZEF0dHJNYXBJbXBsOjpnZXROYW1lZEl0ZW0KIHsKICAgICBET01TdHJpbmcg
bG4obG9jYWxOYW1lKTsKICAgICBpZiAoZWxlbWVudC0+Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSkKLSAgICAgICAgbG4gPSBsb2NhbE5hbWUubG93ZXIoKTsKKyAgICAgICAgbG4gPSBs
b2NhbE5hbWUuYXNjaWlMb3dlcigpOwogICAgIHJldHVybiBnZXROYW1lZEl0ZW0oUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgbG4uaW1wbCgpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSk7CiB9CiAKQEAg
LTg3Nyw3ICs4NzcsNyBAQCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBOYW1lZEF0dHJNYXBJbXBsOjpy
CiB7CiAgICAgRE9NU3RyaW5nIGxuKGxvY2FsTmFtZSk7CiAgICAgaWYgKGVsZW1lbnQtPmdldERv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2Vy
KCk7CisgICAgICAgIGxuID0gbG9jYWxOYW1lLmFzY2lpTG93ZXIoKTsKICAgICByZXR1cm4gcmVt
b3ZlTmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxuLmltcGwoKSwgbmFtZXNwYWNl
VVJJLmltcGwoKSksIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTE1MjAsNyArMTUyMCw3IEBAIHZvaWQg
U3R5bGVkRWxlbWVudEltcGw6OmFkZENTU0NvbG9yKE1hcHAKICAgICAvLyB1c2VkIGFzIGEgbm9y
bWFsaXphdGlvbiBwb2ludCB0byBub3JtYWxpemUgdG8gdmFsdWVzIGJldHdlZW4gMAogICAgIC8v
IGFuZCAyNTUuCiAgICAgCi0gICAgaWYgKCBjb2xvci5sb3dlcigpICE9ICJ0cmFuc3BhcmVudCIg
KSB7CisgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbG9yLCAidHJhbnNwYXJlbnQi
KSkgewogICAgICAgICBpZiAoIGNvbG9yWzBdID09ICcjJyApCiAgICAgICAgICAgICBjb2xvci5y
ZW1vdmUoIDAsICAxICk7CiAgICAgICAgIGludCBiYXNpY0xlbmd0aCA9IChjb2xvci5sZW5ndGgo
KSArIDIpIC8gMzsKSW5kZXg6IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBr
aHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNiArNDI0
LDM1IEBAIERPTVN0cmluZ0ltcGwgKkRPTVN0cmluZ0ltcGw6OmNhcGl0YWxpemUKICAgICByZXR1
cm4gYzsKIH0KIAorRE9NU3RyaW5nSW1wbCAqRE9NU3RyaW5nSW1wbDo6YXNjaWlMb3dlcigpIGNv
bnN0Cit7CisgICAgRE9NU3RyaW5nSW1wbCAqYyA9IG5ldyBET01TdHJpbmdJbXBsOworICAgIGlm
ICghbCkKKyAgICAgICAgcmV0dXJuIGM7CisKKyAgICBjLT5zID0gbmV3UUNoYXJWZWN0b3IobCk7
CisgICAgYy0+bCA9IGw7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGw7IGkr
KykKKwljLT5zW2ldID0gc1tpXS5hc2NpaUxvd2VyKCk7CisKKyAgICByZXR1cm4gYzsKK30KKwor
RE9NU3RyaW5nSW1wbCAqRE9NU3RyaW5nSW1wbDo6YXNjaWlVcHBlcigpIGNvbnN0Cit7CisgICAg
RE9NU3RyaW5nSW1wbCAqYyA9IG5ldyBET01TdHJpbmdJbXBsOworICAgIGlmKCFsKSByZXR1cm4g
YzsKKworICAgIGMtPnMgPSBuZXdRQ2hhclZlY3RvcihsKTsKKyAgICBjLT5sID0gbDsKKworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbDsgaSsrKQorCWMtPnNbaV0gPSBzW2ldLmFz
Y2lpVXBwZXIoKTsKKworICAgIHJldHVybiBjOworfQorCiBpbnQgRE9NU3RyaW5nSW1wbDo6dG9J
bnQoYm9vbCAqb2spIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC00NjMsNyArNDky
LDcgQEAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUUNoYXIgKmEsIGNvbnN0IAogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBlcXVhbENhc2VJbnNlbnNpdGl2ZShjb25zdCBRQ2hh
ciAqYSwgY29uc3QgY2hhciAqYiwgaW50IGwpCitzdGF0aWMgYm9vbCBlcXVhbEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlKGNvbnN0IFFDaGFyICphLCBjb25zdCBjaGFyICpiLCBpbnQgbCkKIHsKICAgICBB
U1NFUlQobCA+PSAwKTsKICAgICB3aGlsZSAobC0tKSB7CkBAIC00NzQsNyArNTAzLDcgQEAgc3Rh
dGljIGJvb2wgZXF1YWxDYXNlSW5zZW5zaXRpdmUoY29uc3QgUQogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBlcXVhbENhc2VJbnNlbnNpdGl2ZShjb25zdCBRQ2hhciAqYSwgY29u
c3QgUUNoYXIgKmIsIGludCBsKQorc3RhdGljIGJvb2wgZXF1YWxBU0NJSUNhc2VJbnNlbnNpdGl2
ZShjb25zdCBRQ2hhciAqYSwgY29uc3QgUUNoYXIgKmIsIGludCBsKQogewogICAgIEFTU0VSVChs
ID49IDApOwogICAgIHdoaWxlIChsLS0pIHsKQEAgLTUxNyw3ICs1NDYsNyBAQCBpbnQgRE9NU3Ry
aW5nSW1wbDo6ZmluZChjb25zdCBjaGFyICpjaHMsCiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50
IGxjID0gdG9sb3dlcigodW5zaWduZWQgY2hhcikqY2hzKTsKICAgICAgICAgZG8gewotICAgICAg
ICAgICAgaWYgKHRvbG93ZXIoKCsrcHRyKS0+dW5pY29kZSgpKSA9PSBsYyAmJiBlcXVhbENhc2VJ
bnNlbnNpdGl2ZShwdHIgKyAxLCBjaHNQbHVzT25lLCBjaHNMZW5ndGhNaW51c09uZSkpCisgICAg
ICAgICAgICBpZiAodG9sb3dlcigoKytwdHIpLT51bmljb2RlKCkpID09IGxjICYmIGVxdWFsQVND
SUlDYXNlSW5zZW5zaXRpdmUocHRyICsgMSwgY2hzUGx1c09uZSwgY2hzTGVuZ3RoTWludXNPbmUp
KQogICAgICAgICAgICAgICAgIHJldHVybiBsIC0gY2hzTGVuZ3RoIC0gbiArIDE7CiAgICAgICAg
IH0gd2hpbGUgKC0tbik7CiAgICAgfQpAQCAtNTg5LDcgKzYxOCw3IEBAIGludCBET01TdHJpbmdJ
bXBsOjpmaW5kKGNvbnN0IERPTVN0cmluZ0kKIAl9CiAJaW50IGkgPSAwOwogCXdoaWxlICgxKSB7
Ci0JICAgIGlmIChodGhpcyA9PSBoc3RyICYmIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKHV0aGlzICsg
aSwgdXN0ciwgbHN0cikpCisJICAgIGlmIChodGhpcyA9PSBoc3RyICYmIGVxdWFsQVNDSUlDYXNl
SW5zZW5zaXRpdmUodXRoaXMgKyBpLCB1c3RyLCBsc3RyKSkKIAkJcmV0dXJuIGluZGV4ICsgaTsK
IAkgICAgaWYgKGkgPT0gZGVsdGEpCiAJCXJldHVybiAtMTsKQEAgLTcyNSw2ICs3NTQsNjYgQEAg
Ym9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjbwogICAgIHJldHVybiAhYVts
ZW5ndGhdOwogfQogCitib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgRE9NU3RyaW5n
SW1wbCogYSwgY29uc3QgRE9NU3RyaW5nSW1wbCogYikKK3sKKyAgICBpZiAoIWEpCisgICAgICAg
IHJldHVybiAhYjsKKyAgICBpZiAoIWIpCisgICAgICAgIHJldHVybiAhYTsKKworICAgIHVpbnQg
bGVuZ3RoID0gYS0+bDsKKyAgICBjb25zdCBRQ2hhciogYXMgPSBhLT5zOworICAgIGZvciAodWlu
dCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAgICAgICBRQ2hhciBjID0gYi0+c1tpXTsK
KyAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
YXNbaV0uYXNjaWlMb3dlcigpICE9IGMuYXNjaWlMb3dlcigpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiAhYi0+c1tsZW5ndGhdOworfQorCitib29sIGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgRE9NU3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciog
YikKK3sKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiAhYjsKKyAgICBpZiAoIWIpCisgICAg
ICAgIHJldHVybiAhYTsKKworICAgIHVpbnQgbGVuZ3RoID0gYS0+bDsKKyAgICBjb25zdCBRQ2hh
ciogYXMgPSBhLT5zOworICAgIGZvciAodWludCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewor
ICAgICAgICBjaGFyIGMgPSBiW2ldOworICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChhc1tpXS5hc2NpaUxvd2VyKCkgIT0gUUNoYXIoYykuYXNj
aWlMb3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biAhYltsZW5ndGhdOworfQorCitib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hh
ciogYSwgY29uc3QgRE9NU3RyaW5nSW1wbCogYikKK3sKKyAgICBpZiAoIWEpCisgICAgICAgIHJl
dHVybiAhYjsKKyAgICBpZiAoIWIpCisgICAgICAgIHJldHVybiAhYTsKKworICAgIHVpbnQgbGVu
Z3RoID0gYi0+bDsKKyAgICBjb25zdCBRQ2hhciogYnMgPSBiLT5zOworICAgIGZvciAodWludCBp
ID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAgICAgICBjaGFyIGMgPSBhW2ldOworICAgICAg
ICBpZiAoIWMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChRQ2hhcihj
KS5hc2NpaUxvd2VyKCkgIT0gYnNbaV0uYXNjaWlMb3dlcigpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiAhYVtsZW5ndGhdOworfQorCiAvLyBHb2xkZW4g
cmF0aW8gLSBhcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFwcGluZyBhbGwgMCdzIHRv
IGFsbCAwJ3MKIC8vIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KIGNvbnN0IHVuc2lnbmVkIFBISSA9
IDB4OWUzNzc5YjlVOwpJbmRleDoga2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtodG1sL2VkaXRpbmcvanNlZGl0aW5nLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBr
aHRtbC9lZGl0aW5nL2pzZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIs
NyBAQCBib29sIEpTRWRpdG9yOjpxdWVyeUNvbW1hbmRTdGF0ZShjb25zdCBECiAKIGJvb2wgSlNF
ZGl0b3I6OnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChjb25zdCBET01TdHJpbmcgJmNvbW1hbmQpCiB7
Ci0gICAgaWYgKCFzdXBwb3J0c1Bhc3RlQ29tbWFuZCAmJiBjb21tYW5kLmxvd2VyKCkgPT0gInBh
c3RlIikKKyAgICBpZiAoIXN1cHBvcnRzUGFzdGVDb21tYW5kICYmIGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoY29tbWFuZCwgInBhc3RlIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gY29tbWFuZEltcChjb21tYW5kKSAhPSAwOwogfQpJbmRleDoga2h0bWwvZWRpdGluZy9hcHBs
eV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0
eWxlX2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjQ1MSkKKysrIGtodG1sL2VkaXRpbmcvYXBwbHlf
c3R5bGVfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwxMyArMTQ0LDEzIEBAIGJv
b2wgU3R5bGVDaGFuZ2U6OmNoZWNrRm9yTGVnYWN5SFRNTFN0eWwKICAgICBET01TdHJpbmcgdmFs
dWVUZXh0KHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkpOwogICAgIHN3aXRjaCAocHJvcGVy
dHktPmlkKCkpIHsKICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05UX1dFSUdIVDoKLSAgICAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVRleHQsICJib2xkIikpIHsKKyAgICAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHZhbHVlVGV4dCwgImJvbGQiKSkgewogICAg
ICAgICAgICAgICAgIG1fYXBwbHlCb2xkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENT
U19QUk9QX0ZPTlRfU1RZTEU6Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFs
dWVUZXh0LCAiaXRhbGljIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAib2JsaXF1
ZSIpKSB7CisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZVRleHQs
ICJpdGFsaWMiKSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHZhbHVlVGV4dCwgIm9ibGlxdWUi
KSkgewogICAgICAgICAgICAgICAgIG1fYXBwbHlJdGFsaWMgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNzAwLDcgKzcwMCw3IEBAIHN0YXRp
YyBib29sIGhhc1RleHREZWNvcmF0aW9uUHJvcGVydHkoTm8KICAgICBFbGVtZW50SW1wbCAqZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbkltcGwgc3R5bGUoZWxlbWVudCk7CiAgICAgUmVmUHRyPENTU1ZhbHVl
SW1wbD4gdmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9QX1RFWFRfREVD
T1JBVElPTiwgRG9Ob3RVcGRhdGVMYXlvdXQpOwotICAgIHJldHVybiB2YWx1ZSAmJiAhZXF1YWxJ
Z25vcmluZ0Nhc2UodmFsdWUtPmNzc1RleHQoKSwgIm5vbmUiKTsKKyAgICByZXR1cm4gdmFsdWUg
JiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmNzc1RleHQoKSwgIm5vbmUiKTsKIH0K
IAogc3RhdGljIE5vZGVJbXBsKiBoaWdoZXN0QW5jZXN0b3JXaXRoVGV4dERlY29yYXRpb24oTm9k
ZUltcGwgKm5vZGUpCkBAIC03MzMsNyArNzMzLDcgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25JbXBsICpBcHBseVN0eQogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqdGV4
dERlY29yYXRpb25TdHlsZSA9IHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KHByb3BlcnRpZXMs
IDEpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlSW1wbD4gcHJvcGVydHkgPSBzdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04pOwotICAgIGlmIChwcm9wZXJ0
eSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkKKyAg
ICBpZiAocHJvcGVydHkgJiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UocHJvcGVydHktPmNzc1Rl
eHQoKSwgIm5vbmUiKSkKICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoc3R5bGUuZ2V0KCksIENT
U19QUk9QX1RFWFRfREVDT1JBVElPTik7CiAKICAgICByZXR1cm4gdGV4dERlY29yYXRpb25TdHls
ZTsKQEAgLTc1Niw3ICs3NTYsNyBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkFw
cGx5U3R5CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0ZXh0RGVjb3JhdGlv
blN0eWxlID0gY29tcHV0ZWRTdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAx
KTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUltcGw+IHByb3BlcnR5ID0gY29tcHV0ZWRTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04pOwotICAgIGlmIChw
cm9wZXJ0eSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUi
KSkgeworICAgIGlmIChwcm9wZXJ0eSAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShwcm9wZXJ0
eS0+Y3NzVGV4dCgpLCAibm9uZSIpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkltcGw+IG5ld1N0eWxlID0gdGV4dERlY29yYXRpb25TdHlsZS0+Y29weSgpOwog
ICAgICAgICBuZXdTdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfVEVYVF9ERUNPUkFUSU9OLCAi
bm9uZSIpOwogICAgICAgICBhcHBseVRleHREZWNvcmF0aW9uU3R5bGUobm9kZSwgbmV3U3R5bGUu
Z2V0KCkpOwpJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxMjQ1MSkKKysrIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxNyw3ICs0MTcsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29u
dHJvbGxlcjo6bW9kCiAKIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KGNvbnN0IERP
TVN0cmluZyAmYWx0ZXJTdHJpbmcsIGNvbnN0IERPTVN0cmluZyAmZGlyZWN0aW9uU3RyaW5nLCBj
b25zdCBET01TdHJpbmcgJmdyYW51bGFyaXR5U3RyaW5nKQogewotICAgIERPTVN0cmluZyBhbHRl
clN0cmluZ0xvd2VyID0gYWx0ZXJTdHJpbmcubG93ZXIoKTsKKyAgICBET01TdHJpbmcgYWx0ZXJT
dHJpbmdMb3dlciA9IGFsdGVyU3RyaW5nLmFzY2lpTG93ZXIoKTsKICAgICBFQWx0ZXIgYWx0ZXI7
CiAgICAgaWYgKGFsdGVyU3RyaW5nTG93ZXIgPT0gImV4dGVuZCIpCiAgICAgICAgIGFsdGVyID0g
RVhURU5EOwpAQCAtNDI2LDcgKzQyNiw3IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9k
aWZ5KGNvbnN0IEQKICAgICBlbHNlIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
RE9NU3RyaW5nIGRpcmVjdGlvblN0cmluZ0xvd2VyID0gZGlyZWN0aW9uU3RyaW5nLmxvd2VyKCk7
CisgICAgRE9NU3RyaW5nIGRpcmVjdGlvblN0cmluZ0xvd2VyID0gZGlyZWN0aW9uU3RyaW5nLmFz
Y2lpTG93ZXIoKTsKICAgICBFRGlyZWN0aW9uIGRpcmVjdGlvbjsKICAgICBpZiAoZGlyZWN0aW9u
U3RyaW5nTG93ZXIgPT0gImZvcndhcmQiKQogICAgICAgICBkaXJlY3Rpb24gPSBGT1JXQVJEOwpA
QCAtNDM5LDcgKzQzOSw3IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KGNvbnN0
IEQKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgRE9NU3Ry
aW5nIGdyYW51bGFyaXR5U3RyaW5nTG93ZXIgPSBncmFudWxhcml0eVN0cmluZy5sb3dlcigpOwor
ICAgIERPTVN0cmluZyBncmFudWxhcml0eVN0cmluZ0xvd2VyID0gZ3JhbnVsYXJpdHlTdHJpbmcu
YXNjaWlMb3dlcigpOwogICAgIEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHk7CiAgICAgaWYg
KGdyYW51bGFyaXR5U3RyaW5nTG93ZXIgPT0gImNoYXJhY3RlciIpCiAgICAgICAgIGdyYW51bGFy
aXR5ID0gQ0hBUkFDVEVSOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCShyZXZpc2lvbiAxMjQ1MSkK
KysrIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3
ICsxNzksNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0CiAgICAg
ICAgIG1fdHlwZSA9IGF0dHItPnZhbHVlKCk7CiAJcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG1lZGlhQXR0cikgewotICAgICAgICBtX21lZGlhID0gYXR0ci0+dmFs
dWUoKS5xc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgbV9tZWRpYSA9IGF0dHItPnZhbHVlKCku
cXN0cmluZygpLmFzY2lpTG93ZXIoKTsKICAgICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikgewogICAgICAgICBzZXREaXNhYmxlZFN0
YXRlKCFhdHRyLT5pc051bGwoKSk7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBIVE1MTGlua0Vs
ZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dAogdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjp0b2tl
bml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbFN0cikKIHsKICAgICBtX2lz
U3R5bGVTaGVldCA9IG1faXNJY29uID0gbV9hbHRlcm5hdGUgPSBmYWxzZTsKLSAgICBRU3RyaW5n
IHJlbCA9IHJlbFN0ci5xc3RyaW5nKCkubG93ZXIoKTsKKyAgICBRU3RyaW5nIHJlbCA9IHJlbFN0
ci5xc3RyaW5nKCkuYXNjaWlMb3dlcigpOwogICAgIGlmIChyZWwgPT0gInN0eWxlc2hlZXQiKQog
ICAgICAgICBtX2lzU3R5bGVTaGVldCA9IHRydWU7CiAgICAgZWxzZSBpZiAocmVsID09ICJpY29u
IiB8fCByZWwgPT0gInNob3J0Y3V0IGljb24iKQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSFRN
TExpbmtFbGVtZW50SW1wbDo6cHJvY2VzcygpCiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFFTdHJpbmcgdHlwZSA9IG1fdHlwZS5xc3RyaW5nKCkubG93ZXIo
KTsKKyAgICBRU3RyaW5nIHR5cGUgPSBtX3R5cGUucXN0cmluZygpLmFzY2lpTG93ZXIoKTsKICAg
ICAKICAgICBGcmFtZSAqZnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwogCkBAIC03MTEs
OSArNzExLDkgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbQogdm9p
ZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKQotICAg
ICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpLmRvbVN0cmluZygpLmxvd2VyKCk7CisgICAgICAg
IG1fdHlwZSA9IGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKCkuYXNjaWlMb3dlcigpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCi0gICAgICAgIG1fbWVkaWEgPSBhdHRy
LT52YWx1ZSgpLnFzdHJpbmcoKS5sb3dlcigpOworICAgICAgICBtX21lZGlhID0gYXR0ci0+dmFs
dWUoKS5xc3RyaW5nKCkuYXNjaWlMb3dlcigpOwogICAgIGVsc2UKICAgICAgICAgSFRNTEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9iYXNlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBs
LmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBIVE1MQm9keUVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZEF0dAogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRleHRBdHRy
KSB7CiAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0NPTE9SLCBhdHRyLT52YWx1
ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBiZ3Byb3BlcnRpZXNBdHRyKSB7
Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiZml4ZWQiKSkK
KyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgImZpeGVk
IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5E
X0FUVEFDSE1FTlQsIENTU19WQUxfRklYRUQpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHZsaW5rQXR0ciB8fAogICAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IGFsaW5rQXR0
ciB8fApAQCAtMzA0LDcgKzMwNCw3IEBAIGJvb2wgSFRNTEZyYW1lRWxlbWVudEltcGw6OmlzVVJM
QWxsb3dlZCgKICAgICB9CiAKICAgICAvLyBQcm9oaWJpdCBub24tZmlsZSBVUkxzIGlmIHdlIGFy
ZSBhc2tlZCB0by4KLSAgICBpZiAody0+ZnJhbWUoKS0+b25seUxvY2FsUmVmZXJlbmNlcygpICYm
IG5ld1VSTC5wcm90b2NvbCgpLmxvd2VyKCkgIT0gImZpbGUiKSB7CisgICAgaWYgKHctPmZyYW1l
KCktPm9ubHlMb2NhbFJlZmVyZW5jZXMoKSAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuZXdV
UkwucHJvdG9jb2woKSwgImZpbGUiKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC0zOTgsOSArMzk4LDkgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdAogICAgICAgICAvLyBGSVhNRTogSWYgd2UgYXJlIGFscmVhZHkgYXR0YWNoZWQsIHRoaXMg
aGFzIG5vIGVmZmVjdC4KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzY3JvbGxpbmdB
dHRyKSB7CiAgICAgICAgIC8vIEF1dG8gYW5kIHllcyBib3RoIHNpbXBseSBtZWFuICJhbGxvdyBz
Y3JvbGxpbmcuIiBObyBtZWFucyAiZG9uJ3QgYWxsb3cgc2Nyb2xsaW5nLiIKLSAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJhdXRvIikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UoYXR0ci0+dmFsdWUoKSwgInllcyIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShhdHRyLT52YWx1ZSgpLCAiYXV0byIpIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
YXR0ci0+dmFsdWUoKSwgInllcyIpKQogICAgICAgICAgICAgbV9zY3JvbGxpbmcgPSBRU2Nyb2xs
Vmlldzo6QXV0bzsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFs
dWUoKSwgIm5vIikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0
ci0+dmFsdWUoKSwgIm5vIikpCiAgICAgICAgICAgICBtX3Njcm9sbGluZyA9IFFTY3JvbGxWaWV3
OjpBbHdheXNPZmY7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hl
ZCwgdGhpcyBoYXMgbm8gZWZmZWN0LgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
bG9hZEF0dHIpIHsKSW5kZXg6IGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MRm9ybUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24g
MTI0NTEpCisrKyBraHRtbC9odG1sL0hUTUxGb3JtRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NDIsOSArNDQyLDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpwYXJzZU1h
cHBlZEF0dAogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0YXJnZXRBdHRyKSB7CiAgICAg
ICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBtZXRob2RBdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52
YWx1ZSgpLCAicG9zdCIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhdHRy
LT52YWx1ZSgpLCAicG9zdCIpKQogICAgICAgICAgICAgbV9wb3N0ID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImdldCIpKQorICAgICAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGF0dHItPnZhbHVlKCksICJnZXQiKSkK
ICAgICAgICAgICAgIG1fcG9zdCA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGVuY3R5cGVBdHRyKSB7CiAgICAgICAgIHBhcnNlRW5jdHlwZShhdHRyLT52YWx1ZSgpKTsK
QEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnBhcnNlTWFwcGVk
QXR0CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0QXR0cikgewogICAgICAg
ICAvLyBpZ25vcmUgdGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4KICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVBdHRyKSB7Ci0gICAgICAgIG1fYXV0b2NvbXBsZXRl
ID0gIWVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJvZmYiKTsKKyAgICAgICAgbV9h
dXRvY29tcGxldGUgPSAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhdHRyLT52YWx1ZSgpLCAib2Zm
Iik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdWJtaXRBdHRyKSB7CiAgICAg
ICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHN1Ym1pdEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBvbnJlc2V0QXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5j
cHAJKHJldmlzaW9uIDEyNDUxKQorKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzNSwxMyArNTM1LDEzIEBAIEhUTUxBcmVhRWxlbWVudEltcGw6On5I
VE1MQXJlYUVsZW1lbnRJbXAKIHZvaWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHNoYXBlQXR0cikgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgImRlZmF1bHQiKSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
YXR0ci0+dmFsdWUoKSwgImRlZmF1bHQiKSkKICAgICAgICAgICAgIG1fc2hhcGUgPSBEZWZhdWx0
OwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY2ly
Y2xlIikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFs
dWUoKSwgImNpcmNsZSIpKQogICAgICAgICAgICAgbV9zaGFwZSA9IENpcmNsZTsKLSAgICAgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInBvbHkiKSkKKyAgICAg
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhdHRyLT52YWx1ZSgpLCAicG9seSIp
KQogICAgICAgICAgICAgbV9zaGFwZSA9IFBvbHk7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyZWN0IikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgInJlY3QiKSkKICAgICAgICAgICAgIG1f
c2hhcGUgPSBSZWN0OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvb3Jkc0F0dHIp
IHsKICAgICAgICAgZGVsZXRlIFtdIG1fY29vcmRzOwpJbmRleDoga2h0bWwvaHRtbC9IVE1MQnV0
dG9uRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9odG1sL0hUTUxCdXR0b25F
bGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxMSBAQCBET01TdHJp
bmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0eXBlKCkgCiB2b2lkIEhUTUxCdXR0b25FbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09ICB0eXBlQXR0cikgewotICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInN1Ym1pdCIpKQorICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShhdHRyLT52YWx1ZSgpLCAic3VibWl0IikpCiAgICAgICAgICAgICBt
X3R5cGUgPSBTVUJNSVQ7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHIt
PnZhbHVlKCksICJyZXNldCIpKQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGF0dHItPnZhbHVlKCksICJyZXNldCIpKQogICAgICAgICAgICAgbV90eXBlID0gUkVTRVQ7
Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJidXR0
b24iKSkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhdHRyLT52YWx1
ZSgpLCAiYnV0dG9uIikpCiAgICAgICAgICAgICBtX3R5cGUgPSBCVVRUT047CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7CiAgICAgICAgIG1fdmFsdWUgPSBhdHRy
LT52YWx1ZSgpOwpJbmRleDoga2h0bWwvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTEtleWdlbkVsZW1lbnRJbXBsLmNwcAkocmV2aXNp
b24gMTI0NTEpCisrKyBraHRtbC9odG1sL0hUTUxLZXlnZW5FbGVtZW50SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQQogYm9vbCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYXRhKEZv
cm1EYXRhTGlzdCYgZW5jb2RlZF92YWx1ZXMsIGJvb2wpCiB7CiAgICAgLy8gT25seSBSU0EgaXMg
c3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KLSAgICBpZiAoIW1fa2V5VHlwZS5pc051bGwoKSAmJiAh
ZXF1YWxJZ25vcmluZ0Nhc2UobV9rZXlUeXBlLCAicnNhIikpCisgICAgaWYgKCFtX2tleVR5cGUu
aXNOdWxsKCkgJiYgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UobV9rZXlUeXBlLCAicnNhIikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBRU3RyaW5nIHZhbHVlID0gS1NTTEtleUdlbjo6c2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHNlbGVjdGVkSW5kZXgoKSwgbV9jaGFsbGVu
Z2UucXN0cmluZygpLCBnZXREb2N1bWVudCgpLT5iYXNlVVJMKCkpOwogICAgIGlmICh2YWx1ZS5p
c051bGwoKSkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJKHJldmlzaW9uIDEyNDUxKQorKysg
a2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksNyAr
Mzk5LDcgQEAgdm9pZCBIVE1MQlJFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAg
ICAvLyA8YnIgY2xlYXI+IGFuZCA8YnIgY2xlYXI9IiI+IGFyZSBqdXN0IHRyZWF0ZWQgbGlrZSA8
YnI+IGJ5IEdlY2tvLCBNYWMgSUUsIGV0Yy4gLWR3aAogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHN0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmICghc3RyLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHN0ciwgImFsbCIpKQorICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc3RyLCAiYWxsIikpCiAgICAgICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQ0xFQVIsICJib3RoIik7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1Bf
Q0xFQVIsIHN0cik7CkluZGV4OiBraHRtbC9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbkltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAJKHJl
dmlzaW9uIDEyNDUxKQorKysga2h0bWwvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjpnZXROYW0KICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShhdHRyTmFt
ZSkgPT0gbmFtZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpLmRvbVN0cmluZygpLmxvd2Vy
KCkgPT0gbmFtZS5sb3dlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlcXVh
bElnbm9yaW5nQ2FzZShlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpLmRvbVN0cmluZygpLCBuYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZElucHV0RWxlbWVudHMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFkdXBsaWNhdGVOdW1iZXIpCkBAIC0xNDcsNyArMTQ3LDcgQEAgTm9kZUltcGwqIEhUTUxG
b3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbQogICAgICAgICAgICAgICAgIGlmIChjYXNlU2Vuc2l0
aXZlKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShhdHRyTmFt
ZSkgPT0gbmFtZTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKS5kb21TdHJpbmcoKS5sb3dlcigpID09IG5h
bWUubG93ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlcXVhbElnbm9yaW5nQ2Fz
ZShlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpLmRvbVN0cmluZygpLCBuYW1lKTsKICAgICAgICAg
ICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVO
dW1iZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sdG9rZW5p
emVyLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MTMsNyArNzEzLDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUg
SFRNTFRva2VuaXplcjo6cGFycwogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgbGwgPSBrTWlu
KHNyYy5sZW5ndGgoKSwgMTAtY0J1ZmZlclBvcyk7CiAgICAgICAgICAgICB3aGlsZShsbC0tKSB7
Ci0gICAgICAgICAgICAgICAgUUNoYXIgY3NyYyhzcmMtPmxvd2VyKCkpOworICAgICAgICAgICAg
ICAgIFFDaGFyIGNzcmMoc3JjLT5hc2NpaUxvd2VyKCkpOwogICAgICAgICAgICAgICAgIGNjID0g
Y3NyYy5jZWxsKCk7CiAKICAgICAgICAgICAgICAgICBpZihjc3JjLnJvdygpIHx8ICEoKGNjID49
ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSkpIHsKQEAgLTEy
MTMsNyArMTIxMyw3IEBAIEhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnBhcnMK
ICAgICAgICAgICAgICAgICAgICAgICAgIE1vemlsbGEgMS41IGFuZCBXaW5JRSA2IGJvdGggYWNj
ZXB0IHRoZSBlbXB0eSBzdHJpbmcsIGJ1dCBuZWl0aGVyIGFjY2VwdCBhIHdoaXRlc3BhY2Utb25s
eSBzdHJpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICBXZSB3YW50IHRvIGFjY2VwdCBhbGwg
dGhlIHZhbHVlcyB0aGF0IGVpdGhlciBvZiB0aGVzZSBicm93c2VycyBhY2NlcHQsIGJ1dCBub3Qg
b3RoZXIgdmFsdWVzLgogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAg
ICAgUVN0cmluZyB0eXBlID0gYS0+dmFsdWUoKS5xc3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCku
bG93ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyB0eXBlID0gYS0+dmFsdWUoKS5x
c3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCkuYXNjaWlMb3dlcigpOwogICAgICAgICAgICAgICAg
ICAgICBpZiggdHlwZS5jb21wYXJlKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKSAhPSAwICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmNvbXBhcmUoInRleHQvamF2YXNjcmlwdCIp
ICE9IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuY29tcGFyZSgidGV4dC9qYXZh
c2NyaXB0MS4wIikgIT0gMCAmJgpAQCAtMTIzMyw3ICsxMjMzLDcgQEAgSFRNTFRva2VuaXplcjo6
U3RhdGUgSFRNTFRva2VuaXplcjo6cGFycwogICAgICAgICAgICAgICAgICAgICAgTmVpdGhlciBN
b3ppbGxhIDEuNSBub3IgV2luSUUgNiBhY2NlcHQgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNw
YWNlLgogICAgICAgICAgICAgICAgICAgICAgV2Ugd2FudCB0byBhY2NlcHQgYWxsIHRoZSB2YWx1
ZXMgdGhhdCBlaXRoZXIgb2YgdGhlc2UgYnJvd3NlcnMgYWNjZXB0LCBidXQgbm90IG90aGVyIHZh
bHVlcy4KICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIERPTVN0
cmluZyBsYW5nID0gYS0+dmFsdWUoKS5kb21TdHJpbmcoKS5sb3dlcigpOworICAgICAgICAgICAg
ICAgICAgICBET01TdHJpbmcgbGFuZyA9IGEtPnZhbHVlKCkuZG9tU3RyaW5nKCkuYXNjaWlMb3dl
cigpOwogICAgICAgICAgICAgICAgICAgICBpZiggbGFuZyAhPSAiIiAmJgogICAgICAgICAgICAg
ICAgICAgICAgICAgbGFuZyAhPSAiamF2YXNjcmlwdCIgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxhbmcgIT0gImphdmFzY3JpcHQxLjAiICYmCkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmxv
Y2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAko
cmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsMTEgKzc4LDExIEBAIHZvaWQgSFRNTERpdkVsZW1lbnRJbXBsOjpwYXJz
ZU1hcHBlZEF0dHIKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewogICAg
ICAgICBET01TdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0
ci0+dmFsdWUoKSwgImNlbnRlciIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShhdHRyLT52YWx1ZSgpLCAibWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhdHRy
LT52YWx1ZSgpLCAiY2VudGVyIikpCiAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0NFTlRFUik7Ci0gICAgICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0IikpCisgICAgICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKICAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19W
QUxfX0tIVE1MX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRy
LT52YWx1ZSgpLCAicmlnaHQiKSkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX1JJR0hUKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9B
TElHTiwgdik7CkBAIC0xMjcsMTAgKzEyNywxMCBAQCBib29sIEhUTUxIUkVsZW1lbnRJbXBsOjpt
YXBUb0VudHJ5KGNvbnN0CiB2b2lkIEhUTUxIUkVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAibGVmdCIpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGF0dHIt
PnZhbHVlKCksICJsZWZ0IikpIHsKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX01BUkdJTl9MRUZULCAiMCIpOwogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfTUFSR0lOX1JJR0hULCBDU1NfVkFMX0FVVE8pOwotICAgICAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaWdodCIpKSB7CisgICAgICAg
IH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQi
KSkgewogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xF
RlQsIENTU19WQUxfQVVUTyk7CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9NQVJHSU5fUklHSFQsICIwIik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yNjEsMTEgKzI2
MSwxMSBAQCB2b2lkIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6cGFyc2VNYXBwCiB7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0dHIpIHsKICAgICAgICAgRE9NU3RyaW5nIHYgPSBh
dHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUo
KSwgIm1pZGRsZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJjZW50ZXIi
KSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgIm1p
ZGRsZSIpIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgImNlbnRlciIp
KQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwg
Q1NTX1ZBTF9fS0hUTUxfQ0VOVEVSKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKQogICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9fS0hUTUxfTEVGVCk7Ci0g
ICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaWdodCIp
KQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGF0dHItPnZhbHVlKCks
ICJyaWdodCIpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVY
VF9BTElHTiwgQ1NTX1ZBTF9fS0hUTUxfUklHSFQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCB2KTsKQEAgLTM5Miw3
ICszOTIsNyBAQCB2b2lkIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkCiAgICAg
ICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX01BUlFVRUVfU1BFRUQs
IGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGxvb3BBdHRy
KSB7CiAgICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGlmIChhdHRyLT52YWx1ZSgpID09ICItMSIgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFs
dWUoKSwgImluZmluaXRlIikpCisgICAgICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiLTEi
IHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgImluZmluaXRlIikpCiAg
ICAgICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX01BUlFV
RUVfUkVQRVRJVElPTiwgQ1NTX1ZBTF9JTkZJTklURSk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19LSFRNTF9NQVJRVUVFX1JF
UEVUSVRJT04sIGF0dHItPnZhbHVlKCkpOwpJbmRleDoga2h0bWwvaHRtbC9IVE1MRWxlbWVudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcAkocmV2
aXNpb24gMTI0NTEpCisrKyBraHRtbC9odG1sL0hUTUxFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDcgKzY0LDcgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6bm9kZU5h
bWUoKSBjbwogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYW4gYXRvbWljc3Ry
aW5nIGxvb2t1cCBiYXNlZCBvZmYgdXBwZXJjYXNlIGNoYXJzIHRoYXQgZG9lcyBub3QgaGF2ZSB0
byBjb3B5CiAgICAgLy8gdGhlIHN0cmluZyBvbiBhIGhpdCBpbiB0aGUgaGFzaC4KICAgICBpZiAo
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIG1fdGFnTmFt
ZS5sb2NhbE5hbWUoKS5pbXBsKCktPnVwcGVyKCk7CisgICAgICAgIHJldHVybiBtX3RhZ05hbWUu
bG9jYWxOYW1lKCkuaW1wbCgpLT5hc2NpaVVwcGVyKCk7CiAgICAgcmV0dXJuIEVsZW1lbnRJbXBs
Ojpub2RlTmFtZSgpOwogfQogICAgIApAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgSFRNTEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnUKIAogICAgIERPTVN0cmluZyBpbmRleHN0cmluZzsK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIpKQorICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShhdHRyLT52YWx1ZSgpLCAibWlkZGxlIikpCiAgICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCAiY2VudGVyIik7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRf
QUxJR04sIGF0dHItPnZhbHVlKCkpOwpAQCAtNDA4LDI1ICs0MDgsMjUgQEAgdm9pZCBIVE1MRWxl
bWVudEltcGw6OmFkZEhUTUxBbGlnbm1lbnQoTQogICAgIGludCBwcm9wZmxvYXQgPSAtMTsKICAg
ICBpbnQgcHJvcHZhbGlnbiA9IC0xOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWxpZ25tZW50
ID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWxpZ25tZW50LCAi
YWJzbWlkZGxlIikpIHsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbGlnbm1lbnQs
ICJhYnNtaWRkbGUiKSkgewogICAgICAgICBwcm9wdmFsaWduID0gQ1NTX1ZBTF9NSURETEU7Ci0g
ICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbGlnbm1lbnQsICJhYnNib3R0b20iKSkg
eworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbGlnbm1lbnQsICJhYnNi
b3R0b20iKSkgewogICAgICAgICBwcm9wdmFsaWduID0gQ1NTX1ZBTF9CT1RUT007Ci0gICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbGlnbm1lbnQsICJsZWZ0IikpIHsKKyAgICB9IGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYWxpZ25tZW50LCAibGVmdCIpKSB7CiAgICAg
ICAgIHByb3BmbG9hdCA9IENTU19WQUxfTEVGVDsKICAgICAgICAgcHJvcHZhbGlnbiA9IENTU19W
QUxfVE9QOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWxpZ25tZW50LCAicmln
aHQiKSkgeworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbGlnbm1lbnQs
ICJyaWdodCIpKSB7CiAgICAgICAgIHByb3BmbG9hdCA9IENTU19WQUxfUklHSFQ7CiAgICAgICAg
IHByb3B2YWxpZ24gPSBDU1NfVkFMX1RPUDsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGFsaWdubWVudCwgInRvcCIpKSB7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGFsaWdubWVudCwgInRvcCIpKSB7CiAgICAgICAgIHByb3B2YWxpZ24gPSBDU1NfVkFM
X1RPUDsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFsaWdubWVudCwgIm1pZGRs
ZSIpKSB7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGFsaWdubWVudCwg
Im1pZGRsZSIpKSB7CiAgICAgICAgIHByb3B2YWxpZ24gPSBDU1NfVkFMX19LSFRNTF9CQVNFTElO
RV9NSURETEU7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbGlnbm1lbnQsICJj
ZW50ZXIiKSkgeworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbGlnbm1l
bnQsICJjZW50ZXIiKSkgewogICAgICAgICBwcm9wdmFsaWduID0gQ1NTX1ZBTF9NSURETEU7Ci0g
ICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbGlnbm1lbnQsICJib3R0b20iKSkgewor
ICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbGlnbm1lbnQsICJib3R0b20i
KSkgewogICAgICAgICBwcm9wdmFsaWduID0gQ1NTX1ZBTF9CQVNFTElORTsKLSAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGFsaWdubWVudCwgInRleHR0b3AiKSkgeworICAgIH0gZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbGlnbm1lbnQsICJ0ZXh0dG9wIikpIHsKICAg
ICAgICAgcHJvcHZhbGlnbiA9IENTU19WQUxfVEVYVF9UT1A7CiAgICAgfQogICAgIApAQCAtNDgw
LDE1ICs0ODAsMTUgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldENvbnRlbnRFZGl0YWJsZQog
ewogICAgIEZyYW1lICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBlbmFibGVkID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoZW5hYmxlZC5p
c0VtcHR5KCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZW5hYmxlZCwgInRydWUiKSkgeworICAgIGlm
IChlbmFibGVkLmlzRW1wdHkoKSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVuYWJsZWQsICJ0
cnVlIikpIHsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX1VT
RVJfTU9ESUZZLCBDU1NfVkFMX1JFQURfV1JJVEUpOwogICAgICAgICBpZiAoZnJhbWUpCiAgICAg
ICAgICAgICBmcmFtZS0+YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQodGhpcyk7ICAgIAotICAg
IH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZW5hYmxlZCwgImZhbHNlIikpIHsKKyAgICB9
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZW5hYmxlZCwgImZhbHNlIikpIHsKICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX1VTRVJfTU9ESUZZLCBD
U1NfVkFMX1JFQURfT05MWSk7CiAgICAgICAgIGlmIChmcmFtZSkKICAgICAgICAgICAgIGZyYW1l
LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudCh0aGlzKTsgICAgCi0gICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShlbmFibGVkLCAiaW5oZXJpdCIpKSB7CisgICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVuYWJsZWQsICJpbmhlcml0IikpIHsKICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX1VTRVJfTU9ESUZZLCBDU1NfVkFM
X0lOSEVSSVQpOwogICAgICAgICBpZiAoZnJhbWUpCiAgICAgICAgICAgICBmcmFtZS0+cmVtb3Zl
RWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQodGhpcyk7ICAgIApJbmRleDoga2h0bWwvaHRtbC9odG1s
X29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBs
LmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0CiAgIAogICAgIGludCBwb3M7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSB0eXBlQXR0cikgewotICAgICAgICBzZXJ2aWNlVHlwZSA9IHZhbC5sb3dlcigpOworICAg
ICAgICBzZXJ2aWNlVHlwZSA9IHZhbC5hc2NpaUxvd2VyKCk7CiAgICAgICAgIHBvcyA9IHNlcnZp
Y2VUeXBlLmZpbmQoICI7IiApOwogICAgICAgICBpZiAoIHBvcyE9LTEgKQogICAgICAgICAgICAg
c2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KCBwb3MgKTsKQEAgLTQ1NCw3ICs0NTQsNyBA
QCB2b2lkIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgICAgICAgICAg
ICBhdHRyLT5uYW1lKCkgPT0gcGx1Z2luc3BhZ2VBdHRyKSB7CiAgICAgICAgIHBsdWdpblBhZ2Ug
PSB2YWw7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaGlkZGVuQXR0cikgewotICAg
ICAgICBpZiAodmFsLmxvd2VyKCk9PSJ5ZXMiIHx8IHZhbC5sb3dlcigpPT0idHJ1ZSIpIHsKKyAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodmFsLCAieWVzIikgfHwgZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZSh2YWwsICJ0cnVlIikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBOb3Qg
ZHluYW1pYywgYnV0IGl0J3Mgbm90IHJlYWxseSBpbXBvcnRhbnQgdGhhdCBzdWNoIGEgcmFyZWx5
LXVzZWQKICAgICAgICAgICAgIC8vIGZlYXR1cmUgd29yayBkeW5hbWljYWxseS4KICAgICAgICAg
ICAgIGFkZENTU0xlbmd0aCggYXR0ciwgQ1NTX1BST1BfV0lEVEgsICIwIiApOwpAQCAtNjE4LDcg
KzYxOCw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEEKICAgICBE
T01TdHJpbmcgdmFsID0gYXR0ci0+dmFsdWUoKTsKICAgICBpbnQgcG9zOwogICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgc2VydmljZVR5cGUgPSB2YWwucXN0cmlu
ZygpLmxvd2VyKCk7CisgICAgICAgIHNlcnZpY2VUeXBlID0gdmFsLnFzdHJpbmcoKS5hc2NpaUxv
d2VyKCk7CiAgICAgICAgIHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQoICI7IiApOwogICAgICAgICBp
ZiAoIHBvcyE9LTEgKQogICAgICAgICAgIHNlcnZpY2VUeXBlID0gc2VydmljZVR5cGUubGVmdCgg
cG9zICk7CkBAIC0xMDgwLDcgKzEwODAsNyBAQCBib29sIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpp
c1VSTEF0dHJpYnV0CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKICAgICAg
ICAgQXR0cmlidXRlSW1wbCAqYXR0ciA9IGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShu
YW1lQXR0cik7CiAgICAgICAgIGlmIChhdHRyKSB7Ci0gICAgICAgICAgICBET01TdHJpbmcgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpLmRvbVN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBET01T
dHJpbmcgdmFsdWUgPSBhdHRyLT52YWx1ZSgpLmRvbVN0cmluZygpLmFzY2lpTG93ZXIoKTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZSA9PSAic3JjIiB8fCB2YWx1ZSA9PSAibW92aWUiIHx8IHZhbHVl
ID09ICJkYXRhIikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRl
eDoga2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0
bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyNDUxKQorKysga2h0
bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwy
OSArMTU4LDI5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldElucHV0VHlwZSgKIHsK
ICAgICB0eXBlRW51bSBuZXdUeXBlOwogICAgIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0
LCAicGFzc3dvcmQiKSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh0LCAicGFzc3dv
cmQiKSkKICAgICAgICAgbmV3VHlwZSA9IFBBU1NXT1JEOwotICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHQsICJjaGVja2JveCIpKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UodCwgImNoZWNrYm94IikpCiAgICAgICAgIG5ld1R5cGUgPSBDSEVDS0JPWDsKLSAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0LCAicmFkaW8iKSkKKyAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKHQsICJyYWRpbyIpKQogICAgICAgICBuZXdUeXBlID0gUkFESU87
Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodCwgInN1Ym1pdCIpKQorICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodCwgInN1Ym1pdCIpKQogICAgICAgICBuZXdUeXBl
ID0gU1VCTUlUOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHQsICJyZXNldCIpKQor
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodCwgInJlc2V0IikpCiAgICAgICAg
IG5ld1R5cGUgPSBSRVNFVDsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0LCAiZmls
ZSIpKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodCwgImZpbGUiKSkKICAg
ICAgICAgbmV3VHlwZSA9IEZJTEU7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodCwg
ImhpZGRlbiIpKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodCwgImhpZGRl
biIpKQogICAgICAgICBuZXdUeXBlID0gSElEREVOOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHQsICJpbWFnZSIpKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
dCwgImltYWdlIikpCiAgICAgICAgIG5ld1R5cGUgPSBJTUFHRTsKLSAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZSh0LCAiYnV0dG9uIikpCisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZSh0LCAiYnV0dG9uIikpCiAgICAgICAgIG5ld1R5cGUgPSBCVVRUT047Ci0gICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodCwgImtodG1sX2lzaW5kZXgiKSkKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHQsICJraHRtbF9pc2luZGV4IikpCiAgICAgICAgIG5l
d1R5cGUgPSBJU0lOREVYOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHQsICJzZWFy
Y2giKSkKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHQsICJzZWFyY2giKSkK
ICAgICAgICAgbmV3VHlwZSA9IFNFQVJDSDsKLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSh0LCAicmFuZ2UiKSkKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHQsICJy
YW5nZSIpKQogICAgICAgICBuZXdUeXBlID0gUkFOR0U7CiAgICAgZWxzZQogICAgICAgICBuZXdU
eXBlID0gVEVYVDsKQEAgLTUyMiw3ICs1MjIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZEF0CiAgICAgICAgIGlmIChtX3R5cGUgPT0gUkFESU8gJiYgY2hlY2tlZCgp
KQogICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+cmFkaW9CdXR0b25DaGVja2VkKHRoaXMsIG1f
Zm9ybSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBsZXRlQXR0cikg
ewotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9ICFlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAib2ZmIik7CisgICAgICAgIG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoYXR0ci0+dmFsdWUoKSwgIm9mZiIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09ICB0eXBlQXR0cikgewogICAgICAgICBzZXRJbnB1dFR5cGUoYXR0ci0+dmFsdWUoKSk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7CkluZGV4OiBraHRtbC9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDEz
ICsxMjgsMTMgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdyYXBBdHRyKSB7CiAgICAgICAgIC8vIHZpcnR1
YWwgLyBwaHlzaWNhbCBpcyBOZXRzY2FwZSBleHRlbnNpb24gb2YgSFRNTCAzLjAsIG5vdyBkZXBy
ZWNhdGVkCiAgICAgICAgIC8vIHNvZnQvIGhhcmQgLyBvZmYgaXMgcmVjb21tZW5kYXRpb24gZm9y
IEhUTUwgNCBleHRlbnNpb24gYnkgSUUgYW5kIE5TIDQKLSAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGF0dHItPnZhbHVlKCksICJ2aXJ0dWFsIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0
ci0+dmFsdWUoKSwgInNvZnQiKSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
YXR0ci0+dmFsdWUoKSwgInZpcnR1YWwiKSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGF0dHIt
PnZhbHVlKCksICJzb2Z0IikpCiAgICAgICAgICAgICBtX3dyYXAgPSB0YV9WaXJ0dWFsOwotICAg
ICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicGh5c2ljYWwi
KSB8fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiaGFyZCIpKQorICAgICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGF0dHItPnZhbHVlKCksICJwaHlzaWNhbCIp
IHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgImhhcmQiKSkKICAgICAg
ICAgICAgIG1fd3JhcCA9IHRhX1BoeXNpY2FsOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAib24iICkpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoYXR0ci0+dmFsdWUoKSwgIm9uIiApKQogICAgICAgICAgICAgbV93cmFw
ID0gdGFfUGh5c2ljYWw7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHIt
PnZhbHVlKCksICJvZmYiKSkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShhdHRyLT52YWx1ZSgpLCAib2ZmIikpCiAgICAgICAgICAgICBtX3dyYXAgPSB0YV9Ob1dyYXA7
CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVl
ZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKSW5kZXg6IGtodG1sL2h0bWwvSFRNTENvbGxlY3Rp
b25JbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxDb2xsZWN0aW9uSW1wbC5j
cHAJKHJldmlzaW9uIDEyNDUxKQorKysga2h0bWwvaHRtbC9IVE1MQ29sbGVjdGlvbkltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMTAgKzI4MSwxMCBAQCBib29sIEhUTUxDb2xsZWN0aW9u
SW1wbDo6Y2hlY2tGb3JOYW1lTWF0CiAgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
ZW1iZWRUYWcpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0g
bmFtZS5sb3dlcigpICYmCi0gICAgICAgICAgICAgICAgZS0+Z2V0QXR0cmlidXRlKGlkQXR0ciku
ZG9tU3RyaW5nKCkubG93ZXIoKSAhPSBuYW1lLmxvd2VyKCk7CisgICAgICAgICAgICByZXR1cm4g
ZXF1YWxJZ25vcmluZ0Nhc2UoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKS5kb21TdHJpbmcoKSwg
bmFtZSkgJiYKKyAgICAgICAgICAgICAgICAhZXF1YWxJZ25vcmluZ0Nhc2UoZS0+Z2V0QXR0cmli
dXRlKGlkQXR0cikuZG9tU3RyaW5nKCksIG5hbWUpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpLmRvbVN0cmluZygpLmxvd2VyKCkg
PT0gbmFtZS5sb3dlcigpOworICAgICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGUt
PmdldEF0dHJpYnV0ZShpZEF0dHIpLmRvbVN0cmluZygpLCBuYW1lKTsKICAgICAgICAgfQogICAg
IH0KIH0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCShyZXZpc2lvbiAxMjQ1MSkKKysr
IGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcs
NyArMzk3LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRJbXBsOjpkZXRlcm1pbmVQYXJzZU1vZAogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgYSBsaXN0IG9mIHB1
YmxpYyBJRHMgdG8gc2VlIHdoYXQgd2UKICAgICAgICAgICAgIC8vIHNob3VsZCBkby4KLSAgICAg
ICAgICAgIFFTdHJpbmcgbG93ZXJQdWJJRCA9IHB1YmxpY0lELmxvd2VyKCk7CisgICAgICAgICAg
ICBRU3RyaW5nIGxvd2VyUHViSUQgPSBwdWJsaWNJRC5hc2NpaUxvd2VyKCk7CiAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBwdWJJRFN0ciA9IGxvd2VyUHViSUQubGF0aW4xKCk7CiAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4gb3VyIGdwZXJmLWdlbmVyYXRl
ZCB0YWJsZS4KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCShyZXZpc2lvbiAxMjQ1MSkKKysrIGto
dG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjksMTMgKzY2
OSwxMyBAQCB2b2lkIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6cGFyc2VNYXBwCiAgICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9WRVJUSUNBTF9BTElHTiwgYXR0ci0+
dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7CiAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSh2LCAibWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uodiwg
ImNlbnRlciIpKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2LCAibWlkZGxl
IikgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2LCAiY2VudGVyIikpCiAgICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9D
RU5URVIpOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2LCAiYWJzbWlkZGxl
IikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodiwgImFic21pZGRs
ZSIpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElH
TiwgQ1NTX1ZBTF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2
LCAibGVmdCIpKQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHYsICJs
ZWZ0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FM
SUdOLCBDU1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UodiwgInJpZ2h0IikpCisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UodiwgInJpZ2h0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9SSUdIVCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwpJbmRl
eDoga2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21h
L2tqc19uYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAxMjQ1MSkKKysrIGtodG1sL2VjbWEva2pzX25h
dmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw3ICsyNjgsNyBAQCBQbHVnaW5CYXNl
OjpQbHVnaW5CYXNlKEV4ZWNTdGF0ZSAqZXhlYykKICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IG1pbWU7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtaW1lLT50eXBlID0gKCp0b2tlbikubG93ZXIoKTsKKyAgICAgICAg
ICAgICAgICBtaW1lLT50eXBlID0gKCp0b2tlbikuYXNjaWlMb3dlcigpOwogICAgICAgICAgICAg
ICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAibWltZS0+dHlwZT0iIDw8IG1pbWUtPnR5cGUgPDwgZW5k
bDsKICAgICAgICAgICAgICAgICArK3Rva2VuOwogCkluZGV4OiBraHRtbC9lY21hL2tqc19odG1s
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc19odG1sLmNwcAkocmV2aXNpb24gMTI0
NTEpCisrKyBraHRtbC9lY21hL2tqc19odG1sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDkg
KzQzMSw5IEBAIHZvaWQgS0pTOjpIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkKICAgICB7
CiAgICAgICBET01TdHJpbmcgbW9kZVN0cmluZyA9IHZhbHVlLT50b1N0cmluZyhleGVjKS5kb21T
dHJpbmcoKTsKICAgICAgIERvY3VtZW50SW1wbDo6SW5oZXJpdGVkQm9vbCBtb2RlOwotICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG1vZGVTdHJpbmcsICJvbiIpKQorICAgICAgaWYgKGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UobW9kZVN0cmluZywgIm9uIikpCiAgICAgICAgIG1vZGUgPSBEb2N1
bWVudEltcGw6Om9uOwotICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobW9kZVN0cmlu
ZywgIm9mZiIpKQorICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShtb2RlU3Ry
aW5nLCAib2ZmIikpCiAgICAgICAgIG1vZGUgPSBEb2N1bWVudEltcGw6Om9mZjsKICAgICAgIGVs
c2UKICAgICAgICAgbW9kZSA9IERvY3VtZW50SW1wbDo6aW5oZXJpdDsKQEAgLTI0MzIsNyArMjQz
Miw3IEBAIEpTVmFsdWUgKktKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbEEKICAgICB9CiAg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoY2FudmFzVGFnKSkgewogICAgICAgICBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkgewotICAgICAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgeworICAgICAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSwgIjJkIikpKSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250ZXh0MkQoJmVsZW1lbnQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0zNzIxLDcgKzM3MjEs
NyBAQCBKU1ZhbHVlICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXNGCiAgICAgICAgICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBDR0xpbmVDYXAgY2FwID0ga0NHTGlu
ZUNhcEJ1dHQ7Ci0gICAgICAgICAgICBET01TdHJpbmcgY2FwU3RyaW5nID0gYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAgIERPTVN0cmluZyBj
YXBTdHJpbmcgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKS5hc2NpaUxvd2Vy
KCk7CiAgICAgICAgICAgICBpZiAoY2FwU3RyaW5nID09ICJyb3VuZCIpCiAgICAgICAgICAgICAg
ICAgY2FwID0ga0NHTGluZUNhcFJvdW5kOwogICAgICAgICAgICAgZWxzZSBpZiAoY2FwU3RyaW5n
ID09ICJzcXVhcmUiKQpAQCAtMzczMyw3ICszNzMzLDcgQEAgSlNWYWx1ZSAqS0pTOjpDb250ZXh0
MkRGdW5jdGlvbjo6Y2FsbEFzRgogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgQ0dMaW5lSm9pbiBqb2luID0ga0NHTGluZUpvaW5NaXRlcjsKLSAgICAgICAgICAg
IERPTVN0cmluZyBqb2luU3RyaW5nID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5n
KCkubG93ZXIoKTsKKyAgICAgICAgICAgIERPTVN0cmluZyBqb2luU3RyaW5nID0gYXJnc1swXS0+
dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkuYXNjaWlMb3dlcigpOwogICAgICAgICAgICAgaWYg
KGpvaW5TdHJpbmcgPT0gInJvdW5kIikKICAgICAgICAgICAgICAgICBqb2luID0ga0NHTGluZUpv
aW5Sb3VuZDsKICAgICAgICAgICAgIGVsc2UgaWYgKGpvaW5TdHJpbmcgPT0gImJldmVsIikKQEAg
LTQxMTUsNyArNDExNSw3IEBAIEpTVmFsdWUgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxB
c0YKICAgICAgICAgICAgIGlmICghc291cmNlQ29udGV4dCkgewogICAgICAgICAgICAgICAgIFFQ
YWludGVyIHA7CiAgICAgICAgICAgICAgICAgcC5kcmF3RmxvYXRJbWFnZShpbWFnZSwgZHgsIGR5
LCBkdywgZGgsIHN4LCBzeSwgc3csIHNoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEltYWdlOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29udGV4dE9iamVjdC0+X2ds
b2JhbENvbXBvc2l0ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCkpLCBkcmF3aW5n
Q29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTo6Y29tcG9z
aXRlT3BlcmF0b3JGcm9tU3RyaW5nKGNvbnRleHRPYmplY3QtPl9nbG9iYWxDb21wb3NpdGUtPnRv
U3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5hc2NpaUxvd2VyKCkpLCBkcmF3aW5nQ29udGV4dCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDaGVh
cCwgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgYmFja2VkIGJ5IGNvcHktb24td3JpdGUgbWVtb3J5LCBh
bmQgd2UncmUKQEAgLTQxNzQsNyArNDE3NCw3IEBAIEpTVmFsdWUgKktKUzo6Q29udGV4dDJERnVu
Y3Rpb246OmNhbGxBc0YKICAgICAgICAgICAgIGZsb2F0IGR5ID0gYXJnc1s2XS0+dG9OdW1iZXIo
ZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCBkdyA9IGFyZ3NbN10tPnRvTnVtYmVyKGV4ZWMpOwog
ICAgICAgICAgICAgZmxvYXQgZGggPSBhcmdzWzhdLT50b051bWJlcihleGVjKTsKLSAgICAgICAg
ICAgIFFTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3IgPSBhcmdzWzldLT50b1N0cmluZyhleGVjKS5x
c3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAgIFFTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3Ig
PSBhcmdzWzldLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkuYXNjaWlMb3dlcigpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBRUGFpbnRlciBwOwogCkBAIC00MTkzLDcgKzQxOTMsNyBAQCBK
U1ZhbHVlICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXNGCiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpTZXRDb21wb3NpdGVPcGVyYXRpb246IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNp
emUoKSAhPSAxKQogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKLSAgICAgICAgICAgIFFTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3IgPSBhcmdzWzBd
LT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAgIFFTdHJpbmcg
Y29tcG9zaXRlT3BlcmF0b3IgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkuYXNj
aWlMb3dlcigpOwogICAgICAgICAgICAgUVBhaW50ZXI6OnNldENvbXBvc2l0ZU9wZXJhdGlvbiAo
ZHJhd2luZ0NvbnRleHQsY29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTQyMjksNyArNDIyOSw3IEBAIEpTVmFsdWUgKktKUzo6Q29udGV4dDJERnVu
Y3Rpb246OmNhbGxBc0YKICAgICAgICAgICAgIGlmICghby0+aW5oZXJpdHMoJktKUzo6SFRNTEVs
ZW1lbnQ6OmltZ19pbmZvKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogICAgICAgICAgICAgaW50IHJlcGV0aXRpb25UeXBlID0gSW1hZ2VQYXR0
ZXJuOjpSZXBlYXQ7Ci0gICAgICAgICAgICBET01TdHJpbmcgcmVwZXRpdGlvblN0cmluZyA9IGFy
Z3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBE
T01TdHJpbmcgcmVwZXRpdGlvblN0cmluZyA9IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0
cmluZygpLmFzY2lpTG93ZXIoKTsKICAgICAgICAgICAgIGlmIChyZXBldGl0aW9uU3RyaW5nID09
ICJyZXBlYXQteCIpCiAgICAgICAgICAgICAgICAgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRl
cm46OlJlcGVhdFg7CiAgICAgICAgICAgICBlbHNlIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJy
ZXBlYXQteSIpCkBAIC00NTI3LDcgKzQ1MjcsNyBAQCB2b2lkIENvbnRleHQyRDo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhCiAgICAgICAgICAgICBfbGluZUNhcCA9IHZhbHVlOwogICAgICAgICAK
ICAgICAgICAgICAgIENHTGluZUNhcCBjYXAgPSBrQ0dMaW5lQ2FwQnV0dDsKLSAgICAgICAgICAg
IERPTVN0cmluZyBjYXBTdHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCku
bG93ZXIoKTsKKyAgICAgICAgICAgIERPTVN0cmluZyBjYXBTdHJpbmcgPSB2YWx1ZS0+dG9TdHJp
bmcoZXhlYykuZG9tU3RyaW5nKCkuYXNjaWlMb3dlcigpOwogICAgICAgICAgICAgaWYgKGNhcFN0
cmluZyA9PSAicm91bmQiKQogICAgICAgICAgICAgICAgIGNhcCA9IGtDR0xpbmVDYXBSb3VuZDsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGNhcFN0cmluZyA9PSAic3F1YXJlIikKQEAgLTQ1NDAsNyAr
NDU0MCw3IEBAIHZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAgICAg
ICAgICAgIF9saW5lSm9pbiA9IHZhbHVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDR0xp
bmVKb2luIGpvaW4gPSBrQ0dMaW5lSm9pbk1pdGVyOwotICAgICAgICAgICAgRE9NU3RyaW5nIGpv
aW5TdHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIoKTsKKyAg
ICAgICAgICAgIERPTVN0cmluZyBqb2luU3RyaW5nID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLmRv
bVN0cmluZygpLmFzY2lpTG93ZXIoKTsKICAgICAgICAgICAgIGlmIChqb2luU3RyaW5nID09ICJy
b3VuZCIpCiAgICAgICAgICAgICAgICAgam9pbiA9IGtDR0xpbmVKb2luUm91bmQ7CiAgICAgICAg
ICAgICBlbHNlIGlmIChqb2luU3RyaW5nID09ICJiZXZlbCIpCkBAIC00NTkwLDcgKzQ1OTAsNyBA
QCB2b2lkIENvbnRleHQyRDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAgICAgICAgIAogICAg
ICAgICBjYXNlIEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjogewogICAgICAgICAgICAgX2dsb2Jh
bENvbXBvc2l0ZSA9IHZhbHVlOwotICAgICAgICAgICAgUVN0cmluZyBjb21wb3NpdGVPcGVyYXRv
ciA9IHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAg
IFFTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3IgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpLmFzY2lpTG93ZXIoKTsKICAgICAgICAgICAgIFFQYWludGVyOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24gKGNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkluZGV4OiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJKHJldmlzaW9uIDEyNDUxKQorKysga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg1LDEwICs0ODUsMTAgQEAgc3Rh
dGljIEhhc2hNYXA8RE9NU3RyaW5nLCBET01TdHJpbmc+IHBhcgogICAgICAgICAgICAgcG9zID0g
Y29sb25Qb3M7CiAgICAgICAgIGlmIChwb3MgPCAwKSB7CiAgICAgICAgICAgICAvLyBudWxsIHN0
cmluZyBmb3IgdmFsdWUgbWVhbnMga2V5IHdpdGhvdXQgdmFsdWUKLSAgICAgICAgICAgIG1hcC5z
ZXQocy5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpLCBET01TdHJpbmcoKSk7CisgICAgICAgICAg
ICBtYXAuc2V0KHMuc3RyaXBXaGl0ZVNwYWNlKCkuYXNjaWlMb3dlcigpLCBET01TdHJpbmcoKSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBRU3RyaW5nIGtleSA9IHMubGVmdChwb3Mp
LnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0gICAgICAgICAgICBRU3RyaW5nIHZhbCA9IHMu
bWlkKHBvcyArIDEpLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgICAgICAgICBRU3Ry
aW5nIGtleSA9IHMubGVmdChwb3MpLnN0cmlwV2hpdGVTcGFjZSgpLmFzY2lpTG93ZXIoKTsKKyAg
ICAgICAgICAgIFFTdHJpbmcgdmFsID0gcy5taWQocG9zICsgMSkuc3RyaXBXaGl0ZVNwYWNlKCku
YXNjaWlMb3dlcigpOwogICAgICAgICAgICAgaW50IHNwYWNlUG9zID0gdmFsLmZpbmQoJyAnKTsK
ICAgICAgICAgICAgIGlmIChzcGFjZVBvcyAhPSAtMSkKICAgICAgICAgICAgICAgICB2YWwgPSB2
YWwubGVmdChzcGFjZVBvcyk7CkBAIC0xMjA4LDcgKzEyMDgsNyBAQCB2b2lkIFdpbmRvdzo6c2No
ZWR1bGVDbG9zZSgpCiAKIHN0YXRpYyBib29sIHNob3VsZExvYWRBc0VtcHR5RG9jdW1lbnQoY29u
c3QgS1VSTCAmdXJsKQogewotICByZXR1cm4gdXJsLnByb3RvY29sKCkubG93ZXIoKSA9PSAiYWJv
dXQiIHx8IHVybC5pc0VtcHR5KCk7CisgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVy
bC5wcm90b2NvbCgpLCAiYWJvdXQiKSB8fCB1cmwuaXNFbXB0eSgpOwogfQogCiBib29sIFdpbmRv
dzo6aXNTYWZlU2NyaXB0KGNvbnN0IFNjcmlwdEludGVycHJldGVyICpvcmlnaW4sIGNvbnN0IFNj
cmlwdEludGVycHJldGVyICp0YXJnZXQpCkBAIC0xNDkwLDcgKzE0OTAsNyBAQCBzdGF0aWMgdm9p
ZCBwYXJzZVdpbmRvd0ZlYXR1cmVzKGNvbnN0IFFTCiAgICAgCiAgICAgaW50IGkgPSAwOwogICAg
IGludCBsZW5ndGggPSBmZWF0dXJlcy5sZW5ndGgoKTsKLSAgICBRU3RyaW5nIGJ1ZmZlciA9IGZl
YXR1cmVzLmxvd2VyKCk7CisgICAgUVN0cmluZyBidWZmZXIgPSBmZWF0dXJlcy5hc2NpaUxvd2Vy
KCk7CiAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgICAgLy8gc2tpcCB0byBmaXJzdCBs
ZXR0ZXIgb3IgbnVtYmVyLCBidXQgZG9uJ3Qgc2tpcCBwYXN0IHRoZSBlbmQgb2YgdGhlIHN0cmlu
ZwogICAgICAgICB3aGlsZSAoIWJ1ZmZlcltpXS5pc0xldHRlck9yTnVtYmVyKCkpIHsKSW5kZXg6
IGtodG1sL21pc2MvZGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvbWlzYy9kZWNvZGVy
LmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBraHRtbC9taXNjL2RlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBEZWNvZGVyOjpzZXRFbmNvZGluZyhjb25z
dCBjaGFyICpfZQogI2lmZGVmIERFQ09ERV9ERUJVRwogICAgIGtkRGVidWcoNjAwNSkgPDwgIm9s
ZCBlbmNvZGluZyBpczoiIDw8IG1fY29kZWMtPm5hbWUoKSA8PCBlbmRsOwogI2VuZGlmCi0gICAg
ZW5jID0gZW5jLmxvd2VyKCk7CisgICAgZW5jID0gZW5jLmFzY2lpTG93ZXIoKTsKICNpZmRlZiBE
RUNPREVfREVCVUcKICAgICBrZERlYnVnKDYwMDUpIDw8ICJyZXF1ZXN0aW5nOiIgPDwgZW5jIDw8
IGVuZGw7CiAjZW5kaWYKQEAgLTUxMyw3ICs1MTMsNyBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29k
ZShjb25zdCBjaGFyICpkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgqZW5kICE9
ICc+JyAmJiAqZW5kICE9ICdcMCcpIGVuZCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAqZW5kID09ICdcMCcgKSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIFFDU3RyaW5n
IHN0ciggcHRyLCAoZW5kLXB0cikrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBz
dHIubG93ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5hc2NpaUxvd2Vy
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gMDsKIAkJCXdoaWxlKCBwb3Mg
PCAoIGludCApIHN0ci5sZW5ndGgoKSApIHsKIAkJCSAgICBpZiggKHBvcyA9IHN0ci5maW5kKCJj
aGFyc2V0IiwgcG9zLCBmYWxzZSkpID09IC0xKSBicmVhazsKSW5kZXg6IHJlbmRlcmluZy9yZW5k
ZXJfZnJhbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJ
KHJldmlzaW9uIDEyNDUxKQorKysgcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NDAsNyArODQwLDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVX
aWRnZXQoKQogICAgICAgd2hpbGUgKGNoaWxkICYmICh1cmwuaXNFbXB0eSgpIHx8IHNlcnZpY2VU
eXBlLmlzRW1wdHkoKSB8fCAhZW1iZWQpKSB7CiAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKHBhcmFtVGFnKSkgewogICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAqcCA9
IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KGNoaWxkKTsKLSAgICAgICAgICAg
ICAgRE9NU3RyaW5nIG5hbWUgPSBwLT5uYW1lKCkubG93ZXIoKTsKKyAgICAgICAgICAgICAgRE9N
U3RyaW5nIG5hbWUgPSBwLT5uYW1lKCkuYXNjaWlMb3dlcigpOwogICAgICAgICAgICAgICBpZiAo
dXJsLmlzRW1wdHkoKSAmJiAobmFtZSA9PSAic3JjIiB8fCBuYW1lID09ICJtb3ZpZSIgfHwgbmFt
ZSA9PSAiY29kZSIgfHwgbmFtZSA9PSAidXJsIikpCiAgICAgICAgICAgICAgICAgICB1cmwgPSBw
LT52YWx1ZSgpLnFzdHJpbmcoKTsKICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1w
dHkoKSAmJiBuYW1lID09ICJ0eXBlIikgewpAQCAtODY1LDcgKzg2NSw3IEBAIHZvaWQgUmVuZGVy
UGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgIC8vIHdlIGhhdmUgdG8gZXhwbGljaXRs
eSBzdXBwcmVzcyB0aGUgdGFnJ3MgQ09ERUJBU0UgYXR0cmlidXRlIGlmIHRoZXJlIGlzIG5vbmUg
aW4gYSBQQVJBTSwKICAgICAgIC8vIGVsc2Ugb3VyIEphdmEgcGx1Z2luIHdpbGwgbWlzaW50ZXJw
cmV0IGl0LiBbNDAwNDUzMV0KICAgICAgIERPTVN0cmluZyBjb2RlYmFzZTsKLSAgICAgIGlmICgh
ZW1iZWQgJiYgc2VydmljZVR5cGUubG93ZXIoKSA9PSAiYXBwbGljYXRpb24veC1qYXZhLWFwcGxl
dCIpIHsKKyAgICAgIGlmICghZW1iZWQgJiYgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShzZXJ2aWNl
VHlwZSwgImFwcGxpY2F0aW9uL3gtamF2YS1hcHBsZXQiKSkgewogICAgICAgICAgIGNvZGViYXNl
ID0gImNvZGViYXNlIjsKICAgICAgICAgICB1bmlxdWVQYXJhbU5hbWVzLmFkZChjb2RlYmFzZS5p
bXBsKCkpOyAvLyBwcmV0ZW5kIHdlIGZvdW5kIGl0IGluIGEgUEFSQU0gYWxyZWFkeQogICAgICAg
fQpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvcmVuZGVyX2Zvcm0uY3BwCShyZXZpc2lvbiAxMjQ1MSkKKysrIHJlbmRlcmluZy9yZW5kZXJf
Zm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksNyArMTE4OSw3IEBAIHZvaWQgUmVuZGVy
U2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgdmFsID0ga01heChtaW5WYWwsIGtNaW4o
dmFsLCBtYXhWYWwpKTsgLy8gTWFrZSBzdXJlIHZhbCBpcyB3aXRoaW4gbWluL21heC4KICAgICAK
ICAgICAvLyBGb3JjZSBpbnRlZ2VyIHZhbHVlIGlmIG5vdCBmbG9hdC4KLSAgICBpZiAoIWVxdWFs
SWdub3JpbmdDYXNlKHByZWNpc2lvbiwgImZsb2F0IikpCisgICAgaWYgKCFlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKHByZWNpc2lvbiwgImZsb2F0IikpCiAgICAgICAgIHZhbCA9IChpbnQpKHZhbCAr
IDAuNSk7CiAKICAgICBlbGVtZW50KCktPnNldFZhbHVlKFFTdHJpbmc6Om51bWJlcih2YWwpKTsK
QEAgLTEyMTEsNyArMTIxMSw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpzbG90U2xpZGVyVmFsdWVD
aGFuZ2UKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWNpc2lvbiA9IGVsZW1lbnQoKS0+Z2V0
QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOwogCiAgICAgLy8gRm9yY2UgaW50ZWdlciB2YWx1ZSBp
ZiBub3QgZmxvYXQuCi0gICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShwcmVjaXNpb24sICJmbG9h
dCIpKQorICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShwcmVjaXNpb24sICJmbG9hdCIp
KQogICAgICAgICB2YWwgPSAoaW50KSh2YWwgKyAwLjUpOwogCiAgICAgZWxlbWVudCgpLT5zZXRW
YWx1ZShRU3RyaW5nOjpudW1iZXIodmFsKSk7CkluZGV4OiBjc3MvY3NzcGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjc3MvY3NzcGFyc2VyLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBjc3MvY3Nz
cGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNiw4ICsxNTA2LDggQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlQ29udGVudChpbnQgcHJvcElkLAogICAgICAgICB9IGVsc2UgaWYgKHZhbC0+
dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24pIHsKIAkgICAgLy8gYXR0cihYKQogICAgICAgICAgICAg
VmFsdWVMaXN0ICphcmdzID0gdmFsLT5mdW5jdGlvbi0+YXJnczsKLSAgICAgICAgICAgIFFTdHJp
bmcgZm5hbWUgPSBxU3RyaW5nKHZhbC0+ZnVuY3Rpb24tPm5hbWUpLmxvd2VyKCk7Ci0gICAgICAg
ICAgICBpZiAoZm5hbWUgIT0gImF0dHIoIiB8fCAhYXJncykKKyAgICAgICAgICAgIERPTVN0cmlu
ZyBmbmFtZSA9IGRvbVN0cmluZyh2YWwtPmZ1bmN0aW9uLT5uYW1lKTsKKyAgICAgICAgICAgIGlm
ICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShmbmFtZSwgImF0dHIoIikgfHwgIWFyZ3MpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKGFyZ3MtPm51bVZhbHVl
cyAhPSAxKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4MjcsOCArMTgyNyw4
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoIGkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBRU3RyaW5nIGZuYW1lID0gcVN0
cmluZyggdmFsdWUtPmZ1bmN0aW9uLT5uYW1lICkubG93ZXIoKTsKLSAgICAgICAgaWYgKGZuYW1l
ICE9ICJkYXNoYm9hcmQtcmVnaW9uKCIgKSB7CisgICAgICAgIERPTVN0cmluZyBmbmFtZSA9IGRv
bVN0cmluZyh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUpOworICAgICAgICBpZiAoIWVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoZm5hbWUsICJkYXNoYm9hcmQtcmVnaW9uKCIpKSB7CiAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE4NTAsNyAr
MTg1MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoIGkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgUVN0cmluZyBnZW9tZXRyeVR5cGUg
PSBxU3RyaW5nKGFyZy0+c3RyaW5nKS5sb3dlcigpOworICAgICAgICBRU3RyaW5nIGdlb21ldHJ5
VHlwZSA9IHFTdHJpbmcoYXJnLT5zdHJpbmcpLmFzY2lpTG93ZXIoKTsKICAgICAgICAgaWYgKGdl
b21ldHJ5VHlwZSA9PSAiY2lyY2xlIikKICAgICAgICAgICAgIHJlZ2lvbi0+bV9pc0NpcmNsZSA9
IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGdlb21ldHJ5VHlwZSA9PSAicmVjdGFuZ2xlIikKQEAg
LTE5MTQsOCArMTkxNCw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNoYXBlKCBpbnQgcHJvcElk
LCAKIHsKICAgICBWYWx1ZSAqdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBWYWx1
ZUxpc3QgKmFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7Ci0gICAgUVN0cmluZyBmbmFtZSA9
IHFTdHJpbmcoIHZhbHVlLT5mdW5jdGlvbi0+bmFtZSApLmxvd2VyKCk7Ci0gICAgaWYgKCBmbmFt
ZSAhPSAicmVjdCgiIHx8ICFhcmdzICkKKyAgICBET01TdHJpbmcgZm5hbWUgPSBxU3RyaW5nKHZh
bHVlLT5mdW5jdGlvbi0+bmFtZSk7CisgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGZu
YW1lLCAicmVjdCgiKSB8fCAhYXJncyApCiAJcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gcmVjdCgg
dCwgciwgYiwgbCApIHx8IHJlY3QoIHQgciBiIGwgKQpAQCAtMjIyNiw3ICsyMjI2LDcgQEAgQ1NT
UHJpbWl0aXZlVmFsdWVJbXBsICpDU1NQYXJzZXI6OnBhcnNlQwogICAgIGVsc2UgaWYgKCB2YWx1
ZS0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24gJiYKIAkJdmFsdWUtPmZ1bmN0aW9uLT5hcmdzICE9
IDAgJiYKIAkJdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5udW1WYWx1ZXMgPT0gNSAvKiByZ2IgKyB0
d28gY29tbWFzICovICYmCi0JCXFTdHJpbmcoIHZhbHVlLT5mdW5jdGlvbi0+bmFtZSApLmxvd2Vy
KCkgPT0gInJnYigiICkgeworCQlxU3RyaW5nKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSkuYXNjaWlM
b3dlcigpID09ICJyZ2IoIiApIHsKIAlWYWx1ZUxpc3QgKmFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24t
PmFyZ3M7CiAJVmFsdWUgKnYgPSBhcmdzLT5jdXJyZW50KCk7CiAJaWYgKCAhdmFsaWRVbml0KCB2
LCBGSW50ZWdlcnxGUGVyY2VudCwgdHJ1ZSApICkKQEAgLTIyNTQsNyArMjI1NCw3IEBAIENTU1By
aW1pdGl2ZVZhbHVlSW1wbCAqQ1NTUGFyc2VyOjpwYXJzZUMKICAgICBlbHNlIGlmICggdmFsdWUt
PnVuaXQgPT0gVmFsdWU6OkZ1bmN0aW9uICYmCiAgICAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlv
bi0+YXJncyAhPSAwICYmCiAgICAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+YXJncy0+bnVt
VmFsdWVzID09IDcgLyogcmdiYSArIHRocmVlIGNvbW1hcyAqLyAmJgotICAgICAgICAgICAgICBx
U3RyaW5nKCB2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUgKS5sb3dlcigpID09ICJyZ2JhKCIgKSB7Cisg
ICAgICAgICAgICAgIHFTdHJpbmcodmFsdWUtPmZ1bmN0aW9uLT5uYW1lKS5hc2NpaUxvd2VyKCkg
PT0gInJnYmEoIiApIHsKICAgICAgICAgVmFsdWVMaXN0ICphcmdzID0gdmFsdWUtPmZ1bmN0aW9u
LT5hcmdzOwogICAgICAgICBWYWx1ZSAqdiA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICAgICAgaWYg
KCAhdmFsaWRVbml0KCB2LCBGSW50ZWdlcnxGUGVyY2VudCwgdHJ1ZSApICkKSW5kZXg6IGNzcy9j
c3NfZ3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NfZ3JhbW1hci55CShyZXZpc2lvbiAx
MjQ1MSkKKysrIGNzcy9jc3NfZ3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAx
LDcgQEAgbWVkaWFfbGlzdDoKICAgICB9CiAgICAgfCBtZWRpdW0gewogICAgICAgICAkJCA9IG5l
dyBNZWRpYUxpc3RJbXBsKCk7Ci0gICAgICAgICQkLT5hcHBlbmRNZWRpdW0oIGRvbVN0cmluZygk
MSkubG93ZXIoKSApOworICAgICAgICAkJC0+YXBwZW5kTWVkaXVtKCBkb21TdHJpbmcoJDEpLmFz
Y2lpTG93ZXIoKSApOwogICAgIH0KICAgICB8IG1lZGlhX2xpc3QgJywnIG1heWJlX3NwYWNlIG1l
ZGl1bSB7CiAgICAgICAgICQkID0gJDE7CkBAIC04ODEsMTAgKzg4MSwxMCBAQCBkZWNsYXJhdGlv
bjoKIHByb3BlcnR5OgogICAgIElERU5UIG1heWJlX3NwYWNlIHsKICAgICAgICAgUVN0cmluZyBz
dHIgPSBxU3RyaW5nKCQxKTsKLSAgICAgICAgJCQgPSBnZXRQcm9wZXJ0eUlEKCBzdHIubG93ZXIo
KS5sYXRpbjEoKSwgc3RyLmxlbmd0aCgpICk7CisgICAgICAgICQkID0gZ2V0UHJvcGVydHlJRCgg
c3RyLmFzY2lpTG93ZXIoKS5sYXRpbjEoKSwgc3RyLmxlbmd0aCgpICk7CiAjaWYgU1ZHX1NVUFBP
UlQKICAgICAgIGlmICgkJCA9PSAwKQotICAgICAgICAgICQkID0gZ2V0U1ZHQ1NTUHJvcGVydHlJ
RChzdHIubG93ZXIoKS5sYXRpbjEoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAkJCA9IGdl
dFNWR0NTU1Byb3BlcnR5SUQoc3RyLmFzY2lpTG93ZXIoKS5sYXRpbjEoKSwgc3RyLmxlbmd0aCgp
KTsKICNlbmRpZgogICAgIH0KICAgOwpAQCAtOTM2LDEwICs5MzYsMTAgQEAgdGVybToKICAgfCBT
VFJJTkcgbWF5YmVfc3BhY2UgeyAkJC5pZCA9IDA7ICQkLnN0cmluZyA9ICQxOyAkJC51bml0ID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkc7IH0KICAgfCBJREVOVCBtYXliZV9zcGFjZSB7
CiAgICAgICBRU3RyaW5nIHN0ciA9IHFTdHJpbmcoICQxICk7Ci0gICAgICAkJC5pZCA9IGdldFZh
bHVlSUQoIHN0ci5sb3dlcigpLmxhdGluMSgpLCBzdHIubGVuZ3RoKCkgKTsKKyAgICAgICQkLmlk
ID0gZ2V0VmFsdWVJRCggc3RyLmFzY2lpTG93ZXIoKS5sYXRpbjEoKSwgc3RyLmxlbmd0aCgpICk7
CiAjaWYgU1ZHX1NVUFBPUlQKICAgICAgIGlmICgkJC5pZCA9PSAwKQotICAgICAgICAgICQkLmlk
ID0gZ2V0U1ZHQ1NTVmFsdWVJRChzdHIubG93ZXIoKS5sYXRpbjEoKSwgc3RyLmxlbmd0aCgpKTsK
KyAgICAgICAgICAkJC5pZCA9IGdldFNWR0NTU1ZhbHVlSUQoc3RyLmFzY2lpTG93ZXIoKS5sYXRp
bjEoKSwgc3RyLmxlbmd0aCgpKTsKICNlbmRpZgogICAgICAgJCQudW5pdCA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQ7CiAgICAgICAkJC5zdHJpbmcgPSAkMTsKSW5kZXg6IGNzcy9jc3No
ZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NoZWxwZXIuY3BwCShyZXZpc2lvbiAxMjQ1
MSkKKysrIGNzcy9jc3NoZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBA
IERPTVN0cmluZyBraHRtbDo6cGFyc2VVUkwoY29uc3QgRE9NU3RyaW4KICAgICB3aGlsZShsID4g
MCAmJiAoaS0+c1tvK2wtMV0gPD0gJyAnKSkgbC0tOwogCiAgICAgaWYobCA+PSA1ICYmCi0gICAg
ICAgKGktPnNbb10ubG93ZXIoKSA9PSAndScpICYmCi0gICAgICAgKGktPnNbbysxXS5sb3dlcigp
ID09ICdyJykgJiYKLSAgICAgICAoaS0+c1tvKzJdLmxvd2VyKCkgPT0gJ2wnKSAmJgorICAgICAg
IChpLT5zW29dLmFzY2lpTG93ZXIoKSA9PSAndScpICYmCisgICAgICAgKGktPnNbbysxXS5hc2Np
aUxvd2VyKCkgPT0gJ3InKSAmJgorICAgICAgIChpLT5zW28rMl0uYXNjaWlMb3dlcigpID09ICds
JykgJiYKICAgICAgICBpLT5zW28rM10ubGF0aW4xKCkgPT0gJygnICYmCiAgICAgICAgaS0+c1tv
K2wtMV0ubGF0aW4xKCkgPT0gJyknKSB7CiAgICAgICAgIG8gKz0gNDsKSW5kZXg6IGJyaWRnZS9t
YWMvQnJvd3NlckV4dGVuc2lvbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL0Jyb3dz
ZXJFeHRlbnNpb25NYWMubW0JKHJldmlzaW9uIDEyNDUxKQorKysgYnJpZGdlL21hYy9Ccm93c2Vy
RXh0ZW5zaW9uTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEJyb3dzZXJF
eHRlbnNpb25NYWM6OkJyb3dzZXJFeHRlbnNpb25NYWMKIAogdm9pZCBCcm93c2VyRXh0ZW5zaW9u
TWFjOjpvcGVuVVJMUmVxdWVzdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFVSTEFyZ3MmIGFyZ3Mp
CiB7Ci0gICAgaWYgKHVybC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImphdmFzY3JpcHQiKSB7Cisg
ICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksICJqYXZhc2NyaXB0
IikpIHsKIAltX2ZyYW1lLT5jcmVhdGVFbXB0eURvY3VtZW50KCk7CiAJbV9mcmFtZS0+cmVwbGFj
ZUNvbnRlbnRzV2l0aFNjcmlwdFJlc3VsdCh1cmwpOwogICAgICB9IGVsc2UgewpJbmRleDoga3N2
ZzIvc3ZnL1NWR0NvbG9ySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NvbG9y
SW1wbC5jcHAJKHJldmlzaW9uIDEyNDUxKQorKysga3N2ZzIvc3ZnL1NWR0NvbG9ySW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFNWR0NvbG9ySW1wbDo6c2V0
UkdCQ29sb3IoS0RPTTo6RE9NCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIEtET006
OkRPTVN0cmluZyBjb2xvck5hbWUgPSBtX3JnYkNvbG9yLmxvd2VyKCk7CisgICAgICAgIEtET006
OkRPTVN0cmluZyBjb2xvck5hbWUgPSBtX3JnYkNvbG9yLmFzY2lpTG93ZXIoKTsKICAgICAgICAg
UVN0cmluZyBuYW1lID0gY29sb3JOYW1lLnFzdHJpbmcoKTsKIC8vICAgICAgICBpbnQgY29sID0g
S1NWRzo6Z2V0VmFsdWVJRChuYW1lLmFzY2lpKCksIG5hbWUubGVuZ3RoKCkpOwogLy8gICAgICAg
IGlmKGNvbCA9PSAwKQpJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFibGVJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZUltcGwuY3BwCShyZXZpc2lv
biAxMjQ1MSkKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBTVkdUcmFuc2Zvcm1hYmxlSW1wbDo6cGFyc2VU
cmFuc2ZvcgogICAgICAgICBpZiAoc3VidHJhbnNmb3JtLmNvdW50KCkgPCAyKQogICAgICAgICAg
ICAgYnJlYWs7IC8vIGludmFsaWQgdHJhbnNmb3JtLCBpZ25vcmUuCiAKLSAgICAgICAgc3VidHJh
bnNmb3JtWzBdID0gc3VidHJhbnNmb3JtWzBdLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Cisg
ICAgICAgIHN1YnRyYW5zZm9ybVswXSA9IHN1YnRyYW5zZm9ybVswXS5zdHJpcFdoaXRlU3BhY2Uo
KS5hc2NpaUxvd2VyKCk7CiAgICAgICAgIHN1YnRyYW5zZm9ybVsxXSA9IHN1YnRyYW5zZm9ybVsx
XS5zaW1wbGlmeVdoaXRlU3BhY2UoKTsKICAgICAgICAgUVJlZ0V4cCByZWcoIihbLV0/XFxkKlxc
Lj9cXGQrKD86ZVstXT9cXGQrKT8pIik7CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdET01JbXBsZW1l
bnRhdGlvbkltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdET01JbXBsZW1lbnRh
dGlvbkltcGwuY3BwCShyZXZpc2lvbiAxMjQ1MSkKKysrIGtzdmcyL3N2Zy9TVkdET01JbXBsZW1l
bnRhdGlvbkltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgU1ZHRE9N
SW1wbGVtZW50YXRpb25JbXBsICpTVkdET01JbXBsZW1lbgogCiBib29sIFNWR0RPTUltcGxlbWVu
dGF0aW9uSW1wbDo6aGFzRmVhdHVyZShLRE9NOjpET01TdHJpbmdJbXBsICpmZWF0dXJlSW1wbCwg
S0RPTTo6RE9NU3RyaW5nSW1wbCAqdmVyc2lvbkltcGwpIGNvbnN0CiB7Ci0gICAgUVN0cmluZyBm
ZWF0dXJlID0gKGZlYXR1cmVJbXBsID8gS0RPTTo6RE9NU3RyaW5nKGZlYXR1cmVJbXBsKS51cHBl
cigpLnFzdHJpbmcoKSA6IFFTdHJpbmc6Om51bGwpOworICAgIFFTdHJpbmcgZmVhdHVyZSA9IChm
ZWF0dXJlSW1wbCA/IEtET006OkRPTVN0cmluZyhmZWF0dXJlSW1wbCkuYXNjaWlVcHBlcigpLnFz
dHJpbmcoKSA6IFFTdHJpbmc6Om51bGwpOwogICAgIEtET006OkRPTVN0cmluZyB2ZXJzaW9uKHZl
cnNpb25JbXBsKTsKIAogICAgIGlmKCh2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJzaW9uID09ICIx
LjEiKSAmJgpJbmRleDoga3N2ZzIvY3NzL0tTVkdDU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL2Nzcy9LU1ZHQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBrc3ZnMi9j
c3MvS1NWR0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsNyBAQCBD
U1NWYWx1ZUltcGwgKkNTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiAgICAgfQogICAgIGVsc2Ug
aWYodmFsdWUtPnVuaXQgPT0gS0RPTUNTU1ZhbHVlOjpGdW5jdGlvbiAmJiB2YWx1ZS0+ZnVuY3Rp
b24tPmFyZ3MgIT0gMCAmJgogICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5udW1W
YWx1ZXMgPT0gNSAvKiByZ2IgKyB0d28gY29tbWFzICovICYmCi0gICAgICAgICAgICBxU3RyaW5n
KHZhbHVlLT5mdW5jdGlvbi0+bmFtZSkubG93ZXIoKSA9PSAicmdiKCIpCisgICAgICAgICAgICBl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKHFTdHJpbmcodmFsdWUtPmZ1bmN0aW9uLT5uYW1lKSwgInJn
YigiKSkKICAgICB7CiAgICAgICAgIEtET01DU1NWYWx1ZUxpc3QgKmFyZ3MgPSB2YWx1ZS0+ZnVu
Y3Rpb24tPmFyZ3M7CiAgICAgICAgIEtET01DU1NWYWx1ZSAqdiA9IGFyZ3MtPmN1cnJlbnQoKTsK
QEAgLTQyOCw3ICs0MjgsNyBAQCBDU1NWYWx1ZUltcGwgKkNTU1BhcnNlcjo6cGFyc2VTVkdDb2xv
cigpCiAgICAgICAgIHJldHVybiBuZXcgU1ZHQ29sb3JJbXBsKGRvbVN0cmluZyh2YWx1ZS0+c3Ry
aW5nKS5pbXBsKCkpOwogICAgIGVsc2UgaWYodmFsdWUtPnVuaXQgPT0gS0RPTUNTU1ZhbHVlOjpG
dW5jdGlvbiAmJiB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MgIT0gMCAmJgogICAgICAgICAgICAgdmFs
dWUtPmZ1bmN0aW9uLT5hcmdzLT5udW1WYWx1ZXMgPT0gNSAvKiByZ2IgKyB0d28gY29tbWFzICov
ICYmCi0gICAgICAgICAgICBxU3RyaW5nKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSkubG93ZXIoKSA9
PSAicmdiKCIpCisgICAgICAgICAgICBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHFTdHJpbmcodmFs
dWUtPmZ1bmN0aW9uLT5uYW1lKSwgInJnYigiKSkKICAgICB7CiAgICAgICAgIEtET01DU1NWYWx1
ZUxpc3QgKmFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7CiAgICAgICAgIEtET01DU1NWYWx1
ZSAqdiA9IGFyZ3MtPmN1cnJlbnQoKTsKSW5kZXg6IHhtbC94bWxodHRwcmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0geG1sL3htbGh0dHByZXF1ZXN0LmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyB4
bWwveG1saHR0cHJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsMTMgKzE3OCwxMiBA
QCBib29sIFhNTEh0dHBSZXF1ZXN0Ojp1cmxNYXRjaGVzRG9jdW1lbnRECiAgIEtVUkwgZG9jdW1l
bnRVUkwoZG9jLT5VUkwoKSk7CiAKICAgLy8gYSBsb2NhbCBmaWxlIGNhbiBsb2FkIGFueXRoaW5n
Ci0gIGlmIChkb2N1bWVudFVSTC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImZpbGUiKSB7CisgIGlm
IChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRvY3VtZW50VVJMLnByb3RvY29sKCksICJmaWxlIikp
CiAgICAgcmV0dXJuIHRydWU7Ci0gIH0KIAogICAvLyBidXQgYSByZW1vdGUgZG9jdW1lbnQgY2Fu
IG9ubHkgbG9hZCBmcm9tIHRoZSBzYW1lIHBvcnQgb24gdGhlIHNlcnZlcgotICBpZiAoZG9jdW1l
bnRVUkwucHJvdG9jb2woKS5sb3dlcigpID09IF91cmwucHJvdG9jb2woKS5sb3dlcigpICYmCi0g
ICAgICBkb2N1bWVudFVSTC5ob3N0KCkubG93ZXIoKSA9PSBfdXJsLmhvc3QoKS5sb3dlcigpICYm
CisgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRvY3VtZW50VVJMLnByb3RvY29sKCksIF91
cmwucHJvdG9jb2woKSkgJiYKKyAgICAgIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZG9jdW1lbnRV
UkwuaG9zdCgpLCBfdXJsLmhvc3QoKSkgJiYKICAgICAgIGRvY3VtZW50VVJMLnBvcnQoKSA9PSBf
dXJsLnBvcnQoKSkgewogICAgIHJldHVybiB0cnVlOwogICB9CkBAIC0yNDIsNyArMjQxLDcgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25zdCBET01TdHJpbgogCiAgIGFib3J0ZWQgPSBm
YWxzZTsKIAotICBpZiAobWV0aG9kLmxvd2VyKCkgPT0gInBvc3QiICYmICh1cmwucHJvdG9jb2wo
KS5sb3dlcigpID09ICJodHRwIiB8fCB1cmwucHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwcyIp
ICkgeworICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShtZXRob2QsICJwb3N0IikgJiYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksICJodHRwIikgfHwgZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgImh0dHBzIikpICkgewogICAgICAgUVN0cmlu
ZyBjb250ZW50VHlwZSA9IGdldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwogICAgICAg
UVN0cmluZyBjaGFyc2V0OwogICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKSW5kZXg6
IGt3cS9LV1FDU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUNTdHJpbmcuaAkocmV2aXNp
b24gMTI0NTEpCisrKyBrd3EvS1dRQ1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0
NCw4IEBAIHB1YmxpYzoKICAgICBpbnQgY29udGFpbnMoY2hhciwgYm9vbCBjcz10cnVlKSBjb25z
dDsKICAgICB1aW50IGxlbmd0aCgpIGNvbnN0OwogICAgIGJvb2wgdHJ1bmNhdGUodWludCk7Ci0g
ICAgUUNTdHJpbmcgbG93ZXIoKSBjb25zdDsKLSAgICBRQ1N0cmluZyB1cHBlcigpIGNvbnN0Owor
ICAgIFFDU3RyaW5nIGFzY2lpTG93ZXIoKSBjb25zdDsKKyAgICBRQ1N0cmluZyBhc2NpaVVwcGVy
KCkgY29uc3Q7CiAgICAgUUNTdHJpbmcgbGVmdCh1aW50KSBjb25zdDsKICAgICBRQ1N0cmluZyBy
aWdodCh1aW50KSBjb25zdDsKICAgICBRQ1N0cmluZyBtaWQodWludCwgdWludCBsZW49MHhmZmZm
ZmZmZikgY29uc3Q7CkluZGV4OiBrd3EvS1dRS1VSTC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dR
S1VSTC5tbQkocmV2aXNpb24gMTI0NTEpCisrKyBrd3EvS1dRS1VSTC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIEtVUkw6OktVUkwoY29uc3QgS1VSTCAmYmFzZSwgY29uc3Qg
UVN0cmkKICAgICAgICAgICAgICsrcDsKICAgICAgICAgfQogICAgICAgICBpZiAoKnAgPT0gJzon
KSB7Ci0gICAgICAgICAgICBpZiAocFsxXSAhPSAnLycgJiYgYmFzZS5wcm90b2NvbCgpLmxvd2Vy
KCkgPT0gUVN0cmluZyhzdHIsIHAgLSBzdHIpLmxvd2VyKCkgJiYgYmFzZS5pc0hpZXJhcmNoaWNh
bCgpKQorICAgICAgICAgICAgaWYgKHBbMV0gIT0gJy8nICYmIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoYmFzZS5wcm90b2NvbCgpLCBRU3RyaW5nKHN0ciwgcCAtIHN0cikpICYmIGJhc2UuaXNIaWVy
YXJjaGljYWwoKSkKICAgICAgICAgICAgICAgICBzdHIgPSBwICsgMTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7CkBAIC0xNDkyLDcgKzE0OTIsNyBA
QCBzdGF0aWMgY2hhciAqZW5jb2RlUmVsYXRpdmVTdHJpbmcoY29uc3QgCiAgICAgICAgIGlmICgh
cHJvdG9jb2wpIHsKICAgICAgICAgICAgIHByb3RvY29sID0gYmFzZS5wcm90b2NvbCgpOwogICAg
ICAgICB9Ci0gICAgICAgIHByb3RvY29sID0gcHJvdG9jb2wubG93ZXIoKTsKKyAgICAgICAgcHJv
dG9jb2wgPSBwcm90b2NvbC5hc2NpaUxvd2VyKCk7CiAgICAgICAgIGlmIChwcm90b2NvbCA9PSAi
ZmlsZSIgfHwgcHJvdG9jb2wgPT0gImhlbHAiKSB7CiAgICAgICAgICAgICBwYXRoQ29kZWMgPSAm
VVRGOENvZGVjOwogICAgICAgICB9IGVsc2UgaWYgKHByb3RvY29sID09ICJtYWlsdG8iKSB7Cklu
ZGV4OiBrd3EvS1dRS0phdmFBcHBsZXRXaWRnZXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUtK
YXZhQXBwbGV0V2lkZ2V0Lm1tCShyZXZpc2lvbiAxMjQ1MSkKKysrIGt3cS9LV1FLSmF2YUFwcGxl
dFdpZGdldC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBLSmF2YUFwcGxldFdp
ZGdldDo6S0phdmFBcHBsZXRXaWRnZXQoY29uCiAgICAgUVN0cmluZyBiYXNlVVJMU3RyaW5nOwog
ICAgIFN0cmluZ01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKICAgICBmb3Ig
KFN0cmluZ01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoaXQtPmZpcnN0Lmxvd2VyKCkgPT0gImJhc2V1cmwiKQorICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShpdC0+Zmlyc3QsICJiYXNldXJsIikpCiAg
ICAgICAgICAgICBiYXNlVVJMU3RyaW5nID0gaXQtPnNlY29uZC5xc3RyaW5nKCk7CiAgICAgICAg
IFthdHRyaWJ1dGVOYW1lcyBhZGRPYmplY3Q6aXQtPmZpcnN0XTsKICAgICAgICAgW2F0dHJpYnV0
ZVZhbHVlcyBhZGRPYmplY3Q6aXQtPnNlY29uZF07CkluZGV4OiBrd3EvS1dRUmVuZGVyVHJlZURl
YnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAkocmV2aXNp
b24gMTI0NTEpCisrKyBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyBRU3RyaW5nIGdldFRhZ05hbWUoTm9kZUltcGwgKm4p
CiAgICAgaWYgKG4tPmlzQ29tbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuICJDT01NRU5UIjsK
ICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gbi0+bm9kZU5hbWUo
KS51cHBlcigpLnFzdHJpbmcoKTsgLy8gRklYTUU6IFdlIHdhbnQgdG8gZHVtcCB0aGUgcmVhbCBE
T00gbmFtZSwgbm90IGFuIHVwcGVyY2FzZSBuYW1lLgorICAgICAgICByZXR1cm4gbi0+bm9kZU5h
bWUoKS5hc2NpaVVwcGVyKCkucXN0cmluZygpOyAvLyBGSVhNRTogV2Ugd2FudCB0byBkdW1wIHRo
ZSByZWFsIERPTSBuYW1lLCBub3QgYW4gdXBwZXJjYXNlIG5hbWUuCiAgICAgcmV0dXJuIG4tPm5v
ZGVOYW1lKCkucXN0cmluZygpOyAKIH0KIApJbmRleDoga3dxL0tXUUNTdHJpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGt3cS9LV1FDU3RyaW5nLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBrd3EvS1dR
Q1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIFFDU3Ry
aW5nOjp0cnVuY2F0ZSh1aW50IHBvcykKIH0KIAogCi1RQ1N0cmluZyBRQ1N0cmluZzo6bG93ZXIo
KSBjb25zdAorUUNTdHJpbmcgUUNTdHJpbmc6OmFzY2lpTG93ZXIoKSBjb25zdAogewogICAgIC8v
IGNvbnZlcnQKICAgICBRQ1N0cmluZyB0bXAgPSAqdGhpczsJLy8gY29weQpAQCAtMTIwLDcgKzEy
MCw3IEBAIFFDU3RyaW5nIFFDU3RyaW5nOjpsb3dlcigpIGNvbnN0CiB9CiAKIAotUUNTdHJpbmcg
UUNTdHJpbmc6OnVwcGVyKCkgY29uc3QKK1FDU3RyaW5nIFFDU3RyaW5nOjphc2NpaVVwcGVyKCkg
Y29uc3QKIHsKICAgICBRQ1N0cmluZyB0bXAgPSAqdGhpczsJLy8gY29weQogICAgIGNoYXIqIHN0
ciA9IHRtcC5kYXRhKCk7CkluZGV4OiBrd3EvS1dRU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dx
L0tXUVN0cmluZy5oCShyZXZpc2lvbiAxMjQ1MSkKKysrIGt3cS9LV1FTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgaW50IGRpZ2l0VmFsdWUoKSBj
b25zdDsKICAgICBRQ2hhciBsb3dlcigpIGNvbnN0OwogICAgIFFDaGFyIHVwcGVyKCkgY29uc3Q7
CisgICAgUUNoYXIgYXNjaWlMb3dlcigpIGNvbnN0OworICAgIFFDaGFyIGFzY2lpVXBwZXIoKSBj
b25zdDsKICAgICBEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7CiAKICAgICBib29sIG1pcnJv
cmVkKCkgY29uc3Q7CkBAIC0yMTgsNiArMjIwLDE2IEBAIGlubGluZSBRQ2hhciBRQ2hhcjo6dXBw
ZXIoKSBjb25zdAogICAgIHJldHVybiBjIDw9IDB4N0YgPyB0b3VwcGVyKGMpIDogdV90b3VwcGVy
KGMpOwogfQogCitpbmxpbmUgUUNoYXIgUUNoYXI6OmFzY2lpTG93ZXIoKSBjb25zdAoreworICAg
IHJldHVybiAoYyA+PSAnQScgJiYgYyA8PSAnWicpID8gYyArICgnYSctJ0EnKSA6IGM7Cit9CisK
K2lubGluZSBRQ2hhciBRQ2hhcjo6YXNjaWlVcHBlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChj
ID49ICdhJyAmJiBjIDw9ICd6JykgPyBjIC0gKCdhJy0nQScpIDogYzsKK30KKwogaW5saW5lIFFD
aGFyOjpEaXJlY3Rpb24gUUNoYXI6OmRpcmVjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PERpcmVjdGlvbj4odV9jaGFyRGlyZWN0aW9uKGMpKTsKQEAgLTUwNyw2ICs1MTks
NyBAQCBwdWJsaWM6CiAgICAgUVN0cmluZyBjb3B5KCkgY29uc3Q7CiAKICAgICBRU3RyaW5nIGxv
d2VyKCkgY29uc3Q7CisgICAgUVN0cmluZyBhc2NpaUxvd2VyKCkgY29uc3Q7CiAgICAgUVN0cmlu
ZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25zdDsKICAgICBRU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFj
ZSgpIGNvbnN0OwogCkBAIC03NTMsNCArNzY2LDggQEAgcHVibGljOgogICAgIGNvbnN0IFFTdHJp
bmcgJnN0cmluZygpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CiB9OwogCitib29sIGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmKTsKK2Jvb2wgZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBRU3RyaW5nJiwgY29uc3QgY2hhciopOworYm9vbCBl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIqLCBjb25zdCBRU3RyaW5nJik7CisKICNl
bmRpZgpJbmRleDoga3dxL0tXUVN0cmluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRU3RyaW5n
Lm1tCShyZXZpc2lvbiAxMjQ1MSkKKysrIGt3cS9LV1FTdHJpbmcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5NCw3ICsyOTQsNyBAQCBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRQ2hhciAqYSwgY29u
c3QgCiAKIC8vIE5vdCBhICJ0cnVlIiBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmU7IG9ubHkgaW5z
ZW5zaXRpdmUgZm9yIHBsYWluIEFTQ0lJLgogCi1zdGF0aWMgYm9vbCBlcXVhbENhc2VJbnNlbnNp
dGl2ZShjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBpbnQgbCkKK3N0YXRpYyBib29sIGVx
dWFsQVNDSUlDYXNlSW5zZW5zaXRpdmUoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgaW50
IGwpCiB7CiAgICAgQVNTRVJUKGwgPj0gMCk7CiAgICAgd2hpbGUgKGwtLSkgewpAQCAtMzA1LDcg
KzMwNSw3IEBAIHN0YXRpYyBib29sIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKGNvbnN0IGMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXF1YWxDYXNlSW5zZW5zaXRpdmUoY29uc3Qg
UUNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIGludCBsKQorc3RhdGljIGJvb2wgZXF1YWxBU0NJSUNh
c2VJbnNlbnNpdGl2ZShjb25zdCBRQ2hhciAqYSwgY29uc3QgY2hhciAqYiwgaW50IGwpCiB7CiAg
ICAgQVNTRVJUKGwgPj0gMCk7CiAgICAgd2hpbGUgKGwtLSkgewpAQCAtMzE2LDcgKzMxNiw3IEBA
IHN0YXRpYyBib29sIGVxdWFsQ2FzZUluc2Vuc2l0aXZlKGNvbnN0IFEKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIGJvb2wgZXF1YWxDYXNlSW5zZW5zaXRpdmUoY29uc3QgUUNoYXIgKmEs
IGNvbnN0IFFDaGFyICpiLCBpbnQgbCkKK3N0YXRpYyBib29sIGVxdWFsQVNDSUlDYXNlSW5zZW5z
aXRpdmUoY29uc3QgUUNoYXIgKmEsIGNvbnN0IFFDaGFyICpiLCBpbnQgbCkKIHsKICAgICBBU1NF
UlQobCA+PSAwKTsKICAgICB3aGlsZSAobC0tKSB7CkBAIC0zMjcsMTIgKzMyNywxMiBAQCBzdGF0
aWMgYm9vbCBlcXVhbENhc2VJbnNlbnNpdGl2ZShjb25zdCBRCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbENhc2VJbnNlbnNpdGl2ZShjaGFyIGMxLCBjaGFy
IGMyKQorc3RhdGljIGlubGluZSBib29sIGVxdWFsQVNDSUlDYXNlSW5zZW5zaXRpdmUoY2hhciBj
MSwgY2hhciBjMikKIHsKICAgICByZXR1cm4gdG9sb3dlcihjMSkgPT0gdG9sb3dlcihjMik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbENhc2VJbnNlbnNpdGl2ZShRQ2hhciBjMSwgY2hh
ciBjMikKK3N0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbEFTQ0lJQ2FzZUluc2Vuc2l0aXZlKFFDaGFy
IGMxLCBjaGFyIGMyKQogewogICAgIHJldHVybiB0b2xvd2VyKGMxLnVuaWNvZGUoKSkgPT0gdG9s
b3dlcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjMikpOwogfQpAQCAtMTExNSw3ICsxMTE1
LDcgQEAgYm9vbCBRU3RyaW5nOjpzdGFydHNXaXRoKGNvbnN0IGNoYXIgKnByZQogICAgICAgICB9
CiAgICAgICAgIGNvbnN0IFFDaGFyICp1bmkgPSBkYXRhLT5fdW5pY29kZTsgICAgICAgIAogICAg
ICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBwcmVmaXhMZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCFlcXVhbENhc2VJbnNlbnNpdGl2ZSh1bmlbaV0sIHByZWZpeFtpXSkpIHsKKyAgICAg
ICAgICAgIGlmICghZXF1YWxBU0NJSUNhc2VJbnNlbnNpdGl2ZSh1bmlbaV0sIHByZWZpeFtpXSkp
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTEyNDMsNyArMTI0Myw3IEBAIGludCBRU3RyaW5nOjpmaW5kKGNvbnN0IFFTdHJpbmcg
JnN0ciwgaW4KIAl9CiAJaSA9IDA7CiAJd2hpbGUgKCBUUlVFICkgewotCSAgICBpZiAoIGh0aGlz
ID09IGhzdHIgJiYgZXF1YWxDYXNlSW5zZW5zaXRpdmUodXRoaXMgKyBpLCB1c3RyLCBsc3RyKSAp
CisJICAgIGlmICggaHRoaXMgPT0gaHN0ciAmJiBlcXVhbEFTQ0lJQ2FzZUluc2Vuc2l0aXZlKHV0
aGlzICsgaSwgdXN0ciwgbHN0cikgKQogCQlyZXR1cm4gaW5kZXggKyBpOwogCSAgICBpZiAoIGkg
PT0gZGVsdGEgKQogCQlyZXR1cm4gLTE7CkBAIC0xMjg4LDcgKzEyODgsNyBAQCBpbnQgUVN0cmlu
Zzo6ZmluZChjb25zdCBjaGFyICpjaHMsIGludCBpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpbnQgbGMgPSB0b2xvd2VyKCpjaHMpOwogICAgICAgICAgICAgZG8gewotICAgICAgICAg
ICAgICAgIGlmICh0b2xvd2VyKCorK3B0cikgPT0gbGMgJiYgZXF1YWxDYXNlSW5zZW5zaXRpdmUo
cHRyICsgMSwgY2hzUGx1c09uZSwgY2hzTGVuZ3RoTWludXNPbmUpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHRvbG93ZXIoKisrcHRyKSA9PSBsYyAmJiBlcXVhbEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
KHB0ciArIDEsIGNoc1BsdXNPbmUsIGNoc0xlbmd0aE1pbnVzT25lKSkgewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZGF0YS0+X2xlbmd0aCAtIGNoc0xlbmd0aCAtIG4gKyAxOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CkBAIC0xMzA3LDcgKzEzMDcs
NyBAQCBpbnQgUVN0cmluZzo6ZmluZChjb25zdCBjaGFyICpjaHMsIGludCBpCiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpbnQgbGMgPSB0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSpjaHMp
OwogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmICh0b2xvd2VyKCgrK3B0cikt
PnVuaWNvZGUoKSkgPT0gbGMgJiYgZXF1YWxDYXNlSW5zZW5zaXRpdmUocHRyICsgMSwgY2hzUGx1
c09uZSwgY2hzTGVuZ3RoTWludXNPbmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvbG93ZXIo
KCsrcHRyKS0+dW5pY29kZSgpKSA9PSBsYyAmJiBlcXVhbEFTQ0lJQ2FzZUluc2Vuc2l0aXZlKHB0
ciArIDEsIGNoc1BsdXNPbmUsIGNoc0xlbmd0aE1pbnVzT25lKSkgewogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZGF0YS0+X2xlbmd0aCAtIGNoc0xlbmd0aCAtIG4gKyAxOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CkBAIC0xMzk2LDcgKzEzOTYsNyBA
QCBpbnQgUVN0cmluZzo6ZmluZFJldiggY29uc3QgUVN0cmluZyYgc3RyCiAJfQogCWkgPSBpbmRl
eDsKIAl3aGlsZSAoIFRSVUUgKSB7Ci0JICAgIGlmICggaHRoaXMgPT0gaHN0ciAmJiBlcXVhbENh
c2VJbnNlbnNpdGl2ZSh1dGhpcyArIGksIHVzdHIsIGxzdHIpICkKKwkgICAgaWYgKCBodGhpcyA9
PSBoc3RyICYmIGVxdWFsQVNDSUlDYXNlSW5zZW5zaXRpdmUodXRoaXMgKyBpLCB1c3RyLCBsc3Ry
KSApCiAJCXJldHVybiBpOwogCSAgICBpZiAoIGkgPT0gMCApCiAJCXJldHVybiAtMTsKQEAgLTE0
ODcsNyArMTQ4Nyw3IEBAIGludCBRU3RyaW5nOjpjb250YWlucyhjb25zdCBjaGFyICpzdHIsIGIK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludCBsYyA9IHRvbG93ZXIoYyk7CiAgICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgY291bnQgKz0gdG9sb3dlcigqcCkgPT0gbGMg
JiYgZXF1YWxDYXNlSW5zZW5zaXRpdmUocCArIDEsIHN0ciArIDEsIGxlbiAtIDEpOworICAgICAg
ICAgICAgICAgIGNvdW50ICs9IHRvbG93ZXIoKnApID09IGxjICYmIGVxdWFsQVNDSUlDYXNlSW5z
ZW5zaXRpdmUocCArIDEsIHN0ciArIDEsIGxlbiAtIDEpOwogICAgICAgICAgICAgICAgIHArKzsK
ICAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgICAgIH0KQEAgLTE1MDIsNyArMTUwMiw3
IEBAIGludCBRU3RyaW5nOjpjb250YWlucyhjb25zdCBjaGFyICpzdHIsIGIKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGludCBsYyA9IHRvbG93ZXIoYyk7CiAgICAgICAgICAgICBkbyB7
Ci0gICAgICAgICAgICAgICAgY291bnQgKz0gdG9sb3dlcihwLT51bmljb2RlKCkpID09IGxjICYm
IGVxdWFsQ2FzZUluc2Vuc2l0aXZlKHAgKyAxLCBzdHIgKyAxLCBsZW4gLSAxKTsKKyAgICAgICAg
ICAgICAgICBjb3VudCArPSB0b2xvd2VyKHAtPnVuaWNvZGUoKSkgPT0gbGMgJiYgZXF1YWxBU0NJ
SUNhc2VJbnNlbnNpdGl2ZShwICsgMSwgc3RyICsgMSwgbGVuIC0gMSk7CiAgICAgICAgICAgICAg
ICAgcCsrOwogICAgICAgICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICAgICAgfQpAQCAtMTUzNyw3
ICsxNTM3LDcgQEAgaW50IFFTdHJpbmc6OmNvbnRhaW5zKGNvbnN0IFFTdHJpbmcgJnN0cgogICAg
ICAgICB9IHdoaWxlICgtLW4pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRvIHsKLSAgICAgICAg
ICAgIGNvdW50ICs9IHAtPmxvd2VyKCkgPT0gYyAmJiBlcXVhbENhc2VJbnNlbnNpdGl2ZShwLCBz
dHJQLCBsZW4pID09IDA7CisgICAgICAgICAgICBjb3VudCArPSBwLT5sb3dlcigpID09IGMgJiYg
ZXF1YWxBU0NJSUNhc2VJbnNlbnNpdGl2ZShwLCBzdHJQLCBsZW4pID09IDA7CiAgICAgICAgICAg
ICArK3A7CiAgICAgICAgIH0gd2hpbGUgKC0tbik7CiAgICAgfQpAQCAtMTk1NSw2ICsxOTU1LDQ5
IEBAIFFTdHJpbmcgUVN0cmluZzo6bG93ZXIoKSBjb25zdAogICAgIHJldHVybiBzOwogfQogCitR
U3RyaW5nIFFTdHJpbmc6OmFzY2lpTG93ZXIoKSBjb25zdAoreworICAgIFFTdHJpbmcgcygqdGhp
cyk7CisgICAgS1dRU3RyaW5nRGF0YSAqZCA9ICpzLmRhdGFIYW5kbGU7CisgICAgaW50IGwgPSBk
LT5fbGVuZ3RoOworICAgIGlmIChsKSB7CisgICAgICAgIGJvb2wgZGV0YWNoZWQgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGQtPl9pc0FzY2lpVmFsaWQpIHsKKyAgICAgICAgICAgIGNoYXIgKnAgPSBk
LT5fYXNjaWk7CisgICAgICAgICAgICB3aGlsZSAobC0tKSB7CisgICAgICAgICAgICAgICAgY2hh
ciBjID0gKnA7CisgICAgICAgICAgICAgICAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghZGV0YWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHMuZGV0YWNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkID0gKnMuZGF0YUhhbmRs
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBkLT5fYXNjaWkgKyBkLT5fbGVuZ3RoIC0g
bCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnAgPSBjICsgKCdhJyAtICdBJyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChkLT5faXNVbmljb2RlVmFsaWQp
OworICAgICAgICAgICAgUUNoYXIgKnAgPSBkLT5fdW5pY29kZTsKKyAgICAgICAgICAgIHdoaWxl
IChsLS0pIHsKKyAgICAgICAgICAgICAgICBRQ2hhciBjID0gKnA7CisgICAgICAgICAgICAgICAg
aWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZGV0
YWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuZGV0YWNoKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkID0gKnMuZGF0YUhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHAgPSBkLT5fdW5pY29kZSArIGQtPl9sZW5ndGggLSBsIC0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRldGFjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAqcCA9IGMgKyAoJ2EnIC0gJ0EnKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBzOworfQorCiBRU3RyaW5nIFFTdHJpbmc6OnN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0CiB7
CiAgICAgaWYgKCBpc0VtcHR5KCkgKQkJCQkvLyBub3RoaW5nIHRvIGRvCkBAIC0yODA3LDYgKzI4
NTAsNTQgQEAgUUNvbnN0U3RyaW5nOjp+UUNvbnN0U3RyaW5nKCkKICAgICB9CiB9CiAKK2Jvb2wg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBRU3RyaW5nJiBhLCBjb25zdCBRU3RyaW5nJiBi
KQoreworICAgIHVpbnQgbGVuZ3RoID0gYS5sZW5ndGgoKTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7
IGkgIT0gbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgUUNoYXIgYyA9IGIuYXQoaSk7CisgICAgICAg
IGlmICghYykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGEuYXQoaSku
YXNjaWlMb3dlcigpICE9IGMuYXNjaWlMb3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiBsZW5ndGggPT0gYi5sZW5ndGgoKTsKK30KKworYm9vbCBl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFFTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpCit7
CisgICAgaWYgKCFiKQorICAgICAgICByZXR1cm4gYS5pc051bGwoKTsKKworICAgIHVpbnQgbGVu
Z3RoID0gYS5sZW5ndGgoKTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgY2hhciBjID0gYltpXTsKKyAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYS5hdChpKS5hc2NpaUxvd2VyKCkgIT0gUUNoYXIo
YykuYXNjaWlMb3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiAhYltsZW5ndGhdOworfQorCitib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29u
c3QgY2hhciogYSwgY29uc3QgUVN0cmluZyYgYikKK3sKKyAgICBpZiAoIWEpCisgICAgICAgIHJl
dHVybiBiLmlzTnVsbCgpOworCisgICAgdWludCBsZW5ndGggPSBiLmxlbmd0aCgpOworICAgIGZv
ciAodWludCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAgICAgICBjaGFyIGMgPSBhW2ld
OworICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChRQ2hhcihjKS5hc2NpaUxvd2VyKCkgIT0gYi5hdChpKS5hc2NpaUxvd2VyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuICFhW2xlbmd0aF07Cit9CisK
ICNkZWZpbmUgTk9ERV9CTE9DS19TSVpFICgodm1fcGFnZV9zaXplKS9zaXplb2YoSGFuZGxlTm9k
ZSkpCiAKICNkZWZpbmUgVE9fTk9ERV9PRkZTRVQocHRyKSAgICgodWludCkoKCh1aW50KXB0ciAt
ICh1aW50KWJhc2UpL3NpemVvZihIYW5kbGVOb2RlKSkpCkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTI0NTEpCisrKyBwYWdlL0Zy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2MSw3ICsxMjYxLDcgQEAgYm9vbCBGcmFtZTo6
Z290b0FuY2hvciggY29uc3QgUVN0cmluZyAmbgogICBkLT5tX2RvYy0+c2V0Q1NTVGFyZ2V0KG4p
OyAvLyBTZXR0aW5nIHRvIG51bGwgd2lsbCBjbGVhciB0aGUgY3VycmVudCB0YXJnZXQuCiAgIAog
ICAvLyBJbXBsZW1lbnQgdGhlIHJ1bGUgdGhhdCAiIiBhbmQgInRvcCIgYm90aCBtZWFuIHRvcCBv
ZiBwYWdlIGFzIGluIG90aGVyIGJyb3dzZXJzLgotICBpZiAoIW4gJiYgIShuYW1lLmlzRW1wdHko
KSB8fCBuYW1lLmxvd2VyKCkgPT0gInRvcCIpKQorICBpZiAoIW4gJiYgIShuYW1lLmlzRW1wdHko
KSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJ0b3AiKSkpCiAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGxheW91dCBiZWZvcmUgc2Nyb2xs
aW5nLCBvdGhlcndpc2Ugd2UgY291bGQKQEAgLTE4MDAsNyArMTgwMCw3IEBAIHZvaWQgRnJhbWU6
OnN1Ym1pdEZvcm0oIGNvbnN0IGNoYXIgKmFjdGkKICAgICAgIGZvciAoUVN0cmluZ0xpc3Q6Okl0
ZXJhdG9yIG52cCA9IG52cHMuYmVnaW4oKTsgbnZwICE9IG52cHMuZW5kKCk7ICsrbnZwKSB7CiAg
ICAgICAgICBRU3RyaW5nTGlzdCBwYWlyID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCI9IiwgKm52cCk7
CiAgICAgICAgICBpZiAocGFpci5jb3VudCgpID49IDIpIHsKLSAgICAgICAgICAgIGlmIChwYWly
LmZpcnN0KCkubG93ZXIoKSA9PSAiYXR0YWNoIikgeworICAgICAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UocGFpci5maXJzdCgpLCAiYXR0YWNoIikpIHsKICAgICAgICAgICAgICAg
IG52cCA9IG52cHMucmVtb3ZlKG52cCk7CiAgICAgICAgICAgICAgICB0cmllZFRvQXR0YWNoID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE4MTAsMTAgKzE4MTAsMTAgQEAgdm9pZCBGcmFtZTo6
c3VibWl0Rm9ybSggY29uc3QgY2hhciAqYWN0aQogCiAgICAgICAvLyAyKSAgQXBwZW5kIGJvZHk9
CiAgICAgICBRU3RyaW5nIGJvZHlFbmM7Ci0gICAgICBpZiAoY29udGVudFR5cGUubG93ZXIoKSA9
PSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpIHsKKyAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGNvbnRlbnRUeXBlLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpKSB7CiAgICAgICAgICAvLyBG
SVhNRTogaXMgdGhpcyBjb3JyZWN0PyAgSSBzdXNwZWN0IG5vdAogICAgICAgICAgYm9keUVuYyA9
IEtVUkw6OmVuY29kZV9zdHJpbmcoZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCkpOwotICAgICAg
fSBlbHNlIGlmIChjb250ZW50VHlwZS5sb3dlcigpID09ICJ0ZXh0L3BsYWluIikgeworICAgICAg
fSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnRlbnRUeXBlLCAidGV4dC9wbGFp
biIpKSB7CiAgICAgICAgICAvLyBDb252ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGRlY29kZSwgYW5k
IHMvJi9cbi8KICAgICAgICAgIFFTdHJpbmcgdG1wYm9keSA9IGZvcm1EYXRhLmZsYXR0ZW5Ub1N0
cmluZygpOwogICAgICAgICAgdG1wYm9keS5yZXBsYWNlKCcmJywgJ1xuJyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>