<?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>7065</bug_id>
          
          <creation_ts>2006-02-04 02:54:59 -0800</creation_ts>
          <short_desc>refactor and simplify ChildFrame in preparation for removal</short_desc>
          <delta_ts>2006-02-04 18:33: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>Frames</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>31271</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-02-04 02:54:59 -0800</bug_when>
    <thetext>Refactor and clean up ChildFrame in preparation for removing it; most fields are removed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31272</commentid>
    <comment_count>1</comment_count>
      <attachid>6242</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-02-04 02:55:36 -0800</bug_when>
    <thetext>Created attachment 6242
the cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31295</commentid>
    <comment_count>2</comment_count>
      <attachid>6242</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-04 08:20:53 -0800</bug_when>
    <thetext>Comment on attachment 6242
the cleanup

Looks great. r=me

When reviewing this I saw some minor issues in the old code.

When going from the render tree to the DOM tree, I recommend using node() rather than element(). Despite the misleading names of these two functions, the differences between the two are:

    1) element() returns 0 if the RenderObject is anonymous
    2) element() is overriden in derived classes to return an object of the right type for convenience to avoid the need to cast

So in MacFrame::createFrame I would be using renderer-&gt;node(), since we don&apos;t need the null checks.

I&apos;m wondering about this (old) code:

+    // Some JS code in the load event may have destroyed the plugin, in that case, abort
+    if (!child-&gt;m_renderer)
+        return false;

What guarantees in this case that the child pointer is still good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31360</commentid>
    <comment_count>3</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-02-04 13:59:15 -0800</bug_when>
    <thetext>I don&apos;t think the node() vs. element() thing matters much for frames, since frames cannot (currently anyway) correspond anonymous render objects. I don&apos;t think any code is doing unnecessary nil checks either.

After landing I will try to make a test case for the &quot;destroyed the plugin&quot; case, I think the reason the child pointer is still good right now is that nothing gets removed from m_objects ever except when you leave the page.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6242</attachid>
            <date>2006-02-04 02:55:36 -0800</date>
            <delta_ts>2006-02-04 08:20:53 -0800</delta_ts>
            <desc>the cleanup</desc>
            <filename>child-frame-cleanup.patch.txt</filename>
            <type>text/plain</type>
            <size>29550</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwv
aHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkocmV2aXNpb24gMTI1NDEpCisrKyBraHRtbC9odG1sL2h0
bWxfYmFzZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsMTEgKzMwNCw2IEBAIGJvb2wg
SFRNTEZyYW1lRWxlbWVudEltcGw6OmlzVVJMQWxsb3dlZCgKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIC8vIFByb2hpYml0IG5vbi1maWxlIFVSTHMgaWYgd2UgYXJlIGFza2Vk
IHRvLgotICAgIGlmICh3LT5mcmFtZSgpLT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkgJiYgbmV3VVJM
LnByb3RvY29sKCkubG93ZXIoKSAhPSAiZmlsZSIpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQogICAgIC8vIFdlIGFsbG93IG9uZSBsZXZlbCBvZiBzZWxmLXJlZmVyZW5jZSBiZWNh
dXNlIHNvbWUgc2l0ZXMgZGVwZW5kIG9uIHRoYXQuCiAgICAgLy8gQnV0IHdlIGRvbid0IGFsbG93
IG1vcmUgdGhhbiBvbmUuCiAgICAgYm9vbCBmb3VuZFNlbGZSZWZlcmVuY2UgPSBmYWxzZTsKSW5k
ZXg6IGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0
bWwvaHRtbC9IVE1MRm9ybUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTI1NDEpCisrKyBraHRt
bC9odG1sL0hUTUxGb3JtRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyAr
MzE2LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzZXRCb3VuZGFyeSggYwogYm9vbCBI
VE1MRm9ybUVsZW1lbnRJbXBsOjpwcmVwYXJlU3VibWl0KCkKIHsKICAgICBGcmFtZSAqZnJhbWUg
PSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmKG1faW5zdWJtaXQgfHwgIWZyYW1lIHx8
IGZyYW1lLT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkpCisgICAgaWYgKG1faW5zdWJtaXQgfHwgIWZy
YW1lKQogICAgICAgICByZXR1cm4gbV9pbnN1Ym1pdDsKIAogICAgIG1faW5zdWJtaXQgPSB0cnVl
OwpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9yZW5kZXJfZnJhbWVzLmNwcAkocmV2aXNpb24gMTI1NDEpCisrKyByZW5kZXJpbmcvcmVu
ZGVyX2ZyYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNCw3ICs5MDQsNiBAQCB2b2lkIFJl
bmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbV9o
YXNGYWxsYmFja0NvbnRlbnQpCiAgICAgICAgICAgby0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7
CiAgIH0gZWxzZSBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewotCiAgICAg
ICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJ
bXBsICo+KGVsZW1lbnQoKSk7CiAgICAgICB1cmwgPSBvLT51cmw7CiAgICAgICBzZXJ2aWNlVHlw
ZSA9IG8tPnNlcnZpY2VUeXBlOwpAQCAtOTIzLDcgKzkyMiw3IEBAIHZvaWQgUmVuZGVyUGFydE9i
amVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0
LT52YWx1ZSgpLnFzdHJpbmcoKSk7CiAgICAgICAgICAgfQogICAgICAgfQotICAgICAgZnJhbWUt
PnJlcXVlc3RPYmplY3QoIHRoaXMsIHVybCwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzICk7CisgICAgICBmcmFtZS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIHNlcnZpY2VU
eXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAgIH0gZWxzZSB7CiAgICAgICBhc3NlcnQo
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpOwogICAgICAgSFRNTElGcmFtZUVsZW1l
bnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQo
KSk7CkBAIC05MzMsMTMgKzkzMiw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lk
Z2V0KCkKICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICAgIHVybCA9ICJhYm91dDpi
bGFuayI7CiAgICAgICBGcmFtZVZpZXcgKnYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcgKj4obV92
aWV3KTsKLSAgICAgIGJvb2wgcmVxdWVzdFN1Y2NlZWRlZCA9IHYtPmZyYW1lKCktPnJlcXVlc3RG
cmFtZSggdGhpcywgdXJsLCBvLT5tX25hbWUucXN0cmluZygpLCBRU3RyaW5nTGlzdCgpLCBRU3Ry
aW5nTGlzdCgpLCB0cnVlICk7Ci0gICAgICBpZiAocmVxdWVzdFN1Y2NlZWRlZCAmJiB1cmwgPT0g
ImFib3V0OmJsYW5rIikgewotICAgICAgICAgIEZyYW1lICpuZXdQYXJ0ID0gdi0+ZnJhbWUoKS0+
ZmluZEZyYW1lKCBvLT5tX25hbWUucXN0cmluZygpICk7Ci0gICAgICAgICAgaWYgKG5ld1BhcnQg
JiYgbmV3UGFydC0+ZG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICBuZXdQYXJ0LT5kb2N1bWVu
dCgpLT5zZXRCYXNlVVJMKCB2LT5mcmFtZSgpLT5iYXNlVVJMKCkudXJsKCkgKTsKLSAgICAgICAg
ICB9Ci0gICAgICB9CisgICAgICB2LT5mcmFtZSgpLT5yZXF1ZXN0RnJhbWUodGhpcywgdXJsLCBv
LT5tX25hbWUucXN0cmluZygpKTsKICAgfQogfQogCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxMjU0MikKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMxOSw3ICsyMzE5LDYgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNjVCRjAyMkEwOTc0ODE2MzAwQzQzMTk2IC8qIEZy
YW1lLmggKi8sCi0JCQkJNjVEMUMxQzkwOTkzMkIyMjAwMENCMzI0IC8qIFBsdWdpbi5oICovLAog
CQkJCTY1QkYwMjI5MDk3NDgxNjMwMEM0MzE5NiAvKiBGcmFtZS5jcHAgKi8sCiAJCQkJNjVCRjAy
MkIwOTc0ODE2MzAwQzQzMTk2IC8qIEZyYW1lUHJpdmF0ZS5oICovLAogCQkJCTY1QTIxNDgzMDk3
QTNGNTMwMEI5MDUwQSAvKiBGcmFtZVRyZWVOb2RlLmggKi8sCkBAIC0yMzI5LDYgKzIzMjgsNyBA
QAogCQkJCTFBM0Q4NTU2MDk3NjQ3QjQwMDJDODVEMSAvKiBPYmplY3RDb250ZW50cy5oICovLAog
CQkJCTY1QTIxNDY3MDk3QTMyOTEwMEI5MDUwQSAvKiBQYWdlLmggKi8sCiAJCQkJNjVGRUE4Njgw
OTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovLAorCQkJCTY1RDFDMUM5MDk5MzJCMjIwMDBD
QjMyNCAvKiBQbHVnaW4uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcGFnZTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMjU1NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDQzIEBACisyMDA2LTAyLTA0ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSByZWZhY3Rv
ciBhbmQgc2ltcGxpZnkgY29kZSB1c2luZyBDaGlsZEZyYW1lIGluIHByZXBhcmF0aW9uIGZvciBy
ZW1vdmluZyBpdAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiByZW9yZGVyZWQgc2xpZ2h0bHkuCisgICAgICAgICogYnJpZGdlL21hYy9NYWNGcmFtZS5oOgor
ICAgICAgICAqIGJyaWRnZS9tYWMvTWFjRnJhbWUubW06CisgICAgICAgIChXZWJDb3JlOjpNYWNG
cmFtZTo6Y3JlYXRlRnJhbWUpOiBEb24ndCB0YWtlIGlzT2JqZWN0IHBhcmFtZXRlciwganVzdCBj
aGVjayB0YWcgbmFtZQorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpwcmVwYXJlU3VibWl0
KTogcmVtb3ZlIG9ic29sZXRlIGhhc09ubHlMb2NhbFJlZmVyZW5jZXMgY2hlY2sKKyAgICAgICAg
KiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZy
YW1lRWxlbWVudEltcGw6OmlzVVJMQWxsb3dlZCk6IHJlbW92ZSBvYnNvbGV0ZSBoYXNPbmx5TG9j
YWxSZWZlcmVuY2VzIGNoZWNrCisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6CisgICAg
ICAgIChraHRtbDo6RG9jTG9hZGVyOjpyZXF1ZXN0SW1hZ2UpOiByZW1vdmUgb2Jzb2xldGUgaGFz
T25seUxvY2FsUmVmZXJlbmNlcyBjaGVjaworICAgICAgICAoa2h0bWw6OkRvY0xvYWRlcjo6cmVx
dWVzdFN0eWxlU2hlZXQpOiByZW1vdmUgb2Jzb2xldGUgaGFzT25seUxvY2FsUmVmZXJlbmNlcyBj
aGVjaworICAgICAgICAoa2h0bWw6OkRvY0xvYWRlcjo6cmVxdWVzdFNjcmlwdCk6IHJlbW92ZSBv
YnNvbGV0ZSBoYXNPbmx5TG9jYWxSZWZlcmVuY2VzIGNoZWNrCisgICAgICAgIChraHRtbDo6RG9j
TG9hZGVyOjpyZXF1ZXN0WFNMU3R5bGVTaGVldCk6IHJlbW92ZSBvYnNvbGV0ZSBoYXNPbmx5TG9j
YWxSZWZlcmVuY2VzIGNoZWNrCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6cmVxdWVzdEZyYW1lKTogcmVmYWN0b3JlZCBhbmQgc2ltcGxpZmllZAor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RPYmplY3QpOiBkaXR0bworICAgICAgICAo
V2ViQ29yZTo6RnJhbWU6OnNob3VsZFVzZVBsdWdpbik6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6bG9hZFBsdWdpbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6bG9h
ZFN1YmZyYW1lKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpmcmFtZU5hbWVzKTog
cmVtb3ZlIG9ic29sZXRlIG1fYlByZWxvYWRlZCBjaGVjaworICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OmZyYW1lcyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y29ubmVjdENoaWxk
KTogY2hlY2sgaXNGcmFtZSwgbm90IGNoaWxkIHR5cGUKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpkaXNjb25uZWN0Q2hpbGQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmhhbmRs
ZUZhbGxiYWNrQ29udGVudCk6IGdyZWF0bHkgc2ltcGxpZnkgdXNpbmcgb253ZXJFbGVtZW50Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6dXBkYXRlQmFzZVVSTEZvckVtcHR5RG9jdW1lbnQpOiB1
c2Ugb3duZXJFbGVtZW50LCBub3RDaGlsZEZyYW1lCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
b25seUxvY2FsUmVmZXJlbmNlcyk6IHJlbW92ZWQKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpz
ZXRPbmx5TG9jYWxSZWZlcmVuY2VzKTogcmVtb3ZlZAorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoK
KyAgICAgICAgKiBwYWdlL0ZyYW1lUHJpdmF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRG
cmFtZTo6Q2hpbGRGcmFtZSk6IHJlbW92ZSBtb3N0IGZpZWxkcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvcmVuZGVyX2ZyYW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0T2JqZWN0
Ojp1cGRhdGVXaWRnZXQpOiBSZW1vdmUgcmVkdW5kYW50IHNldHRpbmcgb2YgYmFzZSBVUkwgZm9y
IGNoaWxkIGRvY3VtZW50CisgICAgICAgIG9mIGlmcmFtZSwgRnJhbWUgaXRzZWxmIHRha2VzIGNh
cmUgb2YgdGhpcyBhbHJlYWR5CisKIDIwMDYtMDItMDMgIEFuZHJldyBXZWxsaW5ndG9uICA8cHJv
dG9uQHdpcmV0YXBwZWQubmV0PgogCiAgICAgICAgIFJldmlld2VkIGFuZCB0d2Vha2VkIGJ5IERh
cmluLgpJbmRleDogYnJpZGdlL21hYy9NYWNGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9t
YWMvTWFjRnJhbWUuaAkocmV2aXNpb24gMTI1NDIpCisrKyBicmlkZ2UvbWFjL01hY0ZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgUVN0cmluZyYgbWltZVR5cGUpOwogICAgIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4o
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3RyaW5nTGlzdCYgcGFyYW1OYW1lcywgY29uc3QgUVN0
cmluZ0xpc3QmIHBhcmFtVmFsdWVzLCBjb25zdCBRU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgdmly
dHVhbCBGcmFtZSogY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3RyaW5nJiBu
YW1lLCBSZW5kZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgRE9NU3RyaW5nJiByZWZlcnJlciwgYm9v
bCBpc09iamVjdCk7CisgICAgdmlydHVhbCBGcmFtZSogY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBSZW5kZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgRE9N
U3RyaW5nJiByZWZlcnJlcik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDbG9zZSgpOwog
CkluZGV4OiBicmlkZ2UvbWFjL01hY0ZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMv
TWFjRnJhbWUubW0JKHJldmlzaW9uIDEyNTQyKQorKysgYnJpZGdlL21hYy9NYWNGcmFtZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjE1LDE0ICs2MTUsMTQgQEAgUGx1Z2luKiBNYWNGcmFtZTo6Y3Jl
YXRlUGx1Z2luKGNvbnN0IEtVUgogfQogCiAKLUZyYW1lKiBNYWNGcmFtZTo6Y3JlYXRlRnJhbWUo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBSZW5kZXJQYXJ0KiByZW5kZXJl
ciwgY29uc3QgRE9NU3RyaW5nJiByZWZlcnJlciwgYm9vbCBpc09iamVjdCkKK0ZyYW1lKiBNYWNG
cmFtZTo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBS
ZW5kZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgRE9NU3RyaW5nJiByZWZlcnJlcikKIHsKICAgICBL
V1FfQkxPQ0tfRVhDRVBUSU9OUzsKICAgICAKICAgICBCT09MIGFsbG93c1Njcm9sbGluZyA9IFlF
UzsKICAgICBpbnQgbWFyZ2luV2lkdGggPSAtMTsKICAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gLTE7
Ci0gICAgaWYgKCFpc09iamVjdCkgeworICAgIGlmIChyZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCByZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGlmcmFt
ZVRhZykpIHsKICAgICAgICAgSFRNTEZyYW1lRWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxI
VE1MRnJhbWVFbGVtZW50SW1wbCAqPihyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICAgICAgYWxs
b3dzU2Nyb2xsaW5nID0gby0+c2Nyb2xsaW5nTW9kZSgpICE9IFFTY3JvbGxWaWV3OjpBbHdheXNP
ZmY7CiAgICAgICAgIG1hcmdpbldpZHRoID0gby0+Z2V0TWFyZ2luV2lkdGgoKTsKSW5kZXg6IGxv
YWRlci9Eb2NMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9Eb2NMb2FkZXIuY3BwCShy
ZXZpc2lvbiAxMjU0MSkKKysrIGxvYWRlci9Eb2NMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNyArMTAwLDYgQEAgYm9vbCBEb2NMb2FkZXI6Om5lZWRSZWxvYWQoY29uc3QgS1VSTCAm
ZgogQ2FjaGVkSW1hZ2UgKkRvY0xvYWRlcjo6cmVxdWVzdEltYWdlKGNvbnN0IERPTTo6RE9NU3Ry
aW5nICZ1cmwpCiB7CiAgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybC5x
c3RyaW5nKCkpOwotICAgIGlmICggbV9mcmFtZSAmJiBtX2ZyYW1lLT5vbmx5TG9jYWxSZWZlcmVu
Y2VzKCkgJiYgZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CiAKICAgICBp
ZiAoS1dRQ2hlY2tJZlJlbG9hZGluZyh0aGlzKSkgewogICAgICAgICBzZXRDYWNoZVBvbGljeShL
SU86OkNDX1JlbG9hZCk7CkBAIC0xMTYsNyArMTE1LDYgQEAgQ2FjaGVkSW1hZ2UgKkRvY0xvYWRl
cjo6cmVxdWVzdEltYWdlKGNvbgogQ2FjaGVkQ1NTU3R5bGVTaGVldCAqRG9jTG9hZGVyOjpyZXF1
ZXN0U3R5bGVTaGVldCggY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyYg
Y2hhcnNldCkKIHsKICAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVVUkwodXJsLnFz
dHJpbmcoKSk7Ci0gICAgaWYgKCBtX2ZyYW1lICYmIG1fZnJhbWUtPm9ubHlMb2NhbFJlZmVyZW5j
ZXMoKSAmJiBmdWxsVVJMLnByb3RvY29sKCkgIT0gImZpbGUiKSByZXR1cm4gMDsKIAogICAgIGlm
IChLV1FDaGVja0lmUmVsb2FkaW5nKHRoaXMpKSB7CiAgICAgICAgIHNldENhY2hlUG9saWN5KEtJ
Tzo6Q0NfUmVsb2FkKTsKQEAgLTEzMiw3ICsxMzAsNiBAQCBDYWNoZWRDU1NTdHlsZVNoZWV0ICpE
b2NMb2FkZXI6OnJlcXVlc3RTCiBDYWNoZWRTY3JpcHQgKkRvY0xvYWRlcjo6cmVxdWVzdFNjcmlw
dCggY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyYgY2hhcnNldCkKIHsK
ICAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVVUkwodXJsLnFzdHJpbmcoKSk7Ci0g
ICAgaWYgKCBtX2ZyYW1lICYmIG1fZnJhbWUtPm9ubHlMb2NhbFJlZmVyZW5jZXMoKSAmJiBmdWxs
VVJMLnByb3RvY29sKCkgIT0gImZpbGUiKSByZXR1cm4gMDsKIAogICAgIGlmIChLV1FDaGVja0lm
UmVsb2FkaW5nKHRoaXMpKSB7CiAgICAgICAgIHNldENhY2hlUG9saWN5KEtJTzo6Q0NfUmVsb2Fk
KTsKQEAgLTE1MCw4ICsxNDcsNiBAQCBDYWNoZWRYU0xTdHlsZVNoZWV0KiBEb2NMb2FkZXI6OnJl
cXVlc3RYCiB7CiAgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybC5xc3Ry
aW5nKCkpOwogICAgIAotICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPm9ubHlMb2NhbFJlZmVy
ZW5jZXMoKSAmJiBmdWxsVVJMLnByb3RvY29sKCkgIT0gImZpbGUiKSByZXR1cm4gMDsKLSAgICAK
ICAgICBpZiAoS1dRQ2hlY2tJZlJlbG9hZGluZyh0aGlzKSkKICAgICAgICAgc2V0Q2FjaGVQb2xp
Y3koS0lPOjpDQ19SZWxvYWQpOwogICAgIApJbmRleDogcGFnZS9GcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBhZ2UvRnJhbWUuaAkocmV2aXNpb24gMTI1NDIpCisrKyBwYWdlL0ZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNiBAQCBlbnVtIE9iamVjdENvbnRlbnRUeXBlCiAKIGNs
YXNzIEZyYW1lIDogcHVibGljIE9iamVjdENvbnRlbnRzIHsKICAgZnJpZW5kIGNsYXNzIEZyYW1l
VmlldzsKLSAgZnJpZW5kIGNsYXNzIEtIVE1MUnVuOwogICBmcmllbmQgY2xhc3MgS0pTOjpET01E
b2N1bWVudDsKICAgZnJpZW5kIGNsYXNzIEtKUzo6U2VsZWN0aW9uOwogICBmcmllbmQgY2xhc3Mg
S0pTOjpTZWxlY3Rpb25GdW5jOwpAQCAtMjM3LDIwICsyMzYsNiBAQCBwdWJsaWM6CiAgICAqLwog
ICBib29sIGF1dG9sb2FkSW1hZ2VzKCkgY29uc3Q7CiAKLSAgLyoqCi0gICAqIFNlY3VyaXR5IG9w
dGlvbi4KLSAgICoKLSAgICogU3BlY2lmeSB3aGV0aGVyIG9ubHkgbG9jYWwgcmVmZXJlbmNlcyAo
IHN0eWxlc2hlZXRzLCBpbWFnZXMsIHNjcmlwdHMsIHN1YmRvY3VtZW50cyApCi0gICAqIHNob3Vs
ZCBiZSBsb2FkZWQuICggZGVmYXVsdCBmYWxzZSAtIGV2ZXJ5dGhpbmcgaXMgbG9hZGVkLCBpZiB0
aGUgbW9yZSBzcGVjaWZpYwotICAgKiBvcHRpb25zIGFsbG93ICkKLSAgICovCi0gIHZvaWQgc2V0
T25seUxvY2FsUmVmZXJlbmNlcyhib29sIGVuYWJsZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMg
d2hldGhlciByZWZlcmVuY2VzIHNob3VsZCBiZSBsb2FkZWQgKCBkZWZhdWx0IGZhbHNlICkKLSAg
ICoqLwotICBib29sIG9ubHlMb2NhbFJlZmVyZW5jZXMoKSBjb25zdDsKLQogICB2b2lkIGF1dG9s
b2FkSW1hZ2VzKGJvb2wgZSkgeyBzZXRBdXRvbG9hZEltYWdlcyhlKTsgfQogICB2b2lkIGVuYWJs
ZU1ldGFSZWZyZXNoKGJvb2wgZSkgeyBzZXRNZXRhUmVmcmVzaEVuYWJsZWQoZSk7IH0KICAgYm9v
bCBzZXRDaGFyc2V0KCBjb25zdCBRU3RyaW5nICYsIGJvb2wgKSB7IHJldHVybiB0cnVlOyB9CkBA
IC03MjIsMTEgKzcwNyw2IEBAIHNpZ25hbHM6CiAgIHZvaWQgb25VUkwoIGNvbnN0IFFTdHJpbmcg
JnVybCApOwogCiAgIC8qKgotICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBy
aWdodCBtb3VzZSBidXR0b24gb24gdGhlIGRvY3VtZW50LgotICAgKi8KLSAgdm9pZCBwb3B1cE1l
bnUoY29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBJbnRQb2ludCAmcG9pbnQpOwotCi0gIC8qKgog
ICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLgog
ICAgKi8KICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7CkBAIC04MTcsNyArNzk3LDcgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICB2aXJ0dWFsIERPTVN0cmluZyBnZW5lcmF0ZUZyYW1lTmFtZSgp
ID0gMDsKICAgdmlydHVhbCBQbHVnaW4qIGNyZWF0ZVBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFFTdHJpbmdMaXN0JiBwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFFTdHJpbmcmIG1pbWVUeXBlKSA9IDA7Ci0gIHZpcnR1YWwgRnJhbWUqIGNyZWF0
ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgUVN0cmluZyYgbmFtZSwgUmVuZGVyUGFydCog
cmVuZGVyZXIsIGNvbnN0IERPTVN0cmluZyYgcmVmZXJyZXIsIGJvb2wgaXNPYmplY3QpID0gMDsK
KyAgdmlydHVhbCBGcmFtZSogY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3Ry
aW5nJiBuYW1lLCBSZW5kZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgRE9NU3RyaW5nJiByZWZlcnJl
cikgPSAwOwogICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgUVN0cmluZyYgbWltZVR5cGUpID0gMDsKIAogcHVibGljIHNs
b3RzOgpAQCAtODgyLDI2ICs4NjIsMjUgQEAgcHJpdmF0ZToKIAogICB2b2lkIG92ZXJVUkwoIGNv
bnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmdGFyZ2V0LCBib29sIHNoaWZ0UHJlc3Nl
ZCA9IGZhbHNlICk7CiAKLSAgYm9vbCBwcm9jZXNzT2JqZWN0UmVxdWVzdCggQ2hpbGRGcmFtZSAq
Y2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3QgUVN0cmluZyAmbWltZXR5cGUgKTsKLSAgCiAg
IHZvaWQgc3VibWl0Rm9ybSggY29uc3QgY2hhciAqYWN0aW9uLCBjb25zdCBRU3RyaW5nICZ1cmws
IGNvbnN0IEZvcm1EYXRhICZmb3JtRGF0YSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3Ry
aW5nICZ0YXJnZXQsIGNvbnN0IFFTdHJpbmcmIGNvbnRlbnRUeXBlID0gUVN0cmluZzo6bnVsbCwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBib3VuZGFyeSA9IFFTdHJpbmc6Om51
bGwgKTsKIAotICB2b2lkIHBvcHVwTWVudSggY29uc3QgUVN0cmluZyAmdXJsICk7Ci0KICAgdm9p
ZCBpbml0KEZyYW1lVmlldyopOwogCiAgIGJvb2wgc2NoZWR1bGVTY3JpcHQoTm9kZUltcGwqLCBj
b25zdCBRU3RyaW5nJiBzY3JpcHQpOwogCiAgIEtKUzo6SlNWYWx1ZSogZXhlY3V0ZVNjaGVkdWxl
ZFNjcmlwdCgpOwogCi0gIGJvb2wgcmVxdWVzdEZyYW1lKFJlbmRlclBhcnQgKmZyYW1lLCBjb25z
dCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJmZyYW1lTmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtTmFtZXMgPSBRU3RyaW5nTGlzdCgpLCBjb25z
dCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMgPSBRU3RyaW5nTGlzdCgpLCBib29sIGlzSUZyYW1l
ID0gZmFsc2UpOworICBib29sIHJlcXVlc3RGcmFtZShSZW5kZXJQYXJ0ICpmcmFtZSwgY29uc3Qg
UVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZmcmFtZU5hbWUpOwogICBib29sIHJlcXVlc3RP
YmplY3QoUmVuZGVyUGFydCAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmlu
ZyAmc2VydmljZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3Qg
JnBhcmFtTmFtZXMgPSBRU3RyaW5nTGlzdCgpLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1
ZXMgPSBRU3RyaW5nTGlzdCgpKTsKLSAgYm9vbCByZXF1ZXN0T2JqZWN0KENoaWxkRnJhbWUgKmNo
aWxkLCBjb25zdCBLVVJMICZ1cmwsIGNvbnN0IFVSTEFyZ3MgJmFyZ3MgPSBVUkxBcmdzKCkpOwot
ICB2aXJ0dWFsIE9iamVjdENvbnRlbnRzICpjcmVhdGVQYXJ0KGNvbnN0IENoaWxkRnJhbWUgJmNo
aWxkLCBjb25zdCBLVVJMICZ1cmwsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKTsKKyAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5n
TGlzdCAmcGFyYW1WYWx1ZXMpOworCisgIAorICBib29sIHNob3VsZFVzZVBsdWdpbihOb2RlSW1w
bCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBoYXNGYWxsYmFjaywgYm9vbCYgdXNlRmFsbGJhY2spOworICBib29sIGxvYWRQbHVnaW4oQ2hp
bGRGcmFtZSAqY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3QgUVN0cmluZyAmbWltZVR5cGUs
IAorICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0
IFFTdHJpbmdMaXN0JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFjayk7CisgIGJvb2wgbG9h
ZFN1YmZyYW1lKENoaWxkRnJhbWUqIGNoaWxkLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IERPTVN0
cmluZyYgcmVmZXJyZXIpOwogCiBwdWJsaWM6CiAgIERPTVN0cmluZyByZXF1ZXN0RnJhbWVOYW1l
KCk7CkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmNwcAko
cmV2aXNpb24gMTI1NDIpCisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIz
NCwxNiArMTIzNCw2IEBAIFFDdXJzb3IgRnJhbWU6OnVybEN1cnNvcigpIGNvbnN0CiAgIHJldHVy
biBLQ3Vyc29yOjpoYW5kQ3Vyc29yKCk7CiB9CiAKLWJvb2wgRnJhbWU6Om9ubHlMb2NhbFJlZmVy
ZW5jZXMoKSBjb25zdAotewotICByZXR1cm4gZC0+bV9vbmx5TG9jYWxSZWZlcmVuY2VzOwotfQot
Ci12b2lkIEZyYW1lOjpzZXRPbmx5TG9jYWxSZWZlcmVuY2VzKGJvb2wgZW5hYmxlKQotewotICBk
LT5tX29ubHlMb2NhbFJlZmVyZW5jZXMgPSBlbmFibGU7Ci19Ci0KIFFTdHJpbmcgRnJhbWU6OnNl
bGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYWluVGV4dChzZWxlY3Rpb24oKS50
b1JhbmdlKCkuZ2V0KCkpOwpAQCAtMTQ4NCwyMTEgKzE0NzQsMTUxIEBAIHZvaWQgRnJhbWU6OnVy
bFNlbGVjdGVkKCBjb25zdCBRU3RyaW5nICYKICAgdXJsU2VsZWN0ZWQoY1VSTCwgYnV0dG9uLCBz
dGF0ZSwgYXJncyk7CiB9CiAKLQotYm9vbCBGcmFtZTo6cmVxdWVzdEZyYW1lKCBSZW5kZXJQYXJ0
ICpwYXJ0LCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJmZyYW1lTmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVz
LCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMsIGJvb2wgaXNJRnJhbWUgKQotewotICBG
cmFtZUl0IGl0ID0gZC0+bV9mcmFtZXMuZmluZCggZnJhbWVOYW1lICk7Ci0gIGlmIChpdCA9PSBk
LT5tX2ZyYW1lcy5lbmQoKSkgewotICAgIENoaWxkRnJhbWUgY2hpbGQ7Ci0gICAgY2hpbGQubV9u
YW1lID0gZnJhbWVOYW1lOwotICAgIGl0ID0gZC0+bV9mcmFtZXMuYXBwZW5kKCBjaGlsZCApOwot
ICB9Ci0KLSAgKCppdCkubV90eXBlID0gaXNJRnJhbWUgPyBDaGlsZEZyYW1lOjpJRnJhbWUgOiBD
aGlsZEZyYW1lOjpGcmFtZTsKLSAgKCppdCkubV9yZW5kZXJlciA9IHBhcnQ7Ci0gICgqaXQpLm1f
cGFyYW1WYWx1ZXMgPSBwYXJhbU5hbWVzOwotICAoKml0KS5tX3BhcmFtTmFtZXMgPSBwYXJhbVZh
bHVlczsKLQotICAvLyBTdXBwb3J0IGZvciA8ZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnN0cmluZyI+
Ci0gIGlmICh1cmwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKLSAgICBpZiAo
IXByb2Nlc3NPYmplY3RSZXF1ZXN0KCYoKml0KSwgImFib3V0OmJsYW5rIiwgInRleHQvaHRtbCIg
KSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lICpuZXdQYXJ0ID0gc3RhdGljX2Nh
c3Q8RnJhbWUgKj4oJiooKml0KS5tX2ZyYW1lKTsgCi0gICAgbmV3UGFydC0+cmVwbGFjZUNvbnRl
bnRzV2l0aFNjcmlwdFJlc3VsdCggdXJsICk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IHJldHVybiByZXF1ZXN0T2JqZWN0KCAmKCppdCksIGNvbXBsZXRlVVJMKCB1cmwgKSk7Ci19Ci0K
IERPTVN0cmluZyBGcmFtZTo6cmVxdWVzdEZyYW1lTmFtZSgpCiB7CiAgICAgcmV0dXJuIGdlbmVy
YXRlRnJhbWVOYW1lKCk7CiB9CiAKLWJvb2wgRnJhbWU6OnJlcXVlc3RPYmplY3QoIFJlbmRlclBh
cnQgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnNlcnZpY2VUeXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJh
bU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMgKQorYm9vbCBGcmFtZTo6cmVx
dWVzdEZyYW1lKFJlbmRlclBhcnQgKnBhcnQsIGNvbnN0IFFTdHJpbmcgJl91cmwsIGNvbnN0IFFT
dHJpbmcgJmZyYW1lTmFtZSkKIHsKLSAgQ2hpbGRGcmFtZSBjaGlsZDsKLSAgUVZhbHVlTGlzdDxD
aGlsZEZyYW1lPjo6SXRlcmF0b3IgaXQgPSBkLT5tX29iamVjdHMuYXBwZW5kKCBjaGlsZCApOwot
ICAoKml0KS5tX3JlbmRlcmVyID0gZnJhbWU7Ci0gICgqaXQpLm1fdHlwZSA9IENoaWxkRnJhbWU6
Ok9iamVjdDsKLSAgKCppdCkubV9wYXJhbU5hbWVzID0gcGFyYW1OYW1lczsKLSAgKCppdCkubV9w
YXJhbVZhbHVlcyA9IHBhcmFtVmFsdWVzOwotICAoKml0KS5tX2hhc0ZhbGxiYWNrQ29udGVudCA9
IGZyYW1lLT5oYXNGYWxsYmFja0NvbnRlbnQoKTsKLQotICBLVVJMIGNvbXBsZXRlZFVSTDsKLSAg
aWYgKCF1cmwuaXNFbXB0eSgpKQotICAgIGNvbXBsZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7
Ci0KLSAgVVJMQXJncyBhcmdzOwotICBhcmdzLnNlcnZpY2VUeXBlID0gc2VydmljZVR5cGU7Ci0g
IHJldHVybiByZXF1ZXN0T2JqZWN0KCAmKCppdCksIGNvbXBsZXRlZFVSTCwgYXJncyApOwotfQor
ICAgIEZyYW1lSXQgaXQgPSBkLT5tX2ZyYW1lcy5maW5kKGZyYW1lTmFtZSk7CisgICAgaWYgKGl0
ID09IGQtPm1fZnJhbWVzLmVuZCgpKSB7CisgICAgICAgIENoaWxkRnJhbWUgY2hpbGQ7CisgICAg
ICAgIGNoaWxkLm1fbmFtZSA9IGZyYW1lTmFtZTsKKyAgICAgICAgaXQgPSBkLT5tX2ZyYW1lcy5h
cHBlbmQoY2hpbGQpOworICAgIH0KKyAgICAoKml0KS5tX3JlbmRlcmVyID0gcGFydDsKKworICAg
IC8vIFN1cHBvcnQgZm9yIDxmcmFtZSBzcmM9ImphdmFzY3JpcHQ6c3RyaW5nIj4KKyAgICBLVVJM
IHNjcmlwdFVSTDsKKyAgICBLVVJMIHVybDsKKyAgICBpZiAoX3VybC5zdGFydHNXaXRoKCJqYXZh
c2NyaXB0OiIsIGZhbHNlKSkgeworICAgICAgICBzY3JpcHRVUkwgPSBfdXJsOworICAgICAgICB1
cmwgPSAiYWJvdXQ6YmxhbmsiOworICAgIH0gZWxzZQorICAgICAgICB1cmwgPSBjb21wbGV0ZVVS
TChfdXJsKTsKIAotYm9vbCBGcmFtZTo6cmVxdWVzdE9iamVjdCggQ2hpbGRGcmFtZSAqY2hpbGQs
IGNvbnN0IEtVUkwgJnVybCwgY29uc3QgVVJMQXJncyAmX2FyZ3MgKQotewotICBpZiAoY2hpbGQt
Pm1fYlByZWxvYWRlZCkgewotICAgIGlmIChjaGlsZC0+bV9yZW5kZXJlciAmJiBjaGlsZC0+bV9m
cmFtZSAmJiBjaGlsZC0+bV9yZW5kZXJlci0+d2lkZ2V0KCkpCi0gICAgICBjaGlsZC0+bV9yZW5k
ZXJlci0+c2V0V2lkZ2V0KCBjaGlsZC0+bV9yZW5kZXJlci0+d2lkZ2V0KCkpOworICAgIGlmICgo
Kml0KS5tX2ZyYW1lKSB7CisgICAgICAgIFVSTEFyZ3MgYXJnczsKKyAgICAgICAgYXJncy5tZXRh
RGF0YSgpLnNldCgicmVmZXJyZXIiLCBkLT5tX3JlZmVycmVyKTsKKyAgICAgICAgYXJncy5yZWxv
YWQgPSAoZC0+bV9jYWNoZVBvbGljeSA9PSBLSU86OkNDX1JlbG9hZCkgfHwgKGQtPm1fY2FjaGVQ
b2xpY3kgPT0gS0lPOjpDQ19SZWZyZXNoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWUgKj4o
KCppdCkubV9mcmFtZS5nZXQoKSktPm9wZW5VUkxSZXF1ZXN0KHVybCwgYXJncyk7CisgICAgfSBl
bHNlIGlmICghbG9hZFN1YmZyYW1lKCYoKml0KSwgdXJsLCBkLT5tX3JlZmVycmVyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAoIXNjcmlwdFVSTC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgRnJhbWUgKm5ld1BhcnQgPSBzdGF0aWNfY2FzdDxGcmFtZSAqPigmKigqaXQp
Lm1fZnJhbWUpOyAKKyAgICAgICAgbmV3UGFydC0+cmVwbGFjZUNvbnRlbnRzV2l0aFNjcmlwdFJl
c3VsdChzY3JpcHRVUkwpOworICAgIH0KIAotICAgIGNoaWxkLT5tX2JQcmVsb2FkZWQgPSBmYWxz
ZTsKICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIFVSTEFyZ3MgYXJncyggX2FyZ3MgKTsKLQot
Ci0gIGlmIChjaGlsZC0+bV9mcmFtZSAmJiAhYXJncy5yZWxvYWQgJiYgY2hpbGQtPm1fZnJhbWUt
PmlzRnJhbWUoKSAmJiB1cmxjbXAoc3RhdGljX2Nhc3Q8RnJhbWUgKj4oY2hpbGQtPm1fZnJhbWUu
Z2V0KCkpLT51cmwoKS51cmwoKSwgdXJsLnVybCgpLCB0cnVlLCB0cnVlKSkKLSAgICBhcmdzLnNl
cnZpY2VUeXBlID0gY2hpbGQtPm1fc2VydmljZVR5cGU7Ci0KLSAgY2hpbGQtPm1fYXJncyA9IGFy
Z3M7Ci0gIGNoaWxkLT5tX2FyZ3MucmVsb2FkID0gKGQtPm1fY2FjaGVQb2xpY3kgPT0gS0lPOjpD
Q19SZWxvYWQpIHx8IChkLT5tX2NhY2hlUG9saWN5ID09IEtJTzo6Q0NfUmVmcmVzaCk7Ci0gIGNo
aWxkLT5tX3NlcnZpY2VOYW1lID0gUVN0cmluZzo6bnVsbDsKLSAgaWYgKCFkLT5tX3JlZmVycmVy
LmlzRW1wdHkoKSAmJiAhY2hpbGQtPm1fYXJncy5tZXRhRGF0YSgpLmNvbnRhaW5zKCAicmVmZXJy
ZXIiICkpCi0gICAgY2hpbGQtPm1fYXJncy5tZXRhRGF0YSgpLnNldCgicmVmZXJyZXIiLCBkLT5t
X3JlZmVycmVyKTsKLQotCi0gIC8vIFdlIHdhbnQgYSBGcmFtZSBpZiB0aGUgSFRNTCBzYXlzIDxm
cmFtZSBzcmM9IiI+IG9yIDxmcmFtZSBzcmM9ImFib3V0OmJsYW5rIj4KLSAgaWYgKCh1cmwuaXNF
bXB0eSgpIHx8IHVybC51cmwoKSA9PSAiYWJvdXQ6YmxhbmsiKSAmJiBhcmdzLnNlcnZpY2VUeXBl
LmlzRW1wdHkoKSkKLSAgICBhcmdzLnNlcnZpY2VUeXBlID0gUVN0cmluZzo6ZnJvbUxhdGluMSgg
InRleHQvaHRtbCIgKTsKK30KIAotICByZXR1cm4gcHJvY2Vzc09iamVjdFJlcXVlc3QoIGNoaWxk
LCB1cmwsIGFyZ3Muc2VydmljZVR5cGUgKTsKK2Jvb2wgRnJhbWU6OnJlcXVlc3RPYmplY3QoUmVu
ZGVyUGFydCAqcmVuZGVyZXIsIGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmbWlt
ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJh
bU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMpCit7CisgICAgQ2hpbGRGcmFt
ZSBjaGlsZDsKKyAgICBRVmFsdWVMaXN0PENoaWxkRnJhbWU+OjpJdGVyYXRvciBpdCA9IGQtPm1f
b2JqZWN0cy5hcHBlbmQoY2hpbGQpOworICAgICgqaXQpLm1fcmVuZGVyZXIgPSByZW5kZXJlcjsK
KyAgICAKKyAgICBLVVJMIGNvbXBsZXRlZFVSTDsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkpCisg
ICAgICAgIGNvbXBsZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7CisgICAgCisgICAgaWYgKHVy
bC5pc0VtcHR5KCkgJiYgbWltZVR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGNoZWNrRW1pdExv
YWRFdmVudCgpOworICAgICAgICBjaGlsZC5tX2JDb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB1c2VGYWxsYmFjazsKKyAgICBpZiAo
c2hvdWxkVXNlUGx1Z2luKCgqaXQpLm1fcmVuZGVyZXItPmVsZW1lbnQoKSwgY29tcGxldGVkVVJM
LCBtaW1lVHlwZSwgcmVuZGVyZXItPmhhc0ZhbGxiYWNrQ29udGVudCgpLCB1c2VGYWxsYmFjaykp
CisgICAgICAgIHJldHVybiBsb2FkUGx1Z2luKCYoKml0KSwgY29tcGxldGVkVVJMLCBtaW1lVHlw
ZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIHVzZUZhbGxiYWNrKTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiBsb2FkU3ViZnJhbWUoJigqaXQpLCBjb21wbGV0ZWRVUkwsIGQtPm1fcmVmZXJy
ZXIpOwogfQogCi1ib29sIEZyYW1lOjpwcm9jZXNzT2JqZWN0UmVxdWVzdCggQ2hpbGRGcmFtZSAq
Y2hpbGQsIGNvbnN0IEtVUkwgJl91cmwsIGNvbnN0IFFTdHJpbmcgJm1pbWV0eXBlICkKK2Jvb2wg
RnJhbWU6OnNob3VsZFVzZVBsdWdpbihOb2RlSW1wbCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBRU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBoYXNGYWxsYmFjaywgYm9vbCYgdXNlRmFs
bGJhY2spCiB7Ci0gIC8vIElNUE9SVEFOVDogY3JlYXRlIGEgY29weSBvZiB0aGUgdXJsIGhlcmUs
IGJlY2F1c2UgaXQgaXMganVzdCBhIHJlZmVyZW5jZSwgd2hpY2ggd2FzIGxpa2VseSB0byBiZSBn
aXZlbgotICAvLyBieSBhbiBlbWl0dGluZyBmcmFtZSBwYXJ0IChlbWl0IG9wZW5VUkxSZXF1ZXN0
KCBibGFodXJsLCAuLi4gKSAuIEEgZmV3IGxpbmVzIGJlbG93IHdlIGRlbGV0ZSB0aGUgcGFydAot
ICAvLyB0aG91Z2ggLT4gdGhlIHJlZmVyZW5jZSBiZWNvbWVzIGludmFsaWQgLT4gY3Jhc2ggaXMg
bGlrZWx5Ci0gIEtVUkwgdXJsKCBfdXJsICk7CisgICAgdXNlRmFsbGJhY2sgPSBmYWxzZTsKKyAg
ICBPYmplY3RDb250ZW50VHlwZSBvYmplY3RUeXBlID0gb2JqZWN0Q29udGVudFR5cGUodXJsLCBt
aW1lVHlwZSk7CiAKLSAgLy8ga2h0bWxydW4gY2FsbGVkIHVzIHRoaXMgd2F5IHRvIGluZGljYXRl
IGEgbG9hZGluZyBlcnJvcgotICBpZiAoIGQtPm1fb25seUxvY2FsUmVmZXJlbmNlcyB8fCAoIHVy
bC5pc0VtcHR5KCkgJiYgbWltZXR5cGUuaXNFbXB0eSgpICkgKQotICB7Ci0gICAgICBjaGVja0Vt
aXRMb2FkRXZlbnQoKTsKLSAgICAgIGNoaWxkLT5tX2JDb21wbGV0ZWQgPSB0cnVlOwotICAgICAg
cmV0dXJuIHRydWU7Ci0gIH0KKyAgICAvLyBpZiBhbiBvYmplY3QncyBjb250ZW50IGNhbid0IGJl
IGhhbmRsZWQgYW5kIGl0IGhhcyBubyBmYWxsYmFjaywgbGV0CisgICAgLy8gaXQgYmUgaGFuZGxl
ZCBhcyBhIHBsdWdpbiB0byBzaG93IHRoZSBicm9rZW4gcGx1Z2luIGljb24KKyAgICBpZiAob2Jq
ZWN0VHlwZSA9PSBPYmplY3RDb250ZW50Tm9uZSAmJiBoYXNGYWxsYmFjaykKKyAgICAgICAgdXNl
RmFsbGJhY2sgPSB0cnVlOwogCi0gIGlmIChjaGlsZC0+bV9iTm90aWZ5KQotICB7Ci0gICAgICBj
aGlsZC0+bV9iTm90aWZ5ID0gZmFsc2U7Ci0gICAgICBpZiAoICFjaGlsZC0+bV9hcmdzLmxvY2tI
aXN0b3J5KCkgKQotICAgICAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24tPm9wZW5VUkxOb3RpZnko
KTsKLSAgfQorICAgIHJldHVybiBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROb25lIHx8IG9i
amVjdFR5cGUgPT0gT2JqZWN0Q29udGVudFBsdWdpbjsKK30KIAotICBpZiAoY2hpbGQtPm1fZnJh
bWUpCi0gIHsKLSAgICBGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZSAqPigmKmNoaWxk
LT5tX2ZyYW1lKTsKLSAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmlzRnJhbWUoKSkgewotICAgICAg
VVJMQXJncyBhcmdzOwotICAgICAgaWYgKCFkLT5tX3JlZmVycmVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgYXJncy5tZXRhRGF0YSgpLnNldCgicmVmZXJyZXIiLCBkLT5tX3JlZmVycmVyKTsKLSAgICAg
IGZyYW1lLT5vcGVuVVJMUmVxdWVzdCh1cmwsIGFyZ3MpOwotICAgIH0KLSAgfQotICBlbHNlCi0g
IHsKLSAgICBPYmplY3RDb250ZW50cyAqcGFydCA9IGNyZWF0ZVBhcnQoKmNoaWxkLCB1cmwsIG1p
bWV0eXBlKTsKLSAgICBpZiAocGFydCAmJiBwYXJ0LT5pc0ZyYW1lKCkpIHsKLSAgICAgICAgRnJh
bWUgKmZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWUgKj4ocGFydCk7Ci0gICAgICAgIGZyYW1lLT5j
aGlsZEJlZ2luKCk7Ci0gICAgfQogCi0gICAgaWYgKCFwYXJ0KSB7Citib29sIEZyYW1lOjpsb2Fk
UGx1Z2luKENoaWxkRnJhbWUgKmNoaWxkLCBjb25zdCBLVVJMICZ1cmwsIGNvbnN0IFFTdHJpbmcg
Jm1pbWVUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QmIHBh
cmFtTmFtZXMsIGNvbnN0IFFTdHJpbmdMaXN0JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFj
aykKK3sKKyAgICBpZiAodXNlRmFsbGJhY2spIHsKICAgICAgICAgY2hlY2tFbWl0TG9hZEV2ZW50
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvL0NSSVRJQ0FMIFNUVUZG
Ci0gICAgaWYgKGNoaWxkLT5tX2ZyYW1lKQotICAgICAgZGlzY29ubmVjdENoaWxkKGNoaWxkKTsK
LQotICAgIGNoaWxkLT5tX3NlcnZpY2VUeXBlID0gbWltZXR5cGU7Ci0gICAgaWYgKGNoaWxkLT5t
X3JlbmRlcmVyICYmIHBhcnQtPnZpZXcoKSkKLSAgICAgIGNoaWxkLT5tX3JlbmRlcmVyLT5zZXRX
aWRnZXQocGFydC0+dmlldygpKTsKLQotCi0gICAgY2hpbGQtPm1fZnJhbWUgPSBwYXJ0OwotICAg
IGFzc2VydChjaGlsZC0+bV9mcmFtZSk7Ci0KLSAgICBjb25uZWN0Q2hpbGQoY2hpbGQpOwotICB9
Ci0KLSAgY2hlY2tFbWl0TG9hZEV2ZW50KCk7Ci0gIC8vIFNvbWUgSlMgY29kZSBpbiB0aGUgbG9h
ZCBldmVudCBtYXkgaGF2ZSBkZXN0cm95ZWQgdGhlIHBhcnQKLSAgLy8gSW4gdGhhdCBjYXNlLCBh
Ym9ydAotICBpZiAoIWNoaWxkLT5tX3JlbmRlcmVyKQotICAgIHJldHVybiBmYWxzZTsKLQotICBp
ZiAoY2hpbGQtPm1fYlByZWxvYWRlZCkKLSAgewotICAgIGlmIChjaGlsZC0+bV9yZW5kZXJlciAm
JiBjaGlsZC0+bV9yZW5kZXJlcikKLSAgICAgIGNoaWxkLT5tX3JlbmRlcmVyLT5zZXRXaWRnZXQo
Y2hpbGQtPm1fcmVuZGVyZXItPndpZGdldCgpKTsKLQotICAgIGNoaWxkLT5tX2JQcmVsb2FkZWQg
PSBmYWxzZTsKKyAgICBQbHVnaW4qIHBsdWdpbiA9IGNyZWF0ZVBsdWdpbih1cmwsIHBhcmFtTmFt
ZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSk7CisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAg
Y2hlY2tFbWl0TG9hZEV2ZW50KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgaWYgKGNoaWxkLT5tX3JlbmRlcmVyICYmIHBsdWdpbi0+dmlldygpKQorICAgICAgICBj
aGlsZC0+bV9yZW5kZXJlci0+c2V0V2lkZ2V0KHBsdWdpbi0+dmlldygpKTsKKyAgICBjaGlsZC0+
bV9mcmFtZSA9IHBsdWdpbjsKKyAgICAKKyAgICBjaGVja0VtaXRMb2FkRXZlbnQoKTsKKyAgICAK
KyAgICAvLyBTb21lIEpTIGNvZGUgaW4gdGhlIGxvYWQgZXZlbnQgbWF5IGhhdmUgZGVzdHJveWVk
IHRoZSBwbHVnaW4sIGluIHRoYXQgY2FzZSwgYWJvcnQKKyAgICBpZiAoIWNoaWxkLT5tX3JlbmRl
cmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY2hpbGQtPm1fYkNvbXBsZXRl
ZCA9IGZhbHNlOwogICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgY2hpbGQtPm1fYXJncy5yZWxv
YWQgPSAoZC0+bV9jYWNoZVBvbGljeSA9PSBLSU86OkNDX1JlbG9hZCkgfHwgKGQtPm1fY2FjaGVQ
b2xpY3kgPT0gS0lPOjpDQ19SZWZyZXNoKTsKLQotICAvLyBtYWtlIHN1cmUgdGhlIHBhcnQgaGFz
IGEgd2F5IHRvIGZpbmQgb3V0IGFib3V0IHRoZSBtaW1ldHlwZS4KLSAgLy8gd2UgYWN0dWFsbHkg
c2V0IGl0IGluIGNoaWxkLT5tX2FyZ3MgaW4gcmVxdWVzdE9iamVjdCBhbHJlYWR5LAotICAvLyBi
dXQgaXQncyB1c2VsZXNzIGlmIHdlIGhhZCB0byB1c2UgYSBLSFRNTFJ1biBpbnN0YW5jZSwgYXMg
dGhlCi0gIC8vIHBvaW50IHRoZSBydW4gb2JqZWN0IGlzIHRvIGZpbmQgb3V0IGV4YWN0bHkgdGhl
IG1pbWV0eXBlLgotICBjaGlsZC0+bV9hcmdzLnNlcnZpY2VUeXBlID0gbWltZXR5cGU7Ci0KLSAg
Y2hpbGQtPm1fYkNvbXBsZXRlZCA9IGZhbHNlOwotICBpZiAoIGNoaWxkLT5tX2V4dGVuc2lvbiAp
Ci0gICAgY2hpbGQtPm1fZXh0ZW5zaW9uLT5zZXRVUkxBcmdzKCBjaGlsZC0+bV9hcmdzICk7Ci0K
LSAgLy8gSW4gdGhlc2UgY2FzZXMsIHRoZSBzeW5jaHJvbm91cyBsb2FkIHdvdWxkIGhhdmUgZmlu
aXNoZWQKLSAgLy8gYmVmb3JlIHdlIGNvdWxkIGNvbm5lY3QgdGhlIHNpZ25hbHMsIHNvIG1ha2Ug
c3VyZSB0byBzZW5kIHRoZSAKLSAgLy8gY29tcGxldGVkKCkgc2lnbmFsIGZvciB0aGUgY2hpbGQg
YnkgaGFuZAotICAvLyBGSVhNRTogSW4gdGhpcyBjYXNlIHRoZSBGcmFtZSB3aWxsIGhhdmUgZmlu
aXNoZWQgbG9hZGluZyBiZWZvcmUgCi0gIC8vIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhlIGNoaWxk
IGxpc3QuICBJdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0bwotICAvLyBjcmVhdGUgdGhlIGNoaWxk
IGZpcnN0LCB0aGVuIGludm9rZSB0aGUgbG9hZGVyIHNlcGFyYXRlbHkgIAotICBpZiAodXJsLmlz
RW1wdHkoKSB8fCB1cmwudXJsKCkgPT0gImFib3V0OmJsYW5rIikgewotICAgICAgT2JqZWN0Q29u
dGVudHMgKnBhcnQgPSBjaGlsZC0+bV9mcmFtZS5nZXQoKTsKLSAgICAgIGlmIChwYXJ0ICYmIHBh
cnQtPmlzRnJhbWUoKSkgewotICAgICAgICAgIEZyYW1lICpmcmFtZSA9IHN0YXRpY19jYXN0PEZy
YW1lICo+KHBhcnQpOwotICAgICAgICAgIGZyYW1lLT5jb21wbGV0ZWQoKTsKLSAgICAgICAgICBm
cmFtZS0+Y2hlY2tDb21wbGV0ZWQoKTsKLSAgICAgIH0KLSAgfQotICAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLU9iamVjdENvbnRlbnRzKiBGcmFtZTo6Y3JlYXRlUGFydChjb25zdCBDaGlsZEZyYW1l
JiBjaGlsZCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3RyaW5nJiBtaW1lVHlwZSkKK2Jvb2wg
RnJhbWU6OmxvYWRTdWJmcmFtZShDaGlsZEZyYW1lKiBjaGlsZCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBET01TdHJpbmcmIHJlZmVycmVyKQogewotICAgIGJvb2wgaXNPYmplY3QgPSBjaGlsZC5t
X3R5cGUgPT0gQ2hpbGRGcmFtZTo6T2JqZWN0OworICAgIEZyYW1lKiBmcmFtZSA9IGNyZWF0ZUZy
YW1lKHVybCwgY2hpbGQtPm1fbmFtZSwgY2hpbGQtPm1fcmVuZGVyZXIsIHJlZmVycmVyKTsKKyAg
ICBpZiAoIWZyYW1lKSAgeworICAgICAgICBjaGVja0VtaXRMb2FkRXZlbnQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgZnJhbWUtPmNoaWxkQmVnaW4oKTsK
KyAgICAKKyAgICBpZiAoY2hpbGQtPm1fZnJhbWUpCisgICAgICAgIGRpc2Nvbm5lY3RDaGlsZChj
aGlsZCk7CisgICAgCisgICAgaWYgKGNoaWxkLT5tX3JlbmRlcmVyICYmIGZyYW1lLT52aWV3KCkp
CisgICAgICAgIGNoaWxkLT5tX3JlbmRlcmVyLT5zZXRXaWRnZXQoZnJhbWUtPnZpZXcoKSk7CiAg
ICAgCi0gICAgT2JqZWN0Q29udGVudFR5cGUgb2JqZWN0VHlwZSA9IGlzT2JqZWN0ID8gb2JqZWN0
Q29udGVudFR5cGUodXJsLCBtaW1lVHlwZSkgOiBPYmplY3RDb250ZW50RnJhbWU7CisgICAgY2hp
bGQtPm1fZnJhbWUgPSBmcmFtZTsKKyAgICBjb25uZWN0Q2hpbGQoY2hpbGQpOworICAgIAorICAg
IGNoZWNrRW1pdExvYWRFdmVudCgpOworICAgIAorICAgIC8vIFNvbWUgSlMgY29kZSBpbiB0aGUg
bG9hZCBldmVudCBtYXkgaGF2ZSBkZXN0cm95ZWQgdGhlIGZyYW1lLCBpbiB0aGF0IGNhc2UsIGFi
b3J0CisgICAgaWYgKCFjaGlsZC0+bV9yZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIGlmIChvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROb25lKSB7Ci0gICAgICAg
IGlmIChjaGlsZC5tX2hhc0ZhbGxiYWNrQ29udGVudCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBvYmplY3RUeXBlID0gT2JqZWN0Q29udGVudFBsdWdpbjsgLy8gU2luY2Ugbm8gZmFs
bGJhY2sgY29udGVudCBleGlzdHMsIHdlJ2xsIG1ha2UgYSBwbHVnaW4gYW5kIHNob3cgdGhlIGVy
cm9yIGRpYWxvZy4KKyAgICBjaGlsZC0+bV9iQ29tcGxldGVkID0gZmFsc2U7CisgICAgCisgICAg
Ly8gSW4gdGhlc2UgY2FzZXMsIHRoZSBzeW5jaHJvbm91cyBsb2FkIHdvdWxkIGhhdmUgZmluaXNo
ZWQKKyAgICAvLyBiZWZvcmUgd2UgY291bGQgY29ubmVjdCB0aGUgc2lnbmFscywgc28gbWFrZSBz
dXJlIHRvIHNlbmQgdGhlIAorICAgIC8vIGNvbXBsZXRlZCgpIHNpZ25hbCBmb3IgdGhlIGNoaWxk
IGJ5IGhhbmQKKyAgICAvLyBGSVhNRTogSW4gdGhpcyBjYXNlIHRoZSBGcmFtZSB3aWxsIGhhdmUg
ZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgCisgICAgLy8gaXQncyBiZWluZyBhZGRlZCB0byB0aGUg
Y2hpbGQgbGlzdC4gIEl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvCisgICAgLy8gY3JlYXRlIHRo
ZSBjaGlsZCBmaXJzdCwgdGhlbiBpbnZva2UgdGhlIGxvYWRlciBzZXBhcmF0ZWx5ICAKKyAgICBp
ZiAodXJsLmlzRW1wdHkoKSB8fCB1cmwgPT0gImFib3V0OmJsYW5rIikgeworICAgICAgICBmcmFt
ZS0+Y29tcGxldGVkKCk7CisgICAgICAgIGZyYW1lLT5jaGVja0NvbXBsZXRlZCgpOwogICAgIH0K
IAotICAgIGlmIChvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnRQbHVnaW4pCi0gICAgICAgIHJl
dHVybiBjcmVhdGVQbHVnaW4odXJsLCBjaGlsZC5tX3BhcmFtTmFtZXMsIGNoaWxkLm1fcGFyYW1W
YWx1ZXMsIG1pbWVUeXBlKTsKLQotICAgIHJldHVybiBjcmVhdGVGcmFtZSh1cmwsIGNoaWxkLm1f
bmFtZSwgY2hpbGQubV9yZW5kZXJlciwgY2hpbGQubV9hcmdzLm1ldGFEYXRhKCkuZ2V0KCJyZWZl
cnJlciIpLCBpc09iamVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWU6OnN1
Ym1pdEZvcm1BZ2FpbigpCkBAIC0yMDA3LDcgKzE5MzcsNiBAQCBRU3RyaW5nTGlzdCBGcmFtZTo6
ZnJhbWVOYW1lcygpIGNvbnN0CiAgIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmJlZ2lu
KCk7CiAgIENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCApCi0gICAgaWYgKCEoKml0KS5tX2JQcmVsb2FkZWQpCiAgICAgICByZXMg
Kz0gKCppdCkubV9uYW1lOwogCiAgIHJldHVybiByZXM7CkBAIC0yMDIwLDcgKzE5NDksNiBAQCBR
UHRyTGlzdDxPYmplY3RDb250ZW50cz4gRnJhbWU6OmZyYW1lcygpCiAgIENvbnN0RnJhbWVJdCBp
dCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7CiAgIENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1l
cy5lbmQoKTsKICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCApCi0gICAgaWYgKCEoKml0KS5tX2JQ
cmVsb2FkZWQpCiAgICAgICByZXMuYXBwZW5kKCgqaXQpLm1fZnJhbWUuZ2V0KCkpOwogCiAgIHJl
dHVybiByZXM7CkBAIC0yODUyLDggKzI3ODAsOCBAQCBib29sIEZyYW1lOjppc0NoYXJhY3RlclNt
YXJ0UmVwbGFjZUV4ZW1wCiAKIHZvaWQgRnJhbWU6OmNvbm5lY3RDaGlsZChjb25zdCBDaGlsZEZy
YW1lICpjaGlsZCkgY29uc3QKIHsKLSAgICBPYmplY3RDb250ZW50cyAqcGFydCA9IGNoaWxkLT5t
X2ZyYW1lLmdldCgpOwotICAgIGlmIChwYXJ0ICYmIGNoaWxkLT5tX3R5cGUgIT0gQ2hpbGRGcmFt
ZTo6T2JqZWN0KQorICAgIE9iamVjdENvbnRlbnRzKiBwYXJ0ID0gY2hpbGQtPm1fZnJhbWUuZ2V0
KCk7CisgICAgaWYgKHBhcnQgJiYgcGFydC0+aXNGcmFtZSgpKQogICAgIHsKICAgICAgICAgY29u
bmVjdCggcGFydCwgU0lHTkFMKCBzdGFydGVkKCBLSU86OkpvYiAqKSApLAogICAgICAgICAgICAg
ICAgICB0aGlzLCBTTE9UKCBzbG90Q2hpbGRTdGFydGVkKCBLSU86OkpvYiAqKSApICk7CkBAIC0y
ODczLDcgKzI4MDEsNyBAQCB2b2lkIEZyYW1lOjpjb25uZWN0Q2hpbGQoY29uc3QgQ2hpbGRGcmFt
CiB2b2lkIEZyYW1lOjpkaXNjb25uZWN0Q2hpbGQoY29uc3QgQ2hpbGRGcmFtZSAqY2hpbGQpIGNv
bnN0CiB7CiAgICAgT2JqZWN0Q29udGVudHMgKnBhcnQgPSBjaGlsZC0+bV9mcmFtZS5nZXQoKTsK
LSAgICBpZiAocGFydCAmJiBjaGlsZC0+bV90eXBlICE9IENoaWxkRnJhbWU6Ok9iamVjdCkKKyAg
ICBpZiAocGFydCAmJiBwYXJ0LT5pc0ZyYW1lKCkpCiAgICAgewogICAgICAgICBkaXNjb25uZWN0
KCBwYXJ0LCBTSUdOQUwoIHN0YXJ0ZWQoIEtJTzo6Sm9iICopICksCiAgICAgICAgICAgICAgICAg
ICAgIHRoaXMsIFNMT1QoIHNsb3RDaGlsZFN0YXJ0ZWQoIEtJTzo6Sm9iICopICkgKTsKQEAgLTI5
ODIsMTkgKzI5MTAsMTAgQEAgdm9pZCBGcmFtZTo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJ
ZgogCiB2b2lkIEZyYW1lOjpoYW5kbGVGYWxsYmFja0NvbnRlbnQoKQogewotICAgIEZyYW1lICpw
YXJlbnQgPSB0cmVlTm9kZSgpLT5wYXJlbnQoKTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIENoaWxkRnJhbWUgKmNoaWxkRnJhbWUgPSBwYXJlbnQtPmNoaWxkRnJhbWUo
dGhpcyk7Ci0gICAgaWYgKCFjaGlsZEZyYW1lIHx8IGNoaWxkRnJhbWUtPm1fdHlwZSAhPSBDaGls
ZEZyYW1lOjpPYmplY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJQYXJ0ICpyZW5kZXJQ
YXJ0ID0gY2hpbGRGcmFtZS0+bV9yZW5kZXJlcjsKLSAgICBpZiAoIXJlbmRlclBhcnQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBOb2RlSW1wbCAqbm9kZSA9IHJlbmRlclBhcnQtPmVsZW1lbnQoKTsK
LSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICBFbGVt
ZW50SW1wbCogb3duZXIgPSBvd25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyIHx8ICFvd25l
ci0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nh
c3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KG5vZGUpLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQo
KTsKKyAgICBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4ob3duZXIpLT5yZW5k
ZXJGYWxsYmFja0NvbnRlbnQoKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0U2V0dGluZ3MoS0hUTUxT
ZXR0aW5ncyAqc2V0dGluZ3MpCkBAIC0zNzY3LDggKzM2ODYsOSBAQCB2b2lkIEZyYW1lOjpmcmFt
ZURldGFjaGVkKCkKIAogdm9pZCBGcmFtZTo6dXBkYXRlQmFzZVVSTEZvckVtcHR5RG9jdW1lbnQo
KQogewotICAgIGlmICh0cmVlTm9kZSgpLT5wYXJlbnQoKSAmJiAodHJlZU5vZGUoKS0+cGFyZW50
KCktPmNoaWxkRnJhbWUodGhpcyktPm1fdHlwZSA9PSBDaGlsZEZyYW1lOjpJRnJhbWUgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVOb2RlKCktPnBhcmVudCgpLT5jaGls
ZEZyYW1lKHRoaXMpLT5tX3R5cGUgPT0gQ2hpbGRGcmFtZTo6T2JqZWN0KSkKKyAgICBFbGVtZW50
SW1wbCogb3duZXIgPSBvd25lckVsZW1lbnQoKTsKKyAgICAvLyBGSVhNRTogc2hvdWxkIGVtYmVk
IGJlIGluY2x1ZGVkCisgICAgaWYgKG93bmVyICYmIChvd25lci0+aGFzVGFnTmFtZShpZnJhbWVU
YWcpIHx8IG93bmVyLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgb3duZXItPmhhc1RhZ05hbWUo
ZW1iZWRUYWcpKSkKICAgICAgICAgZC0+bV9kb2MtPnNldEJhc2VVUkwodHJlZU5vZGUoKS0+cGFy
ZW50KCktPmQtPm1fZG9jLT5iYXNlVVJMKCkpOwogfQogCkluZGV4OiBwYWdlL0ZyYW1lUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDEyNTQxKQor
KysgcGFnZS9GcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMzUgKzQ0LDI0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgRGVjb2RlcjsKIAotICBzdHJ1Y3QgQ2hp
bGRGcmFtZQotICB7Ci0gICAgICBlbnVtIFR5cGUgeyBGcmFtZSwgSUZyYW1lLCBPYmplY3QgfTsK
LQotICAgICAgQ2hpbGRGcmFtZSgpIHsgbV9iQ29tcGxldGVkID0gZmFsc2U7IG1fYlByZWxvYWRl
ZCA9IGZhbHNlOyBtX3R5cGUgPSBGcmFtZTsgbV9iTm90aWZ5ID0gZmFsc2U7IG1faGFzRmFsbGJh
Y2tDb250ZW50ID0gZmFsc2U7IH0KLQorICAgIHN0cnVjdCBDaGlsZEZyYW1lCisgICAgeworICAg
ICAgICBDaGlsZEZyYW1lKCkgCisgICAgICAgICAgICAgOiBtX2JDb21wbGV0ZWQoZmFsc2UpCisg
ICAgICAgICAgICAgLCBtX2hhc0ZhbGxiYWNrQ29udGVudChmYWxzZSkKKyAgICAgICAgeworICAg
ICAgICB9CiAKLSAgICBRR3VhcmRlZFB0cjxSZW5kZXJQYXJ0PiBtX3JlbmRlcmVyOwotICAgIFJl
ZlB0cjxPYmplY3RDb250ZW50cz4gbV9mcmFtZTsKLSAgICBRR3VhcmRlZFB0cjxCcm93c2VyRXh0
ZW5zaW9uPiBtX2V4dGVuc2lvbjsKLSAgICBRU3RyaW5nIG1fc2VydmljZU5hbWU7Ci0gICAgUVN0
cmluZyBtX3NlcnZpY2VUeXBlOwotICAgIFFTdHJpbmdMaXN0IG1fc2VydmljZXM7Ci0gICAgYm9v
bCBtX2JDb21wbGV0ZWQ7Ci0gICAgUVN0cmluZyBtX25hbWU7Ci0gICAgVVJMQXJncyBtX2FyZ3M7
Ci0gICAgYm9vbCBtX2JQcmVsb2FkZWQ7Ci0gICAgS1VSTCBtX3dvcmtpbmdVUkw7Ci0gICAgVHlw
ZSBtX3R5cGU7Ci0gICAgUVN0cmluZ0xpc3QgbV9wYXJhbU5hbWVzOwotICAgIFFTdHJpbmdMaXN0
IG1fcGFyYW1WYWx1ZXM7Ci0gICAgYm9vbCBtX2JOb3RpZnk7Ci0gICAgYm9vbCBtX2hhc0ZhbGxi
YWNrQ29udGVudDsKLSAgfTsKKyAgICAgICAgUUd1YXJkZWRQdHI8UmVuZGVyUGFydD4gbV9yZW5k
ZXJlcjsKKyAgICAgICAgUmVmUHRyPE9iamVjdENvbnRlbnRzPiBtX2ZyYW1lOworICAgICAgICBi
b29sIG1fYkNvbXBsZXRlZDsKKyAgICAgICAgUVN0cmluZyBtX25hbWU7CisgICAgfTsKIAogY2xh
c3MgRnJhbWVMaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8Q2hpbGRGcmFtZT4KIHsKIHB1YmxpYzoK
LSAgICBJdGVyYXRvciBmaW5kKCBjb25zdCBRU3RyaW5nICZuYW1lICk7CisgICAgSXRlcmF0b3Ig
ZmluZChjb25zdCBRU3RyaW5nICZuYW1lKTsKIH07CiAKIHR5cGVkZWYgRnJhbWVMaXN0OjpDb25z
dEl0ZXJhdG9yIENvbnN0RnJhbWVJdDsK
</data>
<flag name="review"
          id="1505"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>