<?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>7331</bug_id>
          
          <creation_ts>2006-02-17 19:38:43 -0800</creation_ts>
          <short_desc>CSS parser leaks when parsing incorrect CSS</short_desc>
          <delta_ts>2006-02-20 23:44:16 -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>CSS</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>7345</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>33216</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-17 19:38:43 -0800</bug_when>
    <thetext>As you can see on the buildbot, there are CSS parser leaks that occur when running layout tests. I have a fix for these under development.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33297</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-18 14:49:29 -0800</bug_when>
    <thetext>My forthcoming patch requires the patch in bug 7345.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33305</commentid>
    <comment_count>2</comment_count>
      <attachid>6593</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-18 15:44:38 -0800</bug_when>
    <thetext>Created attachment 6593
patch, including change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33547</commentid>
    <comment_count>3</comment_count>
      <attachid>6593</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-02-20 17:30:58 -0800</bug_when>
    <thetext>Comment on attachment 6593
patch, including change log

Looks great.  Went over it in person.  One error found with 
-    m_stylesheetDoc = 0;
in
 void XSLStyleSheetImpl::clearDocuments()

We&apos;ll also need to make sure we performance test before landing.

r=me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6593</attachid>
            <date>2006-02-18 15:44:38 -0800</date>
            <delta_ts>2006-02-20 17:30:58 -0800</delta_ts>
            <desc>patch, including change log</desc>
            <filename>LeaksPatch.txt</filename>
            <type>text/plain</type>
            <size>95074</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2h0bWwvaHRtbC9IVE1MRm9ybUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTI4ODEpCisrKyBr
