<?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>137812</bug_id>
          
          <creation_ts>2014-10-17 01:11:44 -0700</creation_ts>
          <short_desc>[GTK] Add initial gestures support</short_desc>
          <delta_ts>2014-10-20 01:44:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137735</dependson>
          <blocked>137822</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>carlosg</cc>
    
    <cc>gustavo</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1042324</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 01:11:44 -0700</bug_when>
    <thetext>Now that GTK+ has support for gestures, we can use it to handle touch events and allow to scroll, zoom and tap with the fingers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042327</commentid>
    <comment_count>1</comment_count>
      <attachid>240005</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 01:33:54 -0700</bug_when>
    <thetext>Created attachment 240005
Patch

For now only drag, zoom and tap are supported, but at least it makes webkitgtk+ usable on touch screens</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042330</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 01:42:43 -0700</bug_when>
    <thetext>It doesn&apos;t apply because it depends on patch attached to bug #137735.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042352</commentid>
    <comment_count>3</comment_count>
      <attachid>240009</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 03:15:10 -0700</bug_when>
    <thetext>Created attachment 240009
Rebased after r174817</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042364</commentid>
    <comment_count>4</comment_count>
      <attachid>240012</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 05:13:41 -0700</bug_when>
    <thetext>Created attachment 240012
Fix the build with GTK+ &lt; 3.14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042366</commentid>
    <comment_count>5</comment_count>
      <attachid>240012</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-10-17 05:51:09 -0700</bug_when>
    <thetext>Comment on attachment 240012
Fix the build with GTK+ &lt; 3.14

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

I wonder if this allows us to pass any new tests. Otherwise I&apos;d have to trust you on the gtk touch specific code. Have you double-checked the implementation with Garnacho?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:898
&gt; +#endif

We should change this name as we need to make explicit the fact that it might create the GestureController. What about webkitWebViewBaseGetOrCreateGestureController ?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:79
&gt; +WebKit::GestureController&amp; webkitWebViewBaseGestureController(WebKitWebViewBase*);

See above.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:44
&gt; +    return std::unique_ptr&lt;GestureController&gt;(new GestureController(page));

I think the preferred form is std::make_unique&lt;GestureController&gt;(page);

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:133
&gt; +    int delay;

Nit, uint

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:137
&gt; +    }, std::chrono::milliseconds(delay));

We should convert this to microseconds after r174818</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042370</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 07:03:07 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 240012 [details]
&gt; Fix the build with GTK+ &lt; 3.14
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240012&amp;action=review

Thanks for the review.

&gt; I wonder if this allows us to pass any new tests.

I haven&apos;t checked, will run touch tests.

&gt;  Otherwise I&apos;d have to
&gt; trust you on the gtk touch specific code. Have you double-checked the
&gt; implementation with Garnacho?

Yes.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:898
&gt; &gt; +#endif
&gt; 
&gt; We should change this name as we need to make explicit the fact that it
&gt; might create the GestureController. What about
&gt; webkitWebViewBaseGetOrCreateGestureController ?

Why does it have to be explicit? The caller doesn&apos;t need to know anything since it&apos;s receiving a reference.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:79
&gt; &gt; +WebKit::GestureController&amp; webkitWebViewBaseGestureController(WebKitWebViewBase*);
&gt; 
&gt; See above.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:44
&gt; &gt; +    return std::unique_ptr&lt;GestureController&gt;(new GestureController(page));
&gt; 
&gt; I think the preferred form is std::make_unique&lt;GestureController&gt;(page);

It doesn&apos;t build.

&gt; &gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:133
&gt; &gt; +    int delay;
&gt; 
&gt; Nit, uint

gtk-long-press-time is a guint.

&gt; &gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:137
&gt; &gt; +    }, std::chrono::milliseconds(delay));
&gt; 
&gt; We should convert this to microseconds after r174818

No, this is already in milliseconds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042397</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 10:39:13 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; &gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:44
&gt; &gt; &gt; +    return std::unique_ptr&lt;GestureController&gt;(new GestureController(page));
&gt; &gt; 
&gt; &gt; I think the preferred form is std::make_unique&lt;GestureController&gt;(page);
&gt; 
&gt; It doesn&apos;t build.

I remember why now, because it requires the constructor to be public. It was private to make sure the class can only be created using create, but I&apos;ll make it public anyway to use make_unique</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042400</commentid>
    <comment_count>8</comment_count>
      <attachid>240022</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 10:53:47 -0700</bug_when>
    <thetext>Created attachment 240022
Addressed review comments

Use unsigned instead of int and make_unique</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042401</commentid>
    <comment_count>9</comment_count>
      <attachid>240023</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 11:00:41 -0700</bug_when>
    <thetext>Created attachment 240023
Updated patch

Just removed an unneeded header include in WebKitWebViewBase.cpp that I added by mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042402</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-17 11:04:15 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 240012 [details]
&gt; Fix the build with GTK+ &lt; 3.14
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240012&amp;action=review
&gt; 
&gt; I wonder if this allows us to pass any new tests. Otherwise I&apos;d have to
&gt; trust you on the gtk touch specific code. Have you double-checked the
&gt; implementation with Garnacho?
&gt; 

This will not affect the tests anyway, because it requires GTK+ 3.14 and bots use 3.6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042749</commentid>
    <comment_count>11</comment_count>
      <attachid>240023</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-10-20 00:51:34 -0700</bug_when>
    <thetext>Comment on attachment 240023
Updated patch

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

Let&apos;s give it a try! The only thing we need to address before landing is the misunderstanding related to the factory method and the constructor.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:894
&gt; +        priv-&gt;gestureController = GestureController::create(*priv-&gt;pageProxy);

We should call the constructor here:

priv-&gt;gestureController = std::make_unique&lt;GestureController&gt;(*priv-&gt;pageProxy);

See comment below for the rationale.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:52
&gt; +

Sorry if I didn&apos;t explain myself correctly, but this is not what I was asking about. This indeed looks very weird (a public factory and a public constructor). What I think we should do is to make the constructor public and use make_unique&lt;&gt; in the callers. That&apos;s something Anders is actively pushing for new code, see: https://bugs.webkit.org/show_bug.cgi?id=137765#c13

&gt; Source/WebKit2/UIProcess/gtk/GestureController.h:47
&gt; +    static std::unique_ptr&lt;GestureController&gt; create(WebPageProxy&amp;);

We should get rid of this.

&gt; Source/WebKit2/UIProcess/gtk/GestureController.h:49
&gt; +    explicit GestureController(WebPageProxy&amp;);

And the explicit won&apos;t be required I think...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042750</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-20 01:15:55 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 240023 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240023&amp;action=review
&gt; 
&gt; Let&apos;s give it a try! The only thing we need to address before landing is the
&gt; misunderstanding related to the factory method and the constructor.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:894
&gt; &gt; +        priv-&gt;gestureController = GestureController::create(*priv-&gt;pageProxy);
&gt; 
&gt; We should call the constructor here:
&gt; 
&gt; priv-&gt;gestureController =
&gt; std::make_unique&lt;GestureController&gt;(*priv-&gt;pageProxy);
&gt; 
&gt; See comment below for the rationale.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/GestureController.cpp:52
&gt; &gt; +
&gt; 
&gt; Sorry if I didn&apos;t explain myself correctly, but this is not what I was
&gt; asking about. This indeed looks very weird (a public factory and a public
&gt; constructor). What I think we should do is to make the constructor public
&gt; and use make_unique&lt;&gt; in the callers. That&apos;s something Anders is actively
&gt; pushing for new code, see: https://bugs.webkit.org/show_bug.cgi?id=137765#c13

