<?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>23850</bug_id>
          
          <creation_ts>2009-02-09 10:39:45 -0800</creation_ts>
          <short_desc>Code cleanup of HTMLParser</short_desc>
          <delta_ts>2009-02-09 11:23:07 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Treat">manyoso</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108990</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-02-09 10:39:45 -0800</bug_when>
    <thetext>HTMLParser is using a mix of styles for member variables.  It also has some static functions which should take a &apos;const Node*&apos; rather than a &apos;Node*&apos; type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108992</commentid>
    <comment_count>1</comment_count>
      <attachid>27487</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-02-09 10:48:56 -0800</bug_when>
    <thetext>Created attachment 27487
Cleanup the code in HTMLParser</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27487</attachid>
            <date>2009-02-09 10:48:56 -0800</date>
            <delta_ts>2009-02-09 10:53:33 -0800</delta_ts>
            <desc>Cleanup the code in HTMLParser</desc>
            <filename>code-cleanup.patch</filename>
            <type>text/plain</type>
            <size>45394</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjZkNGZiNi4uNTg3YTVlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAwOS0wMi0wOSAgQWRhbSBUcmVhdCAg
PGFkYW0udHJlYXRAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzg1MAorICAgICAgICBDb2RlIGNsZWFudXAgb2YgSFRNTFBhcnNlciBjbGFzcyB3aGlj
aCB3YXMgdXNpbmcgYSBtaXggb2YgbV8qIGFuZCBiYXJlCisgICAgICAgIGNsYXNzIG1lbWJlciB2
YXJpYWJsZSBuYW1lcyB3aGljaCBoZWxwcyB0byBvYmZ1c2NhdGUgdGhlIGNvZGUuICBBbHNvCisg
ICAgICAgIGNoYW5nZWQgYSBmZXcgb2YgdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRvIHRh
a2UgYSBjb25zdCBwb2ludGVyIHR5cGUKKyAgICAgICAgYXMgdGhleSBzaG91bGQgbm90IGJlIG1v
ZGlmeWluZyB0aGUgbm9kZS4KKworICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxQYXJzZXI6On5IVE1MUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6
OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnNldEN1cnJlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6cGFyc2VUb2tlbik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUGFyc2VyOjpwYXJzZURvY3R5cGVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjppc1Rh
YmxlU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1RhYmxlUGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjppc1RhYmxlUmVsYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpp
bnNlcnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmhlYWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlcjo6cENsb3NlclN0cmljdENyZWF0ZUVycm9yQ2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyOjpnZXROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXI6OnByb2Nlc3NDbG9zZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpp
c0lubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0
eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6
cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6
cHVzaEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnBvcEJsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnBvcE9uZUJsb2NrQ29tbW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXI6Om1vdmVPbmVCbG9ja1RvU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlcjo6Y2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6
ZnJlZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyOjpzdGFydEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlcjo6ZmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6cmVwb3J0RXJy
b3JUb0NvbnNvbGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5oOgorCiAyMDA5LTAyLTA5
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxk
IGZpeApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwIGIvV2ViQ29yZS9o
dG1sL0hUTUxQYXJzZXIuY3BwCmluZGV4IDU0ZWY4NzMuLjhjYjg2ZTMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5j
cHAKQEAgLTExMywzNiArMTEzLDM2IEBAIHN0cnVjdCBIVE1MU3RhY2tFbGVtIDogTm9uY29weWFi
bGUgewogICovCiAKIEhUTUxQYXJzZXI6OkhUTUxQYXJzZXIoSFRNTERvY3VtZW50KiBkb2MsIGJv
b2wgcmVwb3J0RXJyb3JzKQotICAgIDogZG9jdW1lbnQoZG9jKQotICAgICwgY3VycmVudChkb2Mp
Ci0gICAgLCBkaWRSZWZDdXJyZW50KGZhbHNlKQotICAgICwgYmxvY2tTdGFjaygwKQorICAgIDog
bV9kb2N1bWVudChkb2MpCisgICAgLCBtX2N1cnJlbnQoZG9jKQorICAgICwgbV9kaWRSZWZDdXJy
ZW50KGZhbHNlKQorICAgICwgbV9ibG9ja1N0YWNrKDApCiAgICAgLCBtX2hhc1BFbGVtZW50SW5T
Y29wZShOb3RJblNjb3BlKQotICAgICwgaGVhZCgwKQotICAgICwgaW5Cb2R5KGZhbHNlKQotICAg
ICwgaGF2ZUNvbnRlbnQoZmFsc2UpCi0gICAgLCBoYXZlRnJhbWVTZXQoZmFsc2UpCisgICAgLCBt
X2hlYWQoMCkKKyAgICAsIG1faW5Cb2R5KGZhbHNlKQorICAgICwgbV9oYXZlQ29udGVudChmYWxz
ZSkKKyAgICAsIG1faGF2ZUZyYW1lU2V0KGZhbHNlKQogICAgICwgbV9pc1BhcnNpbmdGcmFnbWVu
dChmYWxzZSkKICAgICAsIG1fcmVwb3J0RXJyb3JzKHJlcG9ydEVycm9ycykKICAgICAsIG1faGFu
ZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzKGZhbHNlKQotICAgICwgaW5TdHJheVRhYmxl
Q29udGVudCgwKQorICAgICwgbV9pblN0cmF5VGFibGVDb250ZW50KDApCiB7CiB9CiAKIEhUTUxQ
YXJzZXI6OkhUTUxQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZykKLSAgICA6IGRvY3VtZW50
KGZyYWctPmRvY3VtZW50KCkpCi0gICAgLCBjdXJyZW50KGZyYWcpCi0gICAgLCBkaWRSZWZDdXJy
ZW50KHRydWUpCi0gICAgLCBibG9ja1N0YWNrKDApCisgICAgOiBtX2RvY3VtZW50KGZyYWctPmRv
Y3VtZW50KCkpCisgICAgLCBtX2N1cnJlbnQoZnJhZykKKyAgICAsIG1fZGlkUmVmQ3VycmVudCh0
cnVlKQorICAgICwgbV9ibG9ja1N0YWNrKDApCiAgICAgLCBtX2hhc1BFbGVtZW50SW5TY29wZShO
b3RJblNjb3BlKQotICAgICwgaGVhZCgwKQotICAgICwgaW5Cb2R5KHRydWUpCi0gICAgLCBoYXZl
Q29udGVudChmYWxzZSkKLSAgICAsIGhhdmVGcmFtZVNldChmYWxzZSkKKyAgICAsIG1faGVhZCgw
KQorICAgICwgbV9pbkJvZHkodHJ1ZSkKKyAgICAsIG1faGF2ZUNvbnRlbnQoZmFsc2UpCisgICAg
LCBtX2hhdmVGcmFtZVNldChmYWxzZSkKICAgICAsIG1faXNQYXJzaW5nRnJhZ21lbnQodHJ1ZSkK
ICAgICAsIG1fcmVwb3J0RXJyb3JzKGZhbHNlKQogICAgICwgbV9oYW5kbGluZ1Jlc2lkdWFsU3R5
bGVBY3Jvc3NCbG9ja3MoZmFsc2UpCi0gICAgLCBpblN0cmF5VGFibGVDb250ZW50KDApCisgICAg
LCBtX2luU3RyYXlUYWJsZUNvbnRlbnQoMCkKIHsKICAgICBpZiAoZnJhZykKICAgICAgICAgZnJh
Zy0+cmVmKCk7CkBAIC0xNTEsMjYgKzE1MSwyNiBAQCBIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKERv
Y3VtZW50RnJhZ21lbnQqIGZyYWcpCiBIVE1MUGFyc2VyOjp+SFRNTFBhcnNlcigpCiB7CiAgICAg
ZnJlZUJsb2NrKCk7Ci0gICAgaWYgKGRpZFJlZkN1cnJlbnQpIAotICAgICAgICBjdXJyZW50LT5k
ZXJlZigpOyAKKyAgICBpZiAobV9kaWRSZWZDdXJyZW50KQorICAgICAgICBtX2N1cnJlbnQtPmRl
cmVmKCk7IAogfQogCiB2b2lkIEhUTUxQYXJzZXI6OnJlc2V0KCkKIHsKICAgICBBU1NFUlQoIW1f
aXNQYXJzaW5nRnJhZ21lbnQpOwogCi0gICAgc2V0Q3VycmVudChkb2N1bWVudCk7CisgICAgc2V0
Q3VycmVudChtX2RvY3VtZW50KTsKIAogICAgIGZyZWVCbG9jaygpOwogCi0gICAgaW5Cb2R5ID0g
ZmFsc2U7Ci0gICAgaGF2ZUZyYW1lU2V0ID0gZmFsc2U7Ci0gICAgaGF2ZUNvbnRlbnQgPSBmYWxz
ZTsKLSAgICBpblN0cmF5VGFibGVDb250ZW50ID0gMDsKKyAgICBtX2luQm9keSA9IGZhbHNlOwor
ICAgIG1faGF2ZUZyYW1lU2V0ID0gZmFsc2U7CisgICAgbV9oYXZlQ29udGVudCA9IGZhbHNlOwor
ICAgIG1faW5TdHJheVRhYmxlQ29udGVudCA9IDA7CiAKICAgICBtX2N1cnJlbnRGb3JtRWxlbWVu
dCA9IDA7CiAgICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7Ci0gICAgaGVhZCA9IDA7CisgICAg
bV9oZWFkID0gMDsKICAgICBtX2lzaW5kZXhFbGVtZW50ID0gMDsKIAogICAgIG1fc2tpcE1vZGVU
YWcgPSBudWxsQXRvbTsKQEAgLTE3OCwxMyArMTc4LDEzIEBAIHZvaWQgSFRNTFBhcnNlcjo6cmVz
ZXQoKQogCiB2b2lkIEhUTUxQYXJzZXI6OnNldEN1cnJlbnQoTm9kZSogbmV3Q3VycmVudCkgCiB7
Ci0gICAgYm9vbCBkaWRSZWZOZXdDdXJyZW50ID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9
IGRvY3VtZW50OworICAgIGJvb2wgZGlkUmVmTmV3Q3VycmVudCA9IG5ld0N1cnJlbnQgJiYgbmV3
Q3VycmVudCAhPSBtX2RvY3VtZW50OwogICAgIGlmIChkaWRSZWZOZXdDdXJyZW50KSAKICAgICAg
ICAgbmV3Q3VycmVudC0+cmVmKCk7IAotICAgIGlmIChkaWRSZWZDdXJyZW50KSAKLSAgICAgICAg
Y3VycmVudC0+ZGVyZWYoKTsgCi0gICAgY3VycmVudCA9IG5ld0N1cnJlbnQ7Ci0gICAgZGlkUmVm
Q3VycmVudCA9IGRpZFJlZk5ld0N1cnJlbnQ7CisgICAgaWYgKG1fZGlkUmVmQ3VycmVudCkgCisg
ICAgICAgIG1fY3VycmVudC0+ZGVyZWYoKTsKKyAgICBtX2N1cnJlbnQgPSBuZXdDdXJyZW50Owor
ICAgIG1fZGlkUmVmQ3VycmVudCA9IGRpZFJlZk5ld0N1cnJlbnQ7CiB9CiAKIFBhc3NSZWZQdHI8
Tm9kZT4gSFRNTFBhcnNlcjo6cGFyc2VUb2tlbihUb2tlbiogdCkKQEAgLTE5Myw3ICsxOTMsNyBA
QCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4qIHQpCiAgICAg
ICAgIGlmICghdC0+YmVnaW5UYWcgJiYgdC0+dGFnTmFtZSA9PSBtX3NraXBNb2RlVGFnKQogICAg
ICAgICAgICAgLy8gRm91bmQgdGhlIGVuZCB0YWcgZm9yIHRoZSBjdXJyZW50IHNraXAgbW9kZSwg
c28gd2UncmUgZG9uZSBza2lwcGluZy4KICAgICAgICAgICAgIG1fc2tpcE1vZGVUYWcgPSBudWxs
QXRvbTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gdC0+dGFnTmFt
ZSkKKyAgICAgICAgZWxzZSBpZiAobV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSB0LT50YWdOYW1l
KQogICAgICAgICAgICAgLy8gRG8gbm90IHNraXAgPC9pZnJhbWU+LgogICAgICAgICAgICAgLy8g
RklYTUU6IFdoYXQgZG9lcyB0aGF0IGNvbW1lbnQgbWVhbj8gSG93IGNhbiBpdCBiZSByaWdodCB0
byBwYXJzZSBhIHRva2VuIHdpdGhvdXQgY2xlYXJpbmcgbV9za2lwTW9kZVRhZz8KICAgICAgICAg
ICAgIDsKQEAgLTIwMiw3ICsyMDIsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJzZXI6OnBh
cnNlVG9rZW4oVG9rZW4qIHQpCiAgICAgfQogCiAgICAgLy8gQXBwYXJlbnRseSBzb21lIHNpdGVz
IHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4uIEJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmly
ZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCi0gICAgaWYgKHQtPmlzQ2xvc2VUYWcoYnJU
YWcpICYmIGRvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSkgeworICAgIGlmICh0LT5pc0Nsb3NlVGFn
KGJyVGFnKSAmJiBtX2RvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSkgewogICAgICAgICByZXBvcnRF
cnJvcihNYWxmb3JtZWRCUkVycm9yKTsKICAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogICAg
IH0KQEAgLTIxNCwxNyArMjE0LDE3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6cGFy
c2VUb2tlbihUb2tlbiogdCkKIAogICAgIC8vIElnbm9yZSBzcGFjZXMsIGlmIHdlJ3JlIG5vdCBp
bnNpZGUgYSBwYXJhZ3JhcGggb3Igb3RoZXIgaW5saW5lIGNvZGUuCiAgICAgLy8gRG8gbm90IGFs
dGVyIHRoZSB0ZXh0IGlmIGl0IGlzIHBhcnQgb2YgYSBzY3JpcHRUYWcuCi0gICAgaWYgKHQtPnRh
Z05hbWUgPT0gdGV4dEF0b20gJiYgdC0+dGV4dCAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSAhPSBz
Y3JpcHRUYWcpIHsKLSAgICAgICAgaWYgKGluQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBjdXJyZW50
LT5sb2NhbE5hbWUoKSAhPSBzdHlsZVRhZyAmJgotICAgICAgICAgICAgY3VycmVudC0+bG9jYWxO
YW1lKCkgIT0gdGl0bGVUYWcgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkK
LSAgICAgICAgICAgIGhhdmVDb250ZW50ID0gdHJ1ZTsKKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0
ZXh0QXRvbSAmJiB0LT50ZXh0ICYmIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gc2NyaXB0VGFn
KSB7CisgICAgICAgIGlmIChtX2luQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBtX2N1cnJlbnQtPmxv
Y2FsTmFtZSgpICE9IHN0eWxlVGFnICYmCisgICAgICAgICAgICBtX2N1cnJlbnQtPmxvY2FsTmFt
ZSgpICE9IHRpdGxlVGFnICYmICF0LT50ZXh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisg
ICAgICAgICAgICBtX2hhdmVDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0
cjxOb2RlPiBuOwogICAgICAgICBTdHJpbmcgdGV4dCA9IHQtPnRleHQuZ2V0KCk7CiAgICAgICAg
IHVuc2lnbmVkIGNoYXJzTGVmdCA9IHRleHQubGVuZ3RoKCk7CiAgICAgICAgIHdoaWxlIChjaGFy
c0xlZnQpIHsKICAgICAgICAgICAgIC8vIHNwbGl0IGxhcmdlIGJsb2NrcyBvZiB0ZXh0IHRvIG5v
ZGVzIG9mIG1hbmFnZWFibGUgc2l6ZQotICAgICAgICAgICAgbiA9IFRleHQ6OmNyZWF0ZVdpdGhM
ZW5ndGhMaW1pdChkb2N1bWVudCwgdGV4dCwgY2hhcnNMZWZ0KTsKKyAgICAgICAgICAgIG4gPSBU
ZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQobV9kb2N1bWVudCwgdGV4dCwgY2hhcnNMZWZ0KTsK
ICAgICAgICAgICAgIGlmICghaW5zZXJ0Tm9kZShuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTI2OSw4ICsyNjksOCBA
QCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4qIHQpCiAgICAg
ICAgIGlmIChtX2N1cnJlbnRGb3JtRWxlbWVudCA9PSBuKQogICAgICAgICAgICAgbV9jdXJyZW50
Rm9ybUVsZW1lbnQgPSAwOwogCi0gICAgICAgIGlmIChoZWFkID09IG4pCi0gICAgICAgICAgICBo
ZWFkID0gMDsKKyAgICAgICAgaWYgKG1faGVhZCA9PSBuKQorICAgICAgICAgICAgbV9oZWFkID0g
MDsKIAogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yODAsMjUgKzI4MCwyNSBAQCBQYXNz
UmVmUHRyPE5vZGU+IEhUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4qIHQpCiB2b2lkIEhUTUxQ
YXJzZXI6OnBhcnNlRG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiogdCkKIHsKICAgICAvLyBJZ25v
cmUgYW55IGRvY3R5cGUgYWZ0ZXIgdGhlIGZpcnN0LiAgSWdub3JlIGRvY3R5cGVzIGluIGZyYWdt
ZW50cy4KLSAgICBpZiAoZG9jdW1lbnQtPmRvY3R5cGUoKSB8fCBtX2lzUGFyc2luZ0ZyYWdtZW50
IHx8IGN1cnJlbnQgIT0gZG9jdW1lbnQpCisgICAgaWYgKG1fZG9jdW1lbnQtPmRvY3R5cGUoKSB8
fCBtX2lzUGFyc2luZ0ZyYWdtZW50IHx8IG1fY3VycmVudCAhPSBtX2RvY3VtZW50KQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIE1ha2UgYSBuZXcgZG9jdHlwZSBub2RlIGFuZCBz
ZXQgaXQgYXMgb3VyIGRvY3R5cGUuCi0gICAgZG9jdW1lbnQtPmFkZENoaWxkKERvY3VtZW50VHlw
ZTo6Y3JlYXRlKGRvY3VtZW50LCBTdHJpbmc6OmFkb3B0KHQtPm1fbmFtZSksIFN0cmluZzo6YWRv
cHQodC0+bV9wdWJsaWNJRCksIFN0cmluZzo6YWRvcHQodC0+bV9zeXN0ZW1JRCkpKTsKKyAgICBt
X2RvY3VtZW50LT5hZGRDaGlsZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvY3VtZW50LCBTdHJp
bmc6OmFkb3B0KHQtPm1fbmFtZSksIFN0cmluZzo6YWRvcHQodC0+bV9wdWJsaWNJRCksIFN0cmlu
Zzo6YWRvcHQodC0+bV9zeXN0ZW1JRCkpKTsKIH0KIAotc3RhdGljIGJvb2wgaXNUYWJsZVNlY3Rp
b24oTm9kZSogbikKK3N0YXRpYyBib29sIGlzVGFibGVTZWN0aW9uKGNvbnN0IE5vZGUqIG4pCiB7
CiAgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUodGJvZHlUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGZv
b3RUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGhlYWRUYWcpOwogfQogCi1zdGF0aWMgYm9vbCBpc1Rh
YmxlUGFydChOb2RlKiBuKQorc3RhdGljIGJvb2wgaXNUYWJsZVBhcnQoY29uc3QgTm9kZSogbikK
IHsKICAgICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0clRhZykgfHwgbi0+aGFzVGFnTmFtZSh0ZFRh
ZykgfHwgbi0+aGFzVGFnTmFtZSh0aFRhZykgfHwKICAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24o
bik7CiB9CiAKLXN0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKE5vZGUqIG4pCitzdGF0aWMgYm9v
bCBpc1RhYmxlUmVsYXRlZChjb25zdCBOb2RlKiBuKQogewogICAgIHJldHVybiBuLT5oYXNUYWdO
YW1lKHRhYmxlVGFnKSB8fCBpc1RhYmxlUGFydChuKTsKIH0KQEAgLTMxNywzMyArMzE3LDMzIEBA
IGJvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlKiBuLCBib29sIGZsYXQpCiAgICAgCiAg
ICAgLy8gPHRhYmxlPiBpcyBuZXZlciBhbGxvd2VkIGluc2lkZSBzdHJheSB0YWJsZSBjb250ZW50
LiAgQWx3YXlzIHBvcCBvdXQgb2YgdGhlIHN0cmF5IHRhYmxlIGNvbnRlbnQKICAgICAvLyBhbmQg
Y2xvc2UgdXAgdGhlIGZpcnN0IHRhYmxlLCBhbmQgdGhlbiBzdGFydCB0aGUgc2Vjb25kIHRhYmxl
IGFzIGEgc2libGluZy4KLSAgICBpZiAoaW5TdHJheVRhYmxlQ29udGVudCAmJiBsb2NhbE5hbWUg
PT0gdGFibGVUYWcpCisgICAgaWYgKG1faW5TdHJheVRhYmxlQ29udGVudCAmJiBsb2NhbE5hbWUg
PT0gdGFibGVUYWcpCiAgICAgICAgIHBvcEJsb2NrKHRhYmxlVGFnKTsKICAgICAKICAgICAvLyBs
ZXQncyBiZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRvIGluc2VydCBpdC4KICAgICAvLyB0aGlzIHNo
b3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZAotICAgIE5vZGUqIG5ld05v
ZGUgPSBjdXJyZW50LT5hZGRDaGlsZChuKTsKKyAgICBOb2RlKiBuZXdOb2RlID0gbV9jdXJyZW50
LT5hZGRDaGlsZChuKTsKICAgICBpZiAoIW5ld05vZGUpCiAgICAgICAgIHJldHVybiBoYW5kbGVF
cnJvcihuLCBmbGF0LCBsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsgLy8gVHJ5IHRvIGhhbmRsZSB0
aGUgZXJyb3IuCiAKICAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3Mg
KGUuZy4sIDxpbWc+KSBvbiB0aGUgc3RhY2sKLSAgICBib29sIHBhcmVudEF0dGFjaGVkID0gY3Vy
cmVudC0+YXR0YWNoZWQoKTsKKyAgICBib29sIHBhcmVudEF0dGFjaGVkID0gbV9jdXJyZW50LT5h
dHRhY2hlZCgpOwogICAgIGlmICh0YWdQcmlvcml0eSA+IDAgJiYgIWZsYXQpIHsKLSAgICAgICAg
aWYgKG5ld05vZGUgPT0gY3VycmVudCkgeworICAgICAgICBpZiAobmV3Tm9kZSA9PSBtX2N1cnJl
bnQpIHsKICAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgb25seSBiZSBoaXQgd2hlbiBh
IGRlbW90ZWQgPGZvcm0+IGlzIHBsYWNlZCBpbnNpZGUgYSB0YWJsZS4KICAgICAgICAgICAgIEFT
U0VSVChsb2NhbE5hbWUgPT0gZm9ybVRhZyk7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcihGb3Jt
SW5zaWRlVGFibGVQYXJ0RXJyb3IsICZjdXJyZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAg
ICByZXBvcnRFcnJvcihGb3JtSW5zaWRlVGFibGVQYXJ0RXJyb3IsICZtX2N1cnJlbnQtPmxvY2Fs
TmFtZSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoZSBwdXNoQmxvY2sg
ZnVuY3Rpb24gdHJhbnNmZXJzIG93bmVyc2hpcCBvZiBjdXJyZW50IHRvIHRoZSBibG9jayBzdGFj
awotICAgICAgICAgICAgLy8gc28gd2UncmUgZ3VhcmFudGVlZCB0aGF0IGRpZFJlZkN1cnJlbnQg
aXMgZmFsc2UuIFRoZSBjb2RlIGJlbG93IGlzIGFuCisgICAgICAgICAgICAvLyBzbyB3ZSdyZSBn
dWFyYW50ZWVkIHRoYXQgbV9kaWRSZWZDdXJyZW50IGlzIGZhbHNlLiBUaGUgY29kZSBiZWxvdyBp
cyBhbgogICAgICAgICAgICAgLy8gb3B0aW1pemVkIHZlcnNpb24gb2Ygc2V0Q3VycmVudCB0aGF0
IHRha2VzIGFkdmFudGFnZSBvZiB0aGF0IGZhY3QgYW5kIGFsc28KICAgICAgICAgICAgIC8vIGFz
c3VtZXMgdGhhdCBuZXdOb2RlIGlzIG5laXRoZXIgMCBub3IgYSBwb2ludGVyIHRvIHRoZSBkb2N1
bWVudC4KICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKICAg
ICAgICAgICAgIG5ld05vZGUtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICBB
U1NFUlQoIWRpZFJlZkN1cnJlbnQpOworICAgICAgICAgICAgQVNTRVJUKCFtX2RpZFJlZkN1cnJl
bnQpOwogICAgICAgICAgICAgbmV3Tm9kZS0+cmVmKCk7IAotICAgICAgICAgICAgY3VycmVudCA9
IG5ld05vZGU7Ci0gICAgICAgICAgICBkaWRSZWZDdXJyZW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
IG1fY3VycmVudCA9IG5ld05vZGU7CisgICAgICAgICAgICBtX2RpZFJlZkN1cnJlbnQgPSB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQo
KSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwpAQCAt
MzUzLDggKzM1Myw4IEBAIGJvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlKiBuLCBib29s
IGZsYXQpCiAgICAgICAgIG4tPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogICAgIH0KIAotICAg
IGlmIChsb2NhbE5hbWUgPT0gaHRtbFRhZyAmJiBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAg
ZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWls
YWJsZSgpOworICAgIGlmIChsb2NhbE5hbWUgPT0gaHRtbFRhZyAmJiBtX2RvY3VtZW50LT5mcmFt
ZSgpKQorICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1
bWVudEVsZW1lbnRBdmFpbGFibGUoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzY5LDI4
ICszNjksMjggQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZs
YXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLAogICAgIGlmIChuLT5pc0hUTUxFbGVt
ZW50KCkpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGggPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KG4pOwogICAgICAgICBpZiAoaC0+aGFzTG9jYWxOYW1lKHRyVGFnKSB8fCBoLT5oYXNMb2Nh
bE5hbWUodGhUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZSh0ZFRhZykpIHsKLSAgICAgICAgICAgIGlm
IChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgewotICAg
ICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZFRhYmxlUGFydEVycm9yLCAmbG9jYWxO
YW1lLCAmY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgaWYgKG1faW5TdHJheVRh
YmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkgeworICAgICAgICAgICAg
ICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZFRhYmxlUGFydEVycm9yLCAmbG9jYWxOYW1lLCAmbV9j
dXJyZW50LT5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgLy8gcG9wIG91dCB0byB0aGUg
bmVhcmVzdCBlbmNsb3NpbmcgdGFibGUtcmVsYXRlZCB0YWcuCi0gICAgICAgICAgICAgICAgd2hp
bGUgKGJsb2NrU3RhY2sgJiYgIWlzVGFibGVSZWxhdGVkKGN1cnJlbnQpKQorICAgICAgICAgICAg
ICAgIHdoaWxlIChtX2Jsb2NrU3RhY2sgJiYgIWlzVGFibGVSZWxhdGVkKG1fY3VycmVudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGluc2VydE5vZGUobik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKGhlYWRUYWcpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1l
bnROb2RlKCkgJiYgIWN1cnJlbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykpIHsKKyAgICAgICAgICAg
IGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFtX2N1cnJlbnQtPmhhc1RhZ05h
bWUoaHRtbFRhZykpIHsKICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFk
RXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUobWV0YVRhZykgfHwgaC0+aGFzTG9jYWxO
YW1lKGxpbmtUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShiYXNlVGFnKSkgewogICAgICAgICAgICAg
Ym9vbCBjcmVhdGVkSGVhZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCFoZWFkKSB7CisgICAg
ICAgICAgICBpZiAoIW1faGVhZCkgewogICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKICAg
ICAgICAgICAgICAgICBjcmVhdGVkSGVhZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaGVhZCkgeworICAgICAgICAgICAgaWYgKG1faGVhZCkgewogICAgICAgICAgICAg
ICAgIGlmICghY3JlYXRlZEhlYWQpCi0gICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1p
c3BsYWNlZEhlYWRDb250ZW50RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50LT5sb2NhbE5hbWUo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhlYWQtPmFkZENoaWxkKG4pKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRDb250ZW50RXJyb3IsICZsb2NhbE5h
bWUsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFk
LT5hZGRDaGlsZChuKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkg
JiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRh
Y2goKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTgsMTMgKzM5OCwx
MyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
aHRtbFRhZykpIHsKLSAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpICYmIGRv
Y3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShodG1sVGFnKSkgeworICAgICAg
ICAgICAgaWYgKCFtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpICYmIG1fZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKGh0bWxUYWcpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHJlcG9ydEVycm9yKFJlZHVuZGFudEhUTUxCb2R5RXJyb3IsICZsb2NhbE5hbWUpOwogICAgICAg
ICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEhUTUw+IGVsZW1lbnQuLi4uIGFwcGx5
IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCiAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ug
c3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCiAgICAg
ICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCogbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBFbGVtZW50KiBleGlz
dGluZ0hUTUwgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVu
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZXhpc3RpbmdIVE1MID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgTmFtZWRBdHRyTWFwKiBibWFwID0gZXhpc3RpbmdIVE1MLT5hdHRyaWJ1dGVz
KGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFwICYm
IGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJp
YnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CkBAIC00MTYsMTkgKzQxNiwxOSBAQCBi
b29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAo
aC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcpKSB7
CiAgICAgICAgICAgICBib29sIGNyZWF0ZWRIZWFkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
IWhlYWQpIHsKKyAgICAgICAgICAgIGlmICghbV9oZWFkKSB7CiAgICAgICAgICAgICAgICAgY3Jl
YXRlSGVhZCgpOwogICAgICAgICAgICAgICAgIGNyZWF0ZWRIZWFkID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChoZWFkKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbmV3
Tm9kZSA9IGhlYWQtPmFkZENoaWxkKG4pOworICAgICAgICAgICAgaWYgKG1faGVhZCkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBtX2hlYWQtPmFkZENoaWxkKG4pOwogICAgICAg
ICAgICAgICAgIGlmICghbmV3Tm9kZSkgewogICAgICAgICAgICAgICAgICAgICBzZXRTa2lwTW9k
ZShoLT50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWNy
ZWF0ZWRIZWFkKQotICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFk
Q29udGVudEVycm9yLCAmbG9jYWxOYW1lLCAmY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAg
ICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkQ29udGVudEVycm9yLCAmbG9j
YWxOYW1lLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAg
ICAgICAgIG5ld05vZGUtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CkBAIC00MzcsMTggKzQzNywx
OCBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsCiAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFj
aCgpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGluQm9keSkgeworICAgICAgICAgICAgaWYgKG1faW5Cb2R5KSB7CiAgICAgICAg
ICAgICAgICAgc2V0U2tpcE1vZGUoaC0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2Fs
TmFtZShib2R5VGFnKSkgewotICAgICAgICAgICAgaWYgKGluQm9keSAmJiBkb2N1bWVudC0+Ym9k
eSgpKSB7CisgICAgICAgICAgICBpZiAobV9pbkJvZHkgJiYgbV9kb2N1bWVudC0+Ym9keSgpKSB7
CiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxCT0RZPiBlbGVtZW50Li4uLiBh
cHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQogICAgICAgICAgICAgICAgIC8vIG1ha2Ug
c3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCiAgICAg
ICAgICAgICAgICAgLy8gc29tZSBzaXRlcyB1c2UgPGJvZHkgYmdjb2xvcj1yaWdodGNvbG9yPi4u
Ljxib2R5IGJnY29sb3I9d3Jvbmdjb2xvcj4KICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihS
ZWR1bmRhbnRIVE1MQm9keUVycm9yLCAmbG9jYWxOYW1lKTsKICAgICAgICAgICAgICAgICBOYW1l
ZEF0dHJNYXAqIG1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+YXR0cmlidXRlcyh0cnVl
KTsKLSAgICAgICAgICAgICAgICBFbGVtZW50KiBleGlzdGluZ0JvZHkgPSBkb2N1bWVudC0+Ym9k
eSgpOworICAgICAgICAgICAgICAgIEVsZW1lbnQqIGV4aXN0aW5nQm9keSA9IG1fZG9jdW1lbnQt
PmJvZHkoKTsKICAgICAgICAgICAgICAgICBOYW1lZEF0dHJNYXAqIGJtYXAgPSBleGlzdGluZ0Jv
ZHktPmF0dHJpYnV0ZXMoZmFsc2UpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbCA9
IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7CiAgICAgICAgICAgICAgICAgICAg
IEF0dHJpYnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CkBAIC00NTcsMTEgKzQ1Nywx
MSBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYg
KCFjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAgZWxzZSBpZiAoIW1fY3Vy
cmVudC0+aXNEb2N1bWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKSB7CiAgICAgICAgICAg
ICBpZiAobV9jdXJyZW50TWFwRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9y
KE1pc3BsYWNlZEFyZWFFcnJvciwgJmN1cnJlbnQtPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAg
ICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRBcmVhRXJyb3IsICZtX2N1cnJlbnQtPmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRNYXBFbGVtZW50LT5hZGRDaGlsZChuKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21l
bnQpCiAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwpAQCAtNDcwLDE4ICs0NzAsMTgg
QEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQsIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShjb2xncm91cFRh
ZykgfHwgaC0+aGFzTG9jYWxOYW1lKGNhcHRpb25UYWcpKSB7Ci0gICAgICAgICAgICBpZiAoaXNU
YWJsZVJlbGF0ZWQoY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFj
ayAmJiBpc1RhYmxlUGFydChjdXJyZW50KSkKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUmVsYXRl
ZChtX2N1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fYmxvY2tTdGFjayAmJiBp
c1RhYmxlUGFydChtX2N1cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygp
OwogICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChuLT5pc0NvbW1lbnROb2RlKCkgJiYgIWhlYWQpCisg
ICAgfSBlbHNlIGlmIChuLT5pc0NvbW1lbnROb2RlKCkgJiYgIW1faGVhZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gMi4gTmV4dCB3ZSBleGFtaW5lIG91ciBjdXJyZW50bHkgYWN0
aXZlIGVsZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nLgotICAgIGlmIChj
dXJyZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGggPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KGN1cnJlbnQpOworICAgIGlmIChtX2N1cnJlbnQtPmlzSFRN
TEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudCogaCA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4obV9jdXJyZW50KTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJyZW50
VGFnTmFtZSA9IGgtPmxvY2FsTmFtZSgpOwogICAgICAgICBpZiAoaC0+aGFzTG9jYWxOYW1lKGh0
bWxUYWcpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWx0ID0gbi0+aXNIVE1MRWxlbWVu
dCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKSA6IDA7CkBAIC00OTAsOSArNDkwLDkg
QEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQsIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLAogICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxO
YW1lKG9iamVjdFRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUoZW1iZWRUYWcpIHx8CiAgICAgICAg
ICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpIHx8IGVsdC0+aGFzTG9jYWxOYW1l
KGlzaW5kZXhUYWcpIHx8CiAgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoYmFzZVRh
ZykpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoZWFkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50KGhlYWRUYWcsIGRvY3VtZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgZSA9IGhlYWQ7CisgICAgICAgICAgICAgICAgaWYgKCFtX2hlYWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9oZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudChoZWFkVGFnLCBt
X2RvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZSA9IG1faGVhZDsKICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTAyLDggKzUwMiw4IEBAIGJvb2wgSFRNTFBhcnNl
cjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSwKICAgICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXZlRnJhbWVTZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnQoYm9keVRhZywgZG9jdW1lbnQpOworICAg
ICAgICAgICAgICAgIGlmICghbV9oYXZlRnJhbWVTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZSA9IG5ldyBIVE1MQm9keUVsZW1lbnQoYm9keVRhZywgbV9kb2N1bWVudCk7CiAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0Qm9keSgpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUp
OwogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKQEAgLTUxNSw5ICs1MTUsOSBA
QCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYm9k
eSBzdGFydHMgaGVyZS4uLgotICAgICAgICAgICAgICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2hhdmVGcmFtZVNldCkgewogICAgICAgICAgICAgICAgICAg
ICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcg
SFRNTEJvZHlFbGVtZW50KGJvZHlUYWcsIGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
ZSA9IG5ldyBIVE1MQm9keUVsZW1lbnQoYm9keVRhZywgbV9kb2N1bWVudCk7CiAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0Qm9keSgpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUp
OwogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKQEAgLTU0NSw3ICs1NDUsNyBA
QCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
ICAgICAgLy8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9uZQogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
OwogICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAg
ICAgICAgICAgICAgICAvLyBBIHNjcmlwdCBtYXkgaGF2ZSByZW1vdmVkIHRoZSBjdXJyZW50IG5v
ZGUncyBwYXJlbnQgZnJvbSB0aGUgRE9NCiAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzNwpAQCAtNTc3LDI0ICs1NzcsMjQgQEAgYm9v
bCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9j
ayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEN1cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29u
dGVudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFi
bGVDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luU3RyYXlU
YWJsZUNvbnRlbnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrU3RhY2st
PnN0cmF5VGFibGVDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCFlYykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZSh0clRhZykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fY3VycmVudC0+aGFzVGFnTmFtZSh0clRhZykpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKFRhYmxlUGFydFJlcXVpcmVkRXJyb3IsICZsb2Nh
bE5hbWUsICZ0ZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlID0g
bmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50KHRkVGFnLCBkb2N1bWVudCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIG1f
ZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudC0+aGFz
VGFnTmFtZSh0YWJsZVRhZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJl
cG9ydCBhbiBlcnJvciBpbiB0aGlzIGNhc2UsIHNpbmNlIG1ha2luZyBhIDx0Ym9keT4gaGFwcGVu
cyBhbGwgdGhlIHRpbWUgd2hlbiB5b3UgaGF2ZSA8dGFibGU+PHRyPiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFuZCBpdCBpc24ndCByZWFsbHkgYSBwYXJzZSBlcnJvciBwZXIgc2UuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHRi
b2R5VGFnLCBkb2N1bWVudCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudCh0Ym9keVRhZywgbV9kb2N1bWVudCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihUYWJs
ZVBhcnRSZXF1aXJlZEVycm9yLCAmbG9jYWxOYW1lLCAmdHJUYWcubG9jYWxOYW1lKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVSb3dFbGVtZW50KHRyVGFnLCBk
b2N1bWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0Vs
ZW1lbnQodHJUYWcsIG1fZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKQEAgLTYyOCwyMCArNjI4LDIwIEBAIGJvb2wg
SFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwKICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsK
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKCFoLT5oYXNM
b2NhbE5hbWUoYm9keVRhZykpIHsKLSAgICAgICAgICAgIGlmIChpc0lubGluZShjdXJyZW50KSkg
eworICAgICAgICAgICAgaWYgKGlzSW5saW5lKG1fY3VycmVudCkpIHsKICAgICAgICAgICAgICAg
ICBwb3BJbmxpbmVCbG9ja3MoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY3VycmVudC0+aXNEb2N1bWVu
dE5vZGUoKSkgeworICAgIH0gZWxzZSBpZiAobV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKSB7
CiAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgIFRleHQqIHQgPSBz
dGF0aWNfY2FzdDxUZXh0Kj4obik7CiAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hp
dGVzcGFjZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmICghZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBl
ID0gbmV3IEhUTUxIdG1sRWxlbWVudChodG1sVGFnLCBkb2N1bWVudCk7CisgICAgICAgIGlmICgh
bV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGUgPSBuZXcgSFRN
TEh0bWxFbGVtZW50KGh0bWxUYWcsIG1fZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9k
ZShlKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC02NDksNyAr
NjQ5LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQs
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLAogCiAgICAgLy8gMy4gSWYgd2UgY291bGRu
J3QgaGFuZGxlIHRoZSBlcnJvciwganVzdCByZXR1cm4gZmFsc2UgYW5kIGF0dGVtcHQgdG8gZXJy
b3ItY29ycmVjdCBhZ2Fpbi4KICAgICBpZiAoIWhhbmRsZWQpIHsKLSAgICAgICAgcmVwb3J0RXJy
b3IoSWdub3JlZENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnQtPmxvY2FsTmFtZSgp
KTsKKyAgICAgICAgcmVwb3J0RXJyb3IoSWdub3JlZENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSwg
Jm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwpAQCAtNjYwLDIxICs2NjAsMjEgQEAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdGVFcnJvckNoZWNrRnVuYz4gRnVuY3Rpb25N
YXA7CiAKIGJvb2wgSFRNTFBhcnNlcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJl
ZlB0cjxOb2RlPiYgcmVzdWx0KQogewotICAgIHJlc3VsdCA9IG5ldyBUZXh0KGRvY3VtZW50LCB0
LT50ZXh0LmdldCgpKTsKKyAgICByZXN1bHQgPSBuZXcgVGV4dChtX2RvY3VtZW50LCB0LT50ZXh0
LmdldCgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgSFRNTFBhcnNlcjo6Y29tbWVu
dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQogewotICAg
IHJlc3VsdCA9IG5ldyBDb21tZW50KGRvY3VtZW50LCB0LT50ZXh0LmdldCgpKTsKKyAgICByZXN1
bHQgPSBuZXcgQ29tbWVudChtX2RvY3VtZW50LCB0LT50ZXh0LmdldCgpKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4q
LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKLSAgICBpZiAoIWhlYWQgfHwgY3VycmVudC0+bG9j
YWxOYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICBoZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVu
dChoZWFkVGFnLCBkb2N1bWVudCk7Ci0gICAgICAgIHJlc3VsdCA9IGhlYWQ7CisgICAgaWYgKCFt
X2hlYWQgfHwgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIG1f
aGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnQoaGVhZFRhZywgbV9kb2N1bWVudCk7CisgICAgICAg
IHJlc3VsdCA9IG1faGVhZDsKICAgICB9IGVsc2UKICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxh
Y2VkSGVhZEVycm9yKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC02ODMsNyArNjgzLDcgQEAgYm9v
bCBIVE1MUGFyc2VyOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYg
cmVzdWx0KQogYm9vbCBIVE1MUGFyc2VyOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJl
ZlB0cjxOb2RlPiYpCiB7CiAgICAgLy8gYm9keSBubyBsb25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZl
IGEgZnJhbWVzZXQKLSAgICBpZiAoaGF2ZUZyYW1lU2V0KQorICAgIGlmIChtX2hhdmVGcmFtZVNl
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHBvcEJsb2NrKGhlYWRUYWcpOwogICAgIHN0
YXJ0Qm9keSgpOwpAQCAtNjkzLDE5ICs2OTMsMTkgQEAgYm9vbCBIVE1MUGFyc2VyOjpib2R5Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiBib29sIEhUTUxQYXJzZXI6OmZy
YW1lc2V0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgcG9w
QmxvY2soaGVhZFRhZyk7Ci0gICAgaWYgKGluQm9keSAmJiAhaGF2ZUZyYW1lU2V0ICYmICFoYXZl
Q29udGVudCkgeworICAgIGlmIChtX2luQm9keSAmJiAhbV9oYXZlRnJhbWVTZXQgJiYgIW1faGF2
ZUNvbnRlbnQpIHsKICAgICAgICAgcG9wQmxvY2soYm9keVRhZyk7CiAgICAgICAgIC8vICMjIyBh
Y3R1YWxseSBmb3IgSUUgZG9jdW1lbnQuYm9keSByZXR1cm5zIHRoZSBub3cgaGlkZGVuICJib2R5
IiBlbGVtZW50CiAgICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBu
b3cgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFueQogICAgICAgICAvLyByZWdyZXNzaW9u
cyBhbmQgdGhlIGhlYWRhY2hlcyBhcmUgbm90IHdvcnRoIHRoZSB3b3JrIGFzIGxvbmcgYXMgdGhl
cmUgaXMKICAgICAgICAgLy8gbm8gc2l0ZSBhY3R1YWxseSByZWx5aW5nIG9uIHRoYXQgZGV0YWls
IChEaXJrKQotICAgICAgICBpZiAoZG9jdW1lbnQtPmJvZHkoKSkKLSAgICAgICAgICAgIGRvY3Vt
ZW50LT5ib2R5KCktPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsICJkaXNwbGF5Om5vbmUiKTsKLSAg
ICAgICAgaW5Cb2R5ID0gZmFsc2U7CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5ib2R5KCkpCisg
ICAgICAgICAgICBtX2RvY3VtZW50LT5ib2R5KCktPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsICJk
aXNwbGF5Om5vbmUiKTsKKyAgICAgICAgbV9pbkJvZHkgPSBmYWxzZTsKICAgICB9Ci0gICAgaWYg
KChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpID09
IGh0bWxUYWcpCisgICAgaWYgKChtX2hhdmVDb250ZW50IHx8IG1faGF2ZUZyYW1lU2V0KSAmJiBt
X2N1cnJlbnQtPmxvY2FsTmFtZSgpID09IGh0bWxUYWcpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBoYXZlRnJhbWVTZXQgPSB0cnVlOworICAgIG1faGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKICAg
ICBzdGFydEJvZHkoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTcxNSw3ICs3MTUsNyBAQCBi
b29sIEhUTUxQYXJzZXI6OmZvcm1DcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mIHJlc3VsdCkKICAgICAvLyBPbmx5IGNyZWF0ZSBhIG5ldyBmb3JtIGlmIHdlJ3JlIG5vdCBh
bHJlYWR5IGluc2lkZSBvbmUuCiAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIg
YnJvd3NlcnMnIGJlaGF2aW9yLgogICAgIGlmICghbV9jdXJyZW50Rm9ybUVsZW1lbnQpIHsKLSAg
ICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSBuZXcgSFRNTEZvcm1FbGVtZW50KGZvcm1UYWcs
IGRvY3VtZW50KTsKKyAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSBuZXcgSFRNTEZvcm1F
bGVtZW50KGZvcm1UYWcsIG1fZG9jdW1lbnQpOwogICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRG
b3JtRWxlbWVudDsKICAgICAgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsK
ICAgICB9CkBAIC03MjUsNyArNzI1LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpmb3JtQ3JlYXRlRXJy
b3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiBib29sIEhUTUxQYXJzZXI6
OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkK
IHsKICAgICBSZWZQdHI8Tm9kZT4gbiA9IGhhbmRsZUlzaW5kZXgodCk7Ci0gICAgaWYgKCFpbkJv
ZHkpCisgICAgaWYgKCFtX2luQm9keSkKICAgICAgICAgbV9pc2luZGV4RWxlbWVudCA9IG4ucmVs
ZWFzZSgpOwogICAgIGVsc2UgewogICAgICAgICB0LT5zZWxmQ2xvc2luZ1RhZyA9IHRydWU7CkBA
IC04MDMsNyArODAzLDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogYm9vbCBIVE1MUGFyc2VyOjpub3NjcmlwdENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIGlmICghbV9pc1BhcnNp
bmdGcmFnbWVudCkgewotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0
dGluZ3MoKTsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9kb2N1bWVudC0+c2V0dGlu
Z3MoKTsKICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFi
bGVkKCkpCiAgICAgICAgICAgICBzZXRTa2lwTW9kZShub3NjcmlwdFRhZyk7CiAgICAgfQpAQCAt
ODE5LDcgKzgxOSw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2so
VG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogCiBib29sIEhUTUxQYXJzZXI6OnBDbG9zZXJTdHJpY3RD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKLSAgICBpZiAoZG9jdW1l
bnQtPmluQ29tcGF0TW9kZSgpKQorICAgIGlmIChtX2RvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGhhc1BFbGVtZW50SW5TY29wZSgpKQogICAg
ICAgICBwb3BCbG9jayhwVGFnKTsKQEAgLTgyOCw3ICs4MjgsNyBAQCBib29sIEhUTUxQYXJzZXI6
OnBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIAog
Ym9vbCBIVE1MUGFyc2VyOjptYXBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+
JiByZXN1bHQpCiB7Ci0gICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IG5ldyBIVE1MTWFwRWxlbWVu
dChtYXBUYWcsIGRvY3VtZW50KTsKKyAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gbmV3IEhUTUxN
YXBFbGVtZW50KG1hcFRhZywgbV9kb2N1bWVudCk7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50TWFw
RWxlbWVudDsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC04OTksNyArODk5LDcgQEAgUGFzc1Jl
ZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpnZXROb2RlKFRva2VuKiB0KQogICAgIGlmIChDcmVhdGVF
cnJvckNoZWNrRnVuYyBlcnJvckNoZWNrRnVuYyA9IGdGdW5jdGlvbk1hcC5nZXQodC0+dGFnTmFt
ZS5pbXBsKCkpKQogICAgICAgICBwcm9jZWVkID0gKHRoaXMtPiplcnJvckNoZWNrRnVuYykodCwg
cmVzdWx0KTsKICAgICBpZiAocHJvY2VlZCkKLSAgICAgICAgcmVzdWx0ID0gSFRNTEVsZW1lbnRG
YWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0LT50YWdO
YW1lLCB4aHRtbE5hbWVzcGFjZVVSSSksIGRvY3VtZW50LCBtX2N1cnJlbnRGb3JtRWxlbWVudC5n
ZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVs
ZW1lbnQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdC0+dGFnTmFtZSwgeGh0bWxOYW1lc3BhY2VV
UkkpLCBtX2RvY3VtZW50LCBtX2N1cnJlbnRGb3JtRWxlbWVudC5nZXQoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTkwOSw3ICs5MDksNyBAQCBib29sIEhUTUxQYXJz
ZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkK
ICAgICAvLyBhYm91dCAxNTAwIHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2ggb2YgPGI+cy4gIFdlIHdp
bGwgb25seSBhbGxvdyBhdCBtb3N0IDIwCiAgICAgLy8gbmVzdGVkIHRhZ3Mgb2YgdGhlIHNhbWUg
dHlwZSBiZWZvcmUganVzdCBpZ25vcmluZyB0aGVtIGFsbCB0b2dldGhlci4KICAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOworICAg
IGZvciAoSFRNTFN0YWNrRWxlbSogY3VyciA9IG1fYmxvY2tTdGFjazsKICAgICAgICAgIGkgPCBj
TWF4UmVkdW5kYW50VGFnRGVwdGggJiYgY3VyciAmJiBjdXJyLT50YWdOYW1lID09IHRhZ05hbWU7
CiAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKSB7IH0KICAgICByZXR1cm4gaSAhPSBj
TWF4UmVkdW5kYW50VGFnRGVwdGg7CkBAIC05MzIsOSArOTMyLDkgQEAgdm9pZCBIVE1MUGFyc2Vy
Ojpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4qIHQpCiAgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBw
VGFnKQogICAgICAgICBjaGVja0ZvckNsb3NlVGFnRXJyb3JzID0gZmFsc2U7CiAgICAgICAgIAot
ICAgIEhUTUxTdGFja0VsZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOworICAgIEhUTUxTdGFja0Vs
ZW0qIG9sZEVsZW0gPSBtX2Jsb2NrU3RhY2s7CiAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSwgY2hl
Y2tGb3JDbG9zZVRhZ0Vycm9ycyk7Ci0gICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0
LT50YWdOYW1lID09IHBUYWcpIHsKKyAgICBpZiAob2xkRWxlbSA9PSBtX2Jsb2NrU3RhY2sgJiYg
dC0+dGFnTmFtZSA9PSBwVGFnKSB7CiAgICAgICAgIC8vIFdlIGVuY291bnRlcmVkIGEgc3RyYXkg
PC9wPi4gIEFtYXppbmdseSBHZWNrbywgV2luSUUsIGFuZCBNYWNJRSBhbGwgdHJlYXQKICAgICAg
ICAgLy8gdGhpcyBhcyBhIHZhbGlkIGJyZWFrLCBpLmUuLCA8cD48L3A+LiAgU28gZ28gYWhlYWQg
YW5kIG1ha2UgdGhlIGVtcHR5CiAgICAgICAgIC8vIHBhcmFncmFwaC4KQEAgLTk3OSw3ICs5Nzks
NyBAQCBib29sIEhUTUxQYXJzZXI6OmlzSW5saW5lKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgICAg
ICAgICBlLT5oYXNMb2NhbE5hbWUobm9lbWJlZFRhZykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykgJiYgIW1faXNQYXJz
aW5nRnJhZ21lbnQpIHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50
LT5zZXR0aW5ncygpOworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9kb2N1bWVu
dC0+c2V0dGluZ3MoKTsKICAgICAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNK
YXZhU2NyaXB0RW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC0xMDUwLDcgKzEwNTAsNyBAQCB2b2lkIEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFs
U3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogICAgICAgICAv
LyBGaW5kIHRoZSBvdXRlcm1vc3QgZWxlbWVudCB0aGF0IGNyb3NzZXMgb3ZlciB0byBhIGhpZ2hl
ciBsZXZlbC4gSWYgdGhlcmUgZXhpc3RzIGFub3RoZXIgaGlnaGVyLWxldmVsCiAgICAgICAgIC8v
IGVsZW1lbnQsIHdlIHdpbGwgZG8gYW5vdGhlciBwYXNzLCB1bnRpbCB3ZSBoYXZlIGNvcnJlY3Rl
ZCB0aGUgaW5uZXJtb3N0IG9uZS4KICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
ICAgIEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOworICAgICAgICBIVE1MU3RhY2tF
bGVtKiBjdXJyID0gbV9ibG9ja1N0YWNrOwogICAgICAgICBIVE1MU3RhY2tFbGVtKiBwcmV2ID0g
MDsKICAgICAgICAgSFRNTFN0YWNrRWxlbSogcHJldk1heEVsZW0gPSAwOwogICAgICAgICBtYXhF
bGVtID0gMDsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIHZvaWQgSFRNTFBhcnNlcjo6aGFuZGxlUmVz
aWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgTm9kZSogcmVzaWR1YWxFbGVtID0gcHJldi0+bm9k
ZTsKLSAgICAgICAgTm9kZSogYmxvY2tFbGVtID0gcHJldk1heEVsZW0gPyBwcmV2TWF4RWxlbS0+
bm9kZSA6IGN1cnJlbnQ7CisgICAgICAgIE5vZGUqIGJsb2NrRWxlbSA9IHByZXZNYXhFbGVtID8g
cHJldk1heEVsZW0tPm5vZGUgOiBtX2N1cnJlbnQ7CiAgICAgICAgIE5vZGUqIHBhcmVudEVsZW0g
PSBlbGVtLT5ub2RlOwogCiAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVwYXJlbnRp
bmcgdGhhdCBpcyBnb2luZyB0byBvY2N1ciBpcyBhbGxvd2VkIGFjY29yZGluZyB0byB0aGUgRE9N
LgpAQCAtMTIyMywxMyArMTIyMywxMyBAQCB2b2lkIEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFs
U3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogICAgIC8vIDx0
YWJsZT48Yj48aT48Zm9ybT48L2I+PC9mb3JtPjwvaT48L3RhYmxlPgogICAgIC8vIFRoZW4gdGhp
cyBjaGVjayB3aWxsIGJlIHRvbyBzaW1wbGlzdGljLiAgUmlnaHQgbm93IHRoZSA8aT48Zm9ybT4g
Y2hhaW4gd2lsbCBlbmQgdXAgaW5zaWRlIHRoZSA8dGJvZHk+LCB3aGljaCBpcyBwcmV0dHkgY3Jh
enkuCiAgICAgaWYgKHN0cmF5VGFibGVDb250ZW50KQotICAgICAgICBpblN0cmF5VGFibGVDb250
ZW50LS07CisgICAgICAgIG1faW5TdHJheVRhYmxlQ29udGVudC0tOwogCiAgICAgLy8gU3RlcCA3
OiBSZW9wZW4gaW50ZXJtZWRpYXRlIGlubGluZXMsIGUuZy4sIDxiPjxwPjxpPkZvbzwvYj5Hb288
L3A+LgogICAgIC8vIEluIHRoZSBhYm92ZSBleGFtcGxlLCBHb28gc2hvdWxkIHN0YXkgaXRhbGlj
LgogICAgIC8vIFdlIGNhcCB0aGUgbnVtYmVyIG9mIHRhZ3Mgd2UncmUgd2lsbGluZyB0byByZW9w
ZW4gYmFzZWQgb2ZmIGNSZXNpZHVhbFN0eWxlTWF4RGVwdGguCiAgICAgCi0gICAgSFRNTFN0YWNr
RWxlbSogY3VyciA9IGJsb2NrU3RhY2s7CisgICAgSFRNTFN0YWNrRWxlbSogY3VyciA9IG1fYmxv
Y2tTdGFjazsKICAgICBIVE1MU3RhY2tFbGVtKiByZXNpZHVhbFN0eWxlU3RhY2sgPSAwOwogICAg
IHVuc2lnbmVkIHN0YWNrRGVwdGggPSAxOwogICAgIHVuc2lnbmVkIHJlZHVuZGFudFN0eWxlQ291
bnQgPSAwOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgdm9pZCBIVE1MUGFyc2VyOjpoYW5kbGVSZXNp
ZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSogZWxlbSkKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogCi0gICAgICAgIGN1cnIgPSBi
bG9ja1N0YWNrOworICAgICAgICBjdXJyID0gbV9ibG9ja1N0YWNrOwogICAgIH0KIAogICAgIHJl
b3BlblJlc2lkdWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgMCk7IC8vIFN0cmF5IHRh
YmxlIGNvbnRlbnQgY2FuJ3QgYmUgYW4gaXNzdWUgaGVyZSwgc2luY2Ugc29tZSBlbGVtZW50IGFi
b3ZlIHdpbGwgYWx3YXlzIGJlY29tZSB0aGUgcm9vdCBvZiBuZXcgc3RyYXkgdGFibGUgY29udGVu
dC4KQEAgLTEyNzksNyArMTI3OSw3IEBAIHZvaWQgSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxT
dHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgTm9kZSogbWFsZm9ybWVkVGFiCiAgICAgICAg
IGlmIChtYWxmb3JtZWRUYWJsZVBhcmVudCkKICAgICAgICAgICAgIG1hbGZvcm1lZFRhYmxlUGFy
ZW50LT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgbWFsZm9ybWVkVGFibGVQYXJlbnQtPmxhc3RDaGls
ZCgpLCBlYyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnQtPmFwcGVuZENoaWxk
KG5ld05vZGUsIGVjKTsKKyAgICAgICAgICAgIG1fY3VycmVudC0+YXBwZW5kQ2hpbGQobmV3Tm9k
ZSwgZWMpOwogICAgICAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRvIGlnbm9yZSB0aGUg
ZXhjZXB0aW9ucyBoZXJlPwogCiAgICAgICAgIC8vIE5vdyBwdXNoIGEgbmV3IHN0YWNrIGVsZW1l
bnQgZm9yIHRoaXMgbm9kZSB3ZSBqdXN0IGNyZWF0ZWQuCkBAIC0xMjg4LDkgKzEyODgsOSBAQCB2
b2lkIEhUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVs
ZW0sIE5vZGUqIG1hbGZvcm1lZFRhYgogCiAgICAgICAgIC8vIFNldCBvdXIgc3RyYXlUYWJsZUNv
bnRlbnQgYm9vbGVhbiBpZiBuZWVkZWQsIHNvIHRoYXQgdGhlIHJlb3BlbmVkIHRhZyBhbHNvIGtu
b3dzCiAgICAgICAgIC8vIHRoYXQgaXQgaXMgaW5zaWRlIGEgbWFsZm9ybWVkIHRhYmxlLgotICAg
ICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IG1hbGZvcm1lZFRhYmxlUGFyZW50
ICE9IDA7Ci0gICAgICAgIGlmIChibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCkKLSAgICAg
ICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAgICAgbV9ibG9ja1N0YWNrLT5zdHJh
eVRhYmxlQ29udGVudCA9IG1hbGZvcm1lZFRhYmxlUGFyZW50ICE9IDA7CisgICAgICAgIGlmICht
X2Jsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50KQorICAgICAgICAgICAgbV9pblN0cmF5VGFi
bGVDb250ZW50Kys7CiAKICAgICAgICAgLy8gQ2xlYXIgb3VyIG1hbGZvcm1lZCB0YWJsZSBwYXJl
bnQgdmFyaWFibGUuCiAgICAgICAgIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsKQEAgLTEzMDgs
OCArMTMwOCw4IEBAIHZvaWQgSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRN
TFN0YWNrRWxlbSogZWxlbSwgTm9kZSogbWFsZm9ybWVkVGFiCiAKIHZvaWQgSFRNTFBhcnNlcjo6
cHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IGxldmVsKQogewotICAg
IGJsb2NrU3RhY2sgPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBsZXZlbCwgY3VycmVudCwg
ZGlkUmVmQ3VycmVudCwgYmxvY2tTdGFjayk7Ci0gICAgZGlkUmVmQ3VycmVudCA9IGZhbHNlOwor
ICAgIG1fYmxvY2tTdGFjayA9IG5ldyBIVE1MU3RhY2tFbGVtKHRhZ05hbWUsIGxldmVsLCBtX2N1
cnJlbnQsIG1fZGlkUmVmQ3VycmVudCwgbV9ibG9ja1N0YWNrKTsKKyAgICBtX2RpZFJlZkN1cnJl
bnQgPSBmYWxzZTsKICAgICBpZiAodGFnTmFtZSA9PSBwVGFnKQogICAgICAgICBtX2hhc1BFbGVt
ZW50SW5TY29wZSA9IEluU2NvcGU7CiAgICAgZWxzZSBpZiAoaXNTY29waW5nVGFnKHRhZ05hbWUp
KQpAQCAtMTMxOCw3ICsxMzE4LDcgQEAgdm9pZCBIVE1MUGFyc2VyOjpwdXNoQmxvY2soY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgbGV2ZWwpCiAKIHZvaWQgSFRNTFBhcnNlcjo6cG9w
QmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIHJlcG9ydEVycm9ycykKIHsK
LSAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gYmxvY2tTdGFjazsKKyAgICBIVE1MU3RhY2tFbGVt
KiBlbGVtID0gbV9ibG9ja1N0YWNrOwogICAgIAogICAgIGludCBtYXhMZXZlbCA9IDA7CiAKQEAg
LTEzNDYsMTIgKzEzNDYsMTIgQEAgdm9pZCBIVE1MUGFyc2VyOjpwb3BCbG9jayhjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUsIGJvb2wgcmVwb3J0RXJyb3JzKQogICAgIEhUTUxTdGFja0VsZW0q
IHJlc2lkdWFsU3R5bGVTdGFjayA9IDA7CiAgICAgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQg
PSAwOwogICAgIAotICAgIGVsZW0gPSBibG9ja1N0YWNrOworICAgIGVsZW0gPSBtX2Jsb2NrU3Rh
Y2s7CiAgICAgdW5zaWduZWQgc3RhY2tEZXB0aCA9IDE7CiAgICAgdW5zaWduZWQgcmVkdW5kYW50
U3R5bGVDb3VudCA9IDA7CiAgICAgd2hpbGUgKGVsZW0pIHsKICAgICAgICAgaWYgKGVsZW0tPnRh
Z05hbWUgPT0gdGFnTmFtZSkgewotICAgICAgICAgICAgaW50IHN0cmF5VGFibGUgPSBpblN0cmF5
VGFibGVDb250ZW50OworICAgICAgICAgICAgaW50IHN0cmF5VGFibGUgPSBtX2luU3RyYXlUYWJs
ZUNvbnRlbnQ7CiAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogICAgICAgICAgICAgZWxlbSA9
IDA7CiAKQEAgLTEzNTksOCArMTM1OSw4IEBAIHZvaWQgSFRNTFBhcnNlcjo6cG9wQmxvY2soY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIHJlcG9ydEVycm9ycykKICAgICAgICAgICAg
IC8vIGV4cGxpY2l0IDx0Ym9keT4gb3IgPHRyPi4KICAgICAgICAgICAgIC8vIElmIHdlIGVuZCB1
cCBuZWVkaW5nIHRvIHJlb3BlbiByZXNpZHVhbCBzdHlsZSB0YWdzLCB0aGUgcm9vdCBvZiB0aGUg
cmVvcGVuZWQgY2hhaW4KICAgICAgICAgICAgIC8vIG11c3QgYWxzbyBrbm93IHRoYXQgaXQgaXMg
dGhlIHJvb3Qgb2YgbWFsZm9ybWVkIGNvbnRlbnQgaW5zaWRlIGEgPHRib2R5Pi88dHI+LgotICAg
ICAgICAgICAgaWYgKHN0cmF5VGFibGUgJiYgKGluU3RyYXlUYWJsZUNvbnRlbnQgPCBzdHJheVRh
YmxlKSAmJiByZXNpZHVhbFN0eWxlU3RhY2spIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBjdXJy
ID0gY3VycmVudDsKKyAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChtX2luU3RyYXlUYWJs
ZUNvbnRlbnQgPCBzdHJheVRhYmxlKSAmJiByZXNpZHVhbFN0eWxlU3RhY2spIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBjdXJyID0gbV9jdXJyZW50OwogICAgICAgICAgICAgICAgIHdoaWxlIChj
dXJyICYmICFjdXJyLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKICAgICAgICAgICAgICAgICAgICAg
Y3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICBtYWxmb3JtZWRUYWJs
ZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkgOiAwOwpAQCAtMTM5NSw3ICsxMzk1
LDcgQEAgdm9pZCBIVE1MUGFyc2VyOjpwb3BCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIGJvb2wgcmVwb3J0RXJyb3JzKQogICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygp
OwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAg
ICAgICAgICAgIGVsZW0gPSBibG9ja1N0YWNrOworICAgICAgICAgICAgZWxlbSA9IG1fYmxvY2tT
dGFjazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQwNCwxOSArMTQwNCwxOSBAQCB2b2lkIEhU
TUxQYXJzZXI6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9vbCByZXBv
cnRFcnJvcnMpCiAKIGlubGluZSBIVE1MU3RhY2tFbGVtKiBIVE1MUGFyc2VyOjpwb3BPbmVCbG9j
a0NvbW1vbigpCiB7Ci0gICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IGJsb2NrU3RhY2s7CisgICAg
SFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tTdGFjazsKIAogICAgIC8vIEZvcm0gZWxlbWVu
dHMgcmVzdG9yZSB0aGVpciBzdGF0ZSBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4KICAgICAv
LyBBbHNvLCBhIGZldyBlbGVtZW50cyAoPGFwcGxldD4sIDxvYmplY3Q+KSBuZWVkIHRvIGtub3cg
d2hlbiBhbGwgY2hpbGQgZWxlbWVudHMgKDxwYXJhbT5zKSBhcmUgYXZhaWxhYmxlLgotICAgIGlm
IChjdXJyZW50ICYmIGVsZW0tPm5vZGUgIT0gY3VycmVudCkKLSAgICAgICAgY3VycmVudC0+Zmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgaWYgKG1fY3VycmVudCAmJiBlbGVtLT5ub2RlICE9
IG1fY3VycmVudCkKKyAgICAgICAgbV9jdXJyZW50LT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
IAotICAgIGJsb2NrU3RhY2sgPSBlbGVtLT5uZXh0OwotICAgIGN1cnJlbnQgPSBlbGVtLT5ub2Rl
OwotICAgIGRpZFJlZkN1cnJlbnQgPSBlbGVtLT5kaWRSZWZOb2RlOworICAgIG1fYmxvY2tTdGFj
ayA9IGVsZW0tPm5leHQ7CisgICAgbV9jdXJyZW50ID0gZWxlbS0+bm9kZTsKKyAgICBtX2RpZFJl
ZkN1cnJlbnQgPSBlbGVtLT5kaWRSZWZOb2RlOwogCiAgICAgaWYgKGVsZW0tPnN0cmF5VGFibGVD
b250ZW50KQotICAgICAgICBpblN0cmF5VGFibGVDb250ZW50LS07CisgICAgICAgIG1faW5TdHJh
eVRhYmxlQ29udGVudC0tOwogCiAgICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gcFRhZykKICAgICAg
ICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwpAQCAtMTQyOSw4ICsxNDI5LDgg
QEAgaW5saW5lIEhUTUxTdGFja0VsZW0qIEhUTUxQYXJzZXI6OnBvcE9uZUJsb2NrQ29tbW9uKCkK
IHZvaWQgSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soKQogewogICAgIC8vIFN0b3JlIHRoZSBjdXJy
ZW50IG5vZGUgYmVmb3JlIHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0ZXMgaXQuCi0gICAgTm9k
ZSogbGFzdEN1cnJlbnQgPSBjdXJyZW50OwotICAgIGJvb2wgZGlkUmVmTGFzdEN1cnJlbnQgPSBk
aWRSZWZDdXJyZW50OworICAgIE5vZGUqIGxhc3RDdXJyZW50ID0gbV9jdXJyZW50OworICAgIGJv
b2wgZGlkUmVmTGFzdEN1cnJlbnQgPSBtX2RpZFJlZkN1cnJlbnQ7CiAKICAgICBkZWxldGUgcG9w
T25lQmxvY2tDb21tb24oKTsKIApAQCAtMTQ0NCw4ICsxNDQ0LDggQEAgdm9pZCBIVE1MUGFyc2Vy
Ojptb3ZlT25lQmxvY2tUb1N0YWNrKEhUTUxTdGFja0VsZW0qJiBoZWFkKQogICAgIC8vIFNlZSB0
aGUgdHdvIGNhbGxlcnMgZm9yIGRldGFpbHMuCiAKICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBu
b2RlIGJlZm9yZSBwb3BPbmVCbG9ja0NvbW1vbiBvdmVyd3JpdGVzIGl0LgotICAgIE5vZGUqIGxh
c3RDdXJyZW50ID0gY3VycmVudDsKLSAgICBib29sIGRpZFJlZkxhc3RDdXJyZW50ID0gZGlkUmVm
Q3VycmVudDsKKyAgICBOb2RlKiBsYXN0Q3VycmVudCA9IG1fY3VycmVudDsKKyAgICBib29sIGRp
ZFJlZkxhc3RDdXJyZW50ID0gbV9kaWRSZWZDdXJyZW50OwogCiAgICAgLy8gUG9wIHRoZSBibG9j
aywgYnV0IGRvbid0IGRlcmVmIHRoZSBjdXJyZW50IG5vZGUgYXMgcG9wT25lQmxvY2sgZG9lcyBi
ZWNhdXNlCiAgICAgLy8gd2UnbGwgYmUgdXNpbmcgdGhlIHBvaW50ZXIgaW4gdGhlIG5ldyBzdGFj
ayBlbGVtZW50LgpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAgdm9pZCBIVE1MUGFyc2VyOjptb3ZlT25l
QmxvY2tUb1N0YWNrKEhUTUxTdGFja0VsZW0qJiBoZWFkKQogCiAgICAgLy8gVHJhbnNmZXIgdGhl
IGN1cnJlbnQgbm9kZSBpbnRvIHRoZSBzdGFjayBlbGVtZW50LgogICAgIC8vIE5vIG5lZWQgdG8g
ZGVyZWYgdGhlIG9sZCBlbGVtLT5ub2RlIGJlY2F1c2UgcG9wT25lQmxvY2tDb21tb24gdHJhbnNm
ZXJyZWQKLSAgICAvLyBpdCBpbnRvIHRoZSBjdXJyZW50L2RpZFJlZkN1cnJlbnQgZmllbGRzLgor
ICAgIC8vIGl0IGludG8gdGhlIG1fY3VycmVudC9tX2RpZFJlZkN1cnJlbnQgZmllbGRzLgogICAg
IGVsZW0tPm5vZGUgPSBsYXN0Q3VycmVudDsKICAgICBlbGVtLT5kaWRSZWZOb2RlID0gZGlkUmVm
TGFzdEN1cnJlbnQ7CiAgICAgZWxlbS0+bmV4dCA9IGhlYWQ7CkBAIC0xNDYzLDcgKzE0NjMsNyBA
QCB2b2lkIEhUTUxQYXJzZXI6Om1vdmVPbmVCbG9ja1RvU3RhY2soSFRNTFN0YWNrRWxlbSomIGhl
YWQpCiB2b2lkIEhUTUxQYXJzZXI6OmNoZWNrSWZIYXNQRWxlbWVudEluU2NvcGUoKQogewogICAg
IG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKLSAgICBIVE1MU3RhY2tFbGVtKiBl
bGVtID0gYmxvY2tTdGFjazsKKyAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNr
OwogICAgIHdoaWxlIChlbGVtKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSA9IGVsZW0tPnRhZ05hbWU7CiAgICAgICAgIGlmICh0YWdOYW1lID09IHBUYWcpIHsKQEAgLTE0
NzcsNDIgKzE0NzcsNDIgQEAgdm9pZCBIVE1MUGFyc2VyOjpjaGVja0lmSGFzUEVsZW1lbnRJblNj
b3BlKCkKIAogdm9pZCBIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQogewotICAgIHdoaWxl
IChibG9ja1N0YWNrICYmIGlzSW5saW5lKGN1cnJlbnQpKQorICAgIHdoaWxlIChtX2Jsb2NrU3Rh
Y2sgJiYgaXNJbmxpbmUobV9jdXJyZW50KSkKICAgICAgICAgcG9wT25lQmxvY2soKTsKIH0KIAog
dm9pZCBIVE1MUGFyc2VyOjpmcmVlQmxvY2soKQogewotICAgIHdoaWxlIChibG9ja1N0YWNrKQor
ICAgIHdoaWxlIChtX2Jsb2NrU3RhY2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKIHZv
aWQgSFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCgpCiB7Ci0gICAgaWYgKGhlYWQgfHwgIWRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICBpZiAobV9oZWFkIHx8ICFtX2RvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaGVhZCA9IG5ldyBIVE1MSGVh
ZEVsZW1lbnQoaGVhZFRhZywgZG9jdW1lbnQpOwotICAgIEhUTUxFbGVtZW50KiBib2R5ID0gZG9j
dW1lbnQtPmJvZHkoKTsKKyAgICBtX2hlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50KGhlYWRUYWcs
IG1fZG9jdW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKS0+aW5zZXJ0QmVmb3JlKGhlYWQsIGJvZHksIGVjKTsKKyAgICBtX2RvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKS0+aW5zZXJ0QmVmb3JlKG1faGVhZCwgYm9keSwgZWMpOwogICAgIGlmIChl
YykKLSAgICAgICAgaGVhZCA9IDA7CisgICAgICAgIG1faGVhZCA9IDA7CiAgICAgICAgIAogICAg
IC8vIElmIHRoZSBib2R5IGRvZXMgbm90IGV4aXN0IHlldCwgdGhlbiB0aGUgPGhlYWQ+IHNob3Vs
ZCBiZSBwdXNoZWQgYXMgdGhlIGN1cnJlbnQgYmxvY2suCi0gICAgaWYgKGhlYWQgJiYgIWJvZHkp
IHsKLSAgICAgICAgcHVzaEJsb2NrKGhlYWQtPmxvY2FsTmFtZSgpLCBoZWFkLT50YWdQcmlvcml0
eSgpKTsKLSAgICAgICAgc2V0Q3VycmVudChoZWFkKTsKKyAgICBpZiAobV9oZWFkICYmICFib2R5
KSB7CisgICAgICAgIHB1c2hCbG9jayhtX2hlYWQtPmxvY2FsTmFtZSgpLCBtX2hlYWQtPnRhZ1By
aW9yaXR5KCkpOworICAgICAgICBzZXRDdXJyZW50KG1faGVhZCk7CiAgICAgfQogfQogCiBQYXNz
UmVmUHRyPE5vZGU+IEhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoVG9rZW4qIHQpCiB7Ci0gICAg
UmVmUHRyPE5vZGU+IG4gPSBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCk7Cisg
ICAgUmVmUHRyPE5vZGU+IG4gPSBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtX2RvY3VtZW50
KTsKIAogICAgIE5hbWVkTWFwcGVkQXR0ck1hcCogYXR0cnMgPSB0LT5hdHRycy5nZXQoKTsKIAot
ICAgIFJlZlB0cjxIVE1MSXNJbmRleEVsZW1lbnQ+IGlzSW5kZXggPSBuZXcgSFRNTElzSW5kZXhF
bGVtZW50KGlzaW5kZXhUYWcsIGRvY3VtZW50LCBtX2N1cnJlbnRGb3JtRWxlbWVudC5nZXQoKSk7
CisgICAgUmVmUHRyPEhUTUxJc0luZGV4RWxlbWVudD4gaXNJbmRleCA9IG5ldyBIVE1MSXNJbmRl
eEVsZW1lbnQoaXNpbmRleFRhZywgbV9kb2N1bWVudCwgbV9jdXJyZW50Rm9ybUVsZW1lbnQuZ2V0
KCkpOwogICAgIGlzSW5kZXgtPnNldEF0dHJpYnV0ZU1hcChhdHRycyk7CiAgICAgaXNJbmRleC0+
c2V0QXR0cmlidXRlKHR5cGVBdHRyLCAia2h0bWxfaXNpbmRleCIpOwogCkBAIC0xNTIzLDIwICsx
NTIzLDIwIEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleChUb2tl
biogdCkKICAgICAgICAgdC0+YXR0cnMgPSAwOwogICAgIH0KIAotICAgIG4tPmFkZENoaWxkKG5l
dyBIVE1MSFJFbGVtZW50KGhyVGFnLCBkb2N1bWVudCkpOwotICAgIG4tPmFkZENoaWxkKG5ldyBU
ZXh0KGRvY3VtZW50LCB0ZXh0KSk7CisgICAgbi0+YWRkQ2hpbGQobmV3IEhUTUxIUkVsZW1lbnQo
aHJUYWcsIG1fZG9jdW1lbnQpKTsKKyAgICBuLT5hZGRDaGlsZChuZXcgVGV4dChtX2RvY3VtZW50
LCB0ZXh0KSk7CiAgICAgbi0+YWRkQ2hpbGQoaXNJbmRleC5yZWxlYXNlKCkpOwotICAgIG4tPmFk
ZENoaWxkKG5ldyBIVE1MSFJFbGVtZW50KGhyVGFnLCBkb2N1bWVudCkpOworICAgIG4tPmFkZENo
aWxkKG5ldyBIVE1MSFJFbGVtZW50KGhyVGFnLCBtX2RvY3VtZW50KSk7CiAKICAgICByZXR1cm4g
bi5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgSFRNTFBhcnNlcjo6c3RhcnRCb2R5KCkKIHsKLSAgICBp
ZiAoaW5Cb2R5KQorICAgIGlmIChtX2luQm9keSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW5C
b2R5ID0gdHJ1ZTsKKyAgICBtX2luQm9keSA9IHRydWU7CiAKICAgICBpZiAobV9pc2luZGV4RWxl
bWVudCkgewogICAgICAgICBpbnNlcnROb2RlKG1faXNpbmRleEVsZW1lbnQuZ2V0KCksIHRydWUg
LyogZG9uJ3QgZGVzY2VuZCBpbnRvIHRoaXMgbm9kZSAqLyk7CkBAIC0xNTQ3LDggKzE1NDcsOCBA
QCB2b2lkIEhUTUxQYXJzZXI6OnN0YXJ0Qm9keSgpCiB2b2lkIEhUTUxQYXJzZXI6OmZpbmlzaGVk
KCkKIHsKICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGNvbXBsZXRlbHkgZW1wdHkgZG9jdW1lbnQs
IGhlcmUncyB0aGUgcGxhY2UgdG8gY3JlYXRlIHRoZSBIVE1MIGVsZW1lbnQuCi0gICAgaWYgKGN1
cnJlbnQgJiYgY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiAhZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpKQotICAgICAgICBpbnNlcnROb2RlKG5ldyBIVE1MSHRtbEVsZW1lbnQoaHRtbFRh
ZywgZG9jdW1lbnQpKTsKKyAgICBpZiAobV9jdXJyZW50ICYmIG1fY3VycmVudC0+aXNEb2N1bWVu
dE5vZGUoKSAmJiAhbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIGluc2Vy
dE5vZGUobmV3IEhUTUxIdG1sRWxlbWVudChodG1sVGFnLCBtX2RvY3VtZW50KSk7CiAKICAgICAv
LyBUaGlzIGVuc3VyZXMgdGhhdCAiY3VycmVudCIgaXMgbm90IGxlZnQgcG9pbnRpbmcgdG8gYSBu
b2RlIHdoZW4gdGhlIGRvY3VtZW50IGlzIGRlc3Ryb3llZC4KICAgICBmcmVlQmxvY2soKTsKQEAg
LTE1NTYsMTYgKzE1NTYsMTYgQEAgdm9pZCBIVE1MUGFyc2VyOjpmaW5pc2hlZCgpCiAKICAgICAv
LyBXYXJuaW5nLCB0aGlzIG1heSBkZWxldGUgdGhlIHRva2VuaXplciBhbmQgcGFyc2VyLCBzbyBk
b24ndCB0cnkgdG8gZG8gYW55dGhpbmcgZWxzZSBhZnRlciB0aGlzLgogICAgIGlmICghbV9pc1Bh
cnNpbmdGcmFnbWVudCkKLSAgICAgICAgZG9jdW1lbnQtPmZpbmlzaGVkUGFyc2luZygpOworICAg
ICAgICBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmcoKTsKIH0KIAogdm9pZCBIVE1MUGFyc2Vy
OjpyZXBvcnRFcnJvclRvQ29uc29sZShIVE1MUGFyc2VyRXJyb3JDb2RlIGVycm9yQ29kZSwgY29u
c3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMiwg
Ym9vbCBjbG9zZVRhZ3MpCiB7ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEhUTUxUb2tlbml6ZXIqIGh0bWxUb2tl
bml6ZXIgPSBzdGF0aWNfY2FzdDxIVE1MVG9rZW5pemVyKj4oZG9jdW1lbnQtPnRva2VuaXplcigp
KTsKKyAgICBIVE1MVG9rZW5pemVyKiBodG1sVG9rZW5pemVyID0gc3RhdGljX2Nhc3Q8SFRNTFRv
a2VuaXplcio+KG1fZG9jdW1lbnQtPnRva2VuaXplcigpKTsKICAgICBpbnQgbGluZU51bWJlciA9
IGh0bWxUb2tlbml6ZXItPmxpbmVOdW1iZXIoKSArIDE7CiAKICAgICBBdG9taWNTdHJpbmcgdGFn
MTsKQEAgLTE2MDAsNyArMTYwMCw3IEBAIHZvaWQgSFRNTFBhcnNlcjo6cmVwb3J0RXJyb3JUb0Nv
bnNvbGUoSFRNTFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pCiAKICAgICBm
cmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJj
ZSwKICAgICAgICAgaXNXYXJuaW5nKGVycm9yQ29kZSkgPyBXYXJuaW5nTWVzc2FnZUxldmVsIDog
RXJyb3JNZXNzYWdlTGV2ZWwsCi0gICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGRvY3VtZW50
LT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIG1fZG9jdW1l
bnQtPnVybCgpLnN0cmluZygpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hU
TUxQYXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmgKaW5kZXggODY2ODM1Zi4uM2Y5
ZmZjZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuaAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTFBhcnNlci5oCkBAIC0xNTAsMzMgKzE1MCwzMyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCByZXBvcnRFcnJvclRvQ29uc29sZShIVE1MUGFyc2VyRXJyb3JDb2RlLCBjb25zdCBBdG9t
aWNTdHJpbmcqIHRhZ05hbWUxLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUyLCBib29sIGNs
b3NlVGFncyk7CiAgICAgCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50OworICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OwogCiAgICAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAodGhlIG9u
ZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykuIENhbiBiZSBhIGRvY3VtZW50IGZyYWdt
ZW50LCBhIGRvY3VtZW50IG9yIGFuIGVsZW1lbnQuCi0gICAgTm9kZSogY3VycmVudDsKKyAgICBO
b2RlKiBtX2N1cnJlbnQ7CiAgICAgLy8gV2UgY2FuJ3QgcmVmIGEgZG9jdW1lbnQsIGJ1dCB3ZSBk
b24ndCB3YW50IHRvIGNvbnN0YW50bHkgY2hlY2sgaWYgYSBub2RlIGlzIGEgZG9jdW1lbnQganVz
dCB0byBkZWNpZGUgd2hldGhlciB0byBkZXJlZi4KLSAgICBib29sIGRpZFJlZkN1cnJlbnQ7Cisg
ICAgYm9vbCBtX2RpZFJlZkN1cnJlbnQ7CiAKLSAgICBIVE1MU3RhY2tFbGVtKiBibG9ja1N0YWNr
OworICAgIEhUTUxTdGFja0VsZW0qIG1fYmxvY2tTdGFjazsKIAogICAgIGVudW0gRWxlbWVudElu
U2NvcGVTdGF0ZSB7IE5vdEluU2NvcGUsIEluU2NvcGUsIFVua25vd24gfTsgCiAgICAgRWxlbWVu
dEluU2NvcGVTdGF0ZSBtX2hhc1BFbGVtZW50SW5TY29wZTsKIAogICAgIFJlZlB0cjxIVE1MRm9y
bUVsZW1lbnQ+IG1fY3VycmVudEZvcm1FbGVtZW50OyAvLyBjdXJyZW50bHkgYWN0aXZlIGZvcm0K
ICAgICBSZWZQdHI8SFRNTE1hcEVsZW1lbnQ+IG1fY3VycmVudE1hcEVsZW1lbnQ7IC8vIGN1cnJl
bnQgbWFwCi0gICAgSFRNTEhlYWRFbGVtZW50KiBoZWFkOyAvLyBoZWFkIGVsZW1lbnQ7IG5lZWRl
ZCBmb3IgSFRNTCB3aGljaCBkZWZpbmVzIDxiYXNlPiBhZnRlciA8L2hlYWQ+CisgICAgSFRNTEhl
YWRFbGVtZW50KiBtX2hlYWQ7IC8vIGhlYWQgZWxlbWVudDsgbmVlZGVkIGZvciBIVE1MIHdoaWNo
IGRlZmluZXMgPGJhc2U+IGFmdGVyIDwvaGVhZD4KICAgICBSZWZQdHI8Tm9kZT4gbV9pc2luZGV4
RWxlbWVudDsgLy8gYSBwb3NzaWJsZSA8aXNpbmRleD4gZWxlbWVudCBpbiB0aGUgaGVhZAogCi0g
ICAgYm9vbCBpbkJvZHk7Ci0gICAgYm9vbCBoYXZlQ29udGVudDsKLSAgICBib29sIGhhdmVGcmFt
ZVNldDsKKyAgICBib29sIG1faW5Cb2R5OworICAgIGJvb2wgbV9oYXZlQ29udGVudDsKKyAgICBi
b29sIG1faGF2ZUZyYW1lU2V0OwogCiAgICAgQXRvbWljU3RyaW5nIG1fc2tpcE1vZGVUYWc7IC8v
IHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncyB1bnRpbCBpdCByZWFjaGVzIHRo
ZSBvbmUgc3BlY2lmaWVkCiAKICAgICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CiAgICAgYm9v
bCBtX3JlcG9ydEVycm9yczsKICAgICBib29sIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3Nz
QmxvY2tzOwotICAgIGludCBpblN0cmF5VGFibGVDb250ZW50OworICAgIGludCBtX2luU3RyYXlU
YWJsZUNvbnRlbnQ7CiB9OwogCiB9Cg==
</data>
<flag name="review"
          id="13296"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>