<?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>70213</bug_id>
          
          <creation_ts>2011-10-16 19:34:11 -0700</creation_ts>
          <short_desc>[GTK] Switch to a backing store approach for painting WebKitWebView</short_desc>
          <delta_ts>2011-11-02 09:12:36 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68757</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484882</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-16 19:34:11 -0700</bug_when>
    <thetext>The way that the WebKit1 WebKitWebView operates now is that a draw (expose) event can trigger a relayout. This is bad for several reasons:

1. If an animation is happening, it can cause a relayout during expose. This leads to more layouts than necessary and slower framerates.
2. If plugins move during the relayout, we will call gtk_widget_size_allocate during expose events. This shouldn&apos;t happen.

My approach is to add a backing store to the widget itself. We only draw into the backing store when WebCore tells us the contents of the backing store are invalid. This is roughly the approach that WebKit2 takes. This comes with many benefits:

1. Fixed position objects don&apos;t jump around while scrolling. This happens on boingboing currently if you scroll down far enough for the right column to become fixed.
2. Scrolling is faster since we no longer have a need to call gdk_window_process_updates during every single scroll. This fixes lag on the twitter stream and the facebook timeline information page.
3. We have greater contorl over what happens during resizing. This code improves opaque resize performance greatly. This is important in Gnome Shell.
4. We can easily switch to the image backend if we want to with only a tiny code changes in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484894</commentid>
    <comment_count>1</comment_count>
      <attachid>111203</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-16 20:34:38 -0700</bug_when>
    <thetext>Created attachment 111203
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484895</commentid>
    <comment_count>2</comment_count>
      <attachid>111203</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-16 20:56:48 -0700</bug_when>
    <thetext>Comment on attachment 111203
Patch

Attachment 111203 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10074825</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484922</commentid>
    <comment_count>3</comment_count>
      <attachid>111209</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-16 22:23:39 -0700</bug_when>
    <thetext>Created attachment 111209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488390</commentid>
    <comment_count>4</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-10-21 08:08:55 -0700</bug_when>
    <thetext>Tried to test the patch but it crashes for me with:


#0  0x00007ffff6e573a0 in WebCore::WidgetBackingStore::cairoSurface() () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
#1  0x00007ffff5ff4187 in WebKit::ChromeClient::paint () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
#2  0x00007ffff666bbf2 in WebCore::ThreadTimers::sharedTimerFiredInternal() () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
#3  0x00007ffff6e53132 in WebCore::timeout_cb(void*) () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
#4  0x00007ffff45fa1f4 in g_timeout_dispatch (source=0x1a375d0, callback=0x7ffff6e53120 &lt;WebCore::timeout_cb(void*)&gt;, user_data=0x0) at gmain.c:3907
#5  0x00007ffff45f6c05 in g_main_dispatch (context=0x550e10) at gmain.c:2441
#6  0x00007ffff45f814b in g_main_context_dispatch (context=0x550e10) at gmain.c:3011
#7  0x00007ffff45f85f8 in g_main_context_iterate (context=0x550e10, block=1, dispatch=1, self=0x502450) at gmain.c:3089
#8  0x00007ffff45f8d51 in g_main_loop_run (loop=0x625790) at gmain.c:3297
#9  0x00007ffff5807a56 in gtk_main () at gtkmain.c:1362
#10 0x00007ffff56dc1a2 in gtk_application_run_mainloop (application=0x627000) at gtkapplication.c:115
#11 0x00007ffff4c539ec in g_application_run (application=0x627000, argc=1, argv=0x7fffffffdcb8) at gapplication.c:1323
#12 0x0000000000436b0c in main (argc=1, argv=0x7fffffffdcb8) at ephy-main.c:475


Sorry, it is my laptop with release build. I&apos;ll try to check the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488425</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-21 09:08:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Tried to test the patch but it crashes for me with:
&gt; 
&gt; 
&gt; #0  0x00007ffff6e573a0 in WebCore::WidgetBackingStore::cairoSurface() () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
&gt; #1  0x00007ffff5ff4187 in WebKit::ChromeClient::paint () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
&gt; #2  0x00007ffff666bbf2 in WebCore::ThreadTimers::sharedTimerFiredInternal() () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
&gt; #3  0x00007ffff6e53132 in WebCore::timeout_cb(void*) () from /opt/gnome3/lib/libwebkitgtk-3.0.so.0
&gt; #4  0x00007ffff45fa1f4 in g_timeout_dispatch (source=0x1a375d0, callback=0x7ffff6e53120 &lt;WebCore::timeout_cb(void*)&gt;, user_data=0x0) at gmain.c:3907
&gt; #5  0x00007ffff45f6c05 in g_main_dispatch (context=0x550e10) at gmain.c:2441
&gt; #6  0x00007ffff45f814b in g_main_context_dispatch (context=0x550e10) at gmain.c:3011
&gt; #7  0x00007ffff45f85f8 in g_main_context_iterate (context=0x550e10, block=1, dispatch=1, self=0x502450) at gmain.c:3089
&gt; #8  0x00007ffff45f8d51 in g_main_loop_run (loop=0x625790) at gmain.c:3297
&gt; #9  0x00007ffff5807a56 in gtk_main () at gtkmain.c:1362
&gt; #10 0x00007ffff56dc1a2 in gtk_application_run_mainloop (application=0x627000) at gtkapplication.c:115
&gt; #11 0x00007ffff4c539ec in g_application_run (application=0x627000, argc=1, argv=0x7fffffffdcb8) at gapplication.c:1323
&gt; #12 0x0000000000436b0c in main (argc=1, argv=0x7fffffffdcb8) at ephy-main.c:475

Interesting. It seems like the WebView is painting before it&apos;s realized. This shouldn&apos;t be a problem. I&apos;ll update the patch to work in this situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488427</commentid>
    <comment_count>6</comment_count>
      <attachid>111209</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-21 09:08:49 -0700</bug_when>
    <thetext>Comment on attachment 111209
Patch

Clearing review flag for the time being.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488959</commentid>
    <comment_count>7</comment_count>
      <attachid>112096</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-22 12:40:43 -0700</bug_when>
    <thetext>Created attachment 112096
Patch fixing paint before realize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489293</commentid>
    <comment_count>8</comment_count>
      <attachid>112096</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-24 06:09:32 -0700</bug_when>
    <thetext>Comment on attachment 112096
Patch fixing paint before realize

♥ I guess we should obsolete Joone&apos;s port of the tiled backend, and invest on adding features to this new backing store if we want tiling and such, btw?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489528</commentid>
    <comment_count>9</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-10-24 12:26:13 -0700</bug_when>
    <thetext>Works well, and result is awesome! Good job. I&apos;m adding this as proposed for 1.6.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493048</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-30 09:29:41 -0700</bug_when>
    <thetext>Committed r98827: &lt;http://trac.webkit.org/changeset/98827&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494498</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-02 01:32:54 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Committed r98827: &lt;http://trac.webkit.org/changeset/98827&gt;

Looks like this broke the fast/css/webkit-mask-crash-table.html test:


#0  0x00002ab2a1658058 in WebCore::GraphicsContext::~GraphicsContext (this=0x7fff9b7a15a0, __in_chrg=&lt;optimized out&gt;) at ../../Source/WebCore/platform/graphics/GraphicsContext.cpp:91
91	    ASSERT(!m_transparencyCount);

Thread 1 (Thread 0x2ab2aedd68e0 (LWP 11828)):
#0  0x00002ab2a1658058 in WebCore::GraphicsContext::~GraphicsContext (this=0x7fff9b7a15a0, __in_chrg=&lt;optimized out&gt;) at ../../Source/WebCore/platform/graphics/GraphicsContext.cpp:91
#1  0x00002ab2a0de88f8 in WebKit::paintWebView (webView=0x97a050, frame=0x9b2780, dirtyRegion=...) at ../../Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:522
#2  0x00002ab2a0de8bb4 in WebKit::ChromeClient::paint (this=0x97c5f0) at ../../Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:560
#3  0x00002ab2a0de7d3d in WebKit::repaintEverythingSoonTimeout (client=0x97c5f0) at ../../Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:387
#4  0x00002ab2a60c9ddb in g_timeout_dispatch (source=0x3b3039d0, callback=&lt;optimized out&gt;, user_data=&lt;optimized out&gt;) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3882
#5  0x00002ab2a60c84a3 in g_main_dispatch (context=0x8f9d70) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:2440
#6  g_main_context_dispatch (context=0x8f9d70) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3013
#7  0x00002ab2a60c8c80 in g_main_context_iterate (context=0x8f9d70, block=1, dispatch=1, self=&lt;optimized out&gt;) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3091
#8  0x00002ab2a60c92f2 in g_main_loop_run (loop=0x3ad4b1f0) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3299
#9  0x00002ab2a3e764cd in gtk_main () from /usr/lib/libgtk-3.so.0
#10 0x000000000042f480 in runTest (testPathOrURL=...) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:712
#11 0x000000000042eab8 in runTestingServerLoop () at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:504
#12 0x0000000000430de9 in main (argc=2, argv=0x7fff9b7a2358) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1208</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494650</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-02 09:12:36 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Committed r98827: &lt;http://trac.webkit.org/changeset/98827&gt;
&gt; 
&gt; Looks like this broke the fast/css/webkit-mask-crash-table.html test:

I&apos;ll take a look at this soon.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111203</attachid>
            <date>2011-10-16 20:34:38 -0700</date>
            <delta_ts>2011-10-16 22:23:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70213-20111016203427.patch</filename>
            <type>text/plain</type>
            <size>40622</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1NjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2Y2ZjY2QyZGU1M2U1NmRj