Ok, understood.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042754</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-20 01:44:31 -0700</bug_when>
    <thetext>Committed r174880: &lt;http://trac.webkit.org/changeset/174880&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240005</attachid>
            <date>2014-10-17 01:33:54 -0700</date>
            <delta_ts>2014-10-17 03:15:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-gestures.diff</filename>
            <type>text/plain</type>
            <size>23539</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjYzdjNTUxLi40MzU0ZGI5
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTQtMTAtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGdlc3R1cmVzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzgxMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoZWNrIGlmIHRoZSBHVEsrIHZl
cnNpb24gc3VwcG9ydHMgZ2VzdHVyZXMgb3Igbm90LgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRHVEszLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
OgorCiAyMDE0LTEwLTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OKENNYWtlKTogW0dUS10gV2ViS2l0U2V0dGluZ3M6ZW5h
YmxlLXNtb290aC1zY3JvbGxpbmcgZG9lcyBub3RoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDAwMzU1ZS4u
ODdhMjBlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE0LTEwLTE3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
aW5pdGlhbCBnZXN0dXJlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOb3cgdGhhdCBHVEsrIGhhcyBzdXBwb3J0IGZvciBnZXN0dXJlcywg
d2UgY2FuIHVzZSBpdCB0byBoYW5kbGUKKyAgICAgICAgdG91Y2ggZXZlbnRzIGFuZCBhbGxvdyB0
byBzY3JvbGwsIHpvb20gYW5kIHRhcCB3aXRoIHRoZSBmaW5nZXJzLgorCisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogV2hlbiB0aGUgdG91Y2ggZXZlbnQK
KyAgICAgICAgaGFzbid0IGJlZW4gaGFuZGxlZCBieSB0aGUgd2ViIHByb2Nlc3MgcGFzcyBpdCB0
byB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgYW5kIG9ubHkgZmFsbGJhY2sgdG8gcG9p
bnRlciBlbXVsYXRpb24gd2hlbiB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgZG9lc24n
dCBoYW5kbGUgdGhlIGV2ZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudCk6IElm
IHRoZSBHZXN0dXJlQ29udHJvbGxlciBpcworICAgICAgICBjdXJyZW50bHkgcHJvY2Vzc2luZyBn
ZXN0dXJlcyBpcyBiZWNhdXNlIHRoZSBTVEFSVCB0b3VjaCBldmVudCB3YXMKKyAgICAgICAgbm90
IGhhbmRsZWQgYnkgdGhlIHdlYiBwcm9jZXNzLCBzbyBwYXNzIGFueSBzdWNjZXNzaXZlIHRvdWNo
CisgICAgICAgIGV2ZW50cyB0byB0aGUgR2VzdHVyZUNvbnRyb2xsZXIgZGlyZWN0bHkuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKTogQ3JlYXRlIHRoZSBHZXN0
dXJlQ29udHJvbGxlcgorICAgICAgICBvbiBkZW1hbmQgYW5kIHJldHVybiBhIHJlZmVyZW5jZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpjcmVhdGUpOiBDcmVhdGUgYSBHZXN0
dXJlQ29udHJvbGxlci4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1
cmVDb250cm9sbGVyKTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgR2VzdHVyZSBtZW1lYmVycy4K
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KTogUGFzcyB0
aGUgZXZlbnQgdG8gdGhlIGdlc3R1cmVzLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJv
bGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOiBXaGV0aGVyCisgICAgICAgIEdlc3R1cmVzIGFy
ZSBhY3RpdmUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpH
ZXN0dXJlKTogQmFzZSBjbGFzcyBmb3IgZ2VzdHVyZXMuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSk6IFdoZXRoZXIgdGhlCisgICAgICAgIGdl
c3R1cmUgaXMgYWN0aXZlLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2Vz
dHVyZTo6aGFuZGxlRXZlbnQpOiBQYXNzIHRoZSBldmVudAorICAgICAgICB0byB0aGUgR3RrR2Vz
dHVyZSB0byBwcm9jZXNzIGl0LgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcpOiBTZW5kIGEgd2hlZWwKKyAgICAgICAgZXZlbnQgY29y
cmVzcG9uZGluZyB0byB0aGUgZHJhZyBnZXN0dXJlIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVUYXApOiBT
ZW5kIG1vdmUsCisgICAgICAgIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBjb3JyZXNwb25kaW5n
IHRvIGEgdGFwIGdlc3R1cmUgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpH
ZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKTogU3RhcnQgYSBkcmFnCisgICAg
ICAgIGdlc3R1cmUgYW5kIHNjaGVkdWxlIGEgdGltZXIgdG8gZGlzY2FyZCB0YXAgZ2VzdHVyZSBp
biBjYXNlIG9mCisgICAgICAgIGxvbmcgcHJlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKTogSWYgdGhlIGFjdHVhbAorICAgICAgICBk
cmFnIGhhc24ndCBzdGFydGVkIHlldCwgY2hlY2sgdGhlIGRyYWcgdGhyZXNob2xkIHRvIGRlY2lk
ZQorICAgICAgICB3aGV0aGVyIHRvIHN0YXJ0IHRoZSBkcmFnIG9yIG5vdC4gT3RoZXJ3aXNlIGNh
bGwgaGFuZGxlRHJhZygpIHRvCisgICAgICAgIHNlbmQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50cyB0
byB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpE
cmFnR2VzdHVyZTo6ZW5kKTogSWYgdGhlIGRyYWcgZ2VzdHVyZQorICAgICAgICBmaW5pc2hlcyBh
bmQgdGhlIGRyYWcgZGlkbid0IGhhcHBlbiAoaXQgd2Fzbid0IGEgbG9uZyBwcmVzcyBhbmQKKyAg
ICAgICAgZHJhZyB0aHJlc2hvbGQgd2FzIG5vdCByZWFjaGVkKSwgY2FsbCBoYW5kbGVUYXAoKSB0
byBlbXVsYXRlIGEKKyAgICAgICAgY2xpY2sgZXZlbnQuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1cmUpOiBJbml0aWFsaXplCisgICAg
ICAgIHRoZSBHdGtHZXN0dXJlRHJhZy4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6Olpvb21HZXN0dXJlOjpiZWdpbik6IFNhdmUgdGhlIGN1cnJlbnQKKyAgICAgICAgcGFnZSBz
Y2FsZSBmYWN0b3IgYW5kIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGdlc3R1cmUuCisgICAgICAg
IChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKTog
U2NoZWR1bGUgYQorICAgICAgICBwYWdlIHNjYWxlIGNoYW5nZSBpbiBhbiBpZGxlIGZvciB0aGUg
Z2l2ZW4gc2NhbGUgdmFsdWUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpa
b29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUpOiBJbml0aWFsaXplCisgICAgICAgIHRoZSBHdGtHZXN0
dXJlWm9vbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6IEFk
ZGVkLgorCiAyMDE0LTEwLTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBNb3ZlIHRvdWNoIGV2ZW50cyBoYW5kbGluZyBmcm9tIFBs
YXRmb3JtIHRvIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMzlhZmM3Yy4u
NTMxYTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTI1Miw2ICsyNTIsNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0
b3JlQ2Fpcm8uY3BwCiAKICAgICBVSVByb2Nlc3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNw
cAorICAgIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNz
L2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsu
Y3BwCiAgICAgVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmlu
ZGV4IDM2ZmZkZGQuLjRhMmJmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTMzNSw2ICszMzUsMTIgQEAgdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZl
bnQmIGV2ZW50LCBib29sIHcKICAgICBpZiAod2FzRXZlbnRIYW5kbGVkKQogICAgICAgICByZXR1
cm47CiAKKyNpZiBIQVZFKEdUS19HRVNUVVJFUykKKyAgICBHZXN0dXJlQ29udHJvbGxlciYgZ2Vz
dHVyZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdFQktJ
VF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOworICAgIGlmIChnZXN0dXJlQ29udHJvbGxl
ci5oYW5kbGVFdmVudChldmVudC5uYXRpdmVFdmVudCgpKSkKKyAgICAgICAgcmV0dXJuOworI2Vu
ZGlmCisKICAgICAvLyBFbXVsYXRlIHBvaW50ZXIgZXZlbnRzIGlmIHVuaGFuZGxlZC4KICAgICBj
b25zdCBHZGtFdmVudCogdG91Y2hFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcAppbmRleCAzZTE4NTRlLi45ZWFiNzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC02Nyw2ICs2Nyw3
IEBACiAjZW5kaWYKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0x
NDcsNiArMTQ4LDEwIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKICAgICBPd25QdHI8UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c+IHJlZGlyZWN0ZWRXaW5kb3c7CiAjZW5kaWYKKworI2lmIEhB
VkUoR1RLX0dFU1RVUkVTKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlcj4g
Z2VzdHVyZUNvbnRyb2xsZXI7CisjZW5kaWYKIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShXZWJL
aXRXZWJWaWV3QmFzZSwgd2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19UWVBFX0NPTlRBSU5FUikK
QEAgLTgzNCwxNCArODM5LDI0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlR2V0VG91
Y2hQb2ludEZvckV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzCiAKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50VG91Y2gqIGV2ZW50KQogewotICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXY7CisgICAgV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKIAogICAg
IGlmIChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZykKICAgICAgICAgcmV0dXJuIFRSVUU7CiAK
KyNpZiBIQVZFKEdUS19HRVNUVVJFUykKICAgICBHZGtFdmVudCogdG91Y2hFdmVudCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCk7Ci0gICAgdWludDMyX3Qgc2VxdWVuY2UgPSBH
UE9JTlRFUl9UT19VSU5UKGdka19ldmVudF9nZXRfZXZlbnRfc2VxdWVuY2UodG91Y2hFdmVudCkp
OworICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZp
ZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIod2ViVmlld0Jhc2UpOworICAgIGlmIChnZXN0dXJlQ29u
dHJvbGxlci5pc1Byb2Nlc3NpbmdHZXN0dXJlcygpKSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBh
bHJlYWR5IHByb2Nlc3NpbmcgZ2VzdHVyZXMgaXMgYmVjYXVzZSB0aGUgV2ViUHJvY2VzcyBkaWRu
J3QgaGFuZGxlIHRoZQorICAgICAgICAvLyBCRUdJTiB0b3VjaCBldmVudCwgc28gcGFzcyBzdWJz
ZXF1ZW50IGV2ZW50cyB0byB0aGUgR2VzdHVyZUNvbnRyb2xsZXIuCisgICAgICAgIGdlc3R1cmVD
b250cm9sbGVyLmhhbmRsZUV2ZW50KHRvdWNoRXZlbnQpOworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisjZW5kaWYKIAorICAgIHVpbnQzMl90IHNlcXVlbmNlID0gR1BPSU5URVJfVE9fVUlO
VChnZGtfZXZlbnRfZ2V0X2V2ZW50X3NlcXVlbmNlKHRvdWNoRXZlbnQpKTsKICAgICBzd2l0Y2gg
KHRvdWNoRXZlbnQtPnR5cGUpIHsKICAgICBjYXNlIEdES19UT1VDSF9CRUdJTjogewogICAgICAg
ICBBU1NFUlQoIXByaXYtPnRvdWNoRXZlbnRzLmNvbnRhaW5zKHNlcXVlbmNlKSk7CkBAIC04NjQs
MTIgKzg3OSwyMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFRvdWNoKiBldgogICAgIH0KIAogICAgIFZlY3Rv
cjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+IHRvdWNoUG9pbnRzOwotICAgIHdlYmtpdFdlYlZpZXdC
YXNlR2V0VG91Y2hQb2ludEZvckV2ZW50KFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCksIHRv
dWNoRXZlbnQsIHRvdWNoUG9pbnRzKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUdldFRvdWNoUG9p
bnRGb3JFdmVudCh3ZWJWaWV3QmFzZSwgdG91Y2hFdmVudCwgdG91Y2hQb2ludHMpOwogICAgIHBy
aXYtPnBhZ2VQcm94eS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHJlaW50
ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIHRvdWNoUG9pbnRzKSk7CiAKICAgICByZXR1
cm4gVFJVRTsKIH0KIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorR2VzdHVyZUNvbnRyb2xsZXIm
IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXdCYXNlLT5wcml2OworICAgIGlmICghcHJpdi0+Z2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAg
IHByaXYtPmdlc3R1cmVDb250cm9sbGVyID0gR2VzdHVyZUNvbnRyb2xsZXI6OmNyZWF0ZSgqcHJp
di0+cGFnZVByb3h5KTsKKyAgICByZXR1cm4gKnByaXYtPmdlc3R1cmVDb250cm9sbGVyOworfQor
I2VuZGlmCisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChH
dGtXaWRnZXQqIHdpZGdldCwgZ2ludCAvKiB4ICovLCBnaW50IC8qIHkgKi8sIGdib29sZWFuIGtl
eWJvYXJkTW9kZSwgR3RrVG9vbHRpcCogdG9vbHRpcCkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaAppbmRleCBiOTg3ZGQ2Li43MzZmOTg0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGVfaAogI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAogCisjaW5jbHVkZSAiR2Vz
dHVyZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCiAj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgi
CkBAIC03NCw0ICs3NSw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50aWNh
dGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFk
ZFdlYkluc3BlY3RvcihXZWJLaXRXZWJWaWV3QmFzZSosIEd0a1dpZGdldCogaW5zcGVjdG9yLCBX
ZWJLaXQ6OkF0dGFjaG1lbnRTaWRlKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZXNldENsaWNr
Q291bnRlcihXZWJLaXRXZWJWaWV3QmFzZSopOwogCisjaWYgSEFWRShHVEtfR0VTVFVSRVMpCitX
ZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9s
bGVyKFdlYktpdFdlYlZpZXdCYXNlKik7CisjZW5kaWYKKwogI2VuZGlmIC8vIFdlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L0dlc3R1cmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2Vz
dHVyZUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEy
ODgwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dl
c3R1cmVDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR2VzdHVyZUNvbnRyb2xsZXIuaCIKKworI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorCisj
aW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVs
RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitzdGQ6OnVuaXF1ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXI+IEdlc3R1cmVDb250cm9sbGVy
OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8R2VzdHVyZUNvbnRyb2xsZXI+KG5ldyBHZXN0dXJlQ29udHJvbGxlcihwYWdlKSk7Cit9CisK
K0dlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2Up
CisgICAgOiBtX2RyYWdHZXN0dXJlKHBhZ2UpCisgICAgLCBtX3pvb21HZXN0dXJlKHBhZ2UpCit7
Cit9CisKK2Jvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50
KiBldmVudCkKK3sKKyAgICBib29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2lu
Z0dlc3R1cmVzKCk7CisgICAgbV9kcmFnR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAg
bV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAgcmV0dXJuIGV2ZW50LT50eXBl
ID09IEdES19UT1VDSF9FTkQgPyB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgOiBpc1Byb2Nlc3NpbmdH
ZXN0dXJlcygpOworfQorCitib29sIEdlc3R1cmVDb250cm9sbGVyOjppc1Byb2Nlc3NpbmdHZXN0
dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHJhZ0dlc3R1cmUuaXNBY3RpdmUoKSB8fCBt
X3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7Cit9CisKK0dlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJl
OjpHZXN0dXJlKEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6
IG1fZ2VzdHVyZShhZG9wdEdSZWYoZ2VzdHVyZSkpCisgICAgLCBtX3BhZ2UocGFnZSkKK3sKKyAg
ICBndGtfZXZlbnRfY29udHJvbGxlcl9zZXRfcHJvcGFnYXRpb25fcGhhc2UoR1RLX0VWRU5UX0NP
TlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgR1RLX1BIQVNFX05PTkUpOworfQorCitib29sIEdl
c3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGd0a19nZXN0dXJlX2lzX2FjdGl2ZShtX2dlc3R1cmUuZ2V0KCkpOworfQorCit2b2lkIEdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjpoYW5kbGVFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQp
Cit7CisgICAgZ3RrX2V2ZW50X2NvbnRyb2xsZXJfaGFuZGxlX2V2ZW50KEdUS19FVkVOVF9DT05U
Uk9MTEVSKG1fZ2VzdHVyZS5nZXQoKSksIGV2ZW50KTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJv
bGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBkb3Vi
bGUgeCwgZG91YmxlIHkpCit7CisgICAgQVNTRVJUKG1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRy
PEdka0V2ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKKyAgICBz
Y3JvbGxFdmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLnggPSBtX3N0YXJ0LngoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnkg
PSBtX3N0YXJ0LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhfcm9vdCA9IGV2ZW50LT50
b3VjaC54X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jvb3QgPSBldmVudC0+dG91
Y2gueV9yb290OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9M
TF9TTU9PVEg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gKG1fb2Zmc2V0Lngo
KSAtIHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgIHNjcm9sbEV2ZW50
LT5zY3JvbGwuZGVsdGFfeSA9IChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnRv
dWNoLnN0YXRlOworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZl
bnQoc2Nyb2xsRXZlbnQuZ2V0KCkpKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OmhhbmRsZVRhcChjb25zdCBHZGtFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJU
KCFtX2luRHJhZyk7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gcG9pbnRlckV2ZW50KGdka19l
dmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi50
aW1lID0gZXZlbnQtPnRvdWNoLnRpbWU7CisgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ueCA9IGV2
ZW50LT50b3VjaC54OworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnkgPSBldmVudC0+dG91Y2gu
eTsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290
OworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7
CisgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24uc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7Cisg
ICAgbV9wYWdlLmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChwb2ludGVyRXZl
bnQuZ2V0KCksIDApKTsKKworICAgIHBvaW50ZXJFdmVudC5yZXNldChnZGtfZXZlbnRfbmV3KEdE
S19CVVRUT05fUFJFU1MpKTsKKyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi5idXR0b24gPSAxOwor
ICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAgICBw
b2ludGVyRXZlbnQtPmJ1dHRvbi54ID0gZXZlbnQtPnRvdWNoLng7CisgICAgcG9pbnRlckV2ZW50
LT5idXR0b24ueSA9IGV2ZW50LT50b3VjaC55OworICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnhf
cm9vdCA9IGV2ZW50LT50b3VjaC54X3Jvb3Q7CisgICAgcG9pbnRlckV2ZW50LT5idXR0b24ueV9y
b290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKKyAgICBtX3BhZ2UuaGFuZGxlTW91c2VFdmVudChO
YXRpdmVXZWJNb3VzZUV2ZW50KHBvaW50ZXJFdmVudC5nZXQoKSwgMSkpOworCisgICAgcG9pbnRl
ckV2ZW50LT50eXBlID0gR0RLX0JVVFRPTl9SRUxFQVNFOworICAgIG1fcGFnZS5oYW5kbGVNb3Vz
ZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQocG9pbnRlckV2ZW50LmdldCgpLCAwKSk7Cit9CisK
K3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSog
ZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sK
KyAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRf
Y3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOworICAgIGd0a19n
ZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NF
UVVFTkNFX0NMQUlNRUQpOworICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IGZhbHNlOworICAg
IGRyYWdHZXN0dXJlLT5tX3N0YXJ0LnNldCh4LCB5KTsKKyAgICBkcmFnR2VzdHVyZS0+bV9vZmZz
ZXQuc2V0KDAsIDApOworCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtfZXZlbnRfY29udHJv
bGxlcl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKKyAgICBpbnQg
ZGVsYXk7CisgICAgZ19vYmplY3RfZ2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdldCks
ICJndGstbG9uZy1wcmVzcy10aW1lIiwgJmRlbGF5LCBudWxscHRyKTsKKyAgICBkcmFnR2VzdHVy
ZS0+bV9sb25nUHJlc3NUaW1lb3V0LnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gRHJhZ0dl
c3R1cmUgbG9uZyBwcmVzcyB0aW1lb3V0IiwgW2RyYWdHZXN0dXJlXSgpIHsKKyAgICAgICAgZHJh
Z0dlc3R1cmUtPm1faW5EcmFnID0gdHJ1ZTsKKyAgICB9LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKGRlbGF5KSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1
cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dl
c3R1cmUqIGdlc3R1cmUpCit7CisgICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtf
Z2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdl
c3R1cmUpKTsKKyAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2Vx
dWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIEd0a1dpZGdldCogd2lk
Z2V0ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X3dpZGdldChHVEtfRVZFTlRfQ09OVFJPTExF
UihnZXN0dXJlKSk7CisgICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcgJiYgZ3RrX2RyYWdf
Y2hlY2tfdGhyZXNob2xkKHdpZGdldCwgZHJhZ0dlc3R1cmUtPm1fc3RhcnQueCgpLCBkcmFnR2Vz
dHVyZS0+bV9zdGFydC55KCksIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LngoKSArIHgsIGRyYWdHZXN0
dXJlLT5tX3N0YXJ0LnkoKSArIHkpKSB7CisgICAgICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9
IHRydWU7CisgICAgICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuY2FuY2VsKCk7
CisgICAgfQorCisgICAgaWYgKGRyYWdHZXN0dXJlLT5tX2luRHJhZykKKyAgICAgICAgZHJhZ0dl
c3R1cmUtPmhhbmRsZURyYWcoZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2Vx
dWVuY2UpLCB4LCB5KTsKKyAgICBkcmFnR2VzdHVyZS0+bV9vZmZzZXQuc2V0KHgsIHkpOworfQor
Cit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5kKERyYWdHZXN0dXJlKiBk
cmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UsIEd0a0dlc3R1cmUqIGdlc3R1
cmUpCit7CisgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5jYW5jZWwoKTsKKyAg
ICBpZiAoIWRyYWdHZXN0dXJlLT5tX2luRHJhZykgeworICAgICAgICBkcmFnR2VzdHVyZS0+aGFu
ZGxlVGFwKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7Cisg
ICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0Vf
REVOSUVEKTsKKyAgICB9IGVsc2UgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdl
c3R1cmUsIHNlcXVlbmNlKSkKKyAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUs
IEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOworfQorCitHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IEdlc3R1cmUo
Z3RrX2dlc3R1cmVfZHJhZ19uZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBwYWdlKQorICAgICwgbV9p
bkRyYWcoZmFsc2UpCit7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdU
S19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZHJhZy1iZWdpbiIsIEdfQ0FMTEJBQ0so
YmVnaW4pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdl
dCgpLCAiZHJhZy11cGRhdGUiLCBHX0NBTExCQUNLKHVwZGF0ZSksIHRoaXMpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJlbmQiLCBHX0NBTExCQUNLKGVu
ZCksIHRoaXMpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6YmVn
aW4oWm9vbUdlc3R1cmUqIHpvb21HZXN0dXJlLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVy
ZSogZ2VzdHVyZSkKK3sKKyAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VW
RU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgem9vbUdlc3R1cmUtPm1faW5pdGlhbFNjYWxl
ID0gem9vbUdlc3R1cmUtPm1fcGFnZS5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBkb3VibGUgeCwg
eTsKKyAgICBndGtfZ2VzdHVyZV9nZXRfYm91bmRpbmdfYm94X2NlbnRlcihnZXN0dXJlLCAmeCwg
JnkpOworICAgIHpvb21HZXN0dXJlLT5tX3BvaW50ID0gSW50UG9pbnQoeCwgeSk7Cit9CisKK3Zv
aWQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpzY2FsZUNoYW5nZWQoWm9vbUdlc3R1
cmUqIHpvb21HZXN0dXJlLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUqKQoreworICAgIHpvb21H
ZXN0dXJlLT5tX3NjYWxlID0gem9vbUdlc3R1cmUtPm1faW5pdGlhbFNjYWxlICogc2NhbGU7Cisg
ICAgaWYgKHpvb21HZXN0dXJlLT5tX2lkbGUuaXNTY2hlZHVsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgem9vbUdlc3R1cmUtPm1faWRsZS5zY2hlZHVsZSgiW1dlYktpdF0gWm9vbSBHZXN0
dXJlIElkbGUiLCBbem9vbUdlc3R1cmVdKCkgeworICAgICAgICAvLyBGSVhNRTogWm9vbWVkIGFy
ZWEgaXMgbm90IGNvcnJlY3RseSBjZW50ZXJlZC4KKyAgICAgICAgem9vbUdlc3R1cmUtPm1fcGFn
ZS5zY2FsZVBhZ2Uoem9vbUdlc3R1cmUtPm1fc2NhbGUsIHpvb21HZXN0dXJlLT5tX3BvaW50KTsK
KyAgICB9KTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpab29tR2VzdHVy
ZShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3pvb21fbmV3
KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKKyAgICAsIG1faW5pdGlhbFNjYWxlKDApCisgICAg
LCBtX3NjYWxlKDApCit7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5n
ZXQoKSwgImJlZ2luIiwgR19DQUxMQkFDSyhiZWdpbiksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJzY2FsZS1jaGFuZ2VkIiwgR19DQUxMQkFD
SyhzY2FsZUNoYW5nZWQpLCB0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBIQVZFKEdUS19HRVNUVVJFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mMGFmYzAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VzdHVyZUNvbnRy
b2xsZXJfaAorI2RlZmluZSBHZXN0dXJlQ29udHJvbGxlcl9oCisKKyNpZiBIQVZFKEdUS19HRVNU
VVJFUykKKworI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiB1bmlvbiBfR2RrRXZl
bnQgR2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRTZXF1ZW5jZSBHZGtFdmVudFNl
cXVlbmNlOwordHlwZWRlZiBzdHJ1Y3QgX0d0a0dlc3R1cmUgR3RrR2VzdHVyZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIEdlc3R1cmVDb250cm9s
bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHZXN0dXJlQ29udHJvbGxlcik7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBjcmVh
dGUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBib29sIGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29u
c3Q7CisgICAgYm9vbCBoYW5kbGVFdmVudChjb25zdCBHZGtFdmVudCopOworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IEdlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOworCisgICAgY2xh
c3MgR2VzdHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgaGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgR2VzdHVyZShHdGtHZXN0dXJlKiwgV2ViUGFnZVByb3h5Jik7CisKKyAg
ICAgICAgR1JlZlB0cjxHdGtHZXN0dXJlPiBtX2dlc3R1cmU7CisgICAgICAgIFdlYlBhZ2VQcm94
eSYgbV9wYWdlOworICAgIH07CisKKyAgICBjbGFzcyBEcmFnR2VzdHVyZSBmaW5hbCA6IHB1Ymxp
YyBHZXN0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERyYWdHZXN0dXJlKFdlYlBhZ2VQcm94
eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBoYW5kbGVEcmFnKGNvbnN0IEdka0V2
ZW50KiwgZG91YmxlIHgsIGRvdWJsZSB5KTsKKyAgICAgICAgdm9pZCBoYW5kbGVUYXAoY29uc3Qg
R2RrRXZlbnQqKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBiZWdpbihEcmFnR2VzdHVyZSosIGRv
dWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSopOworICAgICAgICBzdGF0aWMgdm9pZCB1cGRh
dGUoRHJhZ0dlc3R1cmUqLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgZW5kKERyYWdHZXN0dXJlKiwgR2RrRXZlbnRTZXF1ZW5jZSosIEd0a0dl
c3R1cmUqKTsKKworICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fc3RhcnQ7CisgICAgICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9vZmZzZXQ7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBt
X2xvbmdQcmVzc1RpbWVvdXQ7CisgICAgICAgIEdSZWZQdHI8R3RrR2VzdHVyZT4gbV9sb25nUHJl
c3M7CisgICAgICAgIGJvb2wgbV9pbkRyYWc7CisgICAgfTsKKworICAgIGNsYXNzIFpvb21HZXN0
dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgWm9vbUdl
c3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgdm9p
ZCBiZWdpbihab29tR2VzdHVyZSosIEdka0V2ZW50U2VxdWVuY2UqLCBHdGtHZXN0dXJlKik7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHNjYWxlQ2hhbmdlZChab29tR2VzdHVyZSosIGRvdWJsZSBzY2Fs
ZSwgR3RrR2VzdHVyZSopOworCisgICAgICAgIGdkb3VibGUgbV9pbml0aWFsU2NhbGU7CisgICAg
ICAgIGdkb3VibGUgbV9zY2FsZTsKKyAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wb2ludDsK
KyAgICAgICAgR01haW5Mb29wU291cmNlIG1faWRsZTsKKyAgICB9OworCisgICAgRHJhZ0dlc3R1
cmUgbV9kcmFnR2VzdHVyZTsKKyAgICBab29tR2VzdHVyZSBtX3pvb21HZXN0dXJlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBIQVZFKEdUS19HRVNUVVJFUykKKwor
I2VuZGlmIC8vIEdlc3R1cmVDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9G
aW5kR1RLMy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kR1RLMy5jbWFrZQppbmRleCAwZDhkMDU3
Li5jOGU4NzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZEdUSzMuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL0ZpbmRHVEszLmNtYWtlCkBAIC02NCw1ICs2NCwxMSBAQCBpZiAoTk9UKEVO
QUJMRV9YMTFfVEFSR0VUIE9SIEVOQUJMRV9XQVlMQU5EX1RBUkdFVCkpCiAgICAgICAgICJiZSBl
bmFibGVkIGFuZCBhbHNvIHN1cHBvcnRlZCBieSB0aGUgR1RLKyBkZXBlbmRlbmN5OiBYMTEsIFdh
eWxhbmQiKQogZW5kaWYgKCkKIAoraWYgKEdUSzNfVkVSU0lPTiBBTkQgVkVSU0lPTl9PSyBBTkQg
Tk9UKCIke0dUSzNfVkVSU0lPTn0iIFZFUlNJT05fTEVTUyAiMy4xNC4wIikpCisgICAgc2V0KEdU
S19TVVBQT1JUU19HRVNUVVJFUyBPTikKK2Vsc2UgKCkKKyAgICBzZXQoR1RLX1NVUFBPUlRTX0dF
U1RVUkVTIE9GRikKK2VuZGlmICgpCisKIGluY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFy
ZEFyZ3MpCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoR1RLMyBERUZBVUxUX01T
RyBHVEszX0lOQ0xVREVfRElSUyBHVEszX0xJQlJBUklFUyBWRVJTSU9OX09LKQpkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dU
Sy5jbWFrZQppbmRleCBjYjUxZDdmLi44ZWM5NGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAt
MjYxLDYgKzI2MSwxMCBAQCBpZiAoRU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRSkKICAgICBzZXQo
RU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRSAxKQogZW5kaWYgKCkKIAoraWYgKEdUS19TVVBQT1JU
U19HRVNUVVJFUykKKyAgICBhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0dUS19HRVNUVVJFUz0xKQor
ZW5kaWYgKCkKKwogIyBUaGlzIHBhcnQgY2FuIGJlIHNpbXBsaWZpZWQgb25jZSBDTWFrZSAyLjgu
NiBpcyByZXF1aXJlZCBhbmQKICMgQ01ha2VQdXNoQ2hlY2tTdGF0ZSBjYW4gYmUgdXNlZC4gV2Ug
bmVlZCB0byBoYXZlIE9QRU5HTF9JTkNMVURFX0RJUiBhcyBwYXJ0CiAjIG9mIHRoZSBkaXJlY3Rv
cmllcyBjaGVja19pbmNsdWRlX2ZpbGVzKCkgbG9va3MgZm9yIGluIGNhc2UgT3BlbkdMIGlzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240009</attachid>
            <date>2014-10-17 03:15:10 -0700</date>
            <delta_ts>2014-10-17 05:13:41 -0700</delta_ts>
            <desc>Rebased after r174817</desc>
            <filename>wk2-gestures.diff</filename>
            <type>text/plain</type>
            <size>23540</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjYzdjNTUxLi40MzU0ZGI5
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTQtMTAtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGdlc3R1cmVzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzgxMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoZWNrIGlmIHRoZSBHVEsrIHZl
cnNpb24gc3VwcG9ydHMgZ2VzdHVyZXMgb3Igbm90LgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRHVEszLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
OgorCiAyMDE0LTEwLTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OKENNYWtlKTogW0dUS10gV2ViS2l0U2V0dGluZ3M6ZW5h
YmxlLXNtb290aC1zY3JvbGxpbmcgZG9lcyBub3RoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWFlYzA5Mi4u
MzA0MjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE0LTEwLTE3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
aW5pdGlhbCBnZXN0dXJlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOb3cgdGhhdCBHVEsrIGhhcyBzdXBwb3J0IGZvciBnZXN0dXJlcywg
d2UgY2FuIHVzZSBpdCB0byBoYW5kbGUKKyAgICAgICAgdG91Y2ggZXZlbnRzIGFuZCBhbGxvdyB0
byBzY3JvbGwsIHpvb20gYW5kIHRhcCB3aXRoIHRoZSBmaW5nZXJzLgorCisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogV2hlbiB0aGUgdG91Y2ggZXZlbnQK
KyAgICAgICAgaGFzbid0IGJlZW4gaGFuZGxlZCBieSB0aGUgd2ViIHByb2Nlc3MgcGFzcyBpdCB0
byB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgYW5kIG9ubHkgZmFsbGJhY2sgdG8gcG9p
bnRlciBlbXVsYXRpb24gd2hlbiB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgZG9lc24n
dCBoYW5kbGUgdGhlIGV2ZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudCk6IElm
IHRoZSBHZXN0dXJlQ29udHJvbGxlciBpcworICAgICAgICBjdXJyZW50bHkgcHJvY2Vzc2luZyBn
ZXN0dXJlcyBpcyBiZWNhdXNlIHRoZSBTVEFSVCB0b3VjaCBldmVudCB3YXMKKyAgICAgICAgbm90
IGhhbmRsZWQgYnkgdGhlIHdlYiBwcm9jZXNzLCBzbyBwYXNzIGFueSBzdWNjZXNzaXZlIHRvdWNo
CisgICAgICAgIGV2ZW50cyB0byB0aGUgR2VzdHVyZUNvbnRyb2xsZXIgZGlyZWN0bHkuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKTogQ3JlYXRlIHRoZSBHZXN0
dXJlQ29udHJvbGxlcgorICAgICAgICBvbiBkZW1hbmQgYW5kIHJldHVybiBhIHJlZmVyZW5jZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpjcmVhdGUpOiBDcmVhdGUgYSBHZXN0
dXJlQ29udHJvbGxlci4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1
cmVDb250cm9sbGVyKTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgR2VzdHVyZSBtZW1lYmVycy4K
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KTogUGFzcyB0
aGUgZXZlbnQgdG8gdGhlIGdlc3R1cmVzLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJv
bGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOiBXaGV0aGVyCisgICAgICAgIEdlc3R1cmVzIGFy
ZSBhY3RpdmUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpH
ZXN0dXJlKTogQmFzZSBjbGFzcyBmb3IgZ2VzdHVyZXMuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSk6IFdoZXRoZXIgdGhlCisgICAgICAgIGdl
c3R1cmUgaXMgYWN0aXZlLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2Vz
dHVyZTo6aGFuZGxlRXZlbnQpOiBQYXNzIHRoZSBldmVudAorICAgICAgICB0byB0aGUgR3RrR2Vz
dHVyZSB0byBwcm9jZXNzIGl0LgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcpOiBTZW5kIGEgd2hlZWwKKyAgICAgICAgZXZlbnQgY29y
cmVzcG9uZGluZyB0byB0aGUgZHJhZyBnZXN0dXJlIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVUYXApOiBT
ZW5kIG1vdmUsCisgICAgICAgIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBjb3JyZXNwb25kaW5n
IHRvIGEgdGFwIGdlc3R1cmUgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpH
ZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKTogU3RhcnQgYSBkcmFnCisgICAg
ICAgIGdlc3R1cmUgYW5kIHNjaGVkdWxlIGEgdGltZXIgdG8gZGlzY2FyZCB0YXAgZ2VzdHVyZSBp
biBjYXNlIG9mCisgICAgICAgIGxvbmcgcHJlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKTogSWYgdGhlIGFjdHVhbAorICAgICAgICBk
cmFnIGhhc24ndCBzdGFydGVkIHlldCwgY2hlY2sgdGhlIGRyYWcgdGhyZXNob2xkIHRvIGRlY2lk
ZQorICAgICAgICB3aGV0aGVyIHRvIHN0YXJ0IHRoZSBkcmFnIG9yIG5vdC4gT3RoZXJ3aXNlIGNh
bGwgaGFuZGxlRHJhZygpIHRvCisgICAgICAgIHNlbmQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50cyB0
byB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpE
cmFnR2VzdHVyZTo6ZW5kKTogSWYgdGhlIGRyYWcgZ2VzdHVyZQorICAgICAgICBmaW5pc2hlcyBh
bmQgdGhlIGRyYWcgZGlkbid0IGhhcHBlbiAoaXQgd2Fzbid0IGEgbG9uZyBwcmVzcyBhbmQKKyAg
ICAgICAgZHJhZyB0aHJlc2hvbGQgd2FzIG5vdCByZWFjaGVkKSwgY2FsbCBoYW5kbGVUYXAoKSB0
byBlbXVsYXRlIGEKKyAgICAgICAgY2xpY2sgZXZlbnQuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1cmUpOiBJbml0aWFsaXplCisgICAg
ICAgIHRoZSBHdGtHZXN0dXJlRHJhZy4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6Olpvb21HZXN0dXJlOjpiZWdpbik6IFNhdmUgdGhlIGN1cnJlbnQKKyAgICAgICAgcGFnZSBz
Y2FsZSBmYWN0b3IgYW5kIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGdlc3R1cmUuCisgICAgICAg
IChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKTog
U2NoZWR1bGUgYQorICAgICAgICBwYWdlIHNjYWxlIGNoYW5nZSBpbiBhbiBpZGxlIGZvciB0aGUg
Z2l2ZW4gc2NhbGUgdmFsdWUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpa
b29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUpOiBJbml0aWFsaXplCisgICAgICAgIHRoZSBHdGtHZXN0
dXJlWm9vbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6IEFk
ZGVkLgorCiAyMDE0LTEwLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBNb3ZlIGNsaWNrIGNvdW50ZXIgbG9naWMgYmFjayB0byBX
ZWJLaXRXZWJWaWV3QmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAzOWFmYzdjLi41
MzFhNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjUyLDYgKzI1Miw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAKIAogICAgIFVJUHJvY2Vzcy9ndGsvRXhwZXJpbWVudGFsRmVhdHVyZXMuY3Bw
CisgICAgVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKICAgICBVSVByb2Nlc3Mv
Z3RrL1RleHRDaGVja2VyR3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5j
cHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5k
ZXggMzZmZmRkZC4uNGEyYmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzM1LDYgKzMzNSwxMiBAQCB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVu
dCYgZXZlbnQsIGJvb2wgdwogICAgIGlmICh3YXNFdmVudEhhbmRsZWQpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0
dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CisgICAgaWYgKGdlc3R1cmVDb250cm9sbGVy
LmhhbmRsZUV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKwogICAgIC8vIEVtdWxhdGUgcG9pbnRlciBldmVudHMgaWYgdW5oYW5kbGVkLgogICAgIGNv
bnN0IEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCmluZGV4IGY4ZjExZmUuLjY5NDMyOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTY3LDYgKzY3LDcg
QEAKICNlbmRpZgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTE0
Nyw2ICsxNDgsMTAgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogICAgIE93blB0cjxSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdz4gcmVkaXJlY3RlZFdpbmRvdzsKICNlbmRpZgorCisjaWYgSEFW
RShHVEtfR0VTVFVSRVMpCisgICAgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBn
ZXN0dXJlQ29udHJvbGxlcjsKKyNlbmRpZgogfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktp
dFdlYlZpZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQpA
QCAtODM1LDE0ICs4NDAsMjQgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRUb3Vj
aFBvaW50c0ZvckV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmEKIAogc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RXZlbnRUb3VjaCogZXZlbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2
ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogCiAgICAg
aWYgKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nKQogICAgICAgICByZXR1cm4gVFJVRTsKIAor
I2lmIEhBVkUoR1RLX0dFU1RVUkVTKQogICAgIEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gcmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KTsKLSAgICB1aW50MzJfdCBzZXF1ZW5jZSA9IEdQ
T0lOVEVSX1RPX1VJTlQoZ2RrX2V2ZW50X2dldF9ldmVudF9zZXF1ZW5jZSh0b3VjaEV2ZW50KSk7
CisgICAgR2VzdHVyZUNvbnRyb2xsZXImIGdlc3R1cmVDb250cm9sbGVyID0gd2Via2l0V2ViVmll
d0Jhc2VHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSk7CisgICAgaWYgKGdlc3R1cmVDb250
cm9sbGVyLmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkpIHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGFs
cmVhZHkgcHJvY2Vzc2luZyBnZXN0dXJlcyBpcyBiZWNhdXNlIHRoZSBXZWJQcm9jZXNzIGRpZG4n
dCBoYW5kbGUgdGhlCisgICAgICAgIC8vIEJFR0lOIHRvdWNoIGV2ZW50LCBzbyBwYXNzIHN1YnNl
cXVlbnQgZXZlbnRzIHRvIHRoZSBHZXN0dXJlQ29udHJvbGxlci4KKyAgICAgICAgZ2VzdHVyZUNv
bnRyb2xsZXIuaGFuZGxlRXZlbnQodG91Y2hFdmVudCk7CisgICAgICAgIHJldHVybiBUUlVFOwor
ICAgIH0KKyNlbmRpZgogCisgICAgdWludDMyX3Qgc2VxdWVuY2UgPSBHUE9JTlRFUl9UT19VSU5U
KGdka19ldmVudF9nZXRfZXZlbnRfc2VxdWVuY2UodG91Y2hFdmVudCkpOwogICAgIHN3aXRjaCAo
dG91Y2hFdmVudC0+dHlwZSkgewogICAgIGNhc2UgR0RLX1RPVUNIX0JFR0lOOiB7CiAgICAgICAg
IEFTU0VSVCghcHJpdi0+dG91Y2hFdmVudHMuY29udGFpbnMoc2VxdWVuY2UpKTsKQEAgLTg2NSwx
MiArODgwLDIyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50VG91Y2gqIGV2CiAgICAgfQogCiAgICAgVmVjdG9y
PFdlYlBsYXRmb3JtVG91Y2hQb2ludD4gdG91Y2hQb2ludHM7Ci0gICAgd2Via2l0V2ViVmlld0Jh
c2VHZXRUb3VjaFBvaW50c0ZvckV2ZW50KFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCksIHRv
dWNoRXZlbnQsIHRvdWNoUG9pbnRzKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUdldFRvdWNoUG9p
bnRzRm9yRXZlbnQod2ViVmlld0Jhc2UsIHRvdWNoRXZlbnQsIHRvdWNoUG9pbnRzKTsKICAgICBw
cml2LT5wYWdlUHJveHktPmhhbmRsZVRvdWNoRXZlbnQoTmF0aXZlV2ViVG91Y2hFdmVudChyZWlu
dGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCB0b3VjaFBvaW50cykpOwogCiAgICAgcmV0
dXJuIFRSVUU7CiB9CiAKKyNpZiBIQVZFKEdUS19HRVNUVVJFUykKK0dlc3R1cmVDb250cm9sbGVy
JiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmFzZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJW
aWV3QmFzZS0+cHJpdjsKKyAgICBpZiAoIXByaXYtPmdlc3R1cmVDb250cm9sbGVyKQorICAgICAg
ICBwcml2LT5nZXN0dXJlQ29udHJvbGxlciA9IEdlc3R1cmVDb250cm9sbGVyOjpjcmVhdGUoKnBy
aXYtPnBhZ2VQcm94eSk7CisgICAgcmV0dXJuICpwcml2LT5nZXN0dXJlQ29udHJvbGxlcjsKK30K
KyNlbmRpZgorCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VRdWVyeVRvb2x0aXAo
R3RrV2lkZ2V0KiB3aWRnZXQsIGdpbnQgLyogeCAqLywgZ2ludCAvKiB5ICovLCBnYm9vbGVhbiBr
ZXlib2FyZE1vZGUsIEd0a1Rvb2x0aXAqIHRvb2x0aXApCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmgKaW5kZXggYjk4N2RkNi4uNzM2Zjk4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZm5kZWYgV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlX2gKICNkZWZpbmUgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlX2gKIAorI2luY2x1ZGUgIkdl
c3R1cmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIgog
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5o
IgpAQCAtNzQsNCArNzUsOCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ2FuY2VsQXV0aGVudGlj
YXRpb25EaWFsb2coV2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VB
ZGRXZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmlld0Jhc2UqLCBHdGtXaWRnZXQqIGluc3BlY3Rvciwg
V2ViS2l0OjpBdHRhY2htZW50U2lkZSk7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVzZXRDbGlj
a0NvdW50ZXIoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQor
V2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlciYgd2Via2l0V2ViVmlld0Jhc2VHZXN0dXJlQ29udHJv
bGxlcihXZWJLaXRXZWJWaWV3QmFzZSopOworI2VuZGlmCisKICNlbmRpZiAvLyBXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9HZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dl
c3R1cmVDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
Mjg4MDY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9H
ZXN0dXJlQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdlc3R1cmVDb250cm9sbGVyLmgiCisKKyNpZiBIQVZFKEdUS19HRVNUVVJFUykKKwor
I2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJXaGVl
bEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBHZXN0dXJlQ29udHJvbGxl
cjo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEdlc3R1cmVDb250cm9sbGVyPihuZXcgR2VzdHVyZUNvbnRyb2xsZXIocGFnZSkpOworfQor
CitHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiBwYWdl
KQorICAgIDogbV9kcmFnR2VzdHVyZShwYWdlKQorICAgICwgbV96b29tR2VzdHVyZShwYWdlKQor
eworfQorCitib29sIEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBHZGtFdmVu
dCogZXZlbnQpCit7CisgICAgYm9vbCB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgPSBpc1Byb2Nlc3Np
bmdHZXN0dXJlcygpOworICAgIG1fZHJhZ0dlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOworICAg
IG1fem9vbUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBldmVudC0+dHlw
ZSA9PSBHREtfVE9VQ0hfRU5EID8gd2FzUHJvY2Vzc2luZ0dlc3R1cmVzIDogaXNQcm9jZXNzaW5n
R2VzdHVyZXMoKTsKK30KKworYm9vbCBHZXN0dXJlQ29udHJvbGxlcjo6aXNQcm9jZXNzaW5nR2Vz
dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2RyYWdHZXN0dXJlLmlzQWN0aXZlKCkgfHwg
bV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpOworfQorCitHZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVy
ZTo6R2VzdHVyZShHdGtHZXN0dXJlKiBnZXN0dXJlLCBXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAg
OiBtX2dlc3R1cmUoYWRvcHRHUmVmKGdlc3R1cmUpKQorICAgICwgbV9wYWdlKHBhZ2UpCit7Cisg
ICAgZ3RrX2V2ZW50X2NvbnRyb2xsZXJfc2V0X3Byb3BhZ2F0aW9uX3BoYXNlKEdUS19FVkVOVF9D
T05UUk9MTEVSKG1fZ2VzdHVyZS5nZXQoKSksIEdUS19QSEFTRV9OT05FKTsKK30KKworYm9vbCBH
ZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVy
biBndGtfZ2VzdHVyZV9pc19hY3RpdmUobV9nZXN0dXJlLmdldCgpKTsKK30KKwordm9pZCBHZXN0
dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50
KQoreworICAgIGd0a19ldmVudF9jb250cm9sbGVyX2hhbmRsZV9ldmVudChHVEtfRVZFTlRfQ09O
VFJPTExFUihtX2dlc3R1cmUuZ2V0KCkpLCBldmVudCk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVEcmFnKGNvbnN0IEdka0V2ZW50KiBldmVudCwgZG91
YmxlIHgsIGRvdWJsZSB5KQoreworICAgIEFTU0VSVChtX2luRHJhZyk7CisgICAgR1VuaXF1ZVB0
cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKSk7CisgICAg
c2Nyb2xsRXZlbnQtPnNjcm9sbC50aW1lID0gZXZlbnQtPnRvdWNoLnRpbWU7CisgICAgc2Nyb2xs
RXZlbnQtPnNjcm9sbC54ID0gbV9zdGFydC54KCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55
ID0gbV9zdGFydC55KCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54X3Jvb3QgPSBldmVudC0+
dG91Y2gueF9yb290OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueV9yb290ID0gZXZlbnQtPnRv
dWNoLnlfcm9vdDsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JP
TExfU01PT1RIOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IChtX29mZnNldC54
KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLmRlbHRhX3kgPSAobV9vZmZzZXQueSgpIC0geSkgLyBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50LT50
b3VjaC5zdGF0ZTsKKyAgICBtX3BhZ2UuaGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2
ZW50KHNjcm9sbEV2ZW50LmdldCgpKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRy
YWdHZXN0dXJlOjpoYW5kbGVUYXAoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VS
VCghbV9pbkRyYWcpOworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHBvaW50ZXJFdmVudChnZGtf
ZXZlbnRfbmV3KEdES19NT1RJT05fTk9USUZZKSk7CisgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24u
dGltZSA9IGV2ZW50LT50b3VjaC50aW1lOworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnggPSBl
dmVudC0+dG91Y2gueDsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi55ID0gZXZlbnQtPnRvdWNo
Lnk7CisgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9v
dDsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi55X3Jvb3QgPSBldmVudC0+dG91Y2gueV9yb290
OworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnN0YXRlID0gZXZlbnQtPnRvdWNoLnN0YXRlOwor
ICAgIG1fcGFnZS5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQocG9pbnRlckV2
ZW50LmdldCgpLCAwKSk7CisKKyAgICBwb2ludGVyRXZlbnQucmVzZXQoZ2RrX2V2ZW50X25ldyhH
REtfQlVUVE9OX1BSRVNTKSk7CisgICAgcG9pbnRlckV2ZW50LT5idXR0b24uYnV0dG9uID0gMTsK
KyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi50aW1lID0gZXZlbnQtPnRvdWNoLnRpbWU7CisgICAg
cG9pbnRlckV2ZW50LT5idXR0b24ueCA9IGV2ZW50LT50b3VjaC54OworICAgIHBvaW50ZXJFdmVu
dC0+YnV0dG9uLnkgPSBldmVudC0+dG91Y2gueTsKKyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi54
X3Jvb3QgPSBldmVudC0+dG91Y2gueF9yb290OworICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnlf
cm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CisgICAgbV9wYWdlLmhhbmRsZU1vdXNlRXZlbnQo
TmF0aXZlV2ViTW91c2VFdmVudChwb2ludGVyRXZlbnQuZ2V0KCksIDEpKTsKKworICAgIHBvaW50
ZXJFdmVudC0+dHlwZSA9IEdES19CVVRUT05fUkVMRUFTRTsKKyAgICBtX3BhZ2UuaGFuZGxlTW91
c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KHBvaW50ZXJFdmVudC5nZXQoKSwgMCkpOworfQor
Cit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6YmVnaW4oRHJhZ0dlc3R1cmUq
IGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7
CisgICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0
X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKKyAgICBndGtf
Z2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9T
RVFVRU5DRV9DTEFJTUVEKTsKKyAgICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcgPSBmYWxzZTsKKyAg
ICBkcmFnR2VzdHVyZS0+bV9zdGFydC5zZXQoeCwgeSk7CisgICAgZHJhZ0dlc3R1cmUtPm1fb2Zm
c2V0LnNldCgwLCAwKTsKKworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrX2V2ZW50X2NvbnRy
b2xsZXJfZ2V0X3dpZGdldChHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7CisgICAgaW50
IGRlbGF5OworICAgIGdfb2JqZWN0X2dldChndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyh3aWRnZXQp
LCAiZ3RrLWxvbmctcHJlc3MtdGltZSIsICZkZWxheSwgbnVsbHB0cik7CisgICAgZHJhZ0dlc3R1
cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIERyYWdH
ZXN0dXJlIGxvbmcgcHJlc3MgdGltZW91dCIsIFtkcmFnR2VzdHVyZV0oKSB7CisgICAgICAgIGRy
YWdHZXN0dXJlLT5tX2luRHJhZyA9IHRydWU7CisgICAgfSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyhkZWxheSkpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6
dXBkYXRlKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtH
ZXN0dXJlKiBnZXN0dXJlKQoreworICAgIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlID0gZ3Rr
X2dlc3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19HRVNUVVJFX1NJTkdMRShn
ZXN0dXJlKSk7CisgICAgZ3RrX2dlc3R1cmVfc2V0X3NlcXVlbmNlX3N0YXRlKGdlc3R1cmUsIHNl
cXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7CisKKyAgICBHdGtXaWRnZXQqIHdp
ZGdldCA9IGd0a19ldmVudF9jb250cm9sbGVyX2dldF93aWRnZXQoR1RLX0VWRU5UX0NPTlRST0xM
RVIoZ2VzdHVyZSkpOworICAgIGlmICghZHJhZ0dlc3R1cmUtPm1faW5EcmFnICYmIGd0a19kcmFn
X2NoZWNrX3RocmVzaG9sZCh3aWRnZXQsIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LngoKSwgZHJhZ0dl
c3R1cmUtPm1fc3RhcnQueSgpLCBkcmFnR2VzdHVyZS0+bV9zdGFydC54KCkgKyB4LCBkcmFnR2Vz
dHVyZS0+bV9zdGFydC55KCkgKyB5KSkgeworICAgICAgICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcg
PSB0cnVlOworICAgICAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LmNhbmNlbCgp
OworICAgIH0KKworICAgIGlmIChkcmFnR2VzdHVyZS0+bV9pbkRyYWcpCisgICAgICAgIGRyYWdH
ZXN0dXJlLT5oYW5kbGVEcmFnKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNl
cXVlbmNlKSwgeCwgeSk7CisgICAgZHJhZ0dlc3R1cmUtPm1fb2Zmc2V0LnNldCh4LCB5KTsKK30K
Kwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSog
ZHJhZ0dlc3R1cmUsIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJlKiBnZXN0
dXJlKQoreworICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuY2FuY2VsKCk7Cisg
ICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcpIHsKKyAgICAgICAgZHJhZ0dlc3R1cmUtPmhh
bmRsZVRhcChndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOwor
ICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNF
X0RFTklFRCk7CisgICAgfSBlbHNlIGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShn
ZXN0dXJlLCBzZXF1ZW5jZSkpCisgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJl
LCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6OkRy
YWdHZXN0dXJlOjpEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBHZXN0dXJl
KGd0a19nZXN0dXJlX2RyYWdfbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKKyAgICAsIG1f
aW5EcmFnKGZhbHNlKQoreworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShH
VEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImRyYWctYmVnaW4iLCBHX0NBTExCQUNL
KGJlZ2luKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5n
ZXQoKSwgImRyYWctdXBkYXRlIiwgR19DQUxMQkFDSyh1cGRhdGUpLCB0aGlzKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxMQkFDSyhl
bmQpLCB0aGlzKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmJl
Z2luKFpvb21HZXN0dXJlKiB6b29tR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSosIEd0a0dlc3R1
cmUqIGdlc3R1cmUpCit7CisgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19F
VkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIHpvb21HZXN0dXJlLT5tX2luaXRpYWxTY2Fs
ZSA9IHpvb21HZXN0dXJlLT5tX3BhZ2UucGFnZVNjYWxlRmFjdG9yKCk7CisgICAgZG91YmxlIHgs
IHk7CisgICAgZ3RrX2dlc3R1cmVfZ2V0X2JvdW5kaW5nX2JveF9jZW50ZXIoZ2VzdHVyZSwgJngs
ICZ5KTsKKyAgICB6b29tR2VzdHVyZS0+bV9wb2ludCA9IEludFBvaW50KHgsIHkpOworfQorCit2
b2lkIEdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKFpvb21HZXN0
dXJlKiB6b29tR2VzdHVyZSwgZG91YmxlIHNjYWxlLCBHdGtHZXN0dXJlKikKK3sKKyAgICB6b29t
R2VzdHVyZS0+bV9zY2FsZSA9IHpvb21HZXN0dXJlLT5tX2luaXRpYWxTY2FsZSAqIHNjYWxlOwor
ICAgIGlmICh6b29tR2VzdHVyZS0+bV9pZGxlLmlzU2NoZWR1bGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHpvb21HZXN0dXJlLT5tX2lkbGUuc2NoZWR1bGUoIltXZWJLaXRdIFpvb20gR2Vz
dHVyZSBJZGxlIiwgW3pvb21HZXN0dXJlXSgpIHsKKyAgICAgICAgLy8gRklYTUU6IFpvb21lZCBh
cmVhIGlzIG5vdCBjb3JyZWN0bHkgY2VudGVyZWQuCisgICAgICAgIHpvb21HZXN0dXJlLT5tX3Bh
Z2Uuc2NhbGVQYWdlKHpvb21HZXN0dXJlLT5tX3NjYWxlLCB6b29tR2VzdHVyZS0+bV9wb2ludCk7
CisgICAgfSk7Cit9CisKK0dlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6Wm9vbUdlc3R1
cmUoV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV96b29tX25l
dyhwYWdlLnZpZXdXaWRnZXQoKSksIHBhZ2UpCisgICAgLCBtX2luaXRpYWxTY2FsZSgwKQorICAg
ICwgbV9zY2FsZSgwKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUu
Z2V0KCksICJiZWdpbiIsIEdfQ0FMTEJBQ0soYmVnaW4pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic2NhbGUtY2hhbmdlZCIsIEdfQ0FMTEJB
Q0soc2NhbGVDaGFuZ2VkKSwgdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gSEFWRShHVEtfR0VTVFVSRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZjBhZmMwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlc3R1cmVDb250
cm9sbGVyX2gKKyNkZWZpbmUgR2VzdHVyZUNvbnRyb2xsZXJfaAorCisjaWYgSEFWRShHVEtfR0VT
VFVSRVMpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3R5cGVkZWYgdW5pb24gX0dka0V2
ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2VxdWVuY2UgR2RrRXZlbnRT
ZXF1ZW5jZTsKK3R5cGVkZWYgc3RydWN0IF9HdGtHZXN0dXJlIEd0a0dlc3R1cmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBHZXN0dXJlQ29udHJv
bGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2VzdHVyZUNvbnRyb2xsZXIpOworCitw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlcj4gY3Jl
YXRlKFdlYlBhZ2VQcm94eSYpOworCisgICAgYm9vbCBpc1Byb2Nlc3NpbmdHZXN0dXJlcygpIGNv
bnN0OworICAgIGJvb2wgaGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmKTsKKworICAgIGNs
YXNzIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0
OworICAgICAgICB2b2lkIGhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50Kik7CisKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIEdlc3R1cmUoR3RrR2VzdHVyZSosIFdlYlBhZ2VQcm94eSYpOworCisg
ICAgICAgIEdSZWZQdHI8R3RrR2VzdHVyZT4gbV9nZXN0dXJlOworICAgICAgICBXZWJQYWdlUHJv
eHkmIG1fcGFnZTsKKyAgICB9OworCisgICAgY2xhc3MgRHJhZ0dlc3R1cmUgZmluYWwgOiBwdWJs
aWMgR2VzdHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdlUHJv
eHkmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgaGFuZGxlRHJhZyhjb25zdCBHZGtF
dmVudCosIGRvdWJsZSB4LCBkb3VibGUgeSk7CisgICAgICAgIHZvaWQgaGFuZGxlVGFwKGNvbnN0
IEdka0V2ZW50Kik7CisKKyAgICAgICAgc3RhdGljIHZvaWQgYmVnaW4oRHJhZ0dlc3R1cmUqLCBk
b3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgdXBk
YXRlKERyYWdHZXN0dXJlKiwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIGVuZChEcmFnR2VzdHVyZSosIEdka0V2ZW50U2VxdWVuY2UqLCBHdGtH
ZXN0dXJlKik7CisKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3N0YXJ0OworICAgICAg
ICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fb2Zmc2V0OworICAgICAgICBHTWFpbkxvb3BTb3VyY2Ug
bV9sb25nUHJlc3NUaW1lb3V0OworICAgICAgICBHUmVmUHRyPEd0a0dlc3R1cmU+IG1fbG9uZ1By
ZXNzOworICAgICAgICBib29sIG1faW5EcmFnOworICAgIH07CisKKyAgICBjbGFzcyBab29tR2Vz
dHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFpvb21H
ZXN0dXJlKFdlYlBhZ2VQcm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHZv
aWQgYmVnaW4oWm9vbUdlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopOwor
ICAgICAgICBzdGF0aWMgdm9pZCBzY2FsZUNoYW5nZWQoWm9vbUdlc3R1cmUqLCBkb3VibGUgc2Nh
bGUsIEd0a0dlc3R1cmUqKTsKKworICAgICAgICBnZG91YmxlIG1faW5pdGlhbFNjYWxlOworICAg
ICAgICBnZG91YmxlIG1fc2NhbGU7CisgICAgICAgIFdlYkNvcmU6OkludFBvaW50IG1fcG9pbnQ7
CisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBtX2lkbGU7CisgICAgfTsKKworICAgIERyYWdHZXN0
dXJlIG1fZHJhZ0dlc3R1cmU7CisgICAgWm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShHVEtfR0VTVFVSRVMpCisK
KyNlbmRpZiAvLyBHZXN0dXJlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
RmluZEdUSzMuY21ha2UgYi9Tb3VyY2UvY21ha2UvRmluZEdUSzMuY21ha2UKaW5kZXggMGQ4ZDA1
Ny4uYzhlODc1MCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHVEszLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9GaW5kR1RLMy5jbWFrZQpAQCAtNjQsNSArNjQsMTEgQEAgaWYgKE5PVChF
TkFCTEVfWDExX1RBUkdFVCBPUiBFTkFCTEVfV0FZTEFORF9UQVJHRVQpKQogICAgICAgICAiYmUg
ZW5hYmxlZCBhbmQgYWxzbyBzdXBwb3J0ZWQgYnkgdGhlIEdUSysgZGVwZW5kZW5jeTogWDExLCBX
YXlsYW5kIikKIGVuZGlmICgpCiAKK2lmIChHVEszX1ZFUlNJT04gQU5EIFZFUlNJT05fT0sgQU5E
IE5PVCgiJHtHVEszX1ZFUlNJT059IiBWRVJTSU9OX0xFU1MgIjMuMTQuMCIpKQorICAgIHNldChH
VEtfU1VQUE9SVFNfR0VTVFVSRVMgT04pCitlbHNlICgpCisgICAgc2V0KEdUS19TVVBQT1JUU19H
RVNUVVJFUyBPRkYpCitlbmRpZiAoKQorCiBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRh
cmRBcmdzKQogRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKEdUSzMgREVGQVVMVF9N
U0cgR1RLM19JTkNMVURFX0RJUlMgR1RLM19MSUJSQVJJRVMgVkVSU0lPTl9PSykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UKaW5kZXggY2I1MWQ3Zi4uOGVjOTRhNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAg
LTI2MSw2ICsyNjEsMTAgQEAgaWYgKEVOQUJMRV9DUkVERU5USUFMX1NUT1JBR0UpCiAgICAgc2V0
KEVOQUJMRV9DUkVERU5USUFMX1NUT1JBR0UgMSkKIGVuZGlmICgpCiAKK2lmIChHVEtfU1VQUE9S
VFNfR0VTVFVSRVMpCisgICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9HVEtfR0VTVFVSRVM9MSkK
K2VuZGlmICgpCisKICMgVGhpcyBwYXJ0IGNhbiBiZSBzaW1wbGlmaWVkIG9uY2UgQ01ha2UgMi44
LjYgaXMgcmVxdWlyZWQgYW5kCiAjIENNYWtlUHVzaENoZWNrU3RhdGUgY2FuIGJlIHVzZWQuIFdl
IG5lZWQgdG8gaGF2ZSBPUEVOR0xfSU5DTFVERV9ESVIgYXMgcGFydAogIyBvZiB0aGUgZGlyZWN0
b3JpZXMgY2hlY2tfaW5jbHVkZV9maWxlcygpIGxvb2tzIGZvciBpbiBjYXNlIE9wZW5HTCBpcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240012</attachid>
            <date>2014-10-17 05:13:41 -0700</date>
            <delta_ts>2014-10-17 10:53:47 -0700</delta_ts>
            <desc>Fix the build with GTK+ &lt; 3.14</desc>
            <filename>wk2-gestures2.diff</filename>
            <type>text/plain</type>
            <size>23542</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjYzdjNTUxLi40MzU0ZGI5
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTQtMTAtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGdlc3R1cmVzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzgxMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoZWNrIGlmIHRoZSBHVEsrIHZl
cnNpb24gc3VwcG9ydHMgZ2VzdHVyZXMgb3Igbm90LgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRHVEszLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
OgorCiAyMDE0LTEwLTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OKENNYWtlKTogW0dUS10gV2ViS2l0U2V0dGluZ3M6ZW5h
YmxlLXNtb290aC1zY3JvbGxpbmcgZG9lcyBub3RoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWFlYzA5Mi4u
MzA0MjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE0LTEwLTE3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
aW5pdGlhbCBnZXN0dXJlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOb3cgdGhhdCBHVEsrIGhhcyBzdXBwb3J0IGZvciBnZXN0dXJlcywg
d2UgY2FuIHVzZSBpdCB0byBoYW5kbGUKKyAgICAgICAgdG91Y2ggZXZlbnRzIGFuZCBhbGxvdyB0
byBzY3JvbGwsIHpvb20gYW5kIHRhcCB3aXRoIHRoZSBmaW5nZXJzLgorCisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogV2hlbiB0aGUgdG91Y2ggZXZlbnQK
KyAgICAgICAgaGFzbid0IGJlZW4gaGFuZGxlZCBieSB0aGUgd2ViIHByb2Nlc3MgcGFzcyBpdCB0
byB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgYW5kIG9ubHkgZmFsbGJhY2sgdG8gcG9p
bnRlciBlbXVsYXRpb24gd2hlbiB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgZG9lc24n
dCBoYW5kbGUgdGhlIGV2ZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudCk6IElm
IHRoZSBHZXN0dXJlQ29udHJvbGxlciBpcworICAgICAgICBjdXJyZW50bHkgcHJvY2Vzc2luZyBn
ZXN0dXJlcyBpcyBiZWNhdXNlIHRoZSBTVEFSVCB0b3VjaCBldmVudCB3YXMKKyAgICAgICAgbm90
IGhhbmRsZWQgYnkgdGhlIHdlYiBwcm9jZXNzLCBzbyBwYXNzIGFueSBzdWNjZXNzaXZlIHRvdWNo
CisgICAgICAgIGV2ZW50cyB0byB0aGUgR2VzdHVyZUNvbnRyb2xsZXIgZGlyZWN0bHkuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKTogQ3JlYXRlIHRoZSBHZXN0
dXJlQ29udHJvbGxlcgorICAgICAgICBvbiBkZW1hbmQgYW5kIHJldHVybiBhIHJlZmVyZW5jZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpjcmVhdGUpOiBDcmVhdGUgYSBHZXN0
dXJlQ29udHJvbGxlci4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1
cmVDb250cm9sbGVyKTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgR2VzdHVyZSBtZW1lYmVycy4K
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KTogUGFzcyB0
aGUgZXZlbnQgdG8gdGhlIGdlc3R1cmVzLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJv
bGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOiBXaGV0aGVyCisgICAgICAgIEdlc3R1cmVzIGFy
ZSBhY3RpdmUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpH
ZXN0dXJlKTogQmFzZSBjbGFzcyBmb3IgZ2VzdHVyZXMuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSk6IFdoZXRoZXIgdGhlCisgICAgICAgIGdl
c3R1cmUgaXMgYWN0aXZlLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2Vz
dHVyZTo6aGFuZGxlRXZlbnQpOiBQYXNzIHRoZSBldmVudAorICAgICAgICB0byB0aGUgR3RrR2Vz
dHVyZSB0byBwcm9jZXNzIGl0LgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcpOiBTZW5kIGEgd2hlZWwKKyAgICAgICAgZXZlbnQgY29y
cmVzcG9uZGluZyB0byB0aGUgZHJhZyBnZXN0dXJlIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVUYXApOiBT
ZW5kIG1vdmUsCisgICAgICAgIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBjb3JyZXNwb25kaW5n
IHRvIGEgdGFwIGdlc3R1cmUgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpH
ZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKTogU3RhcnQgYSBkcmFnCisgICAg
ICAgIGdlc3R1cmUgYW5kIHNjaGVkdWxlIGEgdGltZXIgdG8gZGlzY2FyZCB0YXAgZ2VzdHVyZSBp
biBjYXNlIG9mCisgICAgICAgIGxvbmcgcHJlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKTogSWYgdGhlIGFjdHVhbAorICAgICAgICBk
cmFnIGhhc24ndCBzdGFydGVkIHlldCwgY2hlY2sgdGhlIGRyYWcgdGhyZXNob2xkIHRvIGRlY2lk
ZQorICAgICAgICB3aGV0aGVyIHRvIHN0YXJ0IHRoZSBkcmFnIG9yIG5vdC4gT3RoZXJ3aXNlIGNh
bGwgaGFuZGxlRHJhZygpIHRvCisgICAgICAgIHNlbmQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50cyB0
byB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpE
cmFnR2VzdHVyZTo6ZW5kKTogSWYgdGhlIGRyYWcgZ2VzdHVyZQorICAgICAgICBmaW5pc2hlcyBh
bmQgdGhlIGRyYWcgZGlkbid0IGhhcHBlbiAoaXQgd2Fzbid0IGEgbG9uZyBwcmVzcyBhbmQKKyAg
ICAgICAgZHJhZyB0aHJlc2hvbGQgd2FzIG5vdCByZWFjaGVkKSwgY2FsbCBoYW5kbGVUYXAoKSB0
byBlbXVsYXRlIGEKKyAgICAgICAgY2xpY2sgZXZlbnQuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1cmUpOiBJbml0aWFsaXplCisgICAg
ICAgIHRoZSBHdGtHZXN0dXJlRHJhZy4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6Olpvb21HZXN0dXJlOjpiZWdpbik6IFNhdmUgdGhlIGN1cnJlbnQKKyAgICAgICAgcGFnZSBz
Y2FsZSBmYWN0b3IgYW5kIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGdlc3R1cmUuCisgICAgICAg
IChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKTog
U2NoZWR1bGUgYQorICAgICAgICBwYWdlIHNjYWxlIGNoYW5nZSBpbiBhbiBpZGxlIGZvciB0aGUg
Z2l2ZW4gc2NhbGUgdmFsdWUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpa
b29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUpOiBJbml0aWFsaXplCisgICAgICAgIHRoZSBHdGtHZXN0
dXJlWm9vbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6IEFk
ZGVkLgorCiAyMDE0LTEwLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBNb3ZlIGNsaWNrIGNvdW50ZXIgbG9naWMgYmFjayB0byBX
ZWJLaXRXZWJWaWV3QmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAzOWFmYzdjLi41
MzFhNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjUyLDYgKzI1Miw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAKIAogICAgIFVJUHJvY2Vzcy9ndGsvRXhwZXJpbWVudGFsRmVhdHVyZXMuY3Bw
CisgICAgVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKICAgICBVSVByb2Nlc3Mv
Z3RrL1RleHRDaGVja2VyR3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5j
cHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5k
ZXggMzZmZmRkZC4uNGEyYmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzM1LDYgKzMzNSwxMiBAQCB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVu
dCYgZXZlbnQsIGJvb2wgdwogICAgIGlmICh3YXNFdmVudEhhbmRsZWQpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0
dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CisgICAgaWYgKGdlc3R1cmVDb250cm9sbGVy
LmhhbmRsZUV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKwogICAgIC8vIEVtdWxhdGUgcG9pbnRlciBldmVudHMgaWYgdW5oYW5kbGVkLgogICAgIGNv
bnN0IEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCmluZGV4IGY4ZjExZmUuLjdhZWMzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTY3LDYgKzY3LDcg
QEAKICNlbmRpZgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTE0
Nyw2ICsxNDgsMTAgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogICAgIE93blB0cjxSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdz4gcmVkaXJlY3RlZFdpbmRvdzsKICNlbmRpZgorCisjaWYgSEFW
RShHVEtfR0VTVFVSRVMpCisgICAgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBn
ZXN0dXJlQ29udHJvbGxlcjsKKyNlbmRpZgogfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktp
dFdlYlZpZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQpA
QCAtODM1LDE0ICs4NDAsMjUgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRUb3Vj
aFBvaW50c0ZvckV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmEKIAogc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RXZlbnRUb3VjaCogZXZlbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2
ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogCiAgICAg
aWYgKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nKQogICAgICAgICByZXR1cm4gVFJVRTsKIAog
ICAgIEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KTsKLSAgICB1aW50MzJfdCBzZXF1ZW5jZSA9IEdQT0lOVEVSX1RPX1VJTlQoZ2RrX2V2ZW50
X2dldF9ldmVudF9zZXF1ZW5jZSh0b3VjaEV2ZW50KSk7CiAKKyNpZiBIQVZFKEdUS19HRVNUVVJF
UykKKyAgICBHZXN0dXJlQ29udHJvbGxlciYgZ2VzdHVyZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJW
aWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAgICBpZiAoZ2VzdHVyZUNv
bnRyb2xsZXIuaXNQcm9jZXNzaW5nR2VzdHVyZXMoKSkgeworICAgICAgICAvLyBJZiB3ZSBhcmUg
YWxyZWFkeSBwcm9jZXNzaW5nIGdlc3R1cmVzIGlzIGJlY2F1c2UgdGhlIFdlYlByb2Nlc3MgZGlk
bid0IGhhbmRsZSB0aGUKKyAgICAgICAgLy8gQkVHSU4gdG91Y2ggZXZlbnQsIHNvIHBhc3Mgc3Vi
c2VxdWVudCBldmVudHMgdG8gdGhlIEdlc3R1cmVDb250cm9sbGVyLgorICAgICAgICBnZXN0dXJl
Q29udHJvbGxlci5oYW5kbGVFdmVudCh0b3VjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MzJfdCBzZXF1ZW5jZSA9IEdQT0lOVEVSX1RPX1VJ
TlQoZ2RrX2V2ZW50X2dldF9ldmVudF9zZXF1ZW5jZSh0b3VjaEV2ZW50KSk7CiAgICAgc3dpdGNo
ICh0b3VjaEV2ZW50LT50eXBlKSB7CiAgICAgY2FzZSBHREtfVE9VQ0hfQkVHSU46IHsKICAgICAg
ICAgQVNTRVJUKCFwcml2LT50b3VjaEV2ZW50cy5jb250YWlucyhzZXF1ZW5jZSkpOwpAQCAtODY1
LDEyICs4ODEsMjIgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVu
dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUb3VjaCogZXYKICAgICB9CiAKICAgICBWZWN0
b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiB0b3VjaFBvaW50czsKLSAgICB3ZWJraXRXZWJWaWV3
QmFzZUdldFRvdWNoUG9pbnRzRm9yRXZlbnQoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSwg
dG91Y2hFdmVudCwgdG91Y2hQb2ludHMpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlR2V0VG91Y2hQ
b2ludHNGb3JFdmVudCh3ZWJWaWV3QmFzZSwgdG91Y2hFdmVudCwgdG91Y2hQb2ludHMpOwogICAg
IHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHJl
aW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIHRvdWNoUG9pbnRzKSk7CiAKICAgICBy
ZXR1cm4gVFJVRTsKIH0KIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorR2VzdHVyZUNvbnRyb2xs
ZXImIHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYlZpZXdCYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXdCYXNlLT5wcml2OworICAgIGlmICghcHJpdi0+Z2VzdHVyZUNvbnRyb2xsZXIpCisgICAg
ICAgIHByaXYtPmdlc3R1cmVDb250cm9sbGVyID0gR2VzdHVyZUNvbnRyb2xsZXI6OmNyZWF0ZSgq
cHJpdi0+cGFnZVByb3h5KTsKKyAgICByZXR1cm4gKnByaXYtPmdlc3R1cmVDb250cm9sbGVyOwor
fQorI2VuZGlmCisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRp
cChHdGtXaWRnZXQqIHdpZGdldCwgZ2ludCAvKiB4ICovLCBnaW50IC8qIHkgKi8sIGdib29sZWFu
IGtleWJvYXJkTW9kZSwgR3RrVG9vbHRpcCogdG9vbHRpcCkKIHsKICAgICBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCBiOTg3ZGQ2Li43MzZmOTg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGVfaAogI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAogCisjaW5jbHVkZSAi
R2VzdHVyZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgi
CiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRl
LmgiCkBAIC03NCw0ICs3NSw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50
aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUFkZFdlYkluc3BlY3RvcihXZWJLaXRXZWJWaWV3QmFzZSosIEd0a1dpZGdldCogaW5zcGVjdG9y
LCBXZWJLaXQ6OkF0dGFjaG1lbnRTaWRlKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZXNldENs
aWNrQ291bnRlcihXZWJLaXRXZWJWaWV3QmFzZSopOwogCisjaWYgSEFWRShHVEtfR0VTVFVSRVMp
CitXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250
cm9sbGVyKFdlYktpdFdlYlZpZXdCYXNlKik7CisjZW5kaWYKKwogI2VuZGlmIC8vIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
R2VzdHVyZUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjEyODgwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L0dlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR2VzdHVyZUNvbnRyb2xsZXIuaCIKKworI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQor
CisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYldo
ZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGQ6OnVuaXF1ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXI+IEdlc3R1cmVDb250cm9s
bGVyOjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXI+KG5ldyBHZXN0dXJlQ29udHJvbGxlcihwYWdlKSk7Cit9
CisKK0dlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBh
Z2UpCisgICAgOiBtX2RyYWdHZXN0dXJlKHBhZ2UpCisgICAgLCBtX3pvb21HZXN0dXJlKHBhZ2Up
Cit7Cit9CisKK2Jvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2
ZW50KiBldmVudCkKK3sKKyAgICBib29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vz
c2luZ0dlc3R1cmVzKCk7CisgICAgbV9kcmFnR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7Cisg
ICAgbV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7CisgICAgcmV0dXJuIGV2ZW50LT50
eXBlID09IEdES19UT1VDSF9FTkQgPyB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgOiBpc1Byb2Nlc3Np
bmdHZXN0dXJlcygpOworfQorCitib29sIEdlc3R1cmVDb250cm9sbGVyOjppc1Byb2Nlc3NpbmdH
ZXN0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHJhZ0dlc3R1cmUuaXNBY3RpdmUoKSB8
fCBtX3pvb21HZXN0dXJlLmlzQWN0aXZlKCk7Cit9CisKK0dlc3R1cmVDb250cm9sbGVyOjpHZXN0
dXJlOjpHZXN0dXJlKEd0a0dlc3R1cmUqIGdlc3R1cmUsIFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAg
ICA6IG1fZ2VzdHVyZShhZG9wdEdSZWYoZ2VzdHVyZSkpCisgICAgLCBtX3BhZ2UocGFnZSkKK3sK
KyAgICBndGtfZXZlbnRfY29udHJvbGxlcl9zZXRfcHJvcGFnYXRpb25fcGhhc2UoR1RLX0VWRU5U
X0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgR1RLX1BIQVNFX05PTkUpOworfQorCitib29s
IEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGd0a19nZXN0dXJlX2lzX2FjdGl2ZShtX2dlc3R1cmUuZ2V0KCkpOworfQorCit2b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpoYW5kbGVFdmVudChjb25zdCBHZGtFdmVudCogZXZl
bnQpCit7CisgICAgZ3RrX2V2ZW50X2NvbnRyb2xsZXJfaGFuZGxlX2V2ZW50KEdUS19FVkVOVF9D
T05UUk9MTEVSKG1fZ2VzdHVyZS5nZXQoKSksIGV2ZW50KTsKK30KKwordm9pZCBHZXN0dXJlQ29u
dHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBk
b3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgQVNTRVJUKG1faW5EcmFnKTsKKyAgICBHVW5pcXVl
UHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKKyAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAgICBzY3Jv
bGxFdmVudC0+c2Nyb2xsLnggPSBtX3N0YXJ0LngoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xs
LnkgPSBtX3N0YXJ0LnkoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnhfcm9vdCA9IGV2ZW50
LT50b3VjaC54X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC55X3Jvb3QgPSBldmVudC0+
dG91Y2gueV9yb290OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1ND
Uk9MTF9TTU9PVEg7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gKG1fb2Zmc2V0
LngoKSAtIHgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwuZGVsdGFfeSA9IChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQt
PnRvdWNoLnN0YXRlOworICAgIG1fcGFnZS5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVs
RXZlbnQoc2Nyb2xsRXZlbnQuZ2V0KCkpKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZVRhcChjb25zdCBHZGtFdmVudCogZXZlbnQpCit7CisgICAgQVNT
RVJUKCFtX2luRHJhZyk7CisgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gcG9pbnRlckV2ZW50KGdk
a19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlv
bi50aW1lID0gZXZlbnQtPnRvdWNoLnRpbWU7CisgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ueCA9
IGV2ZW50LT50b3VjaC54OworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnkgPSBldmVudC0+dG91
Y2gueTsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi54X3Jvb3QgPSBldmVudC0+dG91Y2gueF9y
b290OworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jv
b3Q7CisgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24uc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7
CisgICAgbV9wYWdlLmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChwb2ludGVy
RXZlbnQuZ2V0KCksIDApKTsKKworICAgIHBvaW50ZXJFdmVudC5yZXNldChnZGtfZXZlbnRfbmV3
KEdES19CVVRUT05fUFJFU1MpKTsKKyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi5idXR0b24gPSAx
OworICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAg
ICBwb2ludGVyRXZlbnQtPmJ1dHRvbi54ID0gZXZlbnQtPnRvdWNoLng7CisgICAgcG9pbnRlckV2
ZW50LT5idXR0b24ueSA9IGV2ZW50LT50b3VjaC55OworICAgIHBvaW50ZXJFdmVudC0+YnV0dG9u
Lnhfcm9vdCA9IGV2ZW50LT50b3VjaC54X3Jvb3Q7CisgICAgcG9pbnRlckV2ZW50LT5idXR0b24u
eV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKKyAgICBtX3BhZ2UuaGFuZGxlTW91c2VFdmVu
dChOYXRpdmVXZWJNb3VzZUV2ZW50KHBvaW50ZXJFdmVudC5nZXQoKSwgMSkpOworCisgICAgcG9p
bnRlckV2ZW50LT50eXBlID0gR0RLX0JVVFRPTl9SRUxFQVNFOworICAgIG1fcGFnZS5oYW5kbGVN
b3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQocG9pbnRlckV2ZW50LmdldCgpLCAwKSk7Cit9
CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVy
ZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkK
K3sKKyAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9n
ZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOworICAgIGd0
a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5U
X1NFUVVFTkNFX0NMQUlNRUQpOworICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IGZhbHNlOwor
ICAgIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LnNldCh4LCB5KTsKKyAgICBkcmFnR2VzdHVyZS0+bV9v
ZmZzZXQuc2V0KDAsIDApOworCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtfZXZlbnRfY29u
dHJvbGxlcl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKKyAgICBp
bnQgZGVsYXk7CisgICAgZ19vYmplY3RfZ2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdl
dCksICJndGstbG9uZy1wcmVzcy10aW1lIiwgJmRlbGF5LCBudWxscHRyKTsKKyAgICBkcmFnR2Vz
dHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gRHJh
Z0dlc3R1cmUgbG9uZyBwcmVzcyB0aW1lb3V0IiwgW2RyYWdHZXN0dXJlXSgpIHsKKyAgICAgICAg
ZHJhZ0dlc3R1cmUtPm1faW5EcmFnID0gdHJ1ZTsKKyAgICB9LCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzKGRlbGF5KSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJl
Ojp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0
a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBn
dGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xF
KGdlc3R1cmUpKTsKKyAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwg
c2VxdWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X3dpZGdldChHVEtfRVZFTlRfQ09OVFJP
TExFUihnZXN0dXJlKSk7CisgICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcgJiYgZ3RrX2Ry
YWdfY2hlY2tfdGhyZXNob2xkKHdpZGdldCwgZHJhZ0dlc3R1cmUtPm1fc3RhcnQueCgpLCBkcmFn
R2VzdHVyZS0+bV9zdGFydC55KCksIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LngoKSArIHgsIGRyYWdH
ZXN0dXJlLT5tX3N0YXJ0LnkoKSArIHkpKSB7CisgICAgICAgIGRyYWdHZXN0dXJlLT5tX2luRHJh
ZyA9IHRydWU7CisgICAgICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuY2FuY2Vs
KCk7CisgICAgfQorCisgICAgaWYgKGRyYWdHZXN0dXJlLT5tX2luRHJhZykKKyAgICAgICAgZHJh
Z0dlc3R1cmUtPmhhbmRsZURyYWcoZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwg
c2VxdWVuY2UpLCB4LCB5KTsKKyAgICBkcmFnR2VzdHVyZS0+bV9vZmZzZXQuc2V0KHgsIHkpOwor
fQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5kKERyYWdHZXN0dXJl
KiBkcmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UsIEd0a0dlc3R1cmUqIGdl
c3R1cmUpCit7CisgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5jYW5jZWwoKTsK
KyAgICBpZiAoIWRyYWdHZXN0dXJlLT5tX2luRHJhZykgeworICAgICAgICBkcmFnR2VzdHVyZS0+
aGFuZGxlVGFwKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSk7
CisgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVO
Q0VfREVOSUVEKTsKKyAgICB9IGVsc2UgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNl
KGdlc3R1cmUsIHNlcXVlbmNlKSkKKyAgICAgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1
cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOworfQorCitHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OkRyYWdHZXN0dXJlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IEdlc3R1
cmUoZ3RrX2dlc3R1cmVfZHJhZ19uZXcocGFnZS52aWV3V2lkZ2V0KCkpLCBwYWdlKQorICAgICwg
bV9pbkRyYWcoZmFsc2UpCit7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5
KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZHJhZy1iZWdpbiIsIEdfQ0FMTEJB
Q0soYmVnaW4pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJl
LmdldCgpLCAiZHJhZy11cGRhdGUiLCBHX0NBTExCQUNLKHVwZGF0ZSksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJlbmQiLCBHX0NBTExCQUNL
KGVuZCksIHRoaXMpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6
YmVnaW4oWm9vbUdlc3R1cmUqIHpvb21HZXN0dXJlLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2Vz
dHVyZSogZ2VzdHVyZSkKK3sKKyAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RL
X0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgem9vbUdlc3R1cmUtPm1faW5pdGlhbFNj
YWxlID0gem9vbUdlc3R1cmUtPm1fcGFnZS5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBkb3VibGUg
eCwgeTsKKyAgICBndGtfZ2VzdHVyZV9nZXRfYm91bmRpbmdfYm94X2NlbnRlcihnZXN0dXJlLCAm
eCwgJnkpOworICAgIHpvb21HZXN0dXJlLT5tX3BvaW50ID0gSW50UG9pbnQoeCwgeSk7Cit9CisK
K3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpzY2FsZUNoYW5nZWQoWm9vbUdl
c3R1cmUqIHpvb21HZXN0dXJlLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUqKQoreworICAgIHpv
b21HZXN0dXJlLT5tX3NjYWxlID0gem9vbUdlc3R1cmUtPm1faW5pdGlhbFNjYWxlICogc2NhbGU7
CisgICAgaWYgKHpvb21HZXN0dXJlLT5tX2lkbGUuaXNTY2hlZHVsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgem9vbUdlc3R1cmUtPm1faWRsZS5zY2hlZHVsZSgiW1dlYktpdF0gWm9vbSBH
ZXN0dXJlIElkbGUiLCBbem9vbUdlc3R1cmVdKCkgeworICAgICAgICAvLyBGSVhNRTogWm9vbWVk
IGFyZWEgaXMgbm90IGNvcnJlY3RseSBjZW50ZXJlZC4KKyAgICAgICAgem9vbUdlc3R1cmUtPm1f
cGFnZS5zY2FsZVBhZ2Uoem9vbUdlc3R1cmUtPm1fc2NhbGUsIHpvb21HZXN0dXJlLT5tX3BvaW50
KTsKKyAgICB9KTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpab29tR2Vz
dHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3pvb21f
bmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKKyAgICAsIG1faW5pdGlhbFNjYWxlKDApCisg
ICAgLCBtX3NjYWxlKDApCit7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVy
ZS5nZXQoKSwgImJlZ2luIiwgR19DQUxMQkFDSyhiZWdpbiksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJzY2FsZS1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhzY2FsZUNoYW5nZWQpLCB0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBIQVZFKEdUS19HRVNUVVJFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mMGFmYzAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VzdHVyZUNv
bnRyb2xsZXJfaAorI2RlZmluZSBHZXN0dXJlQ29udHJvbGxlcl9oCisKKyNpZiBIQVZFKEdUS19H
RVNUVVJFUykKKworI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiB1bmlvbiBfR2Rr
RXZlbnQgR2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRTZXF1ZW5jZSBHZGtFdmVu
dFNlcXVlbmNlOwordHlwZWRlZiBzdHJ1Y3QgX0d0a0dlc3R1cmUgR3RrR2VzdHVyZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIEdlc3R1cmVDb250
cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHZXN0dXJlQ29udHJvbGxlcik7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBj
cmVhdGUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBib29sIGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkg
Y29uc3Q7CisgICAgYm9vbCBoYW5kbGVFdmVudChjb25zdCBHZGtFdmVudCopOworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IEdlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOworCisgICAg
Y2xhc3MgR2VzdHVyZSB7CisgICAgcHVibGljOgorICAgICAgICBib29sIGlzQWN0aXZlKCkgY29u
c3Q7CisgICAgICAgIHZvaWQgaGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqKTsKKworICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgR2VzdHVyZShHdGtHZXN0dXJlKiwgV2ViUGFnZVByb3h5Jik7CisK
KyAgICAgICAgR1JlZlB0cjxHdGtHZXN0dXJlPiBtX2dlc3R1cmU7CisgICAgICAgIFdlYlBhZ2VQ
cm94eSYgbV9wYWdlOworICAgIH07CisKKyAgICBjbGFzcyBEcmFnR2VzdHVyZSBmaW5hbCA6IHB1
YmxpYyBHZXN0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERyYWdHZXN0dXJlKFdlYlBhZ2VQ
cm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBoYW5kbGVEcmFnKGNvbnN0IEdk
a0V2ZW50KiwgZG91YmxlIHgsIGRvdWJsZSB5KTsKKyAgICAgICAgdm9pZCBoYW5kbGVUYXAoY29u
c3QgR2RrRXZlbnQqKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBiZWdpbihEcmFnR2VzdHVyZSos
IGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSopOworICAgICAgICBzdGF0aWMgdm9pZCB1
cGRhdGUoRHJhZ0dlc3R1cmUqLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgZW5kKERyYWdHZXN0dXJlKiwgR2RrRXZlbnRTZXF1ZW5jZSosIEd0
a0dlc3R1cmUqKTsKKworICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fc3RhcnQ7CisgICAg
ICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9vZmZzZXQ7CisgICAgICAgIEdNYWluTG9vcFNvdXJj
ZSBtX2xvbmdQcmVzc1RpbWVvdXQ7CisgICAgICAgIEdSZWZQdHI8R3RrR2VzdHVyZT4gbV9sb25n
UHJlc3M7CisgICAgICAgIGJvb2wgbV9pbkRyYWc7CisgICAgfTsKKworICAgIGNsYXNzIFpvb21H
ZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgWm9v
bUdlc3R1cmUoV2ViUGFnZVByb3h5Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMg
dm9pZCBiZWdpbihab29tR2VzdHVyZSosIEdka0V2ZW50U2VxdWVuY2UqLCBHdGtHZXN0dXJlKik7
CisgICAgICAgIHN0YXRpYyB2b2lkIHNjYWxlQ2hhbmdlZChab29tR2VzdHVyZSosIGRvdWJsZSBz
Y2FsZSwgR3RrR2VzdHVyZSopOworCisgICAgICAgIGdkb3VibGUgbV9pbml0aWFsU2NhbGU7Cisg
ICAgICAgIGdkb3VibGUgbV9zY2FsZTsKKyAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wb2lu
dDsKKyAgICAgICAgR01haW5Mb29wU291cmNlIG1faWRsZTsKKyAgICB9OworCisgICAgRHJhZ0dl
c3R1cmUgbV9kcmFnR2VzdHVyZTsKKyAgICBab29tR2VzdHVyZSBtX3pvb21HZXN0dXJlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBIQVZFKEdUS19HRVNUVVJFUykK
KworI2VuZGlmIC8vIEdlc3R1cmVDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9GaW5kR1RLMy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kR1RLMy5jbWFrZQppbmRleCAwZDhk
MDU3Li5jOGU4NzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZEdUSzMuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL0ZpbmRHVEszLmNtYWtlCkBAIC02NCw1ICs2NCwxMSBAQCBpZiAoTk9U
KEVOQUJMRV9YMTFfVEFSR0VUIE9SIEVOQUJMRV9XQVlMQU5EX1RBUkdFVCkpCiAgICAgICAgICJi
ZSBlbmFibGVkIGFuZCBhbHNvIHN1cHBvcnRlZCBieSB0aGUgR1RLKyBkZXBlbmRlbmN5OiBYMTEs
IFdheWxhbmQiKQogZW5kaWYgKCkKIAoraWYgKEdUSzNfVkVSU0lPTiBBTkQgVkVSU0lPTl9PSyBB
TkQgTk9UKCIke0dUSzNfVkVSU0lPTn0iIFZFUlNJT05fTEVTUyAiMy4xNC4wIikpCisgICAgc2V0
KEdUS19TVVBQT1JUU19HRVNUVVJFUyBPTikKK2Vsc2UgKCkKKyAgICBzZXQoR1RLX1NVUFBPUlRT
X0dFU1RVUkVTIE9GRikKK2VuZGlmICgpCisKIGluY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFu
ZGFyZEFyZ3MpCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoR1RLMyBERUZBVUxU
X01TRyBHVEszX0lOQ0xVREVfRElSUyBHVEszX0xJQlJBUklFUyBWRVJTSU9OX09LKQpkaWZmIC0t
Z2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZQppbmRleCBjYjUxZDdmLi44ZWM5NGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpA
QCAtMjYxLDYgKzI2MSwxMCBAQCBpZiAoRU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRSkKICAgICBz
ZXQoRU5BQkxFX0NSRURFTlRJQUxfU1RPUkFHRSAxKQogZW5kaWYgKCkKIAoraWYgKEdUS19TVVBQ
T1JUU19HRVNUVVJFUykKKyAgICBhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0dUS19HRVNUVVJFUz0x
KQorZW5kaWYgKCkKKwogIyBUaGlzIHBhcnQgY2FuIGJlIHNpbXBsaWZpZWQgb25jZSBDTWFrZSAy
LjguNiBpcyByZXF1aXJlZCBhbmQKICMgQ01ha2VQdXNoQ2hlY2tTdGF0ZSBjYW4gYmUgdXNlZC4g
V2UgbmVlZCB0byBoYXZlIE9QRU5HTF9JTkNMVURFX0RJUiBhcyBwYXJ0CiAjIG9mIHRoZSBkaXJl
Y3RvcmllcyBjaGVja19pbmNsdWRlX2ZpbGVzKCkgbG9va3MgZm9yIGluIGNhc2UgT3BlbkdMIGlz
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240022</attachid>
            <date>2014-10-17 10:53:47 -0700</date>
            <delta_ts>2014-10-17 11:00:41 -0700</delta_ts>
            <desc>Addressed review comments</desc>
            <filename>wk2-gestures.diff</filename>
            <type>text/plain</type>
            <size>23525</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjYzdjNTUxLi40MzU0ZGI5
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTQtMTAtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGdlc3R1cmVzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzgxMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoZWNrIGlmIHRoZSBHVEsrIHZl
cnNpb24gc3VwcG9ydHMgZ2VzdHVyZXMgb3Igbm90LgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRHVEszLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
OgorCiAyMDE0LTEwLTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OKENNYWtlKTogW0dUS10gV2ViS2l0U2V0dGluZ3M6ZW5h
YmxlLXNtb290aC1zY3JvbGxpbmcgZG9lcyBub3RoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWFlYzA5Mi4u
MzA0MjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE0LTEwLTE3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
aW5pdGlhbCBnZXN0dXJlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOb3cgdGhhdCBHVEsrIGhhcyBzdXBwb3J0IGZvciBnZXN0dXJlcywg
d2UgY2FuIHVzZSBpdCB0byBoYW5kbGUKKyAgICAgICAgdG91Y2ggZXZlbnRzIGFuZCBhbGxvdyB0
byBzY3JvbGwsIHpvb20gYW5kIHRhcCB3aXRoIHRoZSBmaW5nZXJzLgorCisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogV2hlbiB0aGUgdG91Y2ggZXZlbnQK
KyAgICAgICAgaGFzbid0IGJlZW4gaGFuZGxlZCBieSB0aGUgd2ViIHByb2Nlc3MgcGFzcyBpdCB0
byB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgYW5kIG9ubHkgZmFsbGJhY2sgdG8gcG9p
bnRlciBlbXVsYXRpb24gd2hlbiB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgZG9lc24n
dCBoYW5kbGUgdGhlIGV2ZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudCk6IElm
IHRoZSBHZXN0dXJlQ29udHJvbGxlciBpcworICAgICAgICBjdXJyZW50bHkgcHJvY2Vzc2luZyBn
ZXN0dXJlcyBpcyBiZWNhdXNlIHRoZSBTVEFSVCB0b3VjaCBldmVudCB3YXMKKyAgICAgICAgbm90
IGhhbmRsZWQgYnkgdGhlIHdlYiBwcm9jZXNzLCBzbyBwYXNzIGFueSBzdWNjZXNzaXZlIHRvdWNo
CisgICAgICAgIGV2ZW50cyB0byB0aGUgR2VzdHVyZUNvbnRyb2xsZXIgZGlyZWN0bHkuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKTogQ3JlYXRlIHRoZSBHZXN0
dXJlQ29udHJvbGxlcgorICAgICAgICBvbiBkZW1hbmQgYW5kIHJldHVybiBhIHJlZmVyZW5jZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpjcmVhdGUpOiBDcmVhdGUgYSBHZXN0
dXJlQ29udHJvbGxlci4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1
cmVDb250cm9sbGVyKTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgR2VzdHVyZSBtZW1lYmVycy4K
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KTogUGFzcyB0
aGUgZXZlbnQgdG8gdGhlIGdlc3R1cmVzLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJv
bGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOiBXaGV0aGVyCisgICAgICAgIEdlc3R1cmVzIGFy
ZSBhY3RpdmUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpH
ZXN0dXJlKTogQmFzZSBjbGFzcyBmb3IgZ2VzdHVyZXMuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSk6IFdoZXRoZXIgdGhlCisgICAgICAgIGdl
c3R1cmUgaXMgYWN0aXZlLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2Vz
dHVyZTo6aGFuZGxlRXZlbnQpOiBQYXNzIHRoZSBldmVudAorICAgICAgICB0byB0aGUgR3RrR2Vz
dHVyZSB0byBwcm9jZXNzIGl0LgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcpOiBTZW5kIGEgd2hlZWwKKyAgICAgICAgZXZlbnQgY29y
cmVzcG9uZGluZyB0byB0aGUgZHJhZyBnZXN0dXJlIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVUYXApOiBT
ZW5kIG1vdmUsCisgICAgICAgIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBjb3JyZXNwb25kaW5n
IHRvIGEgdGFwIGdlc3R1cmUgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpH
ZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKTogU3RhcnQgYSBkcmFnCisgICAg
ICAgIGdlc3R1cmUgYW5kIHNjaGVkdWxlIGEgdGltZXIgdG8gZGlzY2FyZCB0YXAgZ2VzdHVyZSBp
biBjYXNlIG9mCisgICAgICAgIGxvbmcgcHJlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKTogSWYgdGhlIGFjdHVhbAorICAgICAgICBk
cmFnIGhhc24ndCBzdGFydGVkIHlldCwgY2hlY2sgdGhlIGRyYWcgdGhyZXNob2xkIHRvIGRlY2lk
ZQorICAgICAgICB3aGV0aGVyIHRvIHN0YXJ0IHRoZSBkcmFnIG9yIG5vdC4gT3RoZXJ3aXNlIGNh
bGwgaGFuZGxlRHJhZygpIHRvCisgICAgICAgIHNlbmQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50cyB0
byB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpE
cmFnR2VzdHVyZTo6ZW5kKTogSWYgdGhlIGRyYWcgZ2VzdHVyZQorICAgICAgICBmaW5pc2hlcyBh
bmQgdGhlIGRyYWcgZGlkbid0IGhhcHBlbiAoaXQgd2Fzbid0IGEgbG9uZyBwcmVzcyBhbmQKKyAg
ICAgICAgZHJhZyB0aHJlc2hvbGQgd2FzIG5vdCByZWFjaGVkKSwgY2FsbCBoYW5kbGVUYXAoKSB0
byBlbXVsYXRlIGEKKyAgICAgICAgY2xpY2sgZXZlbnQuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1cmUpOiBJbml0aWFsaXplCisgICAg
ICAgIHRoZSBHdGtHZXN0dXJlRHJhZy4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6Olpvb21HZXN0dXJlOjpiZWdpbik6IFNhdmUgdGhlIGN1cnJlbnQKKyAgICAgICAgcGFnZSBz
Y2FsZSBmYWN0b3IgYW5kIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGdlc3R1cmUuCisgICAgICAg
IChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKTog
U2NoZWR1bGUgYQorICAgICAgICBwYWdlIHNjYWxlIGNoYW5nZSBpbiBhbiBpZGxlIGZvciB0aGUg
Z2l2ZW4gc2NhbGUgdmFsdWUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpa
b29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUpOiBJbml0aWFsaXplCisgICAgICAgIHRoZSBHdGtHZXN0
dXJlWm9vbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6IEFk
ZGVkLgorCiAyMDE0LTEwLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBNb3ZlIGNsaWNrIGNvdW50ZXIgbG9naWMgYmFjayB0byBX
ZWJLaXRXZWJWaWV3QmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAzOWFmYzdjLi41
MzFhNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjUyLDYgKzI1Miw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAKIAogICAgIFVJUHJvY2Vzcy9ndGsvRXhwZXJpbWVudGFsRmVhdHVyZXMuY3Bw
CisgICAgVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKICAgICBVSVByb2Nlc3Mv
Z3RrL1RleHRDaGVja2VyR3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5j
cHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5k
ZXggMzZmZmRkZC4uNGEyYmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzM1LDYgKzMzNSwxMiBAQCB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVu
dCYgZXZlbnQsIGJvb2wgdwogICAgIGlmICh3YXNFdmVudEhhbmRsZWQpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0
dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CisgICAgaWYgKGdlc3R1cmVDb250cm9sbGVy
LmhhbmRsZUV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKwogICAgIC8vIEVtdWxhdGUgcG9pbnRlciBldmVudHMgaWYgdW5oYW5kbGVkLgogICAgIGNv
bnN0IEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCmluZGV4IGY4ZjExZmUuLjdhZWMzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTY3LDYgKzY3LDcg
QEAKICNlbmRpZgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTE0
Nyw2ICsxNDgsMTAgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogICAgIE93blB0cjxSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdz4gcmVkaXJlY3RlZFdpbmRvdzsKICNlbmRpZgorCisjaWYgSEFW
RShHVEtfR0VTVFVSRVMpCisgICAgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBn
ZXN0dXJlQ29udHJvbGxlcjsKKyNlbmRpZgogfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktp
dFdlYlZpZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQpA
QCAtODM1LDE0ICs4NDAsMjUgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRUb3Vj
aFBvaW50c0ZvckV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmEKIAogc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RXZlbnRUb3VjaCogZXZlbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2
ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogCiAgICAg
aWYgKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nKQogICAgICAgICByZXR1cm4gVFJVRTsKIAog
ICAgIEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KTsKLSAgICB1aW50MzJfdCBzZXF1ZW5jZSA9IEdQT0lOVEVSX1RPX1VJTlQoZ2RrX2V2ZW50
X2dldF9ldmVudF9zZXF1ZW5jZSh0b3VjaEV2ZW50KSk7CiAKKyNpZiBIQVZFKEdUS19HRVNUVVJF
UykKKyAgICBHZXN0dXJlQ29udHJvbGxlciYgZ2VzdHVyZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJW
aWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAgICBpZiAoZ2VzdHVyZUNv
bnRyb2xsZXIuaXNQcm9jZXNzaW5nR2VzdHVyZXMoKSkgeworICAgICAgICAvLyBJZiB3ZSBhcmUg
YWxyZWFkeSBwcm9jZXNzaW5nIGdlc3R1cmVzIGlzIGJlY2F1c2UgdGhlIFdlYlByb2Nlc3MgZGlk
bid0IGhhbmRsZSB0aGUKKyAgICAgICAgLy8gQkVHSU4gdG91Y2ggZXZlbnQsIHNvIHBhc3Mgc3Vi
c2VxdWVudCBldmVudHMgdG8gdGhlIEdlc3R1cmVDb250cm9sbGVyLgorICAgICAgICBnZXN0dXJl
Q29udHJvbGxlci5oYW5kbGVFdmVudCh0b3VjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MzJfdCBzZXF1ZW5jZSA9IEdQT0lOVEVSX1RPX1VJ
TlQoZ2RrX2V2ZW50X2dldF9ldmVudF9zZXF1ZW5jZSh0b3VjaEV2ZW50KSk7CiAgICAgc3dpdGNo
ICh0b3VjaEV2ZW50LT50eXBlKSB7CiAgICAgY2FzZSBHREtfVE9VQ0hfQkVHSU46IHsKICAgICAg
ICAgQVNTRVJUKCFwcml2LT50b3VjaEV2ZW50cy5jb250YWlucyhzZXF1ZW5jZSkpOwpAQCAtODY1
LDEyICs4ODEsMjIgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVu
dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUb3VjaCogZXYKICAgICB9CiAKICAgICBWZWN0
b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiB0b3VjaFBvaW50czsKLSAgICB3ZWJraXRXZWJWaWV3
QmFzZUdldFRvdWNoUG9pbnRzRm9yRXZlbnQoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSwg
dG91Y2hFdmVudCwgdG91Y2hQb2ludHMpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlR2V0VG91Y2hQ
b2ludHNGb3JFdmVudCh3ZWJWaWV3QmFzZSwgdG91Y2hFdmVudCwgdG91Y2hQb2ludHMpOwogICAg
IHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHJl
aW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIHRvdWNoUG9pbnRzKSk7CiAKICAgICBy
ZXR1cm4gVFJVRTsKIH0KIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorR2VzdHVyZUNvbnRyb2xs
ZXImIHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYlZpZXdCYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXdCYXNlLT5wcml2OworICAgIGlmICghcHJpdi0+Z2VzdHVyZUNvbnRyb2xsZXIpCisgICAg
ICAgIHByaXYtPmdlc3R1cmVDb250cm9sbGVyID0gR2VzdHVyZUNvbnRyb2xsZXI6OmNyZWF0ZSgq
cHJpdi0+cGFnZVByb3h5KTsKKyAgICByZXR1cm4gKnByaXYtPmdlc3R1cmVDb250cm9sbGVyOwor
fQorI2VuZGlmCisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRp
cChHdGtXaWRnZXQqIHdpZGdldCwgZ2ludCAvKiB4ICovLCBnaW50IC8qIHkgKi8sIGdib29sZWFu
IGtleWJvYXJkTW9kZSwgR3RrVG9vbHRpcCogdG9vbHRpcCkKIHsKICAgICBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCBiOTg3ZGQ2Li43MzZmOTg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGVfaAogI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAogCisjaW5jbHVkZSAi
R2VzdHVyZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgi
CiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRl
LmgiCkBAIC03NCw0ICs3NSw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50
aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUFkZFdlYkluc3BlY3RvcihXZWJLaXRXZWJWaWV3QmFzZSosIEd0a1dpZGdldCogaW5zcGVjdG9y
LCBXZWJLaXQ6OkF0dGFjaG1lbnRTaWRlKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZXNldENs
aWNrQ291bnRlcihXZWJLaXRXZWJWaWV3QmFzZSopOwogCisjaWYgSEFWRShHVEtfR0VTVFVSRVMp
CitXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250
cm9sbGVyKFdlYktpdFdlYlZpZXdCYXNlKik7CisjZW5kaWYKKwogI2VuZGlmIC8vIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
R2VzdHVyZUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmIyZGRkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L0dlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR2VzdHVyZUNvbnRyb2xsZXIuaCIKKworI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQor
CisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYldo
ZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGQ6OnVuaXF1ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXI+IEdlc3R1cmVDb250cm9s
bGVyOjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEdlc3R1cmVDb250cm9sbGVyPihwYWdlKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6
Okdlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1fZHJhZ0dlc3R1
cmUocGFnZSkKKyAgICAsIG1fem9vbUdlc3R1cmUocGFnZSkKK3sKK30KKworYm9vbCBHZXN0dXJl
Q29udHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIGJv
b2wgd2FzUHJvY2Vzc2luZ0dlc3R1cmVzID0gaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKKyAgICBt
X2RyYWdHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKKyAgICBtX3pvb21HZXN0dXJlLmhhbmRs
ZUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gZXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNIX0VORCA/
IHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA6IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7Cit9CisKK2Jv
b2wgR2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdlc3R1cmUuaXNBY3Rp
dmUoKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6Okdlc3R1cmUoR3RrR2VzdHVy
ZSogZ2VzdHVyZSwgV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogbV9nZXN0dXJlKGFkb3B0R1Jl
ZihnZXN0dXJlKSkKKyAgICAsIG1fcGFnZShwYWdlKQoreworICAgIGd0a19ldmVudF9jb250cm9s
bGVyX3NldF9wcm9wYWdhdGlvbl9waGFzZShHVEtfRVZFTlRfQ09OVFJPTExFUihtX2dlc3R1cmUu
Z2V0KCkpLCBHVEtfUEhBU0VfTk9ORSk7Cit9CisKK2Jvb2wgR2VzdHVyZUNvbnRyb2xsZXI6Okdl
c3R1cmU6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3RrX2dlc3R1cmVfaXNfYWN0
aXZlKG1fZ2VzdHVyZS5nZXQoKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1
cmU6OmhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBndGtfZXZlbnRf
Y29udHJvbGxlcl9oYW5kbGVfZXZlbnQoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdl
dCgpKSwgZXZlbnQpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6
aGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKK3sK
KyAgICBBU1NFUlQobV9pbkRyYWcpOworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2
ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwu
dGltZSA9IGV2ZW50LT50b3VjaC50aW1lOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IG1f
c3RhcnQueCgpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IG1fc3RhcnQueSgpOworICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsKKyAgICBz
Y3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CisgICAgc2Ny
b2xsRXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKKyAgICBzY3Jv
bGxFdmVudC0+c2Nyb2xsLmRlbHRhX3ggPSAobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0g
KG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7CisgICAgbV9w
YWdlLmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQo
KSkpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlVGFw
KGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBH
VW5pcXVlUHRyPEdka0V2ZW50PiBwb2ludGVyRXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfTU9USU9O
X05PVElGWSkpOworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnRpbWUgPSBldmVudC0+dG91Y2gu
dGltZTsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi54ID0gZXZlbnQtPnRvdWNoLng7CisgICAg
cG9pbnRlckV2ZW50LT5tb3Rpb24ueSA9IGV2ZW50LT50b3VjaC55OworICAgIHBvaW50ZXJFdmVu
dC0+bW90aW9uLnhfcm9vdCA9IGV2ZW50LT50b3VjaC54X3Jvb3Q7CisgICAgcG9pbnRlckV2ZW50
LT5tb3Rpb24ueV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKKyAgICBwb2ludGVyRXZlbnQt
Pm1vdGlvbi5zdGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyAgICBtX3BhZ2UuaGFuZGxlTW91
c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KHBvaW50ZXJFdmVudC5nZXQoKSwgMCkpOworCisg
ICAgcG9pbnRlckV2ZW50LnJlc2V0KGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUykpOwor
ICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLmJ1dHRvbiA9IDE7CisgICAgcG9pbnRlckV2ZW50LT5i
dXR0b24udGltZSA9IGV2ZW50LT50b3VjaC50aW1lOworICAgIHBvaW50ZXJFdmVudC0+YnV0dG9u
LnggPSBldmVudC0+dG91Y2gueDsKKyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi55ID0gZXZlbnQt
PnRvdWNoLnk7CisgICAgcG9pbnRlckV2ZW50LT5idXR0b24ueF9yb290ID0gZXZlbnQtPnRvdWNo
Lnhfcm9vdDsKKyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSBldmVudC0+dG91Y2gu
eV9yb290OworICAgIG1fcGFnZS5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQo
cG9pbnRlckV2ZW50LmdldCgpLCAxKSk7CisKKyAgICBwb2ludGVyRXZlbnQtPnR5cGUgPSBHREtf
QlVUVE9OX1JFTEVBU0U7CisgICAgbV9wYWdlLmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91
c2VFdmVudChwb2ludGVyRXZlbnQuZ2V0KCksIDApKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJv
bGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91Ymxl
IHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIEdka0V2ZW50U2VxdWVu
Y2UqIHNlcXVlbmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVlbmNlKEdU
S19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSk7CisgICAgZ3RrX2dlc3R1cmVfc2V0X3NlcXVlbmNl
X3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7Cisg
ICAgZHJhZ0dlc3R1cmUtPm1faW5EcmFnID0gZmFsc2U7CisgICAgZHJhZ0dlc3R1cmUtPm1fc3Rh
cnQuc2V0KHgsIHkpOworICAgIGRyYWdHZXN0dXJlLT5tX29mZnNldC5zZXQoMCwgMCk7CisKKyAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a19ldmVudF9jb250cm9sbGVyX2dldF93aWRnZXQoR1RL
X0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworICAgIHVuc2lnbmVkIGRlbGF5OworICAgIGdf
b2JqZWN0X2dldChndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyh3aWRnZXQpLCAiZ3RrLWxvbmctcHJl
c3MtdGltZSIsICZkZWxheSwgbnVsbHB0cik7CisgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNz
VGltZW91dC5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIERyYWdHZXN0dXJlIGxvbmcgcHJl
c3MgdGltZW91dCIsIFtkcmFnR2VzdHVyZV0oKSB7CisgICAgICAgIGRyYWdHZXN0dXJlLT5tX2lu
RHJhZyA9IHRydWU7CisgICAgfSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyhkZWxheSkpOwor
fQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0
dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJl
KQoreworICAgIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xl
X2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSk7CisgICAg
Z3RrX2dlc3R1cmVfc2V0X3NlcXVlbmNlX3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZF
TlRfU0VRVUVOQ0VfQ0xBSU1FRCk7CisKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a19ldmVu
dF9jb250cm9sbGVyX2dldF93aWRnZXQoR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOwor
ICAgIGlmICghZHJhZ0dlc3R1cmUtPm1faW5EcmFnICYmIGd0a19kcmFnX2NoZWNrX3RocmVzaG9s
ZCh3aWRnZXQsIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LngoKSwgZHJhZ0dlc3R1cmUtPm1fc3RhcnQu
eSgpLCBkcmFnR2VzdHVyZS0+bV9zdGFydC54KCkgKyB4LCBkcmFnR2VzdHVyZS0+bV9zdGFydC55
KCkgKyB5KSkgeworICAgICAgICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcgPSB0cnVlOworICAgICAg
ICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LmNhbmNlbCgpOworICAgIH0KKworICAg
IGlmIChkcmFnR2VzdHVyZS0+bV9pbkRyYWcpCisgICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVE
cmFnKGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSwgeCwgeSk7
CisgICAgZHJhZ0dlc3R1cmUtPm1fb2Zmc2V0LnNldCh4LCB5KTsKK30KKwordm9pZCBHZXN0dXJl
Q29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIEdk
a0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIGRy
YWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuY2FuY2VsKCk7CisgICAgaWYgKCFkcmFnR2Vz
dHVyZS0+bV9pbkRyYWcpIHsKKyAgICAgICAgZHJhZ0dlc3R1cmUtPmhhbmRsZVRhcChndGtfZ2Vz
dHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOworICAgICAgICBndGtfZ2Vz
dHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7CisgICAg
fSBlbHNlIGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5j
ZSkpCisgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VR
VUVOQ0VfREVOSUVEKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFn
R2VzdHVyZShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX2Ry
YWdfbmV3KHBhZ2Uudmlld1dpZGdldCgpKSwgcGFnZSkKKyAgICAsIG1faW5EcmFnKGZhbHNlKQor
eworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5H
TEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fZ2VzdHVyZS5nZXQoKSwgImRyYWctYmVnaW4iLCBHX0NBTExCQUNLKGJlZ2luKSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImRyYWctdXBk
YXRlIiwgR19DQUxMQkFDSyh1cGRhdGUpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0aGlzKTsKK30K
Kwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmJlZ2luKFpvb21HZXN0dXJl
KiB6b29tR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSosIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7
CisgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9D
TEFJTUVEKTsKKworICAgIHpvb21HZXN0dXJlLT5tX2luaXRpYWxTY2FsZSA9IHpvb21HZXN0dXJl
LT5tX3BhZ2UucGFnZVNjYWxlRmFjdG9yKCk7CisgICAgZG91YmxlIHgsIHk7CisgICAgZ3RrX2dl
c3R1cmVfZ2V0X2JvdW5kaW5nX2JveF9jZW50ZXIoZ2VzdHVyZSwgJngsICZ5KTsKKyAgICB6b29t
R2VzdHVyZS0+bV9wb2ludCA9IEludFBvaW50KHgsIHkpOworfQorCit2b2lkIEdlc3R1cmVDb250
cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKFpvb21HZXN0dXJlKiB6b29tR2VzdHVy
ZSwgZG91YmxlIHNjYWxlLCBHdGtHZXN0dXJlKikKK3sKKyAgICB6b29tR2VzdHVyZS0+bV9zY2Fs
ZSA9IHpvb21HZXN0dXJlLT5tX2luaXRpYWxTY2FsZSAqIHNjYWxlOworICAgIGlmICh6b29tR2Vz
dHVyZS0+bV9pZGxlLmlzU2NoZWR1bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHpvb21H
ZXN0dXJlLT5tX2lkbGUuc2NoZWR1bGUoIltXZWJLaXRdIFpvb20gR2VzdHVyZSBJZGxlIiwgW3pv
b21HZXN0dXJlXSgpIHsKKyAgICAgICAgLy8gRklYTUU6IFpvb21lZCBhcmVhIGlzIG5vdCBjb3Jy
ZWN0bHkgY2VudGVyZWQuCisgICAgICAgIHpvb21HZXN0dXJlLT5tX3BhZ2Uuc2NhbGVQYWdlKHpv
b21HZXN0dXJlLT5tX3NjYWxlLCB6b29tR2VzdHVyZS0+bV9wb2ludCk7CisgICAgfSk7Cit9CisK
K0dlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUoV2ViUGFnZVByb3h5
JiBwYWdlKQorICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV96b29tX25ldyhwYWdlLnZpZXdXaWRn
ZXQoKSksIHBhZ2UpCisgICAgLCBtX2luaXRpYWxTY2FsZSgwKQorICAgICwgbV9zY2FsZSgwKQor
eworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJiZWdpbiIs
IEdfQ0FMTEJBQ0soYmVnaW4pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9nZXN0dXJlLmdldCgpLCAic2NhbGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soc2NhbGVDaGFuZ2Vk
KSwgdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShH
VEtfR0VTVFVSRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dl
c3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxMmNkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNv
bnRyb2xsZXIuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlc3R1cmVDb250cm9sbGVyX2gKKyNkZWZp
bmUgR2VzdHVyZUNvbnRyb2xsZXJfaAorCisjaWYgSEFWRShHVEtfR0VTVFVSRVMpCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisKK3R5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2VxdWVuY2UgR2RrRXZlbnRTZXF1ZW5jZTsKK3R5cGVk
ZWYgc3RydWN0IF9HdGtHZXN0dXJlIEd0a0dlc3R1cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBHZXN0dXJlQ29udHJvbGxlciB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR2VzdHVyZUNvbnRyb2xsZXIpOworCitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94
eSYpOworCisgICAgZXhwbGljaXQgR2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CisK
KyAgICBib29sIGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBoYW5kbGVF
dmVudChjb25zdCBHZGtFdmVudCopOworCitwcml2YXRlOgorICAgIGNsYXNzIEdlc3R1cmUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgICAgICB2b2lk
IGhhbmRsZUV2ZW50KGNvbnN0IEdka0V2ZW50Kik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IEdlc3R1cmUoR3RrR2VzdHVyZSosIFdlYlBhZ2VQcm94eSYpOworCisgICAgICAgIEdSZWZQdHI8
R3RrR2VzdHVyZT4gbV9nZXN0dXJlOworICAgICAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAg
ICB9OworCisgICAgY2xhc3MgRHJhZ0dlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgaGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCosIGRvdWJsZSB4
LCBkb3VibGUgeSk7CisgICAgICAgIHZvaWQgaGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50Kik7CisK
KyAgICAgICAgc3RhdGljIHZvaWQgYmVnaW4oRHJhZ0dlc3R1cmUqLCBkb3VibGUgeCwgZG91Ymxl
IHksIEd0a0dlc3R1cmUqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlKERyYWdHZXN0dXJl
KiwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7CisgICAgICAgIHN0YXRpYyB2b2lk
IGVuZChEcmFnR2VzdHVyZSosIEdka0V2ZW50U2VxdWVuY2UqLCBHdGtHZXN0dXJlKik7CisKKyAg
ICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3N0YXJ0OworICAgICAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IG1fb2Zmc2V0OworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV9sb25nUHJlc3NUaW1l
b3V0OworICAgICAgICBHUmVmUHRyPEd0a0dlc3R1cmU+IG1fbG9uZ1ByZXNzOworICAgICAgICBi
b29sIG1faW5EcmFnOworICAgIH07CisKKyAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1
YmxpYyBHZXN0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFpvb21HZXN0dXJlKFdlYlBhZ2VQ
cm94eSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHZvaWQgYmVnaW4oWm9vbUdl
c3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopOworICAgICAgICBzdGF0aWMg
dm9pZCBzY2FsZUNoYW5nZWQoWm9vbUdlc3R1cmUqLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUq
KTsKKworICAgICAgICBnZG91YmxlIG1faW5pdGlhbFNjYWxlOworICAgICAgICBnZG91YmxlIG1f
c2NhbGU7CisgICAgICAgIFdlYkNvcmU6OkludFBvaW50IG1fcG9pbnQ7CisgICAgICAgIEdNYWlu
TG9vcFNvdXJjZSBtX2lkbGU7CisgICAgfTsKKworICAgIERyYWdHZXN0dXJlIG1fZHJhZ0dlc3R1
cmU7CisgICAgWm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShHVEtfR0VTVFVSRVMpCisKKyNlbmRpZiAvLyBHZXN0
dXJlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEdUSzMuY21ha2Ug
Yi9Tb3VyY2UvY21ha2UvRmluZEdUSzMuY21ha2UKaW5kZXggMGQ4ZDA1Ny4uYzhlODc1MCAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHVEszLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9G
aW5kR1RLMy5jbWFrZQpAQCAtNjQsNSArNjQsMTEgQEAgaWYgKE5PVChFTkFCTEVfWDExX1RBUkdF
VCBPUiBFTkFCTEVfV0FZTEFORF9UQVJHRVQpKQogICAgICAgICAiYmUgZW5hYmxlZCBhbmQgYWxz
byBzdXBwb3J0ZWQgYnkgdGhlIEdUSysgZGVwZW5kZW5jeTogWDExLCBXYXlsYW5kIikKIGVuZGlm
ICgpCiAKK2lmIChHVEszX1ZFUlNJT04gQU5EIFZFUlNJT05fT0sgQU5EIE5PVCgiJHtHVEszX1ZF
UlNJT059IiBWRVJTSU9OX0xFU1MgIjMuMTQuMCIpKQorICAgIHNldChHVEtfU1VQUE9SVFNfR0VT
VFVSRVMgT04pCitlbHNlICgpCisgICAgc2V0KEdUS19TVVBQT1JUU19HRVNUVVJFUyBPRkYpCitl
bmRpZiAoKQorCiBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQogRklORF9Q
QUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKEdUSzMgREVGQVVMVF9NU0cgR1RLM19JTkNMVURF
X0RJUlMgR1RLM19MSUJSQVJJRVMgVkVSU0lPTl9PSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXgg
Y2I1MWQ3Zi4uOGVjOTRhNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21h
a2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTI2MSw2ICsyNjEsMTAg
QEAgaWYgKEVOQUJMRV9DUkVERU5USUFMX1NUT1JBR0UpCiAgICAgc2V0KEVOQUJMRV9DUkVERU5U
SUFMX1NUT1JBR0UgMSkKIGVuZGlmICgpCiAKK2lmIChHVEtfU1VQUE9SVFNfR0VTVFVSRVMpCisg
ICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9HVEtfR0VTVFVSRVM9MSkKK2VuZGlmICgpCisKICMg
VGhpcyBwYXJ0IGNhbiBiZSBzaW1wbGlmaWVkIG9uY2UgQ01ha2UgMi44LjYgaXMgcmVxdWlyZWQg
YW5kCiAjIENNYWtlUHVzaENoZWNrU3RhdGUgY2FuIGJlIHVzZWQuIFdlIG5lZWQgdG8gaGF2ZSBP
UEVOR0xfSU5DTFVERV9ESVIgYXMgcGFydAogIyBvZiB0aGUgZGlyZWN0b3JpZXMgY2hlY2tfaW5j
bHVkZV9maWxlcygpIGxvb2tzIGZvciBpbiBjYXNlIE9wZW5HTCBpcwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240023</attachid>
            <date>2014-10-17 11:00:41 -0700</date>
            <delta_ts>2014-10-20 00:51:34 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-gestures.diff</filename>
            <type>text/plain</type>
            <size>23345</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjYzdjNTUxLi40MzU0ZGI5
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTQtMTAtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIGdlc3R1cmVzIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzgxMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoZWNrIGlmIHRoZSBHVEsrIHZl
cnNpb24gc3VwcG9ydHMgZ2VzdHVyZXMgb3Igbm90LgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRHVEszLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
OgorCiAyMDE0LTEwLTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OKENNYWtlKTogW0dUS10gV2ViS2l0U2V0dGluZ3M6ZW5h
YmxlLXNtb290aC1zY3JvbGxpbmcgZG9lcyBub3RoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWFlYzA5Mi4u
MzA0MjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE0LTEwLTE3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
aW5pdGlhbCBnZXN0dXJlcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOb3cgdGhhdCBHVEsrIGhhcyBzdXBwb3J0IGZvciBnZXN0dXJlcywg
d2UgY2FuIHVzZSBpdCB0byBoYW5kbGUKKyAgICAgICAgdG91Y2ggZXZlbnRzIGFuZCBhbGxvdyB0
byBzY3JvbGwsIHpvb20gYW5kIHRhcCB3aXRoIHRoZSBmaW5nZXJzLgorCisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogV2hlbiB0aGUgdG91Y2ggZXZlbnQK
KyAgICAgICAgaGFzbid0IGJlZW4gaGFuZGxlZCBieSB0aGUgd2ViIHByb2Nlc3MgcGFzcyBpdCB0
byB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgYW5kIG9ubHkgZmFsbGJhY2sgdG8gcG9p
bnRlciBlbXVsYXRpb24gd2hlbiB0aGUKKyAgICAgICAgR2VzdHVyZUNvbnRyb2xsZXIgZG9lc24n
dCBoYW5kbGUgdGhlIGV2ZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudCk6IElm
IHRoZSBHZXN0dXJlQ29udHJvbGxlciBpcworICAgICAgICBjdXJyZW50bHkgcHJvY2Vzc2luZyBn
ZXN0dXJlcyBpcyBiZWNhdXNlIHRoZSBTVEFSVCB0b3VjaCBldmVudCB3YXMKKyAgICAgICAgbm90
IGhhbmRsZWQgYnkgdGhlIHdlYiBwcm9jZXNzLCBzbyBwYXNzIGFueSBzdWNjZXNzaXZlIHRvdWNo
CisgICAgICAgIGV2ZW50cyB0byB0aGUgR2VzdHVyZUNvbnRyb2xsZXIgZGlyZWN0bHkuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKTogQ3JlYXRlIHRoZSBHZXN0
dXJlQ29udHJvbGxlcgorICAgICAgICBvbiBkZW1hbmQgYW5kIHJldHVybiBhIHJlZmVyZW5jZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpjcmVhdGUpOiBDcmVhdGUgYSBHZXN0
dXJlQ29udHJvbGxlci4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1
cmVDb250cm9sbGVyKTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgR2VzdHVyZSBtZW1lYmVycy4K
KyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KTogUGFzcyB0
aGUgZXZlbnQgdG8gdGhlIGdlc3R1cmVzLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJv
bGxlcjo6aXNQcm9jZXNzaW5nR2VzdHVyZXMpOiBXaGV0aGVyCisgICAgICAgIEdlc3R1cmVzIGFy
ZSBhY3RpdmUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpH
ZXN0dXJlKTogQmFzZSBjbGFzcyBmb3IgZ2VzdHVyZXMuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSk6IFdoZXRoZXIgdGhlCisgICAgICAgIGdl
c3R1cmUgaXMgYWN0aXZlLgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6R2Vz
dHVyZTo6aGFuZGxlRXZlbnQpOiBQYXNzIHRoZSBldmVudAorICAgICAgICB0byB0aGUgR3RrR2Vz
dHVyZSB0byBwcm9jZXNzIGl0LgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ29udHJvbGxlcjo6
RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcpOiBTZW5kIGEgd2hlZWwKKyAgICAgICAgZXZlbnQgY29y
cmVzcG9uZGluZyB0byB0aGUgZHJhZyBnZXN0dXJlIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVUYXApOiBT
ZW5kIG1vdmUsCisgICAgICAgIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBjb3JyZXNwb25kaW5n
IHRvIGEgdGFwIGdlc3R1cmUgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpH
ZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmJlZ2luKTogU3RhcnQgYSBkcmFnCisgICAg
ICAgIGdlc3R1cmUgYW5kIHNjaGVkdWxlIGEgdGltZXIgdG8gZGlzY2FyZCB0YXAgZ2VzdHVyZSBp
biBjYXNlIG9mCisgICAgICAgIGxvbmcgcHJlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKTogSWYgdGhlIGFjdHVhbAorICAgICAgICBk
cmFnIGhhc24ndCBzdGFydGVkIHlldCwgY2hlY2sgdGhlIGRyYWcgdGhyZXNob2xkIHRvIGRlY2lk
ZQorICAgICAgICB3aGV0aGVyIHRvIHN0YXJ0IHRoZSBkcmFnIG9yIG5vdC4gT3RoZXJ3aXNlIGNh
bGwgaGFuZGxlRHJhZygpIHRvCisgICAgICAgIHNlbmQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50cyB0
byB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpE
cmFnR2VzdHVyZTo6ZW5kKTogSWYgdGhlIGRyYWcgZ2VzdHVyZQorICAgICAgICBmaW5pc2hlcyBh
bmQgdGhlIGRyYWcgZGlkbid0IGhhcHBlbiAoaXQgd2Fzbid0IGEgbG9uZyBwcmVzcyBhbmQKKyAg
ICAgICAgZHJhZyB0aHJlc2hvbGQgd2FzIG5vdCByZWFjaGVkKSwgY2FsbCBoYW5kbGVUYXAoKSB0
byBlbXVsYXRlIGEKKyAgICAgICAgY2xpY2sgZXZlbnQuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dlc3R1cmUpOiBJbml0aWFsaXplCisgICAg
ICAgIHRoZSBHdGtHZXN0dXJlRHJhZy4KKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNvbnRyb2xs
ZXI6Olpvb21HZXN0dXJlOjpiZWdpbik6IFNhdmUgdGhlIGN1cnJlbnQKKyAgICAgICAgcGFnZSBz
Y2FsZSBmYWN0b3IgYW5kIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGdlc3R1cmUuCisgICAgICAg
IChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKTog
U2NoZWR1bGUgYQorICAgICAgICBwYWdlIHNjYWxlIGNoYW5nZSBpbiBhbiBpZGxlIGZvciB0aGUg
Z2l2ZW4gc2NhbGUgdmFsdWUuCisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyOjpa
b29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUpOiBJbml0aWFsaXplCisgICAgICAgIHRoZSBHdGtHZXN0
dXJlWm9vbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmg6IEFk
ZGVkLgorCiAyMDE0LTEwLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBNb3ZlIGNsaWNrIGNvdW50ZXIgbG9naWMgYmFjayB0byBX
ZWJLaXRXZWJWaWV3QmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAzOWFmYzdjLi41
MzFhNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjUyLDYgKzI1Miw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAKIAogICAgIFVJUHJvY2Vzcy9ndGsvRXhwZXJpbWVudGFsRmVhdHVyZXMuY3Bw
CisgICAgVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKICAgICBVSVByb2Nlc3Mv
Z3RrL1RleHRDaGVja2VyR3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5j
cHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5k
ZXggMzZmZmRkZC4uNGEyYmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzM1LDYgKzMzNSwxMiBAQCB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVu
dCYgZXZlbnQsIGJvb2wgdwogICAgIGlmICh3YXNFdmVudEhhbmRsZWQpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorICAgIEdlc3R1cmVDb250cm9sbGVyJiBnZXN0
dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CisgICAgaWYgKGdlc3R1cmVDb250cm9sbGVy
LmhhbmRsZUV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKwogICAgIC8vIEVtdWxhdGUgcG9pbnRlciBldmVudHMgaWYgdW5oYW5kbGVkLgogICAgIGNv
bnN0IEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCmluZGV4IGY4ZjExZmUuLmMzMDhkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTE0Nyw2ICsxNDcs
MTAgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogICAgIE93blB0cjxSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdz4gcmVkaXJlY3RlZFdpbmRvdzsKICNlbmRpZgorCisjaWYgSEFWRShHVEtfR0VT
VFVSRVMpCisgICAgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBnZXN0dXJlQ29u
dHJvbGxlcjsKKyNlbmRpZgogfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXdC
YXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQpAQCAtODM1LDE0
ICs4MzksMjUgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRUb3VjaFBvaW50c0Zv
ckV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmEKIAogc3RhdGljIGdib29sZWFuIHdl
YmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUb3Vj
aCogZXZlbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lU
X1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
Vmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogCiAgICAgaWYgKHByaXYt
PmF1dGhlbnRpY2F0aW9uRGlhbG9nKQogICAgICAgICByZXR1cm4gVFJVRTsKIAogICAgIEdka0V2
ZW50KiB0b3VjaEV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KTsKLSAg
ICB1aW50MzJfdCBzZXF1ZW5jZSA9IEdQT0lOVEVSX1RPX1VJTlQoZ2RrX2V2ZW50X2dldF9ldmVu
dF9zZXF1ZW5jZSh0b3VjaEV2ZW50KSk7CiAKKyNpZiBIQVZFKEdUS19HRVNUVVJFUykKKyAgICBH
ZXN0dXJlQ29udHJvbGxlciYgZ2VzdHVyZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZUdl
c3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAgICBpZiAoZ2VzdHVyZUNvbnRyb2xsZXIu
aXNQcm9jZXNzaW5nR2VzdHVyZXMoKSkgeworICAgICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBw
cm9jZXNzaW5nIGdlc3R1cmVzIGlzIGJlY2F1c2UgdGhlIFdlYlByb2Nlc3MgZGlkbid0IGhhbmRs
ZSB0aGUKKyAgICAgICAgLy8gQkVHSU4gdG91Y2ggZXZlbnQsIHNvIHBhc3Mgc3Vic2VxdWVudCBl
dmVudHMgdG8gdGhlIEdlc3R1cmVDb250cm9sbGVyLgorICAgICAgICBnZXN0dXJlQ29udHJvbGxl
ci5oYW5kbGVFdmVudCh0b3VjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQor
I2VuZGlmCisKKyAgICB1aW50MzJfdCBzZXF1ZW5jZSA9IEdQT0lOVEVSX1RPX1VJTlQoZ2RrX2V2
ZW50X2dldF9ldmVudF9zZXF1ZW5jZSh0b3VjaEV2ZW50KSk7CiAgICAgc3dpdGNoICh0b3VjaEV2
ZW50LT50eXBlKSB7CiAgICAgY2FzZSBHREtfVE9VQ0hfQkVHSU46IHsKICAgICAgICAgQVNTRVJU
KCFwcml2LT50b3VjaEV2ZW50cy5jb250YWlucyhzZXF1ZW5jZSkpOwpAQCAtODY1LDEyICs4ODAs
MjIgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRXZlbnRUb3VjaCogZXYKICAgICB9CiAKICAgICBWZWN0b3I8V2ViUGxh
dGZvcm1Ub3VjaFBvaW50PiB0b3VjaFBvaW50czsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZUdldFRv
dWNoUG9pbnRzRm9yRXZlbnQoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSwgdG91Y2hFdmVu
dCwgdG91Y2hQb2ludHMpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlR2V0VG91Y2hQb2ludHNGb3JF
dmVudCh3ZWJWaWV3QmFzZSwgdG91Y2hFdmVudCwgdG91Y2hQb2ludHMpOwogICAgIHByaXYtPnBh
Z2VQcm94eS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHJlaW50ZXJwcmV0
X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIHRvdWNoUG9pbnRzKSk7CiAKICAgICByZXR1cm4gVFJV
RTsKIH0KIAorI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorR2VzdHVyZUNvbnRyb2xsZXImIHdlYmtp
dFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNl
LT5wcml2OworICAgIGlmICghcHJpdi0+Z2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIHByaXYt
Pmdlc3R1cmVDb250cm9sbGVyID0gR2VzdHVyZUNvbnRyb2xsZXI6OmNyZWF0ZSgqcHJpdi0+cGFn
ZVByb3h5KTsKKyAgICByZXR1cm4gKnByaXYtPmdlc3R1cmVDb250cm9sbGVyOworfQorI2VuZGlm
CisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRn
ZXQqIHdpZGdldCwgZ2ludCAvKiB4ICovLCBnaW50IC8qIHkgKi8sIGdib29sZWFuIGtleWJvYXJk
TW9kZSwgR3RrVG9vbHRpcCogdG9vbHRpcCkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUuaAppbmRleCBiOTg3ZGQ2Li43MzZmOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAog
I2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAogCisjaW5jbHVkZSAiR2VzdHVyZUNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCiAjaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCkBAIC03
NCw0ICs3NSw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50aWNhdGlvbkRp
YWxvZyhXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYklu
c3BlY3RvcihXZWJLaXRXZWJWaWV3QmFzZSosIEd0a1dpZGdldCogaW5zcGVjdG9yLCBXZWJLaXQ6
OkF0dGFjaG1lbnRTaWRlKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZXNldENsaWNrQ291bnRl
cihXZWJLaXRXZWJWaWV3QmFzZSopOwogCisjaWYgSEFWRShHVEtfR0VTVFVSRVMpCitXZWJLaXQ6
Okdlc3R1cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdl
YktpdFdlYlZpZXdCYXNlKik7CisjZW5kaWYKKwogI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1
cmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNv
bnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZGRkYmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R2VzdHVyZUNvbnRyb2xsZXIuaCIKKworI2lmIEhBVkUoR1RLX0dFU1RVUkVTKQorCisjaW5jbHVk
ZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9p
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitz
dGQ6OnVuaXF1ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXI+IEdlc3R1cmVDb250cm9sbGVyOjpjcmVh
dGUoV2ViUGFnZVByb3h5JiBwYWdlKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdl
c3R1cmVDb250cm9sbGVyPihwYWdlKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmVD
b250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1fZHJhZ0dlc3R1cmUocGFnZSkK
KyAgICAsIG1fem9vbUdlc3R1cmUocGFnZSkKK3sKK30KKworYm9vbCBHZXN0dXJlQ29udHJvbGxl
cjo6aGFuZGxlRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIGJvb2wgd2FzUHJv
Y2Vzc2luZ0dlc3R1cmVzID0gaXNQcm9jZXNzaW5nR2VzdHVyZXMoKTsKKyAgICBtX2RyYWdHZXN0
dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKKyAgICBtX3pvb21HZXN0dXJlLmhhbmRsZUV2ZW50KGV2
ZW50KTsKKyAgICByZXR1cm4gZXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNIX0VORCA/IHdhc1Byb2Nl
c3NpbmdHZXN0dXJlcyA6IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7Cit9CisKK2Jvb2wgR2VzdHVy
ZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdlc3R1cmUuaXNBY3RpdmUoKTsKK30K
KworR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6Okdlc3R1cmUoR3RrR2VzdHVyZSogZ2VzdHVy
ZSwgV2ViUGFnZVByb3h5JiBwYWdlKQorICAgIDogbV9nZXN0dXJlKGFkb3B0R1JlZihnZXN0dXJl
KSkKKyAgICAsIG1fcGFnZShwYWdlKQoreworICAgIGd0a19ldmVudF9jb250cm9sbGVyX3NldF9w
cm9wYWdhdGlvbl9waGFzZShHVEtfRVZFTlRfQ09OVFJPTExFUihtX2dlc3R1cmUuZ2V0KCkpLCBH
VEtfUEhBU0VfTk9ORSk7Cit9CisKK2Jvb2wgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6Omlz
QWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3RrX2dlc3R1cmVfaXNfYWN0aXZlKG1fZ2Vz
dHVyZS5nZXQoKSk7Cit9CisKK3ZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRs
ZUV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBndGtfZXZlbnRfY29udHJvbGxl
cl9oYW5kbGVfZXZlbnQoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZl
bnQpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlRHJh
Zyhjb25zdCBHZGtFdmVudCogZXZlbnQsIGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBBU1NF
UlQobV9pbkRyYWcpOworICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19l
dmVudF9uZXcoR0RLX1NDUk9MTCkpOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2
ZW50LT50b3VjaC50aW1lOworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IG1fc3RhcnQueCgp
OworICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IG1fc3RhcnQueSgpOworICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsKKyAgICBzY3JvbGxFdmVu
dC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT50b3VjaC55X3Jvb3Q7CisgICAgc2Nyb2xsRXZlbnQt
PnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKKyAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLmRlbHRhX3ggPSAobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxiYXI6OnBpeGVsc1Bl
ckxpbmVTdGVwKCk7CisgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gKG1fb2Zmc2V0
LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgIHNjcm9sbEV2
ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+dG91Y2guc3RhdGU7CisgICAgbV9wYWdlLmhhbmRs
ZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChzY3JvbGxFdmVudC5nZXQoKSkpOworfQor
Cit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6aGFuZGxlVGFwKGNvbnN0IEdk
a0V2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5EcmFnKTsKKyAgICBHVW5pcXVlUHRy
PEdka0V2ZW50PiBwb2ludGVyRXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfTU9USU9OX05PVElGWSkp
OworICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnRpbWUgPSBldmVudC0+dG91Y2gudGltZTsKKyAg
ICBwb2ludGVyRXZlbnQtPm1vdGlvbi54ID0gZXZlbnQtPnRvdWNoLng7CisgICAgcG9pbnRlckV2
ZW50LT5tb3Rpb24ueSA9IGV2ZW50LT50b3VjaC55OworICAgIHBvaW50ZXJFdmVudC0+bW90aW9u
Lnhfcm9vdCA9IGV2ZW50LT50b3VjaC54X3Jvb3Q7CisgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24u
eV9yb290ID0gZXZlbnQtPnRvdWNoLnlfcm9vdDsKKyAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi5z
dGF0ZSA9IGV2ZW50LT50b3VjaC5zdGF0ZTsKKyAgICBtX3BhZ2UuaGFuZGxlTW91c2VFdmVudChO
YXRpdmVXZWJNb3VzZUV2ZW50KHBvaW50ZXJFdmVudC5nZXQoKSwgMCkpOworCisgICAgcG9pbnRl
ckV2ZW50LnJlc2V0KGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUykpOworICAgIHBvaW50
ZXJFdmVudC0+YnV0dG9uLmJ1dHRvbiA9IDE7CisgICAgcG9pbnRlckV2ZW50LT5idXR0b24udGlt
ZSA9IGV2ZW50LT50b3VjaC50aW1lOworICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnggPSBldmVu
dC0+dG91Y2gueDsKKyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi55ID0gZXZlbnQtPnRvdWNoLnk7
CisgICAgcG9pbnRlckV2ZW50LT5idXR0b24ueF9yb290ID0gZXZlbnQtPnRvdWNoLnhfcm9vdDsK
KyAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSBldmVudC0+dG91Y2gueV9yb290Owor
ICAgIG1fcGFnZS5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQocG9pbnRlckV2
ZW50LmdldCgpLCAxKSk7CisKKyAgICBwb2ludGVyRXZlbnQtPnR5cGUgPSBHREtfQlVUVE9OX1JF
TEVBU0U7CisgICAgbV9wYWdlLmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChw
b2ludGVyRXZlbnQuZ2V0KCksIDApKTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OmJlZ2luKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgZG91YmxlIHgsIGRvdWJs
ZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVl
bmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19HRVNUVVJF
X1NJTkdMRShnZXN0dXJlKSk7CisgICAgZ3RrX2dlc3R1cmVfc2V0X3NlcXVlbmNlX3N0YXRlKGdl
c3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7CisgICAgZHJhZ0dl
c3R1cmUtPm1faW5EcmFnID0gZmFsc2U7CisgICAgZHJhZ0dlc3R1cmUtPm1fc3RhcnQuc2V0KHgs
IHkpOworICAgIGRyYWdHZXN0dXJlLT5tX29mZnNldC5zZXQoMCwgMCk7CisKKyAgICBHdGtXaWRn
ZXQqIHdpZGdldCA9IGd0a19ldmVudF9jb250cm9sbGVyX2dldF93aWRnZXQoR1RLX0VWRU5UX0NP
TlRST0xMRVIoZ2VzdHVyZSkpOworICAgIHVuc2lnbmVkIGRlbGF5OworICAgIGdfb2JqZWN0X2dl
dChndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyh3aWRnZXQpLCAiZ3RrLWxvbmctcHJlc3MtdGltZSIs
ICZkZWxheSwgbnVsbHB0cik7CisgICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5z
Y2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIERyYWdHZXN0dXJlIGxvbmcgcHJlc3MgdGltZW91
dCIsIFtkcmFnR2VzdHVyZV0oKSB7CisgICAgICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IHRy
dWU7CisgICAgfSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyhkZWxheSkpOworfQorCit2b2lk
IEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0dXJlKiBkcmFn
R2VzdHVyZSwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAg
IEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xlX2dldF9jdXJy
ZW50X3NlcXVlbmNlKEdUS19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSk7CisgICAgZ3RrX2dlc3R1
cmVfc2V0X3NlcXVlbmNlX3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVO
Q0VfQ0xBSU1FRCk7CisKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a19ldmVudF9jb250cm9s
bGVyX2dldF93aWRnZXQoR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworICAgIGlmICgh
ZHJhZ0dlc3R1cmUtPm1faW5EcmFnICYmIGd0a19kcmFnX2NoZWNrX3RocmVzaG9sZCh3aWRnZXQs
IGRyYWdHZXN0dXJlLT5tX3N0YXJ0LngoKSwgZHJhZ0dlc3R1cmUtPm1fc3RhcnQueSgpLCBkcmFn
R2VzdHVyZS0+bV9zdGFydC54KCkgKyB4LCBkcmFnR2VzdHVyZS0+bV9zdGFydC55KCkgKyB5KSkg
eworICAgICAgICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcgPSB0cnVlOworICAgICAgICBkcmFnR2Vz
dHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LmNhbmNlbCgpOworICAgIH0KKworICAgIGlmIChkcmFn
R2VzdHVyZS0+bV9pbkRyYWcpCisgICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVEcmFnKGd0a19n
ZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSwgeCwgeSk7CisgICAgZHJh
Z0dlc3R1cmUtPm1fb2Zmc2V0LnNldCh4LCB5KTsKK30KKwordm9pZCBHZXN0dXJlQ29udHJvbGxl
cjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIEdka0V2ZW50U2Vx
dWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIGRyYWdHZXN0dXJl
LT5tX2xvbmdQcmVzc1RpbWVvdXQuY2FuY2VsKCk7CisgICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9p
bkRyYWcpIHsKKyAgICAgICAgZHJhZ0dlc3R1cmUtPmhhbmRsZVRhcChndGtfZ2VzdHVyZV9nZXRf
bGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpOworICAgICAgICBndGtfZ2VzdHVyZV9zZXRf
c3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7CisgICAgfSBlbHNlIGlm
ICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpCisgICAg
ICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVO
SUVEKTsKK30KKworR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFnR2VzdHVyZShX
ZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX2RyYWdfbmV3KHBh
Z2Uudmlld1dpZGdldCgpKSwgcGFnZSkKKyAgICAsIG1faW5EcmFnKGZhbHNlKQoreworICAgIGd0
a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0
dXJlLmdldCgpKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVy
ZS5nZXQoKSwgImRyYWctYmVnaW4iLCBHX0NBTExCQUNLKGJlZ2luKSwgdGhpcyk7CisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImRyYWctdXBkYXRlIiwgR19D
QUxMQkFDSyh1cGRhdGUpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9n
ZXN0dXJlLmdldCgpLCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0aGlzKTsKK30KKwordm9pZCBH
ZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmJlZ2luKFpvb21HZXN0dXJlKiB6b29tR2Vz
dHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSosIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAgZ3Rr
X2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsK
KworICAgIHpvb21HZXN0dXJlLT5tX2luaXRpYWxTY2FsZSA9IHpvb21HZXN0dXJlLT5tX3BhZ2Uu
cGFnZVNjYWxlRmFjdG9yKCk7CisgICAgZG91YmxlIHgsIHk7CisgICAgZ3RrX2dlc3R1cmVfZ2V0
X2JvdW5kaW5nX2JveF9jZW50ZXIoZ2VzdHVyZSwgJngsICZ5KTsKKyAgICB6b29tR2VzdHVyZS0+
bV9wb2ludCA9IEludFBvaW50KHgsIHkpOworfQorCit2b2lkIEdlc3R1cmVDb250cm9sbGVyOjpa
b29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKFpvb21HZXN0dXJlKiB6b29tR2VzdHVyZSwgZG91Ymxl
IHNjYWxlLCBHdGtHZXN0dXJlKikKK3sKKyAgICB6b29tR2VzdHVyZS0+bV9zY2FsZSA9IHpvb21H
ZXN0dXJlLT5tX2luaXRpYWxTY2FsZSAqIHNjYWxlOworICAgIGlmICh6b29tR2VzdHVyZS0+bV9p
ZGxlLmlzU2NoZWR1bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHpvb21HZXN0dXJlLT5t
X2lkbGUuc2NoZWR1bGUoIltXZWJLaXRdIFpvb20gR2VzdHVyZSBJZGxlIiwgW3pvb21HZXN0dXJl
XSgpIHsKKyAgICAgICAgLy8gRklYTUU6IFpvb21lZCBhcmVhIGlzIG5vdCBjb3JyZWN0bHkgY2Vu
dGVyZWQuCisgICAgICAgIHpvb21HZXN0dXJlLT5tX3BhZ2Uuc2NhbGVQYWdlKHpvb21HZXN0dXJl
LT5tX3NjYWxlLCB6b29tR2VzdHVyZS0+bV9wb2ludCk7CisgICAgfSk7Cit9CisKK0dlc3R1cmVD
b250cm9sbGVyOjpab29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUoV2ViUGFnZVByb3h5JiBwYWdlKQor
ICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV96b29tX25ldyhwYWdlLnZpZXdXaWRnZXQoKSksIHBh
Z2UpCisgICAgLCBtX2luaXRpYWxTY2FsZSgwKQorICAgICwgbV9zY2FsZSgwKQoreworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJiZWdpbiIsIEdfQ0FMTEJB
Q0soYmVnaW4pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJl
LmdldCgpLCAic2NhbGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soc2NhbGVDaGFuZ2VkKSwgdGhpcyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShHVEtfR0VTVFVS
RVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxMmNkNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEdlc3R1cmVDb250cm9sbGVyX2gKKyNkZWZpbmUgR2VzdHVy
ZUNvbnRyb2xsZXJfaAorCisjaWYgSEFWRShHVEtfR0VTVFVSRVMpCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CisKK3R5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBz
dHJ1Y3QgX0dka0V2ZW50U2VxdWVuY2UgR2RrRXZlbnRTZXF1ZW5jZTsKK3R5cGVkZWYgc3RydWN0
IF9HdGtHZXN0dXJlIEd0a0dlc3R1cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
UGFnZVByb3h5OworCitjbGFzcyBHZXN0dXJlQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoR2VzdHVyZUNvbnRyb2xsZXIpOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYpOworCisg
ICAgZXhwbGljaXQgR2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CisKKyAgICBib29s
IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBoYW5kbGVFdmVudChjb25z
dCBHZGtFdmVudCopOworCitwcml2YXRlOgorICAgIGNsYXNzIEdlc3R1cmUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgICAgICB2b2lkIGhhbmRsZUV2
ZW50KGNvbnN0IEdka0V2ZW50Kik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEdlc3R1cmUo
R3RrR2VzdHVyZSosIFdlYlBhZ2VQcm94eSYpOworCisgICAgICAgIEdSZWZQdHI8R3RrR2VzdHVy
ZT4gbV9nZXN0dXJlOworICAgICAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAgICB9OworCisg
ICAgY2xhc3MgRHJhZ0dlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7CisgICAgcHVibGlj
OgorICAgICAgICBEcmFnR2VzdHVyZShXZWJQYWdlUHJveHkmKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgaGFuZGxlRHJhZyhjb25zdCBHZGtFdmVudCosIGRvdWJsZSB4LCBkb3VibGUg
eSk7CisgICAgICAgIHZvaWQgaGFuZGxlVGFwKGNvbnN0IEdka0V2ZW50Kik7CisKKyAgICAgICAg
c3RhdGljIHZvaWQgYmVnaW4oRHJhZ0dlc3R1cmUqLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dl
c3R1cmUqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlKERyYWdHZXN0dXJlKiwgZG91Ymxl
IHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7CisgICAgICAgIHN0YXRpYyB2b2lkIGVuZChEcmFn
R2VzdHVyZSosIEdka0V2ZW50U2VxdWVuY2UqLCBHdGtHZXN0dXJlKik7CisKKyAgICAgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBtX3N0YXJ0OworICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1f
b2Zmc2V0OworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV9sb25nUHJlc3NUaW1lb3V0OworICAg
ICAgICBHUmVmUHRyPEd0a0dlc3R1cmU+IG1fbG9uZ1ByZXNzOworICAgICAgICBib29sIG1faW5E
cmFnOworICAgIH07CisKKyAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0
dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFpvb21HZXN0dXJlKFdlYlBhZ2VQcm94eSYpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHZvaWQgYmVnaW4oWm9vbUdlc3R1cmUqLCBH
ZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopOworICAgICAgICBzdGF0aWMgdm9pZCBzY2Fs
ZUNoYW5nZWQoWm9vbUdlc3R1cmUqLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUqKTsKKworICAg
ICAgICBnZG91YmxlIG1faW5pdGlhbFNjYWxlOworICAgICAgICBnZG91YmxlIG1fc2NhbGU7Cisg
ICAgICAgIFdlYkNvcmU6OkludFBvaW50IG1fcG9pbnQ7CisgICAgICAgIEdNYWluTG9vcFNvdXJj
ZSBtX2lkbGU7CisgICAgfTsKKworICAgIERyYWdHZXN0dXJlIG1fZHJhZ0dlc3R1cmU7CisgICAg
Wm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gSEFWRShHVEtfR0VTVFVSRVMpCisKKyNlbmRpZiAvLyBHZXN0dXJlQ29udHJv
bGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEdUSzMuY21ha2UgYi9Tb3VyY2Uv
Y21ha2UvRmluZEdUSzMuY21ha2UKaW5kZXggMGQ4ZDA1Ny4uYzhlODc1MCAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL0ZpbmRHVEszLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kR1RLMy5j
bWFrZQpAQCAtNjQsNSArNjQsMTEgQEAgaWYgKE5PVChFTkFCTEVfWDExX1RBUkdFVCBPUiBFTkFC
TEVfV0FZTEFORF9UQVJHRVQpKQogICAgICAgICAiYmUgZW5hYmxlZCBhbmQgYWxzbyBzdXBwb3J0
ZWQgYnkgdGhlIEdUSysgZGVwZW5kZW5jeTogWDExLCBXYXlsYW5kIikKIGVuZGlmICgpCiAKK2lm
IChHVEszX1ZFUlNJT04gQU5EIFZFUlNJT05fT0sgQU5EIE5PVCgiJHtHVEszX1ZFUlNJT059IiBW
RVJTSU9OX0xFU1MgIjMuMTQuMCIpKQorICAgIHNldChHVEtfU1VQUE9SVFNfR0VTVFVSRVMgT04p
CitlbHNlICgpCisgICAgc2V0KEdUS19TVVBQT1JUU19HRVNUVVJFUyBPRkYpCitlbmRpZiAoKQor
CiBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQogRklORF9QQUNLQUdFX0hB
TkRMRV9TVEFOREFSRF9BUkdTKEdUSzMgREVGQVVMVF9NU0cgR1RLM19JTkNMVURFX0RJUlMgR1RL
M19MSUJSQVJJRVMgVkVSU0lPTl9PSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
R1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggY2I1MWQ3Zi4u
OGVjOTRhNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTI2MSw2ICsyNjEsMTAgQEAgaWYgKEVO
QUJMRV9DUkVERU5USUFMX1NUT1JBR0UpCiAgICAgc2V0KEVOQUJMRV9DUkVERU5USUFMX1NUT1JB
R0UgMSkKIGVuZGlmICgpCiAKK2lmIChHVEtfU1VQUE9SVFNfR0VTVFVSRVMpCisgICAgYWRkX2Rl
ZmluaXRpb25zKC1ESEFWRV9HVEtfR0VTVFVSRVM9MSkKK2VuZGlmICgpCisKICMgVGhpcyBwYXJ0
IGNhbiBiZSBzaW1wbGlmaWVkIG9uY2UgQ01ha2UgMi44LjYgaXMgcmVxdWlyZWQgYW5kCiAjIENN
YWtlUHVzaENoZWNrU3RhdGUgY2FuIGJlIHVzZWQuIFdlIG5lZWQgdG8gaGF2ZSBPUEVOR0xfSU5D
TFVERV9ESVIgYXMgcGFydAogIyBvZiB0aGUgZGlyZWN0b3JpZXMgY2hlY2tfaW5jbHVkZV9maWxl
cygpIGxvb2tzIGZvciBpbiBjYXNlIE9wZW5HTCBpcwo=
</data>
<flag name="review"
          id="264778"
          type_id="1"
          status="+"
          setter="svillar"
    />
    <flag name="commit-queue"
          id="264866"
          type_id="3"
          status="-"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>