<?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>14857</bug_id>
          
          <creation_ts>2007-08-01 15:52:27 -0700</creation_ts>
          <short_desc>[gtk] ScrollView and WebKitGtkPage changes to make multiple frames possible</short_desc>
          <delta_ts>2009-01-12 15:21:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>manyoso</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3205</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 15:52:27 -0700</bug_when>
    <thetext>To implement FrameLoaderClientGdk::createFrame (#14729) we will need support for possible overlapping frames. The Windows port of WebKit has an approach to just use one native window resource for the whole FrameView. This approach was adopted to Gdk/Gtk. We will have one GdkWindow for the whole FrameView, this GdkWindow is called bin_window (like with GtkLayout) and will be owned and managaed by WebKitGtkPage (which is a GtkContainer just like GtkLayout).

This patch makes WebKitGtkPage a true GtkContainer, implementing the virtual methods/default handlers, on this way killing WebCore/platform/gdk/FrameGdk and changing the Platform*Event to take specifc GdkEvent* structs insteads of the generic GdkEvent one.

The FrameView is created on the fly in FrameLoaderClientGdk::makeDocumentView

The ScrollView and Widget methods from the Windows port where used with one exception. To implement the Gtk+ scrollable protocol the FrameView may get GtkAdjustment&apos;s set from the outside. Whenever this happens the internal PlatformScrollBar will not be used! The other change is within Widget due the usage of PlatformScrollBar. PlatformScrollBar is a GtkWidget without an associated window, it will be used by the RenderLayer and by the ScrollView. It will be positioned by the geometryChanged() method of Widget. To not make the PlatformScrollbar scroll when the view is scrolled a method was added to Widget to select between convertToContainingWindow and contentsToWindow. The other options would have been to subclass PlatformScrollbar and use that subclass in ScrollView, or to move that method/selection to PlatformScrollBar. But I think it is nice to have it in Widget.

Adjust RenderTheme to draw the Theme at the right position and add IntPoint translation to the GraphicsContext to support that as Gdk/Gtk drawing does not know about our translation (we just share the same surface).

Implement PlatformScrollbar.

Patches need to be applied in the following order:

1.) Make WebKitGtkPage a GtkContainer
2.) Implement ScrollView
3.) On-The-Fly FrameView creation
4.) Use GtkAdjustment
5.) ScrollBar changes
6.) RenderTheme</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3206</commentid>
    <comment_count>1</comment_count>
      <attachid>15794</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 15:53:33 -0700</bug_when>
    <thetext>Created attachment 15794
Make WebKitGtkPage a GtkContainer

Make WebKitGtkPage a GtkContainer, kill FrameGdk.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3207</commentid>
    <comment_count>2</comment_count>
      <attachid>15795</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 15:54:28 -0700</bug_when>
    <thetext>Created attachment 15795
Implement ScrollView

Implement ScrollView and Widget by following the Windows port design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3208</commentid>
    <comment_count>3</comment_count>
      <attachid>15796</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 15:55:23 -0700</bug_when>
    <thetext>Created attachment 15796
On-The-Fly FrameView creation

Create the FrameView from FrameLoaderClientGdk::makeDocumentView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3209</commentid>
    <comment_count>4</comment_count>
      <attachid>15797</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 15:57:17 -0700</bug_when>
    <thetext>Created attachment 15797
Use GtkAdjustment

Use GtkAdjustment when they are set from the outside instead of the PlatformScrollBar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3210</commentid>
    <comment_count>5</comment_count>
      <attachid>15798</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 15:58:09 -0700</bug_when>
    <thetext>Created attachment 15798
ScrollBar changes

Implement PlatformScrollBar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3213</commentid>
    <comment_count>6</comment_count>
      <attachid>15799</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 16:01:28 -0700</bug_when>
    <thetext>Created attachment 15799
RenderTheme

Gtk+ does not know about the translation of GraphicsContext which is coming from ScrollView::paint. As we don&apos;t scale using the painter I can simply ask cairo to give us the real x,y position and keep width and height the same.

This approach might (as documented in Widget) work for the Gtk{H,V}ScrollBar as long as the width and height are right but it was not tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3164</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2007-08-01 21:44:01 -0700</bug_when>
    <thetext>I don&apos;t understand the reasoning for the &apos;On-The-Fly FrameView creation&apos;

Why is this done in the mac and gdk ports, but not the windows port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3159</commentid>
    <comment_count>8</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-02 06:35:38 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I don&apos;t understand the reasoning for the &apos;On-The-Fly FrameView creation&apos;
&gt; 
&gt; Why is this done in the mac and gdk ports, but not the windows port?

This is interesting specially if you look at David&apos;s comment in #13913.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3103</commentid>
    <comment_count>9</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-08-02 18:04:44 -0700</bug_when>
    <thetext>Some of these patches introduce slightly strange scrolling behaviour (the content is slow at keeping up with the position of the scrollbar), and possibly an impact on performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3093</commentid>
    <comment_count>10</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-03 05:12:13 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Some of these patches introduce slightly strange scrolling behaviour (the
&gt; content is slow at keeping up with the position of the scrollbar), and possibly
&gt; an impact on performance.

Sure. This is the nature of the &quot;Implement ScrollView&quot; change. In contrast to GtkLayout we can not create this big GdkWindow anymore and can&apos;t use gdk_window_move which was so good for scrolling. As described when originally posting this patch there are hooks to ChromeClient to update the backing store and to do the scrolling. It is matter of using gdk_window_scroll_by or similiar method and reducing the exposing region to accelerate scrolling again but these are not yet implemented. For now to always keep up with scrolling you could force gdk to deliver the expose events (gdk_window_process_updates), probably in ScrollView::updateScrollbars or in the methods calling it (ScrollViewPrivate::valueChanged, ScrollViewPrivate::adjustmentChanged).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3082</commentid>
    <comment_count>11</comment_count>
      <attachid>15796</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-03 12:00:00 -0700</bug_when>
    <thetext>Comment on attachment 15796
On-The-Fly FrameView creation

I&apos;m not sure why this patch is needed. The previous implementation looked pretty much identical to the Windows implementation in WebKit/win/WebFrame.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3083</commentid>
    <comment_count>12</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-03 12:12:52 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 15796 [edit])
&gt; I&apos;m not sure why this patch is needed. The previous implementation looked
&gt; pretty much identical to the Windows implementation in WebKit/win/WebFrame.cpp.
&gt; 

From bug number #13913 and darin&apos;s (IIRC) comments on IRC are FrameView&apos;s not meant to be recycled. I found out about this wondering why after visitng w3c.org TR&apos;s and leaving torwards another site ScrollView::setStaticBackground(true) was called even if the site has no static background. So either the patch from #13913 should be finished (by taking mitz comments into acount), or I need to recreate a Frame everytime I surf to another patch (we might do that when implementing the b/f cache), or I miss something else.

At least this patch follows the mac port in regard to creating the FrameView, so some enligthenment would be appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2935</commentid>
    <comment_count>13</comment_count>
      <attachid>15794</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-06 12:13:13 -0700</bug_when>
    <thetext>Comment on attachment 15794
Make WebKitGtkPage a GtkContainer

This patch looks like it should be N separate checkins:

1. FrameGdk move and changes
2. Changes to the various *Event classes
3. WebKitGtkPage changes

