<?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>120540</bug_id>
          
          <creation_ts>2013-08-30 10:59:03 -0700</creation_ts>
          <short_desc>Use Element&amp; in StyleResolveTree</short_desc>
          <delta_ts>2013-08-30 11:43:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>923077</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-30 10:59:03 -0700</bug_when>
    <thetext>*-&gt;&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923097</commentid>
    <comment_count>1</comment_count>
      <attachid>210137</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-30 11:17:10 -0700</bug_when>
    <thetext>Created attachment 210137
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923102</commentid>
    <comment_count>2</comment_count>
      <attachid>210137</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-30 11:23:47 -0700</bug_when>
    <thetext>Comment on attachment 210137
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=210137&amp;action=review

r=me.

Obligatory whining about places where reasons for dereference safety is not immediately clear:

&gt; Source/WebCore/dom/ContainerNode.cpp:108
&gt;  static inline void attachChild(Node* child)

This should take a Node&amp;.

&gt; Source/WebCore/dom/ContainerNode.cpp:116
&gt;  static inline void detachChild(Node* child)

This should take a Node&amp;.

&gt; Source/WebCore/dom/Element.cpp:2303
&gt; +    Style::resolveTree(*existingPseudoElement, needsStyleRecalc() ? Style::Force : change);

This function should take a PseudoElement&amp; instead of a PseudoElement*.

&gt; Source/WebCore/style/StyleResolveTree.cpp:472
&gt; +    PostAttachCallbackDisabler callbackDisabler(&amp;current);

We should make this RAII object take a ContainerNode&amp; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923115</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-30 11:43:28 -0700</bug_when>
    <thetext>https://trac.webkit.org/r154903</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210137</attachid>
            <date>2013-08-30 11:17:10 -0700</date>
            <delta_ts>2013-08-30 11:23:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>resolvetree-reference.patch</filename>
            <type>text/plain</type>
            <size>40799</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDEzLTA4LTMwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgRWxlbWVudCYgaW4gU3R5
bGVSZXNvbHZlVHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIwNTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphdHRhY2hD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpkZXRhY2hDaGlsZCk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlUmVuZGVyVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6ZGV0YWNoKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpsYXp5UmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6dXBkYXRlRXhpc3RpbmdQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmNyZWF0ZVBzZXVkb0VsZW1lbnRJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpkaXNjb25uZWN0UHNldWRvRWxlbWVudCk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6c2V0UmVzZXRTdHlsZUluaGVyaXRh
bmNlKToKKyAgICAgICAgKiBodG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50
KToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRvY3VtZW50V2lsbFN1c3BlbmRG
b3JQYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbik6CisgICAgICAgICog
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQ6OnBhcnNlTXVsdGlwbGVBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3Vt
ZW50OjpjcmVhdGVDb250YWluaW5nVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdT
b3VyY2VEb2N1bWVudDo6YWRkU3BhbldpdGhDbGFzc05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Vmlld1NvdXJjZURvY3VtZW50OjpmaW5pc2hMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxW
aWV3U291cmNlRG9jdW1lbnQ6OmFkZEJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdT
b3VyY2VEb2N1bWVudDo6YWRkTGluayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRhc2spOgorICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeSk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9p
bnQ6OndpbGxBdHRhY2hSZW5kZXJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9p
bnQ6OndpbGxEZXRhY2hSZW5kZXJlcnMpOgorICAgICAgICAqIGxvYWRlci9QbGFjZWhvbGRlckRv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYWNlaG9sZGVyRG9jdW1lbnQ6OmNyZWF0
ZVJlbmRlclRyZWUpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OmF0dGFjaENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpkZXRh
Y2hDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUxvY2FsKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjp1cGRhdGVUZXh0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnJl
c29sdmVTaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlVHJlZSk6
CisgICAgICAgIAorICAgICAgICAgICAgRG9jdW1lbnRzIG9ubHkgZXZlciBoYXZlIG9uZSBjaGls
ZCBlbGVtZW50LiBSZW1vdmUgdGhlIGxvb3AuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpk
ZXRhY2hSZW5kZXJUcmVlSW5SZWF0dGFjaE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OnJlYXR0YWNoUmVuZGVyVHJlZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5o
OgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0
czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAgKiB4bWwvWE1MRXJyb3JzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEVycm9yczo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2spOgor
ICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyk6CisKIDIwMTMt
MDgtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIE5v
IG5lZWQgZm9yIFBhc3RlYm9hcmQ6OmdldERhdGFTZWxlY3Rpb24KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDE1NDkwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBA
IHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlRGV0YWNoZWRDaGlsZHIKIHN0YXRpYyBpbmxpbmUg
dm9pZCBhdHRhY2hDaGlsZChOb2RlKiBjaGlsZCkKIHsKICAgICBpZiAoY2hpbGQtPmlzRWxlbWVu
dE5vZGUoKSkKLSAgICAgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUodG9FbGVtZW50KGNoaWxk
KSk7CisgICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKCp0b0VsZW1lbnQoY2hpbGQpKTsK
ICAgICBlbHNlIGlmIChjaGlsZC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBTdHlsZTo6YXR0YWNo
VGV4dFJlbmRlcmVyKCp0b1RleHQoY2hpbGQpKTsKIH0KQEAgLTExNiw3ICsxMTYsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgYXR0YWNoQ2hpbGQoTm9kZSogY2hpCiBzdGF0aWMgaW5saW5lIHZvaWQg
ZGV0YWNoQ2hpbGQoTm9kZSogY2hpbGQpCiB7CiAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKHRvRWxlbWVudChjaGlsZCkpOwor
ICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSgqdG9FbGVtZW50KGNoaWxkKSk7CiAgICAg
ZWxzZSBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgU3R5bGU6OmRldGFjaFRleHRS
ZW5kZXJlcigqdG9UZXh0KGNoaWxkKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDE1NDkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3NzksNyArMTc3OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlOjpDaGFuZ2UKICAgICAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJT
dHlsZSA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgcmVzb2x2ZVRyZWUodGhpcywgY2hh
bmdlKTsKKyAgICAgICAgcmVzb2x2ZVRyZWUoKnRoaXMsIGNoYW5nZSk7CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIGlmICh2aWV3KCkpCkBAIC0xOTkxLDcgKzE5
OTEsNyBAQCB2b2lkIERvY3VtZW50OjpjcmVhdGVSZW5kZXJUcmVlKCkKICAgICByZWNhbGNTdHls
ZShTdHlsZTo6Rm9yY2UpOwogCiAgICAgaWYgKG1fZG9jdW1lbnRFbGVtZW50KQotICAgICAgICBT
dHlsZTo6YXR0YWNoUmVuZGVyVHJlZShtX2RvY3VtZW50RWxlbWVudC5nZXQoKSk7CisgICAgICAg
IFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKCptX2RvY3VtZW50RWxlbWVudCk7CiAKICAgICBzZXRB
dHRhY2hlZCh0cnVlKTsKIH0KQEAgLTIwOTEsNyArMjA5MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRl
dGFjaCgpCiAgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNoYW5nZShtX3JlbmRlclRyZWVCZWlu
Z0Rlc3Ryb3llZCwgdHJ1ZSk7CiAKICAgICBpZiAobV9kb2N1bWVudEVsZW1lbnQpCi0gICAgICAg
IFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKG1fZG9jdW1lbnRFbGVtZW50LmdldCgpKTsKKyAgICAg
ICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWUoKm1fZG9jdW1lbnRFbGVtZW50KTsKIAogICAgIGNs
ZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgc2V0QXR0YWNoZWQoZmFsc2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTU0OTAwKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY5LDcgKzEzNjksNyBAQCB2
b2lkIEVsZW1lbnQ6OnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50CiB2b2lkIEVsZW1lbnQ6Omxh
enlSZWF0dGFjaChTaG91bGRTZXRBdHRhY2hlZCBzaG91bGRTZXRBdHRhY2hlZCkKIHsKICAgICBp
ZiAoYXR0YWNoZWQoKSkKLSAgICAgICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWVJblJlYXR0YWNo
TW9kZSh0aGlzKTsKKyAgICAgICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWVJblJlYXR0YWNoTW9k
ZSgqdGhpcyk7CiAgICAgbGF6eUF0dGFjaChzaG91bGRTZXRBdHRhY2hlZCk7CiB9CiAKQEAgLTIz
MDAsNyArMjMwMCw3IEBAIGJvb2wgRWxlbWVudDo6dXBkYXRlRXhpc3RpbmdQc2V1ZG9FbGVtZW4K
IHsKICAgICAvLyBQc2V1ZG9FbGVtZW50IHN0eWxlcyBoYW5nIG9mZiB0aGVpciBwYXJlbnQgZWxl
bWVudCdzIHN0eWxlIHNvIGlmIHdlIG5lZWRlZAogICAgIC8vIGEgc3R5bGUgcmVjYWxjIHdlIHNo
b3VsZCBGb3JjZSBvbmUgb24gdGhlIHBzZXVkby4KLSAgICBTdHlsZTo6cmVzb2x2ZVRyZWUoZXhp
c3RpbmdQc2V1ZG9FbGVtZW50LCBuZWVkc1N0eWxlUmVjYWxjKCkgPyBTdHlsZTo6Rm9yY2UgOiBj
aGFuZ2UpOworICAgIFN0eWxlOjpyZXNvbHZlVHJlZSgqZXhpc3RpbmdQc2V1ZG9FbGVtZW50LCBu
ZWVkc1N0eWxlUmVjYWxjKCkgPyBTdHlsZTo6Rm9yY2UgOiBjaGFuZ2UpOwogCiAgICAgLy8gRklY
TUU6IFRoaXMgaXMgc2lsbHkuCiAgICAgLy8gV2FpdCB1bnRpbCBvdXIgcGFyZW50IGlzIG5vdCBk
aXNwbGF5ZWQgb3IgcHNldWRvRWxlbWVudFJlbmRlcmVySXNOZWVkZWQKQEAgLTIzMjEsNyArMjMy
MSw3IEBAIFBhc3NSZWZQdHI8UHNldWRvRWxlbWVudD4gRWxlbWVudDo6Y3JlYXQKICAgICBpZiAo
IXBzZXVkb0VsZW1lbnRSZW5kZXJlcklzTmVlZGVkKHJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVk
b1N0eWxlKHBzZXVkb0lkKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxQc2V1ZG9F
bGVtZW50PiBwc2V1ZG9FbGVtZW50ID0gUHNldWRvRWxlbWVudDo6Y3JlYXRlKHRoaXMsIHBzZXVk
b0lkKTsKLSAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZShwc2V1ZG9FbGVtZW50LmdldCgpKTsK
KyAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSgqcHNldWRvRWxlbWVudCk7CiAgICAgcmV0dXJu
IHBzZXVkb0VsZW1lbnQucmVsZWFzZSgpOwogfQogCkBAIC0yMzc0LDcgKzIzNzQsNyBAQCBzdGF0
aWMgdm9pZCBkaXNjb25uZWN0UHNldWRvRWxlbWVudChQc2V1CiAgICAgaWYgKCFwc2V1ZG9FbGVt
ZW50KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHBzZXVkb0VsZW1lbnQtPmF0dGFjaGVkKCkp
Ci0gICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKHBzZXVkb0VsZW1lbnQpOworICAgICAg
ICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSgqcHNldWRvRWxlbWVudCk7CiAgICAgQVNTRVJUKHBz
ZXVkb0VsZW1lbnQtPmhvc3RFbGVtZW50KCkpOwogICAgIHBzZXVkb0VsZW1lbnQtPmNsZWFySG9z
dEVsZW1lbnQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9u
IDE1NDkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgU2hhZG93Um9vdDo6c2V0UmVzZXRTdHlsZUlu
aGVyaXRhbmMKICAgICBpZiAodmFsdWUgIT0gbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UpIHsKICAg
ICAgICAgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UgPSB2YWx1ZTsKICAgICAgICAgaWYgKGF0dGFj
aGVkKCkgJiYgaG9zdEVsZW1lbnQoKSkKLSAgICAgICAgICAgIFN0eWxlOjpyZXNvbHZlVHJlZSho
b3N0RWxlbWVudCgpLCBTdHlsZTo6Rm9yY2UpOworICAgICAgICAgICAgU3R5bGU6OnJlc29sdmVU
cmVlKCpob3N0RWxlbWVudCgpLCBTdHlsZTo6Rm9yY2UpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcAkocmV2aXNpb24gMTU0OTAw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBIVE1MRGV0YWlsc0VsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKAogICAgICAgICBib29sIG9sZFZhbHVlID0gbV9pc09wZW47CiAgICAgICAgIG1f
aXNPcGVuID0gIXZhbHVlLmlzTnVsbCgpOwogICAgICAgICBpZiAob2xkVmFsdWUgIT0gbV9pc09w
ZW4gJiYgYXR0YWNoZWQoKSkKLSAgICAgICAgICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUo
dGhpcyk7CisgICAgICAgICAgICBTdHlsZTo6cmVhdHRhY2hSZW5kZXJUcmVlKCp0aGlzKTsKICAg
ICB9IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2
aXNpb24gMTU0OTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6dXBkYXRlVHlwZSgpCiAKICAgICBib29sIHdhc0F0dGFjaGVkID0gYXR0YWNoZWQoKTsKICAg
ICBpZiAod2FzQXR0YWNoZWQpCi0gICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKHRoaXMp
OworICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSgqdGhpcyk7CiAKICAgICBtX2lucHV0
VHlwZSA9IG5ld1R5cGUucmVsZWFzZSgpOwogICAgIG1faW5wdXRUeXBlLT5jcmVhdGVTaGFkb3dT
dWJ0cmVlKCk7CkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKCkKICAgICB9CiAKICAgICBpZiAod2FzQXR0YWNoZWQpIHsKLSAgICAgICAgU3R5bGU6
OmF0dGFjaFJlbmRlclRyZWUodGhpcyk7CisgICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVl
KCp0aGlzKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSA9PSB0aGlz
KQogICAgICAgICAgICAgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKHRydWUpOwogICAgIH0KQEAgLTY5
NSw3ICs2OTUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAg
ICAgICAgIC8vIEZJWE1FOiBEZXRhY2hpbmcganVzdCBmb3IgbWF4UmVzdWx0cyBjaGFuZ2UgaXMg
bm90IGlkZWFsLiAgV2Ugc2hvdWxkIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0CiAgICAgICAgIC8vIHRp
bWUgdG8gcmVsYXlvdXQgZm9yIHRoaXMgY2hhbmdlLgogICAgICAgICBpZiAobV9tYXhSZXN1bHRz
ICE9IG9sZFJlc3VsdHMgJiYgKG1fbWF4UmVzdWx0cyA8PSAwIHx8IG9sZFJlc3VsdHMgPD0gMCkg
JiYgYXR0YWNoZWQoKSkKLSAgICAgICAgICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUodGhp
cyk7CisgICAgICAgICAgICBTdHlsZTo6cmVhdHRhY2hSZW5kZXJUcmVlKCp0aGlzKTsKICAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICBGZWF0dXJlT2JzZXJ2ZXI6Om9ic2Vy
dmUoJmRvY3VtZW50KCksIEZlYXR1cmVPYnNlcnZlcjo6UmVzdWx0c0F0dHJpYnV0ZSk7CiAgICAg
fSBlbHNlIGlmIChuYW1lID09IGF1dG9zYXZlQXR0cikgewpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NDkwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgs
NyArMzc4LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDbwogICAg
ICAgICBpZiAoIWlzSW1hZ2VUeXBlKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IHRo
aW5rIHdlIGhhdmUgYW4gaW1hZ2UgdHlwZSBhbnltb3JlLCB0aGVuIGNsZWFyIHRoZSBpbWFnZSBm
cm9tIHRoZSBsb2FkZXIuCiAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyLT5zZXRJbWFnZSgwKTsK
LSAgICAgICAgICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUodGhpcyk7CisgICAgICAgICAg
ICBTdHlsZTo6cmVhdHRhY2hSZW5kZXJUcmVlKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjpyZW5kZXJGYWxsYmFja0NvCiAgICAgbV91c2VGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwog
CiAgICAgLy8gRklYTUU6IFN0eWxlIGdldHMgcmVjYWxjdWxhdGVkIHdoaWNoIGlzIHN1Ym9wdGlt
YWwuCi0gICAgU3R5bGU6OnJlYXR0YWNoUmVuZGVyVHJlZSh0aGlzKTsKKyAgICBTdHlsZTo6cmVh
dHRhY2hSZW5kZXJUcmVlKCp0aGlzKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJl
bW92ZWQsIGFsbCBjYWxsZXJzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHdyb25nLgpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNTQ5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgYm9vbCBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50Ojp3aWxsUmVjYWxjUwogewogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBuZWNl
c3Nhcnk/ICBNYW51YWwgcmUtYXR0YWNoIGlzIGFsbW9zdCBhbHdheXMgd3JvbmcuCiAgICAgaWYg
KCF1c2VGYWxsYmFja0NvbnRlbnQoKSAmJiBuZWVkc1dpZGdldFVwZGF0ZSgpICYmIHJlbmRlcmVy
KCkgJiYgIWlzSW1hZ2VUeXBlKCkgJiYgKGRpc3BsYXlTdGF0ZSgpICE9IERpc3BsYXlpbmdTbmFw
c2hvdCkpCi0gICAgICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUodGhpcyk7CisgICAgICAg
IFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUoKnRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpkb2N1bWVu
dFdpbAogICAgIGlmIChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSB0aGlzLT5yZW5kZXJTdHls
ZSgpKSB7CiAgICAgICAgIG1fY3VzdG9tU3R5bGVGb3JQYWdlQ2FjaGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmUocmVuZGVyU3R5bGUpOwogICAgICAgICBtX2N1c3RvbVN0eWxlRm9yUGFnZUNhY2hlLT5z
ZXREaXNwbGF5KE5PTkUpOwotICAgICAgICBTdHlsZTo6cmVzb2x2ZVRyZWUodGhpcywgU3R5bGU6
OkZvcmNlKTsKKyAgICAgICAgU3R5bGU6OnJlc29sdmVUcmVlKCp0aGlzLCBTdHlsZTo6Rm9yY2Up
OwogICAgIH0KIAogICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9y
UGFnZUNhY2hlKCk7CkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50Ojpkb2N1bWVudERpZAogewogICAgIGlmIChtX2N1c3RvbVN0eWxlRm9yUGFnZUNhY2hlKSB7
CiAgICAgICAgIG1fY3VzdG9tU3R5bGVGb3JQYWdlQ2FjaGUgPSAwOwotICAgICAgICBTdHlsZTo6
cmVzb2x2ZVRyZWUodGhpcywgU3R5bGU6OkZvcmNlKTsKKyAgICAgICAgU3R5bGU6OnJlc29sdmVU
cmVlKCp0aGlzLCBTdHlsZTo6Rm9yY2UpOwogICAgIH0KIAogICAgIEhUTUxQbHVnSW5FbGVtZW50
Ojpkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKQEAgLTUxNSw3ICs1MTUsNyBAQCB2
b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRTbmFwCiAgICAgICAgIHJldHVybjsK
IAogICAgIHNldERpc3BsYXlTdGF0ZShSZXN0YXJ0aW5nKTsKLSAgICBTdHlsZTo6cmVhdHRhY2hS
ZW5kZXJUcmVlKHRoaXMpOworICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUoKnRoaXMpOwog
fQogCiB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpc3BhdGNoUGVuZGluZ01vdXNlQ2xp
Y2soKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE1NDkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoYwogICAgICAgICBtX3NpemUgPSBzaXplOwogICAgICAgICBz
ZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICAgICAgaWYgKG1fc2l6ZSAhPSBvbGRTaXplICYm
IGF0dGFjaGVkKCkpIHsKLSAgICAgICAgICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUodGhp
cyk7CisgICAgICAgICAgICBTdHlsZTo6cmVhdHRhY2hSZW5kZXJUcmVlKCp0aGlzKTsKICAgICAg
ICAgICAgIHNldFJlY2FsY0xpc3RJdGVtcygpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChu
YW1lID09IG11bHRpcGxlQXR0cikKQEAgLTEwMTEsNyArMTAxMSw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVBdHQKICAgICBtX211bHRpcGxlID0gIXZhbHVlLmlzTnVs
bCgpOwogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIGlmIChvbGRVc2VzTWVudUxp
c3QgIT0gdXNlc01lbnVMaXN0KCkgJiYgYXR0YWNoZWQoKSkKLSAgICAgICAgU3R5bGU6OnJlYXR0
YWNoUmVuZGVyVHJlZSh0aGlzKTsKKyAgICAgICAgU3R5bGU6OnJlYXR0YWNoUmVuZGVyVHJlZSgq
dGhpcyk7CiB9CiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYgbGlzdCwgYm9vbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Vmlld1NvdXJjZURvY3VtZW50LmNwcAkocmV2aXNpb24gMTU0OTAwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NyArODYsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhCiAgICAg
dGFibGUtPnBhcnNlckFwcGVuZENoaWxkKG1fdGJvZHkpOwogICAgIG1fY3VycmVudCA9IG1fdGJv
ZHk7CiAKLSAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZShodG1sLmdldCgpKTsKKyAgICBTdHls
ZTo6YXR0YWNoUmVuZGVyVHJlZSgqaHRtbCk7CiB9CiAKIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1
bWVudDo6YWRkU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBIVE1MVG9rZW4mIHRva2VuKQpA
QCAtMTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFZpZXdTb3VyY2VEb2N1
bWUKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHNwYW4gPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHNw
YW5UYWcsIHRoaXMpOwogICAgIHNwYW4tPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsIGNsYXNzTmFt
ZSk7CiAgICAgbV9jdXJyZW50LT5wYXJzZXJBcHBlbmRDaGlsZChzcGFuKTsKLSAgICBTdHlsZTo6
YXR0YWNoUmVuZGVyVHJlZShzcGFuLmdldCgpKTsKKyAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJl
ZSgqc3Bhbik7CiAgICAgcmV0dXJuIHNwYW4ucmVsZWFzZSgpOwogfQogCkBAIC0xOTMsMTkgKzE5
MywxOSBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmUoY29uCiAgICAgLy8g
Q3JlYXRlIGEgdGFibGUgcm93LgogICAgIFJlZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiB0cm93
ID0gSFRNTFRhYmxlUm93RWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIG1fdGJvZHktPnBhcnNl
ckFwcGVuZENoaWxkKHRyb3cpOwotICAgIFN0eWxlOjpyZWF0dGFjaFJlbmRlclRyZWUodHJvdy5n
ZXQoKSk7CisgICAgU3R5bGU6OnJlYXR0YWNoUmVuZGVyVHJlZSgqdHJvdyk7CiAKICAgICAvLyBD
cmVhdGUgYSBjZWxsIHRoYXQgd2lsbCBob2xkIHRoZSBsaW5lIG51bWJlciAoaXQgaXMgZ2VuZXJh
dGVkIGluIHRoZSBzdHlsZXNoZWV0IHVzaW5nIGNvdW50ZXJzKS4KICAgICBSZWZQdHI8SFRNTFRh
YmxlQ2VsbEVsZW1lbnQ+IHRkID0gSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywg
dGhpcyk7CiAgICAgdGQtPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsICJ3ZWJraXQtbGluZS1udW1i
ZXIiKTsKICAgICB0cm93LT5wYXJzZXJBcHBlbmRDaGlsZCh0ZCk7Ci0gICAgU3R5bGU6OmF0dGFj
aFJlbmRlclRyZWUodGQuZ2V0KCkpOworICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKCp0ZCk7
CiAKICAgICAvLyBDcmVhdGUgYSBzZWNvbmQgY2VsbCBmb3IgdGhlIGxpbmUgY29udGVudHMKICAg
ICB0ZCA9IEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjcmVhdGUodGRUYWcsIHRoaXMpOwogICAgIHRk
LT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUtY29udGVudCIpOwogICAgIHRy
b3ctPnBhcnNlckFwcGVuZENoaWxkKHRkKTsKLSAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSh0
ZC5nZXQoKSk7CisgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoKnRkKTsKICAgICBtX2N1cnJl
bnQgPSBtX3RkID0gdGQ7CiAKICNpZmRlZiBERUJVR19MSU5FX05VTUJFUlMKQEAgLTIyNyw3ICsy
MjcsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmZpbmlzaExpbmUoCiAgICAgaWYg
KCFtX2N1cnJlbnQtPmhhc0NoaWxkTm9kZXMoKSkgewogICAgICAgICBSZWZQdHI8SFRNTEJSRWxl
bWVudD4gYnIgPSBIVE1MQlJFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgICAgIG1fY3VycmVu
dC0+cGFyc2VyQXBwZW5kQ2hpbGQoYnIpOwotICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJl
ZShici5nZXQoKSk7CisgICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKCpicik7CiAgICAg
fQogICAgIG1fY3VycmVudCA9IG1fdGJvZHk7CiB9CkBAIC0yODMsNyArMjgzLDcgQEAgUGFzc1Jl
ZlB0cjxFbGVtZW50PiBIVE1MVmlld1NvdXJjZURvY3VtZQogICAgIFJlZlB0cjxIVE1MQmFzZUVs
ZW1lbnQ+IGJhc2UgPSBIVE1MQmFzZUVsZW1lbnQ6OmNyZWF0ZShiYXNlVGFnLCB0aGlzKTsKICAg
ICBiYXNlLT5zZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIGhyZWYpOwogICAgIG1fY3VycmVudC0+cGFy
c2VyQXBwZW5kQ2hpbGQoYmFzZSk7Ci0gICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoYmFzZS5n
ZXQoKSk7CisgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoKmJhc2UpOwogICAgIHJldHVybiBi
YXNlLnJlbGVhc2UoKTsKIH0KIApAQCAtMzAzLDcgKzMwMyw3IEBAIFBhc3NSZWZQdHI8RWxlbWVu
dD4gSFRNTFZpZXdTb3VyY2VEb2N1bWUKICAgICBhbmNob3ItPnNldEF0dHJpYnV0ZSh0YXJnZXRB
dHRyLCAiX2JsYW5rIik7CiAgICAgYW5jaG9yLT5zZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHVybCk7
CiAgICAgbV9jdXJyZW50LT5wYXJzZXJBcHBlbmRDaGlsZChhbmNob3IpOwotICAgIFN0eWxlOjph
dHRhY2hSZW5kZXJUcmVlKGFuY2hvci5nZXQoKSk7CisgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRy
ZWUoKmFuY2hvcik7CiAgICAgcmV0dXJuIGFuY2hvci5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAJKHJldmlzaW9uIDE1NDkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBleGVjdXRlVGFzayhIVE1MQ29uc3QKIAogICAgIGlmICh0YXNrLmNo
aWxkLT5wYXJlbnROb2RlKCkgJiYgdGFzay5wYXJlbnQtPmF0dGFjaGVkKCkgJiYgIXRhc2suY2hp
bGQtPmF0dGFjaGVkKCkpIHsKICAgICAgICAgaWYgKHRhc2suY2hpbGQtPmlzRWxlbWVudE5vZGUo
KSkKLSAgICAgICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKHRvRWxlbWVudCh0YXNrLmNo
aWxkLmdldCgpKSk7CisgICAgICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSgqdG9FbGVt
ZW50KHRhc2suY2hpbGQuZ2V0KCkpKTsKICAgICAgICAgZWxzZSBpZiAodGFzay5jaGlsZC0+aXNU
ZXh0Tm9kZSgpKQogICAgICAgICAgICAgU3R5bGU6OmF0dGFjaFRleHRSZW5kZXJlcigqdG9UZXh0
KHRhc2suY2hpbGQuZ2V0KCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1NDkwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2MjUsNyArMTYyNSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRp
b25BZ2UKICAgICAgICAgaWYgKGZ1cnRoZXN0QmxvY2tFbGVtZW50LT5hdHRhY2hlZCgpICYmICFu
ZXdJdGVtLT5lbGVtZW50KCktPmF0dGFjaGVkKCkpIHsKICAgICAgICAgICAgIC8vIE5vdGljZSB0
aGF0IG5ld0l0ZW0tPmVsZW1lbnQoKSBtaWdodCBhbHJlYWR5IGJlIGF0dGFjaGVkIGlmLCBmb3Ig
ZXhhbXBsZSwgb25lIG9mIHRoZSByZXBhcmVudGVkCiAgICAgICAgICAgICAvLyBjaGlsZHJlbiBp
cyBhIHN0eWxlIGVsZW1lbnQsIHdoaWNoIGF0dGFjaGVzIGl0c2VsZiBhdXRvbWF0aWNhbGx5Lgot
ICAgICAgICAgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUobmV3SXRlbS0+ZWxlbWVudCgpKTsK
KyAgICAgICAgICAgIFN0eWxlOjphdHRhY2hSZW5kZXJUcmVlKCpuZXdJdGVtLT5lbGVtZW50KCkp
OwogICAgICAgICB9CiAgICAgICAgIC8vIDE0LgogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0
dGluZ0VsZW1lbnRzKCktPnN3YXBUbyhmb3JtYXR0aW5nRWxlbWVudCwgbmV3SXRlbSwgYm9va21h
cmspOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50
LmNwcAkocmV2aXNpb24gMTU0OTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5z
ZXJ0aW9uUG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgSW5z
ZXJ0aW9uUG9pbnQ6OndpbGxBdHRhY2hSZW5kZXJlcnMKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
ICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSh0b0VsZW1lbnQoY3VycmVudCkpOworICAgICAg
ICAgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoKnRvRWxlbWVudChjdXJyZW50KSk7CiAgICAg
fQogfQogCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OndpbGxEZXRhY2hS
ZW5kZXJlcnMKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChj
dXJyZW50LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVy
VHJlZSh0b0VsZW1lbnQoY3VycmVudCkpOworICAgICAgICAgICAgU3R5bGU6OmRldGFjaFJlbmRl
clRyZWUoKnRvRWxlbWVudChjdXJyZW50KSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTQ5MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJQbGFjZWhvbGRlckRvY3VtZW50LmgiCiAKLSNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgi
CisjaW5jbHVkZSAiQ2hpbGRJdGVyYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM0LDggKzM0LDkgQEAgdm9pZCBQbGFjZWhvbGRlckRvY3VtZW50OjpjcmVhdGVSZW5kZXJUcgog
ewogICAgIEFTU0VSVCghYXR0YWNoZWQoKSk7CiAKLSAgICBmb3IgKEVsZW1lbnQqIGNoaWxkID0g
RWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7IGNoaWxkOyBjaGlsZCA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNoaWxkKSkKLSAgICAgICAgU3R5bGU6OmF0dGFjaFJl
bmRlclRyZWUoY2hpbGQpOworICAgIGF1dG8gY2hpbGRyZW4gPSBlbGVtZW50Q2hpbGRyZW4odGhp
cyk7CisgICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRy
ZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkKKyAgICAgICAgU3R5bGU6OmF0dGFjaFJl
bmRlclRyZWUoKmNoaWxkKTsKIAogICAgIHNldEF0dGFjaGVkKHRydWUpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlzaW9uIDE1NDkwMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlVHJlZS5oIgogCiAj
aW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkNoaWxkSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCiAjaW5jbHVk
ZSAiRWxlbWVudFRyYXZlcnNhbC5oIgpAQCAtNTYsOCArNTcsOCBAQCBuYW1lc3BhY2UgU3R5bGUg
ewogCiBlbnVtIERldGFjaFR5cGUgeyBOb3JtYWxEZXRhY2gsIFJlYXR0YWNoRGV0YWNoIH07CiAK
LXN0YXRpYyB2b2lkIGF0dGFjaFJlbmRlclRyZWUoRWxlbWVudCosIFJlbmRlclN0eWxlKiByZXNv
bHZlZFN0eWxlKTsKLXN0YXRpYyB2b2lkIGRldGFjaFJlbmRlclRyZWUoRWxlbWVudCosIERldGFj
aFR5cGUpOworc3RhdGljIHZvaWQgYXR0YWNoUmVuZGVyVHJlZShFbGVtZW50JiwgUmVuZGVyU3R5
bGUqIHJlc29sdmVkU3R5bGUpOworc3RhdGljIHZvaWQgZGV0YWNoUmVuZGVyVHJlZShFbGVtZW50
JiwgRGV0YWNoVHlwZSk7CiAKIENoYW5nZSBkZXRlcm1pbmVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5
bGUqIHMxLCBjb25zdCBSZW5kZXJTdHlsZSogczIsIFNldHRpbmdzKiBzZXR0aW5ncykKIHsKQEAg
LTQ0Nyw3ICs0NDgsNyBAQCBzdGF0aWMgdm9pZCBhdHRhY2hDaGlsZHJlbihDb250YWluZXJOb2Rl
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hpbGQtPmlz
RWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUodG9FbGVtZW50KGNo
aWxkKSwgbnVsbHB0cik7CisgICAgICAgICAgICBhdHRhY2hSZW5kZXJUcmVlKCp0b0VsZW1lbnQo
Y2hpbGQpLCBudWxscHRyKTsKICAgICB9CiB9CiAKQEAgLTQ2Niw0OCArNDY3LDQ4IEBAIHN0YXRp
YyB2b2lkIGF0dGFjaFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYKICAgICBzaGFkb3dSb290LnNldEF0
dGFjaGVkKHRydWUpOwogfQogCi1zdGF0aWMgdm9pZCBhdHRhY2hSZW5kZXJUcmVlKEVsZW1lbnQq
IGN1cnJlbnQsIFJlbmRlclN0eWxlKiByZXNvbHZlZFN0eWxlKQorc3RhdGljIHZvaWQgYXR0YWNo
UmVuZGVyVHJlZShFbGVtZW50JiBjdXJyZW50LCBSZW5kZXJTdHlsZSogcmVzb2x2ZWRTdHlsZSkK
IHsKLSAgICBQb3N0QXR0YWNoQ2FsbGJhY2tEaXNhYmxlciBjYWxsYmFja0Rpc2FibGVyKGN1cnJl
bnQpOworICAgIFBvc3RBdHRhY2hDYWxsYmFja0Rpc2FibGVyIGNhbGxiYWNrRGlzYWJsZXIoJmN1
cnJlbnQpOwogICAgIFdpZGdldEhpZXJhcmNoeVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUgc3VzcGVu
ZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXM7CiAKLSAgICBpZiAoY3VycmVudC0+aGFzQ3VzdG9tU3R5
bGVSZXNvbHZlQ2FsbGJhY2tzKCkpCi0gICAgICAgIGN1cnJlbnQtPndpbGxBdHRhY2hSZW5kZXJl
cnMoKTsKKyAgICBpZiAoY3VycmVudC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkK
KyAgICAgICAgY3VycmVudC53aWxsQXR0YWNoUmVuZGVyZXJzKCk7CiAKLSAgICBjcmVhdGVSZW5k
ZXJlcklmTmVlZGVkKCpjdXJyZW50LCByZXNvbHZlZFN0eWxlKTsKKyAgICBjcmVhdGVSZW5kZXJl
cklmTmVlZGVkKGN1cnJlbnQsIHJlc29sdmVkU3R5bGUpOwogCi0gICAgaWYgKGN1cnJlbnQtPnBh
cmVudEVsZW1lbnQoKSAmJiBjdXJyZW50LT5wYXJlbnRFbGVtZW50KCktPmlzSW5DYW52YXNTdWJ0
cmVlKCkpCi0gICAgICAgIGN1cnJlbnQtPnNldElzSW5DYW52YXNTdWJ0cmVlKHRydWUpOworICAg
IGlmIChjdXJyZW50LnBhcmVudEVsZW1lbnQoKSAmJiBjdXJyZW50LnBhcmVudEVsZW1lbnQoKS0+
aXNJbkNhbnZhc1N1YnRyZWUoKSkKKyAgICAgICAgY3VycmVudC5zZXRJc0luQ2FudmFzU3VidHJl
ZSh0cnVlKTsKIAotICAgIGN1cnJlbnQtPnVwZGF0ZUJlZm9yZVBzZXVkb0VsZW1lbnQoTm9DaGFu
Z2UpOworICAgIGN1cnJlbnQudXBkYXRlQmVmb3JlUHNldWRvRWxlbWVudChOb0NoYW5nZSk7CiAK
LSAgICBTdHlsZVJlc29sdmVyUGFyZW50UHVzaGVyIHBhcmVudFB1c2hlcihjdXJyZW50KTsKKyAg
ICBTdHlsZVJlc29sdmVyUGFyZW50UHVzaGVyIHBhcmVudFB1c2hlcigmY3VycmVudCk7CiAKICAg
ICAvLyBXaGVuIGEgc2hhZG93IHJvb3QgZXhpc3RzLCBpdCBkb2VzIHRoZSB3b3JrIG9mIGF0dGFj
aGluZyB0aGUgY2hpbGRyZW4uCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBjdXJy
ZW50LT5zaGFkb3dSb290KCkpIHsKKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGN1
cnJlbnQuc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7CiAgICAg
ICAgIGF0dGFjaFNoYWRvd1Jvb3QoKnNoYWRvd1Jvb3QpOwotICAgIH0gZWxzZSBpZiAoY3VycmVu
dC0+Zmlyc3RDaGlsZCgpKQorICAgIH0gZWxzZSBpZiAoY3VycmVudC5maXJzdENoaWxkKCkpCiAg
ICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7CiAKLSAgICBhdHRhY2hDaGlsZHJlbigqY3VycmVu
dCk7CisgICAgYXR0YWNoQ2hpbGRyZW4oY3VycmVudCk7CiAKLSAgICBOb2RlKiBzaWJsaW5nID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICBpZiAoY3VycmVudC0+cmVuZGVyZXIoKSAmJiBz
aWJsaW5nICYmICFzaWJsaW5nLT5yZW5kZXJlcigpICYmIHNpYmxpbmctPmF0dGFjaGVkKCkpCisg
ICAgTm9kZSogc2libGluZyA9IGN1cnJlbnQubmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoY3VycmVu
dC5yZW5kZXJlcigpICYmIHNpYmxpbmcgJiYgIXNpYmxpbmctPnJlbmRlcmVyKCkgJiYgc2libGlu
Zy0+YXR0YWNoZWQoKSkKICAgICAgICAgY3JlYXRlVGV4dFJlbmRlcmVyc0ZvclNpYmxpbmdzQWZ0
ZXJBdHRhY2hJZk5lZWRlZChzaWJsaW5nKTsKIAotICAgIGN1cnJlbnQtPnNldEF0dGFjaGVkKHRy
dWUpOwotICAgIGN1cnJlbnQtPmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOworICAgIGN1cnJlbnQu
c2V0QXR0YWNoZWQodHJ1ZSk7CisgICAgY3VycmVudC5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsK
IAotICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGN1cnJlbnQtPmRvY3VtZW50KCkuYXhP
YmplY3RDYWNoZSgpKQotICAgICAgICBjYWNoZS0+dXBkYXRlQ2FjaGVBZnRlck5vZGVJc0F0dGFj
aGVkKGN1cnJlbnQpOworICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGN1cnJlbnQuZG9j
dW1lbnQoKS5heE9iamVjdENhY2hlKCkpCisgICAgICAgIGNhY2hlLT51cGRhdGVDYWNoZUFmdGVy
Tm9kZUlzQXR0YWNoZWQoJmN1cnJlbnQpOwogCi0gICAgY3VycmVudC0+dXBkYXRlQWZ0ZXJQc2V1
ZG9FbGVtZW50KE5vQ2hhbmdlKTsKKyAgICBjdXJyZW50LnVwZGF0ZUFmdGVyUHNldWRvRWxlbWVu
dChOb0NoYW5nZSk7CiAKLSAgICBjdXJyZW50LT51cGRhdGVGb2N1c0FwcGVhcmFuY2VBZnRlckF0
dGFjaElmTmVlZGVkKCk7CisgICAgY3VycmVudC51cGRhdGVGb2N1c0FwcGVhcmFuY2VBZnRlckF0
dGFjaElmTmVlZGVkKCk7CiAgICAgCi0gICAgaWYgKGN1cnJlbnQtPmhhc0N1c3RvbVN0eWxlUmVz
b2x2ZUNhbGxiYWNrcygpKQotICAgICAgICBjdXJyZW50LT5kaWRBdHRhY2hSZW5kZXJlcnMoKTsK
KyAgICBpZiAoY3VycmVudC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkKKyAgICAg
ICAgY3VycmVudC5kaWRBdHRhY2hSZW5kZXJlcnMoKTsKIH0KIAogc3RhdGljIHZvaWQgZGV0YWNo
Q2hpbGRyZW4oQ29udGFpbmVyTm9kZSYgY3VycmVudCwgRGV0YWNoVHlwZSBkZXRhY2hUeXBlKQpA
QCAtNTE4LDcgKzUxOSw3IEBAIHN0YXRpYyB2b2lkIGRldGFjaENoaWxkcmVuKENvbnRhaW5lck5v
ZGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGlsZC0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgZGV0YWNoUmVuZGVyVHJlZSh0b0VsZW1lbnQo
Y2hpbGQpLCBkZXRhY2hUeXBlKTsKKyAgICAgICAgICAgIGRldGFjaFJlbmRlclRyZWUoKnRvRWxl
bWVudChjaGlsZCksIGRldGFjaFR5cGUpOwogICAgIH0KICAgICBjdXJyZW50LmNsZWFyQ2hpbGRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiB9CkBAIC01MzIsMzMgKzUzMywzMyBAQCBzdGF0aWMgdm9pZCBk
ZXRhY2hTaGFkb3dSb290KFNoYWRvd1Jvb3QmCiAgICAgc2hhZG93Um9vdC5zZXRBdHRhY2hlZChm
YWxzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRldGFjaFJlbmRlclRyZWUoRWxlbWVudCogY3VycmVu
dCwgRGV0YWNoVHlwZSBkZXRhY2hUeXBlKQorc3RhdGljIHZvaWQgZGV0YWNoUmVuZGVyVHJlZShF
bGVtZW50JiBjdXJyZW50LCBEZXRhY2hUeXBlIGRldGFjaFR5cGUpCiB7CiAgICAgV2lkZ2V0SGll
cmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRl
czsKIAotICAgIGlmIChjdXJyZW50LT5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkK
LSAgICAgICAgY3VycmVudC0+d2lsbERldGFjaFJlbmRlcmVycygpOworICAgIGlmIChjdXJyZW50
Lmhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKQorICAgICAgICBjdXJyZW50LndpbGxE
ZXRhY2hSZW5kZXJlcnMoKTsKIAotICAgIGN1cnJlbnQtPmNsZWFyU3R5bGVEZXJpdmVkRGF0YUJl
Zm9yZURldGFjaGluZ1JlbmRlcmVyKCk7CisgICAgY3VycmVudC5jbGVhclN0eWxlRGVyaXZlZERh
dGFCZWZvcmVEZXRhY2hpbmdSZW5kZXJlcigpOwogCiAgICAgLy8gRG8gbm90IHJlbW92ZSB0aGUg
ZWxlbWVudCdzIGhvdmVyZWQgYW5kIGFjdGl2ZSBzdGF0dXMKICAgICAvLyBpZiBwZXJmb3JtaW5n
IGEgcmVhdHRhY2guCiAgICAgaWYgKGRldGFjaFR5cGUgIT0gUmVhdHRhY2hEZXRhY2gpCi0gICAg
ICAgIGN1cnJlbnQtPmNsZWFySG92ZXJBbmRBY3RpdmVTdGF0dXNCZWZvcmVEZXRhY2hpbmdSZW5k
ZXJlcigpOworICAgICAgICBjdXJyZW50LmNsZWFySG92ZXJBbmRBY3RpdmVTdGF0dXNCZWZvcmVE
ZXRhY2hpbmdSZW5kZXJlcigpOwogCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBj
dXJyZW50LT5zaGFkb3dSb290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBj
dXJyZW50LnNoYWRvd1Jvb3QoKSkKICAgICAgICAgZGV0YWNoU2hhZG93Um9vdCgqc2hhZG93Um9v
dCwgZGV0YWNoVHlwZSk7CiAKLSAgICBkZXRhY2hDaGlsZHJlbigqY3VycmVudCwgZGV0YWNoVHlw
ZSk7CisgICAgZGV0YWNoQ2hpbGRyZW4oY3VycmVudCwgZGV0YWNoVHlwZSk7CiAKLSAgICBpZiAo
Y3VycmVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgY3VycmVudC0+cmVuZGVyZXIoKS0+ZGVzdHJv
eUFuZENsZWFudXBBbm9ueW1vdXNXcmFwcGVycygpOwotICAgIGN1cnJlbnQtPnNldFJlbmRlcmVy
KDApOworICAgIGlmIChjdXJyZW50LnJlbmRlcmVyKCkpCisgICAgICAgIGN1cnJlbnQucmVuZGVy
ZXIoKS0+ZGVzdHJveUFuZENsZWFudXBBbm9ueW1vdXNXcmFwcGVycygpOworICAgIGN1cnJlbnQu
c2V0UmVuZGVyZXIoMCk7CiAKLSAgICBjdXJyZW50LT5zZXRBdHRhY2hlZChmYWxzZSk7CisgICAg
Y3VycmVudC5zZXRBdHRhY2hlZChmYWxzZSk7CiAKLSAgICBpZiAoY3VycmVudC0+aGFzQ3VzdG9t
U3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpCi0gICAgICAgIGN1cnJlbnQtPmRpZERldGFjaFJlbmRl
cmVycygpOworICAgIGlmIChjdXJyZW50Lmhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygp
KQorICAgICAgICBjdXJyZW50LmRpZERldGFjaFJlbmRlcmVycygpOwogfQogCiBzdGF0aWMgYm9v
bCBwc2V1ZG9TdHlsZUNhY2hlSXNJbnZhbGlkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKiBuZXdTdHlsZSkKQEAgLTU5NSwyOCArNTk2LDI4IEBAIHN0YXRpYyBib29sIHBzZXVk
b1N0eWxlQ2FjaGVJc0ludmFsaWQoUmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBD
aGFuZ2UgcmVzb2x2ZUxvY2FsKEVsZW1lbnQqIGN1cnJlbnQsIENoYW5nZSBpbmhlcml0ZWRDaGFu
Z2UpCitzdGF0aWMgQ2hhbmdlIHJlc29sdmVMb2NhbChFbGVtZW50JiBjdXJyZW50LCBDaGFuZ2Ug
aW5oZXJpdGVkQ2hhbmdlKQogewogICAgIENoYW5nZSBsb2NhbENoYW5nZSA9IERldGFjaDsKICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlOwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
Y3VycmVudFN0eWxlID0gY3VycmVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IGN1cnJlbnRTdHlsZSA9IGN1cnJlbnQucmVuZGVyU3R5bGUoKTsKIAotICAgIERvY3Vt
ZW50JiBkb2N1bWVudCA9IGN1cnJlbnQtPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gY3VycmVudC5kb2N1bWVudCgpOwogICAgIGlmIChjdXJyZW50U3R5bGUpIHsKLSAgICAg
ICAgbmV3U3R5bGUgPSBjdXJyZW50LT5zdHlsZUZvclJlbmRlcmVyKCk7CisgICAgICAgIG5ld1N0
eWxlID0gY3VycmVudC5zdHlsZUZvclJlbmRlcmVyKCk7CiAgICAgICAgIGxvY2FsQ2hhbmdlID0g
ZGV0ZXJtaW5lQ2hhbmdlKGN1cnJlbnRTdHlsZS5nZXQoKSwgbmV3U3R5bGUuZ2V0KCksIGRvY3Vt
ZW50LnNldHRpbmdzKCkpOwogICAgIH0KICAgICBpZiAobG9jYWxDaGFuZ2UgPT0gRGV0YWNoKSB7
Ci0gICAgICAgIGlmIChjdXJyZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBpZiAoY3VycmVudC5h
dHRhY2hlZCgpKQogICAgICAgICAgICAgZGV0YWNoUmVuZGVyVHJlZShjdXJyZW50LCBSZWF0dGFj
aERldGFjaCk7CiAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoY3VycmVudCwgbmV3U3R5bGUuZ2V0
KCkpOwogICAgICAgICByZXR1cm4gRGV0YWNoOwogICAgIH0KIAotICAgIGlmIChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gY3VycmVudC0+cmVuZGVyZXIoKSkgewotICAgICAgICBpZiAobG9jYWxD
aGFuZ2UgIT0gTm9DaGFuZ2UgfHwgcHNldWRvU3R5bGVDYWNoZUlzSW52YWxpZChyZW5kZXJlciwg
bmV3U3R5bGUuZ2V0KCkpIHx8IChpbmhlcml0ZWRDaGFuZ2UgPT0gRm9yY2UgJiYgcmVuZGVyZXIt
PnJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpKSB8fCBjdXJyZW50LT5zdHls
ZUNoYW5nZVR5cGUoKSA9PSBTeW50aGV0aWNTdHlsZUNoYW5nZSkKKyAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGN1cnJlbnQucmVuZGVyZXIoKSkgeworICAgICAgICBpZiAobG9jYWxD
aGFuZ2UgIT0gTm9DaGFuZ2UgfHwgcHNldWRvU3R5bGVDYWNoZUlzSW52YWxpZChyZW5kZXJlciwg
bmV3U3R5bGUuZ2V0KCkpIHx8IChpbmhlcml0ZWRDaGFuZ2UgPT0gRm9yY2UgJiYgcmVuZGVyZXIt
PnJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpKSB8fCBjdXJyZW50LnN0eWxl
Q2hhbmdlVHlwZSgpID09IFN5bnRoZXRpY1N0eWxlQ2hhbmdlKQogICAgICAgICAgICAgcmVuZGVy
ZXItPnNldEFuaW1hdGFibGVTdHlsZShuZXdTdHlsZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UgaWYg
KGN1cnJlbnQtPm5lZWRzU3R5bGVSZWNhbGMoKSkgeworICAgICAgICBlbHNlIGlmIChjdXJyZW50
Lm5lZWRzU3R5bGVSZWNhbGMoKSkgewogICAgICAgICAgICAgLy8gQWx0aG91Z2ggbm8gY2hhbmdl
IG9jY3VycmVkLCB3ZSB1c2UgdGhlIG5ldyBzdHlsZSBzbyB0aGF0IHRoZSBjb3VzaW4gc3R5bGUg
c2hhcmluZyBjb2RlIHdvbid0IGdldAogICAgICAgICAgICAgLy8gZm9vbGVkIGludG8gYmVsaWV2
aW5nIHRoaXMgc3R5bGUgaXMgdGhlIHNhbWUuCiAgICAgICAgICAgICByZW5kZXJlci0+c2V0U3R5
bGVJbnRlcm5hbChuZXdTdHlsZS5nZXQoKSk7CkBAIC02MjUsNyArNjI2LDcgQEAgc3RhdGljIENo
YW5nZSByZXNvbHZlTG9jYWwoRWxlbWVudCogY3VycgogCiAgICAgLy8gSWYgInJlbSIgdW5pdHMg
YXJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LCBhbmQgaWYgdGhlIGRvY3VtZW50IGVs
ZW1lbnQncyBmb250IHNpemUgY2hhbmdlcywgdGhlbiBnbyBhaGVhZCBhbmQgZm9yY2UgZm9udCB1
cGRhdGluZwogICAgIC8vIGFsbCB0aGUgd2F5IGRvd24gdGhlIHRyZWUuIFRoaXMgaXMgc2ltcGxl
ciB0aGFuIGhhdmluZyB0byBtYWludGFpbiBhIGNhY2hlIG9mIG9iamVjdHMgKGFuZCBzdWNoIGZv
bnQgc2l6ZSBjaGFuZ2VzIHNob3VsZCBiZSByYXJlIGFueXdheSkuCi0gICAgaWYgKGRvY3VtZW50
LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnVzZXNSZW1Vbml0cygpICYmIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCgpID09IGN1cnJlbnQgJiYgbG9jYWxDaGFuZ2UgIT0gTm9DaGFuZ2UgJiYgY3Vy
cmVudFN0eWxlICYmIG5ld1N0eWxlICYmIGN1cnJlbnRTdHlsZS0+Zm9udFNpemUoKSAhPSBuZXdT
dHlsZS0+Zm9udFNpemUoKSkgeworICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLT51c2VzUmVtVW5pdHMoKSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSA9PSAmY3Vy
cmVudCAmJiBsb2NhbENoYW5nZSAhPSBOb0NoYW5nZSAmJiBjdXJyZW50U3R5bGUgJiYgbmV3U3R5
bGUgJiYgY3VycmVudFN0eWxlLT5mb250U2l6ZSgpICE9IG5ld1N0eWxlLT5mb250U2l6ZSgpKSB7
CiAgICAgICAgIC8vIENhY2hlZCBSZW5kZXJTdHlsZXMgbWF5IGRlcGVuZCBvbiB0aGUgcmUgdW5p
dHMuCiAgICAgICAgIGlmIChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyID0gZG9jdW1lbnQu
c3R5bGVSZXNvbHZlcklmRXhpc3RzKCkpCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5pbnZh
bGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwpAQCAtNjMzLDI2ICs2MzQsMjYgQEAgc3Rh
dGljIENoYW5nZSByZXNvbHZlTG9jYWwoRWxlbWVudCogY3VycgogICAgIH0KICAgICBpZiAoaW5o
ZXJpdGVkQ2hhbmdlID09IEZvcmNlKQogICAgICAgICByZXR1cm4gRm9yY2U7Ci0gICAgaWYgKGN1
cnJlbnQtPnN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkKKyAgICBpZiAoY3Vy
cmVudC5zdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVDaGFuZ2UpCiAgICAgICAgIHJldHVy
biBGb3JjZTsKIAogICAgIHJldHVybiBsb2NhbENoYW5nZTsKIH0KIAotc3RhdGljIHZvaWQgdXBk
YXRlVGV4dFN0eWxlKFRleHQqIHRleHQsIFJlbmRlclN0eWxlKiBwYXJlbnRFbGVtZW50U3R5bGUs
IFN0eWxlOjpDaGFuZ2UgY2hhbmdlKQorc3RhdGljIHZvaWQgdXBkYXRlVGV4dFN0eWxlKFRleHQm
IHRleHQsIFJlbmRlclN0eWxlKiBwYXJlbnRFbGVtZW50U3R5bGUsIFN0eWxlOjpDaGFuZ2UgY2hh
bmdlKQogewotICAgIFJlbmRlclRleHQqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHRleHQtPnJl
bmRlcmVyKCkpOworICAgIFJlbmRlclRleHQqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHRleHQu
cmVuZGVyZXIoKSk7CiAKICAgICBpZiAoY2hhbmdlICE9IFN0eWxlOjpOb0NoYW5nZSAmJiByZW5k
ZXJlcikKICAgICAgICAgcmVuZGVyZXItPnNldFN0eWxlKHBhcmVudEVsZW1lbnRTdHlsZSk7CiAK
LSAgICBpZiAoIXRleHQtPm5lZWRzU3R5bGVSZWNhbGMoKSkKKyAgICBpZiAoIXRleHQubmVlZHNT
dHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlbmRlcmVyKQotICAgICAg
ICByZW5kZXJlci0+c2V0VGV4dCh0ZXh0LT5kYXRhSW1wbCgpKTsKKyAgICAgICAgcmVuZGVyZXIt
PnNldFRleHQodGV4dC5kYXRhSW1wbCgpKTsKICAgICBlbHNlCi0gICAgICAgIGF0dGFjaFRleHRS
ZW5kZXJlcigqdGV4dCk7Ci0gICAgdGV4dC0+Y2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgIGF0dGFjaFRleHRSZW5kZXJlcih0ZXh0KTsKKyAgICB0ZXh0LmNsZWFyTmVlZHNTdHlsZVJl
Y2FsYygpOwogfQogCiBzdGF0aWMgdm9pZCByZXNvbHZlU2hhZG93VHJlZShTaGFkb3dSb290KiBz
aGFkb3dSb290LCBSZW5kZXJTdHlsZSogcGFyZW50RWxlbWVudFN0eWxlLCBTdHlsZTo6Q2hhbmdl
IGNoYW5nZSkKQEAgLTY2NSwxMCArNjY2LDEwIEBAIHN0YXRpYyB2b2lkIHJlc29sdmVTaGFkb3dU
cmVlKFNoYWRvd1Jvb3QKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gc2hhZG93Um9vdC0+Zmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBp
ZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgLy8gQ3VycmVudCB1c2VyIGFn
ZW50IFNoYWRvd1Jvb3RzIGRvbid0IGhhdmUgaW1tZWRpYXRlIHRleHQgY2hpbGRyZW4gc28gdGhp
cyBicmFuY2ggaXMgbmV2ZXIgYWN0dWFsbHkgdGFrZW4uCi0gICAgICAgICAgICB1cGRhdGVUZXh0
U3R5bGUodG9UZXh0KGNoaWxkKSwgcGFyZW50RWxlbWVudFN0eWxlLCBjaGFuZ2UpOworICAgICAg
ICAgICAgdXBkYXRlVGV4dFN0eWxlKCp0b1RleHQoY2hpbGQpLCBwYXJlbnRFbGVtZW50U3R5bGUs
IGNoYW5nZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXNv
bHZlVHJlZSh0b0VsZW1lbnQoY2hpbGQpLCBjaGFuZ2UpOworICAgICAgICByZXNvbHZlVHJlZSgq
dG9FbGVtZW50KGNoaWxkKSwgY2hhbmdlKTsKICAgICB9CiAKICAgICBzdHlsZVJlc29sdmVyLnBv
cFBhcmVudFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CkBAIC03MzAsNTIgKzczMSw1MiBAQCBwcml2
YXRlOgogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKLXZvaWQgcmVzb2x2ZVRyZWUoRWxl
bWVudCogY3VycmVudCwgQ2hhbmdlIGNoYW5nZSkKK3ZvaWQgcmVzb2x2ZVRyZWUoRWxlbWVudCYg
Y3VycmVudCwgQ2hhbmdlIGNoYW5nZSkKIHsKICAgICBBU1NFUlQoY2hhbmdlICE9IERldGFjaCk7
CiAKLSAgICBpZiAoY3VycmVudC0+aGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpIHsK
LSAgICAgICAgaWYgKCFjdXJyZW50LT53aWxsUmVjYWxjU3R5bGUoY2hhbmdlKSkKKyAgICBpZiAo
Y3VycmVudC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkgeworICAgICAgICBpZiAo
IWN1cnJlbnQud2lsbFJlY2FsY1N0eWxlKGNoYW5nZSkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgQ29udGFpbmVyTm9kZSogcmVuZGVyaW5nUGFyZW50Tm9kZSA9IE5vZGVSZW5k
ZXJpbmdUcmF2ZXJzYWw6OnBhcmVudChjdXJyZW50KTsKKyAgICBDb250YWluZXJOb2RlKiByZW5k
ZXJpbmdQYXJlbnROb2RlID0gTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6cGFyZW50KCZjdXJyZW50
KTsKICAgICBib29sIGhhc1BhcmVudFN0eWxlID0gcmVuZGVyaW5nUGFyZW50Tm9kZSAmJiByZW5k
ZXJpbmdQYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpOwotICAgIGJvb2wgaGFzRGlyZWN0QWRqYWNl
bnRSdWxlcyA9IGN1cnJlbnQtPmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMo
KTsKLSAgICBib29sIGhhc0luZGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnQtPmNoaWxkcmVu
QWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICBib29sIGhhc0RpcmVjdEFk
amFjZW50UnVsZXMgPSBjdXJyZW50LmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVs
ZXMoKTsKKyAgICBib29sIGhhc0luZGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnQuY2hpbGRy
ZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgIENoZWNrRm9yVmlzaWJpbGl0eUNoYW5nZU9uUmVjYWxjU3R5bGUgY2hlY2tGb3JWaXNp
YmlsaXR5Q2hhbmdlKGN1cnJlbnQsIGN1cnJlbnQtPnJlbmRlclN0eWxlKCkpOwogI2VuZGlmCiAK
LSAgICBpZiAoY2hhbmdlID4gTm9DaGFuZ2UgfHwgY3VycmVudC0+bmVlZHNTdHlsZVJlY2FsYygp
KQotICAgICAgICBjdXJyZW50LT5yZXNldENvbXB1dGVkU3R5bGUoKTsKKyAgICBpZiAoY2hhbmdl
ID4gTm9DaGFuZ2UgfHwgY3VycmVudC5uZWVkc1N0eWxlUmVjYWxjKCkpCisgICAgICAgIGN1cnJl
bnQucmVzZXRDb21wdXRlZFN0eWxlKCk7CiAKLSAgICBpZiAoaGFzUGFyZW50U3R5bGUgJiYgKGNo
YW5nZSA+PSBJbmhlcml0IHx8IGN1cnJlbnQtPm5lZWRzU3R5bGVSZWNhbGMoKSkpCisgICAgaWYg
KGhhc1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjdXJyZW50Lm5lZWRzU3R5
bGVSZWNhbGMoKSkpCiAgICAgICAgIGNoYW5nZSA9IHJlc29sdmVMb2NhbChjdXJyZW50LCBjaGFu
Z2UpOwogCiAgICAgaWYgKGNoYW5nZSAhPSBEZXRhY2gpIHsKLSAgICAgICAgU3R5bGVSZXNvbHZl
clBhcmVudFB1c2hlciBwYXJlbnRQdXNoZXIoY3VycmVudCk7CisgICAgICAgIFN0eWxlUmVzb2x2
ZXJQYXJlbnRQdXNoZXIgcGFyZW50UHVzaGVyKCZjdXJyZW50KTsKIAotICAgICAgICBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlID0gY3VycmVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGN1cnJlbnQucmVuZGVyU3R5bGUoKTsKIAotICAgICAg
ICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGN1cnJlbnQtPnNoYWRvd1Jvb3QoKSkgewor
ICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGN1cnJlbnQuc2hhZG93Um9vdCgp
KSB7CiAgICAgICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgc2hhZG93Um9vdC0+Y2hp
bGROZWVkc1N0eWxlUmVjYWxjKCkgfHwgc2hhZG93Um9vdC0+bmVlZHNTdHlsZVJlY2FsYygpKSB7
CiAgICAgICAgICAgICAgICAgcGFyZW50UHVzaGVyLnB1c2goKTsKICAgICAgICAgICAgICAgICBy
ZXNvbHZlU2hhZG93VHJlZShzaGFkb3dSb290LCBjdXJyZW50U3R5bGUsIGNoYW5nZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjdXJyZW50LT51cGRhdGVCZWZvcmVQc2V1
ZG9FbGVtZW50KGNoYW5nZSk7CisgICAgICAgIGN1cnJlbnQudXBkYXRlQmVmb3JlUHNldWRvRWxl
bWVudChjaGFuZ2UpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIGdvb2QgZW5v
dWdoIGZvciA6aG92ZXIgKyBmb28sIGJ1dCBpdCBpcyBub3QgZ29vZCBlbm91Z2ggZm9yIDpob3Zl
ciArIGZvbyArIGJhci4KICAgICAgICAgLy8gRm9yIG5vdyB3ZSB3aWxsIGp1c3Qgd29ycnkgYWJv
dXQgdGhlIGNvbW1vbiBjYXNlLCBzaW5jZSBpdCdzIGEgbG90IHRyaWNraWVyIHRvIGdldCB0aGUg
c2Vjb25kIGNhc2UgcmlnaHQKICAgICAgICAgLy8gd2l0aG91dCBkb2luZyB3YXkgdG9vIG11Y2gg
cmUtcmVzb2x1dGlvbi4KICAgICAgICAgYm9vbCBmb3JjZUNoZWNrT2ZOZXh0RWxlbWVudFNpYmxp
bmcgPSBmYWxzZTsKICAgICAgICAgYm9vbCBmb3JjZUNoZWNrT2ZBbnlFbGVtZW50U2libGluZyA9
IGZhbHNlOwotICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBmb3IgKE5v
ZGUqIGNoaWxkID0gY3VycmVudC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dE5vZGUoKSkgewot
ICAgICAgICAgICAgICAgIHVwZGF0ZVRleHRTdHlsZSh0b1RleHQoY2hpbGQpLCBjdXJyZW50U3R5
bGUsIGNoYW5nZSk7CisgICAgICAgICAgICAgICAgdXBkYXRlVGV4dFN0eWxlKCp0b1RleHQoY2hp
bGQpLCBjdXJyZW50U3R5bGUsIGNoYW5nZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCkBA
IC03ODYsMjcgKzc4NywyNyBAQCB2b2lkIHJlc29sdmVUcmVlKEVsZW1lbnQqIGN1cnJlbnQsIENo
YW5nCiAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7
CiAgICAgICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hpbGRFbGVtZW50LT5jaGls
ZE5lZWRzU3R5bGVSZWNhbGMoKSB8fCBjaGlsZEVsZW1lbnQtPm5lZWRzU3R5bGVSZWNhbGMoKSkg
ewogICAgICAgICAgICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7Ci0gICAgICAgICAgICAgICAg
cmVzb2x2ZVRyZWUoY2hpbGRFbGVtZW50LCBjaGFuZ2UpOworICAgICAgICAgICAgICAgIHJlc29s
dmVUcmVlKCpjaGlsZEVsZW1lbnQsIGNoYW5nZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBmb3JjZUNoZWNrT2ZOZXh0RWxlbWVudFNpYmxpbmcgPSBjaGlsZFJ1bGVzQ2hhbmdlZCAmJiBo
YXNEaXJlY3RBZGphY2VudFJ1bGVzOwogICAgICAgICAgICAgZm9yY2VDaGVja09mQW55RWxlbWVu
dFNpYmxpbmcgPSBmb3JjZUNoZWNrT2ZBbnlFbGVtZW50U2libGluZyB8fCAoY2hpbGRSdWxlc0No
YW5nZWQgJiYgaGFzSW5kaXJlY3RBZGphY2VudFJ1bGVzKTsKICAgICAgICAgfQogCi0gICAgICAg
IGN1cnJlbnQtPnVwZGF0ZUFmdGVyUHNldWRvRWxlbWVudChjaGFuZ2UpOworICAgICAgICBjdXJy
ZW50LnVwZGF0ZUFmdGVyUHNldWRvRWxlbWVudChjaGFuZ2UpOwogICAgIH0KIAotICAgIGN1cnJl
bnQtPmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwotICAgIGN1cnJlbnQtPmNsZWFyQ2hpbGROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgY3VycmVudC5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICBjdXJyZW50LmNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgCi0gICAgaWYgKGN1
cnJlbnQtPmhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKQotICAgICAgICBjdXJyZW50
LT5kaWRSZWNhbGNTdHlsZShjaGFuZ2UpOworICAgIGlmIChjdXJyZW50Lmhhc0N1c3RvbVN0eWxl
UmVzb2x2ZUNhbGxiYWNrcygpKQorICAgICAgICBjdXJyZW50LmRpZFJlY2FsY1N0eWxlKGNoYW5n
ZSk7CiB9CiAKLXZvaWQgcmVzb2x2ZVRyZWUoRG9jdW1lbnQqIGRvY3VtZW50LCBDaGFuZ2UgY2hh
bmdlKQordm9pZCByZXNvbHZlVHJlZShEb2N1bWVudCYgZG9jdW1lbnQsIENoYW5nZSBjaGFuZ2Up
CiB7Ci0gICAgYm9vbCByZXNvbHZlUm9vdFN0eWxlID0gY2hhbmdlID09IEZvcmNlIHx8IChkb2N1
bWVudC0+c2hvdWxkRGlzcGxheVNlYW1sZXNzbHlXaXRoUGFyZW50KCkgJiYgY2hhbmdlID49IElu
aGVyaXQpOworICAgIGJvb2wgcmVzb2x2ZVJvb3RTdHlsZSA9IGNoYW5nZSA9PSBGb3JjZSB8fCAo
ZG9jdW1lbnQuc2hvdWxkRGlzcGxheVNlYW1sZXNzbHlXaXRoUGFyZW50KCkgJiYgY2hhbmdlID49
IEluaGVyaXQpOwogICAgIGlmIChyZXNvbHZlUm9vdFN0eWxlKSB7Ci0gICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IHJlc29sdmVGb3JEb2N1bWVudChkb2N1bWVudCk7
CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IHJlc29sdmVGb3JE
b2N1bWVudCgmZG9jdW1lbnQpOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICAvLyBJbnNl
cnRpbmcgdGhlIHBpY3RvZ3JhcGggZm9udCBhdCB0aGUgZW5kIG9mIHRoZSBmb250IGZhbGxiYWNr
IGxpc3QgaXMgZG9uZSBieSB0aGUKQEAgLTgxOCwzNiArODE5LDM3IEBAIHZvaWQgcmVzb2x2ZVRy
ZWUoRG9jdW1lbnQqIGRvY3VtZW50LCBDaGEKICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAg
U3R5bGU6OkNoYW5nZSBkb2N1bWVudENoYW5nZSA9IGRldGVybWluZUNoYW5nZShkb2N1bWVudFN0
eWxlLmdldCgpLCBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSwgZG9jdW1lbnQtPnNldHRp
bmdzKCkpOworICAgICAgICBTdHlsZTo6Q2hhbmdlIGRvY3VtZW50Q2hhbmdlID0gZGV0ZXJtaW5l
Q2hhbmdlKGRvY3VtZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlcmVyKCktPnN0eWxlKCks
IGRvY3VtZW50LnNldHRpbmdzKCkpOwogICAgICAgICBpZiAoZG9jdW1lbnRDaGFuZ2UgIT0gTm9D
aGFuZ2UpCi0gICAgICAgICAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c2V0U3R5bGUoZG9jdW1l
bnRTdHlsZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgZG9jdW1lbnQucmVuZGVyZXIoKS0+c2V0
U3R5bGUoZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGZvciAoRWxlbWVu
dCogY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihkb2N1bWVudCk7IGNoaWxk
OyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNoaWxkKSkgewotICAgICAg
ICBpZiAoY2hhbmdlIDwgSW5oZXJpdCAmJiAhY2hpbGQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygp
ICYmICFjaGlsZC0+bmVlZHNTdHlsZVJlY2FsYygpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHJlc29sdmVUcmVlKGNoaWxkLCBjaGFuZ2UpOwotICAgIH0KKyAgICBFbGVtZW50KiBk
b2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRv
Y3VtZW50RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjaGFuZ2UgPCBJbmhlcml0
ICYmICFkb2N1bWVudEVsZW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpICYmICFkb2N1bWVu
dEVsZW1lbnQtPm5lZWRzU3R5bGVSZWNhbGMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlc29s
dmVUcmVlKCpkb2N1bWVudEVsZW1lbnQsIGNoYW5nZSk7CiB9CiAKLXZvaWQgYXR0YWNoUmVuZGVy
VHJlZShFbGVtZW50KiBlbGVtZW50KQordm9pZCBhdHRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmIGVs
ZW1lbnQpCiB7CiAgICAgYXR0YWNoUmVuZGVyVHJlZShlbGVtZW50LCBudWxscHRyKTsKIH0KIAot
dm9pZCBkZXRhY2hSZW5kZXJUcmVlKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIGRldGFjaFJlbmRl
clRyZWUoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBkZXRhY2hSZW5kZXJUcmVlKGVsZW1lbnQs
IE5vcm1hbERldGFjaCk7CiB9CiAKLXZvaWQgZGV0YWNoUmVuZGVyVHJlZUluUmVhdHRhY2hNb2Rl
KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIGRldGFjaFJlbmRlclRyZWVJblJlYXR0YWNoTW9kZShF
bGVtZW50JiBlbGVtZW50KQogewogICAgIGRldGFjaFJlbmRlclRyZWUoZWxlbWVudCwgUmVhdHRh
Y2hEZXRhY2gpOwogfQogCi12b2lkIHJlYXR0YWNoUmVuZGVyVHJlZShFbGVtZW50KiBjdXJyZW50
KQordm9pZCByZWF0dGFjaFJlbmRlclRyZWUoRWxlbWVudCYgY3VycmVudCkKIHsKLSAgICBpZiAo
Y3VycmVudC0+YXR0YWNoZWQoKSkKKyAgICBpZiAoY3VycmVudC5hdHRhY2hlZCgpKQogICAgICAg
ICBkZXRhY2hSZW5kZXJUcmVlKGN1cnJlbnQsIFJlYXR0YWNoRGV0YWNoKTsKICAgICBhdHRhY2hS
ZW5kZXJUcmVlKGN1cnJlbnQsIG51bGxwdHIpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlUmVzb2x2ZVRyZWUuaAkocmV2aXNpb24gMTU0OTAwKQorKysgU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgsMTQg
QEAgbmFtZXNwYWNlIFN0eWxlIHsKIAogZW51bSBDaGFuZ2UgeyBOb0NoYW5nZSwgTm9Jbmhlcml0
LCBJbmhlcml0LCBEZXRhY2gsIEZvcmNlIH07CiAKLXZvaWQgcmVzb2x2ZVRyZWUoRWxlbWVudCos
IENoYW5nZSk7Ci12b2lkIHJlc29sdmVUcmVlKERvY3VtZW50KiwgQ2hhbmdlKTsKK3ZvaWQgcmVz
b2x2ZVRyZWUoRWxlbWVudCYsIENoYW5nZSk7Cit2b2lkIHJlc29sdmVUcmVlKERvY3VtZW50Jiwg
Q2hhbmdlKTsKIAotdm9pZCBhdHRhY2hSZW5kZXJUcmVlKEVsZW1lbnQqKTsKLXZvaWQgZGV0YWNo
UmVuZGVyVHJlZShFbGVtZW50Kik7Ci12b2lkIHJlYXR0YWNoUmVuZGVyVHJlZShFbGVtZW50Kik7
Cit2b2lkIGF0dGFjaFJlbmRlclRyZWUoRWxlbWVudCYpOwordm9pZCBkZXRhY2hSZW5kZXJUcmVl
KEVsZW1lbnQmKTsKK3ZvaWQgcmVhdHRhY2hSZW5kZXJUcmVlKEVsZW1lbnQmKTsKIC8vIEZJWE1F
OiBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgImxhenkgcmVhdHRhY2giIGZvciBzaGFkb3cgdHJlZXMu
Ci12b2lkIGRldGFjaFJlbmRlclRyZWVJblJlYXR0YWNoTW9kZShFbGVtZW50Kik7Cit2b2lkIGRl
dGFjaFJlbmRlclRyZWVJblJlYXR0YWNoTW9kZShFbGVtZW50Jik7CiAKIHZvaWQgYXR0YWNoVGV4
dFJlbmRlcmVyKFRleHQmKTsKIHZvaWQgZGV0YWNoVGV4dFJlbmRlcmVyKFRleHQmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAkocmV2aXNpb24gMTU0OTAwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1Rlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDkgKzE1OSw5IEBAIGJv
b2wgU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZShTVkcKICAgICBib29sIHZhbGlkID0g
dGFyZ2V0RWxlbWVudC0+aXNWYWxpZCgpOwogICAgIGJvb2wgYXR0YWNoZWQgPSB0YXJnZXRFbGVt
ZW50LT5hdHRhY2hlZCgpOwogICAgIGlmICh2YWxpZCAmJiAhYXR0YWNoZWQgJiYgdGFyZ2V0RWxl
bWVudC0+cGFyZW50Tm9kZSgpLT5hdHRhY2hlZCgpKQotICAgICAgICBTdHlsZTo6YXR0YWNoUmVu
ZGVyVHJlZSh0YXJnZXRFbGVtZW50KTsKKyAgICAgICAgU3R5bGU6OmF0dGFjaFJlbmRlclRyZWUo
KnRhcmdldEVsZW1lbnQpOwogICAgIGVsc2UgaWYgKCF2YWxpZCAmJiBhdHRhY2hlZCkKLSAgICAg
ICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWUodGFyZ2V0RWxlbWVudCk7CisgICAgICAgIFN0eWxl
OjpkZXRhY2hSZW5kZXJUcmVlKCp0YXJnZXRFbGVtZW50KTsKIAogICAgIHJldHVybiB0cnVlOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5jcHAJKHJldmlzaW9uIDE1NDkwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxFcnJvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyAr
MTI4LDcgQEAgdm9pZCBYTUxFcnJvcnM6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKAogICAgICAg
ICByb290RWxlbWVudC0+cGFyc2VyQXBwZW5kQ2hpbGQoYm9keSk7CiAgICAgICAgIG1fZG9jdW1l
bnQtPnBhcnNlckFwcGVuZENoaWxkKHJvb3RFbGVtZW50KTsKICAgICAgICAgaWYgKG1fZG9jdW1l
bnQtPmF0dGFjaGVkKCkgJiYgIXJvb3RFbGVtZW50LT5hdHRhY2hlZCgpKQotICAgICAgICAgICAg
U3R5bGU6OmF0dGFjaFJlbmRlclRyZWUocm9vdEVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAg
U3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoKnJvb3RFbGVtZW50KTsKICAgICAgICAgZG9jdW1lbnRF
bGVtZW50ID0gYm9keS5nZXQoKTsKICAgICB9CiAjaWYgRU5BQkxFKFNWRykKQEAgLTEzOSw3ICsx
MzksNyBAQCB2b2lkIFhNTEVycm9yczo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soCiAKICAgICAg
ICAgZG9jdW1lbnRFbGVtZW50LT5wYXJlbnROb2RlKCktPnBhcnNlclJlbW92ZUNoaWxkKGRvY3Vt
ZW50RWxlbWVudC5nZXQoKSk7CiAgICAgICAgIGlmIChkb2N1bWVudEVsZW1lbnQtPmF0dGFjaGVk
KCkpCi0gICAgICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZShkb2N1bWVudEVsZW1lbnQu
Z2V0KCkpOworICAgICAgICAgICAgU3R5bGU6OmRldGFjaFJlbmRlclRyZWUoKmRvY3VtZW50RWxl
bWVudCk7CiAKICAgICAgICAgYm9keS0+cGFyc2VyQXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50
KTsKICAgICAgICAgbV9kb2N1bWVudC0+cGFyc2VyQXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQuZ2V0
KCkpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgWE1MRXJyb3JzOjppbnNlcnRFcnJvck1lc3Nh
Z2VCbG9jaygKICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmF0dGFjaGVkKCkpCiAgICAgICAgICAg
ICAvLyBJbiBnZW5lcmFsLCByb290RWxlbWVudCBzaG91bGRuJ3QgYmUgYXR0YWNoZWQgcmlnaHQg
bm93LCBidXQgaXQgd2lsbCBiZSBpZiB0aGVyZSBpcyBhIHN0eWxlIGVsZW1lbnQKICAgICAgICAg
ICAgIC8vIGluIHRoZSBTVkcgY29udGVudC4KLSAgICAgICAgICAgIFN0eWxlOjpyZWF0dGFjaFJl
bmRlclRyZWUocm9vdEVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgU3R5bGU6OnJlYXR0YWNo
UmVuZGVyVHJlZSgqcm9vdEVsZW1lbnQpOwogCiAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGJv
ZHkuZ2V0KCk7CiAgICAgfQpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgWE1MRXJyb3JzOjppbnNl
cnRFcnJvck1lc3NhZ2VCbG9jaygKICAgICAgICAgZG9jdW1lbnRFbGVtZW50LT5wYXJzZXJBcHBl
bmRDaGlsZChyZXBvcnRFbGVtZW50KTsKIAogICAgIGlmIChkb2N1bWVudEVsZW1lbnQtPmF0dGFj
aGVkKCkgJiYgIXJlcG9ydEVsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIFN0eWxlOjphdHRh
Y2hSZW5kZXJUcmVlKHJlcG9ydEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBTdHlsZTo6YXR0YWNo
UmVuZGVyVHJlZSgqcmVwb3J0RWxlbWVudCk7CiAKICAgICBtX2RvY3VtZW50LT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCShyZXZpc2lvbiAxNTQ5MDApCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpz
dGFydEVsZW1lbnROcyhjCiAjZW5kaWYKIAogICAgIGlmIChtX3ZpZXcgJiYgY3VycmVudE5vZGUt
PmF0dGFjaGVkKCkgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCi0gICAgICAgIFN0eWxlOjph
dHRhY2hSZW5kZXJUcmVlKG5ld0VsZW1lbnQuZ2V0KCkpOworICAgICAgICBTdHlsZTo6YXR0YWNo
UmVuZGVyVHJlZSgqbmV3RWxlbWVudCk7CiAKICAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKQogICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1l
bnQqPihuZXdFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOwo=
</data>
<flag name="review"
          id="232229"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>