YTBhZmZiYzg1M2U5ZTNlZTViZWQ0YTkyLi42NjlhOTMxMGNlYWFlNmQ2ZmQ0ZTBiYmRmZmI5NDA1
MzZhYTZjNGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMTAtMTYgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFN3aXRj
aCB0byBhIGJhY2tpbmcgc3RvcmUgYXBwcm9hY2ggZm9yIHBhaW50aW5nIFdlYktpdFdlYlZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjEzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBUaGUgY2hhbmdlcyB0byBXZWJDb3JlIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAgIGJl
aGF2aW9yLiBUaGUgY2hhbmdlcyBpbiBXZWJLaXQgYXJlIGNvdmVyZWQgYnkgZXhpc3RpbmcKKyAg
ICAgICAgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldEJhY2tpbmdTdG9yZTo6c2l6ZSk6IEFkZGVk
IHRoaXMgZ2V0dGVyIGZvciB0aGUgc2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmVDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRCYWNraW5n
U3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZSk6IEluaXRpYWxpemUgc2l6ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQpOiBBZGRlZCB0aGlzIG5ldyBo
ZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVy
KTogVXNlIHRoZSBuZXcgaGVscGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tp
bmdTdG9yZVgxMS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6Oldp
ZGdldEJhY2tpbmdTdG9yZSk6IEluaXRpYWxpemUgdGhlIHNpemUuCisKIDIwMTEtMTAtMTUgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEF2
b2lkIHVuZWNlc3NhcmlseSBjYWxsaW5nIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSBvbiBwbHVn
aW4gd2lkZ2V0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGYzOGQ1YzE5ZTdmZTVhYWY5OTRhODgzNzc5
YmU1Nzg2ZmZlNTMzOTAuLjE2NThhYzdjMjQyZmRiMDRjYzEzNzZhNjZkODFjNTZiNzYxYThlZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0xMC0xNiAgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU3dpdGNoIHRv
IGEgYmFja2luZyBzdG9yZSBhcHByb2FjaCBmb3IgcGFpbnRpbmcgV2ViS2l0V2ViVmlldworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYWludCB0aGUgV2Vi
VmlldyBpbnRvIGEgYmFja2luZyBzdG9yZS4gVGhpcyBwcmV2ZW50cyBleHBvc2UgZXZlbnRzIGZy
b20KKyAgICAgICAgdHJpZ2dlciBhIHJlbGF5b3V0IGFuZCBtYWtpbmcgc2Nyb2xsaW5nIGFuZCBy
ZXNpemluZyBtdWNoIHNtb290aGVyLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpDaHJvbWVDbGll
bnQpOiBJbml0aWFsaXplIG5ldyBtZW1iZXJzLgorICAgICAgICAoV2ViS2l0OjpyZXBhaW50RXZl
cnl0aGluZ1Nvb25UaW1lb3V0KTogQWRkZWQgdGhpcyBoZWxwZXIgd2hpY2ggcmVwYWludHMKKyAg
ICAgICAgdGhlIFdlYlZpZXcgbW9yZSBxdWlja2x5IGR1cmluZyByZXNpemUgZXZlbnRzLgorICAg
ICAgICAoV2ViS2l0OjpjbGlwT3V0T2xkV2lkZ2V0QXJlYSk6IENsaXBzIG91dCB0aGUgb2xkIHdp
ZGdldCBhcmVhLCBzbyB0aGF0IHdlCisgICAgICAgIGNhbiBjbGVhciBvdXQgaW52YWxpZCBwaXhl
bHMgd2hlbiBncm93aW5nIHRoZSB3aWRnZXQgaW50byBhIHByZS1leGlzdGluZworICAgICAgICBi
YWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViS2l0OjpjbGVhckV2ZXJ5d2hlcmVJbkJhY2tpbmdT
dG9yZSk6IENsZWFyIG91dCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuCisgICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudDo6d2lkZ2V0U2l6ZUNoYW5nZWQpOiBIYW5kbGUgd2lkZ2V0IHNpemUg
Y2hhbmdlcyBieQorICAgICAgICBpbnRlbGxpZ2VudGx5IHJlc2l6aW5nIG9yIHJldXNpbmcgdGhl
IGV4aXN0aW5nIGJhY2tpbmcgc3RvcmUuCisgICAgICAgIChXZWJLaXQ6OmNvYWxlc2NlUmVjdHNJ
ZlBvc3NpYmxlKTogTW92ZWQgdGhpcyBtZXRob2QgZnJvbSB3ZWJraXR3ZWJ2aWV3LmNwcC4KKyAg
ICAgICAgKFdlYktpdDo6cGFpbnRXZWJWaWV3KTogTW92ZWQgdGhpcyBtZXRob2QgZnJvbSB3ZWJr
aXR3ZWJ2aWV3LmNwcC4KKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpwZXJmb3JtQWxs
UGVuZGluZ1Njcm9sbHMpOiBJZiB0aGVyZSBhcmUgYW55IHBlbmRpbmcKKyAgICAgICAgc2Nyb2xs
aW5nIG9wZXJhdGlvbnMsIHBlcmZvcm0gdGhlbSBieSBzY3JvbGxpbmcgdGhlIGJhY2tpbmcgc3Rv
cmUuCisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6cGFpbnQpOiBBZGRlZCB0aGlzIHRp
bWVyIGNhbGxiYWNrLCB3aGljaCBwYWludHMgdGhlCisgICAgICAgIFdlYlZpZXcgYWZ0ZXIgYSBz
aG9ydCB0aW1lb3V0LgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVX
aW5kb3cpOiBObyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUgYW55IGxvbmdlci4KKyAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3cpOiBOb3cg
dW5pdGUgdGhlIHJlY3Qgd2l0aAorICAgICAgICB0aGUgZXhpc3RpbmcgZGlydHkgcmVnaW9uIGFu
ZCBxdWV1ZSB0aGUgcGFpbnQgdGltZW91dC4KKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
OjpzY3JvbGwpOiBOb3cganVzdCBxdWV1ZSBhIHNjcm9sbCBldmVudCBpbiB0aGUgcmVwYWludCB0
aW1lb3V0LgorICAgICAgICBJbnRlbGxpZ2VudGx5IGNhbGN1bGF0ZSB0aGUgYXJlYSB0byBtb3Zl
IGFuZCB0aGUgZGlydHkgYXJlYSB1c2luZyBjb2RlIGRlcml2ZWQKKyAgICAgICAgZnJvbSBXZWJL
aXQyLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oOiBBZGRlZCBu
ZXcgbWV0aG9kIGRlZmluaXRpb25zIGFuZCBhbHNvIHVzZQorICAgICAgICB0aGUgV2ViQ29yZSBu
YW1lc3BhY2UgdG8gYXZvaWQgbG90cyBvZiB1c2VzIG9mICJXZWJDb3JlOjoiLgorICAgICAgICAq
IHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmF3
KTogTm93IGp1c3QgYmxpdCB0aGUgYmFja2luZyBzdG9yZSBpbnRvIHRoZSB3aWRnZXQuCisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZXhwb3NlKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfc2l6ZV9hbGxvY2F0ZSk6IExldCB0aGUgQ2hyb21lQ2xpZW50IGtub3cgdGhlIHdpZGdl
dCBzaXplIGNoYW5nZWQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6IFR1cm4gb2Zm
IEdESyBkb3VibGUgYnVmZmVyaW5nIGFzIHdlIGhhdmUgb3VyIG93biBkb3VibGUKKyAgICAgICAg
YnVmZmVyLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oOiBBZGQgdGhl
IGJhY2tpbmcgc3RvcmUgbWVtYmVyLgorCiAyMDExLTEwLTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBHdGtBZGp1c3RtZW50IHdhdGNo
ZXIgdXBkYXRlcyBhZGp1c3RtZW50cyB0b28gbGF6aWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhaXJvL1dpZGdldEJhY2tpbmdTdG9yZS5oCmluZGV4IGUzN2U5OWU2MTczNTM1
ZjIxMmRiMDg3MDBlOTI5YmY3ZTlhYmRiMzYuLjk4OTM4NjIzMzA0ZTRjNWM2OWJmODVmNjJmMjNh
YTQwZjQxZDVlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dp
ZGdldEJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dp
ZGdldEJhY2tpbmdTdG9yZS5oCkBAIC01MSwxMSArNTEsMTMgQEAgcHVibGljOgogICAgIH5XaWRn
ZXRCYWNraW5nU3RvcmUoKTsKICAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZSgpOwog
ICAgIHZvaWQgc2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUm
IHNjcm9sbE9mZnNldCk7CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6
ZTsgfQogCiBwcml2YXRlOgogICAgIFdpZGdldEJhY2tpbmdTdG9yZShQbGF0Zm9ybVdpZGdldCwg
Y29uc3QgSW50U2l6ZSYpOwogCiAgICAgT3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGU+
IG1fcHJpdmF0ZTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdldEJh
Y2tpbmdTdG9yZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdl
dEJhY2tpbmdTdG9yZUNhaXJvLmNwcAppbmRleCBiOTY3ODRhMjNiNWIwNGY4ZDdjMTc4MGI3OTg4
ZDRkMzU2ODllYWE5Li5kZmE3M2VjOWM5ZjIxMGFiNmQ2MDBmOTBjZjEzYWYxMmNkNTJkNTlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3Rv
cmVDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFj
a2luZ1N0b3JlQ2Fpcm8uY3BwCkBAIC03Miw2ICs3Miw3IEBAIFBhc3NPd25QdHI8V2lkZ2V0QmFj
a2luZ1N0b3JlPiBXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShQbGF0Zm9ybVdpZGdldCB3aWRn
ZXQsCiAKIFdpZGdldEJhY2tpbmdTdG9yZTo6V2lkZ2V0QmFja2luZ1N0b3JlKFBsYXRmb3JtV2lk
Z2V0IHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICA6IG1fcHJpdmF0ZShXaWRnZXRC
YWNraW5nU3RvcmVQcml2YXRlOjpjcmVhdGUod2lkZ2V0LCBzaXplKSkKKyAgICAsIG1fc2l6ZShz
aXplKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKaW5kZXggMTYzMjI1OWE1NjYyODMwZDgwMWM0
OWFkMTYxMWZmZTY2YzBlODRhMS4uYTY0MDM1N2YyNWExYjdhY2EwYTYzMTE3NmMwYmU5N2RhNzA0
MjU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcApAQCAtMTg2LDEyICsxODYsMTcgQEAgUGFzc1JlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlDYWlyb0ltYWdlU3VyZmFjZShjYWlyb19zdXJmYWNlX3Qq
IG9yaWdpbmFsU3VyZmEKICAgICByZXR1cm4gbmV3U3VyZmFjZS5yZWxlYXNlKCk7CiB9CiAKK3Zv
aWQgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNlVG9Db250ZXh0KGNhaXJvX3N1cmZhY2VfdCogZnJv
bSwgY2Fpcm9fdCogdG8sIGNvbnN0IEludFNpemUmIG9mZnNldCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UodG8sIGZyb20sIG9mZnNldC53aWR0
aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOworICAgIGNhaXJvX3JlY3RhbmdsZSh0bywgcmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwo
dG8pOworfQorCiB2b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoY2Fpcm9fc3Vy
ZmFjZV90KiBmcm9tLCBjYWlyb19zdXJmYWNlX3QqIHRvLCBjb25zdCBJbnRTaXplJiBvZmZzZXQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGNvbnRleHQgPSBh
ZG9wdFJlZihjYWlyb19jcmVhdGUodG8pKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2Uo
Y29udGV4dC5nZXQoKSwgZnJvbSwgb2Zmc2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSk7Ci0g
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNvbnRleHQuZ2V0KCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBjYWlyb19maWxsKGNvbnRleHQuZ2V0KCkp
OworICAgIGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4dChmcm9tLCBjb250ZXh0Lmdl
dCgpLCBvZmZzZXQsIHJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGll
cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRp
ZXMuaAppbmRleCAzZDZlYjc5ZjZlZGE5MWFiNjI2Yzk2YmIxNTEwMGNmZjRiM2JlYjgyLi4zNDRi
YzQ5YTE3MGNmMTA3ODIzYzNhN2IwMmQzZmY3OTAwZmEyYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKQEAg
LTQ5LDcgKzQ5LDkgQEAgY2Fpcm9fb3BlcmF0b3JfdCB0b0NhaXJvT3BlcmF0b3IoQ29tcG9zaXRl
T3BlcmF0b3Igb3ApOwogdm9pZCBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNy
LCBjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY2Fpcm9fb3BlcmF0b3JfdCBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiBQ
YXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weUNhaXJvSW1hZ2VTdXJmYWNlKGNhaXJvX3N1
cmZhY2VfdCopOwotdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGNhaXJvX3N1
cmZhY2VfdCogZnJvbSwgY2Fpcm9fc3VyZmFjZV90KiB0bywgY29uc3QgSW50U2l6ZSYsIGNvbnN0
IEludFJlY3QmKTsKKwordm9pZCBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQoY2Fp
cm9fc3VyZmFjZV90KiBmcm9tLCBjYWlyb190KiB0bywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBj
b25zdCBJbnRSZWN0Jik7Cit2b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoY2Fp
cm9fc3VyZmFjZV90KiBmcm9tLCBjYWlyb19zdXJmYWNlX3QqIHRvLCBjb25zdCBJbnRTaXplJiBv
ZmZzZXQsIGNvbnN0IEludFJlY3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3Jl
WDExLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3Rv
cmVYMTEuY3BwCmluZGV4IGFkNWJhYTVkMDJiZWE1ZjFkNWY0ZDYyNDE5M2I1Y2U3NzkzODljOTYu
LjFiMTNiMDY2NmNiMWRhZDRmNTVlNTBiYWY2NjZiMWJiNjE2NzQ0OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEu
Y3BwCkBAIC03Nyw2ICs3Nyw3IEBAIFBhc3NPd25QdHI8V2lkZ2V0QmFja2luZ1N0b3JlPiBXaWRn
ZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uCiAKIFdpZGdldEJh
Y2tpbmdTdG9yZTo6V2lkZ2V0QmFja2luZ1N0b3JlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJ
bnRTaXplJiBzaXplKQogICAgIDogbV9wcml2YXRlKFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGU6
OmNyZWF0ZSh3aWRnZXQsIHNpemUpKQorICAgICwgbV9zaXplKHNpemUpCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
CmluZGV4IGYxYTU3YzY3NDNiZWFkOTRhYTFiNWFmYTMxZWJhNmE3YTY1YzEwODEuLmRkN2MyMDI3
ZDUyMzA3NmE2ZjgxZTE2MzE3OWQ5NjYzMTRhNjQ0NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtMzksNiArMzks
NyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJJY29uLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTmF2aWdhdGlv
bkFjdGlvbi5oIgpAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgi
CisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVHdGsu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVz
LmgiCkBAIC02MSw2ICs2Myw3IEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdsaWIv
Z2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKQEAgLTc1LDcgKzc4LDkgQEAgQ2hyb21lQ2xpZW50OjpDaHJvbWVDbGllbnQoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9h
ZGp1c3RtZW50V2F0Y2hlcih3ZWJWaWV3KQogICAgICwgbV9jbG9zZVNvb25UaW1lcigwKQotICAg
ICwgbV9wZW5kaW5nU2Nyb2xsSW52YWxpZGF0aW9ucyhmYWxzZSkKKyAgICAsIG1fZGlzcGxheVRp
bWVyKHRoaXMsICZDaHJvbWVDbGllbnQ6OnBhaW50KQorICAgICwgbV9sYXN0RGlzcGxheVRpbWUo
MCkKKyAgICAsIG1fcmVwYWludFNvb25Tb3VyY2VJZCgwKQogewogICAgIEFTU0VSVChtX3dlYlZp
ZXcpOwogfQpAQCAtMzc3LDgyICszODIsMjI5IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpyZWdpc3Rl
clByb3RvY29sSGFuZGxlcihjb25zdCBTdHJpbmcmIHNjaGVtZSwgY29uc3QgU3RyaW5nJiBiCiB9
IAogI2VuZGlmIAogCi12b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZVdpbmRvdyhjb25zdCBJ
bnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUpCitzdGF0aWMgZ2Jvb2xlYW4gcmVwYWludEV2ZXJ5dGhp
bmdTb29uVGltZW91dChDaHJvbWVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBjbGllbnQtPnBhaW50
KDApOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgY2xpcE91dE9sZFdpZGdl
dEFyZWEoY2Fpcm9fdCogY3IsIGNvbnN0IEludFNpemUmIG9sZFNpemUsIGNvbnN0IEludFNpemUm
IG5ld1NpemUpCit7CisgICAgY2Fpcm9fbW92ZV90byhjciwgb2xkU2l6ZS53aWR0aCgpLCAwKTsK
KyAgICBjYWlyb19saW5lX3RvKGNyLCBuZXdTaXplLndpZHRoKCksIDApOworICAgIGNhaXJvX2xp
bmVfdG8oY3IsIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9f
bGluZV90byhjciwgMCwgbmV3U2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fbGluZV90byhjciwg
MCwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fbGluZV90byhjciwgb2xkU2l6ZS53aWR0
aCgpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICBjYWlyb19jbG9zZV9wYXRoKGNyKTsKKyAgICBj
YWlyb19jbGlwKGNyKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJFdmVyeXdoZXJlSW5CYWNraW5n
U3RvcmUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY2Fpcm9fdCogY3IpCiB7Ci0gICAgLy8gSWYg
d2UndmUgaW52YWxpZGF0ZWQgcmVnaW9ucyBmb3Igc2Nyb2xsaW5nLCBmb3JjZSBHREsgdG8gcHJv
Y2VzcyB0aG9zZSBpbnZhbGlkYXRpb25zCi0gICAgLy8gbm93LiBUaGlzIHdpbGwgYWxzbyBjYXVz
ZSBjaGlsZCB3aW5kb3dzIHRvIG1vdmUgcmlnaHQgYXdheS4gVGhpcyBwcmV2ZW50cyByZWRyYXcK
LSAgICAvLyBhcnRpZmFjdHMgd2l0aCBjaGlsZCB3aW5kb3dzIChlLmcuIEZsYXNoIHBsdWdpbiBp
bnN0YW5jZXMpLgotICAgIGlmIChpbW1lZGlhdGUgJiYgbV9wZW5kaW5nU2Nyb2xsSW52YWxpZGF0
aW9ucykgewotICAgICAgICBtX3BlbmRpbmdTY3JvbGxJbnZhbGlkYXRpb25zID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtf
V0lER0VUKG1fd2ViVmlldykpKQotICAgICAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0
ZXMod2luZG93LCBUUlVFKTsKKyAgICAvLyBUaGUgc3RyYXRlZ3kgaGVyZSBpcyB0byBxdWlja2x5
IGRyYXcgd2hpdGUgaW50byB0aGlzIG5ldyBjYW52YXMsIHNvIHRoYXQKKyAgICAvLyB3aGVuIGEg
dXNlciBxdWlja2x5IHJlc2l6ZXMgdGhlIFdlYlZpZXcgaW4gYW4gZW52aXJvbm1lbnQgdGhhdCBo
YXMgb3BhcXVlCisgICAgLy8gcmVzaXppbmcgKGxpa2UgR25vbWUgU2hlbGwpLCB0aGVyZSBhcmUg
bm8gZHJhd2luZyBhcnRpZmFjdHMuCisgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVu
dCkgeworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMSwgMSk7CisgICAgICAg
IGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7
CisgICAgY2Fpcm9fcGFpbnQoY3IpOworfQorCit2b2lkIENocm9tZUNsaWVudDo6d2lkZ2V0U2l6
ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgb2xkV2lkZ2V0U2l6ZSwgSW50U2l6ZSBuZXdTaXplKQor
eworICAgIFdpZGdldEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gbV93ZWJWaWV3LT5wcml2
LT5iYWNraW5nU3RvcmUuZ2V0KCk7CisKKyAgICAvLyBHcm93IHRoZSBiYWNraW5nIHN0b3JlIGJ5
IGF0IGxlYXN0IDEuNSB0aW1lcyB0aGUgY3VycmVudCBzaXplLiBUaGlzIHByZXZlbnRzCisgICAg
Ly8gbG90cyBvZiB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyBkdXJpbmcgYW4gb3BhcXVlIHJlc2l6
ZS4KKyAgICBpZiAoYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNvbnN0IEludFNpemUmIG9sZFNp
emUgPSBiYWNraW5nU3RvcmUtPnNpemUoKTsKKyAgICAgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+
IG9sZFNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIG5ld1NpemUuc2V0V2lkdGgoc3RkOjptYXgo
bmV3U2l6ZS53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9sZFNpemUud2lkdGgoKSAqIDEuNSkp
KTsKKyAgICAgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAg
ICAgICAgICAgbmV3U2l6ZS5zZXRIZWlnaHQoc3RkOjptYXgobmV3U2l6ZS5oZWlnaHQoKSwgc3Rh
dGljX2Nhc3Q8aW50PihvbGRTaXplLmhlaWdodCgpICogMS41KSkpOworICAgIH0KKworICAgIC8v
IElmIHdlIGRpZCBub3QgaGF2ZSBhIGJhY2tpbmcgc3RvcmUgYmVmb3JlIG9yIGlmIHRoZSBiYWNr
aW5nIHN0b3JlIGlzIGdyb3dpbmcsIHdlIG5lZWQKKyAgICAvLyB0byByZWFsbG9jYXRlIGEgbmV3
IG9uZSBhbmQgc2V0IGl0IHVwIHNvIHRoYXQgd2UgZG9uJ3Qgc2VlIGFydGlmYWN0cyB3aGlsZSBy
ZXNpemluZy4KKyAgICBpZiAoIWJhY2tpbmdTdG9yZQorICAgICAgICB8fCBuZXdTaXplLndpZHRo
KCkgPiBiYWNraW5nU3RvcmUtPnNpemUoKS53aWR0aCgpCisgICAgICAgIHx8IG5ld1NpemUuaGVp
Z2h0KCkgPiBiYWNraW5nU3RvcmUtPnNpemUoKS5oZWlnaHQoKSkgeworCisgICAgICAgIE93blB0
cjxXaWRnZXRCYWNraW5nU3RvcmU+IG5ld0JhY2tpbmdTdG9yZSA9CisgICAgICAgICAgICBXZWJD
b3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHVEtfV0lER0VUKG1fd2ViVmlldyksIG5l
d1NpemUpOworICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVh
dGUobmV3QmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSkpOworCisgICAgICAgIGNsZWFyRXZl
cnl3aGVyZUluQmFja2luZ1N0b3JlKG1fd2ViVmlldywgY3IuZ2V0KCkpOworCisgICAgICAgIC8v
IE5vdyB3ZSBjb3B5IHRoZSBvbGQgYmFja2luZyBzdG9yZSBpbWFnZSBvdmVyIHRoZSBuZXcgY2xl
YXJlZCBzdXJmYWNlIHRvIHByZXZlbnQKKyAgICAgICAgLy8gYW5ub3lpbmcgZmxhc2hpbmcgYXMg
dGhlIHdpZGdldCBncm93cy4gV2UgZG8gdGhlICJyZWFsIiBwYWludCBpbiBhIHRpbWVvdXQKKyAg
ICAgICAgLy8gc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBibG9jayByZXNpemluZyB0b28gbG9uZy4K
KyAgICAgICAgaWYgKGJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9zdXJmYWNlKGNyLmdldCgpLCBiYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpLCAwLCAwKTsK
KyAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjci5nZXQoKSwgMCwgMCwgYmFja2luZ1N0b3Jl
LT5zaXplKCkud2lkdGgoKSwgYmFja2luZ1N0b3JlLT5zaXplKCkuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX3dlYlZp
ZXctPnByaXYtPmJhY2tpbmdTdG9yZSA9IG5ld0JhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisgICAg
ICAgIGJhY2tpbmdTdG9yZSA9IG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLmdldCgpOwor
CisgICAgfSBlbHNlIGlmIChvbGRXaWRnZXRTaXplLndpZHRoKCkgPCBuZXdTaXplLndpZHRoKCkg
fHwgb2xkV2lkZ2V0U2l6ZS5oZWlnaHQoKSA8IG5ld1NpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAg
Ly8gVGhlIHdpZGdldCBpcyBncm93aW5nLCBidXQgd2UgZGlkIG5vdCBuZWVkIHRvIGNyZWF0ZSBh
IG5ldyBiYWNraW5nIHN0b3JlLgorICAgICAgICAvLyBXZSBzaG91bGQgY2xlYXIgYW55IG9sZCBk
YXRhIG91dHNpZGUgb2YgdGhlIG9sZCB3aWRnZXQgcmVnaW9uLgorICAgICAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoYmFja2luZ1N0b3JlLT5jYWlyb1N1cmZh
Y2UoKSkpOworICAgICAgICBjbGlwT3V0T2xkV2lkZ2V0QXJlYShjci5nZXQoKSwgb2xkV2lkZ2V0
U2l6ZSwgbmV3U2l6ZSk7CisgICAgICAgIGNsZWFyRXZlcnl3aGVyZUluQmFja2luZ1N0b3JlKG1f
d2ViVmlldywgY3IuZ2V0KCkpOworICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gZm9yY2UgYSBy
ZWRyYXcgYW5kIGlnbm9yZSB0aGUgZnJhbWVyYXRlIGNhcC4KKyAgICBtX2xhc3REaXNwbGF5VGlt
ZSA9IDA7CisgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShJbnRSZWN0KEludFBvaW50KCksIGJhY2tp
bmdTdG9yZS0+c2l6ZSgpKSk7CisKKyAgICAvLyBXZWJDb3JlIHRpbWVycyBieSBkZWZhdWx0IGhh
dmUgYSBsb3dlciBwcmlvcml0eSB3aGljaCBsZWFkcyB0byBtb3JlIGFydGlmYWN0cyB3aGVuIG9w
YXF1ZQorICAgIC8vIHJlc2l6ZSBpcyBvbiwgdGh1cyB3ZSB1c2UgZ190aW1lb3V0X2FkZCBoZXJl
IHRvIGZvcmNlIGEgaGlnaGVyIHRpbWVvdXQgcHJpb3JpdHkuCisgICAgaWYgKCFtX3JlcGFpbnRT
b29uU291cmNlSWQpCisgICAgICAgIG1fcmVwYWludFNvb25Tb3VyY2VJZCA9IGdfdGltZW91dF9h
ZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVwYWludEV2ZXJ5dGhpbmdTb29u
VGltZW91dCksIHRoaXMpOworfQorCitzdGF0aWMgdm9pZCBjb2FsZXNjZVJlY3RzSWZQb3NzaWJs
ZShjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKK3sKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgY1JlY3RUaHJlc2hvbGQgPSAxMDsKKyAgICBjb25zdCBmbG9h
dCBjV2FzdGVkU3BhY2VUaHJlc2hvbGQgPSAwLjc1ZjsKKyAgICBib29sIHVzZVVuaW9uZWRSZWN0
ID0gKHJlY3RzLnNpemUoKSA8PSAxKSB8fCAocmVjdHMuc2l6ZSgpID4gY1JlY3RUaHJlc2hvbGQp
OworICAgIGlmICghdXNlVW5pb25lZFJlY3QpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBndWVz
cyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSB1bmlvbmVkIHJlY3Qgb3IgdGhlIGlu
ZGl2aWR1YWwgcmVjdHMuCisgICAgICAgIC8vIFdlIGRvIHRoaXMgYnkgY29tcHV0aW5nIHRoZSBw
ZXJjZW50YWdlIG9mICJ3YXN0ZWQgc3BhY2UiIGluIHRoZSB1bmlvbi4gSWYgdGhhdCB3YXN0ZWQg
c3BhY2UKKyAgICAgICAgLy8gaXMgdG9vIGxhcmdlLCB0aGVuIHdlIHdpbGwgZG8gaW5kaXZpZHVh
bCByZWN0IHBhaW50aW5nIGluc3RlYWQuCisgICAgICAgIGZsb2F0IHVuaW9uUGl4ZWxzID0gKGNs
aXBSZWN0LndpZHRoKCkgKiBjbGlwUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGZsb2F0IHNpbmds
ZVBpeGVscyA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBzaW5nbGVQaXhlbHMgKz0gcmVjdHNbaV0ud2lkdGgoKSAqIHJl
Y3RzW2ldLmhlaWdodCgpOworICAgICAgICBmbG9hdCB3YXN0ZWRTcGFjZSA9IDEgLSAoc2luZ2xl
UGl4ZWxzIC8gdW5pb25QaXhlbHMpOworICAgICAgICBpZiAod2FzdGVkU3BhY2UgPD0gY1dhc3Rl
ZFNwYWNlVGhyZXNob2xkKQorICAgICAgICAgICAgdXNlVW5pb25lZFJlY3QgPSB0cnVlOwogICAg
IH0KKworICAgIGlmICghdXNlVW5pb25lZFJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHJl
Y3RzLmNsZWFyKCk7CisgICAgcmVjdHMuYXBwZW5kKGNsaXBSZWN0KTsKIH0KIAotdm9pZCBDaHJv
bWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0LCBib29sIGltbWVkaWF0ZSkKK3N0YXRpYyB2b2lkIHBhaW50V2ViVmlldyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBGcmFtZSogZnJhbWUsIFJlZ2lvbiBkaXJ0eVJlZ2lvbikKIHsKLSAg
ICBHZGtSZWN0YW5nbGUgcmVjdCA9IHVwZGF0ZVJlY3Q7Ci0gICAgR2RrV2luZG93KiB3aW5kb3cg
PSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBWZWN0
b3I8SW50UmVjdD4gcmVjdHMgPSBkaXJ0eVJlZ2lvbi5yZWN0cygpOworICAgIGNvYWxlc2NlUmVj
dHNJZlBvc3NpYmxlKGRpcnR5UmVnaW9uLmJvdW5kcygpLCByZWN0cyk7CisgICAgZnJhbWUtPnZp
ZXcoKS0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOworCisgICAgYm9v
bCB3ZWJWaWV3SXNUcmFuc3BhcmVudCA9IHdlYlZpZXctPnByaXYtPnRyYW5zcGFyZW50OwogCi0g
ICAgaWYgKHdpbmRvdyAmJiAhdXBkYXRlUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ2RrX3dp
bmRvd19pbnZhbGlkYXRlX3JlY3Qod2luZG93LCAmcmVjdCwgRkFMU0UpOwotICAgICAgICAvLyBX
ZSBkb24ndCBjdXJyZW50bHkgZG8gaW1tZWRpYXRlIHVwZGF0ZXMgc2luY2UgdGhleSBkZWxheSBv
dGhlciBVSSBlbGVtZW50cy4KLSAgICAgICAgLy9pZiAoaW1tZWRpYXRlKQotICAgICAgICAvLyAg
ICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyh3aW5kb3csIEZBTFNFKTsKKyAgICBSZWZQdHI8
Y2Fpcm9fdD4gYmFja2luZ1N0b3JlQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZSh3ZWJW
aWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0IGdjKGJhY2tpbmdTdG9yZUNvbnRleHQuZ2V0KCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgSW50UmVjdCYgcmVj
dCA9IHJlY3RzW2ldOworCisgICAgICAgIGdjLnNhdmUoKTsKKyAgICAgICAgZ2MuY2xpcChyZWN0
KTsKKyAgICAgICAgaWYgKHdlYlZpZXdJc1RyYW5zcGFyZW50KQorICAgICAgICAgICAgZ2MuY2xl
YXJSZWN0KHJlY3QpOworICAgICAgICBmcmFtZS0+dmlldygpLT5wYWludCgmZ2MsIHJlY3QpOwor
ICAgICAgICBnYy5yZXN0b3JlKCk7CiAgICAgfQorCisgICAgZ2Muc2F2ZSgpOworICAgIGdjLmNs
aXAoZGlydHlSZWdpb24uYm91bmRzKCkpOworICAgIGZyYW1lLT5wYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+ZHJhd0hpZ2hsaWdodChnYyk7CisgICAgZ2MucmVzdG9yZSgpOwogfQogCi12
b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKK3ZvaWQgQ2hyb21lQ2xpZW50Ojpw
ZXJmb3JtQWxsUGVuZGluZ1Njcm9sbHMoKQogewotICAgIGludmFsaWRhdGVDb250ZW50c0FuZFdp
bmRvdyh1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOwotICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBk
YXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKCk7CisgICAgLy8gU2Nyb2xsIGFsbCBw
ZW5kaW5nIHNjcm9sbCByZWN0cyBhbmQgaW52YWxpZGF0ZSB0aG9zZSBwYXJ0cyBvZiB0aGUgd2lk
Z2V0LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWN0c1RvU2Nyb2xsLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIEludFJlY3QmIHNjcm9sbFJlY3QgPSBtX3JlY3RzVG9TY3JvbGxbaV07
CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5zY3JvbGwoc2Nyb2xsUmVj
dCwgbV9zY3JvbGxPZmZzZXRzW2ldKTsKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2Fy
ZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JvbGxSZWN0LngoKSwgc2Nyb2xsUmVjdC55KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcm9sbFJlY3Qud2lkdGgoKSwgc2Nyb2xsUmVjdC5oZWlnaHQoKSk7
CisgICAgfQorCisgICAgbV9yZWN0c1RvU2Nyb2xsLmNsZWFyKCk7CisgICAgbV9zY3JvbGxPZmZz
ZXRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwoY29uc3QgSW50U2l6
ZSYgZGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpwYWludChXZWJDb3JlOjpUaW1lcjxDaHJvbWVD
bGllbnQ+KikKIHsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRv
dyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGlmICghd2luZG93KQorICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgbWluaW11bUZyYW1lSW50ZXJ2YWwgPSAxLjAgLyA2MC4wOyAvLyBObyBtb3Jl
IHRoYW4gNjAgZnJhbWVzIGEgc2Vjb25kLgorICAgIGRvdWJsZSB0aW1lU2luY2VMYXN0RGlzcGxh
eSA9IGN1cnJlbnRUaW1lKCkgLSBtX2xhc3REaXNwbGF5VGltZTsKKyAgICBkb3VibGUgdGltZVVu
dGlsTmV4dERpc3BsYXkgPSBtaW5pbXVtRnJhbWVJbnRlcnZhbCAtIHRpbWVTaW5jZUxhc3REaXNw
bGF5OworCisgICAgaWYgKHRpbWVVbnRpbE5leHREaXNwbGF5ID4gMCkgeworICAgICAgICBtX2Rp
c3BsYXlUaW1lci5zdGFydE9uZVNob3QodGltZVVudGlsTmV4dERpc3BsYXkpOwogICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgbV9wZW5kaW5nU2Nyb2xsSW52YWxpZGF0aW9ucyA9IHRydWU7
CisgICAgRnJhbWUqIGZyYW1lID0gY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKTsKKyAgICBp
ZiAoIWZyYW1lIHx8ICFmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkgfHwgIWZyYW1lLT52aWV3KCkp
CisgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGNhbm5vdCB1c2UgZ2RrX3dpbmRvd19zY3Jv
bGwgaGVyZSBiZWNhdXNlIGl0IGlzIG9ubHkgYWJsZSB0bwotICAgIC8vIHNjcm9sbCB0aGUgd2hv
bGUgd2luZG93IGF0IG9uY2UsIGFuZCB3ZSBvZnRlbiBuZWVkIHRvIHNjcm9sbAotICAgIC8vIHBv
cnRpb25zIG9mIHRoZSB3aW5kb3cgb25seSAodGhpbmsgZnJhbWVzKS4KLSAgICBHZGtSZWN0YW5n
bGUgYXJlYSA9IGNsaXBSZWN0OwotICAgIEdka1JlY3RhbmdsZSBtb3ZlUmVjdDsKKyAgICBwZXJm
b3JtQWxsUGVuZGluZ1Njcm9sbHMoKTsKKyAgICBwYWludFdlYlZpZXcobV93ZWJWaWV3LCBmcmFt
ZSwgbV9kaXJ0eVJlZ2lvbik7CiAKLSAgICBHZGtSZWN0YW5nbGUgc291cmNlUmVjdCA9IGFyZWE7
Ci0gICAgc291cmNlUmVjdC54IC09IGRlbHRhLndpZHRoKCk7Ci0gICAgc291cmNlUmVjdC55IC09
IGRlbHRhLmhlaWdodCgpOworICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSBtX2RpcnR5UmVnaW9u
LmJvdW5kcygpOworICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93
ZWJWaWV3KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwogCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHZGtSZWdpb24qIGludmFsaWRSZWdp
b24gPSBnZGtfcmVnaW9uX3JlY3RhbmdsZSgmYXJlYSk7CisgICAgbV9kaXJ0eVJlZ2lvbiA9IFJl
Z2lvbigpOworICAgIG1fbGFzdERpc3BsYXlUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3Jl
cGFpbnRTb29uU291cmNlSWQgPSAwOworfQogCi0gICAgaWYgKGdka19yZWN0YW5nbGVfaW50ZXJz
ZWN0KCZhcmVhLCAmc291cmNlUmVjdCwgJm1vdmVSZWN0KSkgewotICAgICAgICBHZGtSZWdpb24q
IG1vdmVSZWdpb24gPSBnZGtfcmVnaW9uX3JlY3RhbmdsZSgmbW92ZVJlY3QpOwotICAgICAgICBn
ZGtfd2luZG93X21vdmVfcmVnaW9uKHdpbmRvdywgbW92ZVJlZ2lvbiwgZGVsdGEud2lkdGgoKSwg
ZGVsdGEuaGVpZ2h0KCkpOwotICAgICAgICBnZGtfcmVnaW9uX29mZnNldChtb3ZlUmVnaW9uLCBk
ZWx0YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSk7Ci0gICAgICAgIGdka19yZWdpb25fc3VidHJh
Y3QoaW52YWxpZFJlZ2lvbiwgbW92ZVJlZ2lvbik7Ci0gICAgICAgIGdka19yZWdpb25fZGVzdHJv
eShtb3ZlUmVnaW9uKTsKLSAgICB9Cit2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZVdpbmRv
dyhjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUpCit7Cit9CiAKLSAgICBnZGtfd2luZG93
X2ludmFsaWRhdGVfcmVnaW9uKHdpbmRvdywgaW52YWxpZFJlZ2lvbiwgRkFMU0UpOwotICAgIGdk
a19yZWdpb25fZGVzdHJveShpbnZhbGlkUmVnaW9uKTsKLSNlbHNlCi0gICAgY2Fpcm9fcmVnaW9u
X3QqIGludmFsaWRSZWdpb24gPSBjYWlyb19yZWdpb25fY3JlYXRlX3JlY3RhbmdsZSgmYXJlYSk7
Ci0KLSAgICBpZiAoZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3QoJmFyZWEsICZzb3VyY2VSZWN0LCAm
bW92ZVJlY3QpKSB7Ci0gICAgICAgIGNhaXJvX3JlZ2lvbl90KiBtb3ZlUmVnaW9uID0gY2Fpcm9f
cmVnaW9uX2NyZWF0ZV9yZWN0YW5nbGUoJm1vdmVSZWN0KTsKLSAgICAgICAgZ2RrX3dpbmRvd19t
b3ZlX3JlZ2lvbih3aW5kb3csIG1vdmVSZWdpb24sIGRlbHRhLndpZHRoKCksIGRlbHRhLmhlaWdo
dCgpKTsKLSAgICAgICAgY2Fpcm9fcmVnaW9uX3RyYW5zbGF0ZShtb3ZlUmVnaW9uLCBkZWx0YS53
aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSk7Ci0gICAgICAgIGNhaXJvX3JlZ2lvbl9zdWJ0cmFjdChp
bnZhbGlkUmVnaW9uLCBtb3ZlUmVnaW9uKTsKLSAgICAgICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3ko
bW92ZVJlZ2lvbik7Cit2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2lu
ZG93KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQoreworICAgIGlm
ICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGlydHlSZWdp
b24udW5pdGUodXBkYXRlUmVjdCk7CisgICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCit2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9s
bChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKK3sKKyAgICBpbnZh
bGlkYXRlQ29udGVudHNBbmRXaW5kb3codXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKKyAgICBtX2Fk
anVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigpOwor
fQorCit2b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsKGNvbnN0IEludFNpemUmIGRlbHRhLCBjb25z
dCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAg
IG1fcmVjdHNUb1Njcm9sbC5hcHBlbmQocmVjdFRvU2Nyb2xsKTsKKyAgICBtX3Njcm9sbE9mZnNl
dHMuYXBwZW5kKGRlbHRhKTsKKworICAgIC8vIFRoZSBjb2RlIHRvIGNhbGN1bGF0ZSB0aGUgc2Ny
b2xsIHJlcGFpbnQgcmVnaW9uIGlzIG9yaWdpbmFsbHkgZnJvbSBXZWJLaXQyLgorICAgIC8vIEdl
dCB0aGUgcGFydCBvZiB0aGUgZGlydHkgcmVnaW9uIHRoYXQgaXMgaW4gdGhlIHNjcm9sbCByZWN0
LgorICAgIFJlZ2lvbiBkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdChyZWN0VG9T
Y3JvbGwsIG1fZGlydHlSZWdpb24pOworICAgIGlmICghZGlydHlSZWdpb25JblNjcm9sbFJlY3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBwYXJ0cyBvZiB0aGUgZGlydHkgcmVn
aW9uIHRoYXQgYXJlIGluc2lkZSB0aGUgc2Nyb2xsIHJlY3QuCisgICAgICAgIC8vIFdlIG5lZWQg
dG8gc3VidHJhY3QgdGhlbSBmcm9tIHRoZSByZWdpb24sIG1vdmUgdGhlbSBhbmQgcmUtYWRkIHRo
ZW0uCisgICAgICAgIG1fZGlydHlSZWdpb24uc3VidHJhY3QocmVjdFRvU2Nyb2xsKTsKKworICAg
ICAgICAvLyBNb3ZlIHRoZSBkaXJ0eSBwYXJ0cy4KKyAgICAgICAgUmVnaW9uIG1vdmVkRGlydHlS
ZWdpb25JblNjcm9sbFJlY3QgPSBpbnRlcnNlY3QodHJhbnNsYXRlKGRpcnR5UmVnaW9uSW5TY3Jv
bGxSZWN0LCBkZWx0YSksIHJlY3RUb1Njcm9sbCk7CisKKyAgICAgICAgLy8gQW5kIGFkZCB0aGVt
IGJhY2suCisgICAgICAgIG1fZGlydHlSZWdpb24udW5pdGUobW92ZWREaXJ0eVJlZ2lvbkluU2Ny
b2xsUmVjdCk7CiAgICAgfQogCi0gICAgZ2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlZ2lvbih3aW5k
b3csIGludmFsaWRSZWdpb24sIEZBTFNFKTsKLSAgICBjYWlyb19yZWdpb25fZGVzdHJveShpbnZh
bGlkUmVnaW9uKTsKLSNlbmRpZgorICAgIC8vIENvbXB1dGUgdGhlIHNjcm9sbCByZXBhaW50IHJl
Z2lvbi4KKyAgICBSZWdpb24gc2Nyb2xsUmVwYWludFJlZ2lvbiA9IHN1YnRyYWN0KHJlY3RUb1Nj
cm9sbCwgdHJhbnNsYXRlKHJlY3RUb1Njcm9sbCwgZGVsdGEpKTsKKyAgICBtX2RpcnR5UmVnaW9u
LnVuaXRlKHNjcm9sbFJlcGFpbnRSZWdpb24pOworICAgIG1fZGlzcGxheVRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKIAogICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0bWVudHNGcm9t
U2Nyb2xsYmFyc0xhdGVyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IGM3ZmFhN2ZkYjRmOWRmMTg5NGNlNDQxYmUx
NTg3Yjk5YWUzNjkyYTcuLmQ4OTI4MTIyNWY2MmRjZTNhMTA2YzNlZDNjMDJlN2VlZjE4ODkzYmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCkBAIC0yMywxMCArMjMsMTUgQEAKIAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgog
I2luY2x1ZGUgIkd0a0FkanVzdG1lbnRXYXRjaGVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUG9wdXBN
ZW51LmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51Lmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00MywyMSArNDgsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRX
aW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRX
aW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3
aW5kb3dSZWN0KCk7CiAKLSAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJl
Y3QoKTsKKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgcGFnZVJlY3QoKTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZm9jdXMoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKTsKIAot
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuVGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9u
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhXZWJDb3JlOjpGb2N1c0RpcmVjdGlv
bik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZm9jdXNlZE5vZGVDaGFuZ2VkKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGZvY3VzZWRGcmFtZUNoYW5nZWQoV2ViQ29yZTo6RnJhbWUqKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGZvY3VzZWROb2RlQ2hhbmdlZChOb2RlKik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKik7CiAKLSAgICAgICAgdmlydHVh
bCBXZWJDb3JlOjpQYWdlKiBjcmVhdGVXaW5kb3coV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJD
b3JlOjpGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBj
b25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJik7CisgICAgICAgIHZpcnR1YWwgUGFnZSog
Y3JlYXRlV2luZG93KEZyYW1lKiwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdpbmRv
d0ZlYXR1cmVzJiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc2hvdygpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5Nb2RhbCgpOwpAQCAtNzcs
OTYgKzgyLDEwMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0UmVzaXphYmxlKGJvb2wpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9D
b25zb2xlKFdlYkNvcmU6Ok1lc3NhZ2VTb3VyY2Ugc291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlw
ZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZU51bWJl
ciwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUlEKTsKLQorICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxl
dmVsLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VJRCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5S
dW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKTsKLSAgICAgICAgdmlydHVhbCBib29sIHJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbChjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgRnJhbWUqKTsKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3dTb29uKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJ1bkphdmFTY3JpcHRBbGVydChXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJik7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXZWJDb3JlOjpGcmFt
ZSosIGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2Ny
aXB0UHJvbXB0KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFdURjo6U3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdURjo6U3RyaW5nJiByZXN1bHQpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1l
KiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3Jp
cHRQcm9tcHQoRnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgY29uc3QgV1RGOjpT
dHJpbmcmIGRlZmF1bHRWYWx1ZSwgV1RGOjpTdHJpbmcmIHJlc3VsdCk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFdURjo6U3RyaW5nJik7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7Ci0gICAgICAgIHZpcnR1YWwg
V2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsKKyAgICAgICAgdmlydHVh
bCBLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpOwogCi0gICAgICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKICNpZiBFTkFCTEUoUkVHSVNURVJf
UFJPVE9DT0xfSEFORExFUikgCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclByb3RvY29s
SGFuZGxlcihjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RG
OjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOyAKICNlbmRpZiAKLSAgICAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVXaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBib29sKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVD
b250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERl
bHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVXaW5k
b3coY29uc3QgSW50UmVjdCYsIGJvb2wpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IEludFJlY3QmLCBib29sKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYsIGJv
b2wpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KTsKIAotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1Q
YWdlQ2xpZW50KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFu
Z2VkKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IEludFNp
emUmKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFu
Z2UoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRl
c3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0VG9vbFRpcChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24p
OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXVEY6OlN0cmluZyYsIFRl
eHREaXJlY3Rpb24pOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0
YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdl
KGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHByaW50KFdlYkNvcmU6OkZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmludChGcmFt
ZSopOwogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgICAgIHZpcnR1YWwgdm9pZCBleGNl
ZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3Qg
V1RGOjpTdHJpbmcmKTsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFw
cENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJl
YWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4q
LCBpbnQ2NF90IHRvdGFsU3BhY2VOZWVkZWQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hl
ZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShTZWN1cml0eU9yaWdpbiosIGludDY0X3QgdG90
YWxTcGFjZU5lZWRlZCk7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoKSB7IH0KICNlbmRpZgotICAgICAgICB2aXJ0dWFsIHZv
aWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxl
Q2hvb3Nlcj4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBW
ZWN0b3I8V1RGOjpTdHJpbmc+JiwgV2ViQ29yZTo6RmlsZUljb25Mb2FkZXIqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdU
Rjo6U3RyaW5nPiYsIEZpbGVJY29uTG9hZGVyKik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGZv
cm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2RlKikgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCk7CiAKLSAgICAgICAgdmlydHVh
bCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qg
eyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3QgeyB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUq
LCBHZW9sb2NhdGlvbiopOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKICAg
ICAgICAgdmlydHVhbCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdE
aXJlY3Rpb24oKTsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlBvcHVwTWVu
dT4gY3JlYXRlUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCopIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBjcmVhdGVT
ZWFyY2hQb3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVD
bGllbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNlYXJjaFBvcHVwTWVu
dT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0OwogI2lmIEVO
QUJMRShWSURFTykKLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5v
ZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBleGl0
RnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbFNjcmVlbkZvckVs
ZW1lbnQoY29uc3QgV2ViQ29yZTo6RWxlbWVudCosIGJvb2wgd2l0aEtleWJvYXJkKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVu
dCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNv
cmU6OkVsZW1lbnQqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbFNjcmVlbkZv
ckVsZW1lbnQoY29uc3QgRWxlbWVudCosIGJvb2wgd2l0aEtleWJvYXJkKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKICNlbmRpZgog
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oV2ViQ29y
ZTo6U2Nyb2xsRGlyZWN0aW9uKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBudW1XaGVlbEV2ZW50SGFu
ZGxlcnNDaGFuZ2VkKHVuc2lnbmVkKSB7IH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJD
b3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwog
ICAgICAgICB2aXJ0dWFsIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGlu
Z1RyaWdnZXJzKCkgY29uc3Q7CiAjZW5kaWYgCiAKKyAgICAgICAgdm9pZCBwZXJmb3JtQWxsUGVu
ZGluZ1Njcm9sbHMoKTsKKyAgICAgICAgdm9pZCBwYWludChUaW1lcjxDaHJvbWVDbGllbnQ+Kik7
CisgICAgICAgIHZvaWQgd2lkZ2V0U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgb2xkV2lkZ2V0
U2l6ZSwgSW50U2l6ZSBuZXdTaXplKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYktpdFdl
YlZpZXcqIG1fd2ViVmlldzsKICAgICAgICAgR3RrQWRqdXN0bWVudFdhdGNoZXIgbV9hZGp1c3Rt
ZW50V2F0Y2hlcjsKLSAgICAgICAgV2ViQ29yZTo6S1VSTCBtX2hvdmVyZWRMaW5rVVJMOworICAg
ICAgICBLVVJMIG1faG92ZXJlZExpbmtVUkw7CiAgICAgICAgIHVuc2lnbmVkIGludCBtX2Nsb3Nl
U29vblRpbWVyOwotICAgICAgICBib29sIG1fcGVuZGluZ1Njcm9sbEludmFsaWRhdGlvbnM7CisK
KyAgICAgICAgVGltZXIgPENocm9tZUNsaWVudD4gbV9kaXNwbGF5VGltZXI7CisgICAgICAgIFJl
Z2lvbiBtX2RpcnR5UmVnaW9uOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gbV9yZWN0c1RvU2Ny
b2xsOworICAgICAgICBWZWN0b3I8SW50U2l6ZT4gbV9zY3JvbGxPZmZzZXRzOworICAgICAgICBk
b3VibGUgbV9sYXN0RGlzcGxheVRpbWU7CisgICAgICAgIHVpbnQgbV9yZXBhaW50U29vblNvdXJj
ZUlkOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAppbmRleCBlMDQ1NmYzOTVkYTM2YTNmZGYwNTEzNjMyZDA4ODliODFlM2YyZGM4Li44N2Vm
ZDJkMjIzOWYwZWViMDhmZmMxY2JiZjY1NWY4MTYyM2JiZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
QVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJCYWNrRm9yd2FyZExpc3RJbXBsLmgiCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNsdWRl
ICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKQEAgLTY0LDcgKzY1LDYgQEAKICNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50R3RrLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC02MTksMTA4ICs2MTksMzkg
QEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEcKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIHNob3Vs
ZENvYWxlc2NlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IGNSZWN0VGhyZXNob2xkID0gMTA7Ci0gICAg
Y29uc3QgZmxvYXQgY1dhc3RlZFNwYWNlVGhyZXNob2xkID0gMC43NWY7Ci0gICAgYm9vbCB1c2VV
bmlvbmVkUmVjdCA9IChyZWN0cy5zaXplKCkgPD0gMSkgfHwgKHJlY3RzLnNpemUoKSA+IGNSZWN0
VGhyZXNob2xkKTsKLSAgICBpZiAodXNlVW5pb25lZFJlY3QpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIC8vIEF0dGVtcHQgdG8gZ3Vlc3Mgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIHVzZSB0
aGUgdW5pb25lZCByZWN0IG9yIHRoZSBpbmRpdmlkdWFsIHJlY3RzLgotICAgIC8vIFdlIGRvIHRo
aXMgYnkgY29tcHV0aW5nIHRoZSBwZXJjZW50YWdlIG9mICJ3YXN0ZWQgc3BhY2UiIGluIHRoZSB1
bmlvbi4gIElmIHRoYXQgd2FzdGVkIHNwYWNlCi0gICAgLy8gaXMgdG9vIGxhcmdlLCB0aGVuIHdl
IHdpbGwgZG8gaW5kaXZpZHVhbCByZWN0IHBhaW50aW5nIGluc3RlYWQuCi0gICAgZmxvYXQgdW5p
b25QaXhlbHMgPSAocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSk7Ci0gICAgZmxvYXQgc2lu
Z2xlUGl4ZWxzID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsg
KytpKQotICAgICAgICBzaW5nbGVQaXhlbHMgKz0gcmVjdHNbaV0ud2lkdGgoKSAqIHJlY3RzW2ld
LmhlaWdodCgpOwotICAgIGZsb2F0IHdhc3RlZFNwYWNlID0gMSAtIChzaW5nbGVQaXhlbHMgLyB1
bmlvblBpeGVscyk7Ci0gICAgaWYgKHdhc3RlZFNwYWNlIDw9IGNXYXN0ZWRTcGFjZVRocmVzaG9s
ZCkKLSAgICAgICAgdXNlVW5pb25lZFJlY3QgPSB0cnVlOwotICAgIHJldHVybiB1c2VVbmlvbmVk
UmVjdDsKLX0KLQotc3RhdGljIHZvaWQgcGFpbnRXZWJWaWV3KEZyYW1lKiBmcmFtZSwgZ2Jvb2xl
YW4gdHJhbnNwYXJlbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCi17Ci0gICAgYm9vbCBjb2Fs
ZXNjZSA9IHRydWU7Ci0KLSAgICBpZiAocmVjdHMuc2l6ZSgpID4gMCkKLSAgICAgICAgY29hbGVz
Y2UgPSBzaG91bGRDb2FsZXNjZShjbGlwUmVjdCwgcmVjdHMpOwotCi0gICAgaWYgKGNvYWxlc2Nl
KSB7Ci0gICAgICAgIGNvbnRleHQuY2xpcChjbGlwUmVjdCk7Ci0gICAgICAgIGlmICh0cmFuc3Bh
cmVudCkKLSAgICAgICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKLSAgICAgICAg
ZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmNvbnRleHQsIGNsaXBSZWN0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKLSAgICAgICAgICAgIGNvbnRleHQuc2F2
ZSgpOwotICAgICAgICAgICAgY29udGV4dC5jbGlwKHJlY3QpOwotICAgICAgICAgICAgaWYgKHRy
YW5zcGFyZW50KQotICAgICAgICAgICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAg
ICAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmNvbnRleHQsIHJlY3QpOwotICAgICAgICAg
ICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0LnNh
dmUoKTsKLSAgICBjb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgIGZyYW1lLT5wYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+ZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKLSAgICBjb250ZXh0
LnJlc3RvcmUoKTsKLX0KICNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogc3RhdGljIGdib29sZWFu
IHdlYmtpdF93ZWJfdmlld19leHBvc2VfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
RXhwb3NlKiBldmVudCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdpZGdldCk7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3
LT5wcml2OwotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCk7
Ci0gICAgaWYgKGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSAmJiBmcmFtZS0+dmlldygpKSB7Ci0g
ICAgICAgIGZyYW1lLT52aWV3KCktPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNp
dmUoKTsKLQotICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihnZGtfY2Fpcm9f
Y3JlYXRlKGV2ZW50LT53aW5kb3cpKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKGNyLmdl
dCgpKTsKLSAgICAgICAgZ2Muc2V0R2RrRXhwb3NlRXZlbnQoZXZlbnQpOwotCi0gICAgICAgIGlu
dCByZWN0Q291bnQ7Ci0gICAgICAgIEdPd25QdHI8R2RrUmVjdGFuZ2xlPiByZWN0czsKLSAgICAg
ICAgZ2RrX3JlZ2lvbl9nZXRfcmVjdGFuZ2xlcyhldmVudC0+cmVnaW9uLCAmcmVjdHMub3V0UHRy
KCksICZyZWN0Q291bnQpOwotICAgICAgICBWZWN0b3I8SW50UmVjdD4gcGFpbnRSZWN0czsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0Q291bnQ7IGkrKykKLSAgICAgICAgICAgIHBh
aW50UmVjdHMuYXBwZW5kKEludFJlY3QocmVjdHMuZ2V0KClbaV0pKTsKKyAgICBpbnQgcmVjdENv
dW50OworICAgIEdPd25QdHI8R2RrUmVjdGFuZ2xlPiByZWN0czsKKyAgICBnZGtfcmVnaW9uX2dl
dF9yZWN0YW5nbGVzKGV2ZW50LT5yZWdpb24sICZyZWN0cy5vdXRQdHIoKSwgJnJlY3RDb3VudCk7
CiAKLSAgICAgICAgcGFpbnRXZWJWaWV3KGZyYW1lLCBwcml2LT50cmFuc3BhcmVudCwgZ2MsIHN0
YXRpY19jYXN0PEludFJlY3Q+KGV2ZW50LT5hcmVhKSwgcGFpbnRSZWN0cyk7CisgICAgUmVmUHRy
PGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KSk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0Q291bnQ7IGkrKykgeworICAgICAgICBjb3B5
UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCktPnBy
aXYtPmJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjci5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KHJlY3RzLmdl
dCgpW2ldKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIEZBTFNFOwogfQogI2Vsc2UKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhdyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCog
Y3IpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRn
ZXQpOwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKICAg
ICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0KICAgICBpZiAoIWdka19jYWlyb19nZXRfY2xpcF9y
ZWN0YW5nbGUoY3IsICZjbGlwUmVjdCkpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAotICAgIEZy
YW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPm1haW5GcmFtZSgpOwotICAgIGlmIChmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkgJiYgZnJhbWUtPnZpZXcoKSkgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgZ2MoY3IpOwotICAgICAgICBJbnRSZWN0IHJlY3QgPSBjbGlwUmVjdDsKLSAgICAgICAg
Y2Fpcm9fcmVjdGFuZ2xlX2xpc3RfdCogcmVjdExpc3QgPSBjYWlyb19jb3B5X2NsaXBfcmVjdGFu
Z2xlX2xpc3QoY3IpOwotCi0gICAgICAgIGZyYW1lLT52aWV3KCktPnVwZGF0ZUxheW91dEFuZFN0
eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKLQotICAgICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7
Ci0gICAgICAgIGlmICghcmVjdExpc3QtPnN0YXR1cyAmJiByZWN0TGlzdC0+bnVtX3JlY3Rhbmds
ZXMgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RMaXN0LT5udW1f
cmVjdGFuZ2xlczsgaSsrKQotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJ
bnRSZWN0KEZsb2F0UmVjdChyZWN0TGlzdC0+cmVjdGFuZ2xlc1tpXSkpKTsKLSAgICAgICAgfQot
ICAgICAgICBwYWludFdlYlZpZXcoZnJhbWUsIHByaXYtPnRyYW5zcGFyZW50LCBnYywgcmVjdCwg
cmVjdHMpOwotCisgICAgY2Fpcm9fcmVjdGFuZ2xlX2xpc3RfdCogcmVjdExpc3QgPSBjYWlyb19j
b3B5X2NsaXBfcmVjdGFuZ2xlX2xpc3QoY3IpOworICAgIGlmIChyZWN0TGlzdC0+c3RhdHVzIHx8
ICFyZWN0TGlzdC0+bnVtX3JlY3RhbmdsZXMpIHsKICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlX2xp
c3RfZGVzdHJveShyZWN0TGlzdCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0TGlz
dC0+bnVtX3JlY3RhbmdsZXM7IGkrKykgeworICAgICAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZh
Y2VUb0NvbnRleHQoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLT5wcml2LT5iYWNraW5nU3RvcmUt
PmNhaXJvU3VyZmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3IsIEludFNpemUoKSwgZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdExpc3QtPnJl
Y3RhbmdsZXNbaV0pKSk7CiAgICAgfQorICAgIGNhaXJvX3JlY3RhbmdsZV9saXN0X2Rlc3Ryb3ko
cmVjdExpc3QpOwogCiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtOTExLDE0ICs4NDIsMTYgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a0FsbG9jYXRpb24qIGFsbG8KICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJf
dmlld19wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CiAK
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Ci0K
ICAgICBQYWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKLSAgICBGcmFtZSogZnJhbWUgPSBwYWdl
LT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT52aWV3KCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBJbnRTaXplIG9sZFNpemU7CisgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gcGFn
ZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkgeworICAgICAgICBvbGRTaXplID0gZnJhbWVWaWV3LT5z
aXplKCk7CisgICAgICAgIGZyYW1lVmlldy0+cmVzaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxv
Y2F0aW9uLT5oZWlnaHQpOworICAgIH0KIAotICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxv
Y2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKLSAgICBzdGF0aWNfY2FzdDxXZWJL
aXQ6OkNocm9tZUNsaWVudCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSktPmFkanVzdG1lbnRX
YXRjaGVyKCktPnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnMoKTsKKyAgICBXZWJLaXQ6
OkNocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVD
bGllbnQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOworICAgIGNocm9tZUNsaWVudC0+d2lk
Z2V0U2l6ZUNoYW5nZWQob2xkU2l6ZSwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2Nh
dGlvbi0+aGVpZ2h0KSk7CisgICAgY2hyb21lQ2xpZW50LT5hZGp1c3RtZW50V2F0Y2hlcigpLT51
cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19ncmFiX2ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0KQpAQCAtMzMzMiw2ICszMjY1
LDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKICAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPndlYlZpZXcgPSB3ZWJW
aWV3OwogCiAgICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURHRVQod2ViVmlldyks
IFRSVUUpOworICAgIGd0a193aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChHVEtfV0lER0VUKHdl
YlZpZXcpLCBGQUxTRSk7CisKICAgICBwcml2LT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1F
KHdlYmtpdF93ZWJfZnJhbWVfbmV3KHdlYlZpZXcpKTsKICAgICBwcml2LT5sYXN0UG9wdXBYUG9z
aXRpb24gPSBwcml2LT5sYXN0UG9wdXBZUG9zaXRpb24gPSAtMTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAppbmRleCA5OTQ0NGFhM2E4NGYx
ZjkxODBlZWI0ODJmYzU4ZGUzZmUxYWU2YzRlLi41MWU1ZThlNjIzZDJjOGI1ODk5MGE4Mzk5Y2I5
ZGQyZDBjMTRmNzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlld3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlld3ByaXZhdGUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkdPd25QdHIuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJX
aWRnZXRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQyLDYgKzQzLDcgQEAgZXh0ZXJuICJDIiB7CiB0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgV2ViS2l0V2ViVmlld1ByaXZhdGU7CiBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFn
ZTsKKyAgICBPd25QdHI8V2ViQ29yZTo6V2lkZ2V0QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7
CiAgICAgR1JlZlB0cjxXZWJLaXRXZWJTZXR0aW5ncz4gd2ViU2V0dGluZ3M7CiAgICAgR1JlZlB0
cjxXZWJLaXRXZWJJbnNwZWN0b3I+IHdlYkluc3BlY3RvcjsKICAgICBHUmVmUHRyPFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcz4gdmlld3BvcnRBdHRyaWJ1dGVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111209</attachid>
            <date>2011-10-16 22:23:39 -0700</date>
            <delta_ts>2011-10-22 12:40:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70213-20111016222338.patch</filename>
            <type>text/plain</type>
            <size>40619</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1NjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2Y2ZjY2QyZGU1M2U1NmRj