aHRtbC9odG1sL0hUTUxGb3JtRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIs
MjUgKzQ3MiwxNCBAQAogICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3QgaT4gc3RhdGljIHZvaWQg
aW5zZXJ0SW50b1ZlY3RvcihWZWN0b3I8VCosIGk+JiB2ZWMsIHVuc2lnbmVkIHBvcywgVCogaXRl
bSkKK3RlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVj
dG9yKFZlY3RvcjxUKiwgbj4gJiB2ZWMsIFQqIGl0ZW0pCiB7Ci0gICAgdmVjLnJlc2l6ZSh2ZWMu
c2l6ZSgpICsgMSk7Ci0gICAgdHlwZW5hbWUgVmVjdG9yPFQqLCBpPjo6aXRlcmF0b3IgaXQ7Ci0g
ICAgZm9yIChpdCA9ICZ2ZWMubGFzdCgpOyBpdCAhPSB2ZWMuYmVnaW4oKSArIHBvczsgLS1pdCkK
LSAgICAgICAgKml0ID0gaXRbLTFdOwotICAgICppdCA9IGl0ZW07Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIFQsIHNpemVfdCBpPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxUKiwg
aT4gJiB2ZWMsIFQqIGl0ZW0pCi17Ci0gICAgZm9yICh0eXBlbmFtZSBWZWN0b3I8VCosIGk+Ojpp
dGVyYXRvciBpdCA9IHZlYy5iZWdpbigpOyBpdCAhPSB2ZWMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCppdCA9PSBpdGVtKSB7Ci0gICAgICAgICAgICBmb3IgKHR5cGVuYW1lIFZlY3RvcjxU
KiwgaT46Oml0ZXJhdG9yIGl0MiA9IGl0OyBpdDIgIT0gJnZlYy5sYXN0KCk7ICsraXQyKQotICAg
ICAgICAgICAgICAgICppdDIgPSBpdDJbMV07Ci0gICAgICAgICAgICB2ZWMucmVtb3ZlTGFzdCgp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNbaV0g
PT0gaXRlbSkgeworICAgICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgfQogfQogCiB1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpm
b3JtRWxlbWVudEluZGV4KEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICplKQpAQCAtNTEzLDIw
ICs1MDIsMjAgQEAKICAgICByZXR1cm4gZm9ybUVsZW1lbnRzLnNpemUoKTsKIH0KIAotdm9pZCBI
VE1MRm9ybUVsZW1lbnRJbXBsOjpyZWdpc3RlckZvcm1FbGVtZW50KEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsICplKQordm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpyZWdpc3RlckZvcm1FbGVt
ZW50KEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKiBlKQogewotICAgIERvY3VtZW50SW1wbCAq
ZG9jID0gZ2V0RG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudEltcGwqIGRvYyA9IGdldERvY3VtZW50
KCk7CiAgICAgaWYgKGRvYyAmJiBlLT5pc1JhZGlvQnV0dG9uKCkgJiYgIWUtPm5hbWUoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGN1cnJlbnRDaGVj
a2VkUmFkaW8gPSBkb2MtPmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKGUtPm5hbWUoKS5pbXBs
KCksIChIVE1MRm9ybUVsZW1lbnRJbXBsKikgMCk7CisgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKiBjdXJyZW50Q2hlY2tlZFJhZGlvID0gZG9jLT5jaGVja2VkUmFkaW9CdXR0b25G
b3JHcm91cChlLT5uYW1lKCkuaW1wbCgpLCAwKTsKICAgICAgICAgaWYgKGN1cnJlbnRDaGVja2Vk
UmFkaW8gPT0gZSkKLSAgICAgICAgICAgIGRvYy0+cmVtb3ZlUmFkaW9CdXR0b25Hcm91cChlLT5u
YW1lKCkuaW1wbCgpLCAoSFRNTEZvcm1FbGVtZW50SW1wbCopIDApOworICAgICAgICAgICAgZG9j
LT5yZW1vdmVSYWRpb0J1dHRvbkdyb3VwKGUtPm5hbWUoKS5pbXBsKCksIDApOwogICAgICAgICBp
ZiAoZS0+aXNDaGVja2VkKCkpCi0gICAgICAgICAgICBkb2MtPnJhZGlvQnV0dG9uQ2hlY2tlZCgo
SFRNTElucHV0RWxlbWVudEltcGwqKSBlLCB0aGlzKTsKKyAgICAgICAgICAgIGRvYy0+cmFkaW9C
dXR0b25DaGVja2VkKHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZSksIHRoaXMp
OwogICAgIH0KLSAgICBpbnNlcnRJbnRvVmVjdG9yKGZvcm1FbGVtZW50cywgZm9ybUVsZW1lbnRJ
bmRleChlKSwgZSk7CisgICAgZm9ybUVsZW1lbnRzLmluc2VydChmb3JtRWxlbWVudEluZGV4KGUp
LCBlKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpyZW1vdmVGb3JtRWxlbWVudChI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqZSkKK3ZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6
cmVtb3ZlRm9ybUVsZW1lbnQoSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGUpCiB7CiAgICAg
aWYgKCFlLT5uYW1lKCkuaXNFbXB0eSgpICYmIGdldERvY3VtZW50KCkpIHsKICAgICAgICAgSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGN1cnJlbnRDaGVja2VkUmFkaW8gPSBnZXREb2N1bWVu
dCgpLT5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cChlLT5uYW1lKCkuaW1wbCgpLCB0aGlzKTsK
SW5kZXg6IGtodG1sL3hzbC94c2xfc3R5bGVzaGVldGltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGto
dG1sL3hzbC94c2xfc3R5bGVzaGVldGltcGwuY3BwCShyZXZpc2lvbiAxMjg4MSkKKysrIGtodG1s
L3hzbC94c2xfc3R5bGVzaGVldGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywzNCArNDMs
MzcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotWFNMU3R5bGVTaGVldEltcGw6OlhT
TFN0eWxlU2hlZXRJbXBsKFhTTEltcG9ydFJ1bGVJbXBsKiBwYXJlbnRSdWxlLCBET01TdHJpbmcg
aHJlZikKK1hTTFN0eWxlU2hlZXRJbXBsOjpYU0xTdHlsZVNoZWV0SW1wbChYU0xJbXBvcnRSdWxl
SW1wbCogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBocmVmKQogICAgIDogU3R5bGVTaGVldElt
cGwocGFyZW50UnVsZSwgaHJlZikKICAgICAsIG1fb3duZXJEb2N1bWVudCgwKQogICAgICwgbV9z
dHlsZXNoZWV0RG9jKDApCiAgICAgLCBtX2VtYmVkZGVkKGZhbHNlKQogICAgICwgbV9wcm9jZXNz
ZWQoZmFsc2UpIC8vIENoaWxkIHNoZWV0cyBnZXQgbWFya2VkIGFzIHByb2Nlc3NlZCB3aGVuIHRo
ZSBsaWJ4c2x0IGVuZ2luZSBoYXMgZmluYWxseSBzZWVuIHRoZW0uCisgICAgLCBtX3N0eWxlc2hl
ZXREb2NUYWtlbihmYWxzZSkKIHsKLSAgICBtX2xzdENoaWxkcmVuID0gbmV3IFFQdHJMaXN0PFN0
eWxlQmFzZUltcGw+OwogfQogCi1YU0xTdHlsZVNoZWV0SW1wbDo6WFNMU3R5bGVTaGVldEltcGwo
Tm9kZUltcGwqIHBhcmVudE5vZGUsIERPTVN0cmluZyBocmVmLCAgYm9vbCBlbWJlZGRlZCkKK1hT
TFN0eWxlU2hlZXRJbXBsOjpYU0xTdHlsZVNoZWV0SW1wbChOb2RlSW1wbCogcGFyZW50Tm9kZSwg
Y29uc3QgU3RyaW5nJiBocmVmLCAgYm9vbCBlbWJlZGRlZCkKICAgICA6IFN0eWxlU2hlZXRJbXBs
KHBhcmVudE5vZGUsIGhyZWYpCiAgICAgLCBtX293bmVyRG9jdW1lbnQocGFyZW50Tm9kZS0+Z2V0
RG9jdW1lbnQoKSkKICAgICAsIG1fc3R5bGVzaGVldERvYygwKQogICAgICwgbV9lbWJlZGRlZChl
bWJlZGRlZCkKICAgICAsIG1fcHJvY2Vzc2VkKHRydWUpIC8vIFRoZSByb290IHNoZWV0IHN0YXJ0
cyBvZmYgcHJvY2Vzc2VkLgorICAgICwgbV9zdHlsZXNoZWV0RG9jVGFrZW4oZmFsc2UpCiB7Ci0g
ICAgbV9sc3RDaGlsZHJlbiA9IG5ldyBRUHRyTGlzdDxTdHlsZUJhc2VJbXBsPjsKIH0KIAogWFNM
U3R5bGVTaGVldEltcGw6On5YU0xTdHlsZVNoZWV0SW1wbCgpCiB7Ci0gICAgeG1sRnJlZURvYyht
X3N0eWxlc2hlZXREb2MpOworICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCisgICAgICAg
IHhtbEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKIH0KIAogYm9vbCBYU0xTdHlsZVNoZWV0SW1w
bDo6aXNMb2FkaW5nKCkKIHsKLSAgICBmb3IgKFN0eWxlQmFzZUltcGwqIHJ1bGUgPSBtX2xzdENo
aWxkcmVuLT5maXJzdCgpOyBydWxlOyBydWxlID0gbV9sc3RDaGlsZHJlbi0+bmV4dCgpKSB7Cisg
ICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbjsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZUltcGwqIHJ1bGUgPSBpdGVtKGkpOwogICAg
ICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIFhTTEltcG9ydFJ1
bGVJbXBsKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlSW1wbCo+KHJ1bGUpOwog
ICAgICAgICAgICAgaWYgKGltcG9ydC0+aXNMb2FkaW5nKCkpCkBAIC05OSw4ICsxMDIsOSBAQAog
CiB2b2lkIFhTTFN0eWxlU2hlZXRJbXBsOjpjbGVhckRvY3VtZW50cygpCiB7Ci0gICAgbV9zdHls
ZXNoZWV0RG9jID0gMDsKLSAgICBmb3IgKFN0eWxlQmFzZUltcGwqIHJ1bGUgPSBtX2xzdENoaWxk
cmVuLT5maXJzdCgpOyBydWxlOyBydWxlID0gbV9sc3RDaGlsZHJlbi0+bmV4dCgpKSB7CisgICAg
dW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZUltcGwqIHJ1bGUgPSBpdGVtKGkpOwogICAgICAg
ICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIFhTTEltcG9ydFJ1bGVJ
bXBsKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlSW1wbCo+KHJ1bGUpOwogICAg
ICAgICAgICAgaWYgKGltcG9ydC0+c3R5bGVTaGVldCgpKQpAQCAtMTIyLDcgKzEyNiw5IEBACiAg
ICAgY29uc3QgUUNoYXIgQk9NKDB4RkVGRik7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01I
aWdoQnl0ZSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsK
ICAgICBzZXRMb2FkZXJGb3JMaWJYTUxDYWxsYmFja3MoZG9jTG9hZGVyKCkpOwotICAgIHhtbEZy
ZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKKyAgICBpZiAoIW1fc3R5bGVzaGVldERvY1Rha2VuKQor
ICAgICAgICB4bWxGcmVlRG9jKG1fc3R5bGVzaGVldERvYyk7CisgICAgbV9zdHlsZXNoZWV0RG9j
VGFrZW4gPSBmYWxzZTsKICAgICBtX3N0eWxlc2hlZXREb2MgPSB4bWxSZWFkTWVtb3J5KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihzdHJpbmcudW5pY29kZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihRQ2hhciks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX293bmVyRG9jdW1lbnQtPlVS
TCgpLmFzY2lpKCksCkBAIC0xODMsOCArMTg5LDggQEAKIAogdm9pZCBYU0xTdHlsZVNoZWV0SW1w
bDo6bG9hZENoaWxkU2hlZXQoY29uc3QgUVN0cmluZyYgaHJlZikKIHsKLSAgICBYU0xJbXBvcnRS
dWxlSW1wbCogY2hpbGRSdWxlID0gbmV3IFhTTEltcG9ydFJ1bGVJbXBsKHRoaXMsIGhyZWYpOwot
ICAgIG1fbHN0Q2hpbGRyZW4tPmFwcGVuZChjaGlsZFJ1bGUpOworICAgIFJlZlB0cjxYU0xJbXBv
cnRSdWxlSW1wbD4gY2hpbGRSdWxlID0gbmV3IFhTTEltcG9ydFJ1bGVJbXBsKHRoaXMsIGhyZWYp
OworICAgIGFwcGVuZChjaGlsZFJ1bGUpOwogICAgIGNoaWxkUnVsZS0+bG9hZFNoZWV0KCk7CiB9
CiAKQEAgLTE5OCwxNCArMjA0LDIyIEBACiAgICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgcmVw
b3J0aW5nIGZvciB0aGUgc3R5bGVzaGVldCBjb21waWxhdGlvbiBwcm9jZXNzLgogICAgIGlmICht
X2VtYmVkZGVkKQogICAgICAgICByZXR1cm4geHNsdExvYWRTdHlsZXNoZWV0UEkoZG9jdW1lbnQo
KSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4geHNsdFBhcnNlU3R5bGVzaGVldERvYyhkb2N1
bWVudCgpKTsKKyAgICAKKyAgICAvLyB4c2x0UGFyc2VTdHlsZXNoZWV0RG9jIG1ha2VzIHRoZSBk
b2N1bWVudCBwYXJ0IG9mIHRoZSBzdHlsZXNoZWV0CisgICAgLy8gc28gd2UgaGF2ZSB0byByZWxl
YXNlIG91ciBwb2ludGVyIHRvIGl0LgorICAgIEFTU0VSVCghbV9zdHlsZXNoZWV0RG9jVGFrZW4p
OworICAgIHhzbHRTdHlsZXNoZWV0UHRyIHJlc3VsdCA9IHhzbHRQYXJzZVN0eWxlc2hlZXREb2Mo
bV9zdHlsZXNoZWV0RG9jKTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBtX3N0eWxlc2hlZXRE
b2NUYWtlbiA9IHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogeG1sRG9jUHRyIFhTTFN0
eWxlU2hlZXRJbXBsOjpsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1sRG9jUHRyIHBhcmVu
dERvYywgY29uc3QgeG1sQ2hhciogdXJpKQogewogICAgIGJvb2wgbWF0Y2hlZFBhcmVudCA9IChw
YXJlbnREb2MgPT0gZG9jdW1lbnQoKSk7Ci0gICAgZm9yIChTdHlsZUJhc2VJbXBsKiBydWxlID0g
bV9sc3RDaGlsZHJlbi0+Zmlyc3QoKTsgcnVsZTsgcnVsZSA9IG1fbHN0Q2hpbGRyZW4tPm5leHQo
KSkgeworICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBTdHlsZUJhc2VJbXBsKiBydWxlID0gaXRlbShp
KTsKICAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7CiAgICAgICAgICAgICBYU0xJ
bXBvcnRSdWxlSW1wbCogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8WFNMSW1wb3J0UnVsZUltcGwqPihy
dWxlKTsKICAgICAgICAgICAgIFhTTFN0eWxlU2hlZXRJbXBsKiBjaGlsZCA9IGltcG9ydC0+c3R5
bGVTaGVldCgpOwpAQCAtMjI5LDggKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNoaWxk
LT5tYXJrQXNQcm9jZXNzZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT5k
b2N1bWVudCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB4bWxEb2NQdHIg
cmVzdWx0ID0gaW1wb3J0LT5zdHlsZVNoZWV0KCktPmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJj
ZShwYXJlbnREb2MsIHVyaSk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI0MSw2ICsyNTQsMTQgQEAKICAgICByZXR1
cm4gMDsKIH0KIAordm9pZCBYU0xTdHlsZVNoZWV0SW1wbDo6bWFya0FzUHJvY2Vzc2VkKCkKK3sK
KyAgICBBU1NFUlQoIW1fcHJvY2Vzc2VkKTsKKyAgICBBU1NFUlQoIW1fc3R5bGVzaGVldERvY1Rh
a2VuKTsKKyAgICBtX3Byb2Nlc3NlZCA9IHRydWU7CisgICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4g
PSB0cnVlOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IFhTTEltcG9ydFJ1bGVJbXBsOjpYU0xJbXBvcnRSdWxlSW1wbChTdHlsZUJhc2VJbXBsKiBwYXJl
bnQsIGNvbnN0IERPTVN0cmluZyAmaHJlZikKSW5kZXg6IGtodG1sL3hzbC94c2xfc3R5bGVzaGVl
dGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmgJKHJl
dmlzaW9uIDEyODgxKQorKysga2h0bWwveHNsL3hzbF9zdHlsZXNoZWV0aW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBY
U0wgaW1wbGVtZW50YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMTYgKzE5LDE1IEBACiAgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgX3hzbF9zdHlsZXNoZWV0aW1wbF9o
XwotI2RlZmluZSBfeHNsX3N0eWxlc2hlZXRpbXBsX2hfCiAKKyNpZm5kZWYgeHNsX3N0eWxlc2hl
ZXRpbXBsX2hfCisjZGVmaW5lIHhzbF9zdHlsZXNoZWV0aW1wbF9oXworCiAjaWZkZWYgS0hUTUxf
WFNMVAogCisjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCiAjaW5jbHVkZSAiY3NzL2Nz
c19zdHlsZXNoZWV0aW1wbC5oIgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KLSNpbmNsdWRl
IDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50
LmgiCi0KICNpbmNsdWRlIDxsaWJ4c2x0L3RyYW5zZm9ybS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOSwxNSArMzgsMTUgQEAKIGNsYXNzIFhTTFN0eWxlU2hlZXRJbXBsIDogcHVibGlj
IFN0eWxlU2hlZXRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgWFNMU3R5bGVTaGVldEltcGwoRE9NOjpO
b2RlSW1wbCAqcGFyZW50Tm9kZSwgRE9NOjpET01TdHJpbmcgaHJlZiA9IERPTVN0cmluZygpLCBi
b29sIGVtYmVkZGVkID0gZmFsc2UpOwotICAgIFhTTFN0eWxlU2hlZXRJbXBsKFhTTEltcG9ydFJ1
bGVJbXBsKiBwYXJlbnRJbXBvcnQsIERPTTo6RE9NU3RyaW5nIGhyZWYgPSBET01TdHJpbmcoKSk7
CisgICAgWFNMU3R5bGVTaGVldEltcGwoTm9kZUltcGwgKnBhcmVudE5vZGUsIGNvbnN0IFN0cmlu
ZyYgaHJlZiA9IFN0cmluZygpLCBib29sIGVtYmVkZGVkID0gZmFsc2UpOworICAgIFhTTFN0eWxl
U2hlZXRJbXBsKFhTTEltcG9ydFJ1bGVJbXBsKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYg
aHJlZiA9IFN0cmluZygpKTsKICAgICB+WFNMU3R5bGVTaGVldEltcGwoKTsKICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgdmlydHVhbCBET006OkRPTVN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQveG1s
IjsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC94bWwi
OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHJp
bmcsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7CisgICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNv
bnN0IFN0cmluZyAmc3RyaW5nLCBib29sIHN0cmljdCA9IHRydWUpOwogICAgIAogICAgIHZpcnR1
YWwgYm9vbCBpc0xvYWRpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKQEAg
LTU3LDcgKzU2LDcgQEAKIAogICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0
KCk7CiAKLSAgICBEb2NMb2FkZXIgKmRvY0xvYWRlcigpOworICAgIERvY0xvYWRlciogZG9jTG9h
ZGVyKCk7CiAKICAgICBEb2N1bWVudEltcGwqIG93bmVyRG9jdW1lbnQoKSB7IHJldHVybiBtX293
bmVyRG9jdW1lbnQ7IH0KICAgICB2b2lkIHNldE93bmVyRG9jdW1lbnQoRG9jdW1lbnRJbXBsKiBk
b2MpIHsgbV9vd25lckRvY3VtZW50ID0gZG9jOyB9CkBAIC02OCw3ICs2Nyw3IEBACiAKICAgICB4
bWxEb2NQdHIgbG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2Ms
IGNvbnN0IHhtbENoYXIqIHVyaSk7CiAgICAgCi0gICAgdm9pZCBtYXJrQXNQcm9jZXNzZWQoKSB7
IG1fcHJvY2Vzc2VkID0gdHJ1ZTsgfQorICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7CiAgICAg
Ym9vbCBwcm9jZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQogCiBwcm90ZWN0
ZWQ6CkBAIC03NiwyOCArNzUsMjkgQEAKICAgICB4bWxEb2NQdHIgbV9zdHlsZXNoZWV0RG9jOwog
ICAgIGJvb2wgbV9lbWJlZGRlZDsKICAgICBib29sIG1fcHJvY2Vzc2VkOworICAgIGJvb2wgbV9z
dHlsZXNoZWV0RG9jVGFrZW47CiB9OwogCiBjbGFzcyBYU0xJbXBvcnRSdWxlSW1wbCA6IHB1Ymxp
YyBDYWNoZWRPYmplY3RDbGllbnQsIHB1YmxpYyBTdHlsZUJhc2VJbXBsCiB7CiBwdWJsaWM6Ci0g
ICAgWFNMSW1wb3J0UnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3QgRE9NOjpE
T01TdHJpbmcgJmhyZWYpOworICAgIFhTTEltcG9ydFJ1bGVJbXBsKFN0eWxlQmFzZUltcGwqIHBh
cmVudCwgY29uc3QgU3RyaW5nJiBocmVmKTsKICAgICB2aXJ0dWFsIH5YU0xJbXBvcnRSdWxlSW1w
bCgpOwogICAgIAotICAgIERPTTo6RE9NU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX3N0
ckhyZWY7IH0KKyAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fc3RySHJlZjsgfQog
ICAgIFhTTFN0eWxlU2hlZXRJbXBsKiBzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZVNoZWV0LmdldCgpOyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzSW1wb3J0UnVsZSgpIHsg
cmV0dXJuIHRydWU7IH0KICAgICBYU0xTdHlsZVNoZWV0SW1wbCogcGFyZW50U3R5bGVTaGVldCgp
IGNvbnN0OwogICAgIAogICAgIC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xpZW50Ci0gICAgdmlydHVh
bCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgY29uc3QgRE9N
OjpET01TdHJpbmcgJnNoZWV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nICZzaGVldCk7CiAgICAgCiAgICAgYm9vbCBpc0xv
YWRpbmcoKTsKICAgICB2b2lkIGxvYWRTaGVldCgpOwogICAgIAogcHJvdGVjdGVkOgotICAgIERP
TVN0cmluZyBtX3N0ckhyZWY7CisgICAgU3RyaW5nIG1fc3RySHJlZjsKICAgICBSZWZQdHI8WFNM
U3R5bGVTaGVldEltcGw+IG1fc3R5bGVTaGVldDsKICAgICBDYWNoZWRYU0xTdHlsZVNoZWV0KiBt
X2NhY2hlZFNoZWV0OwogICAgIGJvb2wgbV9sb2FkaW5nOwpJbmRleDogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTI4ODEpCisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCQk5MzMwOUVBMjA5
OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlFOUYwOTlFQjc4QzAwNTZFNTgxIC8qIFNo
YXJlZFRpbWVyTWFjLmNwcCAqLzsgfTsKIAkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNo
YXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzMwOUVBMDA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCAqLzsgfTsKIAkJOTMz
MDlFQTQwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RUExMDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1l
ci5jcHAgKi87IH07CisJCTkzNkI0MjRFMDlBNDM2Q0QwMEJBQTgyMCAvKiBLU1ZHQ1NTUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBG
NkY2MDg5NzAxRjEwMEJBNTExNCAvKiBLU1ZHQ1NTUGFyc2VyLmNwcCAqLzsgfTsKIAkJOTM3QTM2
QTcwOTdFMkUzMjAwRTRFRTJGIC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzN0EzNkE2MDk3RTJFMzIwMEU0
RUUyRiAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5jcHAgKi87IH07CiAJCTkzN0Q4MDlBMDlBMDYz
MzMwMDkyQTAxRSAvKiBQYWdlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzdEODA5OTA5QTA2MzMzMDA5MkEwMUUgLyogUGFnZU1hYy5oICovOyB9
OwogCQk5MzgwRjQ3MzA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODBGNDcxMDlBMTFBQjQwMDFGREIz
NCAvKiBXaWRnZXQuY3BwICovOyB9OwpAQCAtNTUyNSw2ICs1NTI2LDcgQEAKIAkJCQk2NTUwQjZB
NTA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM4
MEY0NzMwOUExMUFCNDAwMUZEQjM0IC8qIFdpZGdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzgwRjQ3ODA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJOTM2QjQyNEUwOUE0MzZDRDAwQkFBODIwIC8qIEtTVkdDU1NQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTM4MEY2ODcwOUExNDNCMjAwMUZEQjM0IC8qIEZyYW1lVmlld01hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUJDQzQ3RTIzMDlBM0Q2QjMwMEFEQjc3MSAvKiBGb250RmFtaWx5
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDNDdFMjYwOUEzRDZGMTAwQURCNzcxIC8qIEZv
bnRGYW1pbHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjg4NSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE2MyBAQAorMjAwNi0wMi0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBmaXggaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMx
CisgICAgICAgICAgQ1NTIHBhcnNlciBsZWFrcyB3aGVuIHBhcnNpbmcgaW5jb3JyZWN0IENTUwor
CisgICAgICAgICogY3NzL2Nzc19iYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6YXBwZW5kKTogUmVwbGFjZWQgcmVjdXJzaXZlIGltcGxlbWVudGF0aW9uCisgICAgICAgIHdp
dGggYW4gaXRlcmF0aXZlIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQmFzZUltcGw6OlN0
eWxlQmFzZUltcGwpOiBDaGFuZ2VkIHRvIGJlIGEgU2hhcmVkLCBub3QKKyAgICAgICAgYSBUcmVl
U2hhcmVkOyBwYXJlbnRzIG5vdyByZWYgY2hpbGRyZW4gYXMgbmVlZGVkLiBUaGlzIGNoYW5nZSB3
YXMKKyAgICAgICAgdml0YWwgdG8gZml4IHRoZSBzdG9yYWdlIGxlYWtzLiBBbHNvIHJlbW92ZWQg
dW51c2VkIG11bHRpTGVuZ3RoIGJvb2wuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJhc2VJbXBs
OjpwYXJlbnQpOiBBZGRlZC4gTmVlZGVkIG5vdyB0aGF0IHRoZXJlJ3Mgbm8KKyAgICAgICAgVHJl
ZVNoYXJlZCBiYXNlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCYXNlSW1wbDo6c2V0
UGFyZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJhc2VJbXBsOjppbnNlcnRl
ZEludG9QYXJlbnQpOiBBZGRlZC4gSG9vayBmb3IKKyAgICAgICAgbm90aWZpY2F0aW9uIHdoZW4g
YWRkZWQgdG8gYSBwYXJlbnQgLS0gdXNlZCBieSBpbXBvcnQgc3R5bGUgcnVsZXMuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUxpc3RJbXBsOjpTdHlsZUxpc3RJbXBsKTogQ2hhbmdlZCB0byB1c2Ug
YSBWZWN0b3IgaW5zdGVhZAorICAgICAgICBvZiBhIFFQdHJMaXN0IGZvciBjaGlsZHJlbi4gU2xv
d2VyIGZvciBkeW5hbWljIGluc2VydCBhbmQgcmVtb3ZlIGZvciB0aGUKKyAgICAgICAgRE9NIEFQ
SSwgZmFzdGVyIGFuZCBtb3JlIGVmZmljaWVudCBmb3IgZXZlcnl0aGluZyBlbHNlLgorICAgICAg
ICAqIGNzcy9jc3NfYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUxpc3RJbXBsOjph
cHBlbmQpOiBOb3cgY2FsbHMgaW5zZXJ0ZWRJbnRvUGFyZW50CisgICAgICAgIGFuZCB1c2VzIFZl
Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlTGlzdEltcGw6Omluc2VydCk6IEFkZGVkLiBD
YWxscyBpbnNlcnRlZEludG9QYXJlbnQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUxpc3RJbXBs
OjpyZW1vdmUpOiBBZGRlZC4gCisKKyAgICAgICAgKiBjc3MvY3NzX2dyYW1tYXIueTogUmVtb3Zl
ZCBvYnNvbGV0ZSAiZG9uJ3QgaW5saW5lIiBzdHVmZi4gQ2hhbmdlZCBhbGwKKyAgICAgICAgY29k
ZSB0aGF0IGNyZWF0ZXMgbmV3IG9iamVjdHMgdG8gdXNlIG5ldyBmdW5jdGlvbnMgb24gQ1NTUGFy
c2VyLiBGb3IKKyAgICAgICAgQ1NTU2VsZWN0b3IsIFZhbHVlTGlzdCwgRnVuY3Rpb24sIGFuZCBW
YWx1ZSwgdGhpcyBtZWFucyB1c2luZyBuZXcKKyAgICAgICAgZnVuY3Rpb25zIHdpdGggYSAiZmxv
YXRpbmciIGNvbmNlcHQsIGJ1dCBmb3IgcmVmZXJlbmNlLWNvdW50ZWQgY2xhc3NlcworICAgICAg
ICB0aGlzIGp1c3QgbWVhbnMgYXNraW5nIHRoZSBDU1NQYXJzZXIgdG8gY3JlYXRlIHRoZSBvYmpl
Y3QgaW5zdGVhZCBvZgorICAgICAgICBjYWxsaW5nIG5ldy4gUmVtb3ZlIGFsbCBleHBsaWNpdCAi
ZGVsZXRlIiwgd2hpY2ggaXMgbm93IGhhbmRsZWQgYnkgdGhlCisgICAgICAgIHBhcnNlciBpbnN0
ZWFkLCB3aGljaCB3b3JrcyB3aGVuIHRoZSBCaXNvbi1nZW5lcmF0ZWQgcGFyc2VyIGZhaWxzIHRv
bywKKyAgICAgICAgbm90IGp1c3Qgd2hlbiBpdCBoaXRzIGVycm9yIHJ1bGVzIGluIHRoZSBncmFt
bWFyLgorCisgICAgICAgICogY3NzL2Nzc19ydWxlaW1wbC5oOgorICAgICAgICAqIGNzcy9jc3Nf
cnVsZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVsZUltcGw6OkNTU0lt
cG9ydFJ1bGVJbXBsKTogUmVtb3ZlIGNhbGwgdG8gaW5pdCgpCisgICAgICAgIHdoaWNoIGtpY2tz
IG9mZiBzdHlsZSBzaGVldCBsb2FkaW5nLiBXZSBub3cgZG8gdGhhdCB3aGVuIHdlIGFyZSBhZGRl
ZCB0bworICAgICAgICBvdXIgcGFyZW50IGluc3RlYWQgb2YgY29uc3RydWN0aW9uIHRpbWUuIEFs
c28gcmVtb3ZlZCB1bnVzZWQgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBv
cnRSdWxlSW1wbDo6aW5zZXJ0ZWRJbnRvUGFyZW50KTogUmVwbGFjZWQgaW5pdCgpIHdpdGggdGhp
cworICAgICAgICBmdW5jdGlvbiB0aGF0IGRvZXMgbXVjaCB0aGUgc2FtZSB0aGluZyBhdCBhIGRp
ZmZlcmVudCB0aW1lLiBDaGFuZ2VkIGNvZGUKKyAgICAgICAgdGhhdCBzZXRzIG1fbG9hZGluZyB0
byBkbyBpdCBpbiBhIHNpbXBsZSB3YXkgdGhhdCBkb2Vzbid0IG5lZWQgYSBiaWcgY29tbWVudC4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZUltcGw6Omluc2VydFJ1bGUpOiBVc2UgUmVm
UHRyLgorCisgICAgICAgICogY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHA6CisgICAgICAgIChT
dHlsZVNoZWV0SW1wbDo6U3R5bGVTaGVldEltcGwpOiBQYXNzIDAgZm9yIHBhcmVudCBleHBsaWNp
dGx5IHNpbmNlIHRoZQorICAgICAgICBlbXB0eSBjb25zdHJ1Y3RvciB3YXMgcmVtb3ZlZCBpbiB0
aGUgb3RoZXIgcGF0Y2guCisgICAgICAgIChDU1NTdHlsZVNoZWV0SW1wbDo6Q1NTU3R5bGVTaGVl
dEltcGwpOiBSZW1vdmUgY29kZSB0byBzZXQgdXAgbV9sc3RDaGlsZHJlbjsKKyAgICAgICAgdGhh
dCdzIG5vdyBoYW5kbGVkIGJ5IHRoZSBiYXNlIGNsYXNzLgorICAgICAgICAoQ1NTU3R5bGVTaGVl
dEltcGw6Omluc2VydFJ1bGUpOiBVc2UgbGVuZ3RoKCkgaW5zdGVhZCBvZiBtX2xpc3RDaGlsZHJl
bi0+Y291bnQoKQorICAgICAgICBhbmQgaW5zZXJ0IGluc3RlYWQgb2YgbV9sc3RDaGlsZHJlbi0+
aW5zZXJ0LiBBbHNvIHVzZSBSZWZQdHIgZm9yIHRoZSByZXN1bHQgb2YKKyAgICAgICAgcGFyc2VS
dWxlLgorICAgICAgICAoQ1NTU3R5bGVTaGVldEltcGw6OmFkZFJ1bGUpOiBVc2UgbGVuZ3RoKCkg
aW5zdGVhZCBvZiBtX2xzdENoaWxkcmVuLT5jb3VudCgpLgorICAgICAgICAoQ1NTU3R5bGVTaGVl
dEltcGw6OmRlbGV0ZVJ1bGUpOiBVc2UgbGVuZ3RoKCkgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUg
cmVzdWx0IG9mCisgICAgICAgIHRha2UoKSBmb3IgMC4gVXNlIHJlbW92ZSgpIGluc3RlYWQgb2Yg
bV9sc3RDaGlsZHJlbi0+dGFrZSgpLgorICAgICAgICAoQ1NTU3R5bGVTaGVldEltcGw6OnBhcnNl
U3RyaW5nKTogVXNlIHNldFN0cmljdFBhcnNpbmcgaW5zdGVhZCBvZiBnb2luZyBhdCB0aGUKKyAg
ICAgICAgc3RyaWN0UGFyc2luZyBkYXRhIG1lbWJlciBkaXJlY3RseS4KKyAgICAgICAgKENTU1N0
eWxlU2hlZXRJbXBsOjppc0xvYWRpbmcpOiBVc2UgbGVuZ3RoKCkgYW5kIGl0ZW0oKSBpbnN0ZWFk
IG9mCisgICAgICAgIG1fbHN0Q2hpbGRyZW4tPmZpcnN0KCkgYW5kIG1fbHN0Q2hpbGRyZW4tPm5l
eHQoKS4KKworICAgICAgICAqIGNzcy9jc3NfdmFsdWVpbXBsLmg6IEFkZCBhbiBpbmNsdWRlIG9m
IFFQdHJMaXN0IG5vdyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4KKyAgICAgICAgYW55IGluY2x1ZGVk
IGZpbGUuIEFsc28gYWRkZWQgYSBjb25zdHJ1Y3RvciBmb3IgQ1NTVmFsdWVJbXBsLCBub3cgdGhh
dCBTdHlsZUJhc2VJbXBsCisgICAgICAgIGhhcyBubyBlbXB0eSBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKiBjc3MvY3NzX3ZhbHVlaW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGw6OnNldFByb3BlcnR5KTogVXNlIHVzZVN0cmljdFBhcnNpbmco
KQorICAgICAgICBpbnN0ZWFkIG9mIGxvb2tpbmcgYXQgdGhlIHN0cmljdFBhcnNpbmcgZGF0YSBt
ZW1iZXIgZGlyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkltcGw6OnBhcnNlRGVjbGFyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDo6c2V0TGVuZ3RoUHJvcGVydHkpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDo6c2V0Q3Nz
VGV4dCk6IERpdHRvLgorCisgICAgICAgICogY3NzL2Nzc3BhcnNlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6VmFsdWVMaXN0KTogQ2hhbmdlZCB0byB1c2UgYSBWZWN0b3IgYW5kIGFuIGluZGV4IHJh
dGhlcgorICAgICAgICB0aGFuIHVzaW5nIGEgUVB0ckxpc3QuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXIpOiBDaGFuZ2VkIHBhcnNlUnVsZSB0byByZXR1cm4gYSBQYXNzUmVmUHRyLCByZW1v
dmVkIHRoZQorICAgICAgICBjcmVhdGVTdHlsZURlY2xhcmF0aW9uIGZ1bmN0aW9uIHNpbmNlIHRo
YXQncyBub3cgaGFuZGxlZCBieSBjcmVhdGVTdHlsZVJ1bGUsCisgICAgICAgIG1hZGUgY2xlYXJQ
cm9wZXJ0aWVzIGJlIHByaXZhdGUsIGFuZCBhZGRlZCBhIHN1aXRlIG9mIGZ1bmN0aW9ucyB0byBj
cmVhdGUgdGhlCisgICAgICAgIG9iamVjdHMgZm9ybWVybHkgbWFkZSB3aXRoICJuZXciIGluIHRo
ZSBCaXNvbiBncmFtbWFyLiBBbHNvIHB1dCB0aGUgVW5pdHMgZW51bQorICAgICAgICBoZXJlIGlu
IHRoZSBoZWFkZXIsIGFuZCBhZGRlZCBhbiBvcGVyYXRvciBzbyB0aGV5IGNhbiBiZSBvcidlZCB0
b2dldGhlciB3aGlsZQorICAgICAgICBzdGF5aW5nIHdpdGggdGhlIGVudW0gdHlwZSBzbyB3ZSBj
YW4gdXNlIFVuaXRzIGluc3RlYWQgb2YgaW50IGZvciBhIGZ1bmN0aW9uIGFyZy4KKyAgICAgICAg
KiBjc3MvY3NzcGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZhbHVlTGlzdDo6flZhbHVl
TGlzdCk6IENoYW5nZWQgdG8gdXNlIFZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Q1NTUGFyc2VyKTogUmVtb3ZlZCBpbml0aWFsaXplciBmb3IgcnVsZSBub3cgdGhhdCBpdCdz
IGEgUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjp+Q1NTUGFyc2VyKTogQWRk
ZWQgY29kZSB0byBkZWxldGUgYWxsIHRoZSBpdGVtcyBpbiB0aGUgc2V0cyB0aGF0CisgICAgICAg
IHRyYWNrIGZsb2F0aW5nIG9iamVjdHMuIEFsc28gcmVtb3ZlZCBhbiB1bm5lZWRlZCBjaGVjayBi
ZWZvcmUgY2FsbGxpbmcgY2xlYXJQcm9wZXJ0aWVzLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVNoZWV0KTogUmVtb3ZlZCAiZGVsZXRlIHJ1bGUiIHNpbmNlIHJ1bGUgaXMgbm93
IGEgUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVJ1bGUpOiBDaGFu
Z2VkIGNvZGUgdG8gdXNlIHJ1bGUucmVsZWFzZSgpIHNpbmNlIHJ1bGUgaXMgbm93CisgICAgICAg
IGEgUmVmUHRyIGFuZCB0aGlzIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgUGFzc1JlZlB0ci4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6IFJlbW92ZWQgImRlbGV0ZSBy
dWxlIiBzaW5jZSBydWxlIGlzIG5vdyBhIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VDb2xvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZURlY2xhcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnZh
bGlkVW5pdCk6IE1hZGUgdGhpcyBhIHN0YXRpYyBjbGFzcyBtZW1iZXIgaW5zdGVhZCBvZiBhIGxv
Y2FsCisgICAgICAgIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBTVkcgcGFyc2Vy
IGNvZGUuIEFsc28gdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBWYWx1ZUxpc3QKKyAgICAgICAgY2xh
c3MgdGhhdCB1c2VzIFZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2U0
VmFsdWVzKTogVXBkYXRlZCB0byBuZXcgVmFsdWVMaXN0LgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUNvbnRlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNraXBDb21t
YUluRGFzaGJvYXJkUmVnaW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVNoYXBlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlQ29sb3JGcm9tVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckltYWdl
UGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVjdG9yKTogQWRkZWQuIFB1dHMgc2VsZWN0
b3IgaW50byBmbG9hdGluZyBzZXQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnNpbmtG
bG9hdGluZ1NlbGVjdG9yKTogQWRkZWQuIFJlbW92ZXMgZnJvbSBmbG9hdGluZyBzZXQuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nVmFsdWVMaXN0KTogQWRkZWQu
IFB1dHMgbGlzdCBpbnRvIGZsb2F0aW5nIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6c2lua0Zsb2F0aW5nVmFsdWVMaXN0KTogQWRkZWQuIFJlbW92ZXMgZnJvbSBmbG9hdGluZyBz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nRnVuY3Rpb24p
OiBBZGRlZC4gUHV0cyBmdW5jdGlvbiBpbnRvIGZsb2F0aW5nIHNldC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6c2lua0Zsb2F0aW5nRnVuY3Rpb24pOiBBZGRlZC4gUmVtb3ZlcyBmcm9t
IGZsb2F0aW5nIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2lua0Zsb2F0aW5n
VmFsdWUpOiBBZGRlZC4gUmVtb3ZlcyBmdW5jdGlvbiBmcm9tIGZsb2F0aW5nIHNldCBpZgorICAg
ICAgICB2YWx1ZSBjb250YWlucyBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhTGlzdCk6IEFkZGVkLiBQdXRzIGxpc3QgaW4gYSB2ZWN0
b3Igb2YgUmVmUHRycyBrZXB0CisgICAgICAgIGJ5IHRoZSBwYXJzZXIsIHNvIHRoZSBvYmplY3Qg
d29uJ3QgZW5kIHVwIGZsb2F0aW5nLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVh
dGVJbXBvcnRSdWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0
ZU1lZGlhUnVsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVS
dWxlTGlzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVTdHls
ZVJ1bGUpOiBEaXR0by4gVGhlIHByb3BlcnRpZXMgY29tZSBmcm9tIHRoZSBwYXJzZXIncworICAg
ICAgICBnbG9iYWwgc3RhdGUgaW5zdGVhZCBvZiBmcm9tIGEgcGFyYW1ldGVyLgorCisgICAgICAg
ICoga2h0bWwveHNsL3hzbF9zdHlsZXNoZWV0aW1wbC5oOgorICAgICAgICAqIGtodG1sL3hzbC94
c2xfc3R5bGVzaGVldGltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldElt
cGw6OlhTTFN0eWxlU2hlZXRJbXBsKTogSW5pdGlhbGl6ZSB0aGUgbmV3IG1fc3R5bGVzaGVldERv
Y1Rha2VuCisgICAgICAgIGJvb2wgdG8gZmFsc2UuIEFsc28gcmVtb3ZlIGNvZGUgdG8gc2V0IHVw
IG1fbHN0Q2hpbGRyZW4gc2luY2UgdGhlIGJhc2UgY2xhc3MgdGFrZXMgY2FyZQorICAgICAgICBv
ZiB0aGF0IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXRJbXBsOjp+WFNMU3R5
bGVTaGVldEltcGwpOiBPbmx5IGNhbGwgeG1sRnJlZURvYyBpZiB0aGUgZG9jdW1lbnQKKyAgICAg
ICAgd2FzIG5vdCB0YWtlbiBieSBsaWJ4c2x0LiBXZSB1c2VkIHRvIGxlYWsgWFNMU3R5bGVTaGVl
dEltcGwgb2JqZWN0cywgd2hpY2ggaXMgd2h5IHdlCisgICAgICAgIGRpZG4ndCBub3RpY2UgdGhp
cyBiZWZvcmU7IHdlJ2xsIHRyeSB0byBkb3VibGUgZnJlZSB3aXRob3V0IHRoaXMgY2hhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldEltcGw6OmlzTG9hZGluZyk6IFVzZSBsZW5n
dGgoKSBhbmQgaXRlbSgpIGluc3RlYWQgb2YKKyAgICAgICAgbV9sc3RDaGlsZHJlbi0+Zmlyc3Qo
KSBhbmQgbV9sc3RDaGlsZHJlbi0+bmV4dCgpLgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVT
aGVldEltcGw6OmNsZWFyRG9jdW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYU0xT
dHlsZVNoZWV0SW1wbDo6cGFyc2VTdHJpbmcpOiBPbmx5IGNhbGwgeG1sRnJlZURvYyBpZiB0aGUg
ZG9jdW1lbnQgd2FzIG5vdAorICAgICAgICB0YWtlbiBieSBsaWJ4c2x0LiBBbHNvIHNldCBtX3N0
eWxlc2hlZXREb2NUYWtlbiBmb3IgdGhlIG5ldyBkb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6
OlhTTFN0eWxlU2hlZXRJbXBsOjpsb2FkQ2hpbGRTaGVldCk6IFVzZSBSZWZQdHIgYW5kIGFwcGVu
ZCBpbnN0ZWFkIG9mCisgICAgICAgIG1fbHN0Q2hpbGRyZW4tPmFwcGVuZC4KKyAgICAgICAgKFdl
YkNvcmU6OlhTTFN0eWxlU2hlZXRJbXBsOjpjb21waWxlU3R5bGVTaGVldCk6IFNldCBtX3N0eWxl
c2hlZXREb2NUYWtlbiB0byB0cnVlIGlmCisgICAgICAgIHhzbHRQYXJzZVN0eWxlc2hlZXREb2Mg
aXMgc3VjY2Vzc2Z1bCwgc2luY2UgdGhlIHN0eWxlc2hlZXQgdGhlbiBvd25zIHRoZSBkb2N1bWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXRJbXBsOjpsb2NhdGVTdHlsZXNoZWV0
U3ViUmVzb3VyY2UpOiBVc2UgbGVuZ3RoKCkgYW5kIGl0ZW0oKQorICAgICAgICBpbnN0ZWFkIG9m
IG1fbHN0Q2hpbGRyZW4tPmZpcnN0KCkgYW5kIG1fbHN0Q2hpbGRyZW4tPm5leHQoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXRJbXBsOjptYXJrQXNQcm9jZXNzZWQpOiBTZXQgbV9z
dHlsZXNoZWV0RG9jVGFrZW4sIHNpbmNlIHdoZW4KKyAgICAgICAgdGhpcyBpcyBjYWxsZWQsIHRo
ZSBkb2N1bWVudCBpcyByZXR1cm5lZCB0byBsaWJ4c2x0IHdoaWNoIHRoZW4gYXR0YWNoZXMgaXQg
dG8gYQorICAgICAgICBzdHlsZXNoZWV0IG9yIHBhcmVudCBkb2N1bWVudC4KKworICAgICAgICAq
IGtzdmcyL2Nzcy9LU1ZHQ1NTUGFyc2VyLmNwcDogQ2hhbmdlZCB0byBjb21waWxlIGFzIHNlcGFy
YXRlCisgICAgICAgIGZpbGUgaW5zdGVhZCBvZiBiZWluZyBpbmNsdWRlZCBpbiBjc3NwYXJzZXIu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNWR1BhaW50KTogVGFrZSBv
dXQgdW5ubmVjZXNzYXJ5IGNoZWNrCisgICAgICAgIG9mIG51bWJlciBvZiBhcmdzLiBFdmVyeXRo
aW5nIHdvcmtzIGZpbmUgd2l0aG91dCB0aGF0IGNoZWNrLCBhbmQKKyAgICAgICAgb3RoZXJ3aXNl
IEknZCBoYXZlIHRvIGNoYW5nZSBpdCBmb3IgdGhlIGNoYW5nZSBpbiBkYXRhIHN0cnVjdHVyZS4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdDb2xvcik6IERpdHRvLgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgS1NWR0NTU1Bh
cnNlci5jcHAuCisKKyAgICAgICAgLSBmaXhlZCBhbm90aGVyIGxlYWsgZm91bmQgYnkgcnVuLXdl
YmtpdC1sZWFrcyAtLWxlYWtzCisKKyAgICAgICAgKiBrd3EvS1dRTG9hZGVyLm1tOiAoS1dRU2Vy
dmVSZXF1ZXN0KTogRGVsZXRlIHRoZSBqb2IgaWYgd2UgY2FuJ3QgZG8gdGhlIEkvTywgYmVjYXVz
ZQorICAgICAgICB0aGUgY2FsbGVyIGlzIHBhc3Npbmcgb3duZXJzaGlwIHRvIHVzLgorCisgICAg
ICAgIC0gdXBkYXRlZCBvdGhlciBjb2RlIHRvIHVzZSBuZXcgVmVjdG9yIGluc2VydCBhbmQgcmVt
b3ZlCisKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxGb3JtRWxlbWVudEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6cmVtb3ZlRnJvbVZlY3Rvcik6IENoYW5nZWQgdG8gdXNlIFZlY3Rvcidz
IHJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudEltcGw6OnJlZ2lzdGVy
Rm9ybUVsZW1lbnQpOiBDaGFuZ2VkIHRvIHVzZSBWZWN0b3IncyBpbnNlcnQuCisKIDIwMDYtMDIt
MTggIERhdmlkIEhhcnJpc29uICA8aGFycmlzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEpvaG4uCkluZGV4OiBjc3MvY3NzX3J1bGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBj
c3MvY3NzX3J1bGVpbXBsLmNwcAkocmV2aXNpb24gMTI4ODEpCisrKyBjc3MvY3NzX3J1bGVpbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNDMgKzY4LDI4IEBACiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLUNTU0ltcG9ydFJ1bGVJbXBsOjpDU1NJbXBvcnRSdWxlSW1wbCggU3R5bGVCYXNl
SW1wbCAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBET01TdHJpbmcgJmhyZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lZGlhTGlzdEltcGwgKm1lZGlhICkKK0NTU0ltcG9ydFJ1bGVJbXBsOjpDU1NJbXBvcnRSdWxl
SW1wbChTdHlsZUJhc2VJbXBsKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgTWVkaWFMaXN0
SW1wbCogbWVkaWEpCiAgICAgOiBDU1NSdWxlSW1wbChwYXJlbnQpCisgICAgLCBtX3N0ckhyZWYo
aHJlZikKKyAgICAsIG1fbHN0TWVkaWEobWVkaWEpCisgICAgLCBtX2NhY2hlZFNoZWV0KDApCisg
ICAgLCBtX2xvYWRpbmcoZmFsc2UpCiB7CiAgICAgbV90eXBlID0gQ1NTUnVsZTo6SU1QT1JUX1JV
TEU7CiAKLSAgICBtX2xzdE1lZGlhID0gbWVkaWE7Ci0gICAgaWYgKCFtX2xzdE1lZGlhKQorICAg
IGlmIChtX2xzdE1lZGlhKQorICAgICAgICBtX2xzdE1lZGlhLT5zZXRQYXJlbnQodGhpcyk7Cisg
ICAgZWxzZQogICAgICAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlzdEltcGwodGhpcywgRE9N
U3RyaW5nKCkpOwotICAgIG1fbHN0TWVkaWEtPnNldFBhcmVudCh0aGlzKTsKLQotICAgIG1fc3Ry
SHJlZiA9IGhyZWY7Ci0gICAgbV9jYWNoZWRTaGVldCA9IDA7Ci0KLSAgICBpbml0KCk7CiB9Ci1D
U1NJbXBvcnRSdWxlSW1wbDo6Q1NTSW1wb3J0UnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5n
ICZocmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET01T
dHJpbmcgJm1lZGlhICkKLSAgICA6IENTU1J1bGVJbXBsKHBhcmVudCkKLXsKLSAgICBtX3R5cGUg
PSBDU1NSdWxlOjpJTVBPUlRfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlzdElt
cGwodGhpcywgbWVkaWEpOwotICAgIG1fc3RySHJlZiA9IGhyZWY7Ci0gICAgbV9jYWNoZWRTaGVl
dCA9IDA7CiAKLSAgICBpbml0KCk7Ci19Ci0KIENTU0ltcG9ydFJ1bGVJbXBsOjp+Q1NTSW1wb3J0
UnVsZUltcGwoKQogewotICAgIGlmKG1fbHN0TWVkaWEpCi0gICAgICAgIG1fbHN0TWVkaWEtPnNl
dFBhcmVudCggMCApOwotICAgIGlmKG1fc3R5bGVTaGVldCkKKyAgICBpZiAobV9sc3RNZWRpYSkK
KyAgICAgICAgbV9sc3RNZWRpYS0+c2V0UGFyZW50KDApOworICAgIGlmIChtX3N0eWxlU2hlZXQp
CiAgICAgICAgIG1fc3R5bGVTaGVldC0+c2V0UGFyZW50KDApOwotICAgIGlmKG1fY2FjaGVkU2hl
ZXQpCisgICAgaWYgKG1fY2FjaGVkU2hlZXQpCiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmRlcmVm
KHRoaXMpOwogfQogCkBAIC0xMTUsNTUgKzEwMCw0NiBAQAogICAgIG1fc3R5bGVTaGVldCA9IG5l
dyBDU1NTdHlsZVNoZWV0SW1wbCh0aGlzLCB1cmwpOwogCiAgICAgQ1NTU3R5bGVTaGVldEltcGwg
KnBhcmVudCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICBtX3N0eWxlU2hlZXQtPnBhcnNlU3Ry
aW5nKCBzaGVldCwgcGFyZW50ID8gcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkgOiB0cnVlICk7
CisgICAgbV9zdHlsZVNoZWV0LT5wYXJzZVN0cmluZyhzaGVldCwgIXBhcmVudCB8fCBwYXJlbnQt
PnVzZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiAKICAgICBjaGVj
a0xvYWRlZCgpOwogfQogCi1ib29sIENTU0ltcG9ydFJ1bGVJbXBsOjppc0xvYWRpbmcoKQorYm9v
bCBDU1NJbXBvcnRSdWxlSW1wbDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKCBt
X2xvYWRpbmcgfHwgKG1fc3R5bGVTaGVldCAmJiBtX3N0eWxlU2hlZXQtPmlzTG9hZGluZygpKSAp
OworICAgIHJldHVybiBtX2xvYWRpbmcgfHwgKG1fc3R5bGVTaGVldCAmJiBtX3N0eWxlU2hlZXQt
PmlzTG9hZGluZygpKTsKIH0KIAotdm9pZCBDU1NJbXBvcnRSdWxlSW1wbDo6aW5pdCgpCit2b2lk
IENTU0ltcG9ydFJ1bGVJbXBsOjppbnNlcnRlZEludG9QYXJlbnQoKQogewotICAgIGtodG1sOjpE
b2NMb2FkZXIgKmRvY0xvYWRlciA9IDA7Ci0gICAgU3R5bGVCYXNlSW1wbCAqcm9vdCA9IHRoaXM7
Ci0gICAgU3R5bGVCYXNlSW1wbCAqcGFyZW50OwotICAgIHdoaWxlICggKCBwYXJlbnQgPSByb290
LT5wYXJlbnQoKSkgKQorICAgIFN0eWxlQmFzZUltcGwqIHJvb3QgPSB0aGlzOworICAgIFN0eWxl
QmFzZUltcGwqIHBhcmVudDsKKyAgICB3aGlsZSAoKHBhcmVudCA9IHJvb3QtPnBhcmVudCgpKSkK
ICAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNDU1NTdHlsZVNoZWV0KCkp
Ci0gICAgICAgIGRvY0xvYWRlciA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocm9v
dCktPmRvY0xvYWRlcigpOworICAgIGlmICghcm9vdC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXRJbXBsKj4ocm9vdCktPmRvY0xvYWRlcigpOworICAgIGlmICghZG9jTG9hZGVyKQor
ICAgICAgICByZXR1cm47CiAKICAgICBET01TdHJpbmcgYWJzSHJlZiA9IG1fc3RySHJlZjsKLSAg
ICBDU1NTdHlsZVNoZWV0SW1wbCAqcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0g
ICAgaWYgKCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKSB7Ci0gICAgICAvLyB1c2UgcGFy
ZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgIGFic0hyZWYgPSBLVVJM
KHBhcmVudFNoZWV0LT5ocmVmKCkucXN0cmluZygpLG1fc3RySHJlZi5xc3RyaW5nKCkpLnVybCgp
OwotICAgIH0KKyAgICBDU1NTdHlsZVNoZWV0SW1wbCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHls
ZVNoZWV0KCk7CisgICAgaWYgKCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKQorICAgICAg
ICAvLyB1c2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKKyAgICAgICAg
YWJzSHJlZiA9IEtVUkwocGFyZW50U2hlZXQtPmhyZWYoKS5xc3RyaW5nKCksIG1fc3RySHJlZi5x
c3RyaW5nKCkpLnVybCgpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGltcG9y
dCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBhIHN0eWxlc2hlZXQKICAgICAvLyBpbiBvdXIgcGFy
ZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KLSAgICBmb3IgKHBh
cmVudCA9IHN0YXRpY19jYXN0PFN0eWxlQmFzZUltcGwqPih0aGlzKS0+cGFyZW50KCk7Ci0gICAg
ICAgICBwYXJlbnQ7Ci0gICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKQorICAgIGZv
ciAocGFyZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVCYXNlSW1wbCo+KHRoaXMpLT5wYXJlbnQoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKQogICAgICAgICBpZiAoYWJzSHJlZiA9
PSBwYXJlbnQtPmJhc2VVUkwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyAj
IyMgcGFzcyBjb3JyZWN0IGNoYXJzZXQgaGVyZSEhCiAgICAgbV9jYWNoZWRTaGVldCA9IGRvY0xv
YWRlci0+cmVxdWVzdFN0eWxlU2hlZXQoYWJzSHJlZiwgUVN0cmluZzo6bnVsbCk7Ci0KLSAgICBp
ZiAobV9jYWNoZWRTaGVldCkKLSAgICB7Ci0gICAgICBtX2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7
Ci0KLSAgICAgIC8vIElmIHRoZSBpbXBvcnRlZCBzaGVldCBpcyBpbiB0aGUgY2FjaGUsIHRoZW4g
c2V0U3R5bGVTaGVldCBnZXRzIGNhbGxlZCwKLSAgICAgIC8vIGFuZCB0aGUgc2hlZXQgZXZlbiBn
ZXRzIHBhcnNlZCAodmlhIHBhcnNlU3RyaW5nKS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlCi0gICAg
ICAvLyBsb2FkZWQgKGV2ZW4gaWYgb3VyIHN1YnJlc291cmNlcyBoYXZlbid0KSwgc28gaWYgd2Ug
aGF2ZSBzdHlsZXNoZWV0IGFmdGVyCi0gICAgICAvLyBjaGVja2luZyB0aGUgY2FjaGUsIHRoZW4g
d2UndmUgY2xlYXJseSBsb2FkZWQuIC1kd2gKLSAgICAgIGlmICghbV9zdHlsZVNoZWV0KQotICAg
ICAgICAgIG1fbG9hZGluZyA9IHRydWU7CisgICAgaWYgKG1fY2FjaGVkU2hlZXQpIHsKKyAgICAg
ICAgbV9sb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVmKHRoaXMpOwog
ICAgIH0KIH0KIApAQCAtMjI3LDE4ICsyMDMsMTQgQEAKICAgICByZXR1cm4gbV9sc3RDU1NSdWxl
cy0+aW5zZXJ0UnVsZSggcnVsZSwgbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCkgKTsKIH0KIAotdW5z
aWduZWQgQ1NTTWVkaWFSdWxlSW1wbDo6aW5zZXJ0UnVsZSggY29uc3QgRE9NU3RyaW5nICZydWxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCApCit1bnNpZ25lZCBDU1NNZWRpYVJ1bGVJbXBsOjppbnNlcnRSdWxlKGNvbnN0IFN0cmlu
ZyYgcnVsZSwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgQ1NTUGFyc2VyIHAoIHN0cmljdFBhcnNp
bmcgKTsKLSAgICBDU1NSdWxlSW1wbCAqbmV3UnVsZSA9IHAucGFyc2VSdWxlKCBwYXJlbnRTdHls
ZVNoZWV0KCksIHJ1bGUgKTsKLQotICAgIGlmICghbmV3UnVsZSkgeworICAgIENTU1BhcnNlciBw
KHVzZVN0cmljdFBhcnNpbmcoKSk7CisgICAgUmVmUHRyPENTU1J1bGVJbXBsPiBuZXdSdWxlID0g
cC5wYXJzZVJ1bGUocGFyZW50U3R5bGVTaGVldCgpLCBydWxlKTsKKyAgICBpZiAoIW5ld1J1bGUp
CiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIG5ld1J1bGUtPnNldFBhcmVudCh0aGlz
KTsKLSAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy0+aW5zZXJ0UnVsZSggbmV3UnVsZSwgaW5kZXgg
KTsKKyAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy0+aW5zZXJ0UnVsZShuZXdSdWxlLmdldCgpLCBp
bmRleCk7CiB9CiAKIERPTVN0cmluZyBDU1NNZWRpYVJ1bGVJbXBsOjpjc3NUZXh0KCkgY29uc3QK
QEAgLTM3OCw4ICszNTAsNyBAQAogICAgIGluc2VydFJ1bGUoIHJ1bGUsIG1fbHN0Q1NTUnVsZXMu
Y291bnQoKSApIDsKIH0KIAotdW5zaWduZWQgQ1NTUnVsZUxpc3RJbXBsOjppbnNlcnRSdWxlKCBD
U1NSdWxlSW1wbCAqcnVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCApCit1bnNpZ25lZCBDU1NSdWxlTGlzdEltcGw6Omluc2VydFJ1
bGUoIENTU1J1bGVJbXBsICpydWxlLCB1bnNpZ25lZCBpbmRleCApCiB7CiAgICAgaWYoIHJ1bGUg
JiYgbV9sc3RDU1NSdWxlcy5pbnNlcnQoIGluZGV4LCBydWxlICkgKQogICAgIHsKSW5kZXg6IGNz
cy9jc3NwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NwYXJzZXIuY3BwCShyZXZpc2lv
biAxMjg4MSkKKysrIGNzcy9jc3NwYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3NiAr
MjEsNDQgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLS8vI2RlZmlu
ZSBDU1NfREVCVUcKLS8vICNkZWZpbmUgVE9LRU5fREVCVUcKLSNkZWZpbmUgWVlERUJVRyAwCi0K
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxrZGVidWcuaD4KLSNpbmNsdWRlIDxrdXJs
Lmg+CisjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCiAKLSNpbmNsdWRlICJjc3NwYXJzZXIuaCIKLSNp
bmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRJbXBsLmgiCiAjaW5j
bHVkZSAiY3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCisj
aW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1ZGUgImNzc2hlbHBlci5oIgogI2luY2x1
ZGUgImNzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRlICJjc3N2YWx1ZXMuaCIKLSNpbmNsdWRlICJo
ZWxwZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKLSNpbmNsdWRlICJjc3NoZWxwZXIu
aCIKLQorI2luY2x1ZGUgPGt1cmwuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNpZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIlNWR1Bh
aW50SW1wbC5oIgorLy8jZGVmaW5lIENTU19ERUJVRworLy8jZGVmaW5lIFRPS0VOX0RFQlVHCisj
ZGVmaW5lIFlZREVCVUcgMAorCisjaWYgWVlERUJVRyA+IDAKK2V4dGVybiBpbnQgY3NzeXlkZWJ1
ZzsKICNlbmRpZgogCi11c2luZyBuYW1lc3BhY2Uga2h0bWw7Ci11c2luZyBuYW1lc3BhY2UgRE9N
OworZXh0ZXJuIGludCBjc3N5eXBhcnNlKHZvaWQqIHBhcnNlcik7CiAKLVZhbHVlTGlzdDo6VmFs
dWVMaXN0KCkKLXsKLSAgICB2YWx1ZXMgPSAoVmFsdWUgKilmYXN0TWFsbG9jKDE2ICogc2l6ZW9m
KFZhbHVlKSk7Ci0gICAgbnVtVmFsdWVzID0gMDsKLSAgICBjdXJyZW50VmFsdWUgPSAwOwotICAg
IG1heFZhbHVlcyA9IDE2OwotfQorbmFtZXNwYWNlIFdlYkNvcmUgewogCiBWYWx1ZUxpc3Q6On5W
YWx1ZUxpc3QoKQogewotICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVZhbHVlczsgaSsrICkg
ewotI2lmZGVmIENTU19ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDgwICkgPDwgIiAgICAgICB2
YWx1ZTogKHVuaXQ9IiA8PCB2YWx1ZXNbaV0udW5pdCA8PCIpIjw8IGVuZGw7Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKCB2YWx1ZXNbaV0udW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24gKQotICAgICAgICAg
ICAgZGVsZXRlIHZhbHVlc1tpXS5mdW5jdGlvbjsKLSAgICB9Ci0gICAgZmFzdEZyZWUodmFsdWVz
KTsKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXMgPSBtX3ZhbHVlcy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbHVlczsgaSsrKQorICAgICAgICBpZiAobV92YWx1ZXNb
aV0udW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24pCisgICAgICAgICAgICBkZWxldGUgbV92YWx1ZXNb
aV0uZnVuY3Rpb247CiB9CiAKLXZvaWQgVmFsdWVMaXN0OjphZGRWYWx1ZShjb25zdCBWYWx1ZSAm
dmFsKQotewotICAgIGlmIChudW1WYWx1ZXMgPj0gbWF4VmFsdWVzKSB7Ci0gICAgICAgIG1heFZh
bHVlcyArPSAxNjsKLSAgICAgICAgdmFsdWVzID0gKFZhbHVlICopZmFzdFJlYWxsb2ModmFsdWVz
LCBtYXhWYWx1ZXMqc2l6ZW9mKFZhbHVlKSk7Ci0gICAgfQotICAgIHZhbHVlc1tudW1WYWx1ZXMr
K10gPSB2YWw7Ci19Ci0KLQotI2lmIFlZREVCVUcgPiAwCi1leHRlcm4gaW50IGNzc3l5ZGVidWc7
Ci0jZW5kaWYKLQotZXh0ZXJuIGludCBjc3N5eXBhcnNlKCB2b2lkICogcGFyc2VyICk7Ci0KIENT
U1BhcnNlciAqQ1NTUGFyc2VyOjpjdXJyZW50UGFyc2VyID0gMDsKIAotQ1NTUGFyc2VyOjpDU1NQ
YXJzZXIoIGJvb2wgc3RyaWN0UGFyc2luZyApCitDU1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0
cmljdFBhcnNpbmcpCiB7Ci0jaWZkZWYgQ1NTX0RFQlVHCi0gICAga2REZWJ1ZyggNjA4MCApIDw8
ICJDU1NQYXJzZXI6OkNTU1BhcnNlciB0aGlzPSIgPDwgdGhpcyA8PCBlbmRsOwotI2VuZGlmCiAg
ICAgc3RyaWN0ID0gc3RyaWN0UGFyc2luZzsKIAogICAgIHBhcnNlZFByb3BlcnRpZXMgPSAoQ1NT
UHJvcGVydHkgKiopZmFzdE1hbGxvYygzMiAqIHNpemVvZihDU1NQcm9wZXJ0eSAqKSk7CkBAIC05
OSw3ICs2Nyw2IEBACiAKICAgICBkYXRhID0gMDsKICAgICB2YWx1ZUxpc3QgPSAwOwotICAgIHJ1
bGUgPSAwOwogICAgIGlkID0gMDsKICAgICBpbXBvcnRhbnQgPSBmYWxzZTsKICAgICBtX2luUGFy
c2VTaG9ydGhhbmQgPSAwOwpAQCAtMTEzLDIzICs4MCwyMCBAQAogI2lmIFlZREVCVUcgPiAwCiAg
ICAgY3NzeXlkZWJ1ZyA9IDE7CiAjZW5kaWYKLQogfQogCiBDU1NQYXJzZXI6On5DU1NQYXJzZXIo
KQogewotICAgIGlmICggbnVtUGFyc2VkUHJvcGVydGllcyApCi0gICAgICAgIGNsZWFyUHJvcGVy
dGllcygpOworICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIGZhc3RGcmVlKHBhcnNlZFByb3Bl
cnRpZXMpOwogCiAgICAgZGVsZXRlIHZhbHVlTGlzdDsKIAotI2lmZGVmIENTU19ERUJVRwotICAg
IGtkRGVidWcoIDYwODAgKSA8PCAiQ1NTUGFyc2VyOjp+Q1NTUGFyc2VyIHRoaXM9IiA8PCB0aGlz
IDw8IGVuZGw7Ci0jZW5kaWYKLQogICAgIGZhc3RGcmVlKGRhdGEpOwogCisgICAgZGVsZXRlQWxs
VmFsdWVzKG1fZmxvYXRpbmdTZWxlY3RvcnMpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0
aW5nVmFsdWVMaXN0cyk7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdGdW5jdGlvbnMp
OwogfQogCiB2b2lkIFBhcnNlU3RyaW5nOjpsb3dlcigpCkBAIC0xMzgsMjMgKzEwMiwyMyBAQAog
ICAgICAgICBzdHJpbmdbaV0gPSBRQ2hhcihzdHJpbmdbaV0pLmxvd2VyKCkudW5pY29kZSgpOwog
fQogCi12b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciAqcHJlZml4LCBjb25z
dCBET01TdHJpbmcgJnN0cmluZywgY29uc3QgY2hhciAqc3VmZml4KQordm9pZCBDU1NQYXJzZXI6
OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IGNoYXIqIHN1ZmZpeCkKIHsKICAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpICsg
c3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSArIDI7CiAgICAgCi0gICAgZGF0YSA9ICh1
bnNpZ25lZCBzaG9ydCAqKWZhc3RNYWxsb2MoIGxlbmd0aCAqc2l6ZW9mKCB1bnNpZ25lZCBzaG9y
dCApICk7Ci0gICAgZm9yICggdW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc3RybGVuKHByZWZpeCk7
IGkrKyApCisgICAgZGF0YSA9ICh1bnNpZ25lZCBzaG9ydCopZmFzdE1hbGxvYyhsZW5ndGggKiBz
aXplb2YodW5zaWduZWQgc2hvcnQpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Ry
bGVuKHByZWZpeCk7IGkrKykKICAgICAgICAgZGF0YVtpXSA9IHByZWZpeFtpXTsKICAgICAKLSAg
ICBtZW1jcHkoIGRhdGEgKyBzdHJsZW4oIHByZWZpeCApLCBzdHJpbmcudW5pY29kZSgpLCBzdHJp
bmcubGVuZ3RoKCkqc2l6ZW9mKCB1bnNpZ25lZCBzaG9ydCkgKTsKKyAgICBtZW1jcHkoZGF0YSAr
IHN0cmxlbihwcmVmaXgpLCBzdHJpbmcudW5pY29kZSgpLCBzdHJpbmcubGVuZ3RoKCkgKiBzaXpl
b2YodW5zaWduZWQgc2hvcnQpKTsKIAotICAgIHVuc2lnbmVkIGludCBzdGFydCA9IHN0cmxlbigg
cHJlZml4ICkgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgaW50IGVuZCA9IHN0YXJ0
ICsgc3RybGVuKHN1ZmZpeCk7Ci0gICAgZm9yICggdW5zaWduZWQgaW50IGkgPSBzdGFydDsgaSA8
IGVuZDsgaSsrICkKLSAgICAgICAgZGF0YVtpXSA9IHN1ZmZpeFtpLXN0YXJ0XTsKKyAgICB1bnNp
Z25lZCBzdGFydCA9IHN0cmxlbihwcmVmaXgpICsgc3RyaW5nLmxlbmd0aCgpOworICAgIHVuc2ln
bmVkIGVuZCA9IHN0YXJ0ICsgc3RybGVuKHN1ZmZpeCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RhcnQ7IGkgPCBlbmQ7IGkrKykKKyAgICAgICAgZGF0YVtpXSA9IHN1ZmZpeFtpIC0gc3RhcnRd
OwogCi0gICAgZGF0YVtsZW5ndGgtMV0gPSAwOwotICAgIGRhdGFbbGVuZ3RoLTJdID0gMDsKKyAg
ICBkYXRhW2xlbmd0aCAtIDFdID0gMDsKKyAgICBkYXRhW2xlbmd0aCAtIDJdID0gMDsKIAogICAg
IHl5X2hvbGRfY2hhciA9IDA7CiAgICAgeXlsZW5nID0gMDsKQEAgLTE2Miw0MyArMTI2LDMzIEBA
CiAgICAgeXlfaG9sZF9jaGFyID0gKnl5X2NfYnVmX3A7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpw
YXJzZVNoZWV0KCBDU1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQsIGNvbnN0IERPTVN0cmluZyAmc3Ry
aW5nICkKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXRJbXBsKiBzaGVl
dCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgc3R5bGVFbGVtZW50ID0gc2hlZXQ7CiAg
ICAgZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1l
c3BhY2UuCiAgICAgCi0gICAgc2V0dXBQYXJzZXIgKCIiLCBzdHJpbmcsICIiKTsKKyAgICBzZXR1
cFBhcnNlcigiIiwgc3RyaW5nLCAiIik7CiAKLSNpZmRlZiBDU1NfREVCVUcKLSAgICBrZERlYnVn
KCA2MDgwICkgPDwgIj4+Pj4+Pj4gc3RhcnQgcGFyc2luZyBzdHlsZSBzaGVldCIgPDwgZW5kbDsK
LSNlbmRpZgotICAgIENTU1BhcnNlciAqb2xkID0gY3VycmVudFBhcnNlcjsKKyAgICBDU1NQYXJz
ZXIqIG9sZCA9IGN1cnJlbnRQYXJzZXI7CiAgICAgY3VycmVudFBhcnNlciA9IHRoaXM7Ci0gICAg
Y3NzeXlwYXJzZSggdGhpcyApOworICAgIGNzc3l5cGFyc2UodGhpcyk7CiAgICAgY3VycmVudFBh
cnNlciA9IG9sZDsKLSNpZmRlZiBDU1NfREVCVUcKLSAgICBrZERlYnVnKCA2MDgwICkgPDwgIjw8
PDw8PDwgZG9uZSBwYXJzaW5nIHN0eWxlIHNoZWV0IiA8PCBlbmRsOwotI2VuZGlmCiAKLSAgICBk
ZWxldGUgcnVsZTsKICAgICBydWxlID0gMDsKIH0KIAotQ1NTUnVsZUltcGwgKkNTU1BhcnNlcjo6
cGFyc2VSdWxlKENTU1N0eWxlU2hlZXRJbXBsICpzaGVldCwgY29uc3QgRE9NU3RyaW5nICZzdHJp
bmcpCitQYXNzUmVmUHRyPENTU1J1bGVJbXBsPiBDU1NQYXJzZXI6OnBhcnNlUnVsZShDU1NTdHls
ZVNoZWV0SW1wbCAqc2hlZXQsIGNvbnN0IERPTVN0cmluZyAmc3RyaW5nKQogewogICAgIHN0eWxl
RWxlbWVudCA9IHNoZWV0OwogICAgIAotICAgIHNldHVwUGFyc2VyICgiQC1raHRtbC1ydWxleyIs
IHN0cmluZywgIn0gIik7CisgICAgc2V0dXBQYXJzZXIoIkAta2h0bWwtcnVsZXsiLCBzdHJpbmcs
ICJ9ICIpOwogCi0gICAgQ1NTUGFyc2VyICpvbGQgPSBjdXJyZW50UGFyc2VyOworICAgIENTU1Bh
cnNlciogb2xkID0gY3VycmVudFBhcnNlcjsKICAgICBjdXJyZW50UGFyc2VyID0gdGhpczsKLSAg
ICBjc3N5eXBhcnNlKCB0aGlzICk7CisgICAgY3NzeXlwYXJzZSh0aGlzKTsKICAgICBjdXJyZW50
UGFyc2VyID0gb2xkOwogCi0gICAgQ1NTUnVsZUltcGwgKnJlc3VsdCA9IHJ1bGU7Ci0gICAgcnVs
ZSA9IDA7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNl
KCk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkltcGwgKmRlY2xhcmF0aW9uLCBpbnQgX2lkLCBjb25zdCBET01TdHJpbmcgJnN0cmlu
ZywKQEAgLTIwNiwyMSArMTYwLDIwIEBACiB7CiAgICAgc3R5bGVFbGVtZW50ID0gZGVjbGFyYXRp
b24tPnN0eWxlc2hlZXQoKTsKIAotICAgIHNldHVwUGFyc2VyICgiQC1raHRtbC12YWx1ZXsiLCBz
dHJpbmcsICJ9ICIpOworICAgIHNldHVwUGFyc2VyKCJALWtodG1sLXZhbHVleyIsIHN0cmluZywg
In0gIik7CiAKICAgICBpZCA9IF9pZDsKICAgICBpbXBvcnRhbnQgPSBfaW1wb3J0YW50OwogICAg
IAotICAgIENTU1BhcnNlciAqb2xkID0gY3VycmVudFBhcnNlcjsKKyAgICBDU1NQYXJzZXIqIG9s
ZCA9IGN1cnJlbnRQYXJzZXI7CiAgICAgY3VycmVudFBhcnNlciA9IHRoaXM7Ci0gICAgY3NzeXlw
YXJzZSggdGhpcyApOworICAgIGNzc3l5cGFyc2UodGhpcyk7CiAgICAgY3VycmVudFBhcnNlciA9
IG9sZDsKICAgICAKLSAgICBkZWxldGUgcnVsZTsKICAgICBydWxlID0gMDsKIAogICAgIGJvb2wg
b2sgPSBmYWxzZTsKLSAgICBpZiAoIG51bVBhcnNlZFByb3BlcnRpZXMgKSB7CisgICAgaWYgKG51
bVBhcnNlZFByb3BlcnRpZXMpIHsKICAgICAgICAgb2sgPSB0cnVlOwogICAgICAgICBkZWNsYXJh
dGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcyhwYXJzZWRQcm9wZXJ0aWVzLCBudW1QYXJzZWRQcm9w
ZXJ0aWVzKTsKICAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CkBAIC0yNTYsMjAgKzIwOSwxOCBA
QAogewogICAgIHN0eWxlRWxlbWVudCA9IGRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCk7CiAKLSAg
ICBzZXR1cFBhcnNlciAoICJALWtodG1sLWRlY2xze2NvbG9yOiIsIHN0cmluZywgIn0gIik7Cisg
ICAgc2V0dXBQYXJzZXIoIkAta2h0bWwtZGVjbHN7Y29sb3I6Iiwgc3RyaW5nLCAifSAiKTsKIAot
ICAgIENTU1BhcnNlciAqb2xkID0gY3VycmVudFBhcnNlcjsKKyAgICBDU1NQYXJzZXIqIG9sZCA9
IGN1cnJlbnRQYXJzZXI7CiAgICAgY3VycmVudFBhcnNlciA9IHRoaXM7Ci0gICAgY3NzeXlwYXJz
ZSggdGhpcyApOworICAgIGNzc3l5cGFyc2UodGhpcyk7CiAgICAgY3VycmVudFBhcnNlciA9IG9s
ZDsKIAotICAgIGRlbGV0ZSBydWxlOwogICAgIHJ1bGUgPSAwOwogCiAgICAgYm9vbCBvayA9IGZh
bHNlOwotICAgIGlmICggbnVtUGFyc2VkUHJvcGVydGllcyAmJiBwYXJzZWRQcm9wZXJ0aWVzWzBd
LT5tX2lkID09IENTU19QUk9QX0NPTE9SKSB7CisgICAgaWYgKG51bVBhcnNlZFByb3BlcnRpZXMg
JiYgcGFyc2VkUHJvcGVydGllc1swXS0+bV9pZCA9PSBDU1NfUFJPUF9DT0xPUikKICAgICAgICAg
b2sgPSB0cnVlOwotICAgIH0KIAogICAgIHJldHVybiBvazsKIH0KQEAgLTI3OCwxOCArMjI5LDE3
IEBACiB7CiAgICAgc3R5bGVFbGVtZW50ID0gZGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKTsKIAot
ICAgIHNldHVwUGFyc2VyICggIkAta2h0bWwtZGVjbHN7Iiwgc3RyaW5nLCAifSAiKTsKKyAgICBz
ZXR1cFBhcnNlcigiQC1raHRtbC1kZWNsc3siLCBzdHJpbmcsICJ9ICIpOwogCi0gICAgQ1NTUGFy
c2VyICpvbGQgPSBjdXJyZW50UGFyc2VyOworICAgIENTU1BhcnNlciogb2xkID0gY3VycmVudFBh
cnNlcjsKICAgICBjdXJyZW50UGFyc2VyID0gdGhpczsKLSAgICBjc3N5eXBhcnNlKCB0aGlzICk7
CisgICAgY3NzeXlwYXJzZSh0aGlzKTsKICAgICBjdXJyZW50UGFyc2VyID0gb2xkOwogCi0gICAg
ZGVsZXRlIHJ1bGU7CiAgICAgcnVsZSA9IDA7CiAKICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAg
aWYgKCBudW1QYXJzZWRQcm9wZXJ0aWVzICkgeworICAgIGlmIChudW1QYXJzZWRQcm9wZXJ0aWVz
KSB7CiAgICAgICAgIG9rID0gdHJ1ZTsKICAgICAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFBy
b3BlcnRpZXMocGFyc2VkUHJvcGVydGllcywgbnVtUGFyc2VkUHJvcGVydGllcyk7CiAgICAgICAg
IGNsZWFyUHJvcGVydGllcygpOwpAQCAtMzEwLDE2ICsyNjAsOSBAQAogICAgIHBhcnNlZFByb3Bl
cnRpZXNbbnVtUGFyc2VkUHJvcGVydGllcysrXSA9IHByb3A7CiB9CiAKLVBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlRGVjbGFy
YXRpb24oQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSkKLXsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb25JbXBsPiByZXN1bHQgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25JbXBsKHJ1bGUsIHBhcnNlZFByb3BlcnRpZXMsIG51bVBhcnNlZFByb3BlcnRpZXMpOwotICAg
IGNsZWFyUHJvcGVydGllcygpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCiB2
b2lkIENTU1BhcnNlcjo6Y2xlYXJQcm9wZXJ0aWVzKCkKIHsKLSAgICBmb3IgKCBpbnQgaSA9IDA7
IGkgPCBudW1QYXJzZWRQcm9wZXJ0aWVzOyBpKysgKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtUGFyc2VkUHJvcGVydGllczsgaSsrKQogICAgICAgICBkZWxldGUgcGFyc2VkUHJvcGVydGll
c1tpXTsKICAgICBudW1QYXJzZWRQcm9wZXJ0aWVzID0gMDsKIH0KQEAgLTMzNSwyNCArMjc4LDgg
QEAKICAgICByZXR1cm4gZG9jOwogfQogCi0KLS8vIGRlZmluZXMgdW5pdHMgYWxsb3dlZCBmb3Ig
YSBjZXJ0YWluIHByb3BlcnR5LCB1c2VkIGluIHBhcnNlVW5pdAotZW51bSBVbml0cworYm9vbCBD
U1NQYXJzZXI6OnZhbGlkVW5pdChWYWx1ZSogdmFsdWUsIFVuaXRzIHVuaXRmbGFncywgYm9vbCBz
dHJpY3QpCiB7Ci0gICAgRlVua25vd24gICA9IDB4MDAwMCwKLSAgICBGSW50ZWdlciAgID0gMHgw
MDAxLAotICAgIEZOdW1iZXIgICAgPSAweDAwMDIsICAvLyBSZWFsIE51bWJlcnMKLSAgICBGUGVy
Y2VudCAgID0gMHgwMDA0LAotICAgIEZMZW5ndGggICAgPSAweDAwMDgsCi0gICAgRkFuZ2xlICAg
ICA9IDB4MDAxMCwKLSAgICBGVGltZSAgICAgID0gMHgwMDIwLAotICAgIEZGcmVxdWVuY3kgPSAw
eDAwNDAsCi0gICAgRlJlbGF0aXZlICA9IDB4MDEwMCwKLSAgICBGTm9uTmVnICAgID0gMHgwMjAw
Ci19OwotCi1zdGF0aWMgYm9vbCB2YWxpZFVuaXQoIFZhbHVlICp2YWx1ZSwgaW50IHVuaXRmbGFn
cywgYm9vbCBzdHJpY3QgKQotewogICAgIGlmICggdW5pdGZsYWdzICYgRk5vbk5lZyAmJiB2YWx1
ZS0+ZlZhbHVlIDwgMCApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjEyLDcgKzUzOSw3
IEBACiAgICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfU1BBQ0lORzogewogICAgICAgICBjb25zdCBp
bnQgcHJvcGVydGllc1syXSA9IHsgQ1NTX1BST1BfX0tIVE1MX0JPUkRFUl9IT1JJWk9OVEFMX1NQ
QUNJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9fS0hU
TUxfQk9SREVSX1ZFUlRJQ0FMX1NQQUNJTkcgfTsKLSAgICAgICAgaW50IG51bSA9IHZhbHVlTGlz
dC0+bnVtVmFsdWVzOworICAgICAgICBpbnQgbnVtID0gdmFsdWVMaXN0LT5zaXplKCk7CiAgICAg
ICAgIGlmIChudW0gPT0gMSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHByb3BlcnRp
ZXNbMF0sIGltcG9ydGFudCkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIENTU1ZhbHVlSW1w
bCogdmFsdWUgPSBwYXJzZWRQcm9wZXJ0aWVzW251bVBhcnNlZFByb3BlcnRpZXMtMV0tPnZhbHVl
KCk7CkBAIC03MTUsNyArNjQyLDcgQEAKICAgICAgICAgICAgIERPTVN0cmluZyB1cmkgPSBwYXJz
ZVVSTCggZG9tU3RyaW5nKCB2YWx1ZS0+c3RyaW5nICkgKTsKICAgICAgICAgICAgIGlmICghdXJp
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU0ltYWdl
VmFsdWVJbXBsKAotICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcoS1VSTCggc3R5bGVFbGVt
ZW50LT5iYXNlVVJMKCkucXN0cmluZygpLCB1cmkucXN0cmluZygpKS51cmwoKSksCisgICAgICAg
ICAgICAgICAgICAgIERPTVN0cmluZyhLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLnFzdHJp
bmcoKSwgdXJpLnFzdHJpbmcoKSkudXJsKCkpLAogICAgICAgICAgICAgICAgICAgICBzdHlsZUVs
ZW1lbnQpOwogICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAg
fQpAQCAtOTUzLDcgKzg4MCw3IEBACiAgICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX0xF
RlRfUkFESVVTOgogICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9SSUdIVF9SQURJVVM6
CiAgICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfUkFESVVTOiB7Ci0gICAgICAgIGludCBudW0gPSB2
YWx1ZUxpc3QtPm51bVZhbHVlczsKKyAgICAgICAgaW50IG51bSA9IHZhbHVlTGlzdC0+c2l6ZSgp
OwogICAgICAgICBpZiAobnVtICE9IDEgJiYgbnVtICE9IDIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0
aCwgc3RyaWN0KTsKQEAgLTEwODMsNyArMTAxMCw3IEBACiAgICAgY2FzZSBDU1NfUFJPUF9fS0hU
TUxfTUFSR0lOX0NPTExBUFNFOiB7CiAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0g
eyBDU1NfUFJPUF9fS0hUTUxfTUFSR0lOX1RPUF9DT0xMQVBTRSwKICAgICAgICAgICAgIENTU19Q
Uk9QX19LSFRNTF9NQVJHSU5fQk9UVE9NX0NPTExBUFNFIH07Ci0gICAgICAgIGludCBudW0gPSB2
YWx1ZUxpc3QtPm51bVZhbHVlczsKKyAgICAgICAgaW50IG51bSA9IHZhbHVlTGlzdC0+c2l6ZSgp
OwogICAgICAgICBpZiAobnVtID09IDEpIHsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShw
cm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBDU1NW
YWx1ZUltcGwqIHZhbHVlID0gcGFyc2VkUHJvcGVydGllc1tudW1QYXJzZWRQcm9wZXJ0aWVzLTFd
LT52YWx1ZSgpOwpAQCAtMTQyNyw3ICsxMzU0LDcgQEAKICAgICAgKiByaWdodCwgYm90dG9tLCBh
bmQgbGVmdCwgcmVzcGVjdGl2ZWx5LgogICAgICAqLwogICAgIAotICAgIGludCBudW0gPSBpblNo
b3J0aGFuZCgpID8gMSA6IHZhbHVlTGlzdC0+bnVtVmFsdWVzOworICAgIGludCBudW0gPSBpblNo
b3J0aGFuZCgpID8gMSA6IHZhbHVlTGlzdC0+c2l6ZSgpOwogICAgIAogICAgIGVudGVyU2hvcnRo
YW5kKHByb3BJZCk7CiAKQEAgLTE1MDksNyArMTQzNiw3IEBACiAgICAgICAgICAgICBRU3RyaW5n
IGZuYW1lID0gcVN0cmluZyh2YWwtPmZ1bmN0aW9uLT5uYW1lKS5sb3dlcigpOwogICAgICAgICAg
ICAgaWYgKGZuYW1lICE9ICJhdHRyKCIgfHwgIWFyZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaWYgKGFyZ3MtPm51bVZhbHVlcyAhPSAxKQorICAgICAgICAg
ICAgaWYgKGFyZ3MtPnNpemUoKSAhPSAxKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIFZhbHVlICphID0gYXJncy0+Y3VycmVudCgpOwogICAgICAgICAgICAgRE9N
U3RyaW5nIGF0dHJOYW1lID0gZG9tU3RyaW5nKGEtPnN0cmluZyk7CkBAIC0xNzc2LDggKzE3MDMs
OCBAQAogCiBzdGF0aWMgVmFsdWUgKnNraXBDb21tYUluRGFzaGJvYXJkUmVnaW9uIChWYWx1ZUxp
c3QgKmFyZ3MpCiB7Ci0gICAgaWYgKCBhcmdzLT5udW1WYWx1ZXMgPT0gKERBU0hCT0FSRF9SRUdJ
T05fTlVNX1BBUkFNRVRFUlMqMi0xKSB8fAotICAgICAgICAgYXJncy0+bnVtVmFsdWVzID09IChE
QVNIQk9BUkRfUkVHSU9OX1NIT1JUX05VTV9QQVJBTUVURVJTKjItMSkpIHsKKyAgICBpZiAoIGFy
Z3MtPnNpemUoKSA9PSAoREFTSEJPQVJEX1JFR0lPTl9OVU1fUEFSQU1FVEVSUyoyLTEpIHx8Cisg
ICAgICAgICBhcmdzLT5zaXplKCkgPT0gKERBU0hCT0FSRF9SRUdJT05fU0hPUlRfTlVNX1BBUkFN
RVRFUlMqMi0xKSkgewogICAgICAgICBWYWx1ZSAqY3VycmVudCA9IGFyZ3MtPmN1cnJlbnQoKTsK
ICAgICAgICAgaWYgKGN1cnJlbnQtPnVuaXQgPT0gVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnQt
PmlWYWx1ZSA9PSAnLCcgKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3MtPm5leHQoKTsKQEAgLTE4
MjAsNyArMTc0Nyw3IEBACiAgICAgICAgIC8vIGRhc2hib2FyZC1yZWdpb24obGFiZWwsIHR5cGUp
IG9yIGRhc2hib2FyZC1yZWdpb24obGFiZWwgdHlwZSkKICAgICAgICAgLy8gZGFzaGJvYXJkLXJl
Z2lvbihsYWJlbCwgdHlwZSkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0eXBlKQogICAgICAg
ICBWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7Ci0gICAgICAgIGludCBu
dW1BcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5udW1WYWx1ZXM7CisgICAgICAgIGludCBu
dW1BcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCk7CiAgICAgICAgIGlmICgobnVt
QXJncyAhPSBEQVNIQk9BUkRfUkVHSU9OX05VTV9QQVJBTUVURVJTICYmIG51bUFyZ3MgIT0gKERB
U0hCT0FSRF9SRUdJT05fTlVNX1BBUkFNRVRFUlMqMi0xKSkgJiYKICAgICAgICAgICAgIChudW1B
cmdzICE9IERBU0hCT0FSRF9SRUdJT05fU0hPUlRfTlVNX1BBUkFNRVRFUlMgJiYgbnVtQXJncyAh
PSAoREFTSEJPQVJEX1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVSUyoyLTEpKSl7CiAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwpAQCAtMTkxNyw3ICsxODQ0LDcgQEAKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gcmVjdCggdCwgciwgYiwgbCApIHx8IHJlY3QoIHQgciBiIGwgKQot
ICAgIGlmICggYXJncy0+bnVtVmFsdWVzICE9IDQgJiYgYXJncy0+bnVtVmFsdWVzICE9IDcgKQor
ICAgIGlmICggYXJncy0+c2l6ZSgpICE9IDQgJiYgYXJncy0+c2l6ZSgpICE9IDcgKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgUmVjdEltcGwgKnJlY3QgPSBuZXcgUmVjdEltcGwoKTsKICAg
ICBib29sIHZhbGlkID0gdHJ1ZTsKQEAgLTE5MzksNyArMTg2Niw3IEBACiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJlY3QtPnNldExlZnQoIGxlbmd0aCApOwogICAgICAgICBhID0gYXJncy0+
bmV4dCgpOwotICAgICAgICBpZiAoIGEgJiYgYXJncy0+bnVtVmFsdWVzID09IDcgKSB7CisgICAg
ICAgIGlmICggYSAmJiBhcmdzLT5zaXplKCkgPT0gNyApIHsKICAgICAgICAgICAgIGlmICggYS0+
dW5pdCA9PSBWYWx1ZTo6T3BlcmF0b3IgJiYgYS0+aVZhbHVlID09ICcsJyApIHsKICAgICAgICAg
ICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIyMTQs
NyArMjE0MSw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKCB2YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6
RnVuY3Rpb24gJiYKICAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MgIT0gMCAm
JgotICAgICAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+YXJncy0+bnVtVmFsdWVzID09IDUg
LyogcmdiICsgdHdvIGNvbW1hcyAqLyAmJgorICAgICAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlv
bi0+YXJncy0+c2l6ZSgpID09IDUgLyogcmdiICsgdHdvIGNvbW1hcyAqLyAmJgogICAgICAgICAg
ICAgICAgIHFTdHJpbmcoIHZhbHVlLT5mdW5jdGlvbi0+bmFtZSApLmxvd2VyKCkgPT0gInJnYigi
ICkgewogICAgICAgICBWYWx1ZUxpc3QgKmFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7CiAg
ICAgICAgIFZhbHVlICp2ID0gYXJncy0+Y3VycmVudCgpOwpAQCAtMjI0Miw3ICsyMTY5LDcgQEAK
ICAgICB9CiAgICAgZWxzZSBpZiAoIHZhbHVlLT51bml0ID09IFZhbHVlOjpGdW5jdGlvbiAmJgog
ICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MgIT0gMCAmJgotICAgICAgICAgICAg
ICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPm51bVZhbHVlcyA9PSA3IC8qIHJnYmEgKyB0aHJlZSBj
b21tYXMgKi8gJiYKKyAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkg
PT0gNyAvKiByZ2JhICsgdGhyZWUgY29tbWFzICovICYmCiAgICAgICAgICAgICAgIHFTdHJpbmco
IHZhbHVlLT5mdW5jdGlvbi0+bmFtZSApLmxvd2VyKCkgPT0gInJnYmEoIiApIHsKICAgICAgICAg
VmFsdWVMaXN0ICphcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzOwogICAgICAgICBWYWx1ZSAq
diA9IGFyZ3MtPmN1cnJlbnQoKTsKQEAgLTI1MjUsNyArMjQ1Miw2IEBACiAgICAgICAgICAgICAg
ICAgbmV3TGlzdC5hZGRWYWx1ZSgqbV9ib3JkZXJMZWZ0KTsKICAgICAgICAgICAgIHAtPnZhbHVl
TGlzdCA9ICZuZXdMaXN0OwogICAgICAgICAgICAgcC0+cGFyc2VWYWx1ZShDU1NfUFJPUF9CT1JE
RVJfV0lEVEgsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBuZXdMaXN0Lm51bVZhbHVlcyA9IDA7
IC8vIFRyaWNrIHZhbHVlbGlzdCBpbnRvIG5vdCBkZXN0cm95aW5nIHRoZSB2YWx1ZXMgd2UgcHV0
IGludG8gaXQuCiAgICAgICAgICAgICBwLT52YWx1ZUxpc3QgPSAwOwogICAgICAgICB9CiAgICAg
fQpAQCAtMjY4MSwxMiArMjYwNywxMyBAQAogICAgIHJldHVybiB0b2tlbjsKIH0KIAotc3RhdGlj
IGlubGluZSBpbnQgdG9IZXgoIGNoYXIgYyApIHsKLSAgICBpZiAoICcwJyA8PSBjICYmIGMgPD0g
JzknICkKK3N0YXRpYyBpbmxpbmUgaW50IHRvSGV4KGNoYXIgYykKK3sKKyAgICBpZiAoJzAnIDw9
IGMgJiYgYyA8PSAnOScpCiAgICAgICAgIHJldHVybiBjIC0gJzAnOwotICAgIGlmICggJ2EnIDw9
IGMgJiYgYyA8PSAnZicgKQorICAgIGlmICgnYScgPD0gYyAmJiBjIDw9ICdmJykKICAgICAgICAg
cmV0dXJuIGMgLSAnYScgKyAxMDsKLSAgICBpZiAoICdBJyA8PSBjICYmIGM8PSAnRicgKQorICAg
IGlmICgnQScgPD0gYyAmJiBjPD0gJ0YnKQogICAgICAgICByZXR1cm4gYyAtICdBJyArIDEwOwog
ICAgIHJldHVybiAwOwogfQpAQCAtMjgxMSwxNSArMjczOCwxMjIgQEAKICAgICByZXR1cm4gc3Rh
cnQ7CiB9CiAKLSNpZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgImtzdmcyL2Nzcy9LU1ZHQ1NTUGFy
c2VyLmNwcCIKLSNlbmRpZgorQ1NTU2VsZWN0b3IqIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdT
ZWxlY3RvcigpCit7CisgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gbmV3IENTU1NlbGVjdG9y
OworICAgIG1fZmxvYXRpbmdTZWxlY3RvcnMuYWRkKHNlbGVjdG9yKTsKKyAgICByZXR1cm4gc2Vs
ZWN0b3I7Cit9CiAKK0NTU1NlbGVjdG9yKiBDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ1NlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoc2VsZWN0b3IpIHsKKyAgICAgICAg
QVNTRVJUKG1fZmxvYXRpbmdTZWxlY3RvcnMuY29udGFpbnMoc2VsZWN0b3IpKTsKKyAgICAgICAg
bV9mbG9hdGluZ1NlbGVjdG9ycy5yZW1vdmUoc2VsZWN0b3IpOworICAgIH0KKyAgICByZXR1cm4g
c2VsZWN0b3I7Cit9CiAKLSNkZWZpbmUgWVlfREVDTCBpbnQgRE9NOjpDU1NQYXJzZXI6OmxleCgp
CitWYWx1ZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdWYWx1ZUxpc3QoKQoreworICAg
IFZhbHVlTGlzdCogbGlzdCA9IG5ldyBWYWx1ZUxpc3Q7CisgICAgbV9mbG9hdGluZ1ZhbHVlTGlz
dHMuYWRkKGxpc3QpOworICAgIHJldHVybiBsaXN0OworfQorCitWYWx1ZUxpc3QqIENTU1BhcnNl
cjo6c2lua0Zsb2F0aW5nVmFsdWVMaXN0KFZhbHVlTGlzdCogbGlzdCkKK3sKKyAgICBpZiAobGlz
dCkgeworICAgICAgICBBU1NFUlQobV9mbG9hdGluZ1ZhbHVlTGlzdHMuY29udGFpbnMobGlzdCkp
OworICAgICAgICBtX2Zsb2F0aW5nVmFsdWVMaXN0cy5yZW1vdmUobGlzdCk7CisgICAgfQorICAg
IHJldHVybiBsaXN0OworfQorCitGdW5jdGlvbiogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ0Z1
bmN0aW9uKCkKK3sKKyAgICBGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgRnVuY3Rpb247CisgICAg
bV9mbG9hdGluZ0Z1bmN0aW9ucy5hZGQoZnVuY3Rpb24pOworICAgIHJldHVybiBmdW5jdGlvbjsK
K30KKworRnVuY3Rpb24qIENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nRnVuY3Rpb24oRnVuY3Rpb24q
IGZ1bmN0aW9uKQoreworICAgIGlmIChmdW5jdGlvbikgeworICAgICAgICBBU1NFUlQobV9mbG9h
dGluZ0Z1bmN0aW9ucy5jb250YWlucyhmdW5jdGlvbikpOworICAgICAgICBtX2Zsb2F0aW5nRnVu
Y3Rpb25zLnJlbW92ZShmdW5jdGlvbik7CisgICAgfQorICAgIHJldHVybiBmdW5jdGlvbjsKK30K
KworVmFsdWUmIENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nVmFsdWUoVmFsdWUmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZS51bml0ID09IFZhbHVlOjpGdW5jdGlvbikgeworICAgICAgICBBU1NFUlQo
bV9mbG9hdGluZ0Z1bmN0aW9ucy5jb250YWlucyh2YWx1ZS5mdW5jdGlvbikpOworICAgICAgICBt
X2Zsb2F0aW5nRnVuY3Rpb25zLnJlbW92ZSh2YWx1ZS5mdW5jdGlvbik7CisgICAgfQorICAgIHJl
dHVybiB2YWx1ZTsKK30KKworTWVkaWFMaXN0SW1wbCogQ1NTUGFyc2VyOjpjcmVhdGVNZWRpYUxp
c3QoKQoreworICAgIE1lZGlhTGlzdEltcGwqIGxpc3QgPSBuZXcgTWVkaWFMaXN0SW1wbDsKKyAg
ICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQobGlzdCk7CisgICAgcmV0dXJuIGxpc3Q7Cit9
CisKK0NTU1J1bGVJbXBsKiBDU1NQYXJzZXI6OmNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgUGFyc2VT
dHJpbmcmIFVSTCwgTWVkaWFMaXN0SW1wbCogbWVkaWEpCit7CisgICAgaWYgKCFtZWRpYSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFzdHlsZUVsZW1lbnQpCisgICAgICAgIHJldHVybiAw
OworICAgIGlmICghc3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQ1NTSW1wb3J0UnVsZUltcGwqIHJ1bGUgPSBuZXcgQ1NTSW1wb3J0UnVsZUlt
cGwoc3R5bGVFbGVtZW50LCBkb21TdHJpbmcoVVJMKSwgbWVkaWEpOworICAgIG1fcGFyc2VkU3R5
bGVPYmplY3RzLmFwcGVuZChydWxlKTsKKyAgICByZXR1cm4gcnVsZTsKK30KKworQ1NTUnVsZUlt
cGwqIENTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKE1lZGlhTGlzdEltcGwqIG1lZGlhLCBDU1NS
dWxlTGlzdEltcGwqIHJ1bGVzKQoreworICAgIGlmICghbWVkaWEpCisgICAgICAgIHJldHVybiAw
OworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghc3R5bGVFbGVt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+aXNDU1NTdHls
ZVNoZWV0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIENTU01lZGlhUnVsZUltcGwqIHJ1bGUg
PSBuZXcgQ1NTTWVkaWFSdWxlSW1wbChzdHlsZUVsZW1lbnQsIG1lZGlhLCBydWxlcyk7CisgICAg
bV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUpOworICAgIHJldHVybiBydWxlOworfQor
CitDU1NSdWxlTGlzdEltcGwqIENTU1BhcnNlcjo6Y3JlYXRlUnVsZUxpc3QoKQoreworICAgIENT
U1J1bGVMaXN0SW1wbCogbGlzdCA9IG5ldyBDU1NSdWxlTGlzdEltcGw7CisgICAgbV9wYXJzZWRS
dWxlTGlzdHMuYXBwZW5kKGxpc3QpOworICAgIHJldHVybiBsaXN0OworfQorCitDU1NSdWxlSW1w
bCogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorewor
ICAgIENTU1N0eWxlUnVsZUltcGwqIHJ1bGUgPSAwOworICAgIGlmIChzZWxlY3RvcikgeworICAg
ICAgICBydWxlID0gbmV3IENTU1N0eWxlUnVsZUltcGwoc3R5bGVFbGVtZW50KTsKKyAgICAgICAg
bV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUpOworICAgICAgICBydWxlLT5zZXRTZWxl
Y3RvcihzaW5rRmxvYXRpbmdTZWxlY3RvcihzZWxlY3RvcikpOworICAgICAgICBydWxlLT5zZXRE
ZWNsYXJhdGlvbihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKHJ1bGUsIHBhcnNl
ZFByb3BlcnRpZXMsIG51bVBhcnNlZFByb3BlcnRpZXMpKTsKKyAgICB9CisgICAgY2xlYXJQcm9w
ZXJ0aWVzKCk7CisgICAgcmV0dXJuIHJ1bGU7Cit9CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgQ1NT
UGFyc2VyOjpsZXgoKQogI2RlZmluZSB5eWNvbnN0IGNvbnN0CiB0eXBlZGVmIGludCB5eV9zdGF0
ZV90eXBlOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgWVlfQ0hBUjsKK3R5cGVkZWYgdW5zaWduZWQg
WVlfQ0hBUjsKIC8vIHRoaXMgbGluZSBtYWtlcyBzdXJlIHdlIHRyZWF0IGFsbCBVbmljb2RlIGNo
YXJzIGNvcnJlY3RseS4KICNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKGMgPiAweGZmID8gMHhmZiA6
IGMpCiAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXApAQCAtMjgzOCwzICsyODcyLDQgQEAK
IAogI2luY2x1ZGUgInRva2VuaXplci5jcHAiCiAKK30KSW5kZXg6IGNzcy9jc3NfdmFsdWVpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzX3ZhbHVlaW1wbC5jcHAJKHJldmlzaW9uIDEyODgx
KQorKysgY3NzL2Nzc192YWx1ZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsNyArNDQy
LDcgQEAKIAogICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwogCi0gICAgQ1NTUGFyc2Vy
IHBhcnNlcihzdHJpY3RQYXJzaW5nKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBh
cnNpbmcoKSk7CiAgICAgYm9vbCBzdWNjZXNzID0gcGFyc2VyLnBhcnNlVmFsdWUodGhpcywgcHJv
cGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAg
IGV4Y2VwdGlvbkNvZGUgPSBDU1NFeGNlcHRpb246OlNZTlRBWF9FUlIgKyBDU1NFeGNlcHRpb246
Ol9FWENFUFRJT05fT0ZGU0VUOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiB2b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcgJnN0eWxl
RGVjbGFyYXRpb24pCiB7CiAgICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFy
c2VyKHN0cmljdFBhcnNpbmcpOworICAgIENTU1BhcnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2lu
ZygpKTsKICAgICBwYXJzZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCBzdHlsZURlY2xhcmF0aW9u
KTsKICAgICBzZXRDaGFuZ2VkKCk7CiB9CkBAIC00OTIsMTQgKzQ5MiwxMiBAQAogICAgIC8vIGEg
bm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9k
ZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCiB9CiAKLXZvaWQgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25JbXBsOjpzZXRMZW5ndGhQcm9wZXJ0eShpbnQgaWQsIGNvbnN0IFN0
cmluZyAmdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIF9tdWx0aUxlbmd0aCApCit2b2lkIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDo6c2V0TGVuZ3RoUHJvcGVydHkoaW50IGlkLCBj
b25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCAvKiBtdWx0aUxlbmd0aCov
KQogewotICAgIGJvb2wgcGFyc2VNb2RlID0gc3RyaWN0UGFyc2luZzsKLSAgICBzdHJpY3RQYXJz
aW5nID0gZmFsc2U7Ci0gICAgbXVsdGlMZW5ndGggPSBfbXVsdGlMZW5ndGg7Ci0gICAgc2V0UHJv
cGVydHkoIGlkLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICBzdHJpY3RQYXJzaW5nID0gcGFyc2VN
b2RlOwotICAgIG11bHRpTGVuZ3RoID0gZmFsc2U7CisgICAgYm9vbCBwYXJzZU1vZGUgPSB1c2VT
dHJpY3RQYXJzaW5nKCk7CisgICAgc2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7CisgICAgc2V0UHJv
cGVydHkoaWQsIHZhbHVlLCBpbXBvcnRhbnQpOworICAgIHNldFN0cmljdFBhcnNpbmcocGFyc2VN
b2RlKTsKIH0KIAogdW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOjpsZW5n
dGgoKSBjb25zdApAQCAtNTM0LDcgKzUzMiw3IEBACiB7CiAgICAgZXhjZXB0aW9uQ29kZSA9IDA7
CiAgICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKHN0cmljdFBhcnNp
bmcpOworICAgIENTU1BhcnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKICAgICBwYXJz
ZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCB0ZXh0KTsKICAgICAvLyBGSVhNRTogRGV0ZWN0IHN5
bnRheCBlcnJvcnMgYW5kIHNldCBleGNlcHRpb25Db2RlLgogICAgIHNldENoYW5nZWQoKTsKSW5k
ZXg6IGNzcy9jc3NfcnVsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzX3J1bGVpbXBsLmgJ
KHJldmlzaW9uIDEyODgxKQorKysgY3NzL2Nzc19ydWxlaW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw2IEBACiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRDc3NUZXh0KERPTTo6RE9NU3RyaW5nIHN0cik7Ci0gICAgdmlydHVhbCB2
b2lkIGluaXQoKSB7fQogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTUnVsZTo6UnVsZVR5cGUgbV90eXBl
OwpAQCAtOTgsMzMgKzk3LDMxIEBACiB9OwogCiAKLWNsYXNzIENTU0ltcG9ydFJ1bGVJbXBsIDog
cHVibGljIGtodG1sOjpDYWNoZWRPYmplY3RDbGllbnQsIHB1YmxpYyBDU1NSdWxlSW1wbAorY2xh
c3MgQ1NTSW1wb3J0UnVsZUltcGwgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50LCBwdWJsaWMg
Q1NTUnVsZUltcGwKIHsKIHB1YmxpYzoKLSAgICBDU1NJbXBvcnRSdWxlSW1wbCggU3R5bGVCYXNl
SW1wbCAqcGFyZW50LCBjb25zdCBET006OkRPTVN0cmluZyAmaHJlZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRE9NOjpET01TdHJpbmcgJm1lZGlhICk7Ci0gICAgQ1NTSW1wb3J0UnVs
ZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3QgRE9NOjpET01TdHJpbmcgJmhyZWYs
Ci0gICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhICk7CisgICAgQ1NT
SW1wb3J0UnVsZUltcGwoU3R5bGVCYXNlSW1wbCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYs
IE1lZGlhTGlzdEltcGwqKTsKICAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlSW1wbCgpOwogCi0g
ICAgRE9NOjpET01TdHJpbmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fc3RySHJlZjsgfQotICAg
IE1lZGlhTGlzdEltcGwgKm1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYS5nZXQoKTsg
fQotICAgIENTU1N0eWxlU2hlZXRJbXBsICpzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZVNoZWV0LmdldCgpOyB9CisgICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX3N0
ckhyZWY7IH0KKyAgICBNZWRpYUxpc3RJbXBsKiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0
TWVkaWEuZ2V0KCk7IH0KKyAgICBDU1NTdHlsZVNoZWV0SW1wbCogc3R5bGVTaGVldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGVTaGVldC5nZXQoKTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzSW1w
b3J0UnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIERPTVN0cmluZyBjc3NUZXh0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogICAKKyAgICBi
b29sIGlzTG9hZGluZygpIGNvbnN0OworCiAgICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGllbnQK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBET006OkRPTVN0cmluZyAmdXJs
LCBjb25zdCBET006OkRPTVN0cmluZyAmc2hlZXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNoZWV0KTsKIAotICAgIGJv
b2wgaXNMb2FkaW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluaXQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvUGFyZW50KCk7CiAKIHByb3RlY3RlZDoKLSAgICBET01TdHJpbmcgbV9z
dHJIcmVmOworICAgIFN0cmluZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPE1lZGlhTGlzdEltcGw+
IG1fbHN0TWVkaWE7CiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXRJbXBsPiBtX3N0eWxlU2hlZXQ7
Ci0gICAga2h0bWw6OkNhY2hlZENTU1N0eWxlU2hlZXQgKm1fY2FjaGVkU2hlZXQ7CisgICAgQ2Fj
aGVkQ1NTU3R5bGVTaGVldCogbV9jYWNoZWRTaGVldDsKICAgICBib29sIG1fbG9hZGluZzsKIH07
CiAKSW5kZXg6IGNzcy9jc3NwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzcGFyc2VyLmgJ
KHJldmlzaW9uIDEyODgxKQorKysgY3NzL2Nzc3BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw4IEBACiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJRU3RyaW5nLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgor
I2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgS1hNTENvcmUgewogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOwpAQCAtMzQsNjcgKzM2LDY2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFN0eWxlTGlzdEltcGw7Cisg
ICAgY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOworICAgIGNsYXNzIENTU1By
aW1pdGl2ZVZhbHVlSW1wbDsKKyAgICBjbGFzcyBDU1NQcm9wZXJ0eTsKKyAgICBjbGFzcyBDU1NS
dWxlSW1wbDsKKyAgICBjbGFzcyBDU1NSdWxlTGlzdEltcGw7CisgICAgY2xhc3MgQ1NTU2VsZWN0
b3I7CiAgICAgY2xhc3MgQ1NTU3R5bGVTaGVldEltcGw7Ci0gICAgY2xhc3MgQ1NTUnVsZUltcGw7
Ci0gICAgY2xhc3MgQ1NTU3R5bGVSdWxlSW1wbDsKLSAgICBjbGFzcyBEb2N1bWVudEltcGw7Ci0g
ICAgY2xhc3MgTm9kZUltcGw7CiAgICAgY2xhc3MgQ1NTVmFsdWVJbXBsOwogICAgIGNsYXNzIENT
U1ZhbHVlTGlzdEltcGw7Ci0gICAgY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsOwotICAgIGNs
YXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKLSAgICBjbGFzcyBDU1NQcm9wZXJ0
eTsKLSAgICBjbGFzcyBDU1NSdWxlTGlzdEltcGw7CisgICAgY2xhc3MgRG9jdW1lbnRJbXBsOwor
ICAgIGNsYXNzIE1lZGlhTGlzdEltcGw7CisgICAgY2xhc3MgU3R5bGVCYXNlSW1wbDsKKyAgICBj
bGFzcyBTdHlsZUxpc3RJbXBsOwogCiAgICAgc3RydWN0IFBhcnNlU3RyaW5nIHsKLQl1bnNpZ25l
ZCBzaG9ydCogc3RyaW5nOwotCWludCBsZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIHNob3J0KiBz
dHJpbmc7CisgICAgICAgIGludCBsZW5ndGg7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvd2Vy
KCk7CiAgICAgfTsKIAotICAgIHN0cnVjdCBWYWx1ZTsKLSAgICBjbGFzcyBWYWx1ZUxpc3Q7CiAg
ICAgc3RydWN0IEZ1bmN0aW9uOwogICAgIAogICAgIHN0cnVjdCBWYWx1ZSB7Ci0JaW50IGlkOwot
CXVuaW9uIHsKLQkgICAgZG91YmxlIGZWYWx1ZTsKLQkgICAgaW50IGlWYWx1ZTsKLQkgICAgUGFy
c2VTdHJpbmcgc3RyaW5nOwotCSAgICBGdW5jdGlvbiogZnVuY3Rpb247Ci0JfTsKLQllbnVtIHsK
LQkgICAgT3BlcmF0b3IgPSAweDEwMDAwMCwKLQkgICAgRnVuY3Rpb24gPSAweDEwMDAwMSwKLQkg
ICAgUV9FTVMgICAgPSAweDEwMDAwMgotCX07Ci0JaW50IHVuaXQ7CisgICAgICAgIGludCBpZDsK
KyAgICAgICAgdW5pb24geworICAgICAgICAgICAgZG91YmxlIGZWYWx1ZTsKKyAgICAgICAgICAg
IGludCBpVmFsdWU7CisgICAgICAgICAgICBQYXJzZVN0cmluZyBzdHJpbmc7CisgICAgICAgICAg
ICBGdW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgIH07CisgICAgICAgIGVudW0geworICAgICAg
ICAgICAgT3BlcmF0b3IgPSAweDEwMDAwMCwKKyAgICAgICAgICAgIEZ1bmN0aW9uID0gMHgxMDAw
MDEsCisgICAgICAgICAgICBRX0VNUyAgICA9IDB4MTAwMDAyCisgICAgICAgIH07CisgICAgICAg
IGludCB1bml0OwogICAgIH07CiAKICAgICBzdGF0aWMgaW5saW5lIFFTdHJpbmcgcVN0cmluZyhj
b25zdCBQYXJzZVN0cmluZyYgcHMpIHsKLQlyZXR1cm4gUVN0cmluZygoUUNoYXIgKilwcy5zdHJp
bmcsIHBzLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBRU3RyaW5nKChRQ2hhciAqKXBzLnN0cmlu
ZywgcHMubGVuZ3RoKTsKICAgICB9CiAgICAgc3RhdGljIGlubGluZSBTdHJpbmcgZG9tU3RyaW5n
KGNvbnN0IFBhcnNlU3RyaW5nJiBwcykgewotCXJldHVybiBTdHJpbmcoKFFDaGFyICopcHMuc3Ry
aW5nLCBwcy5sZW5ndGgpOworICAgICAgICByZXR1cm4gU3RyaW5nKChRQ2hhciAqKXBzLnN0cmlu
ZywgcHMubGVuZ3RoKTsKICAgICB9CiAgICAgc3RhdGljIGlubGluZSBBdG9taWNTdHJpbmcgYXRv
bWljU3RyaW5nKGNvbnN0IFBhcnNlU3RyaW5nJiBwcykgewotCXJldHVybiBBdG9taWNTdHJpbmco
cHMuc3RyaW5nLCBwcy5sZW5ndGgpOworICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKHBzLnN0
cmluZywgcHMubGVuZ3RoKTsKICAgICB9CiAKICAgICBjbGFzcyBWYWx1ZUxpc3QgewogICAgIHB1
YmxpYzoKLQlWYWx1ZUxpc3QoKTsKLQl+VmFsdWVMaXN0KCk7Ci0Jdm9pZCBhZGRWYWx1ZShjb25z
dCBWYWx1ZSYpOwotCVZhbHVlKiBjdXJyZW50KCkgeyByZXR1cm4gY3VycmVudFZhbHVlIDwgbnVt
VmFsdWVzID8gdmFsdWVzICsgY3VycmVudFZhbHVlIDogMDsgfQotCVZhbHVlKiBuZXh0KCkgeyAr
K2N1cnJlbnRWYWx1ZTsgcmV0dXJuIGN1cnJlbnQoKTsgfQotCVZhbHVlKiB2YWx1ZXM7Ci0JaW50
IG51bVZhbHVlczsKLQlpbnQgbWF4VmFsdWVzOwotCWludCBjdXJyZW50VmFsdWU7CisgICAgICAg
IFZhbHVlTGlzdCgpIDogbV9jdXJyZW50KDApIHsgfQorICAgICAgICB+VmFsdWVMaXN0KCk7Cisg
ICAgICAgIHZvaWQgYWRkVmFsdWUoY29uc3QgVmFsdWUmIHYpIHsgbV92YWx1ZXMuYXBwZW5kKHYp
OyB9CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KKyAgICAgICAgVmFsdWUqIGN1cnJlbnQoKSB7IHJldHVybiBtX2N1cnJlbnQgPCBtX3Zh
bHVlcy5zaXplKCkgPyAmbV92YWx1ZXNbbV9jdXJyZW50XSA6IDA7IH0KKyAgICAgICAgVmFsdWUq
IG5leHQoKSB7ICsrbV9jdXJyZW50OyByZXR1cm4gY3VycmVudCgpOyB9CisgICAgcHJpdmF0ZToK
KyAgICAgICAgVmVjdG9yPFZhbHVlLCAxNj4gbV92YWx1ZXM7CisgICAgICAgIHVuc2lnbmVkIG1f
Y3VycmVudDsKICAgICB9OwogCiAgICAgc3RydWN0IEZ1bmN0aW9uIHsKQEAgLTEwNywyOSArMTA4
LDI3IEBACiAgICAgY2xhc3MgQ1NTUGFyc2VyCiAgICAgewogICAgIHB1YmxpYzoKLQlDU1NQYXJz
ZXIoYm9vbCBzdHJpY3RQYXJzaW5nID0gdHJ1ZSk7Ci0JfkNTU1BhcnNlcigpOworICAgICAgICBD
U1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nID0gdHJ1ZSk7CisgICAgICAgIH5DU1NQYXJzZXIo
KTsKIAotCXZvaWQgcGFyc2VTaGVldChDU1NTdHlsZVNoZWV0SW1wbCosIGNvbnN0IFN0cmluZyYp
OwotCUNTU1J1bGVJbXBsKiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldEltcGwqLCBjb25zdCBTdHJp
bmcmKTsKLQlib29sIHBhcnNlVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiwg
aW50IGlkLCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7CisgICAgICAgIHZvaWQgcGFy
c2VTaGVldChDU1NTdHlsZVNoZWV0SW1wbCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICBQYXNz
UmVmUHRyPENTU1J1bGVJbXBsPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldEltcGwqLCBjb25zdCBT
dHJpbmcmKTsKKyAgICAgICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uSW1wbCosIGludCBpZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQpOwogICAgICAg
ICBzdGF0aWMgUkdCQTMyIHBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJik7Ci0JYm9vbCBwYXJzZUNv
bG9yKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCosIGNvbnN0IFN0cmluZyYpOwotCWJv
b2wgcGFyc2VEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqLCBjb25z
dCBTdHJpbmcmKTsKKyAgICAgICAgYm9vbCBwYXJzZUNvbG9yKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uSW1wbCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICBib29sIHBhcnNlRGVjbGFyYXRp
b24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiwgY29uc3QgU3RyaW5nJik7CiAKLQlz
dGF0aWMgQ1NTUGFyc2VyKiBjdXJyZW50KCkgeyByZXR1cm4gY3VycmVudFBhcnNlcjsgfQorICAg
ICAgICBzdGF0aWMgQ1NTUGFyc2VyKiBjdXJyZW50KCkgeyByZXR1cm4gY3VycmVudFBhcnNlcjsg
fQogCi0JRG9jdW1lbnRJbXBsKiBkb2N1bWVudCgpIGNvbnN0OworICAgICAgICBEb2N1bWVudElt
cGwqIGRvY3VtZW50KCkgY29uc3Q7CiAKLQl2b2lkIGFkZFByb3BlcnR5KGludCBwcm9wSWQsIENT
U1ZhbHVlSW1wbCosIGJvb2wgaW1wb3J0YW50KTsKLQlib29sIGhhc1Byb3BlcnRpZXMoKSBjb25z
dCB7IHJldHVybiBudW1QYXJzZWRQcm9wZXJ0aWVzID4gMDsgfQotCVBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBjcmVhdGVTdHlsZURlY2xhcmF0aW9uKENTU1N0eWxl
UnVsZUltcGwqKTsKLQl2b2lkIGNsZWFyUHJvcGVydGllcygpOworICAgICAgICB2b2lkIGFkZFBy
b3BlcnR5KGludCBwcm9wSWQsIENTU1ZhbHVlSW1wbCosIGJvb2wgaW1wb3J0YW50KTsKKyAgICAg
ICAgYm9vbCBoYXNQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbnVtUGFyc2VkUHJvcGVydGll
cyA+IDA7IH0KIAotCWJvb2wgcGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7
Ci0JYm9vbCBwYXJzZVNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMs
IGludCBudW1Qcm9wZXJ0aWVzLCBib29sIGltcG9ydGFudCk7Ci0JYm9vbCBwYXJzZTRWYWx1ZXMo
aW50IHByb3BJZCwgY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBib29sIGltcG9ydGFudCk7Ci0JYm9v
bCBwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOworICAgICAgICBib29s
IHBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOworICAgICAgICBib29sIHBh
cnNlU2hvcnRoYW5kKGludCBwcm9wSWQsIGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bVBy
b3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50KTsKKyAgICAgICAgYm9vbCBwYXJzZTRWYWx1ZXMoaW50
IHByb3BJZCwgY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBib29sIGltcG9ydGFudCk7CisgICAgICAg
IGJvb2wgcGFyc2VDb250ZW50KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKIAogICAgICAg
ICBDU1NWYWx1ZUltcGwqIHBhcnNlQmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIENTU1ZhbHVl
SW1wbCogcGFyc2VCYWNrZ3JvdW5kSW1hZ2UoKTsKQEAgLTE0MiwxNCArMTQxLDE0IEBACiAgICAg
ICAgIHZvaWQgYWRkQmFja2dyb3VuZFZhbHVlKENTU1ZhbHVlSW1wbComIGx2YWwsIENTU1ZhbHVl
SW1wbCogcnZhbCk7CiAgICAgICAKICNpZiBfX0FQUExFX18KLQlib29sIHBhcnNlRGFzaGJvYXJk
UmVnaW9ucyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CisgICAgICAgIGJvb2wgcGFyc2VE
YXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKICNlbmRpZgogCi0J
Ym9vbCBwYXJzZVNoYXBlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKLQlib29sIHBhcnNl
Rm9udChib29sIGltcG9ydGFudCk7Ci0JQ1NTVmFsdWVMaXN0SW1wbCogcGFyc2VGb250RmFtaWx5
KCk7CisgICAgICAgIGJvb2wgcGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7
CisgICAgICAgIGJvb2wgcGFyc2VGb250KGJvb2wgaW1wb3J0YW50KTsKKyAgICAgICAgQ1NTVmFs
dWVMaXN0SW1wbCogcGFyc2VGb250RmFtaWx5KCk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
SW1wbCogcGFyc2VDb2xvcigpOwotCUNTU1ByaW1pdGl2ZVZhbHVlSW1wbCogcGFyc2VDb2xvckZy
b21WYWx1ZShWYWx1ZSopOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZUltcGwqIHBhcnNlQ29s
b3JGcm9tVmFsdWUoVmFsdWUqKTsKICAgICAgICAgCiAjaWYgU1ZHX1NVUFBPUlQKICAgICAgICAg
Ym9vbCBwYXJzZVNWR1ZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKQEAgLTE2NCwz
NSArMTYzLDU0IEBACiAgICAgICAgIGJvb2wgcGFyc2VTaGFkb3coaW50IHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpOwogICAgICAgICBib29sIHBhcnNlQm9yZGVySW1hZ2UoaW50IHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpOwogCi0JaW50IHl5cGFyc2Uodm9pZCk7CisgICAgICAgIGludCB5eXBhcnNl
KCk7CiAKKyAgICAgICAgQ1NTU2VsZWN0b3IqIGNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKKyAg
ICAgICAgQ1NTU2VsZWN0b3IqIHNpbmtGbG9hdGluZ1NlbGVjdG9yKENTU1NlbGVjdG9yKik7CisK
KyAgICAgICAgVmFsdWVMaXN0KiBjcmVhdGVGbG9hdGluZ1ZhbHVlTGlzdCgpOworICAgICAgICBW
YWx1ZUxpc3QqIHNpbmtGbG9hdGluZ1ZhbHVlTGlzdChWYWx1ZUxpc3QqKTsKKworICAgICAgICBG
dW5jdGlvbiogY3JlYXRlRmxvYXRpbmdGdW5jdGlvbigpOworICAgICAgICBGdW5jdGlvbiogc2lu
a0Zsb2F0aW5nRnVuY3Rpb24oRnVuY3Rpb24qKTsKKworICAgICAgICBWYWx1ZSYgc2lua0Zsb2F0
aW5nVmFsdWUoVmFsdWUmKTsKKworICAgICAgICBNZWRpYUxpc3RJbXBsKiBjcmVhdGVNZWRpYUxp
c3QoKTsKKyAgICAgICAgQ1NTUnVsZUltcGwqIGNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgUGFyc2VT
dHJpbmcmLCBNZWRpYUxpc3RJbXBsKik7CisgICAgICAgIENTU1J1bGVJbXBsKiBjcmVhdGVNZWRp
YVJ1bGUoTWVkaWFMaXN0SW1wbCosIENTU1J1bGVMaXN0SW1wbCopOworICAgICAgICBDU1NSdWxl
TGlzdEltcGwqIGNyZWF0ZVJ1bGVMaXN0KCk7CisgICAgICAgIENTU1J1bGVJbXBsKiBjcmVhdGVT
dHlsZVJ1bGUoQ1NTU2VsZWN0b3IqKTsKKwogICAgIHB1YmxpYzoKLQlib29sIHN0cmljdDsKLQli
b29sIGltcG9ydGFudDsKLQlpbnQgaWQ7Ci0JU3R5bGVMaXN0SW1wbCogc3R5bGVFbGVtZW50Owot
ICAgICAgICBDU1NSdWxlSW1wbCogcnVsZTsKLQlWYWx1ZUxpc3QqIHZhbHVlTGlzdDsKLQlDU1NQ
cm9wZXJ0eSoqIHBhcnNlZFByb3BlcnRpZXM7Ci0JaW50IG51bVBhcnNlZFByb3BlcnRpZXM7Ci0J
aW50IG1heFBhcnNlZFByb3BlcnRpZXM7Ci0JCisgICAgICAgIGJvb2wgc3RyaWN0OworICAgICAg
ICBib29sIGltcG9ydGFudDsKKyAgICAgICAgaW50IGlkOworICAgICAgICBTdHlsZUxpc3RJbXBs
KiBzdHlsZUVsZW1lbnQ7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlSW1wbD4gcnVsZTsKKyAgICAg
ICAgVmFsdWVMaXN0KiB2YWx1ZUxpc3Q7CisgICAgICAgIENTU1Byb3BlcnR5KiogcGFyc2VkUHJv
cGVydGllczsKKyAgICAgICAgaW50IG51bVBhcnNlZFByb3BlcnRpZXM7CisgICAgICAgIGludCBt
YXhQYXJzZWRQcm9wZXJ0aWVzOworICAgICAgICAKICAgICAgICAgaW50IG1faW5QYXJzZVNob3J0
aGFuZDsKICAgICAgICAgaW50IG1fY3VycmVudFNob3J0aGFuZDsKICAgICAgICAgYm9vbCBtX2lt
cGxpY2l0U2hvcnRoYW5kOwogCiAgICAgICAgIEF0b21pY1N0cmluZyBkZWZhdWx0TmFtZXNwYWNl
OwotICAgICAgICAKLQlzdGF0aWMgQ1NTUGFyc2VyKiBjdXJyZW50UGFyc2VyOwogCi0JLy8gdG9r
ZW5pemVyIG1ldGhvZHMgYW5kIGRhdGEKKyAgICAgICAgc3RhdGljIENTU1BhcnNlciogY3VycmVu
dFBhcnNlcjsKKworICAgICAgICAvLyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQogICAgIHB1
YmxpYzoKLQlpbnQgbGV4KHZvaWQqIHl5bHZhbCk7Ci0JaW50IHRva2VuKCkgeyByZXR1cm4geXlU
b2s7IH0KLQl1bnNpZ25lZCBzaG9ydCogdGV4dChpbnQqIGxlbmd0aCk7Ci0JaW50IGxleCgpOwor
ICAgICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CisgICAgICAgIGludCB0b2tlbigpIHsgcmV0
dXJuIHl5VG9rOyB9CisgICAgICAgIHVuc2lnbmVkIHNob3J0KiB0ZXh0KGludCogbGVuZ3RoKTsK
KyAgICAgICAgaW50IGxleCgpOwogICAgICAgICAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IGNsZWFyUHJvcGVydGllcygpOworCiAgICAgICAgIHZvaWQgc2V0dXBQYXJzZXIoY29uc3QgY2hh
ciogcHJlZml4LCBjb25zdCBTdHJpbmcmLCBjb25zdCBjaGFyKiBzdWZmaXgpOwogICAgICAgICB2
b2lkIGVudGVyU2hvcnRoYW5kKGludCBwcm9wSWQpCiAgICAgICAgIHsKQEAgLTIwNiwxNSArMjI0
LDQwIEBACiAgICAgICAgIH0KICAgICAgICAgYm9vbCBpblNob3J0aGFuZCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5QYXJzZVNob3J0aGFuZDsgfQogCi0JdW5zaWduZWQgc2hvcnQqIGRhdGE7Ci0JdW5z
aWduZWQgc2hvcnQqIHl5dGV4dDsKLQl1bnNpZ25lZCBzaG9ydCogeXlfY19idWZfcDsKLQl1bnNp
Z25lZCBzaG9ydCB5eV9ob2xkX2NoYXI7Ci0JaW50IHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwot
CXVuc2lnbmVkIHNob3J0KiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCWludCB5eWxlbmc7Ci0J
aW50IHl5VG9rOwotCWludCB5eV9zdGFydDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQqIGRhdGE7
CisgICAgICAgIHVuc2lnbmVkIHNob3J0KiB5eXRleHQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0
KiB5eV9jX2J1Zl9wOworICAgICAgICB1bnNpZ25lZCBzaG9ydCB5eV9ob2xkX2NoYXI7CisgICAg
ICAgIGludCB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQq
IHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisgICAgICAgIGludCB5eWxlbmc7CisgICAgICAgIGlu
dCB5eVRvazsKKyAgICAgICAgaW50IHl5X3N0YXJ0OworCisgICAgICAgIFZlY3RvcjxSZWZQdHI8
U3R5bGVCYXNlSW1wbD4gPiBtX3BhcnNlZFN0eWxlT2JqZWN0czsKKyAgICAgICAgVmVjdG9yPFJl
ZlB0cjxDU1NSdWxlTGlzdEltcGw+ID4gbV9wYXJzZWRSdWxlTGlzdHM7CisgICAgICAgIEhhc2hT
ZXQ8Q1NTU2VsZWN0b3IqPiBtX2Zsb2F0aW5nU2VsZWN0b3JzOworICAgICAgICBIYXNoU2V0PFZh
bHVlTGlzdCo+IG1fZmxvYXRpbmdWYWx1ZUxpc3RzOworICAgICAgICBIYXNoU2V0PEZ1bmN0aW9u
Kj4gbV9mbG9hdGluZ0Z1bmN0aW9uczsKKworICAgICAgICAvLyBkZWZpbmVzIHVuaXRzIGFsbG93
ZWQgZm9yIGEgY2VydGFpbiBwcm9wZXJ0eSwgdXNlZCBpbiBwYXJzZVVuaXQKKyAgICAgICAgZW51
bSBVbml0cyB7CisgICAgICAgICAgICBGVW5rbm93biAgID0gMHgwMDAwLAorICAgICAgICAgICAg
RkludGVnZXIgICA9IDB4MDAwMSwKKyAgICAgICAgICAgIEZOdW1iZXIgICAgPSAweDAwMDIsICAv
LyBSZWFsIE51bWJlcnMKKyAgICAgICAgICAgIEZQZXJjZW50ICAgPSAweDAwMDQsCisgICAgICAg
ICAgICBGTGVuZ3RoICAgID0gMHgwMDA4LAorICAgICAgICAgICAgRkFuZ2xlICAgICA9IDB4MDAx
MCwKKyAgICAgICAgICAgIEZUaW1lICAgICAgPSAweDAwMjAsCisgICAgICAgICAgICBGRnJlcXVl
bmN5ID0gMHgwMDQwLAorICAgICAgICAgICAgRlJlbGF0aXZlICA9IDB4MDEwMCwKKyAgICAgICAg
ICAgIEZOb25OZWcgICAgPSAweDAyMDAKKyAgICAgICAgfTsKKworICAgICAgICBmcmllbmQgaW5s
aW5lIFVuaXRzIG9wZXJhdG9yfChVbml0cyBhLCBVbml0cyBiKQorICAgICAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VW5pdHM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihhKSB8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihiKSk7IH0KKworICAgICAgICBzdGF0aWMgYm9vbCB2YWxpZFVuaXQoVmFs
dWUqLCBVbml0cywgYm9vbCBzdHJpY3QpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBjc3MvY3NzcGFyc2VyLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBhbGxvdy10
YWJzCiAgIC0geAoKSW5kZXg6IGNzcy9jc3NfdmFsdWVpbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3Nz
L2Nzc192YWx1ZWltcGwuaAkocmV2aXNpb24gMTI4ODEpCisrKyBjc3MvY3NzX3ZhbHVlaW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0
Q2xpZW50LmgiCiAjaW5jbHVkZSAiY3NzX2Jhc2UuaCIKICNpbmNsdWRlICJjc3NfdmFsdWUuaCIK
KyNpbmNsdWRlIDxxcHRybGlzdC5oPgogI2luY2x1ZGUgPHF2YWx1ZWxpc3QuaD4KICNpbmNsdWRl
IDxreG1sY29yZS9QYXNzUmVmUHRyLmg+CiAKQEAgLTk4LDYgKzk5LDggQEAKIGNsYXNzIENTU1Zh
bHVlSW1wbCA6IHB1YmxpYyBTdHlsZUJhc2VJbXBsCiB7CiBwdWJsaWM6CisgICAgQ1NTVmFsdWVJ
bXBsKCkgOiBTdHlsZUJhc2VJbXBsKDApIHsgfQorCiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9y
dCBjc3NWYWx1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NWYWx1ZTo6Q1NTX0NVU1RPTTsgfQog
ICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7CiAgICAgdm9pZCBzZXRDc3NU
ZXh0KGNvbnN0IFN0cmluZyYpIHsgfSAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgpJbmRleDog
Y3NzL2Nzc19iYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzX2Jhc2UuY3BwCShyZXZpc2lv
biAxMjg4MSkKKysrIGNzcy9jc3NfYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3
IEBACiAgKiAgICAgICAgICAgICAgIDE5OTkgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3Jn
KQogICogICAgICAgICAgICAgICAyMDAxIEFuZHJlYXMgU2NobGFwYmFjaCAoc2NobHBiY2hAaWFt
LnVuaWJlLmNoKQogICogICAgICAgICAgICAgICAyMDAxLTIwMDMgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMywyMiArMjMsMTUgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgogICovCiAKLS8vI2RlZmluZSBDU1NfREVCVUcKLQogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgImtkZWJ1Zy5oIgotCiAjaW5jbHVkZSAiY3NzX2Jhc2UuaCIKIAotI2lmZGVm
IENTU19ERUJVRwotI2luY2x1ZGUgImNzc3Byb3BlcnRpZXMuaCIKLSNlbmRpZgotCisjaW5jbHVk
ZSAiRG9jdW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgotdXNpbmcg
bmFtZXNwYWNlIERPTTsKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworCiB2b2lkIFN0eWxlQmFzZUlt
cGw6OmNoZWNrTG9hZGVkKCkKIHsKICAgICBpZiAocGFyZW50KCkpIHBhcmVudCgpLT5jaGVja0xv
YWRlZCgpOwpAQCAtNzcsMjMgKzcwLDMzIEBACiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1TdHlsZUxpc3RJbXBsOjp+U3R5bGVMaXN0SW1wbCgpCit2b2lkIFN0eWxlTGlzdEltcGw6OmFw
cGVuZChQYXNzUmVmUHRyPFN0eWxlQmFzZUltcGw+IGNoaWxkKQogewotICAgIFN0eWxlQmFzZUlt
cGwgKm47CisgICAgU3R5bGVCYXNlSW1wbCogYyA9IGNoaWxkLmdldCgpOworICAgIG1fY2hpbGRy
ZW4uYXBwZW5kKGNoaWxkKTsKKyAgICBjLT5pbnNlcnRlZEludG9QYXJlbnQoKTsKK30KIAotICAg
IGlmKCFtX2xzdENoaWxkcmVuKSByZXR1cm47Cit2b2lkIFN0eWxlTGlzdEltcGw6Omluc2VydCh1
bnNpZ25lZCBwb3NpdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUJhc2VJbXBsPiBjaGlsZCkKK3sKKyAg
ICBTdHlsZUJhc2VJbXBsKiBjID0gY2hpbGQuZ2V0KCk7CisgICAgaWYgKHBvc2l0aW9uID49IGxl
bmd0aCgpKQorICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgZWxzZQorICAg
ICAgICBtX2NoaWxkcmVuLmluc2VydChwb3NpdGlvbiwgY2hpbGQpOworICAgIGMtPmluc2VydGVk
SW50b1BhcmVudCgpOworfQogCi0gICAgZm9yKCBuID0gbV9sc3RDaGlsZHJlbi0+Zmlyc3QoKTsg
biAhPSAwOyBuID0gbV9sc3RDaGlsZHJlbi0+bmV4dCgpICkKLSAgICB7Ci0gICAgICAgIG4tPnNl
dFBhcmVudCgwKTsKLSAgICAgICAgaWYoICFuLT5yZWZDb3VudCgpICkgZGVsZXRlIG47Ci0gICAg
fQotICAgIGRlbGV0ZSBtX2xzdENoaWxkcmVuOwordm9pZCBTdHlsZUxpc3RJbXBsOjpyZW1vdmUo
dW5zaWduZWQgcG9zaXRpb24pCit7CisgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jaGlsZHJlbi5yZW1vdmUocG9zaXRpb24pOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIENTU1NlbGVjdG9yOjpwcmludCh2b2lkKQor
dm9pZCBDU1NTZWxlY3Rvcjo6cHJpbnQoKQogewogICAgIGlmICh0YWdIaXN0b3J5KQogICAgICAg
ICB0YWdIaXN0b3J5LT5wcmludCgpOwpAQCAtMzAzLDcgKzMwNiw4IEBACiAgICAgICAgICAgICAg
ICAgc3RyICs9ICIqPSI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGtkV2FybmluZyg2MDgwKSA8PCAiVW5oYW5kbGVkIGNhc2Ug
aW4gQ1NTU3R5bGVSdWxlSW1wbDo6c2VsZWN0b3JUZXh0IDogbWF0Y2g9IiA8PCBjcy0+bWF0Y2gg
PDwgZW5kbDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChjcy0+bWF0Y2ggIT0gQ1NTU2VsZWN0b3I6
OlNldCkgewogICAgICAgICAgICAgc3RyICs9ICJcIiI7CkBAIC0zMjgsMyArMzMyLDUgQEAKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit9CkluZGV4OiBjc3MvY3NzX3N0eWxlc2hlZXRp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAkocmV2aXNp
b24gMTI4ODEpCisrKyBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQAogCiAKIFN0eWxlU2hlZXRJbXBsOjpTdHlsZVNoZWV0SW1wbChET006
Ok5vZGVJbXBsICpwYXJlbnROb2RlLCBET01TdHJpbmcgaHJlZikKLSAgICA6IFN0eWxlTGlzdElt
cGwoKQorICAgIDogU3R5bGVMaXN0SW1wbCgwKQogewogICAgIG1fcGFyZW50Tm9kZSA9IHBhcmVu
dE5vZGU7CiAgICAgbV9kaXNhYmxlZCA9IGZhbHNlOwpAQCAtOTEsNyArOTEsNiBAQAogQ1NTU3R5
bGVTaGVldEltcGw6OkNTU1N0eWxlU2hlZXRJbXBsKENTU1N0eWxlU2hlZXRJbXBsICpwYXJlbnRT
aGVldCwgRE9NU3RyaW5nIGhyZWYpCiAgICAgOiBTdHlsZVNoZWV0SW1wbChwYXJlbnRTaGVldCwg
aHJlZikKIHsKLSAgICBtX2xzdENoaWxkcmVuID0gbmV3IFFQdHJMaXN0PFN0eWxlQmFzZUltcGw+
OwogICAgIG1fZG9jID0gcGFyZW50U2hlZXQgPyBwYXJlbnRTaGVldC0+ZG9jKCkgOiAwOwogICAg
IG1faW1wbGljaXQgPSBmYWxzZTsKICAgICBtX25hbWVzcGFjZXMgPSAwOwpAQCAtMTAwLDcgKzk5
LDYgQEAKIENTU1N0eWxlU2hlZXRJbXBsOjpDU1NTdHlsZVNoZWV0SW1wbChOb2RlSW1wbCAqcGFy
ZW50Tm9kZSwgRE9NU3RyaW5nIGhyZWYsIGJvb2wgX2ltcGxpY2l0KQogICAgIDogU3R5bGVTaGVl
dEltcGwocGFyZW50Tm9kZSwgaHJlZikKIHsKLSAgICBtX2xzdENoaWxkcmVuID0gbmV3IFFQdHJM
aXN0PFN0eWxlQmFzZUltcGw+OwogICAgIG1fZG9jID0gcGFyZW50Tm9kZS0+Z2V0RG9jdW1lbnQo
KTsKICAgICBtX2ltcGxpY2l0ID0gX2ltcGxpY2l0OyAKICAgICBtX25hbWVzcGFjZXMgPSAwOwpA
QCAtMTA5LDY2ICsxMDcsMzUgQEAKIENTU1N0eWxlU2hlZXRJbXBsOjpDU1NTdHlsZVNoZWV0SW1w
bChDU1NSdWxlSW1wbCAqb3duZXJSdWxlLCBET01TdHJpbmcgaHJlZikKICAgICA6IFN0eWxlU2hl
ZXRJbXBsKG93bmVyUnVsZSwgaHJlZikKIHsKLSAgICBtX2xzdENoaWxkcmVuID0gbmV3IFFQdHJM
aXN0PFN0eWxlQmFzZUltcGw+OwogICAgIG1fZG9jID0gMDsKICAgICBtX2ltcGxpY2l0ID0gZmFs
c2U7CiAgICAgbV9uYW1lc3BhY2VzID0gMDsKIH0KIAotQ1NTU3R5bGVTaGVldEltcGw6OkNTU1N0
eWxlU2hlZXRJbXBsKERPTTo6Tm9kZUltcGwgKnBhcmVudE5vZGUsIENTU1N0eWxlU2hlZXRJbXBs
ICpvcmlnKQotICAgIDogU3R5bGVTaGVldEltcGwocGFyZW50Tm9kZSwgb3JpZy0+bV9zdHJIcmVm
KQotewotICAgIG1fbHN0Q2hpbGRyZW4gPSBuZXcgUVB0ckxpc3Q8U3R5bGVCYXNlSW1wbD47Ci0g
ICAgU3R5bGVCYXNlSW1wbCAqcnVsZTsKLSAgICBmb3IgKCBydWxlID0gb3JpZy0+bV9sc3RDaGls
ZHJlbi0+Zmlyc3QoKTsgcnVsZSAhPSAwOyBydWxlID0gb3JpZy0+bV9sc3RDaGlsZHJlbi0+bmV4
dCgpICkKLSAgICB7Ci0gICAgICAgIG1fbHN0Q2hpbGRyZW4tPmFwcGVuZChydWxlKTsKLSAgICAg
ICAgcnVsZS0+c2V0UGFyZW50KHRoaXMpOwotICAgIH0KLSAgICBtX2RvYyA9IHBhcmVudE5vZGUt
PmdldERvY3VtZW50KCk7Ci0gICAgbV9pbXBsaWNpdCA9IGZhbHNlOwotICAgIG1fbmFtZXNwYWNl
cyA9IDA7Ci19Ci0KLUNTU1N0eWxlU2hlZXRJbXBsOjpDU1NTdHlsZVNoZWV0SW1wbChDU1NSdWxl
SW1wbCAqb3duZXJSdWxlLCBDU1NTdHlsZVNoZWV0SW1wbCAqb3JpZykKLSAgICA6IFN0eWxlU2hl
ZXRJbXBsKG93bmVyUnVsZSwgb3JpZy0+bV9zdHJIcmVmKQotewotICAgIC8vIG1fbHN0Q2hpbGRy
ZW4gaXMgZGVsZXRlZCBpbiBTdHlsZUxpc3RJbXBsCi0gICAgbV9sc3RDaGlsZHJlbiA9IG5ldyBR
UHRyTGlzdDxTdHlsZUJhc2VJbXBsPjsKLSAgICBTdHlsZUJhc2VJbXBsICpydWxlOwotICAgIGZv
ciAoIHJ1bGUgPSBvcmlnLT5tX2xzdENoaWxkcmVuLT5maXJzdCgpOyBydWxlICE9IDA7IHJ1bGUg
PSBvcmlnLT5tX2xzdENoaWxkcmVuLT5uZXh0KCkgKQotICAgIHsKLSAgICAgICAgbV9sc3RDaGls
ZHJlbi0+YXBwZW5kKHJ1bGUpOwotICAgICAgICBydWxlLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAg
fQotICAgIG1fZG9jICA9IDA7Ci0gICAgbV9pbXBsaWNpdCA9IGZhbHNlOwotICAgIG1fbmFtZXNw
YWNlcyA9IDA7Ci19Ci0KIENTU1J1bGVJbXBsICpDU1NTdHlsZVNoZWV0SW1wbDo6b3duZXJSdWxl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUoKSkg
PyBzdGF0aWNfY2FzdDxDU1NSdWxlSW1wbCAqPihwYXJlbnQoKSkgOiAwOwogfQogCi11bnNpZ25l
ZCBDU1NTdHlsZVNoZWV0SW1wbDo6aW5zZXJ0UnVsZSggY29uc3QgRE9NU3RyaW5nICZydWxlLCB1
bnNpZ25lZCBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICkKK3Vuc2lnbmVkIENTU1N0eWxlU2hl
ZXRJbXBsOjppbnNlcnRSdWxlKGNvbnN0IERPTVN0cmluZyYgcnVsZSwgdW5zaWduZWQgaW5kZXgs
IGludCYgZXhjZXB0aW9uY29kZSkKIHsKICAgICBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpZiAo
aW5kZXggPiBtX2xzdENoaWxkcmVuLT5jb3VudCgpKSB7CisgICAgaWYgKGluZGV4ID4gbGVuZ3Ro
KCkpIHsKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBDU1NQYXJzZXIgcCggc3RyaWN0UGFy
c2luZyApOwotICAgIENTU1J1bGVJbXBsICpyID0gcC5wYXJzZVJ1bGUoIHRoaXMsIHJ1bGUgKTsK
KyAgICBDU1NQYXJzZXIgcCh1c2VTdHJpY3RQYXJzaW5nKCkpOworICAgIFJlZlB0cjxDU1NSdWxl
SW1wbD4gciA9IHAucGFyc2VSdWxlKHRoaXMsIHJ1bGUpOwogCiAgICAgaWYgKCFyKSB7CiAgICAg
ICAgIGV4Y2VwdGlvbmNvZGUgPSBDU1NFeGNlcHRpb246OlNZTlRBWF9FUlIgKyBDU1NFeGNlcHRp
b246Ol9FWENFUFRJT05fT0ZGU0VUOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisKICAgICAv
LyAjIyMKICAgICAvLyBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0aGUgcnVsZSBj
YW5ub3QgYmUgaW5zZXJ0ZWQgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBlLmcuIGlmIGFuCiAgICAg
Ly9AaW1wb3J0IHJ1bGUgaXMgaW5zZXJ0ZWQgYWZ0ZXIgYSBzdGFuZGFyZCBydWxlIHNldCBvciBv
dGhlciBhdC1ydWxlLgotICAgIG1fbHN0Q2hpbGRyZW4tPmluc2VydChpbmRleCwgcik7CisgICAg
aW5zZXJ0KGluZGV4LCByLnJlbGVhc2UoKSk7CiAgICAgCiAgICAgc3R5bGVTaGVldENoYW5nZWQo
KTsKICAgICAKQEAgLTE3OCw3ICsxNDUsNyBAQAogdW5zaWduZWQgQ1NTU3R5bGVTaGVldEltcGw6
OmFkZFJ1bGUoIGNvbnN0IERPTVN0cmluZyAmc2VsZWN0b3IsIGNvbnN0IERPTVN0cmluZyAmc3R5
bGUsIGludCBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBpZiAoaW5kZXggPT0g
LTEpCi0gICAgICAgIGluZGV4ID0gbV9sc3RDaGlsZHJlbi0+Y291bnQoKTsKKyAgICAgICAgaW5k
ZXggPSBsZW5ndGgoKTsKICAgICByZXR1cm4gaW5zZXJ0UnVsZShzZWxlY3RvciArICIgeyAiICsg
c3R5bGUgKyAiIH0iLCBpbmRleCwgZXhjZXB0aW9uY29kZSk7CiB9CiAKQEAgLTE4OSwxMyArMTU2
LDEzIEBACiAKIHZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmRlbGV0ZVJ1bGUoIHVuc2lnbmVkIGlu
ZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewotICAgIGV4Y2VwdGlvbmNvZGUgPSAwOwotICAg
IFN0eWxlQmFzZUltcGwgKmIgPSBtX2xzdENoaWxkcmVuLT50YWtlKGluZGV4KTsKLSAgICBpZiAo
IWIpIHsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpIHsKICAgICAgICAgZXhjZXB0aW9uY29k
ZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgYi0+ZGVyZWYoKTsKKworICAgIGV4Y2VwdGlvbmNvZGUgPSAwOworICAgIHJlbW92ZShp
bmRleCk7CiAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKIH0KIApAQCAtMjI4LDcgKzE5NSw3IEBA
CiAKIGJvb2wgQ1NTU3R5bGVTaGVldEltcGw6OnBhcnNlU3RyaW5nKGNvbnN0IERPTVN0cmluZyAm
c3RyaW5nLCBib29sIHN0cmljdCkKIHsKLSAgICBzdHJpY3RQYXJzaW5nID0gc3RyaWN0OworICAg
IHNldFN0cmljdFBhcnNpbmcoc3RyaWN0KTsKICAgICBDU1NQYXJzZXIgcCggc3RyaWN0ICk7CiAg
ICAgcC5wYXJzZVNoZWV0KCB0aGlzLCBzdHJpbmcgKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIz
NiwyNiArMjAzLDIzIEBACiAKIGJvb2wgQ1NTU3R5bGVTaGVldEltcGw6OmlzTG9hZGluZygpCiB7
Ci0gICAgU3R5bGVCYXNlSW1wbCAqcnVsZTsKLSAgICBmb3IgKCBydWxlID0gbV9sc3RDaGlsZHJl
bi0+Zmlyc3QoKTsgcnVsZSAhPSAwOyBydWxlID0gbV9sc3RDaGlsZHJlbi0+bmV4dCgpICkKLSAg
ICB7Ci0gICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ1NTSW1wb3J0UnVsZUltcGwgKmltcG9ydCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1
bGVJbXBsICo+KHJ1bGUpOwotICAgICAgICAgICAgaWYgKGltcG9ydC0+aXNMb2FkaW5nKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgU3R5bGVCYXNlSW1wbCogcnVsZSA9
IGl0ZW0oaSk7CisgICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSAmJiBzdGF0aWNfY2Fz
dDxDU1NJbXBvcnRSdWxlSW1wbCo+KHJ1bGUpLT5pc0xvYWRpbmcoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgQ1NTU3R5bGVT
aGVldEltcGw6OmNoZWNrTG9hZGVkKCkKIHsKLSAgICBpZiAoaXNMb2FkaW5nKCkpIHJldHVybjsK
LSAgICBpZiAocGFyZW50KCkpIHBhcmVudCgpLT5jaGVja0xvYWRlZCgpOwotICAgIGlmIChtX3Bh
cmVudE5vZGUpIG1fcGFyZW50Tm9kZS0+c2hlZXRMb2FkZWQoKTsKKyAgICBpZiAoaXNMb2FkaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHBhcmVudCgp
LT5jaGVja0xvYWRlZCgpOworICAgIGlmIChtX3BhcmVudE5vZGUpCisgICAgICAgIG1fcGFyZW50
Tm9kZS0+c2hlZXRMb2FkZWQoKTsKIH0KIAoga2h0bWw6OkRvY0xvYWRlciAqQ1NTU3R5bGVTaGVl
dEltcGw6OmRvY0xvYWRlcigpCkluZGV4OiBjc3MvY3NzX2dyYW1tYXIueQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBjc3MvY3NzX2dyYW1tYXIueQkocmV2aXNpb24gMTI4ODEpCisrKyBjc3MvY3NzX2dyYW1tYXIu
eQkod29ya2luZyBjb3B5KQpAQCAtNDksMTIgKzQ5LDggQEAKIC8vIHdpdGggJ3Byb3BzLT5pZCcg
YSBDU1MgcHJvcGVydHkgaW4gdGhlIHJhbmdlIGZyb20gQ1NTX1BST1BfTUlOIHRvCiAvLyAoYW5k
IGluY2x1ZGluZykgQ1NTX1BST1BfVE9UQUwtMQogCi0vLyB0dXJuIG9mZiBpbmxpbmluZyB0byB2
b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKLSN1bmRlZiBfX2lubGluZQotI2RlZmluZSBfX2lu
bGluZQogI2luY2x1ZGUgImNzc3Byb3BlcnRpZXMuYyIKICNpbmNsdWRlICJjc3N2YWx1ZXMuYyIK
LSN1bmRlZiBfX2lubGluZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMiw5ICsxMDgs
OSBAQAogICAgIHJldHVybiB2YWwtPmlkOwogfQogCi0KICNkZWZpbmUgWVlERUJVRyAwCiAjZGVm
aW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VyCisKICV9CiAKICVwdXJlX3BhcnNlcgpAQCAtMjY5LDgg
KzI2NSw3IEBACiAKIGtodG1sX3J1bGU6CiAgICAgS0hUTUxfUlVMRV9TWU0gJ3snIG1heWJlX3Nw
YWNlIHJ1bGVzZXQgbWF5YmVfc3BhY2UgJ30nIHsKLSAgICAgICAgQ1NTUGFyc2VyICpwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7Ci0gICAgICAgIHAtPnJ1bGUgPSAkNDsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cnVsZSA9ICQ0OwogICAgIH0K
IDsKIApAQCAtMjg0LDExICsyNzksMTEgQEAKICAgICBLSFRNTF9WQUxVRV9TWU0gJ3snIG1heWJl
X3NwYWNlIGV4cHIgJ30nIHsKICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyICo+KHBhcnNlcik7CiAgICAgICAgIGlmICgkNCkgewotICAgICAgICAgICAgcC0+dmFs
dWVMaXN0ID0gJDQ7CisgICAgICAgICAgICBwLT52YWx1ZUxpc3QgPSBwLT5zaW5rRmxvYXRpbmdW
YWx1ZUxpc3QoJDQpOwogICAgICAgICAgICAgcC0+cGFyc2VWYWx1ZShwLT5pZCwgcC0+aW1wb3J0
YW50KTsKKyAgICAgICAgICAgIGRlbGV0ZSBwLT52YWx1ZUxpc3Q7CisgICAgICAgICAgICBwLT52
YWx1ZUxpc3QgPSAwOwogICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBwLT52YWx1ZUxpc3Q7Ci0g
ICAgICAgIHAtPnZhbHVlTGlzdCA9IDA7CiAgICAgfQogOwogCkBAIC0zMTMsMTIgKzMwOCw5IEBA
CiBpbXBvcnRfbGlzdDoKICAvKiBlbXB0eSAqLwogIHwgaW1wb3J0X2xpc3QgaW1wb3J0IG1heWJl
X3NnbWwgewotICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFy
c2VyKTsKLSAgICAgaWYgKCAkMiAmJiBwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50
LT5pc0NTU1N0eWxlU2hlZXQoKSApIHsKLSAgICAgICAgIHAtPnN0eWxlRWxlbWVudC0+YXBwZW5k
KCAkMiApOwotICAgICB9IGVsc2UgewotICAgICAgICAgZGVsZXRlICQyOwotICAgICB9CisgICAg
IENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgIGlm
ICgkMiAmJiBwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hl
ZXQoKSkKKyAgICAgICAgIHAtPnN0eWxlRWxlbWVudC0+YXBwZW5kKCQyKTsKICB9CiAgOwogCkBA
IC0zMzAsMTIgKzMyMiw5IEBACiBydWxlX2xpc3Q6CiAgICAvKiBlbXB0eSAqLwogIHwgcnVsZV9s
aXN0IHJ1bGUgbWF5YmVfc2dtbCB7Ci0gICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlciAqPihwYXJzZXIpOwotICAgICBpZiAoICQyICYmIHAtPnN0eWxlRWxlbWVudCAmJiBw
LT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpICkgewotICAgICAgICAgcC0+c3R5bGVF
bGVtZW50LT5hcHBlbmQoICQyICk7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBkZWxldGUgJDI7
Ci0gICAgIH0KKyAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKTsKKyAgICAgaWYgKCQyICYmIHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQt
PmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgcC0+c3R5bGVFbGVtZW50LT5hcHBlbmQoJDIp
OwogIH0KICA7CiAKQEAgLTM1MSwxMyArMzQwLDcgQEAKIAogaW1wb3J0OgogICAgIElNUE9SVF9T
WU0gbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0
ICc7JyB7Ci0gICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihw
YXJzZXIpOwotICAgICAgICBpZiAoICQ1ICYmIHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVs
ZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpICkKLSAgICAgICAgICAgICQkID0gbmV3IENTU0ltcG9y
dFJ1bGVJbXBsKCBwLT5zdHlsZUVsZW1lbnQsIGRvbVN0cmluZygkMyksICQ1ICk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICAgICAgZGVsZXRlICQ1OwotICAg
ICAgICB9CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlciktPmNy
ZWF0ZUltcG9ydFJ1bGUoJDMsICQ1KTsKICAgICB9CiAgIHwgSU1QT1JUX1NZTSBlcnJvciBpbnZh
bGlkX2Jsb2NrIHsKICAgICAgICAgJCQgPSAwOwpAQCAtMzg5LDcgKzM3Miw3IEBACiAKIG1heWJl
X21lZGlhX2xpc3Q6CiAgICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFM
aXN0SW1wbCgpOworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
PmNyZWF0ZU1lZGlhTGlzdCgpOwogICAgICB9CiAgICAgIHwgbWVkaWFfbGlzdAogOwpAQCAtNDAw
LDcgKzM4Myw3IEBACiAgICAgICAgICQkID0gMDsKICAgICB9CiAgICAgfCBtZWRpdW0gewotICAg
ICAgICAkJCA9IG5ldyBNZWRpYUxpc3RJbXBsKCk7CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8
Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlTWVkaWFMaXN0KCk7CiAgICAgICAgICQkLT5hcHBl
bmRNZWRpdW0oIGRvbVN0cmluZygkMSkubG93ZXIoKSApOwogICAgIH0KICAgICB8IG1lZGlhX2xp
c3QgJywnIG1heWJlX3NwYWNlIG1lZGl1bSB7CkBAIC00MDksMzQgKzM5MiwyNiBAQAogICAgICAg
ICAgICAgJCQtPmFwcGVuZE1lZGl1bSggZG9tU3RyaW5nKCQ0KSApOwogICAgIH0KICAgICB8IG1l
ZGlhX2xpc3QgZXJyb3IgewotICAgICAgICBkZWxldGUgJDE7CiAgICAgICAgICQkID0gMDsKICAg
ICB9CiAgICAgOwogCiBtZWRpYToKICAgICBNRURJQV9TWU0gbWF5YmVfc3BhY2UgbWVkaWFfbGlz
dCAneycgbWF5YmVfc3BhY2UgcnVsZXNldF9saXN0ICd9JyB7Ci0gICAgICAgIENTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICBpZiAoICQzICYm
ICQ2ICYmCi0gICAgICAgICAgICAgcC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+
aXNDU1NTdHlsZVNoZWV0KCkgKSB7Ci0gICAgICAgICAgICAkJCA9IG5ldyBDU1NNZWRpYVJ1bGVJ
bXBsKCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCksICQz
LCAkNiApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICAg
ICAgZGVsZXRlICQzOwotICAgICAgICAgICAgZGVsZXRlICQ2OwotICAgICAgICB9CisgICAgICAg
ICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlTWVkaWFSdWxlKCQz
LCAkNik7CiAgICAgfQotICA7CisgICAgOwogCiBydWxlc2V0X2xpc3Q6CiAgICAgLyogZW1wdHkg
Ki8geyAkJCA9IDA7IH0KLSAgfCBydWxlc2V0X2xpc3QgcnVsZXNldCBtYXliZV9zcGFjZSB7Ci0g
ICAgICAkJCA9ICQxOwotICAgICAgaWYgKCAkMiApIHsKLSAgICAgICAgICBpZiAoICEkJCApICQk
ID0gbmV3IENTU1J1bGVMaXN0SW1wbCgpOwotICAgICAgICAgICQkLT5hcHBlbmQoICQyICk7Ci0g
ICAgICB9Ci0gIH0KKyAgICB8IHJ1bGVzZXRfbGlzdCBydWxlc2V0IG1heWJlX3NwYWNlIHsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICAgICAgaWYgKCQyKSB7CisgICAgICAgICAgICBpZiAoISQkKQor
ICAgICAgICAgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3Jl
YXRlUnVsZUxpc3QoKTsKKyAgICAgICAgICAgICQkLT5hcHBlbmQoJDIpOworICAgICAgICB9Cisg
ICAgfQogICAgIDsKIAogbWVkaXVtOgpAQCAtNDkzLDM5ICs0NjgsMjQgQEAKIAogcnVsZXNldDoK
ICAgICBzZWxlY3Rvcl9saXN0ICd7JyBtYXliZV9zcGFjZSBkZWNsYXJhdGlvbl9saXN0ICd9JyB7
Ci0gICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIp
OwotICAgICAgICBpZiAoJDEpIHsKLSAgICAgICAgICAgIENTU1N0eWxlUnVsZUltcGwqIHJ1bGUg
PSBuZXcgQ1NTU3R5bGVSdWxlSW1wbCggcC0+c3R5bGVFbGVtZW50ICk7Ci0gICAgICAgICAgICBy
dWxlLT5zZXRTZWxlY3RvcigkMSk7Ci0gICAgICAgICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihw
LT5jcmVhdGVTdHlsZURlY2xhcmF0aW9uKHJ1bGUpKTsKLSAgICAgICAgICAgICQkID0gcnVsZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICQkID0gMDsKLSAgICAgICAgICAgIHAtPmNs
ZWFyUHJvcGVydGllcygpOwotICAgICAgICB9CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlU3R5bGVSdWxlKCQxKTsKICAgICB9CiAgIDsKIAogc2Vs
ZWN0b3JfbGlzdDoKICAgICBzZWxlY3RvciB7Ci0gICAgICAgIGlmICggJDEgKSB7Ci0gICAgICAg
ICAgICAkJCA9ICQxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJCQgPSAwOwotICAg
ICAgICB9CisgICAgICAgICQkID0gJDE7CiAgICAgfQogICAgIHwgc2VsZWN0b3JfbGlzdCAnLCcg
bWF5YmVfc3BhY2Ugc2VsZWN0b3IgewotICAgICAgICBpZiAoICQxICYmICQ0ICkgeworICAgICAg
ICBpZiAoJDEgJiYgJDQpIHsKKyAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0
PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAg
JCQtPmFwcGVuZCggJDQgKTsKKyAgICAgICAgICAgICQkLT5hcHBlbmQocC0+c2lua0Zsb2F0aW5n
U2VsZWN0b3IoJDQpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGV0ZSAkMTsK
LSAgICAgICAgICAgIGRlbGV0ZSAkNDsKICAgICAgICAgICAgICQkID0gMDsKICAgICAgICAgfQog
ICAgIH0KICAgfCBzZWxlY3Rvcl9saXN0IGVycm9yIHsKLSAgICAgICAgZGVsZXRlICQxOwogICAg
ICAgICAkJCA9IDA7CiAgICAgfQogICAgOwpAQCAtNTM3LDM1ICs0OTcsMjUgQEAKICAgICB8IHNl
bGVjdG9yIGNvbWJpbmF0b3Igc2ltcGxlX3NlbGVjdG9yIHsKICAgICAgICAgJCQgPSAkMzsKICAg
ICAgICAgaWYgKCEkMSkgewotICAgICAgICAgICAgZGVsZXRlICQzOwogICAgICAgICAgICAgJCQg
PSAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCQkKSB7Ci0gICAgICAgICAgICBDU1NT
ZWxlY3RvciAqZW5kID0gJCQ7Ci0gICAgICAgICAgICB3aGlsZSggZW5kLT50YWdIaXN0b3J5ICkK
KyAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNl
cik7CisgICAgICAgICAgICBDU1NTZWxlY3RvciogZW5kID0gJCQ7CisgICAgICAgICAgICB3aGls
ZSAoZW5kLT50YWdIaXN0b3J5KQogICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9y
eTsKICAgICAgICAgICAgIGVuZC0+cmVsYXRpb24gPSAkMjsKLSAgICAgICAgICAgIGVuZC0+dGFn
SGlzdG9yeSA9ICQxOwotICAgICAgICAgICAgaWYgKCAkMiA9PSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudCB8fAotICAgICAgICAgICAgICAgICQyID09IENTU1NlbGVjdG9yOjpDaGlsZCApIHsKLSAg
ICAgICAgICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFy
c2VyKTsKLSAgICAgICAgICAgICAgICBET006OkRvY3VtZW50SW1wbCAqZG9jID0gcC0+ZG9jdW1l
bnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIGRvYyApCisgICAgICAgICAgICBlbmQtPnRhZ0hp
c3RvcnkgPSBwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMSk7CisgICAgICAgICAgICBpZiAoJDIg
PT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgfHwgJDIgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkKSB7
CisgICAgICAgICAgICAgICAgaWYgKFdlYkNvcmU6OkRvY3VtZW50SW1wbCogZG9jID0gcC0+ZG9j
dW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgZG9jLT5zZXRVc2VzRGVzY2VuZGFudFJ1bGVz
KHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoJDIgPT0gQ1NTU2Vs
ZWN0b3I6OkRpcmVjdEFkamFjZW50IHx8Ci0gICAgICAgICAgICAgICAgICAgICAkMiA9PSBDU1NT
ZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudCkgewotICAgICAgICAgICAgICAgIENTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICAgICAgICAgIERP
TTo6RG9jdW1lbnRJbXBsICpkb2MgPSBwLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgICAgIGlm
IChkb2MpCisgICAgICAgICAgICB9IGVsc2UgaWYgKCQyID09IENTU1NlbGVjdG9yOjpEaXJlY3RB
ZGphY2VudCB8fCAkMiA9PSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudCkgeworICAgICAg
ICAgICAgICAgIGlmIChXZWJDb3JlOjpEb2N1bWVudEltcGwqIGRvYyA9IHAtPmRvY3VtZW50KCkp
CiAgICAgICAgICAgICAgICAgICAgIGRvYy0+c2V0VXNlc1NpYmxpbmdSdWxlcyh0cnVlKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGV0ZSAkMTsKICAg
ICAgICAgfQogICAgIH0KICAgICB8IHNlbGVjdG9yIGVycm9yIHsKLSAgICAgICAgZGVsZXRlICQx
OwogICAgICAgICAkJCA9IDA7CiAgICAgfQogICAgIDsKQEAgLTU3OSw3ICs1MjksOCBAQAogc2lt
cGxlX3NlbGVjdG9yOgogICAgIGVsZW1lbnRfbmFtZSBtYXliZV9zcGFjZSB7CiAgICAgICAgIENT
U1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICAk
JCA9IG5ldyBDU1NTZWxlY3RvcihRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJpbmco
JDEpLCBwLT5kZWZhdWx0TmFtZXNwYWNlKSk7CisgICAgICAgICQkID0gcC0+Y3JlYXRlRmxvYXRp
bmdTZWxlY3RvcigpOworICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
YXRvbWljU3RyaW5nKCQxKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgfQogICAgIHwgZWxl
bWVudF9uYW1lIHNwZWNpZmllcl9saXN0IG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkMjsK
QEAgLTU5NywxMiArNTQ4LDEzIEBACiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGVsZW1l
bnRfbmFtZSBtYXliZV9zcGFjZSB7CiAgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVm
aXggPSBhdG9taWNTdHJpbmcoJDEpOwogICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgJCQgPSBwLT5jcmVhdGVGbG9hdGluZ1Nl
bGVjdG9yKCk7CiAgICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50
LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKFF1
YWxpZmllZE5hbWUobmFtZXNwYWNlUHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdG9taWNTdHJpbmcoJDMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1w
bCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgp
KSk7CisgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNTdHJpbmcoJDMpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNwYWNl
UHJlZml4KSk7CiAgICAgICAgIGVsc2UgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIGNhc2UgYmUg
YW4gZXJyb3I/Ci0gICAgICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcihRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBhdG9taWNTdHJpbmcoJDMpLCBwLT5kZWZhdWx0TmFtZXNwYWNlKSk7CisgICAg
ICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQz
KSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9y
ICd8JyBlbGVtZW50X25hbWUgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewogICAgICAgICAk
JCA9ICQ0OwpAQCAtNjUzLDI0ICs2MDUsMjQgQEAKICAgICB8IHNwZWNpZmllcl9saXN0IHNwZWNp
ZmllciB7CiAgICAgICAgICQkID0gJDE7CiAgICAgICAgIGlmICgkJCkgewotICAgICAgICAgICAg
Q1NTU2VsZWN0b3IgKmVuZCA9ICQxOwotICAgICAgICAgICAgd2hpbGUoIGVuZC0+dGFnSGlzdG9y
eSApCisgICAgICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpOworICAgICAgICAgICAgQ1NTU2VsZWN0b3IqIGVuZCA9ICQxOworICAgICAgICAgICAg
d2hpbGUgKGVuZC0+dGFnSGlzdG9yeSkKICAgICAgICAgICAgICAgICBlbmQgPSBlbmQtPnRhZ0hp
c3Rvcnk7CiAgICAgICAgICAgICBlbmQtPnJlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yOwotICAgICAgICAgICAgZW5kLT50YWdIaXN0b3J5ID0gJDI7CisgICAgICAgICAgICBlbmQt
PnRhZ0hpc3RvcnkgPSBwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMik7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCBzcGVjaWZpZXJfbGlzdCBlcnJvciB7Ci0gICAgICAgIGRlbGV0ZSAkMTsKICAg
ICAgICAgJCQgPSAwOwogICAgIH0KIDsKIAogc3BlY2lmaWVyOgogICAgIEhBU0ggewotICAgICAg
ICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwotICAgICAgICAkJC0+bWF0Y2ggPSBDU1NTZWxlY3Rv
cjo6SWQ7CiAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihw
YXJzZXIpOworICAgICAgICAkJCA9IHAtPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKKyAgICAg
ICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OklkOwogICAgICAgICBpZiAoIXAtPnN0cmljdCkK
ICAgICAgICAgICAgICQxLmxvd2VyKCk7CiAgICAgICAgICQkLT5hdHRyID0gaWRBdHRyOwpAQCAt
NjgzLDkgKzYzNSw5IEBACiAKIGNsYXNzOgogICAgICcuJyBJREVOVCB7Ci0gICAgICAgICQkID0g
bmV3IENTU1NlbGVjdG9yKCk7Ci0gICAgICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpDbGFz
czsKICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7CisgICAgICAgICQkID0gcC0+Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOworICAgICAgICAk
JC0+bWF0Y2ggPSBDU1NTZWxlY3Rvcjo6Q2xhc3M7CiAgICAgICAgIGlmICghcC0+c3RyaWN0KQog
ICAgICAgICAgICAgJDIubG93ZXIoKTsKICAgICAgICAgJCQtPmF0dHIgPSBjbGFzc0F0dHI7CkBA
IC03MDYsMTIgKzY1OCwxMiBAQAogCiBhdHRyaWI6CiAgICAgJ1snIG1heWJlX3NwYWNlIGF0dHJf
bmFtZSAnXScgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOworICAgICAgICAkJCA9
IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3Io
KTsKICAgICAgICAgJCQtPmF0dHIgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJp
bmcoJDMpLCBudWxsQXRvbSk7CiAgICAgICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpTZXQ7
CiAgICAgfQogICAgIHwgJ1snIG1heWJlX3NwYWNlIGF0dHJfbmFtZSBtYXRjaCBtYXliZV9zcGFj
ZSBpZGVudF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKLSAgICAgICAgJCQgPSBuZXcgQ1NT
U2VsZWN0b3IoKTsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
LT5jcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgICQkLT5hdHRyID0gUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgbnVsbEF0b20pOwogICAgICAgICAkJC0+
bWF0Y2ggPSAoQ1NTU2VsZWN0b3I6Ok1hdGNoKSQ0OwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9t
aWNTdHJpbmcoJDYpOwpAQCAtNzE5LDcgKzY3MSw3IEBACiAgICAgfCAnWycgbWF5YmVfc3BhY2Ug
bmFtZXNwYWNlX3NlbGVjdG9yICd8JyBhdHRyX25hbWUgJ10nIHsKICAgICAgICAgQXRvbWljU3Ry
aW5nIG5hbWVzcGFjZVByZWZpeCA9IGF0b21pY1N0cmluZygkMyk7CiAgICAgICAgIENTU1BhcnNl
ciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICAkJCA9IG5l
dyBDU1NTZWxlY3RvcigpOworICAgICAgICAkJCA9IHAtPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3Io
KTsKICAgICAgICAgJCQtPmF0dHIgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pY1N0cmluZygkNSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+
KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKTsK
QEAgLTcyOCw3ICs2ODAsNyBAQAogICAgIHwgJ1snIG1heWJlX3NwYWNlIG5hbWVzcGFjZV9zZWxl
Y3RvciAnfCcgYXR0cl9uYW1lIG1hdGNoIG1heWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBtYXli
ZV9zcGFjZSAnXScgewogICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4ID0gYXRv
bWljU3RyaW5nKCQzKTsKICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyICo+KHBhcnNlcik7Ci0gICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKCk7CisgICAgICAg
ICQkID0gcC0+Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOwogICAgICAgICAkJC0+YXR0ciA9IFF1
YWxpZmllZE5hbWUobmFtZXNwYWNlUHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXRvbWljU3RyaW5nKCQ1KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJt
aW5lTmFtZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpOwpAQCAtNzY1LDcgKzcxNyw3IEBACiAKIHBz
ZXVkbzoKICAgICAnOicgSURFTlQgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwor
ICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZsb2F0
aW5nU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzOwogICAgICAgICAkMi5sb3dlcigpOwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJp
bmcoJDIpOwpAQCAtNzc4LDE1ICs3MzAsMTYgQEAKICAgICAgICAgfQogICAgIH0KICAgICB8ICc6
JyAnOicgSURFTlQgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOworICAgICAgICAk
JCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZsb2F0aW5nU2VsZWN0
b3IoKTsKICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ7CiAg
ICAgICAgICQzLmxvd2VyKCk7CiAgICAgICAgICQkLT52YWx1ZSA9IGF0b21pY1N0cmluZygkMyk7
CiAgICAgfQogICAgIHwgJzonIEZVTkNUSU9OIG1heWJlX3NwYWNlIHNpbXBsZV9zZWxlY3RvciBt
YXliZV9zcGFjZSAnKScgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOworICAgICAg
ICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAg
ICAkJCA9IHAtPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPm1hdGNoID0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOwotICAgICAgICAkJC0+c2ltcGxlU2VsZWN0b3IgPSAk
NDsKKyAgICAgICAgJCQtPnNpbXBsZVNlbGVjdG9yID0gcC0+c2lua0Zsb2F0aW5nU2VsZWN0b3Io
JDQpOwogICAgICAgICAkMi5sb3dlcigpOwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJp
bmcoJDIpOwogICAgIH0KQEAgLTg0MiwxNiArNzk1LDEyIEBACiAgICAgcHJvcGVydHkgJzonIG1h
eWJlX3NwYWNlIGV4cHIgcHJpbyB7CiAgICAgICAgICQkID0gZmFsc2U7CiAgICAgICAgIENTU1Bh
cnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICBpZiAo
ICQxICYmICQ0ICkgewotICAgICAgICAgICAgcC0+dmFsdWVMaXN0ID0gJDQ7Ci0gICAgICAgICAg
ICBib29sIG9rID0gcC0+cGFyc2VWYWx1ZSggJDEsICQ1ICk7Ci0gICAgICAgICAgICBpZiAoIG9r
ICkKLSAgICAgICAgICAgICAgICAkJCA9IG9rOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZGVsZXRlICQ0OworICAgICAgICBpZiAoJDEgJiYgJDQpIHsKKyAgICAgICAgICAgIHAtPnZh
bHVlTGlzdCA9IHAtPnNpbmtGbG9hdGluZ1ZhbHVlTGlzdCgkNCk7CisgICAgICAgICAgICAkJCA9
IHAtPnBhcnNlVmFsdWUoJDEsICQ1KTsKKyAgICAgICAgICAgIGRlbGV0ZSBwLT52YWx1ZUxpc3Q7
CisgICAgICAgICAgICBwLT52YWx1ZUxpc3QgPSAwOwogICAgICAgICB9Ci0gICAgICAgIGRlbGV0
ZSBwLT52YWx1ZUxpc3Q7Ci0gICAgICAgIHAtPnZhbHVlTGlzdCA9IDA7CiAgICAgfQogICAgIHwK
ICAgICBwcm9wZXJ0eSBlcnJvciB7CkBAIC04NjIsNyArODExLDYgQEAKICAgICAgICAgLyogVGhl
IGRlZmF1bHQgbW92YWJsZSB0eXBlIHRlbXBsYXRlIGhhcyBsZXR0ZXItc3BhY2luZzogLm5vbmU7
ICBIYW5kbGUgdGhpcyBieSBsb29raW5nIGZvcgogICAgICAgICBlcnJvciB0b2tlbnMgYXQgdGhl
IHN0YXJ0IG9mIGFuIGV4cHIsIHJlY292ZXIgdGhlIGV4cHIgYW5kIHRoZW4gdHJlYXQgYXMgYW4g
ZXJyb3IsIGNsZWFuaW5nCiAgICAgICAgIHVwIGFuZCBkZWxldGluZyB0aGUgc2hpZnRlZCBleHBy
LiAgKi8KLSAgICAgICAgZGVsZXRlICQ1OwogICAgICAgICAkJCA9IGZhbHNlOwogICAgIH0KICAg
ICB8CkBAIC04OTUsMjQgKzg0MywyNSBAQAogCiBleHByOgogICAgIHRlcm0gewotICAgICAgICAk
JCA9IG5ldyBWYWx1ZUxpc3Q7Ci0gICAgICAgICQkLT5hZGRWYWx1ZSggJDEgKTsKKyAgICAgICAg
Q1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKKyAgICAgICAg
JCQgPSBwLT5jcmVhdGVGbG9hdGluZ1ZhbHVlTGlzdCgpOworICAgICAgICAkJC0+YWRkVmFsdWUo
cC0+c2lua0Zsb2F0aW5nVmFsdWUoJDEpKTsKICAgICB9CiAgICAgfCBleHByIG9wZXJhdG9yIHRl
cm0geworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpOwogICAgICAgICAkJCA9ICQxOwotICAgICAgICBpZiAoICQkICkgewotICAgICAgICAgICAg
aWYgKCAkMiApIHsKKyAgICAgICAgaWYgKCQkKSB7CisgICAgICAgICAgICBpZiAoJDIpIHsKICAg
ICAgICAgICAgICAgICBWYWx1ZSB2OwogICAgICAgICAgICAgICAgIHYuaWQgPSAwOwogICAgICAg
ICAgICAgICAgIHYudW5pdCA9IFZhbHVlOjpPcGVyYXRvcjsKICAgICAgICAgICAgICAgICB2LmlW
YWx1ZSA9ICQyOwotICAgICAgICAgICAgICAgICQkLT5hZGRWYWx1ZSggdiApOworICAgICAgICAg
ICAgICAgICQkLT5hZGRWYWx1ZSh2KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICQkLT5h
ZGRWYWx1ZSggJDMgKTsKKyAgICAgICAgICAgICQkLT5hZGRWYWx1ZShwLT5zaW5rRmxvYXRpbmdW
YWx1ZSgkMykpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgZXhwciBlcnJvciB7Ci0gICAgICAg
IGRlbGV0ZSAkMTsKICAgICAgICAgJCQgPSAwOwogICAgIH0KICAgOwpAQCAtOTc5LDIxICs5Mjgs
MjMgQEAKIAogCiBmdW5jdGlvbjoKLSAgRlVOQ1RJT04gbWF5YmVfc3BhY2UgZXhwciAnKScgbWF5
YmVfc3BhY2UgewotICAgICAgRnVuY3Rpb24gKmYgPSBuZXcgRnVuY3Rpb247Ci0gICAgICBmLT5u
YW1lID0gJDE7Ci0gICAgICBmLT5hcmdzID0gJDM7Ci0gICAgICAkJC5pZCA9IDA7Ci0gICAgICAk
JC51bml0ID0gVmFsdWU6OkZ1bmN0aW9uOwotICAgICAgJCQuZnVuY3Rpb24gPSBmOwotICB9IHwK
LSAgRlVOQ1RJT04gbWF5YmVfc3BhY2UgZXJyb3IgewotICAgICAgRnVuY3Rpb24gKmYgPSBuZXcg
RnVuY3Rpb247Ci0gICAgICBmLT5uYW1lID0gJDE7Ci0gICAgICBmLT5hcmdzID0gMDsKLSAgICAg
ICQkLmlkID0gMDsKLSAgICAgICQkLnVuaXQgPSBWYWx1ZTo6RnVuY3Rpb247Ci0gICAgICAkJC5m
dW5jdGlvbiA9IGY7CisgICAgRlVOQ1RJT04gbWF5YmVfc3BhY2UgZXhwciAnKScgbWF5YmVfc3Bh
Y2UgeworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpOworICAgICAgICBGdW5jdGlvbiogZiA9IHAtPmNyZWF0ZUZsb2F0aW5nRnVuY3Rpb24oKTsK
KyAgICAgICAgZi0+bmFtZSA9ICQxOworICAgICAgICBmLT5hcmdzID0gcC0+c2lua0Zsb2F0aW5n
VmFsdWVMaXN0KCQzKTsKKyAgICAgICAgJCQuaWQgPSAwOworICAgICAgICAkJC51bml0ID0gVmFs
dWU6OkZ1bmN0aW9uOworICAgICAgICAkJC5mdW5jdGlvbiA9IGY7CisgICAgfSB8CisgICAgRlVO
Q1RJT04gbWF5YmVfc3BhY2UgZXJyb3IgeworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBGdW5jdGlvbiogZiA9IHAtPmNyZWF0
ZUZsb2F0aW5nRnVuY3Rpb24oKTsKKyAgICAgICAgZi0+bmFtZSA9ICQxOworICAgICAgICBmLT5h
cmdzID0gMDsKKyAgICAgICAgJCQuaWQgPSAwOworICAgICAgICAkJC51bml0ID0gVmFsdWU6OkZ1
bmN0aW9uOworICAgICAgICAkJC5mdW5jdGlvbiA9IGY7CiAgIH0KICAgOwogLyoKQEAgLTEwMTks
NyArOTcwLDYgQEAKIAogaW52YWxpZF9pbXBvcnQ6CiAgICAgaW1wb3J0IHsKLSAgICAgICAgZGVs
ZXRlICQxOwogICAgICAgICAkJCA9IDA7CiAgICAgfQogICAgIDsKSW5kZXg6IGNzcy9jc3NfYmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NfYmFzZS5oCShyZXZpc2lvbiAxMjg4MSkKKysrIGNz
cy9jc3NfYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHly
aWdodCAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgICAgIDE5OTkgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMTAgKzI3
LDE1IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJkb21fcW5hbWUu
aCIKICNpbmNsdWRlICJTaGFyZWQuaCIKLSNpbmNsdWRlIDxxcHRybGlzdC5oPgorI2luY2x1ZGUg
PGt4bWxjb3JlL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgRE9NIHsKK25hbWVzcGFjZSBLWE1MQ29y
ZSB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7Cit9Cit1c2lu
ZyBLWE1MQ29yZTo6UGFzc1JlZlB0cjsKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworCiAgICAgY2xh
c3MgU3R5bGVTaGVldEltcGw7CiAgICAgY2xhc3MgTWVkaWFMaXN0OwogCkBAIC03MCwxNCArNzUs
MTIgQEAKICAgICBwdWJsaWM6CiAgICAgICAgIENTU1NlbGVjdG9yKCkKICAgICAgICAgICAgIDog
dGFnSGlzdG9yeSgwKSwgc2ltcGxlU2VsZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cihh
bnlRTmFtZSgpKSwgdGFnKGFueVFOYW1lKCkpLAotICAgICAgICAgICAgICByZWxhdGlvbiggRGVz
Y2VuZGFudCApLCBtYXRjaCggTm9uZSApLAotICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBf
cHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCisgICAgICAgICAgICAgIHJlbGF0aW9uKERlc2Nl
bmRhbnQpLCBtYXRjaChOb25lKSwgcHNldWRvSWQoMCksIF9wc2V1ZG9UeXBlKFBzZXVkb05vdFBh
cnNlZCkKICAgICAgICAge30KICAgICAgICAgCiAgICAgICAgIENTU1NlbGVjdG9yKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHFOYW1lKQogICAgICAgICAgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVT
ZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKGFueVFOYW1lKCkpLCB0YWcocU5hbWUp
LAotICAgICAgICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCApLCBtYXRjaCggTm9uZSApLAot
ICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQp
CisgICAgICAgICAgICAgIHJlbGF0aW9uKERlc2NlbmRhbnQpLCBtYXRjaChOb25lKSwgcHNldWRv
SWQoMCksIF9wc2V1ZG9UeXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAge30KIAogICAgICAg
ICB+Q1NTU2VsZWN0b3IoKSB7CkBAIC04Nyw3ICs5MCwxMCBAQAogICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCBhcHBlbmQoQ1NTU2VsZWN0b3IqIG4pIHsKLSAgICAgICAgICAgIGlmICghbmV4dFNl
bGVjdG9yKSBuZXh0U2VsZWN0b3IgPSBuOyBlbHNlIG5leHRTZWxlY3Rvci0+YXBwZW5kKG4pOwor
ICAgICAgICAgICAgQ1NTU2VsZWN0b3IqIGVuZCA9IHRoaXM7CisgICAgICAgICAgICB3aGlsZSAo
ZW5kLT5uZXh0U2VsZWN0b3IpCisgICAgICAgICAgICAgICAgZW5kID0gZW5kLT5uZXh0U2VsZWN0
b3I7CisgICAgICAgICAgICBlbmQtPm5leHRTZWxlY3RvciA9IG47CiAgICAgICAgIH0KICAgICAg
ICAgQ1NTU2VsZWN0b3IqIG5leHQoKSB7IHJldHVybiBuZXh0U2VsZWN0b3I7IH0KIApAQCAtMTAy
LDE1ICsxMDgsMTQgQEAKICAgICAgICAgRE9NU3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0Owog
CiAgICAgICAgIC8vIGNoZWNrcyBpZiB0aGUgMiBzZWxlY3RvcnMgKGluY2x1ZGluZyBzdWIgc2Vs
ZWN0b3JzKSBhZ3JlZS4KLSAgICAgICAgYm9vbCBvcGVyYXRvciA9PSAoIGNvbnN0IENTU1NlbGVj
dG9yICZvdGhlciApOworICAgICAgICBib29sIG9wZXJhdG9yID09KGNvbnN0IENTU1NlbGVjdG9y
Jik7CiAKICAgICAgICAgLy8gdGFnID09IC0xIG1lYW5zIGFwcGx5IHRvIGFsbCBlbGVtZW50cyAo
U2VsZWN0b3IgPSAqKQogCi0gICAgICAgIHVuc2lnbmVkIGludCBzcGVjaWZpY2l0eSgpOworICAg
ICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpOwogCiAgICAgICAgIC8qIGhvdyB0aGUgYXR0cmli
dXRlIHZhbHVlIGhhcyB0byBtYXRjaC4uLi4gRGVmYXVsdCBpcyBFeGFjdCAqLwotICAgICAgICBl
bnVtIE1hdGNoCi0gICAgICAgIHsKKyAgICAgICAgZW51bSBNYXRjaCB7CiAgICAgICAgICAgICBO
b25lID0gMCwKICAgICAgICAgICAgIElkLAogICAgICAgICAgICAgQ2xhc3MsCkBAIC0xMjUsOCAr
MTMwLDcgQEAKICAgICAgICAgICAgIEVuZCAgICAgICAgLy8gY3NzMzogRVtmb28kPSJiYXIiXQog
ICAgICAgICB9OwogCi0gICAgICAgIGVudW0gUmVsYXRpb24KLSAgICAgICAgeworICAgICAgICBl
bnVtIFJlbGF0aW9uIHsKICAgICAgICAgICAgIERlc2NlbmRhbnQgPSAwLAogICAgICAgICAgICAg
Q2hpbGQsCiAgICAgICAgICAgICBEaXJlY3RBZGphY2VudCwKQEAgLTEzNCw4ICsxMzgsNyBAQAog
ICAgICAgICAgICAgU3ViU2VsZWN0b3IKICAgICAgICAgfTsKIAotICAgICAgICBlbnVtIFBzZXVk
b1R5cGUKLSAgICAgICAgeworICAgICAgICBlbnVtIFBzZXVkb1R5cGUgewogICAgICAgICAgICAg
UHNldWRvTm90UGFyc2VkID0gMCwKICAgICAgICAgICAgIFBzZXVkb090aGVyLAogICAgICAgICAg
ICAgUHNldWRvRW1wdHksCkBAIC0xNjcsNyArMTcwLDcgQEAKICAgICAgICAgICAgIFBzZXVkb1Nl
bGVjdGlvbgogICAgICAgICB9OwogCi0gICAgICAgIGlubGluZSBQc2V1ZG9UeXBlIHBzZXVkb1R5
cGUoKSBjb25zdAorICAgICAgICBQc2V1ZG9UeXBlIHBzZXVkb1R5cGUoKSBjb25zdAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoX3BzZXVkb1R5cGUgPT0gUHNldWRvTm90UGFyc2VkKQogICAg
ICAgICAgICAgICAgIGV4dHJhY3RQc2V1ZG9UeXBlKCk7CkBAIC0xNzcsNyArMTgwLDcgQEAKICAg
ICAgICAgYm9vbCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55UU5hbWUoKTsgfQog
ICAgICAgICBib29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHIgIT0gYW55UU5h
bWUoKTsgfQogCi0gICAgICAgIG11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CisgICAg
ICAgIG11dGFibGUgQXRvbWljU3RyaW5nIHZhbHVlOwogICAgICAgICBDU1NTZWxlY3RvciogdGFn
SGlzdG9yeTsKICAgICAgICAgQ1NTU2VsZWN0b3IqIHNpbXBsZVNlbGVjdG9yOyAvLyBVc2VkIGZv
ciA6bm90LgogICAgICAgICBDU1NTZWxlY3RvciogbmV4dFNlbGVjdG9yOyAvLyB1c2VkIGZvciAs
LWNoYWluZWQgc2VsZWN0b3JzCkBAIC0xOTUsMjAgKzE5OCwxNyBAQAogICAgIH07CiAKICAgICAv
LyBhIHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0IGFsbCBoYXZlKQotICAg
IGNsYXNzIFN0eWxlQmFzZUltcGwgOiBwdWJsaWMgVHJlZVNoYXJlZDxTdHlsZUJhc2VJbXBsPgot
ICAgIHsKKyAgICBjbGFzcyBTdHlsZUJhc2VJbXBsIDogcHVibGljIFNoYXJlZDxTdHlsZUJhc2VJ
bXBsPiB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIFRyZWVTaGFyZWQ8U3R5bGVCYXNl
SW1wbD4gVHJlZVNoYXJlZDsKLSAgICAgICAgU3R5bGVCYXNlSW1wbCgpICB7IHN0cmljdFBhcnNp
bmcgPSB0cnVlOyBtdWx0aUxlbmd0aCA9IGZhbHNlOyB9Ci0gICAgICAgIFN0eWxlQmFzZUltcGwo
U3R5bGVCYXNlSW1wbCAqcCkgOiBUcmVlU2hhcmVkKHApIHsKLSAgICAgICAgICAgIHN0cmljdFBh
cnNpbmcgPSAocCA/IHAtPnVzZVN0cmljdFBhcnNpbmcoKSA6IHRydWUpOwotICAgICAgICAgICAg
bXVsdGlMZW5ndGggPSBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBTdHlsZUJhc2VJbXBsKFN0
eWxlQmFzZUltcGwqIHBhcmVudCkKKyAgICAgICAgICAgIDogbV9wYXJlbnQocGFyZW50KSwgbV9z
dHJpY3RQYXJzaW5nKCFwYXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpIHsgfQor
ICAgICAgICB2aXJ0dWFsIH5TdHlsZUJhc2VJbXBsKCkgeyB9CiAKLSAgICAgICAgdmlydHVhbCB+
U3R5bGVCYXNlSW1wbCgpIHt9CisgICAgICAgIFN0eWxlQmFzZUltcGwqIHBhcmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgICAgIHZvaWQgc2V0UGFyZW50KFN0eWxlQmFzZUlt
cGwqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQogCiAgICAgICAgIC8vIHJldHVybnMg
dGhlIHVybCBvZiB0aGUgc3R5bGUgc2hlZXQgdGhpcyBvYmplY3QgYmVsb25ncyB0bwotICAgICAg
ICBET01TdHJpbmcgYmFzZVVSTCgpOworICAgICAgICBTdHJpbmcgYmFzZVVSTCgpOwogCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KQEAgLTIzMCwzNiArMjMwLDM1IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVl
TGlzdCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlQ3Vz
dG9tKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgRE9NU3RyaW5nICYvKmNzc1N0cmluZyovLCBib29sID0gZmFsc2UpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0KKyAgICAgICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYsIGJvb2wgLypzdHJpY3QqLyA9IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKIAotICAgICAgICB2b2lkIHNldFN0cmljdFBhcnNp
bmcoIGJvb2wgYiApIHsgc3RyaWN0UGFyc2luZyA9IGI7IH0KLSAgICAgICAgYm9vbCB1c2VTdHJp
Y3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaWN0UGFyc2luZzsgfQorICAgICAgICB2b2lk
IHNldFN0cmljdFBhcnNpbmcoYm9vbCBiKSB7IG1fc3RyaWN0UGFyc2luZyA9IGI7IH0KKyAgICAg
ICAgYm9vbCB1c2VTdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RQYXJzaW5n
OyB9CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1BhcmVudCgpIHsgfQorCiAg
ICAgICAgIFN0eWxlU2hlZXRJbXBsKiBzdHlsZXNoZWV0KCk7CiAKLSAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZyA6IDE7Ci0gICAgICAgIGJvb2wgbXVsdGlMZW5ndGgg
OiAxOworICAgIHByaXZhdGU6CisgICAgICAgIFN0eWxlQmFzZUltcGwqIG1fcGFyZW50OworICAg
ICAgICBib29sIG1fc3RyaWN0UGFyc2luZzsKICAgICB9OwogCiAgICAgLy8gYSBzdHlsZSBjbGFz
cyB3aGljaCBoYXMgYSBsaXN0IG9mIGNoaWxkcmVuIChTdHlsZVNoZWV0cyBmb3IgZXhhbXBsZSkK
LSAgICBjbGFzcyBTdHlsZUxpc3RJbXBsIDogcHVibGljIFN0eWxlQmFzZUltcGwKLSAgICB7Cisg
ICAgY2xhc3MgU3R5bGVMaXN0SW1wbCA6IHB1YmxpYyBTdHlsZUJhc2VJbXBsIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFN0eWxlTGlzdEltcGwoKSA6IFN0eWxlQmFzZUltcGwoKSB7IG1fbHN0Q2hp
bGRyZW4gPSAwOyB9Ci0gICAgICAgIFN0eWxlTGlzdEltcGwoU3R5bGVCYXNlSW1wbCAqcGFyZW50
KSA6IFN0eWxlQmFzZUltcGwocGFyZW50KSB7IG1fbHN0Q2hpbGRyZW4gPSAwOyB9CisgICAgICAg
IFN0eWxlTGlzdEltcGwoU3R5bGVCYXNlSW1wbCogcGFyZW50KSA6IFN0eWxlQmFzZUltcGwocGFy
ZW50KSB7IH0KIAotICAgICAgICB2aXJ0dWFsIH5TdHlsZUxpc3RJbXBsKCk7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOyB9CisgICAgICAgIFN0
eWxlQmFzZUltcGwqIGl0ZW0odW5zaWduZWQgbnVtKSB7IHJldHVybiBudW0gPCBsZW5ndGgoKSA/
IG1fY2hpbGRyZW5bbnVtXS5nZXQoKSA6IDA7IH0KIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgo
KSB7IHJldHVybiBtX2xzdENoaWxkcmVuLT5jb3VudCgpOyB9Ci0gICAgICAgIFN0eWxlQmFzZUlt
cGwgKml0ZW0odW5zaWduZWQgbnVtKSB7IHJldHVybiBtX2xzdENoaWxkcmVuLT5hdChudW0pOyB9
CisgICAgICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8U3R5bGVCYXNlSW1wbD4pOworICAgICAg
ICB2b2lkIGluc2VydCh1bnNpZ25lZCBwb3NpdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUJhc2VJbXBs
Pik7CisgICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uKTsKIAotICAgICAgICB2
b2lkIGFwcGVuZChTdHlsZUJhc2VJbXBsICppdGVtKSB7IG1fbHN0Q2hpbGRyZW4tPmFwcGVuZChp
dGVtKTsgfQotCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBRUHRyTGlzdDxTdHlsZUJhc2VJbXBs
PiAqbV9sc3RDaGlsZHJlbjsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZUJhc2VJbXBsPiA+
IG1fY2hpbGRyZW47CiAgICAgfTsKIAogICAgIGludCBnZXRQcm9wZXJ0eUlEKGNvbnN0IGNoYXIg
KnRhZ1N0ciwgaW50IGxlbik7CkluZGV4OiBjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCShyZXZpc2lvbiAxMjg4MSkKKysrIGNz
cy9jc3Nfc3R5bGVzaGVldGltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksNiBAQAog
ICAgIENTU1N0eWxlU2hlZXRJbXBsKERPTTo6Tm9kZUltcGwgKnBhcmVudE5vZGUsIERPTTo6RE9N
U3RyaW5nIGhyZWYgPSBET01TdHJpbmcoKSwgYm9vbCBfaW1wbGljaXQgPSBmYWxzZSk7CiAgICAg
Q1NTU3R5bGVTaGVldEltcGwoQ1NTU3R5bGVTaGVldEltcGwgKnBhcmVudFNoZWV0LCBET006OkRP
TVN0cmluZyBocmVmID0gRE9NU3RyaW5nKCkpOwogICAgIENTU1N0eWxlU2hlZXRJbXBsKENTU1J1
bGVJbXBsICpvd25lclJ1bGUsIERPTTo6RE9NU3RyaW5nIGhyZWYgPSBET01TdHJpbmcoKSk7Ci0g
ICAgLy8gY2xvbmUgZnJvbSBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzaGVldAotICAgIENTU1N0
eWxlU2hlZXRJbXBsKERPTTo6Tm9kZUltcGwgKnBhcmVudE5vZGUsIENTU1N0eWxlU2hlZXRJbXBs
ICpvcmlnKTsKLSAgICBDU1NTdHlsZVNoZWV0SW1wbChDU1NSdWxlSW1wbCAqb3duZXJSdWxlLCBD
U1NTdHlsZVNoZWV0SW1wbCAqb3JpZyk7CiAgICAgCiAgICAgfkNTU1N0eWxlU2hlZXRJbXBsKCkg
eyBkZWxldGUgbV9uYW1lc3BhY2VzOyB9CiAgICAgCkluZGV4OiBrc3ZnMi9jc3MvS1NWR0NTU1Bh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvY3NzL0tTVkdDU1NQYXJzZXIuY3BwCShyZXZp
c2lvbiAxMjg4MSkKKysrIGtzdmcyL2Nzcy9LU1ZHQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CiAKQEAgLTIwLDIwICsyMSwyMyBAQAogICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgogKi8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmIFNWR19TVVBQT1JUCiAKICNp
bmNsdWRlICJrc3ZnLmgiCiAKKyNpbmNsdWRlICJTVkdQYWludEltcGwuaCIKKyNpbmNsdWRlICJj
c3NwYXJzZXIuaCIKKyNpbmNsdWRlICJjc3Nwcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiY3NzdmFs
dWVzLmgiCisjaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRpZXMuYyIKICNpbmNsdWRlICJrc3ZnY3Nz
dmFsdWVzLmMiCi0jaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRpZXMuYyIKIAotbmFtZXNwYWNlIERP
TSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordHlw
ZWRlZiBWYWx1ZSBLRE9NQ1NTVmFsdWU7Cit0eXBlZGVmIFZhbHVlTGlzdCBLRE9NQ1NTVmFsdWVM
aXN0OwogCi10eXBlZGVmIERPTTo6VmFsdWUgS0RPTUNTU1ZhbHVlOwotdHlwZWRlZiBET006OlZh
bHVlTGlzdCBLRE9NQ1NTVmFsdWVMaXN0OwotCiBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1
ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKICAgICBpZighdmFsdWVMaXN0KQpAQCAt
MzU4LDcgKzM2Miw2IEBACiAgICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnRJbXBsKFNWR19QQUlO
VFRZUEVfUkdCQ09MT1IsIDAsIG5ldyBET01TdHJpbmdJbXBsKHN0cikpOwogICAgIH0KICAgICBl
bHNlIGlmKHZhbHVlLT51bml0ID09IEtET01DU1NWYWx1ZTo6RnVuY3Rpb24gJiYgdmFsdWUtPmZ1
bmN0aW9uLT5hcmdzICE9IDAgJiYKLSAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+YXJncy0+
bnVtVmFsdWVzID09IDUgLyogcmdiICsgdHdvIGNvbW1hcyAqLyAmJgogICAgICAgICAgICAgcVN0
cmluZyh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUpLmxvd2VyKCkgPT0gInJnYigiKQogICAgIHsKICAg
ICAgICAgS0RPTUNTU1ZhbHVlTGlzdCAqYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsKQEAg
LTQxMiw3ICs0MTUsNiBAQAogICAgICAgICAgICAoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTikpCiAgICAgICAgIHJldHVybiBuZXcgU1ZH
Q29sb3JJbXBsKGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKS5pbXBsKCkpOwogICAgIGVsc2UgaWYo
dmFsdWUtPnVuaXQgPT0gS0RPTUNTU1ZhbHVlOjpGdW5jdGlvbiAmJiB2YWx1ZS0+ZnVuY3Rpb24t
PmFyZ3MgIT0gMCAmJgotICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5udW1WYWx1
ZXMgPT0gNSAvKiByZ2IgKyB0d28gY29tbWFzICovICYmCiAgICAgICAgICAgICBxU3RyaW5nKHZh
bHVlLT5mdW5jdGlvbi0+bmFtZSkubG93ZXIoKSA9PSAicmdiKCIpCiAgICAgewogICAgICAgICBL
RE9NQ1NTVmFsdWVMaXN0ICphcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzOwpAQCAtNDQ3LDcg
KzQ0OSw3IEBACiAgICAgcmV0dXJuIG5ldyBTVkdQYWludEltcGwoKTsKIH0KIAotfSAvLyBlbmQg
bmFtZXNwYWNlIERPTQorfQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIApJbmRleDoga3dxL0tX
UUxvYWRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRTG9hZGVyLm1tCShyZXZpc2lvbiAxMjg4
MSkKKysrIGt3cS9LV1FMb2FkZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMSw4ICsxMTEsMTAg
QEAKIHsKICAgICBNYWNGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxNYWNGcmFtZSAqPihkb2NM
b2FkZXItPmZyYW1lKCkpOwogICAgIAotICAgIGlmICghZnJhbWUpCisgICAgaWYgKCFmcmFtZSkg
eworICAgICAgICBkZWxldGUgam9iOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAg
IAogICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdlID0gZnJhbWUtPmJyaWRnZSgpOwogCg==
</data>
<flag name="review"
          id="1645"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>