<?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>7907</bug_id>
          
          <creation_ts>2006-03-22 01:45:38 -0800</creation_ts>
          <short_desc>Replace more uses of DeprecatedString with String</short_desc>
          <delta_ts>2006-03-22 14:24:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>37320</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-22 01:45:38 -0800</bug_when>
    <thetext>Replace more uses of DeprecatedString with String

This all started when I went to fix bug 7884 (before feeling sick and then sleeping for 16 hours straight).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37321</commentid>
    <comment_count>1</comment_count>
      <attachid>7227</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-22 01:46:18 -0800</bug_when>
    <thetext>Created attachment 7227
Replace more uses of DeprecatedString with String</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37324</commentid>
    <comment_count>2</comment_count>
      <attachid>7228</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-22 02:26:35 -0800</bug_when>
    <thetext>Created attachment 7228
Remove a few more DeprecatedString uses while I&apos;m at it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37348</commentid>
    <comment_count>3</comment_count>
      <attachid>7228</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-22 08:24:37 -0800</bug_when>
    <thetext>Comment on attachment 7228
Remove a few more DeprecatedString uses while I&apos;m at it...

+    if (s.isEmpty())
+        return String(cs);

You don&apos;t need all these isEmpty checks. The String + operator already handles them; an additional check doesn&apos;t add value.

The AccessibilityObjectCache changes are going to collide with my near-complete rewrite of that file due to fixing it for Garbage Collection (and yes, I had removed use of DeprecatedString).

I&apos;m not sure about the &quot;get values directly from settings&quot; change. It&apos;s a nice simplification. But it means that some settings that used to stay the same until location change will now be &quot;live&quot;. That means you could start loading a page with JavaScript disabled and then later have it enabled or vice versa. I believe that can lead to problems, although I&apos;m not certain. Since you&apos;re changing the semantics you will need to test.

r=me, assuming you test the settings change in Frame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37367</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-22 14:24:57 -0800</bug_when>
    <thetext>I made darin&apos;s suggested modifications and landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7227</attachid>
            <date>2006-03-22 01:46:18 -0800</date>
            <delta_ts>2006-03-22 02:26:35 -0800</delta_ts>
            <desc>Replace more uses of DeprecatedString with String</desc>
            <filename>string.patch</filename>
            <type>text/plain</type>
            <size>62053</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vU3RyaW5n
LmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBwbGF0Zm9ybS9TdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw2ICs4OCw0OCBAQCBTdHJpbmcgb3BlcmF0b3IrKGNvbnN0IFN0cmluZyYgYSwg
Y29uc3QgCiAgICAgcmV0dXJuIGM7CiB9CiAKK1N0cmluZyBvcGVyYXRvcisoY29uc3QgU3RyaW5n
JiBzLCBjb25zdCBjaGFyKiBjcykKK3sKKyAgICBpZiAocy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoY3MpOworICAgIHJldHVybiBzICsgU3RyaW5nKGNzKTsKK30KKworU3RyaW5n
IG9wZXJhdG9yKyhjb25zdCBjaGFyKiBjcywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhjcyk7CisgICAgcmV0dXJuIFN0cmlu
ZyhjcykgKyBzOworfQorCitTdHJpbmcgb3BlcmF0b3IrKGNvbnN0IFN0cmluZyYgcywgUUNoYXIg
YykKK3sKKyAgICBpZiAocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoYyk7Cisg
ICAgcmV0dXJuIHMgKyBTdHJpbmcoYyk7Cit9CisKK1N0cmluZyBvcGVyYXRvcisoUUNoYXIgYywg
Y29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhjKTsKKyAgICByZXR1cm4gU3RyaW5nKGMpICsgczsKK30KKworU3RyaW5nIG9wZXJh
dG9yKyhjb25zdCBTdHJpbmcmIHMsIGNoYXIgYykKK3sKKyAgICBpZiAocy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoYyk7CisgICAgcmV0dXJuIHMgKyBTdHJpbmcoYyk7Cit9CisK
K1N0cmluZyBvcGVyYXRvcisoY2hhciBjLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaWYgKHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKGMpOworICAgIHJldHVybiBTdHJpbmco
YykgKyBzOworfQorCiB2b2lkIFN0cmluZzo6aW5zZXJ0KGNvbnN0IFN0cmluZyYgc3RyLCB1bnNp
Z25lZCBwb3MpCiB7CiAgICAgaWYgKCFtX2ltcGwpCkluZGV4OiBwbGF0Zm9ybS9BdG9taWNTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMTM0
MzEpCisrKyBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdCgpOwogICAgIAogICAgIEF0b21p
Y1N0cmluZygpIHsgfQorICAgIEF0b21pY1N0cmluZyhRQ2hhciBjKSA6IG1fc3RyaW5nKGFkZCgm
YywgMSkpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFk
ZChzKSkgeyB9CiAgICAgQXRvbWljU3RyaW5nKGNvbnN0IFFDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6
IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgpKSB7IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgdW5z
aWduZWQgc2hvcnQqIHMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKChRQ2hhciopcywgbGVu
Z3RoKSkgeyB9CkluZGV4OiBwbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0v
S1VSTC5oCShyZXZpc2lvbiAxMzQzMSkKKysrIHBsYXRmb3JtL0tVUkwuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNiBAQCBwdWJsaWM6CiAgICAgS1VSTChjb25zdCBjaGFyKik7CiAgICAg
S1VSTChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6
OlRleHRFbmNvZGluZyYgZW5jb2RpbmcgPSBXZWJDb3JlOjpUZXh0RW5jb2RpbmcoV2ViQ29yZTo6
VVRGOEVuY29kaW5nKSk7CiAgICAgS1VSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7Ci0gICAg
S1VSTChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICNpZiBfX0FQUExFX18KICAgICBLVVJMKE5T
VVJMKik7CiAjZW5kaWYKSW5kZXg6IHBsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxMzQzMSkKKysrIHBsYXRmb3Jt
L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTAgKzE2NCwxMiBAQCB2b2lk
IFN0cmluZ0ltcGw6OnRydW5jYXRlKGludCBsZW4pCiB2b2lkIFN0cmluZ0ltcGw6OnJlbW92ZSh1
bnNpZ25lZCBwb3MsIGludCBsZW4pCiB7CiAgICAgYXNzZXJ0KCFfaW5UYWJsZSk7Ci0gICAgaWYo
bGVuIDw9IDApIHJldHVybjsKLSAgICBpZihwb3MgPj0gbCApIHJldHVybjsKLSAgICBpZigodW5z
aWduZWQpbGVuID4gbCAtIHBvcykKLSAgICBsZW4gPSBsIC0gcG9zOworICAgIGlmIChsZW4gPD0g
MCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChwb3MgPj0gbCApCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoKHVuc2lnbmVkKWxlbiA+IGwgLSBwb3MpCisgICAgICAgIGxlbiA9IGwgLSBwb3M7
CiAKICAgICB1bnNpZ25lZCBuZXdMZW4gPSBsLWxlbjsKICAgICBRQ2hhciogYyA9IG5ld1FDaGFy
VmVjdG9yKG5ld0xlbik7CkBAIC0yNDgsOSArMjUwLDkgQEAgc3RhdGljIExlbmd0aCBwYXJzZUxl
bmd0aChjb25zdCBRQ2hhciogcwogICAgICAgICArK2k7CiAKICAgICBpZiAob2spIHsKLSAgICAg
ICAgaWYgKGkgPT0gbCkgeworICAgICAgICBpZiAoaSA9PSBsKQogICAgICAgICAgICAgcmV0dXJu
IExlbmd0aChyLCBGaXhlZCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgY29uc3QgUUNoYXIqIG5leHQgPSBzK2k7CiAKICAgICAgICAgICAgIGlmICgqbmV4
dCA9PSAnJScpCkBAIC02MzgsNiArNjQwLDI2IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnJl
cGxhY2UoUUNoYXIgb2wKICAgICByZXR1cm4gYzsKIH0KIAorU3RyaW5nSW1wbCogU3RyaW5nSW1w
bDo6cmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuLCBjb25zdCBTdHJpbmdJbXBs
KiBzdHIpCit7CisgICAgU3RyaW5nSW1wbCogcyA9IGNvcHkoKTsKKyAgICBzLT5yZW1vdmUoaW5k
ZXgsIGxlbik7CisgICAgcy0+aW5zZXJ0KHN0ciwgaW5kZXgpOworICAgIHJldHVybiBzOworfQor
CitTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpyZXBsYWNlKFFDaGFyIHBhdHRlcm4sIGNvbnN0IFN0
cmluZ0ltcGwqIHN0cikKK3sKKyAgICBpbnQgc2xlbiA9IHN0ciA/IHN0ci0+bGVuZ3RoKCkgOiAw
OworICAgIGludCBpbmRleCA9IDA7CisgICAgU3RyaW5nSW1wbCogcmVzdWx0ID0gdGhpczsKKyAg
ICB3aGlsZSAoKGluZGV4ID0gcmVzdWx0LT5maW5kKHBhdHRlcm4sIGluZGV4KSkgPj0gMCkgewor
ICAgICAgICByZXN1bHQgPSByZXN1bHQtPnJlcGxhY2UoaW5kZXgsIDEsIHN0cik7CisgICAgICAg
IGluZGV4ICs9IHNsZW47CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGJvb2wgZXF1
YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikKIHsKICAgICByZXR1
cm4gU3RySGFzaDxTdHJpbmdJbXBsKj46OmVxdWFsKGEsIGIpOwpJbmRleDogcGxhdGZvcm0vS1VS
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDEzNDMxKQor
KysgcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSwyMyArMjU5LDYgQEAg
S1VSTDo6S1VSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1cmwpCiAgICAgICAgIHBhcnNlKHVy
bC5hc2NpaSgpLCAmdXJsKTsKIH0KIAotS1VSTDo6S1VSTChjb25zdCBTdHJpbmcmIHN0cmluZ1VS
TCkKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybCA9IHN0cmluZ1VSTC5kZXByZWNhdGVkU3Ry
aW5nKCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIHVybFswXSA9PSAnLycpIHsKLSAgICAg
ICAgLy8gNSBmb3IgImZpbGU6IiwgMSBmb3IgdGVybWluYXRvcgotICAgICAgICBWZWN0b3I8Y2hh
ciwgMjA0OD4gYnVmZmVyKHVybC5sZW5ndGgoKSArIDYpOwotICAgICAgICBidWZmZXJbMF0gPSAn
Zic7Ci0gICAgICAgIGJ1ZmZlclsxXSA9ICdpJzsKLSAgICAgICAgYnVmZmVyWzJdID0gJ2wnOwot
ICAgICAgICBidWZmZXJbM10gPSAnZSc7Ci0gICAgICAgIGJ1ZmZlcls0XSA9ICc6JzsKLSAgICAg
ICAgdXJsLmNvcHlMYXRpbjEoJmJ1ZmZlcls1XSk7Ci0gICAgICAgIHBhcnNlKGJ1ZmZlciwgMCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhcnNlKHVybC5hc2NpaSgpLCAmdXJsKTsKLX0KLQogS1VS
TDo6S1VSTChjb25zdCBLVVJMICZiYXNlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZyZWxhdGl2
ZSwgY29uc3QgV2ViQ29yZTo6VGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBBbGxv
dyBhdCBsZXN0IGFic29sdXRlIFVSTHMgdG8gcmVzb2x2ZSBhZ2FpbnN0IGFuIGVtcHR5IFVSTC4K
SW5kZXg6IHBsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0v
UGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24gMTM0MzEpCisrKyBwbGF0Zm9ybS9QbGF0Zm9ybVN0
cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIFN0cmluZyB7CiBwdWJsaWM6CiAgICAgU3RyaW5nKCkgeyB9IC8vIGdpdmVzIG51
bGwgc3RyaW5nLCBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBlbXB0eSBzdHJpbmcKKyAgICBTdHJp
bmcoUUNoYXIgYykgOiBtX2ltcGwobmV3IFN0cmluZ0ltcGwoJmMsIDEpKSB7IH0KICAgICBTdHJp
bmcoY29uc3QgUUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFN0cmluZyhjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJik7CiAgICAgU3RyaW5nKGNvbnN0IEtKUzo6SWRlbnRpZmllciYpOwpAQCAt
NzYsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+
ZW5kc1dpdGgocy5pbXBsKCksIGNhc2VTZW5zaXRpdmUpIDogcy5pc0VtcHR5KCk7IH0KIAogICAg
IFN0cmluZyYgcmVwbGFjZShRQ2hhciBhLCBRQ2hhciBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9
IG1faW1wbC0+cmVwbGFjZShhLCBiKTsgcmV0dXJuICp0aGlzOyB9CisgICAgU3RyaW5nJiByZXBs
YWNlKFFDaGFyIGEsIGNvbnN0IFN0cmluZyYgYikgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2lt
cGwtPnJlcGxhY2UoYSwgYi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7IH0KIAogICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgdHJ1bmNhdGUodW5zaWduZWQgbGVuKTsKQEAgLTEy
Niw2ICsxMjgsMTIgQEAgcHJpdmF0ZToKIH07CiAKIFN0cmluZyBvcGVyYXRvcisoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJik7CitTdHJpbmcgb3BlcmF0b3IrKGNvbnN0IFN0cmluZyYsIGNv
bnN0IGNoYXIqKTsKK1N0cmluZyBvcGVyYXRvcisoY29uc3QgY2hhciosIGNvbnN0IFN0cmluZyYp
OworU3RyaW5nIG9wZXJhdG9yKyhjb25zdCBTdHJpbmcmLCBRQ2hhcik7CitTdHJpbmcgb3BlcmF0
b3IrKFFDaGFyLCBjb25zdCBTdHJpbmcmKTsKK1N0cmluZyBvcGVyYXRvcisoY29uc3QgU3RyaW5n
JiwgY2hhcik7CitTdHJpbmcgb3BlcmF0b3IrKGNoYXIsIGNvbnN0IFN0cmluZyYpOwogCiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJl
dHVybiBlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCks
IGIpOyB9CkluZGV4OiBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBwbGF0
Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3Niw3ICsyMTc2
LDcgQEAgRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6cmVtbwogICAgIHJldHVy
biAqdGhpczsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6cmVwbGFj
ZSggdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAm
c3RyICkKK0RlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6OnJlcGxhY2UodW5zaWdu
ZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyKQogewog
ICAgIHJldHVybiByZW1vdmUoaW5kZXgsIGxlbikuaW5zZXJ0KGluZGV4LCBzdHIpOwogfQpAQCAt
MjE5Miw3ICsyMTkyLDYgQEAgRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6cmVw
bAogICAgIHJldHVybiAqdGhpczsKIH0KIAotCiBEZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVk
U3RyaW5nOjpyZXBsYWNlKFFDaGFyIHBhdHRlcm4sIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0
cikKIHsKICAgICBpbnQgc2xlbiA9IHN0ci5kYXRhSGFuZGxlWzBdLT5fbGVuZ3RoOwpAQCAtMjIw
NCw3ICsyMjAzLDYgQEAgRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6cmVwbAog
ICAgIHJldHVybiAqdGhpczsKIH0KIAotCiBEZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3Ry
aW5nOjpyZXBsYWNlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnBhdHRlcm4sIGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcgJnN0cikKIHsKICAgICBpZiAocGF0dGVybi5pc0VtcHR5KCkpCkluZGV4OiBw
bGF0Zm9ybS9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vU3RyaW5nSW1wbC5o
CShyZXZpc2lvbiAxMzQzMSkKKysrIHBsYXRmb3JtL1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnQoY29uc3QgU3RyaW5n
SW1wbCosIHVuc2lnbmVkIHBvcyk7CiAgICAgdm9pZCB0cnVuY2F0ZShpbnQgbGVuKTsKICAgICB2
b2lkIHJlbW92ZSh1bnNpZ25lZCBwb3MsIGludCBsZW4gPSAxKTsKKyAgICAKICAgICBTdHJpbmdJ
bXBsKiBzcGxpdCh1bnNpZ25lZCBwb3MpOwogICAgIFN0cmluZ0ltcGwqIGNvcHkoKSBjb25zdCB7
IHJldHVybiBuZXcgU3RyaW5nSW1wbChzLCBsKTsgfQogCkBAIC0xMDEsOCArMTAyLDEwIEBAIHB1
YmxpYzoKICAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3RyaW5nSW1wbCogcywgYm9vbCBjYXNl
U2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gZmluZChzLCAwLCBjYXNlU2Vuc2l0aXZl
KSA9PSAwOyB9CiAgICAgYm9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmdJbXBsKiwgYm9vbCBjYXNl
U2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICAvLyBUaGlzIG1vZGlmaWVzIHRoZSBzdHJp
bmcgaW4gcGxhY2UgaWYgdGhlcmUgaXMgb25seSBvbmUgcmVmLCBtYWtlcyBhIG5ldyBzdHJpbmcg
b3RoZXJ3aXNlLgorICAgIC8vIERvZXMgbm90IG1vZGlmeSB0aGUgc3RyaW5nLgogICAgIFN0cmlu
Z0ltcGwqIHJlcGxhY2UoUUNoYXIsIFFDaGFyKTsKKyAgICBTdHJpbmdJbXBsKiByZXBsYWNlKFFD
aGFyIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpOworICAgIFN0cmluZ0ltcGwqIHJlcGxhY2UodW5z
aWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3QgU3RyaW5nSW1wbCopOwogCiAgICAgc3Rh
dGljIFN0cmluZ0ltcGwqIGVtcHR5KCk7CiAKSW5kZXg6IGJpbmRpbmdzL29iamMvRE9NSFRNTC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHJldmlzaW9uIDEzNDMx
KQorKysgYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsNyAr
NTEwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKV9jcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzoo
TlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJM
U3RyaW5nCiB7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKFtzZWxmIF9kb2N1bWVudF0sIERlcHJlY2F0ZWRTdHJpbmc6OmZy
b21OU1N0cmluZyhtYXJrdXBTdHJpbmcpLCBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTlNTdHJpbmco
YmFzZVVSTFN0cmluZykpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChbc2VsZiBfZG9jdW1lbnRdLCBtYXJrdXBTdHJpbmcs
IGJhc2VVUkxTdHJpbmcpOwogICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBfZG9jdW1l
bnRGcmFnbWVudFdpdGg6ZnJhZ21lbnQuZ2V0KCldOwogfQogCkluZGV4OiBodG1sL2h0bWxfaGVh
ZGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9oZWFkaW1wbC5jcHAJKHJldmlzaW9u
IDEzNDMxKQorKysgaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEy
LDcgKzIxMiw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKICAgICBpZiAoIWlu
RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyB0eXBl
ID0gbV90eXBlLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOworICAgIFN0cmluZyB0eXBlID0g
bV90eXBlLmxvd2VyKCk7CiAgICAgCiAgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+
ZnJhbWUoKTsKIApJbmRleDogaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL2h0bWxfYmFzZWltcGwuY3BwCShyZXZpc2lvbiAxMzQzMSkKKysrIGh0bWwvaHRtbF9iYXNl
aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEhUTUxGcmFt
ZUVsZW1lbnQ6Om9wZW5VUkwoKQogICAgIGlmIChGcmFtZSogY2hpbGRGcmFtZSA9IHBhcmVudEZy
YW1lLT50cmVlKCktPmNoaWxkKG1fbmFtZSkpCiAgICAgICAgIGNoaWxkRnJhbWUtPm9wZW5VUkwo
Z2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocmVsYXRpdmVVUkwuZGVwcmVjYXRlZFN0cmluZygp
KSk7CiAgICAgZWxzZQotICAgICAgICBwYXJlbnRGcmFtZS0+cmVxdWVzdEZyYW1lKHN0YXRpY19j
YXN0PFJlbmRlckZyYW1lICo+KHJlbmRlcmVyKCkpLCByZWxhdGl2ZVVSTC5kZXByZWNhdGVkU3Ry
aW5nKCksIG1fbmFtZS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgICAgICBwYXJlbnRGcmFtZS0+
cmVxdWVzdEZyYW1lKHN0YXRpY19jYXN0PFJlbmRlckZyYW1lICo+KHJlbmRlcmVyKCkpLCByZWxh
dGl2ZVVSTCwgbV9uYW1lKTsKIH0KIAogCkBAIC00MjQsNyArNDI0LDcgQEAgdm9pZCBIVE1MRnJh
bWVFbGVtZW50OjphdHRhY2goKQogICAgIG1fbmFtZSA9IGZyYW1lLT50cmVlKCktPnVuaXF1ZUNo
aWxkTmFtZShtX25hbWUpOwogCiAgICAgLy8gbG9hZCB0aGUgZnJhbWUgY29udGVudHMKLSAgICBm
cmFtZS0+cmVxdWVzdEZyYW1lKHN0YXRpY19jYXN0PFJlbmRlckZyYW1lKj4ocmVuZGVyZXIoKSks
IHJlbGF0aXZlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSwgbV9uYW1lLmRlcHJlY2F0ZWRTdHJpbmco
KSk7CisgICAgZnJhbWUtPnJlcXVlc3RGcmFtZShzdGF0aWNfY2FzdDxSZW5kZXJGcmFtZSo+KHJl
bmRlcmVyKCkpLCByZWxhdGl2ZVVSTCwgbV9uYW1lKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVt
ZW50OjpjbG9zZSgpCkluZGV4OiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgaHRtbC9IVE1MVG9r
ZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDExICszODYsMTAgQEAgSFRNTFRva2Vu
aXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgIGN1cnJlbnRQcmVwZW5kaW5nU3Jj
ID0gJnByZXBlbmRpbmdTcmM7CiAgICAgaWYgKCFwYXJzZXItPnNraXBNb2RlKCkgJiYgIWZvbGxv
d2luZ0ZyYW1lc2V0KSB7CiAgICAgICAgIGlmIChjcykgewotICAgICAgICAgICAgaWYgKHNhdmVk
UHJlcGVuZGluZ1NyYykgeworICAgICAgICAgICAgaWYgKHNhdmVkUHJlcGVuZGluZ1NyYykKICAg
ICAgICAgICAgICAgICBzYXZlZFByZXBlbmRpbmdTcmMtPmFwcGVuZChzcmMpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwZW5kaW5nU3Jj
LnByZXBlbmQoc3JjKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldFNyYyhTZWdtZW50
ZWRTdHJpbmcoKSk7CiAgICAgICAgICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENvZGVSZXN5
bmMgPSAwOwogCkluZGV4OiBodG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9odG1sX29iamVjdGltcGwuY3BwCShyZXZpc2lvbiAxMzQzMSkKKysrIGh0bWwvaHRtbF9v
YmplY3RpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDExICsxNjAsOSBAQCBib29sIEhU
TUxBcHBsZXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkCiAKIFJlbmRlck9iamVjdCAqSFRNTEFw
cGxldEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5
bGUgKnN0eWxlKQogewotI2lmbmRlZiBRX1dTX1FXUyAvLyBGSVhNRShFKT8gSSBkb24ndCB0aGlu
ayB0aGlzIGlzIHBvc3NpYmxlIHdpdGggUXQgRW1iZWRkZWQuLi4KICAgICBGcmFtZSAqZnJhbWUg
PSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwogCi0gICAgaWYoIGZyYW1lICYmIGZyYW1lLT5qYXZh
RW5hYmxlZCgpICkKLSAgICB7CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5qYXZhRW5hYmxlZCgp
KSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFyZ3M7CiAKICAgICAgICAgYXJn
cy5zZXQoImNvZGUiLCBnZXRBdHRyaWJ1dGUoY29kZUF0dHIpKTsKQEAgLTE5Miw5ICsxOTAsNiBA
QCBSZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSCiAgICAgLy8gIyMjIHJl
bW92ZSBtZS4gd2Ugc2hvdWxkIG5ldmVyIHNob3cgYW4gZW1wdHkgYXBwbGV0LCBpbnN0ZWFkCiAg
ICAgLy8gcmVuZGVyIHRoZSBhbHRlcm5hdGl2ZSBjb250ZW50IGdpdmVuIGJ5IHRoZSB3ZWJwYWdl
CiAgICAgcmV0dXJuIG5ldyAoZ2V0RG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyRW1w
dHlBcHBsZXQodGhpcyk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAKICNpZiBf
X0FQUExFX18KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgcmVuZGVy
aW5nL3JlbmRlcl9mcmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzcsOSArNjc3LDkgQEAg
UmVuZGVyUGFydE9iamVjdDo6UmVuZGVyUGFydE9iamVjdChIVE1MRQogICAgIG1faGFzRmFsbGJh
Y2tDb250ZW50ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGlzVVJMQWxsb3dlZChXZWJDb3Jl
OjpEb2N1bWVudCAqZG9jLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1cmwpCitzdGF0aWMgYm9v
bCBpc1VSTEFsbG93ZWQoV2ViQ29yZTo6RG9jdW1lbnQgKmRvYywgY29uc3QgU3RyaW5nICZ1cmwp
CiB7Ci0gICAgS1VSTCBuZXdVUkwoZG9jLT5jb21wbGV0ZVVSTCh1cmwpKTsKKyAgICBLVVJMIG5l
d1VSTChkb2MtPmNvbXBsZXRlVVJMKHVybC5kZXByZWNhdGVkU3RyaW5nKCkpKTsKICAgICBuZXdV
Ukwuc2V0UmVmKERlcHJlY2F0ZWRTdHJpbmc6Om51bGwpOwogICAgIAogICAgIGlmIChkb2MtPmZy
YW1lKCktPnBhZ2UoKS0+ZnJhbWVDb3VudCgpID49IDIwMCkKQEAgLTcwMCw3ICs3MDAsNyBAQCBz
dGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoV2ViQ29yZTo6RG9jdW1lCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShjb25zdCBE
ZXByZWNhdGVkU3RyaW5nICZjbGFzc0lkLCBEZXByZWNhdGVkU3RyaW5nICZzZXJ2aWNlVHlwZSkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcm
IGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCiB7CiAgICAgLy8gSXQgaXMgQWN0aXZlWCwg
YnV0IHRoZSBuc3BsdWdpbiBzeXN0ZW0gaGFuZGxpbmcKICAgICAvLyBzaG91bGQgYWxzbyB3b3Jr
LCB0aGF0J3Mgd2h5IHdlIGRvbid0IG92ZXJyaWRlIHRoZQpAQCAtNzI2LDEwICs3MjYsMTAgQEAg
c3RhdGljIGlubGluZSB2b2lkIG1hcENsYXNzSWRUb1NlcnZpY2VUeQogCiB2b2lkIFJlbmRlclBh
cnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiB7Ci0gIERlcHJlY2F0ZWRTdHJpbmcgdXJsOwotICBE
ZXByZWNhdGVkU3RyaW5nIHNlcnZpY2VUeXBlOwotICBEZXByZWNhdGVkU3RyaW5nTGlzdCBwYXJh
bU5hbWVzOwotICBEZXByZWNhdGVkU3RyaW5nTGlzdCBwYXJhbVZhbHVlczsKKyAgU3RyaW5nIHVy
bDsKKyAgU3RyaW5nIHNlcnZpY2VUeXBlOworICBWZWN0b3I8U3RyaW5nPiBwYXJhbU5hbWVzOwor
ICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKICAgRnJhbWUgKmZyYW1lID0gbV92aWV3LT5m
cmFtZSgpOwogCiAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CkBAIC03NDYsMTEg
Kzc0NiwxMCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICAg
ICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewogICAgICAgICAgICAgICBlbWJl
ZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQgKj4oIGNoaWxkICk7CiAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFn
KSkKICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAv
LyBEb24ndCBkZXNjZW5kIGludG8gbmVzdGVkIE9CSkVDVCB0YWdzCi0gICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPnRyYXZlcnNl
TmV4dE5vZGUobyk7ICAgLy8gT3RoZXJ3aXNlIGRlc2NlbmQgKEVNQkVEcyBtYXkgYmUgaW5zaWRl
IENPTU1FTlQgdGFncykKLSAgICAgICAgICB9CiAgICAgICB9CiAgICAgICAKICAgICAgIC8vIFVz
ZSB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBFTUJFRCB0YWcgaW5zdGVhZCBvZiB0aGUgT0JKRUNU
IHRhZyBpbmNsdWRpbmcgV0lEVEggYW5kIEhFSUdIVC4KQEAgLTc1OCwyNiArNzU3LDIxIEBAIHZv
aWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgIGlmIChlbWJlZCkgewog
ICAgICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1lbnQgKillbWJlZDsKICAgICAgICAg
ICBTdHJpbmcgYXR0cmlidXRlID0gZW1iZWRPck9iamVjdC0+Z2V0QXR0cmlidXRlKHdpZHRoQXR0
cik7Ci0gICAgICAgICAgaWYgKCFhdHRyaWJ1dGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgaWYg
KCFhdHRyaWJ1dGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICBvLT5zZXRBdHRyaWJ1dGUod2lk
dGhBdHRyLCBhdHRyaWJ1dGUpOwotICAgICAgICAgIH0KICAgICAgICAgICBhdHRyaWJ1dGUgPSBl
bWJlZE9yT2JqZWN0LT5nZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cik7Ci0gICAgICAgICAgaWYgKCFh
dHRyaWJ1dGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUuaXNFbXB0eSgp
KQogICAgICAgICAgICAgICBvLT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgYXR0cmlidXRlKTsK
LSAgICAgICAgICB9CiAgICAgICAgICAgdXJsID0gZW1iZWQtPnVybDsKICAgICAgICAgICBzZXJ2
aWNlVHlwZSA9IGVtYmVkLT5zZXJ2aWNlVHlwZTsKLSAgICAgIH0gZWxzZSB7CisgICAgICB9IGVs
c2UKICAgICAgICAgICBlbWJlZE9yT2JqZWN0ID0gKEhUTUxFbGVtZW50ICopbzsKLSAgICAgIH0K
ICAgICAgIAogICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIFVSTCBvciB0eXBlIGRlZmluZWQgaW4g
RU1CRUQsIHRyeSB0aGUgT0JKRUNUIHRhZy4KLSAgICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7Cisg
ICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgICB1cmwgPSBvLT51cmw7Ci0gICAgICB9
Ci0gICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpKSB7CisgICAgICBpZiAoc2VydmljZVR5
cGUuaXNFbXB0eSgpKQogICAgICAgICAgIHNlcnZpY2VUeXBlID0gby0+c2VydmljZVR5cGU7Ci0g
ICAgICB9CiAgICAgICAKICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCosIENhc2VJbnNlbnNpdGl2
ZUhhc2g+IHVuaXF1ZVBhcmFtTmFtZXM7CiAgICAgICAKQEAgLTc5MCwxMyArNzg0LDEyIEBAIHZv
aWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgICAgICAgICAgSFRNTFBh
cmFtRWxlbWVudCAqcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnQgKj4oY2hpbGQpOwog
ICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHAtPm5hbWUoKS5sb3dlcigpOwogICAgICAgICAg
ICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiAobmFtZSA9PSAic3JjIiB8fCBuYW1lID09ICJtb3Zp
ZSIgfHwgbmFtZSA9PSAiY29kZSIgfHwgbmFtZSA9PSAidXJsIikpCi0gICAgICAgICAgICAgICAg
ICB1cmwgPSBwLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAg
IHVybCA9IHAtPnZhbHVlKCk7CiAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5
KCkgJiYgbmFtZSA9PSAidHlwZSIpIHsKLSAgICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0g
cC0+dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICBpbnQgcG9z
ID0gc2VydmljZVR5cGUuZmluZCggIjsiICk7Ci0gICAgICAgICAgICAgICAgICBpZiAocG9zICE9
IC0xKSB7CisgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHAtPnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICBpbnQgcG9zID0gc2VydmljZVR5cGUuZmluZCgiOyIpOworICAgICAgICAg
ICAgICAgICAgaWYgKHBvcyAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlw
ZSA9IHNlcnZpY2VUeXBlLmxlZnQocG9zKTsKLSAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICBpZiAoIWVtYmVkICYmICFuYW1lLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgICAgdW5pcXVlUGFyYW1OYW1lcy5hZGQocC0+bmFtZSgpLmltcGwoKSk7
CkBAIC04MzMsNyArODI2LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQo
KQogICAgICAgCiAgICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgdHlwZSwgdHJ5IHRv
IG1hcCBmcm9tIGEgc3BlY2lmaWMgQ0xBU1NJRCB0byBhIHR5cGUuCiAgICAgICBpZiAoc2Vydmlj
ZVR5cGUuaXNFbXB0eSgpICYmICFvLT5jbGFzc0lkLmlzRW1wdHkoKSkKLSAgICAgICAgICBtYXBD
bGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lkLmRlcHJlY2F0ZWRTdHJpbmcoKSwgc2Vydmlj
ZVR5cGUpOworICAgICAgICAgIG1hcENsYXNzSWRUb1NlcnZpY2VUeXBlKG8tPmNsYXNzSWQsIHNl
cnZpY2VUeXBlKTsKICAgICAgIAogICAgICAgLy8gSWYgbm8gVVJMIGFuZCB0eXBlLCBhYm9ydC4K
ICAgICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKQEAgLTg0
OCw3ICs4NDEsNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAg
ICAgICAgICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFzdGF0aWNfY2FzdDxUZXh0Kj4oY2hp
bGQpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpKQogICAgICAgICAgICAgICBtX2hhc0ZhbGxi
YWNrQ29udGVudCA9IHRydWU7CiAgICAgICB9Ci0gICAgICBib29sIHN1Y2Nlc3MgPSBmcmFtZS0+
cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIG8tPm5hbWUoKS5kZXByZWNhdGVkU3RyaW5nKCksIHNl
cnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgICBib29sIHN1Y2Nlc3Mg
PSBmcmFtZS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIEF0b21pY1N0cmluZyhvLT5uYW1lKCkp
LCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICAgICAgaWYgKCFzdWNj
ZXNzICYmIG1faGFzRmFsbGJhY2tDb250ZW50KQogICAgICAgICAgIG8tPnJlbmRlckZhbGxiYWNr
Q29udGVudCgpOwogICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShlbWJlZFRhZykp
IHsKQEAgLTg2NiwyMSArODU5LDIxIEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lk
Z2V0KCkKICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGEtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGEtPmF0
dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5uYW1l
KCkubG9jYWxOYW1lKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAgICAgICAgcGFyYW1W
YWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgICAg
ICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5uYW1lKCkubG9jYWxOYW1lKCkuZG9tU3RyaW5nKCkp
OworICAgICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCkuZG9tU3RyaW5n
KCkpOwogICAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGZyYW1lLT5yZXF1ZXN0T2JqZWN0KHRo
aXMsIHVybCwgby0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCksIHNl
cnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgICBmcmFtZS0+cmVxdWVz
dE9iamVjdCh0aGlzLCB1cmwsIG8tPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBl
LCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAgIH0gZWxzZSB7CiAgICAgICBhc3NlcnQoZWxl
bWVudCgpLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpOwogICAgICAgSFRNTElGcmFtZUVsZW1lbnQg
Km8gPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCAqPihlbGVtZW50KCkpOwotICAgICAg
dXJsID0gby0+bV9VUkwuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgdXJsID0gby0+bV9VUkw7
CiAgICAgICBpZiAoIWlzVVJMQWxsb3dlZChkb2N1bWVudCgpLCB1cmwpKQogICAgICAgICAgIHJl
dHVybjsKICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICAgIHVybCA9ICJhYm91dDpi
bGFuayI7CiAgICAgICBGcmFtZVZpZXcgKnYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcgKj4obV92
aWV3KTsKLSAgICAgIHYtPmZyYW1lKCktPnJlcXVlc3RGcmFtZSh0aGlzLCB1cmwsIG8tPm1fbmFt
ZS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgICAgdi0+ZnJhbWUoKS0+cmVxdWVzdEZyYW1lKHRo
aXMsIHVybCwgby0+bV9uYW1lKTsKICAgfQogfQogCkluZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDcgKzM2Nyw3IEBAIHZvaWQgRG9jdW1l
bnQ6OnJlc2V0VmlzaXRlZExpbmtDb2xvcigpCiAKIHZvaWQgRG9jdW1lbnQ6OnJlc2V0QWN0aXZl
TGlua0NvbG9yKCkKIHsKLSAgICBtX2FjdGl2ZUxpbmtDb2xvci5zZXROYW1lZENvbG9yKERlcHJl
Y2F0ZWRTdHJpbmcoInJlZCIpKTsKKyAgICBtX2FjdGl2ZUxpbmtDb2xvci5zZXROYW1lZENvbG9y
KCJyZWQiKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0RG9jVHlwZShQYXNzUmVmUHRyPERvY3Vt
ZW50VHlwZT4gZG9jVHlwZSkKQEAgLTcxNSw4ICs3MTUsNyBAQCBOb2RlOjpOb2RlVHlwZSBEb2N1
bWVudDo6bm9kZVR5cGUoKSBjb25zCiBEZXByZWNhdGVkU3RyaW5nIERvY3VtZW50OjpuZXh0U3Rh
dGUoKQogewogICAgRGVwcmVjYXRlZFN0cmluZyBzdGF0ZTsKLSAgIGlmICghbV9zdGF0ZS5pc0Vt
cHR5KCkpCi0gICB7CisgICBpZiAoIW1fc3RhdGUuaXNFbXB0eSgpKSB7CiAgICAgICBzdGF0ZSA9
IG1fc3RhdGUuZmlyc3QoKTsKICAgICAgIG1fc3RhdGUucmVtb3ZlKG1fc3RhdGUuYmVnaW4oKSk7
CiAgICB9CkBAIC0xMzI3LDcgKzEzMjYsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRTdHlsZVNoZWV0
KGNvbnN0IFN0cmluCiAgICAgdXBkYXRlU3R5bGVTZWxlY3RvcigpOwogfQogCi12b2lkIERvY3Vt
ZW50OjpzZXRVc2VyU3R5bGVTaGVldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzaGVldCkKK3Zv
aWQgRG9jdW1lbnQ6OnNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgc2hlZXQpCiB7CiAg
ICAgaWYgKG1fdXNlcnNoZWV0ICE9IHNoZWV0KSB7CiAgICAgICAgIG1fdXNlcnNoZWV0ID0gc2hl
ZXQ7CkBAIC0xNTc4LDkgKzE1NzcsNyBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2
KGNvbnN0IFN0CiAgICAgICAgIG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0ID0gY29udGVudDsKICAg
ICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0ID0gY29udGVudDsKICAgICAgICAgdXBkYXRl
U3R5bGVTZWxlY3RvcigpOwotICAgIH0KLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShl
cXVpdiwgInJlZnJlc2giKSAmJiBmcmFtZS0+bWV0YVJlZnJlc2hFbmFibGVkKCkpCi0gICAgewor
ICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJyZWZyZXNoIikpIHsKICAg
ICAgICAgLy8gZ2V0IGRlbGF5IGFuZCB1cmwKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHIg
PSBjb250ZW50LmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAg
aW50IHBvcyA9IHN0ci5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJbOyxdIikpOwpAQCAtMTU5Myw3
ICsxNTkwLDggQEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdAogICAg
ICAgICAgICAgaW50IGRlbGF5ID0gMDsKICAgICAgICAgICAgIGRlbGF5ID0gc3RyLnRvSW50KCZv
ayk7CiAgICAgICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUgcmVm
cmVzaCB0aW1lb3V0ID4gMSBzZWNvbmQKLSAgICAgICAgICAgIGlmKG9rICYmIGZyYW1lKSBmcmFt
ZS0+c2NoZWR1bGVSZWRpcmVjdGlvbihkZWxheSwgZnJhbWUtPnVybCgpLnVybCgpLCBkZWxheSA8
PSAxKTsKKyAgICAgICAgICAgIGlmIChvayAmJiBmcmFtZSkKKyAgICAgICAgICAgICAgICBmcmFt
ZS0+c2NoZWR1bGVSZWRpcmVjdGlvbihkZWxheSwgZnJhbWUtPnVybCgpLnVybCgpLCBkZWxheSA8
PSAxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRvdWJsZSBkZWxheSA9IDA7CiAg
ICAgICAgICAgICBib29sIG9rID0gZmFsc2U7CkBAIC0xNjEyLDIyICsxNjEwLDE2IEBAIHZvaWQg
RG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYoY29uc3QgU3QKICAgICAgICAgICAgICAgICAvLyBX
ZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUgcmVmcmVzaCB0aW1lb3V0ID4gMSBzZWNv
bmQKICAgICAgICAgICAgICAgICBmcmFtZS0+c2NoZWR1bGVSZWRpcmVjdGlvbihkZWxheSwgY29t
cGxldGVVUkwoc3RyKSwgZGVsYXkgPD0gMSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJleHBpcmVzIikpCi0gICAgeworICAgIH0gZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJleHBpcmVzIikpIHsKICAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyBzdHIgPSBjb250ZW50LmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRl
U3BhY2UoKTsKICAgICAgICAgdGltZV90IGV4cGlyZV9kYXRlID0gc3RyLnRvSW50KCk7CiAgICAg
ICAgIGlmIChtX2RvY0xvYWRlcikKICAgICAgICAgICAgIG1fZG9jTG9hZGVyLT5zZXRFeHBpcmVE
YXRlKGV4cGlyZV9kYXRlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdDYXNl
KGVxdWl2LCAicHJhZ21hIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJjYWNoZS1jb250
cm9sIikpICYmIGZyYW1lKQotICAgIHsKKyAgICB9IGVsc2UgaWYgKChlcXVhbElnbm9yaW5nQ2Fz
ZShlcXVpdiwgInByYWdtYSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY2FjaGUtY29u
dHJvbCIpKSAmJiBmcmFtZSkgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IGNvbnRl
bnQuZGVwcmVjYXRlZFN0cmluZygpLmxvd2VyKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAg
IEtVUkwgdXJsID0gZnJhbWUtPnVybCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShlcXVpdiwgInNldC1jb29raWUiKSkKLSAgICB7Ci0gICAgICAgIC8vICMjIyBtYWtl
IHNldENvb2tpZSB3b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0
bWw6bWV0YSAuLi4uLj4KKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAi
c2V0LWNvb2tpZSIpKSB7CisgICAgICAgIC8vICMjIyBGSVhNRTogbWFrZSBzZXRDb29raWUgd29y
ayBvbiBYTUwgZG9jdW1lbnRzIHRvbzsgZS5nLiBpbiBjYXNlIG9mIDxodG1sOm1ldGEgLi4uLi4+
CiAgICAgICAgIGlmIChpc0hUTUxEb2N1bWVudCgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50ICo+KHRoaXMpLT5zZXRDb29raWUoY29udGVudCk7CiAgICAgfQpAQCAtMTkx
MCw3ICsxOTAyLDcgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAKICAg
ICAvLyBDcmVhdGUgYSBuZXcgc3R5bGUgc2VsZWN0b3IKICAgICBkZWxldGUgbV9zdHlsZVNlbGVj
dG9yOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgdXNlcnNoZWV0ID0gbV91c2Vyc2hlZXQ7CisgICAg
U3RyaW5nIHVzZXJzaGVldCA9IG1fdXNlcnNoZWV0OwogICAgIGlmIChtX3ZpZXcgJiYgbV92aWV3
LT5tZWRpYVR5cGUoKSA9PSAicHJpbnQiKQogICAgICAgICB1c2Vyc2hlZXQgKz0gbV9wcmludFNo
ZWV0OwogICAgIG1fc3R5bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVz
ZXJzaGVldCwgbV9zdHlsZVNoZWV0cy5nZXQoKSwgIWluQ29tcGF0TW9kZSgpKTsKSW5kZXg6IGRv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzQz
MSkKKysrIGRvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsMTAgKzI4MCwxMCBA
QCBwdWJsaWM6CiAKICAgICAvLyBmcm9tIGNhY2hlZE9iamVjdENsaWVudAogICAgIHZpcnR1YWwg
dm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNoZWV0
U3RyKTsKLSAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
IHNoZWV0KTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVzZXJTdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gbV91c2Vyc2hlZXQ7IH0KLSAgICB2b2lkIHNldFByaW50U3R5bGVTaGVldChjb25zdCBE
ZXByZWNhdGVkU3RyaW5nJiBzaGVldCkgeyBtX3ByaW50U2hlZXQgPSBzaGVldDsgfQotICAgIERl
cHJlY2F0ZWRTdHJpbmcgcHJpbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wcmludFNo
ZWV0OyB9CisgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KTsK
KyAgICBjb25zdCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV91c2Vy
c2hlZXQ7IH0KKyAgICB2b2lkIHNldFByaW50U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0
KSB7IG1fcHJpbnRTaGVldCA9IHNoZWV0OyB9CisgICAgY29uc3QgU3RyaW5nJiBwcmludFN0eWxl
U2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3ByaW50U2hlZXQ7IH0KIAogICAgIENTU1N0eWxlU2hl
ZXQqIGVsZW1lbnRTaGVldCgpOwogICAgIHZpcnR1YWwgVG9rZW5pemVyKiBjcmVhdGVUb2tlbml6
ZXIoKTsKQEAgLTU0Nyw4ICs1NDcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPERPTUltcGxl
bWVudGF0aW9uPiBtX2ltcGxlbWVudGF0aW9uOwogCiAgICAgUmVmUHRyPFN0eWxlU2hlZXQ+IG1f
c2hlZXQ7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBtX3VzZXJzaGVldDsKLSAgICBEZXByZWNhdGVk
U3RyaW5nIG1fcHJpbnRTaGVldDsKKyAgICBTdHJpbmcgbV91c2Vyc2hlZXQ7CisgICAgU3RyaW5n
IG1fcHJpbnRTaGVldDsKICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBtX2F2YWlsYWJsZVNoZWV0
czsKIAogICAgIC8vIFRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxl
dmVsIHN0eWxlc2hlZXRzLiAgU2hlZXRzCkluZGV4OiBlZGl0aW5nL21hcmt1cC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGVkaXRpbmcvbWFya3VwLmgJKHJldmlzaW9uIDEzNDMxKQorKysgZWRpdGluZy9tYXJr
dXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBlbnVtIEVDaGlsZHJlbk9ubHkgeyBJbmNsdWRlTm9kZSwgQ2hpbGRyZW5Pbmx5IH07CiAKIFBh
c3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChXZWJDb3JlOjpEb2N1bWVudCAqZG9jdW1lbnQsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnRl
eHQpOwotUGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoV2ViQ29yZTo6RG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBEZXByZWNhdGVk
U3RyaW5nICZtYXJrdXAsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJmJhc2VVUkwpOworUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
V2ViQ29yZTo6RG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBTdHJpbmcgJm1hcmt1cCwgY29uc3Qg
U3RyaW5nICZiYXNlVVJMKTsKIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tTm9kZUxpc3QoV2ViQ29yZTo6RG9jdW1lbnQgKmRvY3VtZW50LCBj
b25zdCBEZXByZWNhdGVkUHRyTGlzdDxXZWJDb3JlOjpOb2RlPiAmbm9kZUxpc3QpOwogCiBEZXBy
ZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBXZWJDb3JlOjpSYW5nZSAqcmFuZ2UsCklu
ZGV4OiBlZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9tYXJrdXAuY3Bw
CShyZXZpc2lvbiAxMzQzMSkKKysrIGVkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDc4LDcgKzQ3OCw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJh
bmcKICAgICByZXR1cm4gbWFya3Vwcy5qb2luKCIiKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBEZXByZWNhdGVkU3RyaW5nJiBtYXJrdXAsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGJh
c2VVUkwpCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJp
bmcmIGJhc2VVUkwpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+
aXNIVE1MRWxlbWVudCgpKTsKICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgZG9jdW1lbnQgZWxl
bWVudCBpcyBub3QgYW4gSFRNTCBlbGVtZW50PwpAQCAtNDg4LDcgKzQ4OCw3IEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICBBU1NFUlQoZnJhZ21lbnQpOwog
CiAgICAgaWYgKCFiYXNlVVJMLmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9IGRvY3VtZW50LT5iYXNl
VVJMKCkpCi0gICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7Cisg
ICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTC5kZXByZWNhdGVkU3Ry
aW5nKCkpOwogCiAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIH0KQEAgLTU1Myw3ICs1
NTMsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5nID0gdGV4dDsKIAogICAgICAgICAvLyBCcmVhayBzdHJp
bmcgaW50byBwYXJhZ3JhcGhzLiBFeHRyYSBsaW5lIGJyZWFrcyB0dXJuIGludG8gZW1wdHkgcGFy
YWdyYXBocy4KLSAgICAgICAgc3RyaW5nLnJlcGxhY2UoRGVwcmVjYXRlZFN0cmluZygiXHJcbiIp
LCAiXG4iKTsKKyAgICAgICAgc3RyaW5nLnJlcGxhY2UoIlxyXG4iLCAiXG4iKTsKICAgICAgICAg
c3RyaW5nLnJlcGxhY2UoJ1xyJywgJ1xuJyk7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0
IGxpc3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJ1xuJywgc3RyaW5nLCB0cnVlKTsg
Ly8gdHJ1ZSBnZXRzIHVzIGVtcHR5IHN0cmluZ3MgaW4gdGhlIGxpc3QKICAgICAgICAgd2hpbGUg
KCFsaXN0LmlzRW1wdHkoKSkgewpJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5n
ZUxvZwkocmV2aXNpb24gMTM0MzEpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMjAgQEAKKzIwMDYtMDMtMjIgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFj
ZSBtb3JlIHVzZXMgb2YgRGVwcmVjYXRlZFN0cmluZyB3aXRoIFN0cmluZy4KKworICAgICAgICAq
IGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRNTERvY3VtZW50IF9j
cmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpiYXNlVVJMU3RyaW5nOl0pOgor
ICAgICAgICAqIGJyaWRnZS9Ccm93c2VyRXh0ZW5zaW9uLmg6CisgICAgICAgICogYnJpZGdlL21h
Yy9Ccm93c2VyRXh0ZW5zaW9uTWFjLmg6CisgICAgICAgICogYnJpZGdlL21hYy9Ccm93c2VyRXh0
ZW5zaW9uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QnJvd3NlckV4dGVuc2lvbk1hYzo6c2V0
VHlwZWRJY29uVVJMKToKKyAgICAgICAgKiBicmlkZ2UvbWFjL0ZyYW1lTWFjLmg6CisgICAgICAg
ICogYnJpZGdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTWFjOjpz
ZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om5zQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZU1hYzo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVNYWM6OndpbmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1h
Yzo6d2luZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnBh
cnRDbGVhcmVkSW5CZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6b3BlblVSTEZy
b21QYWdlQ2FjaGUpOgorICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1t
OgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2Ugb3BlblVSTDpyZWxvYWQ6Y29udGVudFR5
cGU6cmVmcmVzaDpsYXN0TW9kaWZpZWQ6cGFnZUNhY2hlOl0pOgorICAgICAgICAoLVtXZWJDb3Jl
RnJhbWVCcmlkZ2Ugc2Nyb2xsVG9BbmNob3I6XSk6CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJy
aWRnZSBVUkxXaXRoQXR0cmlidXRlU3RyaW5nOl0pOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVC
cmlkZ2UgaGlnaGxpZ2h0QWxsTWF0Y2hlc0ZvclN0cmluZzpjYXNlU2Vuc2l0aXZlOl0pOgorICAg
ICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tOgorICAgICAgICAoLVtX
ZWJDb3JlU2NyaXB0Q2FsbEZyYW1lIGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIGJy
aWRnZS9tYWMvV2ViQ29yZVNldHRpbmdzLm1tOgorICAgICAgICAoLVtXZWJDb3JlU2V0dGluZ3Mg
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbjpdKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0dyYW1t
YXIueToKKyAgICAgICAgKiBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KToKKyAgICAgICAgKiBjc3MvY3NzX3ZhbHVl
aW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpxdW90ZVN0cmluZ0lmTmVlZGVkKToKKyAgICAg
ICAgKiBjc3MvY3NzcGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFy
c2VDb2xvcik6CisgICAgICAgICogY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgICog
Y3NzL2Nzc3N0eWxlc2VsZWN0b3IuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc2V0QWN0aXZlTGlua0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpuZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnNldFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9j
ZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZVNl
bGVjdG9yKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp1c2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0
UHJpbnRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmludFN0eWxl
U2hlZXQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFn
bWVudEZyb21UZXh0KToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5oOgorICAgICAgICAqIGh0
bWwvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpz
Y3JpcHRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL2h0bWxfYmFzZWltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudDo6b3BlblVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRnJhbWVFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAqIGh0bWwvaHRtbF9oZWFkaW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAg
ICAgICAqIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0
cmluZ0xpc3QuY3BwOgorICAgICAgICAoU1ZHU3RyaW5nTGlzdDo6cmVzZXQpOgorICAgICAgICAq
IGt3cS9LV1FLSFRNTFNldHRpbmdzLmg6CisgICAgICAgIChLSFRNTFNldHRpbmdzOjp1c2VyU3R5
bGVTaGVldExvY2F0aW9uKToKKyAgICAgICAgKEtIVE1MU2V0dGluZ3M6OnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24pOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OnJlZik6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldExvYWRlcjo6
c2V0U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6ZGlkT3BlblVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6alNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWU6OmpTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmphdmFFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwbHVnaW5zRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6cmVjZWl2ZWRGaXJzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6bG9hZFBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVmZXJy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Omxhc3RNb2RpZmllZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6cmVwYXJzZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjphcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6dW5h
cHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVhcHBsaWVkRWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVzdW1lVGltZW91dHMpOgorICAgICAgICAq
IHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lUHJpdmF0ZS5oOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVQcml2YXRlOjpGcmFtZVByaXZhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L0F0b21pY1N0cmluZy5oOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nOjpBdG9taWNT
dHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwOgorICAgICAg
ICAoRGVwcmVjYXRlZFN0cmluZzo6cmVwbGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRm
b3JtU3RyaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmc6OnJlcGxhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL1N0cmluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcispOgorICAgICAgICAqIHBsYXRmb3JtL1N0
cmluZ0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6cmVtb3ZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6OnJlcGxhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL1N0cmluZ0ltcGwuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1VSTEFs
bG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6bWFwQ2xhc3NJZFRvU2VydmljZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KToKKwogMjAwNi0w
My0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSBmaXggYnVp
bGRib3QgKGFuZCBldmVyeW9uZSBlbHNlKQpJbmRleDogY3NzL2Nzc3BhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY3NzL2Nzc3BhcnNlci5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgY3NzL2Nzc3Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwODQsMTAgKzIwODQsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VDb2xvcihjb25zdCBEZXByZWNhCiB7CiAgICAgaW50IGxlbiA9IG5hbWUubGVu
Z3RoKCk7CiAKLSAgICBpZiAoICFsZW4gKQorICAgIGlmICghbGVuKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLQogICAgIGJvb2wgb2s7CiAKICAgICBpZiAoIGxlbiA9PSAzIHx8IGxlbiA9PSA2
ICkgewpJbmRleDogY3NzL2Nzc192YWx1ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3Nf
dmFsdWVpbXBsLmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBjc3MvY3NzX3ZhbHVlaW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIFN0cmluZyBxdW90ZVN0cmlu
Z0lmTmVlZGVkKGNvbnN0IAogICAgICAgICByZXR1cm4gc3RyaW5nOwogCiAgICAgLy8gRklYTUU6
IEFsc28gbmVlZCB0byB0cmFuc2Zvcm0gY29udHJvbCBjaGFyYWN0ZXJzIGludG8gXCBzZXF1ZW5j
ZXMuCi0gICAgRGVwcmVjYXRlZFN0cmluZyBzID0gc3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
KyAgICBTdHJpbmcgcyA9IHN0cmluZzsKICAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKICAg
ICBzLnJlcGxhY2UoJ1wnJywgIlxcJyIpOwogICAgIHJldHVybiAnXCcnICsgcyArICdcJyc7Cklu
ZGV4OiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL2Nzc3N0eWxl
c2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxMzQzMSkKKysrIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIENTU1N0eWxlU2hlZXQgKkNTU1N0
eWxlU2VsZWN0b3I6OnN2Z1NoZWUKIHN0YXRpYyBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkdXJs
ICpjdXJyZW50RW5jb2RlZFVSTCA9IDA7CiBzdGF0aWMgUHNldWRvU3RhdGUgcHNldWRvU3RhdGU7
CiAKLUNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvYywgRGVw
cmVjYXRlZFN0cmluZyB1c2VyU3R5bGVTaGVldCwgU3R5bGVTaGVldExpc3QgKnN0eWxlU2hlZXRz
LCBib29sIF9zdHJpY3RQYXJzaW5nKQorQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rv
cihEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0LCBTdHlsZVNoZWV0
TGlzdCAqc3R5bGVTaGVldHMsIGJvb2wgX3N0cmljdFBhcnNpbmcpCiB7CiAgICAgaW5pdCgpOwog
CkBAIC0yMTQsNyArMjE0LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihE
b2N1bQogICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNl
ZCBldmVyeSB0aW1lIQogICAgIGlmICghdXNlclN0eWxlU2hlZXQuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIG1fdXNlclNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoZG9jKTsKLSAgICAgICAgbV91c2Vy
U2hlZXQtPnBhcnNlU3RyaW5nKFN0cmluZyh1c2VyU3R5bGVTaGVldCksIHN0cmljdFBhcnNpbmcp
OworICAgICAgICBtX3VzZXJTaGVldC0+cGFyc2VTdHJpbmcodXNlclN0eWxlU2hlZXQsIHN0cmlj
dFBhcnNpbmcpOwogCiAgICAgICAgIG1fdXNlclN0eWxlID0gbmV3IENTU1J1bGVTZXQoKTsKICAg
ICAgICAgbV91c2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1fdXNlclNoZWV0LCBtX21lZGlh
VHlwZSk7CkluZGV4OiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9j
c3NzdHlsZXNlbGVjdG9yLmgJKHJldmlzaW9uIDEzNDMxKQorKysgY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsOSArNzgsNyBAQCBjbGFzcyBTdHlsZWRFbGVtZW50
OwogICAgICAgICAgKiBnb2VzIHRocm91Z2ggYWxsIFN0eWxlU2hlZXRzIGRlZmluZWQgaW4gdGhl
IGRvY3VtZW50IGFuZAogICAgICAgICAgKiBjcmVhdGVzIGEgbGlzdCBvZiBydWxlcyBpdCBuZWVk
cyB0byBhcHBseSB0byBvYmplY3RzCiAgICAgICAgICAqLwotICAgICAgICBDU1NTdHlsZVNlbGVj
dG9yKERvY3VtZW50KiBkb2MsIERlcHJlY2F0ZWRTdHJpbmcgdXNlclN0eWxlU2hlZXQsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0eWxlU2hlZXRMaXN0ICpzdHlsZVNoZWV0cywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIF9zdHJpY3RQYXJzaW5nKTsKKyAgICAgICAgQ1NTU3R5
bGVTZWxlY3RvcihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgdXNlclN0eWxlU2hlZXQsIFN0eWxl
U2hlZXRMaXN0ICpzdHlsZVNoZWV0cywgYm9vbCBzdHJpY3RQYXJzaW5nKTsKICAgICAgICAgLyoq
CiAgICAgICAgICAqIHNhbWUgYXMgYWJvdmUgYnV0IGZvciBhIHNpbmdsZSBzdHlsZXNoZWV0Lgog
ICAgICAgICAgKi8KSW5kZXg6IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lv
biAxMzQzMSkKKysrIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NTQsNyArOTU0LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0
ZWRTdHlsZURlYwogICAgICAgICByZXR1cm4gdmFsdWVGb3JUZXh0QWxpZ24oc3R5bGUtPnRleHRB
bGlnbigpKTsKICAgICBjYXNlIENTU19QUk9QX1RFWFRfREVDT1JBVElPTjoKICAgICB7Ci0gICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5nOworICAgICAgICBTdHJpbmcgc3RyaW5nOwogICAg
ICAgICBpZiAoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkgJiBVTkRFUkxJTkUpCiAgICAgICAgICAg
ICBzdHJpbmcgKz0gInVuZGVybGluZSI7CiAgICAgICAgIGlmIChzdHlsZS0+dGV4dERlY29yYXRp
b24oKSAmIE9WRVJMSU5FKSB7CkBAIC05NzgsNyArOTc4LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgIH0KICAgICBjYXNlIENTU19QUk9QX19LSFRNTF9U
RVhUX0RFQ09SQVRJT05TX0lOX0VGRkVDVDoKICAgICB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJp
bmcgc3RyaW5nOworICAgICAgICBTdHJpbmcgc3RyaW5nOwogICAgICAgICBpZiAoc3R5bGUtPnRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBVTkRFUkxJTkUpCiAgICAgICAgICAgICBzdHJpbmcg
Kz0gInVuZGVybGluZSI7CiAgICAgICAgIGlmIChzdHlsZS0+dGV4dERlY29yYXRpb25zSW5FZmZl
Y3QoKSAmIE9WRVJMSU5FKSB7CkluZGV4OiBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAkocmV2aXNpb24gMTM0MzEpCisr
KyBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDEyICsz
MzYsMTEgQEAgV2ViQ29yZTo6U3RyaW5nIE1lZGlhTGlzdDo6bWVkaWFUZXh0KCkgYwogdm9pZCBN
ZWRpYUxpc3Q6OnNldE1lZGlhVGV4dChjb25zdCBXZWJDb3JlOjpTdHJpbmcgJnZhbHVlKQogewog
ICAgIG1fbHN0TWVkaWEuY2xlYXIoKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBsaXN0ID0g
RGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCAnLCcsIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KSApOwotICAgIGZvciAoIERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpJdGVyYXRvciBpdCA9IGxpc3Qu
YmVnaW4oKTsgaXQgIT0gbGlzdC5lbmQoKTsgKytpdCApCi0gICAgeworICAgIERlcHJlY2F0ZWRT
dHJpbmdMaXN0IGxpc3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJywnLCB2YWx1ZS5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgIGZvciAoRGVwcmVjYXRlZFN0cmluZ0xpc3Q6Okl0ZXJh
dG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsaXN0LmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IFN0cmluZyBtZWRpdW0gPSAoKml0KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKCFt
ZWRpdW0uaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9sc3RNZWRpYS5hcHBlbmQoIG1lZGl1bSAp
OworICAgICAgICAgICAgbV9sc3RNZWRpYS5hcHBlbmQobWVkaXVtKTsKICAgICB9CiB9CiAKSW5k
ZXg6IGNzcy9DU1NHcmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0dyYW1tYXIueQkocmV2
aXNpb24gMTM0MzEpCisrKyBjc3MvQ1NTR3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBAIC04Mjgs
NyArODI4LDcgQEAgZGVjbGFyYXRpb246CiBwcm9wZXJ0eToKICAgICBJREVOVCBtYXliZV9zcGFj
ZSB7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyID0gcVN0cmluZygkMSk7Ci0gICAgICAg
ICQkID0gZ2V0UHJvcGVydHlJRCggc3RyLmxvd2VyKCkubGF0aW4xKCksIHN0ci5sZW5ndGgoKSAp
OworICAgICAgICAkJCA9IGdldFByb3BlcnR5SUQoc3RyLmxvd2VyKCkubGF0aW4xKCksIHN0ci5s
ZW5ndGgoKSk7CiAjaWYgU1ZHX1NVUFBPUlQKICAgICAgIGlmICgkJCA9PSAwKQogICAgICAgICAg
ICQkID0gU1ZHOjpnZXRTVkdDU1NQcm9wZXJ0eUlEKHN0ci5sb3dlcigpLmxhdGluMSgpLCBzdHIu
bGVuZ3RoKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBrc3Zn
Mi9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0ICs0MCwxMSBA
QCBTVkdTdHJpbmdMaXN0Ojp+U1ZHU3RyaW5nTGlzdCgpCiB2b2lkIFNWR1N0cmluZ0xpc3Q6OnJl
c2V0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cikKIHsKICAgICBEZXByZWNhdGVkU3RyaW5n
TGlzdCBsaXN0ID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgc3RyKTsKLSAgICBp
ZihsaXN0LmNvdW50KCkgPT0gMCkKLSAgICB7CisgICAgaWYgKGxpc3QuY291bnQoKSA9PSAwKSB7
CiAgICAgICAgIFN0cmluZ0ltcGwgKml0ZW0gPSBuZXcgU3RyaW5nSW1wbChzdHIpOwogICAgICAg
ICBpdGVtLT5yZWYoKTsKICAgICAgICAgYXBwZW5kSXRlbShpdGVtKTsKLSAgICB9Ci0gICAgZWxz
ZSBmb3IoRGVwcmVjYXRlZFN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBp
dCAhPSBsaXN0LmVuZCgpOyArK2l0KQotICAgIHsKKyAgICB9IGVsc2UgZm9yKERlcHJlY2F0ZWRT
dHJpbmdMaXN0OjpJdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gbGlzdC5lbmQoKTsg
KytpdCkgewogICAgICAgICBTdHJpbmdJbXBsICppdGVtID0gbmV3IFN0cmluZ0ltcGwoKCppdCkp
OwogICAgICAgICBpdGVtLT5yZWYoKTsKICAgICAgICAgYXBwZW5kSXRlbShpdGVtKTsKSW5kZXg6
IGJyaWRnZS9tYWMvV2ViQ29yZVNldHRpbmdzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMv
V2ViQ29yZVNldHRpbmdzLm1tCShyZXZpc2lvbiAxMzQzMSkKKysrIGJyaWRnZS9tYWMvV2ViQ29y
ZVNldHRpbmdzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyArMjg1LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAgICAgICAgIHJldHVybjsKICAgICBbdXNlclN0eWxlU2hlZXRMb2Nh
dGlvbiByZWxlYXNlXTsKICAgICB1c2VyU3R5bGVTaGVldExvY2F0aW9uID0gW3MgY29weV07Ci0g
ICAgc2V0dGluZ3MtPnNldFVzZXJTdHlsZVNoZWV0KERlcHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0
cmluZyhzKSk7CisgICAgc2V0dGluZ3MtPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oRGVwcmVj
YXRlZFN0cmluZzo6ZnJvbU5TU3RyaW5nKHMpKTsKICAgICBbc2VsZiBfdXBkYXRlQWxsVmlld3Nd
OwogfQogCkluZGV4OiBicmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRn
ZS9tYWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDEzNDMxKQorKysgYnJpZGdlL21hYy9GcmFtZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMxLDE0ICszMzEsMTIgQEAgTlNTdHJpbmcgKkZyYW1l
TWFjOjpzZWFyY2hGb3JMYWJlbHNCZWZvcgogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZWFyY2hlZENlbGxBYm92ZSA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIHsK
KyAgICAgICAgfSBlbHNlIGlmIChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBu
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewogICAgICAg
ICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRoZSByZWdleHAKICAgICAgICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgbm9kZVN0cmluZyA9IG4tPm5vZGVWYWx1ZSgpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKICAgICAgICAgICAgIC8vIGFkZCAxMDAgZm9yIHNsb3AsIHRvIG1ha2UgaXQgbW9y
ZSBsaWtlbHkgdGhhdCB3ZSdsbCBzZWFyY2ggd2hvbGUgbm9kZXMKLSAgICAgICAgICAgIGlmIChs
ZW5ndGhTZWFyY2hlZCArIG5vZGVTdHJpbmcubGVuZ3RoKCkgPiBtYXhDaGFyc1NlYXJjaGVkKSB7
CisgICAgICAgICAgICBpZiAobGVuZ3RoU2VhcmNoZWQgKyBub2RlU3RyaW5nLmxlbmd0aCgpID4g
bWF4Q2hhcnNTZWFyY2hlZCkKICAgICAgICAgICAgICAgICBub2RlU3RyaW5nID0gbm9kZVN0cmlu
Zy5yaWdodChjaGFyc1NlYXJjaGVkVGhyZXNob2xkIC0gbGVuZ3RoU2VhcmNoZWQpOwotICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaW50IHBvcyA9IHJlZ0V4cC0+c2VhcmNoUmV2KG5vZGVTdHJp
bmcpOwogICAgICAgICAgICAgaWYgKHBvcyA+PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlU3RyaW5nLm1pZChwb3MsIHJlZ0V4cC0+bWF0Y2hlZExlbmd0aCgpKS5nZXROU1N0cmluZygp
OwpAQCAtNTI1LDE0ICs1MjMsMjIgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVNYWM6Om9iamVj
dENvbnRlbgogICAgIHJldHVybiAoT2JqZWN0Q29udGVudFR5cGUpW19icmlkZ2UgZGV0ZXJtaW5l
T2JqZWN0RnJvbU1JTUVUeXBlOm1pbWVUeXBlIFVSTDp1cmwuZ2V0TlNVUkwoKV07CiB9CiAKK3N0
YXRpYyBOU0FycmF5KiBuc0FycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCit7Cisg
ICAgdW5zaWduZWQgbGVuID0gdmVjdG9yLnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheSogYXJy
YXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bGVuXTsKKyAgICBmb3IgKHVu
c2lnbmVkIHggPSAwOyB4IDwgbGVuOyB4KyspCisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6dmVj
dG9yW3hdXTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CiAKLVBsdWdpbiogRnJhbWVNYWM6OmNyZWF0
ZVBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0JiBwYXJh
bU5hbWVzLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nTGlzdCYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCitQbHVnaW4qIEZyYW1lTWFjOjpjcmVhdGVQbHVnaW4oY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIHJldHVybiBuZXcgUGx1Z2luKG5ldyBXaWRn
ZXQoW19icmlkZ2Ugdmlld0ZvclBsdWdpbldpdGhVUkw6dXJsLmdldE5TVVJMKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lczpwYXJhbU5hbWVzLmdldE5T
QXJyYXkoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVl
czpwYXJhbVZhbHVlcy5nZXROU0FycmF5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVOYW1lczpuc0FycmF5KHBhcmFtTmFtZXMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzOm5zQXJyYXkocGFyYW1WYWx1ZXMpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6bWltZVR5cGVdKSk7CiAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTA0MSw3ICsxMDQ3LDcgQEAgS0pT
OjpCaW5kaW5nczo6Um9vdE9iamVjdCAqRnJhbWVNYWM6OmV4ZQogCiBLSlM6OkJpbmRpbmdzOjpS
b290T2JqZWN0ICpGcmFtZU1hYzo6YmluZGluZ1Jvb3RPYmplY3QoKQogewotICAgIGFzc2VydChk
LT5tX2JKU2NyaXB0RW5hYmxlZCk7CisgICAgYXNzZXJ0KGpTY3JpcHRFbmFibGVkKCkpOwogICAg
IGlmICghX2JpbmRpbmdSb290KSB7CiAgICAgICAgIEpTTG9jayBsb2NrOwogICAgICAgICBfYmlu
ZGluZ1Jvb3QgPSBuZXcgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCgwKTsgICAgLy8gVGhlIHJv
b3QgZ2V0cyBkZWxldGVkIGJ5IEphdmFTY3JpcHRDb3JlLgpAQCAtMTA1NSw3ICsxMDYxLDcgQEAg
S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqRnJhbWVNYWM6OmJpbgogCiBXZWJTY3JpcHRPYmpl
Y3QgKkZyYW1lTWFjOjp3aW5kb3dTY3JpcHRPYmplY3QoKQogewotICAgIGlmICghZC0+bV9iSlNj
cmlwdEVuYWJsZWQpCisgICAgaWYgKCFqU2NyaXB0RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIGlmICghX3dpbmRvd1NjcmlwdE9iamVjdCkgewpAQCAtMTA3MCw3ICsxMDc2LDcg
QEAgV2ViU2NyaXB0T2JqZWN0ICpGcmFtZU1hYzo6d2luZG93U2NyaXB0TwogTlBPYmplY3QgKkZy
YW1lTWFjOjp3aW5kb3dTY3JpcHROUE9iamVjdCgpCiB7CiAgICAgaWYgKCFfd2luZG93U2NyaXB0
TlBPYmplY3QpIHsKLSAgICAgICAgaWYgKGQtPm1fYkpTY3JpcHRFbmFibGVkKSB7CisgICAgICAg
IGlmIChqU2NyaXB0RW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAvLyBKYXZhU2NyaXB0IGlzIGVu
YWJsZWQsIHNvIHRoZXJlIGlzIGEgSmF2YVNjcmlwdCB3aW5kb3cgb2JqZWN0LiAgUmV0dXJuIGFu
IE5QT2JqZWN0IGJvdW5kIHRvIHRoZSB3aW5kb3cKICAgICAgICAgICAgIC8vIG9iamVjdC4KICAg
ICAgICAgICAgIEtKUzo6SlNPYmplY3QgKndpbiA9IEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRv
dyh0aGlzKTsKQEAgLTEwODgsNyArMTA5NCw3IEBAIE5QT2JqZWN0ICpGcmFtZU1hYzo6d2luZG93
U2NyaXB0TlBPYmplY3QKIAogdm9pZCBGcmFtZU1hYzo6cGFydENsZWFyZWRJbkJlZ2luKCkKIHsK
LSAgICBpZiAoZC0+bV9iSlNjcmlwdEVuYWJsZWQpCisgICAgaWYgKGpTY3JpcHRFbmFibGVkKCkp
CiAgICAgICAgIFtfYnJpZGdlIHdpbmRvd09iamVjdENsZWFyZWRdOwogfQogCkBAIC0xMTE3LDcg
KzExMjMsNyBAQCB2b2lkIEZyYW1lTWFjOjpvcGVuVVJMRnJvbVBhZ2VDYWNoZShLV1FQCiAgICAg
ZC0+bV9iTG9hZEV2ZW50RW1pdHRlZCA9IHRydWU7CiAgICAgCiAgICAgLy8gZGVsZXRlIG9sZCBz
dGF0dXMgYmFyIG1zZydzIGZyb20ga2pzIChpZiBpdCBfd2FzXyBhY3RpdmF0ZWQgb24gbGFzdCBV
UkwpCi0gICAgaWYgKGQtPm1fYkpTY3JpcHRFbmFibGVkKSB7CisgICAgaWYgKGpTY3JpcHRFbmFi
bGVkKCkpIHsKICAgICAgICAgZC0+bV9ranNTdGF0dXNCYXJUZXh0ID0gU3RyaW5nKCk7CiAgICAg
ICAgIGQtPm1fa2pzRGVmYXVsdFN0YXR1c0JhclRleHQgPSBTdHJpbmcoKTsKICAgICB9CkluZGV4
OiBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2Uv
bWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTM0MzEpCisrKyBicmlkZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMxLDE4ICs1MzEsMTgg
QEAgc3RhdGljIGlubGluZSBXZWJDb3JlRnJhbWVCcmlkZ2UgKmJyaWRnZQogICAgIFJlc291cmNl
UmVxdWVzdCByZXF1ZXN0KG1fZnJhbWUtPnJlc291cmNlUmVxdWVzdCgpKTsKICAgICByZXF1ZXN0
LnJlbG9hZCA9IHJlbG9hZDsKICAgICBpZiAoY29udGVudFR5cGUpCi0gICAgICAgIHJlcXVlc3Qu
bV9yZXNwb25zZU1JTUVUeXBlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbU5TU3RyaW5nKGNvbnRl
bnRUeXBlKTsKKyAgICAgICAgcmVxdWVzdC5tX3Jlc3BvbnNlTUlNRVR5cGUgPSBjb250ZW50VHlw
ZTsKICAgICBtX2ZyYW1lLT5zZXRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7CiAKICAgICAvLyBv
cGVuaW5nIHRoZSBVUkwKICAgICBpZiAobV9mcmFtZS0+ZGlkT3BlblVSTChVUkwpKSB7CiAgICAg
ICAgIC8vIHRoaW5ncyB3ZSBoYXZlIHRvIHNldCB1cCBhZnRlciBjYWxsaW5nIGRpZE9wZW5VUkwK
ICAgICAgICAgaWYgKHJlZnJlc2gpIHsKLSAgICAgICAgICAgIG1fZnJhbWUtPmFkZE1ldGFEYXRh
KCJodHRwLXJlZnJlc2giLCBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTlNTdHJpbmcocmVmcmVzaCkp
OworICAgICAgICAgICAgbV9mcmFtZS0+YWRkTWV0YURhdGEoImh0dHAtcmVmcmVzaCIsIHJlZnJl
c2gpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsYXN0TW9kaWZpZWQpIHsKICAgICAgICAgICAg
IE5TU3RyaW5nICptb2RpZmllZFN0cmluZyA9IFtsYXN0TW9kaWZpZWQgZGVzY3JpcHRpb25XaXRo
Q2FsZW5kYXJGb3JtYXQ6QCIlYSAlYiAlZCAlWSAlSDolTTolUyIgdGltZVpvbmU6bmlsIGxvY2Fs
ZTpuaWxdOwotICAgICAgICAgICAgbV9mcmFtZS0+YWRkTWV0YURhdGEoIm1vZGlmaWVkIiwgRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbU5TU3RyaW5nKG1vZGlmaWVkU3RyaW5nKSk7CisgICAgICAgICAg
ICBtX2ZyYW1lLT5hZGRNZXRhRGF0YSgibW9kaWZpZWQiLCBtb2RpZmllZFN0cmluZyk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC03MzcsOSArNzM3LDkgQEAgc3RhdGljIGlubGluZSBXZWJDb3Jl
RnJhbWVCcmlkZ2UgKmJyaWRnZQogICAgICAgICBmcmFtZVZpZXctPnNldE1hcmdpbkhlaWdodCht
aCk7CiB9CiAKLS0gKHZvaWQpc2Nyb2xsVG9BbmNob3I6KE5TU3RyaW5nICopYQorLSAodm9pZClz
Y3JvbGxUb0FuY2hvcjooTlNTdHJpbmcgKilhbmNob3IKIHsKLSAgICBtX2ZyYW1lLT5nb3RvQW5j
aG9yKERlcHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0cmluZyhhKSk7CisgICAgbV9mcmFtZS0+Z290
b0FuY2hvcihhbmNob3IpOwogfQogCiAtIChCT09MKWlzU2VsZWN0aW9uRWRpdGFibGUKQEAgLTEy
MDAsMTEgKzEyMDAsMTAgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9t
RAogLSAoTlNVUkwgKilVUkxXaXRoQXR0cmlidXRlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwog
ewogICAgIERvY3VtZW50ICpkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9j
KSB7CisgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQogICAgIC8vIEZJ
WE1FOiBpcyBwYXJzZVVSTCBhcHByb3ByaWF0ZSBoZXJlPwotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVsID0gcGFyc2VVUkwoRGVwcmVjYXRlZFN0cmluZzo6ZnJvbU5TU3RyaW5nKHN0cmluZykpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHJlbCA9IHBhcnNlVVJMKHN0
cmluZykuZGVwcmVjYXRlZFN0cmluZygpOwogICAgIHJldHVybiBLVVJMKGRvYy0+Y29tcGxldGVV
UkwocmVsKSkuZ2V0TlNVUkwoKTsKIH0KIApAQCAtMTIxNSw3ICsxMjE0LDcgQEAgc3RhdGljIEhU
TUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogCiAtICh1bnNpZ25lZCloaWdobGlnaHRB
bGxNYXRjaGVzRm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09M
KWNhc2VGbGFnCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmhpZ2hsaWdodEFsbE1hdGNoZXNGb3JT
dHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6ZnJvbU5TU3RyaW5nKHN0cmluZyksIGNhc2VGbGFnKTsK
KyAgICByZXR1cm4gbV9mcmFtZS0+aGlnaGxpZ2h0QWxsTWF0Y2hlc0ZvclN0cmluZyhzdHJpbmcs
IGNhc2VGbGFnKTsKIH0KIAogLSAodm9pZCljbGVhckhpZ2hsaWdodGVkTWF0Y2hlcwpJbmRleDog
YnJpZGdlL21hYy9Ccm93c2VyRXh0ZW5zaW9uTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdlL21h
Yy9Ccm93c2VyRXh0ZW5zaW9uTWFjLmgJKHJldmlzaW9uIDEzNDMxKQorKysgYnJpZGdlL21hYy9C
cm93c2VyRXh0ZW5zaW9uTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUqJiBwYXJ0KTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uVVJMKGNvbnN0IEtVUkwmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VHlwZWRJY29uVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB0
eXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZWRJY29uVVJMKGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIHR5cGUpOwogCiAgICAgdmlydHVhbCBpbnQgZ2V0SGlzdG9yeUxlbmd0aCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBnb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKTsKSW5kZXg6IGJy
aWRnZS9tYWMvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9t
YWMvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAxMzQzMSkKKysrIGJyaWRnZS9t
YWMvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsMTMgKzMy
MiwxMSBAQCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAgICAgSlNP
YmplY3QgKmV2YWwgPSBOVUxMOwogICAgIGlmIChzdGF0ZS0+Y29udGV4dCgpLmltcCgpKSB7ICAv
LyAiZXZhbCIgd29uJ3Qgd29yayB3aXRob3V0IGNvbnRleHQgKGkuZS4gYXQgZ2xvYmFsIHNjb3Bl
KQogICAgICAgICBKU1ZhbHVlICp2ID0gZ2xvYk9iai0+Z2V0KHN0YXRlLCAiZXZhbCIpOwotICAg
ICAgICBpZiAodi0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCAqPih2KS0+aW1w
bGVtZW50c0NhbGwoKSkgeworICAgICAgICBpZiAodi0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2Fz
dDxKU09iamVjdCAqPih2KS0+aW1wbGVtZW50c0NhbGwoKSkKICAgICAgICAgICAgIGV2YWwgPSBz
dGF0aWNfY2FzdDxKU09iamVjdCAqPih2KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAg
ICAgICAgZWxzZQogICAgICAgICAgICAgLy8gbm8gImV2YWwiIC0gZmFsbGJhY2sgb3BlcmF0ZXMg
b24gZ2xvYmFsIGV4ZWMgc3RhdGUKICAgICAgICAgICAgIHN0YXRlID0gaW50ZXJwLT5nbG9iYWxF
eGVjKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlICpzYXZlZEV4Y2VwdGlvbiA9
IHN0YXRlLT5leGNlcHRpb24oKTsKQEAgLTM0MSwxNSArMzM5LDEyIEBAIGNsYXNzIFdlYkNvcmVT
Y3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKICAgICAgICAgTGlzdCBhcmdzOwogICAgICAgICBh
cmdzLmFwcGVuZChqc1N0cmluZyhjb2RlKSk7CiAgICAgICAgIHJlc3VsdCA9IGV2YWwtPmNhbGwo
c3RhdGUsIE5VTEwsIGFyZ3MpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UKICAgICAg
ICAgLy8gbm8gImV2YWwiLCBvciBubyBjb250ZXh0IChpLmUuIGdsb2JhbCBzY29wZSkgLSB1c2Ug
Z2xvYmFsIGZhbGxiYWNrCiAgICAgICAgIHJlc3VsdCA9IGludGVycC0+aW1wKCktPmV2YWx1YXRl
KGNvZGUuZGF0YSgpLCBjb2RlLnNpemUoKSwgZ2xvYk9iaiwgVVN0cmluZygpLCAwKS52YWx1ZSgp
OwotICAgIH0KIAotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXN1bHQgPSBzdGF0ZS0+ZXhjZXB0aW9uKCk7
ICAgIC8vIChtYXkgYmUgcmVkdW5kYW50IGRlcGVuZGluZyBvbiB3aGljaCBldmFsIHBhdGggd2Fz
IHVzZWQpCi0gICAgfQogICAgIHN0YXRlLT5zZXRFeGNlcHRpb24oc2F2ZWRFeGNlcHRpb24pOwog
CiAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHRdOwpJbmRl
eDogYnJpZGdlL21hYy9GcmFtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvRnJhbWVN
YWMuaAkocmV2aXNpb24gMTM0MzEpCisrKyBicmlkZ2UvbWFjL0ZyYW1lTWFjLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVybFNl
bGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCiAgICAgdmlydHVhbCBPYmplY3RDb250
ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpOwotICAgIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4oY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nTGlzdCYgcGFyYW1OYW1lcywgY29uc3QgRGVwcmVj
YXRlZFN0cmluZ0xpc3QmIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAg
ICB2aXJ0dWFsIFBsdWdpbiogY3JlYXRlUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVl
cywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgdmlydHVhbCBGcmFtZSogY3JlYXRlRnJh
bWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIFJlbmRlclBhcnQqIHJlbmRl
cmVyLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUNsb3NlKCk7CkluZGV4OiBicmlkZ2UvbWFjL0Jyb3dzZXJFeHRlbnNpb25NYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYnJpZGdlL21hYy9Ccm93c2VyRXh0ZW5zaW9uTWFjLm1tCShyZXZpc2lvbiAxMzQz
MSkKKysrIGJyaWRnZS9tYWMvQnJvd3NlckV4dGVuc2lvbk1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTYyLDEwICsxNjIsMTAgQEAgdm9pZCBCcm93c2VyRXh0ZW5zaW9uTWFjOjpzZXRJY29uVVJM
KGNvbgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgQnJvd3NlckV4
dGVuc2lvbk1hYzo6c2V0VHlwZWRJY29uVVJMKGNvbnN0IEtVUkwgJnVybCwgY29uc3QgRGVwcmVj
YXRlZFN0cmluZyAmdHlwZSkKK3ZvaWQgQnJvd3NlckV4dGVuc2lvbk1hYzo6c2V0VHlwZWRJY29u
VVJMKGNvbnN0IEtVUkwgJnVybCwgY29uc3QgU3RyaW5nICZ0eXBlKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBbbV9mcmFtZS0+YnJpZGdlKCkgc2V0SWNvblVSTDp1
cmwuZ2V0TlNVUkwoKSB3aXRoVHlwZTp0eXBlLmdldE5TU3RyaW5nKCldOworICAgIFttX2ZyYW1l
LT5icmlkZ2UoKSBzZXRJY29uVVJMOnVybC5nZXROU1VSTCgpIHdpdGhUeXBlOnR5cGVdOwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKSW5kZXg6IGJyaWRnZS9Ccm93c2VyRXh0
ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdlL0Jyb3dzZXJFeHRlbnNpb24uaAkocmV2aXNp
b24gMTM0MzEpCisrKyBicmlkZ2UvQnJvd3NlckV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZyYW1lKiYgcGFydCkgPSAwOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uVVJMKGNv
bnN0IEtVUkwmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5cGVkSWNvblVSTChjb25zdCBL
VVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUeXBlZEljb25VUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdHlwZSkgPSAwOwog
ICAgIAogICAgIHZpcnR1YWwgaW50IGdldEhpc3RvcnlMZW5ndGgoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpID0gMDsKSW5kZXg6IGt3cS9LV1FL
SFRNTFNldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUtIVE1MU2V0dGluZ3MuaAkocmV2
aXNpb24gMTM0MzEpCisrKyBrd3EvS1dRS0hUTUxTZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCiAKIGNsYXNzIEtIVE1MU2V0dGluZ3MKIHsKQEAg
LTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
IGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCi0gICAgRGVwcmVjYXRl
ZFN0cmluZyB1c2VyU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRM
b2NhdGlvbjsgfQorICAgIEtVUkwgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQogICAgIGJvb2wgc2hvdWxkUHJpbnRCYWNr
Z3JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUHJpbnRCYWNrZ3JvdW5kczsgfQogICAg
IGJvb2wgdGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0QXJlYXNB
cmVSZXNpemFibGU7IH0KIApAQCAtODMsNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dEVuY29kaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHMpIHsgbV9lbmNvZGluZyA9IHM7IH0K
IAotICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgcykg
eyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBzOyB9CisgICAgdm9pZCBzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKGNvbnN0IEtVUkwmIHMpIHsgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0g
czsgfQogICAgIHZvaWQgc2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyhib29sIGYpIHsgbV9zaG91
bGRQcmludEJhY2tncm91bmRzID0gZjsgfQogICAgIHZvaWQgc2V0VGV4dEFyZWFzQXJlUmVzaXph
YmxlKGJvb2wgZikgeyBtX3RleHRBcmVhc0FyZVJlc2l6YWJsZSA9IGY7IH0KICAgICAKQEAgLTk1
LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpBdG9taWNTdHJpbmcgbV9jdXJzaXZl
Rm9udE5hbWU7CiAgICAgV2ViQ29yZTo6QXRvbWljU3RyaW5nIG1fZmFudGFzeUZvbnROYW1lOwog
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9lbmNvZGluZzsgLy8gRklYTUU6IFRleHRFbmNvZGluZyB0
YWtlcyBhIGxhdGluMSBzdHJpbmcsIHdoaWNoIFN0cmluZyAmIEF0b21pY1N0cmluZyBkb24ndCBl
YXNpbHkgcHJvZHVjZQotICAgIERlcHJlY2F0ZWRTdHJpbmcgbV91c2VyU3R5bGVTaGVldExvY2F0
aW9uOyAvLyBGSVhNRTogS1VSTHMgc3RpbGwgdXNlIERlcHJlY2F0ZWRTdHJpbmcKKyAgICBLVVJM
IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKICAgICAKICAgICBpbnQgbV9taW5pbXVtRm9udFNp
emU7CiAgICAgaW50IG1fbWluaW11bUxvZ2ljYWxGb250U2l6ZTsKSW5kZXg6IGxvYWRlci9DYWNo
ZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVT
aGVldC5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIHZvaWQgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6cmVmKENhY2hlZE9iamUKIHsKICAgICBDYWNoZWRPYmplY3Q6OnJlZihjKTsKIAotICAg
IGlmKCFtX2xvYWRpbmcpIGMtPnNldFN0eWxlU2hlZXQoIG1fdXJsLCBtX3NoZWV0ICk7CisgICAg
aWYgKCFtX2xvYWRpbmcpCisgICAgICAgIGMtPnNldFN0eWxlU2hlZXQobV91cmwsIG1fc2hlZXQp
OwogfQogCiB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRlcmVmKENhY2hlZE9iamVjdENsaWVu
dCAqYykKSW5kZXg6IHBhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmgJKHJl
dmlzaW9uIDEzNDMxKQorKysgcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSw3IEBACiAjaW5jbHVkZSA8cXNjcm9sbGJhci5oPgogI2luY2x1ZGUgPERlcHJlY2F0ZWRTdHJp
bmdMaXN0Lmg+CiAjaW5jbHVkZSA8a3htbGNvcmUvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDxr
eG1sY29yZS9WZWN0b3IuaD4KIAogY2xhc3MgS0hUTUxTZXR0aW5nczsKIApAQCAtMTM4LDE2ICsx
MzksNiBAQCBwdWJsaWM6CiAgICAqIFJldHVybnMgdHJ1ZSBpZiBwbHVnaW5zIGFyZSBlbmFibGVk
LCBmYWxzZSBvdGhlcndpc2UuCiAgICAqLwogICBib29sIHBsdWdpbnNFbmFibGVkKCkgY29uc3Q7
Ci0gIAotICAvKioKLSAgICogRW5hYmxlL2Rpc2FibGUgdGhlIGF1dG9tYXRpYyBmb3J3YXJkaW5n
IGJ5IDxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIC4uLi4+Ci0gICAqLwotICB2b2lkIHNldE1l
dGFSZWZyZXNoRW5hYmxlZChib29sIGVuYWJsZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgQHAg
dHJ1ZSBpZiBhdXRvbXRhaWMgZm9yd2FyZGluZyBpcyBlbmFibGVkLgotICAgKi8KLSAgYm9vbCBt
ZXRhUmVmcmVzaEVuYWJsZWQoKSBjb25zdDsKIAogICAvKioKICAgICogRXhlY3V0ZSB0aGUgc3Bl
Y2lmaWVkIHNuaXBwZXQgb2YgSmF2YVNjcmlwdCBjb2RlLgpAQCAtMjY5LDIzICsyNjAsMTIgQEAg
cHVibGljOgogICBEZXByZWNhdGVkU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CiAKICAgLyoqCi0g
ICAqIFNldHMgYSB1c2VyIGRlZmluZWQgc3R5bGUgc2hlZXQgdG8gYmUgdXNlZCBvbiB0b3Agb2Yg
dGhlIEhUTUwgNAotICAgKiBkZWZhdWx0IHN0eWxlIHNoZWV0LgotICAgKgotICAgKiBUaGlzIGdp
dmVzIGEgd2lkZSByYW5nZSBvZiBwb3NzaWJpbGl0aWVzIHRvCi0gICAqIGNoYW5nZSB0aGUgbGF5
b3V0IG9mIHRoZSBwYWdlLgorICAgKiBTZXRzIGEgdXNlciBkZWZpbmVkIHN0eWxlIHNoZWV0IHRv
IGJlIHVzZWQgb24gdG9wIG9mIHRoZSBIVE1MNCwKKyAgICogU1ZHIGFuZCBwcmludGluZyBkZWZh
dWx0IHN0eWxlIHNoZWV0cy4KICAgICovCiAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
bihjb25zdCBLVVJMJiB1cmwpOwotCi0gIC8qKgotICAgKiBTZXRzIGEgdXNlciBkZWZpbmVkIHN0
eWxlIHNoZWV0IHRvIGJlIHVzZWQgb24gdG9wIG9mIHRoZSBIVE1MIDQKLSAgICogZGVmYXVsdCBz
dHlsZSBzaGVldC4KLSAgICoKLSAgICogVGhpcyBnaXZlcyBhIHdpZGUgcmFuZ2Ugb2YgcG9zc2li
aWxpdGllcyB0bwotICAgKiBjaGFuZ2UgdGhlIGxheW91dCBvZiB0aGUgcGFnZS4KLSAgICovCi0g
IHZvaWQgc2V0VXNlclN0eWxlU2hlZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3R5bGVTaGVl
dCk7Ci0KKyAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRE
YXRhKTsKKyAgCiAgIC8qKgogICAgKiBTZXRzIHRoZSBzdGFuZGFyZCBmb250IHN0eWxlLgogICAg
KgpAQCAtNTk2LDcgKzU3Niw3IEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGxhc3RFdmVudElz
TW91c2VVcCgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUo
KSBjb25zdCA9IDA7CiBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4o
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nTGlzdCYgcGFyYW1OYW1lcywg
Y29uc3QgRGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKSA9IDA7CisgIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4oY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CiAgIHZpcnR1YWwg
RnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBS
ZW5kZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikgPSAwOwogICB2aXJ0
dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgPSAwOwogCkBAIC02NDIsNyArNjIyLDcgQEAgcHJpdmF0
ZToKIAogICBib29sIHNob3VsZFVzZVBsdWdpbihOb2RlKiBlbGVtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFzRmFsbGJhY2ssIGJvb2wmIHVzZUZh
bGxiYWNrKTsKICAgYm9vbCBsb2FkUGx1Z2luKFJlbmRlclBhcnQqIHJlbmRlcmVyLCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIAotICAgICAgICAgICAgICAgICAgY29u
c3QgRGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmdMaXN0JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFjayk7CisgICAgICAgICAgICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBib29sIHVzZUZhbGxiYWNrKTsKICAgRnJhbWUqIGxvYWRTdWJmcmFtZShS
ZW5kZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpOwogCiBwdWJsaWM6CkBAIC02NTEsNyArNjMxLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBib3VuZGFyeSA9IFN0cmlu
ZygpKTsKICAgCiAgIGJvb2wgcmVxdWVzdE9iamVjdChSZW5kZXJQYXJ0KiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlVHlwZSwgY29uc3QgRGVwcmVjYXRlZFN0cmlu
Z0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0JiBwYXJhbVZhbHVl
cyk7CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNlcnZpY2VUeXBlLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
VmFsdWVzKTsKICAgYm9vbCByZXF1ZXN0RnJhbWUoUmVuZGVyUGFydCogZnJhbWUsIGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSk7CiAKICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3Q7CkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw
YWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWNoZWRTaGVl
dC0+ZGVyZWYodGhpcyk7CiAgICAgfQogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5
bGVTaGVldChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNoZWV0KQorICAgIHZpcnR1YWwg
dm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgLypVUkwqLywgY29uc3QgU3RyaW5nJiBz
aGVldCkKICAgICB7CiAgICAgICAgIG1fZnJhbWUtPnNldFVzZXJTdHlsZVNoZWV0KHNoZWV0LmRl
cHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgfQpAQCAtMjQ4LDEwICsyNDgsNiBAQCBib29sIEZyYW1l
OjpkaWRPcGVuVVJMKGNvbnN0IEtVUkwmIHVybCkKICAgZC0+bV9ranNTdGF0dXNCYXJUZXh0ID0g
U3RyaW5nKCk7CiAgIGQtPm1fa2pzRGVmYXVsdFN0YXR1c0JhclRleHQgPSBTdHJpbmcoKTsKIAot
ICBkLT5tX2JKU2NyaXB0RW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJs
ZWQoKTsKLSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBkLT5tX3NldHRpbmdzLT5pc0phdmFFbmFibGVk
KCk7Ci0gIGQtPm1fYlBsdWdpbnNFbmFibGVkID0gZC0+bV9zZXR0aW5ncy0+aXNQbHVnaW5zRW5h
YmxlZCgpOwotCiAgIC8vIGluaXRpYWxpemluZyBkLT5tX3VybCB0byB0aGUgbmV3IHVybCBicmVh
a3MgcmVsYXRpdmUgbGlua3Mgd2hlbiBvcGVuaW5nIHN1Y2ggYSBsaW5rIGFmdGVyIHRoaXMgY2Fs
bCBhbmQgX2JlZm9yZV8gYmVnaW4oKSBpcyBjYWxsZWQgKHdoZW4gdGhlIGZpcnN0CiAgIC8vIGRh
dGEgYXJyaXZlcykgKFNpbW9uKQogICBkLT5tX3VybCA9IHVybDsKQEAgLTM0NSwyMiArMzQxLDEy
IEBAIHZvaWQgRnJhbWU6OnNldFZpZXcoRnJhbWVWaWV3KiB2aWV3KQogCiBib29sIEZyYW1lOjpq
U2NyaXB0RW5hYmxlZCgpIGNvbnN0CiB7Ci0gIHJldHVybiBkLT5tX2JKU2NyaXB0RW5hYmxlZDsK
LX0KLQotdm9pZCBGcmFtZTo6c2V0TWV0YVJlZnJlc2hFbmFibGVkKGJvb2wgZW5hYmxlKQotewot
ICBkLT5tX21ldGFSZWZyZXNoRW5hYmxlZCA9IGVuYWJsZTsKLX0KLQotYm9vbCBGcmFtZTo6bWV0
YVJlZnJlc2hFbmFibGVkKCkgY29uc3QKLXsKLSAgcmV0dXJuIGQtPm1fbWV0YVJlZnJlc2hFbmFi
bGVkOworICAgIHJldHVybiBkLT5tX3NldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CiB9
CiAKIEtKU1Byb3h5ICpGcmFtZTo6alNjcmlwdCgpCiB7Ci0gICAgaWYgKCFkLT5tX2JKU2NyaXB0
RW5hYmxlZCkKKyAgICBpZiAoIWpTY3JpcHRFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgaWYgKCFkLT5tX2pzY3JpcHQpCkBAIC00MTYsMTYgKzQwMiwxMiBAQCBKU1ZhbHVlKiBG
cmFtZTo6ZXhlY3V0ZVNjcmlwdChOb2RlKiBuLCBjCiAKIGJvb2wgRnJhbWU6OmphdmFFbmFibGVk
KCkgY29uc3QKIHsKLSNpZm5kZWYgUV9XU19RV1MKLSAgcmV0dXJuIGQtPm1fYkphdmFFbmFibGVk
OwotI2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgcmV0dXJuIGQtPm1fc2V0dGlu
Z3MtPmlzSmF2YUVuYWJsZWQoKTsKIH0KIAogYm9vbCBGcmFtZTo6cGx1Z2luc0VuYWJsZWQoKSBj
b25zdAogewotICByZXR1cm4gZC0+bV9iUGx1Z2luc0VuYWJsZWQ7CisgICAgcmV0dXJuIGQtPm1f
c2V0dGluZ3MtPmlzUGx1Z2luc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0QXV0b2xv
YWRJbWFnZXMoYm9vbCBlbmFibGUpCkBAIC01MTYsNyArNDk4LDcgQEAgdm9pZCBGcmFtZTo6cmVj
ZWl2ZWRGaXJzdERhdGEoKQogCiAgICAgLy8gU3VwcG9ydCBmb3IgaHR0cC1yZWZyZXNoCiAgICAg
cURhdGEgPSBkLT5tX2pvYi0+cXVlcnlNZXRhRGF0YSgiaHR0cC1yZWZyZXNoIikuZGVwcmVjYXRl
ZFN0cmluZygpOwotICAgIGlmICghcURhdGEuaXNFbXB0eSgpICYmIGQtPm1fbWV0YVJlZnJlc2hF
bmFibGVkKSB7CisgICAgaWYgKCFxRGF0YS5pc0VtcHR5KCkpIHsKICAgICAgIGRvdWJsZSBkZWxh
eTsKICAgICAgIGludCBwb3MgPSBxRGF0YS5maW5kKCc7Jyk7CiAgICAgICBpZiAocG9zID09IC0x
KQpAQCAtNjMyLDcgKzYxNCw3IEBAIHZvaWQgRnJhbWU6OmJlZ2luKGNvbnN0IEtVUkwmIHVybCkK
ICAgdXBkYXRlUG9saWN5QmFzZVVSTCgpOwogCiAgIHNldEF1dG9sb2FkSW1hZ2VzKGQtPm1fc2V0
dGluZ3MtPmF1dG9Mb2FkSW1hZ2VzKCkpOwotICBTdHJpbmcgdXNlclN0eWxlU2hlZXQgPSBkLT5t
X3NldHRpbmdzLT51c2VyU3R5bGVTaGVldCgpOworICBjb25zdCBLVVJMJiB1c2VyU3R5bGVTaGVl
dCA9IGQtPm1fc2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKIAogICBpZiAoIXVz
ZXJTdHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEtV
UkwodXNlclN0eWxlU2hlZXQpKTsKQEAgLTEwMzcsNyArMTAxOSw3IEBAIHZvaWQgRnJhbWU6OnNl
dFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY28KICAgICAgICAgZC0+bV91c2VyU3R5bGVTaGVldExv
YWRlciA9IG5ldyBVc2VyU3R5bGVTaGVldExvYWRlcih0aGlzLCB1cmwudXJsKCksIGQtPm1fZG9j
LT5kb2NMb2FkZXIoKSk7CiB9CiAKLXZvaWQgRnJhbWU6OnNldFVzZXJTdHlsZVNoZWV0KGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmIHN0eWxlU2hlZXQpCit2b2lkIEZyYW1lOjpzZXRVc2VyU3R5bGVT
aGVldChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXQpCiB7CiAgICAgZGVsZXRlIGQtPm1fdXNlclN0
eWxlU2hlZXRMb2FkZXI7CiAgICAgZC0+bV91c2VyU3R5bGVTaGVldExvYWRlciA9IDA7CkBAIC0x
Mzc0LDcgKzEzNTYsNyBAQCBib29sIEZyYW1lOjpyZXF1ZXN0RnJhbWUoUmVuZGVyUGFydCogcmVu
CiB9CiAKIGJvb2wgRnJhbWU6OnJlcXVlc3RPYmplY3QoUmVuZGVyUGFydCogcmVuZGVyZXIsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgRGVwcmVjYXRl
ZFN0cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0JiBwYXJh
bVZhbHVlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcykKIHsKICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKICAgICBpZiAoIXVybC5p
c0VtcHR5KCkpCkBAIC0xNDA2LDcgKzEzODgsNyBAQCBib29sIEZyYW1lOjpzaG91bGRVc2VQbHVn
aW4oTm9kZSogZWxlbWVuCiAKIAogYm9vbCBGcmFtZTo6bG9hZFBsdWdpbihSZW5kZXJQYXJ0ICpy
ZW5kZXJlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtTmFtZXMs
IGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFj
aykKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFjaykK
IHsKICAgICBpZiAodXNlRmFsbGJhY2spIHsKICAgICAgICAgY2hlY2tFbWl0TG9hZEV2ZW50KCk7
CkBAIC0xNjMzLDMxICsxNjE1LDI1IEBAIFN0cmluZyBGcmFtZTo6anNEZWZhdWx0U3RhdHVzQmFy
VGV4dCgpIGMKIAogRGVwcmVjYXRlZFN0cmluZyBGcmFtZTo6cmVmZXJyZXIoKSBjb25zdAogewot
ICAgcmV0dXJuIGQtPm1fcmVmZXJyZXI7CisgICAgcmV0dXJuIGQtPm1fcmVmZXJyZXI7CiB9CiAK
IFN0cmluZyBGcmFtZTo6bGFzdE1vZGlmaWVkKCkgY29uc3QKIHsKLSAgcmV0dXJuIGQtPm1fbGFz
dE1vZGlmaWVkOworICAgIHJldHVybiBkLT5tX2xhc3RNb2RpZmllZDsKIH0KIAogdm9pZCBGcmFt
ZTo6cmVwYXJzZUNvbmZpZ3VyYXRpb24oKQogewotICBzZXRBdXRvbG9hZEltYWdlcyhkLT5tX3Nl
dHRpbmdzLT5hdXRvTG9hZEltYWdlcygpKTsKLSAgaWYgKGQtPm1fZG9jKQotICAgICBkLT5tX2Rv
Yy0+ZG9jTG9hZGVyKCktPnNldFNob3dBbmltYXRpb25zKEtIVE1MU2V0dGluZ3M6OktBbmltYXRp
b25FbmFibGVkKTsKLQotICBkLT5tX2JKU2NyaXB0RW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlz
SmF2YVNjcmlwdEVuYWJsZWQoKTsKLSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBkLT5tX3NldHRpbmdz
LT5pc0phdmFFbmFibGVkKCk7Ci0gIGQtPm1fYlBsdWdpbnNFbmFibGVkID0gZC0+bV9zZXR0aW5n
cy0+aXNQbHVnaW5zRW5hYmxlZCgpOwotCi0gIERlcHJlY2F0ZWRTdHJpbmcgdXNlclN0eWxlU2hl
ZXQgPSBkLT5tX3NldHRpbmdzLT51c2VyU3R5bGVTaGVldCgpOwotICBpZiAoIXVzZXJTdHlsZVNo
ZWV0LmlzRW1wdHkoKSkKLSAgICBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEtVUkwodXNlclN0
eWxlU2hlZXQpKTsKLSAgZWxzZQotICAgIHNldFVzZXJTdHlsZVNoZWV0KERlcHJlY2F0ZWRTdHJp
bmcoKSk7CisgICAgc2V0QXV0b2xvYWRJbWFnZXMoZC0+bV9zZXR0aW5ncy0+YXV0b0xvYWRJbWFn
ZXMoKSk7CisgICAgaWYgKGQtPm1fZG9jKQorICAgICAgICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCkt
PnNldFNob3dBbmltYXRpb25zKEtIVE1MU2V0dGluZ3M6OktBbmltYXRpb25FbmFibGVkKTsKIAot
ICBpZiAoZC0+bV9kb2MpIGQtPm1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAgY29u
c3QgS1VSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IGQtPm1fc2V0dGluZ3MtPnVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oKTsKKyAgICBpZiAoIXVzZXJTdHlsZVNoZWV0TG9jYXRpb24uaXNFbXB0
eSgpKQorICAgICAgICBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHVzZXJTdHlsZVNoZWV0TG9j
YXRpb24pOworICAgIGVsc2UKKyAgICAgICAgc2V0VXNlclN0eWxlU2hlZXQoU3RyaW5nKCkpOwog
fQogCiBib29sIEZyYW1lOjpzaG91bGREcmFnQXV0b05vZGUoTm9kZSAqbm9kZSwgaW50IHgsIGlu
dCB5KSBjb25zdApAQCAtMTc5NiwxNSArMTc3MiwxMyBAQCB2b2lkIEZyYW1lOjpoYW5kbGVNb3Vz
ZVByZXNzRXZlbnRTaW5nbGVDCiAgICAgICAgICAgICAgICAgLy8gd2FzIGNyZWF0ZWQgcmlnaHQt
dG8tbGVmdAogICAgICAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsLnN0YXJ0KCk7CiAg
ICAgICAgICAgICAgICAgc2hvcnQgYmVmb3JlID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCksIHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgPD0gMCkgeworICAgICAgICAgICAgICAgIGlm
IChiZWZvcmUgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgc2VsLnNldEJhc2VBbmRFeHRlbnQo
cG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpLCBzZWwuZW5kKCkubm9kZSgpLCBzZWwuZW5kKCkub2Zm
c2V0KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBzZWwuc2V0QmFzZUFuZEV4dGVudChzdGFydC5ub2RlKCksIHN0
YXJ0Lm9mZnNldCgpLCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGlmIChkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5ICE9IENo
YXJhY3RlckdyYW51bGFyaXR5KSB7CisgICAgICAgICAgICAgICAgaWYgKGQtPm1fc2VsZWN0aW9u
R3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAgICAgICAgICAgICAgICAgICAg
IHNlbC5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkpOwot
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkLT5tX2JlZ2FuU2VsZWN0aW5nVGV4
dCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHNlbCA9IFNl
bGVjdGlvbkNvbnRyb2xsZXIodmlzaWJsZVBvcyk7CkBAIC0xOTc0LDkgKzE5NDgsOCBAQCB2b2lk
IGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50CiB2b2lkIEZyYW1lOjphcHBsaWVk
RWRpdGluZyhFZGl0Q29tbWFuZFB0ciYgY21kKQogewogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIg
c2VsKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSk7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlv
bihzZWwpKSB7CisgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKQogICAgICAgICBz
ZXRTZWxlY3Rpb24oc2VsLCBmYWxzZSk7Ci0gICAgfQogICAgIAogICAgIGRpc3BhdGNoRWRpdGFi
bGVDb250ZW50Q2hhbmdlZEV2ZW50KCFzZWxlY3Rpb24oKS5pc05vbmUoKSA/IHNlbGVjdGlvbigp
LnN0YXJ0KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwKTsKIApAQCAtMjAwNyw5
ICsxOTgwLDggQEAgdm9pZCBGcmFtZTo6YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdAogdm9p
ZCBGcmFtZTo6dW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciYgY21kKQogewogICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5zdGFydGluZ1NlbGVjdGlvbigpKTsKLSAgICBpZiAo
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKKyAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKHNlbCkpCiAgICAgICAgIHNldFNlbGVjdGlvbihzZWwsIHRydWUpOwotICAgIH0KICAgICAK
ICAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCghc2VsZWN0aW9uKCkuaXNO
b25lKCkgPyBzZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
IDogMCk7CiAgICAgICAgIApAQCAtMjAyMSw5ICsxOTkzLDggQEAgdm9pZCBGcmFtZTo6dW5hcHBs
aWVkRWRpdGluZyhFZGl0Q29tbWFuZAogdm9pZCBGcmFtZTo6cmVhcHBsaWVkRWRpdGluZyhFZGl0
Q29tbWFuZFB0ciYgY21kKQogewogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5lbmRp
bmdTZWxlY3Rpb24oKSk7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7Cisg
ICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKQogICAgICAgICBzZXRTZWxlY3Rpb24o
c2VsLCB0cnVlKTsKLSAgICB9CiAgICAgCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnQoIXNlbGVjdGlvbigpLmlzTm9uZSgpID8gc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2Rl
KCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDApOwogICAgICAgICAKQEAgLTI3OTAsNyArMjc2
MSw3IEBAIHZvaWQgRnJhbWU6OnJlc3VtZVRpbWVvdXRzKFBhdXNlZFRpbWVvdXQKICAgICAgICAg
ZC0+bV9kb2MtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+dW5wYXVzZUFuaW1hdGlvbnMoKTsKICNl
bmRpZgogCi0gICAgaWYgKGQtPm1fZG9jICYmIGQtPm1fanNjcmlwdCAmJiBkLT5tX2JKU2NyaXB0
RW5hYmxlZCkgeworICAgIGlmIChkLT5tX2RvYyAmJiBkLT5tX2pzY3JpcHQgJiYgalNjcmlwdEVu
YWJsZWQoKSkgewogICAgICAgICBpZiAoV2luZG93ICp3ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRv
dyh0aGlzKSkKICAgICAgICAgICAgIHctPnJlc3VtZVRpbWVvdXRzKHQpOwogICAgIH0KSW5kZXg6
IHBhZ2UvRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZVByaXZhdGUuaAko
cmV2aXNpb24gMTM0MzEpCisrKyBwYWdlL0ZyYW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSwxMCArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fZXh0
ZW5zaW9uKDApCiAgICAgICAgICAgICAsIG1fanNjcmlwdCgwKQogICAgICAgICAgICAgLCBtX3J1
bm5pbmdTY3JpcHRzKDApCi0gICAgICAgICAgICAsIG1fYkpTY3JpcHRFbmFibGVkKHRydWUpCi0g
ICAgICAgICAgICAsIG1fYkphdmFFbmFibGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fYlBsdWdp
bnNFbmFibGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fbWV0YVJlZnJlc2hFbmFibGVkKHRydWUp
CiAgICAgICAgICAgICAsIG1fc2V0dGluZ3MoMCkKICAgICAgICAgICAgICwgbV9qb2IoMCkKICAg
ICAgICAgICAgICwgbV9iQ29tcGxldGUodHJ1ZSkKQEAgLTEyNSwxMCArMTIxLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIEtKU1Byb3h5KiBtX2pzY3JpcHQ7CiAgICAgICAgIGlu
dCBtX3J1bm5pbmdTY3JpcHRzOwotICAgICAgICBib29sIG1fYkpTY3JpcHRFbmFibGVkIDogMTsK
LSAgICAgICAgYm9vbCBtX2JKYXZhRW5hYmxlZCA6IDE7Ci0gICAgICAgIGJvb2wgbV9iUGx1Z2lu
c0VuYWJsZWQgOiAxOwotICAgICAgICBib29sIG1fbWV0YVJlZnJlc2hFbmFibGVkIDogMTsKIAog
ICAgICAgICBLSFRNTFNldHRpbmdzKiBtX3NldHRpbmdzOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7228</attachid>
            <date>2006-03-22 02:26:35 -0800</date>
            <delta_ts>2006-03-22 08:24:37 -0800</delta_ts>
            <desc>Remove a few more DeprecatedString uses while I&apos;m at it...</desc>
            <filename>string.patch</filename>
            <type>text/plain</type>
            <size>83083</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vU3RyaW5n
LmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBwbGF0Zm9ybS9TdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw2ICs4OCw0OCBAQCBTdHJpbmcgb3BlcmF0b3IrKGNvbnN0IFN0cmluZyYgYSwg
Y29uc3QgCiAgICAgcmV0dXJuIGM7CiB9CiAKK1N0cmluZyBvcGVyYXRvcisoY29uc3QgU3RyaW5n
JiBzLCBjb25zdCBjaGFyKiBjcykKK3sKKyAgICBpZiAocy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoY3MpOworICAgIHJldHVybiBzICsgU3RyaW5nKGNzKTsKK30KKworU3RyaW5n
IG9wZXJhdG9yKyhjb25zdCBjaGFyKiBjcywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhjcyk7CisgICAgcmV0dXJuIFN0cmlu
ZyhjcykgKyBzOworfQorCitTdHJpbmcgb3BlcmF0b3IrKGNvbnN0IFN0cmluZyYgcywgUUNoYXIg
YykKK3sKKyAgICBpZiAocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoYyk7Cisg
ICAgcmV0dXJuIHMgKyBTdHJpbmcoYyk7Cit9CisKK1N0cmluZyBvcGVyYXRvcisoUUNoYXIgYywg
Y29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhjKTsKKyAgICByZXR1cm4gU3RyaW5nKGMpICsgczsKK30KKworU3RyaW5nIG9wZXJh
dG9yKyhjb25zdCBTdHJpbmcmIHMsIGNoYXIgYykKK3sKKyAgICBpZiAocy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoYyk7CisgICAgcmV0dXJuIHMgKyBTdHJpbmcoYyk7Cit9CisK
K1N0cmluZyBvcGVyYXRvcisoY2hhciBjLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaWYgKHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKGMpOworICAgIHJldHVybiBTdHJpbmco
YykgKyBzOworfQorCiB2b2lkIFN0cmluZzo6aW5zZXJ0KGNvbnN0IFN0cmluZyYgc3RyLCB1bnNp
Z25lZCBwb3MpCiB7CiAgICAgaWYgKCFtX2ltcGwpCkluZGV4OiBwbGF0Zm9ybS9HcmFwaGljc0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNp
b24gMTM0MzEpCisrKyBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTU5LDcgKzE1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBfX0FQUExFX18KICAg
ICAgICAgc3RhdGljIENHQ29udGV4dFJlZiBjdXJyZW50Q0dDb250ZXh0KCk7CiAgICAgICAgIHN0
YXRpYyBpbnQgZ2V0Q29tcG9zaXRlT3BlcmF0aW9uKENHQ29udGV4dFJlZik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDR0NvbnRleHRSZWYsIGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcmIG9wZXJhdGlvbik7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldENvbXBvc2l0
ZU9wZXJhdGlvbihDR0NvbnRleHRSZWYsIGNvbnN0IFN0cmluZyYgb3BlcmF0aW9uKTsKICAgICAg
ICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENHQ29udGV4dFJlZiwgaW50IG9w
ZXJhdGlvbik7CiAjZW5kaWYKIApJbmRleDogcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4dE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCShy
ZXZpc2lvbiAxMzQzMSkKKysrIHBsYXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM1Niw5ICszNTYsOSBAQCBpbnQgR3JhcGhpY3NDb250ZXh0OjpnZXRD
b21wb3NpdGVPcGVyYXRpCiAgICAgcmV0dXJuIChpbnQpW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZh
Y3Rvcnkgc2hhcmVkRmFjdG9yeV0gQ0dDb21wb3NpdGVPcGVyYXRpb25JbkNvbnRleHQ6Y29udGV4
dF07CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24gKENH
Q29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBvcCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24gKENHQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIG9wKQogewotICAgIFtbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5
IHNoYXJlZEZhY3RvcnldIHNldENHQ29tcG9zaXRlT3BlcmF0aW9uRnJvbVN0cmluZzpvcC5nZXRO
U1N0cmluZygpIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICBbW1dlYkNvcmVJbWFnZVJlbmRlcmVy
RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBzZXRDR0NvbXBvc2l0ZU9wZXJhdGlvbkZyb21TdHJpbmc6
b3AgaW5Db250ZXh0OmNvbnRleHRdOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uIChDR0NvbnRleHRSZWYgY29udGV4dCwgaW50IG9wKQpJbmRleDogcGxh
dGZvcm0vQXRvbWljU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vQXRvbWljU3RyaW5n
LmgJKHJldmlzaW9uIDEzNDMxKQorKysgcGxhdGZvcm0vQXRvbWljU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXQoKTsK
ICAgICAKICAgICBBdG9taWNTdHJpbmcoKSB7IH0KKyAgICBBdG9taWNTdHJpbmcoUUNoYXIgYykg
OiBtX3N0cmluZyhhZGQoJmMsIDEpKSB7IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgY2hhciog
cykgOiBtX3N0cmluZyhhZGQocykpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25zdCBRQ2hhciog
cywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQocywgbGVuZ3RoKSkgeyB9CiAgICAgQXRvbWlj
U3RyaW5nKGNvbnN0IHVuc2lnbmVkIHNob3J0KiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFk
ZCgoUUNoYXIqKXMsIGxlbmd0aCkpIHsgfQpJbmRleDogcGxhdGZvcm0vS1VSTC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL0tVUkwuaAkocmV2aXNpb24gMTM0MzEpCisrKyBwbGF0Zm9ybS9LVVJM
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgcHVibGljOgogICAgIEtVUkwoY29u
c3QgY2hhciopOwogICAgIEtVUkwoY29uc3QgS1VSTCYsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
LCBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmIGVuY29kaW5nID0gV2ViQ29yZTo6VGV4dEVu
Y29kaW5nKFdlYkNvcmU6OlVURjhFbmNvZGluZykpOwogICAgIEtVUkwoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYpOwotICAgIEtVUkwoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAjaWYgX19BUFBM
RV9fCiAgICAgS1VSTChOU1VSTCopOwogI2VuZGlmCkluZGV4OiBwbGF0Zm9ybS9TdHJpbmdJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTM0
MzEpCisrKyBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDEw
ICsxNjQsMTIgQEAgdm9pZCBTdHJpbmdJbXBsOjp0cnVuY2F0ZShpbnQgbGVuKQogdm9pZCBTdHJp
bmdJbXBsOjpyZW1vdmUodW5zaWduZWQgcG9zLCBpbnQgbGVuKQogewogICAgIGFzc2VydCghX2lu
VGFibGUpOwotICAgIGlmKGxlbiA8PSAwKSByZXR1cm47Ci0gICAgaWYocG9zID49IGwgKSByZXR1
cm47Ci0gICAgaWYoKHVuc2lnbmVkKWxlbiA+IGwgLSBwb3MpCi0gICAgbGVuID0gbCAtIHBvczsK
KyAgICBpZiAobGVuIDw9IDApCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocG9zID49IGwgKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCh1bnNpZ25lZClsZW4gPiBsIC0gcG9zKQorICAgICAg
ICBsZW4gPSBsIC0gcG9zOwogCiAgICAgdW5zaWduZWQgbmV3TGVuID0gbC1sZW47CiAgICAgUUNo
YXIqIGMgPSBuZXdRQ2hhclZlY3RvcihuZXdMZW4pOwpAQCAtMjQ4LDkgKzI1MCw5IEBAIHN0YXRp
YyBMZW5ndGggcGFyc2VMZW5ndGgoY29uc3QgUUNoYXIqIHMKICAgICAgICAgKytpOwogCiAgICAg
aWYgKG9rKSB7Ci0gICAgICAgIGlmIChpID09IGwpIHsKKyAgICAgICAgaWYgKGkgPT0gbCkKICAg
ICAgICAgICAgIHJldHVybiBMZW5ndGgociwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgeworICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IFFDaGFyKiBuZXh0ID0gcytpOwogCiAgICAg
ICAgICAgICBpZiAoKm5leHQgPT0gJyUnKQpAQCAtNjM4LDYgKzY0MCwyNiBAQCBTdHJpbmdJbXBs
KiBTdHJpbmdJbXBsOjpyZXBsYWNlKFFDaGFyIG9sCiAgICAgcmV0dXJuIGM7CiB9CiAKK1N0cmlu
Z0ltcGwqIFN0cmluZ0ltcGw6OnJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwg
Y29uc3QgU3RyaW5nSW1wbCogc3RyKQoreworICAgIFN0cmluZ0ltcGwqIHMgPSBjb3B5KCk7Cisg
ICAgcy0+cmVtb3ZlKGluZGV4LCBsZW4pOworICAgIHMtPmluc2VydChzdHIsIGluZGV4KTsKKyAg
ICByZXR1cm4gczsKK30KKworU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6cmVwbGFjZShRQ2hhciBw
YXR0ZXJuLCBjb25zdCBTdHJpbmdJbXBsKiBzdHIpCit7CisgICAgaW50IHNsZW4gPSBzdHIgPyBz
dHItPmxlbmd0aCgpIDogMDsKKyAgICBpbnQgaW5kZXggPSAwOworICAgIFN0cmluZ0ltcGwqIHJl
c3VsdCA9IHRoaXM7CisgICAgd2hpbGUgKChpbmRleCA9IHJlc3VsdC0+ZmluZChwYXR0ZXJuLCBp
bmRleCkpID49IDApIHsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yZXBsYWNlKGluZGV4LCAx
LCBzdHIpOworICAgICAgICBpbmRleCArPSBzbGVuOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwq
IGIpCiB7CiAgICAgcmV0dXJuIFN0ckhhc2g8U3RyaW5nSW1wbCo+OjplcXVhbChhLCBiKTsKSW5k
ZXg6IHBsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0tVUkwuY3BwCShy
ZXZpc2lvbiAxMzQzMSkKKysrIHBsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTksMjMgKzI1OSw2IEBAIEtVUkw6OktVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXJsKQog
ICAgICAgICBwYXJzZSh1cmwuYXNjaWkoKSwgJnVybCk7CiB9CiAKLUtVUkw6OktVUkwoY29uc3Qg
U3RyaW5nJiBzdHJpbmdVUkwpCi17Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB1cmwgPSBzdHJpbmdV
UkwuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIGlmICghdXJsLmlzRW1wdHkoKSAmJiB1cmxbMF0g
PT0gJy8nKSB7Ci0gICAgICAgIC8vIDUgZm9yICJmaWxlOiIsIDEgZm9yIHRlcm1pbmF0b3IKLSAg
ICAgICAgVmVjdG9yPGNoYXIsIDIwNDg+IGJ1ZmZlcih1cmwubGVuZ3RoKCkgKyA2KTsKLSAgICAg
ICAgYnVmZmVyWzBdID0gJ2YnOwotICAgICAgICBidWZmZXJbMV0gPSAnaSc7Ci0gICAgICAgIGJ1
ZmZlclsyXSA9ICdsJzsKLSAgICAgICAgYnVmZmVyWzNdID0gJ2UnOwotICAgICAgICBidWZmZXJb
NF0gPSAnOic7Ci0gICAgICAgIHVybC5jb3B5TGF0aW4xKCZidWZmZXJbNV0pOwotICAgICAgICBw
YXJzZShidWZmZXIsIDApOwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZSh1cmwuYXNjaWkoKSwg
JnVybCk7Ci19Ci0KIEtVUkw6OktVUkwoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyAmcmVsYXRpdmUsIGNvbnN0IFdlYkNvcmU6OlRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
CiB7CiAgICAgLy8gQWxsb3cgYXQgbGVzdCBhYnNvbHV0ZSBVUkxzIHRvIHJlc29sdmUgYWdhaW5z
dCBhbiBlbXB0eSBVUkwuCkluZGV4OiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgJKHJldmlzaW9uIDEzNDMxKQorKysgcGxh
dGZvcm0vUGxhdGZvcm1TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTdHJpbmcgewogcHVibGljOgogICAgIFN0cmluZygp
IHsgfSAvLyBnaXZlcyBudWxsIHN0cmluZywgZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gZW1wdHkg
c3RyaW5nCisgICAgU3RyaW5nKFFDaGFyIGMpIDogbV9pbXBsKG5ldyBTdHJpbmdJbXBsKCZjLCAx
KSkgeyB9CiAgICAgU3RyaW5nKGNvbnN0IFFDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBT
dHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwogICAgIFN0cmluZyhjb25zdCBLSlM6Oklk
ZW50aWZpZXImKTsKQEAgLTc2LDYgKzc3LDcgQEAgcHVibGljOgogICAgICAgICB7IHJldHVybiBt
X2ltcGwgPyBtX2ltcGwtPmVuZHNXaXRoKHMuaW1wbCgpLCBjYXNlU2Vuc2l0aXZlKSA6IHMuaXNF
bXB0eSgpOyB9CiAKICAgICBTdHJpbmcmIHJlcGxhY2UoUUNoYXIgYSwgUUNoYXIgYikgeyBpZiAo
bV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoYSwgYik7IHJldHVybiAqdGhpczsgfQor
ICAgIFN0cmluZyYgcmVwbGFjZShRQ2hhciBhLCBjb25zdCBTdHJpbmcmIGIpIHsgaWYgKG1faW1w
bCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEsIGIuaW1wbCgpKTsgcmV0dXJuICp0aGlzOyB9
CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICB2b2lkIHRydW5jYXRlKHVuc2ln
bmVkIGxlbik7CkBAIC0xMjYsNiArMTI4LDEyIEBAIHByaXZhdGU6CiB9OwogCiBTdHJpbmcgb3Bl
cmF0b3IrKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworU3RyaW5nIG9wZXJhdG9yKyhj
b25zdCBTdHJpbmcmLCBjb25zdCBjaGFyKik7CitTdHJpbmcgb3BlcmF0b3IrKGNvbnN0IGNoYXIq
LCBjb25zdCBTdHJpbmcmKTsKK1N0cmluZyBvcGVyYXRvcisoY29uc3QgU3RyaW5nJiwgUUNoYXIp
OworU3RyaW5nIG9wZXJhdG9yKyhRQ2hhciwgY29uc3QgU3RyaW5nJik7CitTdHJpbmcgb3BlcmF0
b3IrKGNvbnN0IFN0cmluZyYsIGNoYXIpOworU3RyaW5nIG9wZXJhdG9yKyhjaGFyLCBjb25zdCBT
dHJpbmcmKTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0
IFN0cmluZyYgYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQogaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJu
IGVxdWFsKGEuaW1wbCgpLCBiKTsgfQpJbmRleDogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHAJKHJldmlzaW9u
IDEzNDMxKQorKysgcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNzYsNyArMjE3Niw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6
OnJlbW8KICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0
ZWRTdHJpbmc6OnJlcGxhY2UoIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4sIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJnN0ciApCitEZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5n
OjpyZXBsYWNlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4sIGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcmIHN0cikKIHsKICAgICByZXR1cm4gcmVtb3ZlKGluZGV4LCBsZW4pLmluc2VydChpbmRl
eCwgc3RyKTsKIH0KQEAgLTIxOTIsNyArMjE5Miw2IEBAIERlcHJlY2F0ZWRTdHJpbmcgJkRlcHJl
Y2F0ZWRTdHJpbmc6OnJlcGwKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLQogRGVwcmVjYXRlZFN0
cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6cmVwbGFjZShRQ2hhciBwYXR0ZXJuLCBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nICZzdHIpCiB7CiAgICAgaW50IHNsZW4gPSBzdHIuZGF0YUhhbmRsZVswXS0+
X2xlbmd0aDsKQEAgLTIyMDQsNyArMjIwMyw2IEBAIERlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0
ZWRTdHJpbmc6OnJlcGwKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLQogRGVwcmVjYXRlZFN0cmlu
ZyAmRGVwcmVjYXRlZFN0cmluZzo6cmVwbGFjZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZwYXR0
ZXJuLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHIpCiB7CiAgICAgaWYgKHBhdHRlcm4uaXNF
bXB0eSgpKQpJbmRleDogcGxhdGZvcm0vU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRm
b3JtL1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMTM0MzEpCisrKyBwbGF0Zm9ybS9TdHJpbmdJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5z
ZXJ0KGNvbnN0IFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBwb3MpOwogICAgIHZvaWQgdHJ1bmNhdGUo
aW50IGxlbik7CiAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgcG9zLCBpbnQgbGVuID0gMSk7Cisg
ICAgCiAgICAgU3RyaW5nSW1wbCogc3BsaXQodW5zaWduZWQgcG9zKTsKICAgICBTdHJpbmdJbXBs
KiBjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwocywgbCk7IH0KIApAQCAtMTAx
LDggKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZ0lt
cGwqIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIGZpbmQocywg
MCwgY2FzZVNlbnNpdGl2ZSkgPT0gMDsgfQogICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgU3RyaW5n
SW1wbCosIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0OwogCi0gICAgLy8gVGhpcyBt
b2RpZmllcyB0aGUgc3RyaW5nIGluIHBsYWNlIGlmIHRoZXJlIGlzIG9ubHkgb25lIHJlZiwgbWFr
ZXMgYSBuZXcgc3RyaW5nIG90aGVyd2lzZS4KKyAgICAvLyBEb2VzIG5vdCBtb2RpZnkgdGhlIHN0
cmluZy4KICAgICBTdHJpbmdJbXBsKiByZXBsYWNlKFFDaGFyLCBRQ2hhcik7CisgICAgU3RyaW5n
SW1wbCogcmVwbGFjZShRQ2hhciBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKTsKKyAgICBTdHJpbmdJ
bXBsKiByZXBsYWNlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4sIGNvbnN0IFN0cmluZ0lt
cGwqKTsKIAogICAgIHN0YXRpYyBTdHJpbmdJbXBsKiBlbXB0eSgpOwogCkluZGV4OiBwbGF0Zm9y
bS9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0ltYWdlLmgJKHJldmlzaW9uIDEzNDMx
KQorKysgcGxhdGZvcm0vSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsNiBAQAog
I2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAotY2xh
c3MgRGVwcmVjYXRlZFN0cmluZzsKLQogI2lmIF9fQVBQTEVfXwogI2luY2x1ZGUgPEFwcGxpY2F0
aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2lmIF9fT0JKQ19fCkluZGV4OiBi
aW5kaW5ncy9vYmpjL0RPTUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3Mvb2JqYy9ET01I
VE1MLm1tCShyZXZpc2lvbiAxMzQzMSkKKysrIGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkod29y
a2luZyBjb3B5KQpAQCAtNTEwLDcgKzUxMCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpI
VE1MTmFtZXM7CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfY3JlYXRlRG9jdW1lbnRGcmFn
bWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJp
bmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZwogewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChbc2VsZiBfZG9jdW1lbnRd
LCBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTlNTdHJpbmcobWFya3VwU3RyaW5nKSwgRGVwcmVjYXRl
ZFN0cmluZzo6ZnJvbU5TU3RyaW5nKGJhc2VVUkxTdHJpbmcpKTsKKyAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoW3NlbGYgX2Rv
Y3VtZW50XSwgbWFya3VwU3RyaW5nLCBiYXNlVVJMU3RyaW5nKTsKICAgICByZXR1cm4gW0RPTURv
Y3VtZW50RnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRXaXRoOmZyYWdtZW50LmdldCgpXTsKIH0K
IApJbmRleDogaHRtbC9odG1sX2hlYWRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxf
aGVhZGltcGwuY3BwCShyZXZpc2lvbiAxMzQzMSkKKysrIGh0bWwvaHRtbF9oZWFkaW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6
cHJvY2VzcygpCiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IERlcHJlY2F0ZWRTdHJpbmcgdHlwZSA9IG1fdHlwZS5kZXByZWNhdGVkU3RyaW5nKCkubG93ZXIo
KTsKKyAgICBTdHJpbmcgdHlwZSA9IG1fdHlwZS5sb3dlcigpOwogICAgIAogICAgIEZyYW1lICpm
cmFtZSA9IGdldERvY3VtZW50KCktPmZyYW1lKCk7CiAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lk
IEhUTUxMaW5rRWxlbWVudDo6c2V0U3R5bGVTaGVldChjb25zCiAgICAgbV9zaGVldC0+cGFyc2VT
dHJpbmcoc2hlZXRTdHIsICFnZXREb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiAKICAgICBN
ZWRpYUxpc3QgKm1lZGlhID0gbmV3IE1lZGlhTGlzdChtX3NoZWV0LmdldCgpLCBtX21lZGlhKTsK
LSAgICBtX3NoZWV0LT5zZXRNZWRpYSggbWVkaWEgKTsKKyAgICBtX3NoZWV0LT5zZXRNZWRpYSht
ZWRpYSk7CiAKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKIApJbmRleDogaHRtbC9odG1sX2Jhc2Vp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfYmFzZWltcGwuY3BwCShyZXZpc2lvbiAx
MzQzMSkKKysrIGh0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOSw3
ICszMjksNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnQ6Om9wZW5VUkwoKQogICAgIGlmIChGcmFt
ZSogY2hpbGRGcmFtZSA9IHBhcmVudEZyYW1lLT50cmVlKCktPmNoaWxkKG1fbmFtZSkpCiAgICAg
ICAgIGNoaWxkRnJhbWUtPm9wZW5VUkwoZ2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocmVsYXRp
dmVVUkwuZGVwcmVjYXRlZFN0cmluZygpKSk7CiAgICAgZWxzZQotICAgICAgICBwYXJlbnRGcmFt
ZS0+cmVxdWVzdEZyYW1lKHN0YXRpY19jYXN0PFJlbmRlckZyYW1lICo+KHJlbmRlcmVyKCkpLCBy
ZWxhdGl2ZVVSTC5kZXByZWNhdGVkU3RyaW5nKCksIG1fbmFtZS5kZXByZWNhdGVkU3RyaW5nKCkp
OworICAgICAgICBwYXJlbnRGcmFtZS0+cmVxdWVzdEZyYW1lKHN0YXRpY19jYXN0PFJlbmRlckZy
YW1lICo+KHJlbmRlcmVyKCkpLCByZWxhdGl2ZVVSTCwgbV9uYW1lKTsKIH0KIAogCkBAIC00MjQs
NyArNDI0LDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50OjphdHRhY2goKQogICAgIG1fbmFtZSA9
IGZyYW1lLT50cmVlKCktPnVuaXF1ZUNoaWxkTmFtZShtX25hbWUpOwogCiAgICAgLy8gbG9hZCB0
aGUgZnJhbWUgY29udGVudHMKLSAgICBmcmFtZS0+cmVxdWVzdEZyYW1lKHN0YXRpY19jYXN0PFJl
bmRlckZyYW1lKj4ocmVuZGVyZXIoKSksIHJlbGF0aXZlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSwg
bV9uYW1lLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgZnJhbWUtPnJlcXVlc3RGcmFtZShzdGF0
aWNfY2FzdDxSZW5kZXJGcmFtZSo+KHJlbmRlcmVyKCkpLCByZWxhdGl2ZVVSTCwgbV9uYW1lKTsK
IH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50OjpjbG9zZSgpCkluZGV4OiBodG1sL2h0bWxfaW1h
Z2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkocmV2aXNp
b24gMTM0MzEpCisrKyBodG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU5LDEzICsxNTksMTMgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YgogICAgIGlmIChhdHRyTmFtZSA9PSBhbHRBdHRyKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigp
KQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKS0+dXBk
YXRlQWx0VGV4dCgpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gc3JjQXR0cikgeworICAg
IH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gc3JjQXR0cikKICAgICAgICAgbV9pbWFnZUxvYWRlci51
cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRy
KSB7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyKQogICAgICAgICBhZGRDU1NM
ZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gaGVpZ2h0QXR0cikgeworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGhl
aWdodEF0dHIpCiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0
dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYm9yZGVyQXR0cikgewor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGJvcmRlckF0dHIpIHsKICAgICAgICAgLy8gYm9yZGVy
PSJub2JvcmRlciIgLT4gYm9yZGVyPSIwIgogICAgICAgICBpZihhdHRyLT52YWx1ZSgpLnRvSW50
KCkpIHsKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9CT1JERVJfV0lE
VEgsIGF0dHItPnZhbHVlKCkpOwpAQCAtMTgwLDI3ICsxODAsMjcgQEAgdm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gaHNw
YWNlQXR0cikgewogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xF
RlQsIGF0dHItPnZhbHVlKCkpOwogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1Bf
TUFSR0lOX1JJR0hULCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09
IGFsaWduQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKQogICAg
ICAgICBhZGRIVE1MQWxpZ25tZW50KGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0g
dmFsaWduQXR0cikgeworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IHZhbGlnbkF0dHIpCiAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1ZFUlRJQ0FMX0FMSUdOLCBhdHRyLT52
YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHVzZW1hcEF0dHIpIHsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSB1c2VtYXBBdHRyKSB7CiAgICAgICAgIGlmIChhdHRyLT52YWx1
ZSgpLmRvbVN0cmluZygpWzBdID09ICcjJykKICAgICAgICAgICAgIHVzZW1hcCA9IGF0dHItPnZh
bHVlKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVzZW1hcCA9IGdldERvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKTsKICAgICAgICAgbV9pc0xpbmsg
PSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBpc21hcEF0dHIp
IHsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGlzbWFwQXR0cikKICAgICAgICAgaXNtYXAg
PSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25hYm9ydEF0dHIpIHsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBvbmFib3J0QXR0cikKICAgICAgICAgc2V0SFRNTEV2ZW50TGlz
dGVuZXIoYWJvcnRFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmVy
cm9yQXR0cikgeworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IG9uZXJyb3JBdHRyKQogICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihlcnJvckV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHJOYW1lID09IG9ubG9hZEF0dHIpIHsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmxv
YWRBdHRyKQogICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOwot
ICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gY29tcG9zaXRlQXR0cikgewotICAgICAgICBfY29t
cG9zaXRlT3BlcmF0b3IgPSBhdHRyLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IG5hbWVBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gY29tcG9zaXRlQXR0cikKKyAgICAgICAgX2NvbXBvc2l0ZU9wZXJhdG9yID0gYXR0ci0+dmFs
dWUoKS5kb21TdHJpbmcoKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBuYW1lQXR0cikgewog
ICAgICAgICBTdHJpbmcgbmV3TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBpZiAo
aW5Eb2N1bWVudCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAg
ICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZ2V0
RG9jdW1lbnQoKSk7CkluZGV4OiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgaHRtbC9IVE1MVG9r
ZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDExICszODYsMTAgQEAgSFRNTFRva2Vu
aXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgIGN1cnJlbnRQcmVwZW5kaW5nU3Jj
ID0gJnByZXBlbmRpbmdTcmM7CiAgICAgaWYgKCFwYXJzZXItPnNraXBNb2RlKCkgJiYgIWZvbGxv
d2luZ0ZyYW1lc2V0KSB7CiAgICAgICAgIGlmIChjcykgewotICAgICAgICAgICAgaWYgKHNhdmVk
UHJlcGVuZGluZ1NyYykgeworICAgICAgICAgICAgaWYgKHNhdmVkUHJlcGVuZGluZ1NyYykKICAg
ICAgICAgICAgICAgICBzYXZlZFByZXBlbmRpbmdTcmMtPmFwcGVuZChzcmMpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwZW5kaW5nU3Jj
LnByZXBlbmQoc3JjKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldFNyYyhTZWdtZW50
ZWRTdHJpbmcoKSk7CiAgICAgICAgICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENvZGVSZXN5
bmMgPSAwOwogCkluZGV4OiBodG1sL2h0bWxfaW1hZ2VpbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9odG1sX2ltYWdlaW1wbC5oCShyZXZpc2lvbiAxMzQzMSkKKysrIGh0bWwvaHRtbF9pbWFnZWlt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCi0gICAgSW1h
Z2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
SW1hZ2U6OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmluZyhfY29tcG9zaXRlT3BlcmF0b3IuYXNj
aWkoKSk7IH0KKyAgICBJbWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Io
KSBjb25zdCB7IHJldHVybiBJbWFnZTo6Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3RyaW5nKF9jb21w
b3NpdGVPcGVyYXRvcik7IH0KIAogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKTsgfQogICAgIApAQCAtMTQ0LDcgKzE0NCw3
IEBAIHByb3RlY3RlZDoKICAgICBib29sIGlzbWFwOwogICAgIEhUTUxGb3JtRWxlbWVudCogbV9m
b3JtOwogICAgIFN0cmluZyBvbGROYW1lQXR0cjsKLSAgICBEZXByZWNhdGVkU3RyaW5nIF9jb21w
b3NpdGVPcGVyYXRvcjsKKyAgICBTdHJpbmcgX2NvbXBvc2l0ZU9wZXJhdG9yOwogfTsKIAogLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KSW5kZXg6IGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDEzNDMx
KQorKysgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODAsNyArMjgwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2Jh
bAogCiAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBH
cmFwaGljc0NvbnRleHQgQVBJLgogI2lmIF9fQVBQTEVfXwotICAgIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGRyYXdpbmdDb250ZXh0KCksIG9wZXJhdGlvbi5kZXByZWNh
dGVkU3RyaW5nKCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGRyYXdpbmdDb250ZXh0KCksIG9wZXJhdGlvbik7CiAjZW5kaWYKIH0KIApJbmRleDogaHRtbC9o
dG1sX29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNw
cAkocmV2aXNpb24gMTM0MzEpCisrKyBodG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MCwxMSArMTYwLDkgQEAgYm9vbCBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZAogCiBSZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSNpZm5kZWYg
UV9XU19RV1MgLy8gRklYTUUoRSk/IEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBwb3NzaWJsZSB3aXRo
IFF0IEVtYmVkZGVkLi4uCiAgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUo
KTsKIAotICAgIGlmKCBmcmFtZSAmJiBmcmFtZS0+amF2YUVuYWJsZWQoKSApCi0gICAgeworICAg
IGlmIChmcmFtZSAmJiBmcmFtZS0+amF2YUVuYWJsZWQoKSkgewogICAgICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBhcmdzOwogCiAgICAgICAgIGFyZ3Muc2V0KCJjb2RlIiwgZ2V0QXR0cmli
dXRlKGNvZGVBdHRyKSk7CkBAIC0xOTIsOSArMTkwLDYgQEAgUmVuZGVyT2JqZWN0ICpIVE1MQXBw
bGV0RWxlbWVudDo6Y3JlYXRlUgogICAgIC8vICMjIyByZW1vdmUgbWUuIHdlIHNob3VsZCBuZXZl
ciBzaG93IGFuIGVtcHR5IGFwcGxldCwgaW5zdGVhZAogICAgIC8vIHJlbmRlciB0aGUgYWx0ZXJu
YXRpdmUgY29udGVudCBnaXZlbiBieSB0aGUgd2VicGFnZQogICAgIHJldHVybiBuZXcgKGdldERv
Y3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRlckVtcHR5QXBwbGV0KHRoaXMpOwotI2Vsc2UK
LSAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiAjaWYgX19BUFBMRV9fCkluZGV4OiBodG1sL2h0
bWxfaGVhZGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfaGVhZGltcGwuaAkocmV2aXNp
b24gMTM0MzEpCisrKyBodG1sL2h0bWxfaGVhZGltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTM1
LDEzICsxMzUsMTIgQEAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3No
ZWV0OwogICAgIFN0cmluZyBtX3VybDsKICAgICBTdHJpbmcgbV90eXBlOwotICAgIERlcHJlY2F0
ZWRTdHJpbmcgbV9tZWRpYTsKKyAgICBTdHJpbmcgbV9tZWRpYTsKICAgICBpbnQgbV9kaXNhYmxl
ZFN0YXRlOyAvLyAwPXVuc2V0KGRlZmF1bHQpLCAxPWVuYWJsZWQgdmlhIHNjcmlwdCwgMj1kaXNh
YmxlZAogICAgIGJvb2wgbV9sb2FkaW5nIDogMTsKICAgICBib29sIG1fYWx0ZXJuYXRlIDogMTsK
ICAgICBib29sIG1faXNTdHlsZVNoZWV0IDogMTsKICAgICBib29sIG1faXNJY29uIDogMTsKLSAg
ICBEZXByZWNhdGVkU3RyaW5nIG1fZGF0YTsgLy8gbmVlZGVkIGZvciB0ZW1wb3JhcmlseSBzdG9y
aW5nIHRoZSBsb2FkZWQgc3R5bGUgc2hlZXQgZGF0YQogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtMjY1LDcgKzI2NCw3IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gbV9zaGVldDsKICAgICBib29sIG1fbG9hZGluZzsKICAgICBTdHJpbmcgbV90eXBlOwotICAg
IERlcHJlY2F0ZWRTdHJpbmcgbV9tZWRpYTsKKyAgICBTdHJpbmcgbV9tZWRpYTsKIH07CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDEz
NDMxKQorKysgcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDcsOSArMTQ3LDggQEAgdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludChQYWludEluZm8m
IAogICAgIGJvb2wgaXNQcmludGluZyA9IGkucC0+cHJpbnRpbmcoKTsKICAgICBib29sIGRyYXdT
ZWxlY3Rpb25UaW50ID0gKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgJiYgIWlz
UHJpbnRpbmc7CiAgICAgaWYgKGkucGhhc2UgPT0gUGFpbnRBY3Rpb25TZWxlY3Rpb24pIHsKLSAg
ICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkgeworICAgICAgICBp
ZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CiAgICAgICAgIGRyYXdTZWxlY3Rpb25UaW50ID0gZmFsc2U7CiAgICAgfQog
CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L3JlbmRlcl9zdHlsZS5oCShyZXZpc2lvbiAxMzQzMSkKKysrIHJlbmRlcmluZy9yZW5kZXJfc3R5
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM1MCwxMCArMTM1MCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmVnaW9uLm9mZnNldC5ib3R0b20gPSBiOwogICAgICAgICByZWdpb24ub2Zmc2V0LmxlZnQg
PSBsOwogICAgICAgICByZWdpb24udHlwZSA9IHR5cGU7Ci0gICAgICAgIGlmICghYXBwZW5kKSB7
Ci0gICAgICAgICAgICBjc3MzTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9kYXNoYm9hcmRS
ZWdpb25zLmNsZWFyICgpOwotICAgICAgICB9Ci0gICAgICAgIGNzczNOb25Jbmhlcml0ZWREYXRh
LmFjY2VzcygpLT5tX2Rhc2hib2FyZFJlZ2lvbnMuYXBwZW5kIChyZWdpb24pOworICAgICAgICBp
ZiAoIWFwcGVuZCkKKyAgICAgICAgICAgIGNzczNOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5t
X2Rhc2hib2FyZFJlZ2lvbnMuY2xlYXIoKTsKKyAgICAgICAgY3NzM05vbkluaGVyaXRlZERhdGEu
YWNjZXNzKCktPm1fZGFzaGJvYXJkUmVnaW9ucy5hcHBlbmQocmVnaW9uKTsKICAgICB9CiAKICAg
ICB2b2lkIHJlc2V0Qm9yZGVyKCkgeyByZXNldEJvcmRlckltYWdlKCk7IHJlc2V0Qm9yZGVyVG9w
KCk7IHJlc2V0Qm9yZGVyUmlnaHQoKTsgcmVzZXRCb3JkZXJCb3R0b20oKTsgcmVzZXRCb3JkZXJM
ZWZ0KCk7IHJlc2V0Qm9yZGVyUmFkaXVzKCk7IH0KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZnJh
bWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHJldmlz
aW9uIDEzNDMxKQorKysgcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NzcsOSArNjc3LDkgQEAgUmVuZGVyUGFydE9iamVjdDo6UmVuZGVyUGFydE9iamVjdChI
VE1MRQogICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29s
IGlzVVJMQWxsb3dlZChXZWJDb3JlOjpEb2N1bWVudCAqZG9jLCBjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZ1cmwpCitzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoV2ViQ29yZTo6RG9jdW1lbnQgKmRv
YywgY29uc3QgU3RyaW5nICZ1cmwpCiB7Ci0gICAgS1VSTCBuZXdVUkwoZG9jLT5jb21wbGV0ZVVS
TCh1cmwpKTsKKyAgICBLVVJMIG5ld1VSTChkb2MtPmNvbXBsZXRlVVJMKHVybC5kZXByZWNhdGVk
U3RyaW5nKCkpKTsKICAgICBuZXdVUkwuc2V0UmVmKERlcHJlY2F0ZWRTdHJpbmc6Om51bGwpOwog
ICAgIAogICAgIGlmIChkb2MtPmZyYW1lKCktPnBhZ2UoKS0+ZnJhbWVDb3VudCgpID49IDIwMCkK
QEAgLTcwMCw3ICs3MDAsNyBAQCBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoV2ViQ29yZTo6RG9j
dW1lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lk
VG9TZXJ2aWNlVHlwZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZjbGFzc0lkLCBEZXByZWNhdGVk
U3RyaW5nICZzZXJ2aWNlVHlwZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBDbGFzc0lkVG9TZXJ2
aWNlVHlwZShjb25zdCBTdHJpbmcmIGNsYXNzSWQsIFN0cmluZyYgc2VydmljZVR5cGUpCiB7CiAg
ICAgLy8gSXQgaXMgQWN0aXZlWCwgYnV0IHRoZSBuc3BsdWdpbiBzeXN0ZW0gaGFuZGxpbmcKICAg
ICAvLyBzaG91bGQgYWxzbyB3b3JrLCB0aGF0J3Mgd2h5IHdlIGRvbid0IG92ZXJyaWRlIHRoZQpA
QCAtNzI2LDEwICs3MjYsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcENsYXNzSWRUb1NlcnZp
Y2VUeQogCiB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiB7Ci0gIERlcHJl
Y2F0ZWRTdHJpbmcgdXJsOwotICBEZXByZWNhdGVkU3RyaW5nIHNlcnZpY2VUeXBlOwotICBEZXBy
ZWNhdGVkU3RyaW5nTGlzdCBwYXJhbU5hbWVzOwotICBEZXByZWNhdGVkU3RyaW5nTGlzdCBwYXJh
bVZhbHVlczsKKyAgU3RyaW5nIHVybDsKKyAgU3RyaW5nIHNlcnZpY2VUeXBlOworICBWZWN0b3I8
U3RyaW5nPiBwYXJhbU5hbWVzOworICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKICAgRnJh
bWUgKmZyYW1lID0gbV92aWV3LT5mcmFtZSgpOwogCiAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4
UmVjYWxjKCk7CkBAIC03NDYsMTEgKzc0NiwxMCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVw
ZGF0ZVdpZGdldCgpCiAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkg
ewogICAgICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQgKj4o
IGNoaWxkICk7CiAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hp
bGQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkgeworICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQt
Pmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5kIGludG8gbmVzdGVkIE9CSkVDVCB0
YWdzCi0gICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQtPnRyYXZlcnNlTmV4dE5vZGUobyk7ICAgLy8gT3RoZXJ3aXNlIGRlc2NlbmQg
KEVNQkVEcyBtYXkgYmUgaW5zaWRlIENPTU1FTlQgdGFncykKLSAgICAgICAgICB9CiAgICAgICB9
CiAgICAgICAKICAgICAgIC8vIFVzZSB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBFTUJFRCB0YWcg
aW5zdGVhZCBvZiB0aGUgT0JKRUNUIHRhZyBpbmNsdWRpbmcgV0lEVEggYW5kIEhFSUdIVC4KQEAg
LTc1OCwyNiArNzU3LDIxIEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkK
ICAgICAgIGlmIChlbWJlZCkgewogICAgICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1l
bnQgKillbWJlZDsKICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlID0gZW1iZWRPck9iamVjdC0+
Z2V0QXR0cmlidXRlKHdpZHRoQXR0cik7Ci0gICAgICAgICAgaWYgKCFhdHRyaWJ1dGUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICBvLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBhdHRyaWJ1dGUpOwotICAgICAgICAgIH0KICAg
ICAgICAgICBhdHRyaWJ1dGUgPSBlbWJlZE9yT2JqZWN0LT5nZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0
cik7Ci0gICAgICAgICAgaWYgKCFhdHRyaWJ1dGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgaWYg
KCFhdHRyaWJ1dGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICBvLT5zZXRBdHRyaWJ1dGUoaGVp
Z2h0QXR0ciwgYXR0cmlidXRlKTsKLSAgICAgICAgICB9CiAgICAgICAgICAgdXJsID0gZW1iZWQt
PnVybDsKICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IGVtYmVkLT5zZXJ2aWNlVHlwZTsKLSAgICAg
IH0gZWxzZSB7CisgICAgICB9IGVsc2UKICAgICAgICAgICBlbWJlZE9yT2JqZWN0ID0gKEhUTUxF
bGVtZW50ICopbzsKLSAgICAgIH0KICAgICAgIAogICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIFVS
TCBvciB0eXBlIGRlZmluZWQgaW4gRU1CRUQsIHRyeSB0aGUgT0JKRUNUIHRhZy4KLSAgICAgIGlm
ICh1cmwuaXNFbXB0eSgpKSB7CisgICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgICB1
cmwgPSBvLT51cmw7Ci0gICAgICB9Ci0gICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpKSB7
CisgICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICAgIHNlcnZpY2VUeXBl
ID0gby0+c2VydmljZVR5cGU7Ci0gICAgICB9CiAgICAgICAKICAgICAgIEhhc2hTZXQ8U3RyaW5n
SW1wbCosIENhc2VJbnNlbnNpdGl2ZUhhc2g+IHVuaXF1ZVBhcmFtTmFtZXM7CiAgICAgICAKQEAg
LTc5MCwxOCArNzg0LDE3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkK
ICAgICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVudCAqcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJh
bUVsZW1lbnQgKj4oY2hpbGQpOwogICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHAtPm5hbWUo
KS5sb3dlcigpOwogICAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiAobmFtZSA9PSAi
c3JjIiB8fCBuYW1lID09ICJtb3ZpZSIgfHwgbmFtZSA9PSAiY29kZSIgfHwgbmFtZSA9PSAidXJs
IikpCi0gICAgICAgICAgICAgICAgICB1cmwgPSBwLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmco
KTsKKyAgICAgICAgICAgICAgICAgIHVybCA9IHAtPnZhbHVlKCk7CiAgICAgICAgICAgICAgIGlm
IChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgbmFtZSA9PSAidHlwZSIpIHsKLSAgICAgICAgICAg
ICAgICAgIHNlcnZpY2VUeXBlID0gcC0+dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICBpbnQgcG9zID0gc2VydmljZVR5cGUuZmluZCggIjsiICk7Ci0gICAgICAg
ICAgICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlw
ZSA9IHAtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gc2VydmljZVR5cGUu
ZmluZCgiOyIpOworICAgICAgICAgICAgICAgICAgaWYgKHBvcyAhPSAtMSkKICAgICAgICAgICAg
ICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHNlcnZpY2VUeXBlLmxlZnQocG9zKTsKLSAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIWVtYmVkICYm
ICFuYW1lLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgdW5pcXVlUGFyYW1OYW1lcy5h
ZGQocC0+bmFtZSgpLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVu
ZChwLT5uYW1lKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgIHBhcmFt
VmFsdWVzLmFwcGVuZChwLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgICAg
ICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChwLT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAg
cGFyYW1WYWx1ZXMuYXBwZW5kKHAtPnZhbHVlKCkpOwogICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgfQogICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CkBAIC04MjUsMTUg
KzgxOCwxNSBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICAg
ICAgICAgIEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBpdC0+bmFtZSgpLmxvY2FsTmFt
ZSgpOwogICAgICAgICAgICAgICBpZiAoZW1iZWQgfHwgIXVuaXF1ZVBhcmFtTmFtZXMuY29udGFp
bnMobmFtZS5pbXBsKCkpKSB7Ci0gICAgICAgICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChu
YW1lLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlcy5h
cHBlbmQoaXQtPnZhbHVlKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAg
IHBhcmFtTmFtZXMuYXBwZW5kKG5hbWUuZG9tU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAg
cGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLmRvbVN0cmluZygpKTsKICAgICAgICAgICAg
ICAgfQogICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIAogICAgICAgLy8gSWYgd2Ugc3RpbGwg
ZG9uJ3QgaGF2ZSBhIHR5cGUsIHRyeSB0byBtYXAgZnJvbSBhIHNwZWNpZmljIENMQVNTSUQgdG8g
YSB0eXBlLgogICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSAmJiAhby0+Y2xhc3NJZC5p
c0VtcHR5KCkpCi0gICAgICAgICAgbWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJZC5k
ZXByZWNhdGVkU3RyaW5nKCksIHNlcnZpY2VUeXBlKTsKKyAgICAgICAgICBtYXBDbGFzc0lkVG9T
ZXJ2aWNlVHlwZShvLT5jbGFzc0lkLCBzZXJ2aWNlVHlwZSk7CiAgICAgICAKICAgICAgIC8vIElm
IG5vIFVSTCBhbmQgdHlwZSwgYWJvcnQuCiAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBzZXJ2
aWNlVHlwZS5pc0VtcHR5KCkpCkBAIC04NDgsNyArODQxLDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2Jq
ZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgICAgICAgICAoY2hpbGQtPmlzVGV4dE5vZGUoKSAm
JiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkK
ICAgICAgICAgICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwogICAgICAgfQotICAg
ICAgYm9vbCBzdWNjZXNzID0gZnJhbWUtPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBvLT5uYW1l
KCkuZGVwcmVjYXRlZFN0cmluZygpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1
ZXMpOworICAgICAgYm9vbCBzdWNjZXNzID0gZnJhbWUtPnJlcXVlc3RPYmplY3QodGhpcywgdXJs
LCBBdG9taWNTdHJpbmcoby0+bmFtZSgpKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzKTsKICAgICAgIGlmICghc3VjY2VzcyAmJiBtX2hhc0ZhbGxiYWNrQ29udGVudCkKICAg
ICAgICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKICAgfSBlbHNlIGlmIChlbGVtZW50
KCktPmhhc1RhZ05hbWUoZW1iZWRUYWcpKSB7CkBAIC04NjYsMjEgKzg1OSwyMSBAQCB2b2lkIFJl
bmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICBpZiAoYSkgewogICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgIEF0dHJpYnV0ZSogaXQgPSBhLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAgICBw
YXJhbU5hbWVzLmFwcGVuZChpdC0+bmFtZSgpLmxvY2FsTmFtZSgpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7Ci0gICAgICAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+dmFsdWUoKS5kZXByZWNh
dGVkU3RyaW5nKCkpOworICAgICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChpdC0+bmFtZSgp
LmxvY2FsTmFtZSgpLmRvbVN0cmluZygpKTsKKyAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBw
ZW5kKGl0LT52YWx1ZSgpLmRvbVN0cmluZygpKTsKICAgICAgICAgICB9CiAgICAgICB9Ci0gICAg
ICBmcmFtZS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIG8tPmdldEF0dHJpYnV0ZShuYW1lQXR0
cikuZGVwcmVjYXRlZFN0cmluZygpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1
ZXMpOworICAgICAgZnJhbWUtPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBvLT5nZXRBdHRyaWJ1
dGUobmFtZUF0dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICB9
IGVsc2UgewogICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKTsK
ICAgICAgIEhUTUxJRnJhbWVFbGVtZW50ICpvID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1l
bnQgKj4oZWxlbWVudCgpKTsKLSAgICAgIHVybCA9IG8tPm1fVVJMLmRlcHJlY2F0ZWRTdHJpbmco
KTsKKyAgICAgIHVybCA9IG8tPm1fVVJMOwogICAgICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1l
bnQoKSwgdXJsKSkKICAgICAgICAgICByZXR1cm47CiAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkK
ICAgICAgICAgICB1cmwgPSAiYWJvdXQ6YmxhbmsiOwogICAgICAgRnJhbWVWaWV3ICp2ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3ICo+KG1fdmlldyk7Ci0gICAgICB2LT5mcmFtZSgpLT5yZXF1ZXN0
RnJhbWUodGhpcywgdXJsLCBvLT5tX25hbWUuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgIHYt
PmZyYW1lKCktPnJlcXVlc3RGcmFtZSh0aGlzLCB1cmwsIG8tPm1fbmFtZSk7CiAgIH0KIH0KIApJ
bmRleDogcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
cmVuZGVyX2Zvcm0uY3BwCShyZXZpc2lvbiAxMzQzMSkKKysrIHJlbmRlcmluZy9yZW5kZXJfZm9y
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4OSw5ICs2ODksOCBAQCB2b2lkIFJlbmRlclNlbGVj
dDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxR
Q29tYm9Cb3gqPihtX3dpZGdldCktPmFwcGVuZEl0ZW0oaXRlbVRleHQsIGdyb3VwRW5hYmxlZCAm
JiBvcHRpb25FbGVtZW50LT5pc0VuYWJsZWQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShoclRhZykpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIW1fdXNlTGlzdEJveCkgeworICAgICAgICAgICAgICAgIGlmICgh
bV91c2VMaXN0Qm94KQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxRQ29tYm9Cb3gq
PihtX3dpZGdldCktPmFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBLSFRNTEFzc2VydChm
YWxzZSk7CkluZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY3LDcgKzM2Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc2V0VmlzaXRlZExpbmtDb2xv
cigpCiAKIHZvaWQgRG9jdW1lbnQ6OnJlc2V0QWN0aXZlTGlua0NvbG9yKCkKIHsKLSAgICBtX2Fj
dGl2ZUxpbmtDb2xvci5zZXROYW1lZENvbG9yKERlcHJlY2F0ZWRTdHJpbmcoInJlZCIpKTsKKyAg
ICBtX2FjdGl2ZUxpbmtDb2xvci5zZXROYW1lZENvbG9yKCJyZWQiKTsKIH0KIAogdm9pZCBEb2N1
bWVudDo6c2V0RG9jVHlwZShQYXNzUmVmUHRyPERvY3VtZW50VHlwZT4gZG9jVHlwZSkKQEAgLTcx
NSw4ICs3MTUsNyBAQCBOb2RlOjpOb2RlVHlwZSBEb2N1bWVudDo6bm9kZVR5cGUoKSBjb25zCiBE
ZXByZWNhdGVkU3RyaW5nIERvY3VtZW50OjpuZXh0U3RhdGUoKQogewogICAgRGVwcmVjYXRlZFN0
cmluZyBzdGF0ZTsKLSAgIGlmICghbV9zdGF0ZS5pc0VtcHR5KCkpCi0gICB7CisgICBpZiAoIW1f
c3RhdGUuaXNFbXB0eSgpKSB7CiAgICAgICBzdGF0ZSA9IG1fc3RhdGUuZmlyc3QoKTsKICAgICAg
IG1fc3RhdGUucmVtb3ZlKG1fc3RhdGUuYmVnaW4oKSk7CiAgICB9CkBAIC0xMzI3LDcgKzEzMjYs
NyBAQCB2b2lkIERvY3VtZW50OjpzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluCiAgICAgdXBkYXRl
U3R5bGVTZWxlY3RvcigpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRVc2VyU3R5bGVTaGVldChj
b25zdCBEZXByZWNhdGVkU3RyaW5nJiBzaGVldCkKK3ZvaWQgRG9jdW1lbnQ6OnNldFVzZXJTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgc2hlZXQpCiB7CiAgICAgaWYgKG1fdXNlcnNoZWV0ICE9IHNo
ZWV0KSB7CiAgICAgICAgIG1fdXNlcnNoZWV0ID0gc2hlZXQ7CkBAIC0xNTc4LDkgKzE1NzcsNyBA
QCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2KGNvbnN0IFN0CiAgICAgICAgIG1fc2Vs
ZWN0ZWRTdHlsZXNoZWV0U2V0ID0gY29udGVudDsKICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0ID0gY29udGVudDsKICAgICAgICAgdXBkYXRlU3R5bGVTZWxlY3RvcigpOwotICAgIH0K
LSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgInJlZnJlc2giKSAmJiBmcmFt
ZS0+bWV0YVJlZnJlc2hFbmFibGVkKCkpCi0gICAgeworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZXF1aXYsICJyZWZyZXNoIikpIHsKICAgICAgICAgLy8gZ2V0IGRlbGF5IGFuZCB1
cmwKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHIgPSBjb250ZW50LmRlcHJlY2F0ZWRTdHJp
bmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaW50IHBvcyA9IHN0ci5maW5kKFJlZ3Vs
YXJFeHByZXNzaW9uKCJbOyxdIikpOwpAQCAtMTU5Myw3ICsxNTkwLDggQEAgdm9pZCBEb2N1bWVu
dDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdAogICAgICAgICAgICAgaW50IGRlbGF5ID0gMDsK
ICAgICAgICAgICAgIGRlbGF5ID0gc3RyLnRvSW50KCZvayk7CiAgICAgICAgICAgICAvLyBXZSB3
YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUgcmVmcmVzaCB0aW1lb3V0ID4gMSBzZWNvbmQK
LSAgICAgICAgICAgIGlmKG9rICYmIGZyYW1lKSBmcmFtZS0+c2NoZWR1bGVSZWRpcmVjdGlvbihk
ZWxheSwgZnJhbWUtPnVybCgpLnVybCgpLCBkZWxheSA8PSAxKTsKKyAgICAgICAgICAgIGlmIChv
ayAmJiBmcmFtZSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+c2NoZWR1bGVSZWRpcmVjdGlvbihk
ZWxheSwgZnJhbWUtPnVybCgpLnVybCgpLCBkZWxheSA8PSAxKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGRvdWJsZSBkZWxheSA9IDA7CiAgICAgICAgICAgICBib29sIG9rID0gZmFs
c2U7CkBAIC0xNjEyLDIyICsxNjEwLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1
aXYoY29uc3QgU3QKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRl
bSBpZiB0aGUgcmVmcmVzaCB0aW1lb3V0ID4gMSBzZWNvbmQKICAgICAgICAgICAgICAgICBmcmFt
ZS0+c2NoZWR1bGVSZWRpcmVjdGlvbihkZWxheSwgY29tcGxldGVVUkwoc3RyKSwgZGVsYXkgPD0g
MSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1
aXYsICJleHBpcmVzIikpCi0gICAgeworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZXF1aXYsICJleHBpcmVzIikpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHIgPSBjb250
ZW50LmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgdGltZV90
IGV4cGlyZV9kYXRlID0gc3RyLnRvSW50KCk7CiAgICAgICAgIGlmIChtX2RvY0xvYWRlcikKICAg
ICAgICAgICAgIG1fZG9jTG9hZGVyLT5zZXRFeHBpcmVEYXRlKGV4cGlyZV9kYXRlKTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAicHJhZ21hIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJjYWNoZS1jb250cm9sIikpICYmIGZyYW1lKQotICAgIHsK
KyAgICB9IGVsc2UgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgInByYWdtYSIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY2FjaGUtY29udHJvbCIpKSAmJiBmcmFtZSkgewogICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IGNvbnRlbnQuZGVwcmVjYXRlZFN0cmluZygpLmxv
d2VyKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIEtVUkwgdXJsID0gZnJhbWUtPnVybCgp
OwotICAgIH0KLSAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgInNldC1jb29r
aWUiKSkKLSAgICB7Ci0gICAgICAgIC8vICMjIyBtYWtlIHNldENvb2tpZSB3b3JrIG9uIFhNTCBk
b2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4uLj4KKyAgICB9IGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAic2V0LWNvb2tpZSIpKSB7CisgICAgICAg
IC8vICMjIyBGSVhNRTogbWFrZSBzZXRDb29raWUgd29yayBvbiBYTUwgZG9jdW1lbnRzIHRvbzsg
ZS5nLiBpbiBjYXNlIG9mIDxodG1sOm1ldGEgLi4uLi4+CiAgICAgICAgIGlmIChpc0hUTUxEb2N1
bWVudCgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KHRoaXMpLT5z
ZXRDb29raWUoY29udGVudCk7CiAgICAgfQpAQCAtMTkxMCw3ICsxOTAyLDcgQEAgdm9pZCBEb2N1
bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAKICAgICAvLyBDcmVhdGUgYSBuZXcgc3R5bGUg
c2VsZWN0b3IKICAgICBkZWxldGUgbV9zdHlsZVNlbGVjdG9yOwotICAgIERlcHJlY2F0ZWRTdHJp
bmcgdXNlcnNoZWV0ID0gbV91c2Vyc2hlZXQ7CisgICAgU3RyaW5nIHVzZXJzaGVldCA9IG1fdXNl
cnNoZWV0OwogICAgIGlmIChtX3ZpZXcgJiYgbV92aWV3LT5tZWRpYVR5cGUoKSA9PSAicHJpbnQi
KQogICAgICAgICB1c2Vyc2hlZXQgKz0gbV9wcmludFNoZWV0OwogICAgIG1fc3R5bGVTZWxlY3Rv
ciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJzaGVldCwgbV9zdHlsZVNoZWV0cy5n
ZXQoKSwgIWluQ29tcGF0TW9kZSgpKTsKSW5kZXg6IGRvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzQzMSkKKysrIGRvbS9Eb2N1bWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODAsMTAgKzI4MCwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBmcm9t
IGNhY2hlZE9iamVjdENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNoZWV0U3RyKTsKLSAgICB2b2lkIHNldFVzZXJT
dHlsZVNoZWV0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHNoZWV0KTsKLSAgICBEZXByZWNhdGVk
U3RyaW5nIHVzZXJTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV91c2Vyc2hlZXQ7IH0KLSAg
ICB2b2lkIHNldFByaW50U3R5bGVTaGVldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzaGVldCkg
eyBtX3ByaW50U2hlZXQgPSBzaGVldDsgfQotICAgIERlcHJlY2F0ZWRTdHJpbmcgcHJpbnRTdHls
ZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wcmludFNoZWV0OyB9CisgICAgdm9pZCBzZXRVc2Vy
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KTsKKyAgICBjb25zdCBTdHJpbmcmIHVzZXJT
dHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV91c2Vyc2hlZXQ7IH0KKyAgICB2b2lkIHNldFBy
aW50U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KSB7IG1fcHJpbnRTaGVldCA9IHNoZWV0
OyB9CisgICAgY29uc3QgU3RyaW5nJiBwcmludFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBt
X3ByaW50U2hlZXQ7IH0KIAogICAgIENTU1N0eWxlU2hlZXQqIGVsZW1lbnRTaGVldCgpOwogICAg
IHZpcnR1YWwgVG9rZW5pemVyKiBjcmVhdGVUb2tlbml6ZXIoKTsKQEAgLTU0Nyw4ICs1NDcsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPERPTUltcGxlbWVudGF0aW9uPiBtX2ltcGxlbWVudGF0
aW9uOwogCiAgICAgUmVmUHRyPFN0eWxlU2hlZXQ+IG1fc2hlZXQ7Ci0gICAgRGVwcmVjYXRlZFN0
cmluZyBtX3VzZXJzaGVldDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIG1fcHJpbnRTaGVldDsKKyAg
ICBTdHJpbmcgbV91c2Vyc2hlZXQ7CisgICAgU3RyaW5nIG1fcHJpbnRTaGVldDsKICAgICBEZXBy
ZWNhdGVkU3RyaW5nTGlzdCBtX2F2YWlsYWJsZVNoZWV0czsKIAogICAgIC8vIFRyYWNrIHRoZSBu
dW1iZXIgb2YgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxldmVsIHN0eWxlc2hlZXRzLiAgU2hlZXRz
CkluZGV4OiBXZWJDb3JlK1NWRy9rZG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZStTVkcva2Rv
bS5oCShyZXZpc2lvbiAxMzQzMSkKKysrIFdlYkNvcmUrU1ZHL2tkb20uaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsOSArMjUsNiBAQAogI2RlZmluZSBLRE9NX0gKICNpZiBTVkdfU1VQUE9SVAogCi0j
aW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0KIC8qKgogICogQHNob3J0IEdlbmVyYWwgbmFtZXNwYWNlIHNwZWNpZmljIGRlZmluaXRpb25z
LgogICovCkluZGV4OiBlZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvbWFy
a3VwLmgJKHJldmlzaW9uIDEzNDMxKQorKysgZWRpdGluZy9tYXJrdXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIEVDaGlsZHJlbk9u
bHkgeyBJbmNsdWRlTm9kZSwgQ2hpbGRyZW5Pbmx5IH07CiAKIFBhc3NSZWZQdHI8V2ViQ29yZTo6
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChXZWJDb3JlOjpEb2N1bWVu
dCAqZG9jdW1lbnQsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnRleHQpOwotUGFzc1JlZlB0cjxX
ZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoV2ViQ29y
ZTo6RG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZtYXJrdXAsIGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJmJhc2VVUkwpOworUGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoV2ViQ29yZTo6RG9jdW1lbnQg
KmRvY3VtZW50LCBjb25zdCBTdHJpbmcgJm1hcmt1cCwgY29uc3QgU3RyaW5nICZiYXNlVVJMKTsK
IFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
Tm9kZUxpc3QoV2ViQ29yZTo6RG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBEZXByZWNhdGVkUHRy
TGlzdDxXZWJDb3JlOjpOb2RlPiAmbm9kZUxpc3QpOwogCiBEZXByZWNhdGVkU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBXZWJDb3JlOjpSYW5nZSAqcmFuZ2UsCkluZGV4OiBlZGl0aW5nL21hcmt1
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxMzQzMSkK
KysrIGVkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDEyICszMzMsMTAg
QEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgIGRvYy0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBOb2RlICpjb21tb25B
bmNlc3RvckJsb2NrID0gMDsKLSAgICBpZiAoY29tbW9uQW5jZXN0b3IgIT0gMCkgeworICAgIGlm
IChjb21tb25BbmNlc3RvcikKICAgICAgICAgY29tbW9uQW5jZXN0b3JCbG9jayA9IGNvbW1vbkFu
Y2VzdG9yLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Ci0gICAgfQotICAgIGlmIChjb21t
b25BbmNlc3RvckJsb2NrID09IDApIHsKLSAgICAgICAgcmV0dXJuICIiOyAgICAKLSAgICB9Cisg
ICAgaWYgKCFjb21tb25BbmNlc3RvckJsb2NrKQorICAgICAgICByZXR1cm4gIiI7CiAKICAgICBE
ZXByZWNhdGVkU3RyaW5nTGlzdCBtYXJrdXBzOwogICAgIE5vZGUgKnBhc3RFbmQgPSByYW5nZS0+
cGFzdEVuZE5vZGUoKTsKQEAgLTM2NSwxNyArMzYzLDE1IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICBmb3IgKE5vZGUgKm4gPSBzdGFydE5vZGU7IG4gIT0g
cGFzdEVuZDsgbiA9IG5leHQpIHsKICAgICAgICAgbmV4dCA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
KTsKIAotICAgICAgICBpZiAobi0+aXNCbG9ja0Zsb3coKSAmJiBuZXh0ID09IHBhc3RFbmQpIHsK
KyAgICAgICAgaWYgKG4tPmlzQmxvY2tGbG93KCkgJiYgbmV4dCA9PSBwYXN0RW5kKQogICAgICAg
ICAgICAgLy8gRG9uJ3Qgd3JpdGUgb3V0IGFuIGVtcHR5IGJsb2NrLgogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0
aGUgbWFya3VwLgogICAgICAgICBpZiAobi0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgbWFy
a3Vwcy5hcHBlbmQoc3RhcnRNYXJrdXAobiwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUu
Z2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChub2RlcykgeworICAgICAgICAgICAgaWYgKG5vZGVz
KQogICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQobik7Ci0gICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChuLT5maXJzdENoaWxkKCkgPT0gMCkgewpAQCAt
MzkwLDkgKzM4Niw4IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcK
ICAgICAgICAgICAgICAgICBpZiAoIWFuY2VzdG9yc1RvQ2xvc2UuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIENsb3NlIHVwIHRoZSBhbmNlc3RvcnMuCiAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChOb2RlICphbmNlc3RvciA9IGFuY2VzdG9yc1RvQ2xvc2UubGFzdCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPSBwYXN0RW5kICYmIGFuY2VzdG9y
ID09IG5leHQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5l
eHQgIT0gcGFzdEVuZCAmJiBhbmNlc3RvciA9PSBuZXh0LT5wYXJlbnROb2RlKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYXQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UsIGNs
b3NlIGFuY2VzdG9ycyB1cCB0byBzaWJsaW5nIG9mIG5leHQgbm9kZS4KICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3RvcikpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IGFuY2VzdG9yOwpAQCAtNDA2LDkgKzQwMSw4IEBA
IERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKE5vZGUgKnBhcmVudCA9IG4tPnBhcmVudCgpOyBwYXJlbnQgIT0g
MCAmJiBwYXJlbnQgIT0gbmV4dFBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0
TWFya3VwKHBhcmVudCwgcmFuZ2UsIGFubm90YXRlLCBkZWZhdWx0U3R5bGUuZ2V0KCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZW5kTWFya3VwKHBh
cmVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChwYXJlbnQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gcGFyZW50OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ3OCw3
ICs0NzIsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAg
cmV0dXJuIG1hcmt1cHMuam9pbigiIik7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRGVw
cmVjYXRlZFN0cmluZyYgbWFya3VwLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBiYXNlVVJMKQor
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNl
VVJMKQogewogICAgIEFTU0VSVChkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCktPmlzSFRNTEVs
ZW1lbnQoKSk7CiAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGRvY3VtZW50IGVsZW1lbnQgaXMg
bm90IGFuIEhUTUwgZWxlbWVudD8KQEAgLTQ4OCw3ICs0ODIsNyBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgQVNTRVJUKGZyYWdtZW50KTsKIAogICAgIGlm
ICghYmFzZVVSTC5pc0VtcHR5KCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC0+YmFzZVVSTCgpKQot
ICAgICAgICBjb21wbGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCksIGJhc2VVUkwpOworICAgICAgICBj
b21wbGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCksIGJhc2VVUkwuZGVwcmVjYXRlZFN0cmluZygpKTsK
IAogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiB9CkBAIC01NTMsNyArNTQ3LDcgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIHN0cmluZyA9IHRleHQ7CiAKICAgICAgICAgLy8gQnJlYWsgc3RyaW5nIGludG8g
cGFyYWdyYXBocy4gRXh0cmEgbGluZSBicmVha3MgdHVybiBpbnRvIGVtcHR5IHBhcmFncmFwaHMu
Ci0gICAgICAgIHN0cmluZy5yZXBsYWNlKERlcHJlY2F0ZWRTdHJpbmcoIlxyXG4iKSwgIlxuIik7
CisgICAgICAgIHN0cmluZy5yZXBsYWNlKCJcclxuIiwgIlxuIik7CiAgICAgICAgIHN0cmluZy5y
ZXBsYWNlKCdccicsICdcbicpOwogICAgICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBsaXN0ID0g
RGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCdcbicsIHN0cmluZywgdHJ1ZSk7IC8vIHRydWUg
Z2V0cyB1cyBlbXB0eSBzdHJpbmdzIGluIHRoZSBsaXN0CiAgICAgICAgIHdoaWxlICghbGlzdC5p
c0VtcHR5KCkpIHsKSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNDMxKQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIw
IEBACisyMDA2LTAzLTIyICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgbW9yZSB1
c2VzIG9mIERlcHJlY2F0ZWRTdHJpbmcgd2l0aCBTdHJpbmcuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9vYmpjL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxEb2N1bWVudCBfY3JlYXRlRG9j
dW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6YmFzZVVSTFN0cmluZzpdKToKKyAgICAgICAg
KiBicmlkZ2UvQnJvd3NlckV4dGVuc2lvbi5oOgorICAgICAgICAqIGJyaWRnZS9tYWMvQnJvd3Nl
ckV4dGVuc2lvbk1hYy5oOgorICAgICAgICAqIGJyaWRnZS9tYWMvQnJvd3NlckV4dGVuc2lvbk1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJyb3dzZXJFeHRlbnNpb25NYWM6OnNldFR5cGVkSWNv
blVSTCk6CisgICAgICAgICogYnJpZGdlL21hYy9GcmFtZU1hYy5oOgorICAgICAgICAqIGJyaWRn
ZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6c2VhcmNoRm9y
TGFiZWxzQmVmb3JlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuc0FycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTWFjOjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVNYWM6OmJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTWFj
Ojp3aW5kb3dTY3JpcHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OndpbmRv
d1NjcmlwdE5QT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTWFjOjpwYXJ0Q2xlYXJl
ZEluQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6Om9wZW5VUkxGcm9tUGFnZUNh
Y2hlKToKKyAgICAgICAgKiBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAg
ICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIG9wZW5VUkw6cmVsb2FkOmNvbnRlbnRUeXBlOnJlZnJl
c2g6bGFzdE1vZGlmaWVkOnBhZ2VDYWNoZTpdKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJp
ZGdlIHNjcm9sbFRvQW5jaG9yOl0pOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgVVJM
V2l0aEF0dHJpYnV0ZVN0cmluZzpdKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGhp
Z2hsaWdodEFsbE1hdGNoZXNGb3JTdHJpbmc6Y2FzZVNlbnNpdGl2ZTpdKToKKyAgICAgICAgKiBi
cmlkZ2UvbWFjL1dlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbToKKyAgICAgICAgKC1bV2ViQ29yZVNj
cmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKiBicmlkZ2UvbWFj
L1dlYkNvcmVTZXR0aW5ncy5tbToKKyAgICAgICAgKC1bV2ViQ29yZVNldHRpbmdzIHNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb246XSk6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NHcmFtbWFyLnk6Cisg
ICAgICAgICogY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUxpc3Q6OnNldE1lZGlhVGV4dCk6CisgICAgICAgICogY3NzL2Nzc192YWx1ZWltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cXVvdGVTdHJpbmdJZk5lZWRlZCk6CisgICAgICAgICogY3Nz
L2Nzc3BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3Ip
OgorICAgICAgICAqIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAqIGNzcy9jc3Nz
dHlsZXNlbGVjdG9yLmg6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZXNldEFjdGl2ZUxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6bmV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRV
c2VyU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBF
cXVpdik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3Rvcik6
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFByaW50U3R5
bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJpbnRTdHlsZVNoZWV0KToK
KyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9t
VGV4dCk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuaDoKKyAgICAgICAgKiBodG1sL0hUTUxU
b2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6c2NyaXB0SGFu
ZGxlcik6CisgICAgICAgICogaHRtbC9odG1sX2Jhc2VpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGcmFtZUVsZW1lbnQ6Om9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZy
YW1lRWxlbWVudDo6YXR0YWNoKToKKyAgICAgICAgKiBodG1sL2h0bWxfaGVhZGltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAgKiBo
dG1sL2h0bWxfb2JqZWN0aW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXBwbGV0RWxl
bWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0
LmNwcDoKKyAgICAgICAgKFNWR1N0cmluZ0xpc3Q6OnJlc2V0KToKKyAgICAgICAgKiBrd3EvS1dR
S0hUTUxTZXR0aW5ncy5oOgorICAgICAgICAoS0hUTUxTZXR0aW5nczo6dXNlclN0eWxlU2hlZXRM
b2NhdGlvbik6CisgICAgICAgIChLSFRNTFNldHRpbmdzOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpyZWYpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlclN0eWxlU2hlZXRMb2FkZXI6OnNldFN0eWxl
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpZE9wZW5VUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWU6OmpTY3JpcHRFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpqU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpqYXZhRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6cGx1Z2luc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OnJlY2VpdmVkRmlyc3REYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpiZWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0VXNlclN0eWxlU2hlZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OmxvYWRQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlZmVycmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OnJlcGFyc2VDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpo
YW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnVuYXBwbGllZEVk
aXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlYXBwbGllZEVkaXRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3VtZVRpbWVvdXRzKToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmg6CisgICAgICAgICogcGFnZS9GcmFtZVByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lUHJpdmF0ZTo6RnJhbWVQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9BdG9taWNT
dHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKERlcHJl
Y2F0ZWRTdHJpbmc6OnJlcGxhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL0tVUkwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmlu
Zy5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nOjpyZXBsYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdHJpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3IrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdHJpbmdJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpyZXBs
YWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdHJpbmdJbXBsLmg6CisgICAgICAgICogcmVuZGVy
aW5nL3JlbmRlcl9mcmFtZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNVUkxBbGxvd2VkKToK
KyAgICAgICAgKFdlYkNvcmU6Om1hcENsYXNzSWRUb1NlcnZpY2VUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCk6CisKIDIwMDYtMDMtMjEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gZml4IGJ1aWxkYm90IChh
bmQgZXZlcnlvbmUgZWxzZSkKSW5kZXg6IGNzcy9jc3NwYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNzcy9jc3NwYXJzZXIuY3BwCShyZXZpc2lvbiAxMzQzMSkKKysrIGNzcy9jc3NwYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDg0LDEwICsyMDg0LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQ29sb3IoY29uc3QgRGVwcmVjYQogewogICAgIGludCBsZW4gPSBuYW1lLmxlbmd0aCgpOwog
Ci0gICAgaWYgKCAhbGVuICkKKyAgICBpZiAoIWxlbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0KICAgICBib29sIG9rOwogCiAgICAgaWYgKCBsZW4gPT0gMyB8fCBsZW4gPT0gNiApIHsKSW5k
ZXg6IGNzcy9jc3NfdmFsdWVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzX3ZhbHVlaW1w
bC5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgY3NzL2Nzc192YWx1ZWltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBTdHJpbmcgcXVvdGVTdHJpbmdJZk5lZWRl
ZChjb25zdCAKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIAogICAgIC8vIEZJWE1FOiBBbHNvIG5l
ZWQgdG8gdHJhbnNmb3JtIGNvbnRyb2wgY2hhcmFjdGVycyBpbnRvIFwgc2VxdWVuY2VzLgotICAg
IERlcHJlY2F0ZWRTdHJpbmcgcyA9IHN0cmluZy5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3Ry
aW5nIHMgPSBzdHJpbmc7CiAgICAgcy5yZXBsYWNlKCdcXCcsICJcXFxcIik7CiAgICAgcy5yZXBs
YWNlKCdcJycsICJcXCciKTsKICAgICByZXR1cm4gJ1wnJyArIHMgKyAnXCcnOwpJbmRleDogY3Nz
L2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NzdHlsZXNlbGVjdG9y
LmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBDU1NTdHlsZVNoZWV0ICpDU1NTdHlsZVNlbGVj
dG9yOjpzdmdTaGVlCiBzdGF0aWMgQ1NTU3R5bGVTZWxlY3Rvcjo6RW5jb2RlZHVybCAqY3VycmVu
dEVuY29kZWRVUkwgPSAwOwogc3RhdGljIFBzZXVkb1N0YXRlIHBzZXVkb1N0YXRlOwogCi1DU1NT
dHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2MsIERlcHJlY2F0ZWRT
dHJpbmcgdXNlclN0eWxlU2hlZXQsIFN0eWxlU2hlZXRMaXN0ICpzdHlsZVNoZWV0cywgYm9vbCBf
c3RyaWN0UGFyc2luZykKK0NTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1l
bnQqIGRvYywgY29uc3QgU3RyaW5nJiB1c2VyU3R5bGVTaGVldCwgU3R5bGVTaGVldExpc3QgKnN0
eWxlU2hlZXRzLCBib29sIF9zdHJpY3RQYXJzaW5nKQogewogICAgIGluaXQoKTsKIApAQCAtMjE0
LDcgKzIxNCw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0KICAg
ICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkg
dGltZSEKICAgICBpZiAoIXVzZXJTdHlsZVNoZWV0LmlzRW1wdHkoKSkgewogICAgICAgICBtX3Vz
ZXJTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KGRvYyk7Ci0gICAgICAgIG1fdXNlclNoZWV0LT5w
YXJzZVN0cmluZyhTdHJpbmcodXNlclN0eWxlU2hlZXQpLCBzdHJpY3RQYXJzaW5nKTsKKyAgICAg
ICAgbV91c2VyU2hlZXQtPnBhcnNlU3RyaW5nKHVzZXJTdHlsZVNoZWV0LCBzdHJpY3RQYXJzaW5n
KTsKIAogICAgICAgICBtX3VzZXJTdHlsZSA9IG5ldyBDU1NSdWxlU2V0KCk7CiAgICAgICAgIG1f
dXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtX3VzZXJTaGVldCwgbV9tZWRpYVR5cGUpOwpJ
bmRleDogY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3Nzc3R5bGVz
ZWxlY3Rvci5oCShyZXZpc2lvbiAxMzQzMSkKKysrIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDkgKzc4LDcgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICAgICAg
ICAgICogZ29lcyB0aHJvdWdoIGFsbCBTdHlsZVNoZWV0cyBkZWZpbmVkIGluIHRoZSBkb2N1bWVu
dCBhbmQKICAgICAgICAgICogY3JlYXRlcyBhIGxpc3Qgb2YgcnVsZXMgaXQgbmVlZHMgdG8gYXBw
bHkgdG8gb2JqZWN0cwogICAgICAgICAgKi8KLSAgICAgICAgQ1NTU3R5bGVTZWxlY3RvcihEb2N1
bWVudCogZG9jLCBEZXByZWNhdGVkU3RyaW5nIHVzZXJTdHlsZVNoZWV0LCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHlsZVNoZWV0TGlzdCAqc3R5bGVTaGVldHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBfc3RyaWN0UGFyc2luZyk7CisgICAgICAgIENTU1N0eWxlU2VsZWN0
b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0LCBTdHlsZVNoZWV0TGlz
dCAqc3R5bGVTaGVldHMsIGJvb2wgc3RyaWN0UGFyc2luZyk7CiAgICAgICAgIC8qKgogICAgICAg
ICAgKiBzYW1lIGFzIGFib3ZlIGJ1dCBmb3IgYSBzaW5nbGUgc3R5bGVzaGVldC4KICAgICAgICAg
ICovCkluZGV4OiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTM0MzEp
CisrKyBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTU0LDcgKzk1NCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVE
ZWMKICAgICAgICAgcmV0dXJuIHZhbHVlRm9yVGV4dEFsaWduKHN0eWxlLT50ZXh0QWxpZ24oKSk7
CiAgICAgY2FzZSBDU1NfUFJPUF9URVhUX0RFQ09SQVRJT046CiAgICAgewotICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHN0cmluZzsKKyAgICAgICAgU3RyaW5nIHN0cmluZzsKICAgICAgICAgaWYg
KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpICYgVU5ERVJMSU5FKQogICAgICAgICAgICAgc3RyaW5n
ICs9ICJ1bmRlcmxpbmUiOwogICAgICAgICBpZiAoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkgJiBP
VkVSTElORSkgewpAQCAtOTc4LDcgKzk3OCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0Nv
bXB1dGVkU3R5bGVEZWMKICAgICB9CiAgICAgY2FzZSBDU1NfUFJPUF9fS0hUTUxfVEVYVF9ERUNP
UkFUSU9OU19JTl9FRkZFQ1Q6CiAgICAgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmlu
ZzsKKyAgICAgICAgU3RyaW5nIHN0cmluZzsKICAgICAgICAgaWYgKHN0eWxlLT50ZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCgpICYgVU5ERVJMSU5FKQogICAgICAgICAgICAgc3RyaW5nICs9ICJ1bmRl
cmxpbmUiOwogICAgICAgICBpZiAoc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBP
VkVSTElORSkgewpJbmRleDogY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgY3NzL2Nz
c19zdHlsZXNoZWV0aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiwxMiArMzM2LDExIEBA
IFdlYkNvcmU6OlN0cmluZyBNZWRpYUxpc3Q6Om1lZGlhVGV4dCgpIGMKIHZvaWQgTWVkaWFMaXN0
OjpzZXRNZWRpYVRleHQoY29uc3QgV2ViQ29yZTo6U3RyaW5nICZ2YWx1ZSkKIHsKICAgICBtX2xz
dE1lZGlhLmNsZWFyKCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbGlzdCA9IERlcHJlY2F0
ZWRTdHJpbmdMaXN0OjpzcGxpdCggJywnLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkgKTsKLSAg
ICBmb3IgKCBEZXByZWNhdGVkU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7
IGl0ICE9IGxpc3QuZW5kKCk7ICsraXQgKQotICAgIHsKKyAgICBEZXByZWNhdGVkU3RyaW5nTGlz
dCBsaXN0ID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcsJywgdmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpKTsKKyAgICBmb3IgKERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpJdGVyYXRvciBpdCA9
IGxpc3QuYmVnaW4oKTsgaXQgIT0gbGlzdC5lbmQoKTsgKytpdCkgewogICAgICAgICBTdHJpbmcg
bWVkaXVtID0gKCppdCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmICghbWVkaXVtLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1fbHN0TWVkaWEuYXBwZW5kKCBtZWRpdW0gKTsKKyAgICAg
ICAgICAgIG1fbHN0TWVkaWEuYXBwZW5kKG1lZGl1bSk7CiAgICAgfQogfQogCkluZGV4OiBjc3Mv
Q1NTR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NHcmFtbWFyLnkJKHJldmlzaW9uIDEz
NDMxKQorKysgY3NzL0NTU0dyYW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtODI4LDcgKzgyOCw3
IEBAIGRlY2xhcmF0aW9uOgogcHJvcGVydHk6CiAgICAgSURFTlQgbWF5YmVfc3BhY2UgewogICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IHFTdHJpbmcoJDEpOwotICAgICAgICAkJCA9IGdl
dFByb3BlcnR5SUQoIHN0ci5sb3dlcigpLmxhdGluMSgpLCBzdHIubGVuZ3RoKCkgKTsKKyAgICAg
ICAgJCQgPSBnZXRQcm9wZXJ0eUlEKHN0ci5sb3dlcigpLmxhdGluMSgpLCBzdHIubGVuZ3RoKCkp
OwogI2lmIFNWR19TVVBQT1JUCiAgICAgICBpZiAoJCQgPT0gMCkKICAgICAgICAgICAkJCA9IFNW
Rzo6Z2V0U1ZHQ1NTUHJvcGVydHlJRChzdHIubG93ZXIoKS5sYXRpbjEoKSwgc3RyLmxlbmd0aCgp
KTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysga3N2ZzIvc3ZnL1NW
R1N0cmluZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsMTEgQEAgU1ZHU3Ry
aW5nTGlzdDo6flNWR1N0cmluZ0xpc3QoKQogdm9pZCBTVkdTdHJpbmdMaXN0OjpyZXNldChjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZzdHIpCiB7CiAgICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbGlz
dCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHN0cik7Ci0gICAgaWYobGlzdC5j
b3VudCgpID09IDApCi0gICAgeworICAgIGlmIChsaXN0LmNvdW50KCkgPT0gMCkgewogICAgICAg
ICBTdHJpbmdJbXBsICppdGVtID0gbmV3IFN0cmluZ0ltcGwoc3RyKTsKICAgICAgICAgaXRlbS0+
cmVmKCk7CiAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7Ci0gICAgfQotICAgIGVsc2UgZm9yKERl
cHJlY2F0ZWRTdHJpbmdMaXN0OjpJdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gbGlz
dC5lbmQoKTsgKytpdCkKLSAgICB7CisgICAgfSBlbHNlIGZvcihEZXByZWNhdGVkU3RyaW5nTGlz
dDo6SXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgU3RyaW5nSW1wbCAqaXRlbSA9IG5ldyBTdHJpbmdJbXBsKCgqaXQpKTsKICAgICAg
ICAgaXRlbS0+cmVmKCk7CiAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7CkluZGV4OiBicmlkZ2Uv
bWFjL1dlYkNvcmVTZXR0aW5ncy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL1dlYkNvcmVT
ZXR0aW5ncy5tbQkocmV2aXNpb24gMTM0MzEpCisrKyBicmlkZ2UvbWFjL1dlYkNvcmVTZXR0aW5n
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg1LDcgKzI4NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogICAgICAgICByZXR1cm47CiAgICAgW3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gcmVs
ZWFzZV07CiAgICAgdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IFtzIGNvcHldOwotICAgIHNldHRp
bmdzLT5zZXRVc2VyU3R5bGVTaGVldChEZXByZWNhdGVkU3RyaW5nOjpmcm9tTlNTdHJpbmcocykp
OworICAgIHNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21OU1N0cmluZyhzKSk7CiAgICAgW3NlbGYgX3VwZGF0ZUFsbFZpZXdzXTsKIH0KIApJ
bmRleDogYnJpZGdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL0Zy
YW1lTWFjLm1tCShyZXZpc2lvbiAxMzQzMSkKKysrIGJyaWRnZS9tYWMvRnJhbWVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMzMSwxNCArMzMxLDEyIEBAIE5TU3RyaW5nICpGcmFtZU1hYzo6c2Vh
cmNoRm9yTGFiZWxzQmVmb3IKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgc2VhcmNoZWRDZWxsQWJvdmUgPSB0cnVlOwotICAgICAgICB9
IGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVy
KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICB7CisgICAgICAg
IH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgICAgIC8v
IEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhwCiAgICAgICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCk7
CiAgICAgICAgICAgICAvLyBhZGQgMTAwIGZvciBzbG9wLCB0byBtYWtlIGl0IG1vcmUgbGlrZWx5
IHRoYXQgd2UnbGwgc2VhcmNoIHdob2xlIG5vZGVzCi0gICAgICAgICAgICBpZiAobGVuZ3RoU2Vh
cmNoZWQgKyBub2RlU3RyaW5nLmxlbmd0aCgpID4gbWF4Q2hhcnNTZWFyY2hlZCkgeworICAgICAg
ICAgICAgaWYgKGxlbmd0aFNlYXJjaGVkICsgbm9kZVN0cmluZy5sZW5ndGgoKSA+IG1heENoYXJz
U2VhcmNoZWQpCiAgICAgICAgICAgICAgICAgbm9kZVN0cmluZyA9IG5vZGVTdHJpbmcucmlnaHQo
Y2hhcnNTZWFyY2hlZFRocmVzaG9sZCAtIGxlbmd0aFNlYXJjaGVkKTsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGludCBwb3MgPSByZWdFeHAtPnNlYXJjaFJldihub2RlU3RyaW5nKTsKICAg
ICAgICAgICAgIGlmIChwb3MgPj0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZVN0cmlu
Zy5taWQocG9zLCByZWdFeHAtPm1hdGNoZWRMZW5ndGgoKSkuZ2V0TlNTdHJpbmcoKTsKQEAgLTUy
NSwxNCArNTIzLDIyIEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTWFjOjpvYmplY3RDb250ZW4K
ICAgICByZXR1cm4gKE9iamVjdENvbnRlbnRUeXBlKVtfYnJpZGdlIGRldGVybWluZU9iamVjdEZy
b21NSU1FVHlwZTptaW1lVHlwZSBVUkw6dXJsLmdldE5TVVJMKCldOwogfQogCitzdGF0aWMgTlNB
cnJheSogbnNBcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQoreworICAgIHVuc2ln
bmVkIGxlbiA9IHZlY3Rvci5zaXplKCk7CisgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Omxlbl07CisgICAgZm9yICh1bnNpZ25lZCB4
ID0gMDsgeCA8IGxlbjsgeCsrKQorICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnZlY3Rvclt4XV07
CisgICAgcmV0dXJuIGFycmF5OworfQogCi1QbHVnaW4qIEZyYW1lTWFjOjpjcmVhdGVQbHVnaW4o
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nTGlzdCYgcGFyYW1OYW1lcywg
Y29uc3QgRGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQorUGx1Z2luKiBGcmFtZU1hYzo6Y3JlYXRlUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKICAgICByZXR1cm4gbmV3IFBsdWdpbihuZXcgV2lkZ2V0KFtfYnJp
ZGdlIHZpZXdGb3JQbHVnaW5XaXRoVVJMOnVybC5nZXROU1VSTCgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6cGFyYW1OYW1lcy5nZXROU0FycmF5KCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6cGFyYW1W
YWx1ZXMuZ2V0TlNBcnJheSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlTmFtZXM6bnNBcnJheShwYXJhbU5hbWVzKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpuc0FycmF5KHBhcmFtVmFsdWVzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOm1pbWVUeXBlXSkpOwogCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTEwNDEsNyArMTA0Nyw3IEBAIEtKUzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QgKkZyYW1lTWFjOjpleGUKIAogS0pTOjpCaW5kaW5nczo6Um9vdE9iamVj
dCAqRnJhbWVNYWM6OmJpbmRpbmdSb290T2JqZWN0KCkKIHsKLSAgICBhc3NlcnQoZC0+bV9iSlNj
cmlwdEVuYWJsZWQpOworICAgIGFzc2VydChqU2NyaXB0RW5hYmxlZCgpKTsKICAgICBpZiAoIV9i
aW5kaW5nUm9vdCkgewogICAgICAgICBKU0xvY2sgbG9jazsKICAgICAgICAgX2JpbmRpbmdSb290
ID0gbmV3IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QoMCk7ICAgIC8vIFRoZSByb290IGdldHMg
ZGVsZXRlZCBieSBKYXZhU2NyaXB0Q29yZS4KQEAgLTEwNTUsNyArMTA2MSw3IEBAIEtKUzo6Qmlu
ZGluZ3M6OlJvb3RPYmplY3QgKkZyYW1lTWFjOjpiaW4KIAogV2ViU2NyaXB0T2JqZWN0ICpGcmFt
ZU1hYzo6d2luZG93U2NyaXB0T2JqZWN0KCkKIHsKLSAgICBpZiAoIWQtPm1fYkpTY3JpcHRFbmFi
bGVkKQorICAgIGlmICghalNjcmlwdEVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBpZiAoIV93aW5kb3dTY3JpcHRPYmplY3QpIHsKQEAgLTEwNzAsNyArMTA3Niw3IEBAIFdlYlNj
cmlwdE9iamVjdCAqRnJhbWVNYWM6OndpbmRvd1NjcmlwdE8KIE5QT2JqZWN0ICpGcmFtZU1hYzo6
d2luZG93U2NyaXB0TlBPYmplY3QoKQogewogICAgIGlmICghX3dpbmRvd1NjcmlwdE5QT2JqZWN0
KSB7Ci0gICAgICAgIGlmIChkLT5tX2JKU2NyaXB0RW5hYmxlZCkgeworICAgICAgICBpZiAoalNj
cmlwdEVuYWJsZWQoKSkgewogICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBz
byB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4gIFJldHVybiBhbiBOUE9iamVj
dCBib3VuZCB0byB0aGUgd2luZG93CiAgICAgICAgICAgICAvLyBvYmplY3QuCiAgICAgICAgICAg
ICBLSlM6OkpTT2JqZWN0ICp3aW4gPSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3codGhpcyk7
CkBAIC0xMDg4LDcgKzEwOTQsNyBAQCBOUE9iamVjdCAqRnJhbWVNYWM6OndpbmRvd1NjcmlwdE5Q
T2JqZWN0CiAKIHZvaWQgRnJhbWVNYWM6OnBhcnRDbGVhcmVkSW5CZWdpbigpCiB7Ci0gICAgaWYg
KGQtPm1fYkpTY3JpcHRFbmFibGVkKQorICAgIGlmIChqU2NyaXB0RW5hYmxlZCgpKQogICAgICAg
ICBbX2JyaWRnZSB3aW5kb3dPYmplY3RDbGVhcmVkXTsKIH0KIApAQCAtMTExNyw3ICsxMTIzLDcg
QEAgdm9pZCBGcmFtZU1hYzo6b3BlblVSTEZyb21QYWdlQ2FjaGUoS1dRUAogICAgIGQtPm1fYkxv
YWRFdmVudEVtaXR0ZWQgPSB0cnVlOwogICAgIAogICAgIC8vIGRlbGV0ZSBvbGQgc3RhdHVzIGJh
ciBtc2cncyBmcm9tIGtqcyAoaWYgaXQgX3dhc18gYWN0aXZhdGVkIG9uIGxhc3QgVVJMKQotICAg
IGlmIChkLT5tX2JKU2NyaXB0RW5hYmxlZCkgeworICAgIGlmIChqU2NyaXB0RW5hYmxlZCgpKSB7
CiAgICAgICAgIGQtPm1fa2pzU3RhdHVzQmFyVGV4dCA9IFN0cmluZygpOwogICAgICAgICBkLT5t
X2tqc0RlZmF1bHRTdGF0dXNCYXJUZXh0ID0gU3RyaW5nKCk7CiAgICAgfQpJbmRleDogYnJpZGdl
L21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdlL21hYy9XZWJD
b3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDEzNDMxKQorKysgYnJpZGdlL21hYy9XZWJDb3Jl
RnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzMSwxOCArNTMxLDE4IEBAIHN0YXRp
YyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UKICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdChtX2ZyYW1lLT5yZXNvdXJjZVJlcXVlc3QoKSk7CiAgICAgcmVxdWVzdC5yZWxvYWQg
PSByZWxvYWQ7CiAgICAgaWYgKGNvbnRlbnRUeXBlKQotICAgICAgICByZXF1ZXN0Lm1fcmVzcG9u
c2VNSU1FVHlwZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0cmluZyhjb250ZW50VHlwZSk7
CisgICAgICAgIHJlcXVlc3QubV9yZXNwb25zZU1JTUVUeXBlID0gY29udGVudFR5cGU7CiAgICAg
bV9mcmFtZS0+c2V0UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpOwogCiAgICAgLy8gb3BlbmluZyB0
aGUgVVJMCiAgICAgaWYgKG1fZnJhbWUtPmRpZE9wZW5VUkwoVVJMKSkgewogICAgICAgICAvLyB0
aGluZ3Mgd2UgaGF2ZSB0byBzZXQgdXAgYWZ0ZXIgY2FsbGluZyBkaWRPcGVuVVJMCiAgICAgICAg
IGlmIChyZWZyZXNoKSB7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5hZGRNZXRhRGF0YSgiaHR0cC1y
ZWZyZXNoIiwgRGVwcmVjYXRlZFN0cmluZzo6ZnJvbU5TU3RyaW5nKHJlZnJlc2gpKTsKKyAgICAg
ICAgICAgIG1fZnJhbWUtPmFkZE1ldGFEYXRhKCJodHRwLXJlZnJlc2giLCByZWZyZXNoKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAobGFzdE1vZGlmaWVkKSB7CiAgICAgICAgICAgICBOU1N0cmlu
ZyAqbW9kaWZpZWRTdHJpbmcgPSBbbGFzdE1vZGlmaWVkIGRlc2NyaXB0aW9uV2l0aENhbGVuZGFy
Rm9ybWF0OkAiJWEgJWIgJWQgJVkgJUg6JU06JVMiIHRpbWVab25lOm5pbCBsb2NhbGU6bmlsXTsK
LSAgICAgICAgICAgIG1fZnJhbWUtPmFkZE1ldGFEYXRhKCJtb2RpZmllZCIsIERlcHJlY2F0ZWRT
dHJpbmc6OmZyb21OU1N0cmluZyhtb2RpZmllZFN0cmluZykpOworICAgICAgICAgICAgbV9mcmFt
ZS0+YWRkTWV0YURhdGEoIm1vZGlmaWVkIiwgbW9kaWZpZWRTdHJpbmcpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtNzM3LDkgKzczNyw5IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJp
ZGdlICpicmlkZ2UKICAgICAgICAgZnJhbWVWaWV3LT5zZXRNYXJnaW5IZWlnaHQobWgpOwogfQog
Ci0tICh2b2lkKXNjcm9sbFRvQW5jaG9yOihOU1N0cmluZyAqKWEKKy0gKHZvaWQpc2Nyb2xsVG9B
bmNob3I6KE5TU3RyaW5nICopYW5jaG9yCiB7Ci0gICAgbV9mcmFtZS0+Z290b0FuY2hvcihEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tTlNTdHJpbmcoYSkpOworICAgIG1fZnJhbWUtPmdvdG9BbmNob3Io
YW5jaG9yKTsKIH0KIAogLSAoQk9PTClpc1NlbGVjdGlvbkVkaXRhYmxlCkBAIC0xMjAwLDExICsx
MjAwLDEwIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJvbUQKIC0gKE5T
VVJMICopVVJMV2l0aEF0dHJpYnV0ZVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKIHsKICAgICBE
b2N1bWVudCAqZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykgeworICAg
IGlmICghZG9jKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KICAgICAvLyBGSVhNRTogaXMg
cGFyc2VVUkwgYXBwcm9wcmlhdGUgaGVyZT8KLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlbCA9IHBh
cnNlVVJMKERlcHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0cmluZyhzdHJpbmcpKS5kZXByZWNhdGVk
U3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyByZWwgPSBwYXJzZVVSTChzdHJpbmcpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKICAgICByZXR1cm4gS1VSTChkb2MtPmNvbXBsZXRlVVJMKHJlbCkp
LmdldE5TVVJMKCk7CiB9CiAKQEAgLTEyMTUsNyArMTIxNCw3IEBAIHN0YXRpYyBIVE1MRm9ybUVs
ZW1lbnQgKmZvcm1FbGVtZW50RnJvbUQKIAogLSAodW5zaWduZWQpaGlnaGxpZ2h0QWxsTWF0Y2hl
c0ZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxh
ZwogewotICAgIHJldHVybiBtX2ZyYW1lLT5oaWdobGlnaHRBbGxNYXRjaGVzRm9yU3RyaW5nKERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0cmluZyhzdHJpbmcpLCBjYXNlRmxhZyk7CisgICAgcmV0
dXJuIG1fZnJhbWUtPmhpZ2hsaWdodEFsbE1hdGNoZXNGb3JTdHJpbmcoc3RyaW5nLCBjYXNlRmxh
Zyk7CiB9CiAKIC0gKHZvaWQpY2xlYXJIaWdobGlnaHRlZE1hdGNoZXMKSW5kZXg6IGJyaWRnZS9t
YWMvQnJvd3NlckV4dGVuc2lvbk1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvQnJvd3Nl
ckV4dGVuc2lvbk1hYy5oCShyZXZpc2lvbiAxMzQzMSkKKysrIGJyaWRnZS9tYWMvQnJvd3NlckV4
dGVuc2lvbk1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiYgcGFydCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SWNvblVSTChjb25zdCBLVVJMJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5
cGVkSWNvblVSTChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdHlwZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFR5cGVkSWNvblVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiB0eXBlKTsKIAogICAgIHZpcnR1YWwgaW50IGdldEhpc3RvcnlMZW5ndGgoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZ29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSk7CkluZGV4OiBicmlkZ2UvbWFj
L1dlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL1dlYkNv
cmVTY3JpcHREZWJ1Z2dlci5tbQkocmV2aXNpb24gMTM0MzEpCisrKyBicmlkZ2UvbWFjL1dlYkNv
cmVTY3JpcHREZWJ1Z2dlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIyLDEzICszMjIsMTEgQEAg
Y2xhc3MgV2ViQ29yZVNjcmlwdERlYnVnZ2VySW1wIDogcHVibGljIAogICAgIEpTT2JqZWN0ICpl
dmFsID0gTlVMTDsKICAgICBpZiAoc3RhdGUtPmNvbnRleHQoKS5pbXAoKSkgeyAgLy8gImV2YWwi
IHdvbid0IHdvcmsgd2l0aG91dCBjb250ZXh0IChpLmUuIGF0IGdsb2JhbCBzY29wZSkKICAgICAg
ICAgSlNWYWx1ZSAqdiA9IGdsb2JPYmotPmdldChzdGF0ZSwgImV2YWwiKTsKLSAgICAgICAgaWYg
KHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4odiktPmltcGxlbWVudHND
YWxsKCkpIHsKKyAgICAgICAgaWYgKHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QgKj4odiktPmltcGxlbWVudHNDYWxsKCkpCiAgICAgICAgICAgICBldmFsID0gc3RhdGljX2Nh
c3Q8SlNPYmplY3QgKj4odik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIGVs
c2UKICAgICAgICAgICAgIC8vIG5vICJldmFsIiAtIGZhbGxiYWNrIG9wZXJhdGVzIG9uIGdsb2Jh
bCBleGVjIHN0YXRlCiAgICAgICAgICAgICBzdGF0ZSA9IGludGVycC0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICB9CiAgICAgfQogCiAgICAgSlNWYWx1ZSAqc2F2ZWRFeGNlcHRpb24gPSBzdGF0ZS0+
ZXhjZXB0aW9uKCk7CkBAIC0zNDEsMTUgKzMzOSwxMiBAQCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVi
dWdnZXJJbXAgOiBwdWJsaWMgCiAgICAgICAgIExpc3QgYXJnczsKICAgICAgICAgYXJncy5hcHBl
bmQoanNTdHJpbmcoY29kZSkpOwogICAgICAgICByZXN1bHQgPSBldmFsLT5jYWxsKHN0YXRlLCBO
VUxMLCBhcmdzKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlCiAgICAgICAgIC8vIG5v
ICJldmFsIiwgb3Igbm8gY29udGV4dCAoaS5lLiBnbG9iYWwgc2NvcGUpIC0gdXNlIGdsb2JhbCBm
YWxsYmFjawogICAgICAgICByZXN1bHQgPSBpbnRlcnAtPmltcCgpLT5ldmFsdWF0ZShjb2RlLmRh
dGEoKSwgY29kZS5zaXplKCksIGdsb2JPYmosIFVTdHJpbmcoKSwgMCkudmFsdWUoKTsKLSAgICB9
CiAKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmVzdWx0ID0gc3RhdGUtPmV4Y2VwdGlvbigpOyAgICAvLyAo
bWF5IGJlIHJlZHVuZGFudCBkZXBlbmRpbmcgb24gd2hpY2ggZXZhbCBwYXRoIHdhcyB1c2VkKQot
ICAgIH0KICAgICBzdGF0ZS0+c2V0RXhjZXB0aW9uKHNhdmVkRXhjZXB0aW9uKTsKIAogICAgIHJl
dHVybiBbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0XTsKSW5kZXg6IGJyaWRn
ZS9tYWMvRnJhbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL0ZyYW1lTWFjLmgJKHJl
dmlzaW9uIDEzNDMxKQorKysgYnJpZGdlL21hYy9GcmFtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cmxTZWxlY3RlZChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5cGUg
b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKLSAgICB2aXJ0dWFsIFBsdWdpbiogY3JlYXRlUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgRGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmdMaXN0JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgdmlydHVh
bCBQbHVnaW4qIGNyZWF0ZVBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOwogICAgIHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZW5kZXJQYXJ0KiByZW5kZXJlciwgY29u
c3QgU3RyaW5nJiByZWZlcnJlcik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDbG9zZSgp
OwpJbmRleDogYnJpZGdlL21hYy9Ccm93c2VyRXh0ZW5zaW9uTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGJyaWRnZS9tYWMvQnJvd3NlckV4dGVuc2lvbk1hYy5tbQkocmV2aXNpb24gMTM0MzEpCisrKyBi
cmlkZ2UvbWFjL0Jyb3dzZXJFeHRlbnNpb25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miwx
MCArMTYyLDEwIEBAIHZvaWQgQnJvd3NlckV4dGVuc2lvbk1hYzo6c2V0SWNvblVSTChjb24KICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEJyb3dzZXJFeHRlbnNpb25N
YWM6OnNldFR5cGVkSWNvblVSTChjb25zdCBLVVJMICZ1cmwsIGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJnR5cGUpCit2b2lkIEJyb3dzZXJFeHRlbnNpb25NYWM6OnNldFR5cGVkSWNvblVSTChjb25z
dCBLVVJMICZ1cmwsIGNvbnN0IFN0cmluZyAmdHlwZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0gICAgW21fZnJhbWUtPmJyaWRnZSgpIHNldEljb25VUkw6dXJsLmdldE5T
VVJMKCkgd2l0aFR5cGU6dHlwZS5nZXROU1N0cmluZygpXTsKKyAgICBbbV9mcmFtZS0+YnJpZGdl
KCkgc2V0SWNvblVSTDp1cmwuZ2V0TlNVUkwoKSB3aXRoVHlwZTp0eXBlXTsKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogfQogCkluZGV4OiBicmlkZ2UvQnJvd3NlckV4dGVuc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGJyaWRnZS9Ccm93c2VyRXh0ZW5zaW9uLmgJKHJldmlzaW9uIDEzNDMx
KQorKysgYnJpZGdlL0Jyb3dzZXJFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyAr
NjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSom
IHBhcnQpID0gMDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblVSTChjb25zdCBLVVJM
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlZEljb25VUkwoY29uc3QgS1VSTCYsIGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmIHR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlw
ZWRJY29uVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHR5cGUpID0gMDsKICAgICAKICAg
ICB2aXJ0dWFsIGludCBnZXRIaXN0b3J5TGVuZ3RoKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBn
b0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKSA9IDA7CkluZGV4OiB4bWwveG1saHR0cHJlcXVl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHhtbC94bWxodHRwcmVxdWVzdC5jcHAJKHJldmlzaW9uIDEz
NDMxKQorKysgeG1sL3htbGh0dHByZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcg
KzEwMyw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0Q2hhcnNldChjb25zdCBTdHJpbmcmIGMKICAgICB3
aGlsZSAocG9zIDwgbGVuZ3RoKSB7CiAgICAgICAgIHBvcyA9IGNvbnRlbnRUeXBlU3RyaW5nLmZp
bmQoImNoYXJzZXQiLCBwb3MsIGZhbHNlKTsKICAgICAgICAgaWYgKHBvcyA8PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICAgICAgCiAgICAgICAgIC8vIGlzIHdoYXQgd2UgZm91bmQgYSBiZWdpbm5pbmcg
b2YgYSB3b3JkPwogICAgICAgICBpZiAoY29udGVudFR5cGVTdHJpbmdbcG9zLTFdID4gJyAnICYm
IGNvbnRlbnRUeXBlU3RyaW5nW3Bvcy0xXSAhPSAnOycpIHsKQEAgLTI5Miw3ICsyOTIsNyBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAgICAgbV9hYm9ydGVkID0g
ZmFsc2U7CiAKICAgICBpZiAoIWJvZHkuaXNOdWxsKCkgJiYgbV9tZXRob2QubG93ZXIoKSAhPSAi
Z2V0IiAmJiBtX21ldGhvZC5sb3dlcigpICE9ICJoZWFkIiAmJiAobV91cmwucHJvdG9jb2woKS5s
b3dlcigpID09ICJodHRwIiB8fCBtX3VybC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImh0dHBzIikp
IHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBjb250ZW50VHlwZSA9IGdldFJlcXVlc3RIZWFk
ZXIoIkNvbnRlbnQtVHlwZSIpOworICAgICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBnZXRSZXF1
ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiKTsKICAgICAgICAgU3RyaW5nIGNoYXJzZXQ7CiAgICAg
ICAgIGlmIChjb250ZW50VHlwZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzZXRSZXF1ZXN0SGVh
ZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veG1sIik7CkBAIC0zNjgsNyArMzY4LDcg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpv
dmVycmlkZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGUpCiB7Ci0gICAgbV9taW1lVHlw
ZU92ZXJyaWRlID0gb3ZlcnJpZGUuZGVwcmVjYXRlZFN0cmluZygpOworICAgIG1fbWltZVR5cGVP
dmVycmlkZSA9IG92ZXJyaWRlOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0
SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IGt3
cS9LV1FLSFRNTFNldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUtIVE1MU2V0dGluZ3Mu
aAkocmV2aXNpb24gMTM0MzEpCisrKyBrd3EvS1dRS0hUTUxTZXR0aW5ncy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCiAKIGNsYXNzIEtIVE1MU2V0dGluZ3MK
IHsKQEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcmIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCi0gICAgRGVw
cmVjYXRlZFN0cmluZyB1c2VyU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxl
U2hlZXRMb2NhdGlvbjsgfQorICAgIEtVUkwgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQogICAgIGJvb2wgc2hvdWxkUHJp
bnRCYWNrZ3JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUHJpbnRCYWNrZ3JvdW5kczsg
fQogICAgIGJvb2wgdGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
QXJlYXNBcmVSZXNpemFibGU7IH0KIApAQCAtODMsNyArODQsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldEVuY29kaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHMpIHsgbV9lbmNvZGluZyA9
IHM7IH0KIAotICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXQoY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyYgcykgeyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBzOyB9CisgICAgdm9pZCBzZXRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwmIHMpIHsgbV91c2VyU3R5bGVTaGVldExvY2F0
aW9uID0gczsgfQogICAgIHZvaWQgc2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyhib29sIGYpIHsg
bV9zaG91bGRQcmludEJhY2tncm91bmRzID0gZjsgfQogICAgIHZvaWQgc2V0VGV4dEFyZWFzQXJl
UmVzaXphYmxlKGJvb2wgZikgeyBtX3RleHRBcmVhc0FyZVJlc2l6YWJsZSA9IGY7IH0KICAgICAK
QEAgLTk1LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpBdG9taWNTdHJpbmcgbV9j
dXJzaXZlRm9udE5hbWU7CiAgICAgV2ViQ29yZTo6QXRvbWljU3RyaW5nIG1fZmFudGFzeUZvbnRO
YW1lOwogICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9lbmNvZGluZzsgLy8gRklYTUU6IFRleHRFbmNv
ZGluZyB0YWtlcyBhIGxhdGluMSBzdHJpbmcsIHdoaWNoIFN0cmluZyAmIEF0b21pY1N0cmluZyBk
b24ndCBlYXNpbHkgcHJvZHVjZQotICAgIERlcHJlY2F0ZWRTdHJpbmcgbV91c2VyU3R5bGVTaGVl
dExvY2F0aW9uOyAvLyBGSVhNRTogS1VSTHMgc3RpbGwgdXNlIERlcHJlY2F0ZWRTdHJpbmcKKyAg
ICBLVVJMIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKICAgICAKICAgICBpbnQgbV9taW5pbXVt
Rm9udFNpemU7CiAgICAgaW50IG1fbWluaW11bUxvZ2ljYWxGb250U2l6ZTsKSW5kZXg6IGt3cS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0Q2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0FjY2Vzc2liaWxp
dHlPYmplY3RDYWNoZS5tbQkocmV2aXNpb24gMTM0MzEpCisrKyBrd3EvQWNjZXNzaWJpbGl0eU9i
amVjdENhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTEgQEAKICNpbXBvcnQg
IldlYkNvcmVBWE9iamVjdC5oIgogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2lt
cG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCAiRGVwcmVjYXRlZFN0cmluZy5oIgog
I2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIK
ICNpbXBvcnQgIkRvY3VtZW50LmgiCiAKLXVzaW5nIFdlYkNvcmU6OkVBZmZpbml0eTsKLXVzaW5n
IFdlYkNvcmU6OlJlbmRlck9iamVjdDsKLXVzaW5nIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAvLyBUaGUgc2ltcGxlIENvY29hIGNhbGxzIGlu
IHRoaXMgZmlsZSBkb24ndCB0aHJvdyBleGNlcHRpb25zLgogCkBAIC00NCw3ICs0MSw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdENhY2hlOjpnQWNjZXNzaWIKIAogdHlwZWRlZiBzdHJ1Y3Qg
S1dRVGV4dE1hcmtlckRhdGEgIHsKICAgICBXZWJDb3JlQVhJRCAgYXhPYmplY3RJRDsKLSAgICBX
ZWJDb3JlOjpOb2RlKiAgbm9kZUltcGw7CisgICAgTm9kZSogIG5vZGVJbXBsOwogICAgIGludCAg
ICAgICAgICAgICBvZmZzZXQ7CiAgICAgRUFmZmluaXR5ICAgICAgIGFmZmluaXR5OwogfTsKQEAg
LTE1OSwxNCArMTU2LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdENhY2hlOjpyZW1vdmVB
WE8KIAogV2ViQ29yZVRleHRNYXJrZXIgKkFjY2Vzc2liaWxpdHlPYmplY3RDYWNoZTo6dGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbiAoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9z
KQogewotICAgIFdlYkNvcmU6OlBvc2l0aW9uIGRlZXBQb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgV2ViQ29yZTo6Tm9kZSogZG9tTm9kZSA9IGRlZXBQb3Mubm9kZSgpOwor
ICAgIFBvc2l0aW9uIGRlZXBQb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CisgICAg
Tm9kZSogZG9tTm9kZSA9IGRlZXBQb3Mubm9kZSgpOwogICAgIEFTU0VSVChkb21Ob2RlICE9IE5V
TEwpOwogICAgIGlmIChkb21Ob2RlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
CiAgICAgLy8gbG9jYXRlIHRoZSByZW5kZXJlciwgd2hpY2ggbXVzdCBleGlzdCBmb3IgYSB2aXNp
YmxlIGRvbSBub2RlCi0gICAgV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRvbU5v
ZGUtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRvbU5vZGUtPnJl
bmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyICE9IE5VTEwpOwogICAgIAogICAgIC8vIGZp
bmQgb3IgY3JlYXRlIGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGZvciB0aGlzIHJlbmRlcmVyCkBA
IC0yMTMsMTggKzIxMCwxOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RDYWNoZTo6Y2hpbGRy
ZW5DCiAgICAgW29iaiBjaGlsZHJlbkNoYW5nZWRdOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvblRvVG9wV2ViQXJlYShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBtc2cpCit2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvblRvVG9wV2ViQXJlYShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBTdHJpbmcmIG1zZykKIHsKICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0ICogb2JqID0gcmVuZGVyZXItPmRvY3VtZW50KCktPnRvcERvY3VtZW50
KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb24o
YWNjT2JqZWN0KG9iaiksIG1zZy5nZXROU1N0cmluZygpKTsKKyAgICAgICAgTlNBY2Nlc3NpYmls
aXR5UG9zdE5vdGlmaWNhdGlvbihhY2NPYmplY3Qob2JqKSwgbXNnKTsKICAgICB9CiB9CiAKLXZv
aWQgQWNjZXNzaWJpbGl0eU9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIG1zZykKK3ZvaWQgQWNjZXNzaWJp
bGl0eU9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFN0cmluZyYgbXNnKQogewogICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgTlNBY2Nl
c3NpYmlsaXR5UG9zdE5vdGlmaWNhdGlvbihhY2NPYmplY3QocmVuZGVyZXIpLCBtc2cuZ2V0TlNT
dHJpbmcoKSk7CisgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb24oYWNjT2Jq
ZWN0KHJlbmRlcmVyKSwgbXNnKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Q2FjaGU6
OmhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKCkKSW5kZXg6IGt3cS9LV1FMaW5lRWRpdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrd3EvS1dRTGluZUVkaXQubW0JKHJldmlzaW9uIDEzNDMxKQorKysg
a3dxL0tXUUxpbmVFZGl0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsMTQgKzIxMCwxNCBAQCBp
bnQgUUxpbmVFZGl0OjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgcmV0dXJuIC0xOwogfQog
Ci1EZXByZWNhdGVkU3RyaW5nIFFMaW5lRWRpdDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKK1N0cmlu
ZyBRTGluZUVkaXQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogICAgIE5TUmFuZ2UgcmFuZ2UgPSBbbV9jb250cm9sbGVyIHNlbGVjdGVk
UmFuZ2VdOwogICAgIE5TU3RyaW5nICpzdHIgPSBbbV9jb250cm9sbGVyIHN0cmluZ107Ci0gICAg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0cmluZyhbc3RyIHN1YnN0cmluZ1dpdGhS
YW5nZTpyYW5nZV0pOworICAgIHJldHVybiBbc3RyIHN1YnN0cmluZ1dpdGhSYW5nZTpyYW5nZV07
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gRGVwcmVjYXRlZFN0
cmluZygpOworICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogdm9pZCBRTGluZUVkaXQ6OnNldFNl
bGVjdGlvbihpbnQgc3RhcnQsIGludCBsZW5ndGgpCkluZGV4OiBrd3EvQWNjZXNzaWJpbGl0eU9i
amVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0FjY2Vzc2liaWxpdHlPYmplY3RDYWNoZS5o
CShyZXZpc2lvbiAxMzQzMSkKKysrIGt3cS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNiBAQCBjbGFzcyBXZWJDb3JlQVhPYmplY3Q7CiBjbGFz
cyBXZWJDb3JlVGV4dE1hcmtlcjsKICNlbmRpZgogCi1jbGFzcyBEZXByZWNhdGVkU3RyaW5nOwot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNsYXNz
IFZpc2libGVQb3NpdGlvbjsKQEAgLTY2LDggKzY0LDggQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIpOwogCi0g
ICAgdm9pZCBwb3N0Tm90aWZpY2F0aW9uKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIG1zZyk7Ci0gICAgdm9pZCBwb3N0Tm90aWZpY2F0aW9u
VG9Ub3BXZWJBcmVhKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcmIG1zZyk7CisgICAgdm9pZCBwb3N0Tm90aWZpY2F0aW9uKFdlYkNvcmU6OlJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbXNnKTsKKyAgICB2
b2lkIHBvc3ROb3RpZmljYXRpb25Ub1RvcFdlYkFyZWEoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtc2cpOwogICAgIHZvaWQgaGFuZGxlRm9j
dXNlZFVJRWxlbWVudENoYW5nZWQodm9pZCk7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgZW5hYmxl
QWNjZXNzaWJpbGl0eSgpIHsgZ0FjY2Vzc2liaWxpdHlFbmFibGVkID0gdHJ1ZTsgfQpJbmRleDog
a3dxL0NsaXBib2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvQ2xpcGJvYXJkTWFjLm1tCShy
ZXZpc2lvbiAxMzQzMSkKKysrIGt3cS9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTc0LDIxICs3NCwxNyBAQCBzdGF0aWMgTlNTdHJpbmcgKmNvY29hVHlwZUZyb21NSU1FVHlwZShj
CiAgICAgRGVwcmVjYXRlZFN0cmluZyBxVHlwZSA9IHR5cGUuZGVwcmVjYXRlZFN0cmluZygpLnN0
cmlwV2hpdGVTcGFjZSgpOwogCiAgICAgLy8gdHdvIHNwZWNpYWwgY2FzZXMgZm9yIElFIGNvbXBh
dGliaWxpdHkKLSAgICBpZiAocVR5cGUgPT0gIlRleHQiKSB7CisgICAgaWYgKHFUeXBlID09ICJU
ZXh0IikKICAgICAgICAgcmV0dXJuIE5TU3RyaW5nUGJvYXJkVHlwZTsKLSAgICB9Ci0gICAgaWYg
KHFUeXBlID09ICJVUkwiKSB7CisgICAgaWYgKHFUeXBlID09ICJVUkwiKQogICAgICAgICByZXR1
cm4gTlNVUkxQYm9hcmRUeXBlOwotICAgIH0gCiAKICAgICAvLyBJZ25vcmUgYW55IHRyYWlsaW5n
IGNoYXJzZXQgLSBKUyBzdHJpbmdzIGFyZSBVbmljb2RlLCB3aGljaCBlbmNhcHN1bGF0ZXMgdGhl
IGNoYXJzZXQgaXNzdWUKLSAgICBpZiAocVR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHFUeXBlLnN0
YXJ0c1dpdGgoInRleHQvcGxhaW47IikpIHsKKyAgICBpZiAocVR5cGUgPT0gInRleHQvcGxhaW4i
IHx8IHFUeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCiAgICAgICAgIHJldHVybiBOU1N0
cmluZ1Bib2FyZFR5cGU7Ci0gICAgfQotICAgIGlmIChxVHlwZSA9PSAidGV4dC91cmktbGlzdCIp
IHsKKyAgICBpZiAocVR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQogICAgICAgICAvLyBzcGVjaWFs
IGNhc2UgYmVjYXVzZSBVVEkgZG9lc24ndCB3b3JrIHdpdGggQ29jb2EncyBVUkwgdHlwZQogICAg
ICAgICByZXR1cm4gTlNVUkxQYm9hcmRUeXBlOyAvLyBub3RlIHNwZWNpYWwgY2FzZSBpbiBnZXRE
YXRhIHRvIHJlYWQgTlNGaWxlbmFtZXNUeXBlCi0gICAgfQogICAgIAogICAgIC8vIFRyeSBVVEkg
bm93CiAgICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gcVR5cGUuZ2V0TlNTdHJpbmcoKTsKQEAgLTk2
LDkgKzkyLDggQEAgc3RhdGljIE5TU3RyaW5nICpjb2NvYVR5cGVGcm9tTUlNRVR5cGUoYwogICAg
IGlmIChVVElUeXBlKSB7CiAgICAgICAgIENGU3RyaW5nUmVmIHBiVHlwZSA9IFVUVHlwZUNvcHlQ
cmVmZXJyZWRUYWdXaXRoQ2xhc3MoVVRJVHlwZSwga1VUVGFnQ2xhc3NOU1Bib2FyZFR5cGUpOwog
ICAgICAgICBDRlJlbGVhc2UoVVRJVHlwZSk7Ci0gICAgICAgIGlmIChwYlR5cGUpIHsKKyAgICAg
ICAgaWYgKHBiVHlwZSkKICAgICAgICAgICAgIHJldHVybiBLV1FDRkF1dG9yZWxlYXNlKHBiVHlw
ZSk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUg
d2hvbGUgc3RyaW5nIHRob3VnaApJbmRleDoga3dxL0tXUUxpbmVFZGl0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3dxL0tXUUxpbmVFZGl0LmgJKHJldmlzaW9uIDEzNDMxKQorKysga3dxL0tXUUxpbmVFZGl0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KIAotI2lmbmRlZiBRTElORUVESVRfSF8KLSNkZWZpbmUgUUxJTkVFRElUX0hfCisjaWZuZGVm
IFFMaW5lRWRpdF9ICisjZGVmaW5lIFFMaW5lRWRpdF9ICiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0RGly
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKQEAgLTc2LDcgKzc1LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzU2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAgICAgCiAgICAgaW50IHNlbGVj
dGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzZWxlY3RlZFRleHQoKSBj
b25zdDsKKyAgICBXZWJDb3JlOjpTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRTZWxlY3Rpb24oaW50LCBpbnQpOwogICAgIAogICAgIEludFNpemUgc2l6ZUZvckNoYXJh
Y3RlcldpZHRoKGludCBudW1DaGFyYWN0ZXJzKSBjb25zdDsKSW5kZXg6IGxvYWRlci9DYWNoZWRD
U1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5jcHAJKHJldmlzaW9uIDEzNDMxKQorKysgbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVl
dDo6cmVmKENhY2hlZE9iamUKIHsKICAgICBDYWNoZWRPYmplY3Q6OnJlZihjKTsKIAotICAgIGlm
KCFtX2xvYWRpbmcpIGMtPnNldFN0eWxlU2hlZXQoIG1fdXJsLCBtX3NoZWV0ICk7CisgICAgaWYg
KCFtX2xvYWRpbmcpCisgICAgICAgIGMtPnNldFN0eWxlU2hlZXQobV91cmwsIG1fc2hlZXQpOwog
fQogCiB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRlcmVmKENhY2hlZE9iamVjdENsaWVudCAq
YykKSW5kZXg6IHBhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmgJKHJldmlz
aW9uIDEzNDMxKQorKysgcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBACiAjaW5jbHVkZSA8cXNjcm9sbGJhci5oPgogI2luY2x1ZGUgPERlcHJlY2F0ZWRTdHJpbmdM
aXN0Lmg+CiAjaW5jbHVkZSA8a3htbGNvcmUvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDxreG1s
Y29yZS9WZWN0b3IuaD4KIAogY2xhc3MgS0hUTUxTZXR0aW5nczsKIApAQCAtMTM4LDE2ICsxMzks
NiBAQCBwdWJsaWM6CiAgICAqIFJldHVybnMgdHJ1ZSBpZiBwbHVnaW5zIGFyZSBlbmFibGVkLCBm
YWxzZSBvdGhlcndpc2UuCiAgICAqLwogICBib29sIHBsdWdpbnNFbmFibGVkKCkgY29uc3Q7Ci0g
IAotICAvKioKLSAgICogRW5hYmxlL2Rpc2FibGUgdGhlIGF1dG9tYXRpYyBmb3J3YXJkaW5nIGJ5
IDxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIC4uLi4+Ci0gICAqLwotICB2b2lkIHNldE1ldGFS
ZWZyZXNoRW5hYmxlZChib29sIGVuYWJsZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgQHAgdHJ1
ZSBpZiBhdXRvbXRhaWMgZm9yd2FyZGluZyBpcyBlbmFibGVkLgotICAgKi8KLSAgYm9vbCBtZXRh
UmVmcmVzaEVuYWJsZWQoKSBjb25zdDsKIAogICAvKioKICAgICogRXhlY3V0ZSB0aGUgc3BlY2lm
aWVkIHNuaXBwZXQgb2YgSmF2YVNjcmlwdCBjb2RlLgpAQCAtMjY5LDIzICsyNjAsMTIgQEAgcHVi
bGljOgogICBEZXByZWNhdGVkU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CiAKICAgLyoqCi0gICAq
IFNldHMgYSB1c2VyIGRlZmluZWQgc3R5bGUgc2hlZXQgdG8gYmUgdXNlZCBvbiB0b3Agb2YgdGhl
IEhUTUwgNAotICAgKiBkZWZhdWx0IHN0eWxlIHNoZWV0LgotICAgKgotICAgKiBUaGlzIGdpdmVz
IGEgd2lkZSByYW5nZSBvZiBwb3NzaWJpbGl0aWVzIHRvCi0gICAqIGNoYW5nZSB0aGUgbGF5b3V0
IG9mIHRoZSBwYWdlLgorICAgKiBTZXRzIGEgdXNlciBkZWZpbmVkIHN0eWxlIHNoZWV0IHRvIGJl
IHVzZWQgb24gdG9wIG9mIHRoZSBIVE1MNCwKKyAgICogU1ZHIGFuZCBwcmludGluZyBkZWZhdWx0
IHN0eWxlIHNoZWV0cy4KICAgICovCiAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihj
b25zdCBLVVJMJiB1cmwpOwotCi0gIC8qKgotICAgKiBTZXRzIGEgdXNlciBkZWZpbmVkIHN0eWxl
IHNoZWV0IHRvIGJlIHVzZWQgb24gdG9wIG9mIHRoZSBIVE1MIDQKLSAgICogZGVmYXVsdCBzdHls
ZSBzaGVldC4KLSAgICoKLSAgICogVGhpcyBnaXZlcyBhIHdpZGUgcmFuZ2Ugb2YgcG9zc2liaWxp
dGllcyB0bwotICAgKiBjaGFuZ2UgdGhlIGxheW91dCBvZiB0aGUgcGFnZS4KLSAgICovCi0gIHZv
aWQgc2V0VXNlclN0eWxlU2hlZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3R5bGVTaGVldCk7
Ci0KKyAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXREYXRh
KTsKKyAgCiAgIC8qKgogICAgKiBTZXRzIHRoZSBzdGFuZGFyZCBmb250IHN0eWxlLgogICAgKgpA
QCAtNTk2LDcgKzU3Niw3IEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGxhc3RFdmVudElzTW91
c2VVcCgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBj
b25zdCA9IDA7CiBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4oY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nTGlzdCYgcGFyYW1OYW1lcywgY29u
c3QgRGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKSA9IDA7CisgIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4oY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CiAgIHZpcnR1YWwgRnJh
bWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZW5k
ZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikgPSAwOwogICB2aXJ0dWFs
IE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkgPSAwOwogCkBAIC02NDIsNyArNjIyLDcgQEAgcHJpdmF0ZToK
IAogICBib29sIHNob3VsZFVzZVBsdWdpbihOb2RlKiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFzRmFsbGJhY2ssIGJvb2wmIHVzZUZhbGxi
YWNrKTsKICAgYm9vbCBsb2FkUGx1Z2luKFJlbmRlclBhcnQqIHJlbmRlcmVyLCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIAotICAgICAgICAgICAgICAgICAgY29uc3Qg
RGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdM
aXN0JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBib29sIHVzZUZhbGxiYWNrKTsKICAgRnJhbWUqIGxvYWRTdWJmcmFtZShSZW5k
ZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgcmVmZXJyZXIpOwogCiBwdWJsaWM6CkBAIC02NTEsNyArNjMxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBib3VuZGFyeSA9IFN0cmluZygp
KTsKICAgCiAgIGJvb2wgcmVxdWVzdE9iamVjdChSZW5kZXJQYXJ0KiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlVHlwZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZ0xp
c3QmIHBhcmFtTmFtZXMsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0JiBwYXJhbVZhbHVlcyk7
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNlcnZpY2VUeXBlLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzKTsKICAgYm9vbCByZXF1ZXN0RnJhbWUoUmVuZGVyUGFydCogZnJhbWUsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSk7CiAKICAgRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3Q7CkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdl
L0ZyYW1lLmNwcAkocmV2aXNpb24gMTM0MzEpCisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWNoZWRTaGVldC0+
ZGVyZWYodGhpcyk7CiAgICAgfQogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVT
aGVldChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNoZWV0KQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgLypVUkwqLywgY29uc3QgU3RyaW5nJiBzaGVl
dCkKICAgICB7CiAgICAgICAgIG1fZnJhbWUtPnNldFVzZXJTdHlsZVNoZWV0KHNoZWV0LmRlcHJl
Y2F0ZWRTdHJpbmcoKSk7CiAgICAgfQpAQCAtMjQ4LDEwICsyNDgsNiBAQCBib29sIEZyYW1lOjpk
aWRPcGVuVVJMKGNvbnN0IEtVUkwmIHVybCkKICAgZC0+bV9ranNTdGF0dXNCYXJUZXh0ID0gU3Ry
aW5nKCk7CiAgIGQtPm1fa2pzRGVmYXVsdFN0YXR1c0JhclRleHQgPSBTdHJpbmcoKTsKIAotICBk
LT5tX2JKU2NyaXB0RW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQo
KTsKLSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBkLT5tX3NldHRpbmdzLT5pc0phdmFFbmFibGVkKCk7
Ci0gIGQtPm1fYlBsdWdpbnNFbmFibGVkID0gZC0+bV9zZXR0aW5ncy0+aXNQbHVnaW5zRW5hYmxl
ZCgpOwotCiAgIC8vIGluaXRpYWxpemluZyBkLT5tX3VybCB0byB0aGUgbmV3IHVybCBicmVha3Mg
cmVsYXRpdmUgbGlua3Mgd2hlbiBvcGVuaW5nIHN1Y2ggYSBsaW5rIGFmdGVyIHRoaXMgY2FsbCBh
bmQgX2JlZm9yZV8gYmVnaW4oKSBpcyBjYWxsZWQgKHdoZW4gdGhlIGZpcnN0CiAgIC8vIGRhdGEg
YXJyaXZlcykgKFNpbW9uKQogICBkLT5tX3VybCA9IHVybDsKQEAgLTM0NSwyMiArMzQxLDEyIEBA
IHZvaWQgRnJhbWU6OnNldFZpZXcoRnJhbWVWaWV3KiB2aWV3KQogCiBib29sIEZyYW1lOjpqU2Ny
aXB0RW5hYmxlZCgpIGNvbnN0CiB7Ci0gIHJldHVybiBkLT5tX2JKU2NyaXB0RW5hYmxlZDsKLX0K
LQotdm9pZCBGcmFtZTo6c2V0TWV0YVJlZnJlc2hFbmFibGVkKGJvb2wgZW5hYmxlKQotewotICBk
LT5tX21ldGFSZWZyZXNoRW5hYmxlZCA9IGVuYWJsZTsKLX0KLQotYm9vbCBGcmFtZTo6bWV0YVJl
ZnJlc2hFbmFibGVkKCkgY29uc3QKLXsKLSAgcmV0dXJuIGQtPm1fbWV0YVJlZnJlc2hFbmFibGVk
OworICAgIHJldHVybiBkLT5tX3NldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CiB9CiAK
IEtKU1Byb3h5ICpGcmFtZTo6alNjcmlwdCgpCiB7Ci0gICAgaWYgKCFkLT5tX2JKU2NyaXB0RW5h
YmxlZCkKKyAgICBpZiAoIWpTY3JpcHRFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFkLT5tX2pzY3JpcHQpCkBAIC00MTYsMTYgKzQwMiwxMiBAQCBKU1ZhbHVlKiBGcmFt
ZTo6ZXhlY3V0ZVNjcmlwdChOb2RlKiBuLCBjCiAKIGJvb2wgRnJhbWU6OmphdmFFbmFibGVkKCkg
Y29uc3QKIHsKLSNpZm5kZWYgUV9XU19RV1MKLSAgcmV0dXJuIGQtPm1fYkphdmFFbmFibGVkOwot
I2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgcmV0dXJuIGQtPm1fc2V0dGluZ3Mt
PmlzSmF2YUVuYWJsZWQoKTsKIH0KIAogYm9vbCBGcmFtZTo6cGx1Z2luc0VuYWJsZWQoKSBjb25z
dAogewotICByZXR1cm4gZC0+bV9iUGx1Z2luc0VuYWJsZWQ7CisgICAgcmV0dXJuIGQtPm1fc2V0
dGluZ3MtPmlzUGx1Z2luc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0QXV0b2xvYWRJ
bWFnZXMoYm9vbCBlbmFibGUpCkBAIC01MTYsNyArNDk4LDcgQEAgdm9pZCBGcmFtZTo6cmVjZWl2
ZWRGaXJzdERhdGEoKQogCiAgICAgLy8gU3VwcG9ydCBmb3IgaHR0cC1yZWZyZXNoCiAgICAgcURh
dGEgPSBkLT5tX2pvYi0+cXVlcnlNZXRhRGF0YSgiaHR0cC1yZWZyZXNoIikuZGVwcmVjYXRlZFN0
cmluZygpOwotICAgIGlmICghcURhdGEuaXNFbXB0eSgpICYmIGQtPm1fbWV0YVJlZnJlc2hFbmFi
bGVkKSB7CisgICAgaWYgKCFxRGF0YS5pc0VtcHR5KCkpIHsKICAgICAgIGRvdWJsZSBkZWxheTsK
ICAgICAgIGludCBwb3MgPSBxRGF0YS5maW5kKCc7Jyk7CiAgICAgICBpZiAocG9zID09IC0xKQpA
QCAtNjMyLDcgKzYxNCw3IEBAIHZvaWQgRnJhbWU6OmJlZ2luKGNvbnN0IEtVUkwmIHVybCkKICAg
dXBkYXRlUG9saWN5QmFzZVVSTCgpOwogCiAgIHNldEF1dG9sb2FkSW1hZ2VzKGQtPm1fc2V0dGlu
Z3MtPmF1dG9Mb2FkSW1hZ2VzKCkpOwotICBTdHJpbmcgdXNlclN0eWxlU2hlZXQgPSBkLT5tX3Nl
dHRpbmdzLT51c2VyU3R5bGVTaGVldCgpOworICBjb25zdCBLVVJMJiB1c2VyU3R5bGVTaGVldCA9
IGQtPm1fc2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKIAogICBpZiAoIXVzZXJT
dHlsZVNoZWV0LmlzRW1wdHkoKSkKICAgICBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEtVUkwo
dXNlclN0eWxlU2hlZXQpKTsKQEAgLTEwMzcsNyArMTAxOSw3IEBAIHZvaWQgRnJhbWU6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oY28KICAgICAgICAgZC0+bV91c2VyU3R5bGVTaGVldExvYWRl
ciA9IG5ldyBVc2VyU3R5bGVTaGVldExvYWRlcih0aGlzLCB1cmwudXJsKCksIGQtPm1fZG9jLT5k
b2NMb2FkZXIoKSk7CiB9CiAKLXZvaWQgRnJhbWU6OnNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcmIHN0eWxlU2hlZXQpCit2b2lkIEZyYW1lOjpzZXRVc2VyU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXQpCiB7CiAgICAgZGVsZXRlIGQtPm1fdXNlclN0eWxl
U2hlZXRMb2FkZXI7CiAgICAgZC0+bV91c2VyU3R5bGVTaGVldExvYWRlciA9IDA7CkBAIC0xMzc0
LDcgKzEzNTYsNyBAQCBib29sIEZyYW1lOjpyZXF1ZXN0RnJhbWUoUmVuZGVyUGFydCogcmVuCiB9
CiAKIGJvb2wgRnJhbWU6OnJlcXVlc3RPYmplY3QoUmVuZGVyUGFydCogcmVuZGVyZXIsIGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgRGVwcmVjYXRlZFN0
cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0JiBwYXJhbVZh
bHVlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbVZhbHVlcykKIHsKICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKICAgICBpZiAoIXVybC5pc0Vt
cHR5KCkpCkBAIC0xNDA2LDcgKzEzODgsNyBAQCBib29sIEZyYW1lOjpzaG91bGRVc2VQbHVnaW4o
Tm9kZSogZWxlbWVuCiAKIAogYm9vbCBGcmFtZTo6bG9hZFBsdWdpbihSZW5kZXJQYXJ0ICpyZW5k
ZXJlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFjaykK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFjaykKIHsK
ICAgICBpZiAodXNlRmFsbGJhY2spIHsKICAgICAgICAgY2hlY2tFbWl0TG9hZEV2ZW50KCk7CkBA
IC0xNjMzLDMxICsxNjE1LDI1IEBAIFN0cmluZyBGcmFtZTo6anNEZWZhdWx0U3RhdHVzQmFyVGV4
dCgpIGMKIAogRGVwcmVjYXRlZFN0cmluZyBGcmFtZTo6cmVmZXJyZXIoKSBjb25zdAogewotICAg
cmV0dXJuIGQtPm1fcmVmZXJyZXI7CisgICAgcmV0dXJuIGQtPm1fcmVmZXJyZXI7CiB9CiAKIFN0
cmluZyBGcmFtZTo6bGFzdE1vZGlmaWVkKCkgY29uc3QKIHsKLSAgcmV0dXJuIGQtPm1fbGFzdE1v
ZGlmaWVkOworICAgIHJldHVybiBkLT5tX2xhc3RNb2RpZmllZDsKIH0KIAogdm9pZCBGcmFtZTo6
cmVwYXJzZUNvbmZpZ3VyYXRpb24oKQogewotICBzZXRBdXRvbG9hZEltYWdlcyhkLT5tX3NldHRp
bmdzLT5hdXRvTG9hZEltYWdlcygpKTsKLSAgaWYgKGQtPm1fZG9jKQotICAgICBkLT5tX2RvYy0+
ZG9jTG9hZGVyKCktPnNldFNob3dBbmltYXRpb25zKEtIVE1MU2V0dGluZ3M6OktBbmltYXRpb25F
bmFibGVkKTsKLQotICBkLT5tX2JKU2NyaXB0RW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzSmF2
YVNjcmlwdEVuYWJsZWQoKTsKLSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBkLT5tX3NldHRpbmdzLT5p
c0phdmFFbmFibGVkKCk7Ci0gIGQtPm1fYlBsdWdpbnNFbmFibGVkID0gZC0+bV9zZXR0aW5ncy0+
aXNQbHVnaW5zRW5hYmxlZCgpOwotCi0gIERlcHJlY2F0ZWRTdHJpbmcgdXNlclN0eWxlU2hlZXQg
PSBkLT5tX3NldHRpbmdzLT51c2VyU3R5bGVTaGVldCgpOwotICBpZiAoIXVzZXJTdHlsZVNoZWV0
LmlzRW1wdHkoKSkKLSAgICBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEtVUkwodXNlclN0eWxl
U2hlZXQpKTsKLSAgZWxzZQotICAgIHNldFVzZXJTdHlsZVNoZWV0KERlcHJlY2F0ZWRTdHJpbmco
KSk7CisgICAgc2V0QXV0b2xvYWRJbWFnZXMoZC0+bV9zZXR0aW5ncy0+YXV0b0xvYWRJbWFnZXMo
KSk7CisgICAgaWYgKGQtPm1fZG9jKQorICAgICAgICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPnNl
dFNob3dBbmltYXRpb25zKEtIVE1MU2V0dGluZ3M6OktBbmltYXRpb25FbmFibGVkKTsKIAotICBp
ZiAoZC0+bV9kb2MpIGQtPm1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAgY29uc3Qg
S1VSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IGQtPm1fc2V0dGluZ3MtPnVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oKTsKKyAgICBpZiAoIXVzZXJTdHlsZVNoZWV0TG9jYXRpb24uaXNFbXB0eSgp
KQorICAgICAgICBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHVzZXJTdHlsZVNoZWV0TG9jYXRp
b24pOworICAgIGVsc2UKKyAgICAgICAgc2V0VXNlclN0eWxlU2hlZXQoU3RyaW5nKCkpOwogfQog
CiBib29sIEZyYW1lOjpzaG91bGREcmFnQXV0b05vZGUoTm9kZSAqbm9kZSwgaW50IHgsIGludCB5
KSBjb25zdApAQCAtMTc5NiwxNSArMTc3MiwxMyBAQCB2b2lkIEZyYW1lOjpoYW5kbGVNb3VzZVBy
ZXNzRXZlbnRTaW5nbGVDCiAgICAgICAgICAgICAgICAgLy8gd2FzIGNyZWF0ZWQgcmlnaHQtdG8t
bGVmdAogICAgICAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsLnN0YXJ0KCk7CiAgICAg
ICAgICAgICAgICAgc2hvcnQgYmVmb3JlID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhw
b3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCksIHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCkpOwot
ICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgPD0gMCkgeworICAgICAgICAgICAgICAgIGlmIChi
ZWZvcmUgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgc2VsLnNldEJhc2VBbmRFeHRlbnQocG9z
Lm5vZGUoKSwgcG9zLm9mZnNldCgpLCBzZWwuZW5kKCkubm9kZSgpLCBzZWwuZW5kKCkub2Zmc2V0
KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBzZWwuc2V0QmFzZUFuZEV4dGVudChzdGFydC5ub2RlKCksIHN0YXJ0
Lm9mZnNldCgpLCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmIChkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5ICE9IENoYXJh
Y3RlckdyYW51bGFyaXR5KSB7CisgICAgICAgICAgICAgICAgaWYgKGQtPm1fc2VsZWN0aW9uR3Jh
bnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAgICAgICAgICAgICAgICAgICAgIHNl
bC5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkpOwotICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkLT5tX2JlZ2FuU2VsZWN0aW5nVGV4dCA9
IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHNlbCA9IFNlbGVj
dGlvbkNvbnRyb2xsZXIodmlzaWJsZVBvcyk7CkBAIC0xOTc0LDkgKzE5NDgsOCBAQCB2b2lkIGRp
c3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50CiB2b2lkIEZyYW1lOjphcHBsaWVkRWRp
dGluZyhFZGl0Q29tbWFuZFB0ciYgY21kKQogewogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2Vs
KGNtZC5lbmRpbmdTZWxlY3Rpb24oKSk7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihz
ZWwpKSB7CisgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKQogICAgICAgICBzZXRT
ZWxlY3Rpb24oc2VsLCBmYWxzZSk7Ci0gICAgfQogICAgIAogICAgIGRpc3BhdGNoRWRpdGFibGVD
b250ZW50Q2hhbmdlZEV2ZW50KCFzZWxlY3Rpb24oKS5pc05vbmUoKSA/IHNlbGVjdGlvbigpLnN0
YXJ0KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwKTsKIApAQCAtMjAwNyw5ICsx
OTgwLDggQEAgdm9pZCBGcmFtZTo6YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdAogdm9pZCBG
cmFtZTo6dW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciYgY21kKQogewogICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5zdGFydGluZ1NlbGVjdGlvbigpKTsKLSAgICBpZiAoc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKKyAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbCkpCiAgICAgICAgIHNldFNlbGVjdGlvbihzZWwsIHRydWUpOwotICAgIH0KICAgICAKICAg
ICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCghc2VsZWN0aW9uKCkuaXNOb25l
KCkgPyBzZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDog
MCk7CiAgICAgICAgIApAQCAtMjAyMSw5ICsxOTkzLDggQEAgdm9pZCBGcmFtZTo6dW5hcHBsaWVk
RWRpdGluZyhFZGl0Q29tbWFuZAogdm9pZCBGcmFtZTo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29t
bWFuZFB0ciYgY21kKQogewogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5lbmRpbmdT
ZWxlY3Rpb24oKSk7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7CisgICAg
aWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKQogICAgICAgICBzZXRTZWxlY3Rpb24oc2Vs
LCB0cnVlKTsKLSAgICB9CiAgICAgCiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2Vk
RXZlbnQoIXNlbGVjdGlvbigpLmlzTm9uZSgpID8gc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCkt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDApOwogICAgICAgICAKQEAgLTI3OTAsNyArMjc2MSw3
IEBAIHZvaWQgRnJhbWU6OnJlc3VtZVRpbWVvdXRzKFBhdXNlZFRpbWVvdXQKICAgICAgICAgZC0+
bV9kb2MtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+dW5wYXVzZUFuaW1hdGlvbnMoKTsKICNlbmRp
ZgogCi0gICAgaWYgKGQtPm1fZG9jICYmIGQtPm1fanNjcmlwdCAmJiBkLT5tX2JKU2NyaXB0RW5h
YmxlZCkgeworICAgIGlmIChkLT5tX2RvYyAmJiBkLT5tX2pzY3JpcHQgJiYgalNjcmlwdEVuYWJs
ZWQoKSkgewogICAgICAgICBpZiAoV2luZG93ICp3ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyh0
aGlzKSkKICAgICAgICAgICAgIHctPnJlc3VtZVRpbWVvdXRzKHQpOwogICAgIH0KSW5kZXg6IHBh
Z2UvRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZVByaXZhdGUuaAkocmV2
aXNpb24gMTM0MzEpCisrKyBwYWdlL0ZyYW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSwxMCArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fZXh0ZW5z
aW9uKDApCiAgICAgICAgICAgICAsIG1fanNjcmlwdCgwKQogICAgICAgICAgICAgLCBtX3J1bm5p
bmdTY3JpcHRzKDApCi0gICAgICAgICAgICAsIG1fYkpTY3JpcHRFbmFibGVkKHRydWUpCi0gICAg
ICAgICAgICAsIG1fYkphdmFFbmFibGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fYlBsdWdpbnNF
bmFibGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fbWV0YVJlZnJlc2hFbmFibGVkKHRydWUpCiAg
ICAgICAgICAgICAsIG1fc2V0dGluZ3MoMCkKICAgICAgICAgICAgICwgbV9qb2IoMCkKICAgICAg
ICAgICAgICwgbV9iQ29tcGxldGUodHJ1ZSkKQEAgLTEyNSwxMCArMTIxLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIEtKU1Byb3h5KiBtX2pzY3JpcHQ7CiAgICAgICAgIGludCBt
X3J1bm5pbmdTY3JpcHRzOwotICAgICAgICBib29sIG1fYkpTY3JpcHRFbmFibGVkIDogMTsKLSAg
ICAgICAgYm9vbCBtX2JKYXZhRW5hYmxlZCA6IDE7Ci0gICAgICAgIGJvb2wgbV9iUGx1Z2luc0Vu
YWJsZWQgOiAxOwotICAgICAgICBib29sIG1fbWV0YVJlZnJlc2hFbmFibGVkIDogMTsKIAogICAg
ICAgICBLSFRNTFNldHRpbmdzKiBtX3NldHRpbmdzOwogCg==
</data>
<flag name="review"
          id="1916"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>