YTBhZmZiYzg1M2U5ZTNlZTViZWQ0YTkyLi42NjlhOTMxMGNlYWFlNmQ2ZmQ0ZTBiYmRmZmI5NDA1
MzZhYTZjNGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMTAtMTYgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFN3aXRj
aCB0byBhIGJhY2tpbmcgc3RvcmUgYXBwcm9hY2ggZm9yIHBhaW50aW5nIFdlYktpdFdlYlZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjEzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBUaGUgY2hhbmdlcyB0byBXZWJDb3JlIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAgIGJl
aGF2aW9yLiBUaGUgY2hhbmdlcyBpbiBXZWJLaXQgYXJlIGNvdmVyZWQgYnkgZXhpc3RpbmcKKyAg
ICAgICAgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldEJhY2tpbmdTdG9yZTo6c2l6ZSk6IEFkZGVk
IHRoaXMgZ2V0dGVyIGZvciB0aGUgc2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmVDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRCYWNraW5n
U3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZSk6IEluaXRpYWxpemUgc2l6ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQpOiBBZGRlZCB0aGlzIG5ldyBo
ZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVy
KTogVXNlIHRoZSBuZXcgaGVscGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tp
bmdTdG9yZVgxMS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6Oldp
ZGdldEJhY2tpbmdTdG9yZSk6IEluaXRpYWxpemUgdGhlIHNpemUuCisKIDIwMTEtMTAtMTUgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEF2
b2lkIHVuZWNlc3NhcmlseSBjYWxsaW5nIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSBvbiBwbHVn
aW4gd2lkZ2V0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGYzOGQ1YzE5ZTdmZTVhYWY5OTRhODgzNzc5
YmU1Nzg2ZmZlNTMzOTAuLjhjYzg3YzRhMmNmZmI4MTY3YTM5YWM2ODVjMjgyNTFkOWQ4ZjlkNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0xMC0xNiAgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU3dpdGNoIHRv
IGEgYmFja2luZyBzdG9yZSBhcHByb2FjaCBmb3IgcGFpbnRpbmcgV2ViS2l0V2ViVmlldworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYWludCB0aGUgV2Vi
VmlldyBpbnRvIGEgYmFja2luZyBzdG9yZS4gVGhpcyBwcmV2ZW50cyBleHBvc2UgZXZlbnRzIGZy
b20KKyAgICAgICAgdHJpZ2dlcmluZyBhIGxheW91dCwgbWFraW5nIHNjcm9sbGluZyBhbmQgcmVz
aXppbmcgbXVjaCBzbW9vdGhlci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6Q2hyb21lQ2xpZW50
KTogSW5pdGlhbGl6ZSBuZXcgbWVtYmVycy4KKyAgICAgICAgKFdlYktpdDo6cmVwYWludEV2ZXJ5
dGhpbmdTb29uVGltZW91dCk6IEFkZGVkIHRoaXMgaGVscGVyIHdoaWNoIHJlcGFpbnRzCisgICAg
ICAgIHRoZSBXZWJWaWV3IG1vcmUgcXVpY2tseSBkdXJpbmcgcmVzaXplIGV2ZW50cy4KKyAgICAg
ICAgKFdlYktpdDo6Y2xpcE91dE9sZFdpZGdldEFyZWEpOiBDbGlwcyBvdXQgdGhlIG9sZCB3aWRn
ZXQgYXJlYSwgc28gdGhhdCB3ZQorICAgICAgICBjYW4gY2xlYXIgb3V0IGludmFsaWQgcGl4ZWxz
IHdoZW4gZ3Jvd2luZyB0aGUgd2lkZ2V0IGludG8gYSBwcmUtZXhpc3RpbmcKKyAgICAgICAgYmFj
a2luZyBzdG9yZS4KKyAgICAgICAgKFdlYktpdDo6Y2xlYXJFdmVyeXdoZXJlSW5CYWNraW5nU3Rv
cmUpOiBDbGVhciBvdXQgdGhlIGVudGlyZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViS2l0
OjpDaHJvbWVDbGllbnQ6OndpZGdldFNpemVDaGFuZ2VkKTogSGFuZGxlIHdpZGdldCBzaXplIGNo
YW5nZXMgYnkKKyAgICAgICAgaW50ZWxsaWdlbnRseSByZXNpemluZyBvciByZXVzaW5nIHRoZSBl
eGlzdGluZyBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViS2l0Ojpjb2FsZXNjZVJlY3RzSWZQ
b3NzaWJsZSk6IE1vdmVkIHRoaXMgbWV0aG9kIGZyb20gd2Via2l0d2Vidmlldy5jcHAuCisgICAg
ICAgIChXZWJLaXQ6OnBhaW50V2ViVmlldyk6IE1vdmVkIHRoaXMgbWV0aG9kIGZyb20gd2Via2l0
d2Vidmlldy5jcHAuCisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6cGVyZm9ybUFsbFBl
bmRpbmdTY3JvbGxzKTogSWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCisgICAgICAgIHNjcm9sbGlu
ZyBvcGVyYXRpb25zLCBwZXJmb3JtIHRoZW0gYnkgc2Nyb2xsaW5nIHRoZSBiYWNraW5nIHN0b3Jl
LgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnBhaW50KTogQWRkZWQgdGhpcyB0aW1l
ciBjYWxsYmFjaywgd2hpY2ggcGFpbnRzIHRoZQorICAgICAgICBXZWJWaWV3IGFmdGVyIGEgc2hv
cnQgdGltZW91dC4KKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjppbnZhbGlkYXRlV2lu
ZG93KTogTm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlIGFueSBsb25nZXIuCisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KTogTm93IHVu
aXRlIHRoZSByZWN0IHdpdGgKKyAgICAgICAgdGhlIGV4aXN0aW5nIGRpcnR5IHJlZ2lvbiBhbmQg
cXVldWUgdGhlIHBhaW50IHRpbWVvdXQuCisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6
c2Nyb2xsKTogTm93IGp1c3QgcXVldWUgYSBzY3JvbGwgZXZlbnQgaW4gdGhlIHJlcGFpbnQgdGlt
ZW91dC4KKyAgICAgICAgSW50ZWxsaWdlbnRseSBjYWxjdWxhdGUgdGhlIGFyZWEgdG8gbW92ZSBh
bmQgdGhlIGRpcnR5IGFyZWEgdXNpbmcgY29kZSBkZXJpdmVkCisgICAgICAgIGZyb20gV2ViS2l0
Mi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaDogQWRkZWQgbmV3
IG1ldGhvZCBkZWZpbml0aW9ucyBhbmQgYWxzbyB1c2UKKyAgICAgICAgdGhlIFdlYkNvcmUgbmFt
ZXNwYWNlIHRvIGF2b2lkIGxvdHMgb2YgdXNlcyBvZiAiV2ViQ29yZTo6Ii4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhdyk6
IE5vdyBqdXN0IGJsaXQgdGhlIGJhY2tpbmcgc3RvcmUgaW50byB0aGUgd2lkZ2V0LgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2V4cG9zZSk6IERpdHRvLgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X3NpemVfYWxsb2NhdGUpOiBMZXQgdGhlIENocm9tZUNsaWVudCBrbm93IHRoZSB3aWRnZXQg
c2l6ZSBjaGFuZ2VkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXQpOiBUdXJuIG9mZiBH
REsgZG91YmxlIGJ1ZmZlcmluZyBhcyB3ZSBoYXZlIG91ciBvd24gZG91YmxlCisgICAgICAgIGJ1
ZmZlci4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQWRkIHRoZSBi
YWNraW5nIHN0b3JlIG1lbWJlci4KKwogMjAxMS0xMC0xNSAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gR3RrQWRqdXN0bWVudCB3YXRjaGVy
IHVwZGF0ZXMgYWRqdXN0bWVudHMgdG9vIGxhemlseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3RvcmUuaAppbmRleCBlMzdlOTllNjE3MzUzNWYy
MTJkYjA4NzAwZTkyOWJmN2U5YWJkYjM2Li45ODkzODYyMzMwNGU0YzVjNjliZjg1ZjYyZjIzYWE0
MGY0MWQ1ZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmUuaApAQCAtNTEsMTEgKzUxLDEzIEBAIHB1YmxpYzoKICAgICB+V2lkZ2V0
QmFja2luZ1N0b3JlKCk7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2UoKTsKICAg
ICB2b2lkIHNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBz
Y3JvbGxPZmZzZXQpOworICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KIAogcHJpdmF0ZToKICAgICBXaWRnZXRCYWNraW5nU3RvcmUoUGxhdGZvcm1XaWRnZXQsIGNv
bnN0IEludFNpemUmKTsKIAogICAgIE93blB0cjxXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlPiBt
X3ByaXZhdGU7CisgICAgSW50U2l6ZSBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNr
aW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRC
YWNraW5nU3RvcmVDYWlyby5jcHAKaW5kZXggYjk2Nzg0YTIzYjViMDRmOGQ3YzE3ODBiNzk4OGQ0
ZDM1Njg5ZWFhOS4uZGZhNzNlYzljOWYyMTBhYjZkNjAwZjkwY2YxM2FmMTJjZDUyZDU5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdldEJhY2tp
bmdTdG9yZUNhaXJvLmNwcApAQCAtNzIsNiArNzIsNyBAQCBQYXNzT3duUHRyPFdpZGdldEJhY2tp
bmdTdG9yZT4gV2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0
LAogCiBXaWRnZXRCYWNraW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShQbGF0Zm9ybVdpZGdl
dCB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgOiBtX3ByaXZhdGUoV2lkZ2V0QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6Y3JlYXRlKHdpZGdldCwgc2l6ZSkpCisgICAgLCBtX3NpemUoc2l6
ZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCmluZGV4IDE2MzIyNTlhNTY2MjgzMGQ4MDFjNDlh
ZDE2MTFmZmU2NmMwZTg0YTEuLmE2NDAzNTdmMjVhMWI3YWNhMGE2MzExNzZjMGJlOTdkYTcwNDI1
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb1V0aWxpdGllcy5jcHAKQEAgLTE4NiwxMiArMTg2LDE3IEBAIFBhc3NSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBv
cmlnaW5hbFN1cmZhCiAgICAgcmV0dXJuIG5ld1N1cmZhY2UucmVsZWFzZSgpOwogfQogCit2b2lk
IGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4dChjYWlyb19zdXJmYWNlX3QqIGZyb20s
IGNhaXJvX3QqIHRvLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKHRvLCBmcm9tLCBvZmZzZXQud2lkdGgo
KSwgb2Zmc2V0LmhlaWdodCgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUodG8sIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxsKHRv
KTsKK30KKwogdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGNhaXJvX3N1cmZh
Y2VfdCogZnJvbSwgY2Fpcm9fc3VyZmFjZV90KiB0bywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRv
cHRSZWYoY2Fpcm9fY3JlYXRlKHRvKSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNv
bnRleHQuZ2V0KCksIGZyb20sIG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOwotICAg
IGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LmdldCgpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fZmlsbChjb250ZXh0LmdldCgpKTsK
KyAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQoZnJvbSwgY29udGV4dC5nZXQo
KSwgb2Zmc2V0LCByZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmgKaW5kZXggM2Q2ZWI3OWY2ZWRhOTFhYjYyNmM5NmJiMTUxMDBjZmY0YjNiZWI4Mi4uMzQ0YmM0
OWExNzBjZjEwNzgyM2MzYTdiMDJkM2ZmNzkwMGZhMmM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCkBAIC00
OSw3ICs0OSw5IEBAIGNhaXJvX29wZXJhdG9yX3QgdG9DYWlyb09wZXJhdG9yKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKTsKIHZvaWQgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjYWlyb190KiBjciwg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNhaXJvX29wZXJhdG9yX3Qgb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogUGFz
c1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlDYWlyb0ltYWdlU3VyZmFjZShjYWlyb19zdXJm
YWNlX3QqKTsKLXZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihjYWlyb19zdXJm
YWNlX3QqIGZyb20sIGNhaXJvX3N1cmZhY2VfdCogdG8sIGNvbnN0IEludFNpemUmLCBjb25zdCBJ
bnRSZWN0Jik7CisKK3ZvaWQgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNlVG9Db250ZXh0KGNhaXJv
X3N1cmZhY2VfdCogZnJvbSwgY2Fpcm9fdCogdG8sIGNvbnN0IEludFNpemUmIG9mZnNldCwgY29u
c3QgSW50UmVjdCYpOwordm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGNhaXJv
X3N1cmZhY2VfdCogZnJvbSwgY2Fpcm9fc3VyZmFjZV90KiB0bywgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0LCBjb25zdCBJbnRSZWN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgx
MS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3Jl
WDExLmNwcAppbmRleCBhZDViYWE1ZDAyYmVhNWYxZDVmNGQ2MjQxOTNiNWNlNzc5Mzg5Yzk2Li4x
YjEzYjA2NjZjYjFkYWQ0ZjU1ZTUwYmFmNjY2YjFiYjYxNjc0NDkzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNw
cApAQCAtNzcsNiArNzcsNyBAQCBQYXNzT3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZT4gV2lkZ2V0
QmFja2luZ1N0b3JlOjpjcmVhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbgogCiBXaWRnZXRCYWNr
aW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKICAgICA6IG1fcHJpdmF0ZShXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlOjpj
cmVhdGUod2lkZ2V0LCBzaXplKSkKKyAgICAsIG1fc2l6ZShzaXplKQogewogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApp
bmRleCBmMWE1N2M2NzQzYmVhZDk0YWExYjVhZmEzMWViYTZhN2E2NWMxMDgxLi5kZDdjMjAyN2Q1
MjMwNzZhNmY4MWUxNjMxNzlkOTY2MzE0YTY0NDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiSWNvbi5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25B
Y3Rpb24uaCIKQEAgLTQ2LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUd0ay5oIgor
I2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51R3RrLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5o
IgpAQCAtNjEsNiArNjMsNyBAQAogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxnbGliL2dp
MThuLWxpYi5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCkBAIC03NSw3ICs3OCw5IEBAIENocm9tZUNsaWVudDo6Q2hyb21lQ2xpZW50KFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fYWRq
dXN0bWVudFdhdGNoZXIod2ViVmlldykKICAgICAsIG1fY2xvc2VTb29uVGltZXIoMCkKLSAgICAs
IG1fcGVuZGluZ1Njcm9sbEludmFsaWRhdGlvbnMoZmFsc2UpCisgICAgLCBtX2Rpc3BsYXlUaW1l
cih0aGlzLCAmQ2hyb21lQ2xpZW50OjpwYWludCkKKyAgICAsIG1fbGFzdERpc3BsYXlUaW1lKDAp
CisgICAgLCBtX3JlcGFpbnRTb29uU291cmNlSWQoMCkKIHsKICAgICBBU1NFUlQobV93ZWJWaWV3
KTsKIH0KQEAgLTM3Nyw4MiArMzgyLDIyOSBAQCB2b2lkIENocm9tZUNsaWVudDo6cmVnaXN0ZXJQ
cm90b2NvbEhhbmRsZXIoY29uc3QgU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFN0cmluZyYgYgogfSAK
ICNlbmRpZiAKIAotdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVXaW5kb3coY29uc3QgSW50
UmVjdCYsIGJvb2wgaW1tZWRpYXRlKQorc3RhdGljIGdib29sZWFuIHJlcGFpbnRFdmVyeXRoaW5n
U29vblRpbWVvdXQoQ2hyb21lQ2xpZW50KiBjbGllbnQpCit7CisgICAgY2xpZW50LT5wYWludCgw
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIGNsaXBPdXRPbGRXaWRnZXRB
cmVhKGNhaXJvX3QqIGNyLCBjb25zdCBJbnRTaXplJiBvbGRTaXplLCBjb25zdCBJbnRTaXplJiBu
ZXdTaXplKQoreworICAgIGNhaXJvX21vdmVfdG8oY3IsIG9sZFNpemUud2lkdGgoKSwgMCk7Cisg
ICAgY2Fpcm9fbGluZV90byhjciwgbmV3U2l6ZS53aWR0aCgpLCAwKTsKKyAgICBjYWlyb19saW5l
X3RvKGNyLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX2xp
bmVfdG8oY3IsIDAsIG5ld1NpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX2xpbmVfdG8oY3IsIDAs
IG9sZFNpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX2xpbmVfdG8oY3IsIG9sZFNpemUud2lkdGgo
KSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjcik7CisgICAgY2Fp
cm9fY2xpcChjcik7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyRXZlcnl3aGVyZUluQmFja2luZ1N0
b3JlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNhaXJvX3QqIGNyKQogewotICAgIC8vIElmIHdl
J3ZlIGludmFsaWRhdGVkIHJlZ2lvbnMgZm9yIHNjcm9sbGluZywgZm9yY2UgR0RLIHRvIHByb2Nl
c3MgdGhvc2UgaW52YWxpZGF0aW9ucwotICAgIC8vIG5vdy4gVGhpcyB3aWxsIGFsc28gY2F1c2Ug
Y2hpbGQgd2luZG93cyB0byBtb3ZlIHJpZ2h0IGF3YXkuIFRoaXMgcHJldmVudHMgcmVkcmF3Ci0g
ICAgLy8gYXJ0aWZhY3RzIHdpdGggY2hpbGQgd2luZG93cyAoZS5nLiBGbGFzaCBwbHVnaW4gaW5z
dGFuY2VzKS4KLSAgICBpZiAoaW1tZWRpYXRlICYmIG1fcGVuZGluZ1Njcm9sbEludmFsaWRhdGlv
bnMpIHsKLSAgICAgICAgbV9wZW5kaW5nU2Nyb2xsSW52YWxpZGF0aW9ucyA9IGZhbHNlOwotICAg
ICAgICBpZiAoR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJ
REdFVChtX3dlYlZpZXcpKSkKLSAgICAgICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVz
KHdpbmRvdywgVFJVRSk7CisgICAgLy8gVGhlIHN0cmF0ZWd5IGhlcmUgaXMgdG8gcXVpY2tseSBk
cmF3IHdoaXRlIGludG8gdGhpcyBuZXcgY2FudmFzLCBzbyB0aGF0CisgICAgLy8gd2hlbiBhIHVz
ZXIgcXVpY2tseSByZXNpemVzIHRoZSBXZWJWaWV3IGluIGFuIGVudmlyb25tZW50IHRoYXQgaGFz
IG9wYXF1ZQorICAgIC8vIHJlc2l6aW5nIChsaWtlIEdub21lIFNoZWxsKSwgdGhlcmUgYXJlIG5v
IGRyYXdpbmcgYXJ0aWZhY3RzLgorICAgIGlmICghd2ViVmlldy0+cHJpdi0+dHJhbnNwYXJlbnQp
IHsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDEsIDEsIDEpOworICAgICAgICBj
YWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgfSBlbHNl
CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwor
ICAgIGNhaXJvX3BhaW50KGNyKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6OndpZGdldFNpemVD
aGFuZ2VkKGNvbnN0IEludFNpemUmIG9sZFdpZGdldFNpemUsIEludFNpemUgbmV3U2l6ZSkKK3sK
KyAgICBXaWRnZXRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IG1fd2ViVmlldy0+cHJpdi0+
YmFja2luZ1N0b3JlLmdldCgpOworCisgICAgLy8gR3JvdyB0aGUgYmFja2luZyBzdG9yZSBieSBh
dCBsZWFzdCAxLjUgdGltZXMgdGhlIGN1cnJlbnQgc2l6ZS4gVGhpcyBwcmV2ZW50cworICAgIC8v
IGxvdHMgb2YgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbnMgZHVyaW5nIGFuIG9wYXF1ZSByZXNpemUu
CisgICAgaWYgKGJhY2tpbmdTdG9yZSkgeworICAgICAgICBjb25zdCBJbnRTaXplJiBvbGRTaXpl
ID0gYmFja2luZ1N0b3JlLT5zaXplKCk7CisgICAgICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBv
bGRTaXplLndpZHRoKCkpCisgICAgICAgICAgICBuZXdTaXplLnNldFdpZHRoKHN0ZDo6bWF4KG5l
d1NpemUud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplLndpZHRoKCkgKiAxLjUpKSk7
CisgICAgICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAg
ICAgICAgIG5ld1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWF4KG5ld1NpemUuaGVpZ2h0KCksIHN0YXRp
Y19jYXN0PGludD4ob2xkU2l6ZS5oZWlnaHQoKSAqIDEuNSkpKTsKKyAgICB9CisKKyAgICAvLyBJ
ZiB3ZSBkaWQgbm90IGhhdmUgYSBiYWNraW5nIHN0b3JlIGJlZm9yZSBvciBpZiB0aGUgYmFja2lu
ZyBzdG9yZSBpcyBncm93aW5nLCB3ZSBuZWVkCisgICAgLy8gdG8gcmVhbGxvY2F0ZSBhIG5ldyBv
bmUgYW5kIHNldCBpdCB1cCBzbyB0aGF0IHdlIGRvbid0IHNlZSBhcnRpZmFjdHMgd2hpbGUgcmVz
aXppbmcuCisgICAgaWYgKCFiYWNraW5nU3RvcmUKKyAgICAgICAgfHwgbmV3U2l6ZS53aWR0aCgp
ID4gYmFja2luZ1N0b3JlLT5zaXplKCkud2lkdGgoKQorICAgICAgICB8fCBuZXdTaXplLmhlaWdo
dCgpID4gYmFja2luZ1N0b3JlLT5zaXplKCkuaGVpZ2h0KCkpIHsKKworICAgICAgICBPd25QdHI8
V2lkZ2V0QmFja2luZ1N0b3JlPiBuZXdCYWNraW5nU3RvcmUgPQorICAgICAgICAgICAgV2ViQ29y
ZTo6V2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoR1RLX1dJREdFVChtX3dlYlZpZXcpLCBuZXdT
aXplKTsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KG5ld0JhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCkpKTsKKworICAgICAgICBjbGVhckV2ZXJ5
d2hlcmVJbkJhY2tpbmdTdG9yZShtX3dlYlZpZXcsIGNyLmdldCgpKTsKKworICAgICAgICAvLyBO
b3cgd2UgY29weSB0aGUgb2xkIGJhY2tpbmcgc3RvcmUgaW1hZ2Ugb3ZlciB0aGUgbmV3IGNsZWFy
ZWQgc3VyZmFjZSB0byBwcmV2ZW50CisgICAgICAgIC8vIGFubm95aW5nIGZsYXNoaW5nIGFzIHRo
ZSB3aWRnZXQgZ3Jvd3MuIFdlIGRvIHRoZSAicmVhbCIgcGFpbnQgaW4gYSB0aW1lb3V0CisgICAg
ICAgIC8vIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gYmxvY2sgcmVzaXppbmcgdG9vIGxvbmcuCisg
ICAgICAgIGlmIChiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShjci5nZXQoKSwgYmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSwgMCwgMCk7Cisg
ICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIDAsIDAsIGJhY2tpbmdTdG9yZS0+
c2l6ZSgpLndpZHRoKCksIGJhY2tpbmdTdG9yZS0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGNhaXJvX2ZpbGwoY3IuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgbV93ZWJWaWV3
LT5wcml2LT5iYWNraW5nU3RvcmUgPSBuZXdCYWNraW5nU3RvcmUucmVsZWFzZSgpOworICAgICAg
ICBiYWNraW5nU3RvcmUgPSBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS5nZXQoKTsKKwor
ICAgIH0gZWxzZSBpZiAob2xkV2lkZ2V0U2l6ZS53aWR0aCgpIDwgbmV3U2l6ZS53aWR0aCgpIHx8
IG9sZFdpZGdldFNpemUuaGVpZ2h0KCkgPCBuZXdTaXplLmhlaWdodCgpKSB7CisgICAgICAgIC8v
IFRoZSB3aWRnZXQgaXMgZ3Jvd2luZywgYnV0IHdlIGRpZCBub3QgbmVlZCB0byBjcmVhdGUgYSBu
ZXcgYmFja2luZyBzdG9yZS4KKyAgICAgICAgLy8gV2Ugc2hvdWxkIGNsZWFyIGFueSBvbGQgZGF0
YSBvdXRzaWRlIG9mIHRoZSBvbGQgd2lkZ2V0IHJlZ2lvbi4KKyAgICAgICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNl
KCkpKTsKKyAgICAgICAgY2xpcE91dE9sZFdpZGdldEFyZWEoY3IuZ2V0KCksIG9sZFdpZGdldFNp
emUsIG5ld1NpemUpOworICAgICAgICBjbGVhckV2ZXJ5d2hlcmVJbkJhY2tpbmdTdG9yZShtX3dl
YlZpZXcsIGNyLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcmNlIGEgcmVk
cmF3IGFuZCBpZ25vcmUgdGhlIGZyYW1lcmF0ZSBjYXAuCisgICAgbV9sYXN0RGlzcGxheVRpbWUg
PSAwOworICAgIG1fZGlydHlSZWdpb24udW5pdGUoSW50UmVjdChJbnRQb2ludCgpLCBiYWNraW5n
U3RvcmUtPnNpemUoKSkpOworCisgICAgLy8gV2ViQ29yZSB0aW1lcnMgYnkgZGVmYXVsdCBoYXZl
IGEgbG93ZXIgcHJpb3JpdHkgd2hpY2ggbGVhZHMgdG8gbW9yZSBhcnRpZmFjdHMgd2hlbiBvcGFx
dWUKKyAgICAvLyByZXNpemUgaXMgb24sIHRodXMgd2UgdXNlIGdfdGltZW91dF9hZGQgaGVyZSB0
byBmb3JjZSBhIGhpZ2hlciB0aW1lb3V0IHByaW9yaXR5LgorICAgIGlmICghbV9yZXBhaW50U29v
blNvdXJjZUlkKQorICAgICAgICBtX3JlcGFpbnRTb29uU291cmNlSWQgPSBnX3RpbWVvdXRfYWRk
KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlcGFpbnRFdmVyeXRoaW5nU29vblRp
bWVvdXQpLCB0aGlzKTsKK30KKworc3RhdGljIHZvaWQgY29hbGVzY2VSZWN0c0lmUG9zc2libGUo
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCit7CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IGNSZWN0VGhyZXNob2xkID0gMTA7CisgICAgY29uc3QgZmxvYXQg
Y1dhc3RlZFNwYWNlVGhyZXNob2xkID0gMC43NWY7CisgICAgYm9vbCB1c2VVbmlvbmVkUmVjdCA9
IChyZWN0cy5zaXplKCkgPD0gMSkgfHwgKHJlY3RzLnNpemUoKSA+IGNSZWN0VGhyZXNob2xkKTsK
KyAgICBpZiAoIXVzZVVuaW9uZWRSZWN0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgdG8gZ3Vlc3Mg
d2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIHVzZSB0aGUgdW5pb25lZCByZWN0IG9yIHRoZSBpbmRp
dmlkdWFsIHJlY3RzLgorICAgICAgICAvLyBXZSBkbyB0aGlzIGJ5IGNvbXB1dGluZyB0aGUgcGVy
Y2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgdW5pb24uIElmIHRoYXQgd2FzdGVkIHNw
YWNlCisgICAgICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxsIGRvIGluZGl2aWR1YWwg
cmVjdCBwYWludGluZyBpbnN0ZWFkLgorICAgICAgICBmbG9hdCB1bmlvblBpeGVscyA9IChjbGlw
UmVjdC53aWR0aCgpICogY2xpcFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBmbG9hdCBzaW5nbGVQ
aXhlbHMgPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgc2luZ2xlUGl4ZWxzICs9IHJlY3RzW2ldLndpZHRoKCkgKiByZWN0
c1tpXS5oZWlnaHQoKTsKKyAgICAgICAgZmxvYXQgd2FzdGVkU3BhY2UgPSAxIC0gKHNpbmdsZVBp
eGVscyAvIHVuaW9uUGl4ZWxzKTsKKyAgICAgICAgaWYgKHdhc3RlZFNwYWNlIDw9IGNXYXN0ZWRT
cGFjZVRocmVzaG9sZCkKKyAgICAgICAgICAgIHVzZVVuaW9uZWRSZWN0ID0gdHJ1ZTsKICAgICB9
CisKKyAgICBpZiAoIXVzZVVuaW9uZWRSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICByZWN0
cy5jbGVhcigpOworICAgIHJlY3RzLmFwcGVuZChjbGlwUmVjdCk7CiB9CiAKLXZvaWQgQ2hyb21l
Q2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVjdCYgdXBkYXRl
UmVjdCwgYm9vbCBpbW1lZGlhdGUpCitzdGF0aWMgdm9pZCBwYWludFdlYlZpZXcoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgRnJhbWUqIGZyYW1lLCBSZWdpb24gZGlydHlSZWdpb24pCiB7Ci0gICAg
R2RrUmVjdGFuZ2xlIHJlY3QgPSB1cGRhdGVSZWN0OwotICAgIEdka1dpbmRvdyogd2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgVmVjdG9y
PEludFJlY3Q+IHJlY3RzID0gZGlydHlSZWdpb24ucmVjdHMoKTsKKyAgICBjb2FsZXNjZVJlY3Rz
SWZQb3NzaWJsZShkaXJ0eVJlZ2lvbi5ib3VuZHMoKSwgcmVjdHMpOworICAgIGZyYW1lLT52aWV3
KCktPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKKworICAgIGJvb2wg
d2ViVmlld0lzVHJhbnNwYXJlbnQgPSB3ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVudDsKIAotICAg
IGlmICh3aW5kb3cgJiYgIXVwZGF0ZVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGdka193aW5k
b3dfaW52YWxpZGF0ZV9yZWN0KHdpbmRvdywgJnJlY3QsIEZBTFNFKTsKLSAgICAgICAgLy8gV2Ug
ZG9uJ3QgY3VycmVudGx5IGRvIGltbWVkaWF0ZSB1cGRhdGVzIHNpbmNlIHRoZXkgZGVsYXkgb3Ro
ZXIgVUkgZWxlbWVudHMuCi0gICAgICAgIC8vaWYgKGltbWVkaWF0ZSkKLSAgICAgICAgLy8gICAg
Z2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMod2luZG93LCBGQUxTRSk7CisgICAgUmVmUHRyPGNh
aXJvX3Q+IGJhY2tpbmdTdG9yZUNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUod2ViVmll
dy0+cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSkpOworICAgIEdyYXBoaWNzQ29u
dGV4dCBnYyhiYWNraW5nU3RvcmVDb250ZXh0LmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3Qg
PSByZWN0c1tpXTsKKworICAgICAgICBnYy5zYXZlKCk7CisgICAgICAgIGdjLmNsaXAocmVjdCk7
CisgICAgICAgIGlmICh3ZWJWaWV3SXNUcmFuc3BhcmVudCkKKyAgICAgICAgICAgIGdjLmNsZWFy
UmVjdChyZWN0KTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmdjLCByZWN0KTsKKyAg
ICAgICAgZ2MucmVzdG9yZSgpOwogICAgIH0KKworICAgIGdjLnNhdmUoKTsKKyAgICBnYy5jbGlw
KGRpcnR5UmVnaW9uLmJvdW5kcygpKTsKKyAgICBmcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPmRyYXdIaWdobGlnaHQoZ2MpOworICAgIGdjLnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50
UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCit2b2lkIENocm9tZUNsaWVudDo6cGVy
Zm9ybUFsbFBlbmRpbmdTY3JvbGxzKCkKIHsKLSAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRXaW5k
b3codXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKLSAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0
ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigpOworICAgIC8vIFNjcm9sbCBhbGwgcGVu
ZGluZyBzY3JvbGwgcmVjdHMgYW5kIGludmFsaWRhdGUgdGhvc2UgcGFydHMgb2YgdGhlIHdpZGdl
dC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVjdHNUb1Njcm9sbC5zaXplKCk7IGkr
KykgeworICAgICAgICBJbnRSZWN0JiBzY3JvbGxSZWN0ID0gbV9yZWN0c1RvU2Nyb2xsW2ldOwor
ICAgICAgICBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+c2Nyb2xsKHNjcm9sbFJlY3Qs
IG1fc2Nyb2xsT2Zmc2V0c1tpXSk7CisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVh
KEdUS19XSURHRVQobV93ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsUmVjdC54KCksIHNjcm9sbFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JvbGxSZWN0LndpZHRoKCksIHNjcm9sbFJlY3QuaGVpZ2h0KCkpOwor
ICAgIH0KKworICAgIG1fcmVjdHNUb1Njcm9sbC5jbGVhcigpOworICAgIG1fc2Nyb2xsT2Zmc2V0
cy5jbGVhcigpOwogfQogCi12b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsKGNvbnN0IEludFNpemUm
IGRlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KQorCit2b2lkIENocm9tZUNsaWVudDo6cGFpbnQoV2ViQ29yZTo6VGltZXI8Q2hyb21lQ2xp
ZW50PiopCiB7Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
R1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICBpZiAoIXdpbmRvdykKKyAgICBzdGF0aWMgY29u
c3QgZG91YmxlIG1pbmltdW1GcmFtZUludGVydmFsID0gMS4wIC8gNjAuMDsgLy8gTm8gbW9yZSB0
aGFuIDYwIGZyYW1lcyBhIHNlY29uZC4KKyAgICBkb3VibGUgdGltZVNpbmNlTGFzdERpc3BsYXkg
PSBjdXJyZW50VGltZSgpIC0gbV9sYXN0RGlzcGxheVRpbWU7CisgICAgZG91YmxlIHRpbWVVbnRp
bE5leHREaXNwbGF5ID0gbWluaW11bUZyYW1lSW50ZXJ2YWwgLSB0aW1lU2luY2VMYXN0RGlzcGxh
eTsKKworICAgIGlmICh0aW1lVW50aWxOZXh0RGlzcGxheSA+IDApIHsKKyAgICAgICAgbV9kaXNw
bGF5VGltZXIuc3RhcnRPbmVTaG90KHRpbWVVbnRpbE5leHREaXNwbGF5KTsKICAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIG1fcGVuZGluZ1Njcm9sbEludmFsaWRhdGlvbnMgPSB0cnVlOwor
ICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSB8fCAhZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpIHx8ICFmcmFtZS0+dmlldygpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBjYW5ub3QgdXNlIGdka193aW5kb3dfc2Nyb2xs
IGhlcmUgYmVjYXVzZSBpdCBpcyBvbmx5IGFibGUgdG8KLSAgICAvLyBzY3JvbGwgdGhlIHdob2xl
IHdpbmRvdyBhdCBvbmNlLCBhbmQgd2Ugb2Z0ZW4gbmVlZCB0byBzY3JvbGwKLSAgICAvLyBwb3J0
aW9ucyBvZiB0aGUgd2luZG93IG9ubHkgKHRoaW5rIGZyYW1lcykuCi0gICAgR2RrUmVjdGFuZ2xl
IGFyZWEgPSBjbGlwUmVjdDsKLSAgICBHZGtSZWN0YW5nbGUgbW92ZVJlY3Q7CisgICAgcGVyZm9y
bUFsbFBlbmRpbmdTY3JvbGxzKCk7CisgICAgcGFpbnRXZWJWaWV3KG1fd2ViVmlldywgZnJhbWUs
IG1fZGlydHlSZWdpb24pOwogCi0gICAgR2RrUmVjdGFuZ2xlIHNvdXJjZVJlY3QgPSBhcmVhOwot
ICAgIHNvdXJjZVJlY3QueCAtPSBkZWx0YS53aWR0aCgpOwotICAgIHNvdXJjZVJlY3QueSAtPSBk
ZWx0YS5oZWlnaHQoKTsKKyAgICBjb25zdCBJbnRSZWN0JiByZWN0ID0gbV9kaXJ0eVJlZ2lvbi5i
b3VuZHMoKTsKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKG1fd2Vi
VmlldyksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
IAotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrUmVnaW9uKiBpbnZhbGlkUmVnaW9u
ID0gZ2RrX3JlZ2lvbl9yZWN0YW5nbGUoJmFyZWEpOworICAgIG1fZGlydHlSZWdpb24gPSBSZWdp
b24oKTsKKyAgICBtX2xhc3REaXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9yZXBh
aW50U29vblNvdXJjZUlkID0gMDsKK30KIAotICAgIGlmIChnZGtfcmVjdGFuZ2xlX2ludGVyc2Vj
dCgmYXJlYSwgJnNvdXJjZVJlY3QsICZtb3ZlUmVjdCkpIHsKLSAgICAgICAgR2RrUmVnaW9uKiBt
b3ZlUmVnaW9uID0gZ2RrX3JlZ2lvbl9yZWN0YW5nbGUoJm1vdmVSZWN0KTsKLSAgICAgICAgZ2Rr
X3dpbmRvd19tb3ZlX3JlZ2lvbih3aW5kb3csIG1vdmVSZWdpb24sIGRlbHRhLndpZHRoKCksIGRl
bHRhLmhlaWdodCgpKTsKLSAgICAgICAgZ2RrX3JlZ2lvbl9vZmZzZXQobW92ZVJlZ2lvbiwgZGVs
dGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpOwotICAgICAgICBnZGtfcmVnaW9uX3N1YnRyYWN0
KGludmFsaWRSZWdpb24sIG1vdmVSZWdpb24pOwotICAgICAgICBnZGtfcmVnaW9uX2Rlc3Ryb3ko
bW92ZVJlZ2lvbik7Ci0gICAgfQordm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVXaW5kb3co
Y29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlKQoreworfQogCi0gICAgZ2RrX3dpbmRvd19p
bnZhbGlkYXRlX3JlZ2lvbih3aW5kb3csIGludmFsaWRSZWdpb24sIEZBTFNFKTsKLSAgICBnZGtf
cmVnaW9uX2Rlc3Ryb3koaW52YWxpZFJlZ2lvbik7Ci0jZWxzZQotICAgIGNhaXJvX3JlZ2lvbl90
KiBpbnZhbGlkUmVnaW9uID0gY2Fpcm9fcmVnaW9uX2NyZWF0ZV9yZWN0YW5nbGUoJmFyZWEpOwot
Ci0gICAgaWYgKGdka19yZWN0YW5nbGVfaW50ZXJzZWN0KCZhcmVhLCAmc291cmNlUmVjdCwgJm1v
dmVSZWN0KSkgewotICAgICAgICBjYWlyb19yZWdpb25fdCogbW92ZVJlZ2lvbiA9IGNhaXJvX3Jl
Z2lvbl9jcmVhdGVfcmVjdGFuZ2xlKCZtb3ZlUmVjdCk7Ci0gICAgICAgIGdka193aW5kb3dfbW92
ZV9yZWdpb24od2luZG93LCBtb3ZlUmVnaW9uLCBkZWx0YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQo
KSk7Ci0gICAgICAgIGNhaXJvX3JlZ2lvbl90cmFuc2xhdGUobW92ZVJlZ2lvbiwgZGVsdGEud2lk
dGgoKSwgZGVsdGEuaGVpZ2h0KCkpOwotICAgICAgICBjYWlyb19yZWdpb25fc3VidHJhY3QoaW52
YWxpZFJlZ2lvbiwgbW92ZVJlZ2lvbik7Ci0gICAgICAgIGNhaXJvX3JlZ2lvbl9kZXN0cm95KG1v
dmVSZWdpb24pOwordm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRv
dyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKK3sKKyAgICBpZiAo
dXBkYXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RpcnR5UmVnaW9u
LnVuaXRlKHVwZGF0ZVJlY3QpOworICAgIG1fZGlzcGxheVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwo
Y29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCit7CisgICAgaW52YWxp
ZGF0ZUNvbnRlbnRzQW5kV2luZG93KHVwZGF0ZVJlY3QsIGltbWVkaWF0ZSk7CisgICAgbV9hZGp1
c3RtZW50V2F0Y2hlci51cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzTGF0ZXIoKTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3Qg
SW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBt
X3JlY3RzVG9TY3JvbGwuYXBwZW5kKHJlY3RUb1Njcm9sbCk7CisgICAgbV9zY3JvbGxPZmZzZXRz
LmFwcGVuZChkZWx0YSk7CisKKyAgICAvLyBUaGUgY29kZSB0byBjYWxjdWxhdGUgdGhlIHNjcm9s
bCByZXBhaW50IHJlZ2lvbiBpcyBvcmlnaW5hbGx5IGZyb20gV2ViS2l0Mi4KKyAgICAvLyBHZXQg
dGhlIHBhcnQgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGlzIGluIHRoZSBzY3JvbGwgcmVjdC4K
KyAgICBSZWdpb24gZGlydHlSZWdpb25JblNjcm9sbFJlY3QgPSBpbnRlcnNlY3QocmVjdFRvU2Ny
b2xsLCBtX2RpcnR5UmVnaW9uKTsKKyAgICBpZiAoIWRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBUaGVyZSBhcmUgcGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lv
biB0aGF0IGFyZSBpbnNpZGUgdGhlIHNjcm9sbCByZWN0LgorICAgICAgICAvLyBXZSBuZWVkIHRv
IHN1YnRyYWN0IHRoZW0gZnJvbSB0aGUgcmVnaW9uLCBtb3ZlIHRoZW0gYW5kIHJlLWFkZCB0aGVt
LgorICAgICAgICBtX2RpcnR5UmVnaW9uLnN1YnRyYWN0KHJlY3RUb1Njcm9sbCk7CisKKyAgICAg
ICAgLy8gTW92ZSB0aGUgZGlydHkgcGFydHMuCisgICAgICAgIFJlZ2lvbiBtb3ZlZERpcnR5UmVn
aW9uSW5TY3JvbGxSZWN0ID0gaW50ZXJzZWN0KHRyYW5zbGF0ZShkaXJ0eVJlZ2lvbkluU2Nyb2xs
UmVjdCwgZGVsdGEpLCByZWN0VG9TY3JvbGwpOworCisgICAgICAgIC8vIEFuZCBhZGQgdGhlbSBi
YWNrLgorICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKG1vdmVkRGlydHlSZWdpb25JblNjcm9s
bFJlY3QpOwogICAgIH0KIAotICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWdpb24od2luZG93
LCBpbnZhbGlkUmVnaW9uLCBGQUxTRSk7Ci0gICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3koaW52YWxp
ZFJlZ2lvbik7Ci0jZW5kaWYKKyAgICAvLyBDb21wdXRlIHRoZSBzY3JvbGwgcmVwYWludCByZWdp
b24uCisgICAgUmVnaW9uIHNjcm9sbFJlcGFpbnRSZWdpb24gPSBzdWJ0cmFjdChyZWN0VG9TY3Jv
bGwsIHRyYW5zbGF0ZShyZWN0VG9TY3JvbGwsIGRlbHRhKSk7CisgICAgbV9kaXJ0eVJlZ2lvbi51
bml0ZShzY3JvbGxSZXBhaW50UmVnaW9uKTsKKyAgICBtX2Rpc3BsYXlUaW1lci5zdGFydE9uZVNo
b3QoMCk7CiAKICAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNj
cm9sbGJhcnNMYXRlcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuaAppbmRleCBjN2ZhYTdmZGI0ZjlkZjE4OTRjZTQ0MWJlMTU4
N2I5OWFlMzY5MmE3Li5kODkyODEyMjVmNjJkY2UzYTEwNmMzZWQzYzAyZTdlZWYxODg5M2JkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaApAQCAtMjMsMTAgKzIzLDE1IEBACiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNp
bmNsdWRlICJHdGtBZGp1c3RtZW50V2F0Y2hlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBvcHVwTWVu
dS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDMsMjEgKzQ4LDIxIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lu
ZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBXZWJD
b3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lu
ZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgd2lu
ZG93UmVjdCgpOwogCi0gICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHBhZ2VSZWN0
KCk7CisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCk7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIGZvY3VzKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1bmZvY3VzKCk7CiAKLSAg
ICAgICAgdmlydHVhbCBib29sIGNhblRha2VGb2N1cyhXZWJDb3JlOjpGb2N1c0RpcmVjdGlvbik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoV2ViQ29yZTo6Rm9jdXNEaXJlY3Rpb24p
OworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbik7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGZvY3VzZWROb2RlQ2hhbmdlZChXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBmb2N1c2VkRnJhbWVDaGFuZ2VkKFdlYkNvcmU6OkZyYW1lKik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSopOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZm9jdXNlZEZyYW1lQ2hhbmdlZChGcmFtZSopOwogCi0gICAgICAgIHZpcnR1YWwg
V2ViQ29yZTo6UGFnZSogY3JlYXRlV2luZG93KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29y
ZTo6RnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgY29u
c3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYpOworICAgICAgICB2aXJ0dWFsIFBhZ2UqIGNy
ZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dG
ZWF0dXJlcyYsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHNob3coKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuTW9kYWwoKTsKQEAgLTc3LDk2
ICs4MiwxMDMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFJlc2l6YWJsZShib29sKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29u
c29sZShXZWJDb3JlOjpNZXNzYWdlU291cmNlIHNvdXJjZSwgV2ViQ29yZTo6TWVzc2FnZVR5cGUg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
TWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VJRCk7Ci0KKyAgICAgICAgdmlydHVhbCB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBj
b25zdCBXVEY6OlN0cmluZyYgc291cmNlSUQpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuUnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBydW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWwoY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lKik7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGNsb3NlV2luZG93U29vbigpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBy
dW5KYXZhU2NyaXB0QWxlcnQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYpOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViQ29yZTo6RnJhbWUq
LCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlw
dFByb21wdChXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBXVEY6OlN0cmluZyYgZGVmYXVsdFZhbHVlLCBXVEY6OlN0cmluZyYgcmVzdWx0KTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChGcmFtZSosIGNvbnN0IFdURjo6U3Ry
aW5nJik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSos
IGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0
UHJvbXB0KEZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdURjo6U3Ry
aW5nJiBkZWZhdWx0VmFsdWUsIFdURjo6U3RyaW5nJiByZXN1bHQpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBXVEY6OlN0cmluZyYpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwotICAgICAgICB2aXJ0dWFsIFdl
YkNvcmU6OktleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCk7CisgICAgICAgIHZpcnR1YWwg
S2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsKIAotICAgICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJ
bnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CiAjaWYgRU5BQkxFKFJFR0lTVEVSX1BS
T1RPQ09MX0hBTkRMRVIpIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJQcm90b2NvbEhh
bmRsZXIoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6
U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsgCiAjZW5kaWYgCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgYm9vbCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29u
dGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0
YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwUmVjdCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlV2luZG93
KGNvbnN0IEludFJlY3QmLCBib29sKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVD
b250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IEludFJlY3QmLCBib29s
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7
CiAKLSAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIEludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0
JikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFn
ZUNsaWVudCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdl
ZChXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXpl
JikgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdl
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChj
b25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0
UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHNldFRvb2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBUZXh0
RGlyZWN0aW9uKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFE
aWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShj
b25zdCBWaWV3cG9ydEFyZ3VtZW50cyYpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBw
cmludChXZWJDb3JlOjpGcmFtZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUq
KTsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFdU
Rjo6U3RyaW5nJik7CiAjZW5kaWYKICAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBD
YWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwg
aW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qLCBpbnQ2NF90IHRvdGFs
U3BhY2VOZWVkZWQpOwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2hvd0NvbnRleHRNZW51KCkgeyB9CiAjZW5kaWYKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNo
b29zZXI+KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVj
dG9yPFdURjo6U3RyaW5nPiYsIFdlYkNvcmU6OkZpbGVJY29uTG9hZGVyKik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6
OlN0cmluZz4mLCBGaWxlSWNvbkxvYWRlciopOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3Jt
U3RhdGVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Tm9kZSopIHsgfQorICAgICAgICB2aXJ0dWFs
IHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0KIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IHsg
fQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZy
YW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShXZWJD
b3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0IHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwg
R2VvbG9jYXRpb24qKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7CiAKICAgICAgICAg
dmlydHVhbCBib29sIHNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCk7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGly
ZWN0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpQb3B1cE1lbnU+
IGNyZWF0ZVBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gY3JlYXRlU2Vh
cmNoUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCopIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8UG9wdXBNZW51PiBjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xp
ZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+
IGNyZWF0ZVNlYXJjaFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKICNpZiBFTkFC
TEUoVklERU8pCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2Rl
KGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNj
cmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBl
eGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxTY3JlZW5Gb3JFbGVt
ZW50KGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqLCBib29sIHdpdGhLZXlib2FyZCk7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQq
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3Jl
OjpFbGVtZW50Kik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxTY3JlZW5Gb3JF
bGVtZW50KGNvbnN0IEVsZW1lbnQqLCBib29sIHdpdGhLZXlib2FyZCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CiAjZW5kaWYKIAot
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFdlYkNvcmU6
OlNjcm9sbERpcmVjdGlvbikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRs
ZXJzQ2hhbmdlZCh1bnNpZ25lZCkgeyB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29y
ZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsKICAg
ICAgICAgdmlydHVhbCBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdU
cmlnZ2VycygpIGNvbnN0OwogI2VuZGlmIAogCisgICAgICAgIHZvaWQgcGVyZm9ybUFsbFBlbmRp
bmdTY3JvbGxzKCk7CisgICAgICAgIHZvaWQgcGFpbnQoVGltZXI8Q2hyb21lQ2xpZW50PiopOwor
ICAgICAgICB2b2lkIHdpZGdldFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG9sZFdpZGdldFNp
emUsIEludFNpemUgbmV3U2l6ZSk7CisKICAgICBwcml2YXRlOgogICAgICAgICBXZWJLaXRXZWJW
aWV3KiBtX3dlYlZpZXc7CiAgICAgICAgIEd0a0FkanVzdG1lbnRXYXRjaGVyIG1fYWRqdXN0bWVu
dFdhdGNoZXI7Ci0gICAgICAgIFdlYkNvcmU6OktVUkwgbV9ob3ZlcmVkTGlua1VSTDsKKyAgICAg
ICAgS1VSTCBtX2hvdmVyZWRMaW5rVVJMOwogICAgICAgICB1bnNpZ25lZCBpbnQgbV9jbG9zZVNv
b25UaW1lcjsKLSAgICAgICAgYm9vbCBtX3BlbmRpbmdTY3JvbGxJbnZhbGlkYXRpb25zOworCisg
ICAgICAgIFRpbWVyIDxDaHJvbWVDbGllbnQ+IG1fZGlzcGxheVRpbWVyOworICAgICAgICBSZWdp
b24gbV9kaXJ0eVJlZ2lvbjsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1fcmVjdHNUb1Njcm9s
bDsKKyAgICAgICAgVmVjdG9yPEludFNpemU+IG1fc2Nyb2xsT2Zmc2V0czsKKyAgICAgICAgZG91
YmxlIG1fbGFzdERpc3BsYXlUaW1lOworICAgICAgICB1aW50IG1fcmVwYWludFNvb25Tb3VyY2VJ
ZDsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAKaW5kZXggZTA0NTZmMzk1ZGEzNmEzZmRmMDUxMzYzMmQwODg5YjgxZTNmMmRjOC4uNjE2ODc2
ZTZjYjNiYzJlYzY4OTU5ZGE5ZTk4MDFlMzUxYTc3ZmVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
QmFja0ZvcndhcmRMaXN0SW1wbC5oIgorI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAi
Q2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCkBAIC02NCw3ICs2NSw2IEBACiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNsaWVudEd0ay5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNjE5LDEwOCArNjE5LDM5IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wX2lkLCBjb25zdCBHCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRD
b2FsZXNjZShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCBjUmVjdFRocmVzaG9sZCA9IDEwOwotICAgIGNv
bnN0IGZsb2F0IGNXYXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAuNzVmOwotICAgIGJvb2wgdXNlVW5p
b25lZFJlY3QgPSAocmVjdHMuc2l6ZSgpIDw9IDEpIHx8IChyZWN0cy5zaXplKCkgPiBjUmVjdFRo
cmVzaG9sZCk7Ci0gICAgaWYgKHVzZVVuaW9uZWRSZWN0KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAvLyBBdHRlbXB0IHRvIGd1ZXNzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhl
IHVuaW9uZWQgcmVjdCBvciB0aGUgaW5kaXZpZHVhbCByZWN0cy4KLSAgICAvLyBXZSBkbyB0aGlz
IGJ5IGNvbXB1dGluZyB0aGUgcGVyY2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgdW5p
b24uICBJZiB0aGF0IHdhc3RlZCBzcGFjZQotICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3
aWxsIGRvIGluZGl2aWR1YWwgcmVjdCBwYWludGluZyBpbnN0ZWFkLgotICAgIGZsb2F0IHVuaW9u
UGl4ZWxzID0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkpOwotICAgIGZsb2F0IHNpbmds
ZVBpeGVscyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgc2luZ2xlUGl4ZWxzICs9IHJlY3RzW2ldLndpZHRoKCkgKiByZWN0c1tpXS5o
ZWlnaHQoKTsKLSAgICBmbG9hdCB3YXN0ZWRTcGFjZSA9IDEgLSAoc2luZ2xlUGl4ZWxzIC8gdW5p
b25QaXhlbHMpOwotICAgIGlmICh3YXN0ZWRTcGFjZSA8PSBjV2FzdGVkU3BhY2VUaHJlc2hvbGQp
Ci0gICAgICAgIHVzZVVuaW9uZWRSZWN0ID0gdHJ1ZTsKLSAgICByZXR1cm4gdXNlVW5pb25lZFJl
Y3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhaW50V2ViVmlldyhGcmFtZSogZnJhbWUsIGdib29sZWFu
IHRyYW5zcGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0LCBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQotewotICAgIGJvb2wgY29hbGVz
Y2UgPSB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnNpemUoKSA+IDApCi0gICAgICAgIGNvYWxlc2Nl
ID0gc2hvdWxkQ29hbGVzY2UoY2xpcFJlY3QsIHJlY3RzKTsKLQotICAgIGlmIChjb2FsZXNjZSkg
ewotICAgICAgICBjb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBpZiAodHJhbnNwYXJl
bnQpCi0gICAgICAgICAgICBjb250ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIGZy
YW1lLT52aWV3KCktPnBhaW50KCZjb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7IGkrKykgewotICAgICAg
ICAgICAgSW50UmVjdCByZWN0ID0gcmVjdHNbaV07Ci0gICAgICAgICAgICBjb250ZXh0LnNhdmUo
KTsKLSAgICAgICAgICAgIGNvbnRleHQuY2xpcChyZWN0KTsKLSAgICAgICAgICAgIGlmICh0cmFu
c3BhcmVudCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLSAgICAg
ICAgICAgIGZyYW1lLT52aWV3KCktPnBhaW50KCZjb250ZXh0LCByZWN0KTsKLSAgICAgICAgICAg
IGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5zYXZl
KCk7Ci0gICAgY29udGV4dC5jbGlwKGNsaXBSZWN0KTsKLSAgICBmcmFtZS0+cGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPmRyYXdIaWdobGlnaHQoY29udGV4dCk7Ci0gICAgY29udGV4dC5y
ZXN0b3JlKCk7Ci19CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKIHN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfd2ViX3ZpZXdfZXhwb3NlX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4
cG9zZSogZXZlbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3aWRnZXQpOwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+
cHJpdjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPm1haW5GcmFtZSgpOwot
ICAgIGlmIChmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkgJiYgZnJhbWUtPnZpZXcoKSkgewotICAg
ICAgICBmcmFtZS0+dmlldygpLT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZl
KCk7Ci0KLSAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2Ny
ZWF0ZShldmVudC0+d2luZG93KSk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjci5nZXQo
KSk7Ci0gICAgICAgIGdjLnNldEdka0V4cG9zZUV2ZW50KGV2ZW50KTsKLQotICAgICAgICBpbnQg
cmVjdENvdW50OwotICAgICAgICBHT3duUHRyPEdka1JlY3RhbmdsZT4gcmVjdHM7Ci0gICAgICAg
IGdka19yZWdpb25fZ2V0X3JlY3RhbmdsZXMoZXZlbnQtPnJlZ2lvbiwgJnJlY3RzLm91dFB0cigp
LCAmcmVjdENvdW50KTsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IHBhaW50UmVjdHM7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50OyBpKyspCi0gICAgICAgICAgICBwYWlu
dFJlY3RzLmFwcGVuZChJbnRSZWN0KHJlY3RzLmdldCgpW2ldKSk7CisgICAgaW50IHJlY3RDb3Vu
dDsKKyAgICBHT3duUHRyPEdka1JlY3RhbmdsZT4gcmVjdHM7CisgICAgZ2RrX3JlZ2lvbl9nZXRf
cmVjdGFuZ2xlcyhldmVudC0+cmVnaW9uLCAmcmVjdHMub3V0UHRyKCksICZyZWN0Q291bnQpOwog
Ci0gICAgICAgIHBhaW50V2ViVmlldyhmcmFtZSwgcHJpdi0+dHJhbnNwYXJlbnQsIGdjLCBzdGF0
aWNfY2FzdDxJbnRSZWN0PihldmVudC0+YXJlYSksIHBhaW50UmVjdHMpOworICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdykpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50OyBpKyspIHsKKyAgICAgICAgY29weVJl
Y3RGcm9tQ2Fpcm9TdXJmYWNlVG9Db250ZXh0KFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2
LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3IuZ2V0KCksIEludFNpemUoKSwgSW50UmVjdChyZWN0cy5nZXQo
KVtpXSkpOwogICAgIH0KLQogICAgIHJldHVybiBGQUxTRTsKIH0KICNlbHNlCiBzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X3dlYl92aWV3X2RyYXcoR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNy
KQogewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0
KTsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotCiAgICAgaWYgKCFnZGtfY2Fpcm9fZ2V0X2NsaXBfcmVj
dGFuZ2xlKGNyLCAmY2xpcFJlY3QpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpICYmIGZyYW1lLT52aWV3KCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGdjKGNyKTsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gY2xpcFJlY3Q7Ci0gICAgICAgIGNh
aXJvX3JlY3RhbmdsZV9saXN0X3QqIHJlY3RMaXN0ID0gY2Fpcm9fY29weV9jbGlwX3JlY3Rhbmds
ZV9saXN0KGNyKTsKLQotICAgICAgICBmcmFtZS0+dmlldygpLT51cGRhdGVMYXlvdXRBbmRTdHls
ZUlmTmVlZGVkUmVjdXJzaXZlKCk7Ci0KLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwot
ICAgICAgICBpZiAoIXJlY3RMaXN0LT5zdGF0dXMgJiYgcmVjdExpc3QtPm51bV9yZWN0YW5nbGVz
ID4gMCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0TGlzdC0+bnVtX3Jl
Y3RhbmdsZXM7IGkrKykKLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50
UmVjdChGbG9hdFJlY3QocmVjdExpc3QtPnJlY3RhbmdsZXNbaV0pKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcGFpbnRXZWJWaWV3KGZyYW1lLCBwcml2LT50cmFuc3BhcmVudCwgZ2MsIHJlY3QsIHJl
Y3RzKTsKLQorICAgIGNhaXJvX3JlY3RhbmdsZV9saXN0X3QqIHJlY3RMaXN0ID0gY2Fpcm9fY29w
eV9jbGlwX3JlY3RhbmdsZV9saXN0KGNyKTsKKyAgICBpZiAocmVjdExpc3QtPnN0YXR1cyB8fCAh
cmVjdExpc3QtPm51bV9yZWN0YW5nbGVzKSB7CiAgICAgICAgIGNhaXJvX3JlY3RhbmdsZV9saXN0
X2Rlc3Ryb3kocmVjdExpc3QpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAg
VmVjdG9yPEludFJlY3Q+IHJlY3RzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdExpc3Qt
Pm51bV9yZWN0YW5nbGVzOyBpKyspIHsKKyAgICAgICAgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNl
VG9Db250ZXh0KFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5iYWNraW5nU3RvcmUtPmNh
aXJvU3VyZmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3IsIEludFNpemUoKSwgZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdExpc3QtPnJlY3Rh
bmdsZXNbaV0pKSk7CiAgICAgfQorICAgIGNhaXJvX3JlY3RhbmdsZV9saXN0X2Rlc3Ryb3kocmVj
dExpc3QpOwogCiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtOTExLDE0ICs4NDIsMTYgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a0FsbG9jYXRpb24qIGFsbG8KICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmll
d19wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CiAKICAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Ci0KICAg
ICBQYWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKLSAgICBGcmFtZSogZnJhbWUgPSBwYWdlLT5t
YWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT52aWV3KCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBJbnRTaXplIG9sZFNpemU7CisgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKSkgeworICAgICAgICBvbGRTaXplID0gZnJhbWVWaWV3LT5zaXpl
KCk7CisgICAgICAgIGZyYW1lVmlldy0+cmVzaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0
aW9uLT5oZWlnaHQpOworICAgIH0KIAotICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxvY2F0
aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKLSAgICBzdGF0aWNfY2FzdDxXZWJLaXQ6
OkNocm9tZUNsaWVudCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSktPmFkanVzdG1lbnRXYXRj
aGVyKCktPnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnMoKTsKKyAgICBXZWJLaXQ6OkNo
cm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGll
bnQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOworICAgIGNocm9tZUNsaWVudC0+d2lkZ2V0
U2l6ZUNoYW5nZWQob2xkU2l6ZSwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlv
bi0+aGVpZ2h0KSk7CisgICAgY2hyb21lQ2xpZW50LT5hZGp1c3RtZW50V2F0Y2hlcigpLT51cGRh
dGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19ncmFiX2ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0KQpAQCAtMzMzMiw2ICszMjY1LDgg
QEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKICAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPndlYlZpZXcgPSB3ZWJWaWV3
OwogCiAgICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURHRVQod2ViVmlldyksIFRS
VUUpOworICAgIGd0a193aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChHVEtfV0lER0VUKHdlYlZp
ZXcpLCBGQUxTRSk7CisKICAgICBwcml2LT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdl
YmtpdF93ZWJfZnJhbWVfbmV3KHdlYlZpZXcpKTsKICAgICBwcml2LT5sYXN0UG9wdXBYUG9zaXRp
b24gPSBwcml2LT5sYXN0UG9wdXBZUG9zaXRpb24gPSAtMTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAppbmRleCA5OTQ0NGFhM2E4NGYxZjkx
ODBlZWI0ODJmYzU4ZGUzZmUxYWU2YzRlLi41MWU1ZThlNjIzZDJjOGI1ODk5MGE4Mzk5Y2I5ZGQy
ZDBjMTRmNzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlld3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
d3ByaXZhdGUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkdPd25QdHIuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJXaWRn
ZXRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQyLDYgKzQzLDcgQEAgZXh0ZXJuICJDIiB7CiB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgV2ViS2l0V2ViVmlld1ByaXZhdGU7CiBzdHJ1
Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZTsK
KyAgICBPd25QdHI8V2ViQ29yZTo6V2lkZ2V0QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAg
ICAgR1JlZlB0cjxXZWJLaXRXZWJTZXR0aW5ncz4gd2ViU2V0dGluZ3M7CiAgICAgR1JlZlB0cjxX
ZWJLaXRXZWJJbnNwZWN0b3I+IHdlYkluc3BlY3RvcjsKICAgICBHUmVmUHRyPFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlcz4gdmlld3BvcnRBdHRyaWJ1dGVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112096</attachid>
            <date>2011-10-22 12:40:43 -0700</date>
            <delta_ts>2011-10-24 06:09:32 -0700</delta_ts>
            <desc>Patch fixing paint before realize</desc>
            <filename>bug-70213-20111022124043.patch</filename>
            <type>text/plain</type>
            <size>40680</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1NjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2Y2ZjY2QyZGU1M2U1NmRj
