<?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>161907</bug_id>
          
          <creation_ts>2016-09-13 05:10:07 -0700</creation_ts>
          <short_desc>[GTK] Get rid of DataObjectGtk::forClipboard and cleanup pasteboard code</short_desc>
          <delta_ts>2016-09-20 06:38:52 -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>WebKitGTK</component>
          <version>WebKit Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>146574</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1229143</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-13 05:10:07 -0700</bug_when>
    <thetext>We don&apos;t really need to keep a DataObjectGtk for every clipboard, we could simply pass the DataObjectGtk to read and write methods of PasteboardHelper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229147</commentid>
    <comment_count>1</comment_count>
      <attachid>288687</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-13 05:19:52 -0700</bug_when>
    <thetext>Created attachment 288687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229171</commentid>
    <comment_count>2</comment_count>
      <attachid>288687</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-13 09:04:32 -0700</bug_when>
    <thetext>Comment on attachment 288687
Patch

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

&gt; Source/WebCore/platform/gtk/PasteboardGtk.cpp:99
&gt; -DataObjectGtk* Pasteboard::dataObject() const
&gt; +const DataObjectGtk&amp; Pasteboard::dataObject() const
&gt;  {
&gt; -    return m_dataObject.get();
&gt; +    return *m_dataObject;
&gt;  }

You should also change m_dataObject to be a (non-const) reference, since it&apos;s always initialized in the constructor initializer lists and there are also ASSERTs to ensure it&apos;s not null. Then you can get rid of the ASSERTS, and don&apos;t have to dereference it throughout the file anymore.

&gt; Source/WebCore/platform/gtk/PasteboardHelper.cpp:311
&gt; +            // When gtk_clipboard_set_with_data fails the callbacks are ignored, so we need to leak the data we were passing to clearClipboardContentsCallback.
&gt; +            data.release();

This confused me because I assumed this was on the failure path, because your comment starts with &quot;when it fails,&quot; but in fact this is the success case. I see that you need to leak it only on success, so the code is right, just the comment is confusing.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:69
&gt; +    DragData dragData(const_cast&lt;DataObjectGtk*&gt;(&amp;dataObject), clientPosition, globalPosition, dataTransfer.sourceOperation());

Wouldn&apos;t it be better to provide a non-const accessor as well, to avoid the const_cast here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229172</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-13 09:10:33 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 288687 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=288687&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/PasteboardGtk.cpp:99
&gt; &gt; -DataObjectGtk* Pasteboard::dataObject() const
&gt; &gt; +const DataObjectGtk&amp; Pasteboard::dataObject() const
&gt; &gt;  {
&gt; &gt; -    return m_dataObject.get();
&gt; &gt; +    return *m_dataObject;
&gt; &gt;  }
&gt; 
&gt; You should also change m_dataObject to be a (non-const) reference, since
&gt; it&apos;s always initialized in the constructor initializer lists and there are
&gt; also ASSERTs to ensure it&apos;s not null. Then you can get rid of the ASSERTS,
&gt; and don&apos;t have to dereference it throughout the file anymore.

Yes, I tried that, but it&apos;s not that easy because of the way DragData works, I plan to do another cleanup after the clipboard is moved to the UI process, to not delay more that patch.

&gt; &gt; Source/WebCore/platform/gtk/PasteboardHelper.cpp:311
&gt; &gt; +            // When gtk_clipboard_set_with_data fails the callbacks are ignored, so we need to leak the data we were passing to clearClipboardContentsCallback.
&gt; &gt; +            data.release();
&gt; 
&gt; This confused me because I assumed this was on the failure path, because
&gt; your comment starts with &quot;when it fails,&quot; but in fact this is the success
&gt; case. I see that you need to leak it only on success, so the code is right,
&gt; just the comment is confusing.

Agree, I modified the existing comment that was in the failure path, and it&apos;s not clear enough now, I&apos;ll rephrase it.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:69
&gt; &gt; +    DragData dragData(const_cast&lt;DataObjectGtk*&gt;(&amp;dataObject), clientPosition, globalPosition, dataTransfer.sourceOperation());
&gt; 
&gt; Wouldn&apos;t it be better to provide a non-const accessor as well, to avoid the
&gt; const_cast here?

This is temporal, I&apos;ll get rid of all const_casts in the second cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229173</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-13 09:16:00 -0700</bug_when>
    <thetext>Committed r205860: &lt;http://trac.webkit.org/changeset/205860&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231606</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-20 06:38:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Comment on attachment 288687 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=288687&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gtk/PasteboardGtk.cpp:99
&gt; &gt; &gt; -DataObjectGtk* Pasteboard::dataObject() const
&gt; &gt; &gt; +const DataObjectGtk&amp; Pasteboard::dataObject() const
&gt; &gt; &gt;  {
&gt; &gt; &gt; -    return m_dataObject.get();
&gt; &gt; &gt; +    return *m_dataObject;
&gt; &gt; &gt;  }
&gt; &gt; 
&gt; &gt; You should also change m_dataObject to be a (non-const) reference, since
&gt; &gt; it&apos;s always initialized in the constructor initializer lists and there are
&gt; &gt; also ASSERTs to ensure it&apos;s not null. Then you can get rid of the ASSERTS,
&gt; &gt; and don&apos;t have to dereference it throughout the file anymore.
&gt; 
&gt; Yes, I tried that, but it&apos;s not that easy because of the way DragData works,
&gt; I plan to do another cleanup after the clipboard is moved to the UI process,
&gt; to not delay more that patch.
&gt; 

The cleanup
https://bugs.webkit.org/show_bug.cgi?id=162267

The next step is renaming DataObjectGtk to something like SelectionData.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288687</attachid>
            <date>2016-09-13 05:19:52 -0700</date>
            <delta_ts>2016-09-13 09:04:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-pasteboard-cleanup.diff</filename>
            <type>text/plain</type>
            <size>33333</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZGUyOGVhLi41YzAzNzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTYtMDktMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEdldCByaWQgb2YgRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJk
IGFuZCBjbGVhbnVwIHBhc3RlYm9hcmQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxOTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8ga2VlcCBhIERhdGFP
YmplY3RHdGsgZm9yIGV2ZXJ5IGNsaXBib2FyZCwgd2UgY291bGQgc2ltcGx5IHBhc3MgdGhlIERh
dGFPYmplY3RHdGsgdG8gcmVhZAorICAgICAgICBhbmQgd3JpdGUgbWV0aG9kcyBvZiBQYXN0ZWJv
YXJkSGVscGVyLgorCisgICAgICAgICogZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKTogVXBkYXRlIGZv
ciBEYXRhT2JqZWN0R3RrIEFQSSBjaGFuZ2VzLgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9h
cmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6IFJlbW92ZSBm
b3JDbGlwYm9hcmQoKSBzdGF0aWMgbWV0aG9kLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRh
T2JqZWN0R3RrLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3Rr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQpOiBBbHdheXMg
Y3JlYXRlIGEgbmV3IERhdGFPYmplY3RHdGsuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpkYXRhT2JqZWN0KTogUmV0dXJuIGEgY29uc3QgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQpOiBQYXNz
IHRoZSBEYXRhT2JqZWN0R3RrIHRvIFBhc3RlYm9hcmRIZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjp3cml0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6d3JpdGVQYXN0ZWJvYXJkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpjbGVhcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6aGFzRGF0YSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
UGFzdGVib2FyZEhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVy
OjpnZXRDbGlwYm9hcmRDb250ZW50cyk6IFVwZGF0ZSB0aGUgZ2l2ZW4gRGF0YU9iamVjdEd0ay4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRIZWxwZXI6OmZpbGxTZWxlY3Rpb25EYXRhKTog
VXNlIGEgY29uc3QgcmVmZXJlbmNlIHRvIERhdGFPYmplY3RHdGsgaW5zdGVhZCBvZiBhIHBvaW50
ZXIuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0
YU9iamVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEhlbHBlcjo6Zmls
bERhdGFPYmplY3RGcm9tRHJvcERhdGEpOiBVc2UgYSByZWZlcmVuY2UgdG8gRGF0YU9iamVjdEd0
ayBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFNldERh
dGE6OkNsaXBib2FyZFNldERhdGEpOiBIZWxwZXIgc3RydWN0IHRvIHBhc3MgRGF0YU9iamVjdEd0
ayBhbmQgY2FsbGJhY2sgdG8gY2xpcGJvYXJkIGNhbGxiYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZFNldERhdGE6On5DbGlwYm9hcmRTZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2spOiBHZXQgdGhlIERhdGFPYmplY3RHdGsgZnJv
bSBDbGlwYm9hcmRTZXREYXRhIHN0cnVjdCBwYXNzZWQgYXMgdXNlciBkYXRhLgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKTogR2V0IHRoZSBEYXRhT2Jq
ZWN0R3RrIGFuZCBjYWxsYmFjayBmcm9tIENsaXBib2FyZFNldERhdGEgc3RydWN0CisgICAgICAg
IHBhc3NlZCBhcyB1c2VyIGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVy
Ojp3cml0ZUNsaXBib2FyZENvbnRlbnRzKTogV3JpdGUgdGhlIGdpdmVuIERhdGFPYmplY3RHdGsu
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaDoKKwogMjAxNi0wOS0x
MiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gU2Nyb2xsYmFyICB0b28gbGFyZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0
b3JHdGsuY3BwCmluZGV4IDJmNTE2ZjguLmE1YTUwYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9ndGsvRWRpdG9yR3RrLmNwcApAQCAtNTMsMTYgKzUzLDE2IEBAIHN0YXRpYyBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2Fy
ZCYgcGFzCiAgICAgaWYgKCFwYXN0ZWJvYXJkLmhhc0RhdGEoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gcGFzdGVib2FyZC5kYXRh
T2JqZWN0KCk7Ci0gICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpICYmIGZyYW1lLmRvY3Vt
ZW50KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRv
Y3VtZW50KCksIGRhdGFPYmplY3QtPm1hcmt1cCgpLCBlbXB0eVN0cmluZygpLCBEaXNhbGxvd1Nj
cmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOworICAgIGNvbnN0IGF1dG8mIGRhdGFPYmplY3QgPSBw
YXN0ZWJvYXJkLmRhdGFPYmplY3QoKTsKKyAgICBpZiAoZGF0YU9iamVjdC5oYXNNYXJrdXAoKSAm
JiBmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKCpmcmFtZS5kb2N1bWVudCgpLCBkYXRhT2JqZWN0Lm1hcmt1cCgpLCBlbXB0eVN0cmluZygp
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogCiAgICAgaWYgKCFhbGxvd1Bs
YWluVGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoZGF0YU9iamVjdC0+
aGFzVGV4dCgpKSB7CisgICAgaWYgKGRhdGFPYmplY3QuaGFzVGV4dCgpKSB7CiAgICAgICAgIGNo
b3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQocmFuZ2UsIGRhdGFPYmplY3QtPnRleHQoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcmFn
bWVudEZyb21UZXh0KHJhbmdlLCBkYXRhT2JqZWN0LnRleHQoKSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggNDczM2Iz
NS4uY2JmYmMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2Fy
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtMTkzLDcg
KzE5Myw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQotICAgIERhdGFP
YmplY3RHdGsqIGRhdGFPYmplY3QoKSBjb25zdDsKKyAgICBjb25zdCBEYXRhT2JqZWN0R3RrJiBk
YXRhT2JqZWN0KCkgY29uc3Q7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJk
PiBjcmVhdGVGb3JHbG9iYWxTZWxlY3Rpb24oKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKaW5kZXggODcwOTIzNS4uNmRiMGJkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAt
MTQ3LDE1ICsxNDcsNCBAQCB2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyQWxsKCkKICAgICBtX2Zp
bGVuYW1lcy5jbGVhcigpOwogfQogCi1EYXRhT2JqZWN0R3RrKiBEYXRhT2JqZWN0R3RrOjpmb3JD
bGlwYm9hcmQoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8
R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gb2JqZWN0TWFwOwotCi0gICAg
YXV0byBhZGRSZXN1bHQgPSBvYmplY3RNYXAuYWRkKGNsaXBib2FyZCwgbnVsbHB0cik7Ci0gICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gRGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9EYXRhT2JqZWN0R3RrLmgKaW5kZXggM2FiYjFmOC4uNDhhMjAzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oCkBAIC02Niw4ICs2Niw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsZWFyVGV4dCgpOwogICAgIHZvaWQgY2xlYXJNYXJrdXAoKTsKIAotICAg
IHN0YXRpYyBEYXRhT2JqZWN0R3RrKiBmb3JDbGlwYm9hcmQoR3RrQ2xpcGJvYXJkKik7Ci0KIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKICAgICBTdHJpbmcgbV9tYXJrdXA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKaW5kZXggMTNjMGRkMC4u
ZDkxMGE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3Rr
LmNwcApAQCAtODIsNyArODIsNyBAQCBQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKFJlZlB0cjxEYXRh
T2JqZWN0R3RrPiYmIGRhdGFPYmplY3QpCiB9CiAKIFBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoR3Rr
Q2xpcGJvYXJkKiBndGtDbGlwYm9hcmQpCi0gICAgOiBtX2RhdGFPYmplY3QoRGF0YU9iamVjdEd0
azo6Zm9yQ2xpcGJvYXJkKGd0a0NsaXBib2FyZCkpCisgICAgOiBtX2RhdGFPYmplY3QoRGF0YU9i
amVjdEd0azo6Y3JlYXRlKCkpCiAgICAgLCBtX2d0a0NsaXBib2FyZChndGtDbGlwYm9hcmQpCiB7
CiAgICAgQVNTRVJUKG1fZGF0YU9iamVjdCk7CkBAIC05Myw5ICs5Myw5IEBAIFBhc3RlYm9hcmQ6
On5QYXN0ZWJvYXJkKCkKIHsKIH0KIAotRGF0YU9iamVjdEd0ayogUGFzdGVib2FyZDo6ZGF0YU9i
amVjdCgpIGNvbnN0Citjb25zdCBEYXRhT2JqZWN0R3RrJiBQYXN0ZWJvYXJkOjpkYXRhT2JqZWN0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhT2JqZWN0LmdldCgpOworICAgIHJldHVybiAq
bV9kYXRhT2JqZWN0OwogfQogCiBzdGF0aWMgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YU9iamVjdFR5
cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoY29uc3QgU3RyaW5nJiByYXdUeXBlKQpAQCAtMTQ4LDcg
KzE0OCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBTbWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBsCiAgICAgbV9kYXRhT2JqZWN0LT5zZXRU
ZXh0KHRleHQpOwogCiAgICAgaWYgKG1fZ3RrQ2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJk
SGVscGVyOjpzaW5nbGV0b24oKS53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJk
LCAoc21hcnRSZXBsYWNlT3B0aW9uID09IENhblNtYXJ0UmVwbGFjZSkgPyBQYXN0ZWJvYXJkSGVs
cGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNt
YXJ0UGFzdGUpOworICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS53cml0ZUNs
aXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkLCAqbV9kYXRhT2JqZWN0LCAoc21hcnRSZXBs
YWNlT3B0aW9uID09IENhblNtYXJ0UmVwbGFjZSkgPyBQYXN0ZWJvYXJkSGVscGVyOjpJbmNsdWRl
U21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOwog
fQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9h
cmRVUkwpCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQ
YXN0ZWJvYXJkVVJMJiBwYXN0ZWJvYXJkVVJMKQogICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHBh
c3RlYm9hcmRVUkwudXJsLCBwYXN0ZWJvYXJkVVJMLnRpdGxlKTsKIAogICAgIGlmIChtX2d0a0Ns
aXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkud3JpdGVDbGlw
Ym9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7CisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6
OnNpbmdsZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsICptX2Rh
dGFPYmplY3QpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJ
bWFnZSYgcGFzdGVib2FyZEltYWdlKQpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCiAgICAgICAg
IG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKIAogICAgIGlmIChtX2d0a0Ns
aXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkud3JpdGVDbGlw
Ym9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7CisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6
OnNpbmdsZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsICptX2Rh
dGFPYmplY3QpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRX
ZWJDb250ZW50JiBwYXN0ZWJvYXJkQ29udGVudCkKQEAgLTE4NSwzMSArMTg1LDMxIEBAIHZvaWQg
UGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIHBhc3RlYm9hcmRD
b250ZW50KQogICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKHBhc3RlYm9hcmRDb250ZW50Lm1h
cmt1cCk7CiAKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxw
ZXI6OnNpbmdsZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsIHBh
c3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID8gUGFzdGVib2FyZEhlbHBlcjo6
SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBh
c3RlLCBwYXN0ZWJvYXJkQ29udGVudC5jYWxsYmFjay5nZXQoKSk7CisgICAgICAgIFBhc3RlYm9h
cmRIZWxwZXI6OnNpbmdsZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9h
cmQsICptX2RhdGFPYmplY3QsIHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRl
ID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVy
OjpEb05vdEluY2x1ZGVTbWFydFBhc3RlLCBwYXN0ZWJvYXJkQ29udGVudC5jYWxsYmFjay5nZXQo
KSk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9h
cmQmIHNvdXJjZVBhc3RlYm9hcmQpCiB7Ci0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IHNvdXJj
ZURhdGFPYmplY3QgPSBzb3VyY2VQYXN0ZWJvYXJkLmRhdGFPYmplY3QoKTsKKyAgICBjb25zdCBh
dXRvJiBzb3VyY2VEYXRhT2JqZWN0ID0gc291cmNlUGFzdGVib2FyZC5kYXRhT2JqZWN0KCk7CiAg
ICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwogCi0gICAgaWYgKHNvdXJjZURhdGFPYmplY3Qt
Pmhhc1RleHQoKSkKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHNvdXJjZURhdGFPYmpl
Y3QtPnRleHQoKSk7Ci0gICAgaWYgKHNvdXJjZURhdGFPYmplY3QtPmhhc01hcmt1cCgpKQotICAg
ICAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChzb3VyY2VEYXRhT2JqZWN0LT5tYXJrdXAoKSk7
Ci0gICAgaWYgKHNvdXJjZURhdGFPYmplY3QtPmhhc1VSTCgpKQotICAgICAgICBtX2RhdGFPYmpl
Y3QtPnNldFVSTChzb3VyY2VEYXRhT2JqZWN0LT51cmwoKSwgc291cmNlRGF0YU9iamVjdC0+dXJs
TGFiZWwoKSk7Ci0gICAgaWYgKHNvdXJjZURhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkKLSAgICAg
ICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNvdXJjZURhdGFPYmplY3QtPnVyaUxpc3QoKSk7
Ci0gICAgaWYgKHNvdXJjZURhdGFPYmplY3QtPmhhc0ltYWdlKCkpCi0gICAgICAgIG1fZGF0YU9i
amVjdC0+c2V0SW1hZ2Uoc291cmNlRGF0YU9iamVjdC0+aW1hZ2UoKSk7Ci0gICAgaWYgKHNvdXJj
ZURhdGFPYmplY3QtPmhhc1Vua25vd25UeXBlRGF0YSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
aXQgOiBtX2RhdGFPYmplY3QtPnVua25vd25UeXBlcygpKQorICAgIGlmIChzb3VyY2VEYXRhT2Jq
ZWN0Lmhhc1RleHQoKSkKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHNvdXJjZURhdGFP
YmplY3QudGV4dCgpKTsKKyAgICBpZiAoc291cmNlRGF0YU9iamVjdC5oYXNNYXJrdXAoKSkKKyAg
ICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoc291cmNlRGF0YU9iamVjdC5tYXJrdXAoKSk7
CisgICAgaWYgKHNvdXJjZURhdGFPYmplY3QuaGFzVVJMKCkpCisgICAgICAgIG1fZGF0YU9iamVj
dC0+c2V0VVJMKHNvdXJjZURhdGFPYmplY3QudXJsKCksIHNvdXJjZURhdGFPYmplY3QudXJsTGFi
ZWwoKSk7CisgICAgaWYgKHNvdXJjZURhdGFPYmplY3QuaGFzVVJJTGlzdCgpKQorICAgICAgICBt
X2RhdGFPYmplY3QtPnNldFVSSUxpc3Qoc291cmNlRGF0YU9iamVjdC51cmlMaXN0KCkpOworICAg
IGlmIChzb3VyY2VEYXRhT2JqZWN0Lmhhc0ltYWdlKCkpCisgICAgICAgIG1fZGF0YU9iamVjdC0+
c2V0SW1hZ2Uoc291cmNlRGF0YU9iamVjdC5pbWFnZSgpKTsKKyAgICBpZiAoc291cmNlRGF0YU9i
amVjdC5oYXNVbmtub3duVHlwZURhdGEoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGl0IDogc291
cmNlRGF0YU9iamVjdC51bmtub3duVHlwZXMoKSkKICAgICAgICAgICAgIG1fZGF0YU9iamVjdC0+
c2V0VW5rbm93blR5cGVEYXRhKGl0LmtleSwgaXQudmFsdWUpOwogICAgIH0KIAogICAgIGlmICht
X2d0a0NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkud3Jp
dGVDbGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7CisgICAgICAgIFBhc3RlYm9hcmRI
ZWxwZXI6OnNpbmdsZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQs
ICptX2RhdGFPYmplY3QpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKQEAgLTIyMSw3
ICsyMjEsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKICAgICBtX2RhdGFPYmplY3QtPmNs
ZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7CiAKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCi0gICAg
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMo
bV9ndGtDbGlwYm9hcmQpOworICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS53
cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkLCAqbV9kYXRhT2JqZWN0KTsKIH0K
IAogdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC0yNDYsNyAr
MjQ2LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAg
fQogCiAgICAgaWYgKG1fZ3RrQ2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpz
aW5nbGV0b24oKS53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsKKyAgICAg
ICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkud3JpdGVDbGlwYm9hcmRDb250ZW50cyht
X2d0a0NsaXBib2FyZCwgKm1fZGF0YU9iamVjdCk7CiB9CiAKIGJvb2wgUGFzdGVib2FyZDo6Y2Fu
U21hcnRSZXBsYWNlKCkKQEAgLTI2MywxNCArMjYzLDE0IEBAIHZvaWQgUGFzdGVib2FyZDo6c2V0
RHJhZ0ltYWdlKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmKQogdm9pZCBQYXN0ZWJvYXJk
OjpyZWFkKFBhc3RlYm9hcmRQbGFpblRleHQmIHRleHQpCiB7CiAgICAgaWYgKG1fZ3RrQ2xpcGJv
YXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS5nZXRDbGlwYm9hcmRD
b250ZW50cyhtX2d0a0NsaXBib2FyZCk7CisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmds
ZXRvbigpLmdldENsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkLCAqbV9kYXRhT2JqZWN0
KTsKICAgICB0ZXh0LnRleHQgPSBtX2RhdGFPYmplY3QtPnRleHQoKTsKIH0KIAogYm9vbCBQYXN0
ZWJvYXJkOjpoYXNEYXRhKCkKIHsKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCi0gICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmdldENsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xp
cGJvYXJkKTsKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZ2V0Q2xpcGJv
YXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsICptX2RhdGFPYmplY3QpOwogCiAgICAgcmV0dXJu
IG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpIHx8IG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkgfHwg
bV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNJbWFnZSgpIHx8
IG1fZGF0YU9iamVjdC0+aGFzVW5rbm93blR5cGVEYXRhKCk7CiB9CkBAIC0yNzgsNyArMjc4LDcg
QEAgYm9vbCBQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6
OnR5cGVzKCkKIHsKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRI
ZWxwZXI6OnNpbmdsZXRvbigpLmdldENsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsK
KyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZ2V0Q2xpcGJvYXJkQ29udGVu
dHMobV9ndGtDbGlwYm9hcmQsICptX2RhdGFPYmplY3QpOwogCiAgICAgVmVjdG9yPFN0cmluZz4g
dHlwZXM7CiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CkBAIC0zMDcsNyArMzA3
LDcgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXMoKQogU3RyaW5nIFBhc3RlYm9h
cmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmIChtX2d0a0NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZ2V0Q2xpcGJvYXJk
Q29udGVudHMobV9ndGtDbGlwYm9hcmQpOworICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5n
bGV0b24oKS5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCwgKm1fZGF0YU9iamVj
dCk7CiAKICAgICBzd2l0Y2ggKGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5
cGUpKSB7CiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CkBAIC0zMzAsNyArMzMw
LDcgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQog
VmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCiB7CiAgICAgaWYgKG1f
Z3RrQ2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS5nZXRD
bGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7CisgICAgICAgIFBhc3RlYm9hcmRIZWxw
ZXI6OnNpbmdsZXRvbigpLmdldENsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkLCAqbV9k
YXRhT2JqZWN0KTsKIAogICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCmlu
ZGV4IDEzMWI0MGUuLjYyZDcwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEhlbHBlci5jcHAKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJQYXN0
ZWJvYXJkSGVscGVyLmgiCiAKICNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0jaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKICNpbmNsdWRlICJQYXN0
ZWJvYXJkLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgpAQCAtOTMsNTggKzky
LDU1IEBAIHN0YXRpYyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhHdGtTZWxlY3Rp
b25EYXRhKiBkYXRhKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KG1hcmt1cFN0cmluZy5n
ZXQoKSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJvYXJkQ29udGVudHMo
R3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCit2b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmdldENsaXBi
b2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBEYXRhT2JqZWN0R3RrJiBkYXRh
T2JqZWN0KQogewotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3Rr
Ojpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBBU1NFUlQoZGF0YU9iamVjdCk7Ci0KICAg
ICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKGNsaXBib2FyZCkpIHsK
ICAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gdGV4dERhdGEoZ3RrX2NsaXBib2FyZF93YWl0X2Zv
cl90ZXh0KGNsaXBib2FyZCkpOwogICAgICAgICBpZiAodGV4dERhdGEpCi0gICAgICAgICAgICBk
YXRhT2JqZWN0LT5zZXRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dERhdGEuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGRhdGFPYmplY3Quc2V0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRleHREYXRhLmdl
dCgpKSk7CiAgICAgfQogCiAgICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZh
aWxhYmxlKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsKICAgICAgICAgaWYgKEd0a1NlbGVjdGlv
bkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwg
bWFya3VwQXRvbSkpIHsKICAgICAgICAgICAgIFN0cmluZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRv
VVRGOFN0cmluZyhkYXRhKSk7CiAgICAgICAgICAgICByZW1vdmVNYXJrdXBQcmVmaXgobWFya3Vw
KTsKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChtYXJrdXApOworICAgICAgICAg
ICAgZGF0YU9iamVjdC5zZXRNYXJrdXAobWFya3VwKTsKICAgICAgICAgICAgIGd0a19zZWxlY3Rp
b25fZGF0YV9mcmVlKGRhdGEpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGd0a19jbGlw
Ym9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgdXJpTGlzdEF0b20pKSB7
CiAgICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0
X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIHVyaUxpc3RBdG9tKSkgewotICAgICAgICAgICAgZGF0
YU9iamVjdC0+c2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKKyAg
ICAgICAgICAgIGRhdGFPYmplY3Quc2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5n
KGRhdGEpKTsKICAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwogICAg
ICAgICB9CiAgICAgfQogfQogCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxTZWxlY3Rpb25E
YXRhKEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIERhdGFPYmpl
Y3RHdGsqIGRhdGFPYmplY3QpCit2b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxTZWxlY3Rpb25E
YXRhKEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGNvbnN0IERh
dGFPYmplY3RHdGsmIGRhdGFPYmplY3QpCiB7CiAgICAgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZVRl
eHQpCi0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfdGV4dChzZWxlY3Rpb25EYXRhLCBk
YXRhT2JqZWN0LT50ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOworICAgICAgICBndGtfc2VsZWN0
aW9uX2RhdGFfc2V0X3RleHQoc2VsZWN0aW9uRGF0YSwgZGF0YU9iamVjdC50ZXh0KCkudXRmOCgp
LmRhdGEoKSwgLTEpOwogCiAgICAgZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTWFya3VwKSB7
CiAgICAgICAgIC8vIFNvbWUgTGludXggYXBwbGljYXRpb25zIHJlZnVzZSB0byBhY2NlcHQgcGFz
dGVkIG1hcmt1cCB1bmxlc3MgaXQgaXMKICAgICAgICAgLy8gcHJlZml4ZWQgYnkgYSBjb250ZW50
LXR5cGUgbWV0YSB0YWcuCi0gICAgICAgIENTdHJpbmcgbWFya3VwID0gU3RyaW5nKGdNYXJrdXBQ
cmVmaXggKyBkYXRhT2JqZWN0LT5tYXJrdXAoKSkudXRmOCgpOworICAgICAgICBDU3RyaW5nIG1h
cmt1cCA9IFN0cmluZyhnTWFya3VwUHJlZml4ICsgZGF0YU9iamVjdC5tYXJrdXAoKSkudXRmOCgp
OwogICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG1hcmt1cEF0
b20sIDgsCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KG1hcmt1
cC5kYXRhKCkpLCBtYXJrdXAubGVuZ3RoKCkpOwogCiAgICAgfSBlbHNlIGlmIChpbmZvID09IFRh
cmdldFR5cGVVUklMaXN0KSB7Ci0gICAgICAgIENTdHJpbmcgdXJpTGlzdCA9IGRhdGFPYmplY3Qt
PnVyaUxpc3QoKS51dGY4KCk7CisgICAgICAgIENTdHJpbmcgdXJpTGlzdCA9IGRhdGFPYmplY3Qu
dXJpTGlzdCgpLnV0ZjgoKTsKICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rp
b25EYXRhLCB1cmlMaXN0QXRvbSwgOCwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZ3VjaGFyKj4odXJpTGlzdC5kYXRhKCkpLCB1cmlMaXN0Lmxlbmd0aCgpKTsKIAotICAgIH0g
ZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTmV0c2NhcGVVUkwgJiYgZGF0YU9iamVjdC0+aGFz
VVJMKCkpIHsKLSAgICAgICAgU3RyaW5nIHVybChkYXRhT2JqZWN0LT51cmwoKSk7CisgICAgfSBl
bHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVOZXRzY2FwZVVSTCAmJiBkYXRhT2JqZWN0Lmhhc1VS
TCgpKSB7CisgICAgICAgIFN0cmluZyB1cmwoZGF0YU9iamVjdC51cmwoKSk7CiAgICAgICAgIFN0
cmluZyByZXN1bHQodXJsKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKIAotICAgICAg
ICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChk
YXRhT2JqZWN0LT50ZXh0KCkpOworICAgICAgICBpZiAoZGF0YU9iamVjdC5oYXNUZXh0KCkpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGFPYmplY3QudGV4dCgpKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1cmwpOwogCkBAIC0xNTMsNyArMTQ5LDcgQEAg
dm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRh
KiBzZWxlY3Rpb25EYXRhLCBndWludAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBndWNoYXIqPihyZXN1bHREYXRhLmdldCgpKSwgc3RybGVuKHJlc3VsdERhdGEuZ2V0KCkpKTsK
IAogICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlSW1hZ2UpCi0gICAgICAgIGd0a19z
ZWxlY3Rpb25fZGF0YV9zZXRfcGl4YnVmKHNlbGVjdGlvbkRhdGEsIGRhdGFPYmplY3QtPmltYWdl
KCkpOworICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1ZihzZWxlY3Rpb25EYXRh
LCBkYXRhT2JqZWN0LmltYWdlKCkpOwogCiAgICAgZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBl
U21hcnRQYXN0ZSkKICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlv
bkRhdGEsICIiLCAtMSk7CkBAIC0xNjIsNyArMTU4LDcgQEAgdm9pZCBQYXN0ZWJvYXJkSGVscGVy
OjpmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWlu
dAogICAgICAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgZ192YXJpYW50X2J1
aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfQVJSQVkpOwogCi0gICAgICAgIGZv
ciAoYXV0byYgaXQgOiBkYXRhT2JqZWN0LT51bmtub3duVHlwZXMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGl0IDogZGF0YU9iamVjdC51bmtub3duVHlwZXMoKSkgewogICAgICAgICAgICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gZGljdEl0ZW0oZ19zdHJkdXBfcHJpbnRmKCJ7JyVzJywgJyVzJ30iLCBp
dC5rZXkudXRmOCgpLmRhdGEoKSwgaXQudmFsdWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgICAg
ICAgZ192YXJpYW50X2J1aWxkZXJfYWRkX3BhcnNlZCgmYnVpbGRlciwgZGljdEl0ZW0uZ2V0KCkp
OwogICAgICAgICB9CkBAIC0xNzMsNDcgKzE2OSw0NyBAQCB2b2lkIFBhc3RlYm9hcmRIZWxwZXI6
OmZpbGxTZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50
CiAgICAgfQogfQogCi1HdGtUYXJnZXRMaXN0KiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0
Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0LCBTbWFydFBhc3RlSW5jbHVz
aW9uIHNob3VsZElubHVkZVNtYXJ0UGFzdGUpCitHUmVmUHRyPEd0a1RhcmdldExpc3Q+IFBhc3Rl
Ym9hcmRIZWxwZXI6OnRhcmdldExpc3RGb3JEYXRhT2JqZWN0KGNvbnN0IERhdGFPYmplY3RHdGsm
IGRhdGFPYmplY3QsIFNtYXJ0UGFzdGVJbmNsdXNpb24gc2hvdWxkSW5sdWRlU21hcnRQYXN0ZSkK
IHsKLSAgICBHdGtUYXJnZXRMaXN0KiBsaXN0ID0gZ3RrX3RhcmdldF9saXN0X25ldyhudWxscHRy
LCAwKTsKKyAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3QgPSBhZG9wdEdSZWYoZ3RrX3Rh
cmdldF9saXN0X25ldyhudWxscHRyLCAwKSk7CiAKLSAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4
dCgpKQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhsaXN0LCBUYXJn
ZXRUeXBlVGV4dCk7CisgICAgaWYgKGRhdGFPYmplY3QuaGFzVGV4dCgpKQorICAgICAgICBndGtf
dGFyZ2V0X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJnZXRUeXBlVGV4dCk7
CiAKLSAgICBpZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCi0gICAgICAgIGd0a190YXJnZXRf
bGlzdF9hZGQobGlzdCwgbWFya3VwQXRvbSwgMCwgVGFyZ2V0VHlwZU1hcmt1cCk7CisgICAgaWYg
KGRhdGFPYmplY3QuaGFzTWFya3VwKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlz
dC5nZXQoKSwgbWFya3VwQXRvbSwgMCwgVGFyZ2V0VHlwZU1hcmt1cCk7CiAKLSAgICBpZiAoZGF0
YU9iamVjdC0+aGFzVVJJTGlzdCgpKSB7Ci0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJp
X3RhcmdldHMobGlzdCwgVGFyZ2V0VHlwZVVSSUxpc3QpOwotICAgICAgICBndGtfdGFyZ2V0X2xp
c3RfYWRkKGxpc3QsIG5ldHNjYXBlVVJMQXRvbSwgMCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsK
KyAgICBpZiAoZGF0YU9iamVjdC5oYXNVUklMaXN0KCkpIHsKKyAgICAgICAgZ3RrX3RhcmdldF9s
aXN0X2FkZF91cmlfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJnZXRUeXBlVVJJTGlzdCk7CisgICAg
ICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwgbmV0c2NhcGVVUkxBdG9tLCAwLCBU
YXJnZXRUeXBlTmV0c2NhcGVVUkwpOwogICAgIH0KIAotICAgIGlmIChkYXRhT2JqZWN0LT5oYXNJ
bWFnZSgpKQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobGlzdCwg
VGFyZ2V0VHlwZUltYWdlLCBUUlVFKTsKKyAgICBpZiAoZGF0YU9iamVjdC5oYXNJbWFnZSgpKQor
ICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobGlzdC5nZXQoKSwgVGFy
Z2V0VHlwZUltYWdlLCBUUlVFKTsKIAotICAgIGlmIChkYXRhT2JqZWN0LT5oYXNVbmtub3duVHlw
ZURhdGEoKSkKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LCB1bmtub3duQXRvbSwg
MCwgVGFyZ2V0VHlwZVVua25vd24pOworICAgIGlmIChkYXRhT2JqZWN0Lmhhc1Vua25vd25UeXBl
RGF0YSgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QuZ2V0KCksIHVua25vd25B
dG9tLCAwLCBUYXJnZXRUeXBlVW5rbm93bik7CiAKICAgICBpZiAoc2hvdWxkSW5sdWRlU21hcnRQ
YXN0ZSA9PSBJbmNsdWRlU21hcnRQYXN0ZSkKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChs
aXN0LCBzbWFydFBhc3RlQXRvbSwgMCwgVGFyZ2V0VHlwZVNtYXJ0UGFzdGUpOworICAgICAgICBn
dGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QuZ2V0KCksIHNtYXJ0UGFzdGVBdG9tLCAwLCBUYXJnZXRU
eXBlU21hcnRQYXN0ZSk7CiAKICAgICByZXR1cm4gbGlzdDsKIH0KIAotdm9pZCBQYXN0ZWJvYXJk
SGVscGVyOjpmaWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxlY3Rpb25EYXRhKiBkYXRh
LCBndWludCAvKiBpbmZvICovLCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQordm9pZCBQYXN0
ZWJvYXJkSGVscGVyOjpmaWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxlY3Rpb25EYXRh
KiBkYXRhLCBndWludCAvKiBpbmZvICovLCBEYXRhT2JqZWN0R3RrJiBkYXRhT2JqZWN0KQogewog
ICAgIGlmICghZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKGRhdGEpKQogICAgICAgICByZXR1
cm47CiAKICAgICBHZGtBdG9tIHRhcmdldCA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFyZ2V0
KGRhdGEpOwogICAgIGlmICh0YXJnZXQgPT0gdGV4dFBsYWluQXRvbSkKLSAgICAgICAgZGF0YU9i
amVjdC0+c2V0VGV4dChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKKyAgICAgICAg
ZGF0YU9iamVjdC5zZXRUZXh0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwogICAg
IGVsc2UgaWYgKHRhcmdldCA9PSBtYXJrdXBBdG9tKSB7CiAgICAgICAgIFN0cmluZyBtYXJrdXAo
c2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CiAgICAgICAgIHJlbW92ZU1hcmt1cFBy
ZWZpeChtYXJrdXApOwotICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKKyAg
ICAgICAgZGF0YU9iamVjdC5zZXRNYXJrdXAobWFya3VwKTsKICAgICB9IGVsc2UgaWYgKHRhcmdl
dCA9PSB1cmlMaXN0QXRvbSkgewotICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNlbGVj
dGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworICAgICAgICBkYXRhT2JqZWN0LnNldFVSSUxp
c3Qoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CiAgICAgfSBlbHNlIGlmICh0YXJn
ZXQgPT0gbmV0c2NhcGVVUkxBdG9tKSB7CiAgICAgICAgIFN0cmluZyB1cmxXaXRoTGFiZWwoc2Vs
ZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBp
ZWNlczsKQEAgLTIyMSwxMCArMjE3LDEwIEBAIHZvaWQgUGFzdGVib2FyZEhlbHBlcjo6ZmlsbERh
dGFPYmplY3RGcm9tRHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSwgZ3VpbnQKIAogICAg
ICAgICAvLyBHaXZlIHByZWZlcmVuY2UgdG8gdGV4dC91cmktbGlzdCBoZXJlLCBhcyBpdCBjYW4g
aG9sZCBtb3JlCiAgICAgICAgIC8vIHRoYW4gb25lIFVSSSBidXQgc3RpbGwgdGFrZSAgdGhlIGxh
YmVsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgaWYgKCFkYXRhT2JqZWN0LT5oYXNVUklMaXN0
KCkpCi0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHBpZWNlc1swXSk7CisgICAg
ICAgIGlmICghZGF0YU9iamVjdC5oYXNVUklMaXN0KCkpCisgICAgICAgICAgICBkYXRhT2JqZWN0
LnNldFVSSUxpc3QocGllY2VzWzBdKTsKICAgICAgICAgaWYgKHBpZWNlcy5zaXplKCkgPiAxKQot
ICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChwaWVjZXNbMV0pOworICAgICAgICAgICAg
ZGF0YU9iamVjdC5zZXRUZXh0KHBpZWNlc1sxXSk7CiAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0g
dW5rbm93bkF0b20pIHsKICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFy
aWFudF9uZXdfcGFyc2VkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGd0a19zZWxlY3Rp
b25fZGF0YV9nZXRfZGF0YShkYXRhKSkpOwogCkBAIC0yMzQsNyArMjMwLDcgQEAgdm9pZCBQYXN0
ZWJvYXJkSGVscGVyOjpmaWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxlY3Rpb25EYXRh
KiBkYXRhLCBndWludAogCiAgICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIHZhcmlh
bnQuZ2V0KCkpOwogICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbmV4dCgmaXRlciwgIntz
c30iLCAma2V5Lm91dFB0cigpLCAmdmFsdWUub3V0UHRyKCkpKQotICAgICAgICAgICAgZGF0YU9i
amVjdC0+c2V0VW5rbm93blR5cGVEYXRhKGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkpOworICAgICAg
ICAgICAgZGF0YU9iamVjdC5zZXRVbmtub3duVHlwZURhdGEoa2V5LmdldCgpLCB2YWx1ZS5nZXQo
KSk7CiAgICAgfQogfQogCkBAIC0yNjAsNTkgKzI1Niw2NyBAQCBWZWN0b3I8R2RrQXRvbT4gUGFz
dGVib2FyZEhlbHBlcjo6ZHJvcEF0b21zRm9yQ29udGV4dChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RHJhZwogCiBzdGF0aWMgRGF0YU9iamVjdEd0ayogc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3Qg
PSAwOwogCi1zdGF0aWMgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0NsaXBi
b2FyZCogY2xpcGJvYXJkLCBHdGtTZWxlY3Rpb25EYXRhICpzZWxlY3Rpb25EYXRhLCBndWludCBp
bmZvLCBncG9pbnRlcikKK3N0cnVjdCBDbGlwYm9hcmRTZXREYXRhIHsKKyAgICBDbGlwYm9hcmRT
ZXREYXRhKERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QsIEdDbG9zdXJlKiBjYWxsYmFjaykKKyAg
ICAgICAgOiBkYXRhT2JqZWN0KGRhdGFPYmplY3QpCisgICAgICAgICwgY2FsbGJhY2soY2FsbGJh
Y2spCisgICAgeworICAgIH0KKworICAgIH5DbGlwYm9hcmRTZXREYXRhKCkKKyAgICB7CisgICAg
fQorCisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3Q7CisgICAgR1JlZlB0cjxH
Q2xvc3VyZT4gY2FsbGJhY2s7Cit9OworCitzdGF0aWMgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50
c0NhbGxiYWNrKEd0a0NsaXBib2FyZCosIEd0a1NlbGVjdGlvbkRhdGEgKnNlbGVjdGlvbkRhdGEs
IGd1aW50IGluZm8sIGdwb2ludGVyIHVzZXJEYXRhKQogewotICAgIERhdGFPYmplY3RHdGsqIGRh
dGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBB
U1NFUlQoZGF0YU9iamVjdCk7Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZmls
bFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZGF0YU9iamVjdCk7CisgICAgYXV0
byogZGF0YSA9IHN0YXRpY19jYXN0PENsaXBib2FyZFNldERhdGEqPih1c2VyRGF0YSk7CisgICAg
UGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9u
RGF0YSwgaW5mbywgKmRhdGEtPmRhdGFPYmplY3QpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhckNs
aXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVy
IGRhdGEpCitzdGF0aWMgdm9pZCBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3RrQ2xp
cGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVyIHVzZXJEYXRhKQogewotICAgIERhdGFPYmplY3RH
dGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsK
LSAgICBBU1NFUlQoZGF0YU9iamVjdCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENsaXBib2FyZFNl
dERhdGE+IGRhdGEoc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkU2V0RGF0YSo+KHVzZXJEYXRhKSk7CiAK
ICAgICAvLyBPbmx5IGNsZWFyIHRoZSBEYXRhT2JqZWN0IGZvciB0aGlzIGNsaXBib2FyZCBpZiB3
ZSBhcmUgbm90IGN1cnJlbnRseSBzZXR0aW5nIGl0LgotICAgIGlmIChkYXRhT2JqZWN0ICE9IHNl
dHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0KQotICAgICAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgp
OworICAgIGlmIChkYXRhLT5kYXRhT2JqZWN0LmdldCgpICE9IHNldHRpbmdDbGlwYm9hcmREYXRh
T2JqZWN0KQorICAgICAgICBkYXRhLT5kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwogCi0gICAgaWYg
KCFkYXRhKQorICAgIGlmICghZGF0YS0+Y2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IGNhbGxiYWNrID0gYWRvcHRHUmVmKHN0YXRpY19jYXN0PEdDbG9z
dXJlKj4oZGF0YSkpOwogICAgIEdWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gezAsIHt7MH19fTsKICAg
ICBnX3ZhbHVlX2luaXQoJmZpcnN0QXJndW1lbnQsIEdfVFlQRV9QT0lOVEVSKTsKICAgICBnX3Zh
bHVlX3NldF9wb2ludGVyKCZmaXJzdEFyZ3VtZW50LCBjbGlwYm9hcmQpOwotICAgIGdfY2xvc3Vy
ZV9pbnZva2UoY2FsbGJhY2suZ2V0KCksIG51bGxwdHIsIDEsICZmaXJzdEFyZ3VtZW50LCAwKTsK
KyAgICBnX2Nsb3N1cmVfaW52b2tlKGRhdGEtPmNhbGxiYWNrLmdldCgpLCBudWxscHRyLCAxLCAm
Zmlyc3RBcmd1bWVudCwgMCk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZEhlbHBlcjo6d3JpdGVDbGlw
Ym9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgU21hcnRQYXN0ZUluY2x1c2lv
biBpbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqIGNhbGxiYWNrKQordm9pZCBQYXN0ZWJvYXJk
SGVscGVyOjp3cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBj
b25zdCBEYXRhT2JqZWN0R3RrJiBkYXRhT2JqZWN0LCBTbWFydFBhc3RlSW5jbHVzaW9uIGluY2x1
ZGVTbWFydFBhc3RlLCBHQ2xvc3VyZSogY2FsbGJhY2spCiB7Ci0gICAgRGF0YU9iamVjdEd0ayog
ZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAg
IEd0a1RhcmdldExpc3QqIGxpc3QgPSB0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0
LCBpbmNsdWRlU21hcnRQYXN0ZSk7CisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0g
dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoZGF0YU9iamVjdCwgaW5jbHVkZVNtYXJ0UGFzdGUpOwog
CiAgICAgaW50IG51bWJlck9mVGFyZ2V0czsKLSAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBn
dGtfdGFyZ2V0X3RhYmxlX25ld19mcm9tX2xpc3QobGlzdCwgJm51bWJlck9mVGFyZ2V0cyk7Cisg
ICAgR3RrVGFyZ2V0RW50cnkqIHRhYmxlID0gZ3RrX3RhcmdldF90YWJsZV9uZXdfZnJvbV9saXN0
KGxpc3QuZ2V0KCksICZudW1iZXJPZlRhcmdldHMpOwogCiAgICAgaWYgKG51bWJlck9mVGFyZ2V0
cyA+IDAgJiYgdGFibGUpIHsKLSAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSBk
YXRhT2JqZWN0OworICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IGNvbnN0X2Nh
c3Q8RGF0YU9iamVjdEd0ayo+KCZkYXRhT2JqZWN0KTsKIAotICAgICAgICBpZiAoZ3RrX2NsaXBi
b2FyZF9zZXRfd2l0aF9kYXRhKGNsaXBib2FyZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywgZ2V0
Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjaywgY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNr
LCBjYWxsYmFjayA/IGdfY2xvc3VyZV9yZWYoY2FsbGJhY2spIDogbnVsbHB0cikpCisgICAgICAg
IGF1dG8gZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2xpcGJvYXJkU2V0RGF0YT4oc2V0dGluZ0Ns
aXBib2FyZERhdGFPYmplY3QsIGNhbGxiYWNrKTsKKyAgICAgICAgaWYgKGd0a19jbGlwYm9hcmRf
c2V0X3dpdGhfZGF0YShjbGlwYm9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMsIGdldENsaXBi
b2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxsYmFjaywgZGF0
YS5nZXQoKSkpIHsKICAgICAgICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X2Nhbl9zdG9yZShjbGlw
Ym9hcmQsIG51bGxwdHIsIDApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdoZW4g
Z3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhIGZhaWxzIHRoZSBjYWxsYmFja3MgYXJlIGlnbm9y
ZWQsIHNvIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIHdlIHdlcmUgcGFzc2luZyB0
byBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2suCi0gICAgICAgICAgICBpZiAoY2FsbGJh
Y2spCi0gICAgICAgICAgICAgICAgZ19jbG9zdXJlX3VucmVmKGNhbGxiYWNrKTsKKyAgICAgICAg
ICAgIC8vIFdoZW4gZ3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhIGZhaWxzIHRoZSBjYWxsYmFj
a3MgYXJlIGlnbm9yZWQsIHNvIHdlIG5lZWQgdG8gbGVhayB0aGUgZGF0YSB3ZSB3ZXJlIHBhc3Np
bmcgdG8gY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLgorICAgICAgICAgICAgZGF0YS5y
ZWxlYXNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVj
dCA9IG51bGxwdHI7Ci0KICAgICB9IGVsc2UKICAgICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihj
bGlwYm9hcmQpOwogCiAgICAgaWYgKHRhYmxlKQogICAgICAgICBndGtfdGFyZ2V0X3RhYmxlX2Zy
ZWUodGFibGUsIG51bWJlck9mVGFyZ2V0cyk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKGxp
c3QpOwogfQogCiBib29sIFBhc3RlYm9hcmRIZWxwZXI6OmNsaXBib2FyZENvbnRlbnRTdXBwb3J0
c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCmluZGV4IDgwZWY5MzcuLmE3ZmE3ZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaApA
QCAtMjUsNiArMjUsNyBAQAogI2lmbmRlZiBQYXN0ZWJvYXJkSGVscGVyX2gKICNkZWZpbmUgUGFz
dGVib2FyZEhlbHBlcl9oCiAKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC00MiwxMiArNDMsMTIgQEAgcHVibGljOgogICAgIGVudW0gU21hcnRQYXN0
ZUluY2x1c2lvbiB7IEluY2x1ZGVTbWFydFBhc3RlLCBEb05vdEluY2x1ZGVTbWFydFBhc3RlIH07
CiAKICAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0KCkgY29uc3Q7Ci0gICAgR3RrVGFyZ2V0
TGlzdCogdGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayosIFNtYXJ0UGFzdGVJ
bmNsdXNpb24gPSBEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKLSAgICB2b2lkIGZpbGxTZWxlY3Rp
b25EYXRhKEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCwgRGF0YU9iamVjdEd0ayopOwotICAgIHZv
aWQgZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50LCBE
YXRhT2JqZWN0R3RrKik7CisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiB0YXJnZXRMaXN0Rm9y
RGF0YU9iamVjdChjb25zdCBEYXRhT2JqZWN0R3RrJiwgU21hcnRQYXN0ZUluY2x1c2lvbiA9IERv
Tm90SW5jbHVkZVNtYXJ0UGFzdGUpOworICAgIHZvaWQgZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2Vs
ZWN0aW9uRGF0YSosIGd1aW50LCBjb25zdCBEYXRhT2JqZWN0R3RrJik7CisgICAgdm9pZCBmaWxs
RGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmpl
Y3RHdGsmKTsKICAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zRm9yQ29udGV4dChHdGtXaWRn
ZXQqLCBHZGtEcmFnQ29udGV4dCopOwotICAgIHZvaWQgd3JpdGVDbGlwYm9hcmRDb250ZW50cyhH
dGtDbGlwYm9hcmQqLCBTbWFydFBhc3RlSW5jbHVzaW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0
ZSwgR0Nsb3N1cmUqID0gMCk7Ci0gICAgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlw
Ym9hcmQqKTsKKyAgICB2b2lkIHdyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiwg
Y29uc3QgRGF0YU9iamVjdEd0ayYsIFNtYXJ0UGFzdGVJbmNsdXNpb24gPSBEb05vdEluY2x1ZGVT
bWFydFBhc3RlLCBHQ2xvc3VyZSogPSAwKTsKKyAgICB2b2lkIGdldENsaXBib2FyZENvbnRlbnRz
KEd0a0NsaXBib2FyZCosIERhdGFPYmplY3RHdGsmKTsKIAogICAgIGVudW0gUGFzdGVib2FyZFRh
cmdldFR5cGUgeyBUYXJnZXRUeXBlTWFya3VwLCBUYXJnZXRUeXBlVGV4dCwgVGFyZ2V0VHlwZUlt
YWdlLCBUYXJnZXRUeXBlVVJJTGlzdCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMLCBUYXJnZXRUeXBl
U21hcnRQYXN0ZSwgVGFyZ2V0VHlwZVVua25vd24gfTsKICAgICBib29sIGNsaXBib2FyZENvbnRl
bnRTdXBwb3J0c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9hcmQqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkNjdl
ZGYyLi44ODVhYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTYtMDktMTMgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IEdldCByaWQgb2YgRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkIGFuZCBjbGVhbnVwIHBhc3Rl
Ym9hcmQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYxOTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlIHRvIERhdGFPYmplY3RHdGsgYW5kIFBhc3RlYm9hcmRIZWxwZXIgQVBJIGNoYW5n
ZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkRyYWdBbmREcm9wSGFuZGxlcjo6c3RhcnREcmFnKToKKyAgICAgICAg
KFdlYktpdDo6RHJhZ0FuZERyb3BIYW5kbGVyOjpmaWxsRHJhZ0RhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpEcmFnQW5kRHJvcEhhbmRsZXI6OmRhdGFPYmplY3RGb3JEcm9wRGF0YSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Y29sbGFwc2VTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnVwZGF0ZUdsb2JhbFNlbGVjdGlvbik6IFJlbW92ZSB3cm9uZyBYMTEgZ3VhcmRz
LCBzaW5jZSB0aGF0IGNvZGUgaXMgbm90IFgxMSBzcGVjaWZpYy4KKwogMjAxNi0wOS0xMiAgREFO
IFNBVU5ERVJTICA8ZGFzYXVAbWljcm9zb2Z0LmNvbT4KIAogICAgICAgICBBWDogV0tXZWJWaWV3
IGZvciBtYWNPUyBkb2VzIG5vdCBhbGxvdyBjb25maWd1cmF0aW9uIG9mIHRhYnNUb0xpbmtzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5j
cHAKaW5kZXggODQyM2VkNy4uMTZkYmE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcApAQCAtMTE1LDEwICsxMTUsMTAgQEAg
dm9pZCBEcmFnQW5kRHJvcEhhbmRsZXI6OnN0YXJ0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEsIFBhc3NSZWZQdHI8U2hhcmVhYmwKIHsKICNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxNiwg
MCkKICAgICBtX2RyYWdnaW5nRGF0YU9iamVjdCA9IGFkb3B0UmVmKGRyYWdEYXRhLnBsYXRmb3Jt
RGF0YSgpKTsKLSAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3QgPSBhZG9wdEdS
ZWYoUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkudGFyZ2V0TGlzdEZvckRhdGFPYmplY3Qo
bV9kcmFnZ2luZ0RhdGFPYmplY3QuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+
IHRhcmdldExpc3QgPSBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS50YXJnZXRMaXN0Rm9y
RGF0YU9iamVjdCgqbV9kcmFnZ2luZ0RhdGFPYmplY3QpOwogI2Vsc2UKICAgICBSZWZQdHI8RGF0
YU9iamVjdEd0az4gZGF0YU9iamVjdCA9IGFkb3B0UmVmKGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgp
KTsKLSAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3QgPSBhZG9wdEdSZWYoUGFz
dGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkudGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoZGF0YU9i
amVjdC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0TGlzdCA9IFBh
c3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLnRhcmdldExpc3RGb3JEYXRhT2JqZWN0KCpkYXRh
T2JqZWN0KTsKICNlbmRpZgogCiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50
KGd0a19nZXRfY3VycmVudF9ldmVudCgpKTsKQEAgLTE1NiwxMCArMTU2LDEwIEBAIHZvaWQgRHJh
Z0FuZERyb3BIYW5kbGVyOjpmaWxsRHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0
a1NlbGVjdGlvbkRhdGEqCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX2RyYWdnaW5n
RGF0YU9iamVjdCk7Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZmlsbFNlbGVj
dGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgbV9kcmFnZ2luZ0RhdGFPYmplY3QuZ2V0KCkp
OworICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmZpbGxTZWxlY3Rpb25EYXRhKHNl
bGVjdGlvbkRhdGEsIGluZm8sICptX2RyYWdnaW5nRGF0YU9iamVjdCk7CiAjZWxzZQogICAgIGlm
IChEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmdldChj
b250ZXh0KSkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZmlsbFNlbGVj
dGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZGF0YU9iamVjdCk7CisgICAgICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEs
IGluZm8sICpkYXRhT2JqZWN0KTsKICNlbmRpZgogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAgRGF0
YU9iamVjdEd0ayogRHJhZ0FuZERyb3BIYW5kbGVyOjpkYXRhT2JqZWN0Rm9yRHJvcERhdGEoR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBkcm9w
cGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsKLSAgICBQYXN0ZWJvYXJkSGVscGVy
OjpzaW5nbGV0b24oKS5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBp
bmZvLCBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOworICAgIFBhc3RlYm9hcmRI
ZWxwZXI6OnNpbmdsZXRvbigpLmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRh
dGEsIGluZm8sICpkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QpOwogICAgIGlmIChkcm9wcGlu
Z0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJEcmFnQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCmluZGV4IGE4M2MxYTguLjVkYWIwYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkRyYWdDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCkBAIC02NSw4ICs2NSw4IEBAIHZv
aWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0
IEludFBvaW50JiBjbGllbnRQb3NpCiAgICAgaWYgKGJpdG1hcCAmJiAhYml0bWFwLT5jcmVhdGVI
YW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPERhdGFPYmplY3RH
dGs+IGRhdGFPYmplY3QgPSBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsK
LSAgICBEcmFnRGF0YSBkcmFnRGF0YShkYXRhT2JqZWN0LmdldCgpLCBjbGllbnRQb3NpdGlvbiwg
Z2xvYmFsUG9zaXRpb24sIGRhdGFUcmFuc2Zlci5zb3VyY2VPcGVyYXRpb24oKSk7CisgICAgY29u
c3QgYXV0byYgZGF0YU9iamVjdCA9IGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkuZGF0YU9iamVj
dCgpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGNvbnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KCZk
YXRhT2JqZWN0KSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBkYXRhVHJhbnNmZXIu
c291cmNlT3BlcmF0aW9uKCkpOwogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpTdGFydERyYWcoZHJhZ0RhdGEsIGhhbmRsZSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRH
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2Vi
RWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCBkMTg3OTJkLi41MTEwMDI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGll
bnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTExOSw3ICsxMTksNiBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50
KQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotI2lmIFBMQVRGT1JN
KFgxMSkKIGNsYXNzIEVkaXRvckNsaWVudEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlciA6IEZyYW1l
RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgRWRpdG9yQ2xpZW50RnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyKEZyYW1lKiBmcmFtZSwgR0Nsb3N1cmUqIGNsb3N1cmUpCkBAIC0xNTgs
MTEgKzE1Nyw5IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlU2VsZWN0aW9uKEd0a0NsaXBib2FyZCos
IEZyYW1lKiBmcmFtZSkKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNl
dEJhc2Uoc2VsZWN0aW9uLmV4dGVudCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiB9Ci0jZW5k
aWYKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZUdsb2JhbFNlbGVjdGlvbihGcmFtZSog
ZnJhbWUpCiB7Ci0jaWYgUExBVEZPUk0oWDExKQogICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTE4NCw3ICsxODEsNiBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlR2xvYmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFt
ZSkKICAgICBwYXN0ZWJvYXJkQ29udGVudC5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgIFBhc3Rl
Ym9hcmQ6OmNyZWF0ZUZvckdsb2JhbFNlbGVjdGlvbigpLT53cml0ZShwYXN0ZWJvYXJkQ29udGVu
dCk7CiAgICAgZnJhbWVTZXR0aW5nQ2xpcGJvYXJkID0gbnVsbHB0cjsKLSNlbmRpZgogfQogCiBi
b29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkU2hvd1VuaWNvZGVNZW51KCkK
</data>
<flag name="review"
          id="311987"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>