<?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>99697</bug_id>
          
          <creation_ts>2012-10-18 01:29:46 -0700</creation_ts>
          <short_desc>[EFL][WK2] Make Ewk_Download_Job members private and remove private C functions</short_desc>
          <delta_ts>2012-10-21 03:37:02 -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>WebKit EFL</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>
          
          <blocked>99696</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>745078</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 01:29:46 -0700</bug_when>
    <thetext>As part of Bug 99696, this bug is for using pimpl idiom for Ewk_Download_Job class and serve as example for the proposed approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745082</commentid>
    <comment_count>1</comment_count>
      <attachid>169367</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 01:42:24 -0700</bug_when>
    <thetext>Created attachment 169367
Patch

I&apos;ll send a mail to the webkit-efl mailing list to announce / explain the proposal but I think it is nice to have a patch to show how the result looks like.

Thanks to Mikhail for brainstorming with me on this proposal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745084</commentid>
    <comment_count>2</comment_count>
      <attachid>169367</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-18 01:46:48 -0700</bug_when>
    <thetext>Comment on attachment 169367
Patch

Look how nice it is now! informal r+ from me off course :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745102</commentid>
    <comment_count>3</comment_count>
      <attachid>169367</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-18 02:30:09 -0700</bug_when>
    <thetext>Comment on attachment 169367
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp:47
&gt; +    uint64_t downloaded; /**&lt; length already downloaded */

why not just use C++ comments

&gt; Source/WebKit2/UIProcess/API/efl/ewk_private.h:45
&gt; +// Macros used for Pimpl idiom.
&gt; +#define EWK_DECLARE_DATA(ClassName) struct Data; OwnPtr&lt;Data&gt; d
&gt; +#define EWK_D(ClassName, obj) ClassName::Data* d = obj-&gt;d.get()

Qt allows to get the owner as well, (d upside down, ie. q) :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745107</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 02:48:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 169367 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169367&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp:47
&gt; &gt; +    uint64_t downloaded; /**&lt; length already downloaded */
&gt; 
&gt; why not just use C++ comments

I&apos;ll fix this, thanks.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_private.h:45
&gt; &gt; +// Macros used for Pimpl idiom.
&gt; &gt; +#define EWK_DECLARE_DATA(ClassName) struct Data; OwnPtr&lt;Data&gt; d
&gt; &gt; +#define EWK_D(ClassName, obj) ClassName::Data* d = obj-&gt;d.get()
&gt; 
&gt; Qt allows to get the owner as well, (d upside down, ie. q) :-)

We don&apos;t really need to get the owner in our case. Unlike with Qt, our private implementation is a simple POD struct so it does not need to get its owner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745109</commentid>
    <comment_count>5</comment_count>
      <attachid>169377</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 02:49:26 -0700</bug_when>
    <thetext>Created attachment 169377
Patch

Fix remaining C-style comment. Not setting cq flag yet as I&apos;m waiting for a bit more feedback on the mailing list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745119</commentid>
    <comment_count>6</comment_count>
      <attachid>169380</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 03:10:05 -0700</bug_when>
    <thetext>Created attachment 169380
Patch for landing

Use WTF_MAKE_NONCOPYABLE macro for Ewk_Download_Job to make sure no one ever tries to copy it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745173</commentid>
    <comment_count>7</comment_count>
      <attachid>169395</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 05:15:18 -0700</bug_when>
    <thetext>Created attachment 169395
Patch

Mikhail and I made another iteration of the patch so we are requesting r? again.

The improvement is that the pimpl data pointer is now private (it used to be public). The drawback is that we need an additional EWK_DECLARE_DATA_OWNER() macro for the Data type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745205</commentid>
    <comment_count>8</comment_count>
      <attachid>169402</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 06:25:47 -0700</bug_when>
    <thetext>Created attachment 169402
Patch

use
const OwnPtr&lt;struct Download_Job_Data&gt; d;
instead of
OwnPtr&lt;struct Download_Job_Data&gt; d;

just to be safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745320</commentid>
    <comment_count>9</comment_count>
      <attachid>169425</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 09:19:36 -0700</bug_when>
    <thetext>Created attachment 169425
Pimpl alternative</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745331</commentid>
    <comment_count>10</comment_count>
      <attachid>169425</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-18 09:51:05 -0700</bug_when>
    <thetext>Comment on attachment 169425
Pimpl alternative

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

I&apos;ve been doing the same patch :) this approach looks more attractive to me

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h:51
&gt; +    uint64_t id() const;

I would put the body of simple getters right here in header file

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h:58
&gt; +    Ewk_Url_Response* response() const;

the two methods above are not const I guess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745336</commentid>
    <comment_count>11</comment_count>
      <attachid>169425</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 09:55:09 -0700</bug_when>
    <thetext>Comment on attachment 169425
Pimpl alternative

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h:51
&gt;&gt; +    uint64_t id() const;
&gt; 
&gt; I would put the body of simple getters right here in header file

I guess it is a matter of taste. I&apos;m trying to keep the headers as small as possible to reduce compile time.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h:58
&gt;&gt; +    Ewk_Url_Response* response() const;
&gt; 
&gt; the two methods above are not const I guess

Well, I did that at first but then you have to const_cast in the C functions :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745374</commentid>
    <comment_count>12</comment_count>
      <attachid>169436</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-18 10:50:50 -0700</bug_when>
    <thetext>Created attachment 169436
Pimpl alternative

Add changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746129</commentid>
    <comment_count>13</comment_count>
      <attachid>169425</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-19 01:41:34 -0700</bug_when>
    <thetext>Comment on attachment 169425