YTBhZmZiYzg1M2U5ZTNlZTViZWQ0YTkyLi42NjlhOTMxMGNlYWFlNmQ2ZmQ0ZTBiYmRmZmI5NDA1
MzZhYTZjNGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMTAtMTYgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFN3aXRj
aCB0byBhIGJhY2tpbmcgc3RvcmUgYXBwcm9hY2ggZm9yIHBhaW50aW5nIFdlYktpdFdlYlZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjEzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBUaGUgY2hhbmdlcyB0byBXZWJDb3JlIHNob3VsZCBub3QgY2hhbmdlCisgICAgICAgIGJl
aGF2aW9yLiBUaGUgY2hhbmdlcyBpbiBXZWJLaXQgYXJlIGNvdmVyZWQgYnkgZXhpc3RpbmcKKyAg
ICAgICAgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldEJhY2tpbmdTdG9yZTo6c2l6ZSk6IEFkZGVk
IHRoaXMgZ2V0dGVyIGZvciB0aGUgc2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmVDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRCYWNraW5n
U3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZSk6IEluaXRpYWxpemUgc2l6ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQpOiBBZGRlZCB0aGlzIG5ldyBo
ZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVy
KTogVXNlIHRoZSBuZXcgaGVscGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tp
bmdTdG9yZVgxMS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6Oldp
ZGdldEJhY2tpbmdTdG9yZSk6IEluaXRpYWxpemUgdGhlIHNpemUuCisKIDIwMTEtMTAtMTUgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEF2
b2lkIHVuZWNlc3NhcmlseSBjYWxsaW5nIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSBvbiBwbHVn
aW4gd2lkZ2V0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGYzOGQ1YzE5ZTdmZTVhYWY5OTRhODgzNzc5
YmU1Nzg2ZmZlNTMzOTAuLjhjYzg3YzRhMmNmZmI4MTY3YTM5YWM2ODVjMjgyNTFkOWQ4ZjlkNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0xMC0xNiAgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU3dpdGNoIHRv
IGEgYmFja2luZyBzdG9yZSBhcHByb2FjaCBmb3IgcGFpbnRpbmcgV2ViS2l0V2ViVmlldworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYWludCB0aGUgV2Vi
VmlldyBpbnRvIGEgYmFja2luZyBzdG9yZS4gVGhpcyBwcmV2ZW50cyBleHBvc2UgZXZlbnRzIGZy
b20KKyAgICAgICAgdHJpZ2dlcmluZyBhIGxheW91dCwgbWFraW5nIHNjcm9sbGluZyBhbmQgcmVz
aXppbmcgbXVjaCBzbW9vdGhlci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6Q2hyb21lQ2xpZW50
KTogSW5pdGlhbGl6ZSBuZXcgbWVtYmVycy4KKyAgICAgICAgKFdlYktpdDo6cmVwYWludEV2ZXJ5
dGhpbmdTb29uVGltZW91dCk6IEFkZGVkIHRoaXMgaGVscGVyIHdoaWNoIHJlcGFpbnRzCisgICAg
ICAgIHRoZSBXZWJWaWV3IG1vcmUgcXVpY2tseSBkdXJpbmcgcmVzaXplIGV2ZW50cy4KKyAgICAg
ICAgKFdlYktpdDo6Y2xpcE91dE9sZFdpZGdldEFyZWEpOiBDbGlwcyBvdXQgdGhlIG9sZCB3aWRn
ZXQgYXJlYSwgc28gdGhhdCB3ZQorICAgICAgICBjYW4gY2xlYXIgb3V0IGludmFsaWQgcGl4ZWxz
IHdoZW4gZ3Jvd2luZyB0aGUgd2lkZ2V0IGludG8gYSBwcmUtZXhpc3RpbmcKKyAgICAgICAgYmFj
a2luZyBzdG9yZS4KKyAgICAgICAgKFdlYktpdDo6Y2xlYXJFdmVyeXdoZXJlSW5CYWNraW5nU3Rv
cmUpOiBDbGVhciBvdXQgdGhlIGVudGlyZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViS2l0
OjpDaHJvbWVDbGllbnQ6OndpZGdldFNpemVDaGFuZ2VkKTogSGFuZGxlIHdpZGdldCBzaXplIGNo
YW5nZXMgYnkKKyAgICAgICAgaW50ZWxsaWdlbnRseSByZXNpemluZyBvciByZXVzaW5nIHRoZSBl
eGlzdGluZyBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViS2l0Ojpjb2FsZXNjZVJlY3RzSWZQ
b3NzaWJsZSk6IE1vdmVkIHRoaXMgbWV0aG9kIGZyb20gd2Via2l0d2Vidmlldy5jcHAuCisgICAg
ICAgIChXZWJLaXQ6OnBhaW50V2ViVmlldyk6IE1vdmVkIHRoaXMgbWV0aG9kIGZyb20gd2Via2l0
d2Vidmlldy5jcHAuCisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6cGVyZm9ybUFsbFBl
bmRpbmdTY3JvbGxzKTogSWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCisgICAgICAgIHNjcm9sbGlu
ZyBvcGVyYXRpb25zLCBwZXJmb3JtIHRoZW0gYnkgc2Nyb2xsaW5nIHRoZSBiYWNraW5nIHN0b3Jl
LgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnBhaW50KTogQWRkZWQgdGhpcyB0aW1l
ciBjYWxsYmFjaywgd2hpY2ggcGFpbnRzIHRoZQorICAgICAgICBXZWJWaWV3IGFmdGVyIGEgc2hv
cnQgdGltZW91dC4KKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjppbnZhbGlkYXRlV2lu
ZG93KTogTm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlIGFueSBsb25nZXIuCisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KTogTm93IHVu
aXRlIHRoZSByZWN0IHdpdGgKKyAgICAgICAgdGhlIGV4aXN0aW5nIGRpcnR5IHJlZ2lvbiBhbmQg
cXVldWUgdGhlIHBhaW50IHRpbWVvdXQuCisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6
c2Nyb2xsKTogTm93IGp1c3QgcXVldWUgYSBzY3JvbGwgZXZlbnQgaW4gdGhlIHJlcGFpbnQgdGlt
ZW91dC4KKyAgICAgICAgSW50ZWxsaWdlbnRseSBjYWxjdWxhdGUgdGhlIGFyZWEgdG8gbW92ZSBh
bmQgdGhlIGRpcnR5IGFyZWEgdXNpbmcgY29kZSBkZXJpdmVkCisgICAgICAgIGZyb20gV2ViS2l0
Mi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaDogQWRkZWQgbmV3
IG1ldGhvZCBkZWZpbml0aW9ucyBhbmQgYWxzbyB1c2UKKyAgICAgICAgdGhlIFdlYkNvcmUgbmFt
ZXNwYWNlIHRvIGF2b2lkIGxvdHMgb2YgdXNlcyBvZiAiV2ViQ29yZTo6Ii4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhdyk6
IE5vdyBqdXN0IGJsaXQgdGhlIGJhY2tpbmcgc3RvcmUgaW50byB0aGUgd2lkZ2V0LgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2V4cG9zZSk6IERpdHRvLgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X3NpemVfYWxsb2NhdGUpOiBMZXQgdGhlIENocm9tZUNsaWVudCBrbm93IHRoZSB3aWRnZXQg
c2l6ZSBjaGFuZ2VkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXQpOiBUdXJuIG9mZiBH
REsgZG91YmxlIGJ1ZmZlcmluZyBhcyB3ZSBoYXZlIG91ciBvd24gZG91YmxlCisgICAgICAgIGJ1
ZmZlci4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQWRkIHRoZSBi
YWNraW5nIHN0b3JlIG1lbWJlci4KKwogMjAxMS0xMC0xNSAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gR3RrQWRqdXN0bWVudCB3YXRjaGVy
IHVwZGF0ZXMgYWRqdXN0bWVudHMgdG9vIGxhemlseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3RvcmUuaAppbmRleCBlMzdlOTllNjE3MzUzNWYy
MTJkYjA4NzAwZTkyOWJmN2U5YWJkYjM2Li45ODkzODYyMzMwNGU0YzVjNjliZjg1ZjYyZjIzYWE0
MGY0MWQ1ZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRn
ZXRCYWNraW5nU3RvcmUuaApAQCAtNTEsMTEgKzUxLDEzIEBAIHB1YmxpYzoKICAgICB+V2lkZ2V0
QmFja2luZ1N0b3JlKCk7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2UoKTsKICAg
ICB2b2lkIHNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBz
Y3JvbGxPZmZzZXQpOworICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KIAogcHJpdmF0ZToKICAgICBXaWRnZXRCYWNraW5nU3RvcmUoUGxhdGZvcm1XaWRnZXQsIGNv
bnN0IEludFNpemUmKTsKIAogICAgIE93blB0cjxXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlPiBt
X3ByaXZhdGU7CisgICAgSW50U2l6ZSBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNr
aW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRC
YWNraW5nU3RvcmVDYWlyby5jcHAKaW5kZXggYjk2Nzg0YTIzYjViMDRmOGQ3YzE3ODBiNzk4OGQ0
ZDM1Njg5ZWFhOS4uZGZhNzNlYzljOWYyMTBhYjZkNjAwZjkwY2YxM2FmMTJjZDUyZDU5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdldEJhY2tp
bmdTdG9yZUNhaXJvLmNwcApAQCAtNzIsNiArNzIsNyBAQCBQYXNzT3duUHRyPFdpZGdldEJhY2tp
bmdTdG9yZT4gV2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0
LAogCiBXaWRnZXRCYWNraW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShQbGF0Zm9ybVdpZGdl
dCB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgOiBtX3ByaXZhdGUoV2lkZ2V0QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6Y3JlYXRlKHdpZGdldCwgc2l6ZSkpCisgICAgLCBtX3NpemUoc2l6
ZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCmluZGV4IDE2MzIyNTlhNTY2MjgzMGQ4MDFjNDlh
ZDE2MTFmZmU2NmMwZTg0YTEuLmE2NDAzNTdmMjVhMWI3YWNhMGE2MzExNzZjMGJlOTdkYTcwNDI1
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb1V0aWxpdGllcy5jcHAKQEAgLTE4NiwxMiArMTg2LDE3IEBAIFBhc3NSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBv
cmlnaW5hbFN1cmZhCiAgICAgcmV0dXJuIG5ld1N1cmZhY2UucmVsZWFzZSgpOwogfQogCit2b2lk
IGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4dChjYWlyb19zdXJmYWNlX3QqIGZyb20s
IGNhaXJvX3QqIHRvLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKHRvLCBmcm9tLCBvZmZzZXQud2lkdGgo
KSwgb2Zmc2V0LmhlaWdodCgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUodG8sIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxsKHRv
KTsKK30KKwogdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGNhaXJvX3N1cmZh
Y2VfdCogZnJvbSwgY2Fpcm9fc3VyZmFjZV90KiB0bywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRv
cHRSZWYoY2Fpcm9fY3JlYXRlKHRvKSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNv
bnRleHQuZ2V0KCksIGZyb20sIG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOwotICAg
IGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LmdldCgpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fZmlsbChjb250ZXh0LmdldCgpKTsK
KyAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQoZnJvbSwgY29udGV4dC5nZXQo
KSwgb2Zmc2V0LCByZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmgKaW5kZXggM2Q2ZWI3OWY2ZWRhOTFhYjYyNmM5NmJiMTUxMDBjZmY0YjNiZWI4Mi4uMzQ0YmM0
OWExNzBjZjEwNzgyM2MzYTdiMDJkM2ZmNzkwMGZhMmM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCkBAIC00
OSw3ICs0OSw5IEBAIGNhaXJvX29wZXJhdG9yX3QgdG9DYWlyb09wZXJhdG9yKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKTsKIHZvaWQgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjYWlyb190KiBjciwg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNhaXJvX29wZXJhdG9yX3Qgb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwogUGFz
c1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlDYWlyb0ltYWdlU3VyZmFjZShjYWlyb19zdXJm
YWNlX3QqKTsKLXZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihjYWlyb19zdXJm
YWNlX3QqIGZyb20sIGNhaXJvX3N1cmZhY2VfdCogdG8sIGNvbnN0IEludFNpemUmLCBjb25zdCBJ
bnRSZWN0Jik7CisKK3ZvaWQgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNlVG9Db250ZXh0KGNhaXJv
X3N1cmZhY2VfdCogZnJvbSwgY2Fpcm9fdCogdG8sIGNvbnN0IEludFNpemUmIG9mZnNldCwgY29u
c3QgSW50UmVjdCYpOwordm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGNhaXJv
X3N1cmZhY2VfdCogZnJvbSwgY2Fpcm9fc3VyZmFjZV90KiB0bywgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0LCBjb25zdCBJbnRSZWN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgx
MS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3Jl
WDExLmNwcAppbmRleCBhZDViYWE1ZDAyYmVhNWYxZDVmNGQ2MjQxOTNiNWNlNzc5Mzg5Yzk2Li4x
YjEzYjA2NjZjYjFkYWQ0ZjU1ZTUwYmFmNjY2YjFiYjYxNjc0NDkzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNw
cApAQCAtNzcsNiArNzcsNyBAQCBQYXNzT3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZT4gV2lkZ2V0
QmFja2luZ1N0b3JlOjpjcmVhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbgogCiBXaWRnZXRCYWNr
aW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKICAgICA6IG1fcHJpdmF0ZShXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlOjpj
cmVhdGUod2lkZ2V0LCBzaXplKSkKKyAgICAsIG1fc2l6ZShzaXplKQogewogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApp
bmRleCBmMWE1N2M2NzQzYmVhZDk0YWExYjVhZmEzMWViYTZhN2E2NWMxMDgxLi42Y2U4YmIzOTA1
ZTU0MWY2ZTU1YzQ3MzU5NmQ5M2NhMWNmNmRjYTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiSWNvbi5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25B
Y3Rpb24uaCIKQEAgLTQ2LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUd0ay5oIgor
I2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51R3RrLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5o
IgpAQCAtNjEsNiArNjMsNyBAQAogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxnbGliL2dp
MThuLWxpYi5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCkBAIC03NSw3ICs3OCw5IEBAIENocm9tZUNsaWVudDo6Q2hyb21lQ2xpZW50KFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fYWRq
dXN0bWVudFdhdGNoZXIod2ViVmlldykKICAgICAsIG1fY2xvc2VTb29uVGltZXIoMCkKLSAgICAs
IG1fcGVuZGluZ1Njcm9sbEludmFsaWRhdGlvbnMoZmFsc2UpCisgICAgLCBtX2Rpc3BsYXlUaW1l
cih0aGlzLCAmQ2hyb21lQ2xpZW50OjpwYWludCkKKyAgICAsIG1fbGFzdERpc3BsYXlUaW1lKDAp
CisgICAgLCBtX3JlcGFpbnRTb29uU291cmNlSWQoMCkKIHsKICAgICBBU1NFUlQobV93ZWJWaWV3
KTsKIH0KQEAgLTM3Nyw4MiArMzgyLDIzMyBAQCB2b2lkIENocm9tZUNsaWVudDo6cmVnaXN0ZXJQ
cm90b2NvbEhhbmRsZXIoY29uc3QgU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFN0cmluZyYgYgogfSAK
ICNlbmRpZiAKIAotdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVXaW5kb3coY29uc3QgSW50
UmVjdCYsIGJvb2wgaW1tZWRpYXRlKQorc3RhdGljIGdib29sZWFuIHJlcGFpbnRFdmVyeXRoaW5n
U29vblRpbWVvdXQoQ2hyb21lQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgLy8gSWYgd2UndmUgaW52
YWxpZGF0ZWQgcmVnaW9ucyBmb3Igc2Nyb2xsaW5nLCBmb3JjZSBHREsgdG8gcHJvY2VzcyB0aG9z
ZSBpbnZhbGlkYXRpb25zCi0gICAgLy8gbm93LiBUaGlzIHdpbGwgYWxzbyBjYXVzZSBjaGlsZCB3
aW5kb3dzIHRvIG1vdmUgcmlnaHQgYXdheS4gVGhpcyBwcmV2ZW50cyByZWRyYXcKLSAgICAvLyBh
cnRpZmFjdHMgd2l0aCBjaGlsZCB3aW5kb3dzIChlLmcuIEZsYXNoIHBsdWdpbiBpbnN0YW5jZXMp
LgotICAgIGlmIChpbW1lZGlhdGUgJiYgbV9wZW5kaW5nU2Nyb2xsSW52YWxpZGF0aW9ucykgewot
ICAgICAgICBtX3BlbmRpbmdTY3JvbGxJbnZhbGlkYXRpb25zID0gZmFsc2U7Ci0gICAgICAgIGlm
IChHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1f
d2ViVmlldykpKQotICAgICAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMod2luZG93
LCBUUlVFKTsKLSAgICB9CisgICAgY2xpZW50LT5wYWludCgwKTsKKyAgICByZXR1cm4gRkFMU0U7
CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29u
c3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCitzdGF0aWMgdm9pZCBjbGlw
T3V0T2xkV2lkZ2V0QXJlYShjYWlyb190KiBjciwgY29uc3QgSW50U2l6ZSYgb2xkU2l6ZSwgY29u
c3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBjYWlyb19tb3ZlX3RvKGNyLCBvbGRTaXplLndp
ZHRoKCksIDApOworICAgIGNhaXJvX2xpbmVfdG8oY3IsIG5ld1NpemUud2lkdGgoKSwgMCk7Cisg
ICAgY2Fpcm9fbGluZV90byhjciwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpKTsK
KyAgICBjYWlyb19saW5lX3RvKGNyLCAwLCBuZXdTaXplLmhlaWdodCgpKTsKKyAgICBjYWlyb19s
aW5lX3RvKGNyLCAwLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICBjYWlyb19saW5lX3RvKGNyLCBv
bGRTaXplLndpZHRoKCksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgo
Y3IpOworICAgIGNhaXJvX2NsaXAoY3IpOworfQorCitzdGF0aWMgdm9pZCBjbGVhckV2ZXJ5d2hl
cmVJbkJhY2tpbmdTdG9yZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjYWlyb190KiBjcikKK3sK
KyAgICAvLyBUaGUgc3RyYXRlZ3kgaGVyZSBpcyB0byBxdWlja2x5IGRyYXcgd2hpdGUgaW50byB0
aGlzIG5ldyBjYW52YXMsIHNvIHRoYXQKKyAgICAvLyB3aGVuIGEgdXNlciBxdWlja2x5IHJlc2l6
ZXMgdGhlIFdlYlZpZXcgaW4gYW4gZW52aXJvbm1lbnQgdGhhdCBoYXMgb3BhcXVlCisgICAgLy8g
cmVzaXppbmcgKGxpa2UgR25vbWUgU2hlbGwpLCB0aGVyZSBhcmUgbm8gZHJhd2luZyBhcnRpZmFj
dHMuCisgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVudCkgeworICAgICAgICBjYWly
b19zZXRfc291cmNlX3JnYihjciwgMSwgMSwgMSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRv
cihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2Fpcm9f
c2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQo
Y3IpOworfQorCit2b2lkIENocm9tZUNsaWVudDo6d2lkZ2V0U2l6ZUNoYW5nZWQoY29uc3QgSW50
U2l6ZSYgb2xkV2lkZ2V0U2l6ZSwgSW50U2l6ZSBuZXdTaXplKQogewotICAgIEdka1JlY3Rhbmds
ZSByZWN0ID0gdXBkYXRlUmVjdDsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRf
Z2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgIFdpZGdldEJhY2tpbmdTdG9y
ZSogYmFja2luZ1N0b3JlID0gbV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUuZ2V0KCk7CisK
KyAgICAvLyBHcm93IHRoZSBiYWNraW5nIHN0b3JlIGJ5IGF0IGxlYXN0IDEuNSB0aW1lcyB0aGUg
Y3VycmVudCBzaXplLiBUaGlzIHByZXZlbnRzCisgICAgLy8gbG90cyBvZiB1bm5lY2Vzc2FyeSBh
bGxvY2F0aW9ucyBkdXJpbmcgYW4gb3BhcXVlIHJlc2l6ZS4KKyAgICBpZiAoYmFja2luZ1N0b3Jl
KSB7CisgICAgICAgIGNvbnN0IEludFNpemUmIG9sZFNpemUgPSBiYWNraW5nU3RvcmUtPnNpemUo
KTsKKyAgICAgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkKKyAgICAg
ICAgICAgIG5ld1NpemUuc2V0V2lkdGgoc3RkOjptYXgobmV3U2l6ZS53aWR0aCgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG9sZFNpemUud2lkdGgoKSAqIDEuNSkpKTsKKyAgICAgICAgaWYgKG5ld1NpemUu
aGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgbmV3U2l6ZS5zZXRIZWln
aHQoc3RkOjptYXgobmV3U2l6ZS5oZWlnaHQoKSwgc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplLmhl
aWdodCgpICogMS41KSkpOworICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBub3QgaGF2ZSBhIGJh
Y2tpbmcgc3RvcmUgYmVmb3JlIG9yIGlmIHRoZSBiYWNraW5nIHN0b3JlIGlzIGdyb3dpbmcsIHdl
IG5lZWQKKyAgICAvLyB0byByZWFsbG9jYXRlIGEgbmV3IG9uZSBhbmQgc2V0IGl0IHVwIHNvIHRo
YXQgd2UgZG9uJ3Qgc2VlIGFydGlmYWN0cyB3aGlsZSByZXNpemluZy4KKyAgICBpZiAoIWJhY2tp
bmdTdG9yZQorICAgICAgICB8fCBuZXdTaXplLndpZHRoKCkgPiBiYWNraW5nU3RvcmUtPnNpemUo
KS53aWR0aCgpCisgICAgICAgIHx8IG5ld1NpemUuaGVpZ2h0KCkgPiBiYWNraW5nU3RvcmUtPnNp
emUoKS5oZWlnaHQoKSkgeworCisgICAgICAgIE93blB0cjxXaWRnZXRCYWNraW5nU3RvcmU+IG5l
d0JhY2tpbmdTdG9yZSA9CisgICAgICAgICAgICBXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6
OmNyZWF0ZShHVEtfV0lER0VUKG1fd2ViVmlldyksIG5ld1NpemUpOworICAgICAgICBSZWZQdHI8
Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3QmFja2luZ1N0b3JlLT5jYWly
b1N1cmZhY2UoKSkpOworCisgICAgICAgIGNsZWFyRXZlcnl3aGVyZUluQmFja2luZ1N0b3JlKG1f
d2ViVmlldywgY3IuZ2V0KCkpOworCisgICAgICAgIC8vIE5vdyB3ZSBjb3B5IHRoZSBvbGQgYmFj
a2luZyBzdG9yZSBpbWFnZSBvdmVyIHRoZSBuZXcgY2xlYXJlZCBzdXJmYWNlIHRvIHByZXZlbnQK
KyAgICAgICAgLy8gYW5ub3lpbmcgZmxhc2hpbmcgYXMgdGhlIHdpZGdldCBncm93cy4gV2UgZG8g
dGhlICJyZWFsIiBwYWludCBpbiBhIHRpbWVvdXQKKyAgICAgICAgLy8gc2luY2Ugd2UgZG9uJ3Qg
d2FudCB0byBibG9jayByZXNpemluZyB0b28gbG9uZy4KKyAgICAgICAgaWYgKGJhY2tpbmdTdG9y
ZSkgeworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBiYWNr
aW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpLCAwLCAwKTsKKyAgICAgICAgICAgIGNhaXJvX3JlY3Rh
bmdsZShjci5nZXQoKSwgMCwgMCwgYmFja2luZ1N0b3JlLT5zaXplKCkud2lkdGgoKSwgYmFja2lu
Z1N0b3JlLT5zaXplKCkuaGVpZ2h0KCkpOworICAgICAgICAgICAgY2Fpcm9fZmlsbChjci5nZXQo
KSk7CisgICAgICAgIH0KKworICAgICAgICBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSA9
IG5ld0JhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IG1fd2Vi
Vmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLmdldCgpOwogCi0gICAgaWYgKHdpbmRvdyAmJiAhdXBk
YXRlUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlY3Qo
d2luZG93LCAmcmVjdCwgRkFMU0UpOwotICAgICAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgZG8g
aW1tZWRpYXRlIHVwZGF0ZXMgc2luY2UgdGhleSBkZWxheSBvdGhlciBVSSBlbGVtZW50cy4KLSAg
ICAgICAgLy9pZiAoaW1tZWRpYXRlKQotICAgICAgICAvLyAgICBnZGtfd2luZG93X3Byb2Nlc3Nf
dXBkYXRlcyh3aW5kb3csIEZBTFNFKTsKKyAgICB9IGVsc2UgaWYgKG9sZFdpZGdldFNpemUud2lk
dGgoKSA8IG5ld1NpemUud2lkdGgoKSB8fCBvbGRXaWRnZXRTaXplLmhlaWdodCgpIDwgbmV3U2l6
ZS5oZWlnaHQoKSkgeworICAgICAgICAvLyBUaGUgd2lkZ2V0IGlzIGdyb3dpbmcsIGJ1dCB3ZSBk
aWQgbm90IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhY2tpbmcgc3RvcmUuCisgICAgICAgIC8vIFdl
IHNob3VsZCBjbGVhciBhbnkgb2xkIGRhdGEgb3V0c2lkZSBvZiB0aGUgb2xkIHdpZGdldCByZWdp
b24uCisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShi
YWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpKSk7CisgICAgICAgIGNsaXBPdXRPbGRXaWRnZXRB
cmVhKGNyLmdldCgpLCBvbGRXaWRnZXRTaXplLCBuZXdTaXplKTsKKyAgICAgICAgY2xlYXJFdmVy
eXdoZXJlSW5CYWNraW5nU3RvcmUobV93ZWJWaWV3LCBjci5nZXQoKSk7CiAgICAgfQorCisgICAg
Ly8gV2UgbmVlZCB0byBmb3JjZSBhIHJlZHJhdyBhbmQgaWdub3JlIHRoZSBmcmFtZXJhdGUgY2Fw
LgorICAgIG1fbGFzdERpc3BsYXlUaW1lID0gMDsKKyAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKElu
dFJlY3QoSW50UG9pbnQoKSwgYmFja2luZ1N0b3JlLT5zaXplKCkpKTsKKworICAgIC8vIFdlYkNv
cmUgdGltZXJzIGJ5IGRlZmF1bHQgaGF2ZSBhIGxvd2VyIHByaW9yaXR5IHdoaWNoIGxlYWRzIHRv
IG1vcmUgYXJ0aWZhY3RzIHdoZW4gb3BhcXVlCisgICAgLy8gcmVzaXplIGlzIG9uLCB0aHVzIHdl
IHVzZSBnX3RpbWVvdXRfYWRkIGhlcmUgdG8gZm9yY2UgYSBoaWdoZXIgdGltZW91dCBwcmlvcml0
eS4KKyAgICBpZiAoIW1fcmVwYWludFNvb25Tb3VyY2VJZCkKKyAgICAgICAgbV9yZXBhaW50U29v
blNvdXJjZUlkID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PihyZXBhaW50RXZlcnl0aGluZ1Nvb25UaW1lb3V0KSwgdGhpcyk7Cit9CisKK3N0YXRpYyB2b2lk
IGNvYWxlc2NlUmVjdHNJZlBvc3NpYmxlKGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBWZWN0b3I8
SW50UmVjdD4mIHJlY3RzKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBjUmVjdFRocmVzaG9s
ZCA9IDEwOworICAgIGNvbnN0IGZsb2F0IGNXYXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAuNzVmOwor
ICAgIGJvb2wgdXNlVW5pb25lZFJlY3QgPSAocmVjdHMuc2l6ZSgpIDw9IDEpIHx8IChyZWN0cy5z
aXplKCkgPiBjUmVjdFRocmVzaG9sZCk7CisgICAgaWYgKCF1c2VVbmlvbmVkUmVjdCkgeworICAg
ICAgICAvLyBBdHRlbXB0IHRvIGd1ZXNzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhl
IHVuaW9uZWQgcmVjdCBvciB0aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAgICAgICAgLy8gV2UgZG8g
dGhpcyBieSBjb21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIgaW4gdGhl
IHVuaW9uLiBJZiB0aGF0IHdhc3RlZCBzcGFjZQorICAgICAgICAvLyBpcyB0b28gbGFyZ2UsIHRo
ZW4gd2Ugd2lsbCBkbyBpbmRpdmlkdWFsIHJlY3QgcGFpbnRpbmcgaW5zdGVhZC4KKyAgICAgICAg
ZmxvYXQgdW5pb25QaXhlbHMgPSAoY2xpcFJlY3Qud2lkdGgoKSAqIGNsaXBSZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgZmxvYXQgc2luZ2xlUGl4ZWxzID0gMDsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHNpbmdsZVBpeGVscyAr
PSByZWN0c1tpXS53aWR0aCgpICogcmVjdHNbaV0uaGVpZ2h0KCk7CisgICAgICAgIGZsb2F0IHdh
c3RlZFNwYWNlID0gMSAtIChzaW5nbGVQaXhlbHMgLyB1bmlvblBpeGVscyk7CisgICAgICAgIGlm
ICh3YXN0ZWRTcGFjZSA8PSBjV2FzdGVkU3BhY2VUaHJlc2hvbGQpCisgICAgICAgICAgICB1c2VV
bmlvbmVkUmVjdCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCF1c2VVbmlvbmVkUmVjdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcmVjdHMuY2xlYXIoKTsKKyAgICByZWN0cy5hcHBlbmQoY2xp
cFJlY3QpOwogfQogCi12b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xv
d1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKK3N0YXRp
YyB2b2lkIHBhaW50V2ViVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBGcmFtZSogZnJhbWUs
IFJlZ2lvbiBkaXJ0eVJlZ2lvbikKIHsKLSAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3co
dXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKLSAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFk
anVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigpOworICAgIGlmICghd2ViVmlldy0+cHJpdi0+
YmFja2luZ1N0b3JlKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVj
dHMgPSBkaXJ0eVJlZ2lvbi5yZWN0cygpOworICAgIGNvYWxlc2NlUmVjdHNJZlBvc3NpYmxlKGRp
cnR5UmVnaW9uLmJvdW5kcygpLCByZWN0cyk7CisgICAgZnJhbWUtPnZpZXcoKS0+dXBkYXRlTGF5
b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGJh
Y2tpbmdTdG9yZUNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUod2ViVmlldy0+cHJpdi0+
YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSkpOworICAgIEdyYXBoaWNzQ29udGV4dCBnYyhi
YWNraW5nU3RvcmVDb250ZXh0LmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
Y3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSByZWN0c1tp
XTsKKworICAgICAgICBnYy5zYXZlKCk7CisgICAgICAgIGdjLmNsaXAocmVjdCk7CisgICAgICAg
IGlmICh3ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVudCkKKyAgICAgICAgICAgIGdjLmNsZWFyUmVj
dChyZWN0KTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmdjLCByZWN0KTsKKyAgICAg
ICAgZ2MucmVzdG9yZSgpOworICAgIH0KKworICAgIGdjLnNhdmUoKTsKKyAgICBnYy5jbGlwKGRp
cnR5UmVnaW9uLmJvdW5kcygpKTsKKyAgICBmcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmRyYXdIaWdobGlnaHQoZ2MpOworICAgIGdjLnJlc3RvcmUoKTsKIH0KIAotdm9pZCBD
aHJvbWVDbGllbnQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYg
cmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgQ2hyb21lQ2xpZW50
OjpwZXJmb3JtQWxsUGVuZGluZ1Njcm9sbHMoKQogewotICAgIEdka1dpbmRvdyogd2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgaWYgKCF3
aW5kb3cpCisgICAgaWYgKCFtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9wZW5kaW5nU2Nyb2xsSW52YWxpZGF0aW9ucyA9IHRydWU7CisgICAg
Ly8gU2Nyb2xsIGFsbCBwZW5kaW5nIHNjcm9sbCByZWN0cyBhbmQgaW52YWxpZGF0ZSB0aG9zZSBw
YXJ0cyBvZiB0aGUgd2lkZ2V0LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWN0c1Rv
U2Nyb2xsLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEludFJlY3QmIHNjcm9sbFJlY3QgPSBtX3Jl
Y3RzVG9TY3JvbGxbaV07CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5z
Y3JvbGwoc2Nyb2xsUmVjdCwgbV9zY3JvbGxPZmZzZXRzW2ldKTsKKyAgICAgICAgZ3RrX3dpZGdl
dF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JvbGxSZWN0LngoKSwgc2Nyb2xsUmVjdC55KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFJlY3Qud2lkdGgoKSwgc2Nyb2xs
UmVjdC5oZWlnaHQoKSk7CisgICAgfQogCi0gICAgLy8gV2UgY2Fubm90IHVzZSBnZGtfd2luZG93
X3Njcm9sbCBoZXJlIGJlY2F1c2UgaXQgaXMgb25seSBhYmxlIHRvCi0gICAgLy8gc2Nyb2xsIHRo
ZSB3aG9sZSB3aW5kb3cgYXQgb25jZSwgYW5kIHdlIG9mdGVuIG5lZWQgdG8gc2Nyb2xsCi0gICAg
Ly8gcG9ydGlvbnMgb2YgdGhlIHdpbmRvdyBvbmx5ICh0aGluayBmcmFtZXMpLgotICAgIEdka1Jl
Y3RhbmdsZSBhcmVhID0gY2xpcFJlY3Q7Ci0gICAgR2RrUmVjdGFuZ2xlIG1vdmVSZWN0OworICAg
IG1fcmVjdHNUb1Njcm9sbC5jbGVhcigpOworICAgIG1fc2Nyb2xsT2Zmc2V0cy5jbGVhcigpOwor
fQogCi0gICAgR2RrUmVjdGFuZ2xlIHNvdXJjZVJlY3QgPSBhcmVhOwotICAgIHNvdXJjZVJlY3Qu
eCAtPSBkZWx0YS53aWR0aCgpOwotICAgIHNvdXJjZVJlY3QueSAtPSBkZWx0YS5oZWlnaHQoKTsK
IAotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrUmVnaW9uKiBpbnZhbGlkUmVnaW9u
ID0gZ2RrX3JlZ2lvbl9yZWN0YW5nbGUoJmFyZWEpOwordm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50
KFdlYkNvcmU6OlRpbWVyPENocm9tZUNsaWVudD4qKQoreworICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgbWluaW11bUZyYW1lSW50ZXJ2YWwgPSAxLjAgLyA2MC4wOyAvLyBObyBtb3JlIHRoYW4gNjAg
ZnJhbWVzIGEgc2Vjb25kLgorICAgIGRvdWJsZSB0aW1lU2luY2VMYXN0RGlzcGxheSA9IGN1cnJl
bnRUaW1lKCkgLSBtX2xhc3REaXNwbGF5VGltZTsKKyAgICBkb3VibGUgdGltZVVudGlsTmV4dERp
c3BsYXkgPSBtaW5pbXVtRnJhbWVJbnRlcnZhbCAtIHRpbWVTaW5jZUxhc3REaXNwbGF5OwogCi0g
ICAgaWYgKGdka19yZWN0YW5nbGVfaW50ZXJzZWN0KCZhcmVhLCAmc291cmNlUmVjdCwgJm1vdmVS
ZWN0KSkgewotICAgICAgICBHZGtSZWdpb24qIG1vdmVSZWdpb24gPSBnZGtfcmVnaW9uX3JlY3Rh
bmdsZSgmbW92ZVJlY3QpOwotICAgICAgICBnZGtfd2luZG93X21vdmVfcmVnaW9uKHdpbmRvdywg
bW92ZVJlZ2lvbiwgZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkpOwotICAgICAgICBnZGtf
cmVnaW9uX29mZnNldChtb3ZlUmVnaW9uLCBkZWx0YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSk7
Ci0gICAgICAgIGdka19yZWdpb25fc3VidHJhY3QoaW52YWxpZFJlZ2lvbiwgbW92ZVJlZ2lvbik7
Ci0gICAgICAgIGdka19yZWdpb25fZGVzdHJveShtb3ZlUmVnaW9uKTsKKyAgICBpZiAodGltZVVu
dGlsTmV4dERpc3BsYXkgPiAwKSB7CisgICAgICAgIG1fZGlzcGxheVRpbWVyLnN0YXJ0T25lU2hv
dCh0aW1lVW50aWxOZXh0RGlzcGxheSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBn
ZGtfd2luZG93X2ludmFsaWRhdGVfcmVnaW9uKHdpbmRvdywgaW52YWxpZFJlZ2lvbiwgRkFMU0Up
OwotICAgIGdka19yZWdpb25fZGVzdHJveShpbnZhbGlkUmVnaW9uKTsKLSNlbHNlCi0gICAgY2Fp
cm9fcmVnaW9uX3QqIGludmFsaWRSZWdpb24gPSBjYWlyb19yZWdpb25fY3JlYXRlX3JlY3Rhbmds
ZSgmYXJlYSk7Ci0KLSAgICBpZiAoZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3QoJmFyZWEsICZzb3Vy
Y2VSZWN0LCAmbW92ZVJlY3QpKSB7Ci0gICAgICAgIGNhaXJvX3JlZ2lvbl90KiBtb3ZlUmVnaW9u
ID0gY2Fpcm9fcmVnaW9uX2NyZWF0ZV9yZWN0YW5nbGUoJm1vdmVSZWN0KTsKLSAgICAgICAgZ2Rr
X3dpbmRvd19tb3ZlX3JlZ2lvbih3aW5kb3csIG1vdmVSZWdpb24sIGRlbHRhLndpZHRoKCksIGRl
bHRhLmhlaWdodCgpKTsKLSAgICAgICAgY2Fpcm9fcmVnaW9uX3RyYW5zbGF0ZShtb3ZlUmVnaW9u
LCBkZWx0YS53aWR0aCgpLCBkZWx0YS5oZWlnaHQoKSk7Ci0gICAgICAgIGNhaXJvX3JlZ2lvbl9z
dWJ0cmFjdChpbnZhbGlkUmVnaW9uLCBtb3ZlUmVnaW9uKTsKLSAgICAgICAgY2Fpcm9fcmVnaW9u
X2Rlc3Ryb3kobW92ZVJlZ2lvbik7CisgICAgRnJhbWUqIGZyYW1lID0gY29yZShtX3dlYlZpZXcp
LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+Y29udGVudFJlbmRlcmVy
KCkgfHwgIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBlcmZvcm1BbGxQ
ZW5kaW5nU2Nyb2xscygpOworICAgIHBhaW50V2ViVmlldyhtX3dlYlZpZXcsIGZyYW1lLCBtX2Rp
cnR5UmVnaW9uKTsKKworICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSBtX2RpcnR5UmVnaW9uLmJv
dW5kcygpOworICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93ZWJW
aWV3KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
CisgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOworICAgIG1fbGFzdERpc3BsYXlUaW1lID0g
Y3VycmVudFRpbWUoKTsKKyAgICBtX3JlcGFpbnRTb29uU291cmNlSWQgPSAwOworfQorCit2b2lk
IENocm9tZUNsaWVudDo6aW52YWxpZGF0ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1l
ZGlhdGUpCit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNBbmRX
aW5kb3coY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCit7CisgICAg
aWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kaXJ0eVJl
Z2lvbi51bml0ZSh1cGRhdGVSZWN0KTsKKyAgICBtX2Rpc3BsYXlUaW1lci5zdGFydE9uZVNob3Qo
MCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Ny
b2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQoreworICAgIGlu
dmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyh1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOworICAgIG1f
YWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKCk7
Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgZGVsdGEsIGNv
bnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7Cisg
ICAgbV9yZWN0c1RvU2Nyb2xsLmFwcGVuZChyZWN0VG9TY3JvbGwpOworICAgIG1fc2Nyb2xsT2Zm
c2V0cy5hcHBlbmQoZGVsdGEpOworCisgICAgLy8gVGhlIGNvZGUgdG8gY2FsY3VsYXRlIHRoZSBz
Y3JvbGwgcmVwYWludCByZWdpb24gaXMgb3JpZ2luYWxseSBmcm9tIFdlYktpdDIuCisgICAgLy8g
R2V0IHRoZSBwYXJ0IG9mIHRoZSBkaXJ0eSByZWdpb24gdGhhdCBpcyBpbiB0aGUgc2Nyb2xsIHJl
Y3QuCisgICAgUmVnaW9uIGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0ID0gaW50ZXJzZWN0KHJlY3RU
b1Njcm9sbCwgbV9kaXJ0eVJlZ2lvbik7CisgICAgaWYgKCFkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHBhcnRzIG9mIHRoZSBkaXJ0eSBy
ZWdpb24gdGhhdCBhcmUgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdC4KKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBzdWJ0cmFjdCB0aGVtIGZyb20gdGhlIHJlZ2lvbiwgbW92ZSB0aGVtIGFuZCByZS1hZGQg
dGhlbS4KKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi5zdWJ0cmFjdChyZWN0VG9TY3JvbGwpOworCisg
ICAgICAgIC8vIE1vdmUgdGhlIGRpcnR5IHBhcnRzLgorICAgICAgICBSZWdpb24gbW92ZWREaXJ0
eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdCh0cmFuc2xhdGUoZGlydHlSZWdpb25JblNj
cm9sbFJlY3QsIGRlbHRhKSwgcmVjdFRvU2Nyb2xsKTsKKworICAgICAgICAvLyBBbmQgYWRkIHRo
ZW0gYmFjay4KKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShtb3ZlZERpcnR5UmVnaW9uSW5T
Y3JvbGxSZWN0KTsKICAgICB9CiAKLSAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVnaW9uKHdp
bmRvdywgaW52YWxpZFJlZ2lvbiwgRkFMU0UpOwotICAgIGNhaXJvX3JlZ2lvbl9kZXN0cm95KGlu
dmFsaWRSZWdpb24pOwotI2VuZGlmCisgICAgLy8gQ29tcHV0ZSB0aGUgc2Nyb2xsIHJlcGFpbnQg
cmVnaW9uLgorICAgIFJlZ2lvbiBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJhY3QocmVjdFRv
U2Nyb2xsLCB0cmFuc2xhdGUocmVjdFRvU2Nyb2xsLCBkZWx0YSkpOworICAgIG1fZGlydHlSZWdp
b24udW5pdGUoc2Nyb2xsUmVwYWludFJlZ2lvbik7CisgICAgbV9kaXNwbGF5VGltZXIuc3RhcnRP
bmVTaG90KDApOwogCiAgICAgbV9hZGp1c3RtZW50V2F0Y2hlci51cGRhdGVBZGp1c3RtZW50c0Zy
b21TY3JvbGxiYXJzTGF0ZXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggYzdmYWE3ZmRiNGY5ZGYxODk0Y2U0NDFi
ZTE1ODdiOTlhZTM2OTJhNy4uZDg5MjgxMjI1ZjYyZGNlM2ExMDZjM2VkM2MwMmU3ZWVmMTg4OTNi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmgKQEAgLTIzLDEwICsyMywxNSBAQAogCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiR3RrQWRqdXN0bWVudFdhdGNoZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQb3B1
cE1lbnUuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQzLDIxICs0OCwyMSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwg
V2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHdpbmRvd1JlY3QoKTsKIAotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBwYWdl
UmVjdCgpOworICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpOwogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBmb2N1cygpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpOwog
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMoV2ViQ29yZTo6Rm9jdXNEaXJlY3Rp
b24pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0
aW9uKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkTm9kZUNoYW5nZWQoV2ViQ29yZTo6Tm9kZSopOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZm9jdXNlZEZyYW1lQ2hhbmdlZChXZWJDb3JlOjpGcmFtZSopOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9jdXNlZE5vZGVDaGFuZ2VkKE5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGZvY3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqKTsKIAotICAgICAgICB2aXJ0
dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVdpbmRvdyhXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdl
YkNvcmU6OkZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYs
IGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mKTsKKyAgICAgICAgdmlydHVhbCBQYWdl
KiBjcmVhdGVXaW5kb3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2lu
ZG93RmVhdHVyZXMmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzaG93KCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFsKCk7CkBAIC03
Nyw5NiArODIsMTAzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZXNpemFibGUoYm9vbCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VU
b0NvbnNvbGUoV2ViQ29yZTo6TWVzc2FnZVNvdXJjZSBzb3VyY2UsIFdlYkNvcmU6Ok1lc3NhZ2VU
eXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNv
cmU6Ok1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lTnVt
YmVyLCBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlSUQpOwotCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJl
ciwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUlEKTsKICAgICAgICAgdmlydHVhbCBib29sIGNh
blJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBXZWJD
b3JlOjpGcmFtZSogZnJhbWUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBGcmFtZSopOwogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcm
KTsKLSAgICAgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCBib29sIHJ1bkphdmFT
Y3JpcHRQcm9tcHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgV1RGOjpTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV1RGOjpTdHJpbmcmIHJlc3VsdCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUqLCBjb25zdCBXVEY6
OlN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oRnJh
bWUqLCBjb25zdCBXVEY6OlN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNj
cmlwdFByb21wdChGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBXVEY6
OlN0cmluZyYgZGVmYXVsdFZhbHVlLCBXVEY6OlN0cmluZyYgcmVzdWx0KTsKICAgICAgICAgdmly
dHVhbCB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICAgICAg
dmlydHVhbCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKLSAgICAgICAgdmlydHVh
bCBXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpOworICAgICAgICB2aXJ0
dWFsIEtleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCk7CiAKLSAgICAgICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0OwogI2lmIEVOQUJMRShSRUdJU1RF
Ul9QUk9UT0NPTF9IQU5ETEVSKSAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyUHJvdG9j
b2xIYW5kbGVyKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBX
VEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7IAogI2VuZGlmIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVdpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgYm9vbCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGJvb2wpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgYm9vbCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVdp
bmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVjdCYsIGJvb2wpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0Jiwg
Ym9vbCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpOwogCi0gICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3co
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBXZWJDb3Jl
OjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgSW50
UmVjdCYpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9y
bVBhZ2VDbGllbnQoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNo
YW5nZWQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50
U2l6ZSYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENo
YW5nZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3Mp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRUb29sVGlwKGNvbnN0IFdURjo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlv
bik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFdURjo6U3RyaW5nJiwg
VGV4dERpcmVjdGlvbik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVmlld3BvcnRE
YXRhRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFu
Z2UoY29uc3QgVmlld3BvcnRBcmd1bWVudHMmKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByaW50KEZy
YW1lKik7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgdmlydHVhbCB2b2lkIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25z
dCBXVEY6OlN0cmluZyYpOwogI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4
QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJDb3JlOjpTZWN1cml0eU9yaWdp
biosIGludDY0X3QgdG90YWxTcGFjZU5lZWRlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCB0
b3RhbFNwYWNlTmVlZGVkKTsKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKICAgICAgICAgdmly
dHVhbCB2b2lkIHNob3dDb250ZXh0TWVudSgpIHsgfQogI2VuZGlmCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBydW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZp
bGVDaG9vc2VyPik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0
IFZlY3RvcjxXVEY6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nl
cj4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8
V1RGOjpTdHJpbmc+JiwgRmlsZUljb25Mb2FkZXIqKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
Zm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSB7IH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikgeyB9CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKTsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25z
dCB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25G
b3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUo
V2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFt
ZSosIEdlb2xvY2F0aW9uKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopOwogCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGlu
Z0RpcmVjdGlvbigpOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UG9wdXBN
ZW51PiBjcmVhdGVQb3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU+IGNyZWF0
ZVNlYXJjaFBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBvcHVwTWVu
dUNsaWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2VhcmNoUG9wdXBN
ZW51PiBjcmVhdGVTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CiAjaWYg
RU5BQkxFKFZJREVPKQotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9y
Tm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1
bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsU2NyZWVuRm9y
RWxlbWVudChjb25zdCBXZWJDb3JlOjpFbGVtZW50KiwgYm9vbCB3aXRoS2V5Ym9hcmQpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVt
ZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoV2Vi
Q29yZTo6RWxlbWVudCopOworICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsU2NyZWVu
Rm9yRWxlbWVudChjb25zdCBFbGVtZW50KiwgYm9vbCB3aXRoS2V5Ym9hcmQpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwogI2VuZGlm
CiAKLSAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihXZWJD
b3JlOjpTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIG51bVdoZWVsRXZlbnRI
YW5kbGVyc0NoYW5nZWQodW5zaWduZWQpIHsgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAKLSAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9u
KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7
CiAgICAgICAgIHZpcnR1YWwgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0
aW5nVHJpZ2dlcnMoKSBjb25zdDsKICNlbmRpZiAKIAorICAgICAgICB2b2lkIHBlcmZvcm1BbGxQ
ZW5kaW5nU2Nyb2xscygpOworICAgICAgICB2b2lkIHBhaW50KFRpbWVyPENocm9tZUNsaWVudD4q
KTsKKyAgICAgICAgdm9pZCB3aWRnZXRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBvbGRXaWRn
ZXRTaXplLCBJbnRTaXplIG5ld1NpemUpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgV2ViS2l0
V2ViVmlldyogbV93ZWJWaWV3OwogICAgICAgICBHdGtBZGp1c3RtZW50V2F0Y2hlciBtX2FkanVz
dG1lbnRXYXRjaGVyOwotICAgICAgICBXZWJDb3JlOjpLVVJMIG1faG92ZXJlZExpbmtVUkw7Cisg
ICAgICAgIEtVUkwgbV9ob3ZlcmVkTGlua1VSTDsKICAgICAgICAgdW5zaWduZWQgaW50IG1fY2xv
c2VTb29uVGltZXI7Ci0gICAgICAgIGJvb2wgbV9wZW5kaW5nU2Nyb2xsSW52YWxpZGF0aW9uczsK
KworICAgICAgICBUaW1lciA8Q2hyb21lQ2xpZW50PiBtX2Rpc3BsYXlUaW1lcjsKKyAgICAgICAg
UmVnaW9uIG1fZGlydHlSZWdpb247CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX3JlY3RzVG9T
Y3JvbGw7CisgICAgICAgIFZlY3RvcjxJbnRTaXplPiBtX3Njcm9sbE9mZnNldHM7CisgICAgICAg
IGRvdWJsZSBtX2xhc3REaXNwbGF5VGltZTsKKyAgICAgICAgdWludCBtX3JlcGFpbnRTb29uU291
cmNlSWQ7CiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCmluZGV4IGUwNDU2ZjM5NWRhMzZhM2ZkZjA1MTM2MzJkMDg4OWI4MWUzZjJkYzguLjYx
Njg3NmU2Y2IzYmMyZWM2ODk1OWRhOWU5ODAxZTM1MWE3N2ZlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1
ZGUgIkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogI2luY2x1
ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgpAQCAtNjQsNyArNjUsNiBAQAogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JDbGllbnRHdGsuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTYxOSwxMDggKzYxOSwz
OSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgRwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgc2hv
dWxkQ29hbGVzY2UoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cykKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgY1JlY3RUaHJlc2hvbGQgPSAxMDsKLSAg
ICBjb25zdCBmbG9hdCBjV2FzdGVkU3BhY2VUaHJlc2hvbGQgPSAwLjc1ZjsKLSAgICBib29sIHVz
ZVVuaW9uZWRSZWN0ID0gKHJlY3RzLnNpemUoKSA8PSAxKSB8fCAocmVjdHMuc2l6ZSgpID4gY1Jl
Y3RUaHJlc2hvbGQpOwotICAgIGlmICh1c2VVbmlvbmVkUmVjdCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgLy8gQXR0ZW1wdCB0byBndWVzcyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNl
IHRoZSB1bmlvbmVkIHJlY3Qgb3IgdGhlIGluZGl2aWR1YWwgcmVjdHMuCi0gICAgLy8gV2UgZG8g
dGhpcyBieSBjb21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIgaW4gdGhl
IHVuaW9uLiAgSWYgdGhhdCB3YXN0ZWQgc3BhY2UKLSAgICAvLyBpcyB0b28gbGFyZ2UsIHRoZW4g
d2Ugd2lsbCBkbyBpbmRpdmlkdWFsIHJlY3QgcGFpbnRpbmcgaW5zdGVhZC4KLSAgICBmbG9hdCB1
bmlvblBpeGVscyA9IChyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpKTsKLSAgICBmbG9hdCBz
aW5nbGVQaXhlbHMgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIHNpbmdsZVBpeGVscyArPSByZWN0c1tpXS53aWR0aCgpICogcmVjdHNb
aV0uaGVpZ2h0KCk7Ci0gICAgZmxvYXQgd2FzdGVkU3BhY2UgPSAxIC0gKHNpbmdsZVBpeGVscyAv
IHVuaW9uUGl4ZWxzKTsKLSAgICBpZiAod2FzdGVkU3BhY2UgPD0gY1dhc3RlZFNwYWNlVGhyZXNo
b2xkKQotICAgICAgICB1c2VVbmlvbmVkUmVjdCA9IHRydWU7Ci0gICAgcmV0dXJuIHVzZVVuaW9u
ZWRSZWN0OwotfQotCi1zdGF0aWMgdm9pZCBwYWludFdlYlZpZXcoRnJhbWUqIGZyYW1lLCBnYm9v
bGVhbiB0cmFuc3BhcmVudCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKLXsKLSAgICBib29sIGNv
YWxlc2NlID0gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy5zaXplKCkgPiAwKQotICAgICAgICBjb2Fs
ZXNjZSA9IHNob3VsZENvYWxlc2NlKGNsaXBSZWN0LCByZWN0cyk7Ci0KLSAgICBpZiAoY29hbGVz
Y2UpIHsKLSAgICAgICAgY29udGV4dC5jbGlwKGNsaXBSZWN0KTsKLSAgICAgICAgaWYgKHRyYW5z
cGFyZW50KQotICAgICAgICAgICAgY29udGV4dC5jbGVhclJlY3QoY2xpcFJlY3QpOwotICAgICAg
ICBmcmFtZS0+dmlldygpLT5wYWludCgmY29udGV4dCwgY2xpcFJlY3QpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgICAgIEludFJlY3QgcmVjdCA9IHJlY3RzW2ldOwotICAgICAgICAgICAgY29udGV4dC5z
YXZlKCk7Ci0gICAgICAgICAgICBjb250ZXh0LmNsaXAocmVjdCk7Ci0gICAgICAgICAgICBpZiAo
dHJhbnNwYXJlbnQpCi0gICAgICAgICAgICAgICAgY29udGV4dC5jbGVhclJlY3QocmVjdCk7Ci0g
ICAgICAgICAgICBmcmFtZS0+dmlldygpLT5wYWludCgmY29udGV4dCwgcmVjdCk7Ci0gICAgICAg
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnRleHQu
c2F2ZSgpOwotICAgIGNvbnRleHQuY2xpcChjbGlwUmVjdCk7Ci0gICAgZnJhbWUtPnBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwotICAgIGNvbnRl
eHQucmVzdG9yZSgpOwotfQogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiBzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X3dlYl92aWV3X2V4cG9zZV9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZl
bnRFeHBvc2UqIGV2ZW50KQogewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2lkZ2V0KTsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXctPnByaXY7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5tYWluRnJhbWUo
KTsKLSAgICBpZiAoZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpICYmIGZyYW1lLT52aWV3KCkpIHsK
LSAgICAgICAgZnJhbWUtPnZpZXcoKS0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vy
c2l2ZSgpOwotCi0gICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGdka19jYWly
b19jcmVhdGUoZXZlbnQtPndpbmRvdykpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoY3Iu
Z2V0KCkpOwotICAgICAgICBnYy5zZXRHZGtFeHBvc2VFdmVudChldmVudCk7Ci0KLSAgICAgICAg
aW50IHJlY3RDb3VudDsKLSAgICAgICAgR093blB0cjxHZGtSZWN0YW5nbGU+IHJlY3RzOwotICAg
ICAgICBnZGtfcmVnaW9uX2dldF9yZWN0YW5nbGVzKGV2ZW50LT5yZWdpb24sICZyZWN0cy5vdXRQ
dHIoKSwgJnJlY3RDb3VudCk7Ci0gICAgICAgIFZlY3RvcjxJbnRSZWN0PiBwYWludFJlY3RzOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgaSsrKQotICAgICAgICAgICAg
cGFpbnRSZWN0cy5hcHBlbmQoSW50UmVjdChyZWN0cy5nZXQoKVtpXSkpOworICAgIGludCByZWN0
Q291bnQ7CisgICAgR093blB0cjxHZGtSZWN0YW5nbGU+IHJlY3RzOworICAgIGdka19yZWdpb25f
Z2V0X3JlY3RhbmdsZXMoZXZlbnQtPnJlZ2lvbiwgJnJlY3RzLm91dFB0cigpLCAmcmVjdENvdW50
KTsKIAotICAgICAgICBwYWludFdlYlZpZXcoZnJhbWUsIHByaXYtPnRyYW5zcGFyZW50LCBnYywg
c3RhdGljX2Nhc3Q8SW50UmVjdD4oZXZlbnQtPmFyZWEpLCBwYWludFJlY3RzKTsKKyAgICBSZWZQ
dHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT53aW5kb3cp
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgaSsrKSB7CisgICAgICAgIGNv
cHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4dChXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+
cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QocmVjdHMu
Z2V0KClbaV0pKTsKICAgICB9Ci0KICAgICByZXR1cm4gRkFMU0U7CiB9CiAjZWxzZQogc3RhdGlj
IGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190
KiBjcikKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdp
ZGdldCk7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2Owog
ICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLQogICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlw
X3JlY3RhbmdsZShjciwgJmNsaXBSZWN0KSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAg
RnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKGZyYW1l
LT5jb250ZW50UmVuZGVyZXIoKSAmJiBmcmFtZS0+dmlldygpKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCBnYyhjcik7Ci0gICAgICAgIEludFJlY3QgcmVjdCA9IGNsaXBSZWN0OwotICAgICAg
ICBjYWlyb19yZWN0YW5nbGVfbGlzdF90KiByZWN0TGlzdCA9IGNhaXJvX2NvcHlfY2xpcF9yZWN0
YW5nbGVfbGlzdChjcik7Ci0KLSAgICAgICAgZnJhbWUtPnZpZXcoKS0+dXBkYXRlTGF5b3V0QW5k
U3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwotCi0gICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0
czsKLSAgICAgICAgaWYgKCFyZWN0TGlzdC0+c3RhdHVzICYmIHJlY3RMaXN0LT5udW1fcmVjdGFu
Z2xlcyA+IDApIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdExpc3QtPm51
bV9yZWN0YW5nbGVzOyBpKyspCi0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2lu
Z0ludFJlY3QoRmxvYXRSZWN0KHJlY3RMaXN0LT5yZWN0YW5nbGVzW2ldKSkpOwotICAgICAgICB9
Ci0gICAgICAgIHBhaW50V2ViVmlldyhmcmFtZSwgcHJpdi0+dHJhbnNwYXJlbnQsIGdjLCByZWN0
LCByZWN0cyk7Ci0KKyAgICBjYWlyb19yZWN0YW5nbGVfbGlzdF90KiByZWN0TGlzdCA9IGNhaXJv
X2NvcHlfY2xpcF9yZWN0YW5nbGVfbGlzdChjcik7CisgICAgaWYgKHJlY3RMaXN0LT5zdGF0dXMg
fHwgIXJlY3RMaXN0LT5udW1fcmVjdGFuZ2xlcykgewogICAgICAgICBjYWlyb19yZWN0YW5nbGVf
bGlzdF9kZXN0cm95KHJlY3RMaXN0KTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwor
ICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RM
aXN0LT5udW1fcmVjdGFuZ2xlczsgaSsrKSB7CisgICAgICAgIGNvcHlSZWN0RnJvbUNhaXJvU3Vy
ZmFjZVRvQ29udGV4dChXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdi0+YmFja2luZ1N0b3Jl
LT5jYWlyb1N1cmZhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNyLCBJbnRTaXplKCksIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3RMaXN0LT5y
ZWN0YW5nbGVzW2ldKSkpOwogICAgIH0KKyAgICBjYWlyb19yZWN0YW5nbGVfbGlzdF9kZXN0cm95
KHJlY3RMaXN0KTsKIAogICAgIHJldHVybiBGQUxTRTsKIH0KQEAgLTkxMSwxNCArODQyLDE2IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zaXplX2FsbG9jYXRlKEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvCiAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2Vi
X3ZpZXdfcGFyZW50X2NsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsIGFsbG9jYXRpb24pOwog
CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwot
CiAgICAgUGFnZSogcGFnZSA9IGNvcmUod2ViVmlldyk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFn
ZS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+dmlldygpKQotICAgICAgICByZXR1cm47
CisgICAgSW50U2l6ZSBvbGRTaXplOworICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHBh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCkpIHsKKyAgICAgICAgb2xkU2l6ZSA9IGZyYW1lVmlldy0+
c2l6ZSgpOworICAgICAgICBmcmFtZVZpZXctPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxs
b2NhdGlvbi0+aGVpZ2h0KTsKKyAgICB9CiAKLSAgICBmcmFtZS0+dmlldygpLT5yZXNpemUoYWxs
b2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7Ci0gICAgc3RhdGljX2Nhc3Q8V2Vi
S2l0OjpDaHJvbWVDbGllbnQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT5hZGp1c3RtZW50
V2F0Y2hlcigpLT51cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzKCk7CisgICAgV2ViS2l0
OjpDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9IHN0YXRpY19jYXN0PFdlYktpdDo6Q2hyb21l
Q2xpZW50Kj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKTsKKyAgICBjaHJvbWVDbGllbnQtPndp
ZGdldFNpemVDaGFuZ2VkKG9sZFNpemUsIEludFNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9j
YXRpb24tPmhlaWdodCkpOworICAgIGNocm9tZUNsaWVudC0+YWRqdXN0bWVudFdhdGNoZXIoKS0+
dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFycygpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfZ3JhYl9mb2N1cyhHdGtXaWRnZXQqIHdpZGdldCkKQEAgLTMzMzIsNiArMzI2
NSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiAgICAgcHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT53ZWJWaWV3ID0gd2Vi
VmlldzsKIAogICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyhHVEtfV0lER0VUKHdlYlZpZXcp
LCBUUlVFKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVyZWQoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgRkFMU0UpOworCiAgICAgcHJpdi0+bWFpbkZyYW1lID0gV0VCS0lUX1dFQl9GUkFN
RSh3ZWJraXRfd2ViX2ZyYW1lX25ldyh3ZWJWaWV3KSk7CiAgICAgcHJpdi0+bGFzdFBvcHVwWFBv
c2l0aW9uID0gcHJpdi0+bGFzdFBvcHVwWVBvc2l0aW9uID0gLTE7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKaW5kZXggOTk0NDRhYTNhODRm
MWY5MTgwZWViNDgyZmM1OGRlM2ZlMWFlNmM0ZS4uNTFlNWU4ZTYyM2QyYzhiNTg5OTBhODM5OWNi
OWRkMmQwYzE0Zjc3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXdwcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXdwcml2YXRlLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJHT3duUHRyLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAi
V2lkZ2V0QmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00Miw2ICs0Myw3IEBAIGV4dGVybiAiQyIgewogdHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOwog
c3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgV2ViQ29yZTo6UGFnZSogY29yZVBh
Z2U7CisgICAgT3duUHRyPFdlYkNvcmU6OldpZGdldEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
OwogICAgIEdSZWZQdHI8V2ViS2l0V2ViU2V0dGluZ3M+IHdlYlNldHRpbmdzOwogICAgIEdSZWZQ
dHI8V2ViS2l0V2ViSW5zcGVjdG9yPiB3ZWJJbnNwZWN0b3I7CiAgICAgR1JlZlB0cjxXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXM+IHZpZXdwb3J0QXR0cmlidXRlczsK
</data>
<flag name="review"
          id="110091"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>