It would have been nice if this patch could have been broken up into those pieces before putting it up for review. It would have made it much easier to review.

     switch (event-&gt;type) {
-        case GDK_MOTION_NOTIFY:
-            m_eventType = MouseEventMoved;
-            m_button = NoButton;
+    case GDK_BUTTON_PRESS:
+    case GDK_2BUTTON_PRESS:
+    case GDK_3BUTTON_PRESS:
+    case GDK_BUTTON_RELEASE:

   Please keep the cases indented from the switch.

+    switch (motion-&gt;type) {
+    case GDK_MOTION_NOTIFY:

   Ditto here.

+    g_object_ref(event-&gt;expose.window);

   Do you need to release this ref?

+    gdk_event_free (event);

   Please remove the space before the (.

+ * TODO: We should follow Qt and move that to webkitgtksettings.

   Typo: that -&gt; this

+GObject* webkit_gtk_frame_new(WebKitGtkPage* web_page)

Since we want to move towards the WebKit coding style, the parameter name should be webPage (and other variables in this method should be named similarly).

+#include &quot;PlatformMouseEvent.h&quot;
+#include &quot;PlatformKeyboardEvent.h&quot;
+#include &quot;PlatformWheelEvent.h&quot;
+#include &quot;GraphicsContext.h&quot;
+#include &quot;EventHandler.h&quot;
+#include &quot;HitTestRequest.h&quot;
+#include &quot;HitTestResult.h&quot;

   Please keep #includes ordered alphabetically.

+    frame-&gt;view()-&gt;wheelEvent(wheelEvent);

I believe this should go through EventHandler::handleWheelEvent.

+    HitTestRequest hitTestRequest(true, true);
+    HitTestResult hitTestResult(wheelEvent.pos());
+    frame-&gt;renderer()-&gt;layer()-&gt;hitTest(hitTestRequest, hitTestResult);
+    Node* node = hitTestResult.innerNode();
+    if (!node)
+        return FALSE;
+
+    return TRUE;

I&apos;m not sure why this code is needed.

+    frame-&gt;forceLayout();
+    frame-&gt;view()-&gt;adjustViewSize();

   These two lines aren&apos;t needed on Windows. Why are they needed here?

+ * it is a GtkContainer to implement ScrollView. And we need to make it similiar
+ * to GtkLayout to have sane painting.

   It would be good to say in what way this code makes WebKitGtkPage similar to GtkLayout, and what &quot;sane&quot; means.

+            gtk_widget_map((*current));

   Looks like you&apos;ve got some extra parentheses here.

+    if (private_data-&gt;children.contains(widget)) {

   You should just return early if this condition is false.

+    G_OBJECT_CLASS (webkit_gtk_page_parent_class)-&gt;finalize (object);

   You&apos;ve got extra spaces before your parentheses.

+    WebKitGtkPagePrivate *private_data = WEBKIT_GTK_PAGE_GET_PRIVATE(WEBKIT_GTK_PAGE(page));

   Please use camel case.

+    /*
+     * TODO: move that over to use webkitgtksettings 
+     */

   This should be a FIXME.

   This looks fine overall, though again I&apos;m no Gtk expert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2838</commentid>
    <comment_count>14</comment_count>
      <attachid>15799</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-08 07:45:09 -0700</bug_when>
    <thetext>Comment on attachment 15799
RenderTheme

Applied on the 8th of August 2007.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2839</commentid>
    <comment_count>15</comment_count>
      <attachid>15798</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-08 07:47:55 -0700</bug_when>
    <thetext>Comment on attachment 15798
ScrollBar changes

Besides the removal of gtk_object_sink this patch has been applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489</commentid>
    <comment_count>16</comment_count>
      <attachid>15794</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-25 05:47:09 -0700</bug_when>
    <thetext>Comment on attachment 15794
Make WebKitGtkPage a GtkContainer

Clearing review flag to get this out of the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59474</commentid>
    <comment_count>17</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-25 16:39:22 -0700</bug_when>
    <thetext>This was fixed some time ago, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59535</commentid>
    <comment_count>18</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-10-26 05:31:04 -0700</bug_when>
    <thetext>&quot;On-The-Fly FrameView&quot; still waits for Adam and David Hyatt to test/agree. See comment #8 of this bug report.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78363</commentid>
    <comment_count>19</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-04-20 21:59:44 -0700</bug_when>
    <thetext>Hi Holger, I think you&apos;ve already fixes this a week ago iirc right? For reference: http://trac.webkit.org/projects/webkit/changeset/31877.

Ok to close?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105404</commentid>
    <comment_count>20</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-01-12 15:21:13 -0800</bug_when>
    <thetext>Well, I am closing it now. If needed please reopen.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15794</attachid>
            <date>2007-08-01 15:53:33 -0700</date>
            <delta_ts>2007-08-25 05:47:09 -0700</delta_ts>
            <desc>Make WebKitGtkPage a GtkContainer</desc>
            <filename>gtk-make-webkitgtkpage-a-proper-container-r0.patch</filename>
            <type>text/plain</type>
            <size>50914</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IDJlZjMyNGMuLmZjZWM4M2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtODQ2LDYgKzg0Niw3IEBAIGdkay1wb3J0IHsKICAg
ICAgICAgcGxhdGZvcm0vVGV4dENvZGVjSUNVLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL1RleHRC
cmVha0l0ZXJhdG9ySUNVLmNwcCBcCiAgICAgICAgIHBhZ2UvZ2RrL0V2ZW50SGFuZGxlckdkay5j
cHAgXAorICAgICAgICBwYWdlL2dkay9GcmFtZUdkay5jcHAgXAogICAgICAgICBwYWdlL2dkay9D
b250ZXh0TWVudUNsaWVudEdkay5jcHAgXAogICAgICAgICBwYWdlL2dkay9EcmFnQ29udHJvbGxl
ckdkay5jcHAgXAogICAgICAgICBwYWdlL2dkay9JbnNwZWN0b3JDbGllbnRHZGsuY3BwIFwKQEAg
LTg2MCw3ICs4NjEsNiBAQCBnZGstcG9ydCB7CiAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0
YUdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHAgXAogICAgICAgICBw
bGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9n
ZGsvRnJhbWVHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2Rl
R2RrLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAgXAogICAgICAg
ICBwbGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcCBiL1dlYkNvcmUvbG9hZGVyL2dkay9GcmFt
ZUxvYWRlckNsaWVudEdkay5jcHAKaW5kZXggOGNmMzNjMS4uYWUyZGJjNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcAorKysgYi9XZWJDb3Jl
L2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2dkay9GcmFt
ZUxvYWRlckNsaWVudEdkay5oIGIvV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50
R2RrLmgKaW5kZXggYjU3YmIyOC4uNDljNzViYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIv
Z2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1l
TG9hZGVyQ2xpZW50R2RrLmgKQEAgLTM2LDkgKzM2LDYgQEAKIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXRHdGtGcmFtZSBXZWJLaXRHdGtGcmFtZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Y2xhc3MgRnJhbWVHZGs7Ci0KICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudEdkayA6IHB1Ymxp
YyBGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICBGcmFtZUxvYWRlckNs
aWVudEdkayhXZWJLaXRHdGtGcmFtZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2dkay9G
cmFtZUdkay5jcHAgYi9XZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIxZGNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wYWdlL2dkay9GcmFtZUdkay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5k
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorICAgIAordm9pZCBGcmFtZTo6Y2xlYW51
cFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCit7ICAgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30g
ICAKKyAgICAKK0RyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkKK3sg
ICAgICAgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBG
cmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgRnJhbWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgKaW5kZXggYTc1ZDYwMC4uMmRmOGVmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oCkBAIC00NSw3ICs0NSw3IEBAIHR5cGVkZWYgbG9uZyBMUEFSQU07CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50
OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShRVCkKQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShHREspCi0gICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudChH
ZGtFdmVudCopOworICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqKTsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtTW91c2VFdmVudC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZl
bnQuaAppbmRleCAxMGU4MzU3Li43ZWRlNjRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtTW91c2VFdmVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgKQEAgLTQ5LDcgKzQ5LDggQEAgdHlwZWRlZiBsb25nIExQQVJBTTsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7Cit0
eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247Cit0eXBlZGVmIHN0
cnVjdCBfR2RrRXZlbnRNb3Rpb24gR2RrRXZlbnRNb3Rpb247CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFFUKQpAQCAtMTE4LDcgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ym9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0ZWRXZWJWaWV3
OyB9CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspIAotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQoR2RrRXZlbnQqKTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50QnV0dG9u
Kik7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlvbiopOwogI2VuZGlm
CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChRTW91c2VFdmVu
dCosIGludCBjbGlja0NvdW50KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1XaGVlbEV2ZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCmlu
ZGV4IGJiMDhlZGIuLmFmNTY0YWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1XaGVlbEV2ZW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQu
aApAQCAtNDMsNyArNDMsNyBAQCB0eXBlZGVmIGxvbmcgTFBBUkFNOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShHREspCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVkZWYg
c3RydWN0IF9HZGtFdmVudFNjcm9sbCBHZGtFdmVudFNjcm9sbDsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oUVQpCkBAIC04NSw3ICs4NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
UGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQsIFdQQVJBTSwgTFBBUkFNLCBib29sIGlzSG9yaXpvbnRh
bCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspCi0gICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dChHZGtFdmVudCopOworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwq
KTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQo
UVdoZWVsRXZlbnQqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2Rr
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWVkYjU2ZS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dk
ay9GcmFtZUdkay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tIAotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRnJhbWVHZGsuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5k
bGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudEdkay5oIgotI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIktleWJvYXJkQ29k
ZXMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRl
clRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJl
c291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCi0jaW5jbHVkZSAi
d2Via2l0Z3RrZnJhbWUuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0KLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci0v
LyBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUgd2hlcmUKLS8vIGl0
IHNob3VsZCBnbwotLy8gSSBkb24ndCBrbm93IHdoYXQgdGhlIHBsYW5zIG9yIGRlc2lnbiBpcwot
Ly8gZm9yIG5vbmUgY29kZSByZXNvdXJjZXMKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRv
QXJyYXkoY29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQotewotICAgIFZlY3RvcjxjaGFyPiByZXNv
dXJjZTsKLSAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAw
KSB7Ci0gICAgLy99Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQotCi1zdHJ1Y3QgRnJhbWVHZGtF
eHBvc2VEYXRhIHsKLSAgICBHdGtDb250YWluZXIgKmNvbnRhaW5lcjsKLSAgICBHZGtFdmVudEV4
cG9zZSAqZXhwb3NlOwotfTsKLQotc3RhdGljIHZvaWQgZnJhbWVfZ2RrX2V4cG9zZV9jaGlsZChH
dGtXaWRnZXQgKndpZGdldCwgZ3BvaW50ZXIgX2RhdGEpCi17Ci0gICAgRnJhbWVHZGtFeHBvc2VE
YXRhKiBkYXRhID0gKEZyYW1lR2RrRXhwb3NlRGF0YSopX2RhdGE7Ci0gICAgaW50IHdpZHRoLCBo
ZWlnaHQ7Ci0gICAgZ3RrX2NvbnRhaW5lcl9wcm9wYWdhdGVfZXhwb3NlKGRhdGEtPmNvbnRhaW5l
ciwgd2lkZ2V0LCBkYXRhLT5leHBvc2UpOwotfSAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1G
cmFtZUdkazo6RnJhbWVHZGsoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQsIEZyYW1lTG9hZGVyQ2xpZW50R2RrKiBmcmFtZUxvYWRlcikKLSAgICA6IEZyYW1l
KHBhZ2UsIG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXIpCi17Ci0gICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gcGFnZS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7Ci0g
ICAgc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7Ci0gICAgc2V0dGluZ3Mt
PnNldFNob3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFT
Y3JpcHRFbmFibGVkKHRydWUpOwotCi0gICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRT
aXplKDE0KTsKLSAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKLSAgICBzZXR0
aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBOZXcgUm9tYW4iKTsKLSAgICBzZXR0aW5n
cy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKLSAgICBzZXR0aW5ncy0+c2V0Rml4
ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7Ci0gICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZh
bWlseSgiQXJpYWwiKTsKLX0KLQotRnJhbWVHZGs6On5GcmFtZUdkaygpCi17Ci0gICAgbG9hZGVy
KCktPmNhbmNlbEFuZENsZWFyKCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmR1bXBSZW5kZXJUcmVl
KCkgY29uc3QKLXsKLSAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICB2aWV3
KCktPmxheW91dCgpOwotICAgIAotICAgIFN0cmluZyB0eHQgPSBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHJlbmRlcmVyKCkpOwotICAgIENTdHJpbmcgdXRmOFN0ciA9IHR4dC51dGY4KCk7Ci0gICAg
Y29uc3QgY2hhciAqdXRmOCA9IHV0ZjhTdHIuZGF0YSgpOwotICAgIGlmICh1dGY4KQotICAgICAg
ICBwcmludGYoIiVzXG4iLCB1dGY4KTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50ZigiRnJhbWVH
ZGs6OmR1bXBSZW5kZXJUcmVlKCkgbm8gZGF0YVxuIik7Ci19Ci0KLWJvb2wgRnJhbWVHZGs6Omtl
eVByZXNzKGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCi17Ci0gICAgaWYg
KCFldmVudEhhbmRsZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGV2
ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6Omhh
bmRsZUdka0V2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBl
KSB7Ci0KLSAgICAgICAgY2FzZSBHREtfRVhQT1NFOiB7Ci0gICAgICAgICAgICBHZGtSZWN0YW5n
bGUgY2xpcDsKLSAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9z
ZS5yZWdpb24sICZjbGlwKTsKLSAgICAgICAgICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVn
aW9uKGV2ZW50LT5hbnkud2luZG93LCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7Ci0gICAgICAgICAg
ICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7Ci0gICAgICAgICAgICBjdHguc2V0R2Rr
RHJhd2FibGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICAg
ICAgICAgICAgICB2aWV3KCktPmxheW91dCgpOwotICAgICAgICAgICAgICAgIEludFJlY3QgcmVj
dChjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOwotICAgICAgICAgICAg
ICAgIHBhaW50KCZjdHgsIHJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9f
ZGVzdHJveShjcik7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBNYWtlIHN1cmUg
Y2hpbGRyZW4gb2YgdGhlIHZpZXcgZ2V0IHJlZHJhd24KLSAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgRnJhbWVHZGtFeHBvc2VEYXRhIGRhdGEgPSB7IEdUS19DT05UQUlORVIodmlldygpLT5n
dGtXaWRnZXQoKSksICZldmVudC0+ZXhwb3NlIH07Ci0gICAgICAgICAgICBndGtfY29udGFpbmVy
X2ZvcmFsbChHVEtfQ09OVEFJTkVSKHZpZXcoKS0+Z3RrV2lkZ2V0KCkpLCBmcmFtZV9nZGtfZXhw
b3NlX2NoaWxkLCAmZGF0YSk7Ci0gICAgICAgICAgICBnZGtfd2luZG93X2VuZF9wYWludChldmVu
dC0+YW55LndpbmRvdyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FzZSBHREtfQ09ORklHVVJFOiB7Ci0gICAgICAgICAgICB2aWV3KCkt
PnVwZGF0ZUdlb21ldHJ5KGV2ZW50LT5jb25maWd1cmUud2lkdGgsIGV2ZW50LT5jb25maWd1cmUu
aGVpZ2h0KTsKLSAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTDogewotICAgICAgICAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgdmlldygpLT53
aGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHdoZWVsRXZlbnQuaXNBY2Nl
cHRlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgSGl0VGVzdFJl
cXVlc3QgaGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBIaXRUZXN0UmVz
dWx0IGhpdFRlc3RSZXN1bHQod2hlZWxFdmVudC5wb3MoKSk7Ci0gICAgICAgICAgICByZW5kZXJl
cigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOwotICAgICAg
ICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIC8q
Ci0gICAgICAgICAgICAgKiBGSVhNRTogRG9lcyB0aGlzIGJlbG9uZyBoZXJlPwotICAgICAgICAg
ICAgICogRGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKLSAgICAgICAgICAgICAqIG5vdCBz
dXJlIHdoeSBpdHMgbnVsbAotICAgICAgICAgICAgICogYnJva2UgYW55d2F5IHdoZW4gaXRzIG5v
dCBudWxsCi0gICAgICAgICAgICAgKiBkb1Njcm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRl
bHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfRFJBR19FTlRFUjoKLSAgICAg
ICAgY2FzZSBHREtfRFJBR19MRUFWRToKLSAgICAgICAgY2FzZSBHREtfRFJBR19NT1RJT046Ci0g
ICAgICAgIGNhc2UgR0RLX0RSQUdfU1RBVFVTOgotICAgICAgICBjYXNlIEdES19EUk9QX1NUQVJU
OgotICAgICAgICBjYXNlIEdES19EUk9QX0ZJTklTSEVEOiB7Ci0gICAgICAgICAgICAvL2Jvb2wg
dXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7
Ci0gICAgICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0gICAgICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmRE
cm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAg
ICAgICAgIGV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVu
dCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoK
LSAgICAgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRP
Tl9QUkVTUzoKLSAgICAgICAgICAgIGV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZl
bnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBldmVudEhhbmRsZXIoKS0+
aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfS0VZX1BSRVNTOgotICAgICAgICBjYXNl
IEdES19LRVlfUkVMRUFTRTogewotICAgICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtl
eUV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGtleVByZXNzKGtleUV2ZW50KTsKLSAgICAgICAg
fQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lk
IEZyYW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRnJhbWU6OmNsZWFudXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9y
U2VsZWN0aW9uKCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1l
R2RrLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3MmNlN2M1Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZyYW1lR2RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20g
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZyYW1lR2RrX2gKLSNk
ZWZpbmUgRnJhbWVHZGtfaAotCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVD
bGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWVHZGs7Ci1jbGFzcyBGcmFtZUxvYWRlckNsaWVudEdkazsKLWNsYXNzIEZvcm1EYXRhOwot
Ci0KLWNsYXNzIEZyYW1lR2RrIDogcHVibGljIEZyYW1lIHsKLXB1YmxpYzoKLSAgICBGcmFtZUdk
ayhQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgRnJhbWVMb2FkZXJDbGllbnRHZGsqKTsK
LSAgICB2aXJ0dWFsIH5GcmFtZUdkaygpOwotCi0gICAgdm9pZCBoYW5kbGVHZGtFdmVudChHZGtF
dmVudCopOwotICAgIGJvb2wga2V5UHJlc3MoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBr
ZXlFdmVudCk7Ci0KLSAgICB2b2lkIGR1bXBSZW5kZXJUcmVlKCkgY29uc3Q7Ci19OwotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3BwCmluZGV4IGJlYTdkZGQuLjkz
YmZjZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAKQEAgLTQ1OCwxNyArNDU4
LDE3IEBAIHN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQg
a2V5Y29kZSkKIAogfQogCi1QbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudChHZGtFdmVudCogZXZlbnQpCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5
Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpCiB7CiAgICAgbV9pc0tleVVwID0gZXZlbnQt
PnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFOwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+a2V5LnN0
YXRlICYgR0RLX1NISUZUX01BU0sgIT0gMDsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+a2V5LnN0
YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOwotICAgIG1fYWx0S2V5ID0gZXZlbnQtPmtleS5z
dGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMDsKLSAgICBtX21ldGFLZXkgPSBldmVudC0+a2V5LnN0
YXRlICYgR0RLX01PRDJfTUFTSyAhPSAwOwotICAgIG1fdGV4dCA9IGV2ZW50LT5rZXkuc3RyaW5n
OwotICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+a2V5LnN0cmluZzsKLSAgICBtX2tleUlk
ZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5LmtleXZhbCk7
Ci0gICAgbV9XaW5kb3dzS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQt
PmtleS5rZXl2YWwpOworICAgIG1fc2hpZnRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRf
TUFTSyAhPSAwOworICAgIG1fY3RybEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01B
U0sgIT0gMDsKKyAgICBtX2FsdEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0g
MDsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDA7Cisg
ICAgbV90ZXh0ID0gZXZlbnQtPnN0cmluZzsKKyAgICBtX3VubW9kaWZpZWRUZXh0ID0gZXZlbnQt
PnN0cmluZzsKKyAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29k
ZShldmVudC0+a2V5dmFsKTsKKyAgICBtX1dpbmRvd3NLZXlDb2RlID0gd2luZG93c0tleUNvZGVG
b3JLZXlFdmVudChldmVudC0+a2V5dmFsKTsKICAgICBtX2F1dG9SZXBlYXQgPSBmYWxzZTsKICAg
ICBtX2lzS2V5cGFkID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2Rr
L01vdXNlRXZlbnRHZGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5j
cHAKaW5kZXggZTYwMGRlMi4uMTEzYTc5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvTW91c2VFdmVudEdkay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVu
dEdkay5jcHAKQEAgLTI4LDU3ICsyOCw3MSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVu
dC5oIgogCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgorI2lu
Y2x1ZGUgIkFzc2VydGlvbnMuaCIKKwogI2luY2x1ZGUgPGdkay9nZGsuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91
dCB3aGljaCBtb2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFf
TUFTSy4KIAotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQq
IGV2ZW50KQorUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRC
dXR0b24qIGV2ZW50KQogewogICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKLSAgICBt
X3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLngsIChpbnQpZXZlbnQtPm1v
dGlvbi55KTsKLSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+bW90
aW9uLnhfcm9vdCwgKGludClldmVudC0+bW90aW9uLnlfcm9vdCk7Ci0gICAgbV9zaGlmdEtleSA9
IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKLSAgICBtX2N0cmxLZXkgPSBl
dmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2
ZW50LT5idXR0b24uc3RhdGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1fbWV0YUtleSA9IGV2ZW50
LT5idXR0b24uc3RhdGUgJiBHREtfTU9EMl9NQVNLOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2lu
dCgoaW50KWV2ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0g
SW50UG9pbnQoKGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOworICAgIG1f
c2hpZnRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBtX2N0cmxLZXkg
PSBldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1fYWx0S2V5ID0gZXZlbnQt
PnN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBH
REtfTU9EMl9NQVNLOwogCiAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgICAgICBjYXNl
IEdES19NT1RJT05fTk9USUZZOgotICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50
TW92ZWQ7Ci0gICAgICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAgIGNhc2UgR0RLX0JV
VFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNC
VVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIG1fZXZl
bnRUeXBlID0gTW91c2VFdmVudFByZXNzZWQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBH
REtfQlVUVE9OX1JFTEVBU0UpIHsKKyAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVu
dFJlbGVhc2VkOwogICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtf
MkJVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKLSAgICAgICAg
Y2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNl
RXZlbnRQcmVzc2VkOwotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05f
UkVMRUFTRSkgewotICAgICAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVh
c2VkOwotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCi0gICAgICAgICAgICAgICAg
bV9jbGlja0NvdW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdE
S18yQlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDI7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAg
ICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50
eXBlID09IEdES19CVVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAxOwor
ICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKKyAgICAg
ICAgICAgIG1fY2xpY2tDb3VudCA9IDI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09
IEdES18zQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKIAotICAg
ICAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uID09IDEpCi0gICAgICAgICAgICAgICAg
bV9idXR0b24gPSBMZWZ0QnV0dG9uOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRv
bi5idXR0b24gPT0gMikKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uID09IDMpCi0gICAgICAg
ICAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAxKQorICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0
QnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDIpCisgICAgICAgICAg
ICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRv
biA9PSAzKQorICAgICAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5r
bm93biBtb3VzZSBldmVudFxuIik7Ci0gICAgICAgICAgICBhc3NlcnQoMCk7Ci0gICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07CiB9CiAKK1Bs
YXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50TW90aW9uKiBtb3Rp
b24pCit7CisgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworICAgIG1fcG9zaXRpb24g
PSBJbnRQb2ludCgoaW50KW1vdGlvbi0+eCwgKGludCltb3Rpb24tPnkpOworICAgIG1fZ2xvYmFs
UG9zaXRpb24gPSBJbnRQb2ludCgoaW50KW1vdGlvbi0+eF9yb290LCAoaW50KW1vdGlvbi0+eV9y
b290KTsKKyAgICBtX3NoaWZ0S2V5ID0gbW90aW9uLT5zdGF0ZSAmIEdES19TSElGVF9NQVNLOwor
ICAgIG1fY3RybEtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1f
YWx0S2V5ID0gbW90aW9uLT5zdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5ID0g
bW90aW9uLT5zdGF0ZSAmIEdES19NT0QyX01BU0s7CisKKyAgICBzd2l0Y2ggKG1vdGlvbi0+dHlw
ZSkgeworICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIG1fZXZlbnRUeXBlID0g
TW91c2VFdmVudE1vdmVkOworICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAgICAgICBt
X2NsaWNrQ291bnQgPSAwOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKaW5kZXggNjIyNjBiNC4uMTViYWZlNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCkBAIC00Miw3ICs0Miw2IEBA
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRl
ICJGb250LmgiCi0jaW5jbHVkZSAiRnJhbWVHZGsuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudEdkay5oIgpAQCAtMTYzLDcgKzE2Miw2IEBAIFN0cmluZyBGaWxlQ2hvb3Nlcjo6YmFzZW5h
bWVGb3JXaWR0aChjb25zdCBGb250JiwgaW50IHdpZHRoKSBjb25zdCB7IG5vdEltcGxlbWVuCiBD
b2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZv
aWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7
IH0KIAotdm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkgeyB9CiAKIGJvb2wgUmVz
b3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiBib29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Js
b2NrZWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dkay9XaGVlbEV2ZW50R2RrLmNwcAppbmRleCBjYzMzMzE2Li4zYzI1OGQ2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcApAQCAtMzIsMjcgKzMyLDI3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQo
R2RrRXZlbnQqIGV2ZW50KQorUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQo
R2RrRXZlbnRTY3JvbGwqIGV2ZW50KQogewogICAgIG1fZGVsdGFYID0gMDsKICAgICBtX2RlbHRh
WSA9IDA7CiAKLSAgICBpZiAoZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9V
UCkKKyAgICBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1VQKQogICAgICAgICBt
X2RlbHRhWSA9IC0xMjA7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPT0g
R0RLX1NDUk9MTF9MRUZUKQorICAgIGVsc2UgaWYgKGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1ND
Uk9MTF9MRUZUKQogICAgICAgICBtX2RlbHRhWCA9IC0xMjA7Ci0gICAgZWxzZSBpZiAoZXZlbnQt
PnNjcm9sbC5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9SSUdIVCkKKyAgICBlbHNlIGlmIChldmVu
dC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfUklHSFQpCiAgICAgICAgIG1fZGVsdGFYID0gMTIw
OwogICAgIGVsc2UKICAgICAgICAgbV9kZWx0YVkgPSAxMjA7CiAKLSAgICBtX3Bvc2l0aW9uID0g
SW50UG9pbnQoKGludClldmVudC0+c2Nyb2xsLngsIChpbnQpZXZlbnQtPnNjcm9sbC55KTsKLSAg
ICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+c2Nyb2xsLnhfcm9vdCwg
KGludClldmVudC0+c2Nyb2xsLnlfcm9vdCk7CisgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChp
bnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkpOworICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQ
b2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQtPnlfcm9vdCk7CiAgICAgbV9pc0Fj
Y2VwdGVkID0gZmFsc2U7Ci0gICAgbV9zaGlmdEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBH
REtfU0hJRlRfTUFTSzsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RL
X0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtf
TU9EMV9NQVNLOwotICAgIG1fbWV0YUtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtfTU9E
Ml9NQVNLOworICAgIG1fc2hpZnRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsK
KyAgICBtX2N0cmxLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1f
YWx0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBl
dmVudC0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOwogICAgIG1faXNDb250aW51b3VzID0gZmFsc2U7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCmluZGV4IDM2YmEwMmIuLjBmZmEyM2Qg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5j
bHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTY3LDkgKzE2NiwyNyBAQCB2b2lkIFdpZGdldDo6
cmVtb3ZlRnJvbVBhcmVudCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXaWRn
ZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29uc3QmKQorLyoKKyAqIHNpbWls
aWFyIHRvIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZSwgd2Ugd2FudCB0byBtYWtlIHN1
cmUKKyAqIGd0a1dpZGdldCgpIGlzIHBhaW50ZWQgbm93LgorICovCit2b2lkIFdpZGdldDo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0VYUE9TRSk7CisgICAgZXZl
bnQtPmV4cG9zZSA9ICpjb250ZXh0LT5nZGtFeHBvc2VFdmVudCgpOworICAgIGV2ZW50LT5leHBv
c2UucmVnaW9uID0gZ3RrX3dpZGdldF9yZWdpb25faW50ZXJzZWN0KGd0a1dpZGdldCgpLCBldmVu
dC0+ZXhwb3NlLnJlZ2lvbik7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5leHBvc2Uud2luZG93
KTsKKworICAgIGlmICghZ2RrX3JlZ2lvbl9lbXB0eShldmVudC0+ZXhwb3NlLnJlZ2lvbikpIHsK
KyAgICAgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+ZXhwb3NlLnJlZ2lvbiwgJmV2
ZW50LT5leHBvc2UuYXJlYSk7CisgICAgICAgIGd0a193aWRnZXRfc2VuZF9leHBvc2UoZ3RrV2lk
Z2V0KCksIGV2ZW50KTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGd0a1dp
ZGdldCgpLCBldmVudCk7CisgICAgZ2RrX2V2ZW50X2ZyZWUgKGV2ZW50KTsKIH0KIAogdm9pZCBX
aWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IDc3MWMxNTMuLmU1Y2ViY2EgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNDYsNiArNDYsNyBAQCB0eXBlZGVm
IHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdE
SykKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudEV4cG9zZSBHZGtFdmVudEV4cG9zZTsKIHR5cGVk
ZWYgc3RydWN0IF9HZGtEcmF3YWJsZSBHZGtEcmF3YWJsZTsKICNlbmRpZgogCkBAIC0yMDgsOCAr
MjA5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShHREsp
Ci0gICAgICAgIHZvaWQgc2V0R2RrRHJhd2FibGUoR2RrRHJhd2FibGUqKTsKLSAgICAgICAgR2Rr
RHJhd2FibGUgKmdka0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0R2RrRXhwb3Nl
RXZlbnQoR2RrRXZlbnRFeHBvc2UqKTsKKyAgICAgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxl
KCkgY29uc3Q7CisgICAgICAgIEdka0V2ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVudCgpIGNvbnN0
OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBiMDkyYTNkLi5l
ZDRlMDgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPGZsb2F0PiBsYXllcnM7CiAKICNpZiBQTEFURk9STShHREspCi0gICAgR2RrRHJhd2Fi
bGUgKmRyYXdhYmxlOworICAgIEdka0V2ZW50RXhwb3NlICpleHBvc2U7CiAjZW5kaWYKIH07CiAK
QEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3Zlcihj
YWlyb190KiBjciwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdAogR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQogICAgIDog
IGNyKDApCiAjaWYgUExBVEZPUk0oR0RLKQotICAgICwgZHJhd2FibGUoMCkKKyAgICAsIGV4cG9z
ZSgwKQogI2VuZGlmCiB7CiB9CkBAIC03OTgsMTQgKzc5OCwxOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BM
ZWZ0LCBjbwogfQogCiAjaWYgUExBVEZPUk0oR0RLKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEdka0RyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRHZGtFeHBvc2VFdmVudChHZGtFdmVudEV4cG9zZSogZXhwb3NlKQogewotICAgIG1fZGF0
YS0+ZHJhd2FibGUgPSBkcmF3YWJsZTsKKyAgICBtX2RhdGEtPmV4cG9zZSA9IGV4cG9zZTsKK30K
KworR2RrRXZlbnRFeHBvc2UqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2RhdGEtPmV4cG9zZTsKIH0KIAogR2RrRHJhd2FibGUqIEdyYXBo
aWNzQ29udGV4dDo6Z2RrRHJhd2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPmRy
YXdhYmxlOworICAgIHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7
CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsv
SW1hZ2VHZGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3Bw
CmluZGV4IDNlMWYxMjMuLmUwMzZjNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dk
ay9JbWFnZUdkay5jcHAKQEAgLTMwLDggKzMwLDE3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlIDxjYWlyby5oPgogIAotLy8gVGhpcyBmdW5jdGlvbiBsb2FkcyByZXNv
dXJjZXMgZnJvbSBXZWJLaXQKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29u
c3QgY2hhciopOworLyoKKyAqIFRPRE86IFdlIHNob3VsZCBmb2xsb3cgUXQgYW5kIG1vdmUgdGhh
dCB0byB3ZWJraXRndGtzZXR0aW5ncy4KKyAqIEZvciBub3cgaXQgaXMgY29waWVkIHRvIHRoZSBm
aWxlIGFjdHVhbGx5IHVzaW5nIHRoaXMgbWV0aG9kLgorICovCitzdGF0aWMgVmVjdG9yPGNoYXI+
IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKiByZXNvdXJjZU5hbWUpCit7ICAgCisg
ICAgVmVjdG9yPGNoYXI+IHJlc291cmNlOworICAgIC8vaWYgKHN0cmNtcChyZXNvdXJjZU5hbWUs
Im1pc3NpbmdJbWFnZSIpID09IDApIHsKKyAgICAvL30KKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrLW1hcnNoYWwubGlzdCBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxp
c3QKaW5kZXggYWNhNDY3YS4uNDBkMWU4NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrLW1hcnNoYWwubGlzdAorKysgYi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGstbWFyc2hh
bC5saXN0CkBAIC0xLDIgKzEsMyBAQAogVk9JRDpTVFJJTkcsU1RSSU5HCiBWT0lEOk9CSkVDVCxC
T09MRUFOCitWT0lEOk9CSkVDVCxPQkpFQ1QKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQXBpL3dl
YmtpdGd0a2ZyYW1lLmNwcCBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAppbmRl
eCBhZDA5MDQ4Li4xNjI1MGYxIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtm
cmFtZS5jcHAKKysrIGIvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCkBAIC0zMSwx
MSArMzEsMTAgQEAKICNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCiAjaW5jbHVkZSAid2Via2l0
Z3RrcHJpdmF0ZS5oIgogCi0jaW5jbHVkZSAiRnJhbWVHZGsuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudEdkay5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRHdGs7CiAKIGV4dGVybiAiQyIgewog
CkBAIC02Miw2ICs2MSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfZnJhbWVfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSAqcHJpdmF0ZV9k
YXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX0ZSQU1FKG9iamVj
dCkpOwogICAgIGRlbGV0ZSBwcml2YXRlX2RhdGEtPmZyYW1lOworCisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2d0a19mcmFtZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQog
CiBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0R3RrRnJhbWVD
bGFzcyogZnJhbWVfY2xhc3MpCkBAIC0xMjAsMjEgKzEyMSwyMiBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfZ3RrX2ZyYW1lX2luaXQoV2ViS2l0R3RrRnJhbWUqIGZyYW1lKQogewogfQogCi1HT2JqZWN0
KiB3ZWJraXRfZ3RrX2ZyYW1lX25ldyhXZWJLaXRHdGtQYWdlKiBwYWdlKQorR09iamVjdCogd2Vi
a2l0X2d0a19mcmFtZV9uZXcoV2ViS2l0R3RrUGFnZSogd2ViX3BhZ2UpCiB7CiAgICAgV2ViS2l0
R3RrRnJhbWUqIGZyYW1lID0gV0VCS0lUX0dUS19GUkFNRShnX29iamVjdF9uZXcoV0VCS0lUX0dU
S19UWVBFX0ZSQU1FLCBOVUxMKSk7CiAgICAgV2ViS2l0R3RrRnJhbWVQcml2YXRlICpmcmFtZV9k
YXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgV2ViS2l0R3Rr
UGFnZVByaXZhdGUgICpwYWdlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFn
ZSk7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IGNvcmUod2ViX3BhZ2UpOwogCiAgICAgZnJh
bWVfZGF0YS0+Y2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50R2RrKGZyYW1lKTsKLSAgICBm
cmFtZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZUdkayhwYWdlX2RhdGEtPnBhZ2UsIDAsIGZyYW1l
X2RhdGEtPmNsaWVudCk7CisgICAgZnJhbWVfZGF0YS0+ZnJhbWUgPSBuZXcgRnJhbWUocGFnZSwg
MCwgZnJhbWVfZGF0YS0+Y2xpZW50KTsKKwogCiAgICAgRnJhbWVWaWV3KiBmcmFtZV92aWV3ID0g
bmV3IEZyYW1lVmlldyhmcmFtZV9kYXRhLT5mcmFtZSk7CiAgICAgZnJhbWVfZGF0YS0+ZnJhbWUt
PnNldFZpZXcoZnJhbWVfdmlldyk7CiAKLSAgICBmcmFtZV92aWV3LT5zZXRHdGtXaWRnZXQoR1RL
X0xBWU9VVChwYWdlKSk7CisgICAgZnJhbWVfdmlldy0+c2V0R3RrV2lkZ2V0KEdUS19MQVlPVVQo
d2ViX3BhZ2UpKTsKICAgICBmcmFtZV9kYXRhLT5mcmFtZS0+aW5pdCgpOwotICAgIGZyYW1lX2Rh
dGEtPnBhZ2UgPSBwYWdlOworICAgIGZyYW1lX2RhdGEtPnBhZ2UgPSB3ZWJfcGFnZTsKIAogICAg
IHJldHVybiBHX09CSkVDVChmcmFtZSk7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmNwcCBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCmluZGV4
IDQ2MmVhMWQuLjU5MmZhMzkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuY3BwCisrKyBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCkBAIC0xLDQgKzEs
NSBAQAogLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwLDYgKzQxLDEzIEBACiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJTdWJzdGl0dXRlRGF0
YS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjIsMzEgKzcwLDEyMiBAQCBlbnVtIHsKIAogc3Rh
dGljIGd1aW50IHdlYmtpdF9ndGtfcGFnZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsK
IAotR19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdlLCB3ZWJraXRfZ3RrX3BhZ2UsIEdUS19UWVBF
X0xBWU9VVCkKK0dfREVGSU5FX1RZUEUoV2ViS2l0R3RrUGFnZSwgd2Via2l0X2d0a19wYWdlLCBH
VEtfVFlQRV9DT05UQUlORVIpCiAKLXN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9yZW5kZXJp
bmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KEd0a1dpZGdldCosIEdka0V2ZW50KiBldmVudCwgV2Vi
S2l0R3RrUGFnZSogcGFnZSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfZXhwb3Nl
X2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSogZXZlbnQpCiB7Ci0gICAg
V2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJ
VkFURShwYWdlKTsKLSAgICBXZWJLaXRHdGtGcmFtZVByaXZhdGUqIGZyYW1lX2RhdGEgPSBXRUJL
SVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VfZGF0YS0+bWFpbl9mcmFtZSk7CisgICAgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFH
RSh3aWRnZXQpKSk7CisKKyAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAgICBnZGtfcmVnaW9uX2dl
dF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwKTsKKyAgICBjYWlyb190KiBjciA9IGdka19j
YWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdyk7CisgICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7
CisgICAgY3R4LnNldEdka0V4cG9zZUV2ZW50KGV2ZW50KTsKKyAgICBpZiAoZnJhbWUtPnJlbmRl
cmVyKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCisgICAg
ICAgICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKKyAgICAgICAgSW50UmVjdCByZWN0KGNs
aXAueCwgY2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCk7CisgICAgICAgIGZyYW1lLT52
aWV3KCktPnBhaW50KCZjdHgsIHJlY3QpOworICAgIH0KKyAgICBjYWlyb19kZXN0cm95KGNyKTsK
KworICAgIHJldHVybiBUUlVFOworfQogCi0gICAgZnJhbWVfZGF0YS0+ZnJhbWUtPmhhbmRsZUdk
a0V2ZW50KGV2ZW50KTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2Vfa2V5X2V2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6
RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRn
ZXQpKSk7CisKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5
Ym9hcmRFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfcmVzaXplX2NhbGxiYWNrKEd0a1dpZGdldCos
IEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24sIFdlYktpdEd0a1BhZ2UqIHBhZ2UpCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX2J1dHRvbl9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRCdXR0b24qIGV2ZW50KQogewotICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdl
X2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0R3Rr
RnJhbWVQcml2YXRlKiBmcmFtZV9kYXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShw
YWdlX2RhdGEtPm1haW5fZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUo
Z2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOworICAgIAorICAgIGlm
IChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpCisgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2
ZW50KSk7CisgICAgZWxzZQorICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1v
dXNlUHJlc3NFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAgICByZXR1cm4gVFJV
RTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdl
dCkpKTsKKworICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1v
dXNlRXZlbnQoZXZlbnQpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9ndGtfcGFnZV9zY3JvbGxfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
U2Nyb2xsKiBldmVudCkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZy
YW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKworICAgIFBsYXRmb3JtV2hl
ZWxFdmVudCB3aGVlbEV2ZW50KGV2ZW50KTsKKyAgICBmcmFtZS0+dmlldygpLT53aGVlbEV2ZW50
KHdoZWVsRXZlbnQpOworICAgIGlmICh3aGVlbEV2ZW50LmlzQWNjZXB0ZWQoKSkKKyAgICAgICAg
cmV0dXJuIFRSVUU7CisKKyAgICBIaXRUZXN0UmVxdWVzdCBoaXRUZXN0UmVxdWVzdCh0cnVlLCB0
cnVlKTsKKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQod2hlZWxFdmVudC5wb3MoKSk7
CisgICAgZnJhbWUtPnJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3QoaGl0VGVzdFJlcXVlc3Qs
IGhpdFRlc3RSZXN1bHQpOworICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9k
ZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJu
IFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9zaXplX2FsbG9jYXRlKEd0
a1dpZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQoreworICAgIEdUS19X
SURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUo
d2lkZ2V0LCBhbGxvY2F0aW9uKTsKKworICAgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEKHdpZGdl
dCkpCisgICAgICAgIGdka193aW5kb3dfcmVzaXplKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpLT5i
aW5fd2luZG93LCBhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKIAotICAg
IGZyYW1lX2RhdGEtPmZyYW1lLT52aWV3KCktPnVwZGF0ZUdlb21ldHJ5KGFsbG9jYXRpb24tPndp
ZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOwotICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5mb3JjZUxh
eW91dCgpOwotICAgIGZyYW1lX2RhdGEtPmZyYW1lLT52aWV3KCktPmFkanVzdFZpZXdTaXplKCk7
Ci0gICAgZnJhbWVfZGF0YS0+ZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOworICAgIFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lk
Z2V0KSkpOworICAgIGlmICghZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZnJhbWUtPnZpZXcoKS0+cmVzaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWln
aHQpOworICAgIGZyYW1lLT5mb3JjZUxheW91dCgpOworICAgIGZyYW1lLT52aWV3KCktPmFkanVz
dFZpZXdTaXplKCk7CisgICAgZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOwogfQogCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRzKEd0a1dp
ZGdldCogd2luLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorLyoKKyAqIGl0IGlzIGEgR3RrQ29udGFp
bmVyIHRvIGltcGxlbWVudCBTY3JvbGxWaWV3LiBBbmQgd2UgbmVlZCB0byBtYWtlIGl0IHNpbWls
aWFyCisgKiB0byBHdGtMYXlvdXQgdG8gaGF2ZSBzYW5lIHBhaW50aW5nLgorICovCitzdGF0aWMg
dm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBn
ZGtfd2luZG93X3NldF9ldmVudHMoR1RLX0lTX0xBWU9VVCh3aW4pID8gR1RLX0xBWU9VVCh3aW4p
LT5iaW5fd2luZG93IDogd2luLT53aW5kb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChH
ZGtFdmVudE1hc2spKEdES19FWFBPU1VSRV9NQVNLCisgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mo
d2lkZ2V0LCBHVEtfUkVBTElaRUQpOworCisgICAgR2RrV2luZG93QXR0ciBhdHRyaWJ1dGVzOwor
CisgICAgYXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7CisgICAgYXR0
cmlidXRlcy54ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLng7CisgICAgYXR0cmlidXRlcy55ID0gd2lk
Z2V0LT5hbGxvY2F0aW9uLnk7CisgICAgYXR0cmlidXRlcy53aWR0aCA9IHdpZGdldC0+YWxsb2Nh
dGlvbi53aWR0aDsKKyAgICBhdHRyaWJ1dGVzLmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5o
ZWlnaHQ7CisgICAgYXR0cmlidXRlcy53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOworICAgIGF0
dHJpYnV0ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsICh3aWRnZXQpOworICAgIGF0
dHJpYnV0ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCAod2lkZ2V0KTsKKyAg
ICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJTElUWV9OT1RJRllfTUFTSzsKKwor
ICAgIGdpbnQgYXR0cmlidXRlc19tYXNrID0gR0RLX1dBX1ggfCBHREtfV0FfWSB8IEdES19XQV9W
SVNVQUwgfCBHREtfV0FfQ09MT1JNQVA7CisgICAgd2lkZ2V0LT53aW5kb3cgPSBnZGtfd2luZG93
X25ldyhndGtfd2lkZ2V0X2dldF9wYXJlbnRfd2luZG93ICh3aWRnZXQpLCAmYXR0cmlidXRlcywg
YXR0cmlidXRlc19tYXNrKTsKKyAgICBnZGtfd2luZG93X3NldF9iYWNrX3BpeG1hcCh3aWRnZXQt
PndpbmRvdywgTlVMTCwgRkFMU0UpOworICAgIGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aWRn
ZXQtPndpbmRvdywgd2lkZ2V0KTsKKworICAgIGF0dHJpYnV0ZXMueCA9IDA7CisgICAgYXR0cmli
dXRlcy55ID0gMDsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndp
ZHRoOworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsK
KyAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfRVhQT1NVUkVfTUFTSworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgR0RLX1NDUk9MTF9NQVNLCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBHREtfQlVUVE9OX1BSRVNTX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IEdES19CVVRUT05fUkVMRUFTRV9NQVNLCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBHREtfUE9JTlRFUl9NT1RJT05fTUFTSwpAQCAtOTUsMTUgKzE5NCwxMTEgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2d0a19wYWdlX3JlZ2lzdGVyX3JlbmRlcmluZ19hcmVhX2V2ZW50cyhHdGtX
aWRnZXQqIHdpbiwgV2ViS2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRU
T05fTU9USU9OX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04x
X01PVElPTl9NQVNLCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OMl9N
T1RJT05fTUFTSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjNfTU9U
SU9OX01BU0spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04zX01P
VElPTl9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBndGtfd2lkZ2V0X2dldF9l
dmVudHMod2lkZ2V0KTsKKworICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2UgPSBXRUJLSVRfR1RLX1BB
R0Uod2lkZ2V0KTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gZ2RrX3dpbmRvd19uZXcod2lkZ2V0
LT53aW5kb3csICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzX21hc2spOworICAgIGdka193aW5kb3df
c2V0X3VzZXJfZGF0YShwYWdlLT5iaW5fd2luZG93LCB3aWRnZXQpOworCisgICAgd2lkZ2V0LT5z
dHlsZSA9IGd0a19zdHlsZV9hdHRhY2ggKHdpZGdldC0+c3R5bGUsIHdpZGdldC0+d2luZG93KTsK
KyAgICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgcGFnZS0+YmluX3dp
bmRvdywgR1RLX1NUQVRFX05PUk1BTCk7CisKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcHJp
dmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworICAgIEhhc2hT
ZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRy
ZW4uZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBj
dXJyZW50ID0gcHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsg
KytjdXJyZW50KQorICAgICAgICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KCpjdXJyZW50
LCBwYWdlLT5iaW5fd2luZG93KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3Vu
cmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0g
V0VCS0lUX0dUS19QQUdFKHdpZGdldCk7CisKKyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEo
cGFnZS0+YmluX3dpbmRvdywgMCk7CisgICAgZ2RrX3dpbmRvd19kZXN0cm95KHBhZ2UtPmJpbl93
aW5kb3cpOworICAgIHBhZ2UtPmJpbl93aW5kb3cgPSAwOworCisgICAgR1RLX1dJREdFVF9DTEFT
Uyh3ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKHdpZGdldCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9tYXAoR3RrV2lkZ2V0KiB3aWRnZXQpCit7Cisg
ICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfTUFQUEVEKTsKKyAgICBXZWJLaXRH
dGtQYWdlUHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRF
KFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKTsKKworICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uZW5kKCk7CisgICAgZm9y
IChIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gcHJpdmF0ZV9k
YXRhLT5jaGlsZHJlbi5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQorICAgICAg
ICBpZiAoR1RLX1dJREdFVF9WSVNJQkxFKCpjdXJyZW50KSAmJiAhR1RLX1dJREdFVF9NQVBQRUQo
KmN1cnJlbnQpKQorICAgICAgICAgICAgZ3RrX3dpZGdldF9tYXAoKCpjdXJyZW50KSk7CisKKyAg
ICBnZGtfd2luZG93X3Nob3coV0VCS0lUX0dUS19QQUdFKHdpZGdldCktPmJpbl93aW5kb3cpOwor
ICAgIGdka193aW5kb3dfc2hvdyh3aWRnZXQtPndpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9ndGtfcGFnZV9zdHlsZV9zZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBvbGRf
c3R5bGUpCit7CisgICAgaWYgKEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVu
dF9jbGFzcyktPnN0eWxlX3NldCkKKyAgICAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfZ3Rr
X3BhZ2VfcGFyZW50X2NsYXNzKS0+c3R5bGVfc2V0KHdpZGdldCwgb2xkX3N0eWxlKTsKKworICAg
IGlmIChHVEtfV0lER0VUX1JFQUxJWkVEKHdpZGdldCkpCisgICAgICAgIGd0a19zdHlsZV9zZXRf
YmFja2dyb3VuZCh3aWRnZXQtPnN0eWxlLCBXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KS0+YmluX3dp
bmRvdywgR1RLX1NUQVRFX05PUk1BTCk7Cit9CiAKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19P
QkpFQ1Qod2luKSwgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0sod2Via2l0X2d0a19wYWdlX3Jl
bmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBwYWdlKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0sod2Via2l0
X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBwYWdlKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1yZWxlYXNlLWV2ZW50IiwgR19D
QUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCks
IHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAiYnV0dG9uLXBy
ZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFu
ZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3
aW4pLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtpdF9ndGtfcGFnZV9y
ZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChHVEtfT0JKRUNUKHdpbiksICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxMQkFDSyh3
ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAic2Nyb2xsLWV2ZW50IiwgR19D
QUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCks
IHBhZ2UpOworc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9hZGQoR3RrQ29u
dGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIFdlYktpdEd0a1Bh
Z2UqIHBhZ2UgPSBXRUJLSVRfR1RLX1BBR0UoY29udGFpbmVyKTsKKyAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2Up
OworCisgICAgcHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5hZGQod2lkZ2V0KTsKKyAgICBpZiAoR1RL
X1dJREdFVF9SRUFMSVpFRChjb250YWluZXIpKQorICAgICAgICBndGtfd2lkZ2V0X3NldF9wYXJl
bnRfd2luZG93KHdpZGdldCwgcGFnZS0+YmluX3dpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zZXRf
cGFyZW50KHdpZGdldCwgR1RLX1dJREdFVChjb250YWluZXIpKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9yZW1vdmUoR3RrQ29udGFpbmVyKiBjb250YWluZXIs
IEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRl
X2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKGNvbnRh
aW5lcikpOworCisgICAgaWYgKHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uY29udGFpbnMod2lkZ2V0
KSkgeworICAgICAgICBndGtfd2lkZ2V0X3VucGFyZW50KHdpZGdldCk7CisgICAgICAgIHByaXZh
dGVfZGF0YS0+Y2hpbGRyZW4ucmVtb3ZlKHdpZGdldCk7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2ZvcmFsbChHdGtDb250YWluZXIqIGNvbnRhaW5l
ciwgZ2Jvb2xlYW4sIEd0a0NhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciBjYWxsYmFja0RhdGEp
Cit7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHByaXZhdGVEYXRhID0gV0VCS0lUX0dUS19Q
QUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtfUEFHRShjb250YWluZXIpKTsKKworICAgIEhhc2hT
ZXQ8R3RrV2lkZ2V0Kj4gY2hpbGRyZW4gPSBwcml2YXRlRGF0YS0+Y2hpbGRyZW47CisgICAgSGFz
aFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2hpbGRyZW4uZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gY2hp
bGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgKCpjYWxs
YmFjaykoKmN1cnJlbnQsIGNhbGxiYWNrRGF0YSk7Cit9CisKKy8qCisgKiB0YWtlIG93bmVyc2hp
cCBvZiB0aGUgYWRqdXN0bWVudHMgYW5kIGlmIHdlIGhhdmUgYSBGcmFtZVZpZXcgYWxyZWFkeSBz
ZXQgdGhlCisgKiBhZGp1c3RtZW50cyBhcyB3ZWxsLgorICovCitzdGF0aWMgdm9pZCB3ZWJraXRf
Z3RrX3BhZ2Vfc2V0X2FkanVzdG1lbnRzKFdlYktpdEd0a1BhZ2UqIHBhZ2UsIEd0a0FkanVzdG1l
bnQqIGhvcml6b250YWxBZGp1c3RtZW50LCBHdGtBZGp1c3RtZW50KiB2ZXJ0aWNhbEFkanVzdG1l
bnQpCit7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZhdGVfZGF0YSA9IFdFQktJVF9H
VEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFnZSkpOworCisgICAgaWYgKHBy
aXZhdGVfZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0X3VucmVm
KHByaXZhdGVfZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOworICAgIGlmIChwcml2YXRlX2Rh
dGEtPnZlcnRpY2FsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdmF0ZV9k
YXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpOworCisgICAgcHJpdmF0ZV9kYXRhLT5ob3Jpem9udGFs
QWRqdXN0bWVudCA9IGhvcml6b250YWxBZGp1c3RtZW50OworICAgIHByaXZhdGVfZGF0YS0+dmVy
dGljYWxBZGp1c3RtZW50ID0gdmVydGljYWxBZGp1c3RtZW50OworCisgICAgaWYgKGhvcml6b250
YWxBZGp1c3RtZW50KQorICAgICAgICBnX29iamVjdF9yZWZfc2luayhob3Jpem9udGFsQWRqdXN0
bWVudCk7CisgICAgaWYgKHZlcnRpY2FsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVm
X3NpbmsodmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShwYWdlKSk7CisgICAgaWYgKGZyYW1lLT52aWV3KCkpCisg
ICAgICAgIGZyYW1lLT52aWV3KCktPnNldEd0a0FkanVzdG1lbnRzKGhvcml6b250YWxBZGp1c3Rt
ZW50LCB2ZXJ0aWNhbEFkanVzdG1lbnQpOwogfQogCiBzdGF0aWMgV2ViS2l0R3RrRnJhbWUqIHdl
YmtpdF9ndGtfcGFnZV9yZWFsX2NyZWF0ZV9mcmFtZShXZWJLaXRHdGtQYWdlKiwgV2ViS2l0R3Rr
RnJhbWUqIHBhcmVudCwgV2ViS2l0R3RrRnJhbWVEYXRhKikKQEAgLTE2Myw5ICszNTgsMTcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIAog
ICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0Vf
R0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKG9iamVjdCkpOwogICAgIC8vZGVsZXRlIHByaXZh
dGVfZGF0YS0+cGFnZTsgLSB3ZSBkb24ndCBoYXZlIGEgRHJhZ0NsaWVudCB5ZXQsIHNvIGl0IGlz
IGNyYXNoaW5nIGhlcmUKLSAgICBkZWxldGUgcHJpdmF0ZV9kYXRhLT5zZXR0aW5nczsKKwogICAg
IGdfb2JqZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSk7CisgICAgZGVsZXRlIHBy
aXZhdGVfZGF0YS0+c2V0dGluZ3M7CiAgICAgZGVsZXRlIHByaXZhdGVfZGF0YS0+dXNlcl9hZ2Vu
dDsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAg
ICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0
X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIEdfT0JKRUNU
X0NMQVNTICh3ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7
CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jbGFzc19pbml0KFdlYktpdEd0a1Bh
Z2VDbGFzcyogcGFnZV9jbGFzcykKQEAgLTE3Niw2ICszNzksMjggQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X2d0a19wYWdlX2NsYXNzX2luaXQoV2ViS2l0R3RrUGFnZUNsYXNzKiBwYWdlX2NsYXNzKQog
ICAgIC8qCiAgICAgICogc2lnbmFscwogICAgICAqLworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0
X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MocGFnZV9jbGFzcyk7CisgICAgb2JqZWN0X2NsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9maW5hbGl6ZTsKKworICAgIEd0a1dpZGdldENsYXNz
KiB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTKHBhZ2VfY2xhc3MpOworICAgIHdpZGdl
dF9jbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2Via2l0X2d0a19wYWdlX2V4cG9zZV9ldmVudDsKKyAg
ICB3aWRnZXRfY2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZl
bnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdlYmtpdF9ndGtfcGFn
ZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJr
aXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+YnV0dG9uX3JlbGVh
c2VfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50OworICAgIHdpZGdldF9jbGFz
cy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQ7Cisg
ICAgd2lkZ2V0X2NsYXNzLT5zY3JvbGxfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2
ZW50OworICAgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsaXpl
OworICAgIHdpZGdldF9jbGFzcy0+dW5yZWFsaXplID0gd2Via2l0X2d0a19wYWdlX3VucmVhbGl6
ZTsKKyAgICB3aWRnZXRfY2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2l6
ZV9hbGxvY2F0ZTsKKyAgICB3aWRnZXRfY2xhc3MtPnN0eWxlX3NldCA9IHdlYmtpdF9ndGtfcGFn
ZV9zdHlsZV9zZXQ7CisgICAgd2lkZ2V0X2NsYXNzLT5tYXAgPSB3ZWJraXRfZ3RrX3BhZ2VfbWFw
OworCisgICAgR3RrQ29udGFpbmVyQ2xhc3MqIGNvbnRhaW5lcl9jbGFzcyA9IEdUS19DT05UQUlO
RVJfQ0xBU1MocGFnZV9jbGFzcyk7CisgICAgY29udGFpbmVyX2NsYXNzLT5hZGQgPSB3ZWJraXRf
Z3RrX3BhZ2VfY29udGFpbmVyX2FkZDsKKyAgICBjb250YWluZXJfY2xhc3MtPnJlbW92ZSA9IHdl
YmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVtb3ZlOworICAgIGNvbnRhaW5lcl9jbGFzcy0+Zm9y
YWxsID0gd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9mb3JhbGw7CisKICAgICAvKioKICAgICAg
KiBXZWJLaXRHdGtQYWdlOjpsb2FkLXN0YXJ0ZWQKICAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBv
biB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTI2Nyw2ICs0OTIsMTkgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoV2ViS2l0R3RrUGFnZUNsYXNzKiBwYWdl
X2NsYXNzKQogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCiAgICAg
ICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiAKKyAgICAvKgorICAgICAqIG1ha2UgdXMgc2Nyb2xs
YWJsZSAoZS5nLiBhZGRhYmxlIHRvIGEgR3RrU2Nyb2xsZWRXaW5kb3cpCisgICAgICovCisgICAg
cGFnZV9jbGFzcy0+c2V0X3Njcm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF9ndGtfcGFnZV9zZXRf
YWRqdXN0bWVudHM7CisgICAgR1RLX1dJREdFVF9DTEFTUyhwYWdlX2NsYXNzKS0+c2V0X3Njcm9s
bF9hZGp1c3RtZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldF9zY3JvbGxfYWRqdXN0bWVu
dHMiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZV9jbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
CisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0R3RrUGFnZUNsYXNzLCBzZXRfc2Ny
b2xsX2FkanVzdG1lbnRzKSwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICB3
ZWJraXRfZ3RrX21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAyLAorICAgICAgICAgICAgR1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURK
VVNUTUVOVCk7CisKIAogICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwg
bWV0aG9kcwpAQCAtMjc5LDIxICs1MTcsMzMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdl
X2NsYXNzX2luaXQoV2ViS2l0R3RrUGFnZUNsYXNzKiBwYWdlX2NsYXNzKQogICAgIHBhZ2VfY2xh
c3MtPmphdmFfc2NyaXB0X2NvbmZpcm0gPSB3ZWJraXRfZ3RrX3BhZ2VfcmVhbF9qYXZhX3Njcmlw
dF9jb25maXJtOwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0X3Byb21wdCA9IHdlYmtpdF9n
dGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X3Byb21wdDsKICAgICBwYWdlX2NsYXNzLT5qYXZhX3Nj
cmlwdF9jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRfZ3RrX3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9j
b25zb2xlX21lc3NhZ2U7Ci0gICAgR19PQkpFQ1RfQ0xBU1MocGFnZV9jbGFzcyktPmZpbmFsaXpl
ID0gd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfZ3Rr
X3BhZ2VfaW5pdChXZWJLaXRHdGtQYWdlKiBwYWdlKQogewotICAgIFdlYktpdEd0a1BhZ2VQcml2
YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dU
S19QQUdFKHBhZ2UpKTsKLSAgICBwcml2YXRlX2RhdGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hy
b21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JD
bGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0b3JDbGllbnRHZGspOwotCi0KICAgICBHVEtf
V0lER0VUX1NFVF9GTEFHUyhwYWdlLCBHVEtfQ0FOX0ZPQ1VTKTsKKyAgICBwYWdlLT5iaW5fd2lu
ZG93ID0gMDsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIoR19PQkpFQ1QocGFnZSksICJy
ZWFsaXplIiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2Fy
ZWFfZXZlbnRzKSwgcGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9hZnRlcihHX09CSkVDVChw
YWdlKSwgInNpemUtYWxsb2NhdGUiLCBHX0NBTExCQUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5kZXJp
bmdfYXJlYV9yZXNpemVfY2FsbGJhY2spLCBwYWdlKTsKLQorICAgIFdlYktpdEd0a1BhZ2VQcml2
YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dU
S19QQUdFKHBhZ2UpKTsKKyAgICBwcml2YXRlX2RhdGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hy
b21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JD
bGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0b3JDbGllbnRHZGspOwogICAgIHByaXZhdGVf
ZGF0YS0+bWFpbl9mcmFtZSA9IFdFQktJVF9HVEtfRlJBTUUod2Via2l0X2d0a19mcmFtZV9uZXco
cGFnZSkpOworCisgICAgLyoKKyAgICAgKiBUT0RPOiBtb3ZlIHRoYXQgb3ZlciB0byB1c2Ugd2Vi
a2l0Z3Rrc2V0dGluZ3MgCisgICAgICovCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gcHJpdmF0
ZV9kYXRhLT5wYWdlLT5zZXR0aW5ncygpOworICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1
dG9tYXRpY2FsbHkodHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZSg1KTsK
KyAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSg1KTsKKyAgICBzZXR0aW5n
cy0+c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SmF2
YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgCisgICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhl
ZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKKyAg
ICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICBz
ZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+
c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7CisgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJk
Rm9udEZhbWlseSgiQXJpYWwiKTsKIH0KIAogR3RrV2lkZ2V0KiB3ZWJraXRfZ3RrX3BhZ2VfbmV3
KHZvaWQpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmggYi9XZWJL
aXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgKaW5kZXggMjg2ZDVhMC4uOTkxOGEyMSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCisrKyBiL1dlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a3BhZ2UuaApAQCAtNjEsMTEgKzYxLDEzIEBAIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXRHdGtQYWdlQ2xhc3MgV2ViS2l0R3RrUGFnZUNsYXNzOwogICogdGhlICBzaXplIG9mIHRoZSB2
aWV3cG9ydCBhbmQgd2Ugd29uJ3QgYmUgYWJsZSB0byB1c2UgZ2RrX3dpbmRvd19tb3ZlLgogICov
CiBzdHJ1Y3QgX1dlYktpdEd0a1BhZ2UgewotICAgIEd0a0xheW91dCBwYXJlbnQ7CisgICAgR3Rr
Q29udGFpbmVyIHBhcmVudDsKKworICAgIEdka1dpbmRvdyAqYmluX3dpbmRvdzsKIH07CiAKIHN0
cnVjdCBfV2ViS2l0R3RrUGFnZUNsYXNzIHsKLSAgICBHdGtMYXlvdXRDbGFzcyBwYXJlbnQ7Cisg
ICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFyZW50OwogCiAgICAgLyoKICAgICAgKiBkZWZhdWx0IGhh
bmRsZXIvdmlydHVhbCBtZXRob2RzCkBAIC04OSw2ICs5MSwxMSBAQCBzdHJ1Y3QgX1dlYktpdEd0
a1BhZ2VDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAoKmphdmFfc2NyaXB0X2NvbmZpcm0pIChXZWJL
aXRHdGtQYWdlKiBwYWdlLCBXZWJLaXRHdGtGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBjb25m
aXJtX21lc3NhZ2UpOwogICAgIGdjaGFyKiAoKmphdmFfc2NyaXB0X3Byb21wdCkgKFdlYktpdEd0
a1BhZ2UqIHBhZ2UsIFdlYktpdEd0a0ZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3NhZ2Us
IGNvbnN0IGdjaGFyKiBkZWZhdWx0X3ZhbHVlKTsKICAgICB2b2lkICAgKCpqYXZhX3NjcmlwdF9j
b25zb2xlX21lc3NhZ2UpIChXZWJLaXRHdGtQYWdlKiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIHVu
c2lnbmVkIGludCBsaW5lX251bWJlciwgY29uc3QgZ2NoYXIqIHNvdXJjZV9pZCk7CisKKyAgICAv
KgorICAgICAqIGludGVybmFsCisgICAgICovCisgICAgdm9pZCAgICgqc2V0X3Njcm9sbF9hZGp1
c3RtZW50cykgKFdlYktpdEd0a1BhZ2UqLCBHdGtBZGp1c3RtZW50KiwgR3RrQWRqdXN0bWVudCop
OwogfTsKIAogV0VCS0lUX0dUS19BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a3ByaXZhdGUuY3BwIGIvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5j
cHAKaW5kZXggMTliN2IxMi4uZTNmYzllZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrcHJpdmF0ZS5jcHAKKysrIGIvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5j
cHAKQEAgLTgwLDQgKzgwLDE0IEBAIFdlYktpdEd0a1BhZ2UqIGtpdChXZWJDb3JlOjpQYWdlKiBw
YWdlKQogICAgIENocm9tZUNsaWVudEdkayogY2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xp
ZW50R2RrKj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKTsKICAgICByZXR1cm4gY2xpZW50LT53
ZWJQYWdlKCk7CiB9CisKKy8qCisgKiBNYWtlIHRoZSBGcmFtZVZpZXcgdXNlIHRoZSBHdGtBZGp1
c3RtZW50cyBvZiB0aGUgV2ViS2l0R3RrUGFnZSB0byBjb25mb3JtCisgKiB0byB0aGUgJ3Njcm9s
bGFibGUgcHJvdG9jb2wnIG9mIEd0aysuCisgKi8KK3ZvaWQgYXBwbHlBZGp1c3RtZW50cyhXZWJL
aXRHdGtQYWdlKiBwYWdlLCBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcpCit7CisgICAgV2ViS2l0
R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBh
Z2UpOworICAgIHZpZXctPnNldEd0a0FkanVzdG1lbnRzKHBhZ2VEYXRhLT5ob3Jpem9udGFsQWRq
dXN0bWVudCwgcGFnZURhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCk7Cit9CiB9CmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmggYi9XZWJLaXQvZ3RrL0FwaS93ZWJr
aXRndGtwcml2YXRlLmgKaW5kZXggNjA4NGEwNS4uM2Y4NzMzYiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0
a3ByaXZhdGUuaApAQCAtNDQsNyArNDQsOCBAQAogCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiRnJhbWVHZGsuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R2Rr
LmgiCiAKIG5hbWVzcGFjZSBXZWJLaXRHdGsgewpAQCAtNTcsNiArNTgsOCBAQCBuYW1lc3BhY2Ug
V2ViS2l0R3RrIHsKICAgICBXZWJLaXRHdGtGcmFtZSoga2l0KFdlYkNvcmU6OkZyYW1lKik7CiAg
ICAgV2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRHdGtQYWdlKik7CiAgICAgV2ViS2l0R3RrUGFn
ZSoga2l0KFdlYkNvcmU6OlBhZ2UqKTsKKworICAgIHZvaWQgYXBwbHlBZGp1c3RtZW50cyhXZWJL
aXRHdGtQYWdlKiwgV2ViQ29yZTo6RnJhbWVWaWV3Kik7CiB9CiAKIGV4dGVybiAiQyIgewpAQCAt
NjksMTIgKzcyLDIwIEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJLaXRHdGtGcmFtZSogbWFp
bl9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGFwcGxpY2F0aW9uX25hbWVfZm9yX3Vz
ZXJfYWdlbnQ7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdXNlcl9hZ2VudDsKKworICAgICAg
ICAvKgorICAgICAgICAgKiBlLmcuIHNldCBieSBhIEd0a1Njcm9sbGVkV2luZG93IGFuZCB1c2Vk
IGJ5IHRoZSBGcmFtZVZpZXcgb2Ygb3VyIG1haW5fZnJhbWUKKyAgICAgICAgICovCisgICAgICAg
IEd0a0FkanVzdG1lbnQqIGhvcml6b250YWxBZGp1c3RtZW50OworICAgICAgICBHdGtBZGp1c3Rt
ZW50KiB2ZXJ0aWNhbEFkanVzdG1lbnQ7CisKKyAgICAgICAgSGFzaFNldDxHdGtXaWRnZXQqPiBj
aGlsZHJlbjsKICAgICB9OwogICAgIAogICAgICNkZWZpbmUgV0VCS0lUX0dUS19GUkFNRV9HRVRf
UFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJ
VF9HVEtfVFlQRV9GUkFNRSwgV2ViS2l0R3RrRnJhbWVQcml2YXRlKSkKICAgICB0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0R3RrRnJhbWVQcml2YXRlIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZTsKICAgICBz
dHJ1Y3QgX1dlYktpdEd0a0ZyYW1lUHJpdmF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1lR2Rr
KiBmcmFtZTsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lOwogICAgICAgICBXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudEdkayogY2xpZW50OwogICAgICAgICBXZWJLaXRHdGtQYWdlKiBw
YWdlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15795</attachid>
            <date>2007-08-01 15:54:28 -0700</date>
            <delta_ts>2007-08-09 17:44:15 -0700</delta_ts>
            <desc>Implement ScrollView</desc>
            <filename>gtk-implement-scrollview-winlike-r0.patch</filename>
            <type>text/plain</type>
            <size>45436</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmgKaW5kZXggMWM1Y2RjNS4uYTE5OTMwMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiAjaWYg
UExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a0xheW91dCBHdGtMYXlvdXQ7Cit0eXBl
ZGVmIHN0cnVjdCBfR3RrQWRqdXN0bWVudCBHdGtBZGp1c3RtZW50OwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShXSU4pCkBAIC0xNTEsMTMgKzE1MSwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
aWYgUExBVEZPUk0oR0RLKQogICAgICAgICBTY3JvbGxWaWV3KCk7CiAgICAgICAgIH5TY3JvbGxW
aWV3KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtBZGp1c3RtZW50cyhHdGtBZGp1c3Rt
ZW50KiBoYWRqLCBHdGtBZGp1c3RtZW50KiB2YWRqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
R3RrV2lkZ2V0KEd0a0xheW91dCogbGF5b3V0KTsKKyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBj
b252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0
KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0
cnlDaGFuZ2VkKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZUdlb21ldHJ5
KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlb21ldHJ5KGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICAgICAgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVj
dCgpOworICAgICAgICBib29sIHJlc2l6ZXJPdmVybGFwc0NvbnRlbnQoKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBhZGp1c3RPdmVybGFwcGluZ1Njcm9sbGJhckNvdW50KGludCBvdmVybGFwRGVsdGEp
OworCisgICAgICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CisgICAg
ICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0
JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOworICAgICAgICB2b2lk
IHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgdXBkYXRl
Vmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgdXBk
YXRlU2Nyb2xsYmFycygpOworICAgICAgICBJbnRTaXplIG1heGltdW1TY3JvbGwoKSBjb25zdDsK
KyAgICAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZz
ZXQpOwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKICAgICAgICAgU2Nyb2xsVmll
d1ByaXZhdGUqIG1fZGF0YTsKICNlbmRpZgpAQCAtMTg4LDYgKzIwMiw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIgKnZlcnRpY2FsU2Nyb2xsQmFyKCkg
Y29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0PFdpZGdldCo+KiBjaGlsZHJl
bigpOwogICAgICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJl
ZE9mZnNldCk7CiAgICAgICAgIEludFNpemUgbWF4aW11bVNjcm9sbCgpIGNvbnN0OwogICAgICAg
ICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
V2lkZ2V0LmggYi9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCmluZGV4IDEzNzFmZTkuLmJmNzdl
ZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9XaWRnZXQuaApAQCAtNDEsOCArNDEsOCBAQCB0eXBlZGVmIHN0cnVjdCBIV05EX18q
IEhXTkQ7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgc3RydWN0IF9HZGtE
cmF3YWJsZSBHZGtEcmF3YWJsZTsKIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEd0a1BhZ2UgV2ViS2l0R3RrUGFnZTsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oUVQpCkBAIC0xMzYsMTAgKzEzNiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLSAgICAgICAgV2lkZ2V0KEd0a1dpZGdl
dCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0R3RrV2lkZ2V0KEd0a1dpZGdldCopOwotICAg
ICAgICBHZGtEcmF3YWJsZSogZ2RrRHJhd2FibGUoKSBjb25zdDsKLSAgICAgICAgR3RrV2lkZ2V0
KiBndGtXaWRnZXQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEludGVybmFsR3Rr
V2lkZ2V0KEd0a1dpZGdldCopOworICAgICAgICBHdGtXaWRnZXQqIGludGVybmFsR3RrV2lkZ2V0
KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7
CisgICAgICAgIFNjcm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0
Q29udGFpbmluZ1dpbmRvdyhXZWJLaXRHdGtQYWdlKik7CisgICAgICAgIFdlYktpdEd0a1BhZ2Uq
IGNvbnRhaW5pbmdXaW5kb3coKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0
cnlDaGFuZ2VkKCkgY29uc3Q7CisKKyAgICAgICAgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5n
V2luZG93KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICAgICAgSW50UG9pbnQgY29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgICAgICBJbnRQb2lu
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKwor
ICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQq
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZl
cnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisg
ICAgICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb24oKSBjb25zdDsKKyAgICAgICAgdm9pZCBz
ZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib29sKTsKKworICAgICAgICB2b2lkIHNldFNjcm9sbFZp
ZXdDb250cm9sKCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwCmluZGV4IGYzNzgyMTUuLjFiODViMDkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2NyZWVuR2RrLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAKQEAgLTMwLDcgKzMwLDkg
QEAKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCi0j
aW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKKworI2luY2x1
ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKQEAgLTM4LDEwICs0MCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBz
Y3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkgCiB7Ci0gICAgQVNTRVJUKHdpZGdldC0+Z2RrRHJh
d2FibGUoKSk7CisgICAgQVNTRVJUKHdpZGdldC0+Y29udGFpbmluZ1dpbmRvdygpICYmIHdpZGdl
dC0+Y29udGFpbmluZ1dpbmRvdygpLT5iaW5fd2luZG93KTsKIAogICAgIGdpbnQgZHVtbXksIGRl
cHRoOwotICAgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KHdpZGdldC0+Z2RrRHJhd2FibGUoKSwg
JmR1bW15LCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZGVwdGgpOworICAgIGdka193aW5kb3df
Z2V0X2dlb21ldHJ5KHdpZGdldC0+Y29udGFpbmluZ1dpbmRvdygpLT5iaW5fd2luZG93LCAmZHVt
bXksICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkZXB0aCk7CiAgICAgcmV0dXJuIGRlcHRoOwog
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdk
ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAKaW5k
ZXggNjUwYjM2ZS4uN2EzNDhjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxh
dGZvcm1TY3JvbGxCYXJHZGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3Jt
U2Nyb2xsQmFyR2RrLmNwcApAQCAtNDUsNyArNDUsNyBAQCBQbGF0Zm9ybVNjcm9sbGJhcjo6UGxh
dGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0
aQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a19oc2Ny
b2xsYmFyX25ldyhOVUxMKSkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1ND
Uk9MTEJBUig6Omd0a192c2Nyb2xsYmFyX25ldyhOVUxMKSk7CiAgICAgZ3RrX3dpZGdldF9zaG93
KEdUS19XSURHRVQoc2Nyb2xsQmFyKSk7Ci0gICAgc2V0R3RrV2lkZ2V0KEdUS19XSURHRVQoc2Ny
b2xsQmFyKSk7CisgICAgc2V0SW50ZXJuYWxHdGtXaWRnZXQoR1RLX1dJREdFVChzY3JvbGxCYXIp
KTsKIAogICAgIC8qCiAgICAgICogYXNzaWduIGEgc2FuZSBkZWZhdWx0IHdpZHRoIGFuZCBoZWln
aHQgdG8gdGhlIFNjcm9sbEJhciwgb3RoZXJ3aXNlCkBAIC01Myw2ICs1Myw3IEBAIFBsYXRmb3Jt
U2Nyb2xsYmFyOjpQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Ny
b2xsYmFyT3JpZW50YXRpCiAgICAgICovCiAgICAgcmVzaXplKFBsYXRmb3JtU2Nyb2xsYmFyOjpo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCksCiAgICAgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFy
Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkpOyAgICAKKyAgICBnZW9tZXRyeUNoYW5nZWQoKTsK
IAogICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3JvbGxCYXIpKTsKICAgICBndGtfb2JqZWN0
X3NpbmsoR1RLX09CSkVDVChzY3JvbGxCYXIpKTsKQEAgLTYzLDggKzY0LDggQEAgUGxhdGZvcm1T
Y3JvbGxiYXI6On5QbGF0Zm9ybVNjcm9sbGJhcigpCiAgICAgLyoKICAgICAgKiB0aGUgV2lkZ2V0
IGRvZXMgbm90IHRha2Ugb3ZlciBvd25lcnNoaXAuCiAgICAgICovCi0gICAgZ3RrX3dpZGdldF9k
ZXN0cm95KGd0a1dpZGdldCgpKTsKLSAgICBnX29iamVjdF91bnJlZihHX09CSkVDVChndGtXaWRn
ZXQoKSkpOworICAgIGd0a193aWRnZXRfZGVzdHJveShpbnRlcm5hbEd0a1dpZGdldCgpKTsKKyAg
ICBnX29iamVjdF91bnJlZihHX09CSkVDVChpbnRlcm5hbEd0a1dpZGdldCgpKSk7CiB9CiAKIGlu
dCBQbGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgoKSBjb25zdApAQCAtMTAwLDUgKzEwMSw2IEBAIHZv
aWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpCiB2b2lkIFBsYXRm
b3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgc2V0RnJh
bWVHZW9tZXRyeShyZWN0KTsKKyAgICBnZW9tZXRyeUNoYW5nZWQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAppbmRleCAzYWY4OWNjLi4xZGEwNjM0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbSAKICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlcgogICoKQEAgLTM3LDYgKzM3LDExIEBACiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAj
aW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtNDUsMzAgKzUwLDE0NiBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZp
ZXdQcml2YXRlCisvKgorICogVGhlIGRlc2lnbiBpcyBhIGNvcHkgb2YgdGhlIFdpbmRvd3MgU2Ny
b2xsVmlldyBmcm9tIHBsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAorICogd2l0aCB0aGUg
Zm9sbG93aW5nIGNoYW5nZXMvZGlmZmljdWx0aWVzLgorICogVG8gY29uZm9ybSB0byB0aGUgJ3Nj
cm9sbGFibGUgcHJvdG9jb2wnIG9mIEd0aysgd2UgbWlnaHQgZ2V0IHR3byBHdGtBZGp1c3RtZW50
cyBzZXQuIElmCisgKiB3ZSBoYXZlIHRoZW0gc2V0IHdlIG1heSBub3QgY3JlYXRlIFBsYXRmb3Jt
U2Nyb2xsYmFyIGJ1dCBoYXZlIHRvIHVzZSB0aGUgR3RrQWRqdXN0bWVudC4KKyAqLworY2xhc3Mg
U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50CiB7
CiBwdWJsaWM6Ci0gICAgU2Nyb2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0YXRpY0Jh
Y2tncm91bmQoZmFsc2UpCi0gICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNlKQorICAg
IFNjcm9sbFZpZXdQcml2YXRlKFNjcm9sbFZpZXcqIF92aWV3KQorICAgICAgICA6IHZpZXcoX3Zp
ZXcpCisgICAgICAgICwgaGFzU3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAgLCBzY3Jv
bGxiYXJzU3VwcHJlc3NlZChmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzQXZvaWRpbmdSZXNp
emVyKDApCiAgICAgICAgICwgdlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAgICAg
LCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQotICAgICAgICAsIGxheW91dCgwKQogICAg
ICAgICAsIHNjcm9sbEJhcnNOZWVkVXBkYXRlKGZhbHNlKQotICAgIHsgfQorICAgICAgICAsIGlu
VXBkYXRlU2Nyb2xsYmFycyhmYWxzZSkKKyAgICAgICAgLCB2QWRqKDApCisgICAgICAgICwgaEFk
aigwKQorICAgIHt9CisKKyAgICB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAgICAgICAg
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAgIHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShj
b25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CiAKKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIoYm9vbCBoYXNCYXIpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
Ym9vbCBoYXNCYXIpOworCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIq
KTsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKworICAgIFNj
cm9sbFZpZXcqIHZpZXc7CiAgICAgYm9vbCBoYXNTdGF0aWNCYWNrZ3JvdW5kOwotICAgIGJvb2wg
c3VwcHJlc3NTY3JvbGxiYXJzOworICAgIGJvb2wgc2Nyb2xsYmFyc1N1cHByZXNzZWQ7CisgICAg
aW50IHNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xs
YmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGxiYXJNb2RlOwotICAgIEd0a0xheW91
dCAqbGF5b3V0OworICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gdkJhcjsKKyAgICBSZWZQ
dHI8UGxhdGZvcm1TY3JvbGxiYXI+IGhCYXI7CisgICAgR3RrQWRqdXN0bWVudCogdkFkajsKKyAg
ICBHdGtBZGp1c3RtZW50KiBoQWRqOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0OwogICAgIElu
dFNpemUgY29udGVudHNTaXplOwotICAgIEludFNpemUgdmlld1BvcnRTaXplOwogICAgIGJvb2wg
c2Nyb2xsQmFyc05lZWRVcGRhdGU7CisgICAgYm9vbCBpblVwZGF0ZVNjcm9sbGJhcnM7CisgICAg
SGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKIH07CiAKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7Cisg
ICAgaWYgKFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAgICAgICAgaWYg
KGhhc0JhciAmJiAhaEJhcikgeworICAgICAgICAgICAgaEJhciA9IG5ldyBQbGF0Zm9ybVNjcm9s
bGJhcih0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAg
ICAgICAgIGhCYXItPnNldFNjcm9sbFZpZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3LT5h
ZGRDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIGhCYXIp
IHsKKyAgICAgICAgICAgIHZpZXctPnJlbW92ZUNoaWxkKGhCYXIuZ2V0KCkpOworICAgICAgICAg
ICAgaEJhciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQorewor
ICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygpKSB7CisgICAgICAgIGlm
IChoYXNCYXIgJiYgIXZCYXIpIHsKKyAgICAgICAgICAgIHZCYXIgPSBuZXcgUGxhdGZvcm1TY3Jv
bGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAg
ICAgICAgdkJhci0+c2V0U2Nyb2xsVmlld0NvbnRyb2woKTsKKyAgICAgICAgICAgIHZpZXctPmFk
ZENoaWxkKHZCYXIuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgdkJhcikg
eworICAgICAgICAgICAgdmlldy0+cmVtb3ZlQ2hpbGQodkJhci5nZXQoKSk7CisgICAgICAgICAg
ICB2QmFyID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworCit2b2lkIFNjcm9sbFZpZXc6OlNj
cm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEpCit7CisgICAgLy8gU2luY2Ugc2Nyb2xsaW5nIGlzIGRvdWJsZSBidWZmZXJlZCwgd2Ug
d2lsbCBiZSBibGl0dGluZyB0aGUgc2Nyb2xsIHZpZXcncyBpbnRlcnNlY3Rpb24KKyAgICAvLyB3
aXRoIHRoZSBjbGlwIHJlY3QgZXZlcnkgdGltZSB0byBrZWVwIGl0IHNtb290aC4KKyAgICBJbnRS
ZWN0IGNsaXBSZWN0ID0gdmlldy0+d2luZG93Q2xpcFJlY3QoKTsKKyAgICBJbnRSZWN0IHNjcm9s
bFZpZXdSZWN0ID0gdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJbnRSZWN0KDAsIDAs
IHZpZXctPnZpc2libGVXaWR0aCgpLCB2aWV3LT52aXNpYmxlSGVpZ2h0KCkpKTsKKworICAgIElu
dFJlY3QgdXBkYXRlUmVjdCA9IGNsaXBSZWN0OworICAgIHVwZGF0ZVJlY3QuaW50ZXJzZWN0KHNj
cm9sbFZpZXdSZWN0KTsKKworICAgIC8vRklYTUUgdXBkYXRlIGhlcmU/CisKKyAgICBpZiAoIWhh
c1N0YXRpY0JhY2tncm91bmQpIC8vIFRoZSBtYWluIGZyYW1lIGNhbiBqdXN0IGJsaXQgdGhlIFdl
YlZpZXcgd2luZG93CisgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gYmxpdCBzdWJmcmFt
ZXMgd2l0aG91dCBibGl0dGluZyBvdmVybGFwcGluZyBjb250ZW50CisgICAgICAgdmlldy0+c2Ny
b2xsQmFja2luZ1N0b3JlKC1zY3JvbGxEZWx0YS53aWR0aCgpLCAtc2Nyb2xsRGVsdGEuaGVpZ2h0
KCksIHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7CisgICAgZWxzZSAgeworICAgICAgIC8vIFdl
IG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJlcGFpbnQgdGhlIGVudGlyZSBiYWNraW5nIHN0b3JlLiAg
RG8gaXQgbm93IGJlZm9yZSBtb3ZpbmcgdGhlCisgICAgICAgLy8gcGx1Z2lucy4KKyAgICAgICB2
aWV3LT5hZGRUb0RpcnR5UmVnaW9uKHVwZGF0ZVJlY3QpOworICAgICAgIHZpZXctPnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpOworICAgIH0KKworICAgIHZpZXctPmdlb21ldHJ5Q2hhbmdlZCgpOworCisg
ICAgLy8gTm93IHVwZGF0ZSB0aGUgd2luZG93ICh3aGljaCBzaG91bGQgZG8gbm90aGluZyBidXQg
YSBibGl0IG9mIHRoZSBiYWNraW5nIHN0b3JlJ3MgdXBkYXRlUmVjdCBhbmQgc28gc2hvdWxkCisg
ICAgLy8gYmUgdmVyeSBmYXN0KS4KKyAgICB2aWV3LT51cGRhdGUoKTsKK30KKwordm9pZCBTY3Jv
bGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogYmFyKQor
eworICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgorICAgIEludFNpemUgbmV3
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0OworICAgIGlmIChiYXIpIHsKKyAgICAgICAgaWYgKGJhciA9
PSBoQmFyKQorICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGJhci0+dmFsdWUoKSk7Cisg
ICAgICAgIGVsc2UgaWYgKGJhciA9PSB2QmFyKQorICAgICAgICAgICAgbmV3T2Zmc2V0LnNldEhl
aWdodChiYXItPnZhbHVlKCkpOworICAgIH0KKyAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbmV3
T2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXplKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBzY3JvbGxPZmZzZXQgPSBuZXdPZmZzZXQ7CisKKyAgICBp
ZiAoc2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9sbEJh
Y2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odmll
dyktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6
OlNjcm9sbFZpZXdQcml2YXRlOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHZpZXcpLT53aW5kb3dDbGlwUmVjdChmYWxz
ZSk7Cit9CisKIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQotICAgIDogbV9kYXRhKG5ldyBTY3Jv
bGxWaWV3UHJpdmF0ZSkKKyAgICA6IG1fZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUodGhpcykp
CiB7fQogCiBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCkBAIC03Niw0MyArMTk3LDYwIEBAIFNj
cm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi12b2lkIFNj
cm9sbFZpZXc6OnVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBub3cp
Cit2b2lkIFNjcm9sbFZpZXc6OnNldEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQqIGhhZGos
IEd0a0FkanVzdG1lbnQqIHZhZGopCiB7Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0
ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0
LmhlaWdodCgpIH07Ci0gICAgR2RrRHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpnZGtE
cmF3YWJsZSgpOwotICAgIGlmIChHREtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAg
ICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBn
ZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAg
aWYgKG5vdykKLSAgICAgICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywg
dHJ1ZSk7Ci0gICAgfQorICAgIG1fZGF0YS0+aEFkaiA9IGhhZGo7CisgICAgbV9kYXRhLT52QWRq
ID0gdmFkajsKIH0KIAogdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRS
ZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsKLSAgICB1cGRhdGVWaWV3KHVwZGF0ZVJlY3Qs
IG5vdyk7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5s
b2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVj
dDsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisK
KyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29udGFpbmluZ1dpbmRvd1JlY3QueCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC55KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LndpZHRoKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAg
R2RrV2luZG93KiB3aW5kb3cgPSBjb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3c7CisKKyAg
ICBpZiAod2luZG93KQorICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3cs
ICZyZWN0LCB0cnVlKTsKKworICAgIC8vIENhY2hlIHRoZSBkaXJ0eSBzcG90LgorICAgIGFkZFRv
RGlydHlSZWdpb24oY29udGFpbmluZ1dpbmRvd1JlY3QpOworCisgICAgaWYgKG5vdyAmJiB3aW5k
b3cpCisgICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CiB9
CiAKIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIHsKLSAgICBBU1NFUlQoZ3RrV2lkZ2V0KCkp
OwotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhndGtXaWRnZXQoKSk7CisgICAgQVNTRVJUKGNv
bnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgbV9k
YXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9kYXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkg
fTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChjb250YWluaW5nV2luZG93KCktPmJp
bl93aW5kb3csICZyZWN0LCB0cnVlKTsKIAotICAgIGlmIChtX2RhdGEtPnNjcm9sbEJhcnNOZWVk
VXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgaWYgKG1fZGF0YS0+c2Ny
b2xsQmFyc05lZWRVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNj
cm9sbE9mZnNldCk7CisgICAgICAgIGdlb21ldHJ5Q2hhbmdlZCgpOworICAgIH0KIH0KIAogaW50
IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+
dmlld1BvcnRTaXplLndpZHRoKCk7CisgICAgcmV0dXJuIHdpZHRoKCkgLSAobV9kYXRhLT52QmFy
ID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCk7CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNp
YmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT52aWV3UG9ydFNpemUuaGVp
Z2h0KCk7CisgICAgcmV0dXJuIGhlaWdodCgpIC0gKG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJh
ci0+aGVpZ2h0KCkgOiAwKTsKIH0KIAotLy8gUmVnaW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRs
eSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCBpbiB0aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0
ZSBzeXN0ZW0uCiBGbG9hdFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KGNvbnRlbnRzWCgpLCBjb250ZW50c1koKSwgdmlz
aWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSk7CkBAIC0xMzgsMjMgKzI3NiwxNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGludCB3LCBpbnQgaCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9kYXRhLT5jb250ZW50c1NpemUgPSBuZXdTaXplOwotICAgIAotICAgIGlmICht
X2RhdGEtPmxheW91dCkgewotICAgICAgICBndGtfbGF5b3V0X3NldF9zaXplKG1fZGF0YS0+bGF5
b3V0LCB3LCBoKTsKLSAgICAgICAgbV9kYXRhLT5zY3JvbGxCYXJzTmVlZFVwZGF0ZSA9IHRydWU7
Ci0gICAgfQorICAgIG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUgPSB0cnVlOwogfQogCiBp
bnQgU2Nyb2xsVmlldzo6Y29udGVudHNYKCkgY29uc3QKIHsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChndGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCksIDApOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShndGtfbGF5
b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCkpKTsKKyAgICByZXR1cm4gc2Nyb2xs
T2Zmc2V0KCkud2lkdGgoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWSgpIGNvbnN0
CiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ3RrX2xheW91dF9nZXRfdmFkanVzdG1lbnQo
bV9kYXRhLT5sYXlvdXQpLCAwKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihndGtfYWRq
dXN0bWVudF9nZXRfdmFsdWUoZ3RrX2xheW91dF9nZXRfdmFkanVzdG1lbnQobV9kYXRhLT5sYXlv
dXQpKSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLmhlaWdodCgpOwogfQogCiBpbnQgU2Ny
b2xsVmlldzo6Y29udGVudHNXaWR0aCgpIGNvbnN0CkBAIC0xNjksMjcgKzMwMSwyNiBAQCBpbnQg
U2Nyb2xsVmlldzo6Y29udGVudHNIZWlnaHQoKSBjb25zdAogCiBJbnRTaXplIFNjcm9sbFZpZXc6
OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobV9kYXRh
LCBJbnRTaXplKCkpOwotICAgIHJldHVybiBJbnRTaXplKGNvbnRlbnRzWCgpLCBjb250ZW50c1ko
KSk7CisgICAgcmV0dXJuIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwogfQogCi12b2lkIFNjcm9sbFZp
ZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQorSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVt
U2Nyb2xsKCkgY29uc3QKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3RrX2xheW91dF9n
ZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1lbnQqIHZhZGog
PSBndGtfbGF5b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChoYWRqKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOworICAgIEludFNp
emUgZGVsdGEgPSAobV9kYXRhLT5jb250ZW50c1NpemUgLSBJbnRTaXplKHZpc2libGVXaWR0aCgp
LCB2aXNpYmxlSGVpZ2h0KCkpKSAtIHNjcm9sbE9mZnNldCgpOworICAgIGRlbHRhLmNsYW1wTmVn
YXRpdmVUb1plcm8oKTsKKyAgICByZXR1cm4gZGVsdGE7Cit9CiAKLSAgICBpbnQgY3VycmVudF94
ID0gY29udGVudHNYKCk7Ci0gICAgaW50IGN1cnJlbnRfeSA9IGNvbnRlbnRzWSgpOwordm9pZCBT
Y3JvbGxWaWV3OjpzY3JvbGxCeShpbnQgZHgsIGludCBkeSkKK3sKKyAgICBJbnRTaXplIHNjcm9s
bE9mZnNldCA9IG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIEludFNpemUgbmV3U2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0ICsgSW50U2l6ZShkeCwgZHkpLnNocnVua1RvKG1heGltdW1TY3Jv
bGwoKSk7CisgICAgbmV3U2Nyb2xsT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKIAorICAg
IGlmIChuZXdTY3JvbGxPZmZzZXQgPT0gc2Nyb2xsT2Zmc2V0KQorICAgICAgICByZXR1cm47CiAK
LSAgICBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoaGFkaiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0xBTVAoY3VycmVudF94K2R4LCBoYWRqLT5sb3dlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUFYKDAuMCwgaGFkai0+dXBwZXIgLSBoYWRqLT5wYWdlX3Np
emUpKSk7Ci0gICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKHZhZGosCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENMQU1QKGN1cnJlbnRfeStkeSwgdmFkai0+bG93ZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWCgwLjAsIHZhZGotPnVwcGVyIC0gdmFkai0+
cGFnZV9zaXplKSkpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMobmV3U2Nyb2xsT2Zmc2V0KTsKIH0K
IAogU2Nyb2xsYmFyTW9kZSBTY3JvbGxWaWV3OjpoU2Nyb2xsYmFyTW9kZSgpIGNvbnN0CkBAIC0y
MDQsMTYgKzMzNSwxNiBAQCBTY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6OnZTY3JvbGxiYXJNb2Rl
KCkgY29uc3QKIAogdm9pZCBTY3JvbGxWaWV3OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9vbCBzdXBw
cmVzc2VkLCBib29sIHJlcGFpbnRPblN1cHByZXNzKQogewotICAgIG1fZGF0YS0+c3VwcHJlc3NT
Y3JvbGxiYXJzID0gc3VwcHJlc3NlZDsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2Vk
ID0gc3VwcHJlc3NlZDsKICAgICBpZiAocmVwYWludE9uU3VwcHJlc3MpCi0gICAgICAgIHVwZGF0
ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9m
ZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0SFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFy
TW9kZSBuZXdNb2RlKQogewogICAgIGlmIChtX2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9IG5ld01v
ZGUpIHsKICAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAg
IHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNj
cm9sbE9mZnNldCk7CiAgICAgfQogfQogCkBAIC0yMjEsMTQgKzM1MiwxNCBAQCB2b2lkIFNjcm9s
bFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgbmV3TW9kZSkKIHsKICAgICBp
ZiAobV9kYXRhLT52U2Nyb2xsYmFyTW9kZSAhPSBuZXdNb2RlKSB7CiAgICAgICAgIG1fZGF0YS0+
dlNjcm9sbGJhck1vZGUgPSBuZXdNb2RlOwotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Cisg
ICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOwogICAgIH0KIH0K
IAogdm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJzTW9kZShTY3JvbGxiYXJNb2RlIG5ld01v
ZGUpCiB7CiAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9IG1fZGF0YS0+dlNjcm9sbGJhck1v
ZGUgPSBuZXdNb2RlOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICB1cGRhdGVTY3JvbGxi
YXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpzZXRTdGF0
aWNCYWNrZ3JvdW5kKGJvb2wgZmxhZykKQEAgLTIzNiw0OCArMzY3LDUyIEBAIHZvaWQgU2Nyb2xs
Vmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZsYWcpCiAgICAgbV9kYXRhLT5oYXNTdGF0
aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAotLyoKLSAqIG9ubHkgdXBkYXRlIHRoZSBhZGp1c3Rt
ZW50cywgdGhlIEd0a0xheW91dCBpcyBkb2luZyB0aGUgd29yawotICogZm9yIHVzIChhc3N1bWlu
ZyBpdCBpcyBpbiBhIGJveC4uLikuCi0gKi8KLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJhbWVHZW9t
ZXRyeShjb25zdCBJbnRSZWN0JiByKQordm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdlb21ldHJ5
KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5KQogewotICAgIFdpZGdldDo6c2V0RnJhbWVHZW9t
ZXRyeShyKTsKLSAgICB1cGRhdGVHZW9tZXRyeShyLndpZHRoKCksIHIuaGVpZ2h0KCkpOwotfQor
ICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVHZW9t
ZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV9kYXRhLT52aWV3UG9ydFNpemUg
PSBJbnRTaXplKHdpZHRoLGhlaWdodCk7Ci19CisgICAgSW50UmVjdCBvbGRHZW9tZXRyeSA9IGZy
YW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkobmV3R2VvbWV0cnkp
OwogCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxheW91dCkKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKEdUS19MQVlPVVQobGF5b3V0KSk7Ci0gICAgbV9kYXRhLT5s
YXlvdXQgPSBsYXlvdXQ7CisgICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5KQorICAg
ICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQ6OnNldEd0a1dpZGdldChHVEtfV0lER0VUKGxheW91
dCkpOworICAgIGlmIChuZXdHZW9tZXRyeS53aWR0aCgpICE9IG9sZEdlb21ldHJ5LndpZHRoKCkg
fHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0gb2xkR2VvbWV0cnkuaGVpZ2h0KCkpIHsKKyAgICAg
ICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAgIHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5zZXROZWVkc0xheW91dCgpOworICAgIH0KKworICAg
IGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmFkZENoaWxkKFdpZGdl
dCogdykKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsgCi0gICAg
QVNTRVJUKHctPmd0a1dpZGdldCgpKTsKLSAgICBBU1NFUlQobV9kYXRhLT5sYXlvdXQpOworICAg
IGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgY2hpbGQtPnNldENvbnRhaW5pbmdXaW5kb3co
Y29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBtX2RhdGEtPmNoaWxkcmVuLmFkZChjaGlsZCk7CiAK
LSAgICBndGtfbGF5b3V0X3B1dChtX2RhdGEtPmxheW91dCwgdy0+Z3RrV2lkZ2V0KCksIDAsIDAp
OworICAgIGlmIChjaGlsZC0+aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+aW50ZXJu
YWxHdGtXaWRnZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0
KiB3KQordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQogewotICAg
IEFTU0VSVCh3LT5ndGtXaWRnZXQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bGF5b3V0KTsKKyAg
ICBjaGlsZC0+c2V0UGFyZW50KDApOworICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3ZlKGNoaWxk
KTsKIAotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9kYXRhLT5sYXlv
dXQpLCB3LT5ndGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5pbnRlcm5hbEd0a1dpZGdldCgp
ICYmIEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSA9PSBHVEtfV0lER0VUKGNoaWxkLT5p
bnRlcm5hbEd0a1dpZGdldCgpKS0+cGFyZW50KQorICAgICAgICBndGtfY29udGFpbmVyX3JlbW92
ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5pbnRlcm5hbEd0a1dp
ZGdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNp
dmVseShjb25zdCBJbnRSZWN0JikKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3
UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAgU2Nyb2xs
VmlldyogdmlldyA9IHRoaXM7CisgICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmlldy0+c2V0
Q29udGVudHNQb3MocC54KCksIHAueSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngoKSAtIHZp
ZXctPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9sbE9mZnNl
dCgpLmhlaWdodCgpKTsKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZpZXcqPih2
aWV3LT5wYXJlbnQoKSk7CisgICAgfQogfQogCiBib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkg
Y29uc3QKQEAgLTI4Niw0OCArNDIxLDMzNCBAQCBib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkg
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50
KFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZv
cm1XaGVlbEV2ZW50JiBlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gRGV0ZXJt
aW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxsLCB3
ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0YSA9IG1h
eGltdW1TY3JvbGwoKTsKKyAgICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9sbERlbHRh
LndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xsT2Zmc2V0
KCkud2lkdGgoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhTY3JvbGxE
ZWx0YS5oZWlnaHQoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBzY3JvbGxP
ZmZzZXQoKS5oZWlnaHQoKSA+IDApKQorICAgICAgICBlLmFjY2VwdCgpOworCisgICAgc2Nyb2xs
QnkoZS5kZWx0YVgoKSAqIExJTkVfU1RFUCwgZS5kZWx0YVkoKSAqIExJTkVfU1RFUCk7CiB9CiAK
LXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit2b2lkIFNjcm9sbFZpZXc6OnVw
ZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKIHsKLSAgICBHdGtB
ZGp1c3RtZW50KiBoYWRqID0gZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlv
dXQpOwotICAgIEd0a0FkanVzdG1lbnQqIHZhZGogPSBndGtfbGF5b3V0X2dldF92YWRqdXN0bWVu
dChtX2RhdGEtPmxheW91dCk7Cisjd2FybmluZyAiVXBkYXRpbmcgdGhlIHNjcm9sbGJhcnMiCisg
ICAgLy8gRG9uJ3QgYWxsb3cgcmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgorICAgIGlm
IChtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ19y
ZXR1cm5faWZfZmFpbChoYWRqKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOwotICAgIAot
ICAgIGhhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVXaWR0aCgpOwotICAgIGhhZGotPnN0ZXBfaW5j
cmVtZW50ID0gMTM7CisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0
IGhhdmUgdG8gZm9yayBGcmFtZVZpZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1l
VmlldyBzaG91bGQganVzdCBtZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgaWYgKHN0YXRpY19j
YXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpLT5mcmFtZSgpLT5wcm9oaWJpdHNTY3JvbGxpbmco
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHZhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVI
ZWlnaHQoKTsKLSAgICB2YWRqLT5zdGVwX2luY3JlbWVudCA9IDEzOworICAgIG1fZGF0YS0+aW5V
cGRhdGVTY3JvbGxiYXJzID0gdHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIg
PSBtX2RhdGEtPnZCYXI7CisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRh
LT5oQmFyOworICAgIGJvb2wgb2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsK
KyAgICBib29sIG9sZEhhc0hvcml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAg
IFNjcm9sbGJhck1vZGUgaFNjcm9sbCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Ny
b2xsYmFyTW9kZSB2U2Nyb2xsID0gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKICAgICAKLSAgICBn
dGtfYWRqdXN0bWVudF9jaGFuZ2VkKGhhZGopOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2No
YW5nZWQoaGFkaik7CisgICAgY29uc3QgaW50IGNWZXJ0aWNhbFdpZHRoID0gUGxhdGZvcm1TY3Jv
bGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBjb25zdCBpbnQgY0hvcml6b250
YWxIZWlnaHQgPSBQbGF0Zm9ybVNjcm9sbGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgp
OworCisgICAgZm9yIChpbnQgcGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKKyAgICAgICAg
Ym9vbCBzY3JvbGxzVmVydGljYWxseTsKKyAgICAgICAgYm9vbCBzY3JvbGxzSG9yaXpvbnRhbGx5
OworCisgICAgICAgIGlmICghbV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAoaFNjcm9s
bCA9PSBTY3JvbGxiYXJBdXRvIHx8IHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykpIHsKKyAgICAg
ICAgICAgIC8vIERvIGEgbGF5b3V0IGlmIHBlbmRpbmcgYmVmb3JlIGNoZWNraW5nIGlmIHNjcm9s
bGJhcnMgYXJlIG5lZWRlZC4KKyAgICAgICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAh
PSBvbGRIYXNWZXJ0aWNhbCB8fCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IG9sZEhhc0hvcml6
b250YWwpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyktPmxh
eW91dCgpOworICAgICAgICAgICAgIAorICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAo
dlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0
byAmJiBjb250ZW50c0hlaWdodCgpID4gaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHNjcm9s
bHNWZXJ0aWNhbGx5KQorICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNj
cm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAm
JiBjb250ZW50c1dpZHRoKCkgKyBjVmVydGljYWxXaWR0aCA+IHdpZHRoKCkpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xs
ID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNv
bnRlbnRzV2lkdGgoKSA+IHdpZHRoKCkpOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxzSG9y
aXpvbnRhbGx5KQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Ny
b2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYm
IGNvbnRlbnRzSGVpZ2h0KCkgKyBjSG9yaXpvbnRhbEhlaWdodCA+IGhlaWdodCgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNjcm9sbHNI
b3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc0hvcml6b250YWxT
Y3JvbGxiYXIgOiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbik7CisgICAgICAgICAgICBz
Y3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzVmVydGlj
YWxTY3JvbGxiYXIgOiAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbik7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBzY3JvbGxzVmVy
dGljYWxseSkgeworICAgICAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihz
Y3JvbGxzVmVydGljYWxseSk7CisgICAgICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNj
cm9sbHNWZXJ0aWNhbGx5OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxT
Y3JvbGxiYXIgIT0gc2Nyb2xsc0hvcml6b250YWxseSkgeworICAgICAgICAgICAgbV9kYXRhLT5z
ZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbHNIb3Jpem9udGFsbHkpOworICAgICAgICAg
ICAgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbHNIb3Jpem9udGFsbHk7CisgICAgICAg
IH0KKyAgICB9CiAgICAgCi0gICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZCh2YWRqKTsKLSAgICBn
dGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKHZhZGopOworICAgIC8vIFNldCB1cCB0aGUgcmFu
Z2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBJbnRTaXplIG1heFNjcm9sbFBvc2l0
aW9uKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdodCgpIC0g
dmlzaWJsZUhlaWdodCgpKTsKKyAgICBJbnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZzZXQuc2hy
dW5rVG8obWF4U2Nyb2xsUG9zaXRpb24pOworICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7CisgCisgICAgaWYgKG1fZGF0YS0+aEJhcikgeworICAgICAgICBpbnQgY2xpZW50V2lkdGgg
PSB2aXNpYmxlV2lkdGgoKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRFbmFibGVkKGNvbnRl
bnRzV2lkdGgoKSA+IGNsaWVudFdpZHRoKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVu
dFdpZHRoIC0gUEFHRV9LRUVQKTsKKyAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAg
PSBjbGllbnRXaWR0aDsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0YS0+aEJhci0+ZnJh
bWVHZW9tZXRyeSgpKTsKKyAgICAgICAgSW50UmVjdCBoQmFyUmVjdCA9IEludFJlY3QoMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXIt
PmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0g
KG1fZGF0YS0+dkJhciA/IG1fZGF0YS0+dkJhci0+d2lkdGgoKSA6IDApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPmhCYXItPmhlaWdodCgpKTsKKyAgICAgICAg
bV9kYXRhLT5oQmFyLT5zZXRSZWN0KGhCYXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNj
cm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV9kYXRhLT5oQmFyLT5mcmFtZUdlb21l
dHJ5KCkpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXItPmludmFsaWRhdGUoKTsKKworICAgICAg
ICBpZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+
aEJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1fZGF0YS0+aEJh
ci0+c2V0U3RlcHMoTElORV9TVEVQLCBwYWdlU3RlcCk7CisgICAgICAgIG1fZGF0YS0+aEJhci0+
c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKKyAgICAgICAgbV9k
YXRhLT5oQmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7CisgICAgICAgIGlmIChtX2RhdGEt
PnNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBw
cmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAorICAgIH0gCisKKyAgICBpZiAobV9kYXRhLT52QmFy
KSB7CisgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAg
IG1fZGF0YS0+dkJhci0+c2V0RW5hYmxlZChjb250ZW50c0hlaWdodCgpID4gY2xpZW50SGVpZ2h0
KTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodCAtIFBBR0VfS0VFUCk7Cisg
ICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50SGVpZ2h0OworICAgICAg
ICBJbnRSZWN0IG9sZFJlY3QobV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkpOworICAgICAg
ICBJbnRSZWN0IHZCYXJSZWN0ID0gSW50UmVjdCh3aWR0aCgpIC0gbV9kYXRhLT52QmFyLT53aWR0
aCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT52QmFyLT53aWR0aCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2RhdGEtPmhCYXIgPyBtX2Rh
dGEtPmhCYXItPmhlaWdodCgpIDogMCkpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldFJlY3Qo
dkJhclJlY3QpOworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYg
b2xkUmVjdCAhPSBtX2RhdGEtPnZCYXItPmZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgICAgIG1f
ZGF0YS0+dkJhci0+aW52YWxpZGF0ZSgpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJh
cnNTdXBwcmVzc2VkKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBwcmVzc0ludmFs
aWRhdGlvbih0cnVlKTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdGVwcyhMSU5FX1NURVAs
IHBhZ2VTdGVwKTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhl
aWdodCwgY29udGVudHNIZWlnaHQoKSk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0VmFsdWUo
c2Nyb2xsLmhlaWdodCgpKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNz
ZWQpCisgICAgICAgICAgICBtX2RhdGEtPnZCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZh
bHNlKTsKKyAgICB9CisKKyAgICBpZiAob2xkSGFzVmVydGljYWwgIT0gKG1fZGF0YS0+dkJhciAh
PSAwKSB8fCBvbGRIYXNIb3Jpem9udGFsICE9IChtX2RhdGEtPmhCYXIgIT0gMCkpCisgICAgICAg
IGdlb21ldHJ5Q2hhbmdlZCgpOworCisgICAgLy8gU2VlIGlmIG91ciBvZmZzZXQgaGFzIGNoYW5n
ZWQgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgbWlnaHQgbm90IGhhdmUgc2Nyb2xsYmFycy4KKyAg
ICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBlZGl0aW5nIGEgYm9keSB3aXRoIG92ZXJmbG93Omhp
ZGRlbiBhbmQgc2Nyb2xsaW5nIHRvIHJldmVhbCBzZWxlY3Rpb24uCisgICAgLy8gSXQgY2FuIGFs
c28gaGFwcGVuIHdoZW4gbWF4aW1pemluZyBhIHdpbmRvdyB0aGF0IGhhcyBzY3JvbGxiYXJzIChi
dXQgdGhlIG5ldyBtYXhpbWl6ZWQgcmVzdWx0CisgICAgLy8gZG9lcyBub3QpLgorICAgIEludFNp
emUgc2Nyb2xsRGVsdGEgPSBzY3JvbGwgLSBtX2RhdGEtPnNjcm9sbE9mZnNldDsKKyAgICBpZiAo
c2Nyb2xsRGVsdGEgIT0gSW50U2l6ZSgpKSB7CisgICAgICAgbV9kYXRhLT5zY3JvbGxPZmZzZXQg
PSBzY3JvbGw7CisgICAgICAgbV9kYXRhLT5zY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEp
OworICAgIH0KIAotICAgIG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAg
ICBtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOwogfQogCi1JbnRQb2ludCBTY3Jv
bGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0lu
dFBvaW50IFNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHdpbmRv
d1BvaW50KSBjb25zdAogeyAKLSAgICByZXR1cm4gcG9pbnQ7CisgICAgSW50UG9pbnQgdmlld1Bv
aW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAgICByZXR1
cm4gdmlld1BvaW50ICsgc2Nyb2xsT2Zmc2V0KCk7CiB9CiAKLUludFBvaW50IFNjcm9sbFZpZXc6
OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UG9pbnQg
U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRQb2ludCYgY29udGVudHNQb2lu
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gcG9pbnQ7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0g
Y29udGVudHNQb2ludCAtIHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiBjb252ZXJ0VG9Db250
YWluaW5nV2luZG93KHZpZXdQb2ludCk7ICAKIH0KIAogUGxhdGZvcm1TY3JvbGxiYXIqIFNjcm9s
bFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50KQogeyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEludFBvaW50IHZpZXdQb2lu
dCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhtb3VzZUV2ZW50LnBvcygpKTsKKyAgICBp
ZiAobV9kYXRhLT5oQmFyICYmIG1fZGF0YS0+aEJhci0+ZnJhbWVHZW9tZXRyeSgpLmNvbnRhaW5z
KHZpZXdQb2ludCkpCisgICAgICAgIHJldHVybiBtX2RhdGEtPmhCYXIuZ2V0KCk7CisgICAgaWYg
KG1fZGF0YS0+dkJhciAmJiBtX2RhdGEtPnZCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlucyh2
aWV3UG9pbnQpKQorICAgICAgICByZXR1cm4gbV9kYXRhLT52QmFyLmdldCgpOwogICAgIHJldHVy
biAwOwogfQogCitJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3Qg
V2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBv
aW50IG5ld1BvaW50ID0gcG9pbnQ7CisgICAgaWYgKGNoaWxkICE9IG1fZGF0YS0+aEJhciAmJiBj
aGlsZCAhPSBtX2RhdGEtPnZCYXIpCisgICAgICAgIG5ld1BvaW50ID0gcG9pbnQgLSBzY3JvbGxP
ZmZzZXQoKTsKKyAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY2hpbGQsIG5l
d1BvaW50KTsKK30KKworSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydFNlbGZUb0NoaWxkKGNv
bnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJ
bnRQb2ludCBuZXdQb2ludCA9IHBvaW50OworICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIg
JiYgY2hpbGQgIT0gbV9kYXRhLT52QmFyKQorICAgICAgICBuZXdQb2ludCA9IHBvaW50ICsgc2Ny
b2xsT2Zmc2V0KCk7CisgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydFNlbGZUb0NoaWxkKGNoaWxk
LCBuZXdQb2ludCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGNv
ZGUgaXMgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGZvcmsgRnJhbWVWaWV3LmgvLmNwcC4KKyAg
ICAvLyBJbiB0aGUgZW5kLCBGcmFtZVZpZXcgc2hvdWxkIGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxW
aWV3LgorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKworICAgIGlmIChjb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgZG9jdW1lbnRE
aXJ0eVJlY3QgPSByZWN0OworICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChmcmFtZUdl
b21ldHJ5KCkpOworCisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgY29udGV4dC0+dHJhbnNs
YXRlKHgoKSwgeSgpKTsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOwor
CisgICAgY29udGV4dC0+dHJhbnNsYXRlKC1jb250ZW50c1goKSwgLWNvbnRlbnRzWSgpKTsKKyAg
ICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKGNvbnRlbnRzWCgpLCBjb250ZW50c1koKSk7CisKKyAg
ICBjb250ZXh0LT5jbGlwKGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpKTsK
KyAgICBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKS0+ZnJhbWUoKS0+cGFpbnQo
Y29udGV4dCwgZG9jdW1lbnREaXJ0eVJlY3QpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKwor
ICAgIC8vIE5vdyBwYWludCB0aGUgc2Nyb2xsYmFycy4KKyAgICBpZiAoIW1fZGF0YS0+c2Nyb2xs
YmFyc1N1cHByZXNzZWQgJiYgKG1fZGF0YS0+aEJhciB8fCBtX2RhdGEtPnZCYXIpKSB7CisgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3RGlydHlSZWN0
ID0gcmVjdDsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVHZW9t
ZXRyeSgpKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2UgZG9uJ3QgbmVlZCB0byB0cmFuc2xh
dGUgdGhlIGNvbnRleHQgYXMgUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QgbWFrZXMgc3VyZSB0
aGUgc2Nyb2xsYmFyCisgICAgICAgICAqIGlzIGF0IHRoZSByaWdodCBzcG90LgorICAgICAgICAg
Ki8KKyAgICAgICAgaWYgKG1fZGF0YS0+aEJhcikKKyAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+
cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVjdCk7CisgICAgICAgIGlmIChtX2RhdGEt
PnZCYXIpCisgICAgICAgICAgICBtX2RhdGEtPnZCYXItPnBhaW50KGNvbnRleHQsIHNjcm9sbFZp
ZXdEaXJ0eVJlY3QpOworCisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7Cisg
ICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsKKyAgICAgICAgLyoK
KyAgICAgICAgICogRklYTUU6IFRPRE86IENoZWNrIGlmIHRoYXQgd29ya3Mgd2l0aCBSVEwKKyAg
ICAgICAgICovCisgICAgICAgIC8vIEZpbGwgdGhlIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZS4K
KyAgICAgICAgSW50UmVjdCBoQ29ybmVyOworICAgICAgICBpZiAobV9kYXRhLT5oQmFyICYmIHdp
ZHRoKCkgLSBtX2RhdGEtPmhCYXItPndpZHRoKCkgPiAwKSB7CisgICAgICAgICAgICBoQ29ybmVy
ID0gSW50UmVjdChtX2RhdGEtPmhCYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBpZiAoaENvcm5lci5pbnRlcnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKQorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGhDb3JuZXIsIENvbG9yOjp3aGl0ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobV9kYXRhLT52QmFyICYmIGhlaWdodCgpIC0gbV9kYXRhLT52
QmFyLT5oZWlnaHQoKSA+IDApIHsKKyAgICAgICAgICAgIEludFJlY3QgdkNvcm5lcih3aWR0aCgp
IC0gbV9kYXRhLT52QmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZGF0YS0+dkJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRh
LT52QmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0g
bV9kYXRhLT52QmFyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAodkNvcm5lciAhPSBoQ29y
bmVyICYmIHZDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5maWxsUmVjdCh2Q29ybmVyLCBDb2xvcjo6d2hpdGUpOworICAgICAg
ICB9CisKKyAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOworICAgIH0KK30KKworLyoKKyAqIHVw
ZGF0ZSBjaGlsZHJlbiBidXQgbm9yIG91ciBzY3JvbGxiYXJzLiBUaGV5IHNob3VsZCBub3Qgc2Ny
b2xsIHdoZW4KKyAqIHdlIHNjcm9sbCBvdXIgY29udGVudC4KKyAqLwordm9pZCBTY3JvbGxWaWV3
OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAoreworICAgIEhhc2hTZXQ8V2lkZ2V0Kj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fZGF0YS0+Y2hpbGRyZW4uZW5kKCk7CisgICAgZm9yIChIYXNoU2V0
PFdpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gbV9kYXRhLT5jaGlsZHJlbi5iZWdp
bigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQorICAgICAgICAoKmN1cnJlbnQpLT5nZW9t
ZXRyeUNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgaWYg
ICgoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSAmJiBt
X2RhdGEtPnZCYXIpCisgICAgICAgIG1fZGF0YS0+dkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOworICAgIGVsc2UgaWYgKG1fZGF0YS0+aEJhcikKKyAgICAgICAgbV9kYXRhLT5o
QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cit9CisKK0ludFJlY3QgU2Nyb2xs
Vmlldzo6d2luZG93UmVzaXplclJlY3QoKQoreworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsK
KyAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1l
Vmlldyo+KHRoaXMpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFt
ZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworICAgIHJldHVybiBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVzaXplclJl
Y3QoKTsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpyZXNpemVyT3ZlcmxhcHNDb250ZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fZGF0YS0+c2Nyb2xsYmFyc0F2b2lkaW5nUmVzaXplcjsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjphZGp1c3RPdmVybGFwcGluZ1Njcm9sbGJhckNvdW50KGludCBv
dmVybGFwRGVsdGEpCit7CisgICAgaW50IG9sZENvdW50ID0gbV9kYXRhLT5zY3JvbGxiYXJzQXZv
aWRpbmdSZXNpemVyOworICAgIG1fZGF0YS0+c2Nyb2xsYmFyc0F2b2lkaW5nUmVzaXplciArPSBv
dmVybGFwRGVsdGE7CisgICAgaWYgKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0ZyYW1lVmlldygp
KQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmFkanVzdE92ZXJs
YXBwaW5nU2Nyb2xsYmFyQ291bnQob3ZlcmxhcERlbHRhKTsKKyAgICBlbHNlIGlmICghbV9kYXRh
LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkgeworICAgICAgICAvLyBJZiB3ZSB3ZW50IGZyb20gbiB0
byAwIG9yIGZyb20gMCB0byBuIGFuZCB3ZSdyZSB0aGUgb3V0ZXJtb3N0IHZpZXcsCisgICAgICAg
IC8vIHdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgd2luZG93UmVzaXplclJlY3QoKSwgc2luY2Ug
aXQgd2lsbCBub3cgbmVlZCB0byBwYWludAorICAgICAgICAvLyBkaWZmZXJlbnRseS4KKyAgICAg
ICAgaWYgKG9sZENvdW50ID4gMCAmJiBtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIg
PT0gMCB8fAorICAgICAgICAgICAgb2xkQ291bnQgPT0gMCAmJiBtX2RhdGEtPnNjcm9sbGJhcnNB
dm9pZGluZ1Jlc2l6ZXIgPiAwKQorICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3Qod2luZG93UmVz
aXplclJlY3QoKSk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldFBhcmVudChTY3Jv
bGxWaWV3KiBwYXJlbnRWaWV3KQoreworICAgIGlmICghcGFyZW50VmlldyAmJiBtX2RhdGEtPnNj
cm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzRnJhbWVW
aWV3KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+YWRqdXN0
T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudChmYWxzZSk7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQo
cGFyZW50Vmlldyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbihjb25z
dCBJbnRSZWN0JiBjb250YWluaW5nV2luZG93UmVjdCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZp
ZXcoKSk7CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25z
dCBGcmFtZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgp
ID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT5hZGRUb0RpcnR5UmVnaW9uKGNvbnRhaW5p
bmdXaW5kb3dSZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUo
aW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisgICAgY29uc3Qg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlz
KTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFt
ZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBh
Z2UtPmNocm9tZSgpLT5zY3JvbGxCYWNraW5nU3RvcmUoZHgsIGR5LCBzY3JvbGxWaWV3UmVjdCwg
Y2xpcFJlY3QpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCit7
CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFn
ZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z2RrL1dpZGdldEdkay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCmlu
ZGV4IDBmZmEyM2QuLjFlODcxMGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1dp
ZGdldEdkay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzQs
NyArMzQsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIK
IAogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CkBAIC00Niw4ICs0
OCwxOSBAQCBwdWJsaWM6CiAgICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlOwogICAgIEd0a1dpZGdl
dCogd2lkZ2V0OwogICAgIFdpZGdldENsaWVudCogY2xpZW50OwotICAgIEludFJlY3QgZ2VvbWV0
cnk7Ci0gICAgRm9udCBmb250OworICAgIEludFJlY3QgZnJhbWVSZWN0OworCisgICAgU2Nyb2xs
VmlldyogcGFyZW50OworICAgIFdlYktpdEd0a1BhZ2UqIGNvbnRhaW5pbmdXaW5kb3c7CisgICAg
Ym9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbjsKKyAgICBib29sIGlzU2Nyb2xsVmlld0NvbnRyb2w7
CisKKyAgICBHZGtEcmF3YWJsZSogZ2RrRHJhd2FibGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFk
cmF3YWJsZSAmJiB3aWRnZXQpCisgICAgICAgICAgICBkcmF3YWJsZSA9IHdpZGdldC0+d2luZG93
OworICAgICAgICByZXR1cm4gZHJhd2FibGU7CisgICAgfQogfTsKIAogV2lkZ2V0OjpXaWRnZXQo
KQpAQCAtNTUsMjcgKzY4LDIwIEBAIFdpZGdldDo6V2lkZ2V0KCkKIHsKICAgICBkYXRhLT5kcmF3
YWJsZSA9IDA7CiAgICAgZGF0YS0+d2lkZ2V0ID0gMDsKKyAgICBkYXRhLT5jbGllbnQgPSAwOwor
ICAgIGRhdGEtPnBhcmVudCA9IDA7CisgICAgZGF0YS0+Y29udGFpbmluZ1dpbmRvdyA9IDA7Cisg
ICAgZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBmYWxzZTsKKyAgICBkYXRhLT5pc1Njcm9s
bFZpZXdDb250cm9sID0gZmFsc2U7CiB9CiAKLVdpZGdldDo6V2lkZ2V0KEd0a1dpZGdldCogd2lk
Z2V0KQotICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSkKLXsKLSAgICBzZXRHdGtXaWRnZXQo
d2lkZ2V0KTsKLX0KIAotR2RrRHJhd2FibGUqIFdpZGdldDo6Z2RrRHJhd2FibGUoKSBjb25zdAot
ewotICAgIGlmICghZGF0YS0+ZHJhd2FibGUgJiYgZGF0YS0+d2lkZ2V0KQotICAgICAgICBkYXRh
LT5kcmF3YWJsZSA9IEdUS19JU19MQVlPVVQoZGF0YS0+d2lkZ2V0KSA/IEdUS19MQVlPVVQoZGF0
YS0+d2lkZ2V0KS0+YmluX3dpbmRvdyA6IGRhdGEtPndpZGdldC0+d2luZG93OwotICAgIHJldHVy
biBkYXRhLT5kcmF3YWJsZTsKLX0KLQotR3RrV2lkZ2V0KiBXaWRnZXQ6Omd0a1dpZGdldCgpIGNv
bnN0CitHdGtXaWRnZXQqIFdpZGdldDo6aW50ZXJuYWxHdGtXaWRnZXQoKSBjb25zdAogewogICAg
IHJldHVybiBkYXRhLT53aWRnZXQ7CiB9CiAKLXZvaWQgV2lkZ2V0OjpzZXRHdGtXaWRnZXQoR3Rr
V2lkZ2V0KiB3aWRnZXQpCit2b2lkIFdpZGdldDo6c2V0SW50ZXJuYWxHdGtXaWRnZXQoR3RrV2lk
Z2V0KiB3aWRnZXQpCiB7CiAgICAgZGF0YS0+ZHJhd2FibGUgPSAwOwogICAgIGRhdGEtPndpZGdl
dCA9IHdpZGdldDsKQEAgLTg2LDYgKzkyLDE2IEBAIFdpZGdldDo6fldpZGdldCgpCiAgICAgZGVs
ZXRlIGRhdGE7CiB9CiAKK3ZvaWQgV2lkZ2V0OjpzZXRDb250YWluaW5nV2luZG93KFdlYktpdEd0
a1BhZ2UqIGNvbnRhaW5pbmdXaW5kb3cpCit7CisgICAgZGF0YS0+Y29udGFpbmluZ1dpbmRvdyA9
IGNvbnRhaW5pbmdXaW5kb3c7Cit9CisKK1dlYktpdEd0a1BhZ2UqIFdpZGdldDo6Y29udGFpbmlu
Z1dpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3c7Cit9
CisKIHZvaWQgV2lkZ2V0OjpzZXRDbGllbnQoV2lkZ2V0Q2xpZW50KiBjKQogewogICAgIGRhdGEt
PmNsaWVudCA9IGM7CkBAIC05OCwxNSArMTE0LDI3IEBAIFdpZGdldENsaWVudCogV2lkZ2V0Ojpj
bGllbnQoKSBjb25zdAogCiBJbnRSZWN0IFdpZGdldDo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGRhdGEtPmdlb21ldHJ5OworICAgIHJldHVybiBkYXRhLT5mcmFtZVJlY3Q7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHIpCit7
CisgICAgZGF0YS0+ZnJhbWVSZWN0ID0gcjsKK30KKwordm9pZCBXaWRnZXQ6OnNldFBhcmVudChT
Y3JvbGxWaWV3KiB2KQoreworICAgIGRhdGEtPnBhcmVudCA9IHY7Cit9CisKK1Njcm9sbFZpZXcq
IFdpZGdldDo6cGFyZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+cGFyZW50OwogfQog
CiB2b2lkIFdpZGdldDo6c2V0Rm9jdXMoKQogewotICAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gZGF0
YS0+d2lkZ2V0OwotICAgIGlmICghd2lkZ2V0KQotICAgICAgICByZXR1cm47Ci0gICAgZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGludGVy
bmFsR3RrV2lkZ2V0KCkgPyBpbnRlcm5hbEd0a1dpZGdldCgpIDogR1RLX1dJREdFVChjb250YWlu
aW5nV2luZG93KCkpKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3Im
IGN1cnNvcikKQEAgLTExNSwzOSArMTQzLDIxIEBAIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29u
c3QgQ3Vyc29yJiBjdXJzb3IpCiAgICAgaWYgKCFwY3VyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJhd2Fi
bGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2Rr
V2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X3Nl
dF9jdXJzb3Iod2luZG93LCBwY3VyKTsKLQorICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRh
LT5nZGtEcmF3YWJsZSgpID8gR0RLX1dJTkRPVyhkYXRhLT5nZGtEcmF3YWJsZSgpKSA6IGNvbnRh
aW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdywgcGN1cik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzaG93
KCkKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlm
ICghZHJhd2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIGlmICghaW50ZXJu
YWxHdGtXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0g
R0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7CisgICAg
Z3RrX3dpZGdldF9zaG93KGludGVybmFsR3RrV2lkZ2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6
aGlkZSgpCiB7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZ2RrRHJhd2FibGUoKTsKLSAg
ICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBpZiAoIWlu
dGVybmFsR3RrV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRv
dyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfaGlkZSh3aW5kb3cpOwot
fQotCi12b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIGRhdGEtPmdlb21ldHJ5ID0gcjsKLSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEtPndpZGdl
dCk7Ci0KLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHIueCgpLCByLnkoKSwgci53
aWR0aCgpLCByLmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGRhdGEt
PndpZGdldCwgJmFsbG9jYXRpb24pOworICAgIGd0a193aWRnZXRfaGlkZShpbnRlcm5hbEd0a1dp
ZGdldCgpKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkKQEAgLTE2MywzMCAr
MTczLDM1IEBAIGJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogCiB2b2lkIFdpZGdldDo6
cmVtb3ZlRnJvbVBhcmVudCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFy
ZW50KCkpCisgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAogLyoKICAq
IHNpbWlsaWFyIHRvIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZSwgd2Ugd2FudCB0byBt
YWtlIHN1cmUKLSAqIGd0a1dpZGdldCgpIGlzIHBhaW50ZWQgbm93LgorICogaW50ZXJuYWxHdGtX
aWRnZXQoKSBpcyBwYWludGVkIG5vdy4KKyAqCisgKiBUT0RPOiB3ZSBtaWdodCB3YW50IHRvIGhv
bm9yIHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgY29udGV4dCBhbmQgbWFuaXB1bGF0ZQorICogYWxs
b2NhdGlvbi54IGFuZCBhbGxvY2F0aW9uLnkgYmVmb3JlIGRyYXdpbmcuIFRoaXMgaGFzIHBvdGVu
dGlhbCB0byByZW1vdmUKKyAqIHRoZSBzZXRTY3JvbGxWaWV3Q29udHJvbCBtZXRob2QuCiAgKi8K
IHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmKQogewotICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgaWYgKCFpbnRlcm5hbEd0a1dpZGdl
dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRf
bmV3KEdES19FWFBPU0UpOwogICAgIGV2ZW50LT5leHBvc2UgPSAqY29udGV4dC0+Z2RrRXhwb3Nl
RXZlbnQoKTsKLSAgICBldmVudC0+ZXhwb3NlLnJlZ2lvbiA9IGd0a193aWRnZXRfcmVnaW9uX2lu
dGVyc2VjdChndGtXaWRnZXQoKSwgZXZlbnQtPmV4cG9zZS5yZWdpb24pOworICAgIGV2ZW50LT5l
eHBvc2UucmVnaW9uID0gZ3RrX3dpZGdldF9yZWdpb25faW50ZXJzZWN0KGludGVybmFsR3RrV2lk
Z2V0KCksIGV2ZW50LT5leHBvc2UucmVnaW9uKTsKICAgICBnX29iamVjdF9yZWYoZXZlbnQtPmV4
cG9zZS53aW5kb3cpOwogCiAgICAgaWYgKCFnZGtfcmVnaW9uX2VtcHR5KGV2ZW50LT5leHBvc2Uu
cmVnaW9uKSkgewogICAgICAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5leHBvc2Uu
cmVnaW9uLCAmZXZlbnQtPmV4cG9zZS5hcmVhKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZW5kX2V4
cG9zZShndGtXaWRnZXQoKSwgZXZlbnQpOworICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3Nl
KGludGVybmFsR3RrV2lkZ2V0KCksIGV2ZW50KTsKICAgICB9CiAKLSAgICBndGtfd2lkZ2V0X3Nl
bmRfZXhwb3NlKGd0a1dpZGdldCgpLCBldmVudCk7Ci0gICAgZ2RrX2V2ZW50X2ZyZWUgKGV2ZW50
KTsKKyAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVybmFsR3RrV2lkZ2V0KCksIGV2ZW50
KTsKKyAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRJc1Nl
bGVjdGVkKGJvb2wpCkBAIC0xOTYsMTUgKzIxMSwxMDAgQEAgdm9pZCBXaWRnZXQ6OnNldElzU2Vs
ZWN0ZWQoYm9vbCkKIAogdm9pZCBXaWRnZXQ6OmludmFsaWRhdGUoKQogewotICAgIGlmIChkYXRh
LT53aWRnZXQpCi0gICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhkYXRhLT53aWRnZXQpOwor
ICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKK30K
Kwordm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
aWYgKGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIXBhcmVudCgpKSB7CisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19X
SURHRVQoY29udGFpbmluZ1dpbmRvdygpKSwgci54KCksIHIueSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworICAgICAgICBpZiAo
aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMp
LT5hZGRUb0RpcnR5UmVnaW9uKHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
R2V0IHRoZSByb290IHdpZGdldC4KKyAgICBTY3JvbGxWaWV3KiBvdXRlcm1vc3RWaWV3ID0gcGFy
ZW50KCk7CisgICAgd2hpbGUgKG91dGVybW9zdFZpZXcgJiYgb3V0ZXJtb3N0Vmlldy0+cGFyZW50
KCkpCisgICAgICAgIG91dGVybW9zdFZpZXcgPSBvdXRlcm1vc3RWaWV3LT5wYXJlbnQoKTsKKyAg
ICBpZiAoIW91dGVybW9zdFZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3Qgd2lu
ZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocik7CisgICAgZ3RrX3dpZGdldF9x
dWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLCB3aW5kb3dSZWN0
LngoKSwgd2luZG93UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lu
ZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICBvdXRlcm1vc3RWaWV3
LT5hZGRUb0RpcnR5UmVnaW9uKHdpbmRvd1JlY3QpOworfQorCitJbnRQb2ludCBXaWRnZXQ6OmNv
bnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcG9pbnQ7CisgICAgZm9yIChjb25zdCBXaWRnZXQg
KnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRnZXQgPSB0aGlzOworICAgICAgICAg
cGFyZW50V2lkZ2V0OworICAgICAgICAgY2hpbGRXaWRnZXQgPSBwYXJlbnRXaWRnZXQsIHBhcmVu
dFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCisgICAgICAgIHdpbmRvd1BvaW50ID0g
cGFyZW50V2lkZ2V0LT5jb252ZXJ0Q2hpbGRUb1NlbGYoY2hpbGRXaWRnZXQsIHdpbmRvd1BvaW50
KTsKKyAgICByZXR1cm4gd2luZG93UG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVy
dEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICBJbnRQb2ludCB3aWRnZXRQb2ludCA9IHBvaW50OworICAgIGZvciAoY29uc3QgV2lkZ2V0ICpw
YXJlbnRXaWRnZXQgPSBwYXJlbnQoKSwgKmNoaWxkV2lkZ2V0ID0gdGhpczsKKyAgICAgICAgIHBh
cmVudFdpZGdldDsKKyAgICAgICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50V2lkZ2V0LCBwYXJlbnRX
aWRnZXQgPSBwYXJlbnRXaWRnZXQtPnBhcmVudCgpKQorICAgICAgICB3aWRnZXRQb2ludCA9IHBh
cmVudFdpZGdldC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkV2lkZ2V0LCB3aWRnZXRQb2ludCk7
CisgICAgcmV0dXJuIHdpZGdldFBvaW50OworfQorCitJbnRSZWN0IFdpZGdldDo6Y29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJl
Y3QgY29udmVydGVkUmVjdCA9IHJlY3Q7CisgICAgY29udmVydGVkUmVjdC5zZXRMb2NhdGlvbihj
b252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnZlcnRlZFJlY3QubG9jYXRpb24oKSkpOworICAg
IHJldHVybiBjb252ZXJ0ZWRSZWN0OworfQorCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRDaGls
ZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSArIGNoaWxkLT54KCksIHBvaW50Lnko
KSArIGNoaWxkLT55KCkpOworfQorCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGls
ZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAtIGNoaWxkLT54KCksIHBvaW50LnkoKSAtIGNo
aWxkLT55KCkpOworfQorCitib29sIFdpZGdldDo6c3VwcHJlc3NJbnZhbGlkYXRpb24oKSBjb25z
dAoreworICAgIHJldHVybiBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbjsKK30KKwordm9pZCBX
aWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wgc3VwcHJlc3MpCit7CisgICAgZGF0
YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBzdXBwcmVzczsKIH0KIAotdm9pZCBXaWRnZXQ6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFdpZGdldDo6Z2VvbWV0cnlD
aGFuZ2VkKCkgY29uc3QKIHsKLSAgICBpZiAoZGF0YS0+d2lkZ2V0KQotICAgICAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShkYXRhLT53aWRnZXQsIHJlY3QueCgpLCByZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICBpZiAoIWludGVybmFsR3RrV2lkZ2V0KCkgfHwgIXBhcmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7
CisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gZGF0YS0+aXNTY3JvbGxWaWV3Q29udHJvbCA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoZnJhbWVWaWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9t
ZXRyeSgpLnNpemUoKSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0
KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSks
IGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwg
d2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShkYXRh
LT53aWRnZXQsICZhbGxvY2F0aW9uKTsKIH0KIAordm9pZCBXaWRnZXQ6OnNldFNjcm9sbFZpZXdD
b250cm9sKCkKK3sKKyAgICBkYXRhLT5pc1Njcm9sbFZpZXdDb250cm9sID0gdHJ1ZTsKK30KIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGU1Y2Vi
Y2EuLjBmYjBhZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaApAQCAtMjEyLDYgKzIxMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBzZXRHZGtFeHBvc2VFdmVudChHZGtFdmVudEV4cG9zZSopOwogICAgICAgICBHZGtEcmF3YWJs
ZSogZ2RrRHJhd2FibGUoKSBjb25zdDsKICAgICAgICAgR2RrRXZlbnRFeHBvc2UqIGdka0V4cG9z
ZUV2ZW50KCkgY29uc3Q7CisgICAgICAgIEludFBvaW50IHRyYW5zbGF0ZVBvaW50KGNvbnN0IElu
dFBvaW50Jik7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGVk
NGUwODMuLmQ2ZjFjYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC04MTIsNiArODEyLDE3IEBAIEdk
a0RyYXdhYmxlKiBHcmFwaGljc0NvbnRleHQ6Omdka0RyYXdhYmxlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gR0RLX0RSQVdBQkxFKG1fZGF0YS0+ZXhwb3NlLT53aW5kb3cpOwogfQorCitJbnRQb2lu
dCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZVBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkK
K3sKKyAgICBjYWlyb19tYXRyaXhfdCB0bTsKKyAgICBjYWlyb19nZXRfbWF0cml4KG1fZGF0YS0+
Y3IsICZ0bSk7CisgICAgZG91YmxlIHggPSBwb2ludC54KCk7CisgICAgZG91YmxlIHkgPSBwb2lu
dC55KCk7CisKKyAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZ0bSwgJngsICZ5KTsK
KyAgICByZXR1cm4gSW50UG9pbnQoeCx5KTsKK30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15796</attachid>
            <date>2007-08-01 15:55:23 -0700</date>
            <delta_ts>2007-08-03 12:00:00 -0700</delta_ts>
            <desc>On-The-Fly FrameView creation</desc>
            <filename>gtk-on-the-fly-frameview-r0.patch</filename>
            <type>text/plain</type>
            <size>2471</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAg
Yi9XZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCmluZGV4IGFlMmRi
YzYuLjBjZDk5ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNs
aWVudEdkay5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2Rr
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R2RrLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBA
IC0yNTksNyArMjYwLDI5IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnNob3VsZEdvVG9I
aXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKIH0KIAogYm9vbCBGcmFtZUxvYWRl
ckNsaWVudEdkazo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlRG9j
dW1lbnRWaWV3KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGll
bnRHZGs6Om1ha2VEb2N1bWVudFZpZXcoKSB7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
Y29yZShtX2ZyYW1lKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5zZXRWaWV3KDAp
OworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGZyYW1lKTsKKyAg
ICBmcmFtZS0+c2V0VmlldyhmcmFtZVZpZXcpOworICAgIGZyYW1lVmlldy0+ZGVyZWYoKTsKKyAg
ICAKKyAgICAvKgorICAgICAqIHNldCB0aGUgV2ViS2l0R3RrUGFnZSAoQ29udGFpbmluZyBXaW5k
b3cpIGFuZCBtYWtlIHN1cmUgdG8gZ2l2ZSBpdCBhIHNhbmUgZGVmYXVsdCBmcmFtZSBnZW9tZXRy
eS4KKyAgICAgKi8KKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gZ2V0UGFnZUZyb21GcmFtZSht
X2ZyYW1lKTsKKyAgICBmcmFtZVZpZXctPnNldENvbnRhaW5pbmdXaW5kb3cocGFnZSk7CisgICAg
ZnJhbWVWaWV3LT5zZXRGcmFtZUdlb21ldHJ5KEludFJlY3QoMCwgMCwgR1RLX1dJREdFVChwYWdl
KS0+YWxsb2NhdGlvbi53aWR0aCwgR1RLX1dJREdFVChwYWdlKS0+YWxsb2NhdGlvbi5oZWlnaHQp
KTsKKyAgICBXZWJLaXRHdGs6OmFwcGx5QWRqdXN0bWVudHMocGFnZSwgZnJhbWVWaWV3KTsKKwor
ICAgIC8qCisgICAgICogVE9ETzogVXNlIG1hcmdpbnMgbGlrZSBXZWJWaWV3PworICAgICAqLwor
fQorCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlUmVwcmVzZW50YXRpb24oRG9jdW1l
bnRMb2FkZXIqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRH
ZGs6OmZvcmNlTGF5b3V0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50R2RrOjpmb3JjZUxheW91dEZvck5vbkhUTUwoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcCBiL1dlYktpdC9n
dGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAppbmRleCAxNjI1MGYxLi43YzdiM2JiIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAKKysrIGIvV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrZnJhbWUuY3BwCkBAIC0xMjcsMTYgKzEyNywxMCBAQCBHT2JqZWN0KiB3ZWJr
aXRfZ3RrX2ZyYW1lX25ldyhXZWJLaXRHdGtQYWdlKiB3ZWJfcGFnZSkKICAgICBXZWJLaXRHdGtG
cmFtZVByaXZhdGUgKmZyYW1lX2RhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKGZy
YW1lKTsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gY29yZSh3ZWJfcGFnZSk7CiAKKyAgICBm
cmFtZV9kYXRhLT5wYWdlID0gd2ViX3BhZ2U7CiAgICAgZnJhbWVfZGF0YS0+Y2xpZW50ID0gbmV3
IEZyYW1lTG9hZGVyQ2xpZW50R2RrKGZyYW1lKTsKICAgICBmcmFtZV9kYXRhLT5mcmFtZSA9IG5l
dyBGcmFtZShwYWdlLCAwLCBmcmFtZV9kYXRhLT5jbGllbnQpOwotCi0KLSAgICBGcmFtZVZpZXcq
IGZyYW1lX3ZpZXcgPSBuZXcgRnJhbWVWaWV3KGZyYW1lX2RhdGEtPmZyYW1lKTsKLSAgICBmcmFt
ZV9kYXRhLT5mcmFtZS0+c2V0VmlldyhmcmFtZV92aWV3KTsKLQotICAgIGZyYW1lX3ZpZXctPnNl
dEd0a1dpZGdldChHVEtfTEFZT1VUKHdlYl9wYWdlKSk7CiAgICAgZnJhbWVfZGF0YS0+ZnJhbWUt
PmluaXQoKTsKLSAgICBmcmFtZV9kYXRhLT5wYWdlID0gd2ViX3BhZ2U7CiAKICAgICByZXR1cm4g
R19PQkpFQ1QoZnJhbWUpOwogfQo=
</data>
<flag name="review"
          id="6597"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15797</attachid>
            <date>2007-08-01 15:57:17 -0700</date>
            <delta_ts>2007-08-09 17:44:42 -0700</delta_ts>
            <desc>Use GtkAdjustment</desc>
            <filename>gtk-scrollview-use-adjustment-r0.patch</filename>
            <type>text/plain</type>
            <size>7769</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKaW5kZXggMWRhMDYzNC4uMjhmOGI2
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKQEAgLTQ4LDYgKzQ4LDkg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorCitzdGF0aWMgY29uc3QgaW50IE1hZ2ljR3Rr
U2Nyb2xsQ29uc3RhbnQgPSAxMzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvKgpAQCAtNzYs
NiArNzksMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihmYWxzZSk7CiAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKKwor
ICAgICAgICBpZiAoaEFkaikgeworICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKEdfT0JKRUNUKGhBZGopLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6
OmFkanVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGhB
ZGopOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZBZGopIHsKKyAgICAgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVCh2QWRqKSwgKGdwb2ludGVy
KVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCwgdGhpcyk7CisgICAgICAgICAg
ICBnX29iamVjdF91bnJlZih2QWRqKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgc2Ny
b2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKQEAgLTg2LDYgKzk5
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7
CiAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7CiAKKyAgICBzdGF0
aWMgdm9pZCBhZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiwgZ3BvaW50ZXIpOworCiAg
ICAgU2Nyb2xsVmlldyogdmlldzsKICAgICBib29sIGhhc1N0YXRpY0JhY2tncm91bmQ7CiAgICAg
Ym9vbCBzY3JvbGxiYXJzU3VwcHJlc3NlZDsKQEAgLTEwMywxMCArMTE4LDEzIEBAIHB1YmxpYzoK
ICAgICBIYXNoU2V0PFdpZGdldCo+IGNoaWxkcmVuOwogfTsKIAorLyoKKyAqIERvbid0IGNyZWF0
ZSB0aGUgc2Nyb2xsYmFycyB3aGVuIHdlIGhhdmUgYSBob3Jpem9udGFsIEd0a0FkanVzdG1lbnQK
KyAqLwogdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcihib29sIGhhc0JhcikKIHsKICAgICBpZiAoU2Nyb2xsYmFyOjpoYXNQbGF0Zm9y
bVNjcm9sbGJhcnMoKSkgewotICAgICAgICBpZiAoaGFzQmFyICYmICFoQmFyKSB7CisgICAgICAg
IGlmIChoYXNCYXIgJiYgIWhCYXIgJiYgIWhBZGopIHsKICAgICAgICAgICAgIGhCYXIgPSBuZXcg
UGxhdGZvcm1TY3JvbGxiYXIodGhpcywgSG9yaXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9s
bGJhcik7CiAgICAgICAgICAgICBoQmFyLT5zZXRTY3JvbGxWaWV3Q29udHJvbCgpOwogICAgICAg
ICAgICAgdmlldy0+YWRkQ2hpbGQoaEJhci5nZXQoKSk7CkBAIC0xMTcsMTAgKzEzNSwxMyBAQCB2
b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKGJvb2wgaGFzQmFyKQogICAgIH0KIH0KIAorLyoKKyAqIERvbid0IGNyZWF0ZSB0aGUgc2Ny
b2xsYmFycyB3aGVuIHdlIGhhdmUgYSB2ZXJ0aWNhbCBHdGtBZGp1c3RtZW50CisgKi8KIHZvaWQg
U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJv
b2wgaGFzQmFyKQogewogICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygp
KSB7Ci0gICAgICAgIGlmIChoYXNCYXIgJiYgIXZCYXIpIHsKKyAgICAgICAgaWYgKGhhc0JhciAm
JiAhdkJhciAmJiAhdkFkaikgewogICAgICAgICAgICAgdkJhciA9IG5ldyBQbGF0Zm9ybVNjcm9s
bGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgICAg
ICAgICB2QmFyLT5zZXRTY3JvbGxWaWV3Q29udHJvbCgpOwogICAgICAgICAgICAgdmlldy0+YWRk
Q2hpbGQodkJhci5nZXQoKSk7CkBAIC0xMzEsNyArMTUyLDYgQEAgdm9pZCBTY3JvbGxWaWV3OjpT
Y3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCiAg
ICAgfQogfQogCi0KIHZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICAvLyBTaW5jZSBz
Y3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3Jv
bGwgdmlldydzIGludGVyc2VjdGlvbgpAQCAtMTYxLDYgKzE4MSwyOSBAQCB2b2lkIFNjcm9sbFZp
ZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdAogICAgIHZpZXctPnVwZGF0ZSgpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OlNj
cm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiBhZGp1c3Rt
ZW50LCBncG9pbnRlciBfdGhhdCkKK3sKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZSogdGhhdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlld1ByaXZhdGUqPihfdGhhdCk7CisKKyAgICAvLyBGaWd1
cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IHRoYXQt
PnNjcm9sbE9mZnNldDsKKyAgICBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT5oQWRqKQorICAgICAg
ICBuZXdPZmZzZXQuc2V0V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRf
dmFsdWUoYWRqdXN0bWVudCkpKTsKKyAgICBlbHNlIGlmIChhZGp1c3RtZW50ID09IHRoYXQtPnZB
ZGopCisgICAgICAgIG5ld09mZnNldC5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRq
dXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCkpKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVs
dGEgPSBuZXdPZmZzZXQgLSB0aGF0LT5zY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9sbERlbHRh
ID09IEludFNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoYXQtPnNjcm9sbE9mZnNldCA9
IG5ld09mZnNldDsKKworICAgIGlmICh0aGF0LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdGhhdC0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsK
KyAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGF0LT52aWV3KS0+ZnJhbWUoKS0+c2VuZFNj
cm9sbEV2ZW50KCk7Cit9CisKIHZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqIGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJl
YWxseSBtb3ZlZC4KQEAgLTE5NywxMCArMjQwLDM3IEBAIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3
KCkKICAgICBkZWxldGUgbV9kYXRhOwogfQogCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBhc3N1
bWVkOgorICogICAoaGFkaiAmJiB2YWRqKSB8fCAoIWhhZGogJiYgIXZhZGopCisgKi8KIHZvaWQg
U2Nyb2xsVmlldzo6c2V0R3RrQWRqdXN0bWVudHMoR3RrQWRqdXN0bWVudCogaGFkaiwgR3RrQWRq
dXN0bWVudCogdmFkaikKIHsKKyAgICBpZiAobV9kYXRhLT5oQWRqKSB7CisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChtX2RhdGEtPmhBZGopLCAo
Z3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkLCBtX2RhdGEpOwor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QobV9k
YXRhLT52QWRqKSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdl
ZCwgbV9kYXRhKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9kYXRhLT5oQWRqKTsKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYobV9kYXRhLT52QWRqKTsKKyAgICB9CisKICAgICBtX2RhdGEtPmhB
ZGogPSBoYWRqOwogICAgIG1fZGF0YS0+dkFkaiA9IHZhZGo7CisKKyAgICBpZiAobV9kYXRhLT5o
QWRqKSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kYXRhLT5oQWRqLCAidmFsdWUtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkKSwg
bV9kYXRhKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2RhdGEtPnZBZGosICJ2YWx1ZS1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQp
LCBtX2RhdGEpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRpc2FibGUgdGhlIHNjcm9sbGJh
cnMgKGlmIHdlIGhhdmUgYW55KSBhcyB0aGUgR3RrQWRqdXN0bWVudCBvdmVyCisgICAgICAgICAq
LworICAgICAgICBtX2RhdGEtPnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKKyAgICAg
ICAgbV9kYXRhLT5zZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGZhbHNlKTsKKworICAgICAgICBn
X29iamVjdF9yZWYobV9kYXRhLT5oQWRqKTsKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZGF0YS0+
dkFkaik7CisgICAgfQorICAgICAgIAorICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3Jv
bGxPZmZzZXQpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IElu
dFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQpAQCAtNDMxLDEyICs1MDEsMTEgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKICAgICAgICAgKGUu
ZGVsdGFZKCkgPiAwICYmIHNjcm9sbE9mZnNldCgpLmhlaWdodCgpID4gMCkpCiAgICAgICAgIGUu
YWNjZXB0KCk7CiAKLSAgICBzY3JvbGxCeShlLmRlbHRhWCgpICogTElORV9TVEVQLCBlLmRlbHRh
WSgpICogTElORV9TVEVQKTsKKyAgICBzY3JvbGxCeShzdGF0aWNfY2FzdDxpbnQ+KGUuZGVsdGFY
KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGUuZGVsdGFZKCkpKTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCiB7Ci0jd2Fy
bmluZyAiVXBkYXRpbmcgdGhlIHNjcm9sbGJhcnMiCiAgICAgLy8gRG9uJ3QgYWxsb3cgcmUtZW50
cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgogICAgIGlmIChtX2RhdGEtPmluVXBkYXRlU2Nyb2xs
YmFycykKICAgICAgICAgcmV0dXJuOwpAQCAtNDU1LDYgKzUyNCwxMSBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKICAgICBT
Y3JvbGxiYXJNb2RlIGhTY3JvbGwgPSBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlOwogICAgIFNjcm9s
bGJhck1vZGUgdlNjcm9sbCA9IG1fZGF0YS0+dlNjcm9sbGJhck1vZGU7CiAgICAgCisgICAgLyoK
KyAgICAgKiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hvIGlzIGdvaW5nIHRvIHJlbW92ZSBz
cGFjZSBmcm9tIG91ciB2aWV3cG9ydC4gRWl0aGVyCisgICAgICogd2UgZG8gaXQgYnkgY3JlYXRp
bmcgYSBQbGF0Zm9ybVNjcm9sbGJhciBvciB0aGUgR3RrV2lkZ2V0IGVtYmVkZGluZyB1cyBpcyBn
b2luZyB0byBkbworICAgICAqIHRoYXQgYnkgY2FsbGluZyBzZXRGcmFtZUdlb21ldHJ5LgorICAg
ICAqLwogICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0aCA9IFBsYXRmb3JtU2Nyb2xsYmFyOjp2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgY29uc3QgaW50IGNIb3Jpem9udGFsSGVpZ2h0
ID0gUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKIApAQCAt
NDk2LDggKzU3MCwyMCBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3Qg
SW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKICAgICBJbnRTaXplIG1heFNjcm9sbFBvc2l0aW9uKGNv
bnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJs
ZUhlaWdodCgpKTsKICAgICBJbnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZzZXQuc2hydW5rVG8o
bWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisK
KwogIAotICAgIGlmIChtX2RhdGEtPmhCYXIpIHsKKyAgICBpZiAobV9kYXRhLT5oQWRqKSB7Cisg
ICAgICAgIG1fZGF0YS0+aEFkai0+cGFnZV9zaXplID0gdmlzaWJsZVdpZHRoKCk7CisgICAgICAg
IG1fZGF0YS0+aEFkai0+c3RlcF9pbmNyZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50Owor
ICAgICAgICBtX2RhdGEtPmhBZGotPnVwcGVyID0gY29udGVudHNXaWR0aCgpOworICAgICAgICBn
dGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1fZGF0YS0+aEFkaik7CisKKyAgICAgICAgaWYgKG1fZGF0
YS0+c2Nyb2xsT2Zmc2V0LndpZHRoKCkgIT0gc2Nyb2xsLndpZHRoKCkpIHsKKyAgICAgICAgICAg
IG1fZGF0YS0+aEFkai0+dmFsdWUgPSBzY3JvbGwud2lkdGgoKTsKKyAgICAgICAgICAgIGd0a19h
ZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9kYXRhLT5oQWRqKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSBpZiAobV9kYXRhLT5oQmFyKSB7CiAgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2li
bGVXaWR0aCgpOwogICAgICAgICBtX2RhdGEtPmhCYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0
aCgpID4gY2xpZW50V2lkdGgpOwogICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGgg
LSBQQUdFX0tFRVApOwpAQCAtNTIwLDcgKzYwNiwxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKICAgICAgICAgICAgIG1f
ZGF0YS0+aEJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOyAKICAgICB9IAogCi0g
ICAgaWYgKG1fZGF0YS0+dkJhcikgeworICAgIGlmIChtX2RhdGEtPnZBZGopIHsKKyAgICAgICAg
bV9kYXRhLT52QWRqLT5wYWdlX3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0
YS0+dkFkai0+c3RlcF9pbmNyZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAg
ICBtX2RhdGEtPnZBZGotPnVwcGVyID0gY29udGVudHNIZWlnaHQoKTsKKyAgICAgICAgZ3RrX2Fk
anVzdG1lbnRfY2hhbmdlZChtX2RhdGEtPnZBZGopOworCisgICAgICAgIGlmIChtX2RhdGEtPnNj
cm9sbE9mZnNldC5oZWlnaHQoKSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1f
ZGF0YS0+dkFkai0+dmFsdWUgPSBzY3JvbGwuaGVpZ2h0KCk7CisgICAgICAgICAgICBndGtfYWRq
dXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fZGF0YS0+dkFkaik7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKG1fZGF0YS0+dkJhcikgewogICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJs
ZUhlaWdodCgpOwogICAgICAgICBtX2RhdGEtPnZCYXItPnNldEVuYWJsZWQoY29udGVudHNIZWln
aHQoKSA+IGNsaWVudEhlaWdodCk7CiAgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWln
aHQgLSBQQUdFX0tFRVApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15798</attachid>
            <date>2007-08-01 15:58:09 -0700</date>
            <delta_ts>2007-08-08 07:47:55 -0700</delta_ts>
            <desc>ScrollBar changes</desc>
            <filename>gtk-platform-scrollbar-r0.patch</filename>
            <type>text/plain</type>
            <size>3631</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCmluZGV4IDk2ZGNiYzkuLmQ2
OGUyNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFy
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaApAQCAtMjks
NiArMjksOCBAQAogI2luY2x1ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgIlNjcm9sbEJhci5oIgog
Cit0eXBlZGVmIHN0cnVjdCBfR3RrQWRqdXN0bWVudCBHdGtBZGp1c3RtZW50OworCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtU2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwg
cHVibGljIFNjcm9sbGJhciB7CkBAIC01MSw2ICs1MywxMCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGh1bWJQcm9wb3J0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQg
Z3RrVmFsdWVDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBQbGF0Zm9ybVNjcm9sbGJhciopOworICAg
IEd0a0FkanVzdG1lbnQqIG1fYWRqdXN0bWVudDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcAppbmRleCA3YTM0OGM2Li4yYjIxNDNjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCkBAIC0z
NywzNCArMzcsMzEgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKwogUGxhdGZvcm1T
Y3JvbGxiYXI6OlBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKICAgICA6IFNjcm9s
bGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSkKKyAgICAsIG1fYWRqdXN0bWVu
dChHVEtfQURKVVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAw
LjAsIDAuMCkpKQogeyAKICAgICBHdGtTY3JvbGxiYXIqIHNjcm9sbEJhciA9IG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1RLX1NDUk9MTEJBUig6Omd0a19oc2Nyb2xsYmFyX25ldyhOVUxMKSkgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a192c2Nyb2xsYmFyX25ldyhOVUxM
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFSKDo6Z3RrX2hz
Y3JvbGxiYXJfbmV3KG1fYWRqdXN0bWVudCkpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19TQ1JPTExCQVIoOjpndGtfdnNjcm9sbGJhcl9uZXcobV9hZGp1c3RtZW50KSk7CiAg
ICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoc2Nyb2xsQmFyKSk7CiAgICAgc2V0SW50ZXJu
YWxHdGtXaWRnZXQoR1RLX1dJREdFVChzY3JvbGxCYXIpKTsKKyAgICBnX29iamVjdF9yZWYoR19P
QkpFQ1Qoc2Nyb2xsQmFyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChzY3JvbGxC
YXIpLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1Zh
bHVlQ2hhbmdlZCksIHRoaXMpOwogCiAgICAgLyoKICAgICAgKiBhc3NpZ24gYSBzYW5lIGRlZmF1
bHQgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgU2Nyb2xsQmFyLCBvdGhlcndpc2UKICAgICAgKiB3
ZSB3aWxsIGVuZCB1cCB3aXRoIGEgMCB3aWR0aCBzY3JvbGxiYXIuCiAgICAgICovCiAgICAgcmVz
aXplKFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCksCi0gICAg
ICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkpOyAgICAK
LSAgICBnZW9tZXRyeUNoYW5nZWQoKTsKLQotICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3Jv
bGxCYXIpKTsKLSAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChzY3JvbGxCYXIpKTsKKyAg
ICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7IAog
fQogCiBQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKIHsKLSAgICAvKgot
ICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVyc2hpcC4KLSAgICAgKi8K
LSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koaW50ZXJuYWxHdGtXaWRnZXQoKSk7CisgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGludGVybmFsR3RrV2lkZ2V0
KCkpLCAoZ3BvaW50ZXIpUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCwgdGhpcyk7
CiAgICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoaW50ZXJuYWxHdGtXaWRnZXQoKSkpOwogfQog
CkBAIC05MCwxMiArODcsMTkgQEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGQKIAogdm9pZCBQbGF0
Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCiB7IAotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKG1fYWRqdXN0bWVudC0+dmFsdWUgIT0gbV9jdXJyZW50UG9zKSB7Cisg
ICAgICAgIG1fYWRqdXN0bWVudC0+dmFsdWUgPSBtX2N1cnJlbnRQb3M7CisgICAgICAgIGd0a19h
ZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9hZGp1c3RtZW50KTsKKyAgICB9CiB9CiAKIHZvaWQg
UGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX2FkanVzdG1lbnQtPnN0ZXBfaW5jcmVtZW50ID0gbV9saW5lU3Rl
cDsKKyAgICBtX2FkanVzdG1lbnQtPnBhZ2VfaW5jcmVtZW50ID0gbV9wYWdlU3RlcDsKKyAgICBt
X2FkanVzdG1lbnQtPnBhZ2Vfc2l6ZSA9IG1fdmlzaWJsZVNpemU7CisgICAgbV9hZGp1c3RtZW50
LT51cHBlciA9IG1fdG90YWxTaXplOworICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQobV9hZGp1
c3RtZW50KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQpAQCAtMTA0LDMgKzEwOCw3IEBAIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNl
dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBnZW9tZXRyeUNoYW5nZWQoKTsKIH0KIAor
dm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBQ
bGF0Zm9ybVNjcm9sbGJhciogdGhhdCkKK3sKKyAgICB0aGF0LT5zZXRWYWx1ZShndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15799</attachid>
            <date>2007-08-01 16:01:28 -0700</date>
            <delta_ts>2007-08-08 07:45:09 -0700</delta_ts>
            <desc>RenderTheme</desc>
            <filename>gtk-render-theme-changes-r0.patch</filename>
            <type>text/plain</type>
            <size>2424</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAppbmRleCBhZjYwYjViLi42OTU2
YTE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCkBAIC0xNzksMTEg
KzE3OSwxMiBAQCB2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAogYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRDaGVja2JveChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/
Ci0gICAgR3RrV2lkZ2V0ICpjaGVja2JveCA9IGd0a0NoZWNrYm94KCk7CisgICAgR3RrV2lkZ2V0
KiBjaGVja2JveCA9IGd0a0NoZWNrYm94KCk7CisgICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0
LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOwogICAgIGd0a19wYWludF9jaGVjayhj
aGVja2JveC0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAg
ICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwgY2hlY2tib3gsICJjaGVja2J1dHRvbiIsCi0gICAgICAgICAgICAgICAg
ICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIxMSwxMSArMjEyLDEyIEBAIHZv
aWQgUmVuZGVyVGhlbWVHZGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CiBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7IAogICAg
IC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/Ci0gICAgR3RrV2lkZ2V0ICpy
YWRpbyA9IGd0a1JhZGlvQnV0dG9uKCk7CisgICAgR3RrV2lkZ2V0KiByYWRpbyA9IGd0a1JhZGlv
QnV0dG9uKCk7CisgICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChy
ZWN0LmxvY2F0aW9uKCkpOwogICAgIGd0a19wYWludF9vcHRpb24ocmFkaW8tPnN0eWxlLCBpLmNv
bnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0
ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcmFk
aW8sICJyYWRpb2J1dHRvbiIsCi0gICAgICAgICAgICAgICAgICAgICByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICBw
b3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtMjIzLDExICsyMjUsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUdkazo6
cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JgogYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkgCiB7IAog
ICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hvdWxk
IGhvbm9yIHRoZSBzdGF0ZSBhcyB3ZWxsCi0gICAgR3RrV2lkZ2V0ICpidXR0b24gPSBndGtCdXR0
b24oKTsKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbiA9IGd0a0J1dHRvbigpOworICAgIEludFBvaW50
IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICBn
dGtfcGFpbnRfYm94KGJ1dHRvbi0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAg
ICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAg
ICAgICAgICAgICAgICAgICBOVUxMLCBidXR0b24sICJidXR0b24iLAotICAgICAgICAgICAgICAg
ICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>