Pimpl alternative

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp:63
&gt; +    String destination = String(&quot;file://&quot;) + String::fromUTF8(download-&gt;destination());

ASCIIString pls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746131</commentid>
    <comment_count>14</comment_count>
      <attachid>169402</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-19 01:44:40 -0700</bug_when>
    <thetext>Comment on attachment 169402
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_private.h:44
&gt; +#define EWK_DECLARE_DATA(ClassName) const OwnPtr&lt;struct ClassName##_Data&gt; d; friend struct ClassName##_Data

Why _Data now instead of ::Data? pro/cons? Also isn&apos;t Private a more descriptive name? ie. it makes it clear how it should be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746146</commentid>
    <comment_count>15</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-19 02:09:54 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 169402 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169402&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_private.h:44
&gt; &gt; +#define EWK_DECLARE_DATA(ClassName) const OwnPtr&lt;struct ClassName##_Data&gt; d; friend struct ClassName##_Data
&gt; 
&gt; Why _Data now instead of ::Data? pro/cons? 

Private nested type is inaccessible from C API functions, that&apos;s why we had to make it like this.. 
In Qt by the way they also do not use nested types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746169</commentid>
    <comment_count>16</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-19 02:45:27 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 169402 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169402&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_private.h:44
&gt; &gt; &gt; +#define EWK_DECLARE_DATA(ClassName) const OwnPtr&lt;struct ClassName##_Data&gt; d; friend struct ClassName##_Data
&gt; &gt; 
&gt; &gt; Why _Data now instead of ::Data? pro/cons? 
&gt; 
&gt; Private nested type is inaccessible from C API functions, that&apos;s why we had to make it like this.. 
&gt; In Qt by the way they also do not use nested types.

BTW, do you prefer pimpl approach? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746189</commentid>
    <comment_count>17</comment_count>
      <attachid>169588</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-19 03:32:43 -0700</bug_when>
    <thetext>Created attachment 169588
Pimpl

Take Kenneth feedback into consideration for Pimpl patch:
- Rename private struct to _Private instead of _Data
- Rename macros to EWK_DECLARE_PRIVATE() / EWK_DECLARE_PUBLIC()
- Use AsciiLiteral()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746193</commentid>
    <comment_count>18</comment_count>
      <attachid>169590</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-19 03:36:20 -0700</bug_when>
    <thetext>Created attachment 169590
Pimpl alternative

Take Kenneth feedback into consideration for alternative to Pimpl:
- Use AsciiLiteral()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746245</commentid>
    <comment_count>19</comment_count>
      <attachid>169588</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-19 05:52:12 -0700</bug_when>
    <thetext>Comment on attachment 169588
Pimpl

Obsoleting the pimpl patch based on the mailing list discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747072</commentid>
    <comment_count>20</comment_count>
      <attachid>169590</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-21 03:36:56 -0700</bug_when>
    <thetext>Comment on attachment 169590
Pimpl alternative

Clearing flags on attachment: 169590

Committed r132000: &lt;http://trac.webkit.org/changeset/132000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747073</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-21 03:37:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169367</attachid>
            <date>2012-10-18 01:42:24 -0700</date>
            <delta_ts>2012-10-18 02:49:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>99697_ewk_download_pimpl.patch</filename>
            <type>text/plain</type>
            <size>22150</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiY2QzMTQ0Li4xZWUzMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMTAtMTggIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFVzZSBwaW1wbCBpZGlvbSBmb3IgRXdrX0Rvd25s
b2FkX0pvYgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTk2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgcGltcGwgaWRpb20gaW4gRXdrX0Rvd25sb2FkX0pvYiBzbyB0aGF0IHRoZQorICAgICAgICBj
bGFzcyBtZW1iZXJzIGFyZSBub3cgaW4gYSBQT0Qgc3RydWN0IGluIHRoZSBjcHAKKyAgICAgICAg
ZmlsZS4gVGhpcyB3YXksIHRob3NlIG1lbWJlcnMgY2Fubm90IGJlIGFsdGVyZWQKKyAgICAgICAg
ZnJvbSBvdXRzaWRlIEV3a19Eb3dubG9hZF9Kb2IgYnV0IHRoZSBwdWJsaWMgQworICAgICAgICBB
UEkgY2FuIHN0aWxsIGFjY2VzcyB0aG9zZSBtZW1iZXJzIGRpcmVjdGx5CisgICAgICAgIHdpdGhv
dXQgdXNpbmcgY2xhc3MgZ2V0dGVycyBvciBzZXR0ZXJzLgorCisgICAgICAgIEMgZnVuY3Rpb25z
IGluIHRoZSBwcml2YXRlIGhlYWRlciBhbmQgbm93IHJlcGxhY2VkCisgICAgICAgIGJ5IEMrKyBt
ZXRob2RzIGluIEV3a19Eb3dubG9hZF9Kb2IgY2xhc3Mgc28gdGhhdAorICAgICAgICB3ZSBjYW4g
dXNlIEMrKyBzdHlsZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIFdlYktpdDIKKyAgICAgICAgRUZM
IGltcGxlbWVudGF0aW9uIGNvZGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdl
Q2xpZW50SW1wbC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwOgorICAgICAgICAoZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2FkZCk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcDoKKyAgICAg
ICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAgKGRp
ZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChkaWRDcmVhdGVEZXN0aW5hdGlvbik6CisgICAg
ICAgIChkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChkaWRGYWlsKToKKyAgICAgICAgKGRpZENh
bmNlbCk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZF9qb2IuY3BwOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6RGF0YSk6
CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKEV3a19E
b3dubG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pv
Yjo6fkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6aWQpOgor
ICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6dmlldyk6CisgICAgICAgIChld2tfZG93bmxvYWRf
am9iX3N0YXRlX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3JlcXVlc3RfZ2V0KToK
KyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAgKGV3a19k
b3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jf
ZGVzdGluYXRpb25fc2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2Zp
bGVuYW1lX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2NhbmNlbCk6CisgICAgICAg
IChld2tfZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQpOgorICAgICAgICAoZXdr
X2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9K
b2I6OmRlc3RpbmF0aW9uKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnNldFJlc3BvbnNl
KToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKToKKyAg
ICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmluY3JlbWVudFJlY2VpdmVkRGF0YSk6CisgICAgICAg
IChFd2tfRG93bmxvYWRfSm9iOjpzZXRTdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Rvd25sb2FkX2pvYi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19k
b3dubG9hZF9qb2JfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYik6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaDoKKwogMjAxMi0xMC0xOCAgQnl1
bmd3b28gTGVlICA8Ync4MC5sZWVAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW1dLMl0gVXBkYXRl
IHRlc3QgZXhwZWN0YXRpb24gZm9yIHRoZSBweXRob24gbWVzc2FnZSB0ZXN0IGFmdGVyIHIxMzE3
MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGll
bnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJ
bXBsLmNwcAppbmRleCAwY2E3NTY5Li5lNmRiYWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0zNyw3ICszNyw2IEBA
CiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgog
I2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZG93bmxvYWRf
am9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSAi
ZXdrX3ZpZXcuaCIKICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggYjc2MTdkYS4u
ZGNhZGI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZh
dGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50X3ByaXZh
dGUuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0ZS5oIgotI2luY2x1ZGUg
ImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iX3ByaXZhdGUu
aCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAi
ZXdrX3ByaXZhdGUuaCIKQEAgLTIwNSw3ICsyMDQsNyBAQCB2b2lkIGV3a19jb250ZXh0X2Rvd25s
b2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19Eb3dubG9hZF9Kb2IqIGV3
awogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25sb2FkKTsKIAotICAgIHVpbnQ2NF90IGRvd25s
b2FkSWQgPSBld2tfZG93bmxvYWRfam9iX2lkX2dldChld2tEb3dubG9hZCk7CisgICAgdWludDY0
X3QgZG93bmxvYWRJZCA9IGV3a0Rvd25sb2FkLT5pZCgpOwogICAgIGlmIChld2tDb250ZXh0LT5k
b3dubG9hZEpvYnMuY29udGFpbnMoZG93bmxvYWRJZCkpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93
bmxvYWRfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKaW5kZXggMDg4YmQ2YS4uNTU3MzMxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAi
V0tTdHJpbmcuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZG93
bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5j
bHVkZSAiZXdrX2Vycm9yX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgi
CkBAIC01MywxNCArNTIsMTQgQEAgc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG8KICAgICBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAg
ICAgQVNTRVJUKGRvd25sb2FkKTsKIAotICAgIGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2Zp
bGVuYW1lX3NldChkb3dubG9hZCwgdG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgZG93bmxvYWQtPnNldFN1Z2dlc3RlZEZpbGVOYW1lKHRvSW1wbChmaWxlbmFt
ZSktPnN0cmluZygpKTsKIAogICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBkb3dubG9hZCBzaWduYWwg
b24gdGhlIEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVkIHRoZSByZXNwb25zZQog
ICAgIC8vIGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4KLSAgICBld2tfdmlld19kb3dubG9h
ZF9qb2JfcmVxdWVzdGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93bmxvYWQpLCBkb3du
bG9hZCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX3JlcXVlc3RlZChkb3dubG9hZC0+dmll
dygpLCBkb3dubG9hZCk7CiAKICAgICAvLyBEb3dubG9hZFNvdXAgZXhwZWN0cyB0aGUgZGVzdGlu
YXRpb24gdG8gYmUgYSBVUkwuCi0gICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gU3RyaW5nKCJmaWxl
Oi8vIikgKyBTdHJpbmc6OmZyb21VVEY4KGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0
KGRvd25sb2FkKSk7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gU3RyaW5nKCJmaWxlOi8vIikg
KyBkb3dubG9hZC0+ZGVzdGluYXRpb24oKTsKIAogICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTY5LDcgKzY4
LDcgQEAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3du
bG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VSTFJlc3AKIHsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBk
b3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVu
dEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAgICAgQVNTRVJUKGRv
d25sb2FkKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChkb3dubG9hZCwgRXdr
X1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsKKyAgICBkb3dubG9hZC0+c2V0UmVz
cG9uc2UoRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsKIH0KIAogc3RhdGlj
IHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdr
RG93bmxvYWQsIFdLU3RyaW5nUmVmIC8qcGF0aCovLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpA
QCAtNzcsNDcgKzc2LDQ5IEBAIHN0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29u
dGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluCiAgICAgRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29u
dGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAg
IEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3du
bG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORyk7CisgICAgZG93bmxvYWQt
PnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpOwogfQogCiBzdGF0
aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIEV3
a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0
b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgp
KTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIGV3a19kb3dubG9hZF9qb2JfcmVjZWl2ZWRf
ZGF0YShkb3dubG9hZCwgbGVuZ3RoKTsKKyAgICBkb3dubG9hZC0+aW5jcmVtZW50UmVjZWl2ZWRE
YXRhKGxlbmd0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pCitzdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3
a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewog
ICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQo
KTsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2Fk
X2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKICAgICBBU1NF
UlQoZG93bmxvYWQpOwogCisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0Jf
U1RBVEVfRkFJTEVEKTsKKwogICAgIE93blB0cjxFd2tfRXJyb3I+IGV3a0Vycm9yID0gRXdrX0Vy
cm9yOjpjcmVhdGUoZXJyb3IpOwotICAgIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVfc2V0KGRvd25s
b2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7Ci0gICAgZXdrX3ZpZXdfZG93bmxv
YWRfam9iX2ZhaWxlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25sb2FkKSwgZG93bmxv
YWQsIGV3a0Vycm9yLmdldCgpKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmFpbGVkKGRv
d25sb2FkLT52aWV3KCksIGRvd25sb2FkLCBld2tFcnJvci5nZXQoKSk7CiAgICAgZXdrX2NvbnRl
eHRfZG93bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2Fk
SWQpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2Fk
UmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9pZCBkaWRD
YW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25s
b2FkKS0+ZG93bmxvYWRJRCgpOwogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdr
X2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25s
b2FkSWQpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0
YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQpOwotICAg
IGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5jZWxsZWQoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dl
dChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9DQU5DRUxMRUQpOworCisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2Nh
bmNlbGxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAgICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOwog
fQogCi1zdGF0aWMgdm9pZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdr
RG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9pZCBkaWRGaW5pc2go
V0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+
ZG93bmxvYWRJRCgpOwogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRl
eHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQp
OwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3Nl
dChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7Ci0gICAgZXdrX3Zp
ZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93bmxv
YWQpLCBkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0Jf
U1RBVEVfRklOSVNIRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9maW5pc2hlZChkb3du
bG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAgICAgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX3Jl
bW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3Bw
CmluZGV4IDQ2YTE5OGQuLjQyN2JkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCkBAIC0zMiw5ICszMiw0MCBAQAog
I2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iX3By
aXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RydWN0IEV3a19Eb3dubG9hZF9Kb2I6
OkRhdGEgeworICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHk7CisgICAgRXZhc19PYmpl
Y3QqIHZpZXc7CisgICAgRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBzdGF0ZTsKKyAgICBSZWZQdHI8
RXdrX1VybF9SZXF1ZXN0PiByZXF1ZXN0OworICAgIFJlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiBy
ZXNwb25zZTsKKyAgICBkb3VibGUgc3RhcnRUaW1lOworICAgIGRvdWJsZSBlbmRUaW1lOworICAg
IHVpbnQ2NF90IGRvd25sb2FkZWQ7IC8qKjwgbGVuZ3RoIGFscmVhZHkgZG93bmxvYWRlZCAqLwor
ICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvbjsKKyAgICBXS0VpbmFTaGFyZWRTdHJp
bmcgc3VnZ2VzdGVkRmlsZW5hbWU7CisKKyAgICBEYXRhKERvd25sb2FkUHJveHkqIGRvd25sb2Fk
LCBFdmFzX09iamVjdCogZXdrVmlldykKKyAgICAgICAgOiBkb3dubG9hZFByb3h5KGRvd25sb2Fk
KQorICAgICAgICAsIHZpZXcoZXdrVmlldykKKyAgICAgICAgLCBzdGF0ZShFV0tfRE9XTkxPQURf
Sk9CX1NUQVRFX05PVF9TVEFSVEVEKQorICAgICAgICAsIHN0YXJ0VGltZSgtMSkKKyAgICAgICAg
LCBlbmRUaW1lKC0xKQorICAgICAgICAsIGRvd25sb2FkZWQoMCkKKyAgICB7IH0KK307CisKK0V3
a19Eb3dubG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBk
b3dubG9hZCwgRXZhc19PYmplY3QqIHZpZXcpCisgICAgOiBkKGFkb3B0UHRyKG5ldyBEYXRhKGRv
d25sb2FkLCB2aWV3KSkpCit7IH0KKworRXdrX0Rvd25sb2FkX0pvYjo6fkV3a19Eb3dubG9hZF9K
b2IoKQoreworfQorCiBFd2tfRG93bmxvYWRfSm9iKiBld2tfZG93bmxvYWRfam9iX3JlZihFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZG93bmxvYWQsIDApOwpAQCAtNTUsMTIgKzg2LDkgQEAgdm9pZCBld2tfZG93bmxvYWRf
am9iX3VucmVmKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogICogQGludGVybmFsCiAgKiBR
dWVyaWVzIHRoZSBpZGVudGlmaWVyIGZvciB0aGlzIGRvd25sb2FkCiAgKi8KLXVpbnQ2NF90IGV3
a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQor
dWludDY0X3QgRXdrX0Rvd25sb2FkX0pvYjo6aWQoKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCAwKTsKLQotICAgIHJldHVybiBk
b3dubG9hZC0+ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOworICAgIHJldHVybiBkLT5kb3du
bG9hZFByb3h5LT5kb3dubG9hZElEKCk7CiB9CiAKIC8qKgpAQCAtNjgsNTMgKzk2LDU2IEBAIHVp
bnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkKQogICogUmV0dXJucyB0aGUgdmlldyB0aGlzIGRvd25sb2FkIGlzIGF0dGFjaGVkIHRv
LgogICogVGhlIHZpZXcgaXMgbmVlZGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIHNpZ25hbHMuCiAg
Ki8KLUV2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3du
bG9hZF9Kb2IqIGRvd25sb2FkKQorRXZhc19PYmplY3QqIEV3a19Eb3dubG9hZF9Kb2I6OnZpZXco
KSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwg
MCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQtPnZpZXc7CisgICAgcmV0dXJuIGQtPnZpZXc7CiB9
CiAKIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9nZXQoY29u
c3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX1VOS05PV04pOwor
ICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3du
bG9hZC0+c3RhdGU7CisgICAgcmV0dXJuIGQtPnN0YXRlOwogfQogCiBFd2tfVXJsX1JlcXVlc3Qq
IGV3a19kb3dubG9hZF9qb2JfcmVxdWVzdF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAw
KTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICBpZiAoIWRv
d25sb2FkLT5yZXF1ZXN0KSB7Ci0gICAgICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVxdWVzdFJlZj4gd2tVUkxSZXF1ZXN0KEFkb3B0V0ssIHRvQVBJKFdlYlVSTFJlcXVlc3Q6OmNy
ZWF0ZShkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKLSAg
ICAgICAgY29uc3RfY2FzdDxFd2tfRG93bmxvYWRfSm9iKj4oZG93bmxvYWQpLT5yZXF1ZXN0ID0g
RXdrX1VybF9SZXF1ZXN0OjpjcmVhdGUod2tVUkxSZXF1ZXN0LmdldCgpKTsKKyAgICBpZiAoIWQt
PnJlcXVlc3QpIHsKKyAgICAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGQtPmRv
d25sb2FkUHJveHksIDApOworICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlcXVlc3RSZWY+IHdr
VVJMUmVxdWVzdChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0OjpjcmVhdGUoZC0+ZG93bmxv
YWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKKyAgICAgICAgZC0+cmVxdWVzdCA9IEV3
a19VcmxfUmVxdWVzdDo6Y3JlYXRlKHdrVVJMUmVxdWVzdC5nZXQoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIGRvd25sb2FkLT5yZXF1ZXN0LmdldCgpOworICAgIHJldHVybiBkLT5yZXF1ZXN0Lmdl
dCgpOwogfQogCiBFd2tfVXJsX1Jlc3BvbnNlKiBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX2dl
dChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9K
b2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+cmVzcG9uc2UuZ2V0KCk7Cisg
ICAgcmV0dXJuIGQtPnJlc3BvbnNlLmdldCgpOwogfQogCiBjb25zdCBjaGFyKiBld2tfZG93bmxv
YWRfam9iX2Rlc3RpbmF0aW9uX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkK
IHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAg
IEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9h
ZC0+ZGVzdGluYXRpb247CisgICAgcmV0dXJuIGQtPmRlc3RpbmF0aW9uOwogfQogCiBFaW5hX0Jv
b2wgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQogewogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChkZXN0aW5hdGlvbiwgZmFsc2UpOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9K
b2IsIGRvd25sb2FkKTsKIAotICAgIGRvd25sb2FkLT5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9u
OworICAgIGQtPmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTEyMiwxMDMgKzE1MywxMTIgQEAgRWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVz
dGluYXRpb25fc2V0KEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkLCBjb25zdCBjaGEKIGNvbnN0
IGNoYXIgKmV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChjb25zdCBFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2Fk
KTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgcmV0dXJu
IGQtPnN1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2pvYl9j
YW5jZWwoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCBmYWxzZSk7CisgICAgRVdLX0Qo
RXdrX0Rvd25sb2FkX0pvYiwgZG93bmxvYWQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChkLT5kb3dubG9hZFByb3h5LCBmYWxzZSk7CiAKLSAgICBpZiAoZG93bmxvYWQtPnN0
YXRlICE9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpCisgICAgaWYgKGQtPnN0
YXRlICE9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGRvd25sb2FkLT5zdGF0ZSA9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVf
Q0FOQ0VMTElORzsKLSAgICBkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+Y2FuY2VsKCk7CisgICAg
ZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkc7CisgICAgZC0+ZG93
bmxvYWRQcm94eS0+Y2FuY2VsKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGRvdWJsZSBld2tf
ZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pv
YiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25s
b2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICBp
ZiAoIWRvd25sb2FkLT5yZXNwb25zZSkKKyAgICBpZiAoIWQtPnJlc3BvbnNlKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191
cmxfcmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGRvd25sb2FkLT5yZXNwb25zZS5nZXQoKSk7
CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyBjb250ZW50TGVuZ3RoID0gZXdrX3VybF9yZXNwb25z
ZV9jb250ZW50X2xlbmd0aF9nZXQoZC0+cmVzcG9uc2UuZ2V0KCkpOwogICAgIGlmICghY29udGVu
dExlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
YmxlPihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxkb3VibGU+KGQtPmRvd25sb2FkZWQpIC8gY29udGVudExlbmd0aDsKIH0KIAog
ZG91YmxlIGV3a19kb3dubG9hZF9qb2JfZWxhcHNlZF90aW1lX2dldChjb25zdCBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAog
ICAgIC8vIERvd25sb2FkIGhhcyBub3Qgc3RhcnRlZCB5ZXQuCi0gICAgaWYgKGRvd25sb2FkLT5z
dGFydFRpbWUgPCAwKQorICAgIGlmIChkLT5zdGFydFRpbWUgPCAwKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIC8vIERvd25sb2FkIGhhZCBlbmRlZCwgcmV0dXJuIHRoZSB0aW1lIGVsYXBzZWQg
YmV0d2VlbiB0aGUKICAgICAvLyBkb3dubG9hZCBzdGFydCBhbmQgdGhlIGVuZCBldmVudC4KLSAg
ICBpZiAoZG93bmxvYWQtPmVuZFRpbWUgPj0gMCkKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkLT5l
bmRUaW1lIC0gZG93bmxvYWQtPnN0YXJ0VGltZTsKKyAgICBpZiAoZC0+ZW5kVGltZSA+PSAwKQor
ICAgICAgICByZXR1cm4gZC0+ZW5kVGltZSAtIGQtPnN0YXJ0VGltZTsKIAogICAgIC8vIERvd25s
b2FkIGlzIHN0aWxsIGdvaW5nLgotICAgIHJldHVybiBlY29yZV90aW1lX2dldCgpIC0gZG93bmxv
YWQtPnN0YXJ0VGltZTsKKyAgICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAtIGQtPnN0YXJ0VGlt
ZTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFNldHMgdGhlIFVSTCBAYSByZXNwb25zZSBm
b3IgdGhpcyBAYSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNl
X3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3Bv
bnNlPiByZXNwb25zZSkKK1N0cmluZyBFd2tfRG93bmxvYWRfSm9iOjpkZXN0aW5hdGlvbigpIGNv
bnN0CiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHJlc3BvbnNlKTsKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChkLT5kZXN0aW5hdGlvbik7Cit9CiAKLSAgICBkb3dubG9hZC0+cmVzcG9uc2UgPSBy
ZXNwb25zZTsKKy8qKgorICogQGludGVybmFsCisgKiBTZXRzIHRoZSBVUkwgQGEgcmVzcG9uc2Ug
Zm9yIHRoaXMgQGEgZG93bmxvYWQuCisgKi8KK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6c2V0UmVz
cG9uc2UoUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZSkKK3sKKyAgICBkLT5y
ZXNwb25zZSA9IHJlc3BvbnNlOwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogU2V0cyB0aGUg
c3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBAYSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tf
ZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQsIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQordm9pZCBFd2tfRG93bmxvYWRf
Sm9iOjpzZXRTdWdnZXN0ZWRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKLQotICAgIGRv
d25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworICAgIGQtPnN1
Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUudXRmOCgpLmRhdGEoKTsKIH0KIAog
LyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydCBhIGdpdmVuIGFtb3VudCBvZiBkYXRhIHdhcyBy
ZWNlaXZlZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rv
d25sb2FkX0pvYiogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkKK3ZvaWQgRXdrX0Rvd25sb2Fk
X0pvYjo6aW5jcmVtZW50UmVjZWl2ZWREYXRhKHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7Ci0KLSAgICBkb3dubG9hZC0+ZG93bmxv
YWRlZCArPSBsZW5ndGg7CisgICAgZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7CiB9CiAKIC8qKgog
ICogQGludGVybmFsCiAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZG93bmxvYWQuCiAgKi8KLXZv
aWQgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQs
IEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGUpCit2b2lkIEV3a19Eb3dubG9hZF9Kb2I6OnNl
dFN0YXRlKEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGUpCiB7Ci0gICAgZG93bmxvYWQtPnN0
YXRlID0gc3RhdGU7Ci0KLSAgICAvLyBVcGRhdGUgc3RhcnQgdGltZSBpZiB0aGUgZG93bmxvYWQg
aGFzIHN0YXJ0ZWQKLSAgICBpZiAoc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dO
TE9BRElORykKLSAgICAgICAgZG93bmxvYWQtPnN0YXJ0VGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7
Ci0KLSAgICAvLyBVcGRhdGUgZW5kIHRpbWUgaWYgdGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZCAo
c3VjY2Vzc2Z1bGx5IG9yIG5vdCkKLSAgICBpZiAoc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9T
VEFURV9GQUlMRUQKLSAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9D
QU5DRUxMRUQKLSAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5J
U0hFRCkKLSAgICAgICAgZG93bmxvYWQtPmVuZFRpbWUgPSBlY29yZV90aW1lX2dldCgpOworICAg
IGQtPnN0YXRlID0gc3RhdGU7CisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBFV0tf
RE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HOgorICAgICAgICBkLT5zdGFydFRpbWUgPSBl
Y29yZV90aW1lX2dldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19ET1dOTE9BRF9K
T0JfU1RBVEVfRkFJTEVEOgorICAgIGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxM
RUQ6CisgICAgY2FzZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEOgorICAgICAgICBk
LT5lbmRUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oCmluZGV4IDBjYWQ1YzIuLjE1NmYyOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9h
ZF9qb2IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxv
YWRfam9iLmgKQEAgLTQzLDcgKzQzLDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLS8qKiBD
cmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfRG93bmxvYWRfSm9iX0pvYiAqLworLyoqIENyZWF0
ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19Eb3dubG9hZF9Kb2IgKi8KIHR5cGVkZWYgc3RydWN0IEV3
a19Eb3dubG9hZF9Kb2IgRXdrX0Rvd25sb2FkX0pvYjsKIAogLy8vIERlZmluZXMgdGhlIHBvc3Np
YmxlIHN0YXRlcyBvZiBhIGRvd25sb2FkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaAppbmRleCA1ZmFj
NDdkLi4zYjkyYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaApAQCAtMjgsNiArMjgsOCBAQAog
CiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisj
aW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYi5oIgorI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jl
c3BvbnNlX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFdmFzLmg+CkBAIC0zNyw0NiArMzksMjcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5OwogfQogCi0vKioKLSAqIFxz
dHJ1Y3QgIEV3a19Eb3dubG9hZF9Kb2IKLSAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBkb3dubG9h
ZCBkYXRhLgotICovCiBjbGFzcyBFd2tfRG93bmxvYWRfSm9iIDogcHVibGljIFJlZkNvdW50ZWQ8
RXdrX0Rvd25sb2FkX0pvYj4gewogcHVibGljOgotICAgIFdlYktpdDo6RG93bmxvYWRQcm94eSog
ZG93bmxvYWRQcm94eTsKLSAgICBFdmFzX09iamVjdCogdmlldzsKLSAgICBFd2tfRG93bmxvYWRf
Sm9iX1N0YXRlIHN0YXRlOwotICAgIFJlZlB0cjxFd2tfVXJsX1JlcXVlc3Q+IHJlcXVlc3Q7Ci0g
ICAgUmVmUHRyPEV3a19VcmxfUmVzcG9uc2U+IHJlc3BvbnNlOwotICAgIGRvdWJsZSBzdGFydFRp
bWU7Ci0gICAgZG91YmxlIGVuZFRpbWU7Ci0gICAgdWludDY0X3QgZG93bmxvYWRlZDsgLyoqPCBs
ZW5ndGggYWxyZWFkeSBkb3dubG9hZGVkICovCi0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3Rp
bmF0aW9uOwotICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZTsKKyAgICBF
V0tfREVDTEFSRV9EQVRBKEV3a19Eb3dubG9hZF9Kb2IpOwogCisgICAgfkV3a19Eb3dubG9hZF9K
b2IoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tfRG93bmxvYWRfSm9iPiBjcmVhdGUoV2Vi
S2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a19Eb3dubG9hZF9Kb2IoZG93bmxvYWQs
IGV3a1ZpZXcpKTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgRXdrX0Rvd25sb2FkX0pvYihXZWJL
aXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKLSAgICAg
ICAgOiBkb3dubG9hZFByb3h5KGRvd25sb2FkKQotICAgICAgICAsIHZpZXcoZXdrVmlldykKLSAg
ICAgICAgLCBzdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX05PVF9TVEFSVEVEKQotICAgICAg
ICAsIHN0YXJ0VGltZSgtMSkKLSAgICAgICAgLCBlbmRUaW1lKC0xKQotICAgICAgICAsIGRvd25s
b2FkZWQoMCkKLSAgICB7IH0KLX07CisgICAgdWludDY0X3QgaWQoKSBjb25zdDsKKyAgICBFdmFz
X09iamVjdCogdmlldygpIGNvbnN0OworICAgIFN0cmluZyBkZXN0aW5hdGlvbigpIGNvbnN0Owog
Ci10eXBlZGVmIHN0cnVjdCBFd2tfRXJyb3IgRXdrX0Vycm9yOworICAgIHZvaWQgc2V0U3RhdGUo
RXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSk7CisgICAgdm9pZCBpbmNyZW1lbnRSZWNlaXZlZERhdGEo
dWludDY0X3QgbGVuZ3RoKTsKKyAgICB2b2lkIHNldFJlc3BvbnNlKFBhc3NSZWZQdHI8RXdrX1Vy
bF9SZXNwb25zZT4pOworICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSk7CiAKLXVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0
KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqKTsKLUV2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfam9i
X3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqKTsKLXZvaWQgZXdrX2Rvd25sb2FkX2pv
Yl9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiosIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUpOwot
dm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiosIHVp
bnQ2NF90IGxlbmd0aCk7Ci12b2lkIGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2Vfc2V0KEV3a19E
b3dubG9hZF9Kb2IqLCBQYXNzUmVmUHRyPEV3a19VcmxfUmVzcG9uc2U+KTsKLXZvaWQgZXdrX2Rv
d25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBjb25z
dCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSk7Citwcml2YXRlOgorICAgIEV3a19Eb3dubG9hZF9K
b2IoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcp
OworfTsKIAogI2VuZGlmIC8vIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaAppbmRleCA0YmRiMjViLi4w
YTI1ZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wcml2
YXRlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgZXdrX3ByaXZhdGVfaAogCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKICNkZWZpbmUg
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShld2tOYW1lLCB3ZWJjb3JlTmFtZSkgXAogICAg
ICAgICBDT01QSUxFX0FTU0VSVChpbnQoZXdrTmFtZSkgPT0gaW50KHdlYmNvcmVOYW1lKSwgbWlz
bWF0Y2hpbmdFbnVtcykKQEAgLTM5LDQgKzQwLDggQEAgZXh0ZXJuIGludCBfZXdrX2xvZ19kb207
CiAjZGVmaW5lIElORk8oLi4uKSBFSU5BX0xPR19ET01fSU5GTyhfZXdrX2xvZ19kb20sIF9fVkFf
QVJHU19fKQogI2RlZmluZSBEQkcoLi4uKSBFSU5BX0xPR19ET01fREJHKF9ld2tfbG9nX2RvbSwg
X19WQV9BUkdTX18pCiAKKy8vIE1hY3JvcyB1c2VkIGZvciBQaW1wbCBpZGlvbS4KKyNkZWZpbmUg
RVdLX0RFQ0xBUkVfREFUQShDbGFzc05hbWUpIHN0cnVjdCBEYXRhOyBPd25QdHI8RGF0YT4gZAor
I2RlZmluZSBFV0tfRChDbGFzc05hbWUsIG9iaikgQ2xhc3NOYW1lOjpEYXRhKiBkID0gb2JqLT5k
LmdldCgpCisKICNlbmRpZiAvLyBld2tfcHJpdmF0ZV9oCg==
</data>
<flag name="review"
          id="182631"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169377</attachid>
            <date>2012-10-18 02:49:26 -0700</date>
            <delta_ts>2012-10-18 03:10:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>99697_ewk_download_pimpl.patch</filename>
            <type>text/plain</type>
            <size>22157</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiY2QzMTQ0Li5jZWIyNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMTAtMTggIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFVzZSBwaW1wbCBpZGlvbSBmb3IgRXdrX0Rvd25s
b2FkX0pvYgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTk2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
KworICAgICAgICBVc2UgcGltcGwgaWRpb20gaW4gRXdrX0Rvd25sb2FkX0pvYiBzbyB0aGF0IHRo
ZQorICAgICAgICBjbGFzcyBtZW1iZXJzIGFyZSBub3cgaW4gYSBQT0Qgc3RydWN0IGluIHRoZSBj
cHAKKyAgICAgICAgZmlsZS4gVGhpcyB3YXksIHRob3NlIG1lbWJlcnMgY2Fubm90IGJlIGFsdGVy
ZWQKKyAgICAgICAgZnJvbSBvdXRzaWRlIEV3a19Eb3dubG9hZF9Kb2IgYnV0IHRoZSBwdWJsaWMg
QworICAgICAgICBBUEkgY2FuIHN0aWxsIGFjY2VzcyB0aG9zZSBtZW1iZXJzIGRpcmVjdGx5Cisg
ICAgICAgIHdpdGhvdXQgdXNpbmcgY2xhc3MgZ2V0dGVycyBvciBzZXR0ZXJzLgorCisgICAgICAg
IEMgZnVuY3Rpb25zIGluIHRoZSBwcml2YXRlIGhlYWRlciBhbmQgbm93IHJlcGxhY2VkCisgICAg
ICAgIGJ5IEMrKyBtZXRob2RzIGluIEV3a19Eb3dubG9hZF9Kb2IgY2xhc3Mgc28gdGhhdAorICAg
ICAgICB3ZSBjYW4gdXNlIEMrKyBzdHlsZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIFdlYktpdDIK
KyAgICAgICAgRUZMIGltcGxlbWVudGF0aW9uIGNvZGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2FkZCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50
LmNwcDoKKyAgICAgICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToK
KyAgICAgICAgKGRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChkaWRDcmVhdGVEZXN0aW5h
dGlvbik6CisgICAgICAgIChkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChkaWRGYWlsKToKKyAg
ICAgICAgKGRpZENhbmNlbCk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwOgorICAgICAgICAoRXdrX0Rvd25sb2Fk
X0pvYjo6RGF0YSk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpEYXRhOjpEYXRhKToKKyAg
ICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdr
X0Rvd25sb2FkX0pvYjo6fkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdrX0Rvd25sb2Fk
X0pvYjo6aWQpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6dmlldyk6CisgICAgICAgIChl
d2tfZG93bmxvYWRfam9iX3N0YXRlX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3Jl
cXVlc3RfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KToKKyAg
ICAgICAgKGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KToKKyAgICAgICAgKGV3a19k
b3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jf
c3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2NhbmNl
bCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQpOgor
ICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KToKKyAgICAgICAgKEV3
a19Eb3dubG9hZF9Kb2I6OmRlc3RpbmF0aW9uKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6
OnNldFJlc3BvbnNlKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnNldFN1Z2dlc3RlZEZp
bGVOYW1lKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmluY3JlbWVudFJlY2VpdmVkRGF0
YSk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRTdGF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrX0Rvd25sb2Fk
X0pvYik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaDoKKwogMjAx
Mi0xMC0xOCAgQnl1bmd3b28gTGVlICA8Ync4MC5sZWVAc2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W1dLMl0gVXBkYXRlIHRlc3QgZXhwZWN0YXRpb24gZm9yIHRoZSBweXRob24gbWVzc2FnZSB0ZXN0
IGFmdGVyIHIxMzE3MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCAwY2E3NTY5Li5lNmRiYWE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0z
Nyw3ICszNyw2IEBACiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJld2tf
Y29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJl
d2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5k
ZXggYjc2MTdkYS4uZGNhZGI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgImV3a19j
b250ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJf
Y2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0ZS5o
IgotI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRf
am9iX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKQEAgLTIwNSw3ICsyMDQsNyBAQCB2b2lkIGV3a19j
b250ZXh0X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19Eb3du
bG9hZF9Kb2IqIGV3awogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25sb2FkKTsKIAotICAgIHVp
bnQ2NF90IGRvd25sb2FkSWQgPSBld2tfZG93bmxvYWRfam9iX2lkX2dldChld2tEb3dubG9hZCk7
CisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IGV3a0Rvd25sb2FkLT5pZCgpOwogICAgIGlmIChl
d2tDb250ZXh0LT5kb3dubG9hZEpvYnMuY29udGFpbnMoZG93bmxvYWRJZCkpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKaW5kZXggMDg4YmQ2YS4uNTU3
MzMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9j
bGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNs
dWRlICJld2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Vycm9yX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdXJs
X3Jlc3BvbnNlLmgiCkBAIC01MywxNCArNTIsMTQgQEAgc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG8K
ICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pv
Yl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25s
b2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAotICAgIGV3a19kb3dubG9hZF9qb2Jf
c3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChkb3dubG9hZCwgdG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgZG93bmxvYWQtPnNldFN1Z2dlc3RlZEZpbGVOYW1lKHRv
SW1wbChmaWxlbmFtZSktPnN0cmluZygpKTsKIAogICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBkb3du
bG9hZCBzaWduYWwgb24gdGhlIEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVkIHRo
ZSByZXNwb25zZQogICAgIC8vIGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4KLSAgICBld2tf
dmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93
bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX3JlcXVlc3RlZChk
b3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAKICAgICAvLyBEb3dubG9hZFNvdXAgZXhwZWN0
cyB0aGUgZGVzdGluYXRpb24gdG8gYmUgYSBVUkwuCi0gICAgU3RyaW5nIGRlc3RpbmF0aW9uID0g
U3RyaW5nKCJmaWxlOi8vIikgKyBTdHJpbmc6OmZyb21VVEY4KGV3a19kb3dubG9hZF9qb2JfZGVz
dGluYXRpb25fZ2V0KGRvd25sb2FkKSk7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gU3RyaW5n
KCJmaWxlOi8vIikgKyBkb3dubG9hZC0+ZGVzdGluYXRpb24oKTsKIAogICAgIHJldHVybiBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKIH0K
QEAgLTY5LDcgKzY4LDcgQEAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4
dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VSTFJlc3AKIHsKICAgICBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAg
ICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChk
b3dubG9hZCwgRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsKKyAgICBkb3du
bG9hZC0+c2V0UmVzcG9uc2UoRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsK
IH0KIAogc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIC8qcGF0aCovLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQpAQCAtNzcsNDcgKzc2LDQ5IEBAIHN0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3Rp
bmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluCiAg
ICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2Jf
Z2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9h
ZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0
YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORyk7Cisg
ICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcp
OwogfQogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQogewogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxv
YWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+
ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIGV3a19kb3dubG9hZF9q
b2JfcmVjZWl2ZWRfZGF0YShkb3dubG9hZCwgbGVuZ3RoKTsKKyAgICBkb3dubG9hZC0+aW5jcmVt
ZW50UmVjZWl2ZWREYXRhKGxlbmd0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250
ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tE
b3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250
ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElk
KTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEKTsKKwogICAgIE93blB0cjxFd2tfRXJyb3I+IGV3a0Vy
cm9yID0gRXdrX0Vycm9yOjpjcmVhdGUoZXJyb3IpOwotICAgIGV3a19kb3dubG9hZF9qb2Jfc3Rh
dGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7Ci0gICAgZXdr
X3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25s
b2FkKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9q
b2JfZmFpbGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkLCBld2tFcnJvci5nZXQoKSk7CiAg
ICAgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5m
byksIGRvd25sb2FkSWQpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250ZXh0UmVm
LCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0
aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRv
SW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOwogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50
SW5mbyksIGRvd25sb2FkSWQpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93
bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5D
RUxMRUQpOwotICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5jZWxsZWQoZXdrX2Rvd25sb2Fk
X2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+c2V0U3Rh
dGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQpOworCisgICAgZXdrX3ZpZXdfZG93
bmxvYWRfam9iX2NhbmNlbGxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAgICAgZXdr
X2NvbnRleHRfZG93bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRv
d25sb2FkSWQpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9p
ZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3
a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOwogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2Fk
ID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyks
IGRvd25sb2FkSWQpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRf
am9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7
Ci0gICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGV3a19kb3dubG9hZF9qb2Jfdmll
d19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfRklOSVNIRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9m
aW5pc2hlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAgICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWRfam9iLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZF9qb2IuY3BwCmluZGV4IDQ2YTE5OGQuLmYwMzU1NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCkBAIC0zMiw5
ICszMiw0MCBAQAogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfZG93
bmxvYWRfam9iX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RydWN0IEV3a19E
b3dubG9hZF9Kb2I6OkRhdGEgeworICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHk7Cisg
ICAgRXZhc19PYmplY3QqIHZpZXc7CisgICAgRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBzdGF0ZTsK
KyAgICBSZWZQdHI8RXdrX1VybF9SZXF1ZXN0PiByZXF1ZXN0OworICAgIFJlZlB0cjxFd2tfVXJs
X1Jlc3BvbnNlPiByZXNwb25zZTsKKyAgICBkb3VibGUgc3RhcnRUaW1lOworICAgIGRvdWJsZSBl
bmRUaW1lOworICAgIHVpbnQ2NF90IGRvd25sb2FkZWQ7IC8vIGxlbmd0aCBhbHJlYWR5IGRvd25s
b2FkZWQKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb247CisgICAgV0tFaW5hU2hh
cmVkU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgRGF0YShEb3dubG9hZFByb3h5KiBk
b3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgICAgIDogZG93bmxvYWRQcm94eShk
b3dubG9hZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisgICAgICAgICwgc3RhdGUoRVdLX0RP
V05MT0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAgICAgLCBzdGFydFRpbWUoLTEpCisg
ICAgICAgICwgZW5kVGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDApCisgICAgeyB9Cit9
OworCitFd2tfRG93bmxvYWRfSm9iOjpFd2tfRG93bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQ
cm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiB2aWV3KQorICAgIDogZChhZG9wdFB0cihuZXcg
RGF0YShkb3dubG9hZCwgdmlldykpKQoreyB9CisKK0V3a19Eb3dubG9hZF9Kb2I6On5Fd2tfRG93
bmxvYWRfSm9iKCkKK3sKK30KKwogRXdrX0Rvd25sb2FkX0pvYiogZXdrX2Rvd25sb2FkX2pvYl9y
ZWYoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKQEAgLTU1LDEyICs4Niw5IEBAIHZvaWQgZXdrX2Rv
d25sb2FkX2pvYl91bnJlZihFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKICAqIEBpbnRlcm5h
bAogICogUXVlcmllcyB0aGUgaWRlbnRpZmllciBmb3IgdGhpcyBkb3dubG9hZAogICovCi11aW50
NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3du
bG9hZCkKK3VpbnQ2NF90IEV3a19Eb3dubG9hZF9Kb2I6OmlkKCkgY29uc3QKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7Ci0KLSAgICBy
ZXR1cm4gZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKTsKKyAgICByZXR1cm4g
ZC0+ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOwogfQogCiAvKioKQEAgLTY4LDUzICs5Niw1
NiBAQCB1aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWRf
Sm9iKiBkb3dubG9hZCkKICAqIFJldHVybnMgdGhlIHZpZXcgdGhpcyBkb3dubG9hZCBpcyBhdHRh
Y2hlZCB0by4KICAqIFRoZSB2aWV3IGlzIG5lZWRlZCB0byBzZW5kIG5vdGlmaWNhdGlvbiBzaWdu
YWxzLgogICovCi1FdmFzX09iamVjdCogZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChjb25zdCBF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK0V2YXNfT2JqZWN0KiBFd2tfRG93bmxvYWRfSm9i
Ojp2aWV3KCkgY29uc3QKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIDApOwotCi0gICAgcmV0dXJuIGRvd25sb2FkLT52aWV3OworICAgIHJldHVybiBkLT52
aWV3OwogfQogCiBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVf
Z2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9VTktO
T1dOKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICByZXR1
cm4gZG93bmxvYWQtPnN0YXRlOworICAgIHJldHVybiBkLT5zdGF0ZTsKIH0KIAogRXdrX1VybF9S
ZXF1ZXN0KiBld2tfZG93bmxvYWRfam9iX3JlcXVlc3RfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3du
bG9hZCwgMCk7CisgICAgRVdLX0QoRXdrX0Rvd25sb2FkX0pvYiwgZG93bmxvYWQpOwogCi0gICAg
aWYgKCFkb3dubG9hZC0+cmVxdWVzdCkgewotICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZG93bmxvYWQtPmRvd25sb2FkUHJveHksIDApOwotICAgICAgICBXS1JldGFpblB0
cjxXS1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVzdChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1
ZXN0OjpjcmVhdGUoZG93bmxvYWQtPmRvd25sb2FkUHJveHktPnJlcXVlc3QoKSkubGVha1JlZigp
KSk7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0Rvd25sb2FkX0pvYio+KGRvd25sb2FkKS0+cmVx
dWVzdCA9IEV3a19VcmxfUmVxdWVzdDo6Y3JlYXRlKHdrVVJMUmVxdWVzdC5nZXQoKSk7CisgICAg
aWYgKCFkLT5yZXF1ZXN0KSB7CisgICAgICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkLT5kb3dubG9hZFByb3h5LCAwKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0
UmVmPiB3a1VSTFJlcXVlc3QoQWRvcHRXSywgdG9BUEkoV2ViVVJMUmVxdWVzdDo6Y3JlYXRlKGQt
PmRvd25sb2FkUHJveHktPnJlcXVlc3QoKSkubGVha1JlZigpKSk7CisgICAgICAgIGQtPnJlcXVl
c3QgPSBFd2tfVXJsX1JlcXVlc3Q6OmNyZWF0ZSh3a1VSTFJlcXVlc3QuZ2V0KCkpOwogICAgIH0K
IAotICAgIHJldHVybiBkb3dubG9hZC0+cmVxdWVzdC5nZXQoKTsKKyAgICByZXR1cm4gZC0+cmVx
dWVzdC5nZXQoKTsKIH0KIAogRXdrX1VybF9SZXNwb25zZSogZXdrX2Rvd25sb2FkX2pvYl9yZXNw
b25zZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93
bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnJlc3BvbnNlLmdl
dCgpOworICAgIHJldHVybiBkLT5yZXNwb25zZS5nZXQoKTsKIH0KIAogY29uc3QgY2hhciogZXdr
X2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAw
KTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICByZXR1cm4g
ZG93bmxvYWQtPmRlc3RpbmF0aW9uOworICAgIHJldHVybiBkLT5kZXN0aW5hdGlvbjsKIH0KIAog
RWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKIHsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIGZhbHNlKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZGVzdGluYXRpb24sIGZhbHNlKTsKKyAgICBFV0tfRChFd2tfRG93
bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICBkb3dubG9hZC0+ZGVzdGluYXRpb24gPSBkZXN0
aW5hdGlvbjsKKyAgICBkLT5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC0xMjIsMTAzICsxNTMsMTEyIEBAIEVpbmFfQm9vbCBld2tfZG93bmxvYWRf
am9iX2Rlc3RpbmF0aW9uX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgY29uc3QgY2hh
CiBjb25zdCBjaGFyICpld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoY29u
c3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBk
b3dubG9hZCk7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnN1Z2dlc3RlZEZpbGVuYW1lOworICAg
IHJldHVybiBkLT5zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19kb3dubG9h
ZF9qb2JfY2FuY2VsKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgZmFsc2UpOworICAg
IEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZC0+ZG93bmxvYWRQcm94eSwgZmFsc2UpOwogCi0gICAgaWYgKGRvd25s
b2FkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQorICAgIGlm
IChkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBkb3dubG9hZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfSk9C
X1NUQVRFX0NBTkNFTExJTkc7Ci0gICAgZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmNhbmNlbCgp
OworICAgIGQtPnN0YXRlID0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMSU5HOworICAg
IGQtPmRvd25sb2FkUHJveHktPmNhbmNlbCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBkb3Vi
bGUgZXdrX2Rvd25sb2FkX2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV3a19Eb3du
bG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3dubG9hZCwgMCk7CisgICAgRVdLX0QoRXdrX0Rvd25sb2FkX0pvYiwgZG93bmxvYWQpOwog
Ci0gICAgaWYgKCFkb3dubG9hZC0+cmVzcG9uc2UpCisgICAgaWYgKCFkLT5yZXNwb25zZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGgg
PSBld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2Uu
Z2V0KCkpOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxf
cmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGQtPnJlc3BvbnNlLmdldCgpKTsKICAgICBpZiAo
IWNvbnRlbnRMZW5ndGgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGRvdWJsZT4oZG93bmxvYWQtPmRvd25sb2FkZWQpIC8gY29udGVudExlbmd0aDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihkLT5kb3dubG9hZGVkKSAvIGNvbnRlbnRMZW5ndGg7
CiB9CiAKIGRvdWJsZSBld2tfZG93bmxvYWRfam9iX2VsYXBzZWRfdGltZV9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9h
ZCk7CiAKICAgICAvLyBEb3dubG9hZCBoYXMgbm90IHN0YXJ0ZWQgeWV0LgotICAgIGlmIChkb3du
bG9hZC0+c3RhcnRUaW1lIDwgMCkKKyAgICBpZiAoZC0+c3RhcnRUaW1lIDwgMCkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAvLyBEb3dubG9hZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBl
bGFwc2VkIGJldHdlZW4gdGhlCiAgICAgLy8gZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZl
bnQuCi0gICAgaWYgKGRvd25sb2FkLT5lbmRUaW1lID49IDApCi0gICAgICAgIHJldHVybiBkb3du
bG9hZC0+ZW5kVGltZSAtIGRvd25sb2FkLT5zdGFydFRpbWU7CisgICAgaWYgKGQtPmVuZFRpbWUg
Pj0gMCkKKyAgICAgICAgcmV0dXJuIGQtPmVuZFRpbWUgLSBkLT5zdGFydFRpbWU7CiAKICAgICAv
LyBEb3dubG9hZCBpcyBzdGlsbCBnb2luZy4KLSAgICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAt
IGRvd25sb2FkLT5zdGFydFRpbWU7CisgICAgcmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCkgLSBkLT5z
dGFydFRpbWU7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBTZXRzIHRoZSBVUkwgQGEgcmVz
cG9uc2UgZm9yIHRoaXMgQGEgZG93bmxvYWQuCiAgKi8KLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9y
ZXNwb25zZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIFBhc3NSZWZQdHI8RXdrX1Vy
bF9SZXNwb25zZT4gcmVzcG9uc2UpCitTdHJpbmcgRXdrX0Rvd25sb2FkX0pvYjo6ZGVzdGluYXRp
b24oKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihyZXNwb25zZSk7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoZC0+ZGVzdGluYXRpb24pOworfQogCi0gICAgZG93bmxvYWQtPnJlc3Bv
bnNlID0gcmVzcG9uc2U7CisvKioKKyAqIEBpbnRlcm5hbAorICogU2V0cyB0aGUgVVJMIEBhIHJl
c3BvbnNlIGZvciB0aGlzIEBhIGRvd25sb2FkLgorICovCit2b2lkIEV3a19Eb3dubG9hZF9Kb2I6
OnNldFJlc3BvbnNlKFBhc3NSZWZQdHI8RXdrX1VybF9SZXNwb25zZT4gcmVzcG9uc2UpCit7Cisg
ICAgZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFNl
dHMgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUgZm9yIHRoaXMgQGEgZG93bmxvYWQuCiAgKi8KLXZv
aWQgZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfc2V0KEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3ZvaWQgRXdrX0Rv
d25sb2FkX0pvYjo6c2V0U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7Ci0K
LSAgICBkb3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKKyAg
ICBkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5kYXRhKCk7
CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnQgYSBnaXZlbiBhbW91bnQgb2YgZGF0
YSB3YXMgcmVjZWl2ZWQuCiAgKi8KLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9yZWNlaXZlZF9kYXRh
KEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgpCit2b2lkIEV3a19E
b3dubG9hZF9Kb2I6OmluY3JlbWVudFJlY2VpdmVkRGF0YSh1aW50NjRfdCBsZW5ndGgpCiB7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOwotCi0gICAgZG93bmxvYWQt
PmRvd25sb2FkZWQgKz0gbGVuZ3RoOworICAgIGQtPmRvd25sb2FkZWQgKz0gbGVuZ3RoOwogfQog
CiAvKioKICAqIEBpbnRlcm5hbAogICogU2V0cyB0aGUgc3RhdGUgb2YgdGhlIGRvd25sb2FkLgog
ICovCi12b2lkIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkLCBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKQordm9pZCBFd2tfRG93bmxvYWRf
Sm9iOjpzZXRTdGF0ZShFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKQogewotICAgIGRvd25s
b2FkLT5zdGF0ZSA9IHN0YXRlOwotCi0gICAgLy8gVXBkYXRlIHN0YXJ0IHRpbWUgaWYgdGhlIGRv
d25sb2FkIGhhcyBzdGFydGVkCi0gICAgaWYgKHN0YXRlID09IEVXS19ET1dOTE9BRF9KT0JfU1RB
VEVfRE9XTkxPQURJTkcpCi0gICAgICAgIGRvd25sb2FkLT5zdGFydFRpbWUgPSBlY29yZV90aW1l
X2dldCgpOwotCi0gICAgLy8gVXBkYXRlIGVuZCB0aW1lIGlmIHRoZSBkb3dubG9hZCBoYXMgZmlu
aXNoZWQgKHN1Y2Nlc3NmdWxseSBvciBub3QpCi0gICAgaWYgKHN0YXRlID09IEVXS19ET1dOTE9B
RF9KT0JfU1RBVEVfRkFJTEVECi0gICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9KT0Jf
U1RBVEVfQ0FOQ0VMTEVECi0gICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9KT0JfU1RB
VEVfRklOSVNIRUQpCi0gICAgICAgIGRvd25sb2FkLT5lbmRUaW1lID0gZWNvcmVfdGltZV9nZXQo
KTsKKyAgICBkLT5zdGF0ZSA9IHN0YXRlOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNh
c2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORzoKKyAgICAgICAgZC0+c3RhcnRU
aW1lID0gZWNvcmVfdGltZV9nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFV0tfRE9X
TkxPQURfSk9CX1NUQVRFX0ZBSUxFRDoKKyAgICBjYXNlIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVf
Q0FOQ0VMTEVEOgorICAgIGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRDoKKyAg
ICAgICAgZC0+ZW5kVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaAppbmRleCAwY2FkNWMyLi4x
NTZmMjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWRfam9iLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkX2pvYi5oCkBAIC00Myw3ICs0Myw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgog
Ci0vKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX0Rvd25sb2FkX0pvYl9Kb2IgKi8KKy8q
KiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfRG93bmxvYWRfSm9iICovCiB0eXBlZGVmIHN0
cnVjdCBFd2tfRG93bmxvYWRfSm9iIEV3a19Eb3dubG9hZF9Kb2I7CiAKIC8vLyBEZWZpbmVzIHRo
ZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBkb3dubG9hZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgKaW5k
ZXggNWZhYzQ3ZC4uM2I5MmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgKQEAgLTI4LDYgKzI4
LDggQEAKIAogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmlu
Zy5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKKyNpbmNsdWRlICJld2tfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdr
X3VybF9yZXNwb25zZV9wcml2YXRlLmgiCiAjaW5jbHVkZSA8RXZhcy5oPgpAQCAtMzcsNDYgKzM5
LDI3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxvYWRQcm94eTsKIH0KIAotLyoq
Ci0gKiBcc3RydWN0ICBFd2tfRG93bmxvYWRfSm9iCi0gKiBAYnJpZWYgICBDb250YWlucyB0aGUg
ZG93bmxvYWQgZGF0YS4KLSAqLwogY2xhc3MgRXdrX0Rvd25sb2FkX0pvYiA6IHB1YmxpYyBSZWZD
b3VudGVkPEV3a19Eb3dubG9hZF9Kb2I+IHsKIHB1YmxpYzoKLSAgICBXZWJLaXQ6OkRvd25sb2Fk
UHJveHkqIGRvd25sb2FkUHJveHk7Ci0gICAgRXZhc19PYmplY3QqIHZpZXc7Ci0gICAgRXdrX0Rv
d25sb2FkX0pvYl9TdGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8RXdrX1VybF9SZXF1ZXN0PiByZXF1
ZXN0OwotICAgIFJlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZTsKLSAgICBkb3VibGUg
c3RhcnRUaW1lOwotICAgIGRvdWJsZSBlbmRUaW1lOwotICAgIHVpbnQ2NF90IGRvd25sb2FkZWQ7
IC8qKjwgbGVuZ3RoIGFscmVhZHkgZG93bmxvYWRlZCAqLwotICAgIFdLRWluYVNoYXJlZFN0cmlu
ZyBkZXN0aW5hdGlvbjsKLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWU7
CisgICAgRVdLX0RFQ0xBUkVfREFUQShFd2tfRG93bmxvYWRfSm9iKTsKIAorICAgIH5Fd2tfRG93
bmxvYWRfSm9iKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gY3Jl
YXRlKFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tfRG93bmxvYWRfSm9iKGRv
d25sb2FkLCBld2tWaWV3KSk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIEV3a19Eb3dubG9hZF9K
b2IoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcp
Ci0gICAgICAgIDogZG93bmxvYWRQcm94eShkb3dubG9hZCkKLSAgICAgICAgLCB2aWV3KGV3a1Zp
ZXcpCi0gICAgICAgICwgc3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkK
LSAgICAgICAgLCBzdGFydFRpbWUoLTEpCi0gICAgICAgICwgZW5kVGltZSgtMSkKLSAgICAgICAg
LCBkb3dubG9hZGVkKDApCi0gICAgeyB9Ci19OworICAgIHVpbnQ2NF90IGlkKCkgY29uc3Q7Cisg
ICAgRXZhc19PYmplY3QqIHZpZXcoKSBjb25zdDsKKyAgICBTdHJpbmcgZGVzdGluYXRpb24oKSBj
b25zdDsKIAotdHlwZWRlZiBzdHJ1Y3QgRXdrX0Vycm9yIEV3a19FcnJvcjsKKyAgICB2b2lkIHNl
dFN0YXRlKEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUpOworICAgIHZvaWQgaW5jcmVtZW50UmVjZWl2
ZWREYXRhKHVpbnQ2NF90IGxlbmd0aCk7CisgICAgdm9pZCBzZXRSZXNwb25zZShQYXNzUmVmUHRy
PEV3a19VcmxfUmVzcG9uc2U+KTsKKyAgICB2b2lkIHNldFN1Z2dlc3RlZEZpbGVOYW1lKGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpOwogCi11aW50NjRfdCBld2tfZG93bmxvYWRfam9i
X2lkX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKik7Ci1FdmFzX09iamVjdCogZXdrX2Rvd25s
b2FkX2pvYl92aWV3X2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKik7Ci12b2lkIGV3a19kb3du
bG9hZF9qb2Jfc3RhdGVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBFd2tfRG93bmxvYWRfSm9iX1N0
YXRlKTsKLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9yZWNlaXZlZF9kYXRhKEV3a19Eb3dubG9hZF9K
b2IqLCB1aW50NjRfdCBsZW5ndGgpOwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3Nl
dChFd2tfRG93bmxvYWRfSm9iKiwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPik7Ci12b2lk
IGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWRfSm9i
KiwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpOworcHJpdmF0ZToKKyAgICBFd2tfRG93
bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBl
d2tWaWV3KTsKK307CiAKICNlbmRpZiAvLyBld2tfZG93bmxvYWRfam9iX3ByaXZhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wcml2YXRlLmgKaW5kZXggNGJk
YjI1Yi4uMGEyNWUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfcHJpdmF0ZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIGV3a19wcml2YXRlX2gKIAog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAj
ZGVmaW5lIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oZXdrTmFtZSwgd2ViY29yZU5hbWUp
IFwKICAgICAgICAgQ09NUElMRV9BU1NFUlQoaW50KGV3a05hbWUpID09IGludCh3ZWJjb3JlTmFt
ZSksIG1pc21hdGNoaW5nRW51bXMpCkBAIC0zOSw0ICs0MCw4IEBAIGV4dGVybiBpbnQgX2V3a19s
b2dfZG9tOwogI2RlZmluZSBJTkZPKC4uLikgRUlOQV9MT0dfRE9NX0lORk8oX2V3a19sb2dfZG9t
LCBfX1ZBX0FSR1NfXykKICNkZWZpbmUgREJHKC4uLikgRUlOQV9MT0dfRE9NX0RCRyhfZXdrX2xv
Z19kb20sIF9fVkFfQVJHU19fKQogCisvLyBNYWNyb3MgdXNlZCBmb3IgUGltcGwgaWRpb20uCisj
ZGVmaW5lIEVXS19ERUNMQVJFX0RBVEEoQ2xhc3NOYW1lKSBzdHJ1Y3QgRGF0YTsgT3duUHRyPERh
dGE+IGQKKyNkZWZpbmUgRVdLX0QoQ2xhc3NOYW1lLCBvYmopIENsYXNzTmFtZTo6RGF0YSogZCA9
IG9iai0+ZC5nZXQoKQorCiAjZW5kaWYgLy8gZXdrX3ByaXZhdGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169380</attachid>
            <date>2012-10-18 03:10:05 -0700</date>
            <delta_ts>2012-10-18 05:15:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>99697_ewk_download_pimpl.patch</filename>
            <type>text/plain</type>
            <size>22202</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiY2QzMTQ0Li5jZWIyNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMTAtMTggIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFVzZSBwaW1wbCBpZGlvbSBmb3IgRXdrX0Rvd25s
b2FkX0pvYgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTk2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
KworICAgICAgICBVc2UgcGltcGwgaWRpb20gaW4gRXdrX0Rvd25sb2FkX0pvYiBzbyB0aGF0IHRo
ZQorICAgICAgICBjbGFzcyBtZW1iZXJzIGFyZSBub3cgaW4gYSBQT0Qgc3RydWN0IGluIHRoZSBj
cHAKKyAgICAgICAgZmlsZS4gVGhpcyB3YXksIHRob3NlIG1lbWJlcnMgY2Fubm90IGJlIGFsdGVy
ZWQKKyAgICAgICAgZnJvbSBvdXRzaWRlIEV3a19Eb3dubG9hZF9Kb2IgYnV0IHRoZSBwdWJsaWMg
QworICAgICAgICBBUEkgY2FuIHN0aWxsIGFjY2VzcyB0aG9zZSBtZW1iZXJzIGRpcmVjdGx5Cisg
ICAgICAgIHdpdGhvdXQgdXNpbmcgY2xhc3MgZ2V0dGVycyBvciBzZXR0ZXJzLgorCisgICAgICAg
IEMgZnVuY3Rpb25zIGluIHRoZSBwcml2YXRlIGhlYWRlciBhbmQgbm93IHJlcGxhY2VkCisgICAg
ICAgIGJ5IEMrKyBtZXRob2RzIGluIEV3a19Eb3dubG9hZF9Kb2IgY2xhc3Mgc28gdGhhdAorICAg
ICAgICB3ZSBjYW4gdXNlIEMrKyBzdHlsZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIFdlYktpdDIK
KyAgICAgICAgRUZMIGltcGxlbWVudGF0aW9uIGNvZGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2FkZCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50
LmNwcDoKKyAgICAgICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToK
KyAgICAgICAgKGRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChkaWRDcmVhdGVEZXN0aW5h
dGlvbik6CisgICAgICAgIChkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChkaWRGYWlsKToKKyAg
ICAgICAgKGRpZENhbmNlbCk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwOgorICAgICAgICAoRXdrX0Rvd25sb2Fk
X0pvYjo6RGF0YSk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpEYXRhOjpEYXRhKToKKyAg
ICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdr
X0Rvd25sb2FkX0pvYjo6fkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdrX0Rvd25sb2Fk
X0pvYjo6aWQpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6dmlldyk6CisgICAgICAgIChl
d2tfZG93bmxvYWRfam9iX3N0YXRlX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3Jl
cXVlc3RfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KToKKyAg
ICAgICAgKGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KToKKyAgICAgICAgKGV3a19k
b3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jf
c3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2NhbmNl
bCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQpOgor
ICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KToKKyAgICAgICAgKEV3
a19Eb3dubG9hZF9Kb2I6OmRlc3RpbmF0aW9uKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6
OnNldFJlc3BvbnNlKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnNldFN1Z2dlc3RlZEZp
bGVOYW1lKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmluY3JlbWVudFJlY2VpdmVkRGF0
YSk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRTdGF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrX0Rvd25sb2Fk
X0pvYik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaDoKKwogMjAx
Mi0xMC0xOCAgQnl1bmd3b28gTGVlICA8Ync4MC5sZWVAc2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W1dLMl0gVXBkYXRlIHRlc3QgZXhwZWN0YXRpb24gZm9yIHRoZSBweXRob24gbWVzc2FnZSB0ZXN0
IGFmdGVyIHIxMzE3MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCAwY2E3NTY5Li5lNmRiYWE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0z
Nyw3ICszNyw2IEBACiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJld2tf
Y29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJl
d2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5k
ZXggYjc2MTdkYS4uZGNhZGI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgImV3a19j
b250ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJf
Y2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0ZS5o
IgotI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRf
am9iX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKQEAgLTIwNSw3ICsyMDQsNyBAQCB2b2lkIGV3a19j
b250ZXh0X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19Eb3du
bG9hZF9Kb2IqIGV3awogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25sb2FkKTsKIAotICAgIHVp
bnQ2NF90IGRvd25sb2FkSWQgPSBld2tfZG93bmxvYWRfam9iX2lkX2dldChld2tEb3dubG9hZCk7
CisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IGV3a0Rvd25sb2FkLT5pZCgpOwogICAgIGlmIChl
d2tDb250ZXh0LT5kb3dubG9hZEpvYnMuY29udGFpbnMoZG93bmxvYWRJZCkpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKaW5kZXggMDg4YmQ2YS4uNTU3
MzMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9j
bGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNs
dWRlICJld2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Vycm9yX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdXJs
X3Jlc3BvbnNlLmgiCkBAIC01MywxNCArNTIsMTQgQEAgc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG8K
ICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pv
Yl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25s
b2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAotICAgIGV3a19kb3dubG9hZF9qb2Jf
c3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChkb3dubG9hZCwgdG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgZG93bmxvYWQtPnNldFN1Z2dlc3RlZEZpbGVOYW1lKHRv
SW1wbChmaWxlbmFtZSktPnN0cmluZygpKTsKIAogICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBkb3du
bG9hZCBzaWduYWwgb24gdGhlIEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVkIHRo
ZSByZXNwb25zZQogICAgIC8vIGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4KLSAgICBld2tf
dmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93
bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX3JlcXVlc3RlZChk
b3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAKICAgICAvLyBEb3dubG9hZFNvdXAgZXhwZWN0
cyB0aGUgZGVzdGluYXRpb24gdG8gYmUgYSBVUkwuCi0gICAgU3RyaW5nIGRlc3RpbmF0aW9uID0g
U3RyaW5nKCJmaWxlOi8vIikgKyBTdHJpbmc6OmZyb21VVEY4KGV3a19kb3dubG9hZF9qb2JfZGVz
dGluYXRpb25fZ2V0KGRvd25sb2FkKSk7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gU3RyaW5n
KCJmaWxlOi8vIikgKyBkb3dubG9hZC0+ZGVzdGluYXRpb24oKTsKIAogICAgIHJldHVybiBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKIH0K
QEAgLTY5LDcgKzY4LDcgQEAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4
dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VSTFJlc3AKIHsKICAgICBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAg
ICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChk
b3dubG9hZCwgRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsKKyAgICBkb3du
bG9hZC0+c2V0UmVzcG9uc2UoRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsK
IH0KIAogc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIC8qcGF0aCovLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQpAQCAtNzcsNDcgKzc2LDQ5IEBAIHN0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3Rp
bmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluCiAg
ICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2Jf
Z2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9h
ZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0
YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORyk7Cisg
ICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcp
OwogfQogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQogewogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxv
YWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+
ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIGV3a19kb3dubG9hZF9q
b2JfcmVjZWl2ZWRfZGF0YShkb3dubG9hZCwgbGVuZ3RoKTsKKyAgICBkb3dubG9hZC0+aW5jcmVt
ZW50UmVjZWl2ZWREYXRhKGxlbmd0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250
ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tE
b3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250
ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElk
KTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEKTsKKwogICAgIE93blB0cjxFd2tfRXJyb3I+IGV3a0Vy
cm9yID0gRXdrX0Vycm9yOjpjcmVhdGUoZXJyb3IpOwotICAgIGV3a19kb3dubG9hZF9qb2Jfc3Rh
dGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7Ci0gICAgZXdr
X3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25s
b2FkKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9q
b2JfZmFpbGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkLCBld2tFcnJvci5nZXQoKSk7CiAg
ICAgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5m
byksIGRvd25sb2FkSWQpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250ZXh0UmVm
LCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0
aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRv
SW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOwogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50
SW5mbyksIGRvd25sb2FkSWQpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93
bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5D
RUxMRUQpOwotICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5jZWxsZWQoZXdrX2Rvd25sb2Fk
X2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+c2V0U3Rh
dGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQpOworCisgICAgZXdrX3ZpZXdfZG93
bmxvYWRfam9iX2NhbmNlbGxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAgICAgZXdr
X2NvbnRleHRfZG93bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRv
d25sb2FkSWQpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9p
ZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3
a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOwogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2Fk
ID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyks
IGRvd25sb2FkSWQpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRf
am9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7
Ci0gICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGV3a19kb3dubG9hZF9qb2Jfdmll
d19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfRklOSVNIRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9m
aW5pc2hlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAgICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWRfam9iLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZF9qb2IuY3BwCmluZGV4IDQ2YTE5OGQuLmYwMzU1NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCkBAIC0zMiw5
ICszMiw0MCBAQAogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfZG93
bmxvYWRfam9iX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RydWN0IEV3a19E
b3dubG9hZF9Kb2I6OkRhdGEgeworICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHk7Cisg
ICAgRXZhc19PYmplY3QqIHZpZXc7CisgICAgRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBzdGF0ZTsK
KyAgICBSZWZQdHI8RXdrX1VybF9SZXF1ZXN0PiByZXF1ZXN0OworICAgIFJlZlB0cjxFd2tfVXJs
X1Jlc3BvbnNlPiByZXNwb25zZTsKKyAgICBkb3VibGUgc3RhcnRUaW1lOworICAgIGRvdWJsZSBl
bmRUaW1lOworICAgIHVpbnQ2NF90IGRvd25sb2FkZWQ7IC8vIGxlbmd0aCBhbHJlYWR5IGRvd25s
b2FkZWQKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb247CisgICAgV0tFaW5hU2hh
cmVkU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgRGF0YShEb3dubG9hZFByb3h5KiBk
b3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgICAgIDogZG93bmxvYWRQcm94eShk
b3dubG9hZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisgICAgICAgICwgc3RhdGUoRVdLX0RP
V05MT0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAgICAgLCBzdGFydFRpbWUoLTEpCisg
ICAgICAgICwgZW5kVGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDApCisgICAgeyB9Cit9
OworCitFd2tfRG93bmxvYWRfSm9iOjpFd2tfRG93bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQ
cm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiB2aWV3KQorICAgIDogZChhZG9wdFB0cihuZXcg
RGF0YShkb3dubG9hZCwgdmlldykpKQoreyB9CisKK0V3a19Eb3dubG9hZF9Kb2I6On5Fd2tfRG93
bmxvYWRfSm9iKCkKK3sKK30KKwogRXdrX0Rvd25sb2FkX0pvYiogZXdrX2Rvd25sb2FkX2pvYl9y
ZWYoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKQEAgLTU1LDEyICs4Niw5IEBAIHZvaWQgZXdrX2Rv
d25sb2FkX2pvYl91bnJlZihFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKICAqIEBpbnRlcm5h
bAogICogUXVlcmllcyB0aGUgaWRlbnRpZmllciBmb3IgdGhpcyBkb3dubG9hZAogICovCi11aW50
NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3du
bG9hZCkKK3VpbnQ2NF90IEV3a19Eb3dubG9hZF9Kb2I6OmlkKCkgY29uc3QKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7Ci0KLSAgICBy
ZXR1cm4gZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKTsKKyAgICByZXR1cm4g
ZC0+ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOwogfQogCiAvKioKQEAgLTY4LDUzICs5Niw1
NiBAQCB1aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWRf
Sm9iKiBkb3dubG9hZCkKICAqIFJldHVybnMgdGhlIHZpZXcgdGhpcyBkb3dubG9hZCBpcyBhdHRh
Y2hlZCB0by4KICAqIFRoZSB2aWV3IGlzIG5lZWRlZCB0byBzZW5kIG5vdGlmaWNhdGlvbiBzaWdu
YWxzLgogICovCi1FdmFzX09iamVjdCogZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChjb25zdCBF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK0V2YXNfT2JqZWN0KiBFd2tfRG93bmxvYWRfSm9i
Ojp2aWV3KCkgY29uc3QKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIDApOwotCi0gICAgcmV0dXJuIGRvd25sb2FkLT52aWV3OworICAgIHJldHVybiBkLT52
aWV3OwogfQogCiBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVf
Z2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9VTktO
T1dOKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICByZXR1
cm4gZG93bmxvYWQtPnN0YXRlOworICAgIHJldHVybiBkLT5zdGF0ZTsKIH0KIAogRXdrX1VybF9S
ZXF1ZXN0KiBld2tfZG93bmxvYWRfam9iX3JlcXVlc3RfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3du
bG9hZCwgMCk7CisgICAgRVdLX0QoRXdrX0Rvd25sb2FkX0pvYiwgZG93bmxvYWQpOwogCi0gICAg
aWYgKCFkb3dubG9hZC0+cmVxdWVzdCkgewotICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZG93bmxvYWQtPmRvd25sb2FkUHJveHksIDApOwotICAgICAgICBXS1JldGFpblB0
cjxXS1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVzdChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1
ZXN0OjpjcmVhdGUoZG93bmxvYWQtPmRvd25sb2FkUHJveHktPnJlcXVlc3QoKSkubGVha1JlZigp
KSk7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0Rvd25sb2FkX0pvYio+KGRvd25sb2FkKS0+cmVx
dWVzdCA9IEV3a19VcmxfUmVxdWVzdDo6Y3JlYXRlKHdrVVJMUmVxdWVzdC5nZXQoKSk7CisgICAg
aWYgKCFkLT5yZXF1ZXN0KSB7CisgICAgICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkLT5kb3dubG9hZFByb3h5LCAwKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0
UmVmPiB3a1VSTFJlcXVlc3QoQWRvcHRXSywgdG9BUEkoV2ViVVJMUmVxdWVzdDo6Y3JlYXRlKGQt
PmRvd25sb2FkUHJveHktPnJlcXVlc3QoKSkubGVha1JlZigpKSk7CisgICAgICAgIGQtPnJlcXVl
c3QgPSBFd2tfVXJsX1JlcXVlc3Q6OmNyZWF0ZSh3a1VSTFJlcXVlc3QuZ2V0KCkpOwogICAgIH0K
IAotICAgIHJldHVybiBkb3dubG9hZC0+cmVxdWVzdC5nZXQoKTsKKyAgICByZXR1cm4gZC0+cmVx
dWVzdC5nZXQoKTsKIH0KIAogRXdrX1VybF9SZXNwb25zZSogZXdrX2Rvd25sb2FkX2pvYl9yZXNw
b25zZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93
bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnJlc3BvbnNlLmdl
dCgpOworICAgIHJldHVybiBkLT5yZXNwb25zZS5nZXQoKTsKIH0KIAogY29uc3QgY2hhciogZXdr
X2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAw
KTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICByZXR1cm4g
ZG93bmxvYWQtPmRlc3RpbmF0aW9uOworICAgIHJldHVybiBkLT5kZXN0aW5hdGlvbjsKIH0KIAog
RWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKIHsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIGZhbHNlKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZGVzdGluYXRpb24sIGZhbHNlKTsKKyAgICBFV0tfRChFd2tfRG93
bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICBkb3dubG9hZC0+ZGVzdGluYXRpb24gPSBkZXN0
aW5hdGlvbjsKKyAgICBkLT5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC0xMjIsMTAzICsxNTMsMTEyIEBAIEVpbmFfQm9vbCBld2tfZG93bmxvYWRf
am9iX2Rlc3RpbmF0aW9uX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgY29uc3QgY2hh
CiBjb25zdCBjaGFyICpld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoY29u
c3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBk
b3dubG9hZCk7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnN1Z2dlc3RlZEZpbGVuYW1lOworICAg
IHJldHVybiBkLT5zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19kb3dubG9h
ZF9qb2JfY2FuY2VsKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgZmFsc2UpOworICAg
IEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZC0+ZG93bmxvYWRQcm94eSwgZmFsc2UpOwogCi0gICAgaWYgKGRvd25s
b2FkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQorICAgIGlm
IChkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBkb3dubG9hZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfSk9C
X1NUQVRFX0NBTkNFTExJTkc7Ci0gICAgZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmNhbmNlbCgp
OworICAgIGQtPnN0YXRlID0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMSU5HOworICAg
IGQtPmRvd25sb2FkUHJveHktPmNhbmNlbCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBkb3Vi
bGUgZXdrX2Rvd25sb2FkX2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV3a19Eb3du
bG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3dubG9hZCwgMCk7CisgICAgRVdLX0QoRXdrX0Rvd25sb2FkX0pvYiwgZG93bmxvYWQpOwog
Ci0gICAgaWYgKCFkb3dubG9hZC0+cmVzcG9uc2UpCisgICAgaWYgKCFkLT5yZXNwb25zZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGgg
PSBld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2Uu
Z2V0KCkpOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxf
cmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGQtPnJlc3BvbnNlLmdldCgpKTsKICAgICBpZiAo
IWNvbnRlbnRMZW5ndGgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGRvdWJsZT4oZG93bmxvYWQtPmRvd25sb2FkZWQpIC8gY29udGVudExlbmd0aDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihkLT5kb3dubG9hZGVkKSAvIGNvbnRlbnRMZW5ndGg7
CiB9CiAKIGRvdWJsZSBld2tfZG93bmxvYWRfam9iX2VsYXBzZWRfdGltZV9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9h
ZCk7CiAKICAgICAvLyBEb3dubG9hZCBoYXMgbm90IHN0YXJ0ZWQgeWV0LgotICAgIGlmIChkb3du
bG9hZC0+c3RhcnRUaW1lIDwgMCkKKyAgICBpZiAoZC0+c3RhcnRUaW1lIDwgMCkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAvLyBEb3dubG9hZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBl
bGFwc2VkIGJldHdlZW4gdGhlCiAgICAgLy8gZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZl
bnQuCi0gICAgaWYgKGRvd25sb2FkLT5lbmRUaW1lID49IDApCi0gICAgICAgIHJldHVybiBkb3du
bG9hZC0+ZW5kVGltZSAtIGRvd25sb2FkLT5zdGFydFRpbWU7CisgICAgaWYgKGQtPmVuZFRpbWUg
Pj0gMCkKKyAgICAgICAgcmV0dXJuIGQtPmVuZFRpbWUgLSBkLT5zdGFydFRpbWU7CiAKICAgICAv
LyBEb3dubG9hZCBpcyBzdGlsbCBnb2luZy4KLSAgICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAt
IGRvd25sb2FkLT5zdGFydFRpbWU7CisgICAgcmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCkgLSBkLT5z
dGFydFRpbWU7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBTZXRzIHRoZSBVUkwgQGEgcmVz
cG9uc2UgZm9yIHRoaXMgQGEgZG93bmxvYWQuCiAgKi8KLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9y
ZXNwb25zZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIFBhc3NSZWZQdHI8RXdrX1Vy
bF9SZXNwb25zZT4gcmVzcG9uc2UpCitTdHJpbmcgRXdrX0Rvd25sb2FkX0pvYjo6ZGVzdGluYXRp
b24oKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihyZXNwb25zZSk7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoZC0+ZGVzdGluYXRpb24pOworfQogCi0gICAgZG93bmxvYWQtPnJlc3Bv
bnNlID0gcmVzcG9uc2U7CisvKioKKyAqIEBpbnRlcm5hbAorICogU2V0cyB0aGUgVVJMIEBhIHJl
c3BvbnNlIGZvciB0aGlzIEBhIGRvd25sb2FkLgorICovCit2b2lkIEV3a19Eb3dubG9hZF9Kb2I6
OnNldFJlc3BvbnNlKFBhc3NSZWZQdHI8RXdrX1VybF9SZXNwb25zZT4gcmVzcG9uc2UpCit7Cisg
ICAgZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFNl
dHMgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUgZm9yIHRoaXMgQGEgZG93bmxvYWQuCiAgKi8KLXZv
aWQgZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfc2V0KEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3ZvaWQgRXdrX0Rv
d25sb2FkX0pvYjo6c2V0U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7Ci0K
LSAgICBkb3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKKyAg
ICBkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5kYXRhKCk7
CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnQgYSBnaXZlbiBhbW91bnQgb2YgZGF0
YSB3YXMgcmVjZWl2ZWQuCiAgKi8KLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9yZWNlaXZlZF9kYXRh
KEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgpCit2b2lkIEV3a19E
b3dubG9hZF9Kb2I6OmluY3JlbWVudFJlY2VpdmVkRGF0YSh1aW50NjRfdCBsZW5ndGgpCiB7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOwotCi0gICAgZG93bmxvYWQt
PmRvd25sb2FkZWQgKz0gbGVuZ3RoOworICAgIGQtPmRvd25sb2FkZWQgKz0gbGVuZ3RoOwogfQog
CiAvKioKICAqIEBpbnRlcm5hbAogICogU2V0cyB0aGUgc3RhdGUgb2YgdGhlIGRvd25sb2FkLgog
ICovCi12b2lkIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkLCBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKQordm9pZCBFd2tfRG93bmxvYWRf
Sm9iOjpzZXRTdGF0ZShFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKQogewotICAgIGRvd25s
b2FkLT5zdGF0ZSA9IHN0YXRlOwotCi0gICAgLy8gVXBkYXRlIHN0YXJ0IHRpbWUgaWYgdGhlIGRv
d25sb2FkIGhhcyBzdGFydGVkCi0gICAgaWYgKHN0YXRlID09IEVXS19ET1dOTE9BRF9KT0JfU1RB
VEVfRE9XTkxPQURJTkcpCi0gICAgICAgIGRvd25sb2FkLT5zdGFydFRpbWUgPSBlY29yZV90aW1l
X2dldCgpOwotCi0gICAgLy8gVXBkYXRlIGVuZCB0aW1lIGlmIHRoZSBkb3dubG9hZCBoYXMgZmlu
aXNoZWQgKHN1Y2Nlc3NmdWxseSBvciBub3QpCi0gICAgaWYgKHN0YXRlID09IEVXS19ET1dOTE9B
RF9KT0JfU1RBVEVfRkFJTEVECi0gICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9KT0Jf
U1RBVEVfQ0FOQ0VMTEVECi0gICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9KT0JfU1RB
VEVfRklOSVNIRUQpCi0gICAgICAgIGRvd25sb2FkLT5lbmRUaW1lID0gZWNvcmVfdGltZV9nZXQo
KTsKKyAgICBkLT5zdGF0ZSA9IHN0YXRlOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNh
c2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORzoKKyAgICAgICAgZC0+c3RhcnRU
aW1lID0gZWNvcmVfdGltZV9nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFV0tfRE9X
TkxPQURfSk9CX1NUQVRFX0ZBSUxFRDoKKyAgICBjYXNlIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVf
Q0FOQ0VMTEVEOgorICAgIGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRDoKKyAg
ICAgICAgZC0+ZW5kVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaAppbmRleCAwY2FkNWMyLi4x
NTZmMjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWRfam9iLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkX2pvYi5oCkBAIC00Myw3ICs0Myw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgog
Ci0vKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX0Rvd25sb2FkX0pvYl9Kb2IgKi8KKy8q
KiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfRG93bmxvYWRfSm9iICovCiB0eXBlZGVmIHN0
cnVjdCBFd2tfRG93bmxvYWRfSm9iIEV3a19Eb3dubG9hZF9Kb2I7CiAKIC8vLyBEZWZpbmVzIHRo
ZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBkb3dubG9hZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgKaW5k
ZXggNWZhYzQ3ZC4uM2FkNzQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgKQEAgLTI4LDYgKzI4
LDggQEAKIAogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmlu
Zy5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKKyNpbmNsdWRlICJld2tfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdr
X3VybF9yZXNwb25zZV9wcml2YXRlLmgiCiAjaW5jbHVkZSA8RXZhcy5oPgpAQCAtMzcsNDYgKzM5
LDI4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxvYWRQcm94eTsKIH0KIAotLyoq
Ci0gKiBcc3RydWN0ICBFd2tfRG93bmxvYWRfSm9iCi0gKiBAYnJpZWYgICBDb250YWlucyB0aGUg
ZG93bmxvYWQgZGF0YS4KLSAqLwogY2xhc3MgRXdrX0Rvd25sb2FkX0pvYiA6IHB1YmxpYyBSZWZD
b3VudGVkPEV3a19Eb3dubG9hZF9Kb2I+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFd2tf
RG93bmxvYWRfSm9iKTsKIHB1YmxpYzoKLSAgICBXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25s
b2FkUHJveHk7Ci0gICAgRXZhc19PYmplY3QqIHZpZXc7Ci0gICAgRXdrX0Rvd25sb2FkX0pvYl9T
dGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8RXdrX1VybF9SZXF1ZXN0PiByZXF1ZXN0OwotICAgIFJl
ZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZTsKLSAgICBkb3VibGUgc3RhcnRUaW1lOwot
ICAgIGRvdWJsZSBlbmRUaW1lOwotICAgIHVpbnQ2NF90IGRvd25sb2FkZWQ7IC8qKjwgbGVuZ3Ro
IGFscmVhZHkgZG93bmxvYWRlZCAqLwotICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlv
bjsKLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgRVdLX0RF
Q0xBUkVfREFUQShFd2tfRG93bmxvYWRfSm9iKTsKIAorICAgIH5Fd2tfRG93bmxvYWRfSm9iKCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gY3JlYXRlKFdlYktpdDo6
RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tfRG93bmxvYWRfSm9iKGRvd25sb2FkLCBld2tW
aWV3KSk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIEV3a19Eb3dubG9hZF9Kb2IoV2ViS2l0OjpE
b3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCi0gICAgICAgIDog
ZG93bmxvYWRQcm94eShkb3dubG9hZCkKLSAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCi0gICAgICAg
ICwgc3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKLSAgICAgICAgLCBz
dGFydFRpbWUoLTEpCi0gICAgICAgICwgZW5kVGltZSgtMSkKLSAgICAgICAgLCBkb3dubG9hZGVk
KDApCi0gICAgeyB9Ci19OworICAgIHVpbnQ2NF90IGlkKCkgY29uc3Q7CisgICAgRXZhc19PYmpl
Y3QqIHZpZXcoKSBjb25zdDsKKyAgICBTdHJpbmcgZGVzdGluYXRpb24oKSBjb25zdDsKIAotdHlw
ZWRlZiBzdHJ1Y3QgRXdrX0Vycm9yIEV3a19FcnJvcjsKKyAgICB2b2lkIHNldFN0YXRlKEV3a19E
b3dubG9hZF9Kb2JfU3RhdGUpOworICAgIHZvaWQgaW5jcmVtZW50UmVjZWl2ZWREYXRhKHVpbnQ2
NF90IGxlbmd0aCk7CisgICAgdm9pZCBzZXRSZXNwb25zZShQYXNzUmVmUHRyPEV3a19VcmxfUmVz
cG9uc2U+KTsKKyAgICB2b2lkIHNldFN1Z2dlc3RlZEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUpOwogCi11aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25z
dCBFd2tfRG93bmxvYWRfSm9iKik7Ci1FdmFzX09iamVjdCogZXdrX2Rvd25sb2FkX2pvYl92aWV3
X2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKik7Ci12b2lkIGV3a19kb3dubG9hZF9qb2Jfc3Rh
dGVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBFd2tfRG93bmxvYWRfSm9iX1N0YXRlKTsKLXZvaWQg
ZXdrX2Rvd25sb2FkX2pvYl9yZWNlaXZlZF9kYXRhKEV3a19Eb3dubG9hZF9Kb2IqLCB1aW50NjRf
dCBsZW5ndGgpOwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxv
YWRfSm9iKiwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPik7Ci12b2lkIGV3a19kb3dubG9h
ZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWRfSm9iKiwgY29uc3QgY2hh
ciogc3VnZ2VzdGVkRmlsZW5hbWUpOworcHJpdmF0ZToKKyAgICBFd2tfRG93bmxvYWRfSm9iKFdl
YktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKK307
CiAKICNlbmRpZiAvLyBld2tfZG93bmxvYWRfam9iX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wcml2YXRlLmgKaW5kZXggNGJkYjI1Yi4uMGEyNWUx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcHJpdmF0ZS5o
CkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIGV3a19wcml2YXRlX2gKIAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAjZGVmaW5lIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oZXdrTmFtZSwgd2ViY29yZU5hbWUpIFwKICAgICAgICAg
Q09NUElMRV9BU1NFUlQoaW50KGV3a05hbWUpID09IGludCh3ZWJjb3JlTmFtZSksIG1pc21hdGNo
aW5nRW51bXMpCkBAIC0zOSw0ICs0MCw4IEBAIGV4dGVybiBpbnQgX2V3a19sb2dfZG9tOwogI2Rl
ZmluZSBJTkZPKC4uLikgRUlOQV9MT0dfRE9NX0lORk8oX2V3a19sb2dfZG9tLCBfX1ZBX0FSR1Nf
XykKICNkZWZpbmUgREJHKC4uLikgRUlOQV9MT0dfRE9NX0RCRyhfZXdrX2xvZ19kb20sIF9fVkFf
QVJHU19fKQogCisvLyBNYWNyb3MgdXNlZCBmb3IgUGltcGwgaWRpb20uCisjZGVmaW5lIEVXS19E
RUNMQVJFX0RBVEEoQ2xhc3NOYW1lKSBzdHJ1Y3QgRGF0YTsgT3duUHRyPERhdGE+IGQKKyNkZWZp
bmUgRVdLX0QoQ2xhc3NOYW1lLCBvYmopIENsYXNzTmFtZTo6RGF0YSogZCA9IG9iai0+ZC5nZXQo
KQorCiAjZW5kaWYgLy8gZXdrX3ByaXZhdGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169395</attachid>
            <date>2012-10-18 05:15:18 -0700</date>
            <delta_ts>2012-10-18 06:25:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>99697_ewk_download_pimpl.patch</filename>
            <type>text/plain</type>
            <size>22534</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiY2QzMTQ0Li5mN2U2MjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMTAtMTggIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4gYW5kIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5j
b20+CisKKyAgICAgICAgW0VGTF1bV0syXSBVc2UgcGltcGwgaWRpb20gZm9yIEV3a19Eb3dubG9h
ZF9Kb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5
Njk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNl
IHBpbXBsIGlkaW9tIGluIEV3a19Eb3dubG9hZF9Kb2Igc28gdGhhdCB0aGUKKyAgICAgICAgY2xh
c3MgbWVtYmVycyBhcmUgbm93IGluIGEgUE9EIHN0cnVjdCBpbiB0aGUgY3BwCisgICAgICAgIGZp
bGUuIFRoaXMgd2F5LCB0aG9zZSBtZW1iZXJzIGNhbm5vdCBiZSBhbHRlcmVkCisgICAgICAgIGZy
b20gb3V0c2lkZSBFd2tfRG93bmxvYWRfSm9iIGJ1dCB0aGUgcHVibGljIEMKKyAgICAgICAgQVBJ
IGNhbiBzdGlsbCBhY2Nlc3MgdGhvc2UgbWVtYmVycyBkaXJlY3RseQorICAgICAgICB3aXRob3V0
IHVzaW5nIGNsYXNzIGdldHRlcnMgb3Igc2V0dGVycy4KKworICAgICAgICBDIGZ1bmN0aW9ucyBp
biB0aGUgcHJpdmF0ZSBoZWFkZXIgYW5kIG5vdyByZXBsYWNlZAorICAgICAgICBieSBDKysgbWV0
aG9kcyBpbiBFd2tfRG93bmxvYWRfSm9iIGNsYXNzIHNvIHRoYXQKKyAgICAgICAgd2UgY2FuIHVz
ZSBDKysgc3R5bGUgYXMgbXVjaCBhcyBwb3NzaWJsZSBpbiBXZWJLaXQyCisgICAgICAgIEVGTCBp
bXBsZW1lbnRhdGlvbiBjb2RlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cDoKKyAgICAgICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9hZGQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHA6CisgICAgICAg
IChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChkaWRS
ZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOgorICAgICAg
ICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoZGlkRmFpbCk6CisgICAgICAgIChkaWRDYW5j
ZWwpOgorICAgICAgICAoZGlkRmluaXNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfZG93bmxvYWRfam9iLmNwcDoKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OkRhdGEpOgor
ICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6RGF0YTo6RGF0YSk6CisgICAgICAgIChFd2tfRG93
bmxvYWRfSm9iOjpFd2tfRG93bmxvYWRfSm9iKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6
On5Fd2tfRG93bmxvYWRfSm9iKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmlkKToKKyAg
ICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnZpZXcpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pv
Yl9zdGF0ZV9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9yZXF1ZXN0X2dldCk6Cisg
ICAgICAgIChld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX2dldCk6CisgICAgICAgIChld2tfZG93
bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2Rl
c3RpbmF0aW9uX3NldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxl
bmFtZV9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9jYW5jZWwpOgorICAgICAgICAo
ZXdrX2Rvd25sb2FkX2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKGV3a19k
b3dubG9hZF9qb2JfZWxhcHNlZF90aW1lX2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9i
OjpkZXN0aW5hdGlvbik6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRSZXNwb25zZSk6
CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRTdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAg
ICAgIChFd2tfRG93bmxvYWRfSm9iOjppbmNyZW1lbnRSZWNlaXZlZERhdGEpOgorICAgICAgICAo
RXdrX0Rvd25sb2FkX0pvYjo6c2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZF9qb2IuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWRfam9iX3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wcml2YXRlLmg6CisKIDIwMTItMTAtMTggIEJ5dW5n
d29vIExlZSAgPGJ3ODAubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtXSzJdIFVwZGF0ZSB0
ZXN0IGV4cGVjdGF0aW9uIGZvciB0aGUgcHl0aG9uIG1lc3NhZ2UgdGVzdCBhZnRlciByMTMxNzAw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1w
bC5jcHAKaW5kZXggMGNhNzU2OS4uZTZkYmFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzcsNyArMzcsNiBAQAog
I2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNp
bmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pv
Yi5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGI3NjE3ZGEuLmRj
YWRiNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRl
LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRl
LmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJl
d2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a19wcml2YXRlLmgiCkBAIC0yMDUsNyArMjA0LDcgQEAgdm9pZCBld2tfY29udGV4dF9kb3dubG9h
ZF9qb2JfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfRG93bmxvYWRfSm9iKiBld2sK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihld2tEb3dubG9hZCk7CiAKLSAgICB1aW50NjRfdCBkb3dubG9h
ZElkID0gZXdrX2Rvd25sb2FkX2pvYl9pZF9nZXQoZXdrRG93bmxvYWQpOworICAgIHVpbnQ2NF90
IGRvd25sb2FkSWQgPSBld2tEb3dubG9hZC0+aWQoKTsKICAgICBpZiAoZXdrQ29udGV4dC0+ZG93
bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25s
b2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCmluZGV4IDA4OGJkNmEuLjU1NzMzMTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2Fk
X2NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHRfZG93bmxvYWRfY2xpZW50LmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIldL
U3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUu
aCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX2Rvd25s
b2FkX2pvYi5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a19lcnJvcl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgpA
QCAtNTMsMTQgKzUyLDE0IEBAIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvCiAgICAgRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29u
dGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAg
IEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxl
bmFtZV9zZXQoZG93bmxvYWQsIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGRvd25sb2FkLT5zZXRTdWdnZXN0ZWRGaWxlTmFtZSh0b0ltcGwoZmlsZW5hbWUp
LT5zdHJpbmcoKSk7CiAKICAgICAvLyBXZSBzZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFsIG9u
IHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2UgaGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UKICAg
ICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUuCi0gICAgZXdrX3ZpZXdfZG93bmxvYWRf
am9iX3JlcXVlc3RlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25sb2FkKSwgZG93bmxv
YWQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9yZXF1ZXN0ZWQoZG93bmxvYWQtPnZpZXco
KSwgZG93bmxvYWQpOwogCiAgICAgLy8gRG93bmxvYWRTb3VwIGV4cGVjdHMgdGhlIGRlc3RpbmF0
aW9uIHRvIGJlIGEgVVJMLgotICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IFN0cmluZygiZmlsZTov
LyIpICsgU3RyaW5nOjpmcm9tVVRGOChld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldChk
b3dubG9hZCkpOworICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IFN0cmluZygiZmlsZTovLyIpICsg
ZG93bmxvYWQtPmRlc3RpbmF0aW9uKCk7CiAKICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoZGVzdGluYXRpb24udXRmOCgpLmRhdGEoKSk7CiB9CkBAIC02OSw3ICs2OCw3
IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgV0tVUkxSZXNwCiB7CiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJ
bmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3du
bG9hZCk7Ci0gICAgZXdrX2Rvd25sb2FkX2pvYl9yZXNwb25zZV9zZXQoZG93bmxvYWQsIEV3a19V
cmxfUmVzcG9uc2U6OmNyZWF0ZSh3a1Jlc3BvbnNlKSk7CisgICAgZG93bmxvYWQtPnNldFJlc3Bv
bnNlKEV3a19VcmxfUmVzcG9uc2U6OmNyZWF0ZSh3a1Jlc3BvbnNlKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rv
d25sb2FkLCBXS1N0cmluZ1JlZiAvKnBhdGgqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAg
LTc3LDQ3ICs3Niw0OSBAQCBzdGF0aWMgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRl
eHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbgogICAgIEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRl
eHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBB
U1NFUlQoZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoZG93bmxv
YWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpOworICAgIGRvd25sb2FkLT5z
ZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKTsKIH0KIAogc3RhdGlj
IHZvaWQgZGlkUmVjZWl2ZURhdGEoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxv
YWQsIHVpbnQ2NF90IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9F
d2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7
CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2Rh
dGEoZG93bmxvYWQsIGxlbmd0aCk7CisgICAgZG93bmxvYWQtPmluY3JlbWVudFJlY2VpdmVkRGF0
YShsZW5ndGgpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tEb3du
bG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkICpjbGllbnRJ
bmZvKQorc3RhdGljIHZvaWQgZGlkRmFpbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tE
b3dubG9hZCwgV0tFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAg
ICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7
CiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9q
b2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CiAgICAgQVNTRVJU
KGRvd25sb2FkKTsKIAorICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NU
QVRFX0ZBSUxFRCk7CisKICAgICBPd25QdHI8RXdrX0Vycm9yPiBld2tFcnJvciA9IEV3a19FcnJv
cjo6Y3JlYXRlKGVycm9yKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9h
ZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQpOwotICAgIGV3a192aWV3X2Rvd25sb2Fk
X2pvYl9mYWlsZWQoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2Fk
LCBld2tFcnJvci5nZXQoKSk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChkb3du
bG9hZC0+dmlldygpLCBkb3dubG9hZCwgZXdrRXJyb3IuZ2V0KCkpOwogICAgIGV3a19jb250ZXh0
X2Rvd25sb2FkX2pvYl9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElk
KTsKIH0KIAotc3RhdGljIHZvaWQgZGlkQ2FuY2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlkQ2Fu
Y2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9h
ZCktPmRvd25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19j
b250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9h
ZElkKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0
ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsKLSAgICBl
d2tfdmlld19kb3dubG9hZF9qb2JfY2FuY2VsbGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQo
ZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9B
RF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsKKworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5j
ZWxsZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQpOwogICAgIGV3a19jb250ZXh0X2Rvd25s
b2FkX2pvYl9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKIH0K
IAotc3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rv
d25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlkRmluaXNoKFdL
Q29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRv
d25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0
X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsK
ICAgICBBU1NFUlQoZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQo
ZG93bmxvYWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRklOSVNIRUQpOwotICAgIGV3a192aWV3
X2Rvd25sb2FkX2pvYl9maW5pc2hlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25sb2Fk
KSwgZG93bmxvYWQpOworICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NU
QVRFX0ZJTklTSEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQoZG93bmxv
YWQtPnZpZXcoKSwgZG93bmxvYWQpOwogICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcApp
bmRleCA0NmExOThkLi44MTVhNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcApAQCAtMzIsOSArMzIsNDIgQEAKICNp
bmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2
YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK3N0cnVjdCBFd2tfRG93bmxvYWRfSm9iX0Rh
dGEgeworICAgIEVXS19ERUNMQVJFX0RBVEFfT1dORVIoRXdrX0Rvd25sb2FkX0pvYik7CisKKyAg
ICBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5OworICAgIEV2YXNfT2JqZWN0KiB2aWV3Owor
ICAgIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGU7CisgICAgUmVmUHRyPEV3a19VcmxfUmVx
dWVzdD4gcmVxdWVzdDsKKyAgICBSZWZQdHI8RXdrX1VybF9SZXNwb25zZT4gcmVzcG9uc2U7Cisg
ICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBkb3VibGUgZW5kVGltZTsKKyAgICB1aW50NjRfdCBk
b3dubG9hZGVkOyAvLyBsZW5ndGggYWxyZWFkeSBkb3dubG9hZGVkCisgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIGRlc3RpbmF0aW9uOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdWdnZXN0ZWRGaWxl
bmFtZTsKKworICAgIEV3a19Eb3dubG9hZF9Kb2JfRGF0YShEb3dubG9hZFByb3h5KiBkb3dubG9h
ZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgICAgIDogZG93bmxvYWRQcm94eShkb3dubG9h
ZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisgICAgICAgICwgc3RhdGUoRVdLX0RPV05MT0FE
X0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAgICAgLCBzdGFydFRpbWUoLTEpCisgICAgICAg
ICwgZW5kVGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDApCisgICAgeyB9Cit9OworCitF
d2tfRG93bmxvYWRfSm9iOjpFd2tfRG93bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSog
ZG93bmxvYWQsIEV2YXNfT2JqZWN0KiB2aWV3KQorICAgIDogZChhZG9wdFB0cihuZXcgRXdrX0Rv
d25sb2FkX0pvYl9EYXRhKGRvd25sb2FkLCB2aWV3KSkpCit7IH0KKworRXdrX0Rvd25sb2FkX0pv
Yjo6fkV3a19Eb3dubG9hZF9Kb2IoKQoreworfQorCiBFd2tfRG93bmxvYWRfSm9iKiBld2tfZG93
bmxvYWRfam9iX3JlZihFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwpAQCAtNTUsMTIgKzg4LDkgQEAg
dm9pZCBld2tfZG93bmxvYWRfam9iX3VucmVmKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQog
ICogQGludGVybmFsCiAgKiBRdWVyaWVzIHRoZSBpZGVudGlmaWVyIGZvciB0aGlzIGRvd25sb2Fk
CiAgKi8KLXVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkKQordWludDY0X3QgRXdrX0Rvd25sb2FkX0pvYjo6aWQoKSBjb25zdAog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCAw
KTsKLQotICAgIHJldHVybiBkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOwor
ICAgIHJldHVybiBkLT5kb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCk7CiB9CiAKIC8qKgpAQCAt
NjgsNTMgKzk4LDU2IEBAIHVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3
a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogICogUmV0dXJucyB0aGUgdmlldyB0aGlzIGRvd25s
b2FkIGlzIGF0dGFjaGVkIHRvLgogICogVGhlIHZpZXcgaXMgbmVlZGVkIHRvIHNlbmQgbm90aWZp
Y2F0aW9uIHNpZ25hbHMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfam9iX3ZpZXdf
Z2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQorRXZhc19PYmplY3QqIEV3a19E
b3dubG9hZF9Kb2I6OnZpZXcoKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQtPnZpZXc7CisgICAg
cmV0dXJuIGQtPnZpZXc7CiB9CiAKIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgZXdrX2Rvd25sb2Fk
X2pvYl9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9C
X1NUQVRFX1VOS05PV04pOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsK
IAotICAgIHJldHVybiBkb3dubG9hZC0+c3RhdGU7CisgICAgcmV0dXJuIGQtPnN0YXRlOwogfQog
CiBFd2tfVXJsX1JlcXVlc3QqIGV3a19kb3dubG9hZF9qb2JfcmVxdWVzdF9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9h
ZCk7CiAKLSAgICBpZiAoIWRvd25sb2FkLT5yZXF1ZXN0KSB7Ci0gICAgICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVxdWVzdFJlZj4gd2tVUkxSZXF1ZXN0KEFkb3B0V0ssIHRvQVBJ
KFdlYlVSTFJlcXVlc3Q6OmNyZWF0ZShkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgp
KS5sZWFrUmVmKCkpKTsKLSAgICAgICAgY29uc3RfY2FzdDxFd2tfRG93bmxvYWRfSm9iKj4oZG93
bmxvYWQpLT5yZXF1ZXN0ID0gRXdrX1VybF9SZXF1ZXN0OjpjcmVhdGUod2tVUkxSZXF1ZXN0Lmdl
dCgpKTsKKyAgICBpZiAoIWQtPnJlcXVlc3QpIHsKKyAgICAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGQtPmRvd25sb2FkUHJveHksIDApOworICAgICAgICBXS1JldGFpblB0cjxX
S1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVzdChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0
OjpjcmVhdGUoZC0+ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKKyAgICAg
ICAgZC0+cmVxdWVzdCA9IEV3a19VcmxfUmVxdWVzdDo6Y3JlYXRlKHdrVVJMUmVxdWVzdC5nZXQo
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvd25sb2FkLT5yZXF1ZXN0LmdldCgpOworICAgIHJl
dHVybiBkLT5yZXF1ZXN0LmdldCgpOwogfQogCiBFd2tfVXJsX1Jlc3BvbnNlKiBld2tfZG93bmxv
YWRfam9iX3Jlc3BvbnNlX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVX
S19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+
cmVzcG9uc2UuZ2V0KCk7CisgICAgcmV0dXJuIGQtPnJlc3BvbnNlLmdldCgpOwogfQogCiBjb25z
dCBjaGFyKiBld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldChjb25zdCBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAot
ICAgIHJldHVybiBkb3dubG9hZC0+ZGVzdGluYXRpb247CisgICAgcmV0dXJuIGQtPmRlc3RpbmF0
aW9uOwogfQogCiBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkZXN0aW5hdGlvbiwgZmFsc2UpOworICAgIEVX
S19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIGRvd25sb2FkLT5kZXN0aW5h
dGlvbiA9IGRlc3RpbmF0aW9uOworICAgIGQtPmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMiwxMDMgKzE1NSwxMTIgQEAgRWluYV9Cb29sIGV3
a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2Fk
LCBjb25zdCBjaGEKIGNvbnN0IGNoYXIgKmV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVu
YW1lX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3du
bG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+c3VnZ2VzdGVkRmls
ZW5hbWU7CisgICAgcmV0dXJuIGQtPnN1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX2Rvd25sb2FkX2pvYl9jYW5jZWwoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBmYWxzZSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCBm
YWxzZSk7CisgICAgRVdLX0QoRXdrX0Rvd25sb2FkX0pvYiwgZG93bmxvYWQpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkLT5kb3dubG9hZFByb3h5LCBmYWxzZSk7CiAKLSAg
ICBpZiAoZG93bmxvYWQtPnN0YXRlICE9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJ
TkcpCisgICAgaWYgKGQtPnN0YXRlICE9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJ
TkcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRvd25sb2FkLT5zdGF0ZSA9IEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTElORzsKLSAgICBkb3dubG9hZC0+ZG93bmxvYWRQcm94
eS0+Y2FuY2VsKCk7CisgICAgZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNF
TExJTkc7CisgICAgZC0+ZG93bmxvYWRQcm94eS0+Y2FuY2VsKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGRvdWJsZSBld2tfZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQoY29u
c3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBk
b3dubG9hZCk7CiAKLSAgICBpZiAoIWRvd25sb2FkLT5yZXNwb25zZSkKKyAgICBpZiAoIWQtPnJl
c3BvbnNlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29u
dGVudExlbmd0aCA9IGV3a191cmxfcmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGRvd25sb2Fk
LT5yZXNwb25zZS5nZXQoKSk7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyBjb250ZW50TGVuZ3Ro
ID0gZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9nZXQoZC0+cmVzcG9uc2UuZ2V0KCkp
OwogICAgIGlmICghY29udGVudExlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBjb250ZW50TGVu
Z3RoOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGQtPmRvd25sb2FkZWQpIC8gY29u
dGVudExlbmd0aDsKIH0KIAogZG91YmxlIGV3a19kb3dubG9hZF9qb2JfZWxhcHNlZF90aW1lX2dl
dChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9K
b2IsIGRvd25sb2FkKTsKIAogICAgIC8vIERvd25sb2FkIGhhcyBub3Qgc3RhcnRlZCB5ZXQuCi0g
ICAgaWYgKGRvd25sb2FkLT5zdGFydFRpbWUgPCAwKQorICAgIGlmIChkLT5zdGFydFRpbWUgPCAw
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERvd25sb2FkIGhhZCBlbmRlZCwgcmV0dXJu
IHRoZSB0aW1lIGVsYXBzZWQgYmV0d2VlbiB0aGUKICAgICAvLyBkb3dubG9hZCBzdGFydCBhbmQg
dGhlIGVuZCBldmVudC4KLSAgICBpZiAoZG93bmxvYWQtPmVuZFRpbWUgPj0gMCkKLSAgICAgICAg
cmV0dXJuIGRvd25sb2FkLT5lbmRUaW1lIC0gZG93bmxvYWQtPnN0YXJ0VGltZTsKKyAgICBpZiAo
ZC0+ZW5kVGltZSA+PSAwKQorICAgICAgICByZXR1cm4gZC0+ZW5kVGltZSAtIGQtPnN0YXJ0VGlt
ZTsKIAogICAgIC8vIERvd25sb2FkIGlzIHN0aWxsIGdvaW5nLgotICAgIHJldHVybiBlY29yZV90
aW1lX2dldCgpIC0gZG93bmxvYWQtPnN0YXJ0VGltZTsKKyAgICByZXR1cm4gZWNvcmVfdGltZV9n
ZXQoKSAtIGQtPnN0YXJ0VGltZTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFNldHMgdGhl
IFVSTCBAYSByZXNwb25zZSBmb3IgdGhpcyBAYSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93
bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgUGFzc1Jl
ZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZSkKK1N0cmluZyBFd2tfRG93bmxvYWRfSm9i
OjpkZXN0aW5hdGlvbigpIGNvbnN0CiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
ZG93bmxvYWQpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHJlc3BvbnNlKTsKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkLT5kZXN0aW5hdGlvbik7Cit9CiAKLSAgICBkb3du
bG9hZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKKy8qKgorICogQGludGVybmFsCisgKiBTZXRzIHRo
ZSBVUkwgQGEgcmVzcG9uc2UgZm9yIHRoaXMgQGEgZG93bmxvYWQuCisgKi8KK3ZvaWQgRXdrX0Rv
d25sb2FkX0pvYjo6c2V0UmVzcG9uc2UoUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNw
b25zZSkKK3sKKyAgICBkLT5yZXNwb25zZSA9IHJlc3BvbnNlOwogfQogCiAvKioKICAqIEBpbnRl
cm5hbAogICogU2V0cyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBAYSBkb3dubG9h
ZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQoRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQor
dm9pZCBFd2tfRG93bmxvYWRfSm9iOjpzZXRTdWdnZXN0ZWRGaWxlTmFtZShjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRv
d25sb2FkKTsKLQotICAgIGRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZp
bGVuYW1lOworICAgIGQtPnN1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUudXRm
OCgpLmRhdGEoKTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydCBhIGdpdmVuIGFt
b3VudCBvZiBkYXRhIHdhcyByZWNlaXZlZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jl
Y2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkK
K3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6aW5jcmVtZW50UmVjZWl2ZWREYXRhKHVpbnQ2NF90IGxl
bmd0aCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7Ci0KLSAg
ICBkb3dubG9hZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7CisgICAgZC0+ZG93bmxvYWRlZCArPSBs
ZW5ndGg7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUg
ZG93bmxvYWQuCiAgKi8KLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQsIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGUpCit2b2lkIEV3
a19Eb3dubG9hZF9Kb2I6OnNldFN0YXRlKEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGUpCiB7
Ci0gICAgZG93bmxvYWQtPnN0YXRlID0gc3RhdGU7Ci0KLSAgICAvLyBVcGRhdGUgc3RhcnQgdGlt
ZSBpZiB0aGUgZG93bmxvYWQgaGFzIHN0YXJ0ZWQKLSAgICBpZiAoc3RhdGUgPT0gRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9ET1dOTE9BRElORykKLSAgICAgICAgZG93bmxvYWQtPnN0YXJ0VGltZSA9
IGVjb3JlX3RpbWVfZ2V0KCk7Ci0KLSAgICAvLyBVcGRhdGUgZW5kIHRpbWUgaWYgdGhlIGRvd25s
b2FkIGhhcyBmaW5pc2hlZCAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkKLSAgICBpZiAoc3RhdGUgPT0g
RVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQKLSAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RP
V05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQKLSAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9GSU5JU0hFRCkKLSAgICAgICAgZG93bmxvYWQtPmVuZFRpbWUgPSBlY29y
ZV90aW1lX2dldCgpOworICAgIGQtPnN0YXRlID0gc3RhdGU7CisKKyAgICBzd2l0Y2ggKHN0YXRl
KSB7CisgICAgY2FzZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HOgorICAgICAg
ICBkLT5zdGFydFRpbWUgPSBlY29yZV90aW1lX2dldCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEOgorICAgIGNhc2UgRVdLX0RPV05MT0FE
X0pPQl9TVEFURV9DQU5DRUxMRUQ6CisgICAgY2FzZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJ
TklTSEVEOgorICAgICAgICBkLT5lbmRUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oCmluZGV4
IDBjYWQ1YzIuLjE1NmYyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmgKQEAgLTQzLDcgKzQzLDcgQEAKIGV4dGVybiAiQyIg
ewogI2VuZGlmCiAKLS8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfRG93bmxvYWRfSm9i
X0pvYiAqLworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19Eb3dubG9hZF9Kb2IgKi8K
IHR5cGVkZWYgc3RydWN0IEV3a19Eb3dubG9hZF9Kb2IgRXdrX0Rvd25sb2FkX0pvYjsKIAogLy8v
IERlZmluZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBvZiBhIGRvd25sb2FkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3By
aXZhdGUuaAppbmRleCA1ZmFjNDdkLi4zNmVjYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaApA
QCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSAiV0tFaW5h
U2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYi5oIgorI2luY2x1ZGUg
ImV3a19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKICNp
bmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFdmFzLmg+CkBA
IC0zNyw0NiArMzksMjcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5
OwogfQogCi0vKioKLSAqIFxzdHJ1Y3QgIEV3a19Eb3dubG9hZF9Kb2IKLSAqIEBicmllZiAgIENv
bnRhaW5zIHRoZSBkb3dubG9hZCBkYXRhLgotICovCiBjbGFzcyBFd2tfRG93bmxvYWRfSm9iIDog
cHVibGljIFJlZkNvdW50ZWQ8RXdrX0Rvd25sb2FkX0pvYj4geworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEV3a19Eb3dubG9hZF9Kb2IpOworICAgIEVXS19ERUNMQVJFX0RBVEEoRXdrX0Rvd25s
b2FkX0pvYik7CiBwdWJsaWM6Ci0gICAgV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZFBy
b3h5OwotICAgIEV2YXNfT2JqZWN0KiB2aWV3OwotICAgIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUg
c3RhdGU7Ci0gICAgUmVmUHRyPEV3a19VcmxfUmVxdWVzdD4gcmVxdWVzdDsKLSAgICBSZWZQdHI8
RXdrX1VybF9SZXNwb25zZT4gcmVzcG9uc2U7Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBk
b3VibGUgZW5kVGltZTsKLSAgICB1aW50NjRfdCBkb3dubG9hZGVkOyAvKio8IGxlbmd0aCBhbHJl
YWR5IGRvd25sb2FkZWQgKi8KLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb247Ci0g
ICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lOwotCisgICAgfkV3a19Eb3du
bG9hZF9Kb2IoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tfRG93bmxvYWRfSm9iPiBjcmVh
dGUoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a19Eb3dubG9hZF9Kb2IoZG93
bmxvYWQsIGV3a1ZpZXcpKTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgRXdrX0Rvd25sb2FkX0pv
YihXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykK
LSAgICAgICAgOiBkb3dubG9hZFByb3h5KGRvd25sb2FkKQotICAgICAgICAsIHZpZXcoZXdrVmll
dykKLSAgICAgICAgLCBzdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX05PVF9TVEFSVEVEKQot
ICAgICAgICAsIHN0YXJ0VGltZSgtMSkKLSAgICAgICAgLCBlbmRUaW1lKC0xKQotICAgICAgICAs
IGRvd25sb2FkZWQoMCkKLSAgICB7IH0KLX07CisgICAgdWludDY0X3QgaWQoKSBjb25zdDsKKyAg
ICBFdmFzX09iamVjdCogdmlldygpIGNvbnN0OworICAgIFN0cmluZyBkZXN0aW5hdGlvbigpIGNv
bnN0OwogCi10eXBlZGVmIHN0cnVjdCBFd2tfRXJyb3IgRXdrX0Vycm9yOworICAgIHZvaWQgc2V0
U3RhdGUoRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSk7CisgICAgdm9pZCBpbmNyZW1lbnRSZWNlaXZl
ZERhdGEodWludDY0X3QgbGVuZ3RoKTsKKyAgICB2b2lkIHNldFJlc3BvbnNlKFBhc3NSZWZQdHI8
RXdrX1VybF9SZXNwb25zZT4pOworICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSk7CiAKLXVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2Jf
aWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqKTsKLUV2YXNfT2JqZWN0KiBld2tfZG93bmxv
YWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqKTsKLXZvaWQgZXdrX2Rvd25s
b2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiosIEV3a19Eb3dubG9hZF9Kb2JfU3Rh
dGUpOwotdm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pv
YiosIHVpbnQ2NF90IGxlbmd0aCk7Ci12b2lkIGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2Vfc2V0
KEV3a19Eb3dubG9hZF9Kb2IqLCBQYXNzUmVmUHRyPEV3a19VcmxfUmVzcG9uc2U+KTsKLXZvaWQg
ZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfc2V0KEV3a19Eb3dubG9hZF9Kb2Iq
LCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSk7Citwcml2YXRlOgorICAgIEV3a19Eb3du
bG9hZF9Kb2IoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3
a1ZpZXcpOworfTsKIAogI2VuZGlmIC8vIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaAppbmRleCA0YmRi
MjViLi43MGM2NDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19wcml2YXRlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgZXdrX3ByaXZhdGVfaAogCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKICNk
ZWZpbmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShld2tOYW1lLCB3ZWJjb3JlTmFtZSkg
XAogICAgICAgICBDT01QSUxFX0FTU0VSVChpbnQoZXdrTmFtZSkgPT0gaW50KHdlYmNvcmVOYW1l
KSwgbWlzbWF0Y2hpbmdFbnVtcykKQEAgLTM5LDQgKzQwLDkgQEAgZXh0ZXJuIGludCBfZXdrX2xv
Z19kb207CiAjZGVmaW5lIElORk8oLi4uKSBFSU5BX0xPR19ET01fSU5GTyhfZXdrX2xvZ19kb20s
IF9fVkFfQVJHU19fKQogI2RlZmluZSBEQkcoLi4uKSBFSU5BX0xPR19ET01fREJHKF9ld2tfbG9n
X2RvbSwgX19WQV9BUkdTX18pCiAKKy8vIE1hY3JvcyB1c2VkIGZvciBQaW1wbCBpZGlvbS4KKyNk
ZWZpbmUgRVdLX0RFQ0xBUkVfREFUQShDbGFzc05hbWUpIE93blB0cjxzdHJ1Y3QgQ2xhc3NOYW1l
IyNfRGF0YT4gZDsgZnJpZW5kIHN0cnVjdCBDbGFzc05hbWUjI19EYXRhCisjZGVmaW5lIEVXS19E
RUNMQVJFX0RBVEFfT1dORVIoQ2xhc3NOYW1lKSBzdGF0aWMgaW5saW5lIENsYXNzTmFtZSMjX0Rh
dGEqIGRfcHRyKGNvbnN0IENsYXNzTmFtZSogb2JqKSB7IHJldHVybiBjb25zdF9jYXN0PENsYXNz
TmFtZSo+KG9iaiktPmQuZ2V0KCk7IH0KKyNkZWZpbmUgRVdLX0QoQ2xhc3NOYW1lLCBvYmopIENs
YXNzTmFtZSMjX0RhdGEqIGQgPSBDbGFzc05hbWUjI19EYXRhOjpkX3B0cihvYmopCisKICNlbmRp
ZiAvLyBld2tfcHJpdmF0ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169402</attachid>
            <date>2012-10-18 06:25:47 -0700</date>
            <delta_ts>2012-10-19 03:32:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>99697_ewk_download_pimpl.patch</filename>
            <type>text/plain</type>
            <size>22540</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiY2QzMTQ0Li5mN2U2MjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMTAtMTggIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4gYW5kIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5j
b20+CisKKyAgICAgICAgW0VGTF1bV0syXSBVc2UgcGltcGwgaWRpb20gZm9yIEV3a19Eb3dubG9h
ZF9Kb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5
Njk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNl
IHBpbXBsIGlkaW9tIGluIEV3a19Eb3dubG9hZF9Kb2Igc28gdGhhdCB0aGUKKyAgICAgICAgY2xh
c3MgbWVtYmVycyBhcmUgbm93IGluIGEgUE9EIHN0cnVjdCBpbiB0aGUgY3BwCisgICAgICAgIGZp
bGUuIFRoaXMgd2F5LCB0aG9zZSBtZW1iZXJzIGNhbm5vdCBiZSBhbHRlcmVkCisgICAgICAgIGZy
b20gb3V0c2lkZSBFd2tfRG93bmxvYWRfSm9iIGJ1dCB0aGUgcHVibGljIEMKKyAgICAgICAgQVBJ
IGNhbiBzdGlsbCBhY2Nlc3MgdGhvc2UgbWVtYmVycyBkaXJlY3RseQorICAgICAgICB3aXRob3V0
IHVzaW5nIGNsYXNzIGdldHRlcnMgb3Igc2V0dGVycy4KKworICAgICAgICBDIGZ1bmN0aW9ucyBp
biB0aGUgcHJpdmF0ZSBoZWFkZXIgYW5kIG5vdyByZXBsYWNlZAorICAgICAgICBieSBDKysgbWV0
aG9kcyBpbiBFd2tfRG93bmxvYWRfSm9iIGNsYXNzIHNvIHRoYXQKKyAgICAgICAgd2UgY2FuIHVz
ZSBDKysgc3R5bGUgYXMgbXVjaCBhcyBwb3NzaWJsZSBpbiBXZWJLaXQyCisgICAgICAgIEVGTCBp
bXBsZW1lbnRhdGlvbiBjb2RlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cDoKKyAgICAgICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9hZGQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHA6CisgICAgICAg
IChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChkaWRS
ZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOgorICAgICAg
ICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoZGlkRmFpbCk6CisgICAgICAgIChkaWRDYW5j
ZWwpOgorICAgICAgICAoZGlkRmluaXNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfZG93bmxvYWRfam9iLmNwcDoKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OkRhdGEpOgor
ICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6RGF0YTo6RGF0YSk6CisgICAgICAgIChFd2tfRG93
bmxvYWRfSm9iOjpFd2tfRG93bmxvYWRfSm9iKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6
On5Fd2tfRG93bmxvYWRfSm9iKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmlkKToKKyAg
ICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnZpZXcpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pv
Yl9zdGF0ZV9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9yZXF1ZXN0X2dldCk6Cisg
ICAgICAgIChld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX2dldCk6CisgICAgICAgIChld2tfZG93
bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2Rl
c3RpbmF0aW9uX3NldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxl
bmFtZV9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9jYW5jZWwpOgorICAgICAgICAo
ZXdrX2Rvd25sb2FkX2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKGV3a19k
b3dubG9hZF9qb2JfZWxhcHNlZF90aW1lX2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9i
OjpkZXN0aW5hdGlvbik6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRSZXNwb25zZSk6
CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRTdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAg
ICAgIChFd2tfRG93bmxvYWRfSm9iOjppbmNyZW1lbnRSZWNlaXZlZERhdGEpOgorICAgICAgICAo
RXdrX0Rvd25sb2FkX0pvYjo6c2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZF9qb2IuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWRfam9iX3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wcml2YXRlLmg6CisKIDIwMTItMTAtMTggIEJ5dW5n
d29vIExlZSAgPGJ3ODAubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtXSzJdIFVwZGF0ZSB0
ZXN0IGV4cGVjdGF0aW9uIGZvciB0aGUgcHl0aG9uIG1lc3NhZ2UgdGVzdCBhZnRlciByMTMxNzAw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1w
bC5jcHAKaW5kZXggMGNhNzU2OS4uZTZkYmFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzcsNyArMzcsNiBAQAog
I2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNp
bmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pv
Yi5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGI3NjE3ZGEuLmRj
YWRiNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRl
LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRl
LmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJl
d2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a19wcml2YXRlLmgiCkBAIC0yMDUsNyArMjA0LDcgQEAgdm9pZCBld2tfY29udGV4dF9kb3dubG9h
ZF9qb2JfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfRG93bmxvYWRfSm9iKiBld2sK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihld2tEb3dubG9hZCk7CiAKLSAgICB1aW50NjRfdCBkb3dubG9h
ZElkID0gZXdrX2Rvd25sb2FkX2pvYl9pZF9nZXQoZXdrRG93bmxvYWQpOworICAgIHVpbnQ2NF90
IGRvd25sb2FkSWQgPSBld2tEb3dubG9hZC0+aWQoKTsKICAgICBpZiAoZXdrQ29udGV4dC0+ZG93
bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25s
b2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCmluZGV4IDA4OGJkNmEuLjU1NzMzMTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2Fk
X2NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHRfZG93bmxvYWRfY2xpZW50LmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIldL
U3RyaW5nLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUu
aCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX2Rvd25s
b2FkX2pvYi5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a19lcnJvcl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgpA
QCAtNTMsMTQgKzUyLDE0IEBAIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvCiAgICAgRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29u
dGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAg
IEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxl
bmFtZV9zZXQoZG93bmxvYWQsIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGRvd25sb2FkLT5zZXRTdWdnZXN0ZWRGaWxlTmFtZSh0b0ltcGwoZmlsZW5hbWUp
LT5zdHJpbmcoKSk7CiAKICAgICAvLyBXZSBzZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFsIG9u
IHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2UgaGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UKICAg
ICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUuCi0gICAgZXdrX3ZpZXdfZG93bmxvYWRf
am9iX3JlcXVlc3RlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25sb2FkKSwgZG93bmxv
YWQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9yZXF1ZXN0ZWQoZG93bmxvYWQtPnZpZXco
KSwgZG93bmxvYWQpOwogCiAgICAgLy8gRG93bmxvYWRTb3VwIGV4cGVjdHMgdGhlIGRlc3RpbmF0
aW9uIHRvIGJlIGEgVVJMLgotICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IFN0cmluZygiZmlsZTov
LyIpICsgU3RyaW5nOjpmcm9tVVRGOChld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldChk
b3dubG9hZCkpOworICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IFN0cmluZygiZmlsZTovLyIpICsg
ZG93bmxvYWQtPmRlc3RpbmF0aW9uKCk7CiAKICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoZGVzdGluYXRpb24udXRmOCgpLmRhdGEoKSk7CiB9CkBAIC02OSw3ICs2OCw3
IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgV0tVUkxSZXNwCiB7CiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJ
bmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3du
bG9hZCk7Ci0gICAgZXdrX2Rvd25sb2FkX2pvYl9yZXNwb25zZV9zZXQoZG93bmxvYWQsIEV3a19V
cmxfUmVzcG9uc2U6OmNyZWF0ZSh3a1Jlc3BvbnNlKSk7CisgICAgZG93bmxvYWQtPnNldFJlc3Bv
bnNlKEV3a19VcmxfUmVzcG9uc2U6OmNyZWF0ZSh3a1Jlc3BvbnNlKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rv
d25sb2FkLCBXS1N0cmluZ1JlZiAvKnBhdGgqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAg
LTc3LDQ3ICs3Niw0OSBAQCBzdGF0aWMgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRl
eHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbgogICAgIEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRl
eHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBB
U1NFUlQoZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoZG93bmxv
YWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpOworICAgIGRvd25sb2FkLT5z
ZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKTsKIH0KIAogc3RhdGlj
IHZvaWQgZGlkUmVjZWl2ZURhdGEoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxv
YWQsIHVpbnQ2NF90IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9F
d2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7
CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2Rh
dGEoZG93bmxvYWQsIGxlbmd0aCk7CisgICAgZG93bmxvYWQtPmluY3JlbWVudFJlY2VpdmVkRGF0
YShsZW5ndGgpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tEb3du
bG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkICpjbGllbnRJ
bmZvKQorc3RhdGljIHZvaWQgZGlkRmFpbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tE
b3dubG9hZCwgV0tFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAg
ICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7
CiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9q
b2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CiAgICAgQVNTRVJU
KGRvd25sb2FkKTsKIAorICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NU
QVRFX0ZBSUxFRCk7CisKICAgICBPd25QdHI8RXdrX0Vycm9yPiBld2tFcnJvciA9IEV3a19FcnJv
cjo6Y3JlYXRlKGVycm9yKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9h
ZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQpOwotICAgIGV3a192aWV3X2Rvd25sb2Fk
X2pvYl9mYWlsZWQoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2Fk
LCBld2tFcnJvci5nZXQoKSk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChkb3du
bG9hZC0+dmlldygpLCBkb3dubG9hZCwgZXdrRXJyb3IuZ2V0KCkpOwogICAgIGV3a19jb250ZXh0
X2Rvd25sb2FkX2pvYl9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElk
KTsKIH0KIAotc3RhdGljIHZvaWQgZGlkQ2FuY2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlkQ2Fu
Y2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9h
ZCktPmRvd25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19j
b250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9h
ZElkKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0
ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsKLSAgICBl
d2tfdmlld19kb3dubG9hZF9qb2JfY2FuY2VsbGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQo
ZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9B
RF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsKKworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5j
ZWxsZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQpOwogICAgIGV3a19jb250ZXh0X2Rvd25s
b2FkX2pvYl9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKIH0K
IAotc3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rv
d25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlkRmluaXNoKFdL
Q29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRv
d25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0
X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsK
ICAgICBBU1NFUlQoZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQo
ZG93bmxvYWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRklOSVNIRUQpOwotICAgIGV3a192aWV3
X2Rvd25sb2FkX2pvYl9maW5pc2hlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25sb2Fk
KSwgZG93bmxvYWQpOworICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NU
QVRFX0ZJTklTSEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQoZG93bmxv
YWQtPnZpZXcoKSwgZG93bmxvYWQpOwogICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcApp
bmRleCA0NmExOThkLi44MTVhNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmNwcApAQCAtMzIsOSArMzIsNDIgQEAKICNp
bmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2
YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK3N0cnVjdCBFd2tfRG93bmxvYWRfSm9iX0Rh
dGEgeworICAgIEVXS19ERUNMQVJFX0RBVEFfT1dORVIoRXdrX0Rvd25sb2FkX0pvYik7CisKKyAg
ICBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5OworICAgIEV2YXNfT2JqZWN0KiB2aWV3Owor
ICAgIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGU7CisgICAgUmVmUHRyPEV3a19VcmxfUmVx
dWVzdD4gcmVxdWVzdDsKKyAgICBSZWZQdHI8RXdrX1VybF9SZXNwb25zZT4gcmVzcG9uc2U7Cisg
ICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBkb3VibGUgZW5kVGltZTsKKyAgICB1aW50NjRfdCBk
b3dubG9hZGVkOyAvLyBsZW5ndGggYWxyZWFkeSBkb3dubG9hZGVkCisgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIGRlc3RpbmF0aW9uOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdWdnZXN0ZWRGaWxl
bmFtZTsKKworICAgIEV3a19Eb3dubG9hZF9Kb2JfRGF0YShEb3dubG9hZFByb3h5KiBkb3dubG9h
ZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgICAgIDogZG93bmxvYWRQcm94eShkb3dubG9h
ZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisgICAgICAgICwgc3RhdGUoRVdLX0RPV05MT0FE
X0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAgICAgLCBzdGFydFRpbWUoLTEpCisgICAgICAg
ICwgZW5kVGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDApCisgICAgeyB9Cit9OworCitF
d2tfRG93bmxvYWRfSm9iOjpFd2tfRG93bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSog
ZG93bmxvYWQsIEV2YXNfT2JqZWN0KiB2aWV3KQorICAgIDogZChhZG9wdFB0cihuZXcgRXdrX0Rv
d25sb2FkX0pvYl9EYXRhKGRvd25sb2FkLCB2aWV3KSkpCit7IH0KKworRXdrX0Rvd25sb2FkX0pv
Yjo6fkV3a19Eb3dubG9hZF9Kb2IoKQoreworfQorCiBFd2tfRG93bmxvYWRfSm9iKiBld2tfZG93
bmxvYWRfam9iX3JlZihFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwpAQCAtNTUsMTIgKzg4LDkgQEAg
dm9pZCBld2tfZG93bmxvYWRfam9iX3VucmVmKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQog
ICogQGludGVybmFsCiAgKiBRdWVyaWVzIHRoZSBpZGVudGlmaWVyIGZvciB0aGlzIGRvd25sb2Fk
CiAgKi8KLXVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkKQordWludDY0X3QgRXdrX0Rvd25sb2FkX0pvYjo6aWQoKSBjb25zdAog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCAw
KTsKLQotICAgIHJldHVybiBkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOwor
ICAgIHJldHVybiBkLT5kb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCk7CiB9CiAKIC8qKgpAQCAt
NjgsNTMgKzk4LDU2IEBAIHVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3
a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogICogUmV0dXJucyB0aGUgdmlldyB0aGlzIGRvd25s
b2FkIGlzIGF0dGFjaGVkIHRvLgogICogVGhlIHZpZXcgaXMgbmVlZGVkIHRvIHNlbmQgbm90aWZp
Y2F0aW9uIHNpZ25hbHMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfam9iX3ZpZXdf
Z2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQorRXZhc19PYmplY3QqIEV3a19E
b3dubG9hZF9Kb2I6OnZpZXcoKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQtPnZpZXc7CisgICAg
cmV0dXJuIGQtPnZpZXc7CiB9CiAKIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgZXdrX2Rvd25sb2Fk
X2pvYl9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9C
X1NUQVRFX1VOS05PV04pOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsK
IAotICAgIHJldHVybiBkb3dubG9hZC0+c3RhdGU7CisgICAgcmV0dXJuIGQtPnN0YXRlOwogfQog
CiBFd2tfVXJsX1JlcXVlc3QqIGV3a19kb3dubG9hZF9qb2JfcmVxdWVzdF9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9h
ZCk7CiAKLSAgICBpZiAoIWRvd25sb2FkLT5yZXF1ZXN0KSB7Ci0gICAgICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVxdWVzdFJlZj4gd2tVUkxSZXF1ZXN0KEFkb3B0V0ssIHRvQVBJ
KFdlYlVSTFJlcXVlc3Q6OmNyZWF0ZShkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgp
KS5sZWFrUmVmKCkpKTsKLSAgICAgICAgY29uc3RfY2FzdDxFd2tfRG93bmxvYWRfSm9iKj4oZG93
bmxvYWQpLT5yZXF1ZXN0ID0gRXdrX1VybF9SZXF1ZXN0OjpjcmVhdGUod2tVUkxSZXF1ZXN0Lmdl
dCgpKTsKKyAgICBpZiAoIWQtPnJlcXVlc3QpIHsKKyAgICAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGQtPmRvd25sb2FkUHJveHksIDApOworICAgICAgICBXS1JldGFpblB0cjxX
S1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVzdChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0
OjpjcmVhdGUoZC0+ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKKyAgICAg
ICAgZC0+cmVxdWVzdCA9IEV3a19VcmxfUmVxdWVzdDo6Y3JlYXRlKHdrVVJMUmVxdWVzdC5nZXQo
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvd25sb2FkLT5yZXF1ZXN0LmdldCgpOworICAgIHJl
dHVybiBkLT5yZXF1ZXN0LmdldCgpOwogfQogCiBFd2tfVXJsX1Jlc3BvbnNlKiBld2tfZG93bmxv
YWRfam9iX3Jlc3BvbnNlX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVX
S19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+
cmVzcG9uc2UuZ2V0KCk7CisgICAgcmV0dXJuIGQtPnJlc3BvbnNlLmdldCgpOwogfQogCiBjb25z
dCBjaGFyKiBld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldChjb25zdCBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAot
ICAgIHJldHVybiBkb3dubG9hZC0+ZGVzdGluYXRpb247CisgICAgcmV0dXJuIGQtPmRlc3RpbmF0
aW9uOwogfQogCiBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkZXN0aW5hdGlvbiwgZmFsc2UpOworICAgIEVX
S19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIGRvd25sb2FkLT5kZXN0aW5h
dGlvbiA9IGRlc3RpbmF0aW9uOworICAgIGQtPmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMiwxMDMgKzE1NSwxMTIgQEAgRWluYV9Cb29sIGV3
a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2Fk
LCBjb25zdCBjaGEKIGNvbnN0IGNoYXIgKmV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVu
YW1lX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3du
bG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+c3VnZ2VzdGVkRmls
ZW5hbWU7CisgICAgcmV0dXJuIGQtPnN1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX2Rvd25sb2FkX2pvYl9jYW5jZWwoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBmYWxzZSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCBm
YWxzZSk7CisgICAgRVdLX0QoRXdrX0Rvd25sb2FkX0pvYiwgZG93bmxvYWQpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkLT5kb3dubG9hZFByb3h5LCBmYWxzZSk7CiAKLSAg
ICBpZiAoZG93bmxvYWQtPnN0YXRlICE9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJ
TkcpCisgICAgaWYgKGQtPnN0YXRlICE9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJ
TkcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRvd25sb2FkLT5zdGF0ZSA9IEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTElORzsKLSAgICBkb3dubG9hZC0+ZG93bmxvYWRQcm94
eS0+Y2FuY2VsKCk7CisgICAgZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNF
TExJTkc7CisgICAgZC0+ZG93bmxvYWRQcm94eS0+Y2FuY2VsKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGRvdWJsZSBld2tfZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQoY29u
c3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tfRG93bmxvYWRfSm9iLCBk
b3dubG9hZCk7CiAKLSAgICBpZiAoIWRvd25sb2FkLT5yZXNwb25zZSkKKyAgICBpZiAoIWQtPnJl
c3BvbnNlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29u
dGVudExlbmd0aCA9IGV3a191cmxfcmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGRvd25sb2Fk
LT5yZXNwb25zZS5nZXQoKSk7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyBjb250ZW50TGVuZ3Ro
ID0gZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9nZXQoZC0+cmVzcG9uc2UuZ2V0KCkp
OwogICAgIGlmICghY29udGVudExlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBjb250ZW50TGVu
Z3RoOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGQtPmRvd25sb2FkZWQpIC8gY29u
dGVudExlbmd0aDsKIH0KIAogZG91YmxlIGV3a19kb3dubG9hZF9qb2JfZWxhcHNlZF90aW1lX2dl
dChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9K
b2IsIGRvd25sb2FkKTsKIAogICAgIC8vIERvd25sb2FkIGhhcyBub3Qgc3RhcnRlZCB5ZXQuCi0g
ICAgaWYgKGRvd25sb2FkLT5zdGFydFRpbWUgPCAwKQorICAgIGlmIChkLT5zdGFydFRpbWUgPCAw
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERvd25sb2FkIGhhZCBlbmRlZCwgcmV0dXJu
IHRoZSB0aW1lIGVsYXBzZWQgYmV0d2VlbiB0aGUKICAgICAvLyBkb3dubG9hZCBzdGFydCBhbmQg
dGhlIGVuZCBldmVudC4KLSAgICBpZiAoZG93bmxvYWQtPmVuZFRpbWUgPj0gMCkKLSAgICAgICAg
cmV0dXJuIGRvd25sb2FkLT5lbmRUaW1lIC0gZG93bmxvYWQtPnN0YXJ0VGltZTsKKyAgICBpZiAo
ZC0+ZW5kVGltZSA+PSAwKQorICAgICAgICByZXR1cm4gZC0+ZW5kVGltZSAtIGQtPnN0YXJ0VGlt
ZTsKIAogICAgIC8vIERvd25sb2FkIGlzIHN0aWxsIGdvaW5nLgotICAgIHJldHVybiBlY29yZV90
aW1lX2dldCgpIC0gZG93bmxvYWQtPnN0YXJ0VGltZTsKKyAgICByZXR1cm4gZWNvcmVfdGltZV9n
ZXQoKSAtIGQtPnN0YXJ0VGltZTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFNldHMgdGhl
IFVSTCBAYSByZXNwb25zZSBmb3IgdGhpcyBAYSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93
bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgUGFzc1Jl
ZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZSkKK1N0cmluZyBFd2tfRG93bmxvYWRfSm9i
OjpkZXN0aW5hdGlvbigpIGNvbnN0CiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
ZG93bmxvYWQpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHJlc3BvbnNlKTsKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkLT5kZXN0aW5hdGlvbik7Cit9CiAKLSAgICBkb3du
bG9hZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKKy8qKgorICogQGludGVybmFsCisgKiBTZXRzIHRo
ZSBVUkwgQGEgcmVzcG9uc2UgZm9yIHRoaXMgQGEgZG93bmxvYWQuCisgKi8KK3ZvaWQgRXdrX0Rv
d25sb2FkX0pvYjo6c2V0UmVzcG9uc2UoUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNw
b25zZSkKK3sKKyAgICBkLT5yZXNwb25zZSA9IHJlc3BvbnNlOwogfQogCiAvKioKICAqIEBpbnRl
cm5hbAogICogU2V0cyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBAYSBkb3dubG9h
ZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQoRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQor
dm9pZCBFd2tfRG93bmxvYWRfSm9iOjpzZXRTdWdnZXN0ZWRGaWxlTmFtZShjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRv
d25sb2FkKTsKLQotICAgIGRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZp
bGVuYW1lOworICAgIGQtPnN1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUudXRm
OCgpLmRhdGEoKTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydCBhIGdpdmVuIGFt
b3VudCBvZiBkYXRhIHdhcyByZWNlaXZlZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jl
Y2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkK
K3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6aW5jcmVtZW50UmVjZWl2ZWREYXRhKHVpbnQ2NF90IGxl
bmd0aCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7Ci0KLSAg
ICBkb3dubG9hZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7CisgICAgZC0+ZG93bmxvYWRlZCArPSBs
ZW5ndGg7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUg
ZG93bmxvYWQuCiAgKi8KLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQsIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGUpCit2b2lkIEV3
a19Eb3dubG9hZF9Kb2I6OnNldFN0YXRlKEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGUpCiB7
Ci0gICAgZG93bmxvYWQtPnN0YXRlID0gc3RhdGU7Ci0KLSAgICAvLyBVcGRhdGUgc3RhcnQgdGlt
ZSBpZiB0aGUgZG93bmxvYWQgaGFzIHN0YXJ0ZWQKLSAgICBpZiAoc3RhdGUgPT0gRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9ET1dOTE9BRElORykKLSAgICAgICAgZG93bmxvYWQtPnN0YXJ0VGltZSA9
IGVjb3JlX3RpbWVfZ2V0KCk7Ci0KLSAgICAvLyBVcGRhdGUgZW5kIHRpbWUgaWYgdGhlIGRvd25s
b2FkIGhhcyBmaW5pc2hlZCAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkKLSAgICBpZiAoc3RhdGUgPT0g
RVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQKLSAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RP
V05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQKLSAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9GSU5JU0hFRCkKLSAgICAgICAgZG93bmxvYWQtPmVuZFRpbWUgPSBlY29y
ZV90aW1lX2dldCgpOworICAgIGQtPnN0YXRlID0gc3RhdGU7CisKKyAgICBzd2l0Y2ggKHN0YXRl
KSB7CisgICAgY2FzZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HOgorICAgICAg
ICBkLT5zdGFydFRpbWUgPSBlY29yZV90aW1lX2dldCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEOgorICAgIGNhc2UgRVdLX0RPV05MT0FE
X0pPQl9TVEFURV9DQU5DRUxMRUQ6CisgICAgY2FzZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJ
TklTSEVEOgorICAgICAgICBkLT5lbmRUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oCmluZGV4
IDBjYWQ1YzIuLjE1NmYyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmgKQEAgLTQzLDcgKzQzLDcgQEAKIGV4dGVybiAiQyIg
ewogI2VuZGlmCiAKLS8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfRG93bmxvYWRfSm9i
X0pvYiAqLworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19Eb3dubG9hZF9Kb2IgKi8K
IHR5cGVkZWYgc3RydWN0IEV3a19Eb3dubG9hZF9Kb2IgRXdrX0Rvd25sb2FkX0pvYjsKIAogLy8v
IERlZmluZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBvZiBhIGRvd25sb2FkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3By
aXZhdGUuaAppbmRleCA1ZmFjNDdkLi4zNmVjYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaApA
QCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSAiV0tFaW5h
U2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYi5oIgorI2luY2x1ZGUg
ImV3a19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKICNp
bmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFdmFzLmg+CkBA
IC0zNyw0NiArMzksMjcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5
OwogfQogCi0vKioKLSAqIFxzdHJ1Y3QgIEV3a19Eb3dubG9hZF9Kb2IKLSAqIEBicmllZiAgIENv
bnRhaW5zIHRoZSBkb3dubG9hZCBkYXRhLgotICovCiBjbGFzcyBFd2tfRG93bmxvYWRfSm9iIDog
cHVibGljIFJlZkNvdW50ZWQ8RXdrX0Rvd25sb2FkX0pvYj4geworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEV3a19Eb3dubG9hZF9Kb2IpOworICAgIEVXS19ERUNMQVJFX0RBVEEoRXdrX0Rvd25s
b2FkX0pvYik7CiBwdWJsaWM6Ci0gICAgV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZFBy
b3h5OwotICAgIEV2YXNfT2JqZWN0KiB2aWV3OwotICAgIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUg
c3RhdGU7Ci0gICAgUmVmUHRyPEV3a19VcmxfUmVxdWVzdD4gcmVxdWVzdDsKLSAgICBSZWZQdHI8
RXdrX1VybF9SZXNwb25zZT4gcmVzcG9uc2U7Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBk
b3VibGUgZW5kVGltZTsKLSAgICB1aW50NjRfdCBkb3dubG9hZGVkOyAvKio8IGxlbmd0aCBhbHJl
YWR5IGRvd25sb2FkZWQgKi8KLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb247Ci0g
ICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lOwotCisgICAgfkV3a19Eb3du
bG9hZF9Kb2IoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFd2tfRG93bmxvYWRfSm9iPiBjcmVh
dGUoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV3a19Eb3dubG9hZF9Kb2IoZG93
bmxvYWQsIGV3a1ZpZXcpKTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgRXdrX0Rvd25sb2FkX0pv
YihXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykK
LSAgICAgICAgOiBkb3dubG9hZFByb3h5KGRvd25sb2FkKQotICAgICAgICAsIHZpZXcoZXdrVmll
dykKLSAgICAgICAgLCBzdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX05PVF9TVEFSVEVEKQot
ICAgICAgICAsIHN0YXJ0VGltZSgtMSkKLSAgICAgICAgLCBlbmRUaW1lKC0xKQotICAgICAgICAs
IGRvd25sb2FkZWQoMCkKLSAgICB7IH0KLX07CisgICAgdWludDY0X3QgaWQoKSBjb25zdDsKKyAg
ICBFdmFzX09iamVjdCogdmlldygpIGNvbnN0OworICAgIFN0cmluZyBkZXN0aW5hdGlvbigpIGNv
bnN0OwogCi10eXBlZGVmIHN0cnVjdCBFd2tfRXJyb3IgRXdrX0Vycm9yOworICAgIHZvaWQgc2V0
U3RhdGUoRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSk7CisgICAgdm9pZCBpbmNyZW1lbnRSZWNlaXZl
ZERhdGEodWludDY0X3QgbGVuZ3RoKTsKKyAgICB2b2lkIHNldFJlc3BvbnNlKFBhc3NSZWZQdHI8
RXdrX1VybF9SZXNwb25zZT4pOworICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSk7CiAKLXVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2Jf
aWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqKTsKLUV2YXNfT2JqZWN0KiBld2tfZG93bmxv
YWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqKTsKLXZvaWQgZXdrX2Rvd25s
b2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiosIEV3a19Eb3dubG9hZF9Kb2JfU3Rh
dGUpOwotdm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pv
YiosIHVpbnQ2NF90IGxlbmd0aCk7Ci12b2lkIGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2Vfc2V0
KEV3a19Eb3dubG9hZF9Kb2IqLCBQYXNzUmVmUHRyPEV3a19VcmxfUmVzcG9uc2U+KTsKLXZvaWQg
ZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfc2V0KEV3a19Eb3dubG9hZF9Kb2Iq
LCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSk7Citwcml2YXRlOgorICAgIEV3a19Eb3du
bG9hZF9Kb2IoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3
a1ZpZXcpOworfTsKIAogI2VuZGlmIC8vIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaAppbmRleCA0YmRi
MjViLi45ZDMyNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19wcml2YXRlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgZXdrX3ByaXZhdGVfaAogCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKICNk
ZWZpbmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShld2tOYW1lLCB3ZWJjb3JlTmFtZSkg
XAogICAgICAgICBDT01QSUxFX0FTU0VSVChpbnQoZXdrTmFtZSkgPT0gaW50KHdlYmNvcmVOYW1l
KSwgbWlzbWF0Y2hpbmdFbnVtcykKQEAgLTM5LDQgKzQwLDkgQEAgZXh0ZXJuIGludCBfZXdrX2xv
Z19kb207CiAjZGVmaW5lIElORk8oLi4uKSBFSU5BX0xPR19ET01fSU5GTyhfZXdrX2xvZ19kb20s
IF9fVkFfQVJHU19fKQogI2RlZmluZSBEQkcoLi4uKSBFSU5BX0xPR19ET01fREJHKF9ld2tfbG9n
X2RvbSwgX19WQV9BUkdTX18pCiAKKy8vIE1hY3JvcyB1c2VkIGZvciBQaW1wbCBpZGlvbS4KKyNk
ZWZpbmUgRVdLX0RFQ0xBUkVfREFUQShDbGFzc05hbWUpIGNvbnN0IE93blB0cjxzdHJ1Y3QgQ2xh
c3NOYW1lIyNfRGF0YT4gZDsgZnJpZW5kIHN0cnVjdCBDbGFzc05hbWUjI19EYXRhCisjZGVmaW5l
IEVXS19ERUNMQVJFX0RBVEFfT1dORVIoQ2xhc3NOYW1lKSBzdGF0aWMgaW5saW5lIENsYXNzTmFt
ZSMjX0RhdGEqIGRfcHRyKGNvbnN0IENsYXNzTmFtZSogb2JqKSB7IHJldHVybiBjb25zdF9jYXN0
PENsYXNzTmFtZSo+KG9iaiktPmQuZ2V0KCk7IH0KKyNkZWZpbmUgRVdLX0QoQ2xhc3NOYW1lLCBv
YmopIENsYXNzTmFtZSMjX0RhdGEqIGQgPSBDbGFzc05hbWUjI19EYXRhOjpkX3B0cihvYmopCisK
ICNlbmRpZiAvLyBld2tfcHJpdmF0ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169425</attachid>
            <date>2012-10-18 09:19:36 -0700</date>
            <delta_ts>2012-10-19 01:41:34 -0700</delta_ts>
            <desc>Pimpl alternative</desc>
            <filename>99697_pimpl_alternative.patch</filename>
            <type>text/plain</type>
            <size>16699</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApp
bmRleCBiNzYxN2RhLi43YTI0NTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBld2tfY29u
dGV4dF9kb3dubG9hZF9qb2JfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfRG93bmxv
YWRfSm9iKiBld2sKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tEb3dubG9hZCk7CiAKLSAgICB1aW50
NjRfdCBkb3dubG9hZElkID0gZXdrX2Rvd25sb2FkX2pvYl9pZF9nZXQoZXdrRG93bmxvYWQpOwor
ICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSBld2tEb3dubG9hZC0+aWQoKTsKICAgICBpZiAoZXdr
Q29udGV4dC0+ZG93bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQogICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCmluZGV4IDA4OGJkNmEuLjEyMTAz
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcApAQCAtNTMsMTQgKzUzLDE0IEBA
IHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFt
ZShXS0NvbnRleHRSZWYsIFdLRG93bmxvCiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQg
PSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
dG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7
CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQoZG93bmxvYWQs
IHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGRvd25sb2Fk
LT5zZXRTdWdnZXN0ZWRGaWxlTmFtZSh0b0ltcGwoZmlsZW5hbWUpLT5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAogICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBkb3dubG9hZCBzaWduYWwgb24gdGhl
IEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVkIHRoZSByZXNwb25zZQogICAgIC8v
IGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4KLSAgICBld2tfdmlld19kb3dubG9hZF9qb2Jf
cmVxdWVzdGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCk7
CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX3JlcXVlc3RlZChkb3dubG9hZC0+dmlldygpLCBk
b3dubG9hZCk7CiAKICAgICAvLyBEb3dubG9hZFNvdXAgZXhwZWN0cyB0aGUgZGVzdGluYXRpb24g
dG8gYmUgYSBVUkwuCi0gICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gU3RyaW5nKCJmaWxlOi8vIikg
KyBTdHJpbmc6OmZyb21VVEY4KGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KGRvd25s
b2FkKSk7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gU3RyaW5nKCJmaWxlOi8vIikgKyBTdHJp
bmc6OmZyb21VVEY4KGRvd25sb2FkLT5kZXN0aW5hdGlvbigpKTsKIAogICAgIHJldHVybiBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKIH0K
QEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4
dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VSTFJlc3AKIHsKICAgICBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAg
ICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChk
b3dubG9hZCwgRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsKKyAgICBkb3du
bG9hZC0+c2V0UmVzcG9uc2UoRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsK
IH0KIAogc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIC8qcGF0aCovLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQpAQCAtNzcsMTQgKzc3LDE0IEBAIHN0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3Rp
bmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluCiAg
ICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2Jf
Z2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9h
ZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0
YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORyk7Cisg
ICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcp
OwogfQogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQogewogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxv
YWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+
ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIGV3a19kb3dubG9hZF9q
b2JfcmVjZWl2ZWRfZGF0YShkb3dubG9hZCwgbGVuZ3RoKTsKKyAgICBkb3dubG9hZC0+aW5jcmVt
ZW50UmVjZWl2ZWREYXRhKGxlbmd0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250
ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCkBAIC05NCw4ICs5NCw4IEBAIHN0YXRpYyB2b2lkIGRpZEZhaWwo
V0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3Is
IGNvCiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAogICAgIE93blB0cjxFd2tfRXJyb3I+IGV3a0Vy
cm9yID0gRXdrX0Vycm9yOjpjcmVhdGUoZXJyb3IpOwotICAgIGV3a19kb3dubG9hZF9qb2Jfc3Rh
dGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7Ci0gICAgZXdr
X3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGRvd25s
b2FkKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUo
RVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pv
Yl9mYWlsZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsKICAg
ICBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KSwgZG93bmxvYWRJZCk7CiB9CiAKQEAgLTEwNSw4ICsxMDUsOCBAQCBzdGF0aWMgdm9pZCBkaWRD
YW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQg
KmNsaWVudAogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOwogICAg
IEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3du
bG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQpOwotICAgIGV3a192aWV3X2Rv
d25sb2FkX2pvYl9jYW5jZWxsZWQoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9hZCks
IGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFU
RV9DQU5DRUxMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5jZWxsZWQoZG93bmxv
YWQtPnZpZXcoKSwgZG93bmxvYWQpOwogICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKIH0KIApAQCAtMTE2LDgg
KzExNiw4IEBAIHN0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRS
ZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50CiAgICAgRXdrX0Rvd25sb2FkX0pvYiog
ZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGll
bnRJbmZvKSwgZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAotICAgIGV3a19k
b3dubG9hZF9qb2Jfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJ
TklTSEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQoZXdrX2Rvd25sb2Fk
X2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+c2V0U3Rh
dGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxv
YWRfam9iX2ZpbmlzaGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKICAgICBld2tfY29u
dGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxv
YWRJZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZF9qb2IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Rvd25sb2FkX2pvYi5jcHAKaW5kZXggNDZhMTk4ZC4uYzBmYTNkNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAK
QEAgLTM1LDYgKzM1LDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK0V3a19Eb3du
bG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9h
ZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgOiBtX2Rvd25sb2FkUHJveHkoZG93bmxvYWQp
CisgICAgLCBtX3ZpZXcoZXdrVmlldykKKyAgICAsIG1fc3RhdGUoRVdLX0RPV05MT0FEX0pPQl9T
VEFURV9OT1RfU1RBUlRFRCkKKyAgICAsIG1fc3RhcnRUaW1lKC0xKQorICAgICwgbV9lbmRUaW1l
KC0xKQorICAgICwgbV9kb3dubG9hZGVkKDApCit7IH0KKwogRXdrX0Rvd25sb2FkX0pvYiogZXdr
X2Rvd25sb2FkX2pvYl9yZWYoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKQEAgLTU1LDEyICs2NCw5
IEBAIHZvaWQgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9h
ZCkKICAqIEBpbnRlcm5hbAogICogUXVlcmllcyB0aGUgaWRlbnRpZmllciBmb3IgdGhpcyBkb3du
bG9hZAogICovCi11aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25zdCBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCkKK3VpbnQ2NF90IEV3a19Eb3dubG9hZF9Kb2I6OmlkKCkgY29u
c3QKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94
eSwgMCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmRvd25sb2FkSUQo
KTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCk7CiB9CiAKIC8qKgpA
QCAtNjgsNDUgKzc0LDYyIEBAIHVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0
IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogICogUmV0dXJucyB0aGUgdmlldyB0aGlzIGRv
d25sb2FkIGlzIGF0dGFjaGVkIHRvLgogICogVGhlIHZpZXcgaXMgbmVlZGVkIHRvIHNlbmQgbm90
aWZpY2F0aW9uIHNpZ25hbHMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfam9iX3Zp
ZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQorRXZhc19PYmplY3QqIEV3
a19Eb3dubG9hZF9Kb2I6OnZpZXcoKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQtPnZpZXc7Cisg
ICAgcmV0dXJuIG1fdmlldzsKIH0KIAogRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBld2tfZG93bmxv
YWRfam9iX3N0YXRlX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9K
T0JfU1RBVEVfVU5LTk9XTik7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnN0YXRlOworICAgIHJl
dHVybiBkb3dubG9hZC0+c3RhdGUoKTsKK30KKworRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBFd2tf
RG93bmxvYWRfSm9iOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7CiB9CiAK
IEV3a19VcmxfUmVxdWVzdCogZXdrX2Rvd25sb2FkX2pvYl9yZXF1ZXN0X2dldChjb25zdCBFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZG93bmxvYWQsIDApOwogCi0gICAgaWYgKCFkb3dubG9hZC0+cmVxdWVzdCkgewotICAg
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQtPmRvd25sb2FkUHJv
eHksIDApOwotICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVz
dChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0OjpjcmVhdGUoZG93bmxvYWQtPmRvd25sb2Fk
UHJveHktPnJlcXVlc3QoKSkubGVha1JlZigpKSk7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0Rv
d25sb2FkX0pvYio+KGRvd25sb2FkKS0+cmVxdWVzdCA9IEV3a19VcmxfUmVxdWVzdDo6Y3JlYXRl
KHdrVVJMUmVxdWVzdC5nZXQoKSk7CisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXF1ZXN0KCk7Cit9
CisKK0V3a19VcmxfUmVxdWVzdCogRXdrX0Rvd25sb2FkX0pvYjo6cmVxdWVzdCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3JlcXVlc3QpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0
UmVmPiB3a1VSTFJlcXVlc3QoQWRvcHRXSywgdG9BUEkoV2ViVVJMUmVxdWVzdDo6Y3JlYXRlKG1f
ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKKyAgICAgICAgbV9yZXF1ZXN0
ID0gRXdrX1VybF9SZXF1ZXN0OjpjcmVhdGUod2tVUkxSZXF1ZXN0LmdldCgpKTsKICAgICB9CiAK
LSAgICByZXR1cm4gZG93bmxvYWQtPnJlcXVlc3QuZ2V0KCk7CisgICAgcmV0dXJuIG1fcmVxdWVz
dC5nZXQoKTsKIH0KIAogRXdrX1VybF9SZXNwb25zZSogZXdrX2Rvd25sb2FkX2pvYl9yZXNwb25z
ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKIAotICAgIHJldHVybiBkb3dubG9h
ZC0+cmVzcG9uc2UuZ2V0KCk7CisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXNwb25zZSgpOworfQor
CitFd2tfVXJsX1Jlc3BvbnNlKiBFd2tfRG93bmxvYWRfSm9iOjpyZXNwb25zZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcmVzcG9uc2UuZ2V0KCk7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a19kb3du
bG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2Fk
KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7CiAK
LSAgICByZXR1cm4gZG93bmxvYWQtPmRlc3RpbmF0aW9uOworICAgIHJldHVybiBkb3dubG9hZC0+
ZGVzdGluYXRpb24oKTsKK30KKworY29uc3QgY2hhciogRXdrX0Rvd25sb2FkX0pvYjo6ZGVzdGlu
YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2Rlc3RpbmF0aW9uOwogfQogCiBFaW5hX0Jv
b2wgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQpAQCAtMTE0LDI4ICsxMzcsNDIgQEAgRWlu
YV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZF9Kb2Iq
IGRvd25sb2FkLCBjb25zdCBjaGEKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZG93bmxvYWQsIGZhbHNlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZGVz
dGluYXRpb24sIGZhbHNlKTsKIAotICAgIGRvd25sb2FkLT5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0
aW9uOworICAgIGRvd25sb2FkLT5zZXREZXN0aW5hdGlvbihkZXN0aW5hdGlvbik7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgY2hhciAqZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0ZWRf
ZmlsZW5hbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQordm9pZCBFd2tf
RG93bmxvYWRfSm9iOjpzZXREZXN0aW5hdGlvbihjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKK3sK
KyAgICBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247Cit9CisKK2NvbnN0IGNoYXIqIGV3a19k
b3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxv
YWQsIDApOwogCi0gICAgcmV0dXJuIGRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZTsKKyAgICBy
ZXR1cm4gZG93bmxvYWQtPnN1Z2dlc3RlZEZpbGVOYW1lKCk7Cit9CisKK2NvbnN0IGNoYXIqIEV3
a19Eb3dubG9hZF9Kb2I6OnN1Z2dlc3RlZEZpbGVOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfY2Fu
Y2VsKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgZmFsc2UpOwogCi0gICAgaWYgKGRv
d25sb2FkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQorICAg
IHJldHVybiBkb3dubG9hZC0+Y2FuY2VsKCk7Cit9CisKK2Jvb2wgRXdrX0Rvd25sb2FkX0pvYjo6
Y2FuY2VsKCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RP
V05MT0FESU5HKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkb3dubG9hZC0+c3RhdGUg
PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkc7Ci0gICAgZG93bmxvYWQtPmRvd25s
b2FkUHJveHktPmNhbmNlbCgpOworICAgIG1fc3RhdGUgPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRF
X0NBTkNFTExJTkc7CisgICAgbV9kb3dubG9hZFByb3h5LT5jYW5jZWwoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTQzLDgyICsxODAsOTAgQEAgZG91YmxlIGV3a19kb3dubG9hZF9qb2Jf
ZXN0aW1hdGVkX3Byb2dyZXNzX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkK
IHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwogCi0g
ICAgaWYgKCFkb3dubG9hZC0+cmVzcG9uc2UpCisgICAgcmV0dXJuIGRvd25sb2FkLT5lc3RpbWF0
ZWRQcm9ncmVzcygpOworfQorCitkb3VibGUgRXdrX0Rvd25sb2FkX0pvYjo6ZXN0aW1hdGVkUHJv
Z3Jlc3MoKSBjb25zdAoreworICAgIGlmICghbV9yZXNwb25zZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGggPSBld2tfdXJsX3Jlc3Bv
bnNlX2NvbnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2UuZ2V0KCkpOworICAgIGNv
bnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxfcmVzcG9uc2VfY29udGVu
dF9sZW5ndGhfZ2V0KG1fcmVzcG9uc2UuZ2V0KCkpOwogICAgIGlmICghY29udGVudExlbmd0aCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihkb3du
bG9hZC0+ZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOwogfQogCiBkb3VibGUgZXdr
X2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwg
MCk7CiAKKyAgICByZXR1cm4gZG93bmxvYWQtPmVsYXBzZWRUaW1lKCk7Cit9CisKK2RvdWJsZSBF
d2tfRG93bmxvYWRfSm9iOjplbGFwc2VkVGltZSgpIGNvbnN0Cit7CiAgICAgLy8gRG93bmxvYWQg
aGFzIG5vdCBzdGFydGVkIHlldC4KLSAgICBpZiAoZG93bmxvYWQtPnN0YXJ0VGltZSA8IDApCisg
ICAgaWYgKG1fc3RhcnRUaW1lIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBEb3du
bG9hZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4gdGhlCiAgICAg
Ly8gZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZlbnQuCi0gICAgaWYgKGRvd25sb2FkLT5l
bmRUaW1lID49IDApCi0gICAgICAgIHJldHVybiBkb3dubG9hZC0+ZW5kVGltZSAtIGRvd25sb2Fk
LT5zdGFydFRpbWU7CisgICAgaWYgKG1fZW5kVGltZSA+PSAwKQorICAgICAgICByZXR1cm4gbV9l
bmRUaW1lIC0gbV9zdGFydFRpbWU7CiAKICAgICAvLyBEb3dubG9hZCBpcyBzdGlsbCBnb2luZy4K
LSAgICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAtIGRvd25sb2FkLT5zdGFydFRpbWU7CisgICAg
cmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCkgLSBtX3N0YXJ0VGltZTsKIH0KIAogLyoqCiAgKiBAaW50
ZXJuYWwKICAqIFNldHMgdGhlIFVSTCBAYSByZXNwb25zZSBmb3IgdGhpcyBAYSBkb3dubG9hZC4K
ICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZSkKK3ZvaWQg
RXdrX0Rvd25sb2FkX0pvYjo6c2V0UmVzcG9uc2UoUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNl
PiByZXNwb25zZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocmVzcG9uc2UpOworICAgIEFTU0VSVChy
ZXNwb25zZSk7CiAKLSAgICBkb3dubG9hZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKKyAgICBtX3Jl
c3BvbnNlID0gcmVzcG9uc2U7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBTZXRzIHRoZSBz
dWdnZXN0ZWQgZmlsZSBuYW1lIGZvciB0aGlzIEBhIGRvd25sb2FkLgogICovCi12b2lkIGV3a19k
b3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3du
bG9hZCwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCit2b2lkIEV3a19Eb3dubG9hZF9K
b2I6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKLQotICAgIGRvd25s
b2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworICAgIG1fc3VnZ2Vz
dGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwK
ICAqIFJlcG9ydCBhIGdpdmVuIGFtb3VudCBvZiBkYXRhIHdhcyByZWNlaXZlZC4KICAqLwotdm9p
ZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxv
YWQsIHVpbnQ2NF90IGxlbmd0aCkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6aW5jcmVtZW50UmVj
ZWl2ZWREYXRhKHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihkb3dubG9hZCk7Ci0KLSAgICBkb3dubG9hZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7Cisg
ICAgbV9kb3dubG9hZGVkICs9IGxlbmd0aDsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFNl
dHMgdGhlIHN0YXRlIG9mIHRoZSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9i
X3N0YXRlX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgRXdrX0Rvd25sb2FkX0pvYl9T
dGF0ZSBzdGF0ZSkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6c2V0U3RhdGUoRXdrX0Rvd25sb2Fk
X0pvYl9TdGF0ZSBzdGF0ZSkKIHsKLSAgICBkb3dubG9hZC0+c3RhdGUgPSBzdGF0ZTsKLQotICAg
IC8vIFVwZGF0ZSBzdGFydCB0aW1lIGlmIHRoZSBkb3dubG9hZCBoYXMgc3RhcnRlZAotICAgIGlm
IChzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQotICAgICAgICBk
b3dubG9hZC0+c3RhcnRUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKLQotICAgIC8vIFVwZGF0ZSBl
bmQgdGltZSBpZiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVkIChzdWNjZXNzZnVsbHkgb3Igbm90
KQotICAgIGlmIChzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRAotICAgICAg
ICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExFRAotICAgICAgICB8
fCBzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEKQotICAgICAgICBkb3du
bG9hZC0+ZW5kVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7CisgICAgbV9zdGF0ZSA9IHN0YXRlOwor
CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9E
T1dOTE9BRElORzoKKyAgICAgICAgbV9zdGFydFRpbWUgPSBlY29yZV90aW1lX2dldCgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEOgorICAg
IGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQ6CisgICAgY2FzZSBFV0tfRE9X
TkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEOgorICAgICAgICBtX2VuZFRpbWUgPSBlY29yZV90aW1l
X2dldCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWRfam9iX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCmluZGV4IDVmYWM0N2QuLmY4MTgwMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2Jf
cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZF9qb2JfcHJpdmF0ZS5oCkBAIC00Myw0MCArNDMsNDYgQEAgY2xhc3MgRG93bmxvYWRQcm94
eTsKICAqLwogY2xhc3MgRXdrX0Rvd25sb2FkX0pvYiA6IHB1YmxpYyBSZWZDb3VudGVkPEV3a19E
b3dubG9hZF9Kb2I+IHsKIHB1YmxpYzoKLSAgICBXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25s
b2FkUHJveHk7Ci0gICAgRXZhc19PYmplY3QqIHZpZXc7Ci0gICAgRXdrX0Rvd25sb2FkX0pvYl9T
dGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8RXdrX1VybF9SZXF1ZXN0PiByZXF1ZXN0OwotICAgIFJl
ZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZTsKLSAgICBkb3VibGUgc3RhcnRUaW1lOwot
ICAgIGRvdWJsZSBlbmRUaW1lOwotICAgIHVpbnQ2NF90IGRvd25sb2FkZWQ7IC8qKjwgbGVuZ3Ro
IGFscmVhZHkgZG93bmxvYWRlZCAqLwotICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlv
bjsKLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWU7Ci0KICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxFd2tfRG93bmxvYWRfSm9iPiBjcmVhdGUoV2ViS2l0OjpEb3dubG9hZFBy
b3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEV3a19Eb3dubG9hZF9Kb2IoZG93bmxvYWQsIGV3a1ZpZXcpKTsKICAg
ICB9CiAKLXByaXZhdGU6Ci0gICAgRXdrX0Rvd25sb2FkX0pvYihXZWJLaXQ6OkRvd25sb2FkUHJv
eHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKLSAgICAgICAgOiBkb3dubG9hZFBy
b3h5KGRvd25sb2FkKQotICAgICAgICAsIHZpZXcoZXdrVmlldykKLSAgICAgICAgLCBzdGF0ZShF
V0tfRE9XTkxPQURfSk9CX1NUQVRFX05PVF9TVEFSVEVEKQotICAgICAgICAsIHN0YXJ0VGltZSgt
MSkKLSAgICAgICAgLCBlbmRUaW1lKC0xKQotICAgICAgICAsIGRvd25sb2FkZWQoMCkKLSAgICB7
IH0KLX07CisgICAgdWludDY0X3QgaWQoKSBjb25zdDsKKyAgICBFdmFzX09iamVjdCogdmlldygp
IGNvbnN0OworCisgICAgRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBzdGF0ZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0U3RhdGUoRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSk7CisKKyAgICBFd2tfVXJsX1Jl
cXVlc3QqIHJlcXVlc3QoKSBjb25zdDsKKyAgICBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0UmVzcG9uc2UoUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNl
Pik7CisKKyAgICBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0
RGVzdGluYXRpb24oY29uc3QgY2hhciogZGVzdGluYXRpb24pOwogCi10eXBlZGVmIHN0cnVjdCBF
d2tfRXJyb3IgRXdrX0Vycm9yOworICAgIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVOYW1lKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTdWdnZXN0ZWRGaWxlTmFtZShjb25zdCBjaGFyKiBmaWxlTmFt
ZSk7CiAKLXVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9h
ZF9Kb2IqKTsKLUV2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3
a19Eb3dubG9hZF9Kb2IqKTsKLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rv
d25sb2FkX0pvYiosIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUpOwotdm9pZCBld2tfZG93bmxvYWRf
am9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiosIHVpbnQ2NF90IGxlbmd0aCk7Ci12
b2lkIGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2Vfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBQYXNz
UmVmUHRyPEV3a19VcmxfUmVzcG9uc2U+KTsKLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0
ZWRfZmlsZW5hbWVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRG
aWxlbmFtZSk7CisgICAgYm9vbCBjYW5jZWwoKTsKKworICAgIGRvdWJsZSBlc3RpbWF0ZWRQcm9n
cmVzcygpIGNvbnN0OworICAgIGRvdWJsZSBlbGFwc2VkVGltZSgpIGNvbnN0OworICAgIHZvaWQg
aW5jcmVtZW50UmVjZWl2ZWREYXRhKHVpbnQ2NF90IGxlbmd0aCk7CisKK3ByaXZhdGU6CisgICAg
RXdrX0Rvd25sb2FkX0pvYihXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFdmFzX09i
amVjdCogZXdrVmlldyk7CisKKyAgICBXZWJLaXQ6OkRvd25sb2FkUHJveHkqIG1fZG93bmxvYWRQ
cm94eTsKKyAgICBFdmFzX09iamVjdCogbV92aWV3OworICAgIEV3a19Eb3dubG9hZF9Kb2JfU3Rh
dGUgbV9zdGF0ZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxFd2tfVXJsX1JlcXVlc3Q+IG1fcmVxdWVz
dDsKKyAgICBSZWZQdHI8RXdrX1VybF9SZXNwb25zZT4gbV9yZXNwb25zZTsKKyAgICBkb3VibGUg
bV9zdGFydFRpbWU7CisgICAgZG91YmxlIG1fZW5kVGltZTsKKyAgICB1aW50NjRfdCBtX2Rvd25s
b2FkZWQ7IC8qKjwgbGVuZ3RoIGFscmVhZHkgZG93bmxvYWRlZCAqLworICAgIFdLRWluYVNoYXJl
ZFN0cmluZyBtX2Rlc3RpbmF0aW9uOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX3N1Z2dlc3Rl
ZEZpbGVuYW1lOworfTsKIAogI2VuZGlmIC8vIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169436</attachid>
            <date>2012-10-18 10:50:50 -0700</date>
            <delta_ts>2012-10-19 03:36:20 -0700</delta_ts>
            <desc>Pimpl alternative</desc>
            <filename>99697_pimpl_alternative.patch</filename>
            <type>text/plain</type>
            <size>20050</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyMWVlNDM1Li5mZDRiODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQg
QEAKKzIwMTItMTAtMTggIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIE1ha2UgRXdrX0Rvd25sb2FkX0pvYiBtZW1iZXJz
IHByaXZhdGUgYW5kIHJlbW92ZSBwcml2YXRlIEMgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTY5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRXdrX0Rvd25sb2FkX0pvYiBwcml2
YXRlIGFuZCByZXBsYWNlIHByaXZhdGUgQyBmdW5jdGlvbnMKKyAgICAgICAgYnkgY2xhc3MgbWV0
aG9kcy4gTmV3IG1ldGhvZHMgd2VyZSBhbHNvIGFkZGVkIHRvIG1hdGNoIHRoZQorICAgICAgICBw
dWJsaWMgQyBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5j
cHA6CisgICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9qb2JfYWRkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwOgorICAgICAg
ICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAoZGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZENyZWF0ZURlc3RpbmF0aW9uKToKKyAgICAg
ICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKGRpZEZhaWwpOgorICAgICAgICAoZGlkQ2Fu
Y2VsKToKKyAgICAgICAgKGRpZEZpbmlzaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Rvd25sb2FkX2pvYi5jcHA6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpFd2tfRG93
bmxvYWRfSm9iKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmlkKToKKyAgICAgICAgKEV3
a19Eb3dubG9hZF9Kb2I6OnZpZXcpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9n
ZXQpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6c3RhdGUpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX2pvYl9yZXF1ZXN0X2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpyZXF1
ZXN0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAg
KEV3a19Eb3dubG9hZF9Kb2I6OnJlc3BvbnNlKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jf
ZGVzdGluYXRpb25fZ2V0KToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmRlc3RpbmF0aW9u
KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KToKKyAgICAgICAg
KEV3a19Eb3dubG9hZF9Kb2I6OnNldERlc3RpbmF0aW9uKToKKyAgICAgICAgKGV3a19kb3dubG9h
ZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9i
OjpzdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2NhbmNlbCk6
CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpjYW5jZWwpOgorICAgICAgICAoZXdrX2Rvd25s
b2FkX2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9K
b2I6OmVzdGltYXRlZFByb2dyZXNzKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfZWxhcHNl
ZF90aW1lX2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjplbGFwc2VkVGltZSk6Cisg
ICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRSZXNwb25zZSk6CisgICAgICAgIChFd2tfRG93
bmxvYWRfSm9iOjpzZXRTdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAgICAgIChFd2tfRG93bmxvYWRf
Sm9iOjppbmNyZW1lbnRSZWNlaXZlZERhdGEpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6
c2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2Iu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUu
aDoKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2IpOgorCiAyMDEyLTEwLTE4ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBG
aXggR1RLKyBkZWJ1ZyBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBiNzYxN2RhLi43YTI0NTExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0yMDUsNyAr
MjA1LDcgQEAgdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfYWRkKEV3a19Db250ZXh0KiBl
d2tDb250ZXh0LCBFd2tfRG93bmxvYWRfSm9iKiBld2sKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tE
b3dubG9hZCk7CiAKLSAgICB1aW50NjRfdCBkb3dubG9hZElkID0gZXdrX2Rvd25sb2FkX2pvYl9p
ZF9nZXQoZXdrRG93bmxvYWQpOworICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSBld2tEb3dubG9h
ZC0+aWQoKTsKICAgICBpZiAoZXdrQ29udGV4dC0+ZG93bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25s
b2FkSWQpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3Bw
CmluZGV4IDA4OGJkNmEuLjhjMDkyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNw
cApAQCAtNTMsMTQgKzUzLDE0IEBAIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvCiAgICAgRXdrX0Rv
d25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdr
Q29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwog
ICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9m
aWxlbmFtZV9zZXQoZG93bmxvYWQsIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGRvd25sb2FkLT5zZXRTdWdnZXN0ZWRGaWxlTmFtZSh0b0ltcGwoZmlsZW5h
bWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBk
b3dubG9hZCBzaWduYWwgb24gdGhlIEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVk
IHRoZSByZXNwb25zZQogICAgIC8vIGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4KLSAgICBl
d2tfdmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQo
ZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX3JlcXVlc3Rl
ZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAKICAgICAvLyBEb3dubG9hZFNvdXAgZXhw
ZWN0cyB0aGUgZGVzdGluYXRpb24gdG8gYmUgYSBVUkwuCi0gICAgU3RyaW5nIGRlc3RpbmF0aW9u
ID0gU3RyaW5nKCJmaWxlOi8vIikgKyBTdHJpbmc6OmZyb21VVEY4KGV3a19kb3dubG9hZF9qb2Jf
ZGVzdGluYXRpb25fZ2V0KGRvd25sb2FkKSk7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gU3Ry
aW5nKCJmaWxlOi8vIikgKyBTdHJpbmc6OmZyb21VVEY4KGRvd25sb2FkLT5kZXN0aW5hdGlvbigp
KTsKIAogICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlv
bi51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VS
TFJlc3AKIHsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rv
d25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9h
ZCktPmRvd25sb2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBld2tfZG93bmxv
YWRfam9iX3Jlc3BvbnNlX3NldChkb3dubG9hZCwgRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdr
UmVzcG9uc2UpKTsKKyAgICBkb3dubG9hZC0+c2V0UmVzcG9uc2UoRXdrX1VybF9SZXNwb25zZTo6
Y3JlYXRlKHdrUmVzcG9uc2UpKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRp
b24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIC8q
cGF0aCovLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtNzcsNDcgKzc3LDQ3IEBAIHN0YXRp
YyB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3
a0Rvd25sb2FkLCBXS1N0cmluCiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tf
Y29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBs
KHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAg
ICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9T
VEFURV9ET1dOTE9BRElORyk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9K
T0JfU1RBVEVfRE9XTkxPQURJTkcpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2Fk
ID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyks
IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQp
OwotICAgIGV3a19kb3dubG9hZF9qb2JfcmVjZWl2ZWRfZGF0YShkb3dubG9hZCwgbGVuZ3RoKTsK
KyAgICBkb3dubG9hZC0+aW5jcmVtZW50UmVjZWl2ZWREYXRhKGxlbmd0aCk7CiB9CiAKLXN0YXRp
YyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdL
RXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9pZCBkaWRG
YWlsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVy
cm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25sb2FkSWQg
PSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNs
aWVudEluZm8pLCBkb3dubG9hZElkKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCiAgICAgT3du
UHRyPEV3a19FcnJvcj4gZXdrRXJyb3IgPSBFd2tfRXJyb3I6OmNyZWF0ZShlcnJvcik7Ci0gICAg
ZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9KT0JfU1RB
VEVfRkFJTEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmFpbGVkKGV3a19kb3dubG9h
ZF9qb2Jfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCwgZXdrRXJyb3IuZ2V0KCkpOworICAg
IGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7CisgICAg
ZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCwg
ZXdrRXJyb3IuZ2V0KCkpOwogICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUodG9F
d2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKIH0KIAotc3RhdGljIHZvaWQgZGlk
Q2FuY2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlkQ2FuY2VsKFdLQ29udGV4dFJlZiwgV0tEb3du
bG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIHVpbnQ2
NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKICAgICBF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQo
dG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKICAgICBBU1NFUlQoZG93bmxv
YWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dO
TE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfY2Fu
Y2VsbGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCk7Cisg
ICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsK
KyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfY2FuY2VsbGVkKGRvd25sb2FkLT52aWV3KCksIGRv
d25sb2FkKTsKICAgICBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZEZpbmlzaChX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbykKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYg
d2tEb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICB1aW50NjRfdCBkb3du
bG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CiAgICAgRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29u
dGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAot
ICAgIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9C
X1NUQVRFX0ZJTklTSEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQoZXdr
X2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBkb3dubG9h
ZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7CisgICAgZXdrX3Zp
ZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKICAg
ICBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KSwgZG93bmxvYWRJZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAKaW5kZXggNDZhMTk4ZC4uYzBmYTNkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pv
Yi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X2pvYi5jcHAKQEAgLTM1LDYgKzM1LDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAK
K0V3a19Eb3dubG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IoV2ViS2l0OjpEb3dubG9hZFByb3h5
KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgOiBtX2Rvd25sb2FkUHJveHko
ZG93bmxvYWQpCisgICAgLCBtX3ZpZXcoZXdrVmlldykKKyAgICAsIG1fc3RhdGUoRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAsIG1fc3RhcnRUaW1lKC0xKQorICAgICwg
bV9lbmRUaW1lKC0xKQorICAgICwgbV9kb3dubG9hZGVkKDApCit7IH0KKwogRXdrX0Rvd25sb2Fk
X0pvYiogZXdrX2Rvd25sb2FkX2pvYl9yZWYoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKQEAgLTU1
LDEyICs2NCw5IEBAIHZvaWQgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCkKICAqIEBpbnRlcm5hbAogICogUXVlcmllcyB0aGUgaWRlbnRpZmllciBmb3Ig
dGhpcyBkb3dubG9hZAogICovCi11aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25z
dCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK3VpbnQ2NF90IEV3a19Eb3dubG9hZF9Kb2I6
OmlkKCkgY29uc3QKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxv
YWQsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93
bmxvYWRQcm94eSwgMCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmRv
d25sb2FkSUQoKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCk7CiB9
CiAKIC8qKgpAQCAtNjgsNDUgKzc0LDYyIEBAIHVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRf
Z2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogICogUmV0dXJucyB0aGUgdmll
dyB0aGlzIGRvd25sb2FkIGlzIGF0dGFjaGVkIHRvLgogICogVGhlIHZpZXcgaXMgbmVlZGVkIHRv
IHNlbmQgbm90aWZpY2F0aW9uIHNpZ25hbHMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfZG93bmxv
YWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQorRXZhc19P
YmplY3QqIEV3a19Eb3dubG9hZF9Kb2I6OnZpZXcoKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQt
PnZpZXc7CisgICAgcmV0dXJuIG1fdmlldzsKIH0KIAogRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBl
d2tfZG93bmxvYWRfam9iX3N0YXRlX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9h
ZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfVU5LTk9XTik7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnN0YXRl
OworICAgIHJldHVybiBkb3dubG9hZC0+c3RhdGUoKTsKK30KKworRXdrX0Rvd25sb2FkX0pvYl9T
dGF0ZSBFd2tfRG93bmxvYWRfSm9iOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Rh
dGU7CiB9CiAKIEV3a19VcmxfUmVxdWVzdCogZXdrX2Rvd25sb2FkX2pvYl9yZXF1ZXN0X2dldChj
b25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwogCi0gICAgaWYgKCFkb3dubG9hZC0+cmVxdWVz
dCkgewotICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQtPmRv
d25sb2FkUHJveHksIDApOwotICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlcXVlc3RSZWY+IHdr
VVJMUmVxdWVzdChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0OjpjcmVhdGUoZG93bmxvYWQt
PmRvd25sb2FkUHJveHktPnJlcXVlc3QoKSkubGVha1JlZigpKSk7Ci0gICAgICAgIGNvbnN0X2Nh
c3Q8RXdrX0Rvd25sb2FkX0pvYio+KGRvd25sb2FkKS0+cmVxdWVzdCA9IEV3a19VcmxfUmVxdWVz
dDo6Y3JlYXRlKHdrVVJMUmVxdWVzdC5nZXQoKSk7CisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXF1
ZXN0KCk7Cit9CisKK0V3a19VcmxfUmVxdWVzdCogRXdrX0Rvd25sb2FkX0pvYjo6cmVxdWVzdCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3JlcXVlc3QpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tV
UkxSZXF1ZXN0UmVmPiB3a1VSTFJlcXVlc3QoQWRvcHRXSywgdG9BUEkoV2ViVVJMUmVxdWVzdDo6
Y3JlYXRlKG1fZG93bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKKyAgICAgICAg
bV9yZXF1ZXN0ID0gRXdrX1VybF9SZXF1ZXN0OjpjcmVhdGUod2tVUkxSZXF1ZXN0LmdldCgpKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnJlcXVlc3QuZ2V0KCk7CisgICAgcmV0dXJu
IG1fcmVxdWVzdC5nZXQoKTsKIH0KIAogRXdrX1VybF9SZXNwb25zZSogZXdrX2Rvd25sb2FkX2pv
Yl9yZXNwb25zZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKIAotICAgIHJldHVy
biBkb3dubG9hZC0+cmVzcG9uc2UuZ2V0KCk7CisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXNwb25z
ZSgpOworfQorCitFd2tfVXJsX1Jlc3BvbnNlKiBFd2tfRG93bmxvYWRfSm9iOjpyZXNwb25zZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVzcG9uc2UuZ2V0KCk7CiB9CiAKIGNvbnN0IGNoYXIq
IGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2Iq
IGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9h
ZCwgMCk7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPmRlc3RpbmF0aW9uOworICAgIHJldHVybiBk
b3dubG9hZC0+ZGVzdGluYXRpb24oKTsKK30KKworY29uc3QgY2hhciogRXdrX0Rvd25sb2FkX0pv
Yjo6ZGVzdGluYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2Rlc3RpbmF0aW9uOwogfQog
CiBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQpAQCAtMTE0LDI4ICsxMzcs
NDIgQEAgRWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19Eb3du
bG9hZF9Kb2IqIGRvd25sb2FkLCBjb25zdCBjaGEKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZG93bmxvYWQsIGZhbHNlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZGVzdGluYXRpb24sIGZhbHNlKTsKIAotICAgIGRvd25sb2FkLT5kZXN0aW5hdGlvbiA9
IGRlc3RpbmF0aW9uOworICAgIGRvd25sb2FkLT5zZXREZXN0aW5hdGlvbihkZXN0aW5hdGlvbik7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgY2hhciAqZXdrX2Rvd25sb2FkX2pvYl9z
dWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQor
dm9pZCBFd2tfRG93bmxvYWRfSm9iOjpzZXREZXN0aW5hdGlvbihjb25zdCBjaGFyKiBkZXN0aW5h
dGlvbikKK3sKKyAgICBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247Cit9CisKK2NvbnN0IGNo
YXIqIGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChjb25zdCBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZG93bmxvYWQsIDApOwogCi0gICAgcmV0dXJuIGRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFt
ZTsKKyAgICByZXR1cm4gZG93bmxvYWQtPnN1Z2dlc3RlZEZpbGVOYW1lKCk7Cit9CisKK2NvbnN0
IGNoYXIqIEV3a19Eb3dubG9hZF9Kb2I6OnN1Z2dlc3RlZEZpbGVOYW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19kb3dubG9h
ZF9qb2JfY2FuY2VsKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgZmFsc2UpOwogCi0g
ICAgaWYgKGRvd25sb2FkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FE
SU5HKQorICAgIHJldHVybiBkb3dubG9hZC0+Y2FuY2VsKCk7Cit9CisKK2Jvb2wgRXdrX0Rvd25s
b2FkX0pvYjo6Y2FuY2VsKCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9C
X1NUQVRFX0RPV05MT0FESU5HKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkb3dubG9h
ZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkc7Ci0gICAgZG93bmxv
YWQtPmRvd25sb2FkUHJveHktPmNhbmNlbCgpOworICAgIG1fc3RhdGUgPSBFV0tfRE9XTkxPQURf
Sk9CX1NUQVRFX0NBTkNFTExJTkc7CisgICAgbV9kb3dubG9hZFByb3h5LT5jYW5jZWwoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQzLDgyICsxODAsOTAgQEAgZG91YmxlIGV3a19kb3du
bG9hZF9qb2JfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBk
b3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQs
IDApOwogCi0gICAgaWYgKCFkb3dubG9hZC0+cmVzcG9uc2UpCisgICAgcmV0dXJuIGRvd25sb2Fk
LT5lc3RpbWF0ZWRQcm9ncmVzcygpOworfQorCitkb3VibGUgRXdrX0Rvd25sb2FkX0pvYjo6ZXN0
aW1hdGVkUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghbV9yZXNwb25zZSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGggPSBld2tf
dXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2UuZ2V0KCkp
OworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxfcmVzcG9u
c2VfY29udGVudF9sZW5ndGhfZ2V0KG1fcmVzcG9uc2UuZ2V0KCkpOwogICAgIGlmICghY29udGVu
dExlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
YmxlPihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOwogfQogCiBk
b3VibGUgZXdrX2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChk
b3dubG9hZCwgMCk7CiAKKyAgICByZXR1cm4gZG93bmxvYWQtPmVsYXBzZWRUaW1lKCk7Cit9CisK
K2RvdWJsZSBFd2tfRG93bmxvYWRfSm9iOjplbGFwc2VkVGltZSgpIGNvbnN0Cit7CiAgICAgLy8g
RG93bmxvYWQgaGFzIG5vdCBzdGFydGVkIHlldC4KLSAgICBpZiAoZG93bmxvYWQtPnN0YXJ0VGlt
ZSA8IDApCisgICAgaWYgKG1fc3RhcnRUaW1lIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBEb3dubG9hZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4g
dGhlCiAgICAgLy8gZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZlbnQuCi0gICAgaWYgKGRv
d25sb2FkLT5lbmRUaW1lID49IDApCi0gICAgICAgIHJldHVybiBkb3dubG9hZC0+ZW5kVGltZSAt
IGRvd25sb2FkLT5zdGFydFRpbWU7CisgICAgaWYgKG1fZW5kVGltZSA+PSAwKQorICAgICAgICBy
ZXR1cm4gbV9lbmRUaW1lIC0gbV9zdGFydFRpbWU7CiAKICAgICAvLyBEb3dubG9hZCBpcyBzdGls
bCBnb2luZy4KLSAgICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAtIGRvd25sb2FkLT5zdGFydFRp
bWU7CisgICAgcmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCkgLSBtX3N0YXJ0VGltZTsKIH0KIAogLyoq
CiAgKiBAaW50ZXJuYWwKICAqIFNldHMgdGhlIFVSTCBAYSByZXNwb25zZSBmb3IgdGhpcyBAYSBk
b3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25z
ZSkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6c2V0UmVzcG9uc2UoUGFzc1JlZlB0cjxFd2tfVXJs
X1Jlc3BvbnNlPiByZXNwb25zZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihk
b3dubG9hZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocmVzcG9uc2UpOworICAg
IEFTU0VSVChyZXNwb25zZSk7CiAKLSAgICBkb3dubG9hZC0+cmVzcG9uc2UgPSByZXNwb25zZTsK
KyAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBT
ZXRzIHRoZSBzdWdnZXN0ZWQgZmlsZSBuYW1lIGZvciB0aGlzIEBhIGRvd25sb2FkLgogICovCi12
b2lkIGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWRf
Sm9iKiBkb3dubG9hZCwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCit2b2lkIEV3a19E
b3dubG9hZF9Kb2I6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZp
bGVuYW1lKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKLQot
ICAgIGRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworICAg
IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogLyoqCiAgKiBA
aW50ZXJuYWwKICAqIFJlcG9ydCBhIGdpdmVuIGFtb3VudCBvZiBkYXRhIHdhcyByZWNlaXZlZC4K
ICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pv
YiogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6aW5j
cmVtZW50UmVjZWl2ZWREYXRhKHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihkb3dubG9hZCk7Ci0KLSAgICBkb3dubG9hZC0+ZG93bmxvYWRlZCArPSBs
ZW5ndGg7CisgICAgbV9kb3dubG9hZGVkICs9IGxlbmd0aDsKIH0KIAogLyoqCiAgKiBAaW50ZXJu
YWwKICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93
bmxvYWRfam9iX3N0YXRlX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgRXdrX0Rvd25s
b2FkX0pvYl9TdGF0ZSBzdGF0ZSkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6c2V0U3RhdGUoRXdr
X0Rvd25sb2FkX0pvYl9TdGF0ZSBzdGF0ZSkKIHsKLSAgICBkb3dubG9hZC0+c3RhdGUgPSBzdGF0
ZTsKLQotICAgIC8vIFVwZGF0ZSBzdGFydCB0aW1lIGlmIHRoZSBkb3dubG9hZCBoYXMgc3RhcnRl
ZAotICAgIGlmIChzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQot
ICAgICAgICBkb3dubG9hZC0+c3RhcnRUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKLQotICAgIC8v
IFVwZGF0ZSBlbmQgdGltZSBpZiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVkIChzdWNjZXNzZnVs
bHkgb3Igbm90KQotICAgIGlmIChzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxF
RAotICAgICAgICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExFRAot
ICAgICAgICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEKQotICAg
ICAgICBkb3dubG9hZC0+ZW5kVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7CisgICAgbV9zdGF0ZSA9
IHN0YXRlOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgRVdLX0RPV05MT0FEX0pP
Ql9TVEFURV9ET1dOTE9BRElORzoKKyAgICAgICAgbV9zdGFydFRpbWUgPSBlY29yZV90aW1lX2dl
dCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRkFJ
TEVEOgorICAgIGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQ6CisgICAgY2Fz
ZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEOgorICAgICAgICBtX2VuZFRpbWUgPSBl
Y29yZV90aW1lX2dldCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfZG93bmxvYWRfam9iLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZG93bmxvYWRfam9iLmgKaW5kZXggMGNhZDVjMi4uMTU2ZjI5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaApAQCAt
NDMsNyArNDMsNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotLyoqIENyZWF0ZXMgYSB0eXBl
IG5hbWUgZm9yIEV3a19Eb3dubG9hZF9Kb2JfSm9iICovCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFt
ZSBmb3IgRXdrX0Rvd25sb2FkX0pvYiAqLwogdHlwZWRlZiBzdHJ1Y3QgRXdrX0Rvd25sb2FkX0pv
YiBFd2tfRG93bmxvYWRfSm9iOwogCiAvLy8gRGVmaW5lcyB0aGUgcG9zc2libGUgc3RhdGVzIG9m
IGEgZG93bmxvYWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCmluZGV4IDVmYWM0N2QuLmUyNTAxZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9h
ZF9qb2JfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCkBAIC0zNyw0NiArMzcsNDggQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5OwogfQogCi0vKioKLSAqIFxzdHJ1Y3QgIEV3a19E
b3dubG9hZF9Kb2IKLSAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBkb3dubG9hZCBkYXRhLgotICov
CiBjbGFzcyBFd2tfRG93bmxvYWRfSm9iIDogcHVibGljIFJlZkNvdW50ZWQ8RXdrX0Rvd25sb2Fk
X0pvYj4gewogcHVibGljOgotICAgIFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94
eTsKLSAgICBFdmFzX09iamVjdCogdmlldzsKLSAgICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0
YXRlOwotICAgIFJlZlB0cjxFd2tfVXJsX1JlcXVlc3Q+IHJlcXVlc3Q7Ci0gICAgUmVmUHRyPEV3
a19VcmxfUmVzcG9uc2U+IHJlc3BvbnNlOwotICAgIGRvdWJsZSBzdGFydFRpbWU7Ci0gICAgZG91
YmxlIGVuZFRpbWU7Ci0gICAgdWludDY0X3QgZG93bmxvYWRlZDsgLyoqPCBsZW5ndGggYWxyZWFk
eSBkb3dubG9hZGVkICovCi0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uOwotICAg
IFdLRWluYVNoYXJlZFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZTsKLQogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEV3a19Eb3dubG9hZF9Kb2I+IGNyZWF0ZShXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRv
d25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRXdrX0Rvd25sb2FkX0pvYihkb3dubG9hZCwgZXdrVmlldykpOwogICAgIH0KIAot
cHJpdmF0ZToKLSAgICBFd2tfRG93bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93
bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQotICAgICAgICA6IGRvd25sb2FkUHJveHkoZG93
bmxvYWQpCi0gICAgICAgICwgdmlldyhld2tWaWV3KQotICAgICAgICAsIHN0YXRlKEVXS19ET1dO
TE9BRF9KT0JfU1RBVEVfTk9UX1NUQVJURUQpCi0gICAgICAgICwgc3RhcnRUaW1lKC0xKQotICAg
ICAgICAsIGVuZFRpbWUoLTEpCi0gICAgICAgICwgZG93bmxvYWRlZCgwKQotICAgIHsgfQotfTsK
KyAgICB1aW50NjRfdCBpZCgpIGNvbnN0OworICAgIEV2YXNfT2JqZWN0KiB2aWV3KCkgY29uc3Q7
CisKKyAgICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRTdGF0ZShFd2tfRG93bmxvYWRfSm9iX1N0YXRlKTsKKworICAgIEV3a19VcmxfUmVxdWVzdCog
cmVxdWVzdCgpIGNvbnN0OworICAgIEV3a19VcmxfUmVzcG9uc2UqIHJlc3BvbnNlKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRSZXNwb25zZShQYXNzUmVmUHRyPEV3a19VcmxfUmVzcG9uc2U+KTsKIAot
dHlwZWRlZiBzdHJ1Y3QgRXdrX0Vycm9yIEV3a19FcnJvcjsKKyAgICBjb25zdCBjaGFyKiBkZXN0
aW5hdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0RGVzdGluYXRpb24oY29uc3QgY2hhciogZGVz
dGluYXRpb24pOwogCi11aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25zdCBFd2tf
RG93bmxvYWRfSm9iKik7Ci1FdmFzX09iamVjdCogZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChj
b25zdCBFd2tfRG93bmxvYWRfSm9iKik7Ci12b2lkIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVfc2V0
KEV3a19Eb3dubG9hZF9Kb2IqLCBFd2tfRG93bmxvYWRfSm9iX1N0YXRlKTsKLXZvaWQgZXdrX2Rv
d25sb2FkX2pvYl9yZWNlaXZlZF9kYXRhKEV3a19Eb3dubG9hZF9Kb2IqLCB1aW50NjRfdCBsZW5n
dGgpOwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxvYWRfSm9i
KiwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPik7Ci12b2lkIGV3a19kb3dubG9hZF9qb2Jf
c3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWRfSm9iKiwgY29uc3QgY2hhciogc3Vn
Z2VzdGVkRmlsZW5hbWUpOworICAgIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVOYW1lKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRTdWdnZXN0ZWRGaWxlTmFtZShjb25zdCBjaGFyKiBmaWxlTmFtZSk7
CisKKyAgICBib29sIGNhbmNlbCgpOworCisgICAgZG91YmxlIGVzdGltYXRlZFByb2dyZXNzKCkg
Y29uc3Q7CisgICAgZG91YmxlIGVsYXBzZWRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBpbmNyZW1l
bnRSZWNlaXZlZERhdGEodWludDY0X3QgbGVuZ3RoKTsKKworcHJpdmF0ZToKKyAgICBFd2tfRG93
bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBl
d2tWaWV3KTsKKworICAgIFdlYktpdDo6RG93bmxvYWRQcm94eSogbV9kb3dubG9hZFByb3h5Owor
ICAgIEV2YXNfT2JqZWN0KiBtX3ZpZXc7CisgICAgRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBtX3N0
YXRlOworICAgIG11dGFibGUgUmVmUHRyPEV3a19VcmxfUmVxdWVzdD4gbV9yZXF1ZXN0OworICAg
IFJlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiBtX3Jlc3BvbnNlOworICAgIGRvdWJsZSBtX3N0YXJ0
VGltZTsKKyAgICBkb3VibGUgbV9lbmRUaW1lOworICAgIHVpbnQ2NF90IG1fZG93bmxvYWRlZDsg
Ly8gbGVuZ3RoIGFscmVhZHkgZG93bmxvYWRlZAorICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX2Rl
c3RpbmF0aW9uOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOwor
fTsKIAogI2VuZGlmIC8vIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169588</attachid>
            <date>2012-10-19 03:32:43 -0700</date>
            <delta_ts>2012-10-19 05:52:11 -0700</delta_ts>
            <desc>Pimpl</desc>
            <filename>99697_ewk_download_pimpl.patch</filename>
            <type>text/plain</type>
            <size>22635</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkNjU5ZTdhLi5kYzA0MWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMTAtMTkgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4gYW5kIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5j
b20+CisKKyAgICAgICAgW0VGTF1bV0syXSBNYWtlIEV3a19Eb3dubG9hZF9Kb2IgbWVtYmVycyBw
cml2YXRlIGFuZCByZW1vdmUgcHJpdmF0ZSBDIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk2OTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgcGltcGwgaWRpb20gaW4gRXdrX0Rvd25s
b2FkX0pvYiBzbyB0aGF0IHRoZQorICAgICAgICBjbGFzcyBtZW1iZXJzIGFyZSBub3cgaW4gYSBQ
T0Qgc3RydWN0IGluIHRoZSBjcHAKKyAgICAgICAgZmlsZS4gVGhpcyB3YXksIHRob3NlIG1lbWJl
cnMgY2Fubm90IGJlIGFsdGVyZWQKKyAgICAgICAgZnJvbSBvdXRzaWRlIEV3a19Eb3dubG9hZF9K
b2IgYnV0IHRoZSBwdWJsaWMgQworICAgICAgICBBUEkgY2FuIHN0aWxsIGFjY2VzcyB0aG9zZSBt
ZW1iZXJzIGRpcmVjdGx5CisgICAgICAgIHdpdGhvdXQgdXNpbmcgY2xhc3MgZ2V0dGVycyBvciBz
ZXR0ZXJzLgorCisgICAgICAgIEMgZnVuY3Rpb25zIGluIHRoZSBwcml2YXRlIGhlYWRlciBhbmQg
bm93IHJlcGxhY2VkCisgICAgICAgIGJ5IEMrKyBtZXRob2RzIGluIEV3a19Eb3dubG9hZF9Kb2Ig
Y2xhc3Mgc28gdGhhdAorICAgICAgICB3ZSBjYW4gdXNlIEMrKyBzdHlsZSBhcyBtdWNoIGFzIHBv
c3NpYmxlIGluIFdlYktpdDIKKyAgICAgICAgRUZMIGltcGxlbWVudGF0aW9uIGNvZGUuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoZXdrX2NvbnRleHRf
ZG93bmxvYWRfam9iX2FkZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfZG93bmxvYWRfY2xpZW50LmNwcDoKKyAgICAgICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAgKGRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAg
IChkaWRDcmVhdGVEZXN0aW5hdGlvbik6CisgICAgICAgIChkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChkaWRGYWlsKToKKyAgICAgICAgKGRpZENhbmNlbCk6CisgICAgICAgIChkaWRGaW5pc2gp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwOgorICAg
ICAgICAoRXdrX0Rvd25sb2FkX0pvYl9Qcml2YXRlKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9K
b2JfUHJpdmF0ZTo6RXdrX0Rvd25sb2FkX0pvYl9Qcml2YXRlKToKKyAgICAgICAgKEV3a19Eb3du
bG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6
fkV3a19Eb3dubG9hZF9Kb2IpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6aWQpOgorICAg
ICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6dmlldyk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9i
X3N0YXRlX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3JlcXVlc3RfZ2V0KToKKyAg
ICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAgKGV3a19kb3du
bG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfZGVz
dGluYXRpb25fc2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVu
YW1lX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2NhbmNlbCk6CisgICAgICAgIChl
d2tfZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6
OmRlc3RpbmF0aW9uKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnNldFJlc3BvbnNlKToK
KyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKToKKyAgICAg
ICAgKEV3a19Eb3dubG9hZF9Kb2I6OmluY3JlbWVudFJlY2VpdmVkRGF0YSk6CisgICAgICAgIChF
d2tfRG93bmxvYWRfSm9iOjpzZXRTdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Rvd25sb2FkX2pvYi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZF9qb2JfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYik6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ByaXZhdGUuaDoKKwogMjAxMi0xMC0xOSAgQ3NhYmEg
T3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEz
MTg0NCk6IEl0IGJyb2tlIHRoZSBidWlsZCBvbiAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
IHBsYXRmb3JtcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
UGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFn
ZUNsaWVudEltcGwuY3BwCmluZGV4IDBjYTc1NjkuLmU2ZGJhYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTM3LDcg
KzM3LDYgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgImV3a19jb250
ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19k
b3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCIKICNp
bmNsdWRlICJld2tfdmlldy5oIgogI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBi
NzYxN2RhLi5kY2FkYjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGll
bnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlcl9wcml2YXRlLmgiCi0j
aW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYi5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2Jf
cHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKICNp
bmNsdWRlICJld2tfcHJpdmF0ZS5oIgpAQCAtMjA1LDcgKzIwNCw3IEBAIHZvaWQgZXdrX2NvbnRl
eHRfZG93bmxvYWRfam9iX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0Rvd25sb2Fk
X0pvYiogZXdrCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrRG93bmxvYWQpOwogCi0gICAgdWludDY0
X3QgZG93bmxvYWRJZCA9IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGV3a0Rvd25sb2FkKTsKKyAg
ICB1aW50NjRfdCBkb3dubG9hZElkID0gZXdrRG93bmxvYWQtPmlkKCk7CiAgICAgaWYgKGV3a0Nv
bnRleHQtPmRvd25sb2FkSm9icy5jb250YWlucyhkb3dubG9hZElkKSkKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAppbmRleCAwODhiZDZhLi45OWYwZWE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNp
bmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVu
dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgotI2luY2x1ZGUg
ImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iX3ByaXZhdGUu
aCIKICNpbmNsdWRlICJld2tfZXJyb3JfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a191cmxfcmVz
cG9uc2UuaCIKQEAgLTUzLDE0ICs1MiwxNCBAQCBzdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVz
dGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rvd25sbwogICAg
IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dl
dCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJ
RCgpKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdWdn
ZXN0ZWRfZmlsZW5hbWVfc2V0KGRvd25sb2FkLCB0b0ltcGwoZmlsZW5hbWUpLT5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBkb3dubG9hZC0+c2V0U3VnZ2VzdGVkRmlsZU5hbWUodG9JbXBs
KGZpbGVuYW1lKS0+c3RyaW5nKCkpOwogCiAgICAgLy8gV2Ugc2VuZCB0aGUgbmV3IGRvd25sb2Fk
IHNpZ25hbCBvbiB0aGUgRXdrX1ZpZXcgb25seSBvbmNlIHdlIGhhdmUgcmVjZWl2ZWQgdGhlIHJl
c3BvbnNlCiAgICAgLy8gYW5kIHRoZSBzdWdnZXN0ZWQgZmlsZSBuYW1lLgotICAgIGV3a192aWV3
X2Rvd25sb2FkX2pvYl9yZXF1ZXN0ZWQoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9h
ZCksIGRvd25sb2FkKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKGRvd25s
b2FkLT52aWV3KCksIGRvd25sb2FkKTsKIAogICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRo
ZSBkZXN0aW5hdGlvbiB0byBiZSBhIFVSTC4KLSAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBTdHJp
bmcoImZpbGU6Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5h
dGlvbl9nZXQoZG93bmxvYWQpKTsKKyAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBBU0NJSUxpdGVy
YWwoImZpbGU6Ly8iKSArIGRvd25sb2FkLT5kZXN0aW5hdGlvbigpOwogCiAgICAgcmV0dXJuIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRlc3RpbmF0aW9uLnV0ZjgoKS5kYXRhKCkpOwog
fQpAQCAtNjksNyArNjgsNyBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV0tDb250
ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLVVJMUmVzcAogewogICAgIEV3a19E
b3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3
a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsK
ICAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2Vfc2V0
KGRvd25sb2FkLCBFd2tfVXJsX1Jlc3BvbnNlOjpjcmVhdGUod2tSZXNwb25zZSkpOworICAgIGRv
d25sb2FkLT5zZXRSZXNwb25zZShFd2tfVXJsX1Jlc3BvbnNlOjpjcmVhdGUod2tSZXNwb25zZSkp
OwogfQogCiBzdGF0aWMgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdL
RG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgLypwYXRoKi8sIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCkBAIC03Nyw0NyArNzYsNDkgQEAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVz
dGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW4K
ICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pv
Yl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25s
b2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAotICAgIGV3a19kb3dubG9hZF9qb2Jf
c3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKTsK
KyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElO
Ryk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdLQ29udGV4dFJlZiwgV0tEb3du
bG9hZFJlZiB3a0Rvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7CiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3du
bG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQp
LT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7Ci0gICAgZXdrX2Rvd25sb2Fk
X2pvYl9yZWNlaXZlZF9kYXRhKGRvd25sb2FkLCBsZW5ndGgpOworICAgIGRvd25sb2FkLT5pbmNy
ZW1lbnRSZWNlaXZlZERhdGEobGVuZ3RoKTsKIH0KIAotc3RhdGljIHZvaWQgZGlkRmFpbChXS0Nv
bnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tFcnJvclJlZiBlcnJvciwgY29u
c3Qgdm9pZCAqY2xpZW50SW5mbykKK3N0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBX
S0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCiB7CiAgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2Fk
KS0+ZG93bmxvYWRJRCgpOwogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gZXdrX2Nv
bnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2Fk
SWQpOwogICAgIEFTU0VSVChkb3dubG9hZCk7CiAKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdL
X0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQpOworCiAgICAgT3duUHRyPEV3a19FcnJvcj4gZXdr
RXJyb3IgPSBFd2tfRXJyb3I6OmNyZWF0ZShlcnJvcik7Ci0gICAgZXdrX2Rvd25sb2FkX2pvYl9z
dGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEKTsKLSAgICBl
d2tfdmlld19kb3dubG9hZF9qb2JfZmFpbGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93
bmxvYWQpLCBkb3dubG9hZCwgZXdrRXJyb3IuZ2V0KCkpOworICAgIGV3a192aWV3X2Rvd25sb2Fk
X2pvYl9mYWlsZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsK
ICAgICBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJ
bmZvKSwgZG93bmxvYWRJZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRS
ZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3N0
YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9h
ZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICB1aW50NjRfdCBkb3dubG9hZElkID0g
dG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CiAgICAgRXdrX0Rvd25sb2FkX0pvYiog
ZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGll
bnRJbmZvKSwgZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAotICAgIGV3a19k
b3dubG9hZF9qb2Jfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NB
TkNFTExFRCk7Ci0gICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2NhbmNlbGxlZChld2tfZG93bmxv
YWRfam9iX3ZpZXdfZ2V0KGRvd25sb2FkKSwgZG93bmxvYWQpOworICAgIGRvd25sb2FkLT5zZXRT
dGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExFRCk7CisKKyAgICBld2tfdmlld19k
b3dubG9hZF9qb2JfY2FuY2VsbGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKICAgICBl
d2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
ZG93bmxvYWRJZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdL
RG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3N0YXRpYyB2
b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBs
KHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxv
YWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KSwgZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAotICAgIGV3a19kb3dubG9h
ZF9qb2Jfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVE
KTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQoZXdrX2Rvd25sb2FkX2pvYl92
aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdL
X0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9i
X2ZpbmlzaGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKICAgICBld2tfY29udGV4dF9k
b3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19k
b3dubG9hZF9qb2IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rv
d25sb2FkX2pvYi5jcHAKaW5kZXggNDZhMTk4ZC4uNmJiNjk0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAKQEAgLTMy
LDkgKzMyLDQyIEBACiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a19k
b3dubG9hZF9qb2JfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCitzdHJ1Y3QgRXdr
X0Rvd25sb2FkX0pvYl9Qcml2YXRlIHsKKyAgICBFV0tfREVDTEFSRV9QVUJMSUMoRXdrX0Rvd25s
b2FkX0pvYik7CisKKyAgICBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5OworICAgIEV2YXNf
T2JqZWN0KiB2aWV3OworICAgIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGU7CisgICAgUmVm
UHRyPEV3a19VcmxfUmVxdWVzdD4gcmVxdWVzdDsKKyAgICBSZWZQdHI8RXdrX1VybF9SZXNwb25z
ZT4gcmVzcG9uc2U7CisgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBkb3VibGUgZW5kVGltZTsK
KyAgICB1aW50NjRfdCBkb3dubG9hZGVkOyAvLyBsZW5ndGggYWxyZWFkeSBkb3dubG9hZGVkCisg
ICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uOworICAgIFdLRWluYVNoYXJlZFN0cmlu
ZyBzdWdnZXN0ZWRGaWxlbmFtZTsKKworICAgIEV3a19Eb3dubG9hZF9Kb2JfUHJpdmF0ZShEb3du
bG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgICAgIDogZG93
bmxvYWRQcm94eShkb3dubG9hZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisgICAgICAgICwg
c3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAgICAgLCBzdGFy
dFRpbWUoLTEpCisgICAgICAgICwgZW5kVGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDAp
CisgICAgeyB9Cit9OworCitFd2tfRG93bmxvYWRfSm9iOjpFd2tfRG93bmxvYWRfSm9iKFdlYktp
dDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiB2aWV3KQorICAgIDogZChh
ZG9wdFB0cihuZXcgRXdrX0Rvd25sb2FkX0pvYl9Qcml2YXRlKGRvd25sb2FkLCB2aWV3KSkpCit7
IH0KKworRXdrX0Rvd25sb2FkX0pvYjo6fkV3a19Eb3dubG9hZF9Kb2IoKQoreworfQorCiBFd2tf
RG93bmxvYWRfSm9iKiBld2tfZG93bmxvYWRfam9iX3JlZihFd2tfRG93bmxvYWRfSm9iKiBkb3du
bG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDAp
OwpAQCAtNTUsMTIgKzg4LDkgQEAgdm9pZCBld2tfZG93bmxvYWRfam9iX3VucmVmKEV3a19Eb3du
bG9hZF9Kb2IqIGRvd25sb2FkKQogICogQGludGVybmFsCiAgKiBRdWVyaWVzIHRoZSBpZGVudGlm
aWVyIGZvciB0aGlzIGRvd25sb2FkCiAgKi8KLXVpbnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRf
Z2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQordWludDY0X3QgRXdrX0Rvd25s
b2FkX0pvYjo6aWQoKSBjb25zdAogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3dubG9hZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25s
b2FkLT5kb3dubG9hZFByb3h5LCAwKTsKLQotICAgIHJldHVybiBkb3dubG9hZC0+ZG93bmxvYWRQ
cm94eS0+ZG93bmxvYWRJRCgpOworICAgIHJldHVybiBkLT5kb3dubG9hZFByb3h5LT5kb3dubG9h
ZElEKCk7CiB9CiAKIC8qKgpAQCAtNjgsNTMgKzk4LDU2IEBAIHVpbnQ2NF90IGV3a19kb3dubG9h
ZF9qb2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogICogUmV0dXJu
cyB0aGUgdmlldyB0aGlzIGRvd25sb2FkIGlzIGF0dGFjaGVkIHRvLgogICogVGhlIHZpZXcgaXMg
bmVlZGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIHNpZ25hbHMuCiAgKi8KLUV2YXNfT2JqZWN0KiBl
d2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2Fk
KQorRXZhc19PYmplY3QqIEV3a19Eb3dubG9hZF9Kb2I6OnZpZXcoKSBjb25zdAogewotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0KLSAgICByZXR1cm4g
ZG93bmxvYWQtPnZpZXc7CisgICAgcmV0dXJuIGQtPnZpZXc7CiB9CiAKIEV3a19Eb3dubG9hZF9K
b2JfU3RhdGUgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pv
YiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25s
b2FkLCBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX1VOS05PV04pOworICAgIEVXS19EKEV3a19Eb3du
bG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+c3RhdGU7CisgICAg
cmV0dXJuIGQtPnN0YXRlOwogfQogCiBFd2tfVXJsX1JlcXVlc3QqIGV3a19kb3dubG9hZF9qb2Jf
cmVxdWVzdF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tfRChFd2tf
RG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICBpZiAoIWRvd25sb2FkLT5yZXF1ZXN0KSB7
Ci0gICAgICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxv
YWRQcm94eSwgMCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVxdWVzdFJlZj4gd2tVUkxS
ZXF1ZXN0KEFkb3B0V0ssIHRvQVBJKFdlYlVSTFJlcXVlc3Q6OmNyZWF0ZShkb3dubG9hZC0+ZG93
bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKLSAgICAgICAgY29uc3RfY2FzdDxF
d2tfRG93bmxvYWRfSm9iKj4oZG93bmxvYWQpLT5yZXF1ZXN0ID0gRXdrX1VybF9SZXF1ZXN0Ojpj
cmVhdGUod2tVUkxSZXF1ZXN0LmdldCgpKTsKKyAgICBpZiAoIWQtPnJlcXVlc3QpIHsKKyAgICAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGQtPmRvd25sb2FkUHJveHksIDApOwor
ICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVzdChBZG9wdFdL
LCB0b0FQSShXZWJVUkxSZXF1ZXN0OjpjcmVhdGUoZC0+ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgp
KS5sZWFrUmVmKCkpKTsKKyAgICAgICAgZC0+cmVxdWVzdCA9IEV3a19VcmxfUmVxdWVzdDo6Y3Jl
YXRlKHdrVVJMUmVxdWVzdC5nZXQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvd25sb2FkLT5y
ZXF1ZXN0LmdldCgpOworICAgIHJldHVybiBkLT5yZXF1ZXN0LmdldCgpOwogfQogCiBFd2tfVXJs
X1Jlc3BvbnNlKiBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX2dldChjb25zdCBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAot
ICAgIHJldHVybiBkb3dubG9hZC0+cmVzcG9uc2UuZ2V0KCk7CisgICAgcmV0dXJuIGQtPnJlc3Bv
bnNlLmdldCgpOwogfQogCiBjb25zdCBjaGFyKiBld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9u
X2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVXS19EKEV3a19Eb3dubG9h
ZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBkb3dubG9hZC0+ZGVzdGluYXRpb247Cisg
ICAgcmV0dXJuIGQtPmRlc3RpbmF0aW9uOwogfQogCiBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2pv
Yl9kZXN0aW5hdGlvbl9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIq
IGRlc3RpbmF0aW9uKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3du
bG9hZCwgZmFsc2UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkZXN0aW5h
dGlvbiwgZmFsc2UpOworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAot
ICAgIGRvd25sb2FkLT5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uOworICAgIGQtPmRlc3RpbmF0
aW9uID0gZGVzdGluYXRpb247CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMiwxMDMgKzE1
NSwxMTIgQEAgRWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19E
b3dubG9hZF9Kb2IqIGRvd25sb2FkLCBjb25zdCBjaGEKIGNvbnN0IGNoYXIgKmV3a19kb3dubG9h
ZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3du
bG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDAp
OworICAgIEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAotICAgIHJldHVybiBk
b3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgcmV0dXJuIGQtPnN1Z2dlc3RlZEZpbGVu
YW1lOwogfQogCiBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2pvYl9jYW5jZWwoRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRv
d25sb2FkLCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25s
b2FkLT5kb3dubG9hZFByb3h5LCBmYWxzZSk7CisgICAgRVdLX0QoRXdrX0Rvd25sb2FkX0pvYiwg
ZG93bmxvYWQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkLT5kb3dubG9h
ZFByb3h5LCBmYWxzZSk7CiAKLSAgICBpZiAoZG93bmxvYWQtPnN0YXRlICE9IEVXS19ET1dOTE9B
RF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpCisgICAgaWYgKGQtPnN0YXRlICE9IEVXS19ET1dOTE9B
RF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRv
d25sb2FkLT5zdGF0ZSA9IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTElORzsKLSAgICBk
b3dubG9hZC0+ZG93bmxvYWRQcm94eS0+Y2FuY2VsKCk7CisgICAgZC0+c3RhdGUgPSBFV0tfRE9X
TkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkc7CisgICAgZC0+ZG93bmxvYWRQcm94eS0+Y2FuY2Vs
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGRvdWJsZSBld2tfZG93bmxvYWRfam9iX2VzdGlt
YXRlZF9wcm9ncmVzc19nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFV0tf
RChFd2tfRG93bmxvYWRfSm9iLCBkb3dubG9hZCk7CiAKLSAgICBpZiAoIWRvd25sb2FkLT5yZXNw
b25zZSkKKyAgICBpZiAoIWQtPnJlc3BvbnNlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNv
bnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxfcmVzcG9uc2VfY29udGVu
dF9sZW5ndGhfZ2V0KGRvd25sb2FkLT5yZXNwb25zZS5nZXQoKSk7CisgICAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBjb250ZW50TGVuZ3RoID0gZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9n
ZXQoZC0+cmVzcG9uc2UuZ2V0KCkpOwogICAgIGlmICghY29udGVudExlbmd0aCkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihkb3dubG9hZC0+ZG93
bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+
KGQtPmRvd25sb2FkZWQpIC8gY29udGVudExlbmd0aDsKIH0KIAogZG91YmxlIGV3a19kb3dubG9h
ZF9qb2JfZWxhcHNlZF90aW1lX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkK
IHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAg
IEVXS19EKEV3a19Eb3dubG9hZF9Kb2IsIGRvd25sb2FkKTsKIAogICAgIC8vIERvd25sb2FkIGhh
cyBub3Qgc3RhcnRlZCB5ZXQuCi0gICAgaWYgKGRvd25sb2FkLT5zdGFydFRpbWUgPCAwKQorICAg
IGlmIChkLT5zdGFydFRpbWUgPCAwKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERvd25s
b2FkIGhhZCBlbmRlZCwgcmV0dXJuIHRoZSB0aW1lIGVsYXBzZWQgYmV0d2VlbiB0aGUKICAgICAv
LyBkb3dubG9hZCBzdGFydCBhbmQgdGhlIGVuZCBldmVudC4KLSAgICBpZiAoZG93bmxvYWQtPmVu
ZFRpbWUgPj0gMCkKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkLT5lbmRUaW1lIC0gZG93bmxvYWQt
PnN0YXJ0VGltZTsKKyAgICBpZiAoZC0+ZW5kVGltZSA+PSAwKQorICAgICAgICByZXR1cm4gZC0+
ZW5kVGltZSAtIGQtPnN0YXJ0VGltZTsKIAogICAgIC8vIERvd25sb2FkIGlzIHN0aWxsIGdvaW5n
LgotICAgIHJldHVybiBlY29yZV90aW1lX2dldCgpIC0gZG93bmxvYWQtPnN0YXJ0VGltZTsKKyAg
ICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAtIGQtPnN0YXJ0VGltZTsKIH0KIAogLyoqCiAgKiBA
aW50ZXJuYWwKICAqIFNldHMgdGhlIFVSTCBAYSByZXNwb25zZSBmb3IgdGhpcyBAYSBkb3dubG9h
ZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxvYWRf
Sm9iKiBkb3dubG9hZCwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZSkKK1N0
cmluZyBFd2tfRG93bmxvYWRfSm9iOjpkZXN0aW5hdGlvbigpIGNvbnN0CiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHJlc3BvbnNlKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkLT5kZXN0aW5h
dGlvbik7Cit9CiAKLSAgICBkb3dubG9hZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKKy8qKgorICog
QGludGVybmFsCisgKiBTZXRzIHRoZSBVUkwgQGEgcmVzcG9uc2UgZm9yIHRoaXMgQGEgZG93bmxv
YWQuCisgKi8KK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6c2V0UmVzcG9uc2UoUGFzc1JlZlB0cjxF
d2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZSkKK3sKKyAgICBkLT5yZXNwb25zZSA9IHJlc3BvbnNl
OwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogU2V0cyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFt
ZSBmb3IgdGhpcyBAYSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3N1Z2dl
c3RlZF9maWxlbmFtZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIq
IHN1Z2dlc3RlZEZpbGVuYW1lKQordm9pZCBFd2tfRG93bmxvYWRfSm9iOjpzZXRTdWdnZXN0ZWRG
aWxlTmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKLQotICAgIGRvd25sb2FkLT5zdWdnZXN0ZWRG
aWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworICAgIGQtPnN1Z2dlc3RlZEZpbGVuYW1lID0g
c3VnZ2VzdGVkRmlsZW5hbWUudXRmOCgpLmRhdGEoKTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwK
ICAqIFJlcG9ydCBhIGdpdmVuIGFtb3VudCBvZiBkYXRhIHdhcyByZWNlaXZlZC4KICAqLwotdm9p
ZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxv
YWQsIHVpbnQ2NF90IGxlbmd0aCkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6aW5jcmVtZW50UmVj
ZWl2ZWREYXRhKHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihkb3dubG9hZCk7Ci0KLSAgICBkb3dubG9hZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7Cisg
ICAgZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBT
ZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZG93bmxvYWQuCiAgKi8KLXZvaWQgZXdrX2Rvd25sb2FkX2pv
Yl9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIEV3a19Eb3dubG9hZF9Kb2Jf
U3RhdGUgc3RhdGUpCit2b2lkIEV3a19Eb3dubG9hZF9Kb2I6OnNldFN0YXRlKEV3a19Eb3dubG9h
ZF9Kb2JfU3RhdGUgc3RhdGUpCiB7Ci0gICAgZG93bmxvYWQtPnN0YXRlID0gc3RhdGU7Ci0KLSAg
ICAvLyBVcGRhdGUgc3RhcnQgdGltZSBpZiB0aGUgZG93bmxvYWQgaGFzIHN0YXJ0ZWQKLSAgICBp
ZiAoc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORykKLSAgICAgICAg
ZG93bmxvYWQtPnN0YXJ0VGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7Ci0KLSAgICAvLyBVcGRhdGUg
ZW5kIHRpbWUgaWYgdGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZCAoc3VjY2Vzc2Z1bGx5IG9yIG5v
dCkKLSAgICBpZiAoc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQKLSAgICAg
ICAgfHwgc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQKLSAgICAgICAg
fHwgc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCkKLSAgICAgICAgZG93
bmxvYWQtPmVuZFRpbWUgPSBlY29yZV90aW1lX2dldCgpOworICAgIGQtPnN0YXRlID0gc3RhdGU7
CisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRF
X0RPV05MT0FESU5HOgorICAgICAgICBkLT5zdGFydFRpbWUgPSBlY29yZV90aW1lX2dldCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEOgor
ICAgIGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQ6CisgICAgY2FzZSBFV0tf
RE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEOgorICAgICAgICBkLT5lbmRUaW1lID0gZWNvcmVf
dGltZV9nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Rvd25sb2FkX2pvYi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkX2pvYi5oCmluZGV4IDBjYWQ1YzIuLjE1NmYyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmgKQEAgLTQzLDcg
KzQzLDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLS8qKiBDcmVhdGVzIGEgdHlwZSBuYW1l
IGZvciBFd2tfRG93bmxvYWRfSm9iX0pvYiAqLworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9y
IEV3a19Eb3dubG9hZF9Kb2IgKi8KIHR5cGVkZWYgc3RydWN0IEV3a19Eb3dubG9hZF9Kb2IgRXdr
X0Rvd25sb2FkX0pvYjsKIAogLy8vIERlZmluZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBvZiBhIGRv
d25sb2FkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkX2pvYl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaAppbmRleCA1ZmFjNDdkLi41MjIxZDFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9i
X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWRfam9iX3ByaXZhdGUuaApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiV0tCYXNl
LmgiCiAjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25s
b2FkX2pvYi5oIgorI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9y
ZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUuaCIK
ICNpbmNsdWRlIDxFdmFzLmg+CkBAIC0zNyw0NiArMzksMjcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBEb3dubG9hZFByb3h5OwogfQogCi0vKioKLSAqIFxzdHJ1Y3QgIEV3a19Eb3dubG9h
ZF9Kb2IKLSAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBkb3dubG9hZCBkYXRhLgotICovCiBjbGFz
cyBFd2tfRG93bmxvYWRfSm9iIDogcHVibGljIFJlZkNvdW50ZWQ8RXdrX0Rvd25sb2FkX0pvYj4g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV3a19Eb3dubG9hZF9Kb2IpOworICAgIEVXS19E
RUNMQVJFX1BSSVZBVEUoRXdrX0Rvd25sb2FkX0pvYik7CiBwdWJsaWM6Ci0gICAgV2ViS2l0OjpE
b3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5OwotICAgIEV2YXNfT2JqZWN0KiB2aWV3OwotICAg
IEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgc3RhdGU7Ci0gICAgUmVmUHRyPEV3a19VcmxfUmVxdWVz
dD4gcmVxdWVzdDsKLSAgICBSZWZQdHI8RXdrX1VybF9SZXNwb25zZT4gcmVzcG9uc2U7Ci0gICAg
ZG91YmxlIHN0YXJ0VGltZTsKLSAgICBkb3VibGUgZW5kVGltZTsKLSAgICB1aW50NjRfdCBkb3du
bG9hZGVkOyAvKio8IGxlbmd0aCBhbHJlYWR5IGRvd25sb2FkZWQgKi8KLSAgICBXS0VpbmFTaGFy
ZWRTdHJpbmcgZGVzdGluYXRpb247Ci0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN1Z2dlc3RlZEZp
bGVuYW1lOwotCisgICAgfkV3a19Eb3dubG9hZF9Kb2IoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxFd2tfRG93bmxvYWRfSm9iPiBjcmVhdGUoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBkb3dubG9h
ZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEV3a19Eb3dubG9hZF9Kb2IoZG93bmxvYWQsIGV3a1ZpZXcpKTsKICAgICB9CiAKLXByaXZh
dGU6Ci0gICAgRXdrX0Rvd25sb2FkX0pvYihXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2Fk
LCBFdmFzX09iamVjdCogZXdrVmlldykKLSAgICAgICAgOiBkb3dubG9hZFByb3h5KGRvd25sb2Fk
KQotICAgICAgICAsIHZpZXcoZXdrVmlldykKLSAgICAgICAgLCBzdGF0ZShFV0tfRE9XTkxPQURf
Sk9CX1NUQVRFX05PVF9TVEFSVEVEKQotICAgICAgICAsIHN0YXJ0VGltZSgtMSkKLSAgICAgICAg
LCBlbmRUaW1lKC0xKQotICAgICAgICAsIGRvd25sb2FkZWQoMCkKLSAgICB7IH0KLX07CisgICAg
dWludDY0X3QgaWQoKSBjb25zdDsKKyAgICBFdmFzX09iamVjdCogdmlldygpIGNvbnN0OworICAg
IFN0cmluZyBkZXN0aW5hdGlvbigpIGNvbnN0OwogCi10eXBlZGVmIHN0cnVjdCBFd2tfRXJyb3Ig
RXdrX0Vycm9yOworICAgIHZvaWQgc2V0U3RhdGUoRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSk7Cisg
ICAgdm9pZCBpbmNyZW1lbnRSZWNlaXZlZERhdGEodWludDY0X3QgbGVuZ3RoKTsKKyAgICB2b2lk
IHNldFJlc3BvbnNlKFBhc3NSZWZQdHI8RXdrX1VybF9SZXNwb25zZT4pOworICAgIHZvaWQgc2V0
U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSk7CiAKLXVp
bnQ2NF90IGV3a19kb3dubG9hZF9qb2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqKTsK
LUV2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9h
ZF9Kb2IqKTsKLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pv
YiosIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUpOwotdm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2Vp
dmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiosIHVpbnQ2NF90IGxlbmd0aCk7Ci12b2lkIGV3a19k
b3dubG9hZF9qb2JfcmVzcG9uc2Vfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBQYXNzUmVmUHRyPEV3
a19VcmxfUmVzcG9uc2U+KTsKLXZvaWQgZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5h
bWVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSk7
Citwcml2YXRlOgorICAgIEV3a19Eb3dubG9hZF9Kb2IoV2ViS2l0OjpEb3dubG9hZFByb3h5KiBk
b3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpOworfTsKIAogI2VuZGlmIC8vIGV3a19kb3du
bG9hZF9qb2JfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ByaXZhdGUuaAppbmRleCA0YmRiMjViLi44NjJjMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wcml2YXRlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNk
ZWZpbmUgZXdrX3ByaXZhdGVfaAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAKICNkZWZpbmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShld2tOYW1lLCB3ZWJjb3JlTmFtZSkgXAogICAgICAgICBDT01QSUxFX0FTU0VSVChpbnQoZXdr
TmFtZSkgPT0gaW50KHdlYmNvcmVOYW1lKSwgbWlzbWF0Y2hpbmdFbnVtcykKQEAgLTM5LDQgKzQw
LDkgQEAgZXh0ZXJuIGludCBfZXdrX2xvZ19kb207CiAjZGVmaW5lIElORk8oLi4uKSBFSU5BX0xP
R19ET01fSU5GTyhfZXdrX2xvZ19kb20sIF9fVkFfQVJHU19fKQogI2RlZmluZSBEQkcoLi4uKSBF
SU5BX0xPR19ET01fREJHKF9ld2tfbG9nX2RvbSwgX19WQV9BUkdTX18pCiAKKy8vIE1hY3JvcyB1
c2VkIGZvciBQaW1wbCBpZGlvbS4KKyNkZWZpbmUgRVdLX0RFQ0xBUkVfUFJJVkFURShDbGFzc05h
bWUpIGNvbnN0IE93blB0cjxzdHJ1Y3QgQ2xhc3NOYW1lIyNfUHJpdmF0ZT4gZDsgZnJpZW5kIHN0
cnVjdCBDbGFzc05hbWUjI19Qcml2YXRlCisjZGVmaW5lIEVXS19ERUNMQVJFX1BVQkxJQyhDbGFz
c05hbWUpIHN0YXRpYyBpbmxpbmUgQ2xhc3NOYW1lIyNfUHJpdmF0ZSogZF9wdHIoY29uc3QgQ2xh
c3NOYW1lKiBvYmopIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Q2xhc3NOYW1lKj4ob2JqKS0+ZC5nZXQo
KTsgfQorI2RlZmluZSBFV0tfRChDbGFzc05hbWUsIG9iaikgQ2xhc3NOYW1lIyNfUHJpdmF0ZSog
ZCA9IENsYXNzTmFtZSMjX1ByaXZhdGU6OmRfcHRyKG9iaikKKwogI2VuZGlmIC8vIGV3a19wcml2
YXRlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169590</attachid>
            <date>2012-10-19 03:36:20 -0700</date>
            <delta_ts>2012-10-21 03:36:56 -0700</delta_ts>
            <desc>Pimpl alternative</desc>
            <filename>99697_pimpl_alternative.patch</filename>
            <type>text/plain</type>
            <size>20056</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyMWVlNDM1Li5mZDRiODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQg
QEAKKzIwMTItMTAtMTggIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIE1ha2UgRXdrX0Rvd25sb2FkX0pvYiBtZW1iZXJz
IHByaXZhdGUgYW5kIHJlbW92ZSBwcml2YXRlIEMgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTY5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRXdrX0Rvd25sb2FkX0pvYiBwcml2
YXRlIGFuZCByZXBsYWNlIHByaXZhdGUgQyBmdW5jdGlvbnMKKyAgICAgICAgYnkgY2xhc3MgbWV0
aG9kcy4gTmV3IG1ldGhvZHMgd2VyZSBhbHNvIGFkZGVkIHRvIG1hdGNoIHRoZQorICAgICAgICBw
dWJsaWMgQyBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5j
cHA6CisgICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9qb2JfYWRkKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwOgorICAgICAg
ICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAoZGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZENyZWF0ZURlc3RpbmF0aW9uKToKKyAgICAg
ICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKGRpZEZhaWwpOgorICAgICAgICAoZGlkQ2Fu
Y2VsKToKKyAgICAgICAgKGRpZEZpbmlzaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Rvd25sb2FkX2pvYi5jcHA6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpFd2tfRG93
bmxvYWRfSm9iKToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmlkKToKKyAgICAgICAgKEV3
a19Eb3dubG9hZF9Kb2I6OnZpZXcpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9n
ZXQpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6c3RhdGUpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX2pvYl9yZXF1ZXN0X2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpyZXF1
ZXN0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAg
KEV3a19Eb3dubG9hZF9Kb2I6OnJlc3BvbnNlKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jf
ZGVzdGluYXRpb25fZ2V0KToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2I6OmRlc3RpbmF0aW9u
KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KToKKyAgICAgICAg
KEV3a19Eb3dubG9hZF9Kb2I6OnNldERlc3RpbmF0aW9uKToKKyAgICAgICAgKGV3a19kb3dubG9h
ZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9i
OjpzdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2NhbmNlbCk6
CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpjYW5jZWwpOgorICAgICAgICAoZXdrX2Rvd25s
b2FkX2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKEV3a19Eb3dubG9hZF9K
b2I6OmVzdGltYXRlZFByb2dyZXNzKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfZWxhcHNl
ZF90aW1lX2dldCk6CisgICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjplbGFwc2VkVGltZSk6Cisg
ICAgICAgIChFd2tfRG93bmxvYWRfSm9iOjpzZXRSZXNwb25zZSk6CisgICAgICAgIChFd2tfRG93
bmxvYWRfSm9iOjpzZXRTdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAgICAgIChFd2tfRG93bmxvYWRf
Sm9iOjppbmNyZW1lbnRSZWNlaXZlZERhdGEpOgorICAgICAgICAoRXdrX0Rvd25sb2FkX0pvYjo6
c2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2Iu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUu
aDoKKyAgICAgICAgKEV3a19Eb3dubG9hZF9Kb2IpOgorCiAyMDEyLTEwLTE4ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBG
aXggR1RLKyBkZWJ1ZyBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBiNzYxN2RhLi43YTI0NTExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0yMDUsNyAr
MjA1LDcgQEAgdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfYWRkKEV3a19Db250ZXh0KiBl
d2tDb250ZXh0LCBFd2tfRG93bmxvYWRfSm9iKiBld2sKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihld2tDb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tE
b3dubG9hZCk7CiAKLSAgICB1aW50NjRfdCBkb3dubG9hZElkID0gZXdrX2Rvd25sb2FkX2pvYl9p
ZF9nZXQoZXdrRG93bmxvYWQpOworICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSBld2tEb3dubG9h
ZC0+aWQoKTsKICAgICBpZiAoZXdrQ29udGV4dC0+ZG93bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25s
b2FkSWQpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3Bw
CmluZGV4IDA4OGJkNmEuLjhjMDkyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNw
cApAQCAtNTMsMTQgKzUzLDE0IEBAIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvCiAgICAgRXdrX0Rv
d25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdr
Q29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwog
ICAgIEFTU0VSVChkb3dubG9hZCk7CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9m
aWxlbmFtZV9zZXQoZG93bmxvYWQsIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGRvd25sb2FkLT5zZXRTdWdnZXN0ZWRGaWxlTmFtZSh0b0ltcGwoZmlsZW5h
bWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBk
b3dubG9hZCBzaWduYWwgb24gdGhlIEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVk
IHRoZSByZXNwb25zZQogICAgIC8vIGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4KLSAgICBl
d2tfdmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQo
ZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX3JlcXVlc3Rl
ZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CiAKICAgICAvLyBEb3dubG9hZFNvdXAgZXhw
ZWN0cyB0aGUgZGVzdGluYXRpb24gdG8gYmUgYSBVUkwuCi0gICAgU3RyaW5nIGRlc3RpbmF0aW9u
ID0gU3RyaW5nKCJmaWxlOi8vIikgKyBTdHJpbmc6OmZyb21VVEY4KGV3a19kb3dubG9hZF9qb2Jf
ZGVzdGluYXRpb25fZ2V0KGRvd25sb2FkKSk7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gQVND
SUlMaXRlcmFsKCJmaWxlOi8vIikgKyBTdHJpbmc6OmZyb21VVEY4KGRvd25sb2FkLT5kZXN0aW5h
dGlvbigpKTsKIAogICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXN0
aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2Fk
LCBXS1VSTFJlc3AKIHsKICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250
ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tE
b3dubG9hZCktPmRvd25sb2FkSUQoKSk7CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBld2tf
ZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChkb3dubG9hZCwgRXdrX1VybF9SZXNwb25zZTo6Y3Jl
YXRlKHdrUmVzcG9uc2UpKTsKKyAgICBkb3dubG9hZC0+c2V0UmVzcG9uc2UoRXdrX1VybF9SZXNw
b25zZTo6Y3JlYXRlKHdrUmVzcG9uc2UpKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVz
dGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5n
UmVmIC8qcGF0aCovLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtNzcsNDcgKzc3LDQ3IEBA
IHN0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3dubG9h
ZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluCiAgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQg
PSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
dG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwogICAgIEFTU0VSVChkb3dubG9hZCk7
CiAKLSAgICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FE
X0pPQl9TVEFURV9ET1dOTE9BRElORyk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dO
TE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
RGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVu
Z3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRleHQoY2xpZW50
SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKICAgICBBU1NFUlQoZG93
bmxvYWQpOwotICAgIGV3a19kb3dubG9hZF9qb2JfcmVjZWl2ZWRfZGF0YShkb3dubG9hZCwgbGVu
Z3RoKTsKKyAgICBkb3dubG9hZC0+aW5jcmVtZW50UmVjZWl2ZWREYXRhKGxlbmd0aCk7CiB9CiAK
LXN0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxv
YWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCitzdGF0aWMgdm9p
ZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9y
UmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIHVpbnQ2NF90IGRvd25s
b2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKICAgICBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQodG9Fd2tDb250
ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKICAgICBBU1NFUlQoZG93bmxvYWQpOwogCiAg
ICAgT3duUHRyPEV3a19FcnJvcj4gZXdrRXJyb3IgPSBFd2tfRXJyb3I6OmNyZWF0ZShlcnJvcik7
Ci0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9K
T0JfU1RBVEVfRkFJTEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmFpbGVkKGV3a19k
b3dubG9hZF9qb2Jfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCwgZXdrRXJyb3IuZ2V0KCkp
OworICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7
CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChkb3dubG9hZC0+dmlldygpLCBkb3du
bG9hZCwgZXdrRXJyb3IuZ2V0KCkpOwogICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKIH0KIAotc3RhdGljIHZv
aWQgZGlkQ2FuY2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25z
dCB2b2lkICpjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlkQ2FuY2VsKFdLQ29udGV4dFJlZiwg
V0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAg
IHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsK
ICAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pv
Yl9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKICAgICBBU1NFUlQo
ZG93bmxvYWQpOwogCi0gICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoZG93bmxvYWQsIEVX
S19ET1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VMTEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9q
b2JfY2FuY2VsbGVkKGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9h
ZCk7CisgICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfQ0FOQ0VM
TEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfY2FuY2VsbGVkKGRvd25sb2FkLT52aWV3
KCksIGRvd25sb2FkKTsKICAgICBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdr
Q29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZEZp
bmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbykKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICB1aW50NjRf
dCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CiAgICAgRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRv
RXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CiAgICAgQVNTRVJUKGRvd25sb2Fk
KTsKIAotICAgIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxP
QURfSk9CX1NUQVRFX0ZJTklTSEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNo
ZWQoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBk
b3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7CisgICAg
ZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2Fk
KTsKICAgICBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGll
bnRJbmZvKSwgZG93bmxvYWRJZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAKaW5kZXggNDZhMTk4ZC4uYzBmYTNk
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25s
b2FkX2pvYi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rv
d25sb2FkX2pvYi5jcHAKQEAgLTM1LDYgKzM1LDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAKK0V3a19Eb3dubG9hZF9Kb2I6OkV3a19Eb3dubG9hZF9Kb2IoV2ViS2l0OjpEb3dubG9h
ZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCisgICAgOiBtX2Rvd25sb2Fk
UHJveHkoZG93bmxvYWQpCisgICAgLCBtX3ZpZXcoZXdrVmlldykKKyAgICAsIG1fc3RhdGUoRVdL
X0RPV05MT0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAsIG1fc3RhcnRUaW1lKC0xKQor
ICAgICwgbV9lbmRUaW1lKC0xKQorICAgICwgbV9kb3dubG9hZGVkKDApCit7IH0KKwogRXdrX0Rv
d25sb2FkX0pvYiogZXdrX2Rvd25sb2FkX2pvYl9yZWYoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxv
YWQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsK
QEAgLTU1LDEyICs2NCw5IEBAIHZvaWQgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCkKICAqIEBpbnRlcm5hbAogICogUXVlcmllcyB0aGUgaWRlbnRpZmll
ciBmb3IgdGhpcyBkb3dubG9hZAogICovCi11aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dl
dChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK3VpbnQ2NF90IEV3a19Eb3dubG9h
ZF9Kb2I6OmlkKCkgY29uc3QKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZG93bmxvYWQsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9h
ZC0+ZG93bmxvYWRQcm94eSwgMCk7Ci0KLSAgICByZXR1cm4gZG93bmxvYWQtPmRvd25sb2FkUHJv
eHktPmRvd25sb2FkSUQoKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5LT5kb3dubG9hZElE
KCk7CiB9CiAKIC8qKgpAQCAtNjgsNDUgKzc0LDYyIEBAIHVpbnQ2NF90IGV3a19kb3dubG9hZF9q
b2JfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogICogUmV0dXJucyB0
aGUgdmlldyB0aGlzIGRvd25sb2FkIGlzIGF0dGFjaGVkIHRvLgogICogVGhlIHZpZXcgaXMgbmVl
ZGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIHNpZ25hbHMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tf
ZG93bmxvYWRfam9iX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQor
RXZhc19PYmplY3QqIEV3a19Eb3dubG9hZF9Kb2I6OnZpZXcoKSBjb25zdAogewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7Ci0KLSAgICByZXR1cm4gZG93
bmxvYWQtPnZpZXc7CisgICAgcmV0dXJuIG1fdmlldzsKIH0KIAogRXdrX0Rvd25sb2FkX0pvYl9T
dGF0ZSBld2tfZG93bmxvYWRfam9iX3N0YXRlX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBk
b3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQs
IEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfVU5LTk9XTik7CiAKLSAgICByZXR1cm4gZG93bmxvYWQt
PnN0YXRlOworICAgIHJldHVybiBkb3dubG9hZC0+c3RhdGUoKTsKK30KKworRXdrX0Rvd25sb2Fk
X0pvYl9TdGF0ZSBFd2tfRG93bmxvYWRfSm9iOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGU7CiB9CiAKIEV3a19VcmxfUmVxdWVzdCogZXdrX2Rvd25sb2FkX2pvYl9yZXF1ZXN0
X2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOwogCi0gICAgaWYgKCFkb3dubG9hZC0+
cmVxdWVzdCkgewotICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxv
YWQtPmRvd25sb2FkUHJveHksIDApOwotICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlcXVlc3RS
ZWY+IHdrVVJMUmVxdWVzdChBZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0OjpjcmVhdGUoZG93
bmxvYWQtPmRvd25sb2FkUHJveHktPnJlcXVlc3QoKSkubGVha1JlZigpKSk7Ci0gICAgICAgIGNv
bnN0X2Nhc3Q8RXdrX0Rvd25sb2FkX0pvYio+KGRvd25sb2FkKS0+cmVxdWVzdCA9IEV3a19Vcmxf
UmVxdWVzdDo6Y3JlYXRlKHdrVVJMUmVxdWVzdC5nZXQoKSk7CisgICAgcmV0dXJuIGRvd25sb2Fk
LT5yZXF1ZXN0KCk7Cit9CisKK0V3a19VcmxfUmVxdWVzdCogRXdrX0Rvd25sb2FkX0pvYjo6cmVx
dWVzdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3JlcXVlc3QpIHsKKyAgICAgICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1VSTFJlcXVlc3QoQWRvcHRXSywgdG9BUEkoV2ViVVJMUmVx
dWVzdDo6Y3JlYXRlKG1fZG93bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKKyAg
ICAgICAgbV9yZXF1ZXN0ID0gRXdrX1VybF9SZXF1ZXN0OjpjcmVhdGUod2tVUkxSZXF1ZXN0Lmdl
dCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPnJlcXVlc3QuZ2V0KCk7CisgICAg
cmV0dXJuIG1fcmVxdWVzdC5nZXQoKTsKIH0KIAogRXdrX1VybF9SZXNwb25zZSogZXdrX2Rvd25s
b2FkX2pvYl9yZXNwb25zZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCiB7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKIAotICAg
IHJldHVybiBkb3dubG9hZC0+cmVzcG9uc2UuZ2V0KCk7CisgICAgcmV0dXJuIGRvd25sb2FkLT5y
ZXNwb25zZSgpOworfQorCitFd2tfVXJsX1Jlc3BvbnNlKiBFd2tfRG93bmxvYWRfSm9iOjpyZXNw
b25zZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVzcG9uc2UuZ2V0KCk7CiB9CiAKIGNvbnN0
IGNoYXIqIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KGNvbnN0IEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChk
b3dubG9hZCwgMCk7CiAKLSAgICByZXR1cm4gZG93bmxvYWQtPmRlc3RpbmF0aW9uOworICAgIHJl
dHVybiBkb3dubG9hZC0+ZGVzdGluYXRpb24oKTsKK30KKworY29uc3QgY2hhciogRXdrX0Rvd25s
b2FkX0pvYjo6ZGVzdGluYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2Rlc3RpbmF0aW9u
OwogfQogCiBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoRXdrX0Rv
d25sb2FkX0pvYiogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQpAQCAtMTE0LDI4
ICsxMzcsNDIgQEAgRWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3
a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkLCBjb25zdCBjaGEKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIGZhbHNlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZGVzdGluYXRpb24sIGZhbHNlKTsKIAotICAgIGRvd25sb2FkLT5kZXN0aW5h
dGlvbiA9IGRlc3RpbmF0aW9uOworICAgIGRvd25sb2FkLT5zZXREZXN0aW5hdGlvbihkZXN0aW5h
dGlvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgY2hhciAqZXdrX2Rvd25sb2Fk
X2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25s
b2FkKQordm9pZCBFd2tfRG93bmxvYWRfSm9iOjpzZXREZXN0aW5hdGlvbihjb25zdCBjaGFyKiBk
ZXN0aW5hdGlvbikKK3sKKyAgICBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247Cit9CisKK2Nv
bnN0IGNoYXIqIGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChjb25zdCBF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZG93bmxvYWQsIDApOwogCi0gICAgcmV0dXJuIGRvd25sb2FkLT5zdWdnZXN0ZWRG
aWxlbmFtZTsKKyAgICByZXR1cm4gZG93bmxvYWQtPnN1Z2dlc3RlZEZpbGVOYW1lKCk7Cit9CisK
K2NvbnN0IGNoYXIqIEV3a19Eb3dubG9hZF9Kb2I6OnN1Z2dlc3RlZEZpbGVOYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19k
b3dubG9hZF9qb2JfY2FuY2VsKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgZmFsc2Up
OwogCi0gICAgaWYgKGRvd25sb2FkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RP
V05MT0FESU5HKQorICAgIHJldHVybiBkb3dubG9hZC0+Y2FuY2VsKCk7Cit9CisKK2Jvb2wgRXdr
X0Rvd25sb2FkX0pvYjo6Y2FuY2VsKCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBFV0tfRE9XTkxP
QURfSk9CX1NUQVRFX0RPV05MT0FESU5HKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBk
b3dubG9hZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkc7Ci0gICAg
ZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmNhbmNlbCgpOworICAgIG1fc3RhdGUgPSBFV0tfRE9X
TkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkc7CisgICAgbV9kb3dubG9hZFByb3h5LT5jYW5jZWwo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQzLDgyICsxODAsOTAgQEAgZG91YmxlIGV3
a19kb3dubG9hZF9qb2JfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChjb25zdCBFd2tfRG93bmxvYWRf
Sm9iKiBkb3dubG9hZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIDApOwogCi0gICAgaWYgKCFkb3dubG9hZC0+cmVzcG9uc2UpCisgICAgcmV0dXJuIGRv
d25sb2FkLT5lc3RpbWF0ZWRQcm9ncmVzcygpOworfQorCitkb3VibGUgRXdrX0Rvd25sb2FkX0pv
Yjo6ZXN0aW1hdGVkUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghbV9yZXNwb25zZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGgg
PSBld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2Uu
Z2V0KCkpOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxf
cmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KG1fcmVzcG9uc2UuZ2V0KCkpOwogICAgIGlmICgh
Y29udGVudExlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZG91YmxlPihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOwog
fQogCiBkb3VibGUgZXdrX2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KGNvbnN0IEV3a19E
b3dubG9hZF9Kb2IqIGRvd25sb2FkKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChkb3dubG9hZCwgMCk7CiAKKyAgICByZXR1cm4gZG93bmxvYWQtPmVsYXBzZWRUaW1lKCk7
Cit9CisKK2RvdWJsZSBFd2tfRG93bmxvYWRfSm9iOjplbGFwc2VkVGltZSgpIGNvbnN0Cit7CiAg
ICAgLy8gRG93bmxvYWQgaGFzIG5vdCBzdGFydGVkIHlldC4KLSAgICBpZiAoZG93bmxvYWQtPnN0
YXJ0VGltZSA8IDApCisgICAgaWYgKG1fc3RhcnRUaW1lIDwgMCkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICAvLyBEb3dubG9hZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBlbGFwc2VkIGJl
dHdlZW4gdGhlCiAgICAgLy8gZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZlbnQuCi0gICAg
aWYgKGRvd25sb2FkLT5lbmRUaW1lID49IDApCi0gICAgICAgIHJldHVybiBkb3dubG9hZC0+ZW5k
VGltZSAtIGRvd25sb2FkLT5zdGFydFRpbWU7CisgICAgaWYgKG1fZW5kVGltZSA+PSAwKQorICAg
ICAgICByZXR1cm4gbV9lbmRUaW1lIC0gbV9zdGFydFRpbWU7CiAKICAgICAvLyBEb3dubG9hZCBp
cyBzdGlsbCBnb2luZy4KLSAgICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAtIGRvd25sb2FkLT5z
dGFydFRpbWU7CisgICAgcmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCkgLSBtX3N0YXJ0VGltZTsKIH0K
IAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFNldHMgdGhlIFVSTCBAYSByZXNwb25zZSBmb3IgdGhp
cyBAYSBkb3dubG9hZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiBy
ZXNwb25zZSkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6c2V0UmVzcG9uc2UoUGFzc1JlZlB0cjxF
d2tfVXJsX1Jlc3BvbnNlPiByZXNwb25zZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihkb3dubG9hZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocmVzcG9uc2Up
OworICAgIEFTU0VSVChyZXNwb25zZSk7CiAKLSAgICBkb3dubG9hZC0+cmVzcG9uc2UgPSByZXNw
b25zZTsKKyAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiB9CiAKIC8qKgogICogQGludGVybmFs
CiAgKiBTZXRzIHRoZSBzdWdnZXN0ZWQgZmlsZSBuYW1lIGZvciB0aGlzIEBhIGRvd25sb2FkLgog
ICovCi12b2lkIGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCit2b2lk
IEV3a19Eb3dubG9hZF9Kb2I6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKGNvbnN0IGNoYXIqIHN1Z2dl
c3RlZEZpbGVuYW1lKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2Fk
KTsKLQotICAgIGRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1l
OworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAogLyoq
CiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydCBhIGdpdmVuIGFtb3VudCBvZiBkYXRhIHdhcyByZWNl
aXZlZC4KICAqLwotdm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pv
Yjo6aW5jcmVtZW50UmVjZWl2ZWREYXRhKHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7Ci0KLSAgICBkb3dubG9hZC0+ZG93bmxvYWRl
ZCArPSBsZW5ndGg7CisgICAgbV9kb3dubG9hZGVkICs9IGxlbmd0aDsKIH0KIAogLyoqCiAgKiBA
aW50ZXJuYWwKICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBkb3dubG9hZC4KICAqLwotdm9pZCBl
d2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCwgRXdr
X0Rvd25sb2FkX0pvYl9TdGF0ZSBzdGF0ZSkKK3ZvaWQgRXdrX0Rvd25sb2FkX0pvYjo6c2V0U3Rh
dGUoRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBzdGF0ZSkKIHsKLSAgICBkb3dubG9hZC0+c3RhdGUg
PSBzdGF0ZTsKLQotICAgIC8vIFVwZGF0ZSBzdGFydCB0aW1lIGlmIHRoZSBkb3dubG9hZCBoYXMg
c3RhcnRlZAotICAgIGlmIChzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FE
SU5HKQotICAgICAgICBkb3dubG9hZC0+c3RhcnRUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKLQot
ICAgIC8vIFVwZGF0ZSBlbmQgdGltZSBpZiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVkIChzdWNj
ZXNzZnVsbHkgb3Igbm90KQotICAgIGlmIChzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRF
X0ZBSUxFRAotICAgICAgICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNF
TExFRAotICAgICAgICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVE
KQotICAgICAgICBkb3dubG9hZC0+ZW5kVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7CisgICAgbV9z
dGF0ZSA9IHN0YXRlOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgRVdLX0RPV05M
T0FEX0pPQl9TVEFURV9ET1dOTE9BRElORzoKKyAgICAgICAgbV9zdGFydFRpbWUgPSBlY29yZV90
aW1lX2dldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19ET1dOTE9BRF9KT0JfU1RB
VEVfRkFJTEVEOgorICAgIGNhc2UgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQ6Cisg
ICAgY2FzZSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEOgorICAgICAgICBtX2VuZFRp
bWUgPSBlY29yZV90aW1lX2dldCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmgKaW5kZXggMGNhZDVjMi4uMTU2ZjI5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2Iu
aApAQCAtNDMsNyArNDMsNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotLyoqIENyZWF0ZXMg
YSB0eXBlIG5hbWUgZm9yIEV3a19Eb3dubG9hZF9Kb2JfSm9iICovCisvKiogQ3JlYXRlcyBhIHR5
cGUgbmFtZSBmb3IgRXdrX0Rvd25sb2FkX0pvYiAqLwogdHlwZWRlZiBzdHJ1Y3QgRXdrX0Rvd25s
b2FkX0pvYiBFd2tfRG93bmxvYWRfSm9iOwogCiAvLy8gRGVmaW5lcyB0aGUgcG9zc2libGUgc3Rh
dGVzIG9mIGEgZG93bmxvYWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCmluZGV4IDVmYWM0N2QuLmUy
NTAxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19k
b3dubG9hZF9qb2JfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCkBAIC0zNyw0NiArMzcsNDggQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5OwogfQogCi0vKioKLSAqIFxzdHJ1Y3Qg
IEV3a19Eb3dubG9hZF9Kb2IKLSAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBkb3dubG9hZCBkYXRh
LgotICovCiBjbGFzcyBFd2tfRG93bmxvYWRfSm9iIDogcHVibGljIFJlZkNvdW50ZWQ8RXdrX0Rv
d25sb2FkX0pvYj4gewogcHVibGljOgotICAgIFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxv
YWRQcm94eTsKLSAgICBFdmFzX09iamVjdCogdmlldzsKLSAgICBFd2tfRG93bmxvYWRfSm9iX1N0
YXRlIHN0YXRlOwotICAgIFJlZlB0cjxFd2tfVXJsX1JlcXVlc3Q+IHJlcXVlc3Q7Ci0gICAgUmVm
UHRyPEV3a19VcmxfUmVzcG9uc2U+IHJlc3BvbnNlOwotICAgIGRvdWJsZSBzdGFydFRpbWU7Ci0g
ICAgZG91YmxlIGVuZFRpbWU7Ci0gICAgdWludDY0X3QgZG93bmxvYWRlZDsgLyoqPCBsZW5ndGgg
YWxyZWFkeSBkb3dubG9hZGVkICovCi0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9u
OwotICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZTsKLQogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEV3a19Eb3dubG9hZF9Kb2I+IGNyZWF0ZShXZWJLaXQ6OkRvd25sb2FkUHJv
eHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKICAgICB7CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRXdrX0Rvd25sb2FkX0pvYihkb3dubG9hZCwgZXdrVmlldykpOwogICAg
IH0KIAotcHJpdmF0ZToKLSAgICBFd2tfRG93bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQcm94
eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQotICAgICAgICA6IGRvd25sb2FkUHJv
eHkoZG93bmxvYWQpCi0gICAgICAgICwgdmlldyhld2tWaWV3KQotICAgICAgICAsIHN0YXRlKEVX
S19ET1dOTE9BRF9KT0JfU1RBVEVfTk9UX1NUQVJURUQpCi0gICAgICAgICwgc3RhcnRUaW1lKC0x
KQotICAgICAgICAsIGVuZFRpbWUoLTEpCi0gICAgICAgICwgZG93bmxvYWRlZCgwKQotICAgIHsg
fQotfTsKKyAgICB1aW50NjRfdCBpZCgpIGNvbnN0OworICAgIEV2YXNfT2JqZWN0KiB2aWV3KCkg
Y29uc3Q7CisKKyAgICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRTdGF0ZShFd2tfRG93bmxvYWRfSm9iX1N0YXRlKTsKKworICAgIEV3a19VcmxfUmVx
dWVzdCogcmVxdWVzdCgpIGNvbnN0OworICAgIEV3a19VcmxfUmVzcG9uc2UqIHJlc3BvbnNlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRSZXNwb25zZShQYXNzUmVmUHRyPEV3a19VcmxfUmVzcG9uc2U+
KTsKIAotdHlwZWRlZiBzdHJ1Y3QgRXdrX0Vycm9yIEV3a19FcnJvcjsKKyAgICBjb25zdCBjaGFy
KiBkZXN0aW5hdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0RGVzdGluYXRpb24oY29uc3QgY2hh
ciogZGVzdGluYXRpb24pOwogCi11aW50NjRfdCBld2tfZG93bmxvYWRfam9iX2lkX2dldChjb25z
dCBFd2tfRG93bmxvYWRfSm9iKik7Ci1FdmFzX09iamVjdCogZXdrX2Rvd25sb2FkX2pvYl92aWV3
X2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKik7Ci12b2lkIGV3a19kb3dubG9hZF9qb2Jfc3Rh
dGVfc2V0KEV3a19Eb3dubG9hZF9Kb2IqLCBFd2tfRG93bmxvYWRfSm9iX1N0YXRlKTsKLXZvaWQg
ZXdrX2Rvd25sb2FkX2pvYl9yZWNlaXZlZF9kYXRhKEV3a19Eb3dubG9hZF9Kb2IqLCB1aW50NjRf
dCBsZW5ndGgpOwotdm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxv
YWRfSm9iKiwgUGFzc1JlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPik7Ci12b2lkIGV3a19kb3dubG9h
ZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWRfSm9iKiwgY29uc3QgY2hh
ciogc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVOYW1l
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdWdnZXN0ZWRGaWxlTmFtZShjb25zdCBjaGFyKiBmaWxl
TmFtZSk7CisKKyAgICBib29sIGNhbmNlbCgpOworCisgICAgZG91YmxlIGVzdGltYXRlZFByb2dy
ZXNzKCkgY29uc3Q7CisgICAgZG91YmxlIGVsYXBzZWRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBp
bmNyZW1lbnRSZWNlaXZlZERhdGEodWludDY0X3QgbGVuZ3RoKTsKKworcHJpdmF0ZToKKyAgICBF
d2tfRG93bmxvYWRfSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KTsKKworICAgIFdlYktpdDo6RG93bmxvYWRQcm94eSogbV9kb3dubG9hZFBy
b3h5OworICAgIEV2YXNfT2JqZWN0KiBtX3ZpZXc7CisgICAgRXdrX0Rvd25sb2FkX0pvYl9TdGF0
ZSBtX3N0YXRlOworICAgIG11dGFibGUgUmVmUHRyPEV3a19VcmxfUmVxdWVzdD4gbV9yZXF1ZXN0
OworICAgIFJlZlB0cjxFd2tfVXJsX1Jlc3BvbnNlPiBtX3Jlc3BvbnNlOworICAgIGRvdWJsZSBt
X3N0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9lbmRUaW1lOworICAgIHVpbnQ2NF90IG1fZG93bmxv
YWRlZDsgLy8gbGVuZ3RoIGFscmVhZHkgZG93bmxvYWRlZAorICAgIFdLRWluYVNoYXJlZFN0cmlu
ZyBtX2Rlc3RpbmF0aW9uOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVu
YW1lOworfTsKIAogI2VuZGlmIC8vIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>