<?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>168483</bug_id>
          
          <creation_ts>2017-02-16 16:39:50 -0800</creation_ts>
          <short_desc>Remove old URL parser</short_desc>
          <delta_ts>2017-02-16 17:12:26 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1278012</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-16 16:39:50 -0800</bug_when>
    <thetext>Remove old URL parser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278014</commentid>
    <comment_count>1</comment_count>
      <attachid>301855</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-16 16:43:30 -0800</bug_when>
    <thetext>Created attachment 301855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278027</commentid>
    <comment_count>2</comment_count>
      <attachid>301861</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-16 17:03:18 -0800</bug_when>
    <thetext>Created attachment 301861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278035</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-16 17:12:26 -0800</bug_when>
    <thetext>http://trac.webkit.org/r212508</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301855</attachid>
            <date>2017-02-16 16:43:30 -0800</date>
            <delta_ts>2017-02-16 17:03:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168483-20170216164053.patch</filename>
            <type>text/plain</type>
            <size>87978</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMjQ3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE3LTAyLTE2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIG9s
ZCBVUkwgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjg0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NjaGVtZUZpcnN0
Q2hhcik6CisgICAgICAgIChXZWJDb3JlOjppc1NjaGVtZUNoYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VVJMOjpVUkwpOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpzZXRQcm90b2NvbCk6CisgICAg
ICAgIChXZWJDb3JlOjpVUkw6OnNldEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpyZW1v
dmVQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6c2V0UG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpVUkw6OnNldEhvc3RBbmRQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6c2V0VXNl
cik6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OnNldFBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6
VVJMOjpzZXRGcmFnbWVudElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpzZXRR
dWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OnNldFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6VVJMOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6aXNVc2VySW5mb0NoYXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNIb3N0bmFtZUNoYXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6aXNJUHY2Q2hhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
c1BhdGhTZWdtZW50RW5kQ2hhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRB
U0NJSSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kRmlyc3RPZik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjaGVja0VuY29kZWRTdHJpbmcpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VVJMOjppbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVu
ZEVzY2FwaW5nQmFkQ2hhcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZXNjYXBlQW5k
QXBwZW5kTm9uSGllcmFyY2hpY2FsUGFydCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpj
b3B5UGF0aFJlbW92aW5nRG90cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpoYXNTbGFz
aERvdE9yRG90RG90KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6cGFyc2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2Fubm90QmVBQmFzZVVSTCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjppc0RlZmF1bHRQb3J0Rm9yU2NoZW1lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Omhvc3RQb3J0SXNFbXB0eUJ1dENyZWRlbnRpYWxzQXJlUHJlc2VudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppc05vbkZpbGVIaWVyYXJjaGljYWxTY2hlbWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNDYW5vbmljYWxIb3N0bmFtZUxvd2VyY2FzZUZv
clNjaGVtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kSG9zdG5hbWVzSW5NYWls
VG9VUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmluZEhvc3RuYW1lSW5IaWVyYXJj
aGljYWxVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSG9zdG5hbWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVJlbGF0aXZlU3RyaW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnN1YnN0aXR1dGVCYWNrc2xhc2hlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBh
cnNlcjo6VVJMUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c2V0RW5hYmxl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OmVuYWJsZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2NmL1VSTENGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6VVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvVVJMTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpVUkwpOgorCiAy
MDE3LTAyLTE2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgU3BlY2lhbCBVUkxzIHdpdGhvdXQgYSBob3N0IGFyZSBpbnZhbGlkCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTC5jcHAJKHJldmlzaW9uIDIxMjQ2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE4ICs1NSw2IEBAIHR5cGVk
ZWYgVmVjdG9yPFVDaGFyLCA1MTI+IFVDaGFyQnVmZmVyOwogCiBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgaW52YWxpZFBvcnROdW1iZXIgPSAweEZGRkY7CiAKLXN0YXRpYyBjb25zdCBjaGFyIHdzU2No
ZW1lW10gPSB7J3cnLCAncyd9Owotc3RhdGljIGNvbnN0IGNoYXIgZnRwU2NoZW1lW10gPSB7J2Yn
LCAndCcsICdwJ307Ci1zdGF0aWMgY29uc3QgY2hhciBmdHBQb3J0W10gPSB7JzInLCAnMSd9Owot
c3RhdGljIGNvbnN0IGNoYXIgd3NzU2NoZW1lW10gPSB7J3cnLCAncycsICdzJ307Ci1zdGF0aWMg
Y29uc3QgY2hhciBmaWxlU2NoZW1lW10gPSB7J2YnLCAnaScsICdsJywgJ2UnfTsKLXN0YXRpYyBj
b25zdCBjaGFyIGh0dHBTY2hlbWVbXSA9IHsnaCcsICd0JywgJ3QnLCAncCd9Owotc3RhdGljIGNv
bnN0IGNoYXIgaHR0cFBvcnRbXSA9IHsnOCcsICcwJ307Ci1zdGF0aWMgY29uc3QgY2hhciBodHRw
c1NjaGVtZVtdID0geydoJywgJ3QnLCAndCcsICdwJywgJ3MnfTsKLXN0YXRpYyBjb25zdCBjaGFy
IGh0dHBzUG9ydFtdID0geyc0JywgJzQnLCAnMyd9Owotc3RhdGljIGNvbnN0IGNoYXIgZ29waGVy
U2NoZW1lW10gPSB7J2cnLCAnbycsICdwJywgJ2gnLCAnZScsICdyJ307Ci1zdGF0aWMgY29uc3Qg
Y2hhciBnb3BoZXJQb3J0W10gPSB7JzcnLCAnMCd9OwotCiBlbnVtIFVSTENoYXJhY3RlckNsYXNz
ZXMgewogICAgIC8vIGFscGhhIAogICAgIFNjaGVtZUZpcnN0Q2hhciA9IDEgPDwgMCwKQEAgLTMy
OCwxOSArMzE2LDggQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGVyY2VudEVuY29kZQog
ICAgIC8qIDI1MiAqLyBQZXJjZW50RW5jb2RlU2ltcGxlLCAvKiAyNTMgKi8gUGVyY2VudEVuY29k
ZVNpbXBsZSwgLyogMjU0ICovIFBlcmNlbnRFbmNvZGVTaW1wbGUsIC8qIDI1NSAqLyBQZXJjZW50
RW5jb2RlU2ltcGxlCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY29weVBhdGhSZW1vdmluZ0RvdHMo
Y2hhciogZHN0LCBjb25zdCBjaGFyKiBzcmMsIHVuc2lnbmVkIHNyY1N0YXJ0LCB1bnNpZ25lZCBz
cmNFbmQpOwotc3RhdGljIGJvb2wgZW5jb2RlUmVsYXRpdmVTdHJpbmcoY29uc3QgU3RyaW5nJiBy
ZWwsIGNvbnN0IFRleHRFbmNvZGluZyYsIENoYXJCdWZmZXImIG91cHV0KTsKLXN0YXRpYyBTdHJp
bmcgc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKGNvbnN0IFN0cmluZyYpOwotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNTY2hlbWVGaXJzdENoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1Rh
YmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpXSAmIFNjaGVtZUZpcnN0Q2hhcjsgfQog
c3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKFVDaGFyIGMpIHsgcmV0dXJuIGMg
PD0gMHhmZiAmJiAoY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFNjaGVtZUZpcnN0Q2hhcik7IH0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0
ZXJDbGFzc1RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpXSAmIFNjaGVtZUNoYXI7
IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIoVUNoYXIgYykgeyByZXR1cm4gYyA8
PSAweGZmICYmIChjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lQ2hhcik7IH0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1VzZXJJbmZvQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNo
YXJhY3RlckNsYXNzVGFibGVbY10gJiBVc2VySW5mb0NoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc0hvc3RuYW1lQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNz
VGFibGVbY10gJiBIb3N0bmFtZUNoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0lQdjZDaGFy
KHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIElQdjZD
aGFyOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2VnbWVudEVuZENoYXIoY2hhciBjKSB7
IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMp
XSAmIFBhdGhTZWdtZW50RW5kQ2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21l
bnRFbmRDaGFyKFVDaGFyIGMpIHsgcmV0dXJuIGMgPD0gMHhmZiAmJiAoY2hhcmFjdGVyQ2xhc3NU
YWJsZVtjXSAmIFBhdGhTZWdtZW50RW5kQ2hhcik7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Jh
ZENoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYg
QmFkQ2hhcjsgfQogc3RhdGljIGlubGluZSBib29sIGlzVGFiTmV3bGluZShVQ2hhciBjKSB7IHJl
dHVybiBjIDw9IDB4ZmYgJiYgKGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBUYWJOZXdsaW5lKTsg
fQogCkBAIC0zNjQsMzcgKzM0MSw2IEBAIHN0YXRpYyB2b2lkIGNvcHlBU0NJSShjb25zdCBTdHJp
bmcmIHN0cmkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGVuZEFTQ0lJKGNvbnN0IFN0cmlu
ZyYgYmFzZSwgY29uc3QgY2hhciogcmVsLCBzaXplX3QgbGVuLCBDaGFyQnVmZmVyJiBidWZmZXIp
Ci17Ci0gICAgYnVmZmVyLnJlc2l6ZShiYXNlLmxlbmd0aCgpICsgbGVuICsgMSk7Ci0gICAgY29w
eUFTQ0lJKGJhc2UsIGJ1ZmZlci5kYXRhKCkpOwotICAgIG1lbWNweShidWZmZXIuZGF0YSgpICsg
YmFzZS5sZW5ndGgoKSwgcmVsLCBsZW4pOwotICAgIGJ1ZmZlcltidWZmZXIuc2l6ZSgpIC0gMV0g
PSAnXDAnOwotfQotCi0vLyBGSVhNRTogTW92ZSB0byBXVEZTdHJpbmcuaCBldmVudHVhbGx5Lgot
Ly8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGluZGV4IGluIHN0cmluZyB8c3wgb2Yg
YW55IG9mIHRoZSBjaGFyYWN0ZXJzCi0vLyBpbiB8dG9GaW5kfC4gfHRvRmluZHwgc2hvdWxkIGJl
IGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgYWxsIGNoYXJhY3RlcnMgdXAKLS8vIHRvIHRoZSBu
dWxsIHdpbGwgYmUgc2VhcmNoZWQuIFJldHVybnMgaW50IGlmIG5vdCBmb3VuZC4KLWNvbnN0IHVu
c2lnbmVkIG5vdEZvdW5kVW5zaWduZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCk7Ci1zdGF0aWMgdW5zaWduZWQgZmluZEZpcnN0T2YoU3RyaW5nVmlldyBzdHJpbmcsIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIGNvbnN0IGNoYXIqIHRhcmdldCkKLXsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRQ
b3NpdGlvbjsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IHRhcmdldFtqXTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nW2ldID09IHRhcmdldFtq
XSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gbm90Rm91bmRVbnNpZ25lZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNoZWNrRW5jb2Rl
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHVybCwgdXJs
LmNvbnRhaW5zT25seUFTQ0lJKCkpOwotICAgIEFTU0VSVF9VTlVTRUQodXJsLCB1cmwuaXNFbXB0
eSgpIHx8IGlzU2NoZW1lRmlyc3RDaGFyKHVybFswXSkpOwotfQotCiBpbmxpbmUgYm9vbCBVUkw6
OnByb3RvY29sSXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIqIHByb3RvY29sKQog
ewogICAgIHJldHVybiBXZWJDb3JlOjpwcm90b2NvbElzKHN0cmluZywgcHJvdG9jb2wpOwpAQCAt
NDE5LDI2ICszNjUsMjEgQEAgdm9pZCBVUkw6OmludmFsaWRhdGUoKQogCiBVUkw6OlVSTChQYXJz
ZWRVUkxTdHJpbmdUYWcsIGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIGlmIChVUkxQYXJzZXI6
OmVuYWJsZWQoKSkgewotICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKHVybCk7Ci0gICAgICAgICp0
aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZSh1cmwpOwor
ICAgIFVSTFBhcnNlciBwYXJzZXIodXJsKTsKKyAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsK
KwogI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIC8vIEZJWE1FKDE0ODU5OCk6IFdvcmsgYXJvdW5k
IFdpbmRvd3MgbG9jYWwgZmlsZSBoYW5kbGluZyBidWcgaW4gQ0ZOZXR3b3JrCi0gICAgICAgIEFT
U0VSVChpc0xvY2FsRmlsZSgpIHx8IHVybCA9PSBtX3N0cmluZyk7CisgICAgLy8gRklYTUUoMTQ4
NTk4KTogV29yayBhcm91bmQgV2luZG93cyBsb2NhbCBmaWxlIGhhbmRsaW5nIGJ1ZyBpbiBDRk5l
dHdvcmsKKyAgICBBU1NFUlQoaXNMb2NhbEZpbGUoKSB8fCB1cmwgPT0gbV9zdHJpbmcpOwogI2Vs
c2UKLSAgICAgICAgQVNTRVJUKHVybCA9PSBtX3N0cmluZyk7CisgICAgQVNTRVJUKHVybCA9PSBt
X3N0cmluZyk7CiAjZW5kaWYKIH0KIAogVVJMOjpVUkwoY29uc3QgVVJMJiBiYXNlLCBjb25zdCBT
dHJpbmcmIHJlbGF0aXZlKQogewotICAgIGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAg
ICAgICBVUkxQYXJzZXIgcGFyc2VyKHJlbGF0aXZlLCBiYXNlKTsKLSAgICAgICAgKnRoaXMgPSBw
YXJzZXIucmVzdWx0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGluaXQoYmFzZSwgcmVsYXRpdmUs
IFVURjhFbmNvZGluZygpKTsKKyAgICBVUkxQYXJzZXIgcGFyc2VyKHJlbGF0aXZlLCBiYXNlKTsK
KyAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKIH0KIAogVVJMOjpVUkwoY29uc3QgVVJMJiBi
YXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KQpAQCAtNDQ3LDEyICszODgsOCBAQCBVUkw6OlVSTChjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFN0
cmluZyYgCiAgICAgLy8gd2UgZG8gd2hlbiBzdWJtaXR0aW5nIGEgZm9ybS4gQSBmb3JtIHdpdGgg
R0VUIG1ldGhvZAogICAgIC8vIGhhcyBpdHMgY29udGVudHMgYWRkZWQgdG8gYSBVUkwgYXMgcXVl
cnkgcGFyYW1zIGFuZCBpdCBtYWtlcyBzZW5zZQogICAgIC8vIHRvIGJlIGNvbnNpc3RlbnQuCi0g
ICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgIFVSTFBhcnNlciBwYXJzZXIo
cmVsYXRpdmUsIGJhc2UsIGVuY29kaW5nLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSk7Ci0g
ICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlu
aXQoYmFzZSwgcmVsYXRpdmUsIGVuY29kaW5nLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSk7
Ci0gICAgfQorICAgIFVSTFBhcnNlciBwYXJzZXIocmVsYXRpdmUsIGJhc2UsIGVuY29kaW5nLmVu
Y29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSk7CisgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7
CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFRyaW1Gcm9tVVJMKFVDaGFyIGMpCkBAIC00NjMsMjAy
ICs0MDAsNiBAQCBzdGF0aWMgYm9vbCBzaG91bGRUcmltRnJvbVVSTChVQ2hhciBjKQogICAgIHJl
dHVybiBjIDw9ICcgJzsKIH0KIAotdm9pZCBVUkw6OmluaXQoY29uc3QgVVJMJiBiYXNlLCBjb25z
dCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQotewotICAg
IGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0KLSAgICAvLyBBbGxvdyByZXNvbHV0aW9ucyB3aXRoIGEgbnVsbCBvciBlbXB0eSBiYXNlIFVS
TCwgYnV0IG5vdCB3aXRoIGFueSBvdGhlciBpbnZhbGlkIG9uZS4KLSAgICAvLyBGSVhNRTogSXMg
dGhpcyBhIGdvb2QgcnVsZT8KLSAgICBpZiAoIWJhc2UubV9pc1ZhbGlkICYmICFiYXNlLmlzRW1w
dHkoKSkgewotICAgICAgICBtX3N0cmluZyA9IHJlbGF0aXZlOwotICAgICAgICBpbnZhbGlkYXRl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBHZXQgcmlkIG9mIGxlYWRpbmcg
YW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICBTdHJp
bmcgcmVsID0gcmVsYXRpdmUuc3RyaXBXaGl0ZVNwYWNlKHNob3VsZFRyaW1Gcm9tVVJMKTsKLQot
ICAgIC8vIEdldCByaWQgb2YgYW55IHRhYnMgYW5kIG5ld2xpbmVzLgotICAgIHJlbCA9IHJlbC5y
ZW1vdmVDaGFyYWN0ZXJzKGlzVGFiTmV3bGluZSk7Ci0KLSAgICAvLyBGb3IgY29tcGF0aWJpbGl0
eSB3aXRoIFdpbiBJRSwgdHJlYXQgYmFja3NsYXNoZXMgYXMgaWYgdGhleSB3ZXJlIHNsYXNoZXMs
Ci0gICAgLy8gYXMgbG9uZyBhcyB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGphdmFzY3JpcHQ6IG9y
IGRhdGE6IFVSTHMuCi0gICAgaWYgKHJlbC5jb250YWlucygnXFwnKSAmJiAhKHByb3RvY29sSXNK
YXZhU2NyaXB0KHJlbCkgfHwgcHJvdG9jb2xJcyhyZWwsICJkYXRhIikpKQotICAgICAgICByZWwg
PSBzdWJzdGl0dXRlQmFja3NsYXNoZXMocmVsKTsKLQotICAgIGJvb2wgYWxsQVNDSUkgPSByZWwu
Y29udGFpbnNPbmx5QVNDSUkoKTsKLSAgICBDaGFyQnVmZmVyIHN0ckJ1ZmZlcjsKLSAgICBjaGFy
KiBzdHI7Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBpZiAoYWxsQVNDSUkpIHsKLSAgICAgICAgbGVu
ID0gcmVsLmxlbmd0aCgpOwotICAgICAgICBzdHJCdWZmZXIucmVzaXplKGxlbiArIDEpOwotICAg
ICAgICBjb3B5QVNDSUkocmVsLCBzdHJCdWZmZXIuZGF0YSgpKTsKLSAgICAgICAgc3RyQnVmZmVy
W2xlbl0gPSAwOwotICAgICAgICBzdHIgPSBzdHJCdWZmZXIuZGF0YSgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmICghZW5jb2RlUmVsYXRpdmVTdHJpbmcocmVsLCBlbmNvZGluZywgc3RyQnVm
ZmVyKSkgewotICAgICAgICAgICAgbV9zdHJpbmcgPSBibGFua1VSTCgpOwotICAgICAgICAgICAg
aW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3RyID0gc3RyQnVmZmVyLmRhdGEoKTsKLSAgICAgICAgbGVuID0gc3RybGVuKHN0cik7Ci0gICAg
fQotCi0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBSRkMsIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJl
IGludGVycHJldGVkIGFzIGFuCi0gICAgLy8gYWJzb2x1dGUgVVJJIGlmIHBvc3NpYmxlLCB1c2lu
ZyB0aGUgImxlZnRtb3N0LCBsb25nZXN0IgotICAgIC8vIGFsZ29yaXRobS4gSWYgdGhlIFVSSSBy
ZWZlcmVuY2UgaXMgYWJzb2x1dGUgaXQgd2lsbCBoYXZlIGEKLSAgICAvLyBzY2hlbWUsIG1lYW5p
bmcgdGhhdCBpdCB3aWxsIGhhdmUgYSBjb2xvbiBiZWZvcmUgdGhlIGZpcnN0Ci0gICAgLy8gbm9u
LXNjaGVtZSBlbGVtZW50LgotICAgIGJvb2wgYWJzb2x1dGUgPSBmYWxzZTsKLSAgICBjaGFyKiBw
ID0gc3RyOwotICAgIGlmIChpc1NjaGVtZUZpcnN0Q2hhcigqcCkpIHsKLSAgICAgICAgKytwOwot
ICAgICAgICB3aGlsZSAoaXNTY2hlbWVDaGFyKCpwKSkgewotICAgICAgICAgICAgKytwOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICgqcCA9PSAnOicpIHsKLSAgICAgICAgICAgIGlmIChwWzFdICE9
ICcvJyAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGJhc2UucHJvdG9jb2woKSwgU3RyaW5nVmll
dyhyZWludGVycHJldF9jYXN0PExDaGFyKj4oc3RyKSwgcCAtIHN0cikpICYmIGJhc2UuaXNIaWVy
YXJjaGljYWwoKSkKLSAgICAgICAgICAgICAgICBzdHIgPSBwICsgMTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBDaGFyQnVmZmVyIHBhcnNlQnVmZmVyOwotCi0gICAgaWYgKGFic29sdXRlKSB7Ci0gICAg
ICAgIHBhcnNlKHN0ciwgJnJlbGF0aXZlKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB0
aGUgYmFzZSBpcyBlbXB0eSBvciBvcGFxdWUgKGUuZy4gZGF0YTogb3IgamF2YXNjcmlwdDopLCB0
aGVuIHRoZSBVUkwgaXMgaW52YWxpZAotICAgICAgICAvLyB1bmxlc3MgdGhlIHJlbGF0aXZlIFVS
TCBpcyBhIHNpbmdsZSBmcmFnbWVudC4KLSAgICAgICAgaWYgKCFiYXNlLmlzSGllcmFyY2hpY2Fs
KCkpIHsKLSAgICAgICAgICAgIGlmIChzdHJbMF0gPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAg
YXBwZW5kQVNDSUkoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UubV9xdWVyeUVuZCksIHN0ciwgbGVu
LCBwYXJzZUJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgcGFyc2UocGFyc2VCdWZmZXIuZGF0YSgp
LCAmcmVsYXRpdmUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX3N0
cmluZyA9IHJlbGF0aXZlOwotICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAo
c3RyWzBdKSB7Ci0gICAgICAgIGNhc2UgJ1wwJzoKLSAgICAgICAgICAgIC8vIFRoZSByZWZlcmVu
Y2UgaXMgZW1wdHksIHNvIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIHNhbWUgZG9jdW1lbnQg
d2l0aCBhbnkgZnJhZ21lbnQgaWRlbnRpZmllciByZW1vdmVkLgotICAgICAgICAgICAgKnRoaXMg
PSBiYXNlOwotICAgICAgICAgICAgcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnIyc6IHsKLSAgICAgICAgICAgIC8vIG11c3QgYmUg
ZnJhZ21lbnQtb25seSByZWZlcmVuY2UKLSAgICAgICAgICAgIGFwcGVuZEFTQ0lJKGJhc2UubV9z
dHJpbmcubGVmdChiYXNlLm1fcXVlcnlFbmQpLCBzdHIsIGxlbiwgcGFyc2VCdWZmZXIpOwotICAg
ICAgICAgICAgcGFyc2UocGFyc2VCdWZmZXIuZGF0YSgpLCAmcmVsYXRpdmUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAnPyc6IHsKLSAgICAgICAgICAgIC8v
IHF1ZXJ5LW9ubHkgcmVmZXJlbmNlLCBzcGVjaWFsIGNhc2UgbmVlZGVkIGZvciBub24tVVJMIHJl
c3VsdHMKLSAgICAgICAgICAgIGFwcGVuZEFTQ0lJKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLm1f
cGF0aEVuZCksIHN0ciwgbGVuLCBwYXJzZUJ1ZmZlcik7Ci0gICAgICAgICAgICBwYXJzZShwYXJz
ZUJ1ZmZlci5kYXRhKCksICZyZWxhdGl2ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgIC8vIG11c3QgYmUgbmV0LXBhdGggb3Ig
YWJzb2x1dGUtcGF0aCByZWZlcmVuY2UKLSAgICAgICAgICAgIGlmIChzdHJbMV0gPT0gJy8nKSB7
Ci0gICAgICAgICAgICAgICAgLy8gbmV0LXBhdGgKLSAgICAgICAgICAgICAgICBhcHBlbmRBU0NJ
SShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5tX3NjaGVtZUVuZCArIDEpLCBzdHIsIGxlbiwgcGFy
c2VCdWZmZXIpOwotICAgICAgICAgICAgICAgIHBhcnNlKHBhcnNlQnVmZmVyLmRhdGEoKSwgJnJl
bGF0aXZlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gYWJzLXBh
dGgKLSAgICAgICAgICAgICAgICBhcHBlbmRBU0NJSShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5t
X3BvcnRFbmQpLCBzdHIsIGxlbiwgcGFyc2VCdWZmZXIpOwotICAgICAgICAgICAgICAgIHBhcnNl
KHBhcnNlQnVmZmVyLmRhdGEoKSwgJnJlbGF0aXZlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIC8vIG11c3QgYmUgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UKLQotICAgICAgICAgICAgICAg
IC8vIEJhc2UgcGFydCBwbHVzIHJlbGF0aXZlIHBhcnQgcGx1cyBvbmUgcG9zc2libGUgc2xhc2gg
YWRkZWQgaW4gYmV0d2VlbiBwbHVzIHRlcm1pbmF0aW5nIFwwIGJ5dGUuCi0gICAgICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSBiYXNlLm1fcGF0aEVuZCArIDEgKyBsZW4gKyAx
OwotICAgICAgICAgICAgICAgIHBhcnNlQnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKLQotICAg
ICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlclBvcyA9IHBhcnNlQnVmZmVyLmRhdGEoKTsKLSAgICAg
ICAgICAgICAgICBjaGFyKiBidWZmZXJTdGFydCA9IGJ1ZmZlclBvczsKLQotICAgICAgICAgICAg
ICAgIC8vIGZpcnN0IGNvcHkgZXZlcnl0aGluZyBiZWZvcmUgdGhlIHBhdGggZnJvbSB0aGUgYmFz
ZQotICAgICAgICAgICAgICAgIENoYXJCdWZmZXIgYmFzZVN0cmluZ0J1ZmZlcihiYXNlLm1fc3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBjb3B5QVNDSUkoYmFzZS5tX3N0cmluZywg
YmFzZVN0cmluZ0J1ZmZlci5kYXRhKCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJh
c2VTdHJpbmcgPSBiYXNlU3RyaW5nQnVmZmVyLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBiYXNlU3RyaW5nU3RhcnQgPSBiYXNlU3RyaW5nOwotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHBhdGhTdGFydCA9IGJhc2VTdHJpbmdTdGFydCArIGJhc2UubV9wb3J0RW5kOwot
ICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nU3RhcnQgPCBwYXRoU3RhcnQpCi0gICAg
ICAgICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICpiYXNlU3RyaW5nU3RhcnQrKzsKLSAgICAg
ICAgICAgICAgICBjaGFyKiBidWZmZXJQYXRoU3RhcnQgPSBidWZmZXJQb3M7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBub3cgY29weSB0aGUgYmFzZSBwYXRoCi0gICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogYmFzZVN0cmluZ0VuZCA9IGJhc2VTdHJpbmcgKyBiYXNlLm1fcGF0aEVuZDsKLQotICAg
ICAgICAgICAgICAgIC8vIGdvIGJhY2sgdG8gdGhlIGxhc3Qgc2xhc2gKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoYmFzZVN0cmluZ0VuZCA+IGJhc2VTdHJpbmdTdGFydCAmJiBiYXNlU3RyaW5nRW5k
Wy0xXSAhPSAnLycpCi0gICAgICAgICAgICAgICAgICAgIGJhc2VTdHJpbmdFbmQtLTsKLQotICAg
ICAgICAgICAgICAgIGlmIChiYXNlU3RyaW5nRW5kID09IGJhc2VTdHJpbmdTdGFydCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBubyBwYXRoIGluIGJhc2UsIGFkZCBhIHBhdGggc2VwYXJhdG9y
IGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZS5tX3NjaGVtZUVuZCAr
IDEgIT0gYmFzZS5tX3BhdGhFbmQgJiYgKnN0ciAmJiAqc3RyICE9ICc/JyAmJiAqc3RyICE9ICcj
JykKLSAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICcvJzsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gY29weVBh
dGhSZW1vdmluZ0RvdHMoYnVmZmVyUG9zLCBiYXNlU3RyaW5nU3RhcnQsIDAsIGJhc2VTdHJpbmdF
bmQgLSBiYXNlU3RyaW5nU3RhcnQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHJlbFN0cmluZ1N0YXJ0ID0gc3RyOwotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHJlbFN0cmluZ1BvcyA9IHJlbFN0cmluZ1N0YXJ0OwotCi0gICAgICAgICAgICAg
ICAgd2hpbGUgKCpyZWxTdHJpbmdQb3MgJiYgKnJlbFN0cmluZ1BvcyAhPSAnPycgJiYgKnJlbFN0
cmluZ1BvcyAhPSAnIycpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1sw
XSA9PSAnLicgJiYgYnVmZmVyUG9zWy0xXSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc1BhdGhTZWdtZW50RW5kQ2hhcihyZWxTdHJpbmdQb3NbMV0pKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyICIuIiBzZWdtZW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbFN0cmluZ1BvcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWxTdHJpbmdQ
b3NbMV0gPT0gJy4nICYmIGlzUGF0aFNlZ21lbnRFbmRDaGFyKHJlbFN0cmluZ1Bvc1syXSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgIi4uIiBzZWdtZW50IGFu
ZCByZXdpbmQgdGhlIGxhc3Qgc2VnbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBSRkMgbGVhdmVzIGl0IHVwIHRvIHRoZSBhcHAgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0
aCBleGNlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAiLi4iIHNlZ21lbnRzIC0g
d2UgY2hvb3NlIHRvIGRyb3AgdGhlbSBzaW5jZSBzb21lIHdlYiBjb250ZW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVsaWVzIG9uIHRoaXMuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsU3RyaW5nUG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbFN0cmluZ1BvcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZm
ZXJQb3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBidWZmZXJQb3MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVm
ZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSAgJiYgYnVmZmVyUG9zWy0xXSAhPSAnLycpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcy0tOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlclBvcyA9ICpy
ZWxTdHJpbmdQb3M7Ci0gICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcysrOwotICAgICAg
ICAgICAgICAgICAgICBidWZmZXJQb3MrKzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBhbGwgZG9uZSB3aXRoIHRoZSBwYXRoIHdvcmssIG5vdyBjb3B5IGFueSByZW1h
aW5kZXIKLSAgICAgICAgICAgICAgICAvLyBvZiB0aGUgcmVsYXRpdmUgcmVmZXJlbmNlOyB0aGlz
IHdpbGwgYWxzbyBhZGQgYSBudWxsIHRlcm1pbmF0b3IKLSAgICAgICAgICAgICAgICBjb25zdCBz
aXplX3QgY3VycmVudE9mZnNldCA9IGJ1ZmZlclBvcyAtIGJ1ZmZlclN0YXJ0OwotICAgICAgICAg
ICAgICAgIGF1dG8gcmVtYWluaW5nQnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemUgLSBjdXJyZW50T2Zm
c2V0OwotICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0ICsgc3RybGVuKHJlbFN0
cmluZ1BvcykgKyAxIDw9IGJ1ZmZlclNpemUpOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoYnVm
ZmVyUG9zLCByZWxTdHJpbmdQb3MsIHJlbWFpbmluZ0J1ZmZlclNpemUpOwotICAgICAgICAgICAg
ICAgIGJ1ZmZlclBvc1tyZW1haW5pbmdCdWZmZXJTaXplIC0gMV0gPSAnXDAnOwotCi0gICAgICAg
ICAgICAgICAgcGFyc2UocGFyc2VCdWZmZXIuZGF0YSgpLCAmcmVsYXRpdmUpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBVUkwg
VVJMOjppc29sYXRlZENvcHkoKSBjb25zdAogewogICAgIFVSTCByZXN1bHQgPSAqdGhpczsKQEAg
LTg5OSwyMCArNjQwLDEzIEBAIGJvb2wgVVJMOjpzZXRQcm90b2NvbChjb25zdCBTdHJpbmcmIHMp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAg
IGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2VyIHBhcnNl
cihtYWtlU3RyaW5nKG5ld1Byb3RvY29sLCAiOiIsIG1fc3RyaW5nKSk7Ci0gICAgICAgICAgICAq
dGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwYXJz
ZShuZXdQcm90b2NvbCArICc6JyArIG1fc3RyaW5nKTsKKyAgICAgICAgVVJMUGFyc2VyIHBhcnNl
cihtYWtlU3RyaW5nKG5ld1Byb3RvY29sLCAiOiIsIG1fc3RyaW5nKSk7CisgICAgICAgICp0aGlz
ID0gcGFyc2VyLnJlc3VsdCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBp
ZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtl
U3RyaW5nKG5ld1Byb3RvY29sLCBtX3N0cmluZy5zdWJzdHJpbmcobV9zY2hlbWVFbmQpKSk7Ci0g
ICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxzZQotICAgICAgICBwYXJz
ZShuZXdQcm90b2NvbCArIG1fc3RyaW5nLnN1YnN0cmluZyhtX3NjaGVtZUVuZCkpOwotCisgICAg
VVJMUGFyc2VyIHBhcnNlcihtYWtlU3RyaW5nKG5ld1Byb3RvY29sLCBtX3N0cmluZy5zdWJzdHJp
bmcobV9zY2hlbWVFbmQpKSk7CisgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTk3OCwyMyArNzEyLDE3IEBAIHZvaWQgVVJMOjpzZXRIb3N0KGNv
bnN0IFN0cmluZyYgcykKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIvLyIpOwogICAg
IGJ1aWxkZXIuYXBwZW5kKFN0cmluZ1ZpZXcoZW5jb2RlZEhvc3ROYW1lLmRhdGEoKSwgZW5jb2Rl
ZEhvc3ROYW1lLnNpemUoKSkpOwogICAgIGJ1aWxkZXIuYXBwZW5kKG1fc3RyaW5nLnN1YnN0cmlu
ZyhtX2hvc3RFbmQpKTsKLSAgICAKLSAgICBpZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsKLSAg
ICAgICAgVVJMUGFyc2VyIHBhcnNlcihidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICAqdGhp
cyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFyc2UoYnVpbGRlci50
b1N0cmluZygpKTsKKworICAgIFVSTFBhcnNlciBwYXJzZXIoYnVpbGRlci50b1N0cmluZygpKTsK
KyAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKIH0KIAogdm9pZCBVUkw6OnJlbW92ZVBvcnQo
KQogewogICAgIGlmIChtX2hvc3RFbmQgPT0gbV9wb3J0RW5kKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgIFVSTFBhcnNlciBwYXJzZXIo
bV9zdHJpbmcubGVmdChtX2hvc3RFbmQpICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9ydEVuZCkp
OwotICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
cGFyc2UobV9zdHJpbmcubGVmdChtX2hvc3RFbmQpICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9y
dEVuZCkpOworICAgIFVSTFBhcnNlciBwYXJzZXIobV9zdHJpbmcubGVmdChtX2hvc3RFbmQpICsg
bV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9ydEVuZCkpOworICAgICp0aGlzID0gcGFyc2VyLnJlc3Vs
dCgpOwogfQogCiB2b2lkIFVSTDo6c2V0UG9ydCh1bnNpZ25lZCBzaG9ydCBpKQpAQCAtMTAwNSwx
MSArNzMzLDggQEAgdm9pZCBVUkw6OnNldFBvcnQodW5zaWduZWQgc2hvcnQgaSkKICAgICBib29s
IGNvbG9uTmVlZGVkID0gbV9wb3J0RW5kID09IG1faG9zdEVuZDsKICAgICB1bnNpZ25lZCBwb3J0
U3RhcnQgPSAoY29sb25OZWVkZWQgPyBtX2hvc3RFbmQgOiBtX2hvc3RFbmQgKyAxKTsKIAotICAg
IGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1h
a2VTdHJpbmcobV9zdHJpbmcubGVmdChwb3J0U3RhcnQpLCAoY29sb25OZWVkZWQgPyAiOiIgOiAi
IiksIFN0cmluZzo6bnVtYmVyKGkpLCBtX3N0cmluZy5zdWJzdHJpbmcobV9wb3J0RW5kKSkpOwot
ICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFy
c2UobV9zdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVkID8gIjoiIDogIiIpICsg
U3RyaW5nOjpudW1iZXIoaSkgKyBtX3N0cmluZy5zdWJzdHJpbmcobV9wb3J0RW5kKSk7CisgICAg
VVJMUGFyc2VyIHBhcnNlcihtYWtlU3RyaW5nKG1fc3RyaW5nLmxlZnQocG9ydFN0YXJ0KSwgKGNv
bG9uTmVlZGVkID8gIjoiIDogIiIpLCBTdHJpbmc6Om51bWJlcihpKSwgbV9zdHJpbmcuc3Vic3Ry
aW5nKG1fcG9ydEVuZCkpKTsKKyAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKIH0KIAogdm9p
ZCBVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQpCkBAIC0xMDUw
LDExICs3NzUsOCBAQCB2b2lkIFVSTDo6c2V0SG9zdEFuZFBvcnQoY29uc3QgU3RyaW5nJiBoCiAg
ICAgfQogICAgIGJ1aWxkZXIuYXBwZW5kKG1fc3RyaW5nLnN1YnN0cmluZyhtX3BvcnRFbmQpKTsK
IAotICAgIGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAgICBVUkxQYXJzZXIgcGFy
c2VyKGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgp
OwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZShidWlsZGVyLnRvU3RyaW5nKCkpOworICAgIFVS
TFBhcnNlciBwYXJzZXIoYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAqdGhpcyA9IHBhcnNlci5y
ZXN1bHQoKTsKIH0KIAogdm9pZCBVUkw6OnNldFVzZXIoY29uc3QgU3RyaW5nJiB1c2VyKQpAQCAt
MTA3MywyMiArNzk1LDE2IEBAIHZvaWQgVVJMOjpzZXRVc2VyKGNvbnN0IFN0cmluZyYgdXNlcikK
ICAgICAgICAgLy8gQWRkICdAJyBpZiB3ZSBkaWRuJ3QgaGF2ZSBvbmUgYmVmb3JlLgogICAgICAg
ICBpZiAoZW5kID09IG1faG9zdEVuZCB8fCAoZW5kID09IG1fcGFzc3dvcmRFbmQgJiYgbV9zdHJp
bmdbZW5kXSAhPSAnQCcpKQogICAgICAgICAgICAgdS5hcHBlbmQoJ0AnKTsKLSAgICAgICAgaWYg
KFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1h
a2VTdHJpbmcobV9zdHJpbmcubGVmdChtX3VzZXJTdGFydCksIHUsIG1fc3RyaW5nLnN1YnN0cmlu
ZyhlbmQpKSk7Ci0gICAgICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fdXNlclN0YXJ0KSArIHUg
KyBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSk7CisgICAgICAgIFVSTFBhcnNlciBwYXJzZXIobWFr
ZVN0cmluZyhtX3N0cmluZy5sZWZ0KG1fdXNlclN0YXJ0KSwgdSwgbV9zdHJpbmcuc3Vic3RyaW5n
KGVuZCkpKTsKKyAgICAgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gUmVtb3ZlICdAJyBpZiB3ZSBub3cgaGF2ZSBuZWl0aGVyIHVzZXIgbm9yIHBh
c3N3b3JkLgogICAgICAgICBpZiAobV91c2VyRW5kID09IG1fcGFzc3dvcmRFbmQgJiYgZW5kICE9
IG1faG9zdEVuZCAmJiBtX3N0cmluZ1tlbmRdID09ICdAJykKICAgICAgICAgICAgIGVuZCArPSAx
OwogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhcnNlIGluIHRoZSBleHRyZW1lbHkgY29t
bW9uIGNhc2Ugd2hlcmUgd2UgYXJlIG5vdCBnb2luZyB0byBtYWtlIGEgY2hhbmdlLgogICAgICAg
ICBpZiAobV91c2VyU3RhcnQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBpZiAoVVJMUGFyc2VyOjpl
bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VTdHJpbmco
bV9zdHJpbmcubGVmdChtX3VzZXJTdGFydCksIG1fc3RyaW5nLnN1YnN0cmluZyhlbmQpKSk7Ci0g
ICAgICAgICAgICAgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fdXNlclN0YXJ0KSArIG1f
c3RyaW5nLnN1YnN0cmluZyhlbmQpKTsKKyAgICAgICAgICAgIFVSTFBhcnNlciBwYXJzZXIobWFr
ZVN0cmluZyhtX3N0cmluZy5sZWZ0KG1fdXNlclN0YXJ0KSwgbV9zdHJpbmcuc3Vic3RyaW5nKGVu
ZCkpKTsKKyAgICAgICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTEwNiwyMiArODIyLDE2IEBAIHZvaWQgVVJMOjpzZXRQYXNzKGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQKICAgICAgICAgLy8gRWF0IHRoZSBleGlzdGluZyAnQCcgc2luY2Ugd2Ug
YXJlIGdvaW5nIHRvIGFkZCBvdXIgb3duLgogICAgICAgICBpZiAoZW5kICE9IG1faG9zdEVuZCAm
JiBtX3N0cmluZ1tlbmRdID09ICdAJykKICAgICAgICAgICAgIGVuZCArPSAxOwotICAgICAgICBp
ZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgICAgIFVSTFBhcnNlciBwYXJzZXIo
bWFrZVN0cmluZyhtX3N0cmluZy5sZWZ0KG1fdXNlckVuZCksIHAsIG1fc3RyaW5nLnN1YnN0cmlu
ZyhlbmQpKSk7Ci0gICAgICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fdXNlckVuZCkgKyBwICsg
bV9zdHJpbmcuc3Vic3RyaW5nKGVuZCkpOworICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VT
dHJpbmcobV9zdHJpbmcubGVmdChtX3VzZXJFbmQpLCBwLCBtX3N0cmluZy5zdWJzdHJpbmcoZW5k
KSkpOworICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dv
cmQuCiAgICAgICAgIGlmIChtX3VzZXJTdGFydCA9PSBtX3VzZXJFbmQgJiYgZW5kICE9IG1faG9z
dEVuZCAmJiBtX3N0cmluZ1tlbmRdID09ICdAJykKICAgICAgICAgICAgIGVuZCArPSAxOwogICAg
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhcnNlIGluIHRoZSBleHRyZW1lbHkgY29tbW9uIGNh
c2Ugd2hlcmUgd2UgYXJlIG5vdCBnb2luZyB0byBtYWtlIGEgY2hhbmdlLgogICAgICAgICBpZiAo
bV91c2VyRW5kICE9IGVuZCkgewotICAgICAgICAgICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtlU3RyaW5nKG1fc3RyaW5n
LmxlZnQobV91c2VyRW5kKSwgbV9zdHJpbmcuc3Vic3RyaW5nKGVuZCkpKTsKLSAgICAgICAgICAg
ICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV91c2VyRW5kKSArIG1fc3RyaW5nLnN1YnN0
cmluZyhlbmQpKTsKKyAgICAgICAgICAgIFVSTFBhcnNlciBwYXJzZXIobWFrZVN0cmluZyhtX3N0
cmluZy5sZWZ0KG1fdXNlckVuZCksIG1fc3RyaW5nLnN1YnN0cmluZyhlbmQpKSk7CisgICAgICAg
ICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEx
MzMsMTAgKzg0Myw3IEBAIHZvaWQgVVJMOjpzZXRGcmFnbWVudElkZW50aWZpZXIoU3RyaW5nVmkK
IAogICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSB0aGUgaWRlbnRpZmllciBh
bHJlYWR5IGhhcHBlbnMgdG8gYmUgZXF1YWwgdG8gd2hhdCB3YXMgcGFzc2VkPwogICAgIC8vIEZJ
WE1FOiBJcyBpdCBjb3JyZWN0IHRvIGRvIHRoaXMgd2l0aG91dCBlbmNvZGluZyBhbmQgZXNjYXBp
bmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnM/Ci0gICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKQot
ICAgICAgICAqdGhpcyA9IFVSTFBhcnNlciB7IG1ha2VTdHJpbmcoU3RyaW5nVmlldyB7IG1fc3Ry
aW5nIH0uc3Vic3RyaW5nKDAsIG1fcXVlcnlFbmQpLCAnIycsIGlkZW50aWZpZXIpIH0ucmVzdWx0
KCk7Ci0gICAgZWxzZQotICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fcXVlcnlFbmQpICsg
IiMiICsgaWRlbnRpZmllcik7CisgICAgKnRoaXMgPSBVUkxQYXJzZXIgeyBtYWtlU3RyaW5nKFN0
cmluZ1ZpZXcgeyBtX3N0cmluZyB9LnN1YnN0cmluZygwLCBtX3F1ZXJ5RW5kKSwgJyMnLCBpZGVu
dGlmaWVyKSB9LnJlc3VsdCgpOwogfQogCiB2b2lkIFVSTDo6cmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCkKQEAgLTExNjEsMTcgKzg2OCwxMSBAQCB2b2lkIFVSTDo6c2V0UXVlcnkoY29uc3QgU3Ry
aW5nJiBxdWVyeSkKICAgICAvLyBhY2Nlc3MgdG8gdGhlIGRvY3VtZW50IGluIHRoaXMgZnVuY3Rp
b24uCiAgICAgLy8gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTYxMTc2CiAgICAgaWYgKChxdWVyeS5p
c0VtcHR5KCkgfHwgcXVlcnlbMF0gIT0gJz8nKSAmJiAhcXVlcnkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXIgcGFy
c2VyKG1ha2VTdHJpbmcobV9zdHJpbmcubGVmdChtX3BhdGhFbmQpLCAiPyIsIHF1ZXJ5LCBtX3N0
cmluZy5zdWJzdHJpbmcobV9xdWVyeUVuZCkpKTsKLSAgICAgICAgICAgICp0aGlzID0gcGFyc2Vy
LnJlc3VsdCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBhcnNlKG1fc3RyaW5nLmxl
ZnQobV9wYXRoRW5kKSArICI/IiArIHF1ZXJ5ICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcXVlcnlF
bmQpKTsKKyAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtlU3RyaW5nKG1fc3RyaW5nLmxlZnQo
bV9wYXRoRW5kKSwgIj8iLCBxdWVyeSwgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcXVlcnlFbmQpKSk7
CisgICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2VyIHBhcnNl
cihtYWtlU3RyaW5nKG1fc3RyaW5nLmxlZnQobV9wYXRoRW5kKSwgcXVlcnksIG1fc3RyaW5nLnN1
YnN0cmluZyhtX3F1ZXJ5RW5kKSkpOwotICAgICAgICAgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0
KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGFyc2UobV9zdHJpbmcubGVmdChtX3Bh
dGhFbmQpICsgcXVlcnkgKyBtX3N0cmluZy5zdWJzdHJpbmcobV9xdWVyeUVuZCkpOworICAgICAg
ICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VTdHJpbmcobV9zdHJpbmcubGVmdChtX3BhdGhFbmQpLCBx
dWVyeSwgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcXVlcnlFbmQpKSk7CisgICAgICAgICp0aGlzID0g
cGFyc2VyLnJlc3VsdCgpOwogICAgIH0KIAogfQpAQCAtMTE4NywxMSArODg4LDggQEAgdm9pZCBV
Ukw6OnNldFBhdGgoY29uc3QgU3RyaW5nJiBzKQogICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBw
YXRoWzBdICE9ICcvJykKICAgICAgICAgcGF0aCA9ICIvIiArIHBhdGg7CiAKLSAgICBpZiAoVVJM
UGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtlU3RyaW5n
KG1fc3RyaW5nLmxlZnQobV9wb3J0RW5kKSwgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhw
YXRoKSwgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcGF0aEVuZCkpKTsKLSAgICAgICAgKnRoaXMgPSBw
YXJzZXIucmVzdWx0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQo
bV9wb3J0RW5kKSArIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMocGF0aCkgKyBtX3N0cmlu
Zy5zdWJzdHJpbmcobV9wYXRoRW5kKSk7CisgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtlU3RyaW5n
KG1fc3RyaW5nLmxlZnQobV9wb3J0RW5kKSwgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhw
YXRoKSwgbV9zdHJpbmcuc3Vic3RyaW5nKG1fcGF0aEVuZCkpKTsKKyAgICAqdGhpcyA9IHBhcnNl
ci5yZXN1bHQoKTsKIH0KIAogU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBT
dHJpbmcmIHN0cmluZykKQEAgLTEyMTEsMTkwICs5MDksMTEgQEAgc3RhdGljIHZvaWQgYXBwZW5k
RXNjYXBlZENoYXIoY2hhciomIGJ1ZgogICAgIHBsYWNlQnl0ZUFzSGV4KGMsIGJ1ZmZlcik7CiB9
CiAKLXN0YXRpYyB2b2lkIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMoY2hhciomIGJ1ZmZlciwgY29u
c3QgY2hhciogc3RyU3RhcnQsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgY2hhciogcCA9IGJ1ZmZl
cjsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IHN0clN0YXJ0OwotICAgIGNvbnN0IGNoYXIqIHN0
ckVuZCA9IHN0clN0YXJ0ICsgbGVuZ3RoOwotICAgIHdoaWxlIChzdHIgPCBzdHJFbmQpIHsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciBjID0gKnN0cisrOwotICAgICAgICBpZiAoaXNCYWRDaGFyKGMp
KSB7Ci0gICAgICAgICAgICBpZiAoYyA9PSAnJScgfHwgYyA9PSAnPycpCi0gICAgICAgICAgICAg
ICAgKnArKyA9IGM7Ci0gICAgICAgICAgICBlbHNlIGlmIChjICE9IDB4MDkgJiYgYyAhPSAweDBh
ICYmIGMgIT0gMHgwZCkKLSAgICAgICAgICAgICAgICBhcHBlbmRFc2NhcGVkQ2hhcihwLCBjKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAqcCsrID0gYzsKLSAgICB9Ci0KLSAgICBidWZm
ZXIgPSBwOwotfQotCi1zdGF0aWMgdm9pZCBlc2NhcGVBbmRBcHBlbmROb25IaWVyYXJjaGljYWxQ
YXJ0KGNoYXIqJiBidWZmZXIsIGNvbnN0IGNoYXIqIHN0clN0YXJ0LCBzaXplX3QgbGVuZ3RoKQot
ewotICAgIGNoYXIqIHAgPSBidWZmZXI7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIgPSBzdHJTdGFy
dDsKLSAgICBjb25zdCBjaGFyKiBzdHJFbmQgPSBzdHJTdGFydCArIGxlbmd0aDsKLSAgICB3aGls
ZSAoc3RyIDwgc3RyRW5kKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpzdHIrKzsKLSAg
ICAgICAgLy8gU3RyaXAgQ1IsIExGIGFuZCBUYWIgZnJvbSBmcmFnbWVudHMsIHBlcjoKLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3NzAKLSAgICAg
ICAgaWYgKGMgPT0gMHgwOSB8fCBjID09IDB4MGEgfHwgYyA9PSAweDBkKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgLy8gQ2hyb21lIGFuZCBJRSBhbGxvdyBub24tYXNjaWkgY2hh
cmFjdGVycyBpbiBmcmFnbWVudHMsIGhvd2V2ZXIgZG9pbmcKLSAgICAgICAgLy8gc28gd291bGQg
aGl0IGFuIEFTU0VSVCBpbiBjaGVja0VuY29kZWRTdHJpbmcsIHNvIGZvciBub3cgd2UgZG9uJ3Qu
Ci0gICAgICAgIGlmIChjIDwgMHgyMCB8fCBjID49IDEyNykgewotICAgICAgICAgICAgYXBwZW5k
RXNjYXBlZENoYXIocCwgYyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICAqcCsrID0gYzsKLSAgICB9Ci0KLSAgICBidWZmZXIgPSBwOwotfQotCi0vLyBjb3B5IGEg
cGF0aCwgYWNjb3VudGluZyBmb3IgIi4iIGFuZCAiLi4iIHNlZ21lbnRzCi1zdGF0aWMgdW5zaWdu
ZWQgY29weVBhdGhSZW1vdmluZ0RvdHMoY2hhciogZHN0LCBjb25zdCBjaGFyKiBzcmMsIHVuc2ln
bmVkIHNyY1N0YXJ0LCB1bnNpZ25lZCBzcmNFbmQpCi17Ci0gICAgY2hhciogYnVmZmVyUGF0aFN0
YXJ0ID0gZHN0OwotCi0gICAgLy8gZW1wdHkgcGF0aCBpcyBhIHNwZWNpYWwgY2FzZSwgYW5kIG5l
ZWQgbm90IGhhdmUgYSBsZWFkaW5nIHNsYXNoCi0gICAgaWYgKHNyY1N0YXJ0ICE9IHNyY0VuZCkg
ewotICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nU3RhcnQgPSBzcmMgKyBzcmNTdGFydDsK
LSAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZ0VuZCA9IHNyYyArIHNyY0VuZDsKLSAgICAg
ICAgY29uc3QgY2hhciogYmFzZVN0cmluZ1BvcyA9IGJhc2VTdHJpbmdTdGFydDsKLQotICAgICAg
ICAvLyB0aGlzIGNvZGUgaXMgdW5wcmVwYXJlZCBmb3IgcGF0aHMgdGhhdCBkbyBub3QgYmVnaW4g
d2l0aCBhCi0gICAgICAgIC8vIHNsYXNoIGFuZCB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgb25lIGlu
IHRoZSBzb3VyY2Ugc3RyaW5nCi0gICAgICAgIEFTU0VSVChiYXNlU3RyaW5nUG9zWzBdID09ICcv
Jyk7Ci0KLSAgICAgICAgLy8gY29weSB0aGUgbGVhZGluZyBzbGFzaCBpbnRvIHRoZSBkZXN0aW5h
dGlvbgotICAgICAgICAqZHN0ID0gKmJhc2VTdHJpbmdQb3M7Ci0gICAgICAgIGJhc2VTdHJpbmdQ
b3MrKzsKLSAgICAgICAgZHN0Kys7Ci0KLSAgICAgICAgd2hpbGUgKGJhc2VTdHJpbmdQb3MgPCBi
YXNlU3RyaW5nRW5kKSB7Ci0gICAgICAgICAgICBpZiAoYmFzZVN0cmluZ1Bvc1swXSA9PSAnLicg
JiYgZHN0Wy0xXSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVN0cmluZ1Bvc1sx
XSA9PSAnLycgfHwgYmFzZVN0cmluZ1BvcyArIDEgPT0gYmFzZVN0cmluZ0VuZCkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgIi4iIHNlZ21lbnQKLSAgICAgICAgICAgICAgICAg
ICAgYmFzZVN0cmluZ1BvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJhc2VTdHJpbmdQb3NbMV0gPT0gJy4nICYmIChiYXNl
U3RyaW5nUG9zWzJdID09ICcvJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZVN0cmluZ1BvcyArIDIgPT0gYmFzZVN0cmluZ0VuZCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gc2tpcCBvdmVyICIuLiIgc2VnbWVudCBhbmQgcmV3aW5kIHRoZSBsYXN0IHNl
Z21lbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFJGQyBsZWF2ZXMgaXQgdXAgdG8gdGhl
IGFwcCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGV4Y2VzcwotICAgICAgICAgICAgICAgICAg
ICAvLyAiLi4iIHNlZ21lbnRzIC0gd2UgY2hvb3NlIHRvIGRyb3AgdGhlbSBzaW5jZSBzb21lIHdl
YiBjb250ZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlbGllcyBvbiB0aGlzLgotICAgICAg
ICAgICAgICAgICAgICBiYXNlU3RyaW5nUG9zICs9IDM7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChkc3QgPiBidWZmZXJQYXRoU3RhcnQgKyAxKQotICAgICAgICAgICAgICAgICAgICAgICAgZHN0
LS07Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChkc3QgPiBidWZmZXJQYXRoU3RhcnQgJiYg
ZHN0Wy0xXSAhPSAnLycpCi0gICAgICAgICAgICAgICAgICAgICAgICBkc3QtLTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAqZHN0ID0gKmJhc2VTdHJpbmdQb3M7Ci0gICAgICAgICAgICBiYXNlU3Ry
aW5nUG9zKys7Ci0gICAgICAgICAgICBkc3QrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICAqZHN0
ID0gJ1wwJzsKLSAgICByZXR1cm4gZHN0IC0gYnVmZmVyUGF0aFN0YXJ0OwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaGFzU2xhc2hEb3RPckRvdERvdChjb25zdCBjaGFyKiBzdHIpCi17Ci0gICAg
Y29uc3QgdW5zaWduZWQgY2hhciogcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KHN0cik7Ci0gICAgaWYgKCEqcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVu
c2lnbmVkIGNoYXIgcGMgPSAqcDsKLSAgICB3aGlsZSAodW5zaWduZWQgY2hhciBjID0gKisrcCkg
ewotICAgICAgICBpZiAoYyA9PSAnLicgJiYgKHBjID09ICcvJyB8fCBwYyA9PSAnLicpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHBjID0gYzsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFVSTDo6cGFyc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICBjaGVja0VuY29kZWRTdHJpbmcoc3RyaW5nKTsKLQotICAgIENoYXJCdWZmZXIgYnVm
ZmVyKHN0cmluZy5sZW5ndGgoKSArIDEpOwotICAgIGNvcHlBU0NJSShzdHJpbmcsIGJ1ZmZlci5k
YXRhKCkpOwotICAgIGJ1ZmZlcltzdHJpbmcubGVuZ3RoKCldID0gJ1wwJzsKLSAgICBwYXJzZShi
dWZmZXIuZGF0YSgpLCAmc3RyaW5nKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNhbm5vdEJl
QUJhc2VVUkwoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgaHR0cHM6
Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtY2Fubm90LWJlLWEtYmFzZS11cmwtZmxhZyBwcm9w
ZXJseQotICAgIC8vIEFjY29yZGluZyBzcGVjLCB0aGlzIHNob3VsZCBiZSBjb21wdXRlZCBhdCBw
YXJzaW5nIHRpbWUuCi0gICAgLy8gRm9yIHRoZSBtb21lbnQsIHdlIGp1c3QgY2hlY2sgd2hldGhl
ciB0aGUgc2NoZW1lIGlzIHNwZWNpYWwgb3Igbm90LgotICAgIGlmICh1cmwucHJvdG9jb2xJcygi
ZnRwIikgfHwgdXJsLnByb3RvY29sSXMoImZpbGUiKSB8fCB1cmwucHJvdG9jb2xJcygiZ29waGVy
IikgfHwgdXJsLnByb3RvY29sSXMoImh0dHAiKSB8fCB1cmwucHJvdG9jb2xJcygiaHR0cHMiKSB8
fCB1cmwucHJvdG9jb2xJcygid3MiKSB8fCB1cmwucHJvdG9jb2xJcygid3NzIikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gSW1wbGVtZW50YXRpb24g
b2YgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtc2VyaWFsaXppbmcKIFN0cmluZyBV
Ukw6OnNlcmlhbGl6ZShib29sIG9taXRGcmFnbWVudCkgY29uc3QKIHsKLSAgICBpZiAoVVJMUGFy
c2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKG9taXRGcmFnbWVudCkKLSAgICAgICAgICAg
IHJldHVybiBtX3N0cmluZy5sZWZ0KG1fcXVlcnlFbmQpOwotICAgICAgICByZXR1cm4gbV9zdHJp
bmc7Ci0gICAgfQotCi0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHVybEJ1aWxkZXI7Ci0gICAgdXJsQnVpbGRlci5hcHBlbmQo
bV9zdHJpbmcsIDAsIG1fc2NoZW1lRW5kKTsKLSAgICB1cmxCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IjoiKTsKLSAgICB1bnNpZ25lZCBzdGFydCA9IGhvc3RTdGFydCgpOwotICAgIGlmIChzdGFydCA8
IG1faG9zdEVuZCkgewotICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZExpdGVyYWwoIi8vIik7Ci0g
ICAgICAgIGlmIChoYXNVc2VybmFtZSgpKSB7Ci0gICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVu
ZChtX3N0cmluZywgbV91c2VyU3RhcnQsIG1fdXNlckVuZCAtIG1fdXNlclN0YXJ0KTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHBhc3N3b3JkU3RhcnQgPSBtX3VzZXJFbmQgKyAxOwotICAgICAgICAg
ICAgaWYgKGhhc1Bhc3N3b3JkKCkpIHsKLSAgICAgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIjoiKTsKLSAgICAgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChtX3N0cmlu
ZywgcGFzc3dvcmRTdGFydCwgbV9wYXNzd29yZEVuZCAtIHBhc3N3b3JkU3RhcnQpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJAIik7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFNlcmlhbGl6ZSBob3N0IGFjY29yZGluZyBodHRwczov
L3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaG9zdC1zZXJpYWxpemVyIGZvciBJUHY0IGFu
ZCBJUHY2IGFkZHJlc3Nlcy4KLSAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQobV9zdHJpbmcsIHN0
YXJ0LCBtX2hvc3RFbmQgLSBzdGFydCk7Ci0gICAgICAgIGlmIChwb3J0KCkpIHsKLSAgICAgICAg
ICAgIHVybEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOiIpOwotICAgICAgICAgICAgdXJsQnVpbGRl
ci5hcHBlbmROdW1iZXIocG9ydCgpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChwcm90b2NvbElzKCJmaWxlIikpCi0gICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
Ly8iKTsKLSAgICBpZiAoV2ViQ29yZTo6Y2Fubm90QmVBQmFzZVVSTCgqdGhpcykpCi0gICAgICAg
IHVybEJ1aWxkZXIuYXBwZW5kKG1fc3RyaW5nLCBtX3BvcnRFbmQsIG1fcGF0aEVuZCAtIG1fcG9y
dEVuZCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLyIp
OwotICAgICAgICBpZiAobV9wYXRoRW5kID4gbV9wb3J0RW5kKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBwYXRoU3RhcnQgPSBtX3BvcnRFbmQgKyAxOwotICAgICAgICAgICAgdXJsQnVpbGRlci5h
cHBlbmQobV9zdHJpbmcsIHBhdGhTdGFydCwgbV9wYXRoRW5kIC0gcGF0aFN0YXJ0KTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoaGFzUXVlcnkoKSkgewotICAgICAgICB1cmxCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIj8iKTsKLSAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQobV9zdHJpbmcsIG1f
cGF0aEVuZCArIDEsIG1fcXVlcnlFbmQgLSAobV9wYXRoRW5kICsgMSkpOwotICAgIH0KLSAgICBp
ZiAoIW9taXRGcmFnbWVudCAmJiBoYXNGcmFnbWVudCgpKSB7Ci0gICAgICAgIHVybEJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIyIpOwotICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChtX3N0cmluZywg
bV9xdWVyeUVuZCArIDEsIG1fZnJhZ21lbnRFbmQgLSAobV9xdWVyeUVuZCArIDEpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHVybEJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBpZiAob21pdEZyYWdtZW50
KQorICAgICAgICByZXR1cm4gbV9zdHJpbmcubGVmdChtX3F1ZXJ5RW5kKTsKKyAgICByZXR1cm4g
bV9zdHJpbmc7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC0xNDMzLDQ0MCArOTUyLDYgQEAg
c3RhdGljIGlubGluZSBib29sIGVxdWFsKGNvbnN0IGNoYXIqIHN0cgogICAgIHJldHVybiBsZW5n
dGhBID09IGxlbmd0aEIgJiYgZXF1YWwoc3RyaW5nQSwgc3RyaW5nQik7CiB9CiAKLS8vIExpc3Qg
b2YgZGVmYXVsdCBzY2hlbWVzIGlzIHRha2VuIGZyb20gZ29vZ2xlLXVybDoKLS8vIGh0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC9nb29nbGUtdXJsL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL3VybF9j
YW5vbl9zdGR1cmwuY2MjMTIwCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZWZhdWx0UG9ydEZvclNj
aGVtZShjb25zdCBjaGFyKiBwb3J0LCBzaXplX3QgcG9ydExlbmd0aCwgY29uc3QgY2hhciogc2No
ZW1lLCBzaXplX3Qgc2NoZW1lTGVuZ3RoKQotewotICAgIC8vIFRoaXMgc3dpdGNoIGlzIHRoZW9y
ZXRpY2FsbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBJdCBjYW1lIG92ZXIgd2hlbgot
ICAgIC8vIHRoZSBjb2RlIHdhcyBtb3ZlZCBmcm9tIGdvb2dsZS11cmwsIGJ1dCBtYXkgYmUgcmVt
b3ZlZCBsYXRlci4KLSAgICBzd2l0Y2ggKHNjaGVtZUxlbmd0aCkgewotICAgIGNhc2UgMjoKLSAg
ICAgICAgcmV0dXJuIGVxdWFsKHNjaGVtZSwgd3NTY2hlbWUpICYmIGVxdWFsKHBvcnQsIHBvcnRM
ZW5ndGgsIGh0dHBQb3J0KTsKLSAgICBjYXNlIDM6Ci0gICAgICAgIGlmIChlcXVhbChzY2hlbWUs
IGZ0cFNjaGVtZSkpCi0gICAgICAgICAgICByZXR1cm4gZXF1YWwocG9ydCwgcG9ydExlbmd0aCwg
ZnRwUG9ydCk7Ci0gICAgICAgIGlmIChlcXVhbChzY2hlbWUsIHdzc1NjaGVtZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZXF1YWwocG9ydCwgcG9ydExlbmd0aCwgaHR0cHNQb3J0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCBodHRwU2No
ZW1lKSAmJiBlcXVhbChwb3J0LCBwb3J0TGVuZ3RoLCBodHRwUG9ydCk7Ci0gICAgY2FzZSA1Ogot
ICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCBodHRwc1NjaGVtZSkgJiYgZXF1YWwocG9ydCwg
cG9ydExlbmd0aCwgaHR0cHNQb3J0KTsKLSAgICBjYXNlIDY6Ci0gICAgICAgIHJldHVybiBlcXVh
bChzY2hlbWUsIGdvcGhlclNjaGVtZSkgJiYgZXF1YWwocG9ydCwgcG9ydExlbmd0aCwgZ29waGVy
UG9ydCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IGhvc3RQb3J0SXNFbXB0eUJ1dENyZWRlbnRpYWxzQXJlUHJlc2VudCh1bnNpZ25lZCBob3N0U3Rh
cnQsIHVuc2lnbmVkIHBvcnRFbmQsIGNoYXIgdXNlcmluZm9FbmRDaGFyKQotewotICAgIHJldHVy
biB1c2VyaW5mb0VuZENoYXIgPT0gJ0AnICYmIGhvc3RTdGFydCA9PSBwb3J0RW5kOwotfQotCi1z
dGF0aWMgYm9vbCBpc05vbkZpbGVIaWVyYXJjaGljYWxTY2hlbWUoY29uc3QgY2hhciogc2NoZW1l
LCBzaXplX3Qgc2NoZW1lTGVuZ3RoKQotewotICAgIHN3aXRjaCAoc2NoZW1lTGVuZ3RoKSB7Ci0g
ICAgY2FzZSAyOgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCB3c1NjaGVtZSk7Ci0gICAg
Y2FzZSAzOgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCBmdHBTY2hlbWUpIHx8IGVxdWFs
KHNjaGVtZSwgd3NzU2NoZW1lKTsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHJldHVybiBlcXVhbChz
Y2hlbWUsIGh0dHBTY2hlbWUpOwotICAgIGNhc2UgNToKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNj
aGVtZSwgaHR0cHNTY2hlbWUpOwotICAgIGNhc2UgNjoKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNj
aGVtZSwgZ29waGVyU2NoZW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgYm9vbCBpc0Nhbm9uaWNhbEhvc3RuYW1lTG93ZXJjYXNlRm9yU2NoZW1lKGNvbnN0IGNoYXIq
IHNjaGVtZSwgc2l6ZV90IHNjaGVtZUxlbmd0aCkKLXsKLSAgICBzd2l0Y2ggKHNjaGVtZUxlbmd0
aCkgewotICAgIGNhc2UgMjoKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNjaGVtZSwgd3NTY2hlbWUp
OwotICAgIGNhc2UgMzoKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNjaGVtZSwgZnRwU2NoZW1lKSB8
fCBlcXVhbChzY2hlbWUsIHdzc1NjaGVtZSk7Ci0gICAgY2FzZSA0OgotICAgICAgICByZXR1cm4g
ZXF1YWwoc2NoZW1lLCBodHRwU2NoZW1lKSB8fCBlcXVhbChzY2hlbWUsIGZpbGVTY2hlbWUpOwot
ICAgIGNhc2UgNToKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNjaGVtZSwgaHR0cHNTY2hlbWUpOwot
ICAgIGNhc2UgNjoKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNjaGVtZSwgZ29waGVyU2NoZW1lKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFVSTDo6cGFyc2UoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBTdHJpbmcqIG9yaWdpbmFsU3RyaW5nKQotewotICAgIGlmIChVUkxQYXJz
ZXI6OmVuYWJsZWQoKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgaWYgKCF1
cmwgfHwgdXJsWzBdID09ICdcMCcpIHsKLSAgICAgICAgLy8gdmFsaWQgVVJMIG11c3QgYmUgbm9u
LWVtcHR5Ci0gICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJp
bmcgOiB1cmw7Ci0gICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghaXNTY2hlbWVGaXJzdENoYXIodXJsWzBdKSkgewotICAgICAgICAvLyBzY2hl
bWUgbXVzdCBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyCi0gICAgICAgIG1fc3Ry
aW5nID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgIGlu
dmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHNjaGVt
ZUVuZCA9IDA7Ci0gICAgd2hpbGUgKGlzU2NoZW1lQ2hhcih1cmxbc2NoZW1lRW5kXSkpCi0gICAg
ICAgIHNjaGVtZUVuZCsrOwotCi0gICAgaWYgKHVybFtzY2hlbWVFbmRdICE9ICc6JykgewotICAg
ICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwot
ICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCB1c2VyU3RhcnQgPSBzY2hlbWVFbmQgKyAxOwotICAgIHVuc2lnbmVkIHVzZXJFbmQ7Ci0g
ICAgdW5zaWduZWQgcGFzc3dvcmRTdGFydDsKLSAgICB1bnNpZ25lZCBwYXNzd29yZEVuZDsKLSAg
ICB1bnNpZ25lZCBob3N0U3RhcnQ7Ci0gICAgdW5zaWduZWQgaG9zdEVuZDsKLSAgICB1bnNpZ25l
ZCBwb3J0U3RhcnQ7Ci0gICAgdW5zaWduZWQgcG9ydEVuZDsKLQotICAgIGJvb2wgaGllcmFyY2hp
Y2FsID0gdXJsW3NjaGVtZUVuZCArIDFdID09ICcvJzsKLSAgICBib29sIGhhc1NlY29uZFNsYXNo
ID0gaGllcmFyY2hpY2FsICYmIHVybFtzY2hlbWVFbmQgKyAyXSA9PSAnLyc7Ci0KLSAgICBib29s
IGlzRmlsZSA9IHNjaGVtZUVuZCA9PSA0Ci0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwodXJsWzBdLCAnZicpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dXJsWzFdLCAnaScpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodXJsWzJd
LCAnbCcpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodXJsWzNdLCAnZScp
OwotCi0gICAgbV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbCh1cmxbMF0sICdoJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1
cmxbMV0sICd0JykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbMl0s
ICd0JykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbM10sICdwJykK
LSAgICAgICAgJiYgKHVybFs0XSA9PSAnOicgfHwgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dXJsWzRdLCAncycpICYmIHVybFs1XSA9PSAnOicpKTsKLQotICAgIGlmICgoaGllcmFyY2hpY2Fs
ICYmIGhhc1NlY29uZFNsYXNoKSB8fCBpc05vbkZpbGVIaWVyYXJjaGljYWxTY2hlbWUodXJsLCBz
Y2hlbWVFbmQpKSB7Ci0gICAgICAgIC8vIFRoZSBwYXJ0IGFmdGVyIHRoZSBzY2hlbWUgaXMgZWl0
aGVyIGEgbmV0X3BhdGggb3IgYW4gYWJzX3BhdGggd2hvc2UgZmlyc3QgcGF0aCBzZWdtZW50IGlz
IGVtcHR5LgotICAgICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXV0aG9yaXR5LgotICAgICAg
ICAvLyBGSVhNRTogQXV0aG9yaXR5IGNoYXJhY3RlcnMgbWF5IGJlIHNjYW5uZWQgdHdpY2UsIGFu
ZCBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGZhc3Rlci4KLQotICAgICAgICBpZiAoaGllcmFyY2hp
Y2FsKSB7Ci0gICAgICAgICAgICB1c2VyU3RhcnQrKzsKLSAgICAgICAgICAgIGlmIChoYXNTZWNv
bmRTbGFzaCkgewotICAgICAgICAgICAgICAgIHVzZXJTdGFydCsrOwotICAgICAgICAgICAgICAg
IGlmIChpc05vbkZpbGVIaWVyYXJjaGljYWxTY2hlbWUodXJsLCBzY2hlbWVFbmQpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHdoaWxlICh1cmxbdXNlclN0YXJ0XSA9PSAnLycpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1c2VyU3RhcnQrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1c2VyRW5kID0gdXNlclN0YXJ0OwotCi0gICAgICAg
IHVuc2lnbmVkIGNvbG9uUG9zID0gMDsKLSAgICAgICAgd2hpbGUgKGlzVXNlckluZm9DaGFyKHVy
bFt1c2VyRW5kXSkpIHsKLSAgICAgICAgICAgIGlmICh1cmxbdXNlckVuZF0gPT0gJzonICYmIGNv
bG9uUG9zID09IDApCi0gICAgICAgICAgICAgICAgY29sb25Qb3MgPSB1c2VyRW5kOwotICAgICAg
ICAgICAgdXNlckVuZCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVybFt1c2VyRW5kXSA9
PSAnQCcpIHsKLSAgICAgICAgICAgIC8vIGFjdHVhbCBlbmQgb2YgdGhlIHVzZXJpbmZvLCBzdGFy
dCBvbiB0aGUgaG9zdAotICAgICAgICAgICAgaWYgKGNvbG9uUG9zICE9IDApIHsKLSAgICAgICAg
ICAgICAgICBwYXNzd29yZEVuZCA9IHVzZXJFbmQ7Ci0gICAgICAgICAgICAgICAgdXNlckVuZCA9
IGNvbG9uUG9zOwotICAgICAgICAgICAgICAgIHBhc3N3b3JkU3RhcnQgPSBjb2xvblBvcyArIDE7
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwYXNzd29yZFN0YXJ0ID0gcGFz
c3dvcmRFbmQgPSB1c2VyRW5kOwotCi0gICAgICAgICAgICBob3N0U3RhcnQgPSBwYXNzd29yZEVu
ZCArIDE7Ci0gICAgICAgIH0gZWxzZSBpZiAodXJsW3VzZXJFbmRdID09ICdbJyB8fCBpc1BhdGhT
ZWdtZW50RW5kQ2hhcih1cmxbdXNlckVuZF0pKSB7Ci0gICAgICAgICAgICAvLyBoaXQgdGhlIGVu
ZCBvZiB0aGUgYXV0aG9yaXR5LCBtdXN0IGhhdmUgYmVlbiBubyB1c2VyCi0gICAgICAgICAgICAv
LyBvciBsb29rcyBsaWtlIGFuIElQdjYgaG9zdG5hbWUKLSAgICAgICAgICAgIC8vIGVpdGhlciB3
YXksIHRyeSB0byBwYXJzZSBpdCBhcyBhIGhvc3RuYW1lCi0gICAgICAgICAgICB1c2VyRW5kID0g
dXNlclN0YXJ0OwotICAgICAgICAgICAgcGFzc3dvcmRTdGFydCA9IHBhc3N3b3JkRW5kID0gdXNl
ckVuZDsKLSAgICAgICAgICAgIGhvc3RTdGFydCA9IHVzZXJTdGFydDsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIGludmFsaWQgY2hhcmFjdGVyCi0gICAgICAgICAgICBtX3N0cmlu
ZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwotICAgICAgICAgICAg
aW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aG9zdEVuZCA9IGhvc3RTdGFydDsKLQotICAgICAgICAvLyBJUFY2IElQIGFkZHJlc3MKLSAgICAg
ICAgaWYgKHVybFtob3N0RW5kXSA9PSAnWycpIHsKLSAgICAgICAgICAgIGhvc3RFbmQrKzsKLSAg
ICAgICAgICAgIHdoaWxlIChpc0lQdjZDaGFyKHVybFtob3N0RW5kXSkpCi0gICAgICAgICAgICAg
ICAgaG9zdEVuZCsrOwotICAgICAgICAgICAgaWYgKHVybFtob3N0RW5kXSA9PSAnXScpCi0gICAg
ICAgICAgICAgICAgaG9zdEVuZCsrOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICBtX3N0cmluZyA9IG9yaWdp
bmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwotICAgICAgICAgICAgICAgIGludmFs
aWRhdGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoaXNIb3N0bmFtZUNoYXIodXJsW2hvc3RFbmRd
KSkKLSAgICAgICAgICAgICAgICBob3N0RW5kKys7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmICh1cmxbaG9zdEVuZF0gPT0gJzonKSB7Ci0gICAgICAgICAgICBwb3J0U3RhcnQgPSBw
b3J0RW5kID0gaG9zdEVuZCArIDE7Ci0gCi0gICAgICAgICAgICAvLyBwb3NzaWJsZSBzdGFydCBv
ZiBwb3J0Ci0gICAgICAgICAgICBwb3J0RW5kID0gcG9ydFN0YXJ0OwotICAgICAgICAgICAgd2hp
bGUgKGlzQVNDSUlEaWdpdCh1cmxbcG9ydEVuZF0pKQotICAgICAgICAgICAgICAgIHBvcnRFbmQr
KzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwb3J0U3RhcnQgPSBwb3J0RW5kID0gaG9z
dEVuZDsKLQotICAgICAgICBpZiAoIWlzUGF0aFNlZ21lbnRFbmRDaGFyKHVybFtwb3J0RW5kXSkp
IHsKLSAgICAgICAgICAgIC8vIGludmFsaWQgY2hhcmFjdGVyCi0gICAgICAgICAgICBtX3N0cmlu
ZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwotICAgICAgICAgICAg
aW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGhvc3RQb3J0SXNFbXB0eUJ1dENyZWRlbnRpYWxzQXJlUHJlc2VudChob3N0U3RhcnQsIHBv
cnRFbmQsIHVybFtwYXNzd29yZEVuZF0pKSB7Ci0gICAgICAgICAgICBtX3N0cmluZyA9IG9yaWdp
bmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwotICAgICAgICAgICAgaW52YWxpZGF0
ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZXJT
dGFydCA9PSBwb3J0RW5kICYmICFtX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgJiYgIWlzRmlsZSkg
ewotICAgICAgICAgICAgLy8gTm8gYXV0aG9yaXR5IGZvdW5kLCB3aGljaCBtZWFucyB0aGF0IHRo
aXMgaXMgbm90IGEgbmV0X3BhdGgsIGJ1dCByYXRoZXIgYW4gYWJzX3BhdGggd2hvc2UgZmlyc3Qg
dHdvCi0gICAgICAgICAgICAvLyBwYXRoIHNlZ21lbnRzIGFyZSBlbXB0eS4gRm9yIGZpbGUsIGh0
dHAgYW5kIGh0dHBzIG9ubHksIGFuIGVtcHR5IGF1dGhvcml0eSBpcyBhbGxvd2VkLgotICAgICAg
ICAgICAgdXNlclN0YXJ0IC09IDI7Ci0gICAgICAgICAgICB1c2VyRW5kID0gdXNlclN0YXJ0Owot
ICAgICAgICAgICAgcGFzc3dvcmRTdGFydCA9IHVzZXJFbmQ7Ci0gICAgICAgICAgICBwYXNzd29y
ZEVuZCA9IHBhc3N3b3JkU3RhcnQ7Ci0gICAgICAgICAgICBob3N0U3RhcnQgPSBwYXNzd29yZEVu
ZDsKLSAgICAgICAgICAgIGhvc3RFbmQgPSBob3N0U3RhcnQ7Ci0gICAgICAgICAgICBwb3J0U3Rh
cnQgPSBob3N0RW5kOwotICAgICAgICAgICAgcG9ydEVuZCA9IGhvc3RFbmQ7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICAvLyB0aGUgcGFydCBhZnRlciB0aGUgc2NoZW1lIG11c3Qg
YmUgYW4gb3BhcXVlX3BhcnQgb3IgYW4gYWJzX3BhdGgKLSAgICAgICAgdXNlckVuZCA9IHVzZXJT
dGFydDsKLSAgICAgICAgcGFzc3dvcmRTdGFydCA9IHBhc3N3b3JkRW5kID0gdXNlckVuZDsKLSAg
ICAgICAgaG9zdFN0YXJ0ID0gaG9zdEVuZCA9IHBhc3N3b3JkRW5kOwotICAgICAgICBwb3J0U3Rh
cnQgPSBwb3J0RW5kID0gaG9zdEVuZDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwYXRoU3RhcnQg
PSBwb3J0RW5kOwotICAgIHVuc2lnbmVkIHBhdGhFbmQgPSBwYXRoU3RhcnQ7Ci0gICAgd2hpbGUg
KHVybFtwYXRoRW5kXSAmJiB1cmxbcGF0aEVuZF0gIT0gJz8nICYmIHVybFtwYXRoRW5kXSAhPSAn
IycpCi0gICAgICAgIHBhdGhFbmQrKzsKLQotICAgIHVuc2lnbmVkIHF1ZXJ5U3RhcnQgPSBwYXRo
RW5kOwotICAgIHVuc2lnbmVkIHF1ZXJ5RW5kID0gcXVlcnlTdGFydDsKLSAgICBpZiAodXJsW3F1
ZXJ5U3RhcnRdID09ICc/JykgewotICAgICAgICB3aGlsZSAodXJsW3F1ZXJ5RW5kXSAmJiB1cmxb
cXVlcnlFbmRdICE9ICcjJykKLSAgICAgICAgICAgIHF1ZXJ5RW5kKys7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgZnJhZ21lbnRTdGFydCA9IHF1ZXJ5RW5kOwotICAgIHVuc2lnbmVkIGZyYWdtZW50
RW5kID0gZnJhZ21lbnRTdGFydDsKLSAgICBpZiAodXJsW2ZyYWdtZW50U3RhcnRdID09ICcjJykg
ewotICAgICAgICBmcmFnbWVudFN0YXJ0Kys7Ci0gICAgICAgIGZyYWdtZW50RW5kID0gZnJhZ21l
bnRTdGFydDsKLSAgICAgICAgd2hpbGUgKHVybFtmcmFnbWVudEVuZF0pCi0gICAgICAgICAgICBm
cmFnbWVudEVuZCsrOwotICAgIH0KLQotICAgIC8vIGFzc2VtYmxlIGl0IGFsbCwgcmVtZW1iZXJp
bmcgdGhlIHJlYWwgcmFuZ2VzCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IGJ1ZmZlckxlbmd0aCA9IGZyYWdtZW50RW5kOwotICAgIGJ1ZmZlckxlbmd0aCAqPSAzOwotCi0g
ICAgLy8gVGhlIG1hZ2ljIG51bWJlciAxMCBjb21lcyBmcm9tIHRoZSB3b3JzdC1jYXNlIGFkZGl0
aW9uIG9mIGNoYXJhY3RlcnMgZm9yIHBhc3N3b3JkIHN0YXJ0LAotICAgIC8vIHVzZXIgaW5mbywg
YW5kIGNvbG9uIGZvciBwb3J0IG51bWJlciwgY29sb24gYWZ0ZXIgc2NoZW1lLCBwbHVzIGluc2Vy
dGluZyBtaXNzaW5nIHNsYXNoZXMKLSAgICAvLyBhZnRlciBwcm90b2NvbCwgc2xhc2ggZm9yIGVt
cHR5IHBhdGgsIGFuZCBwb3NzaWJsZSBlbmQtb2YtcXVlcnkgJyMnIGNoYXJhY3Rlci4gVGhpcwot
ICAgIC8vIHlpZWxkcyBhIG1heCBvZiBuaW5lIGFkZGl0aW9uYWwgY2hhcmFjdGVycywgcGx1cyBh
IG51bGwuCi0gICAgYnVmZmVyTGVuZ3RoICs9IDEwOwotCi0gICAgaWYgKGJ1ZmZlckxlbmd0aC5o
YXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgbV9zdHJpbmcgPSBvcmlnaW5hbFN0cmluZyA/ICpv
cmlnaW5hbFN0cmluZyA6IHVybDsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPGNoYXIsIDQwOTY+IGJ1ZmZlcihidWZmZXJMZW5ndGgu
dW5zYWZlR2V0KCkpOwotCi0gICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgY29uc3Qg
Y2hhciogc3RyUHRyID0gdXJsOwotCi0gICAgLy8gY29weSBpbiB0aGUgc2NoZW1lCi0gICAgY29u
c3QgY2hhciogc2NoZW1lRW5kUHRyID0gdXJsICsgc2NoZW1lRW5kOwotI2lmIFBMQVRGT1JNKElP
UykKLSAgICBpZiAoc2hvdWxkQ2Fub25pY2FsaXplU2NoZW1lIHx8IG1fcHJvdG9jb2xJc0luSFRU
UEZhbWlseSkgewotICAgICAgICB3aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKQotICAgICAg
ICAgICAgKnArKyA9IHRvQVNDSUlMb3dlcigqc3RyUHRyKyspOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCi0gICAgICAgICAgICAqcCsrID0gKnN0
clB0cisrOwotICAgIH0KLSNlbHNlCi0gICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVuZFB0cikK
LSAgICAgICAgKnArKyA9IHRvQVNDSUlMb3dlcigqc3RyUHRyKyspOwotI2VuZGlmCi0gICAgbV9z
Y2hlbWVFbmQgPSBwIC0gYnVmZmVyLmRhdGEoKTsKLQotICAgIGJvb2wgaG9zdElzTG9jYWxIb3N0
ID0gcG9ydEVuZCAtIHVzZXJTdGFydCA9PSA5Ci0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwodXJsW3VzZXJTdGFydF0sICdsJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbCh1cmxbdXNlclN0YXJ0KzFdLCAnbycpCi0gICAgICAgICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwodXJsW3VzZXJTdGFydCsyXSwgJ2MnKQotICAgICAgICAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKHVybFt1c2VyU3RhcnQrM10sICdhJykKLSAgICAgICAgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbdXNlclN0YXJ0KzRdLCAnbCcpCi0gICAgICAgICYm
IGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodXJsW3VzZXJTdGFydCs1XSwgJ2gnKQotICAgICAg
ICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHVybFt1c2VyU3RhcnQrNl0sICdvJykKLSAg
ICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbdXNlclN0YXJ0KzddLCAncycp
Ci0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodXJsW3VzZXJTdGFydCs4XSwg
J3QnKTsKLQotICAgIC8vIEZpbGUgVVJMcyBuZWVkIGEgaG9zdCBwYXJ0IHVubGVzcyBpdCBpcyBq
dXN0IGZpbGU6Ly8gb3IgZmlsZTovL2xvY2FsaG9zdAotICAgIGJvb2wgZGVnZW5lcmF0ZUZpbGVQ
YXRoID0gcGF0aFN0YXJ0ID09IHBhdGhFbmQgJiYgKGhvc3RTdGFydCA9PSBob3N0RW5kIHx8IGhv
c3RJc0xvY2FsSG9zdCk7Ci0KLSAgICAvLyBXZSBkcm9wIGVtcHR5IGNyZWRlbnRpYWxzLCBidXQg
a2VlcCBhIGNvbG9uIGluIGFuIGVtcHR5IGhvc3QvcG9ydCBwYWlyLgotICAgIC8vIFJlbW92aW5n
IGhvc3RuYW1lIGNvbXBsZXRlbHkgd291bGQgY2hhbmdlIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFVS
TCBvbiByZS1wYXJzaW5nLgotICAgIGJvb2wgaGF2ZU5vbkhvc3RBdXRob3JpdHlQYXJ0ID0gdXNl
clN0YXJ0ICE9IHVzZXJFbmQgfHwgcGFzc3dvcmRTdGFydCAhPSBwYXNzd29yZEVuZCB8fCBob3N0
RW5kICE9IHBvcnRFbmQ7Ci0KLSAgICAvLyBhZGQgIjoiIGFmdGVyIHNjaGVtZQotICAgICpwKysg
PSAnOic7Ci0KLSAgICAvLyBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBhdXRob3JpdHkgcGFydCBv
ciBhIGZpbGUgVVJMIC0gYWRkICIvLyIgYW5kIGF1dGhvcml0eQotICAgIGlmIChpc0ZpbGUgPyAh
ZGVnZW5lcmF0ZUZpbGVQYXRoIDogKGhhdmVOb25Ib3N0QXV0aG9yaXR5UGFydCB8fCBob3N0U3Rh
cnQgIT0gaG9zdEVuZCkpIHsKLSAgICAgICAgKnArKyA9ICcvJzsKLSAgICAgICAgKnArKyA9ICcv
JzsKLQotICAgICAgICBtX3VzZXJTdGFydCA9IHAgLSBidWZmZXIuZGF0YSgpOwotCi0gICAgICAg
IC8vIGNvcHkgaW4gdGhlIHVzZXIKLSAgICAgICAgc3RyUHRyID0gdXJsICsgdXNlclN0YXJ0Owot
ICAgICAgICBjb25zdCBjaGFyKiB1c2VyRW5kUHRyID0gdXJsICsgdXNlckVuZDsKLSAgICAgICAg
d2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpIHsKLSAgICAgICAgICAgIGNoYXIgYyA9ICpzdHJQ
dHIrKzsKLSAgICAgICAgICAgIEFTU0VSVChpc1VzZXJJbmZvQ2hhcihjKSk7Ci0gICAgICAgICAg
ICAqcCsrID0gYzsKLSAgICAgICAgfQotICAgICAgICBtX3VzZXJFbmQgPSBwIC0gYnVmZmVyLmRh
dGEoKTsKLQotICAgICAgICAvLyBjb3B5IGluIHRoZSBwYXNzd29yZAotICAgICAgICBpZiAocGFz
c3dvcmRFbmQgIT0gcGFzc3dvcmRTdGFydCkgewotICAgICAgICAgICAgKnArKyA9ICc6JzsKLSAg
ICAgICAgICAgIHN0clB0ciA9IHVybCArIHBhc3N3b3JkU3RhcnQ7Ci0gICAgICAgICAgICBjb25z
dCBjaGFyKiBwYXNzd29yZEVuZFB0ciA9IHVybCArIHBhc3N3b3JkRW5kOwotICAgICAgICAgICAg
d2hpbGUgKHN0clB0ciA8IHBhc3N3b3JkRW5kUHRyKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBj
ID0gKnN0clB0cisrOwotICAgICAgICAgICAgICAgIEFTU0VSVChpc1VzZXJJbmZvQ2hhcihjKSk7
Ci0gICAgICAgICAgICAgICAgKnArKyA9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9wYXNzd29yZEVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwotCi0gICAgICAgIC8vIElm
IHdlIGhhZCBhbnkgdXNlciBpbmZvLCBhZGQgIkAiCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocCAtIGJ1ZmZlci5kYXRhKCkpICE9IG1fdXNlclN0YXJ0KQotICAgICAgICAgICAg
KnArKyA9ICdAJzsKLQotICAgICAgICAvLyBjb3B5IGluIHRoZSBob3N0LCBleGNlcHQgaW4gdGhl
IGNhc2Ugb2YgYSBmaWxlIFVSTCB3aXRoIGF1dGhvcml0eT0ibG9jYWxob3N0IgotICAgICAgICBp
ZiAoIShpc0ZpbGUgJiYgaG9zdElzTG9jYWxIb3N0ICYmICFoYXZlTm9uSG9zdEF1dGhvcml0eVBh
cnQpKSB7Ci0gICAgICAgICAgICBzdHJQdHIgPSB1cmwgKyBob3N0U3RhcnQ7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyKiBob3N0RW5kUHRyID0gdXJsICsgaG9zdEVuZDsKLSAgICAgICAgICAgIGlm
IChpc0Nhbm9uaWNhbEhvc3RuYW1lTG93ZXJjYXNlRm9yU2NoZW1lKGJ1ZmZlci5kYXRhKCksIG1f
c2NoZW1lRW5kKSkgewotICAgICAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBob3N0RW5kUHRy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IHRvQVNDSUlMb3dlcigqc3RyUHRyKysp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNIb3N0bmFtZUNoYXIoYykgfHwgYyA9PSAn
WycgfHwgYyA9PSAnXScgfHwgYyA9PSAnOicpOwotICAgICAgICAgICAgICAgICAgICAqcCsrID0g
YzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHdoaWxlIChzdHJQdHIgPCBob3N0RW5kUHRyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNo
YXIgYyA9ICpzdHJQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSG9zdG5hbWVD
aGFyKGMpIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nIHx8IGMgPT0gJzonKTsKLSAgICAgICAgICAg
ICAgICAgICAgKnArKyA9IGM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIG1faG9zdEVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwotCi0gICAgICAg
IC8vIENvcHkgaW4gdGhlIHBvcnQgaWYgdGhlIFVSTCBoYXMgb25lIChhbmQgaXQncyBub3QgZGVm
YXVsdCkuIEFsc28sIGNvcHkgaXQgaWYgdGhlcmUgd2FzIG5vIGhvc3RuYW1lLCBzbyB0aGF0IHRo
ZXJlIGlzIHN0aWxsIHNvbWV0aGluZyBpbiBhdXRob3JpdHkgY29tcG9uZW50LgotICAgICAgICBp
ZiAoaG9zdEVuZCAhPSBwb3J0U3RhcnQpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBvcnRT
dHIgPSB1cmwgKyBwb3J0U3RhcnQ7Ci0gICAgICAgICAgICBzaXplX3QgcG9ydExlbmd0aCA9IHBv
cnRFbmQgLSBwb3J0U3RhcnQ7Ci0gICAgICAgICAgICBpZiAoKHBvcnRMZW5ndGggJiYgIWlzRGVm
YXVsdFBvcnRGb3JTY2hlbWUocG9ydFN0ciwgcG9ydExlbmd0aCwgYnVmZmVyLmRhdGEoKSwgbV9z
Y2hlbWVFbmQpKQotICAgICAgICAgICAgICAgIHx8IChob3N0U3RhcnQgPT0gaG9zdEVuZCAmJiBo
b3N0RW5kICE9IHBvcnRTdGFydCkpIHsKLSAgICAgICAgICAgICAgICAqcCsrID0gJzonOwotICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBvcnRFbmRQdHIgPSB1cmwgKyBwb3J0RW5kOwotICAg
ICAgICAgICAgICAgIHdoaWxlIChwb3J0U3RyIDwgcG9ydEVuZFB0cikKLSAgICAgICAgICAgICAg
ICAgICAgKnArKyA9ICpwb3J0U3RyKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9wb3J0RW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKGlzRmlsZSkgewotICAgICAgICAgICAgQVNTRVJUKGRlZ2VuZXJhdGVGaWxlUGF0aCk7Ci0g
ICAgICAgICAgICAqcCsrID0gJy8nOwotICAgICAgICAgICAgKnArKyA9ICcvJzsKLSAgICAgICAg
fQotICAgICAgICBtX3VzZXJTdGFydCA9IG1fdXNlckVuZCA9IG1fcGFzc3dvcmRFbmQgPSBtX2hv
c3RFbmQgPSBtX3BvcnRFbmQgPSBwIC0gYnVmZmVyLmRhdGEoKTsKLSAgICB9Ci0KLSAgICAvLyBG
b3IgY2Fub25pY2FsaXphdGlvbiwgZW5zdXJlIHdlIGhhdmUgYSAnLycgZm9yIG5vIHBhdGguCi0g
ICAgLy8gRG8gdGhpcyBvbmx5IGZvciBVUkwgd2l0aCBwcm90b2NvbCBmaWxlLCBodHRwIG9yIGh0
dHBzLgotICAgIGlmICgobV9wcm90b2NvbElzSW5IVFRQRmFtaWx5IHx8IGlzRmlsZSkgJiYgcGF0
aEVuZCA9PSBwYXRoU3RhcnQpCi0gICAgICAgICpwKysgPSAnLyc7Ci0KLSAgICAvLyBhZGQgcGF0
aCwgZXNjYXBpbmcgYmFkIGNoYXJhY3RlcnMKLSAgICBpZiAoIWhpZXJhcmNoaWNhbCkKLSAgICAg
ICAgZXNjYXBlQW5kQXBwZW5kTm9uSGllcmFyY2hpY2FsUGFydChwLCB1cmwgKyBwYXRoU3RhcnQs
IHBhdGhFbmQgLSBwYXRoU3RhcnQpOwotICAgIGVsc2UgaWYgKCFoYXNTbGFzaERvdE9yRG90RG90
KHVybCkpCi0gICAgICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcGF0aFN0YXJ0
LCBwYXRoRW5kIC0gcGF0aFN0YXJ0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ2hhckJ1ZmZlciBw
YXRoQnVmZmVyKHBhdGhFbmQgLSBwYXRoU3RhcnQgKyAxKTsKLSAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gY29weVBhdGhSZW1vdmluZ0RvdHMocGF0aEJ1ZmZlci5kYXRhKCksIHVybCwgcGF0aFN0
YXJ0LCBwYXRoRW5kKTsKLSAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCBwYXRoQnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBtX3BhdGhFbmQgPSBwIC0gYnVmZmVy
LmRhdGEoKTsKLQotICAgIC8vIEZpbmQgdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IHNsYXNo
IGluIHRoZSBwYXRoLCBvcgotICAgIC8vIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIHBhdGggaWYg
dGhlcmUgYXJlIG5vIHNsYXNoZXMgaW4gaXQuCi0gICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkg
PSBtX3BhdGhFbmQ7IGkgPiBtX3BvcnRFbmQ7IC0taSkgewotICAgICAgICBpZiAoYnVmZmVyW2kg
LSAxXSA9PSAnLycpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9wYXRoQWZ0ZXJM
YXN0U2xhc2ggPSBpOwotCi0gICAgLy8gYWRkIHF1ZXJ5LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVy
cwotICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcXVlcnlTdGFydCwgcXVlcnlF
bmQgLSBxdWVyeVN0YXJ0KTsKLSAgICBtX3F1ZXJ5RW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0K
LSAgICAvLyBhZGQgZnJhZ21lbnQsIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCi0gICAgaWYgKGZy
YWdtZW50RW5kICE9IHF1ZXJ5RW5kKSB7Ci0gICAgICAgICpwKysgPSAnIyc7Ci0gICAgICAgIGVz
Y2FwZUFuZEFwcGVuZE5vbkhpZXJhcmNoaWNhbFBhcnQocCwgdXJsICsgZnJhZ21lbnRTdGFydCwg
ZnJhZ21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KTsKLSAgICB9Ci0gICAgbV9mcmFnbWVudEVuZCA9
IHAgLSBidWZmZXIuZGF0YSgpOwotCi0gICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IHN0
YXRpY19jYXN0PGludD4oYnVmZmVyLnNpemUoKSkpOwotICAgIEFTU0VSVChidWZmZXIuc2l6ZSgp
ID4gMCk7Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgZW5kIHVwIGFjdHVhbGx5IGNoYW5naW5nIHRo
ZSBvcmlnaW5hbCBzdHJpbmcgYW5kCi0gICAgLy8gaXQgd2FzIGFscmVhZHkgaW4gYSBTdHJpbmcs
IHJldXNlIGl0IHRvIGF2b2lkIGV4dHJhIGFsbG9jYXRpb24uCi0gICAgaWYgKG9yaWdpbmFsU3Ry
aW5nICYmIGVxdWFsKG9yaWdpbmFsU3RyaW5nLT5pbXBsKCksIGJ1ZmZlci5kYXRhKCksIG1fZnJh
Z21lbnRFbmQpKQotICAgICAgICBtX3N0cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKLSAgICBlbHNl
Ci0gICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIG1fZnJhZ21lbnRFbmQp
OwotCi0gICAgbV9pc1ZhbGlkID0gdHJ1ZTsKLX0KLQogYm9vbCBlcXVhbElnbm9yaW5nRnJhZ21l
bnRJZGVudGlmaWVyKGNvbnN0IFVSTCYgYSwgY29uc3QgVVJMJiBiKQogewogICAgIGlmIChhLm1f
cXVlcnlFbmQgIT0gYi5tX3F1ZXJ5RW5kKQpAQCAtMTk2OSwyMTUgKzEwNTQsNiBAQCBTdHJpbmcg
ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhjb25zCiAgICAgcmV0dXJuIFN0cmluZyhidWZm
ZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7CiB9CiAKLXN0YXRpYyBib29sIHByb3RvY29s
SXMoU3RyaW5nVmlldyBzdHJpbmdVUkwsIGNvbnN0IGNoYXIqIHByb3RvY29sKQotewotICAgIGFz
c2VydFByb3RvY29sSXNHb29kKFN0cmluZ1ZpZXcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KHByb3RvY29sKSwgc3RybGVuKHByb3RvY29sKSkpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0cmluZ1VSTC5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKCFwcm90b2NvbFtpXSkKLSAgICAgICAgICAgIHJldHVybiBz
dHJpbmdVUkxbaV0gPT0gJzonOwotICAgICAgICBpZiAoIWlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwoc3RyaW5nVVJMW2ldLCBwcm90b2NvbFtpXSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgZmluZEhvc3RuYW1l
c0luTWFpbFRvVVJMKFN0cmluZ1ZpZXcgc3RyaW5nLCBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4+JiBuYW1lUmFuZ2VzKQotewotICAgIC8vIEluIGEgbWFpbHRvOiBVUkwsIGhv
c3QgbmFtZXMgY29tZSBhZnRlciBhICdAJyBjaGFyYWN0ZXIgYW5kIGVuZCB3aXRoIGEgJz4nIG9y
ICcsJyBvciAnPycgb3IgZW5kIG9mIHN0cmluZyBjaGFyYWN0ZXIuCi0gICAgLy8gU2tpcCBxdW90
ZWQgc3RyaW5ncyBzbyB0aGF0IGNoYXJhY3RlcnMgaW4gdGhlbSBkb24ndCBjb25mdXNlIHVzLgot
ICAgIC8vIFdoZW4gd2UgZmluZCBhICc/JyBjaGFyYWN0ZXIsIHdlIGFyZSBwYXN0IHRoZSBwYXJ0
IG9mIHRoZSBVUkwgdGhhdCBjb250YWlucyBob3N0IG5hbWVzLgotCi0gICAgbmFtZVJhbmdlcy5j
bGVhcigpOwotCi0gICAgdW5zaWduZWQgcCA9IDA7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAg
Ly8gRmluZCBzdGFydCBvZiBob3N0IG5hbWUgb3Igb2YgcXVvdGVkIHN0cmluZy4KLSAgICAgICAg
dW5zaWduZWQgaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID0gZmluZEZpcnN0T2Yoc3RyaW5nLCBwLCAi
XCJAPyIpOwotICAgICAgICBpZiAoaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID09IG5vdEZvdW5kVW5z
aWduZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFVDaGFyIGMgPSBzdHJpbmdbaG9z
dG5hbWVPclN0cmluZ1N0YXJ0XTsKLSAgICAgICAgcCA9IGhvc3RuYW1lT3JTdHJpbmdTdGFydCAr
IDE7Ci0KLSAgICAgICAgaWYgKGMgPT0gJz8nKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGlmIChjID09ICdAJykgewotICAgICAgICAgICAgLy8gRmluZCBlbmQgb2YgaG9zdCBuYW1l
LgotICAgICAgICAgICAgdW5zaWduZWQgaG9zdG5hbWVTdGFydCA9IHA7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBob3N0bmFtZUVuZCA9IGZpbmRGaXJzdE9mKHN0cmluZywgcCwgIj4sPyIpOwotICAg
ICAgICAgICAgYm9vbCBkb25lOwotICAgICAgICAgICAgaWYgKGhvc3RuYW1lRW5kID09IG5vdEZv
dW5kVW5zaWduZWQpIHsKLSAgICAgICAgICAgICAgICBob3N0bmFtZUVuZCA9IHN0cmluZy5sZW5n
dGgoKTsKLSAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcCA9IGhvc3RuYW1lRW5kOwotICAgICAgICAgICAgICAgIGRvbmUg
PSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbmFtZVJhbmdlcy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoaG9zdG5hbWVTdGFydCwgaG9zdG5hbWVFbmQpKTsKLQotICAgICAgICAg
ICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gU2tpcCBxdW90ZWQgc3RyaW5nLgotICAgICAgICAgICAgQVNTRVJUKGMg
PT0gJyInKTsKLSAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZXNjYXBlZENoYXJhY3Rlck9yU3RyaW5nRW5kID0gZmluZEZpcnN0T2Yoc3RyaW5nLCBwLCAi
XCJcXCIpOwotICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQg
PT0gbm90Rm91bmRVbnNpZ25lZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgYyA9IHN0cmluZ1tlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmRdOwotICAg
ICAgICAgICAgICAgIHAgPSBlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgKyAxOwotCi0gICAg
ICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgdGhlbiBicmVh
ayBmcm9tIHRoZSBzdHJpbmcgbG9vcCBiYWNrIHRvIHRoZSBob3N0IG5hbWUgbG9vcC4KLSAgICAg
ICAgICAgICAgICBpZiAoYyA9PSAnIicpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICAgICAgLy8gU2tpcCBlc2NhcGVkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAg
ICBBU1NFUlQoYyA9PSAnXFwnKTsKLSAgICAgICAgICAgICAgICBpZiAocCA9PSBzdHJpbmcubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICsr
cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZmlu
ZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxVUkwoU3RyaW5nVmlldyBzdHJpbmcsIHVuc2lnbmVkJiBz
dGFydE9mZnNldCwgdW5zaWduZWQmIGVuZE9mZnNldCkKLXsKLSAgICAvLyBGaW5kIHRoZSBob3N0
IG5hbWUgaW4gYSBoaWVyYXJjaGljYWwgVVJMLgotICAgIC8vIEl0IGNvbWVzIGFmdGVyIGEgIjov
LyIgc2VxdWVuY2UsIHdpdGggc2NoZW1lIGNoYXJhY3RlcnMgcHJlY2VkaW5nLCBhbmQKLSAgICAv
LyB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3QgY29sb24gaW4gdGhlIHN0cmluZy4KLSAgICAvLyBJ
dCBlbmRzIHdpdGggdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG9yIGEgIjoiIG9yIGEgcGF0aCBzZWdt
ZW50IGVuZGluZyBjaGFyYWN0ZXIuCi0gICAgLy8gSWYgdGhlcmUgaXMgYSAiQCIgY2hhcmFjdGVy
LCB0aGUgaG9zdCBwYXJ0IGlzIGp1c3QgdGhlIHBhcnQgYWZ0ZXIgdGhlICJAIi4KLSAgICB1bnNp
Z25lZCBzZXBhcmF0b3IgPSBmaW5kRmlyc3RPZihzdHJpbmcsIDAsICI6Iik7Ci0gICAgaWYgKHNl
cGFyYXRvciA9PSBub3RGb3VuZFVuc2lnbmVkIHx8IHNlcGFyYXRvciArIDIgPj0gc3RyaW5nLmxl
bmd0aCgpIHx8IHN0cmluZ1tzZXBhcmF0b3IgKyAxXSAhPSAnLycgfHwgc3RyaW5nW3NlcGFyYXRv
ciArIDJdICE9ICcvJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2hlY2sgdGhh
dCBhbGwgY2hhcmFjdGVycyBiZWZvcmUgdGhlIDovLyBhcmUgdmFsaWQgc2NoZW1lIGNoYXJhY3Rl
cnMuCi0gICAgaWYgKCFpc1NjaGVtZUZpcnN0Q2hhcihzdHJpbmdbMF0pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNlcGFyYXRvcjsgKytpKSB7
Ci0gICAgICAgIGlmICghaXNTY2hlbWVDaGFyKHN0cmluZ1tpXSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3RhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4KLSAg
ICB1bnNpZ25lZCBhdXRob3JpdHlTdGFydCA9IHNlcGFyYXRvciArIDM7Ci0KLSAgICAvLyBGaW5k
IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KLSAgICB1bnNpZ25lZCBob3N0bmFtZUVuZCA9IHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdXRob3JpdHlTdGFydDsgaSA8IGhv
c3RuYW1lRW5kOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IHN0cmluZ1tpXTsKLSAgICAgICAg
aWYgKGMgPT0gJzonIHx8IChpc1BhdGhTZWdtZW50RW5kQ2hhcihjKSAmJiBjICE9IDApKSB7Ci0g
ICAgICAgICAgICBob3N0bmFtZUVuZCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIEZpbmQgIkAiIGZvciB0aGUgc3RhcnQgb2YgdGhlIGhvc3QgbmFt
ZS4KLSAgICB1bnNpZ25lZCB1c2VySW5mb1Rlcm1pbmF0b3IgPSBmaW5kRmlyc3RPZihzdHJpbmcs
IGF1dGhvcml0eVN0YXJ0LCAiQCIpOwotICAgIHVuc2lnbmVkIGhvc3RuYW1lU3RhcnQ7Ci0gICAg
aWYgKHVzZXJJbmZvVGVybWluYXRvciA9PSBub3RGb3VuZFVuc2lnbmVkIHx8IHVzZXJJbmZvVGVy
bWluYXRvciA+IGhvc3RuYW1lRW5kKQotICAgICAgICBob3N0bmFtZVN0YXJ0ID0gYXV0aG9yaXR5
U3RhcnQ7Ci0gICAgZWxzZQotICAgICAgICBob3N0bmFtZVN0YXJ0ID0gdXNlckluZm9UZXJtaW5h
dG9yICsgMTsKLQotICAgIHN0YXJ0T2Zmc2V0ID0gaG9zdG5hbWVTdGFydDsKLSAgICBlbmRPZmZz
ZXQgPSBob3N0bmFtZUVuZDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQ29udmVydHMgYWxs
IGhvc3RuYW1lcyBmb3VuZCBpbiB0aGUgZ2l2ZW4gaW5wdXQgdG8gcHVueWNvZGUsIHByZXNlcnZp
bmcgdGhlCi0vLyByZXN0IG9mIHRoZSBVUkwgdW5jaGFuZ2VkLiBUaGUgb3V0cHV0IHdpbGwgTk9U
IGJlIG51bGwtdGVybWluYXRlZC4KLS8vIFJldHVybiB2YWx1ZSBvZiBmYWxzZSBtZWFucyBlcnJv
ciBpbiBlbmNvZGluZy4KLXN0YXRpYyBib29sIGVuY29kZUhvc3RuYW1lcyhTdHJpbmdWaWV3IHN0
cmluZywgVUNoYXJCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBidWZmZXIuY2xlYXIoKTsKLQotICAg
IGlmIChwcm90b2NvbElzKHN0cmluZywgIm1haWx0byIpKSB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPj4gaG9zdG5hbWVSYW5nZXM7Ci0gICAgICAgIGZpbmRI
b3N0bmFtZXNJbk1haWxUb1VSTChzdHJpbmcsIGhvc3RuYW1lUmFuZ2VzKTsKLSAgICAgICAgdW5z
aWduZWQgbiA9IGhvc3RuYW1lUmFuZ2VzLnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgcCA9IDA7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAg
IGNvbnN0IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiByID0gaG9zdG5hbWVSYW5nZXNb
aV07Ci0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBzdHJpbmcuc3Vic3RyaW5nKHAsIHIuZmly
c3QgLSBwKSk7Ci0gICAgICAgICAgICBpZiAoIWFwcGVuZEVuY29kZWRIb3N0bmFtZShidWZmZXIs
IHN0cmluZy5zdWJzdHJpbmcoci5maXJzdCwgci5zZWNvbmQgLSByLmZpcnN0KSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcCA9IHIuc2Vjb25kOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBjb3B5IGVpdGhlciBldmVyeXRoaW5nIGFmdGVyIHRo
ZSBsYXN0IGhvc3RuYW1lLCBvciB0aGUKLSAgICAgICAgLy8gd2hvbGUgdGhpbmcgaWYgdGhlcmUg
aXMgbm8gaG9zdG5hbWUuCi0gICAgICAgIGFwcGVuZChidWZmZXIsIHN0cmluZy5zdWJzdHJpbmco
cCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGhvc3RTdGFydCwgaG9zdEVuZDsK
LSAgICAgICAgaWYgKGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKHN0cmluZywgaG9zdFN0
YXJ0LCBob3N0RW5kKSkgewotICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgc3RyaW5nLnN1YnN0
cmluZygwLCBob3N0U3RhcnQpKTsgLy8gQmVmb3JlIGhvc3RuYW1lLgotICAgICAgICAgICAgaWYg
KCFhcHBlbmRFbmNvZGVkSG9zdG5hbWUoYnVmZmVyLCBzdHJpbmcuc3Vic3RyaW5nKGhvc3RTdGFy
dCwgaG9zdEVuZCAtIGhvc3RTdGFydCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIHN0cmluZy5zdWJzdHJpbmcoaG9zdEVuZCkpOyAv
LyBBZnRlciBob3N0bmFtZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vIGhv
c3RuYW1lIHRvIGVuY29kZSwgcmV0dXJuIHRoZSBpbnB1dC4KLSAgICAgICAgICAgIGFwcGVuZChi
dWZmZXIsIHN0cmluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gUmV0dXJuIHZhbHVlIG9mIGZhbHNlIG1lYW5zIGVycm9yIGluIGVuY29kaW5nLgotc3Rh
dGljIGJvb2wgZW5jb2RlUmVsYXRpdmVTdHJpbmcoY29uc3QgU3RyaW5nJiByZWwsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIENoYXJCdWZmZXImIG91dHB1dCkKLXsKLSAgICBVQ2hhckJ1
ZmZlciBzOwotICAgIGlmICghZW5jb2RlSG9zdG5hbWVzKHJlbCwgcykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFRleHRFbmNvZGluZyBwYXRoRW5jb2RpbmcoVVRGOEVuY29kaW5nKCkp
OyAvLyBQYXRoIGlzIGFsd2F5cyBlbmNvZGVkIGFzIFVURi04OyBvdGhlciBwYXJ0cyBtYXkgZGVw
ZW5kIG9uIHRoZSBzY2hlbWUuCi0KLSAgICB1bnNpZ25lZCBwYXRoRW5kID0gbm90Rm91bmRVbnNp
Z25lZDsKLSAgICBpZiAoZW5jb2RpbmcgIT0gcGF0aEVuY29kaW5nICYmIGVuY29kaW5nLmlzVmFs
aWQoKSAmJiAhcHJvdG9jb2xJcyhyZWwsICJtYWlsdG8iKSAmJiAhcHJvdG9jb2xJcyhyZWwsICJk
YXRhIikgJiYgIXByb3RvY29sSXNKYXZhU2NyaXB0KHJlbCkpIHsKLSAgICAgICAgLy8gRmluZCB0
aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWl0aGVyICMgb3IgPywga2VlcCBwYXRoRW5kIGF0IC0xIG90
aGVyd2lzZS4KLSAgICAgICAgcGF0aEVuZCA9IGZpbmRGaXJzdE9mKFN0cmluZ1ZpZXcocy5kYXRh
KCksIHMuc2l6ZSgpKSwgMCwgIiM/Iik7Ci0gICAgfQotCi0gICAgaWYgKHBhdGhFbmQgPT0gbm90
Rm91bmRVbnNpZ25lZCkgewotICAgICAgICBDU3RyaW5nIGRlY29kZWQgPSBwYXRoRW5jb2Rpbmcu
ZW5jb2RlKFN0cmluZ1ZpZXcocy5kYXRhKCksIHMuc2l6ZSgpKSwgVVJMRW5jb2RlZEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgb3V0cHV0LnJlc2l6ZShkZWNvZGVkLmxlbmd0aCgp
KTsKLSAgICAgICAgbWVtY3B5KG91dHB1dC5kYXRhKCksIGRlY29kZWQuZGF0YSgpLCBkZWNvZGVk
Lmxlbmd0aCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBDU3RyaW5nIHBhdGhEZWNvZGVkID0g
cGF0aEVuY29kaW5nLmVuY29kZShTdHJpbmdWaWV3KHMuZGF0YSgpLCBwYXRoRW5kKSwgVVJMRW5j
b2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgLy8gVW5lbmNvZGFibGUgY2hh
cmFjdGVycyBpbiBVUkxzIGFyZSByZXByZXNlbnRlZCBieSBjb252ZXJ0aW5nCi0gICAgICAgIC8v
IHRoZW0gdG8gWE1MIGVudGl0aWVzIGFuZCBlc2NhcGluZyBub24tYWxwaGFudW1lcmljIGNoYXJh
Y3RlcnMuCi0gICAgICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKFN0
cmluZ1ZpZXcocy5kYXRhKCkgKyBwYXRoRW5kLCBzLnNpemUoKSAtIHBhdGhFbmQpLCBVUkxFbmNv
ZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotCi0gICAgICAgIG91dHB1dC5yZXNpemUocGF0
aERlY29kZWQubGVuZ3RoKCkgKyBvdGhlckRlY29kZWQubGVuZ3RoKCkpOwotICAgICAgICBtZW1j
cHkob3V0cHV0LmRhdGEoKSwgcGF0aERlY29kZWQuZGF0YSgpLCBwYXRoRGVjb2RlZC5sZW5ndGgo
KSk7Ci0gICAgICAgIG1lbWNweShvdXRwdXQuZGF0YSgpICsgcGF0aERlY29kZWQubGVuZ3RoKCks
IG90aGVyRGVjb2RlZC5kYXRhKCksIG90aGVyRGVjb2RlZC5sZW5ndGgoKSk7Ci0gICAgfQotICAg
IG91dHB1dC5hcHBlbmQoJ1wwJyk7IC8vIG51bGwtdGVybWluYXRlIHRoZSBvdXRwdXQuCi0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFN0cmluZyBzdWJzdGl0dXRlQmFja3NsYXNoZXMo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgc2l6ZV90IHF1ZXN0aW9uUG9zID0gc3RyaW5n
LmZpbmQoJz8nKTsKLSAgICBzaXplX3QgaGFzaFBvcyA9IHN0cmluZy5maW5kKCcjJyk7Ci0gICAg
dW5zaWduZWQgcGF0aEVuZDsKLQotICAgIGlmIChoYXNoUG9zICE9IG5vdEZvdW5kICYmIChxdWVz
dGlvblBvcyA9PSBub3RGb3VuZCB8fCBxdWVzdGlvblBvcyA+IGhhc2hQb3MpKQotICAgICAgICBw
YXRoRW5kID0gaGFzaFBvczsKLSAgICBlbHNlIGlmIChxdWVzdGlvblBvcyAhPSBub3RGb3VuZCkK
LSAgICAgICAgcGF0aEVuZCA9IHF1ZXN0aW9uUG9zOwotICAgIGVsc2UKLSAgICAgICAgcGF0aEVu
ZCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIHJldHVybiBzdHJpbmcubGVmdChwYXRoRW5kKS5y
ZXBsYWNlKCdcXCcsJy8nKSArIHN0cmluZy5zdWJzdHJpbmcocGF0aEVuZCk7Ci19Ci0KIGJvb2wg
VVJMOjppc0hpZXJhcmNoaWNhbCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIxMjQ3MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMTcsMTcgKzExMTcsNiBAQCBVUkxQYXJzZXI6OlVSTFBhcnNlcihjb25zdCBTdHJpbmcmIGlu
cHV0CiAgICAgICAgICAgICBBU1NFUlQoYWxsVmFsdWVzRXF1YWwocGFyc2VyLnJlc3VsdCgpLCBt
X3VybCkpOwogICAgIH0KICNlbmRpZgotCi0jaWYgQ09NUEFSRV9VUkxQQVJTRVJTCi0gICAgQVNT
RVJUKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQoZmFs
c2UpOwotICAgIFVSTCBwYXJzZWRXaXRoT2xkUGFyc2VyID0gVVJMKGJhc2UsIGlucHV0LCBlbmNv
ZGluZyk7Ci0gICAgaWYgKHBhcnNlZFdpdGhPbGRQYXJzZXIgIT0gbV91cmwpCi0gICAgICAgIFdU
RkxvZ0Fsd2F5cygiVVJMUGFyc2VyIERpZmZlcnM6IElucHV0IDwlcz4gQmFzZSA8JXM+IEVuY29k
aW5nIDwlcz4iLCBpbnB1dC51dGY4KCkuZGF0YSgpLCBiYXNlLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGVuY29kaW5nLm5hbWUoKSk7Ci0gICAgZWxzZQotICAgICAgICBXVEZMb2dBbHdheXMoIlVS
TFBhcnNlciBTYW1lOiBJbnB1dCA8JXM+IEJhc2UgPCVzPiBFbmNvZGluZyA8JXM+IiwgaW5wdXQu
dXRmOCgpLmRhdGEoKSwgYmFzZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbmNvZGluZy5uYW1l
KCkpOwotICAgIFVSTFBhcnNlcjo6c2V0RW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtMjg3MCwxNiArMjg1OSw0IEBAIGJvb2wg
VVJMUGFyc2VyOjppbnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQKICAgICAvLyBJdCBzaG91bGQgYmUg
YWJsZSB0byBiZSBkZWR1Y2VkIGZyb20gbV9pc1ZhbGlkIGFuZCBtX3N0cmluZy5sZW5ndGgoKSB0
byBzYXZlIG1lbW9yeS4KIH0KIAotc3RhdGljIGJvb2wgdXJsUGFyc2VyRW5hYmxlZCA9IHRydWU7
Ci0KLXZvaWQgVVJMUGFyc2VyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB1cmxQ
YXJzZXJFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotYm9vbCBVUkxQYXJzZXI6OmVuYWJsZWQoKQot
ewotICAgIHJldHVybiB1cmxQYXJzZXJFbmFibGVkOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkocmV2aXNpb24gMjEyNDYy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDkgKzQzLDYgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJv
b2wgYWxsVmFsdWVzRXF1YWwoY29uc3QgVVJMJiwgY29uc3QgVVJMJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgaW50ZXJuYWxWYWx1ZXNDb25zaXN0ZW50KGNvbnN0IFVSTCYpOwot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZW5hYmxlZCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CiAgICAgCiAgICAgdHlwZWRlZiBW
ZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiBVUkxFbmNvZGVkRm9ybTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVVJMRW5jb2RlZEZvcm0gcGFyc2VVUkxFbmNvZGVk
Rm9ybShTdHJpbmdWaWV3KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VSTENG
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9VUkxDRi5jcHAJ
KHJldmlzaW9uIDIxMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VSTENGLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEgKzQ3LDggQEAgVVJMOjpVUkwoQ0ZVUkxSZWYgdXJs
KQogICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgT0sgdG8gaWdub3JlIGJhc2UgVVJMIGhlcmU/CiAg
ICAgQ1N0cmluZyB1cmxCeXRlczsKICAgICBnZXRVUkxCeXRlcyh1cmwsIHVybEJ5dGVzKTsKLSAg
ICBpZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgVVJMUGFyc2VyIHBhcnNlcih1
cmxCeXRlcy5kYXRhKCkpOwotICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgcGFyc2UodXJsQnl0ZXMuZGF0YSgpKTsKKyAgICBVUkxQYXJzZXIgcGFy
c2VyKHVybEJ5dGVzLmRhdGEoKSk7CisgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7CiB9CiAK
ICNpZiAhVVNFKEZPVU5EQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
VVJMTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9VUkxN
YWMubW0JKHJldmlzaW9uIDIxMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9V
UkxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0Myw4IEBAIFVSTDo6VVJMKE5TVVJM
ICp1cmwpCiAgICAgLy8gRklYTUU6IFdoeSBpcyBpdCBPSyB0byBpZ25vcmUgYmFzZSBVUkwgaGVy
ZT8KICAgICBDU3RyaW5nIHVybEJ5dGVzOwogICAgIGdldFVSTEJ5dGVzKHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZVUkxSZWY+KHVybCksIHVybEJ5dGVzKTsKLSAgICBpZiAoVVJMUGFyc2VyOjplbmFibGVk
KCkpIHsKLSAgICAgICAgVVJMUGFyc2VyIHBhcnNlcih1cmxCeXRlcy5kYXRhKCkpOwotICAgICAg
ICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFyc2UodXJs
Qnl0ZXMuZGF0YSgpKTsKKyAgICBVUkxQYXJzZXIgcGFyc2VyKHVybEJ5dGVzLmRhdGEoKSk7Cisg
ICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7CiB9CiAKIFVSTDo6b3BlcmF0b3IgTlNVUkwgKigp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0wMi0xNiAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJl
bW92ZSBvbGQgVVJMIHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY4NDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAg
ICogU2hhcmVkL0NvY29hL1dlYktpdDJJbml0aWFsaXplQ29jb2EubW06IFJlbW92ZWQuCisgICAg
ICAgICogU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2Vydmlj
ZUVudHJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRpYWxpemVyKToK
KyAgICAgICAgKiBTaGFyZWQvV2ViS2l0MkluaXRpYWxpemUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpJbml0aWFsaXplV2ViS2l0Mik6CisgICAgICAgICogU2hhcmVkL1dlYktpdDJJbml0aWFsaXpl
Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oOgorICAgICAgICAqIFNoYXJlZC9lZmwvV2ViS2l0MkluaXRpYWxpemVFRkwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViS2l0MkluaXRpYWxpemVHVEsu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKToKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6aW5p
dGlhbGl6ZVdlYlByb2Nlc3MpOgorCiAyMDE3LTAyLTE2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFdLV2ViVmlldyBpbnNpZGUgYSBVSUNvbGxlY3Rp
b25WaWV3IGZsYXNoZXMgd2hlbiBpdGVtcyBhcmUgaW5zZXJ0ZWQgYWJvdmUgaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBsaXN0
KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvZWZsL05hdGl2ZVdlYldoZWVsRXZl
bnRFZmwuY3BwCiAgICAgU2hhcmVkL2VmbC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhFZmwuY3BwCiAg
ICAgU2hhcmVkL2VmbC9XZWJFdmVudEZhY3RvcnkuY3BwCi0gICAgU2hhcmVkL2VmbC9XZWJLaXQy
SW5pdGlhbGl6ZUVGTC5jcHAKIAogICAgIFNoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGlu
dXguY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAyMTI0NjIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
NzQsNyArNzQsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvZ3Rr
L1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEd0ay5jcHAKICAgICBTaGFyZWQvZ3RrL1dlYkNvbnRleHRN
ZW51SXRlbUd0ay5jcHAKICAgICBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKLSAgICBT
aGFyZWQvZ3RrL1dlYktpdDJJbml0aWFsaXplR1RLLmNwcAogICAgIFNoYXJlZC9ndGsvV2ViU2Vs
ZWN0aW9uRGF0YS5jcHAKIAogICAgIFNoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXgu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24gMjEyNDYyKQorKysg
U291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3
ICsxMDIsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvQ29jb2Ev
Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5tbQogICAgIFNoYXJlZC9Db2NvYS9EYXRhRGV0
ZWN0aW9uUmVzdWx0Lm1tCiAgICAgU2hhcmVkL0NvY29hL0xvYWRQYXJhbWV0ZXJzQ29jb2EubW0K
LSAgICBTaGFyZWQvQ29jb2EvV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbQogICAgIFNoYXJlZC9D
b2NvYS9XS05TQXJyYXkubW0KICAgICBTaGFyZWQvQ29jb2EvV0tOU0RhdGEubW0KICAgICBTaGFy
ZWQvQ29jb2EvV0tOU0RpY3Rpb25hcnkubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIxMjQ2MikKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAxLDggKzIwMSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhh
bmRsZXIoQ3IKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsKLSAgICBV
UkxQYXJzZXI6OnNldEVuYWJsZWQocGFyYW1ldGVycy51cmxQYXJzZXJFbmFibGVkKTsKLQogICAg
IHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwogCiAgICAgV1RG
OjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZQogI2VuZGlmCiAgICAgZW5jb2RlciA8PCBzaG91bGRTdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlcjsKICAgICBlbmNvZGVyIDw8IHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbjsKLSAgICBlbmNvZGVyIDw8IHVybFBhcnNlckVuYWJsZWQ7CiAgICAgZW5jb2RlciA8
PCBsb2FkVGhyb3R0bGVMYXRlbmN5OwogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVy
ZWRGb3JDdXN0b21Qcm90b2NvbHM7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xNDcsOCArMTQ2
LDYgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkVXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnVybFBhcnNlckVuYWJsZWQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubG9hZFRocm90dGxlTGF0ZW5jeSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51
cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scykpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDIxMjQ2MikKKysrIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTczLDcgKzczLDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIAogI2VuZGlmCiAgICAgYm9vbCBzaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJl
SGFuZGxlciB7IGZhbHNlIH07CiAgICAgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Np
b247Ci0gICAgYm9vbCB1cmxQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIGxvYWRUaHJvdHRsZUxhdGVuY3kgeyAwbXMgfTsKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzOwpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYktpdDJJbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViS2l0MkluaXRpYWxpemUuY3BwCShyZXZpc2lvbiAy
MTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViS2l0MkluaXRpYWxpemUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTEgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LXZvaWQgSW5pdGlhbGl6ZVdlYktpdDIoUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUpCit2b2lkIElu
aXRpYWxpemVXZWJLaXQyKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBJbml0V2ViQ29y
ZVN5c3RlbUludGVyZmFjZSgpOwogI2VuZGlmCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplV2ViS2l0
Mihwcm9jZXNzVHlwZSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEluaXRXZWJDb3JlVGhyZWFk
U3lzdGVtSW50ZXJmYWNlKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJLaXQySW5pdGlhbGl6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJLaXQySW5pdGlhbGl6ZS5oCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViS2l0MkluaXRpYWxpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDYg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWVudW0gUHJvY2Vzc1R5cGUgewotICAgIENoaWxk
UHJvY2VzcywKLSAgICBVSVByb2Nlc3MsCi19OwotCi12b2lkIEluaXRpYWxpemVXZWJLaXQyKFBy
b2Nlc3NUeXBlID0gVUlQcm9jZXNzKTsKLXZvaWQgcGxhdGZvcm1Jbml0aWFsaXplV2ViS2l0MihQ
cm9jZXNzVHlwZSk7Cit2b2lkIEluaXRpYWxpemVXZWJLaXQyKCk7CiAKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDYg
QEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZAogICAgIGVuY29kZXIg
PDwgc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgZW5jb2RlciA8PCBz
aG91bGRVc2VGb250U21vb3RoaW5nOwogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQ7Ci0gICAgZW5jb2RlciA8PCB1cmxQYXJzZXJFbmFibGVkOwogICAgIGVuY29k
ZXIgPDwgZm9udFdoaXRlbGlzdDsKICAgICBlbmNvZGVyIDw8IGljb25EYXRhYmFzZUVuYWJsZWQ7
CiAgICAgZW5jb2RlciA8PCB0ZXJtaW5hdGlvblRpbWVvdXQ7CkBAIC0yMTksOCArMjE4LDYgQEAg
Ym9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocGFyYW1ldGVycy51cmxQYXJzZXJFbmFibGVkKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5mb250V2hpdGVsaXN0KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVy
cy5pY29uRGF0YWJhc2VFbmFibGVkKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjEyNDYyKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw2IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzIHsKICAgICBib29sIHNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5k
bGVyIHsgZmFsc2UgfTsKICAgICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgeyB0cnVlIH07
CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCB1cmxQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIGljb25EYXRhYmFzZUVu
YWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtZW1vcnlDYWNoZURpc2FibGVkIHsgZmFsc2UgfTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJLaXQySW5pdGlhbGl6ZUNv
Y29hLm1tCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2Ev
V2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJLaXQySW5pdGlh
bGl6ZS5oIgotCi0jaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYktpdDIo
UHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUpCi17Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBp
bml0T25jZTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHVzZSBOU1VzZXJEZWZhdWx0
cyBpbiB0aGUgY2hpbGQgcHJvY2Vzc2VzLgotICAgIGlmIChwcm9jZXNzVHlwZSA9PSBVSVByb2Nl
c3MpIHsKLSAgICAgICAgZGlzcGF0Y2hfb25jZSgmaW5pdE9uY2UsIF4gewotICAgICAgICAgICAg
TlNTdHJpbmcgKmtleSA9IEAiVVJMUGFyc2VyRW5hYmxlZCI7Ci0gICAgICAgICAgICBpZiAoW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OmtleV0pCi0g
ICAgICAgICAgICAgICAgVVJMUGFyc2VyOjpzZXRFbmFibGVkKFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6a2V5XSk7Ci0gICAgICAgIH0pOwotICAgIH0K
LX0KLQotfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMv
bWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENT
ZXJ2aWNlRW50cnlQb2ludC5oCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQ
b2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgWFBDU2VydmljZUlu
aXRpYWxpemVyKE9TT2JqZWN0UHRyPHgKICAgICAvLyBzbyBlbnN1cmUgdGhhdCB3ZSBoYXZlIGFu
IG91dHN0YW5kaW5nIHRyYW5zYWN0aW9uIGhlcmUuCiAgICAgeHBjX3RyYW5zYWN0aW9uX2JlZ2lu
KCk7CiAKLSAgICBJbml0aWFsaXplV2ViS2l0MihDaGlsZFByb2Nlc3MpOworICAgIEluaXRpYWxp
emVXZWJLaXQyKCk7CiAKICAgICBpZiAoIWRlbGVnYXRlLmNoZWNrRW50aXRsZW1lbnRzKCkpCiAg
ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9l
ZmwvV2ViS2l0MkluaXRpYWxpemVFRkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9lZmwvV2ViS2l0MkluaXRpYWxpemVFRkwuY3BwCShyZXZpc2lvbiAyMTI0NjIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL1dlYktpdDJJbml0aWFsaXplRUZMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi12b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYktpdDIoUHJvY2Vzc1R5cGUpCi17Ci19Ci0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViS2l0MkluaXRpYWxpemVHVEsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViS2l0MkluaXRp
YWxpemVHVEsuY3BwCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1dlYktpdDJJbml0aWFsaXplR1RLLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdDJJ
bml0aWFsaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZVdlYktpdDIoUHJvY2Vzc1R5cGUpCi17Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkocmV2aXNpb24gMjEyNDYyKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgxLDggKzM4MSw2IEBAIE5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjpl
bnMKIAogICAgIHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uID0gbV9z
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247CiAKLSAgICBwYXJhbWV0ZXJzLnVybFBhcnNl
ckVuYWJsZWQgPSBVUkxQYXJzZXI6OmVuYWJsZWQoKTsKLSAgICAKICAgICAvLyBBZGQgYW55IHBs
YXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKICAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhwYXJhbWV0ZXJzKTsKIApAQCAtNTQ5LDggKzU0Nyw2IEBAIFdlYlByb2Nlc3NQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU4KIAogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMgcGFyYW1ldGVyczsKIAotICAgIHBhcmFtZXRlcnMudXJsUGFyc2VyRW5hYmxlZCA9IFVS
TFBhcnNlcjo6ZW5hYmxlZCgpOwotICAgIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQ
YXRoID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aDsKICAgICBpZiAoIXBhcmFt
ZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGFyYW1ldGVycy5pbmplY3Rl
ZEJ1bmRsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLmluamVj
dGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI0NjIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTExMzAsNyArMTEzMCw2IEBACiAJCTVDMjBDQkEwMUJCMUVDRDgwMDg5NUJC
MSAvKiBOZXR3b3JrU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmgg
Ki87IH07CiAJCTVDMjk4REEwMUMzREYwMjEwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjk4RDlFMUMz
REVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLzsgfTsKIAkJNUM3NzA2NzQxRDEx
MzgzODAwMTI3MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNzcwNjczMUQxMTFEOEIwMDEyNzAwRiAvKiBX
ZWJTb2NrZXRQcm92aWRlci5jcHAgKi87IH07Ci0JCTVDNzk0MzlCMUQ3NjJENjIwMDMxMDJENCAv
KiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUM3OTQzOUExRDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0
aWFsaXplQ29jb2EubW0gKi87IH07CiAJCTVDODVDNzg4MUMzRjIzQ0UwMDYxQTRGQSAvKiBQZW5k
aW5nRG93bmxvYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM4NUM3ODYxQzNGMjNDNTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi87
IH07CiAJCTVDOUU1NjgyMURGN0YxQUIwMEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4MDFE
RjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuY3BwICovOyB9OwogCQk1QzlFNTY4
MzFERjdGMUIzMDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1NjgxMURGN0YwNTUwMEM5RUUzMyAv
KiBXS1dlYnNpdGVQb2xpY2llcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMzEzLDcgKzMzMTIsNiBAQAogCQk1QzIwQ0I5RTFCQjBERDE4MDA4
OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTmV0d29ya1Nlc3Npb24uaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFG
RSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UGVuZGluZ0Rvd25sb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNzcwNjczMUQxMTFE
OEIwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRQcm92aWRlci5jcHA7IHBhdGggPSBOZXR3b3JrL1dl
YlNvY2tldFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM3OTQz
OUExRDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0aWFsaXplQ29jb2EubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDODhEQzFEMEY0MUEwMDA5RDJGNkQg
LyogV2ViU29ja2V0UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViU29ja2V0UHJvdmlkZXIuaDsgcGF0aCA9IE5ldHdvcmsvV2ViU29ja2V0UHJvdmlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM4NUM3ODYxQzNGMjNDNTAwNjFBNEZBIC8q
IFBlbmRpbmdEb3dubG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBQZW5kaW5nRG93bmxvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1Bl
bmRpbmdEb3dubG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1NjdG
MURGNzkzMDkwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01NTM2LDcgKzU1MzQsNiBAQAogCQkJCUM1NUY5MTZEMUM1OTVFNDQwMDI5RTkyRCAv
KiBEYXRhRGV0ZWN0aW9uUmVzdWx0Lm1tICovLAogCQkJCTJEMTA4NzYyMUQyQzY0MUIwMEI4NUY4
MiAvKiBMb2FkUGFyYW1ldGVyc0NvY29hLm1tICovLAogCQkJCTFBQjFGNzhFMUQxQjM0QTYwMDdD
OUJEMSAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSAqLywKLQkJCQk1Qzc5NDM5QTFE
NzYyQ0RGMDAzMTAyRDQgLyogV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbSAqLywKIAkJCQkzN0M0
QzA5MjE4MTRCM0FGMDAzNjg4QjkgLyogV0tOU0FycmF5LmggKi8sCiAJCQkJMzdDNEMwOTExODE0
QjNBRjAwMzY4OEI5IC8qIFdLTlNBcnJheS5tbSAqLywKIAkJCQkzNzNDRUFENDE4NTQxN0FFMDA4
QzM2M0QgLyogV0tOU0RhdGEuaCAqLywKQEAgLTk5MDgsNyArOTkwNSw2IEBACiAJCQkJQzAzMzdE
RDMxMjdBMkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUE2MjgwRjMxOTE5OTgyQTAwNkFEOUY5IC8qIFdlYktpdC5tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM5QkE1MDQxNjk3QzQ1MzAwRTQ0NjE2IC8qIFdlYktpdDJJbml0aWFsaXplLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTVDNzk0MzlCMUQ3NjJENjIwMDMxMDJENCAvKiBXZWJLaXQySW5p
dGlhbGl6ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQjA4RkYxNjM5REUxQTAwRUMz
MjRBIC8qIFdlYkxvYWRlclN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEMDAzQTUy
MTlENDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUM5OEM0OEE1MUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25G
b2N1c01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05OTk2LDcgKzk5OTIsNyBAQAogCQkJ
CTM3NjA4ODFFMTUwNDEzRTkwMEZDODJDNyAvKiBXZWJSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTEwQUZGQjkxNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAvKiBXZWJS
ZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNkJFOTY5QTIxRTQzQjhBNDAwOEI3NDgzIC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZCRTk2
OUEyMUU0M0I4QTQwMDhCNzQ4MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUMgLyogV2ViUlRD
U29ja2V0TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1
NDMxODUwMEYzMjgyQyAvKiBXZWJSVENSZXNvbHZlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUQgLyogTmV0d29ya1JUQ1NvY2tl
dE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTg3LDcgKzEwMTgzLDcg
QEAKIAkJCQkzNzk0ODQwODE1MEM0Qjk3MDBFNTJDRTkgLyogV0tSZW5kZXJMYXllci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzNzYwODgyMjE1MDQxNEY3MDBGQzgyQzcgLyogV0tSZW5kZXJPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMzNjc2M0ExMzBDOTlEQzAwNkM5REUyIC8qIFdL
UmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDZCRTk2OTlFMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZCRTk2OTlFMUU0M0I0
MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBN0UzNzc4MThFNEE0RkUwMDNEMEZGRiAvKiBXS1NjcmlwdE1lc3NhZ2Uu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkNCNEU1NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3Jv
bGxWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFDRDFDNjYxQjM0QjlEQzAwMTQyQ0E1IC8q
IFdLU2VjdXJpdHlPcmlnaW4ubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjEyNDYyKQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDkg
KzIzOSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVAKIH0KIAog
dm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKLXsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQocGFy
YW1ldGVycy51cmxQYXJzZXJFbmFibGVkKTsKLSAgICAKK3sgICAgCiAgICAgQVNTRVJUKG1fcGFn
ZU1hcC5pc0VtcHR5KCkpOwogCiAjaWYgT1MoTElOVVgpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTI0ODUpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wMi0xNiAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJl
bW92ZSBvbGQgVVJMIHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY4NDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoZWNrVVJMKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmNoZWNrUmVsYXRpdmVVUkwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tVUkxE
aWZmZXJlbmNlcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGVja1JlbGF0aXZlVVJMRGlm
ZmVyZW5jZXMpOgorCiAyMDE3LTAyLTE2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3BlY2lhbCBVUkxzIHdpdGhvdXQgYSBob3N0IGFyZSBp
bnZhbGlkCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJM
UGFyc2VyLmNwcAkocmV2aXNpb24gMjEyNDcwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEyICs4OCw3IEBA
IGNvbnN0IFRlc3RUYWJzIHRlc3RUYWJzVmFsdWVGb3JTdXJyb2dhdGUKIAogc3RhdGljIHZvaWQg
Y2hlY2tVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEV4cGVjdGVkUGFydHMmIHBh
cnRzLCBUZXN0VGFicyB0ZXN0VGFicyA9IFRlc3RUYWJzOjpZZXMpCiB7Ci0gICAgYm9vbCB3YXNF
bmFibGVkID0gVVJMUGFyc2VyOjplbmFibGVkKCk7Ci0gICAgVVJMUGFyc2VyOjpzZXRFbmFibGVk
KHRydWUpOwogICAgIGF1dG8gdXJsID0gVVJMKFVSTCgpLCB1cmxTdHJpbmcpOwotICAgIFVSTFBh
cnNlcjo6c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgYXV0byBvbGRVUkwgPSBVUkwoVVJMKCksIHVy
bFN0cmluZyk7Ci0gICAgVVJMUGFyc2VyOjpzZXRFbmFibGVkKHdhc0VuYWJsZWQpOwogICAgIAog
ICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmlu
ZygpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMudXNlciwgdXJsLnVzZXIoKSkpOwpAQCAt
MTA0LDIwICs5OSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3QK
ICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5xdWVyeSwgdXJsLnF1ZXJ5KCkpKTsKICAgICBFWFBF
Q1RfVFJVRShlcShwYXJ0cy5mcmFnbWVudCwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7CiAg
ICAgRVhQRUNUX1RSVUUoZXEocGFydHMuc3RyaW5nLCB1cmwuc3RyaW5nKCkpKTsKLSAgICAKLSAg
ICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2NvbCwgb2xkVVJMLnByb3RvY29sKCkudG9TdHJp
bmcoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnVzZXIsIG9sZFVSTC51c2VyKCkpKTsK
LSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wYXNzd29yZCwgb2xkVVJMLnBhc3MoKSkpOwotICAg
IEVYUEVDVF9UUlVFKGVxKHBhcnRzLmhvc3QsIG9sZFVSTC5ob3N0KCkpKTsKLSAgICBFWFBFQ1Rf
RVEocGFydHMucG9ydCwgb2xkVVJMLnBvcnQoKS52YWx1ZV9vcigwKSk7Ci0gICAgRVhQRUNUX1RS
VUUoZXEocGFydHMucGF0aCwgb2xkVVJMLnBhdGgoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBh
cnRzLnF1ZXJ5LCBvbGRVUkwucXVlcnkoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLmZy
YWdtZW50LCBvbGRVUkwuZnJhZ21lbnRJZGVudGlmaWVyKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0cy5zdHJpbmcsIG9sZFVSTC5zdHJpbmcoKSkpOwotICAgIAotICAgIEVYUEVDVF9UUlVF
KFVSTFBhcnNlcjo6YWxsVmFsdWVzRXF1YWwodXJsLCBvbGRVUkwpKTsKKwogICAgIEVYUEVDVF9U
UlVFKFVSTFBhcnNlcjo6aW50ZXJuYWxWYWx1ZXNDb25zaXN0ZW50KHVybCkpOwotICAgIEVYUEVD
VF9UUlVFKFVSTFBhcnNlcjo6aW50ZXJuYWxWYWx1ZXNDb25zaXN0ZW50KG9sZFVSTCkpOwogCiAg
ICAgaWYgKHRlc3RUYWJzID09IFRlc3RUYWJzOjpObykKICAgICAgICAgcmV0dXJuOwpAQCAtMTMy
LDEyICsxMTUsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1VSTChjb25zdCBTdHJpbmcmIHVybFN0CiAK
IHN0YXRpYyB2b2lkIGNoZWNrUmVsYXRpdmVVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNv
bnN0IFN0cmluZyYgYmFzZVVSTFN0cmluZywgY29uc3QgRXhwZWN0ZWRQYXJ0cyYgcGFydHMsIFRl
c3RUYWJzIHRlc3RUYWJzID0gVGVzdFRhYnM6OlllcykKIHsKLSAgICBib29sIHdhc0VuYWJsZWQg
PSBVUkxQYXJzZXI6OmVuYWJsZWQoKTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQodHJ1ZSk7
CiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKFVSTCgpLCBiYXNlVVJMU3RyaW5nKSwgdXJsU3RyaW5n
KTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQoZmFsc2UpOwotICAgIGF1dG8gb2xkVVJMID0g
VVJMKFVSTChVUkwoKSwgYmFzZVVSTFN0cmluZyksIHVybFN0cmluZyk7Ci0gICAgVVJMUGFyc2Vy
OjpzZXRFbmFibGVkKHdhc0VuYWJsZWQpOwogICAgIAogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
LnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmluZygpKSk7CiAgICAgRVhQRUNUX1RSVUUo
ZXEocGFydHMudXNlciwgdXJsLnVzZXIoKSkpOwpAQCAtMTQ5LDE5ICsxMjcsNyBAQCBzdGF0aWMg
dm9pZCBjaGVja1JlbGF0aXZlVVJMKGNvbnN0IFN0cmluCiAgICAgRVhQRUNUX1RSVUUoZXEocGFy
dHMuZnJhZ21lbnQsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOwogICAgIEVYUEVDVF9UUlVF
KGVxKHBhcnRzLnN0cmluZywgdXJsLnN0cmluZygpKSk7CiAgICAgCi0gICAgRVhQRUNUX1RSVUUo
ZXEocGFydHMucHJvdG9jb2wsIG9sZFVSTC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKLSAgICBF
WFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCBvbGRVUkwudXNlcigpKSk7Ci0gICAgRVhQRUNUX1RS
VUUoZXEocGFydHMucGFzc3dvcmQsIG9sZFVSTC5wYXNzKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0cy5ob3N0LCBvbGRVUkwuaG9zdCgpKSk7Ci0gICAgRVhQRUNUX0VRKHBhcnRzLnBvcnQs
IG9sZFVSTC5wb3J0KCkudmFsdWVfb3IoMCkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnBh
dGgsIG9sZFVSTC5wYXRoKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5xdWVyeSwgb2xk
VVJMLnF1ZXJ5KCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5mcmFnbWVudCwgb2xkVVJM
LmZyYWdtZW50SWRlbnRpZmllcigpKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMuc3RyaW5n
LCBvbGRVUkwuc3RyaW5nKCkpKTsKLSAgICAKLSAgICBFWFBFQ1RfVFJVRShVUkxQYXJzZXI6OmFs
bFZhbHVlc0VxdWFsKHVybCwgb2xkVVJMKSk7CiAgICAgRVhQRUNUX1RSVUUoVVJMUGFyc2VyOjpp
bnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQodXJsKSk7Ci0gICAgRVhQRUNUX1RSVUUoVVJMUGFyc2Vy
OjppbnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQob2xkVVJMKSk7CiAgICAgCiAgICAgaWYgKHRlc3RU
YWJzID09IFRlc3RUYWJzOjpObykKICAgICAgICAgcmV0dXJuOwpAQCAtMTc3LDEyICsxNDMsOCBA
QCBzdGF0aWMgdm9pZCBjaGVja1JlbGF0aXZlVVJMKGNvbnN0IFN0cmluCiAKIHN0YXRpYyB2b2lk
IGNoZWNrVVJMRGlmZmVyZW5jZXMoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEV4cGVj
dGVkUGFydHMmIHBhcnRzTmV3LCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0c09sZCwgVGVzdFRh
YnMgdGVzdFRhYnMgPSBUZXN0VGFiczo6WWVzKQogewotICAgIGJvb2wgd2FzRW5hYmxlZCA9IFVS
TFBhcnNlcjo6ZW5hYmxlZCgpOwotICAgIFVSTFBhcnNlcjo6c2V0RW5hYmxlZCh0cnVlKTsKKyAg
ICBVTlVTRURfUEFSQU0ocGFydHNPbGQpOyAvLyBGSVhNRTogUmVtb3ZlIGFsbCB0aGUgb2xkIGV4
cGVjdGVkIHBhcnRzLgogICAgIGF1dG8gdXJsID0gVVJMKFVSTCgpLCB1cmxTdHJpbmcpOwotICAg
IFVSTFBhcnNlcjo6c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgYXV0byBvbGRVUkwgPSBVUkwoVVJM
KCksIHVybFN0cmluZyk7Ci0gICAgVVJMUGFyc2VyOjpzZXRFbmFibGVkKHdhc0VuYWJsZWQpOwog
ICAgIAogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2wo
KS50b1N0cmluZygpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcudXNlciwgdXJsLnVz
ZXIoKSkpOwpAQCAtMTk0LDE5ICsxNTYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1VSTERpZmZlcmVu
Y2VzKGNvbnN0IFN0CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcuZnJhZ21lbnQsIHVybC5m
cmFnbWVudElkZW50aWZpZXIoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3LnN0cmlu
ZywgdXJsLnN0cmluZygpKSk7CiAgICAgCi0gICAgRVhQRUNUX1RSVUUoZXEocGFydHNPbGQucHJv
dG9jb2wsIG9sZFVSTC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0c09sZC51c2VyLCBvbGRVUkwudXNlcigpKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFy
dHNPbGQucGFzc3dvcmQsIG9sZFVSTC5wYXNzKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
c09sZC5ob3N0LCBvbGRVUkwuaG9zdCgpKSk7Ci0gICAgRVhQRUNUX0VRKHBhcnRzT2xkLnBvcnQs
IG9sZFVSTC5wb3J0KCkudmFsdWVfb3IoMCkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzT2xk
LnBhdGgsIG9sZFVSTC5wYXRoKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5xdWVy
eSwgb2xkVVJMLnF1ZXJ5KCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5mcmFnbWVu
dCwgb2xkVVJMLmZyYWdtZW50SWRlbnRpZmllcigpKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFy
dHNPbGQuc3RyaW5nLCBvbGRVUkwuc3RyaW5nKCkpKTsKLSAgICAKLSAgICBFWFBFQ1RfRkFMU0Uo
VVJMUGFyc2VyOjphbGxWYWx1ZXNFcXVhbCh1cmwsIG9sZFVSTCkpOwogICAgIEVYUEVDVF9UUlVF
KFVSTFBhcnNlcjo6aW50ZXJuYWxWYWx1ZXNDb25zaXN0ZW50KHVybCkpOwotICAgIEVYUEVDVF9U
UlVFKFVSTFBhcnNlcjo6aW50ZXJuYWxWYWx1ZXNDb25zaXN0ZW50KG9sZFVSTCkpOwogICAgIAog
ICAgIGlmICh0ZXN0VGFicyA9PSBUZXN0VGFiczo6Tm8pCiAgICAgICAgIHJldHVybjsKQEAgLTIy
MiwxMiArMTcyLDggQEAgc3RhdGljIHZvaWQgY2hlY2tVUkxEaWZmZXJlbmNlcyhjb25zdCBTdAog
CiBzdGF0aWMgdm9pZCBjaGVja1JlbGF0aXZlVVJMRGlmZmVyZW5jZXMoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTFN0cmluZywgY29uc3QgRXhwZWN0ZWRQYXJ0
cyYgcGFydHNOZXcsIGNvbnN0IEV4cGVjdGVkUGFydHMmIHBhcnRzT2xkLCBUZXN0VGFicyB0ZXN0
VGFicyA9IFRlc3RUYWJzOjpZZXMpCiB7Ci0gICAgYm9vbCB3YXNFbmFibGVkID0gVVJMUGFyc2Vy
OjplbmFibGVkKCk7Ci0gICAgVVJMUGFyc2VyOjpzZXRFbmFibGVkKHRydWUpOworICAgIFVOVVNF
RF9QQVJBTShwYXJ0c09sZCk7IC8vIEZJWE1FOiBSZW1vdmUgYWxsIHRoZSBvbGQgZXhwZWN0ZWQg
cGFydHMuCiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKFVSTCgpLCBiYXNlVVJMU3RyaW5nKSwgdXJs
U3RyaW5nKTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQoZmFsc2UpOwotICAgIGF1dG8gb2xk
VVJMID0gVVJMKFVSTChVUkwoKSwgYmFzZVVSTFN0cmluZyksIHVybFN0cmluZyk7Ci0gICAgVVJM
UGFyc2VyOjpzZXRFbmFibGVkKHdhc0VuYWJsZWQpOwogICAgIAogICAgIEVYUEVDVF9UUlVFKGVx
KHBhcnRzTmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmluZygpKSk7CiAgICAgRVhQ
RUNUX1RSVUUoZXEocGFydHNOZXcudXNlciwgdXJsLnVzZXIoKSkpOwpAQCAtMjM5LDE5ICsxODUs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlbGF0aXZlVVJMRGlmZmVyZW5jZXMoCiAgICAgRVhQRUNU
X1RSVUUoZXEocGFydHNOZXcuZnJhZ21lbnQsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOwog
ICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3LnN0cmluZywgdXJsLnN0cmluZygpKSk7CiAgICAg
Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHNPbGQucHJvdG9jb2wsIG9sZFVSTC5wcm90b2NvbCgp
LnRvU3RyaW5nKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC51c2VyLCBvbGRVUkwu
dXNlcigpKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHNPbGQucGFzc3dvcmQsIG9sZFVSTC5w
YXNzKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5ob3N0LCBvbGRVUkwuaG9zdCgp
KSk7Ci0gICAgRVhQRUNUX0VRKHBhcnRzT2xkLnBvcnQsIG9sZFVSTC5wb3J0KCkudmFsdWVfb3Io
MCkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzT2xkLnBhdGgsIG9sZFVSTC5wYXRoKCkpKTsK
LSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5xdWVyeSwgb2xkVVJMLnF1ZXJ5KCkpKTsKLSAg
ICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5mcmFnbWVudCwgb2xkVVJMLmZyYWdtZW50SWRlbnRp
ZmllcigpKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHNPbGQuc3RyaW5nLCBvbGRVUkwuc3Ry
aW5nKCkpKTsKLSAgICAKLSAgICBFWFBFQ1RfRkFMU0UoVVJMUGFyc2VyOjphbGxWYWx1ZXNFcXVh
bCh1cmwsIG9sZFVSTCkpOwogICAgIEVYUEVDVF9UUlVFKFVSTFBhcnNlcjo6aW50ZXJuYWxWYWx1
ZXNDb25zaXN0ZW50KHVybCkpOwotICAgIEVYUEVDVF9UUlVFKFVSTFBhcnNlcjo6aW50ZXJuYWxW
YWx1ZXNDb25zaXN0ZW50KG9sZFVSTCkpOwogICAgIAogICAgIGlmICh0ZXN0VGFicyA9PSBUZXN0
VGFiczo6Tm8pCiAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301861</attachid>
            <date>2017-02-16 17:03:18 -0800</date>
            <delta_ts>2017-02-16 17:07:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168483-20170216170041.patch</filename>
            <type>text/plain</type>
            <size>88940</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMjQ3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE3LTAyLTE2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIG9s
ZCBVUkwgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjg0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAg
ICogcGxhdGZvcm0vVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1lRmlyc3RDaGFy
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1lQ2hhcik6CisgICAgICAgIChXZWJDb3JlOjpV
Ukw6OlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OnNldFByb3RvY29sKToKKyAgICAgICAg
KFdlYkNvcmU6OlVSTDo6c2V0SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OnJlbW92ZVBv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpzZXRQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlVSTDo6c2V0SG9zdEFuZFBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpzZXRVc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlVSTDo6c2V0UGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpVUkw6
OnNldEZyYWdtZW50SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OnNldFF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6c2V0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpV
Ukw6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjppc1VzZXJJbmZvQ2hhcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjppc0hvc3RuYW1lQ2hhcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjppc0lQdjZDaGFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzUGF0
aFNlZ21lbnRFbmRDaGFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEFTQ0lJ
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdE9mKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNoZWNrRW5jb2RlZFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpVUkw6OmluaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kRXNj
YXBpbmdCYWRDaGFycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplc2NhcGVBbmRBcHBl
bmROb25IaWVyYXJjaGljYWxQYXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
YXRoUmVtb3ZpbmdEb3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omhhc1NsYXNoRG90
T3JEb3REb3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpwYXJzZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYW5ub3RCZUFCYXNlVVJMKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmlzRGVmYXVsdFBvcnRGb3JTY2hlbWUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6aG9zdFBvcnRJc0VtcHR5QnV0Q3JlZGVudGlhbHNBcmVQcmVzZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9uRmlsZUhpZXJhcmNoaWNhbFNjaGVtZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjppc0Nhbm9uaWNhbEhvc3RuYW1lTG93ZXJjYXNlRm9yU2No
ZW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRIb3N0bmFtZXNJbk1haWxUb1VS
TCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNh
bFVSTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVIb3N0bmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlUmVsYXRpdmVTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6c3Vic3RpdHV0ZUJhY2tzbGFzaGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2Vy
OjpVUkxQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpzZXRFbmFibGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6ZW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vY2Yv
VVJMQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpVUkwpOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9VUkxNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpVUkw6OlVSTCk6CisKIDIwMTct
MDItMTYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBTcGVjaWFsIFVSTHMgd2l0aG91dCBhIGhvc3QgYXJlIGludmFsaWQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMLmNwcAkocmV2aXNpb24gMjEyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTggKzU1LDYgQEAgdHlwZWRlZiBW
ZWN0b3I8VUNoYXIsIDUxMj4gVUNoYXJCdWZmZXI7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnZhbGlkUG9ydE51bWJlciA9IDB4RkZGRjsKIAotc3RhdGljIGNvbnN0IGNoYXIgd3NTY2hlbWVb
XSA9IHsndycsICdzJ307Ci1zdGF0aWMgY29uc3QgY2hhciBmdHBTY2hlbWVbXSA9IHsnZicsICd0
JywgJ3AnfTsKLXN0YXRpYyBjb25zdCBjaGFyIGZ0cFBvcnRbXSA9IHsnMicsICcxJ307Ci1zdGF0
aWMgY29uc3QgY2hhciB3c3NTY2hlbWVbXSA9IHsndycsICdzJywgJ3MnfTsKLXN0YXRpYyBjb25z
dCBjaGFyIGZpbGVTY2hlbWVbXSA9IHsnZicsICdpJywgJ2wnLCAnZSd9Owotc3RhdGljIGNvbnN0
IGNoYXIgaHR0cFNjaGVtZVtdID0geydoJywgJ3QnLCAndCcsICdwJ307Ci1zdGF0aWMgY29uc3Qg
Y2hhciBodHRwUG9ydFtdID0geyc4JywgJzAnfTsKLXN0YXRpYyBjb25zdCBjaGFyIGh0dHBzU2No
ZW1lW10gPSB7J2gnLCAndCcsICd0JywgJ3AnLCAncyd9Owotc3RhdGljIGNvbnN0IGNoYXIgaHR0
cHNQb3J0W10gPSB7JzQnLCAnNCcsICczJ307Ci1zdGF0aWMgY29uc3QgY2hhciBnb3BoZXJTY2hl
bWVbXSA9IHsnZycsICdvJywgJ3AnLCAnaCcsICdlJywgJ3InfTsKLXN0YXRpYyBjb25zdCBjaGFy
IGdvcGhlclBvcnRbXSA9IHsnNycsICcwJ307Ci0KIGVudW0gVVJMQ2hhcmFjdGVyQ2xhc3NlcyB7
CiAgICAgLy8gYWxwaGEgCiAgICAgU2NoZW1lRmlyc3RDaGFyID0gMSA8PCAwLApAQCAtMzI4LDE5
ICszMTYsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwZXJjZW50RW5jb2RlCiAgICAg
LyogMjUyICovIFBlcmNlbnRFbmNvZGVTaW1wbGUsIC8qIDI1MyAqLyBQZXJjZW50RW5jb2RlU2lt
cGxlLCAvKiAyNTQgKi8gUGVyY2VudEVuY29kZVNpbXBsZSwgLyogMjU1ICovIFBlcmNlbnRFbmNv
ZGVTaW1wbGUKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjb3B5UGF0aFJlbW92aW5nRG90cyhjaGFy
KiBkc3QsIGNvbnN0IGNoYXIqIHNyYywgdW5zaWduZWQgc3JjU3RhcnQsIHVuc2lnbmVkIHNyY0Vu
ZCk7Ci1zdGF0aWMgYm9vbCBlbmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBTdHJpbmcmIHJlbCwg
Y29uc3QgVGV4dEVuY29kaW5nJiwgQ2hhckJ1ZmZlciYgb3VwdXQpOwotc3RhdGljIFN0cmluZyBz
dWJzdGl0dXRlQmFja3NsYXNoZXMoY29uc3QgU3RyaW5nJik7Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc1NjaGVtZUZpcnN0Q2hhcihjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVb
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyldICYgU2NoZW1lRmlyc3RDaGFyOyB9CiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNTY2hlbWVGaXJzdENoYXIoVUNoYXIgYykgeyByZXR1cm4gYyA8PSAw
eGZmICYmIChjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lRmlyc3RDaGFyKTsgfQotc3Rh
dGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hhcihjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNs
YXNzVGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyldICYgU2NoZW1lQ2hhcjsgfQog
c3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hhcihVQ2hhciBjKSB7IHJldHVybiBjIDw9IDB4
ZmYgJiYgKGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hlbWVDaGFyKTsgfQotc3RhdGljIGlu
bGluZSBib29sIGlzVXNlckluZm9DaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFj
dGVyQ2xhc3NUYWJsZVtjXSAmIFVzZXJJbmZvQ2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlz
SG9zdG5hbWVDaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJs
ZVtjXSAmIEhvc3RuYW1lQ2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlzSVB2NkNoYXIodW5z
aWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgSVB2NkNoYXI7
IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1BhdGhTZWdtZW50RW5kQ2hhcihjaGFyIGMpIHsgcmV0
dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyldICYg
UGF0aFNlZ21lbnRFbmRDaGFyOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2VnbWVudEVu
ZENoYXIoVUNoYXIgYykgeyByZXR1cm4gYyA8PSAweGZmICYmIChjaGFyYWN0ZXJDbGFzc1RhYmxl
W2NdICYgUGF0aFNlZ21lbnRFbmRDaGFyKTsgfQogc3RhdGljIGlubGluZSBib29sIGlzQmFkQ2hh
cih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBCYWRD
aGFyOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNUYWJOZXdsaW5lKFVDaGFyIGMpIHsgcmV0dXJu
IGMgPD0gMHhmZiAmJiAoY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFRhYk5ld2xpbmUpOyB9CiAK
QEAgLTM2NCwzNyArMzQxLDYgQEAgc3RhdGljIHZvaWQgY29weUFTQ0lJKGNvbnN0IFN0cmluZyYg
c3RyaQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kQVNDSUkoY29uc3QgU3RyaW5nJiBi
YXNlLCBjb25zdCBjaGFyKiByZWwsIHNpemVfdCBsZW4sIENoYXJCdWZmZXImIGJ1ZmZlcikKLXsK
LSAgICBidWZmZXIucmVzaXplKGJhc2UubGVuZ3RoKCkgKyBsZW4gKyAxKTsKLSAgICBjb3B5QVND
SUkoYmFzZSwgYnVmZmVyLmRhdGEoKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBiYXNl
Lmxlbmd0aCgpLCByZWwsIGxlbik7Ci0gICAgYnVmZmVyW2J1ZmZlci5zaXplKCkgLSAxXSA9ICdc
MCc7Ci19Ci0KLS8vIEZJWE1FOiBNb3ZlIHRvIFdURlN0cmluZy5oIGV2ZW50dWFsbHkuCi0vLyBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaW5kZXggaW4gc3RyaW5nIHxzfCBvZiBhbnkg
b2YgdGhlIGNoYXJhY3RlcnMKLS8vIGluIHx0b0ZpbmR8LiB8dG9GaW5kfCBzaG91bGQgYmUgYSBu
dWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCBhbGwgY2hhcmFjdGVycyB1cAotLy8gdG8gdGhlIG51bGwg
d2lsbCBiZSBzZWFyY2hlZC4gUmV0dXJucyBpbnQgaWYgbm90IGZvdW5kLgotY29uc3QgdW5zaWdu
ZWQgbm90Rm91bmRVbnNpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKLXN0YXRpYyB1bnNpZ25lZCBmaW5kRmlyc3RPZihTdHJpbmdWaWV3IHN0cmluZywgdW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbiwgY29uc3QgY2hhciogdGFyZ2V0KQotewotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydFBvc2l0
aW9uOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgdGFy
Z2V0W2pdOyArK2opIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmdbaV0gPT0gdGFyZ2V0W2pdKQot
ICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
b3RGb3VuZFVuc2lnbmVkOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tFbmNvZGVkU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIEFTU0VSVF9VTlVTRUQodXJsLCB1cmwuY29u
dGFpbnNPbmx5QVNDSUkoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRCh1cmwsIHVybC5pc0VtcHR5KCkg
fHwgaXNTY2hlbWVGaXJzdENoYXIodXJsWzBdKSk7Ci19Ci0KIGlubGluZSBib29sIFVSTDo6cHJv
dG9jb2xJcyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhciogcHJvdG9jb2wpCiB7CiAg
ICAgcmV0dXJuIFdlYkNvcmU6OnByb3RvY29sSXMoc3RyaW5nLCBwcm90b2NvbCk7CkBAIC00MTks
MjYgKzM2NSwyMSBAQCB2b2lkIFVSTDo6aW52YWxpZGF0ZSgpCiAKIFVSTDo6VVJMKFBhcnNlZFVS
TFN0cmluZ1RhZywgY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKFVSTFBhcnNlcjo6ZW5h
YmxlZCgpKSB7Ci0gICAgICAgIFVSTFBhcnNlciBwYXJzZXIodXJsKTsKLSAgICAgICAgKnRoaXMg
PSBwYXJzZXIucmVzdWx0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhcnNlKHVybCk7CisgICAg
VVJMUGFyc2VyIHBhcnNlcih1cmwpOworICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOworCiAj
aWYgT1MoV0lORE9XUykKLSAgICAgICAgLy8gRklYTUUoMTQ4NTk4KTogV29yayBhcm91bmQgV2lu
ZG93cyBsb2NhbCBmaWxlIGhhbmRsaW5nIGJ1ZyBpbiBDRk5ldHdvcmsKLSAgICAgICAgQVNTRVJU
KGlzTG9jYWxGaWxlKCkgfHwgdXJsID09IG1fc3RyaW5nKTsKKyAgICAvLyBGSVhNRSgxNDg1OTgp
OiBXb3JrIGFyb3VuZCBXaW5kb3dzIGxvY2FsIGZpbGUgaGFuZGxpbmcgYnVnIGluIENGTmV0d29y
aworICAgIEFTU0VSVChpc0xvY2FsRmlsZSgpIHx8IHVybCA9PSBtX3N0cmluZyk7CiAjZWxzZQot
ICAgICAgICBBU1NFUlQodXJsID09IG1fc3RyaW5nKTsKKyAgICBBU1NFUlQodXJsID09IG1fc3Ry
aW5nKTsKICNlbmRpZgogfQogCiBVUkw6OlVSTChjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmUpCiB7Ci0gICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAg
IFVSTFBhcnNlciBwYXJzZXIocmVsYXRpdmUsIGJhc2UpOwotICAgICAgICAqdGhpcyA9IHBhcnNl
ci5yZXN1bHQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaW5pdChiYXNlLCByZWxhdGl2ZSwgVVRG
OEVuY29kaW5nKCkpOworICAgIFVSTFBhcnNlciBwYXJzZXIocmVsYXRpdmUsIGJhc2UpOworICAg
ICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogfQogCiBVUkw6OlVSTChjb25zdCBVUkwmIGJhc2Us
IGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCkBA
IC00NDcsMTIgKzM4OCw4IEBAIFVSTDo6VVJMKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgU3RyaW5n
JiAKICAgICAvLyB3ZSBkbyB3aGVuIHN1Ym1pdHRpbmcgYSBmb3JtLiBBIGZvcm0gd2l0aCBHRVQg
bWV0aG9kCiAgICAgLy8gaGFzIGl0cyBjb250ZW50cyBhZGRlZCB0byBhIFVSTCBhcyBxdWVyeSBw
YXJhbXMgYW5kIGl0IG1ha2VzIHNlbnNlCiAgICAgLy8gdG8gYmUgY29uc2lzdGVudC4KLSAgICBp
ZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihyZWxh
dGl2ZSwgYmFzZSwgZW5jb2RpbmcuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsKLSAgICAg
ICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5pdChi
YXNlLCByZWxhdGl2ZSwgZW5jb2RpbmcuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsKLSAg
ICB9CisgICAgVVJMUGFyc2VyIHBhcnNlcihyZWxhdGl2ZSwgYmFzZSwgZW5jb2RpbmcuZW5jb2Rp
bmdGb3JGb3JtU3VibWlzc2lvbigpKTsKKyAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKIH0K
IAogc3RhdGljIGJvb2wgc2hvdWxkVHJpbUZyb21VUkwoVUNoYXIgYykKQEAgLTQ2MywyMDIgKzQw
MCw2IEBAIHN0YXRpYyBib29sIHNob3VsZFRyaW1Gcm9tVVJMKFVDaGFyIGMpCiAgICAgcmV0dXJu
IGMgPD0gJyAnOwogfQogCi12b2lkIFVSTDo6aW5pdChjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCi17Ci0gICAgaWYg
KFVSTFBhcnNlcjo6ZW5hYmxlZCgpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQot
ICAgIC8vIEFsbG93IHJlc29sdXRpb25zIHdpdGggYSBudWxsIG9yIGVtcHR5IGJhc2UgVVJMLCBi
dXQgbm90IHdpdGggYW55IG90aGVyIGludmFsaWQgb25lLgotICAgIC8vIEZJWE1FOiBJcyB0aGlz
IGEgZ29vZCBydWxlPwotICAgIGlmICghYmFzZS5tX2lzVmFsaWQgJiYgIWJhc2UuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fc3RyaW5nID0gcmVsYXRpdmU7Ci0gICAgICAgIGludmFsaWRhdGUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEdldCByaWQgb2YgbGVhZGluZyBhbmQg
dHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgIFN0cmluZyBy
ZWwgPSByZWxhdGl2ZS5zdHJpcFdoaXRlU3BhY2Uoc2hvdWxkVHJpbUZyb21VUkwpOwotCi0gICAg
Ly8gR2V0IHJpZCBvZiBhbnkgdGFicyBhbmQgbmV3bGluZXMuCi0gICAgcmVsID0gcmVsLnJlbW92
ZUNoYXJhY3RlcnMoaXNUYWJOZXdsaW5lKTsKLQotICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdp
dGggV2luIElFLCB0cmVhdCBiYWNrc2xhc2hlcyBhcyBpZiB0aGV5IHdlcmUgc2xhc2hlcywKLSAg
ICAvLyBhcyBsb25nIGFzIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggamF2YXNjcmlwdDogb3IgZGF0
YTogVVJMcy4KLSAgICBpZiAocmVsLmNvbnRhaW5zKCdcXCcpICYmICEocHJvdG9jb2xJc0phdmFT
Y3JpcHQocmVsKSB8fCBwcm90b2NvbElzKHJlbCwgImRhdGEiKSkpCi0gICAgICAgIHJlbCA9IHN1
YnN0aXR1dGVCYWNrc2xhc2hlcyhyZWwpOwotCi0gICAgYm9vbCBhbGxBU0NJSSA9IHJlbC5jb250
YWluc09ubHlBU0NJSSgpOwotICAgIENoYXJCdWZmZXIgc3RyQnVmZmVyOwotICAgIGNoYXIqIHN0
cjsKLSAgICBzaXplX3QgbGVuOwotICAgIGlmIChhbGxBU0NJSSkgewotICAgICAgICBsZW4gPSBy
ZWwubGVuZ3RoKCk7Ci0gICAgICAgIHN0ckJ1ZmZlci5yZXNpemUobGVuICsgMSk7Ci0gICAgICAg
IGNvcHlBU0NJSShyZWwsIHN0ckJ1ZmZlci5kYXRhKCkpOwotICAgICAgICBzdHJCdWZmZXJbbGVu
XSA9IDA7Ci0gICAgICAgIHN0ciA9IHN0ckJ1ZmZlci5kYXRhKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKCFlbmNvZGVSZWxhdGl2ZVN0cmluZyhyZWwsIGVuY29kaW5nLCBzdHJCdWZmZXIp
KSB7Ci0gICAgICAgICAgICBtX3N0cmluZyA9IGJsYW5rVVJMKCk7Ci0gICAgICAgICAgICBpbnZh
bGlkYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzdHIg
PSBzdHJCdWZmZXIuZGF0YSgpOwotICAgICAgICBsZW4gPSBzdHJsZW4oc3RyKTsKLSAgICB9Ci0K
LSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIFJGQywgdGhlIHJlZmVyZW5jZSBzaG91bGQgYmUgaW50
ZXJwcmV0ZWQgYXMgYW4KLSAgICAvLyBhYnNvbHV0ZSBVUkkgaWYgcG9zc2libGUsIHVzaW5nIHRo
ZSAibGVmdG1vc3QsIGxvbmdlc3QiCi0gICAgLy8gYWxnb3JpdGhtLiBJZiB0aGUgVVJJIHJlZmVy
ZW5jZSBpcyBhYnNvbHV0ZSBpdCB3aWxsIGhhdmUgYQotICAgIC8vIHNjaGVtZSwgbWVhbmluZyB0
aGF0IGl0IHdpbGwgaGF2ZSBhIGNvbG9uIGJlZm9yZSB0aGUgZmlyc3QKLSAgICAvLyBub24tc2No
ZW1lIGVsZW1lbnQuCi0gICAgYm9vbCBhYnNvbHV0ZSA9IGZhbHNlOwotICAgIGNoYXIqIHAgPSBz
dHI7Ci0gICAgaWYgKGlzU2NoZW1lRmlyc3RDaGFyKCpwKSkgewotICAgICAgICArK3A7Ci0gICAg
ICAgIHdoaWxlIChpc1NjaGVtZUNoYXIoKnApKSB7Ci0gICAgICAgICAgICArK3A7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCpwID09ICc6JykgewotICAgICAgICAgICAgaWYgKHBbMV0gIT0gJy8n
ICYmIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYmFzZS5wcm90b2NvbCgpLCBTdHJpbmdWaWV3KHJl
aW50ZXJwcmV0X2Nhc3Q8TENoYXIqPihzdHIpLCBwIC0gc3RyKSkgJiYgYmFzZS5pc0hpZXJhcmNo
aWNhbCgpKQotICAgICAgICAgICAgICAgIHN0ciA9IHAgKyAxOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGFic29sdXRlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IENoYXJCdWZmZXIgcGFyc2VCdWZmZXI7Ci0KLSAgICBpZiAoYWJzb2x1dGUpIHsKLSAgICAgICAg
cGFyc2Uoc3RyLCAmcmVsYXRpdmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBi
YXNlIGlzIGVtcHR5IG9yIG9wYXF1ZSAoZS5nLiBkYXRhOiBvciBqYXZhc2NyaXB0OiksIHRoZW4g
dGhlIFVSTCBpcyBpbnZhbGlkCi0gICAgICAgIC8vIHVubGVzcyB0aGUgcmVsYXRpdmUgVVJMIGlz
IGEgc2luZ2xlIGZyYWdtZW50LgotICAgICAgICBpZiAoIWJhc2UuaXNIaWVyYXJjaGljYWwoKSkg
ewotICAgICAgICAgICAgaWYgKHN0clswXSA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBhcHBl
bmRBU0NJSShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5tX3F1ZXJ5RW5kKSwgc3RyLCBsZW4sIHBh
cnNlQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBwYXJzZShwYXJzZUJ1ZmZlci5kYXRhKCksICZy
ZWxhdGl2ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1fc3RyaW5n
ID0gcmVsYXRpdmU7Ci0gICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChzdHJb
MF0pIHsKLSAgICAgICAgY2FzZSAnXDAnOgotICAgICAgICAgICAgLy8gVGhlIHJlZmVyZW5jZSBp
cyBlbXB0eSwgc28gdGhpcyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBkb2N1bWVudCB3aXRo
IGFueSBmcmFnbWVudCBpZGVudGlmaWVyIHJlbW92ZWQuCi0gICAgICAgICAgICAqdGhpcyA9IGJh
c2U7Ci0gICAgICAgICAgICByZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlICcjJzogewotICAgICAgICAgICAgLy8gbXVzdCBiZSBmcmFn
bWVudC1vbmx5IHJlZmVyZW5jZQotICAgICAgICAgICAgYXBwZW5kQVNDSUkoYmFzZS5tX3N0cmlu
Zy5sZWZ0KGJhc2UubV9xdWVyeUVuZCksIHN0ciwgbGVuLCBwYXJzZUJ1ZmZlcik7Ci0gICAgICAg
ICAgICBwYXJzZShwYXJzZUJ1ZmZlci5kYXRhKCksICZyZWxhdGl2ZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlICc/JzogewotICAgICAgICAgICAgLy8gcXVl
cnktb25seSByZWZlcmVuY2UsIHNwZWNpYWwgY2FzZSBuZWVkZWQgZm9yIG5vbi1VUkwgcmVzdWx0
cwotICAgICAgICAgICAgYXBwZW5kQVNDSUkoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UubV9wYXRo
RW5kKSwgc3RyLCBsZW4sIHBhcnNlQnVmZmVyKTsKLSAgICAgICAgICAgIHBhcnNlKHBhcnNlQnVm
ZmVyLmRhdGEoKSwgJnJlbGF0aXZlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgLy8gbXVzdCBiZSBuZXQtcGF0aCBvciBhYnNv
bHV0ZS1wYXRoIHJlZmVyZW5jZQotICAgICAgICAgICAgaWYgKHN0clsxXSA9PSAnLycpIHsKLSAg
ICAgICAgICAgICAgICAvLyBuZXQtcGF0aAotICAgICAgICAgICAgICAgIGFwcGVuZEFTQ0lJKGJh
c2UubV9zdHJpbmcubGVmdChiYXNlLm1fc2NoZW1lRW5kICsgMSksIHN0ciwgbGVuLCBwYXJzZUJ1
ZmZlcik7Ci0gICAgICAgICAgICAgICAgcGFyc2UocGFyc2VCdWZmZXIuZGF0YSgpLCAmcmVsYXRp
dmUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBhYnMtcGF0aAot
ICAgICAgICAgICAgICAgIGFwcGVuZEFTQ0lJKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLm1fcG9y
dEVuZCksIHN0ciwgbGVuLCBwYXJzZUJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgcGFyc2UocGFy
c2VCdWZmZXIuZGF0YSgpLCAmcmVsYXRpdmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ly8gbXVzdCBiZSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZQotCi0gICAgICAgICAgICAgICAgLy8g
QmFzZSBwYXJ0IHBsdXMgcmVsYXRpdmUgcGFydCBwbHVzIG9uZSBwb3NzaWJsZSBzbGFzaCBhZGRl
ZCBpbiBiZXR3ZWVuIHBsdXMgdGVybWluYXRpbmcgXDAgYnl0ZS4KLSAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3QgYnVmZmVyU2l6ZSA9IGJhc2UubV9wYXRoRW5kICsgMSArIGxlbiArIDE7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VCdWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOwotCi0gICAgICAg
ICAgICAgICAgY2hhciogYnVmZmVyUG9zID0gcGFyc2VCdWZmZXIuZGF0YSgpOwotICAgICAgICAg
ICAgICAgIGNoYXIqIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyUG9zOwotCi0gICAgICAgICAgICAgICAg
Ly8gZmlyc3QgY29weSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcGF0aCBmcm9tIHRoZSBiYXNlCi0g
ICAgICAgICAgICAgICAgQ2hhckJ1ZmZlciBiYXNlU3RyaW5nQnVmZmVyKGJhc2UubV9zdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGNvcHlBU0NJSShiYXNlLm1fc3RyaW5nLCBiYXNl
U3RyaW5nQnVmZmVyLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZVN0
cmluZyA9IGJhc2VTdHJpbmdCdWZmZXIuZGF0YSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGJhc2VTdHJpbmdTdGFydCA9IGJhc2VTdHJpbmc7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogcGF0aFN0YXJ0ID0gYmFzZVN0cmluZ1N0YXJ0ICsgYmFzZS5tX3BvcnRFbmQ7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKGJhc2VTdHJpbmdTdGFydCA8IHBhdGhTdGFydCkKLSAgICAgICAg
ICAgICAgICAgICAgKmJ1ZmZlclBvcysrID0gKmJhc2VTdHJpbmdTdGFydCsrOwotICAgICAgICAg
ICAgICAgIGNoYXIqIGJ1ZmZlclBhdGhTdGFydCA9IGJ1ZmZlclBvczsKLQotICAgICAgICAgICAg
ICAgIC8vIG5vdyBjb3B5IHRoZSBiYXNlIHBhdGgKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBiYXNlU3RyaW5nRW5kID0gYmFzZVN0cmluZyArIGJhc2UubV9wYXRoRW5kOwotCi0gICAgICAg
ICAgICAgICAgLy8gZ28gYmFjayB0byB0aGUgbGFzdCBzbGFzaAotICAgICAgICAgICAgICAgIHdo
aWxlIChiYXNlU3RyaW5nRW5kID4gYmFzZVN0cmluZ1N0YXJ0ICYmIGJhc2VTdHJpbmdFbmRbLTFd
ICE9ICcvJykKLSAgICAgICAgICAgICAgICAgICAgYmFzZVN0cmluZ0VuZC0tOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGJhc2VTdHJpbmdFbmQgPT0gYmFzZVN0cmluZ1N0YXJ0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIG5vIHBhdGggaW4gYmFzZSwgYWRkIGEgcGF0aCBzZXBhcmF0b3IgaWYg
bmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlLm1fc2NoZW1lRW5kICsgMSAh
PSBiYXNlLm1fcGF0aEVuZCAmJiAqc3RyICYmICpzdHIgIT0gJz8nICYmICpzdHIgIT0gJyMnKQot
ICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlclBvcysrID0gJy8nOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBjb3B5UGF0aFJl
bW92aW5nRG90cyhidWZmZXJQb3MsIGJhc2VTdHJpbmdTdGFydCwgMCwgYmFzZVN0cmluZ0VuZCAt
IGJhc2VTdHJpbmdTdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogcmVsU3RyaW5nU3RhcnQgPSBzdHI7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogcmVsU3RyaW5nUG9zID0gcmVsU3RyaW5nU3RhcnQ7Ci0KLSAgICAgICAgICAgICAgICB3
aGlsZSAoKnJlbFN0cmluZ1BvcyAmJiAqcmVsU3RyaW5nUG9zICE9ICc/JyAmJiAqcmVsU3RyaW5n
UG9zICE9ICcjJykgewotICAgICAgICAgICAgICAgICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09
ICcuJyAmJiBidWZmZXJQb3NbLTFdID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKHJlbFN0cmluZ1Bvc1sxXSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgIi4iIHNlZ21lbnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWxTdHJpbmdQb3MgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVsU3RyaW5nUG9zKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlbFN0cmluZ1Bvc1sx
XSA9PSAnLicgJiYgaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzJdKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLi4iIHNlZ21lbnQgYW5kIHJl
d2luZCB0aGUgbGFzdCBzZWdtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IFJGQyBsZWF2ZXMgaXQgdXAgdG8gdGhlIGFwcCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGV4
Y2VzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICIuLiIgc2VnbWVudHMgLSB3ZSBj
aG9vc2UgdG8gZHJvcCB0aGVtIHNpbmNlIHNvbWUgd2ViIGNvbnRlbnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyByZWxpZXMgb24gdGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWxTdHJpbmdQb3MgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVsU3RyaW5nUG9zWzBdID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVsU3RyaW5nUG9zKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclBv
cyA+IGJ1ZmZlclBhdGhTdGFydCArIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlclBvcy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChidWZmZXJQ
b3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxICAmJiBidWZmZXJQb3NbLTFdICE9ICcvJykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyUG9zLS07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAqYnVmZmVyUG9zID0gKnJlbFN0
cmluZ1BvczsKLSAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zKys7Ci0gICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlclBvcysrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIGFsbCBkb25lIHdpdGggdGhlIHBhdGggd29yaywgbm93IGNvcHkgYW55IHJlbWFpbmRl
cgotICAgICAgICAgICAgICAgIC8vIG9mIHRoZSByZWxhdGl2ZSByZWZlcmVuY2U7IHRoaXMgd2ls
bCBhbHNvIGFkZCBhIG51bGwgdGVybWluYXRvcgotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBjdXJyZW50T2Zmc2V0ID0gYnVmZmVyUG9zIC0gYnVmZmVyU3RhcnQ7Ci0gICAgICAgICAgICAg
ICAgYXV0byByZW1haW5pbmdCdWZmZXJTaXplID0gYnVmZmVyU2l6ZSAtIGN1cnJlbnRPZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRPZmZzZXQgKyBzdHJsZW4ocmVsU3RyaW5n
UG9zKSArIDEgPD0gYnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICAgICAgc3RybmNweShidWZmZXJQ
b3MsIHJlbFN0cmluZ1BvcywgcmVtYWluaW5nQnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICAgICAg
YnVmZmVyUG9zW3JlbWFpbmluZ0J1ZmZlclNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgICAg
ICAgICBwYXJzZShwYXJzZUJ1ZmZlci5kYXRhKCksICZyZWxhdGl2ZSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIFVSTCBVUkw6
Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7CiAgICAgVVJMIHJlc3VsdCA9ICp0aGlzOwpAQCAtODk5
LDIwICs2NDAsMTMgQEAgYm9vbCBVUkw6OnNldFByb3RvY29sKGNvbnN0IFN0cmluZyYgcykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgaWYg
KFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1h
a2VTdHJpbmcobmV3UHJvdG9jb2wsICI6IiwgbV9zdHJpbmcpKTsKLSAgICAgICAgICAgICp0aGlz
ID0gcGFyc2VyLnJlc3VsdCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBhcnNlKG5l
d1Byb3RvY29sICsgJzonICsgbV9zdHJpbmcpOworICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1h
a2VTdHJpbmcobmV3UHJvdG9jb2wsICI6IiwgbV9zdHJpbmcpKTsKKyAgICAgICAgKnRoaXMgPSBw
YXJzZXIucmVzdWx0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChV
UkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VTdHJp
bmcobmV3UHJvdG9jb2wsIG1fc3RyaW5nLnN1YnN0cmluZyhtX3NjaGVtZUVuZCkpKTsKLSAgICAg
ICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBhcnNlKG5l
d1Byb3RvY29sICsgbV9zdHJpbmcuc3Vic3RyaW5nKG1fc2NoZW1lRW5kKSk7Ci0KKyAgICBVUkxQ
YXJzZXIgcGFyc2VyKG1ha2VTdHJpbmcobmV3UHJvdG9jb2wsIG1fc3RyaW5nLnN1YnN0cmluZyht
X3NjaGVtZUVuZCkpKTsKKyAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtOTc4LDIzICs3MTIsMTcgQEAgdm9pZCBVUkw6OnNldEhvc3QoY29uc3Qg
U3RyaW5nJiBzKQogICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIi8vIik7CiAgICAgYnVp
bGRlci5hcHBlbmQoU3RyaW5nVmlldyhlbmNvZGVkSG9zdE5hbWUuZGF0YSgpLCBlbmNvZGVkSG9z
dE5hbWUuc2l6ZSgpKSk7CiAgICAgYnVpbGRlci5hcHBlbmQobV9zdHJpbmcuc3Vic3RyaW5nKG1f
aG9zdEVuZCkpOwotICAgIAotICAgIGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAg
ICBVUkxQYXJzZXIgcGFyc2VyKGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICp0aGlzID0g
cGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZShidWlsZGVyLnRvU3Ry
aW5nKCkpOworCisgICAgVVJMUGFyc2VyIHBhcnNlcihidWlsZGVyLnRvU3RyaW5nKCkpOworICAg
ICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogfQogCiB2b2lkIFVSTDo6cmVtb3ZlUG9ydCgpCiB7
CiAgICAgaWYgKG1faG9zdEVuZCA9PSBtX3BvcnRFbmQpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtX3N0
cmluZy5sZWZ0KG1faG9zdEVuZCkgKyBtX3N0cmluZy5zdWJzdHJpbmcobV9wb3J0RW5kKSk7Ci0g
ICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxzZQotICAgICAgICBwYXJz
ZShtX3N0cmluZy5sZWZ0KG1faG9zdEVuZCkgKyBtX3N0cmluZy5zdWJzdHJpbmcobV9wb3J0RW5k
KSk7CisgICAgVVJMUGFyc2VyIHBhcnNlcihtX3N0cmluZy5sZWZ0KG1faG9zdEVuZCkgKyBtX3N0
cmluZy5zdWJzdHJpbmcobV9wb3J0RW5kKSk7CisgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7
CiB9CiAKIHZvaWQgVVJMOjpzZXRQb3J0KHVuc2lnbmVkIHNob3J0IGkpCkBAIC0xMDA1LDExICs3
MzMsOCBAQCB2b2lkIFVSTDo6c2V0UG9ydCh1bnNpZ25lZCBzaG9ydCBpKQogICAgIGJvb2wgY29s
b25OZWVkZWQgPSBtX3BvcnRFbmQgPT0gbV9ob3N0RW5kOwogICAgIHVuc2lnbmVkIHBvcnRTdGFy
dCA9IChjb2xvbk5lZWRlZCA/IG1faG9zdEVuZCA6IG1faG9zdEVuZCArIDEpOwogCi0gICAgaWYg
KFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgIFVSTFBhcnNlciBwYXJzZXIobWFrZVN0
cmluZyhtX3N0cmluZy5sZWZ0KHBvcnRTdGFydCksIChjb2xvbk5lZWRlZCA/ICI6IiA6ICIiKSwg
U3RyaW5nOjpudW1iZXIoaSksIG1fc3RyaW5nLnN1YnN0cmluZyhtX3BvcnRFbmQpKSk7Ci0gICAg
ICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZSht
X3N0cmluZy5sZWZ0KHBvcnRTdGFydCkgKyAoY29sb25OZWVkZWQgPyAiOiIgOiAiIikgKyBTdHJp
bmc6Om51bWJlcihpKSArIG1fc3RyaW5nLnN1YnN0cmluZyhtX3BvcnRFbmQpKTsKKyAgICBVUkxQ
YXJzZXIgcGFyc2VyKG1ha2VTdHJpbmcobV9zdHJpbmcubGVmdChwb3J0U3RhcnQpLCAoY29sb25O
ZWVkZWQgPyAiOiIgOiAiIiksIFN0cmluZzo6bnVtYmVyKGkpLCBtX3N0cmluZy5zdWJzdHJpbmco
bV9wb3J0RW5kKSkpOworICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogfQogCiB2b2lkIFVS
TDo6c2V0SG9zdEFuZFBvcnQoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCkKQEAgLTEwNTAsMTEg
Kzc3NSw4IEBAIHZvaWQgVVJMOjpzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJpbmcmIGgKICAgICB9
CiAgICAgYnVpbGRlci5hcHBlbmQobV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9ydEVuZCkpOwogCi0g
ICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgIFVSTFBhcnNlciBwYXJzZXIo
YnVpbGRlci50b1N0cmluZygpKTsKLSAgICAgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHBhcnNlKGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgVVJMUGFy
c2VyIHBhcnNlcihidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICp0aGlzID0gcGFyc2VyLnJlc3Vs
dCgpOwogfQogCiB2b2lkIFVSTDo6c2V0VXNlcihjb25zdCBTdHJpbmcmIHVzZXIpCkBAIC0xMDcz
LDIyICs3OTUsMTYgQEAgdm9pZCBVUkw6OnNldFVzZXIoY29uc3QgU3RyaW5nJiB1c2VyKQogICAg
ICAgICAvLyBBZGQgJ0AnIGlmIHdlIGRpZG4ndCBoYXZlIG9uZSBiZWZvcmUuCiAgICAgICAgIGlm
IChlbmQgPT0gbV9ob3N0RW5kIHx8IChlbmQgPT0gbV9wYXNzd29yZEVuZCAmJiBtX3N0cmluZ1tl
bmRdICE9ICdAJykpCiAgICAgICAgICAgICB1LmFwcGVuZCgnQCcpOwotICAgICAgICBpZiAoVVJM
UGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgICAgIFVSTFBhcnNlciBwYXJzZXIobWFrZVN0
cmluZyhtX3N0cmluZy5sZWZ0KG1fdXNlclN0YXJ0KSwgdSwgbV9zdHJpbmcuc3Vic3RyaW5nKGVu
ZCkpKTsKLSAgICAgICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV91c2VyU3RhcnQpICsgdSArIG1f
c3RyaW5nLnN1YnN0cmluZyhlbmQpKTsKKyAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtlU3Ry
aW5nKG1fc3RyaW5nLmxlZnQobV91c2VyU3RhcnQpLCB1LCBtX3N0cmluZy5zdWJzdHJpbmcoZW5k
KSkpOworICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dv
cmQuCiAgICAgICAgIGlmIChtX3VzZXJFbmQgPT0gbV9wYXNzd29yZEVuZCAmJiBlbmQgIT0gbV9o
b3N0RW5kICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQogICAgICAgICAgICAgZW5kICs9IDE7CiAg
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFyc2UgaW4gdGhlIGV4dHJlbWVseSBjb21tb24g
Y2FzZSB3aGVyZSB3ZSBhcmUgbm90IGdvaW5nIHRvIG1ha2UgYSBjaGFuZ2UuCiAgICAgICAgIGlm
IChtX3VzZXJTdGFydCAhPSBlbmQpIHsKLSAgICAgICAgICAgIGlmIChVUkxQYXJzZXI6OmVuYWJs
ZWQoKSkgewotICAgICAgICAgICAgICAgIFVSTFBhcnNlciBwYXJzZXIobWFrZVN0cmluZyhtX3N0
cmluZy5sZWZ0KG1fdXNlclN0YXJ0KSwgbV9zdHJpbmcuc3Vic3RyaW5nKGVuZCkpKTsKLSAgICAg
ICAgICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV91c2VyU3RhcnQpICsgbV9zdHJp
bmcuc3Vic3RyaW5nKGVuZCkpOworICAgICAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtlU3Ry
aW5nKG1fc3RyaW5nLmxlZnQobV91c2VyU3RhcnQpLCBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSkp
OworICAgICAgICAgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0xMTA2LDIyICs4MjIsMTYgQEAgdm9pZCBVUkw6OnNldFBhc3MoY29uc3QgU3RyaW5n
JiBwYXNzd29yZAogICAgICAgICAvLyBFYXQgdGhlIGV4aXN0aW5nICdAJyBzaW5jZSB3ZSBhcmUg
Z29pbmcgdG8gYWRkIG91ciBvd24uCiAgICAgICAgIGlmIChlbmQgIT0gbV9ob3N0RW5kICYmIG1f
c3RyaW5nW2VuZF0gPT0gJ0AnKQogICAgICAgICAgICAgZW5kICs9IDE7Ci0gICAgICAgIGlmIChV
UkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtl
U3RyaW5nKG1fc3RyaW5nLmxlZnQobV91c2VyRW5kKSwgcCwgbV9zdHJpbmcuc3Vic3RyaW5nKGVu
ZCkpKTsKLSAgICAgICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV91c2VyRW5kKSArIHAgKyBtX3N0
cmluZy5zdWJzdHJpbmcoZW5kKSk7CisgICAgICAgIFVSTFBhcnNlciBwYXJzZXIobWFrZVN0cmlu
ZyhtX3N0cmluZy5sZWZ0KG1fdXNlckVuZCksIHAsIG1fc3RyaW5nLnN1YnN0cmluZyhlbmQpKSk7
CisgICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIFJlbW92ZSAnQCcgaWYgd2Ugbm93IGhhdmUgbmVpdGhlciB1c2VyIG5vciBwYXNzd29yZC4K
ICAgICAgICAgaWYgKG1fdXNlclN0YXJ0ID09IG1fdXNlckVuZCAmJiBlbmQgIT0gbV9ob3N0RW5k
ICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQogICAgICAgICAgICAgZW5kICs9IDE7CiAgICAgICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gcGFyc2UgaW4gdGhlIGV4dHJlbWVseSBjb21tb24gY2FzZSB3
aGVyZSB3ZSBhcmUgbm90IGdvaW5nIHRvIG1ha2UgYSBjaGFuZ2UuCiAgICAgICAgIGlmIChtX3Vz
ZXJFbmQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBpZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsK
LSAgICAgICAgICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VTdHJpbmcobV9zdHJpbmcubGVm
dChtX3VzZXJFbmQpLCBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSkpOwotICAgICAgICAgICAgICAg
ICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgcGFyc2UobV9zdHJpbmcubGVmdChtX3VzZXJFbmQpICsgbV9zdHJpbmcuc3Vic3RyaW5n
KGVuZCkpOworICAgICAgICAgICAgVVJMUGFyc2VyIHBhcnNlcihtYWtlU3RyaW5nKG1fc3RyaW5n
LmxlZnQobV91c2VyRW5kKSwgbV9zdHJpbmcuc3Vic3RyaW5nKGVuZCkpKTsKKyAgICAgICAgICAg
ICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTEzMywx
MCArODQzLDcgQEAgdm9pZCBVUkw6OnNldEZyYWdtZW50SWRlbnRpZmllcihTdHJpbmdWaQogCiAg
ICAgLy8gRklYTUU6IE9wdGltaXplIHRoZSBjYXNlIHdoZXJlIHRoZSBpZGVudGlmaWVyIGFscmVh
ZHkgaGFwcGVucyB0byBiZSBlcXVhbCB0byB3aGF0IHdhcyBwYXNzZWQ/CiAgICAgLy8gRklYTUU6
IElzIGl0IGNvcnJlY3QgdG8gZG8gdGhpcyB3aXRob3V0IGVuY29kaW5nIGFuZCBlc2NhcGluZyBu
b24tQVNDSUkgY2hhcmFjdGVycz8KLSAgICBpZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpCi0gICAg
ICAgICp0aGlzID0gVVJMUGFyc2VyIHsgbWFrZVN0cmluZyhTdHJpbmdWaWV3IHsgbV9zdHJpbmcg
fS5zdWJzdHJpbmcoMCwgbV9xdWVyeUVuZCksICcjJywgaWRlbnRpZmllcikgfS5yZXN1bHQoKTsK
LSAgICBlbHNlCi0gICAgICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQobV9xdWVyeUVuZCkgKyAiIyIg
KyBpZGVudGlmaWVyKTsKKyAgICAqdGhpcyA9IFVSTFBhcnNlciB7IG1ha2VTdHJpbmcoU3RyaW5n
VmlldyB7IG1fc3RyaW5nIH0uc3Vic3RyaW5nKDAsIG1fcXVlcnlFbmQpLCAnIycsIGlkZW50aWZp
ZXIpIH0ucmVzdWx0KCk7CiB9CiAKIHZvaWQgVVJMOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXIo
KQpAQCAtMTE2MSwxNyArODY4LDExIEBAIHZvaWQgVVJMOjpzZXRRdWVyeShjb25zdCBTdHJpbmcm
IHF1ZXJ5KQogICAgIC8vIGFjY2VzcyB0byB0aGUgZG9jdW1lbnQgaW4gdGhpcyBmdW5jdGlvbi4K
ICAgICAvLyBodHRwczovL3dlYmtpdC5vcmcvYi8xNjExNzYKICAgICBpZiAoKHF1ZXJ5LmlzRW1w
dHkoKSB8fCBxdWVyeVswXSAhPSAnPycpICYmICFxdWVyeS5pc051bGwoKSkgewotICAgICAgICBp
ZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpIHsKLSAgICAgICAgICAgIFVSTFBhcnNlciBwYXJzZXIo
bWFrZVN0cmluZyhtX3N0cmluZy5sZWZ0KG1fcGF0aEVuZCksICI/IiwgcXVlcnksIG1fc3RyaW5n
LnN1YnN0cmluZyhtX3F1ZXJ5RW5kKSkpOwotICAgICAgICAgICAgKnRoaXMgPSBwYXJzZXIucmVz
dWx0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGFyc2UobV9zdHJpbmcubGVmdCht
X3BhdGhFbmQpICsgIj8iICsgcXVlcnkgKyBtX3N0cmluZy5zdWJzdHJpbmcobV9xdWVyeUVuZCkp
OworICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VTdHJpbmcobV9zdHJpbmcubGVmdChtX3Bh
dGhFbmQpLCAiPyIsIHF1ZXJ5LCBtX3N0cmluZy5zdWJzdHJpbmcobV9xdWVyeUVuZCkpKTsKKyAg
ICAgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1h
a2VTdHJpbmcobV9zdHJpbmcubGVmdChtX3BhdGhFbmQpLCBxdWVyeSwgbV9zdHJpbmcuc3Vic3Ry
aW5nKG1fcXVlcnlFbmQpKSk7Ci0gICAgICAgICAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fcGF0aEVu
ZCkgKyBxdWVyeSArIG1fc3RyaW5nLnN1YnN0cmluZyhtX3F1ZXJ5RW5kKSk7CisgICAgICAgIFVS
TFBhcnNlciBwYXJzZXIobWFrZVN0cmluZyhtX3N0cmluZy5sZWZ0KG1fcGF0aEVuZCksIHF1ZXJ5
LCBtX3N0cmluZy5zdWJzdHJpbmcobV9xdWVyeUVuZCkpKTsKKyAgICAgICAgKnRoaXMgPSBwYXJz
ZXIucmVzdWx0KCk7CiAgICAgfQogCiB9CkBAIC0xMTg3LDExICs4ODgsOCBAQCB2b2lkIFVSTDo6
c2V0UGF0aChjb25zdCBTdHJpbmcmIHMpCiAgICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8IHBhdGhb
MF0gIT0gJy8nKQogICAgICAgICBwYXRoID0gIi8iICsgcGF0aDsKIAotICAgIGlmIChVUkxQYXJz
ZXI6OmVuYWJsZWQoKSkgewotICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VTdHJpbmcobV9z
dHJpbmcubGVmdChtX3BvcnRFbmQpLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHBhdGgp
LCBtX3N0cmluZy5zdWJzdHJpbmcobV9wYXRoRW5kKSkpOwotICAgICAgICAqdGhpcyA9IHBhcnNl
ci5yZXN1bHQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFyc2UobV9zdHJpbmcubGVmdChtX3Bv
cnRFbmQpICsgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhwYXRoKSArIG1fc3RyaW5nLnN1
YnN0cmluZyhtX3BhdGhFbmQpKTsKKyAgICBVUkxQYXJzZXIgcGFyc2VyKG1ha2VTdHJpbmcobV9z
dHJpbmcubGVmdChtX3BvcnRFbmQpLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHBhdGgp
LCBtX3N0cmluZy5zdWJzdHJpbmcobV9wYXRoRW5kKSkpOworICAgICp0aGlzID0gcGFyc2VyLnJl
c3VsdCgpOwogfQogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQpAQCAtMTIxMSwxOTAgKzkwOSwxMSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRFc2Nh
cGVkQ2hhcihjaGFyKiYgYnVmCiAgICAgcGxhY2VCeXRlQXNIZXgoYywgYnVmZmVyKTsKIH0KIAot
c3RhdGljIHZvaWQgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhjaGFyKiYgYnVmZmVyLCBjb25zdCBj
aGFyKiBzdHJTdGFydCwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBjaGFyKiBwID0gYnVmZmVyOwot
Ci0gICAgY29uc3QgY2hhciogc3RyID0gc3RyU3RhcnQ7Ci0gICAgY29uc3QgY2hhciogc3RyRW5k
ID0gc3RyU3RhcnQgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHN0ciA8IHN0ckVuZCkgewotICAgICAg
ICB1bnNpZ25lZCBjaGFyIGMgPSAqc3RyKys7Ci0gICAgICAgIGlmIChpc0JhZENoYXIoYykpIHsK
LSAgICAgICAgICAgIGlmIChjID09ICclJyB8fCBjID09ICc/JykKLSAgICAgICAgICAgICAgICAq
cCsrID0gYzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGMgIT0gMHgwOSAmJiBjICE9IDB4MGEgJiYg
YyAhPSAweDBkKQotICAgICAgICAgICAgICAgIGFwcGVuZEVzY2FwZWRDaGFyKHAsIGMpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICpwKysgPSBjOwotICAgIH0KLQotICAgIGJ1ZmZlciA9
IHA7Ci19Ci0KLXN0YXRpYyB2b2lkIGVzY2FwZUFuZEFwcGVuZE5vbkhpZXJhcmNoaWNhbFBhcnQo
Y2hhciomIGJ1ZmZlciwgY29uc3QgY2hhciogc3RyU3RhcnQsIHNpemVfdCBsZW5ndGgpCi17Ci0g
ICAgY2hhciogcCA9IGJ1ZmZlcjsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IHN0clN0YXJ0Owot
ICAgIGNvbnN0IGNoYXIqIHN0ckVuZCA9IHN0clN0YXJ0ICsgbGVuZ3RoOwotICAgIHdoaWxlIChz
dHIgPCBzdHJFbmQpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKnN0cisrOwotICAgICAg
ICAvLyBTdHJpcCBDUiwgTEYgYW5kIFRhYiBmcm9tIGZyYWdtZW50cywgcGVyOgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc3MAotICAgICAgICBp
ZiAoYyA9PSAweDA5IHx8IGMgPT0gMHgwYSB8fCBjID09IDB4MGQpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAvLyBDaHJvbWUgYW5kIElFIGFsbG93IG5vbi1hc2NpaSBjaGFyYWN0
ZXJzIGluIGZyYWdtZW50cywgaG93ZXZlciBkb2luZwotICAgICAgICAvLyBzbyB3b3VsZCBoaXQg
YW4gQVNTRVJUIGluIGNoZWNrRW5jb2RlZFN0cmluZywgc28gZm9yIG5vdyB3ZSBkb24ndC4KLSAg
ICAgICAgaWYgKGMgPCAweDIwIHx8IGMgPj0gMTI3KSB7Ci0gICAgICAgICAgICBhcHBlbmRFc2Nh
cGVkQ2hhcihwLCBjKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
ICpwKysgPSBjOwotICAgIH0KLQotICAgIGJ1ZmZlciA9IHA7Ci19Ci0KLS8vIGNvcHkgYSBwYXRo
LCBhY2NvdW50aW5nIGZvciAiLiIgYW5kICIuLiIgc2VnbWVudHMKLXN0YXRpYyB1bnNpZ25lZCBj
b3B5UGF0aFJlbW92aW5nRG90cyhjaGFyKiBkc3QsIGNvbnN0IGNoYXIqIHNyYywgdW5zaWduZWQg
c3JjU3RhcnQsIHVuc2lnbmVkIHNyY0VuZCkKLXsKLSAgICBjaGFyKiBidWZmZXJQYXRoU3RhcnQg
PSBkc3Q7Ci0KLSAgICAvLyBlbXB0eSBwYXRoIGlzIGEgc3BlY2lhbCBjYXNlLCBhbmQgbmVlZCBu
b3QgaGF2ZSBhIGxlYWRpbmcgc2xhc2gKLSAgICBpZiAoc3JjU3RhcnQgIT0gc3JjRW5kKSB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmdTdGFydCA9IHNyYyArIHNyY1N0YXJ0OwotICAg
ICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nRW5kID0gc3JjICsgc3JjRW5kOwotICAgICAgICBj
b25zdCBjaGFyKiBiYXNlU3RyaW5nUG9zID0gYmFzZVN0cmluZ1N0YXJ0OwotCi0gICAgICAgIC8v
IHRoaXMgY29kZSBpcyB1bnByZXBhcmVkIGZvciBwYXRocyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRo
IGEKLSAgICAgICAgLy8gc2xhc2ggYW5kIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBvbmUgaW4gdGhl
IHNvdXJjZSBzdHJpbmcKLSAgICAgICAgQVNTRVJUKGJhc2VTdHJpbmdQb3NbMF0gPT0gJy8nKTsK
LQotICAgICAgICAvLyBjb3B5IHRoZSBsZWFkaW5nIHNsYXNoIGludG8gdGhlIGRlc3RpbmF0aW9u
Ci0gICAgICAgICpkc3QgPSAqYmFzZVN0cmluZ1BvczsKLSAgICAgICAgYmFzZVN0cmluZ1Bvcysr
OwotICAgICAgICBkc3QrKzsKLQotICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ1BvcyA8IGJhc2VT
dHJpbmdFbmQpIHsKLSAgICAgICAgICAgIGlmIChiYXNlU3RyaW5nUG9zWzBdID09ICcuJyAmJiBk
c3RbLTFdID09ICcvJykgewotICAgICAgICAgICAgICAgIGlmIChiYXNlU3RyaW5nUG9zWzFdID09
ICcvJyB8fCBiYXNlU3RyaW5nUG9zICsgMSA9PSBiYXNlU3RyaW5nRW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHNraXAgb3ZlciAiLiIgc2VnbWVudAotICAgICAgICAgICAgICAgICAgICBi
YXNlU3RyaW5nUG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYmFzZVN0cmluZ1Bvc1sxXSA9PSAnLicgJiYgKGJhc2VTdHJp
bmdQb3NbMl0gPT0gJy8nIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYXNlU3RyaW5nUG9zICsgMiA9PSBiYXNlU3RyaW5nRW5kKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBza2lwIG92ZXIgIi4uIiBzZWdtZW50IGFuZCByZXdpbmQgdGhlIGxhc3Qgc2VnbWVu
dAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgUkZDIGxlYXZlcyBpdCB1cCB0byB0aGUgYXBw
IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggZXhjZXNzCi0gICAgICAgICAgICAgICAgICAgIC8v
ICIuLiIgc2VnbWVudHMgLSB3ZSBjaG9vc2UgdG8gZHJvcCB0aGVtIHNpbmNlIHNvbWUgd2ViIGNv
bnRlbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVsaWVzIG9uIHRoaXMuCi0gICAgICAgICAg
ICAgICAgICAgIGJhc2VTdHJpbmdQb3MgKz0gMzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRz
dCA+IGJ1ZmZlclBhdGhTdGFydCArIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBkc3QtLTsK
LSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRzdCA+IGJ1ZmZlclBhdGhTdGFydCAmJiBkc3Rb
LTFdICE9ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0tOwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICpkc3QgPSAqYmFzZVN0cmluZ1BvczsKLSAgICAgICAgICAgIGJhc2VTdHJpbmdQ
b3MrKzsKLSAgICAgICAgICAgIGRzdCsrOwotICAgICAgICB9Ci0gICAgfQotICAgICpkc3QgPSAn
XDAnOwotICAgIHJldHVybiBkc3QgLSBidWZmZXJQYXRoU3RhcnQ7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBoYXNTbGFzaERvdE9yRG90RG90KGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oc3RyKTsKLSAgICBpZiAoISpwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgY2hhciBwYyA9ICpwOwotICAgIHdoaWxlICh1bnNpZ25lZCBjaGFyIGMgPSAqKytwKSB7Ci0g
ICAgICAgIGlmIChjID09ICcuJyAmJiAocGMgPT0gJy8nIHx8IHBjID09ICcuJykpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcGMgPSBjOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgVVJMOjpwYXJzZShjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBp
ZiAoVVJMUGFyc2VyOjplbmFibGVkKCkpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIGNoZWNrRW5jb2RlZFN0cmluZyhzdHJpbmcpOwotCi0gICAgQ2hhckJ1ZmZlciBidWZmZXIo
c3RyaW5nLmxlbmd0aCgpICsgMSk7Ci0gICAgY29weUFTQ0lJKHN0cmluZywgYnVmZmVyLmRhdGEo
KSk7Ci0gICAgYnVmZmVyW3N0cmluZy5sZW5ndGgoKV0gPSAnXDAnOwotICAgIHBhcnNlKGJ1ZmZl
ci5kYXRhKCksICZzdHJpbmcpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2Fubm90QmVBQmFz
ZVVSTChjb25zdCBVUkwmIHVybCkKLXsKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBodHRwczovL3Vy
bC5zcGVjLndoYXR3Zy5vcmcvI3VybC1jYW5ub3QtYmUtYS1iYXNlLXVybC1mbGFnIHByb3Blcmx5
Ci0gICAgLy8gQWNjb3JkaW5nIHNwZWMsIHRoaXMgc2hvdWxkIGJlIGNvbXB1dGVkIGF0IHBhcnNp
bmcgdGltZS4KLSAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2UganVzdCBjaGVjayB3aGV0aGVyIHRo
ZSBzY2hlbWUgaXMgc3BlY2lhbCBvciBub3QuCi0gICAgaWYgKHVybC5wcm90b2NvbElzKCJmdHAi
KSB8fCB1cmwucHJvdG9jb2xJcygiZmlsZSIpIHx8IHVybC5wcm90b2NvbElzKCJnb3BoZXIiKSB8
fCB1cmwucHJvdG9jb2xJcygiaHR0cCIpIHx8IHVybC5wcm90b2NvbElzKCJodHRwcyIpIHx8IHVy
bC5wcm90b2NvbElzKCJ3cyIpIHx8IHVybC5wcm90b2NvbElzKCJ3c3MiKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBJbXBsZW1lbnRhdGlvbiBvZiBo
dHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1zZXJpYWxpemluZwogU3RyaW5nIFVSTDo6
c2VyaWFsaXplKGJvb2wgb21pdEZyYWdtZW50KSBjb25zdAogewotICAgIGlmIChVUkxQYXJzZXI6
OmVuYWJsZWQoKSkgewotICAgICAgICBpZiAob21pdEZyYWdtZW50KQotICAgICAgICAgICAgcmV0
dXJuIG1fc3RyaW5nLmxlZnQobV9xdWVyeUVuZCk7Ci0gICAgICAgIHJldHVybiBtX3N0cmluZzsK
LSAgICB9Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIFN0cmluZ0J1aWxkZXIgdXJsQnVpbGRlcjsKLSAgICB1cmxCdWlsZGVyLmFwcGVuZChtX3N0
cmluZywgMCwgbV9zY2hlbWVFbmQpOwotICAgIHVybEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOiIp
OwotICAgIHVuc2lnbmVkIHN0YXJ0ID0gaG9zdFN0YXJ0KCk7Ci0gICAgaWYgKHN0YXJ0IDwgbV9o
b3N0RW5kKSB7Ci0gICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLy8iKTsKLSAgICAg
ICAgaWYgKGhhc1VzZXJuYW1lKCkpIHsKLSAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKG1f
c3RyaW5nLCBtX3VzZXJTdGFydCwgbV91c2VyRW5kIC0gbV91c2VyU3RhcnQpOwotICAgICAgICAg
ICAgdW5zaWduZWQgcGFzc3dvcmRTdGFydCA9IG1fdXNlckVuZCArIDE7Ci0gICAgICAgICAgICBp
ZiAoaGFzUGFzc3dvcmQoKSkgewotICAgICAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiOiIpOwotICAgICAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKG1fc3RyaW5nLCBw
YXNzd29yZFN0YXJ0LCBtX3Bhc3N3b3JkRW5kIC0gcGFzc3dvcmRTdGFydCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkAiKTsKLSAgICAgICAg
fQotICAgICAgICAvLyBGSVhNRTogU2VyaWFsaXplIGhvc3QgYWNjb3JkaW5nIGh0dHBzOi8vdXJs
LnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ob3N0LXNlcmlhbGl6ZXIgZm9yIElQdjQgYW5kIElQ
djYgYWRkcmVzc2VzLgotICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChtX3N0cmluZywgc3RhcnQs
IG1faG9zdEVuZCAtIHN0YXJ0KTsKLSAgICAgICAgaWYgKHBvcnQoKSkgewotICAgICAgICAgICAg
dXJsQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6Iik7Ci0gICAgICAgICAgICB1cmxCdWlsZGVyLmFw
cGVuZE51bWJlcihwb3J0KCkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHBy
b3RvY29sSXMoImZpbGUiKSkKLSAgICAgICAgdXJsQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIvLyIp
OwotICAgIGlmIChXZWJDb3JlOjpjYW5ub3RCZUFCYXNlVVJMKCp0aGlzKSkKLSAgICAgICAgdXJs
QnVpbGRlci5hcHBlbmQobV9zdHJpbmcsIG1fcG9ydEVuZCwgbV9wYXRoRW5kIC0gbV9wb3J0RW5k
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgdXJsQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIvIik7Ci0g
ICAgICAgIGlmIChtX3BhdGhFbmQgPiBtX3BvcnRFbmQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHBhdGhTdGFydCA9IG1fcG9ydEVuZCArIDE7Ci0gICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVu
ZChtX3N0cmluZywgcGF0aFN0YXJ0LCBtX3BhdGhFbmQgLSBwYXRoU3RhcnQpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmIChoYXNRdWVyeSgpKSB7Ci0gICAgICAgIHVybEJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPyIpOwotICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChtX3N0cmluZywgbV9wYXRo
RW5kICsgMSwgbV9xdWVyeUVuZCAtIChtX3BhdGhFbmQgKyAxKSk7Ci0gICAgfQotICAgIGlmICgh
b21pdEZyYWdtZW50ICYmIGhhc0ZyYWdtZW50KCkpIHsKLSAgICAgICAgdXJsQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIjIik7Ci0gICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKG1fc3RyaW5nLCBtX3F1
ZXJ5RW5kICsgMSwgbV9mcmFnbWVudEVuZCAtIChtX3F1ZXJ5RW5kICsgMSkpOwotICAgIH0KLSAg
ICByZXR1cm4gdXJsQnVpbGRlci50b1N0cmluZygpOworICAgIGlmIChvbWl0RnJhZ21lbnQpCisg
ICAgICAgIHJldHVybiBtX3N0cmluZy5sZWZ0KG1fcXVlcnlFbmQpOworICAgIHJldHVybiBtX3N0
cmluZzsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTE0MzMsNDQwICs5NTIsNiBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogc3RyCiAgICAgcmV0dXJuIGxlbmd0aEEg
PT0gbGVuZ3RoQiAmJiBlcXVhbChzdHJpbmdBLCBzdHJpbmdCKTsKIH0KIAotLy8gTGlzdCBvZiBk
ZWZhdWx0IHNjaGVtZXMgaXMgdGFrZW4gZnJvbSBnb29nbGUtdXJsOgotLy8gaHR0cDovL2NvZGUu
Z29vZ2xlLmNvbS9wL2dvb2dsZS11cmwvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvdXJsX2Nhbm9u
X3N0ZHVybC5jYyMxMjAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0RlZmF1bHRQb3J0Rm9yU2NoZW1l
KGNvbnN0IGNoYXIqIHBvcnQsIHNpemVfdCBwb3J0TGVuZ3RoLCBjb25zdCBjaGFyKiBzY2hlbWUs
IHNpemVfdCBzY2hlbWVMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBzd2l0Y2ggaXMgdGhlb3JldGlj
YWxseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIEl0IGNhbWUgb3ZlciB3aGVuCi0gICAg
Ly8gdGhlIGNvZGUgd2FzIG1vdmVkIGZyb20gZ29vZ2xlLXVybCwgYnV0IG1heSBiZSByZW1vdmVk
IGxhdGVyLgotICAgIHN3aXRjaCAoc2NoZW1lTGVuZ3RoKSB7Ci0gICAgY2FzZSAyOgotICAgICAg
ICByZXR1cm4gZXF1YWwoc2NoZW1lLCB3c1NjaGVtZSkgJiYgZXF1YWwocG9ydCwgcG9ydExlbmd0
aCwgaHR0cFBvcnQpOwotICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKGVxdWFsKHNjaGVtZSwgZnRw
U2NoZW1lKSkKLSAgICAgICAgICAgIHJldHVybiBlcXVhbChwb3J0LCBwb3J0TGVuZ3RoLCBmdHBQ
b3J0KTsKLSAgICAgICAgaWYgKGVxdWFsKHNjaGVtZSwgd3NzU2NoZW1lKSkKLSAgICAgICAgICAg
IHJldHVybiBlcXVhbChwb3J0LCBwb3J0TGVuZ3RoLCBodHRwc1BvcnQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHJldHVybiBlcXVhbChzY2hlbWUsIGh0dHBTY2hlbWUp
ICYmIGVxdWFsKHBvcnQsIHBvcnRMZW5ndGgsIGh0dHBQb3J0KTsKLSAgICBjYXNlIDU6Ci0gICAg
ICAgIHJldHVybiBlcXVhbChzY2hlbWUsIGh0dHBzU2NoZW1lKSAmJiBlcXVhbChwb3J0LCBwb3J0
TGVuZ3RoLCBodHRwc1BvcnQpOwotICAgIGNhc2UgNjoKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNj
aGVtZSwgZ29waGVyU2NoZW1lKSAmJiBlcXVhbChwb3J0LCBwb3J0TGVuZ3RoLCBnb3BoZXJQb3J0
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaG9z
dFBvcnRJc0VtcHR5QnV0Q3JlZGVudGlhbHNBcmVQcmVzZW50KHVuc2lnbmVkIGhvc3RTdGFydCwg
dW5zaWduZWQgcG9ydEVuZCwgY2hhciB1c2VyaW5mb0VuZENoYXIpCi17Ci0gICAgcmV0dXJuIHVz
ZXJpbmZvRW5kQ2hhciA9PSAnQCcgJiYgaG9zdFN0YXJ0ID09IHBvcnRFbmQ7Ci19Ci0KLXN0YXRp
YyBib29sIGlzTm9uRmlsZUhpZXJhcmNoaWNhbFNjaGVtZShjb25zdCBjaGFyKiBzY2hlbWUsIHNp
emVfdCBzY2hlbWVMZW5ndGgpCi17Ci0gICAgc3dpdGNoIChzY2hlbWVMZW5ndGgpIHsKLSAgICBj
YXNlIDI6Ci0gICAgICAgIHJldHVybiBlcXVhbChzY2hlbWUsIHdzU2NoZW1lKTsKLSAgICBjYXNl
IDM6Ci0gICAgICAgIHJldHVybiBlcXVhbChzY2hlbWUsIGZ0cFNjaGVtZSkgfHwgZXF1YWwoc2No
ZW1lLCB3c3NTY2hlbWUpOwotICAgIGNhc2UgNDoKLSAgICAgICAgcmV0dXJuIGVxdWFsKHNjaGVt
ZSwgaHR0cFNjaGVtZSk7Ci0gICAgY2FzZSA1OgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1l
LCBodHRwc1NjaGVtZSk7Ci0gICAgY2FzZSA2OgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1l
LCBnb3BoZXJTY2hlbWUpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzQ2Fub25pY2FsSG9zdG5hbWVMb3dlcmNhc2VGb3JTY2hlbWUoY29uc3QgY2hhciogc2No
ZW1lLCBzaXplX3Qgc2NoZW1lTGVuZ3RoKQotewotICAgIHN3aXRjaCAoc2NoZW1lTGVuZ3RoKSB7
Ci0gICAgY2FzZSAyOgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCB3c1NjaGVtZSk7Ci0g
ICAgY2FzZSAzOgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCBmdHBTY2hlbWUpIHx8IGVx
dWFsKHNjaGVtZSwgd3NzU2NoZW1lKTsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHJldHVybiBlcXVh
bChzY2hlbWUsIGh0dHBTY2hlbWUpIHx8IGVxdWFsKHNjaGVtZSwgZmlsZVNjaGVtZSk7Ci0gICAg
Y2FzZSA1OgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCBodHRwc1NjaGVtZSk7Ci0gICAg
Y2FzZSA2OgotICAgICAgICByZXR1cm4gZXF1YWwoc2NoZW1lLCBnb3BoZXJTY2hlbWUpOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCi17Ci0gICAgaWYgKFVSTFBhcnNlcjo6
ZW5hYmxlZCgpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBpZiAoIXVybCB8
fCB1cmxbMF0gPT0gJ1wwJykgewotICAgICAgICAvLyB2YWxpZCBVUkwgbXVzdCBiZSBub24tZW1w
dHkKLSAgICAgICAgbV9zdHJpbmcgPSBvcmlnaW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6
IHVybDsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCFpc1NjaGVtZUZpcnN0Q2hhcih1cmxbMF0pKSB7Ci0gICAgICAgIC8vIHNjaGVtZSBt
dXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIKLSAgICAgICAgbV9zdHJpbmcg
PSBvcmlnaW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKLSAgICAgICAgaW52YWxp
ZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2NoZW1lRW5k
ID0gMDsKLSAgICB3aGlsZSAoaXNTY2hlbWVDaGFyKHVybFtzY2hlbWVFbmRdKSkKLSAgICAgICAg
c2NoZW1lRW5kKys7Ci0KLSAgICBpZiAodXJsW3NjaGVtZUVuZF0gIT0gJzonKSB7Ci0gICAgICAg
IG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAg
ICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IHVzZXJTdGFydCA9IHNjaGVtZUVuZCArIDE7Ci0gICAgdW5zaWduZWQgdXNlckVuZDsKLSAgICB1
bnNpZ25lZCBwYXNzd29yZFN0YXJ0OwotICAgIHVuc2lnbmVkIHBhc3N3b3JkRW5kOwotICAgIHVu
c2lnbmVkIGhvc3RTdGFydDsKLSAgICB1bnNpZ25lZCBob3N0RW5kOwotICAgIHVuc2lnbmVkIHBv
cnRTdGFydDsKLSAgICB1bnNpZ25lZCBwb3J0RW5kOwotCi0gICAgYm9vbCBoaWVyYXJjaGljYWwg
PSB1cmxbc2NoZW1lRW5kICsgMV0gPT0gJy8nOwotICAgIGJvb2wgaGFzU2Vjb25kU2xhc2ggPSBo
aWVyYXJjaGljYWwgJiYgdXJsW3NjaGVtZUVuZCArIDJdID09ICcvJzsKLQotICAgIGJvb2wgaXNG
aWxlID0gc2NoZW1lRW5kID09IDQKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVh
bCh1cmxbMF0sICdmJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxb
MV0sICdpJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbMl0sICds
JykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbM10sICdlJyk7Ci0K
LSAgICBtX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgPSBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KHVybFswXSwgJ2gnKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHVybFsx
XSwgJ3QnKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHVybFsyXSwgJ3Qn
KQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHVybFszXSwgJ3AnKQotICAg
ICAgICAmJiAodXJsWzRdID09ICc6JyB8fCAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxb
NF0sICdzJykgJiYgdXJsWzVdID09ICc6JykpOwotCi0gICAgaWYgKChoaWVyYXJjaGljYWwgJiYg
aGFzU2Vjb25kU2xhc2gpIHx8IGlzTm9uRmlsZUhpZXJhcmNoaWNhbFNjaGVtZSh1cmwsIHNjaGVt
ZUVuZCkpIHsKLSAgICAgICAgLy8gVGhlIHBhcnQgYWZ0ZXIgdGhlIHNjaGVtZSBpcyBlaXRoZXIg
YSBuZXRfcGF0aCBvciBhbiBhYnNfcGF0aCB3aG9zZSBmaXJzdCBwYXRoIHNlZ21lbnQgaXMgZW1w
dHkuCi0gICAgICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhdXRob3JpdHkuCi0gICAgICAgIC8v
IEZJWE1FOiBBdXRob3JpdHkgY2hhcmFjdGVycyBtYXkgYmUgc2Nhbm5lZCB0d2ljZSwgYW5kIGl0
IHdvdWxkIGJlIG5pY2UgdG8gYmUgZmFzdGVyLgotCi0gICAgICAgIGlmIChoaWVyYXJjaGljYWwp
IHsKLSAgICAgICAgICAgIHVzZXJTdGFydCsrOwotICAgICAgICAgICAgaWYgKGhhc1NlY29uZFNs
YXNoKSB7Ci0gICAgICAgICAgICAgICAgdXNlclN0YXJ0Kys7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzTm9uRmlsZUhpZXJhcmNoaWNhbFNjaGVtZSh1cmwsIHNjaGVtZUVuZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKHVybFt1c2VyU3RhcnRdID09ICcvJykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZXJTdGFydCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHVzZXJFbmQgPSB1c2VyU3RhcnQ7Ci0KLSAgICAgICAgdW5z
aWduZWQgY29sb25Qb3MgPSAwOwotICAgICAgICB3aGlsZSAoaXNVc2VySW5mb0NoYXIodXJsW3Vz
ZXJFbmRdKSkgewotICAgICAgICAgICAgaWYgKHVybFt1c2VyRW5kXSA9PSAnOicgJiYgY29sb25Q
b3MgPT0gMCkKLSAgICAgICAgICAgICAgICBjb2xvblBvcyA9IHVzZXJFbmQ7Ci0gICAgICAgICAg
ICB1c2VyRW5kKys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXJsW3VzZXJFbmRdID09ICdA
JykgewotICAgICAgICAgICAgLy8gYWN0dWFsIGVuZCBvZiB0aGUgdXNlcmluZm8sIHN0YXJ0IG9u
IHRoZSBob3N0Ci0gICAgICAgICAgICBpZiAoY29sb25Qb3MgIT0gMCkgewotICAgICAgICAgICAg
ICAgIHBhc3N3b3JkRW5kID0gdXNlckVuZDsKLSAgICAgICAgICAgICAgICB1c2VyRW5kID0gY29s
b25Qb3M7Ci0gICAgICAgICAgICAgICAgcGFzc3dvcmRTdGFydCA9IGNvbG9uUG9zICsgMTsKLSAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHBhc3N3b3JkU3RhcnQgPSBwYXNzd29y
ZEVuZCA9IHVzZXJFbmQ7Ci0KLSAgICAgICAgICAgIGhvc3RTdGFydCA9IHBhc3N3b3JkRW5kICsg
MTsKLSAgICAgICAgfSBlbHNlIGlmICh1cmxbdXNlckVuZF0gPT0gJ1snIHx8IGlzUGF0aFNlZ21l
bnRFbmRDaGFyKHVybFt1c2VyRW5kXSkpIHsKLSAgICAgICAgICAgIC8vIGhpdCB0aGUgZW5kIG9m
IHRoZSBhdXRob3JpdHksIG11c3QgaGF2ZSBiZWVuIG5vIHVzZXIKLSAgICAgICAgICAgIC8vIG9y
IGxvb2tzIGxpa2UgYW4gSVB2NiBob3N0bmFtZQotICAgICAgICAgICAgLy8gZWl0aGVyIHdheSwg
dHJ5IHRvIHBhcnNlIGl0IGFzIGEgaG9zdG5hbWUKLSAgICAgICAgICAgIHVzZXJFbmQgPSB1c2Vy
U3RhcnQ7Ci0gICAgICAgICAgICBwYXNzd29yZFN0YXJ0ID0gcGFzc3dvcmRFbmQgPSB1c2VyRW5k
OwotICAgICAgICAgICAgaG9zdFN0YXJ0ID0gdXNlclN0YXJ0OwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKLSAgICAgICAgICAgIG1fc3RyaW5nID0g
b3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgICAgICBpbnZh
bGlkYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBob3N0
RW5kID0gaG9zdFN0YXJ0OwotCi0gICAgICAgIC8vIElQVjYgSVAgYWRkcmVzcwotICAgICAgICBp
ZiAodXJsW2hvc3RFbmRdID09ICdbJykgewotICAgICAgICAgICAgaG9zdEVuZCsrOwotICAgICAg
ICAgICAgd2hpbGUgKGlzSVB2NkNoYXIodXJsW2hvc3RFbmRdKSkKLSAgICAgICAgICAgICAgICBo
b3N0RW5kKys7Ci0gICAgICAgICAgICBpZiAodXJsW2hvc3RFbmRdID09ICddJykKLSAgICAgICAg
ICAgICAgICBob3N0RW5kKys7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBpbnZhbGlkIGNoYXJhY3RlcgotICAgICAgICAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxT
dHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgICAgICAgICAgaW52YWxpZGF0
ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHdoaWxlIChpc0hvc3RuYW1lQ2hhcih1cmxbaG9zdEVuZF0pKQot
ICAgICAgICAgICAgICAgIGhvc3RFbmQrKzsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKHVybFtob3N0RW5kXSA9PSAnOicpIHsKLSAgICAgICAgICAgIHBvcnRTdGFydCA9IHBvcnRF
bmQgPSBob3N0RW5kICsgMTsKLSAKLSAgICAgICAgICAgIC8vIHBvc3NpYmxlIHN0YXJ0IG9mIHBv
cnQKLSAgICAgICAgICAgIHBvcnRFbmQgPSBwb3J0U3RhcnQ7Ci0gICAgICAgICAgICB3aGlsZSAo
aXNBU0NJSURpZ2l0KHVybFtwb3J0RW5kXSkpCi0gICAgICAgICAgICAgICAgcG9ydEVuZCsrOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBvcnRTdGFydCA9IHBvcnRFbmQgPSBob3N0RW5k
OwotCi0gICAgICAgIGlmICghaXNQYXRoU2VnbWVudEVuZENoYXIodXJsW3BvcnRFbmRdKSkgewot
ICAgICAgICAgICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKLSAgICAgICAgICAgIG1fc3RyaW5nID0g
b3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgICAgICBpbnZh
bGlkYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aG9zdFBvcnRJc0VtcHR5QnV0Q3JlZGVudGlhbHNBcmVQcmVzZW50KGhvc3RTdGFydCwgcG9ydEVu
ZCwgdXJsW3Bhc3N3b3JkRW5kXSkpIHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxT
dHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXNlclN0YXJ0
ID09IHBvcnRFbmQgJiYgIW1fcHJvdG9jb2xJc0luSFRUUEZhbWlseSAmJiAhaXNGaWxlKSB7Ci0g
ICAgICAgICAgICAvLyBObyBhdXRob3JpdHkgZm91bmQsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyBp
cyBub3QgYSBuZXRfcGF0aCwgYnV0IHJhdGhlciBhbiBhYnNfcGF0aCB3aG9zZSBmaXJzdCB0d28K
LSAgICAgICAgICAgIC8vIHBhdGggc2VnbWVudHMgYXJlIGVtcHR5LiBGb3IgZmlsZSwgaHR0cCBh
bmQgaHR0cHMgb25seSwgYW4gZW1wdHkgYXV0aG9yaXR5IGlzIGFsbG93ZWQuCi0gICAgICAgICAg
ICB1c2VyU3RhcnQgLT0gMjsKLSAgICAgICAgICAgIHVzZXJFbmQgPSB1c2VyU3RhcnQ7Ci0gICAg
ICAgICAgICBwYXNzd29yZFN0YXJ0ID0gdXNlckVuZDsKLSAgICAgICAgICAgIHBhc3N3b3JkRW5k
ID0gcGFzc3dvcmRTdGFydDsKLSAgICAgICAgICAgIGhvc3RTdGFydCA9IHBhc3N3b3JkRW5kOwot
ICAgICAgICAgICAgaG9zdEVuZCA9IGhvc3RTdGFydDsKLSAgICAgICAgICAgIHBvcnRTdGFydCA9
IGhvc3RFbmQ7Ci0gICAgICAgICAgICBwb3J0RW5kID0gaG9zdEVuZDsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIHRoZSBwYXJ0IGFmdGVyIHRoZSBzY2hlbWUgbXVzdCBiZSBh
biBvcGFxdWVfcGFydCBvciBhbiBhYnNfcGF0aAotICAgICAgICB1c2VyRW5kID0gdXNlclN0YXJ0
OwotICAgICAgICBwYXNzd29yZFN0YXJ0ID0gcGFzc3dvcmRFbmQgPSB1c2VyRW5kOwotICAgICAg
ICBob3N0U3RhcnQgPSBob3N0RW5kID0gcGFzc3dvcmRFbmQ7Ci0gICAgICAgIHBvcnRTdGFydCA9
IHBvcnRFbmQgPSBob3N0RW5kOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHBhdGhTdGFydCA9IHBv
cnRFbmQ7Ci0gICAgdW5zaWduZWQgcGF0aEVuZCA9IHBhdGhTdGFydDsKLSAgICB3aGlsZSAodXJs
W3BhdGhFbmRdICYmIHVybFtwYXRoRW5kXSAhPSAnPycgJiYgdXJsW3BhdGhFbmRdICE9ICcjJykK
LSAgICAgICAgcGF0aEVuZCsrOwotCi0gICAgdW5zaWduZWQgcXVlcnlTdGFydCA9IHBhdGhFbmQ7
Ci0gICAgdW5zaWduZWQgcXVlcnlFbmQgPSBxdWVyeVN0YXJ0OwotICAgIGlmICh1cmxbcXVlcnlT
dGFydF0gPT0gJz8nKSB7Ci0gICAgICAgIHdoaWxlICh1cmxbcXVlcnlFbmRdICYmIHVybFtxdWVy
eUVuZF0gIT0gJyMnKQotICAgICAgICAgICAgcXVlcnlFbmQrKzsKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBmcmFnbWVudFN0YXJ0ID0gcXVlcnlFbmQ7Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRFbmQg
PSBmcmFnbWVudFN0YXJ0OwotICAgIGlmICh1cmxbZnJhZ21lbnRTdGFydF0gPT0gJyMnKSB7Ci0g
ICAgICAgIGZyYWdtZW50U3RhcnQrKzsKLSAgICAgICAgZnJhZ21lbnRFbmQgPSBmcmFnbWVudFN0
YXJ0OwotICAgICAgICB3aGlsZSAodXJsW2ZyYWdtZW50RW5kXSkKLSAgICAgICAgICAgIGZyYWdt
ZW50RW5kKys7Ci0gICAgfQotCi0gICAgLy8gYXNzZW1ibGUgaXQgYWxsLCByZW1lbWJlcmluZyB0
aGUgcmVhbCByYW5nZXMKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnVm
ZmVyTGVuZ3RoID0gZnJhZ21lbnRFbmQ7Ci0gICAgYnVmZmVyTGVuZ3RoICo9IDM7Ci0KLSAgICAv
LyBUaGUgbWFnaWMgbnVtYmVyIDEwIGNvbWVzIGZyb20gdGhlIHdvcnN0LWNhc2UgYWRkaXRpb24g
b2YgY2hhcmFjdGVycyBmb3IgcGFzc3dvcmQgc3RhcnQsCi0gICAgLy8gdXNlciBpbmZvLCBhbmQg
Y29sb24gZm9yIHBvcnQgbnVtYmVyLCBjb2xvbiBhZnRlciBzY2hlbWUsIHBsdXMgaW5zZXJ0aW5n
IG1pc3Npbmcgc2xhc2hlcwotICAgIC8vIGFmdGVyIHByb3RvY29sLCBzbGFzaCBmb3IgZW1wdHkg
cGF0aCwgYW5kIHBvc3NpYmxlIGVuZC1vZi1xdWVyeSAnIycgY2hhcmFjdGVyLiBUaGlzCi0gICAg
Ly8geWllbGRzIGEgbWF4IG9mIG5pbmUgYWRkaXRpb25hbCBjaGFyYWN0ZXJzLCBwbHVzIGEgbnVs
bC4KLSAgICBidWZmZXJMZW5ndGggKz0gMTA7Ci0KLSAgICBpZiAoYnVmZmVyTGVuZ3RoLmhhc092
ZXJmbG93ZWQoKSkgewotICAgICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdp
bmFsU3RyaW5nIDogdXJsOwotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8Y2hhciwgNDA5Nj4gYnVmZmVyKGJ1ZmZlckxlbmd0aC51bnNh
ZmVHZXQoKSk7Ci0KLSAgICBjaGFyKiBwID0gYnVmZmVyLmRhdGEoKTsKLSAgICBjb25zdCBjaGFy
KiBzdHJQdHIgPSB1cmw7Ci0KLSAgICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKLSAgICBjb25zdCBj
aGFyKiBzY2hlbWVFbmRQdHIgPSB1cmwgKyBzY2hlbWVFbmQ7Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIGlmIChzaG91bGRDYW5vbmljYWxpemVTY2hlbWUgfHwgbV9wcm90b2NvbElzSW5IVFRQRmFt
aWx5KSB7Ci0gICAgICAgIHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCi0gICAgICAgICAg
ICAqcCsrID0gdG9BU0NJSUxvd2VyKCpzdHJQdHIrKyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
d2hpbGUgKHN0clB0ciA8IHNjaGVtZUVuZFB0cikKLSAgICAgICAgICAgICpwKysgPSAqc3RyUHRy
Kys7Ci0gICAgfQotI2Vsc2UKLSAgICB3aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKQotICAg
ICAgICAqcCsrID0gdG9BU0NJSUxvd2VyKCpzdHJQdHIrKyk7Ci0jZW5kaWYKLSAgICBtX3NjaGVt
ZUVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwotCi0gICAgYm9vbCBob3N0SXNMb2NhbEhvc3QgPSBw
b3J0RW5kIC0gdXNlclN0YXJ0ID09IDkKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbCh1cmxbdXNlclN0YXJ0XSwgJ2wnKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKHVybFt1c2VyU3RhcnQrMV0sICdvJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbCh1cmxbdXNlclN0YXJ0KzJdLCAnYycpCi0gICAgICAgICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwodXJsW3VzZXJTdGFydCszXSwgJ2EnKQotICAgICAgICAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKHVybFt1c2VyU3RhcnQrNF0sICdsJykKLSAgICAgICAgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbdXNlclN0YXJ0KzVdLCAnaCcpCi0gICAgICAgICYm
IGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodXJsW3VzZXJTdGFydCs2XSwgJ28nKQotICAgICAg
ICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHVybFt1c2VyU3RhcnQrN10sICdzJykKLSAg
ICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh1cmxbdXNlclN0YXJ0KzhdLCAndCcp
OwotCi0gICAgLy8gRmlsZSBVUkxzIG5lZWQgYSBob3N0IHBhcnQgdW5sZXNzIGl0IGlzIGp1c3Qg
ZmlsZTovLyBvciBmaWxlOi8vbG9jYWxob3N0Ci0gICAgYm9vbCBkZWdlbmVyYXRlRmlsZVBhdGgg
PSBwYXRoU3RhcnQgPT0gcGF0aEVuZCAmJiAoaG9zdFN0YXJ0ID09IGhvc3RFbmQgfHwgaG9zdElz
TG9jYWxIb3N0KTsKLQotICAgIC8vIFdlIGRyb3AgZW1wdHkgY3JlZGVudGlhbHMsIGJ1dCBrZWVw
IGEgY29sb24gaW4gYW4gZW1wdHkgaG9zdC9wb3J0IHBhaXIuCi0gICAgLy8gUmVtb3ZpbmcgaG9z
dG5hbWUgY29tcGxldGVseSB3b3VsZCBjaGFuZ2UgdGhlIHN0cnVjdHVyZSBvZiB0aGUgVVJMIG9u
IHJlLXBhcnNpbmcuCi0gICAgYm9vbCBoYXZlTm9uSG9zdEF1dGhvcml0eVBhcnQgPSB1c2VyU3Rh
cnQgIT0gdXNlckVuZCB8fCBwYXNzd29yZFN0YXJ0ICE9IHBhc3N3b3JkRW5kIHx8IGhvc3RFbmQg
IT0gcG9ydEVuZDsKLQotICAgIC8vIGFkZCAiOiIgYWZ0ZXIgc2NoZW1lCi0gICAgKnArKyA9ICc6
JzsKLQotICAgIC8vIGlmIHdlIGhhdmUgYXQgbGVhc3Qgb25lIGF1dGhvcml0eSBwYXJ0IG9yIGEg
ZmlsZSBVUkwgLSBhZGQgIi8vIiBhbmQgYXV0aG9yaXR5Ci0gICAgaWYgKGlzRmlsZSA/ICFkZWdl
bmVyYXRlRmlsZVBhdGggOiAoaGF2ZU5vbkhvc3RBdXRob3JpdHlQYXJ0IHx8IGhvc3RTdGFydCAh
PSBob3N0RW5kKSkgewotICAgICAgICAqcCsrID0gJy8nOwotICAgICAgICAqcCsrID0gJy8nOwot
Ci0gICAgICAgIG1fdXNlclN0YXJ0ID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0KLSAgICAgICAgLy8g
Y29weSBpbiB0aGUgdXNlcgotICAgICAgICBzdHJQdHIgPSB1cmwgKyB1c2VyU3RhcnQ7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHVzZXJFbmRQdHIgPSB1cmwgKyB1c2VyRW5kOwotICAgICAgICB3aGls
ZSAoc3RyUHRyIDwgdXNlckVuZFB0cikgewotICAgICAgICAgICAgY2hhciBjID0gKnN0clB0cisr
OwotICAgICAgICAgICAgQVNTRVJUKGlzVXNlckluZm9DaGFyKGMpKTsKLSAgICAgICAgICAgICpw
KysgPSBjOwotICAgICAgICB9Ci0gICAgICAgIG1fdXNlckVuZCA9IHAgLSBidWZmZXIuZGF0YSgp
OwotCi0gICAgICAgIC8vIGNvcHkgaW4gdGhlIHBhc3N3b3JkCi0gICAgICAgIGlmIChwYXNzd29y
ZEVuZCAhPSBwYXNzd29yZFN0YXJ0KSB7Ci0gICAgICAgICAgICAqcCsrID0gJzonOwotICAgICAg
ICAgICAgc3RyUHRyID0gdXJsICsgcGFzc3dvcmRTdGFydDsKLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHBhc3N3b3JkRW5kUHRyID0gdXJsICsgcGFzc3dvcmRFbmQ7Ci0gICAgICAgICAgICB3aGls
ZSAoc3RyUHRyIDwgcGFzc3dvcmRFbmRQdHIpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSAq
c3RyUHRyKys7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlzVXNlckluZm9DaGFyKGMpKTsKLSAg
ICAgICAgICAgICAgICAqcCsrID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBtX3Bhc3N3b3JkRW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0KLSAgICAgICAgLy8gSWYgd2Ug
aGFkIGFueSB1c2VyIGluZm8sIGFkZCAiQCIKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihwIC0gYnVmZmVyLmRhdGEoKSkgIT0gbV91c2VyU3RhcnQpCi0gICAgICAgICAgICAqcCsr
ID0gJ0AnOwotCi0gICAgICAgIC8vIGNvcHkgaW4gdGhlIGhvc3QsIGV4Y2VwdCBpbiB0aGUgY2Fz
ZSBvZiBhIGZpbGUgVVJMIHdpdGggYXV0aG9yaXR5PSJsb2NhbGhvc3QiCi0gICAgICAgIGlmICgh
KGlzRmlsZSAmJiBob3N0SXNMb2NhbEhvc3QgJiYgIWhhdmVOb25Ib3N0QXV0aG9yaXR5UGFydCkp
IHsKLSAgICAgICAgICAgIHN0clB0ciA9IHVybCArIGhvc3RTdGFydDsKLSAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGhvc3RFbmRQdHIgPSB1cmwgKyBob3N0RW5kOwotICAgICAgICAgICAgaWYgKGlz
Q2Fub25pY2FsSG9zdG5hbWVMb3dlcmNhc2VGb3JTY2hlbWUoYnVmZmVyLmRhdGEoKSwgbV9zY2hl
bWVFbmQpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gdG9BU0NJSUxvd2VyKCpzdHJQdHIrKyk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc0hvc3RuYW1lQ2hhcihjKSB8fCBjID09ICdbJyB8
fCBjID09ICddJyB8fCBjID09ICc6Jyk7Ci0gICAgICAgICAgICAgICAgICAgICpwKysgPSBjOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBj
ID0gKnN0clB0cisrOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNIb3N0bmFtZUNoYXIo
YykgfHwgYyA9PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAnOicpOwotICAgICAgICAgICAgICAg
ICAgICAqcCsrID0gYzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgbV9ob3N0RW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0KLSAgICAgICAgLy8g
Q29weSBpbiB0aGUgcG9ydCBpZiB0aGUgVVJMIGhhcyBvbmUgKGFuZCBpdCdzIG5vdCBkZWZhdWx0
KS4gQWxzbywgY29weSBpdCBpZiB0aGVyZSB3YXMgbm8gaG9zdG5hbWUsIHNvIHRoYXQgdGhlcmUg
aXMgc3RpbGwgc29tZXRoaW5nIGluIGF1dGhvcml0eSBjb21wb25lbnQuCi0gICAgICAgIGlmICho
b3N0RW5kICE9IHBvcnRTdGFydCkgewotICAgICAgICAgICAgY29uc3QgY2hhciogcG9ydFN0ciA9
IHVybCArIHBvcnRTdGFydDsKLSAgICAgICAgICAgIHNpemVfdCBwb3J0TGVuZ3RoID0gcG9ydEVu
ZCAtIHBvcnRTdGFydDsKLSAgICAgICAgICAgIGlmICgocG9ydExlbmd0aCAmJiAhaXNEZWZhdWx0
UG9ydEZvclNjaGVtZShwb3J0U3RyLCBwb3J0TGVuZ3RoLCBidWZmZXIuZGF0YSgpLCBtX3NjaGVt
ZUVuZCkpCi0gICAgICAgICAgICAgICAgfHwgKGhvc3RTdGFydCA9PSBob3N0RW5kICYmIGhvc3RF
bmQgIT0gcG9ydFN0YXJ0KSkgewotICAgICAgICAgICAgICAgICpwKysgPSAnOic7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogcG9ydEVuZFB0ciA9IHVybCArIHBvcnRFbmQ7Ci0gICAgICAg
ICAgICAgICAgd2hpbGUgKHBvcnRTdHIgPCBwb3J0RW5kUHRyKQotICAgICAgICAgICAgICAgICAg
ICAqcCsrID0gKnBvcnRTdHIrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBt
X3BvcnRFbmQgPSBwIC0gYnVmZmVyLmRhdGEoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
aXNGaWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZGVnZW5lcmF0ZUZpbGVQYXRoKTsKLSAgICAg
ICAgICAgICpwKysgPSAnLyc7Ci0gICAgICAgICAgICAqcCsrID0gJy8nOwotICAgICAgICB9Ci0g
ICAgICAgIG1fdXNlclN0YXJ0ID0gbV91c2VyRW5kID0gbV9wYXNzd29yZEVuZCA9IG1faG9zdEVu
ZCA9IG1fcG9ydEVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgIH0KLQotICAgIC8vIEZvciBj
YW5vbmljYWxpemF0aW9uLCBlbnN1cmUgd2UgaGF2ZSBhICcvJyBmb3Igbm8gcGF0aC4KLSAgICAv
LyBEbyB0aGlzIG9ubHkgZm9yIFVSTCB3aXRoIHByb3RvY29sIGZpbGUsIGh0dHAgb3IgaHR0cHMu
Ci0gICAgaWYgKChtX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgfHwgaXNGaWxlKSAmJiBwYXRoRW5k
ID09IHBhdGhTdGFydCkKLSAgICAgICAgKnArKyA9ICcvJzsKLQotICAgIC8vIGFkZCBwYXRoLCBl
c2NhcGluZyBiYWQgY2hhcmFjdGVycwotICAgIGlmICghaGllcmFyY2hpY2FsKQotICAgICAgICBl
c2NhcGVBbmRBcHBlbmROb25IaWVyYXJjaGljYWxQYXJ0KHAsIHVybCArIHBhdGhTdGFydCwgcGF0
aEVuZCAtIHBhdGhTdGFydCk7Ci0gICAgZWxzZSBpZiAoIWhhc1NsYXNoRG90T3JEb3REb3QodXJs
KSkKLSAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBwYXRoU3RhcnQsIHBh
dGhFbmQgLSBwYXRoU3RhcnQpOwotICAgIGVsc2UgewotICAgICAgICBDaGFyQnVmZmVyIHBhdGhC
dWZmZXIocGF0aEVuZCAtIHBhdGhTdGFydCArIDEpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBjb3B5UGF0aFJlbW92aW5nRG90cyhwYXRoQnVmZmVyLmRhdGEoKSwgdXJsLCBwYXRoU3RhcnQs
IHBhdGhFbmQpOwotICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHBhdGhCdWZmZXIu
ZGF0YSgpLCBsZW5ndGgpOwotICAgIH0KLQotICAgIG1fcGF0aEVuZCA9IHAgLSBidWZmZXIuZGF0
YSgpOwotCi0gICAgLy8gRmluZCB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3Qgc2xhc2ggaW4g
dGhlIHBhdGgsIG9yCi0gICAgLy8gdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgcGF0aCBpZiB0aGVy
ZSBhcmUgbm8gc2xhc2hlcyBpbiBpdC4KLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IG1f
cGF0aEVuZDsgaSA+IG1fcG9ydEVuZDsgLS1pKSB7Ci0gICAgICAgIGlmIChidWZmZXJbaSAtIDFd
ID09ICcvJykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX3BhdGhBZnRlckxhc3RT
bGFzaCA9IGk7Ci0KLSAgICAvLyBhZGQgcXVlcnksIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCi0g
ICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBxdWVyeVN0YXJ0LCBxdWVyeUVuZCAt
IHF1ZXJ5U3RhcnQpOwotICAgIG1fcXVlcnlFbmQgPSBwIC0gYnVmZmVyLmRhdGEoKTsKLQotICAg
IC8vIGFkZCBmcmFnbWVudCwgZXNjYXBpbmcgYmFkIGNoYXJhY3RlcnMKLSAgICBpZiAoZnJhZ21l
bnRFbmQgIT0gcXVlcnlFbmQpIHsKLSAgICAgICAgKnArKyA9ICcjJzsKLSAgICAgICAgZXNjYXBl
QW5kQXBwZW5kTm9uSGllcmFyY2hpY2FsUGFydChwLCB1cmwgKyBmcmFnbWVudFN0YXJ0LCBmcmFn
bWVudEVuZCAtIGZyYWdtZW50U3RhcnQpOwotICAgIH0KLSAgICBtX2ZyYWdtZW50RW5kID0gcCAt
IGJ1ZmZlci5kYXRhKCk7Ci0KLSAgICBBU1NFUlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gc3RhdGlj
X2Nhc3Q8aW50PihidWZmZXIuc2l6ZSgpKSk7Ci0gICAgQVNTRVJUKGJ1ZmZlci5zaXplKCkgPiAw
KTsKLQotICAgIC8vIElmIHdlIGRpZG4ndCBlbmQgdXAgYWN0dWFsbHkgY2hhbmdpbmcgdGhlIG9y
aWdpbmFsIHN0cmluZyBhbmQKLSAgICAvLyBpdCB3YXMgYWxyZWFkeSBpbiBhIFN0cmluZywgcmV1
c2UgaXQgdG8gYXZvaWQgZXh0cmEgYWxsb2NhdGlvbi4KLSAgICBpZiAob3JpZ2luYWxTdHJpbmcg
JiYgZXF1YWwob3JpZ2luYWxTdHJpbmctPmltcGwoKSwgYnVmZmVyLmRhdGEoKSwgbV9mcmFnbWVu
dEVuZCkpCi0gICAgICAgIG1fc3RyaW5nID0gKm9yaWdpbmFsU3RyaW5nOwotICAgIGVsc2UKLSAg
ICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbV9mcmFnbWVudEVuZCk7Ci0K
LSAgICBtX2lzVmFsaWQgPSB0cnVlOwotfQotCiBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElk
ZW50aWZpZXIoY29uc3QgVVJMJiBhLCBjb25zdCBVUkwmIGIpCiB7CiAgICAgaWYgKGEubV9xdWVy
eUVuZCAhPSBiLm1fcXVlcnlFbmQpCkBAIC0xOTY5LDIxNSArMTA1NCw2IEBAIFN0cmluZyBlbmNv
ZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnMKICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5k
YXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKIH0KIAotc3RhdGljIGJvb2wgcHJvdG9jb2xJcyhT
dHJpbmdWaWV3IHN0cmluZ1VSTCwgY29uc3QgY2hhciogcHJvdG9jb2wpCi17Ci0gICAgYXNzZXJ0
UHJvdG9jb2xJc0dvb2QoU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
cHJvdG9jb2wpLCBzdHJsZW4ocHJvdG9jb2wpKSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nVVJMLmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAoIXByb3RvY29sW2ldKQotICAgICAgICAgICAgcmV0dXJuIHN0cmlu
Z1VSTFtpXSA9PSAnOic7Ci0gICAgICAgIGlmICghaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChz
dHJpbmdVUkxbaV0sIHByb3RvY29sW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBmaW5kSG9zdG5hbWVzSW5N
YWlsVG9VUkwoU3RyaW5nVmlldyBzdHJpbmcsIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVu
c2lnbmVkPj4mIG5hbWVSYW5nZXMpCi17Ci0gICAgLy8gSW4gYSBtYWlsdG86IFVSTCwgaG9zdCBu
YW1lcyBjb21lIGFmdGVyIGEgJ0AnIGNoYXJhY3RlciBhbmQgZW5kIHdpdGggYSAnPicgb3IgJywn
IG9yICc/JyBvciBlbmQgb2Ygc3RyaW5nIGNoYXJhY3Rlci4KLSAgICAvLyBTa2lwIHF1b3RlZCBz
dHJpbmdzIHNvIHRoYXQgY2hhcmFjdGVycyBpbiB0aGVtIGRvbid0IGNvbmZ1c2UgdXMuCi0gICAg
Ly8gV2hlbiB3ZSBmaW5kIGEgJz8nIGNoYXJhY3Rlciwgd2UgYXJlIHBhc3QgdGhlIHBhcnQgb2Yg
dGhlIFVSTCB0aGF0IGNvbnRhaW5zIGhvc3QgbmFtZXMuCi0KLSAgICBuYW1lUmFuZ2VzLmNsZWFy
KCk7Ci0KLSAgICB1bnNpZ25lZCBwID0gMDsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICAvLyBG
aW5kIHN0YXJ0IG9mIGhvc3QgbmFtZSBvciBvZiBxdW90ZWQgc3RyaW5nLgotICAgICAgICB1bnNp
Z25lZCBob3N0bmFtZU9yU3RyaW5nU3RhcnQgPSBmaW5kRmlyc3RPZihzdHJpbmcsIHAsICJcIkA/
Iik7Ci0gICAgICAgIGlmIChob3N0bmFtZU9yU3RyaW5nU3RhcnQgPT0gbm90Rm91bmRVbnNpZ25l
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVUNoYXIgYyA9IHN0cmluZ1tob3N0bmFt
ZU9yU3RyaW5nU3RhcnRdOwotICAgICAgICBwID0gaG9zdG5hbWVPclN0cmluZ1N0YXJ0ICsgMTsK
LQotICAgICAgICBpZiAoYyA9PSAnPycpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKGMgPT0gJ0AnKSB7Ci0gICAgICAgICAgICAvLyBGaW5kIGVuZCBvZiBob3N0IG5hbWUuCi0g
ICAgICAgICAgICB1bnNpZ25lZCBob3N0bmFtZVN0YXJ0ID0gcDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGhvc3RuYW1lRW5kID0gZmluZEZpcnN0T2Yoc3RyaW5nLCBwLCAiPiw/Iik7Ci0gICAgICAg
ICAgICBib29sIGRvbmU7Ci0gICAgICAgICAgICBpZiAoaG9zdG5hbWVFbmQgPT0gbm90Rm91bmRV
bnNpZ25lZCkgewotICAgICAgICAgICAgICAgIGhvc3RuYW1lRW5kID0gc3RyaW5nLmxlbmd0aCgp
OwotICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBwID0gaG9zdG5hbWVFbmQ7Ci0gICAgICAgICAgICAgICAgZG9uZSA9IGZh
bHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuYW1lUmFuZ2VzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihob3N0bmFtZVN0YXJ0LCBob3N0bmFtZUVuZCkpOwotCi0gICAgICAgICAgICBp
ZiAoZG9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBTa2lwIHF1b3RlZCBzdHJpbmcuCi0gICAgICAgICAgICBBU1NFUlQoYyA9PSAn
IicpOwotICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBl
c2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgPSBmaW5kRmlyc3RPZihzdHJpbmcsIHAsICJcIlxc
Iik7Ci0gICAgICAgICAgICAgICAgaWYgKGVzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCA9PSBu
b3RGb3VuZFVuc2lnbmVkKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgICAgICBjID0gc3RyaW5nW2VzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZF07Ci0gICAgICAg
ICAgICAgICAgcCA9IGVzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCArIDE7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBhcmUgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCB0aGVuIGJyZWFrIGZy
b20gdGhlIHN0cmluZyBsb29wIGJhY2sgdG8gdGhlIGhvc3QgbmFtZSBsb29wLgotICAgICAgICAg
ICAgICAgIGlmIChjID09ICciJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBTa2lwIGVzY2FwZWQgY2hhcmFjdGVyLgotICAgICAgICAgICAgICAgIEFT
U0VSVChjID09ICdcXCcpOwotICAgICAgICAgICAgICAgIGlmIChwID09IHN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgKytwOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBmaW5kSG9z
dG5hbWVJbkhpZXJhcmNoaWNhbFVSTChTdHJpbmdWaWV3IHN0cmluZywgdW5zaWduZWQmIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCYgZW5kT2Zmc2V0KQotewotICAgIC8vIEZpbmQgdGhlIGhvc3QgbmFt
ZSBpbiBhIGhpZXJhcmNoaWNhbCBVUkwuCi0gICAgLy8gSXQgY29tZXMgYWZ0ZXIgYSAiOi8vIiBz
ZXF1ZW5jZSwgd2l0aCBzY2hlbWUgY2hhcmFjdGVycyBwcmVjZWRpbmcsIGFuZAotICAgIC8vIHRo
aXMgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2xvbiBpbiB0aGUgc3RyaW5nLgotICAgIC8vIEl0IGVu
ZHMgd2l0aCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgb3IgYSAiOiIgb3IgYSBwYXRoIHNlZ21lbnQg
ZW5kaW5nIGNoYXJhY3Rlci4KLSAgICAvLyBJZiB0aGVyZSBpcyBhICJAIiBjaGFyYWN0ZXIsIHRo
ZSBob3N0IHBhcnQgaXMganVzdCB0aGUgcGFydCBhZnRlciB0aGUgIkAiLgotICAgIHVuc2lnbmVk
IHNlcGFyYXRvciA9IGZpbmRGaXJzdE9mKHN0cmluZywgMCwgIjoiKTsKLSAgICBpZiAoc2VwYXJh
dG9yID09IG5vdEZvdW5kVW5zaWduZWQgfHwgc2VwYXJhdG9yICsgMiA+PSBzdHJpbmcubGVuZ3Ro
KCkgfHwgc3RyaW5nW3NlcGFyYXRvciArIDFdICE9ICcvJyB8fCBzdHJpbmdbc2VwYXJhdG9yICsg
Ml0gIT0gJy8nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGFs
bCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgOi8vIGFyZSB2YWxpZCBzY2hlbWUgY2hhcmFjdGVycy4K
LSAgICBpZiAoIWlzU2NoZW1lRmlyc3RDaGFyKHN0cmluZ1swXSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2VwYXJhdG9yOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFpc1NjaGVtZUNoYXIoc3RyaW5nW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTdGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLgotICAgIHVu
c2lnbmVkIGF1dGhvcml0eVN0YXJ0ID0gc2VwYXJhdG9yICsgMzsKLQotICAgIC8vIEZpbmQgdGVy
bWluYXRpbmcgY2hhcmFjdGVyLgotICAgIHVuc2lnbmVkIGhvc3RuYW1lRW5kID0gc3RyaW5nLmxl
bmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGF1dGhvcml0eVN0YXJ0OyBpIDwgaG9zdG5h
bWVFbmQ7ICsraSkgewotICAgICAgICBVQ2hhciBjID0gc3RyaW5nW2ldOwotICAgICAgICBpZiAo
YyA9PSAnOicgfHwgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKGMpICYmIGMgIT0gMCkpIHsKLSAgICAg
ICAgICAgIGhvc3RuYW1lRW5kID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gRmluZCAiQCIgZm9yIHRoZSBzdGFydCBvZiB0aGUgaG9zdCBuYW1lLgot
ICAgIHVuc2lnbmVkIHVzZXJJbmZvVGVybWluYXRvciA9IGZpbmRGaXJzdE9mKHN0cmluZywgYXV0
aG9yaXR5U3RhcnQsICJAIik7Ci0gICAgdW5zaWduZWQgaG9zdG5hbWVTdGFydDsKLSAgICBpZiAo
dXNlckluZm9UZXJtaW5hdG9yID09IG5vdEZvdW5kVW5zaWduZWQgfHwgdXNlckluZm9UZXJtaW5h
dG9yID4gaG9zdG5hbWVFbmQpCi0gICAgICAgIGhvc3RuYW1lU3RhcnQgPSBhdXRob3JpdHlTdGFy
dDsKLSAgICBlbHNlCi0gICAgICAgIGhvc3RuYW1lU3RhcnQgPSB1c2VySW5mb1Rlcm1pbmF0b3Ig
KyAxOwotCi0gICAgc3RhcnRPZmZzZXQgPSBob3N0bmFtZVN0YXJ0OwotICAgIGVuZE9mZnNldCA9
IGhvc3RuYW1lRW5kOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBDb252ZXJ0cyBhbGwgaG9z
dG5hbWVzIGZvdW5kIGluIHRoZSBnaXZlbiBpbnB1dCB0byBwdW55Y29kZSwgcHJlc2VydmluZyB0
aGUKLS8vIHJlc3Qgb2YgdGhlIFVSTCB1bmNoYW5nZWQuIFRoZSBvdXRwdXQgd2lsbCBOT1QgYmUg
bnVsbC10ZXJtaW5hdGVkLgotLy8gUmV0dXJuIHZhbHVlIG9mIGZhbHNlIG1lYW5zIGVycm9yIGlu
IGVuY29kaW5nLgotc3RhdGljIGJvb2wgZW5jb2RlSG9zdG5hbWVzKFN0cmluZ1ZpZXcgc3RyaW5n
LCBVQ2hhckJ1ZmZlciYgYnVmZmVyKQotewotICAgIGJ1ZmZlci5jbGVhcigpOwotCi0gICAgaWYg
KHByb3RvY29sSXMoc3RyaW5nLCAibWFpbHRvIikpIHsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+PiBob3N0bmFtZVJhbmdlczsKLSAgICAgICAgZmluZEhvc3Ru
YW1lc0luTWFpbFRvVVJMKHN0cmluZywgaG9zdG5hbWVSYW5nZXMpOwotICAgICAgICB1bnNpZ25l
ZCBuID0gaG9zdG5hbWVSYW5nZXMuc2l6ZSgpOwotICAgICAgICB1bnNpZ25lZCBwID0gMDsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgY29u
c3Qgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4mIHIgPSBob3N0bmFtZVJhbmdlc1tpXTsK
LSAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIHN0cmluZy5zdWJzdHJpbmcocCwgci5maXJzdCAt
IHApKTsKLSAgICAgICAgICAgIGlmICghYXBwZW5kRW5jb2RlZEhvc3RuYW1lKGJ1ZmZlciwgc3Ry
aW5nLnN1YnN0cmluZyhyLmZpcnN0LCByLnNlY29uZCAtIHIuZmlyc3QpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBwID0gci5zZWNvbmQ7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gVGhpcyB3aWxsIGNvcHkgZWl0aGVyIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxh
c3QgaG9zdG5hbWUsIG9yIHRoZQotICAgICAgICAvLyB3aG9sZSB0aGluZyBpZiB0aGVyZSBpcyBu
byBob3N0bmFtZS4KLSAgICAgICAgYXBwZW5kKGJ1ZmZlciwgc3RyaW5nLnN1YnN0cmluZyhwKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgaG9zdFN0YXJ0LCBob3N0RW5kOwotICAg
ICAgICBpZiAoZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxVUkwoc3RyaW5nLCBob3N0U3RhcnQs
IGhvc3RFbmQpKSB7Ci0gICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCBzdHJpbmcuc3Vic3RyaW5n
KDAsIGhvc3RTdGFydCkpOyAvLyBCZWZvcmUgaG9zdG5hbWUuCi0gICAgICAgICAgICBpZiAoIWFw
cGVuZEVuY29kZWRIb3N0bmFtZShidWZmZXIsIHN0cmluZy5zdWJzdHJpbmcoaG9zdFN0YXJ0LCBo
b3N0RW5kIC0gaG9zdFN0YXJ0KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgc3RyaW5nLnN1YnN0cmluZyhob3N0RW5kKSk7IC8vIEFm
dGVyIGhvc3RuYW1lLgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm8gaG9zdG5h
bWUgdG8gZW5jb2RlLCByZXR1cm4gdGhlIGlucHV0LgotICAgICAgICAgICAgYXBwZW5kKGJ1ZmZl
ciwgc3RyaW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyBSZXR1cm4gdmFsdWUgb2YgZmFsc2UgbWVhbnMgZXJyb3IgaW4gZW5jb2RpbmcuCi1zdGF0aWMg
Ym9vbCBlbmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBTdHJpbmcmIHJlbCwgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZywgQ2hhckJ1ZmZlciYgb3V0cHV0KQotewotICAgIFVDaGFyQnVmZmVy
IHM7Ci0gICAgaWYgKCFlbmNvZGVIb3N0bmFtZXMocmVsLCBzKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgVGV4dEVuY29kaW5nIHBhdGhFbmNvZGluZyhVVEY4RW5jb2RpbmcoKSk7IC8v
IFBhdGggaXMgYWx3YXlzIGVuY29kZWQgYXMgVVRGLTg7IG90aGVyIHBhcnRzIG1heSBkZXBlbmQg
b24gdGhlIHNjaGVtZS4KLQotICAgIHVuc2lnbmVkIHBhdGhFbmQgPSBub3RGb3VuZFVuc2lnbmVk
OwotICAgIGlmIChlbmNvZGluZyAhPSBwYXRoRW5jb2RpbmcgJiYgZW5jb2RpbmcuaXNWYWxpZCgp
ICYmICFwcm90b2NvbElzKHJlbCwgIm1haWx0byIpICYmICFwcm90b2NvbElzKHJlbCwgImRhdGEi
KSAmJiAhcHJvdG9jb2xJc0phdmFTY3JpcHQocmVsKSkgewotICAgICAgICAvLyBGaW5kIHRoZSBm
aXJzdCBpbnN0YW5jZSBvZiBlaXRoZXIgIyBvciA/LCBrZWVwIHBhdGhFbmQgYXQgLTEgb3RoZXJ3
aXNlLgotICAgICAgICBwYXRoRW5kID0gZmluZEZpcnN0T2YoU3RyaW5nVmlldyhzLmRhdGEoKSwg
cy5zaXplKCkpLCAwLCAiIz8iKTsKLSAgICB9Ci0KLSAgICBpZiAocGF0aEVuZCA9PSBub3RGb3Vu
ZFVuc2lnbmVkKSB7Ci0gICAgICAgIENTdHJpbmcgZGVjb2RlZCA9IHBhdGhFbmNvZGluZy5lbmNv
ZGUoU3RyaW5nVmlldyhzLmRhdGEoKSwgcy5zaXplKCkpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JV
bmVuY29kYWJsZXMpOwotICAgICAgICBvdXRwdXQucmVzaXplKGRlY29kZWQubGVuZ3RoKCkpOwot
ICAgICAgICBtZW1jcHkob3V0cHV0LmRhdGEoKSwgZGVjb2RlZC5kYXRhKCksIGRlY29kZWQubGVu
Z3RoKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIENTdHJpbmcgcGF0aERlY29kZWQgPSBwYXRo
RW5jb2RpbmcuZW5jb2RlKFN0cmluZ1ZpZXcocy5kYXRhKCksIHBhdGhFbmQpLCBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICAvLyBVbmVuY29kYWJsZSBjaGFyYWN0
ZXJzIGluIFVSTHMgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnZlcnRpbmcKLSAgICAgICAgLy8gdGhl
bSB0byBYTUwgZW50aXRpZXMgYW5kIGVzY2FwaW5nIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVy
cy4KLSAgICAgICAgQ1N0cmluZyBvdGhlckRlY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoU3RyaW5n
VmlldyhzLmRhdGEoKSArIHBhdGhFbmQsIHMuc2l6ZSgpIC0gcGF0aEVuZCksIFVSTEVuY29kZWRF
bnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0KLSAgICAgICAgb3V0cHV0LnJlc2l6ZShwYXRoRGVj
b2RlZC5sZW5ndGgoKSArIG90aGVyRGVjb2RlZC5sZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweShv
dXRwdXQuZGF0YSgpLCBwYXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVkLmxlbmd0aCgpKTsK
LSAgICAgICAgbWVtY3B5KG91dHB1dC5kYXRhKCkgKyBwYXRoRGVjb2RlZC5sZW5ndGgoKSwgb3Ro
ZXJEZWNvZGVkLmRhdGEoKSwgb3RoZXJEZWNvZGVkLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgb3V0
cHV0LmFwcGVuZCgnXDAnKTsgLy8gbnVsbC10ZXJtaW5hdGUgdGhlIG91dHB1dC4KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgU3RyaW5nIHN1YnN0aXR1dGVCYWNrc2xhc2hlcyhjb25z
dCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBzaXplX3QgcXVlc3Rpb25Qb3MgPSBzdHJpbmcuZmlu
ZCgnPycpOwotICAgIHNpemVfdCBoYXNoUG9zID0gc3RyaW5nLmZpbmQoJyMnKTsKLSAgICB1bnNp
Z25lZCBwYXRoRW5kOwotCi0gICAgaWYgKGhhc2hQb3MgIT0gbm90Rm91bmQgJiYgKHF1ZXN0aW9u
UG9zID09IG5vdEZvdW5kIHx8IHF1ZXN0aW9uUG9zID4gaGFzaFBvcykpCi0gICAgICAgIHBhdGhF
bmQgPSBoYXNoUG9zOwotICAgIGVsc2UgaWYgKHF1ZXN0aW9uUG9zICE9IG5vdEZvdW5kKQotICAg
ICAgICBwYXRoRW5kID0gcXVlc3Rpb25Qb3M7Ci0gICAgZWxzZQotICAgICAgICBwYXRoRW5kID0g
c3RyaW5nLmxlbmd0aCgpOwotCi0gICAgcmV0dXJuIHN0cmluZy5sZWZ0KHBhdGhFbmQpLnJlcGxh
Y2UoJ1xcJywnLycpICsgc3RyaW5nLnN1YnN0cmluZyhwYXRoRW5kKTsKLX0KLQogYm9vbCBVUkw6
OmlzSGllcmFyY2hpY2FsKCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjEyNDcwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEx
NywxNyArMTExNyw2IEBAIFVSTFBhcnNlcjo6VVJMUGFyc2VyKGNvbnN0IFN0cmluZyYgaW5wdXQK
ICAgICAgICAgICAgIEFTU0VSVChhbGxWYWx1ZXNFcXVhbChwYXJzZXIucmVzdWx0KCksIG1fdXJs
KSk7CiAgICAgfQogI2VuZGlmCi0KLSNpZiBDT01QQVJFX1VSTFBBUlNFUlMKLSAgICBBU1NFUlQo
VVJMUGFyc2VyOjplbmFibGVkKCkpOwotICAgIFVSTFBhcnNlcjo6c2V0RW5hYmxlZChmYWxzZSk7
Ci0gICAgVVJMIHBhcnNlZFdpdGhPbGRQYXJzZXIgPSBVUkwoYmFzZSwgaW5wdXQsIGVuY29kaW5n
KTsKLSAgICBpZiAocGFyc2VkV2l0aE9sZFBhcnNlciAhPSBtX3VybCkKLSAgICAgICAgV1RGTG9n
QWx3YXlzKCJVUkxQYXJzZXIgRGlmZmVyczogSW5wdXQgPCVzPiBCYXNlIDwlcz4gRW5jb2Rpbmcg
PCVzPiIsIGlucHV0LnV0ZjgoKS5kYXRhKCksIGJhc2Uuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
ZW5jb2RpbmcubmFtZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIFdURkxvZ0Fsd2F5cygiVVJMUGFy
c2VyIFNhbWU6IElucHV0IDwlcz4gQmFzZSA8JXM+IEVuY29kaW5nIDwlcz4iLCBpbnB1dC51dGY4
KCkuZGF0YSgpLCBiYXNlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVuY29kaW5nLm5hbWUoKSk7
Ci0gICAgVVJMUGFyc2VyOjpzZXRFbmFibGVkKHRydWUpOwotI2VuZGlmCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CkBAIC0yODcwLDE2ICsyODU5LDQgQEAgYm9vbCBVUkxQ
YXJzZXI6OmludGVybmFsVmFsdWVzQ29uc2lzdGVudAogICAgIC8vIEl0IHNob3VsZCBiZSBhYmxl
IHRvIGJlIGRlZHVjZWQgZnJvbSBtX2lzVmFsaWQgYW5kIG1fc3RyaW5nLmxlbmd0aCgpIHRvIHNh
dmUgbWVtb3J5LgogfQogCi1zdGF0aWMgYm9vbCB1cmxQYXJzZXJFbmFibGVkID0gdHJ1ZTsKLQot
dm9pZCBVUkxQYXJzZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIHVybFBhcnNl
ckVuYWJsZWQgPSBlbmFibGVkOwotfQotCi1ib29sIFVSTFBhcnNlcjo6ZW5hYmxlZCgpCi17Ci0g
ICAgcmV0dXJuIHVybFBhcnNlckVuYWJsZWQ7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMTI0NjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsOSArNDMsNiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBh
bGxWYWx1ZXNFcXVhbChjb25zdCBVUkwmLCBjb25zdCBVUkwmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgYm9vbCBpbnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQoY29uc3QgVVJMJik7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBlbmFibGVkKCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgc2V0RW5hYmxlZChib29sKTsKICAgICAKICAgICB0eXBlZGVmIFZlY3Rv
cjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+IFVSTEVuY29kZWRGb3JtOwogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBVUkxFbmNvZGVkRm9ybSBwYXJzZVVSTEVuY29kZWRGb3Jt
KFN0cmluZ1ZpZXcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvVVJMQ0YuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VSTENGLmNwcAkocmV2
aXNpb24gMjEyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvVVJMQ0YuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcsOCBAQCBVUkw6OlVSTChDRlVSTFJlZiB1cmwpCiAg
ICAgLy8gRklYTUU6IFdoeSBpcyBpdCBPSyB0byBpZ25vcmUgYmFzZSBVUkwgaGVyZT8KICAgICBD
U3RyaW5nIHVybEJ5dGVzOwogICAgIGdldFVSTEJ5dGVzKHVybCwgdXJsQnl0ZXMpOwotICAgIGlm
IChVUkxQYXJzZXI6OmVuYWJsZWQoKSkgewotICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKHVybEJ5
dGVzLmRhdGEoKSk7Ci0gICAgICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxz
ZQotICAgICAgICBwYXJzZSh1cmxCeXRlcy5kYXRhKCkpOworICAgIFVSTFBhcnNlciBwYXJzZXIo
dXJsQnl0ZXMuZGF0YSgpKTsKKyAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKIH0KIAogI2lm
ICFVU0UoRk9VTkRBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9VUkxN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1VSTE1hYy5t
bQkocmV2aXNpb24gMjEyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1VSTE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDggQEAgVVJMOjpVUkwoTlNVUkwgKnVy
bCkKICAgICAvLyBGSVhNRTogV2h5IGlzIGl0IE9LIHRvIGlnbm9yZSBiYXNlIFVSTCBoZXJlPwog
ICAgIENTdHJpbmcgdXJsQnl0ZXM7CiAgICAgZ2V0VVJMQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxD
RlVSTFJlZj4odXJsKSwgdXJsQnl0ZXMpOwotICAgIGlmIChVUkxQYXJzZXI6OmVuYWJsZWQoKSkg
ewotICAgICAgICBVUkxQYXJzZXIgcGFyc2VyKHVybEJ5dGVzLmRhdGEoKSk7Ci0gICAgICAgICp0
aGlzID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZSh1cmxCeXRl
cy5kYXRhKCkpOworICAgIFVSTFBhcnNlciBwYXJzZXIodXJsQnl0ZXMuZGF0YSgpKTsKKyAgICAq
dGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKIH0KIAogVVJMOjpvcGVyYXRvciBOU1VSTCAqKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NvdXAvVVJMU291cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc291cC9VUkxTb3VwLmNwcAkocmV2aXNp
b24gMjEyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc291cC9VUkxTb3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDggQEAgVVJMOjpVUkwoU291cFVSSSogc291cFVS
SSkKICAgICB9CiAKICAgICBHVW5pcXVlUHRyPGdjaGFyPiB1cmxTdHJpbmcoc291cF91cmlfdG9f
c3RyaW5nKHNvdXBVUkksIEZBTFNFKSk7Ci0gICAgaWYgKFVSTFBhcnNlcjo6ZW5hYmxlZCgpKSB7
Ci0gICAgICAgIFVSTFBhcnNlciBwYXJzZXIoU3RyaW5nOjpmcm9tVVRGOCh1cmxTdHJpbmcuZ2V0
KCkpKTsKLSAgICAgICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHBhcnNlKFN0cmluZzo6ZnJvbVVURjgodXJsU3RyaW5nLmdldCgpKSk7CisgICAgVVJMUGFy
c2VyIHBhcnNlcihTdHJpbmc6OmZyb21VVEY4KHVybFN0cmluZy5nZXQoKSkpOworICAgICp0aGlz
ID0gcGFyc2VyLnJlc3VsdCgpOwogCiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMjQ2MikKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE3LTAyLTE2ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3Zl
IG9sZCBVUkwgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjg0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2Rl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
R1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNoYXJl
ZC9Db2NvYS9XZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBv
aW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0aWFsaXplcik6CisgICAgICAg
ICogU2hhcmVkL1dlYktpdDJJbml0aWFsaXplLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5pdGlh
bGl6ZVdlYktpdDIpOgorICAgICAgICAqIFNoYXJlZC9XZWJLaXQySW5pdGlhbGl6ZS5oOgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKyAgICAgICAgKiBTaGFyZWQvZWZsL1dlYktpdDJJbml0aWFsaXplRUZMLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYktpdDJJbml0aWFsaXplR1RLLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTmV3V2ViUHJvY2Vzcyk6CisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVX
ZWJQcm9jZXNzKToKKwogMjAxNy0wMi0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBXS1dlYlZpZXcgaW5zaWRlIGEgVUlDb2xsZWN0aW9uVmlldyBm
bGFzaGVzIHdoZW4gaXRlbXMgYXJlIGluc2VydGVkIGFib3ZlIGl0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQkocmV2aXNpb24gMjEyNDYyKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAgbGlzdChBUFBFTkQg
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL2VmbC9OYXRpdmVXZWJXaGVlbEV2ZW50RWZsLmNw
cAogICAgIFNoYXJlZC9lZmwvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoRWZsLmNwcAogICAgIFNoYXJl
ZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAotICAgIFNoYXJlZC9lZmwvV2ViS2l0MkluaXRpYWxp
emVFRkwuY3BwCiAKICAgICBTaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMjEyNDYyKQorKysgU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL2d0ay9Qcm9jZXNz
RXhlY3V0YWJsZVBhdGhHdGsuY3BwCiAgICAgU2hhcmVkL2d0ay9XZWJDb250ZXh0TWVudUl0ZW1H
dGsuY3BwCiAgICAgU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCi0gICAgU2hhcmVkL2d0
ay9XZWJLaXQySW5pdGlhbGl6ZUdUSy5jcHAKICAgICBTaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRh
dGEuY3BwCiAKICAgICBTaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcApAQCAt
MTExNiw3ICsxMTE1LDYgQEAgaWYgKEVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyKQogICAgICAg
ICBTaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwCiAgICAgICAgIFNoYXJlZC9n
dGsvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoR3RrLmNwcAogICAgICAgICBTaGFyZWQvZ3RrL1dlYkV2
ZW50RmFjdG9yeS5jcHAKLSAgICAgICAgU2hhcmVkL2d0ay9XZWJLaXQySW5pdGlhbGl6ZUdUSy5j
cHAKIAogICAgICAgICBTaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24gMjEyNDYyKQorKysgU291
cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsx
MDIsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvQ29jb2EvQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5tbQogICAgIFNoYXJlZC9Db2NvYS9EYXRhRGV0ZWN0
aW9uUmVzdWx0Lm1tCiAgICAgU2hhcmVkL0NvY29hL0xvYWRQYXJhbWV0ZXJzQ29jb2EubW0KLSAg
ICBTaGFyZWQvQ29jb2EvV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbQogICAgIFNoYXJlZC9Db2Nv
YS9XS05TQXJyYXkubW0KICAgICBTaGFyZWQvQ29jb2EvV0tOU0RhdGEubW0KICAgICBTaGFyZWQv
Q29jb2EvV0tOU0RpY3Rpb25hcnkubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIxMjQ2MikKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAxLDggKzIwMSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRs
ZXIoQ3IKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsKLSAgICBVUkxQ
YXJzZXI6OnNldEVuYWJsZWQocGFyYW1ldGVycy51cmxQYXJzZXJFbmFibGVkKTsKLQogICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwogCiAgICAgV1RGOjpz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZQogI2VuZGlmCiAgICAgZW5jb2RlciA8PCBzaG91bGRTdXBwcmVzc01lbW9yeVBy
ZXNzdXJlSGFuZGxlcjsKICAgICBlbmNvZGVyIDw8IHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vz
c2lvbjsKLSAgICBlbmNvZGVyIDw8IHVybFBhcnNlckVuYWJsZWQ7CiAgICAgZW5jb2RlciA8PCBs
b2FkVGhyb3R0bGVMYXRlbmN5OwogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRG
b3JDdXN0b21Qcm90b2NvbHM7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xNDcsOCArMTQ2LDYg
QEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkVXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LnVybFBhcnNlckVuYWJsZWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubG9hZFRocm90dGxlTGF0ZW5jeSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scykpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDIxMjQ2MikKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDYgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzIAogI2VuZGlmCiAgICAgYm9vbCBzaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFu
ZGxlciB7IGZhbHNlIH07CiAgICAgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247
Ci0gICAgYm9vbCB1cmxQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzIGxvYWRUaHJvdHRsZUxhdGVuY3kgeyAwbXMgfTsKIAogICAgIFZlY3RvcjxT
dHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzOwpJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYktpdDJJbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViS2l0MkluaXRpYWxpemUuY3BwCShyZXZpc2lvbiAyMTI0
NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViS2l0MkluaXRpYWxpemUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTEgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZv
aWQgSW5pdGlhbGl6ZVdlYktpdDIoUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUpCit2b2lkIEluaXRp
YWxpemVXZWJLaXQyKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBJbml0V2ViQ29yZVN5
c3RlbUludGVyZmFjZSgpOwogI2VuZGlmCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplV2ViS2l0Mihw
cm9jZXNzVHlwZSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEluaXRXZWJDb3JlVGhyZWFkU3lz
dGVtSW50ZXJmYWNlKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJL
aXQySW5pdGlhbGl6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJL
aXQySW5pdGlhbGl6ZS5oCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViS2l0MkluaXRpYWxpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDYgQEAK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWVudW0gUHJvY2Vzc1R5cGUgewotICAgIENoaWxkUHJv
Y2VzcywKLSAgICBVSVByb2Nlc3MsCi19OwotCi12b2lkIEluaXRpYWxpemVXZWJLaXQyKFByb2Nl
c3NUeXBlID0gVUlQcm9jZXNzKTsKLXZvaWQgcGxhdGZvcm1Jbml0aWFsaXplV2ViS2l0MihQcm9j
ZXNzVHlwZSk7Cit2b2lkIEluaXRpYWxpemVXZWJLaXQyKCk7CiAKIH07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDYgQEAg
dm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZAogICAgIGVuY29kZXIgPDwg
c2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgZW5jb2RlciA8PCBzaG91
bGRVc2VGb250U21vb3RoaW5nOwogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQ7Ci0gICAgZW5jb2RlciA8PCB1cmxQYXJzZXJFbmFibGVkOwogICAgIGVuY29kZXIg
PDwgZm9udFdoaXRlbGlzdDsKICAgICBlbmNvZGVyIDw8IGljb25EYXRhYmFzZUVuYWJsZWQ7CiAg
ICAgZW5jb2RlciA8PCB0ZXJtaW5hdGlvblRpbWVvdXQ7CkBAIC0yMTksOCArMjE4LDYgQEAgYm9v
bCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocGFyYW1ldGVycy51cmxQYXJzZXJFbmFibGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5mb250V2hpdGVsaXN0KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5p
Y29uRGF0YWJhc2VFbmFibGVkKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjEyNDYyKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw2IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIHsKICAgICBib29sIHNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
IHsgZmFsc2UgfTsKICAgICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgeyB0cnVlIH07CiAg
ICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9v
bCB1cmxQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIGljb25EYXRhYmFzZUVuYWJs
ZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtZW1vcnlDYWNoZURpc2FibGVkIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJLaXQySW5pdGlhbGl6ZUNvY29h
Lm1tCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvV2Vi
S2l0MkluaXRpYWxpemVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6
ZS5oIgotCi0jaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYktpdDIoUHJv
Y2Vzc1R5cGUgcHJvY2Vzc1R5cGUpCi17Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBpbml0
T25jZTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHVzZSBOU1VzZXJEZWZhdWx0cyBp
biB0aGUgY2hpbGQgcHJvY2Vzc2VzLgotICAgIGlmIChwcm9jZXNzVHlwZSA9PSBVSVByb2Nlc3Mp
IHsKLSAgICAgICAgZGlzcGF0Y2hfb25jZSgmaW5pdE9uY2UsIF4gewotICAgICAgICAgICAgTlNT
dHJpbmcgKmtleSA9IEAiVVJMUGFyc2VyRW5hYmxlZCI7Ci0gICAgICAgICAgICBpZiAoW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OmtleV0pCi0gICAg
ICAgICAgICAgICAgVVJMUGFyc2VyOjpzZXRFbmFibGVkKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6a2V5XSk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0K
LQotfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFj
L1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2
aWNlRW50cnlQb2ludC5oCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgWFBDU2VydmljZUluaXRp
YWxpemVyKE9TT2JqZWN0UHRyPHgKICAgICAvLyBzbyBlbnN1cmUgdGhhdCB3ZSBoYXZlIGFuIG91
dHN0YW5kaW5nIHRyYW5zYWN0aW9uIGhlcmUuCiAgICAgeHBjX3RyYW5zYWN0aW9uX2JlZ2luKCk7
CiAKLSAgICBJbml0aWFsaXplV2ViS2l0MihDaGlsZFByb2Nlc3MpOworICAgIEluaXRpYWxpemVX
ZWJLaXQyKCk7CiAKICAgICBpZiAoIWRlbGVnYXRlLmNoZWNrRW50aXRsZW1lbnRzKCkpCiAgICAg
ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwv
V2ViS2l0MkluaXRpYWxpemVFRkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9lZmwvV2ViS2l0MkluaXRpYWxpemVFRkwuY3BwCShyZXZpc2lvbiAyMTI0NjIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL1dlYktpdDJJbml0aWFsaXplRUZMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci12b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYktpdDIoUHJvY2Vzc1R5cGUpCi17Ci19Ci0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViS2l0MkluaXRpYWxpemVHVEsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViS2l0MkluaXRpYWxp
emVHVEsuY3BwCShyZXZpc2lvbiAyMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L1dlYktpdDJJbml0aWFsaXplR1RLLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdDJJbml0
aWFsaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIHBsYXRmb3JtSW5pdGlhbGl6
ZVdlYktpdDIoUHJvY2Vzc1R5cGUpCi17Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkocmV2aXNpb24gMjEyNDYyKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgxLDggKzM4MSw2IEBAIE5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnMK
IAogICAgIHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uID0gbV9zaG91
bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247CiAKLSAgICBwYXJhbWV0ZXJzLnVybFBhcnNlckVu
YWJsZWQgPSBVUkxQYXJzZXI6OmVuYWJsZWQoKTsKLSAgICAKICAgICAvLyBBZGQgYW55IHBsYXRm
b3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKICAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhwYXJhbWV0ZXJzKTsKIApAQCAtNTQ5LDggKzU0Nyw2IEBAIFdlYlByb2Nlc3NQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU4KIAogICAgIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMgcGFyYW1ldGVyczsKIAotICAgIHBhcmFtZXRlcnMudXJsUGFyc2VyRW5hYmxlZCA9IFVSTFBh
cnNlcjo6ZW5hYmxlZCgpOwotICAgIAogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRo
ID0gbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aDsKICAgICBpZiAoIXBhcmFtZXRl
cnMuaW5qZWN0ZWRCdW5kbGVQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGFyYW1ldGVycy5pbmplY3RlZEJ1
bmRsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLmluamVjdGVk
QnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI0NjIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTExMzAsNyArMTEzMCw2IEBACiAJCTVDMjBDQkEwMUJCMUVDRDgwMDg5NUJCMSAv
KiBOZXR3b3JrU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi87
IH07CiAJCTVDMjk4REEwMUMzREYwMjEwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjk4RDlFMUMzREVG
MjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLzsgfTsKIAkJNUM3NzA2NzQxRDExMzgz
ODAwMTI3MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNzcwNjczMUQxMTFEOEIwMDEyNzAwRiAvKiBXZWJT
b2NrZXRQcm92aWRlci5jcHAgKi87IH07Ci0JCTVDNzk0MzlCMUQ3NjJENjIwMDMxMDJENCAvKiBX
ZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUM3OTQzOUExRDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0aWFs
aXplQ29jb2EubW0gKi87IH07CiAJCTVDODVDNzg4MUMzRjIzQ0UwMDYxQTRGQSAvKiBQZW5kaW5n
RG93bmxvYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUM4NUM3ODYxQzNGMjNDNTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi87IH07
CiAJCTVDOUU1NjgyMURGN0YxQUIwMEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4MDFERjdG
MDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuY3BwICovOyB9OwogCQk1QzlFNTY4MzFE
RjdGMUIzMDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1NjgxMURGN0YwNTUwMEM5RUUzMyAvKiBX
S1dlYnNpdGVQb2xpY2llcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0zMzEzLDcgKzMzMTIsNiBAQAogCQk1QzIwQ0I5RTFCQjBERDE4MDA4OTVC
QjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TmV0d29ya1Nlc3Npb24uaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAv
KiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGVu
ZGluZ0Rvd25sb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rv
d25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNzcwNjczMUQxMTFEOEIw
MDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRQcm92aWRlci5jcHA7IHBhdGggPSBOZXR3b3JrL1dlYlNv
Y2tldFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM3OTQzOUEx
RDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0aWFsaXplQ29jb2EubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDODhEQzFEMEY0MUEwMDA5RDJGNkQgLyog
V2ViU29ja2V0UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
U29ja2V0UHJvdmlkZXIuaDsgcGF0aCA9IE5ldHdvcmsvV2ViU29ja2V0UHJvdmlkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM4NUM3ODYxQzNGMjNDNTAwNjFBNEZBIC8qIFBl
bmRpbmdEb3dubG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQ
ZW5kaW5nRG93bmxvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRp
bmdEb3dubG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1NjdGMURG
NzkzMDkwMEM5RUUzMyAvKiBXZWJzaXRlUG9saWNpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2Vic2l0ZVBvbGljaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTM2LDcgKzU1MzQsNiBAQAogCQkJCUM1NUY5MTZEMUM1OTVFNDQwMDI5RTkyRCAvKiBE
YXRhRGV0ZWN0aW9uUmVzdWx0Lm1tICovLAogCQkJCTJEMTA4NzYyMUQyQzY0MUIwMEI4NUY4MiAv
KiBMb2FkUGFyYW1ldGVyc0NvY29hLm1tICovLAogCQkJCTFBQjFGNzhFMUQxQjM0QTYwMDdDOUJE
MSAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSAqLywKLQkJCQk1Qzc5NDM5QTFENzYy
Q0RGMDAzMTAyRDQgLyogV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbSAqLywKIAkJCQkzN0M0QzA5
MjE4MTRCM0FGMDAzNjg4QjkgLyogV0tOU0FycmF5LmggKi8sCiAJCQkJMzdDNEMwOTExODE0QjNB
RjAwMzY4OEI5IC8qIFdLTlNBcnJheS5tbSAqLywKIAkJCQkzNzNDRUFENDE4NTQxN0FFMDA4QzM2
M0QgLyogV0tOU0RhdGEuaCAqLywKQEAgLTk5MDgsNyArOTkwNSw2IEBACiAJCQkJQzAzMzdERDMx
MjdBMkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE2MjgwRjMxOTE5OTgyQTAwNkFEOUY5IC8qIFdlYktpdC5tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM5QkE1MDQxNjk3QzQ1MzAwRTQ0NjE2IC8qIFdlYktpdDJJbml0aWFsaXplLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTVDNzk0MzlCMUQ3NjJENjIwMDMxMDJENCAvKiBXZWJLaXQySW5pdGlh
bGl6ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQjA4RkYxNjM5REUxQTAwRUMzMjRB
IC8qIFdlYkxvYWRlclN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEMDAzQTUyMTlE
NDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUM5OEM0OEE1MUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1
c01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05OTk2LDcgKzk5OTIsNyBAQAogCQkJCTM3
NjA4ODFFMTUwNDEzRTkwMEZDODJDNyAvKiBXZWJSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTEwQUZGQjkxNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAvKiBXZWJSZXNv
dXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNkJFOTY5QTIxRTQzQjhBNDAwOEI3NDgzIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZCRTk2OUEy
MUU0M0I4QTQwMDhCNzQ4MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUMgLyogV2ViUlRDU29j
a2V0TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMx
ODUwMEYzMjgyQyAvKiBXZWJSVENSZXNvbHZlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUQgLyogTmV0d29ya1JUQ1NvY2tldE1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTg3LDcgKzEwMTgzLDcgQEAK
IAkJCQkzNzk0ODQwODE1MEM0Qjk3MDBFNTJDRTkgLyogV0tSZW5kZXJMYXllci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzNzYwODgyMjE1MDQxNEY3MDBGQzgyQzcgLyogV0tSZW5kZXJPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMzNjc2M0ExMzBDOTlEQzAwNkM5REUyIC8qIFdLUmVz
b3VyY2VDYWNoZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDZCRTk2OTlFMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZCRTk2OTlFMUU0M0I0MUQw
MDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBN0UzNzc4MThFNEE0RkUwMDNEMEZGRiAvKiBXS1NjcmlwdE1lc3NhZ2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwRkNCNEU1NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxW
aWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFDRDFDNjYxQjM0QjlEQzAwMTQyQ0E1IC8qIFdL
U2VjdXJpdHlPcmlnaW4ubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjEyNDYyKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDkgKzIz
OSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVAKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYgcGFyYW1ldGVycykKLXsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQocGFyYW1l
dGVycy51cmxQYXJzZXJFbmFibGVkKTsKLSAgICAKK3sgICAgCiAgICAgQVNTRVJUKG1fcGFnZU1h
cC5pc0VtcHR5KCkpOwogCiAjaWYgT1MoTElOVVgpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTI0ODUpCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wMi0xNiAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92
ZSBvbGQgVVJMIHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY4NDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tVUkwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hl
Y2tSZWxhdGl2ZVVSTCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGVja1VSTERpZmZlcmVu
Y2VzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoZWNrUmVsYXRpdmVVUkxEaWZmZXJlbmNl
cyk6CisKIDIwMTctMDItMTYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBTcGVjaWFsIFVSTHMgd2l0aG91dCBhIGhvc3QgYXJlIGludmFsaWQK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIu
Y3BwCShyZXZpc2lvbiAyMTI0NzApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4LDcgQEAgY29uc3Qg
VGVzdFRhYnMgdGVzdFRhYnNWYWx1ZUZvclN1cnJvZ2F0ZQogCiBzdGF0aWMgdm9pZCBjaGVja1VS
TChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgRXhwZWN0ZWRQYXJ0cyYgcGFydHMsIFRl
c3RUYWJzIHRlc3RUYWJzID0gVGVzdFRhYnM6OlllcykKIHsKLSAgICBib29sIHdhc0VuYWJsZWQg
PSBVUkxQYXJzZXI6OmVuYWJsZWQoKTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQodHJ1ZSk7
CiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7Ci0gICAgVVJMUGFyc2VyOjpz
ZXRFbmFibGVkKGZhbHNlKTsKLSAgICBhdXRvIG9sZFVSTCA9IFVSTChVUkwoKSwgdXJsU3RyaW5n
KTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQod2FzRW5hYmxlZCk7CiAgICAgCiAgICAgRVhQ
RUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsK
ICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCB1cmwudXNlcigpKSk7CkBAIC0xMDQsMjAg
Kzk5LDggQEAgc3RhdGljIHZvaWQgY2hlY2tVUkwoY29uc3QgU3RyaW5nJiB1cmxTdAogICAgIEVY
UEVDVF9UUlVFKGVxKHBhcnRzLnF1ZXJ5LCB1cmwucXVlcnkoKSkpOwogICAgIEVYUEVDVF9UUlVF
KGVxKHBhcnRzLmZyYWdtZW50LCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpKTsKICAgICBFWFBF
Q1RfVFJVRShlcShwYXJ0cy5zdHJpbmcsIHVybC5zdHJpbmcoKSkpOwotICAgIAotICAgIEVYUEVD
VF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCBvbGRVUkwucHJvdG9jb2woKS50b1N0cmluZygpKSk7
Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMudXNlciwgb2xkVVJMLnVzZXIoKSkpOwotICAgIEVY
UEVDVF9UUlVFKGVxKHBhcnRzLnBhc3N3b3JkLCBvbGRVUkwucGFzcygpKSk7Ci0gICAgRVhQRUNU
X1RSVUUoZXEocGFydHMuaG9zdCwgb2xkVVJMLmhvc3QoKSkpOwotICAgIEVYUEVDVF9FUShwYXJ0
cy5wb3J0LCBvbGRVUkwucG9ydCgpLnZhbHVlX29yKDApKTsKLSAgICBFWFBFQ1RfVFJVRShlcShw
YXJ0cy5wYXRoLCBvbGRVUkwucGF0aCgpKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucXVl
cnksIG9sZFVSTC5xdWVyeSgpKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMuZnJhZ21lbnQs
IG9sZFVSTC5mcmFnbWVudElkZW50aWZpZXIoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
LnN0cmluZywgb2xkVVJMLnN0cmluZygpKSk7Ci0gICAgCi0gICAgRVhQRUNUX1RSVUUoVVJMUGFy
c2VyOjphbGxWYWx1ZXNFcXVhbCh1cmwsIG9sZFVSTCkpOworCiAgICAgRVhQRUNUX1RSVUUoVVJM
UGFyc2VyOjppbnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQodXJsKSk7Ci0gICAgRVhQRUNUX1RSVUUo
VVJMUGFyc2VyOjppbnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQob2xkVVJMKSk7CiAKICAgICBpZiAo
dGVzdFRhYnMgPT0gVGVzdFRhYnM6Ok5vKQogICAgICAgICByZXR1cm47CkBAIC0xMzIsMTIgKzEx
NSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3QKIAogc3RhdGlj
IHZvaWQgY2hlY2tSZWxhdGl2ZVVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3Ry
aW5nJiBiYXNlVVJMU3RyaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cywgVGVzdFRhYnMg
dGVzdFRhYnMgPSBUZXN0VGFiczo6WWVzKQogewotICAgIGJvb2wgd2FzRW5hYmxlZCA9IFVSTFBh
cnNlcjo6ZW5hYmxlZCgpOwotICAgIFVSTFBhcnNlcjo6c2V0RW5hYmxlZCh0cnVlKTsKICAgICBh
dXRvIHVybCA9IFVSTChVUkwoVVJMKCksIGJhc2VVUkxTdHJpbmcpLCB1cmxTdHJpbmcpOwotICAg
IFVSTFBhcnNlcjo6c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgYXV0byBvbGRVUkwgPSBVUkwoVVJM
KFVSTCgpLCBiYXNlVVJMU3RyaW5nKSwgdXJsU3RyaW5nKTsKLSAgICBVUkxQYXJzZXI6OnNldEVu
YWJsZWQod2FzRW5hYmxlZCk7CiAgICAgCiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9j
b2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
cy51c2VyLCB1cmwudXNlcigpKSk7CkBAIC0xNDksMTkgKzEyNyw3IEBAIHN0YXRpYyB2b2lkIGNo
ZWNrUmVsYXRpdmVVUkwoY29uc3QgU3RyaW4KICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5mcmFn
bWVudCwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFy
dHMuc3RyaW5nLCB1cmwuc3RyaW5nKCkpKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
cy5wcm90b2NvbCwgb2xkVVJMLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOwotICAgIEVYUEVDVF9U
UlVFKGVxKHBhcnRzLnVzZXIsIG9sZFVSTC51c2VyKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShw
YXJ0cy5wYXNzd29yZCwgb2xkVVJMLnBhc3MoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
Lmhvc3QsIG9sZFVSTC5ob3N0KCkpKTsKLSAgICBFWFBFQ1RfRVEocGFydHMucG9ydCwgb2xkVVJM
LnBvcnQoKS52YWx1ZV9vcigwKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGF0aCwgb2xk
VVJMLnBhdGgoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnF1ZXJ5LCBvbGRVUkwucXVl
cnkoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLmZyYWdtZW50LCBvbGRVUkwuZnJhZ21l
bnRJZGVudGlmaWVyKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5zdHJpbmcsIG9sZFVS
TC5zdHJpbmcoKSkpOwotICAgIAotICAgIEVYUEVDVF9UUlVFKFVSTFBhcnNlcjo6YWxsVmFsdWVz
RXF1YWwodXJsLCBvbGRVUkwpKTsKICAgICBFWFBFQ1RfVFJVRShVUkxQYXJzZXI6OmludGVybmFs
VmFsdWVzQ29uc2lzdGVudCh1cmwpKTsKLSAgICBFWFBFQ1RfVFJVRShVUkxQYXJzZXI6OmludGVy
bmFsVmFsdWVzQ29uc2lzdGVudChvbGRVUkwpKTsKICAgICAKICAgICBpZiAodGVzdFRhYnMgPT0g
VGVzdFRhYnM6Ok5vKQogICAgICAgICByZXR1cm47CkBAIC0xNzcsMTIgKzE0Myw4IEBAIHN0YXRp
YyB2b2lkIGNoZWNrUmVsYXRpdmVVUkwoY29uc3QgU3RyaW4KIAogc3RhdGljIHZvaWQgY2hlY2tV
UkxEaWZmZXJlbmNlcyhjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgRXhwZWN0ZWRQYXJ0
cyYgcGFydHNOZXcsIGNvbnN0IEV4cGVjdGVkUGFydHMmIHBhcnRzT2xkLCBUZXN0VGFicyB0ZXN0
VGFicyA9IFRlc3RUYWJzOjpZZXMpCiB7Ci0gICAgYm9vbCB3YXNFbmFibGVkID0gVVJMUGFyc2Vy
OjplbmFibGVkKCk7Ci0gICAgVVJMUGFyc2VyOjpzZXRFbmFibGVkKHRydWUpOworICAgIFVOVVNF
RF9QQVJBTShwYXJ0c09sZCk7IC8vIEZJWE1FOiBSZW1vdmUgYWxsIHRoZSBvbGQgZXhwZWN0ZWQg
cGFydHMuCiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7Ci0gICAgVVJMUGFy
c2VyOjpzZXRFbmFibGVkKGZhbHNlKTsKLSAgICBhdXRvIG9sZFVSTCA9IFVSTChVUkwoKSwgdXJs
U3RyaW5nKTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQod2FzRW5hYmxlZCk7CiAgICAgCiAg
ICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3Ry
aW5nKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy51c2VyLCB1cmwudXNlcigpKSk7
CkBAIC0xOTQsMTkgKzE1Niw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrVVJMRGlmZmVyZW5jZXMoY29u
c3QgU3QKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5mcmFnbWVudCwgdXJsLmZyYWdtZW50
SWRlbnRpZmllcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcuc3RyaW5nLCB1cmwu
c3RyaW5nKCkpKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5wcm90b2NvbCwg
b2xkVVJMLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
T2xkLnVzZXIsIG9sZFVSTC51c2VyKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5w
YXNzd29yZCwgb2xkVVJMLnBhc3MoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzT2xkLmhv
c3QsIG9sZFVSTC5ob3N0KCkpKTsKLSAgICBFWFBFQ1RfRVEocGFydHNPbGQucG9ydCwgb2xkVVJM
LnBvcnQoKS52YWx1ZV9vcigwKSk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHNPbGQucGF0aCwg
b2xkVVJMLnBhdGgoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzT2xkLnF1ZXJ5LCBvbGRV
UkwucXVlcnkoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzT2xkLmZyYWdtZW50LCBvbGRV
UkwuZnJhZ21lbnRJZGVudGlmaWVyKCkpKTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5z
dHJpbmcsIG9sZFVSTC5zdHJpbmcoKSkpOwotICAgIAotICAgIEVYUEVDVF9GQUxTRShVUkxQYXJz
ZXI6OmFsbFZhbHVlc0VxdWFsKHVybCwgb2xkVVJMKSk7CiAgICAgRVhQRUNUX1RSVUUoVVJMUGFy
c2VyOjppbnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQodXJsKSk7Ci0gICAgRVhQRUNUX1RSVUUoVVJM
UGFyc2VyOjppbnRlcm5hbFZhbHVlc0NvbnNpc3RlbnQob2xkVVJMKSk7CiAgICAgCiAgICAgaWYg
KHRlc3RUYWJzID09IFRlc3RUYWJzOjpObykKICAgICAgICAgcmV0dXJuOwpAQCAtMjIyLDEyICsx
NzIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja1VSTERpZmZlcmVuY2VzKGNvbnN0IFN0CiAKIHN0YXRp
YyB2b2lkIGNoZWNrUmVsYXRpdmVVUkxEaWZmZXJlbmNlcyhjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMU3RyaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0
c05ldywgY29uc3QgRXhwZWN0ZWRQYXJ0cyYgcGFydHNPbGQsIFRlc3RUYWJzIHRlc3RUYWJzID0g
VGVzdFRhYnM6OlllcykKIHsKLSAgICBib29sIHdhc0VuYWJsZWQgPSBVUkxQYXJzZXI6OmVuYWJs
ZWQoKTsKLSAgICBVUkxQYXJzZXI6OnNldEVuYWJsZWQodHJ1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHBhcnRzT2xkKTsgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhlIG9sZCBleHBlY3RlZCBwYXJ0cy4K
ICAgICBhdXRvIHVybCA9IFVSTChVUkwoVVJMKCksIGJhc2VVUkxTdHJpbmcpLCB1cmxTdHJpbmcp
OwotICAgIFVSTFBhcnNlcjo6c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgYXV0byBvbGRVUkwgPSBV
UkwoVVJMKFVSTCgpLCBiYXNlVVJMU3RyaW5nKSwgdXJsU3RyaW5nKTsKLSAgICBVUkxQYXJzZXI6
OnNldEVuYWJsZWQod2FzRW5hYmxlZCk7CiAgICAgCiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNO
ZXcucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKICAgICBFWFBFQ1RfVFJV
RShlcShwYXJ0c05ldy51c2VyLCB1cmwudXNlcigpKSk7CkBAIC0yMzksMTkgKzE4NSw3IEBAIHN0
YXRpYyB2b2lkIGNoZWNrUmVsYXRpdmVVUkxEaWZmZXJlbmNlcygKICAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0c05ldy5mcmFnbWVudCwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7CiAgICAgRVhQ
RUNUX1RSVUUoZXEocGFydHNOZXcuc3RyaW5nLCB1cmwuc3RyaW5nKCkpKTsKICAgICAKLSAgICBF
WFBFQ1RfVFJVRShlcShwYXJ0c09sZC5wcm90b2NvbCwgb2xkVVJMLnByb3RvY29sKCkudG9TdHJp
bmcoKSkpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzT2xkLnVzZXIsIG9sZFVSTC51c2VyKCkp
KTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5wYXNzd29yZCwgb2xkVVJMLnBhc3MoKSkp
OwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzT2xkLmhvc3QsIG9sZFVSTC5ob3N0KCkpKTsKLSAg
ICBFWFBFQ1RfRVEocGFydHNPbGQucG9ydCwgb2xkVVJMLnBvcnQoKS52YWx1ZV9vcigwKSk7Ci0g
ICAgRVhQRUNUX1RSVUUoZXEocGFydHNPbGQucGF0aCwgb2xkVVJMLnBhdGgoKSkpOwotICAgIEVY
UEVDVF9UUlVFKGVxKHBhcnRzT2xkLnF1ZXJ5LCBvbGRVUkwucXVlcnkoKSkpOwotICAgIEVYUEVD
VF9UUlVFKGVxKHBhcnRzT2xkLmZyYWdtZW50LCBvbGRVUkwuZnJhZ21lbnRJZGVudGlmaWVyKCkp
KTsKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c09sZC5zdHJpbmcsIG9sZFVSTC5zdHJpbmcoKSkp
OwotICAgIAotICAgIEVYUEVDVF9GQUxTRShVUkxQYXJzZXI6OmFsbFZhbHVlc0VxdWFsKHVybCwg
b2xkVVJMKSk7CiAgICAgRVhQRUNUX1RSVUUoVVJMUGFyc2VyOjppbnRlcm5hbFZhbHVlc0NvbnNp
c3RlbnQodXJsKSk7Ci0gICAgRVhQRUNUX1RSVUUoVVJMUGFyc2VyOjppbnRlcm5hbFZhbHVlc0Nv
bnNpc3RlbnQob2xkVVJMKSk7CiAgICAgCiAgICAgaWYgKHRlc3RUYWJzID09IFRlc3RUYWJzOjpO
bykKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>