<?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>14998</bug_id>
          
          <creation_ts>2007-08-17 08:33:24 -0700</creation_ts>
          <short_desc>Full page zooming support</short_desc>
          <delta_ts>2008-04-04 08:13:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>18281</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="George Wright">gwright</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>alp</cc>
    
    <cc>aroben</cc>
    
    <cc>christian</cc>
    
    <cc>cosimoc</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>lars</cc>
    
    <cc>pvanhoof</cc>
    
    <cc>zaheer.mot</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2090</commentid>
    <comment_count>0</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2007-08-17 08:33:24 -0700</bug_when>
    <thetext>I would very much like to see full page zooming support in WebKit, such as the zooming Safari on the iPhone has.

I have started working on investigating how zooming support can be implemented in the GTK API, but it would be better if we could standardise on a method for this to be done. The GraphicsContext has a function scale(FloatSize), but calling that method alone does not result in the required behaviour for zooming - mouse events still think the geometry is as for a scale factor of 1.0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2091</commentid>
    <comment_count>1</comment_count>
      <attachid>16010</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-08-17 08:40:48 -0700</bug_when>
    <thetext>Created attachment 16010
Preliminary zooming support

Preliminary patch submitted as a request for comments. This patch simply updates the expose event in GTK to scale the graphics context and performs coordinate transformations in the mouse/button/etc events to transform to the new scale.

Buttons are not yet scaled, but are placed at the right location on page. This seems to be GTK specific, because if the code in RenderThemeGdk.cpp in method paintButton() is replaced with simply &quot;return true;&quot;, the fallback button rendering is the correct size.

There is a problem with invalidating rectangles in the GDK scrollview. I have narrowed this problem down to the updateContents() method in ScrollViewGdk.cpp.

The problem is how to propagate the scale factor to these classes in a sane and cross-platform way so that we can do coordinate transformations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584</commentid>
    <comment_count>2</comment_count>
      <attachid>16100</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-08-23 13:44:06 -0700</bug_when>
    <thetext>Created attachment 16100
WebKit zooming

An update to the last patch which fixes a scrolling issue such that only a small portion of the page re-renders when scrolled (transformations issue in ScrollView::update()). Widgets now resize according to the scale factor, but radio buttons don&apos;t seem to resize (their size is hardcoded?)

Implemented ChromeClient::scaleFactor() for GTK which returns the scale factor set in pageData. Added GraphicsContext::translateSize() method to the cairo implementation as coordinate transformations for points and distances are different.

There are still issues with invalidating rects when hovering the mouse over widgets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1587</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-08-23 14:02:42 -0700</bug_when>
    <thetext>Thanks for the patches, George!  If you&apos;d like them reviewed (even if it&apos;s just for preliminary feedback), please set the &quot;review?&quot; flag on the patch.

For future reference:  http://webkit.org/coding/contributing.html

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591</commentid>
    <comment_count>4</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2007-08-23 14:09:05 -0700</bug_when>
    <thetext>The patches aren&apos;t intended to go into WebKit yet, hence why I&apos;ve not marked them for review. I&apos;m simply trying to get ideas and suggestions as to the best way to implement this (the patches are very rough round the edges at the moment). Thanks for your support though! </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-08-23 14:52:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The patches aren&apos;t intended to go into WebKit yet, hence why I&apos;ve not marked
&gt; them for review. I&apos;m simply trying to get ideas and suggestions as to the best
&gt; way to implement this (the patches are very rough round the edges at the
&gt; moment). Thanks for your support though! 

That&apos;s one reason to set the &quot;review?&quot; flag--to get ideas and suggestions.  :)

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562</commentid>
    <comment_count>6</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-24 02:06:24 -0700</bug_when>
    <thetext>Some comments on the patch itself:

+    IntSize size(rect.width(), rect.height());
+    size = i.context-&gt;translateSize(size);

=&gt;  IntSize size = i.context-&gt;translateSize(rect.size())

+    // Is this optimal?
+    FrameView* frameView = static_cast&lt;const FrameView*&gt;(this);
+    Page* page = frameView-&gt;frame() ? frameView-&gt;frame()-&gt;page() : 0;
+
+    double scaleFactor = page-&gt;chrome()-&gt;client()-&gt;scaleFactor();

a) double -&gt; float -&gt; double? is that what we want? I think not. Even if I mentioned ChromeCLient::scaleFactor we should not use it here.
b) I wonder why the compiler allows you to do the cast. Probably because this is not const in this method but then remove const from the cast
c) if you cast in ScrollView to FrameView, either add an ASSERT(isFrameView()) or a if whatever is more appropriate
d) You might want to access the PrivateData of the WebKitGtkPage to get the scale factor. You can do so by using the Widget::containingWindow().


+static void transform_coordinates_int(GtkWidget* widget, bool inverted, int *x, int *y)
+static void transform_coordinates_double(GtkWidget* widget, bool inverted, double *x, double *y)

A small violation of the CodingStyle, You place the &apos;*&apos; (asterisk) at the wrong place.


+void webkit_gtk_page_set_scale_factor(WebKitGtkPage* page, double factor)
+{
+    WebKitGtkPagePrivate* pageData = WEBKIT_GTK_PAGE_GET_PRIVATE(page);
+
+    pageData-&gt;scaleFactor = factor;
+    // TODO: redraw page with new scale factor

a {ScrollView,FrameView}::update() should do the trick. It should be enough to use the FrameView of the mainFrame.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560</commentid>
    <comment_count>7</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-24 02:25:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=16100) [edit]
&gt; WebKit zooming
&gt; 
&gt; An update to the last patch which fixes a scrolling issue such that only a
&gt; small portion of the page re-renders when scrolled (transformations issue in
&gt; ScrollView::update()). Widgets now resize according to the scale factor, but
&gt; radio buttons don&apos;t seem to resize (their size is hardcoded?)

Check with a different GtkStyle/Theme, check the size and point before and after the transformation and you might want to take a look at RenderTheme and check if there is a method you might want to reimplement.


&gt; 
&gt; There are still issues with invalidating rects when hovering the mouse over
&gt; widgets.

This is one of the fundamental issues with this scaling implementation. The Render Tree has its own unscaled coordinates and e.g. hovering is done using the HitTest. So there must be something in WebCore/render which is asking the ScrollView/FrameView to repaint in case of hover and we will need to translate that as well. This could be Widget::invalidateRect but this is just a guess.

This means we need to check all Render* &lt;-&gt; {Widget,ScrollView} relations and check if the coordinates get translated properly...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551</commentid>
    <comment_count>8</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2007-08-24 07:06:32 -0700</bug_when>
    <thetext>There seem to be severe performance issues with non-integral scale factors. i.e. - if scaleFactor is set to 1.2, performance is noticeably laggy, and scrolling complex pages (such as BBC news) is so slow it&apos;s unusable.

Scaling down also seems to have trouble, but I&apos;m not sure why. The layout of the entire page is completely broken and half the page doesn&apos;t seem to be rendered.

Does anyone have any suggestions for performance improvements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547</commentid>
    <comment_count>9</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-24 07:29:43 -0700</bug_when>
    <thetext>One nore thing with translateSize. As there will be translateSize+translatePoint what about only translating the rect directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546</commentid>
    <comment_count>10</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-24 07:33:29 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; There seem to be severe performance issues with non-integral scale factors.
&gt; i.e. - if scaleFactor is set to 1.2, performance is noticeably laggy, and
&gt; scrolling complex pages (such as BBC news) is so slow it&apos;s unusable.
&gt; 
&gt; Scaling down also seems to have trouble, but I&apos;m not sure why. The layout of
&gt; the entire page is completely broken and half the page doesn&apos;t seem to be
&gt; rendered.
&gt; 
&gt; Does anyone have any suggestions for performance improvements?

No just a small suggestions on how to identify the offender.

a) tronical (Simon) did implement zooming for konqueror embedded, you might ask him for his approach back then.
b) I think it is important to either identify Gtk+, WebCore or cairo as offender. I would look into callgrind/kcallgrind and if that turns out to be too slow would go to oprofile and LinuxTracingToolkit (LTT) to find out where the time is spend. To be able to replicate your testing you might want to drive scrolling programatically by manipulating the GtkAdjustment that get set on the WebKitGtkPage.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190</commentid>
    <comment_count>11</comment_count>
      <attachid>16163</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-08-30 05:23:18 -0700</bug_when>
    <thetext>Created attachment 16163
Update to zooming code, bugfixes

Update to my zooming code for the GTK port. Widgets now redraw correctly - invalidation works as expected. Changed to bilinear filtering for much better zooming quality.

There are still issues with certain widgets not rendering at the correct size (checkboxes, radio buttons..). These may have to be scaled.

Scrolling performance is still not ideal - this is possibly due to the fact that the GTK port currently re-renders the entire viewport when scrolling which is not optimal. I shall look into implementing double buffering and blitting the contents of the window when scrolling to save on rendering operations.

Scroll bars are currently not placed in the right place when there is a page with multiple frames, and each individual frame is scrollable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868</commentid>
    <comment_count>12</comment_count>
      <attachid>16208</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-06 09:17:17 -0700</bug_when>
    <thetext>Created attachment 16208
More bugfixes, some code cleanup

Scrolling should now work in all cases and scroll bars placed correctly, even in pages with multiple frames. Text kerning is fixed, but using a workaround for a possible cairo bug. Hinting can not be disabled completely as this introduces a regression which causes some pages to not render at all.

Scaling now uses bilinear filtering instead of nearest neighbour filtering as it looks a lot better.

Added a ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840</commentid>
    <comment_count>13</comment_count>
      <attachid>16216</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-07 07:08:38 -0700</bug_when>
    <thetext>Created attachment 16216
General clean ups, bug fixed for resize events

I am now casting to an int wherever I transform a size by multiplying it with a scale factor.

Bug fixed which didn&apos;t resize the window properly when webkit_gtk_page_set_scale_factor was called, thus resulting in a resized page in a viewport that was the wrong size.

Some artifacting seen due to antialiasing so increased the expose event handler&apos;s cliprect to be 2 pixels larger all round.

Added an API method to get the current scale factor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842</commentid>
    <comment_count>14</comment_count>
      <attachid>16217</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-07 07:10:47 -0700</bug_when>
    <thetext>Created attachment 16217
Add zoom functionality to GdkLauncher for testing purposes

A small patch to add zoom in/zoom out menu entries to GdkLauncher which change the scale factor by 120% each time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836</commentid>
    <comment_count>15</comment_count>
      <attachid>16218</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-07 09:41:00 -0700</bug_when>
    <thetext>Created attachment 16218
Small changes to conform to coding style, general tidying up

Changed C-style casts to C++ static_casts. Added a link to a Cairo ML post about the font rendering issue. Replaced translatePoint with translateRect and update the widget rendering accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833</commentid>
    <comment_count>16</comment_count>
      <attachid>16217</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-09-07 12:52:18 -0700</bug_when>
    <thetext>Comment on attachment 16217
Add zoom functionality to GdkLauncher for testing purposes

style issues:
+    webkit_gtk_page_set_scale_factor(gPage, scaleFactor * 1.2);
..
+    webkit_gtk_page_set_scale_factor(gPage, scaleFactor / 1.2);

However i&apos;d prefer a integer representing the scale level, which you then modified, eg:
+static void menuMainZoomInCallback(gpointer)
+{
+    if (scaleFactor &lt; 10)
+        scaleFactor++;
+    webkit_gtk_page_set_scale_factor(gPage, scaleFactor * whatever);
+}
+
+static void menuMainZoomOutCallback(gpointer)
+{
+    if (scaleFactor &gt; 0)
+        scaleFactor--;
+    webkit_gtk_page_set_scale_factor(gPage, scaleFactor * whatever);
+}

Which would mean that you wouldn&apos;t get cumulative rounding error over time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834</commentid>
    <comment_count>17</comment_count>
      <attachid>16218</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-09-07 13:08:31 -0700</bug_when>
    <thetext>Comment on attachment 16218
Small changes to conform to coding style, general tidying up

Scaling the render region outside of the engine itself can cause also of badness, especially with hit testing, region invalidation and what not.

I think you&apos;d benefit from matching the WebView API from mac.

– canMakeTextLarger  
– makeTextLarger:  
– canMakeTextSmaller  
– makeTextSmaller:

Which would be on gtk WebView equivalent -- the Mac impl is kind of messy, look at the windows ones as they do much less icky objc-fu.

makeTextSmaller/Larger are designed to allow buttons to be hooked up directly -- i think that would mean you want them to be &quot;slots&quot;/&quot;sockets&quot; or whatever the gtk name for something like that is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819</commentid>
    <comment_count>18</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-07 14:57:38 -0700</bug_when>
    <thetext>The text resizing corresponds to the setZoomLevel and zoomLevel functions in the Frame class as far as I can tell, which we are not implementing here. As for the hit tests, I&apos;ve accounted for all of those in this GTK implementation but I can see where your concerns are as it&apos;s not done in WebCore and so other ports won&apos;t benefit from this.

I&apos;ll have a look at moving the code from WebKit/GTK into WebCore. There&apos;s already a scale() function in the GraphicsContext class so I think that&apos;s probably the best way to propagate the scale factor around WebCore, and then add the code to perform the coordinate transformations directly in ScrollView/Render*/etc. Now that I basically know which hit tests are required this hopefully won&apos;t take long, then with any luck the only WebKit change required will be to add an API method which calls GraphicsContext::scale().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654</commentid>
    <comment_count>19</comment_count>
      <attachid>16259</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-11 09:55:19 -0700</bug_when>
    <thetext>Created attachment 16259
Moved implementation from WebKit to WebCore

Now rounding to scaled pixels for cairo clipping to improve performance. Coordinate transformations moved from WebKit to WebCore and implemented generically in EventHandler so that all ports can benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260</commentid>
    <comment_count>20</comment_count>
      <attachid>16332</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-20 05:52:37 -0700</bug_when>
    <thetext>Created attachment 16332
Moved scaleFactor methods into Page

This patch moves the scaleFactor methods from ScrollView into Page. This is because the scale factor is common to all frames (and hence ScrollView objects) in a Page, and setting the scale factor in ScrollView does not make it easy to recurse changes into child ScrollViews in pages with multiple frames, whereas keeping the scale factor in Page makes more sense as it can be accessed by all ScrollView objects on that page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56999</commentid>
    <comment_count>21</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-09-25 09:44:57 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=16332) [edit]
&gt; Moved scaleFactor methods into Page

Page::scaleFactor() const { ... } would probably be better (add a const). Any why do you make ScrollView::scaleFactor port specific? The Gtk+ implementation looks pretty generic to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57149</commentid>
    <comment_count>22</comment_count>
      <attachid>16412</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-27 06:42:00 -0700</bug_when>
    <thetext>Created attachment 16412
Changed names from GDK to GTK, more code cleanups

This is a patch to reflect the recent renaming of the GTK port from GDK to GTK throughout.

The platform-specific methods for scaleFactor have been removed and this shouldn&apos;t break any other builds any more. 

I have reverted back to CAIRO_FILTER_NEAREST as there is ugly artifacting at the edge of tiled images with bilinear filtering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57150</commentid>
    <comment_count>23</comment_count>
      <attachid>16413</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-09-27 07:07:09 -0700</bug_when>
    <thetext>Created attachment 16413
Changed Page::scaleFactor to const, fixed broken email address

Page::scaleFactor is now const. Fixed broken email address field in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57199</commentid>
    <comment_count>24</comment_count>
      <attachid>16413</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-27 15:31:18 -0700</bug_when>
    <thetext>Comment on attachment 16413
Changed Page::scaleFactor to const, fixed broken email address

I think the naming of variables is a little weak. For example &quot;event&quot; is the event without scaling applied, and &quot;mouseEvent&quot; is the event with scaling applied. The names should make more clearly what&apos;s going on. In particular, what&apos;s happening is that we&apos;re converting the x/y coordinates from viewport coordinates to scaled viewport coordinates. But I also think it would be more logical to do the scaling when converting from viewport coordinates to document coordinates.

I also think it&apos;s a little weak to make an entire copy of the event in cases like this -- since the only thing affected is the x/y coordinates. This will cause a disconnect between the original event object and the new one; for example the scaled mouse event won&apos;t have the correct event number (on Macintosh). We should come up with a better design that separates the scaled X/Y from the rest of the event or allows you to change the X/Y in an event or something along those lines.

It&apos;s bad to override a non-virtual function FrameView::resize -- for one thing there are two overloads of resize and one takes an IntSize. For another it&apos;s almost never a good idea to override a non-virtual function. I&apos;d like to see a clearer set of rules about which parameters are which kinds of coordinates.

The Page::setScaleFactor function should do more than just set the new scale factor value. Like Frame::setZoomFactor (that function has a terrible name and place!) it should trigger the appropriate layout and painting.

The patch seems to have some Cairo things not directly related to the arbitrary zooming; lets land those separately.

High level code should almost never be explicitly multiplying by the scale factor. The correct primitives are to change coordinates from document space to viewport space. So PlatformScrollbar::geometryChanged should not need to multiply by the scale factor. I think contentsToWindow might be the function we want to modify, or something along those lines.

One problem I see is that on Mac we have arbitrary transforms on WebView, but currently they don&apos;t work properly; if I was doing a patch, I&apos;d do the cross-platform code that handles things like mouse events in a way that could work for that as well. The code should be based on the concept of an arbitrary transform even if what&apos;s stored is simply a scale factor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57770</commentid>
    <comment_count>25</comment_count>
      <attachid>16529</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-10-04 03:19:34 -0700</bug_when>
    <thetext>Created attachment 16529
Update to reflect WebKitGtk -&gt; WebKit name change

Just a quick update to rename all calls to the WebKit GTK public API to the new names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57928</commentid>
    <comment_count>26</comment_count>
      <attachid>16529</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-10-06 02:40:19 -0700</bug_when>
    <thetext>Comment on attachment 16529
Update to reflect WebKitGtk -&gt; WebKit name change

George forgot to ask for review...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58033</commentid>
    <comment_count>27</comment_count>
      <attachid>16529</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-10-07 16:15:04 -0700</bug_when>
    <thetext>Comment on attachment 16529
Update to reflect WebKitGtk -&gt; WebKit name change

-        IntPoint translatePoint(const IntPoint&amp;) const;
+        IntRect translateRect(const IntRect&amp;) const;

I don&apos;t think translateRect is a good name for this method, since it both translates and scales. A better name might be transformRect.

+    WebKitPage* page = WEBKIT_PAGE(containingWindow());
+    WebKitPagePrivate* pageData = WEBKIT_PAGE_GET_PRIVATE(page);

This code (in ScrollViewGtk.cpp) is unused. We also should not be using WebKit types within WebCore.

+    double scaleFactor = frameView-&gt;frame()-&gt;page()-&gt;scaleFactor();

There are a number of places where the result of Frame::page() is being used without a null-check. This is in general an unsafe thing to do.

r- given the above and Darin&apos;s comments. I think Darin gave some really good suggestions about how to improve the design of this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58086</commentid>
    <comment_count>28</comment_count>
      <attachid>16587</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-10-08 04:12:47 -0700</bug_when>
    <thetext>Created attachment 16587
Change events instead of duplicating them, various other cleanups

Added a function Platform{Mouse,Wheel}Event::scale(double) which transforms its X/Y coordinates to accommodate the scale factor.

Renamed m_{width,height} to {width,height}.

Unsure as to how to proceed re. Darin&apos;s comments about overloading Widget::resize; does anyone have any comments on how to do this sanely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58113</commentid>
    <comment_count>29</comment_count>
      <attachid>16587</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-10-08 11:42:10 -0700</bug_when>
    <thetext>Comment on attachment 16587
Change events instead of duplicating them, various other cleanups

+    const_cast&lt;PlatformMouseEvent&amp;&gt;(event).scale(scaleFactor());

This feels ugly to me. If it&apos;s not possible for the scale factor to change while an event is being handled (is it?), we could generate the scaled position in the Platform*Event constructors. If it turns out that most users of the Platform*Event types really want to be dealing with the scaled coordinates, we could even make Platform*Event::pos() return the scaled position, and come up with a new method to return the unscaled one (I like Darin&apos;s idea of coming up with better names for these than just [un]scaled).

I think you should revert the variable renames in EventHandler.cpp to make the diff smaller.

I also agree with Darin that the miscellaneous Cairo changes should be split into a separate bug/patch.

Have you thought about Darin&apos;s comments re: not multiplying by the scale factor in high-level code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58218</commentid>
    <comment_count>30</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2007-10-10 02:58:24 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 16587 [edit])
&gt; +    const_cast&lt;PlatformMouseEvent&amp;&gt;(event).scale(scaleFactor());
&gt; 
&gt; This feels ugly to me. If it&apos;s not possible for the scale factor to change
&gt; while an event is being handled (is it?), we could generate the scaled position
&gt; in the Platform*Event constructors. If it turns out that most users of the
&gt; Platform*Event types really want to be dealing with the scaled coordinates, we
&gt; could even make Platform*Event::pos() return the scaled position, and come up
&gt; with a new method to return the unscaled one (I like Darin&apos;s idea of coming up
&gt; with better names for these than just [un]scaled).
&gt; 
&gt; I think you should revert the variable renames in EventHandler.cpp to make the
&gt; diff smaller.

The problem with that is that the Platform*Event constructors don&apos;t have access to the Page object and so can&apos;t get the current scale factor, unless I&apos;m missing something fantastically obvious.

&gt; I also agree with Darin that the miscellaneous Cairo changes should be split
&gt; into a separate bug/patch.

To be honest, those Cairo changes are more of a hack than anything; ideally we&apos;d want to use EXTEND_PAD but that&apos;s not currently implemented in Cairo as far as I know.

&gt; Have you thought about Darin&apos;s comments re: not multiplying by the scale factor
&gt; in high-level code?

Yes - I&apos;ll take a look at that when I have some time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58225</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-10-10 08:09:24 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; (From update of attachment 16587 [edit] [edit])
&gt; &gt; +    const_cast&lt;PlatformMouseEvent&amp;&gt;(event).scale(scaleFactor());
&gt; &gt; 
&gt; &gt; This feels ugly to me. If it&apos;s not possible for the scale factor to change
&gt; &gt; while an event is being handled (is it?), we could generate the scaled position
&gt; &gt; in the Platform*Event constructors. If it turns out that most users of the
&gt; &gt; Platform*Event types really want to be dealing with the scaled coordinates, we
&gt; &gt; could even make Platform*Event::pos() return the scaled position, and come up
&gt; &gt; with a new method to return the unscaled one (I like Darin&apos;s idea of coming up
&gt; &gt; with better names for these than just [un]scaled).
&gt; 
&gt; The problem with that is that the Platform*Event constructors don&apos;t have access
&gt; to the Page object and so can&apos;t get the current scale factor, unless I&apos;m
&gt; missing something fantastically obvious.

Couldn&apos;t you pass in the scale factor as an argument to the constructors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59119</commentid>
    <comment_count>32</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2007-10-22 03:36:12 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Couldn&apos;t you pass in the scale factor as an argument to the constructors?

The problem with that is that the events are generated in WebKit (specifically webkitgtkpage.cpp in the case of the GTK port), and I feel this code should be in WebCore rather than WebKit (and the current implementation is port-independent).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59120</commentid>
    <comment_count>33</comment_count>
      <attachid>16790</attachid>
    <who name="George Wright">gwright</who>
    <bug_when>2007-10-22 03:42:28 -0700</bug_when>
    <thetext>Created attachment 16790
Code cleanup

Just a quick update to remove all the event renaming in EventHandler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59591</commentid>
    <comment_count>34</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-26 19:38:26 -0700</bug_when>
    <thetext>So, this approach is partly obsoleted by the new CSS transform support, though it will need more work to support transformed widgets.

[03:35] &lt;dhyatt&gt; alp: that you could implement zooming by just scaling the &lt;html&gt; around an origin of 0,0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59616</commentid>
    <comment_count>35</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2007-10-27 03:55:54 -0700</bug_when>
    <thetext>I think that conceptually the two implementations are different. The transformations functionality is to allow the web designer to implement transformations for parts of the webpage, whereas the intention of my scaling support is to allow it to be more accessible to people; that is, to use webkit on high DPI screens or to scale the page to make it easier to read.

Thus, I think there should still be an API for setting the page scale factor, whether it uses the same code as the transformations code or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60730</commentid>
    <comment_count>36</comment_count>
      <attachid>16790</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-08 21:54:14 -0800</bug_when>
    <thetext>Comment on attachment 16790
Code cleanup

Hey, am going to r- this to clear it from the request queue since I think we&apos;ve discussed the new approach involving CSS transforms. George, I think there is still some mileage in this patch but we should move forward together on a simpler solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62777</commentid>
    <comment_count>37</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-30 04:31:37 -0800</bug_when>
    <thetext>Simple (untested) way one might do this using CSS, suggestions for a way to achieve this on WebKitPage rather than WebKitFrame or without modifying the DOM would be welcome):

void webkit_frame_set_scale(WebKitFrame* frame, double scale)
{
    g_return_if_fail(WEBKIT_IS_FRAME(frame));

    WebKitFramePrivate* frameData = WEBKIT_FRAME_GET_PRIVATE(frame);
    Frame* wframe = frameData-&gt;frame;
    Document* document = wframe-&gt;document();
    HTMLElement* root = reinterpret_cast&lt;HTMLElement*&gt;(document-&gt;documentElement());
    RenderObject* renderer = root-&gt;renderer();
    RenderStyle* style = renderer-&gt;style();
    TransformOperations ops;
    ScaleTransformOperation* scaleOp = new ScaleTransformOperation(scale, scale);
    ops.append(scaleOp);
    style-&gt;setTransform(ops);
    renderer-&gt;setStyle(style);
}
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68227</commentid>
    <comment_count>38</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-01-25 12:03:14 -0800</bug_when>
    <thetext>The CSS approach is good.  Here are some comments:

(1) You basically want a Setting (like text zoom but, e.g., pageZoom). 
(2) The Document reads the setting and sets a scale transform on the RenderView&apos;s style.  It only needs to do this for the *outermost* document (so only if ownerElement() is 0).
(3) In order to be placed at the upper left, you have to setTransformOrigin to (0,0).
(4) Widgets won&apos;t work right initially, but that&apos;s ok.  An initial patch doesn&apos;t need to deal with widgets (and we have a bug filed on widgets not working with transforms already).
(5) To make the scrollbars adapt properly you need to modify lowest/rightmost/leftmostPosition.  However they only have to adapt if they aren&apos;t also being transformed so be aware of that.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74377</commentid>
    <comment_count>39</comment_count>
      <attachid>19878</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-03-18 19:32:07 -0700</bug_when>
    <thetext>Created attachment 19878
New approach to full page zoom</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74745</commentid>
    <comment_count>40</comment_count>
      <attachid>19878</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-03-21 22:18:36 -0700</bug_when>
    <thetext>Comment on attachment 19878
New approach to full page zoom

olliej reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74746</commentid>
    <comment_count>41</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-03-21 22:18:47 -0700</bug_when>
    <thetext>Fixed.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16010</attachid>
            <date>2007-08-17 08:40:48 -0700</date>
            <delta_ts>2007-08-23 13:44:06 -0700</delta_ts>
            <desc>Preliminary zooming support</desc>
            <filename>zooming.patch</filename>
            <type>text/plain</type>
            <size>5130</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IEFwaS93ZWJraXRndGtwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBcGkvd2Via2l0Z3Rr
cGFnZS5jcHAJKHJldmlzaW9uIDI1MTI0KQorKysgQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MywxMSArNzMsMTUgQEAgR19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdl
LCB3ZWJraXRfZ3RrXwogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX2V4cG9zZV9l
dmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQogeworICAgIFdl
YktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFU
RShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSk7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRG
cmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKICAgICBHZGtSZWN0YW5n
bGUgY2xpcDsKICAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlw
KTsKICAgICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdyk7CiAg
ICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7CisgICAgY3R4LnNjYWxlKEZsb2F0U2l6ZShwYWdl
RGF0YS0+c2NhbGVGYWN0b3IsIHBhZ2VEYXRhLT5zY2FsZUZhY3RvcikpOworCiAgICAgY3R4LnNl
dEdka0V4cG9zZUV2ZW50KGV2ZW50KTsKICAgICBpZiAoZnJhbWUtPnJlbmRlcmVyKCkpIHsKICAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKTsKQEAgLTg5LDYg
KzkzLDM0IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfZXhwb3NlX2UKICAgICBy
ZXR1cm4gRkFMU0U7CiB9CiAKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybV9jb29yZGluYXRlc19kb3Vi
bGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGJvb2wgaW52ZXJ0ZWQsIGRvdWJsZSAqeCwgZG91YmxlICp5
KQoreworICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2UgPSBXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KTsK
KyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VU
X1BSSVZBVEUocGFnZSk7CisKKyAgICBkb3VibGUgZmFjdG9yID0gcGFnZURhdGEtPnNjYWxlRmFj
dG9yOworCisgICAgaWYgKGludmVydGVkKQorICAgICAgICBmYWN0b3IgPSAxL2ZhY3RvcjsKKwor
ICAgICp4ICo9IGZhY3RvcjsKKyAgICAqeSAqPSBmYWN0b3I7CisKKworfQorCitzdGF0aWMgdm9p
ZCB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNfaW50KEd0a1dpZGdldCogd2lkZ2V0LCBib29sIGludmVy
dGVkLCBpbnQgKngsIGludCAqeSkKK3sKKyAgICBkb3VibGUgZHgsIGR5OworICAgIGR4ID0gKGRv
dWJsZSkqeDsKKyAgICBkeSA9IChkb3VibGUpKnk7CisKKyAgICB0cmFuc2Zvcm1fY29vcmRpbmF0
ZXNfZG91YmxlKHdpZGdldCwgaW52ZXJ0ZWQsICZkeCwgJmR5KTsKKworICAgICp4ID0gKGludClk
eDsKKyAgICAqeSA9IChpbnQpZHk7Cit9CisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3Bh
Z2Vfa2V5X2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3
aWRnZXQpKSk7CkBAIC0xMDAsNiArMTMyLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtf
cGFnZV9idXR0b25fZQogewogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFn
ZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOwogCisgICAgdHJhbnNmb3JtX2Nvb3JkaW5hdGVz
X2RvdWJsZSh3aWRnZXQsIHRydWUsICZldmVudC0+eCwgJmV2ZW50LT55KTsKKwogICAgIGlmIChl
dmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpCiAgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50
KSk7CiAgICAgZWxzZQpAQCAtMTExLDYgKzE0NSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
Z3RrX3BhZ2VfYnV0dG9uX2UKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfbW90aW9u
X2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vdGlvbiogZXZlbnQpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRn
ZXQpKSk7CisKKyAgICB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNfZG91YmxlKHdpZGdldCwgdHJ1ZSwg
JmV2ZW50LT54LCAmZXZlbnQtPnkpOworCiAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3Vz
ZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwogICAgIHJldHVybiBGQUxTRTsKIH0K
QEAgLTExOSw2ICsxNTYsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX3Njcm9s
bF9lCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9H
VEtfUEFHRSh3aWRnZXQpKSk7CiAKKyAgICB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNfZG91YmxlKHdp
ZGdldCwgdHJ1ZSwgJmV2ZW50LT54LCAmZXZlbnQtPnkpOworCiAgICAgUGxhdGZvcm1XaGVlbEV2
ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwogICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
V2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKICAgICByZXR1cm4gRkFMU0U7CkBAIC0xMjksNiArMTY4
LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3NpemVfYWxsb2NhdAogICAgIEdUS19X
SURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUo
d2lkZ2V0LGFsbG9jYXRpb24pOwogCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZy
b21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICB0cmFuc2Zvcm1fY29vcmRp
bmF0ZXNfaW50KHdpZGdldCwgdHJ1ZSwgJmFsbG9jYXRpb24tPndpZHRoLCAmYWxsb2NhdGlvbi0+
aGVpZ2h0KTsKKwogICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0aCwg
YWxsb2NhdGlvbi0+aGVpZ2h0KTsKICAgICBmcmFtZS0+Zm9yY2VMYXlvdXQoKTsKICAgICBmcmFt
ZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwpAQCAtNDIxLDYgKzQ2Myw3IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF9ndGtfcGFnZV9pbml0KFdlYktpdEcKIHsKICAgICBXZWJLaXRHdGtQYWdlUHJp
dmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19Q
QUdFKHBhZ2UpKTsKICAgICBwYWdlRGF0YS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBXZWJLaXQ6OkNo
cm9tZUNsaWVudChwYWdlKSwgbmV3IFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQsIG5ldyBXZWJL
aXQ6OkVkaXRvckNsaWVudChwYWdlKSwgbmV3IFdlYktpdDo6RHJhZ0NsaWVudCwgbmV3IFdlYktp
dDo6SW5zcGVjdG9yQ2xpZW50KTsKKyAgICBwYWdlRGF0YS0+c2NhbGVGYWN0b3IgPSAxLjU7CiAK
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlRGF0YS0+cGFnZS0+c2V0dGluZ3MoKTsKICAg
ICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwpAQCAtNTI4LDYg
KzU3MSwxMyBAQCB2b2lkIHdlYmtpdF9ndGtfcGFnZV9zdG9wX2xvYWRpbmcoV2ViS2l0CiAgICAg
ICAgIAogfQogCit2b2lkIHdlYmtpdF9ndGtfcGFnZV9zZXRfc2NhbGVfZmFjdG9yIChXZWJLaXRH
dGtQYWdlKiBwYWdlLCBkb3VibGUgZmFjdG9yKQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRl
KiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKworICAgIHBh
Z2VEYXRhLT5zY2FsZUZhY3RvciA9IGZhY3RvcjsKK30KKwogV2ViS2l0R3RrRnJhbWUqIHdlYmtp
dF9ndGtfcGFnZV9nZXRfbWFpbl9mcmFtZShXZWJLaXRHdGtQYWdlKiBwYWdlKQogewogICAgIFdl
YktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFU
RShwYWdlKTsKSW5kZXg6IEFwaS93ZWJraXRndGtwYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQXBpL3dl
YmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjUxMjQpCisrKyBBcGkvd2Via2l0Z3RrcGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDkgQEAgd2Via2l0X2d0a19wYWdlX2xvYWRfc3Ry
aW5nIChXZWJLaXRHdGtQYQogV0VCS0lUX0dUS19BUEkgdm9pZAogd2Via2l0X2d0a19wYWdlX2xv
YWRfaHRtbF9zdHJpbmcgKFdlYktpdEd0a1BhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiBjb250ZW50
LCBjb25zdCBnY2hhciogYmFzZV91cmwpOwogCitXRUJLSVRfR1RLX0FQSSB2b2lkCit3ZWJraXRf
Z3RrX3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0R3RrUGFnZSogcGFnZSwgZG91YmxlIGZh
Y3Rvcik7CisKIFdFQktJVF9HVEtfQVBJIFdlYktpdEd0a0ZyYW1lKgogd2Via2l0X2d0a19wYWdl
X2dldF9tYWluX2ZyYW1lIChXZWJLaXRHdGtQYWdlKiBwYWdlKTsKIApJbmRleDogQXBpL3dlYmtp
dGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCShyZXZp
c2lvbiAyNTEyNCkKKysrIEFwaS93ZWJraXRndGtwcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDYgKzcwLDggQEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdXNl
ckFnZW50OwogCiAgICAgICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj4gY2hpbGRyZW47CisKKyAgICAg
ICAgZG91YmxlIHNjYWxlRmFjdG9yOyAKICAgICB9OwogICAgIAogICAgICNkZWZpbmUgV0VCS0lU
X0dUS19GUkFNRV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUoKG9iaiksIFdFQktJVF9HVEtfVFlQRV9GUkFNRSwgV2ViS2l0R3RrRnJhbWVQcml2YXRlKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16100</attachid>
            <date>2007-08-23 13:44:06 -0700</date>
            <delta_ts>2007-08-30 05:23:18 -0700</delta_ts>
            <desc>WebKit zooming</desc>
            <filename>webkit-zooming.patch</filename>
            <type>text/plain</type>
            <size>10185</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI1
MjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODEsMTAgKzE4MSwxMyBAQCBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludENo
ZWNrYm94KFJlbmRlCiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8K
ICAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKICAgICBJbnRQb2ludCBw
b3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50
U2l6ZSBzaXplKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgc2l6ZSA9IGkuY29u
dGV4dC0+dHJhbnNsYXRlU2l6ZShzaXplKTsKKwogICAgIGd0a19wYWludF9jaGVjayhjaGVja2Jv
eC0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAgICAgICAg
ZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAgICAg
ICAgTlVMTCwgY2hlY2tib3gsICJjaGVja2J1dHRvbiIsCi0gICAgICAgICAgICAgICAgICAgIHBv
cy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMTQsMTAgKzIxNywxMiBAQCBib29sIFJlbmRl
clRoZW1lR2RrOjpwYWludFJhZGlvKFJlbmRlck9iCiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSBy
aWdodCB0aGluZyB0byBkbz8KICAgICBHdGtXaWRnZXQqIHJhZGlvID0gZ3RrUmFkaW9CdXR0b24o
KTsKICAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9j
YXRpb24oKSk7CisgICAgSW50U2l6ZSBzaXplKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisgICAgc2l6ZSA9IGkuY29udGV4dC0+dHJhbnNsYXRlU2l6ZShzaXplKTsKICAgICBndGtfcGFp
bnRfb3B0aW9uKHJhZGlvLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAg
ICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwsIHJhZGlvLCAicmFkaW9idXR0b24iLAotICAgICAgICAg
ICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjcsMTAgKzIzMiwx
MiBAQCBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbihSZW5kZXJPCiAgICAgLy8gRklY
TUU6IHNob3VsZCB1c2UgdGhlbWUtYXdhcmUgZHJhd2luZy4gVGhpcyBzaG91bGQgaG9ub3IgdGhl
IHN0YXRlIGFzIHdlbGwKICAgICBHdGtXaWRnZXQqIGJ1dHRvbiA9IGd0a0J1dHRvbigpOwogICAg
IEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigp
KTsKKyAgICBJbnRTaXplIHNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBz
aXplID0gaS5jb250ZXh0LT50cmFuc2xhdGVTaXplKHNpemUpOwogICAgIGd0a19wYWludF9ib3go
YnV0dG9uLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAg
ICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAg
ICAgIE5VTEwsIGJ1dHRvbiwgImJ1dHRvbiIsCi0gICAgICAgICAgICAgICAgICBwb3MueCgpLCBw
b3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAg
cG9zLngoKSwgcG9zLnkoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3Bw
CShyZXZpc2lvbiAyNTIwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1T
Y3JvbGxCYXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
LQorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNs
dWRlIDxndGsvZ3RrLmg+CiAKQEAgLTMxNCw3ICszMTQsMTMgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1
cGRhdGUoKQogewogICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOwogCi0gICAgR2RrUmVj
dGFuZ2xlIHJlY3QgPSB7IDAsIDAsIG1fZGF0YS0+Y29udGVudHNTaXplLndpZHRoKCksIG1fZGF0
YS0+Y29udGVudHNTaXplLmhlaWdodCgpIH07CisgICAgLy8gSXMgdGhpcyBvcHRpbWFsPworICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhp
cyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpIDogMDsKKworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IHBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+c2NhbGVGYWN0b3IoKTsKKworICAgIEdka1JlY3RhbmdsZSByZWN0ID0g
eyAwLCAwLCAgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSpzY2FsZUZhY3RvciwgIG1fZGF0
YS0+Y29udGVudHNTaXplLmhlaWdodCgpKnNjYWxlRmFjdG9yIH07CiAgICAgZ2RrX3dpbmRvd19p
bnZhbGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3csICZy
ZWN0LCB0cnVlKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCShyZXZpc2lvbiAyNTIwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw2ICsyMTMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNv
bnN0OwogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZlbnQoKSBjb25zdDsKICAg
ICAgICAgSW50UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAg
ICAgICAgSW50U2l6ZSB0cmFuc2xhdGVTaXplKGNvbnN0IEludFNpemUmKSBjb25zdDsKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNTIwNCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjMsNiArODIzLDE5IEBAIEludFBvaW50IEdyYXBoaWNz
Q29udGV4dDo6dHJhbnNsYXRlUG9pbnQKICAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50
KCZ0bSwgJngsICZ5KTsKICAgICByZXR1cm4gSW50UG9pbnQoeCwgeSk7CiB9CisKK0ludFNpemUg
R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0
Cit7CisgICAgY2Fpcm9fbWF0cml4X3QgdG07CisgICAgY2Fpcm9fZ2V0X21hdHJpeChtX2RhdGEt
PmNyLCAmdG0pOworCisgICAgZG91YmxlIHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGRvdWJs
ZSBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9k
aXN0YW5jZSgmdG0sICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcmV0dXJuIEludFNpemUod2lkdGgs
IGhlaWdodCk7Cit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmNwcAkocmV2aXNpb24gMjUyMDQpCisrKyBXZWJLaXQvZ3RrL0Fw
aS93ZWJraXRndGtwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTQgKzcxLDQ0IEBAIHN0
YXRpYyBndWludCB3ZWJraXRfZ3RrX3BhZ2Vfc2lnbmFsc1tMQVMKIAogR19ERUZJTkVfVFlQRShX
ZWJLaXRHdGtQYWdlLCB3ZWJraXRfZ3RrX3BhZ2UsIEdUS19UWVBFX0NPTlRBSU5FUikKIAorc3Rh
dGljIHZvaWQgdHJhbnNmb3JtX2Nvb3JkaW5hdGVzX2RvdWJsZShHdGtXaWRnZXQqIHdpZGdldCwg
Ym9vbCBpbnZlcnRlZCwgZG91YmxlICp4LCBkb3VibGUgKnkpCit7CisgICAgV2ViS2l0R3RrUGFn
ZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpOworICAgIFdlYktpdEd0a1BhZ2VQcml2
YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKworICAg
IGRvdWJsZSBmYWN0b3IgPSBwYWdlRGF0YS0+c2NhbGVGYWN0b3I7CisKKyAgICBpZiAoaW52ZXJ0
ZWQpCisgICAgICAgIGZhY3RvciA9IDEvZmFjdG9yOworCisgICAgKnggKj0gZmFjdG9yOworICAg
ICp5ICo9IGZhY3RvcjsKK30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtX2Nvb3JkaW5hdGVzX2lu
dChHdGtXaWRnZXQqIHdpZGdldCwgYm9vbCBpbnZlcnRlZCwgaW50ICp4LCBpbnQgKnkpCit7Cisg
ICAgZG91YmxlIGR4LCBkeTsKKyAgICBkeCA9IChkb3VibGUpKng7CisgICAgZHkgPSAoZG91Ymxl
KSp5OworCisgICAgdHJhbnNmb3JtX2Nvb3JkaW5hdGVzX2RvdWJsZSh3aWRnZXQsIGludmVydGVk
LCAmZHgsICZkeSk7CisKKyAgICAqeCA9IChpbnQpZHg7CisgICAgKnkgPSAoaW50KWR5OworfQor
CiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX2V4cG9zZV9ldmVudChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQogewogICAgIEZyYW1lKiBmcmFtZSA9IGNv
cmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOworICAgIFdlYktp
dEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShX
RUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSk7CisKICAgICBHZGtSZWN0YW5nbGUgY2xpcDsKICAgICBn
ZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwKTsKICAgICBjYWlyb190
KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdyk7CiAgICAgR3JhcGhpY3NDb250
ZXh0IGN0eChjcik7CiAgICAgY3R4LnNldEdka0V4cG9zZUV2ZW50KGV2ZW50KTsKKyAgICBjdHgu
c2NhbGUoRmxvYXRTaXplKHBhZ2VEYXRhLT5zY2FsZUZhY3RvciwgcGFnZURhdGEtPnNjYWxlRmFj
dG9yKSk7CisKICAgICBpZiAoZnJhbWUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKTsKICAgICAgICAgSW50UmVjdCByZWN0KGNs
aXAueCwgY2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCk7CkBAIC0xMDAsNiArMTMwLDgg
QEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9idXR0b25fZQogewogICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkp
OwogCisgICAgdHJhbnNmb3JtX2Nvb3JkaW5hdGVzX2RvdWJsZSh3aWRnZXQsIHRydWUsICZldmVu
dC0+eCwgJmV2ZW50LT55KTsKKwogICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JF
TEVBU0UpCiAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNl
RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CiAgICAgZWxzZQpAQCAtMTExLDYgKzE0
Myw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2UKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfbW90aW9uX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtFdmVudE1vdGlvbiogZXZlbnQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFt
ZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICB0cmFuc2Zvcm1fY29v
cmRpbmF0ZXNfZG91YmxlKHdpZGdldCwgdHJ1ZSwgJmV2ZW50LT54LCAmZXZlbnQtPnkpOworCiAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChl
dmVudCkpOwogICAgIHJldHVybiBGQUxTRTsKIH0KQEAgLTExOSw2ICsxNTQsOCBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX3Njcm9sbF9lCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
Y29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CiAKKyAgICB0
cmFuc2Zvcm1fY29vcmRpbmF0ZXNfZG91YmxlKHdpZGdldCwgdHJ1ZSwgJmV2ZW50LT54LCAmZXZl
bnQtPnkpOworCiAgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwogICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKICAg
ICByZXR1cm4gRkFMU0U7CkBAIC0xMjgsNiArMTY1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0
a19wYWdlX3NpemVfYWxsb2NhdAogewogICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X2d0a19w
YWdlX3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUod2lkZ2V0LGFsbG9jYXRpb24pOwogCisg
ICAgdHJhbnNmb3JtX2Nvb3JkaW5hdGVzX2ludCh3aWRnZXQsIHRydWUsICZhbGxvY2F0aW9uLT53
aWR0aCwgJmFsbG9jYXRpb24tPmhlaWdodCk7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRG
cmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CiAgICAgZnJhbWUtPnZpZXco
KS0+cmVzaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOwogICAgIGZy
YW1lLT5mb3JjZUxheW91dCgpOwpAQCAtNDIxLDYgKzQ1OSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9ndGtfcGFnZV9pbml0KFdlYktpdEcKIHsKICAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFn
ZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2Up
KTsKICAgICBwYWdlRGF0YS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBXZWJLaXQ6OkNocm9tZUNsaWVu
dChwYWdlKSwgbmV3IFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQsIG5ldyBXZWJLaXQ6OkVkaXRv
ckNsaWVudChwYWdlKSwgbmV3IFdlYktpdDo6RHJhZ0NsaWVudCwgbmV3IFdlYktpdDo6SW5zcGVj
dG9yQ2xpZW50KTsKKyAgICBwYWdlRGF0YS0+c2NhbGVGYWN0b3IgPSAxLjA7CiAKICAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBwYWdlRGF0YS0+cGFnZS0+c2V0dGluZ3MoKTsKICAgICBzZXR0aW5n
cy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwpAQCAtNTI4LDYgKzU2NywxNCBA
QCB2b2lkIHdlYmtpdF9ndGtfcGFnZV9zdG9wX2xvYWRpbmcoV2ViS2l0CiAgICAgICAgIAogfQog
Cit2b2lkIHdlYmtpdF9ndGtfcGFnZV9zZXRfc2NhbGVfZmFjdG9yKFdlYktpdEd0a1BhZ2UqIHBh
Z2UsIGRvdWJsZSBmYWN0b3IpCit7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRh
ID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCisgICAgcGFnZURhdGEtPnNj
YWxlRmFjdG9yID0gZmFjdG9yOworICAgIC8vIFRPRE86IHJlZHJhdyBwYWdlIHdpdGggbmV3IHNj
YWxlIGZhY3RvcgorfQorCiBXZWJLaXRHdGtGcmFtZSogd2Via2l0X2d0a19wYWdlX2dldF9tYWlu
X2ZyYW1lKFdlYktpdEd0a1BhZ2UqIHBhZ2UpCiB7CiAgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUq
IHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwpJbmRleDogV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjUyMDQpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJr
aXRndGtwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsOSBAQCB3ZWJraXRfZ3Rr
X3BhZ2VfbG9hZF9zdHJpbmcgKFdlYktpdEd0a1BhCiBXRUJLSVRfR1RLX0FQSSB2b2lkCiB3ZWJr
aXRfZ3RrX3BhZ2VfbG9hZF9odG1sX3N0cmluZyAoV2ViS2l0R3RrUGFnZSogcGFnZSwgY29uc3Qg
Z2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdjaGFyKiBiYXNlX3VybCk7CiAKK1dFQktJVF9HVEtfQVBJ
IHZvaWQKK3dlYmtpdF9ndGtfcGFnZV9zZXRfc2NhbGVfZmFjdG9yIChXZWJLaXRHdGtQYWdlKiBw
YWdlLCBkb3VibGUgZmFjdG9yKTsKKwogV0VCS0lUX0dUS19BUEkgV2ViS2l0R3RrRnJhbWUqCiB3
ZWJraXRfZ3RrX3BhZ2VfZ2V0X21haW5fZnJhbWUgKFdlYktpdEd0a1BhZ2UqIHBhZ2UpOwogCklu
ZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCShyZXZpc2lvbiAyNTIwNCkKKysrIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAs
OCBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1c2VyQWdlbnQ7CiAK
ICAgICAgICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJlbjsKKworICAgICAgICBkb3VibGUg
c2NhbGVGYWN0b3I7IAogICAgIH07CiAgICAgCiAgICAgI2RlZmluZSBXRUJLSVRfR1RLX0ZSQU1F
X0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwg
V0VCS0lUX0dUS19UWVBFX0ZSQU1FLCBXZWJLaXRHdGtGcmFtZVByaXZhdGUpKQpJbmRleDogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24g
MjUyMDQpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDggQEAgRmxvYXRSZWN0IENocm9tZUNsaWVudDo6
cGFnZVJlY3QoKQogCiBmbG9hdCBDaHJvbWVDbGllbnQ6OnNjYWxlRmFjdG9yKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAxLjA7CisgICAgV2ViS2l0R3RrUGFnZVByaXZh
dGUgKnByaXZhdGVEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtf
UEFHRShtX3dlYlBhZ2UpKTsKKyAgICByZXR1cm4gKGZsb2F0KXByaXZhdGVEYXRhLT5zY2FsZUZh
Y3RvcjsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OmZvY3VzKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16163</attachid>
            <date>2007-08-30 05:23:18 -0700</date>
            <delta_ts>2007-09-06 09:17:17 -0700</delta_ts>
            <desc>Update to zooming code, bugfixes</desc>
            <filename>zooming-20070830.patch</filename>
            <type>text/plain</type>
            <size>12843</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI1
MjcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODEsMTAgKzE4MSwxMiBAQCBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludENo
ZWNrYm94KFJlbmRlCiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8K
ICAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKICAgICBJbnRQb2ludCBw
b3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50
U2l6ZSBzaXplID0gaS5jb250ZXh0LT50cmFuc2xhdGVTaXplKHJlY3Quc2l6ZSgpKTsKKwogICAg
IGd0a19wYWludF9jaGVjayhjaGVja2JveC0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUo
KSwKICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRv
dyhvKSwKICAgICAgICAgICAgICAgICAgICAgTlVMTCwgY2hlY2tib3gsICJjaGVja2J1dHRvbiIs
Ci0gICAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMTQs
MTAgKzIxNiwxMSBAQCBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKFJlbmRlck9iCiAg
ICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KICAgICBHdGtXaWRnZXQq
IHJhZGlvID0gZ3RrUmFkaW9CdXR0b24oKTsKICAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQt
PnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50U2l6ZSBzaXplID0gaS5j
b250ZXh0LT50cmFuc2xhdGVTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBndGtfcGFpbnRfb3B0aW9u
KHJhZGlvLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAg
ICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsIHJhZGlvLCAicmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAg
ICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjcsMTAgKzIzMCwxMSBAQCBib29s
IFJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbihSZW5kZXJPCiAgICAgLy8gRklYTUU6IHNob3Vs
ZCB1c2UgdGhlbWUtYXdhcmUgZHJhd2luZy4gVGhpcyBzaG91bGQgaG9ub3IgdGhlIHN0YXRlIGFz
IHdlbGwKICAgICBHdGtXaWRnZXQqIGJ1dHRvbiA9IGd0a0J1dHRvbigpOwogICAgIEludFBvaW50
IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJ
bnRTaXplIHNpemUgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVNpemUocmVjdC5zaXplKCkpOwogICAg
IGd0a19wYWludF9ib3goYnV0dG9uLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAog
ICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwK
ICAgICAgICAgICAgICAgICAgIE5VTEwsIGJ1dHRvbiwgImJ1dHRvbiIsCi0gICAgICAgICAgICAg
ICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1Njcm9sbFZpZXdHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Nj
cm9sbFZpZXdHZGsuY3BwCShyZXZpc2lvbiAyNTI3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1Njcm9sbFZpZXdHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMCBAQAogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCisKKyNpbmNsdWRlICJ3
ZWJraXRndGtwYWdlLmgiCisjaW5jbHVkZSAid2Via2l0Z3RrcHJpdmF0ZS5oIgorCiAjaW5jbHVk
ZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIApAQCAtMjg3LDE3ICsyOTEsMjYg
QEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRHdGtBZGp1c3RtZW50cyhHdGtBZAogCiB2b2lkIFNjcm9s
bFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93
KQogeworICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOworCiAgICAgaWYgKHVwZGF0ZVJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdl
ID0gV0VCS0lUX0dUS19QQUdFKGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgV2ViS2l0R3RrUGFn
ZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwor
CisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gcGFnZURhdGEtPnNjYWxlRmFjdG9yOworCiAgICAg
SW50UG9pbnQgd2luZG93UG9pbnQgPSBjb250ZW50c1RvV2luZG93KHVwZGF0ZVJlY3QubG9jYXRp
b24oKSk7CiAgICAgSW50UmVjdCBjb250YWluaW5nV2luZG93UmVjdCA9IHVwZGF0ZVJlY3Q7CiAg
ICAgY29udGFpbmluZ1dpbmRvd1JlY3Quc2V0TG9jYXRpb24od2luZG93UG9pbnQpOworICAgIGNv
bnRhaW5pbmdXaW5kb3dSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKIAogICAgIEdka1JlY3Rhbmds
ZSByZWN0ID0geyBjb250YWluaW5nV2luZG93UmVjdC54KCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGFpbmluZ1dpbmRvd1JlY3Qud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGFpbmluZ1dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKwogICAgIEdka1dpbmRvdyogd2lu
ZG93ID0gR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3c7CiAKICAgICBpZiAo
d2luZG93KQpAQCAtMzE0LDcgKzMyNywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZSgpCiB7
CiAgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CiAKLSAgICBHZGtSZWN0YW5nbGUgcmVj
dCA9IHsgMCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9kYXRhLT5jb250ZW50
c1NpemUuaGVpZ2h0KCkgfTsKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lUX0dUS19Q
QUdFKGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VE
YXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCisgICAgZG91YmxlIHNj
YWxlRmFjdG9yID0gcGFnZURhdGEtPnNjYWxlRmFjdG9yOworCisgICAgR2RrUmVjdGFuZ2xlIHJl
Y3QgPSB7IDAsIDAsIChpbnQpKG1fZGF0YS0+Y29udGVudHNTaXplLndpZHRoKCkqc2NhbGVGYWN0
b3IpLCAgKGludCkobV9kYXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkqc2NhbGVGYWN0b3IpIH07
CiAgICAgZ2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2lu
ZG93KCkpLT53aW5kb3csICZyZWN0LCB0cnVlKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAyNTI3MikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxMyw2ICsyMTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdka0RyYXdhYmxl
KiBnZGtEcmF3YWJsZSgpIGNvbnN0OwogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3Nl
RXZlbnQoKSBjb25zdDsKICAgICAgICAgSW50UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50
UG9pbnQmKSBjb25zdDsKKyAgICAgICAgSW50U2l6ZSB0cmFuc2xhdGVTaXplKGNvbnN0IEludFNp
emUmKSBjb25zdDsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CShyZXZpc2lvbiAyNTI3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjksNiArODI5LDE5IEBA
IEludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQKICAgICBjYWlyb19tYXRy
aXhfdHJhbnNmb3JtX3BvaW50KCZ0bSwgJngsICZ5KTsKICAgICByZXR1cm4gSW50UG9pbnQoeCwg
eSk7CiB9CisKK0ludFNpemUgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGVTaXplKGNvbnN0IElu
dFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgY2Fpcm9fbWF0cml4X3QgdG07CisgICAgY2Fpcm9f
Z2V0X21hdHJpeChtX2RhdGEtPmNyLCAmdG0pOworCisgICAgZG91YmxlIHdpZHRoID0gc2l6ZS53
aWR0aCgpOworICAgIGRvdWJsZSBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgY2Fpcm9f
bWF0cml4X3RyYW5zZm9ybV9kaXN0YW5jZSgmdG0sICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcmV0
dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VDYWlyby5jcHAJKHJldmlzaW9uIDI1MjcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDExIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBjYWlyb19wYXR0
ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShpbWFnZSk7
CiAKICAgICAvLyBUbyBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcp
IHdlIHVzZQotICAgIC8vIENBSVJPX0ZJTFRFUl9ORUFSRVNUIG5vdywgYnV0IHRoZSByZWFsIGZp
eCB3aWxsIGJlIHRvIGhhdmUKKyAgICAvLyBDQUlST19GSUxURVJfR09PRCBub3csIGJ1dCB0aGUg
cmVhbCBmaXggd2lsbCBiZSB0byBoYXZlCiAgICAgLy8gQ0FJUk9fRVhURU5EX1BBRCBpbXBsZW1l
bnRlZCBmb3Igc3VyZmFjZXMgaW4gQ2Fpcm8gYWxsb3dpbmcgdXMgdG8gc3RpbGwKICAgICAvLyB1
c2UgYmlsaW5lYXIgZmlsdGVyaW5nCi0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRl
cm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQo
cGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfZmls
dGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9HT09EKTsKIAogICAgIGZsb2F0IHNjYWxlWCA9IHNy
Y1JlY3Qud2lkdGgoKSAvIGRzdFJlY3Qud2lkdGgoKTsKICAgICBmbG9hdCBzY2FsZVkgPSBzcmNS
ZWN0LmhlaWdodCgpIC8gZHN0UmVjdC5oZWlnaHQoKTsKQEAgLTEyMCw3ICsxMjEsNyBAQCB2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgY2Fpcm9fcGF0dGVybl9z
ZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOwogCiAgICAgLy8gV29ya2Fy
b3VuZCB0byBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpCi0gICAg
Y2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsK
KyAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX0dPT0Qp
OwogCiAgICAgY2Fpcm9fbWF0cml4X3QgcGF0dGVybl9tYXRyaXggPSBjYWlyb19tYXRyaXhfdChw
YXR0ZXJuVHJhbnNmb3JtKTsKICAgICBjYWlyb19tYXRyaXhfdCBwaGFzZV9tYXRyaXggPSB7MSwg
MCwgMCwgMSwgcGhhc2UueCgpLCBwaGFzZS55KCl9OwpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFn
ZS5jcHAJKHJldmlzaW9uIDI1MjcyKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE2ICs3MSw1MiBAQCBzdGF0aWMgZ3VpbnQgd2Via2l0
X2d0a19wYWdlX3NpZ25hbHNbTEFTCiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0R3RrUGFnZSwgd2Vi
a2l0X2d0a19wYWdlLCBHVEtfVFlQRV9DT05UQUlORVIpCiAKK3N0YXRpYyB2b2lkIHRyYW5zZm9y
bV9jb29yZGluYXRlc19kb3VibGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGJvb2wgaW52ZXJ0ZWQsIGRv
dWJsZSogeCwgZG91YmxlKiB5KQoreworICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2UgPSBXRUJLSVRf
R1RLX1BBR0Uod2lkZ2V0KTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBX
RUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKKyAgICBkb3VibGUgZmFjdG9yID0g
cGFnZURhdGEtPnNjYWxlRmFjdG9yOworCisgICAgaWYgKGludmVydGVkKQorICAgICAgICBmYWN0
b3IgPSAxL2ZhY3RvcjsKKworICAgICp4ICo9IGZhY3RvcjsKKyAgICAqeSAqPSBmYWN0b3I7Cit9
CisKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybV9jb29yZGluYXRlc19pbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIGJvb2wgaW52ZXJ0ZWQsIGludCogeCwgaW50KiB5KQoreworICAgIGRvdWJsZSBkeCwgZHk7
CisgICAgZHggPSAoZG91YmxlKSp4OworICAgIGR5ID0gKGRvdWJsZSkqeTsKKworICAgIHRyYW5z
Zm9ybV9jb29yZGluYXRlc19kb3VibGUod2lkZ2V0LCBpbnZlcnRlZCwgJmR4LCAmZHkpOworCisg
ICAgKnggPSAoaW50KWR4OworICAgICp5ID0gKGludClkeTsKK30KKwogc3RhdGljIGdib29sZWFu
IHdlYmtpdF9ndGtfcGFnZV9leHBvc2VfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
RXhwb3NlKiBldmVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBh
Z2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSog
cGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHdp
ZGdldCkpOworCiAgICAgR2RrUmVjdGFuZ2xlIGNsaXA7CiAgICAgZ2RrX3JlZ2lvbl9nZXRfY2xp
cGJveChldmVudC0+cmVnaW9uLCAmY2xpcCk7CisKKyAgICB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNf
aW50KHdpZGdldCwgdHJ1ZSwgJmNsaXAueCwgJmNsaXAueSk7CisgICAgdHJhbnNmb3JtX2Nvb3Jk
aW5hdGVzX2ludCh3aWRnZXQsIHRydWUsICZjbGlwLndpZHRoLCAmY2xpcC5oZWlnaHQpOworCiAg
ICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT53aW5kb3cpOwogICAgIEdy
YXBoaWNzQ29udGV4dCBjdHgoY3IpOwogICAgIGN0eC5zZXRHZGtFeHBvc2VFdmVudChldmVudCk7
CisgICAgY3R4LnNjYWxlKEZsb2F0U2l6ZShwYWdlRGF0YS0+c2NhbGVGYWN0b3IsIHBhZ2VEYXRh
LT5zY2FsZUZhY3RvcikpOworCiAgICAgaWYgKGZyYW1lLT5yZW5kZXJlcigpKSB7CiAgICAgICAg
IGZyYW1lLT52aWV3KCktPmxheW91dElmTmVlZGVkUmVjdXJzaXZlKCk7CisgICAgICAgIC8vIFBh
aW50IGFuIGV4dHJhIDEgcGl4ZWwgYXJvdW5kIHRoZSBjbGlwcmVjdCB0byBhY2NvbW1vZGF0ZSBy
b3VuZGluZyBlcnJvcnMgaW4gdGhlIHNjYWxlCisgICAgICAgIC8vIGZhY3RvcgogICAgICAgICBJ
bnRSZWN0IHJlY3QoY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKICAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmN0eCwgcmVjdCk7CiAgICAgfQpAQCAtMTAwLDYg
KzEzNiw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2UKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdp
ZGdldCkpKTsKIAorICAgIHRyYW5zZm9ybV9jb29yZGluYXRlc19kb3VibGUod2lkZ2V0LCB0cnVl
LCAmZXZlbnQtPngsICZldmVudC0+eSk7CisKICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JV
VFRPTl9SRUxFQVNFKQogICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNl
UmVsZWFzZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwogICAgIGVsc2UKQEAgLTEx
MSw2ICsxNDksOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX2J1dHRvbl9lCiBz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX21vdGlvbl9ldmVudChHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50KQogewogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
Z2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOworCisgICAgdHJhbnNm
b3JtX2Nvb3JkaW5hdGVzX2RvdWJsZSh3aWRnZXQsIHRydWUsICZldmVudC0+eCwgJmV2ZW50LT55
KTsKKwogICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNl
RXZlbnQoZXZlbnQpKTsKICAgICByZXR1cm4gRkFMU0U7CiB9CkBAIC0xMTksNiArMTYwLDggQEAg
c3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9zY3JvbGxfZQogewogICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOwog
CisgICAgdHJhbnNmb3JtX2Nvb3JkaW5hdGVzX2RvdWJsZSh3aWRnZXQsIHRydWUsICZldmVudC0+
eCwgJmV2ZW50LT55KTsKKwogICAgIFBsYXRmb3JtV2hlZWxFdmVudCB3aGVlbEV2ZW50KGV2ZW50
KTsKICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7CiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTI4LDYgKzE3MSw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF9ndGtfcGFnZV9zaXplX2FsbG9jYXQKIHsKICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtp
dF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCxhbGxvY2F0aW9u
KTsKIAorICAgIHRyYW5zZm9ybV9jb29yZGluYXRlc19pbnQod2lkZ2V0LCB0cnVlLCAmYWxsb2Nh
dGlvbi0+d2lkdGgsICZhbGxvY2F0aW9uLT5oZWlnaHQpOwogICAgIEZyYW1lKiBmcmFtZSA9IGNv
cmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOwogICAgIGZyYW1l
LT52aWV3KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsK
ICAgICBmcmFtZS0+Zm9yY2VMYXlvdXQoKTsKQEAgLTQyMSw2ICs0NjUsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfZ3RrX3BhZ2VfaW5pdChXZWJLaXRHCiB7CiAgICAgV2ViS2l0R3RrUGFnZVByaXZh
dGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtfUEFH
RShwYWdlKSk7CiAgICAgcGFnZURhdGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgV2ViS2l0OjpDaHJv
bWVDbGllbnQocGFnZSksIG5ldyBXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50LCBuZXcgV2ViS2l0
OjpFZGl0b3JDbGllbnQocGFnZSksIG5ldyBXZWJLaXQ6OkRyYWdDbGllbnQsIG5ldyBXZWJLaXQ6
Okluc3BlY3RvckNsaWVudCk7CisgICAgcGFnZURhdGEtPnNjYWxlRmFjdG9yID0gMS4wOwogCiAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gcGFnZURhdGEtPnBhZ2UtPnNldHRpbmdzKCk7CiAgICAg
c2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKQEAgLTUyOCw2ICs1
NzMsMTYgQEAgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc3RvcF9sb2FkaW5nKFdlYktpdAogICAgICAg
ICAKIH0KIAordm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvcihXZWJLaXRHdGtQ
YWdlKiBwYWdlLCBkb3VibGUgZmFjdG9yKQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBw
YWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBXZWJLaXRH
dGtGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9HVEtfRlJBTUVfR0VUX1BSSVZBVEUo
cGFnZURhdGEtPm1haW5GcmFtZSk7CisKKyAgICBwYWdlRGF0YS0+c2NhbGVGYWN0b3IgPSBmYWN0
b3I7CisKKyAgICBmcmFtZURhdGEtPmZyYW1lLT52aWV3KCktPnVwZGF0ZSgpOworfQorCiBXZWJL
aXRHdGtGcmFtZSogd2Via2l0X2d0a19wYWdlX2dldF9tYWluX2ZyYW1lKFdlYktpdEd0a1BhZ2Uq
IHBhZ2UpCiB7CiAgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dU
S19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
cGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAkocmV2
aXNpb24gMjUyNzIpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Miw2ICsxNTIsOSBAQCB3ZWJraXRfZ3RrX3BhZ2VfbG9hZF9zdHJpbmcgKFdl
YktpdEd0a1BhCiBXRUJLSVRfR1RLX0FQSSB2b2lkCiB3ZWJraXRfZ3RrX3BhZ2VfbG9hZF9odG1s
X3N0cmluZyAoV2ViS2l0R3RrUGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0
IGdjaGFyKiBiYXNlX3VybCk7CiAKK1dFQktJVF9HVEtfQVBJIHZvaWQKK3dlYmtpdF9ndGtfcGFn
ZV9zZXRfc2NhbGVfZmFjdG9yIChXZWJLaXRHdGtQYWdlKiBwYWdlLCBkb3VibGUgZmFjdG9yKTsK
KwogV0VCS0lUX0dUS19BUEkgV2ViS2l0R3RrRnJhbWUqCiB3ZWJraXRfZ3RrX3BhZ2VfZ2V0X21h
aW5fZnJhbWUgKFdlYktpdEd0a1BhZ2UqIHBhZ2UpOwogCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
cHJpdmF0ZS5oCShyZXZpc2lvbiAyNTI3MikKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3By
aXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBleHRlcm4gIkMiIHsKICAg
ICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1c2VyQWdlbnQ7CiAKICAgICAgICAgSGFzaFNldDxHdGtX
aWRnZXQqPiBjaGlsZHJlbjsKKworICAgICAgICBkb3VibGUgc2NhbGVGYWN0b3I7IAogICAgIH07
CiAgICAgCiAgICAgI2RlZmluZSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKG9iaikgICAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX0dUS19UWVBFX0ZSQU1F
LCBXZWJLaXRHdGtGcmFtZVByaXZhdGUpKQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMjUyNzIpCisrKyBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDggKzY5LDggQEAgRmxvYXRSZWN0IENocm9tZUNsaWVudDo6cGFnZVJlY3QoKQogCiBmbG9hdCBD
aHJvbWVDbGllbnQ6OnNjYWxlRmFjdG9yKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAxLjA7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZhdGVEYXRhID0gV0VC
S0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtfUEFHRShtX3dlYlBhZ2UpKTsKKyAg
ICByZXR1cm4gKGZsb2F0KXByaXZhdGVEYXRhLT5zY2FsZUZhY3RvcjsKIH0KIAogdm9pZCBDaHJv
bWVDbGllbnQ6OmZvY3VzKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16208</attachid>
            <date>2007-09-06 09:17:17 -0700</date>
            <delta_ts>2007-09-07 07:08:38 -0700</delta_ts>
            <desc>More bugfixes, some code cleanup</desc>
            <filename>zooming-20070906.patch</filename>
            <type>text/plain</type>
            <size>18529</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDctMDktMDYgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0
QGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAor
ICAgICAgICBGdWxsIHBhZ2Ugem9vbWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiB6b29taW5nIHN1cHBvcnQgZm9yIHRoZSBHREsvQ2Fpcm8KKyAgICAgICAg
cG9ydC4KKworICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHA6CisgICAgICAg
IChQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
ZGs6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHZGs6OnBh
aW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5z
bGF0ZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKwogMjAwNy0wOS0wNiAgTWl0eiBQZXR0ZWwgIDxt
aXR6QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCShyZXZpc2lv
biAyNTM4NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDEwIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoY29uc3QKICAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZShtX2ZvbnRN
YXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBtX2ZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSk7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7
CiAgICAgbV9vcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOworICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgd29yayBvdXQgaG93IHRvIGdldCB0aGUgdHJ1ZSAoaGludGVkKSBleHRl
bnRzIGZyb20gY2Fpcm8gaW5zdGVhZCBvZgorICAgIC8vIGRpc2FibGluZyBoaW50aW5nCisgICAg
Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG1fb3B0aW9ucywgQ0FJUk9fSElOVF9T
VFlMRV9OT05FKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhtX29wdGlv
bnMsIENBSVJPX0FOVElBTElBU19TVUJQSVhFTCk7CiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9f
c2NhbGVkX2ZvbnRfY3JlYXRlKG1fZm9udEZhY2UsIG1fZm9udE1hdHJpeCwgJmN0bSwgbV9vcHRp
b25zKTsKIAogZnJlZVBhdHRlcm46CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9y
bVNjcm9sbEJhckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxh
dGZvcm1TY3JvbGxCYXJHZGsuY3BwCShyZXZpc2lvbiAyNTM4NSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5o
PgogI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEyMSw4
ICsxMjIsMTYgQEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKAogICAg
IEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICAKKyAgICBBU1NF
UlQoZnJhbWVWaWV3LT5jb250YWluaW5nV2luZG93KCkpOworCisgICAgV2ViS2l0R3RrUGFnZSog
cGFnZSA9IFdFQktJVF9HVEtfUEFHRShmcmFtZVZpZXctPmNvbnRhaW5pbmdXaW5kb3coKSk7Cisg
ICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9Q
UklWQVRFKHBhZ2UpOworCisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gcGFnZURhdGEtPnNjYWxl
RmFjdG9yOworCiAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNv
bnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5
KCkuc2l6ZSgpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3Qu
eCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdo
dCgpIH07CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSpz
Y2FsZUZhY3Rvciwgd2luZG93UmVjdC55KCkqc2NhbGVGYWN0b3IsIHdpbmRvd1JlY3Qud2lkdGgo
KSpzY2FsZUZhY3Rvciwgd2luZG93UmVjdC5oZWlnaHQoKSpzY2FsZUZhY3RvciB9OwogICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCShyZXZpc2lvbiAyNTM4
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgxLDEwICsxODEsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRDaGVj
a2JveChSZW5kZQogICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/CiAg
ICAgR3RrV2lkZ2V0KiBjaGVja2JveCA9IGd0a0NoZWNrYm94KCk7CiAgICAgSW50UG9pbnQgcG9z
ID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIEludFNp
emUgc2l6ZSA9IGkuY29udGV4dC0+dHJhbnNsYXRlU2l6ZShyZWN0LnNpemUoKSk7CisKICAgICBn
dGtfcGFpbnRfY2hlY2soY2hlY2tib3gtPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCks
CiAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3co
byksCiAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGNoZWNrYm94LCAiY2hlY2tidXR0b24iLAot
ICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjE0LDEw
ICsyMTYsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRSYWRpbyhSZW5kZXJPYgogICAg
IC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/CiAgICAgR3RrV2lkZ2V0KiBy
YWRpbyA9IGd0a1JhZGlvQnV0dG9uKCk7CiAgICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50
cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIEludFNpemUgc2l6ZSA9IGkuY29u
dGV4dC0+dHJhbnNsYXRlU2l6ZShyZWN0LnNpemUoKSk7CiAgICAgZ3RrX3BhaW50X29wdGlvbihy
YWRpby0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAgICAg
ICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAgICAgICAgICAgICAg
ICAgICAgICBOVUxMLCByYWRpbywgInJhZGlvYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAg
IHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjI3LDEwICsyMzAsMTEgQEAgYm9vbCBS
ZW5kZXJUaGVtZUdkazo6cGFpbnRCdXR0b24oUmVuZGVyTwogICAgIC8vIEZJWE1FOiBzaG91bGQg
dXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hvdWxkIGhvbm9yIHRoZSBzdGF0ZSBhcyB3
ZWxsCiAgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKICAgICBJbnRQb2ludCBw
b3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50
U2l6ZSBzaXplID0gaS5jb250ZXh0LT50cmFuc2xhdGVTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBn
dGtfcGFpbnRfYm94KGJ1dHRvbi0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAg
ICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAg
ICAgICAgICAgICAgICAgICBOVUxMLCBidXR0b24sICJidXR0b24iLAotICAgICAgICAgICAgICAg
ICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9T
Y3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3Jv
bGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjUzODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9T
Y3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAorCisjaW5jbHVkZSAid2Vi
a2l0Z3RrcGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKKwogI2luY2x1ZGUg
PGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKQEAgLTEyOCw4ICsxMzIsMTYgQEAg
dm9pZCBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZQogICAgIEFTU0VSVChwYXJl
bnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEFTU0VSVChmcmFtZVZpZXctPmNv
bnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lUX0dU
S19QQUdFKGZyYW1lVmlldy0+Y29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisK
KyAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBwYWdlRGF0YS0+c2NhbGVGYWN0b3I7CisKICAgICBJ
bnRSZWN0IHdpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXpl
KCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgd2luZG93UmVjdC54KCksIHdp
bmRvd1JlY3QueSgpLCB3aW5kb3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkgfTsK
KyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgpKnNjYWxlRmFj
dG9yLCB3aW5kb3dSZWN0LnkoKSpzY2FsZUZhY3Rvciwgd2luZG93UmVjdC53aWR0aCgpKnNjYWxl
RmFjdG9yLCB3aW5kb3dSZWN0LmhlaWdodCgpKnNjYWxlRmFjdG9yIH07CiAgICAgZ3RrX3dpZGdl
dF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiAKQEAgLTI4Nywx
NyArMjk5LDI2IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0R3RrQWRqdXN0bWVudHMoR3RrQWQKIAog
dm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBib29sIG5vdykKIHsKKyAgICBBU1NFUlQoY29udGFpbmluZ1dpbmRvdygpKTsKKwogICAgIGlm
ICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgV2ViS2l0R3Rr
UGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRShjb250YWluaW5nV2luZG93KCkpOworICAgIFdl
YktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFU
RShwYWdlKTsKKworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IHBhZ2VEYXRhLT5zY2FsZUZhY3Rv
cjsKKwogICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gY29udGVudHNUb1dpbmRvdyh1cGRhdGVS
ZWN0LmxvY2F0aW9uKCkpOwogICAgIEludFJlY3QgY29udGFpbmluZ1dpbmRvd1JlY3QgPSB1cGRh
dGVSZWN0OwogICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LnNldExvY2F0aW9uKHdpbmRvd1BvaW50
KTsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAKICAgICBH
ZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29udGFpbmluZ1dpbmRvd1JlY3QueCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC55KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LndpZHRoKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LmhlaWdodCgpIH07CisKICAgICBHZGtX
aW5kb3cqIHdpbmRvdyA9IEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93Owog
CiAgICAgaWYgKHdpbmRvdykKQEAgLTMxNCw3ICszMzUsMTQgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1
cGRhdGUoKQogewogICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOwogCi0gICAgR2RrUmVj
dGFuZ2xlIHJlY3QgPSB7IDAsIDAsIG1fZGF0YS0+Y29udGVudHNTaXplLndpZHRoKCksIG1fZGF0
YS0+Y29udGVudHNTaXplLmhlaWdodCgpIH07CisgICAgV2ViS2l0R3RrUGFnZSogcGFnZSA9IFdF
QktJVF9HVEtfUEFHRShjb250YWluaW5nV2luZG93KCkpOworICAgIFdlYktpdEd0a1BhZ2VQcml2
YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKworICAg
IGRvdWJsZSBzY2FsZUZhY3RvciA9IHBhZ2VEYXRhLT5zY2FsZUZhY3RvcjsKKworICAgIEdka1Jl
Y3RhbmdsZSByZWN0ID0geyAoaW50KShmcmFtZUdlb21ldHJ5KCkueCgpKnNjYWxlRmFjdG9yKSwg
KGludCkoZnJhbWVHZW9tZXRyeSgpLnkoKSpzY2FsZUZhY3RvciksIAorICAgICAgICAoaW50KSht
X2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpKnNjYWxlRmFjdG9yKSwgIChpbnQpKG1fZGF0YS0+
Y29udGVudHNTaXplLmhlaWdodCgpKnNjYWxlRmFjdG9yKSB9OworCiAgICAgZ2RrX3dpbmRvd19p
bnZhbGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3csICZy
ZWN0LCB0cnVlKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCShyZXZpc2lvbiAyNTM4NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNv
bnN0OwogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZlbnQoKSBjb25zdDsKICAg
ICAgICAgSW50UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAg
ICAgICAgSW50U2l6ZSB0cmFuc2xhdGVTaXplKGNvbnN0IEludFNpemUmKSBjb25zdDsKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNTM4NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjksNiArODI5LDE5IEBAIEludFBvaW50IEdyYXBoaWNz
Q29udGV4dDo6dHJhbnNsYXRlUG9pbnQKICAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50
KCZ0bSwgJngsICZ5KTsKICAgICByZXR1cm4gSW50UG9pbnQoeCwgeSk7CiB9CisKK0ludFNpemUg
R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0
Cit7CisgICAgY2Fpcm9fbWF0cml4X3QgdG07CisgICAgY2Fpcm9fZ2V0X21hdHJpeChtX2RhdGEt
PmNyLCAmdG0pOworCisgICAgZG91YmxlIHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGRvdWJs
ZSBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9k
aXN0YW5jZSgmdG0sICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcmV0dXJuIEludFNpemUod2lkdGgs
IGhlaWdodCk7Cit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlz
aW9uIDI1Mzg1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBh
dCBodHRwOi8vd3d3Lm1leWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhzcGlyYWwvZGVt
by5odG1sCiAgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVh
dGVfZm9yX3N1cmZhY2UoaW1hZ2UpOwogCi0gICAgLy8gVG8gYXZvaWQgdGhlIHVud2FudGVkIGdy
YWRpZW50IGVmZmVjdCAoIzE0MDE3KSB3ZSB1c2UKLSAgICAvLyBDQUlST19GSUxURVJfTkVBUkVT
VCBub3csIGJ1dCB0aGUgcmVhbCBmaXggd2lsbCBiZSB0byBoYXZlCi0gICAgLy8gQ0FJUk9fRVhU
RU5EX1BBRCBpbXBsZW1lbnRlZCBmb3Igc3VyZmFjZXMgaW4gQ2Fpcm8gYWxsb3dpbmcgdXMgdG8g
c3RpbGwKLSAgICAvLyB1c2UgYmlsaW5lYXIgZmlsdGVyaW5nCi0gICAgY2Fpcm9fcGF0dGVybl9z
ZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKKyAgICAvLyBUbyBhdm9p
ZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZSBDQUlST19FWFRF
TkRfUkVQRUFUCisgICAgLy8gZm9yIG5vdyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSdkIGxpa2UgdG8g
dXNlIENBSVJPX0VYVEVORF9QQUQgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGUKKyAgICAvLyBpbiBj
YWlybyB5ZXQuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gdXNlIENBSVJPX0ZJTFRFUl9CRVNUIGlu
c3RlYWQgb2YgQ0FJUk9fRklMVEVSX05FQVJFU1QKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRl
bmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CisgICAgY2Fpcm9fcGF0dGVybl9zZXRf
ZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9CRVNUKTsKIAogICAgIGZsb2F0IHNjYWxlWCA9
IHNyY1JlY3Qud2lkdGgoKSAvIGRzdFJlY3Qud2lkdGgoKTsKICAgICBmbG9hdCBzY2FsZVkgPSBz
cmNSZWN0LmhlaWdodCgpIC8gZHN0UmVjdC5oZWlnaHQoKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOwogCiAgICAgLy8gV29y
a2Fyb3VuZCB0byBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpCi0g
ICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNU
KTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX0dP
T0QpOwogCiAgICAgY2Fpcm9fbWF0cml4X3QgcGF0dGVybl9tYXRyaXggPSBjYWlyb19tYXRyaXhf
dChwYXR0ZXJuVHJhbnNmb3JtKTsKICAgICBjYWlyb19tYXRyaXhfdCBwaGFzZV9tYXRyaXggPSB7
MSwgMCwgMCwgMSwgcGhhc2UueCgpLCBwaGFzZS55KCl9OwpJbmRleDogV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1Mzg2
KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBA
QAorMjAwNy0wOS0wNiAgR2VvcmdlIFdyaWdodCAgPGdlb3JnZS53cmlnaHRAY29sbGFib3JhLmNv
LnVrPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk4CisgICAgICAgIEZ1bGwg
cGFnZSB6b29taW5nIHN1cHBvcnQKKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9m
IHpvb21pbmcgc3VwcG9ydCBmb3IgdGhlIEdUSy9DYWlybworICAgICAgICBwb3J0LgorCisgICAg
ICAgICogQXBpL3dlYmtpdGd0a3BhZ2UuY3BwOgorICAgICAgICAqIEFwaS93ZWJraXRndGtwYWdl
Lmg6CisgICAgICAgICogQXBpL3dlYmtpdGd0a3ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnQ6OnNjYWxlRmFjdG9yKToKKwogMjAwNy0wOS0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KSW5kZXg6IFdlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a3BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0
a3BhZ2UuY3BwCShyZXZpc2lvbiAyNTM4NSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNyArNzEsNTMgQEAgc3RhdGljIGd1aW50IHdl
YmtpdF9ndGtfcGFnZV9zaWduYWxzW0xBUwogCiBHX0RFRklORV9UWVBFKFdlYktpdEd0a1BhZ2Us
IHdlYmtpdF9ndGtfcGFnZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQogCitzdGF0aWMgdm9pZCB0cmFu
c2Zvcm1fY29vcmRpbmF0ZXNfZG91YmxlKEd0a1dpZGdldCogd2lkZ2V0LCBib29sIGludmVydGVk
LCBkb3VibGUqIHgsIGRvdWJsZSogeSkKK3sKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VC
S0lUX0dUS19QQUdFKHdpZGdldCk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRh
ID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCisgICAgZG91YmxlIGZhY3Rv
ciA9IHBhZ2VEYXRhLT5zY2FsZUZhY3RvcjsKKworICAgIGlmIChpbnZlcnRlZCkKKyAgICAgICAg
ZmFjdG9yID0gMS9mYWN0b3I7CisKKyAgICAqeCAqPSBmYWN0b3I7CisgICAgKnkgKj0gZmFjdG9y
OworfQorCitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNfaW50KEd0a1dpZGdldCog
d2lkZ2V0LCBib29sIGludmVydGVkLCBpbnQqIHgsIGludCogeSkKK3sKKyAgICBkb3VibGUgZHgs
IGR5OworICAgIGR4ID0gKGRvdWJsZSkqeDsKKyAgICBkeSA9IChkb3VibGUpKnk7CisKKyAgICB0
cmFuc2Zvcm1fY29vcmRpbmF0ZXNfZG91YmxlKHdpZGdldCwgaW52ZXJ0ZWQsICZkeCwgJmR5KTsK
KworICAgICp4ID0gKGludClkeDsKKyAgICAqeSA9IChpbnQpZHk7Cit9CisKIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZ3RrX3BhZ2VfZXhwb3NlX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEV4cG9zZSogZXZlbnQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZy
b21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZh
dGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtfUEFH
RSh3aWRnZXQpKTsKKwogICAgIEdka1JlY3RhbmdsZSBjbGlwOwogICAgIGdka19yZWdpb25fZ2V0
X2NsaXBib3goZXZlbnQtPnJlZ2lvbiwgJmNsaXApOworCisgICAgdHJhbnNmb3JtX2Nvb3JkaW5h
dGVzX2ludCh3aWRnZXQsIHRydWUsICZjbGlwLngsICZjbGlwLnkpOworICAgIHRyYW5zZm9ybV9j
b29yZGluYXRlc19pbnQod2lkZ2V0LCB0cnVlLCAmY2xpcC53aWR0aCwgJmNsaXAuaGVpZ2h0KTsK
KwogICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KTsKICAg
ICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsKICAgICBjdHguc2V0R2RrRXhwb3NlRXZlbnQoZXZl
bnQpOworICAgIGN0eC5zY2FsZShGbG9hdFNpemUocGFnZURhdGEtPnNjYWxlRmFjdG9yLCBwYWdl
RGF0YS0+c2NhbGVGYWN0b3IpKTsKKwogICAgIGlmIChmcmFtZS0+cmVuZGVyZXIoKSkgewogICAg
ICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOwotICAgICAgICBJ
bnRSZWN0IHJlY3QoY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAg
ICAgICAgLy8gUGFpbnQgYW4gZXh0cmEgMSBwaXhlbCBhcm91bmQgdGhlIGNsaXByZWN0IHRvIGFj
Y29tbW9kYXRlIHJvdW5kaW5nIGVycm9ycyBpbiB0aGUgc2NhbGUKKyAgICAgICAgLy8gZmFjdG9y
CisgICAgICAgIEludFJlY3QgcmVjdChjbGlwLngtMSwgY2xpcC55LTEsIGNsaXAud2lkdGgrMiwg
Y2xpcC5oZWlnaHQrMik7CiAgICAgICAgIGZyYW1lLT52aWV3KCktPnBhaW50KCZjdHgsIHJlY3Qp
OwogICAgIH0KICAgICBjYWlyb19kZXN0cm95KGNyKTsKQEAgLTEwMCw2ICsxMzYsOCBAQCBzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX2J1dHRvbl9lCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CiAKKyAg
ICB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNfZG91YmxlKHdpZGdldCwgdHJ1ZSwgJmV2ZW50LT54LCAm
ZXZlbnQtPnkpOworCiAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkK
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQ
bGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKICAgICBlbHNlCkBAIC0xMTEsNiArMTQ5LDkgQEAg
c3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9idXR0b25fZQogc3RhdGljIGdib29sZWFu
IHdlYmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
TW90aW9uKiBldmVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBh
Z2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKworICAgIHRyYW5zZm9ybV9jb29yZGluYXRl
c19kb3VibGUod2lkZ2V0LCB0cnVlLCAmZXZlbnQtPngsICZldmVudC0+eSk7CisKICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7
CiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtMTE5LDYgKzE2MCw4IEBAIHN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2UKIHsKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdl
dEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKIAorICAgIHRyYW5zZm9y
bV9jb29yZGluYXRlc19kb3VibGUod2lkZ2V0LCB0cnVlLCAmZXZlbnQtPngsICZldmVudC0+eSk7
CisKICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7CiAgICAgZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogICAgIHJldHVy
biBGQUxTRTsKQEAgLTEyOCw2ICsxNzEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vf
c2l6ZV9hbGxvY2F0CiB7CiAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfZ3RrX3BhZ2VfcGFy
ZW50X2NsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsYWxsb2NhdGlvbik7CiAKKyAgICB0cmFu
c2Zvcm1fY29vcmRpbmF0ZXNfaW50KHdpZGdldCwgdHJ1ZSwgJmFsbG9jYXRpb24tPndpZHRoLCAm
YWxsb2NhdGlvbi0+aGVpZ2h0KTsKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJv
bVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKICAgICBmcmFtZS0+dmlldygpLT5yZXNp
emUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7CiAgICAgZnJhbWUtPmZv
cmNlTGF5b3V0KCk7CkBAIC00MjEsNiArNDY1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19w
YWdlX2luaXQoV2ViS2l0RwogewogICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9
IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFnZSkpOwogICAg
IHBhZ2VEYXRhLT5wYWdlID0gbmV3IFBhZ2UobmV3IFdlYktpdDo6Q2hyb21lQ2xpZW50KHBhZ2Up
LCBuZXcgV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudCwgbmV3IFdlYktpdDo6RWRpdG9yQ2xpZW50
KHBhZ2UpLCBuZXcgV2ViS2l0OjpEcmFnQ2xpZW50LCBuZXcgV2ViS2l0OjpJbnNwZWN0b3JDbGll
bnQpOworICAgIHBhZ2VEYXRhLT5zY2FsZUZhY3RvciA9IDEuMDsKIAogICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IHBhZ2VEYXRhLT5wYWdlLT5zZXR0aW5ncygpOwogICAgIHNldHRpbmdzLT5zZXRM
b2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CkBAIC01MjgsNiArNTczLDE2IEBAIHZvaWQg
d2Via2l0X2d0a19wYWdlX3N0b3BfbG9hZGluZyhXZWJLaXQKICAgICAgICAgCiB9CiAKK3ZvaWQg
d2Via2l0X2d0a19wYWdlX3NldF9zY2FsZV9mYWN0b3IoV2ViS2l0R3RrUGFnZSogcGFnZSwgZG91
YmxlIGZhY3RvcikKK3sKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJL
SVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisgICAgV2ViS2l0R3RrRnJhbWVQcml2YXRl
KiBmcmFtZURhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWlu
RnJhbWUpOworCisgICAgcGFnZURhdGEtPnNjYWxlRmFjdG9yID0gZmFjdG9yOworCisgICAgZnJh
bWVEYXRhLT5mcmFtZS0+dmlldygpLT51cGRhdGUoKTsKK30KKwogV2ViS2l0R3RrRnJhbWUqIHdl
YmtpdF9ndGtfcGFnZV9nZXRfbWFpbl9mcmFtZShXZWJLaXRHdGtQYWdlKiBwYWdlKQogewogICAg
IFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJ
VkFURShwYWdlKTsKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJKHJldmlzaW9uIDI1Mzg1KQor
KysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIs
NiArMTUyLDkgQEAgd2Via2l0X2d0a19wYWdlX2xvYWRfc3RyaW5nIChXZWJLaXRHdGtQYQogV0VC
S0lUX0dUS19BUEkgdm9pZAogd2Via2l0X2d0a19wYWdlX2xvYWRfaHRtbF9zdHJpbmcgKFdlYktp
dEd0a1BhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogYmFzZV91
cmwpOwogCitXRUJLSVRfR1RLX0FQSSB2b2lkCit3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2Zh
Y3RvciAoV2ViS2l0R3RrUGFnZSogcGFnZSwgZG91YmxlIGZhY3Rvcik7CisKIFdFQktJVF9HVEtf
QVBJIFdlYktpdEd0a0ZyYW1lKgogd2Via2l0X2d0a19wYWdlX2dldF9tYWluX2ZyYW1lIChXZWJL
aXRHdGtQYWdlKiBwYWdlKTsKIApJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAkocmV2
aXNpb24gMjUzODUpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIFdlYkNvcmU6
OlN0cmluZyogdXNlckFnZW50OwogCiAgICAgICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj4gY2hpbGRy
ZW47CisKKyAgICAgICAgZG91YmxlIHNjYWxlRmFjdG9yOyAKICAgICB9OwogICAgIAogICAgICNk
ZWZpbmUgV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9HVEtfVFlQRV9GUkFNRSwgV2ViS2l0R3RrRnJh
bWVQcml2YXRlKSkKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHAJKHJldmlzaW9uIDI1Mzg1KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw4ICs2OSw4IEBAIEZs
b2F0UmVjdCBDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKIAogZmxvYXQgQ2hyb21lQ2xpZW50Ojpz
Y2FsZUZhY3RvcigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMS4wOwor
ICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9H
RVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UobV93ZWJQYWdlKSk7CisgICAgcmV0dXJuIChmbG9h
dClwcml2YXRlRGF0YS0+c2NhbGVGYWN0b3I7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50Ojpmb2N1
cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16216</attachid>
            <date>2007-09-07 07:08:38 -0700</date>
            <delta_ts>2007-09-07 09:41:00 -0700</delta_ts>
            <desc>General clean ups, bug fixed for resize events</desc>
            <filename>zooming-20070907.patch</filename>
            <type>text/plain</type>
            <size>19283</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTQxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDctMDktMDYgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0
QGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAor
ICAgICAgICBGdWxsIHBhZ2Ugem9vbWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiB6b29taW5nIHN1cHBvcnQgZm9yIHRoZSBHREsvQ2Fpcm8KKyAgICAgICAg
cG9ydC4KKworICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHA6CisgICAgICAg
IChQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
ZGs6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHZGs6OnBh
aW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5z
bGF0ZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKwogMjAwNy0wOS0wNiAgVHJpc3RhbiBPJ1RpZXJu
ZXkgIDx0cmlzdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3Rh
Y2hvd2lhay4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFH
ZGsuY3BwCShyZXZpc2lvbiAyNTQxMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0
Zm9ybURhdGFHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDEwIEBAIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QKICAgICBjYWlyb19tYXRyaXhfaW5p
dF9zY2FsZShtX2ZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBt
X2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRf
aWRlbnRpdHkoJmN0bSk7CiAgICAgbV9vcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0
ZSgpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgd29yayBvdXQgaG93IHRvIGdldCB0aGUgdHJ1
ZSAoaGludGVkKSBleHRlbnRzIGZyb20gY2Fpcm8gaW5zdGVhZCBvZgorICAgIC8vIGRpc2FibGlu
ZyBoaW50aW5nCisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG1fb3B0aW9u
cywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2Fu
dGlhbGlhcyhtX29wdGlvbnMsIENBSVJPX0FOVElBTElBU19TVUJQSVhFTCk7CiAgICAgbV9zY2Fs
ZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKG1fZm9udEZhY2UsIG1fZm9udE1hdHJp
eCwgJmN0bSwgbV9vcHRpb25zKTsKIAogZnJlZVBhdHRlcm46CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCShyZXZpc2lvbiAyNTQxMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAjaW5j
bHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CiAjaW5jbHVkZSA8c3Rk
aW8uaD4KQEAgLTEyMSw4ICsxMjIsMTcgQEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0
cnlDaGFuZ2VkKAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsK
KyAgICAKKyAgICBBU1NFUlQoZnJhbWVWaWV3LT5jb250YWluaW5nV2luZG93KCkpOworCisgICAg
V2ViS2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRShmcmFtZVZpZXctPmNvbnRhaW5p
bmdXaW5kb3coKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lU
X0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0g
cGFnZURhdGEtPnNjYWxlRmFjdG9yOworCiAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVj
dChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkp
LCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3
aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAo
aW50KSh3aW5kb3dSZWN0LngoKSAqIHNjYWxlRmFjdG9yKSwgKGludCkod2luZG93UmVjdC55KCkg
KiBzY2FsZUZhY3RvciksIAorICAgICAgICAoaW50KSh3aW5kb3dSZWN0LndpZHRoKCkgKiBzY2Fs
ZUZhY3RvciksIChpbnQpKHdpbmRvd1JlY3QuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcikgfTsKICAg
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAkocmV2aXNpb24g
MjU0MTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MSwxMCArMTgxLDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
Q2hlY2tib3goUmVuZGUKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRv
PwogICAgIEd0a1dpZGdldCogY2hlY2tib3ggPSBndGtDaGVja2JveCgpOwogICAgIEludFBvaW50
IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJ
bnRTaXplIHNpemUgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVNpemUocmVjdC5zaXplKCkpOworCiAg
ICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJs
ZSgpLAogICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hh
ZG93KG8pLAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNoZWNrYnV0dG9u
IiwKLSAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIx
NCwyMyArMjE2LDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IK
ICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0a1dpZGdl
dCogcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOwogICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4
dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRTaXplIHNpemUgPSBp
LmNvbnRleHQtPnRyYW5zbGF0ZVNpemUocmVjdC5zaXplKCkpOwogICAgIGd0a19wYWludF9vcHRp
b24ocmFkaW8tPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAg
ICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAg
ICAgICAgICAgICAgTlVMTCwgcmFkaW8sICJyYWRpb2J1dHRvbiIsCi0gICAgICAgICAgICAgICAg
ICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUdkazo6
cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkgCi17IAorewogICAgIC8vIEZJWE1FOiBzaG91bGQg
dXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hvdWxkIGhvbm9yIHRoZSBzdGF0ZSBhcyB3
ZWxsCiAgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKICAgICBJbnRQb2ludCBw
b3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50
U2l6ZSBzaXplID0gaS5jb250ZXh0LT50cmFuc2xhdGVTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBn
dGtfcGFpbnRfYm94KGJ1dHRvbi0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAg
ICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAg
ICAgICAgICAgICAgICAgICBOVUxMLCBidXR0b24sICJidXR0b24iLAotICAgICAgICAgICAgICAg
ICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9T
Y3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3Jv
bGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjU0MTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9T
Y3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAorCisjaW5jbHVkZSAid2Vi
a2l0Z3RrcGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKKwogI2luY2x1ZGUg
PGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKQEAgLTEyOCw4ICsxMzIsMTcgQEAg
dm9pZCBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZQogICAgIEFTU0VSVChwYXJl
bnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEFTU0VSVChmcmFtZVZpZXctPmNv
bnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lUX0dU
S19QQUdFKGZyYW1lVmlldy0+Y29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisK
KyAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBwYWdlRGF0YS0+c2NhbGVGYWN0b3I7CisKICAgICBJ
bnRSZWN0IHdpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXpl
KCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgd2luZG93UmVjdC54KCksIHdp
bmRvd1JlY3QueSgpLCB3aW5kb3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkgfTsK
KyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IChpbnQpKHdpbmRvd1JlY3QueCgpICog
c2NhbGVGYWN0b3IpLCAoaW50KSh3aW5kb3dSZWN0LnkoKSAqIHNjYWxlRmFjdG9yKSwgCisgICAg
ICAgIChpbnQpKHdpbmRvd1JlY3Qud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSwgKGludCkod2luZG93
UmVjdC5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9OwogICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogfQogCkBAIC0yODcsMTcgKzMwMCwyNiBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldEd0a0FkanVzdG1lbnRzKEd0a0FkCiAKIHZvaWQgU2Nyb2xs
Vmlldzo6dXBkYXRlQ29udGVudHMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBub3cp
CiB7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKICAgICBpZiAodXBkYXRlUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2Ug
PSBXRUJLSVRfR1RLX1BBR0UoY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisK
KyAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBwYWdlRGF0YS0+c2NhbGVGYWN0b3I7CisKICAgICBJ
bnRQb2ludCB3aW5kb3dQb2ludCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlv
bigpKTsKICAgICBJbnRSZWN0IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKICAg
ICBjb250YWluaW5nV2luZG93UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisgICAgY29u
dGFpbmluZ1dpbmRvd1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogCiAgICAgR2RrUmVjdGFuZ2xl
IHJlY3QgPSB7IGNvbnRhaW5pbmdXaW5kb3dSZWN0LngoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmluZ1dpbmRvd1JlY3QueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250YWluaW5nV2luZG93UmVjdC53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250YWluaW5nV2luZG93UmVjdC5oZWlnaHQoKSB9OworCiAgICAgR2RrV2luZG93KiB3aW5k
b3cgPSBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdzsKIAogICAgIGlmICh3
aW5kb3cpCkBAIC0zMTQsNyArMzM2LDE0IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIHsK
ICAgICBBU1NFUlQoY29udGFpbmluZ1dpbmRvdygpKTsKIAotICAgIEdka1JlY3RhbmdsZSByZWN0
ID0geyAwLCAwLCBtX2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpLCBtX2RhdGEtPmNvbnRlbnRz
U2l6ZS5oZWlnaHQoKSB9OworICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2UgPSBXRUJLSVRfR1RLX1BB
R0UoY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURh
dGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKKyAgICBkb3VibGUgc2Nh
bGVGYWN0b3IgPSBwYWdlRGF0YS0+c2NhbGVGYWN0b3I7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVj
dCA9IHsgKGludCkoZnJhbWVHZW9tZXRyeSgpLngoKSAqIHNjYWxlRmFjdG9yKSwgKGludCkoZnJh
bWVHZW9tZXRyeSgpLnkoKSAqIHNjYWxlRmFjdG9yKSwgCisgICAgICAgIChpbnQpKG1fZGF0YS0+
Y29udGVudHNTaXplLndpZHRoKCkgKiBzY2FsZUZhY3RvciksICAoaW50KShtX2RhdGEtPmNvbnRl
bnRzU2l6ZS5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9OworCiAgICAgZ2RrX3dpbmRvd19pbnZh
bGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3csICZyZWN0
LCB0cnVlKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCShyZXZpc2lvbiAyNTQxMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0
OwogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZlbnQoKSBjb25zdDsKICAgICAg
ICAgSW50UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICAg
ICAgSW50U2l6ZSB0cmFuc2xhdGVTaXplKGNvbnN0IEludFNpemUmKSBjb25zdDsKICNlbmRpZgog
CiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNTQxMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MjksNiArODI5LDE5IEBAIEludFBvaW50IEdyYXBoaWNzQ29u
dGV4dDo6dHJhbnNsYXRlUG9pbnQKICAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZ0
bSwgJngsICZ5KTsKICAgICByZXR1cm4gSW50UG9pbnQoeCwgeSk7CiB9CisKK0ludFNpemUgR3Jh
cGhpY3NDb250ZXh0Ojp0cmFuc2xhdGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7
CisgICAgY2Fpcm9fbWF0cml4X3QgdG07CisgICAgY2Fpcm9fZ2V0X21hdHJpeChtX2RhdGEtPmNy
LCAmdG0pOworCisgICAgZG91YmxlIHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGRvdWJsZSBo
ZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0
YW5jZSgmdG0sICZ3aWR0aCwgJmhlaWdodCk7CisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhl
aWdodCk7Cit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9u
IDI1NDEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdCBo
dHRwOi8vd3d3Lm1leWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhzcGlyYWwvZGVtby5o
dG1sCiAgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVf
Zm9yX3N1cmZhY2UoaW1hZ2UpOwogCi0gICAgLy8gVG8gYXZvaWQgdGhlIHVud2FudGVkIGdyYWRp
ZW50IGVmZmVjdCAoIzE0MDE3KSB3ZSB1c2UKLSAgICAvLyBDQUlST19GSUxURVJfTkVBUkVTVCBu
b3csIGJ1dCB0aGUgcmVhbCBmaXggd2lsbCBiZSB0byBoYXZlCi0gICAgLy8gQ0FJUk9fRVhURU5E
X1BBRCBpbXBsZW1lbnRlZCBmb3Igc3VyZmFjZXMgaW4gQ2Fpcm8gYWxsb3dpbmcgdXMgdG8gc3Rp
bGwKLSAgICAvLyB1c2UgYmlsaW5lYXIgZmlsdGVyaW5nCi0gICAgY2Fpcm9fcGF0dGVybl9zZXRf
ZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKKyAgICAvLyBUbyBhdm9pZCB0
aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZSBDQUlST19FWFRFTkRf
UkVQRUFUCisgICAgLy8gZm9yIG5vdyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSdkIGxpa2UgdG8gdXNl
IENBSVJPX0VYVEVORF9QQUQgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGUKKyAgICAvLyBpbiBjYWly
byB5ZXQuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gdXNlIENBSVJPX0ZJTFRFUl9CRVNUIGluc3Rl
YWQgb2YgQ0FJUk9fRklMVEVSX05FQVJFU1QKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQo
cGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfZmls
dGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9CRVNUKTsKIAogICAgIGZsb2F0IHNjYWxlWCA9IHNy
Y1JlY3Qud2lkdGgoKSAvIGRzdFJlY3Qud2lkdGgoKTsKICAgICBmbG9hdCBzY2FsZVkgPSBzcmNS
ZWN0LmhlaWdodCgpIC8gZHN0UmVjdC5oZWlnaHQoKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgY2Fpcm9fcGF0dGVybl9z
ZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOwogCiAgICAgLy8gV29ya2Fy
b3VuZCB0byBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpCi0gICAg
Y2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsK
KyAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX0JFU1Qp
OwogCiAgICAgY2Fpcm9fbWF0cml4X3QgcGF0dGVybl9tYXRyaXggPSBjYWlyb19tYXRyaXhfdChw
YXR0ZXJuVHJhbnNmb3JtKTsKICAgICBjYWlyb19tYXRyaXhfdCBwaGFzZV9tYXRyaXggPSB7MSwg
MCwgMCwgMSwgcGhhc2UueCgpLCBwaGFzZS55KCl9OwpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDEwKQor
KysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAwNy0wOS0wNiAgR2VvcmdlIFdyaWdodCAgPGdlb3JnZS53cmlnaHRAY29sbGFib3JhLmNvLnVr
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk4CisgICAgICAgIEZ1bGwgcGFn
ZSB6b29taW5nIHN1cHBvcnQKKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHpv
b21pbmcgc3VwcG9ydCBmb3IgdGhlIEdUSy9DYWlybworICAgICAgICBwb3J0LgorCisgICAgICAg
ICogQXBpL3dlYmtpdGd0a3BhZ2UuY3BwOgorICAgICAgICAqIEFwaS93ZWJraXRndGtwYWdlLmg6
CisgICAgICAgICogQXBpL3dlYmtpdGd0a3ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6
OnNjYWxlRmFjdG9yKToKKwogMjAwNy0wOS0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dl
YmtpdGd0a3BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuY3BwCShyZXZpc2lvbiAyNTQxMCkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNyArNzEsNTQgQEAgc3RhdGljIGd1aW50IHdlYmtp
dF9ndGtfcGFnZV9zaWduYWxzW0xBUwogCiBHX0RFRklORV9UWVBFKFdlYktpdEd0a1BhZ2UsIHdl
YmtpdF9ndGtfcGFnZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQogCitzdGF0aWMgdm9pZCB0cmFuc2Zv
cm1fY29vcmRpbmF0ZXNfZG91YmxlKEd0a1dpZGdldCogd2lkZ2V0LCBib29sIGludmVydGVkLCBk
b3VibGUqIHgsIGRvdWJsZSogeSkKK3sKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lU
X0dUS19QQUdFKHdpZGdldCk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0g
V0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCisgICAgZG91YmxlIGZhY3RvciA9
IHBhZ2VEYXRhLT5zY2FsZUZhY3RvcjsKKworICAgIGlmIChpbnZlcnRlZCkKKyAgICAgICAgZmFj
dG9yID0gMS9mYWN0b3I7CisKKyAgICAqeCAqPSBmYWN0b3I7CisgICAgKnkgKj0gZmFjdG9yOwor
fQorCitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNfaW50KEd0a1dpZGdldCogd2lk
Z2V0LCBib29sIGludmVydGVkLCBpbnQqIHgsIGludCogeSkKK3sKKyAgICBkb3VibGUgZHgsIGR5
OworICAgIGR4ID0gKGRvdWJsZSkqeDsKKyAgICBkeSA9IChkb3VibGUpKnk7CisKKyAgICB0cmFu
c2Zvcm1fY29vcmRpbmF0ZXNfZG91YmxlKHdpZGdldCwgaW52ZXJ0ZWQsICZkeCwgJmR5KTsKKwor
ICAgICp4ID0gKGludClkeDsKKyAgICAqeSA9IChpbnQpZHk7Cit9CisKIHN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZ3RrX3BhZ2VfZXhwb3NlX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVu
dEV4cG9zZSogZXZlbnQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21Q
YWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUq
IHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtfUEFHRSh3
aWRnZXQpKTsKKwogICAgIEdka1JlY3RhbmdsZSBjbGlwOwogICAgIGdka19yZWdpb25fZ2V0X2Ns
aXBib3goZXZlbnQtPnJlZ2lvbiwgJmNsaXApOworCisgICAgdHJhbnNmb3JtX2Nvb3JkaW5hdGVz
X2ludCh3aWRnZXQsIHRydWUsICZjbGlwLngsICZjbGlwLnkpOworICAgIHRyYW5zZm9ybV9jb29y
ZGluYXRlc19pbnQod2lkZ2V0LCB0cnVlLCAmY2xpcC53aWR0aCwgJmNsaXAuaGVpZ2h0KTsKKwog
ICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KTsKICAgICBH
cmFwaGljc0NvbnRleHQgY3R4KGNyKTsKICAgICBjdHguc2V0R2RrRXhwb3NlRXZlbnQoZXZlbnQp
OworICAgIGN0eC5zY2FsZShGbG9hdFNpemUocGFnZURhdGEtPnNjYWxlRmFjdG9yLCBwYWdlRGF0
YS0+c2NhbGVGYWN0b3IpKTsKKwogICAgIGlmIChmcmFtZS0+cmVuZGVyZXIoKSkgewogICAgICAg
ICBmcmFtZS0+dmlldygpLT5sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOworICAgICAgICAvLyBQ
YWludCBhbiBleHRyYSAyIHBpeGVscyBhcm91bmQgdGhlIGNsaXByZWN0IHRvIGFjY29tbW9kYXRl
IHJvdW5kaW5nIGVycm9ycyBpbiB0aGUgc2NhbGUKKyAgICAgICAgLy8gZmFjdG9yIGFuZCBhbnRp
YWxpYXNpbmcgYXJ0aWZhY3RzCiAgICAgICAgIEludFJlY3QgcmVjdChjbGlwLngsIGNsaXAueSwg
Y2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOworICAgICAgICByZWN0LmluZmxhdGUoMik7CiAgICAg
ICAgIGZyYW1lLT52aWV3KCktPnBhaW50KCZjdHgsIHJlY3QpOwogICAgIH0KICAgICBjYWlyb19k
ZXN0cm95KGNyKTsKQEAgLTEwMCw2ICsxMzcsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0
a19wYWdlX2J1dHRvbl9lCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21Q
YWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CiAKKyAgICB0cmFuc2Zvcm1fY29vcmRpbmF0
ZXNfZG91YmxlKHdpZGdldCwgdHJ1ZSwgJmV2ZW50LT54LCAmZXZlbnQtPnkpOworCiAgICAgaWYg
KGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkKICAgICAgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZl
bnQpKTsKICAgICBlbHNlCkBAIC0xMTEsNiArMTUwLDkgQEAgc3RhdGljIGdib29sZWFuIHdlYmtp
dF9ndGtfcGFnZV9idXR0b25fZQogc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9tb3Rp
b25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdp
ZGdldCkpKTsKKworICAgIHRyYW5zZm9ybV9jb29yZGluYXRlc19kb3VibGUod2lkZ2V0LCB0cnVl
LCAmZXZlbnQtPngsICZldmVudC0+eSk7CisKICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1v
dXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CiAgICAgcmV0dXJuIEZBTFNFOwog
fQpAQCAtMTE5LDYgKzE2MSw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2Vfc2Ny
b2xsX2UKIHsKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lU
X0dUS19QQUdFKHdpZGdldCkpKTsKIAorICAgIHRyYW5zZm9ybV9jb29yZGluYXRlc19kb3VibGUo
d2lkZ2V0LCB0cnVlLCAmZXZlbnQtPngsICZldmVudC0+eSk7CisKICAgICBQbGF0Zm9ybVdoZWVs
RXZlbnQgd2hlZWxFdmVudChldmVudCk7CiAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5k
bGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogICAgIHJldHVybiBGQUxTRTsKQEAgLTEyOCw2ICsx
NzIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0CiB7CiAgICAg
R1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+c2l6ZV9hbGxv
Y2F0ZSh3aWRnZXQsYWxsb2NhdGlvbik7CiAKKyAgICB0cmFuc2Zvcm1fY29vcmRpbmF0ZXNfaW50
KHdpZGdldCwgdHJ1ZSwgJmFsbG9jYXRpb24tPndpZHRoLCAmYWxsb2NhdGlvbi0+aGVpZ2h0KTsK
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdF
KHdpZGdldCkpKTsKICAgICBmcmFtZS0+dmlldygpLT5yZXNpemUoYWxsb2NhdGlvbi0+d2lkdGgs
IGFsbG9jYXRpb24tPmhlaWdodCk7CiAgICAgZnJhbWUtPmZvcmNlTGF5b3V0KCk7CkBAIC00MjEs
NiArNDY2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2luaXQoV2ViS2l0Rwogewog
ICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRf
UFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFnZSkpOwogICAgIHBhZ2VEYXRhLT5wYWdlID0gbmV3
IFBhZ2UobmV3IFdlYktpdDo6Q2hyb21lQ2xpZW50KHBhZ2UpLCBuZXcgV2ViS2l0OjpDb250ZXh0
TWVudUNsaWVudCwgbmV3IFdlYktpdDo6RWRpdG9yQ2xpZW50KHBhZ2UpLCBuZXcgV2ViS2l0OjpE
cmFnQ2xpZW50LCBuZXcgV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQpOworICAgIHBhZ2VEYXRhLT5z
Y2FsZUZhY3RvciA9IDEuMDsKIAogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2VEYXRhLT5w
YWdlLT5zZXR0aW5ncygpOwogICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkodHJ1ZSk7CkBAIC01MjgsNiArNTc0LDMzIEBAIHZvaWQgd2Via2l0X2d0a19wYWdlX3N0b3Bf
bG9hZGluZyhXZWJLaXQKICAgICAgICAgCiB9CiAKK3ZvaWQgd2Via2l0X2d0a19wYWdlX3NldF9z
Y2FsZV9mYWN0b3IoV2ViS2l0R3RrUGFnZSogcGFnZSwgZG91YmxlIGZhY3RvcikKK3sKKyAgICBX
ZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZB
VEUocGFnZSk7CisgICAgV2ViS2l0R3RrRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRf
R1RLX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUpOworCisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBmcmFtZURhdGEtPmZyYW1lLT52aWV3KCk7CisKKyAgICBpbnQgd2lk
dGggPSBmcmFtZVZpZXctPmZyYW1lR2VvbWV0cnkoKS53aWR0aCgpOworICAgIGludCBoZWlnaHQg
PSBmcmFtZVZpZXctPmZyYW1lR2VvbWV0cnkoKS5oZWlnaHQoKTsKKworICAgIHRyYW5zZm9ybV9j
b29yZGluYXRlc19pbnQoR1RLX1dJREdFVChwYWdlKSwgZmFsc2UsICZ3aWR0aCwgJmhlaWdodCk7
CisKKyAgICBwYWdlRGF0YS0+c2NhbGVGYWN0b3IgPSBmYWN0b3I7CisKKyAgICB0cmFuc2Zvcm1f
Y29vcmRpbmF0ZXNfaW50KEdUS19XSURHRVQocGFnZSksIHRydWUsICZ3aWR0aCwgJmhlaWdodCk7
CisKKyAgICBmcmFtZVZpZXctPnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBmcmFtZVZpZXct
PnVwZGF0ZSgpOworfQorCitkb3VibGUgd2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3Io
V2ViS2l0R3RrUGFnZSogcGFnZSkKK3sKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURh
dGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKKyAgICByZXR1cm4gcGFn
ZURhdGEtPnNjYWxlRmFjdG9yOworfQorCiBXZWJLaXRHdGtGcmFtZSogd2Via2l0X2d0a19wYWdl
X2dldF9tYWluX2ZyYW1lKFdlYktpdEd0a1BhZ2UqIHBhZ2UpCiB7CiAgICAgV2ViS2l0R3RrUGFn
ZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwpJ
bmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjU0MTApCisrKyBXZWJLaXQvZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsMTIgQEAg
d2Via2l0X2d0a19wYWdlX2xvYWRfc3RyaW5nIChXZWJLaXRHdGtQYQogV0VCS0lUX0dUS19BUEkg
dm9pZAogd2Via2l0X2d0a19wYWdlX2xvYWRfaHRtbF9zdHJpbmcgKFdlYktpdEd0a1BhZ2UqIHBh
Z2UsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogYmFzZV91cmwpOwogCitXRUJL
SVRfR1RLX0FQSSB2b2lkCit3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0
R3RrUGFnZSogcGFnZSwgZG91YmxlIGZhY3Rvcik7CisKK1dFQktJVF9HVEtfQVBJIGRvdWJsZQor
d2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3IgKFdlYktpdEd0a1BhZ2UqIHBhZ2UpOwor
CiBXRUJLSVRfR1RLX0FQSSBXZWJLaXRHdGtGcmFtZSoKIHdlYmtpdF9ndGtfcGFnZV9nZXRfbWFp
bl9mcmFtZSAoV2ViS2l0R3RrUGFnZSogcGFnZSk7CiAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dl
YmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtw
cml2YXRlLmgJKHJldmlzaW9uIDI1NDEwKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIGV4dGVybiAiQyIgewogICAg
ICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJBZ2VudDsKIAogICAgICAgICBIYXNoU2V0PEd0a1dp
ZGdldCo+IGNoaWxkcmVuOworCisgICAgICAgIGRvdWJsZSBzY2FsZUZhY3RvcjsgCiAgICAgfTsK
ICAgICAKICAgICAjZGVmaW5lIFdFQktJVF9HVEtfRlJBTUVfR0VUX1BSSVZBVEUob2JqKSAgICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfR1RLX1RZUEVfRlJBTUUs
IFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSkpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAyNTQxMCkKKysrIFdlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjks
OCArNjksOCBAQCBGbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCiAKIGZsb2F0IENo
cm9tZUNsaWVudDo6c2NhbGVGYWN0b3IoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDEuMDsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSAqcHJpdmF0ZURhdGEgPSBXRUJL
SVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKG1fd2ViUGFnZSkpOworICAg
IHJldHVybiAoZmxvYXQpcHJpdmF0ZURhdGEtPnNjYWxlRmFjdG9yOwogfQogCiB2b2lkIENocm9t
ZUNsaWVudDo6Zm9jdXMoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16217</attachid>
            <date>2007-09-07 07:10:47 -0700</date>
            <delta_ts>2008-03-18 19:32:07 -0700</delta_ts>
            <desc>Add zoom functionality to GdkLauncher for testing purposes</desc>
            <filename>gdklauncher-zoom.patch</filename>
            <type>text/plain</type>
            <size>2218</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCShyZXZpc2lvbiAyNTM4NSkKKysrIFdlYktp
dFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3
IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGdUb3BMZXZlbFdpbmRvdzsKIHN0YXRpYyBXZWJLaXRHdGtQ
YWdlKiBnUGFnZTsKIHN0YXRpYyBnY2hhciogZ1RpdGxlOwogc3RhdGljIGdpbnQgZ1Byb2dyZXNz
Oworc3RhdGljIGRvdWJsZSBzY2FsZUZhY3RvcjsKIAogc3RhdGljIGJvb2wgc3RyaW5nSXNFcXVh
bChjb25zdCBjaGFyKiBzdHIxLCBjb25zdCBjaGFyKiBzdHIyKQogewpAQCAtOTAsNiArOTEsMTgg
QEAgc3RhdGljIHZvaWQgbWVudU1haW5Gb3J3YXJkQ2FsbGJhY2soZ3BvaQogICAgIHdlYmtpdF9n
dGtfcGFnZV9nb19mb3J3YXJkKGdQYWdlKTsKIH0KIAorc3RhdGljIHZvaWQgbWVudU1haW5ab29t
SW5DYWxsYmFjayhncG9pbnRlcikKK3sKKyAgICB3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2Zh
Y3RvcihnUGFnZSwgc2NhbGVGYWN0b3IqMS4yKTsKKyAgICBzY2FsZUZhY3RvciAqPSAxLjI7Cit9
CisKK3N0YXRpYyB2b2lkIG1lbnVNYWluWm9vbU91dENhbGxiYWNrKGdwb2ludGVyKQoreworICAg
IHdlYmtpdF9ndGtfcGFnZV9zZXRfc2NhbGVfZmFjdG9yKGdQYWdlLCBzY2FsZUZhY3Rvci8xLjIp
OworICAgIHNjYWxlRmFjdG9yIC89IDEuMjsKK30KKwogc3RhdGljIHZvaWQgbWVudU1haW5RdWl0
Q2FsbGJhY2soZ3BvaW50ZXIpCiB7CiAgICAgZ3RrX21haW5fcXVpdCgpOwpAQCAtMTAxLDYgKzEx
NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIAogICAgIHdlYmtpdF9ndGtf
aW5pdCgpOwogCiAgICAgZ2NoYXIqIHVybCA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20iOworICAg
IHNjYWxlRmFjdG9yID0gMS4wOwogICAgIGJvb2wgZXhpdEFmdGVyTG9hZGluZyA9IGZhbHNlOwog
ICAgIGJvb2wgZHVtcFJlbmRlclRyZWUgPSBmYWxzZTsKICAgICBmb3IgKGludCBhcmdQb3MgPSAx
OyBhcmdQb3MgPCBhcmdjOyArK2FyZ1BvcykgewpAQCAtMTM0LDYgKzE0OCwxNiBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhciogYXJndltdKSAKICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
R19PQkpFQ1QobWVudU1haW5Gb3J3YXJkKSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhtZW51TWFp
bkZvcndhcmRDYWxsYmFjayksIE5VTEwpOwogICAgIGd0a193aWRnZXRfc2hvdyhtZW51TWFpbkZv
cndhcmQpOwogCisgICAgR3RrV2lkZ2V0KiBtZW51TWFpblpvb21JbiA9IGd0a19tZW51X2l0ZW1f
bmV3X3dpdGhfbGFiZWwoIlpvb20gSW4iKTsKKyAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RL
X01FTlVfU0hFTEwobWVudU1haW4pLCBtZW51TWFpblpvb21Jbik7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKEdfT0JKRUNUKG1lbnVNYWluWm9vbUluKSwgImFjdGl2YXRlIiwgR19DQUxM
QkFDSyhtZW51TWFpblpvb21JbkNhbGxiYWNrKSwgTlVMTCk7CisgICAgZ3RrX3dpZGdldF9zaG93
KG1lbnVNYWluWm9vbUluKTsKKworICAgIEd0a1dpZGdldCogbWVudU1haW5ab29tT3V0ID0gZ3Rr
X21lbnVfaXRlbV9uZXdfd2l0aF9sYWJlbCgiWm9vbSBPdXQiKTsKKyAgICBndGtfbWVudV9zaGVs
bF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobWVudU1haW4pLCBtZW51TWFpblpvb21PdXQpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHX09CSkVDVChtZW51TWFpblpvb21PdXQpLCAiYWN0
aXZhdGUiLCBHX0NBTExCQUNLKG1lbnVNYWluWm9vbU91dENhbGxiYWNrKSwgTlVMTCk7CisgICAg
Z3RrX3dpZGdldF9zaG93KG1lbnVNYWluWm9vbU91dCk7CisKICAgICBHdGtXaWRnZXQqIG1lbnVN
YWluUXVpdCA9IGd0a19tZW51X2l0ZW1fbmV3X3dpdGhfbGFiZWwoIlF1aXQiKTsKICAgICBndGtf
bWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobWVudU1haW4pLCBtZW51TWFpblF1aXQp
OwogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHX09CSkVDVChtZW51TWFpblF1aXQpLCAi
YWN0aXZhdGUiLCBHX0NBTExCQUNLKG1lbnVNYWluUXVpdENhbGxiYWNrKSwgTlVMTCk7Cg==
</data>
<flag name="review"
          id="6822"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16218</attachid>
            <date>2007-09-07 09:41:00 -0700</date>
            <delta_ts>2007-09-11 09:55:19 -0700</delta_ts>
            <desc>Small changes to conform to coding style, general tidying up</desc>
            <filename>zooming-20070907-r4.patch</filename>
            <type>text/plain</type>
            <size>19453</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTQxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDctMDktMDcgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0
QGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAor
ICAgICAgICBGdWxsIHBhZ2Ugem9vbWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiB6b29taW5nIHN1cHBvcnQgZm9yIHRoZSBHREsvQ2Fpcm8KKyAgICAgICAg
cG9ydC4KKworICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHA6CisgICAgICAg
IChQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
ZGs6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHZGs6OnBh
aW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5z
bGF0ZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKwogMjAwNy0wOS0wNyAgUWluZyBaaGFvICA8cWlu
Z0BzdGFpa29zLm5ldD4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgYW5kIEdlb3JnZS4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCShy
ZXZpc2lvbiAyNTQxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFH
ZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDEwIEBAIEZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QKICAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSht
X2ZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBtX2ZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHko
JmN0bSk7CiAgICAgbV9vcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOworICAg
IC8vIEZJWE1FOiB3ZSBzaG91bGQgd29yayBvdXQgaG93IHRvIGdldCB0aGUgdHJ1ZSAoaGludGVk
KSBleHRlbnRzIGZyb20gY2Fpcm8gaW5zdGVhZCBvZgorICAgIC8vIGRpc2FibGluZyBoaW50aW5n
LiBTZWUgaHR0cDovL2xpc3RzLmNhaXJvZ3JhcGhpY3Mub3JnL2FyY2hpdmVzL2NhaXJvLzIwMDct
U2VwdGVtYmVyLzAxMTM2Ni5odG1sCisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0
eWxlKG1fb3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKKyAgICBjYWlyb19mb250X29w
dGlvbnNfc2V0X2FudGlhbGlhcyhtX29wdGlvbnMsIENBSVJPX0FOVElBTElBU19TVUJQSVhFTCk7
CiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKG1fZm9udEZhY2Us
IG1fZm9udE1hdHJpeCwgJmN0bSwgbV9vcHRpb25zKTsKIAogZnJlZVBhdHRlcm46CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCShyZXZpc2lv
biAyNTQxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2
YXRlLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEyMSw4ICsxMjIsMTcgQEAgdm9pZCBQbGF0Zm9ybVNjcm9s
bGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSk7CiAKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHBhcmVudCgpKTsKKyAgICAKKyAgICBBU1NFUlQoZnJhbWVWaWV3LT5jb250YWluaW5nV2luZG93
KCkpOworCisgICAgV2ViS2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRShmcmFtZVZp
ZXctPmNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VE
YXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCisgICAgZG91YmxlIHNj
YWxlRmFjdG9yID0gcGFnZURhdGEtPnNjYWxlRmFjdG9yOworCiAgICAgSW50UmVjdCB3aW5kb3dS
ZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgp
LmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKLSAgICBHdGtBbGxvY2F0aW9u
IGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVj
dC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QueCgpICogc2NhbGVGYWN0b3Ip
LCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QueSgpICogc2NhbGVGYWN0b3IpLCAKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LndpZHRoKCkgKiBzY2FsZUZhY3RvciksIHN0
YXRpY19jYXN0PGludD4od2luZG93UmVjdC5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9OwogICAg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCShyZXZpc2lvbiAy
NTQxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgwLDExICsxODAsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRD
aGVja2JveChSZW5kZQogewogICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8g
ZG8/CiAgICAgR3RrV2lkZ2V0KiBjaGVja2JveCA9IGd0a0NoZWNrYm94KCk7Ci0gICAgSW50UG9p
bnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAg
IEludFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNsYXRlUmVjdChyZWN0KTsKICAg
ICBndGtfcGFpbnRfY2hlY2soY2hlY2tib3gtPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxl
KCksCiAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFk
b3cobyksCiAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGNoZWNrYm94LCAiY2hlY2tidXR0b24i
LAotICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBzY2FsZWRSZWN0LngoKSwgc2NhbGVk
UmVjdC55KCksIHNjYWxlZFJlY3Qud2lkdGgoKSwgc2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMTMsMjQgKzIxMywyNCBAQCBib29sIFJlbmRlclRoZW1l
R2RrOjpwYWludFJhZGlvKFJlbmRlck9iCiB7IAogICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmln
aHQgdGhpbmcgdG8gZG8/CiAgICAgR3RrV2lkZ2V0KiByYWRpbyA9IGd0a1JhZGlvQnV0dG9uKCk7
Ci0gICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0
aW9uKCkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNsYXRlUmVj
dChyZWN0KTsKICAgICBndGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5zdHlsZSwgaS5jb250ZXh0LT5n
ZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRl
dGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHJhZGlvLCAicmFk
aW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFJlY3Qu
eCgpLCBzY2FsZWRSZWN0LnkoKSwgc2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdo
dCgpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcmVjdCkgCi17IAorewogICAgIC8vIEZJWE1FOiBzaG91bGQgdXNl
IHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hvdWxkIGhvbm9yIHRoZSBzdGF0ZSBhcyB3ZWxs
CiAgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKLSAgICBJbnRQb2ludCBwb3Mg
PSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50UmVj
dCBzY2FsZWRSZWN0ID0gaS5jb250ZXh0LT50cmFuc2xhdGVSZWN0KHJlY3QpOwogICAgIGd0a19w
YWludF9ib3goYnV0dG9uLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAg
ICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAg
ICAgICAgICAgICAgIE5VTEwsIGJ1dHRvbiwgImJ1dHRvbiIsCi0gICAgICAgICAgICAgICAgICBw
b3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgICAgICAgc2NhbGVkUmVjdC54KCksIHNjYWxlZFJlY3QueSgpLCBzY2FsZWRSZWN0LndpZHRo
KCksIHNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAJKHJldmlzaW9uIDI1NDExKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDEwIEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAKKworI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtw
cml2YXRlLmgiCisKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgog
CkBAIC0xMjgsOCArMTMyLDE3IEBAIHZvaWQgU2Nyb2xsVmlld1Njcm9sbGJhcjo6Z2VvbWV0cnlD
aGFuZ2UKICAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwogCiAgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAg
ICBBU1NFUlQoZnJhbWVWaWV3LT5jb250YWluaW5nV2luZG93KCkpOworCisgICAgV2ViS2l0R3Rr
UGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRShmcmFtZVZpZXctPmNvbnRhaW5pbmdXaW5kb3co
KSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdF
X0dFVF9QUklWQVRFKHBhZ2UpOworCisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gcGFnZURhdGEt
PnNjYWxlRmFjdG9yOworCiAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZp
ZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkp
LCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3
aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBz
dGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QueCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2Fz
dDxpbnQ+KHdpbmRvd1JlY3QueSgpICogc2NhbGVGYWN0b3IpLCAKKyAgICAgICAgc3RhdGljX2Nh
c3Q8aW50Pih3aW5kb3dSZWN0LndpZHRoKCkgKiBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGlu
dD4od2luZG93UmVjdC5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9OwogICAgIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogfQogCkBAIC0yODcsMTcg
KzMwMCwyNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldEd0a0FkanVzdG1lbnRzKEd0a0FkCiAKIHZv
aWQgU2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
Ym9vbCBub3cpCiB7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKICAgICBpZiAo
dXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFdlYktpdEd0a1Bh
Z2UqIHBhZ2UgPSBXRUJLSVRfR1RLX1BBR0UoY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBXZWJL
aXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUo
cGFnZSk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBwYWdlRGF0YS0+c2NhbGVGYWN0b3I7
CisKICAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVj
dC5sb2NhdGlvbigpKTsKICAgICBJbnRSZWN0IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRl
UmVjdDsKICAgICBjb250YWluaW5nV2luZG93UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7
CisgICAgY29udGFpbmluZ1dpbmRvd1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogCiAgICAgR2Rr
UmVjdGFuZ2xlIHJlY3QgPSB7IGNvbnRhaW5pbmdXaW5kb3dSZWN0LngoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRvd1JlY3QueSgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC53aWR0aCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC5oZWlnaHQoKSB9OworCiAgICAgR2RrV2lu
ZG93KiB3aW5kb3cgPSBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdzsKIAog
ICAgIGlmICh3aW5kb3cpCkBAIC0zMTQsNyArMzM2LDE0IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBk
YXRlKCkKIHsKICAgICBBU1NFUlQoY29udGFpbmluZ1dpbmRvdygpKTsKIAotICAgIEdka1JlY3Rh
bmdsZSByZWN0ID0geyAwLCAwLCBtX2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpLCBtX2RhdGEt
PmNvbnRlbnRzU2l6ZS5oZWlnaHQoKSB9OworICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2UgPSBXRUJL
SVRfR1RLX1BBR0UoY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0
ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKKyAgICBk
b3VibGUgc2NhbGVGYWN0b3IgPSBwYWdlRGF0YS0+c2NhbGVGYWN0b3I7CisKKyAgICBHZGtSZWN0
YW5nbGUgcmVjdCA9IHsgc3RhdGljX2Nhc3Q8aW50PihmcmFtZUdlb21ldHJ5KCkueCgpICogc2Nh
bGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lR2VvbWV0cnkoKS55KCkgKiBzY2FsZUZh
Y3RvciksIAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS0+Y29udGVudHNTaXplLndp
ZHRoKCkgKiBzY2FsZUZhY3RvciksICBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS0+Y29udGVudHNT
aXplLmhlaWdodCgpICogc2NhbGVGYWN0b3IpIH07CisKICAgICBnZGtfd2luZG93X2ludmFsaWRh
dGVfcmVjdChHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgJnJlY3QsIHRy
dWUpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDI1NDExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRHZGtFeHBvc2VFdmVudChHZGtFdmVudEV4cG9z
ZSopOwogICAgICAgICBHZGtEcmF3YWJsZSogZ2RrRHJhd2FibGUoKSBjb25zdDsKICAgICAgICAg
R2RrRXZlbnRFeHBvc2UqIGdka0V4cG9zZUV2ZW50KCkgY29uc3Q7Ci0gICAgICAgIEludFBvaW50
IHRyYW5zbGF0ZVBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIEludFJlY3Qg
dHJhbnNsYXRlUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIAogICAgIHByaXZh
dGU6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gMjU0MTEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODE5LDE2ICs4MTksMjMgQEAgR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6
Z2RrRHJhd2FibAogICAgIHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRv
dyk7CiB9CiAKLUludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjYWlyb19tYXRyaXhfdCB0
bTsKICAgICBjYWlyb19nZXRfbWF0cml4KG1fZGF0YS0+Y3IsICZ0bSk7Ci0gICAgZG91YmxlIHgg
PSBwb2ludC54KCk7Ci0gICAgZG91YmxlIHkgPSBwb2ludC55KCk7CisKKworICAgIGRvdWJsZSB4
ID0gcmVjdC54KCk7CisgICAgZG91YmxlIHkgPSByZWN0LnkoKTsKKyAgICBkb3VibGUgd2lkdGgg
PSByZWN0LndpZHRoKCk7CisgICAgZG91YmxlIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CiAKICAg
ICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZ0bSwgJngsICZ5KTsKLSAgICByZXR1cm4g
SW50UG9pbnQoeCwgeSk7CisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0YW5jZSgmdG0s
ICZ3aWR0aCwmIGhlaWdodCk7CisKKyAgICByZXR1cm4gSW50UmVjdChzdGF0aWNfY2FzdDxpbnQ+
KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGlj
X2Nhc3Q8aW50PihoZWlnaHQpKTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJv
LmNwcAkocmV2aXNpb24gMjU0MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsMTEgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIFRlc3QgdXNpbmcgZXhh
bXBsZSBzaXRlIGF0IGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxl
eHNwaXJhbC9kZW1vLmh0bWwKICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19w
YXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShpbWFnZSk7CiAKLSAgICAvLyBUbyBhdm9pZCB0aGUg
dW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZQotICAgIC8vIENBSVJPX0ZJ
TFRFUl9ORUFSRVNUIG5vdywgYnV0IHRoZSByZWFsIGZpeCB3aWxsIGJlIHRvIGhhdmUKLSAgICAv
LyBDQUlST19FWFRFTkRfUEFEIGltcGxlbWVudGVkIGZvciBzdXJmYWNlcyBpbiBDYWlybyBhbGxv
d2luZyB1cyB0byBzdGlsbAotICAgIC8vIHVzZSBiaWxpbmVhciBmaWx0ZXJpbmcKLSAgICBjYWly
b19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX05FQVJFU1QpOworICAg
IC8vIFRvIGF2b2lkIHRoZSB1bndhbnRlZCBncmFkaWVudCBlZmZlY3QgKCMxNDAxNykgd2UgdXNl
IENBSVJPX0VYVEVORF9SRVBFQVQKKyAgICAvLyBmb3Igbm93IGJ1dCBpbiB0aGUgZnV0dXJlIHdl
J2QgbGlrZSB0byB1c2UgQ0FJUk9fRVhURU5EX1BBRCBidXQgaXQgaXMgbm90IGF2YWlsYWJsZQor
ICAgIC8vIGluIGNhaXJvIHlldC4gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiB1c2UgQ0FJUk9fRklM
VEVSX0JFU1QgaW5zdGVhZCBvZiBDQUlST19GSUxURVJfTkVBUkVTVAorICAgIGNhaXJvX3BhdHRl
cm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKKyAgICBjYWlyb19w
YXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX0JFU1QpOwogCiAgICAgZmxv
YXQgc2NhbGVYID0gc3JjUmVjdC53aWR0aCgpIC8gZHN0UmVjdC53aWR0aCgpOwogICAgIGZsb2F0
IHNjYWxlWSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkc3RSZWN0LmhlaWdodCgpOwpAQCAtMTIwLDcg
KzEyMCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICBj
YWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CiAK
ICAgICAvLyBXb3JrYXJvdW5kIHRvIGF2b2lkIHRoZSB1bndhbnRlZCBncmFkaWVudCBlZmZlY3Qg
KCMxNDAxNykKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklM
VEVSX05FQVJFU1QpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcihwYXR0ZXJuLCBDQUlS
T19GSUxURVJfQkVTVCk7CiAKICAgICBjYWlyb19tYXRyaXhfdCBwYXR0ZXJuX21hdHJpeCA9IGNh
aXJvX21hdHJpeF90KHBhdHRlcm5UcmFuc2Zvcm0pOwogICAgIGNhaXJvX21hdHJpeF90IHBoYXNl
X21hdHJpeCA9IHsxLCAwLCAwLCAxLCBwaGFzZS54KCksIHBoYXNlLnkoKX07CkluZGV4OiBXZWJL
aXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2
aXNpb24gMjU0MTEpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE5IEBACisyMDA3LTA5LTA2ICBHZW9yZ2UgV3JpZ2h0ICA8Z2VvcmdlLndyaWdodEBj
b2xsYWJvcmEuY28udWs+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTgKKyAg
ICAgICAgRnVsbCBwYWdlIHpvb21pbmcgc3VwcG9ydAorCisgICAgICAgIEluaXRpYWwgaW1wbGVt
ZW50YXRpb24gb2Ygem9vbWluZyBzdXBwb3J0IGZvciB0aGUgR1RLL0NhaXJvCisgICAgICAgIHBv
cnQuCisKKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrcGFnZS5jcHA6CisgICAgICAgICogQXBpL3dl
YmtpdGd0a3BhZ2UuaDoKKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrcHJpdmF0ZS5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudDo6c2NhbGVGYWN0b3IpOgorCiAyMDA3LTA5LTAxICBPbGl2ZXIgSHVudCAg
PG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtLgpJbmRleDogV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI1NDExKQorKysgV2ViS2l0L2d0ay9BcGkv
d2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDMxIEBACiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyB2
b2lkIHdlYmtpdF90cmFuc2Zvcm1fY29vcmRpbmF0ZXMoR3RrV2lkZ2V0KiB3aWRnZXQsIGJvb2wg
aW52ZXJ0ZWQsIGRvdWJsZSogeCwgZG91YmxlKiB5KQoreworICAgIFdlYktpdEd0a1BhZ2UqIHBh
Z2UgPSBXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSog
cGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKKyAgICBkb3Vi
bGUgZmFjdG9yID0gcGFnZURhdGEtPnNjYWxlRmFjdG9yOworCisgICAgaWYgKGludmVydGVkKQor
ICAgICAgICBmYWN0b3IgPSAxIC8gZmFjdG9yOworCisgICAgKnggKj0gZmFjdG9yOworICAgICp5
ICo9IGZhY3RvcjsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3RyYW5zZm9ybV9jb29yZGluYXRl
cyhHdGtXaWRnZXQqIHdpZGdldCwgYm9vbCBpbnZlcnRlZCwgaW50KiB4LCBpbnQqIHkpCit7Cisg
ICAgZG91YmxlIGR4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPigqeCk7CisgICAgZG91YmxlIGR5ID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPigqeSk7CisKKyAgICB3ZWJraXRfdHJhbnNmb3JtX2Nvb3JkaW5h
dGVzKHdpZGdldCwgaW52ZXJ0ZWQsICZkeCwgJmR5KTsKKworICAgICp4ID0gc3RhdGljX2Nhc3Q8
aW50PihkeCk7CisgICAgKnkgPSBzdGF0aWNfY2FzdDxpbnQ+KGR5KTsKK30KKwogZXh0ZXJuICJD
IiB7CiAKIGVudW0gewpAQCAtNzQsMTQgKzk5LDI1IEBAIEdfREVGSU5FX1RZUEUoV2ViS2l0R3Rr
UGFnZSwgd2Via2l0X2d0a18KIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2VfZXhwb3Nl
X2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSogZXZlbnQpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRn
ZXQpKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19Q
QUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKTsKKwogICAgIEdka1JlY3Rh
bmdsZSBjbGlwOwogICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPnJlZ2lvbiwgJmNs
aXApOworCisgICAgd2Via2l0X3RyYW5zZm9ybV9jb29yZGluYXRlcyh3aWRnZXQsIHRydWUsICZj
bGlwLngsICZjbGlwLnkpOworICAgIHdlYmtpdF90cmFuc2Zvcm1fY29vcmRpbmF0ZXMod2lkZ2V0
LCB0cnVlLCAmY2xpcC53aWR0aCwgJmNsaXAuaGVpZ2h0KTsKKwogICAgIGNhaXJvX3QqIGNyID0g
Z2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KTsKICAgICBHcmFwaGljc0NvbnRleHQgY3R4
KGNyKTsKICAgICBjdHguc2V0R2RrRXhwb3NlRXZlbnQoZXZlbnQpOworICAgIGN0eC5zY2FsZShG
bG9hdFNpemUocGFnZURhdGEtPnNjYWxlRmFjdG9yLCBwYWdlRGF0YS0+c2NhbGVGYWN0b3IpKTsK
KwogICAgIGlmIChmcmFtZS0+cmVuZGVyZXIoKSkgewogICAgICAgICBmcmFtZS0+dmlldygpLT5s
YXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOworICAgICAgICAvLyBQYWludCBhbiBleHRyYSAyIHBp
eGVscyBhcm91bmQgdGhlIGNsaXByZWN0IHRvIGFjY29tbW9kYXRlIHJvdW5kaW5nIGVycm9ycyBp
biB0aGUgc2NhbGUKKyAgICAgICAgLy8gZmFjdG9yIGFuZCBhbnRpYWxpYXNpbmcgYXJ0aWZhY3Rz
CiAgICAgICAgIEludFJlY3QgcmVjdChjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5o
ZWlnaHQpOworICAgICAgICByZWN0LmluZmxhdGUoMik7CiAgICAgICAgIGZyYW1lLT52aWV3KCkt
PnBhaW50KCZjdHgsIHJlY3QpOwogICAgIH0KICAgICBjYWlyb19kZXN0cm95KGNyKTsKQEAgLTEw
MCw2ICsxMzYsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX2J1dHRvbl9lCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFH
RSh3aWRnZXQpKSk7CiAKKyAgICB3ZWJraXRfdHJhbnNmb3JtX2Nvb3JkaW5hdGVzKHdpZGdldCwg
dHJ1ZSwgJmV2ZW50LT54LCAmZXZlbnQtPnkpOworCiAgICAgaWYgKGV2ZW50LT50eXBlID09IEdE
S19CVVRUT05fUkVMRUFTRSkKICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKICAgICBlbHNlCkBA
IC0xMTEsNiArMTQ5LDkgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9idXR0b25f
ZQogc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0
KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKworICAgIHdl
YmtpdF90cmFuc2Zvcm1fY29vcmRpbmF0ZXMod2lkZ2V0LCB0cnVlLCAmZXZlbnQtPngsICZldmVu
dC0+eSk7CisKICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoUGxhdGZvcm1N
b3VzZUV2ZW50KGV2ZW50KSk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtMTE5LDYgKzE2MCw4
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2UKIHsKICAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkp
KTsKIAorICAgIHdlYmtpdF90cmFuc2Zvcm1fY29vcmRpbmF0ZXMod2lkZ2V0LCB0cnVlLCAmZXZl
bnQtPngsICZldmVudC0+eSk7CisKICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChl
dmVudCk7CiAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVs
RXZlbnQpOwogICAgIHJldHVybiBGQUxTRTsKQEAgLTEyOCw2ICsxNzEsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0CiB7CiAgICAgR1RLX1dJREdFVF9DTEFTUyh3
ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsYWxsb2Nh
dGlvbik7CiAKKyAgICB3ZWJraXRfdHJhbnNmb3JtX2Nvb3JkaW5hdGVzKHdpZGdldCwgdHJ1ZSwg
JmFsbG9jYXRpb24tPndpZHRoLCAmYWxsb2NhdGlvbi0+aGVpZ2h0KTsKICAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKICAg
ICBmcmFtZS0+dmlldygpLT5yZXNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhl
aWdodCk7CiAgICAgZnJhbWUtPmZvcmNlTGF5b3V0KCk7CkBAIC00MjEsNiArNDY1LDcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2luaXQoV2ViS2l0RwogewogICAgIFdlYktpdEd0a1Bh
Z2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRf
R1RLX1BBR0UocGFnZSkpOwogICAgIHBhZ2VEYXRhLT5wYWdlID0gbmV3IFBhZ2UobmV3IFdlYktp
dDo6Q2hyb21lQ2xpZW50KHBhZ2UpLCBuZXcgV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudCwgbmV3
IFdlYktpdDo6RWRpdG9yQ2xpZW50KHBhZ2UpLCBuZXcgV2ViS2l0OjpEcmFnQ2xpZW50LCBuZXcg
V2ViS2l0OjpJbnNwZWN0b3JDbGllbnQpOworICAgIHBhZ2VEYXRhLT5zY2FsZUZhY3RvciA9IDEu
MDsKIAogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2VEYXRhLT5wYWdlLT5zZXR0aW5ncygp
OwogICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CkBAIC01
MjgsNiArNTczLDMzIEBAIHZvaWQgd2Via2l0X2d0a19wYWdlX3N0b3BfbG9hZGluZyhXZWJLaXQK
ICAgICAgICAgCiB9CiAKK3ZvaWQgd2Via2l0X2d0a19wYWdlX3NldF9zY2FsZV9mYWN0b3IoV2Vi
S2l0R3RrUGFnZSogcGFnZSwgZG91YmxlIGZhY3RvcikKK3sKKyAgICBXZWJLaXRHdGtQYWdlUHJp
dmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisgICAg
V2ViS2l0R3RrRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9Q
UklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBmcmFtZURhdGEtPmZyYW1lLT52aWV3KCk7CisKKyAgICBpbnQgd2lkdGggPSBmcmFtZVZpZXct
PmZyYW1lR2VvbWV0cnkoKS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBmcmFtZVZpZXctPmZy
YW1lR2VvbWV0cnkoKS5oZWlnaHQoKTsKKworICAgIHdlYmtpdF90cmFuc2Zvcm1fY29vcmRpbmF0
ZXMoR1RLX1dJREdFVChwYWdlKSwgZmFsc2UsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBwYWdl
RGF0YS0+c2NhbGVGYWN0b3IgPSBmYWN0b3I7CisKKyAgICB3ZWJraXRfdHJhbnNmb3JtX2Nvb3Jk
aW5hdGVzKEdUS19XSURHRVQocGFnZSksIHRydWUsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBm
cmFtZVZpZXctPnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBmcmFtZVZpZXctPnVwZGF0ZSgp
OworfQorCitkb3VibGUgd2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3IoV2ViS2l0R3Rr
UGFnZSogcGFnZSkKK3sKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJL
SVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKKyAgICByZXR1cm4gcGFnZURhdGEtPnNj
YWxlRmFjdG9yOworfQorCiBXZWJLaXRHdGtGcmFtZSogd2Via2l0X2d0a19wYWdlX2dldF9tYWlu
X2ZyYW1lKFdlYktpdEd0a1BhZ2UqIHBhZ2UpCiB7CiAgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUq
IHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwpJbmRleDogV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjU0MTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJr
aXRndGtwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsMTIgQEAgd2Via2l0X2d0
a19wYWdlX2xvYWRfc3RyaW5nIChXZWJLaXRHdGtQYQogV0VCS0lUX0dUS19BUEkgdm9pZAogd2Vi
a2l0X2d0a19wYWdlX2xvYWRfaHRtbF9zdHJpbmcgKFdlYktpdEd0a1BhZ2UqIHBhZ2UsIGNvbnN0
IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogYmFzZV91cmwpOwogCitXRUJLSVRfR1RLX0FQ
SSB2b2lkCit3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0R3RrUGFnZSog
cGFnZSwgZG91YmxlIGZhY3Rvcik7CisKK1dFQktJVF9HVEtfQVBJIGRvdWJsZQord2Via2l0X2d0
a19wYWdlX2dldF9zY2FsZV9mYWN0b3IgKFdlYktpdEd0a1BhZ2UqIHBhZ2UpOworCiBXRUJLSVRf
R1RLX0FQSSBXZWJLaXRHdGtGcmFtZSoKIHdlYmtpdF9ndGtfcGFnZV9nZXRfbWFpbl9mcmFtZSAo
V2ViS2l0R3RrUGFnZSogcGFnZSk7CiAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3By
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJ
KHJldmlzaW9uIDI1NDExKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJD
b3JlOjpTdHJpbmcqIHVzZXJBZ2VudDsKIAogICAgICAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNo
aWxkcmVuOworCisgICAgICAgIGRvdWJsZSBzY2FsZUZhY3RvcjsgCiAgICAgfTsKICAgICAKICAg
ICAjZGVmaW5lIFdFQktJVF9HVEtfRlJBTUVfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfR1RLX1RZUEVfRlJBTUUsIFdlYktpdEd0
a0ZyYW1lUHJpdmF0ZSkpCg==
</data>
<flag name="review"
          id="6821"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16259</attachid>
            <date>2007-09-11 09:55:19 -0700</date>
            <delta_ts>2007-09-20 05:52:37 -0700</delta_ts>
            <desc>Moved implementation from WebKit to WebCore</desc>
            <filename>zooming-20070911.patch</filename>
            <type>text/plain</type>
            <size>25023</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTQ5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMDctMDktMTEgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0
QGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAor
ICAgICAgICBGdWxsIHBhZ2Ugem9vbWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiB6b29taW5nIHN1cHBvcnQuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVT
VCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2FsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzY2FsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjYWxlRmFj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjYWxlRmFjdG9yKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwOgorICAgICAgICAoUGxhdGZvcm1TY3Jv
bGxiYXI6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRlclRo
ZW1lR2RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludENoZWNr
Ym94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlld1Njcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRl
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xh
dGVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsVmll
d1F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L1Njcm9sbFZp
ZXdXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KToKKwog
MjAwNy0wOS0xMSAgU3ZlbiBIZXJ6YmVyZyAgPHN2ZW5AaW1lbmRpby5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFyay4KSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyNTQ5
MikKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MDEsMTEgKzgwMSwxMyBAQCBDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3Qg
CiAgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6Omhh
bmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
Citib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudCA9
IHNjYWxlTW91c2VFdmVudChldmVudCk7CisKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0
b3IobV9mcmFtZS0+dmlldygpKTsKIAogICAgIG1fbW91c2VQcmVzc2VkID0gdHJ1ZTsKQEAgLTkx
OCwxNSArOTIwLDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURvdWJsZUNsaWMK
IAogYm9vbCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldmVudCkKIHsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudCA9IHNjYWxlTW91
c2VFdmVudChldmVudCk7CisKICAgICBIaXRUZXN0UmVzdWx0IGhvdmVyZWROb2RlID0gSGl0VGVz
dFJlc3VsdChJbnRQb2ludCgpKTsKLSAgICBib29sIHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2
ZW50KGV2ZW50LCAmaG92ZXJlZE5vZGUpOworICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91c2VN
b3ZlRXZlbnQobW91c2VFdmVudCwgJmhvdmVyZWROb2RlKTsKIAogICAgIFBhZ2UqIHBhZ2UgPSBt
X2ZyYW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gcmVzdWx0Owog
CiAgICAgaG92ZXJlZE5vZGUuc2V0VG9Ob25TaGFkb3dBbmNlc3RvcigpOwotICAgIHBhZ2UtPmNo
cm9tZSgpLT5tb3VzZURpZE1vdmVPdmVyRWxlbWVudChob3ZlcmVkTm9kZSwgZXZlbnQubW9kaWZp
ZXJGbGFncygpKTsKKyAgICBwYWdlLT5jaHJvbWUoKS0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
aG92ZXJlZE5vZGUsIG1vdXNlRXZlbnQubW9kaWZpZXJGbGFncygpKTsKICAgICBwYWdlLT5jaHJv
bWUoKS0+c2V0VG9vbFRpcChob3ZlcmVkTm9kZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTEwMjYsMTMgKzEwMzAsMTUgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmludmFsaWRhdGVDbGljaygp
CiAgICAgbV9jbGlja05vZGUgPSAwOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFt
ZS0+dmlldygpKTsKIAorICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2ZW50ID0gc2NhbGVN
b3VzZUV2ZW50KGV2ZW50KTsKKwogICAgIG1fbW91c2VQcmVzc2VkID0gZmFsc2U7CiAgICAgbV9j
dXJyZW50TW91c2VQb3NpdGlvbiA9IG1vdXNlRXZlbnQucG9zKCk7CiAKQEAgLTEyNzcsNyArMTI4
Myw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY28KICAgICByZXR1
cm4gc3dhbGxvd0V2ZW50OwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVu
dChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxF
dmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogewogICAgIERvY3VtZW50KiBkb2MgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jKQpAQCAtMTI4Nyw2ICsxMjkzLDkgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdAogICAgIGlmICghZG9jUmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50
IGUgPSBzY2FsZVdoZWVsRXZlbnQoZXZlbnQpOworCiAgICAgSW50UG9pbnQgdlBvaW50ID0gbV9m
cmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGUucG9zKCkpOwogCiAgICAgSGl0VGVzdFJl
cXVlc3QgcmVxdWVzdCh0cnVlLCBmYWxzZSk7CkBAIC0xNzQ5LDQgKzE3NTgsMjkgQEAgdm9pZCBF
dmVudEhhbmRsZXI6OmRlZmF1bHRUYWJFdmVudEhhbmRsZQogICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKIH0KIAorUGxhdGZvcm1Nb3VzZUV2ZW50IEV2ZW50SGFuZGxlcjo6c2Nh
bGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKK3sKKyAg
ICBBU1NFUlQobV9mcmFtZS0+dmlldygpKTsKKworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IG1f
ZnJhbWUtPnZpZXcoKS0+c2NhbGVGYWN0b3IoKTsKKworICAgIEludFBvaW50IHNjYWxlZFBvcyhz
dGF0aWNfY2FzdDxpbnQ+KG1vdXNlRXZlbnQueCgpIC8gc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2Fz
dDxpbnQ+KG1vdXNlRXZlbnQueSgpIC8gc2NhbGVGYWN0b3IpKTsKKworICAgIHJldHVybiBQbGF0
Zm9ybU1vdXNlRXZlbnQoc2NhbGVkUG9zLCBJbnRQb2ludChtb3VzZUV2ZW50Lmdsb2JhbFgoKSwg
bW91c2VFdmVudC5nbG9iYWxZKCkpLCBtb3VzZUV2ZW50LmJ1dHRvbigpLCBtb3VzZUV2ZW50LmV2
ZW50VHlwZSgpLAorICAgICAgICAgICAgbW91c2VFdmVudC5jbGlja0NvdW50KCksIG1vdXNlRXZl
bnQuc2hpZnRLZXkoKSwgbW91c2VFdmVudC5jdHJsS2V5KCksIG1vdXNlRXZlbnQuYWx0S2V5KCks
IG1vdXNlRXZlbnQubWV0YUtleSgpLCBtb3VzZUV2ZW50LnRpbWVzdGFtcCgpKTsKK30KKworUGxh
dGZvcm1XaGVlbEV2ZW50IEV2ZW50SGFuZGxlcjo6c2NhbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBBU1NFUlQobV9mcmFtZS0+dmlldygp
KTsKKworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IG1fZnJhbWUtPnZpZXcoKS0+c2NhbGVGYWN0
b3IoKTsKKworICAgIEludFBvaW50IHNjYWxlZFBvcyhzdGF0aWNfY2FzdDxpbnQ+KHdoZWVsRXZl
bnQueCgpIC8gc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdoZWVsRXZlbnQueSgpIC8g
c2NhbGVGYWN0b3IpKTsKKworICAgIHJldHVybiBQbGF0Zm9ybVdoZWVsRXZlbnQoc2NhbGVkUG9z
LCBJbnRQb2ludCh3aGVlbEV2ZW50Lmdsb2JhbFgoKSwgd2hlZWxFdmVudC5nbG9iYWxZKCkpLCB3
aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRhWSgpLAorICAgICAgICAgICAgd2hl
ZWxFdmVudC5jb250aW51b3VzRGVsdGFYKCksIHdoZWVsRXZlbnQuY29udGludW91c0RlbHRhWSgp
LCB3aGVlbEV2ZW50LmlzQ29udGludW91cygpLCB3aGVlbEV2ZW50LmlzQWNjZXB0ZWQoKSwgCisg
ICAgICAgICAgICB3aGVlbEV2ZW50LnNoaWZ0S2V5KCksIHdoZWVsRXZlbnQuY3RybEtleSgpLCB3
aGVlbEV2ZW50LmFsdEtleSgpLCB3aGVlbEV2ZW50Lm1ldGFLZXkoKSk7Cit9CisKIH0KSW5kZXg6
IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDI1NDkyKQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBmb2N1c0RvY3VtZW50VmlldygpOwogCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHNjYWxl
TW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICBQbGF0Zm9ybVdoZWVs
RXZlbnQgc2NhbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4gY3VycmVudEtleWJv
YXJkRXZlbnQoKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVu
dC5oCShyZXZpc2lvbiAyNTQ5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudCB7CiAgICAgcHVibGljOgorICAgICAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQoY29uc3QgSW50UG9pbnQmIHBvcywgY29uc3QgSW50UG9pbnQm
IGdsb2JhbFBvcywgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVksIAorICAgICAgICAgICAgICAg
IGZsb2F0IGNvbnRpbnVvdXNEZWx0YVgsIGZsb2F0IGNvbnRpbnVvdXNEZWx0YVksIGJvb2wgaXND
b250aW51b3VzLCBib29sIGlzQWNjZXB0ZWQsIAorICAgICAgICAgICAgICAgIGJvb2wgc2hpZnQs
IGJvb2wgY3RybCwgYm9vbCBhbHQsIGJvb2wgbWV0YSkKKyAgICAgICAgICAgIDogbV9wb3NpdGlv
bihwb3MpLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvcyksIG1fZGVsdGFYKGRlbHRhWCksIG1f
ZGVsdGFZKGRlbHRhWSkKKyAgICAgICAgICAgICwgbV9jb250aW51b3VzRGVsdGFYKGNvbnRpbnVv
dXNEZWx0YVgpCisgICAgICAgICAgICAsIG1fY29udGludW91c0RlbHRhWShjb250aW51b3VzRGVs
dGFZKQorICAgICAgICAgICAgLCBtX2lzQ29udGludW91cyhpc0NvbnRpbnVvdXMpCisgICAgICAg
ICAgICAsIG1faXNBY2NlcHRlZChpc0FjY2VwdGVkKQorICAgICAgICAgICAgLCBtX3NoaWZ0S2V5
KHNoaWZ0KQorICAgICAgICAgICAgLCBtX2N0cmxLZXkoY3RybCkKKyAgICAgICAgICAgICwgbV9h
bHRLZXkoYWx0KQorICAgICAgICAgICAgLCBtX21ldGFLZXkobWV0YSkKKyAgICAgICAgeworICAg
ICAgICB9CisKICAgICAgICAgY29uc3QgSW50UG9pbnQmIHBvcygpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KICAgICAgICAgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvcygpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJl
dmlzaW9uIDI1NDkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDEwICs3OCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgYWRkQ2hpbGQoV2lkZ2V0Kik7CiAgICAgICAgIHZvaWQgcmVtb3ZlQ2hpbGQoV2lkZ2V0Kik7
CiAKKyAgICAgICAgdm9pZCByZXNpemUoaW50IHcsIGludCBoKSB7IFdpZGdldDo6cmVzaXplKHN0
YXRpY19jYXN0PGludD4odyAvIHNjYWxlRmFjdG9yKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGggLyBz
Y2FsZUZhY3RvcigpKSk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZUNvbnRlbnRzKGlu
dCB3LCBpbnQgaCk7CiAgICAgICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgSW50UmVjdCYs
IGJvb2wgbm93ID0gZmFsc2UpOwogICAgICAgICB2b2lkIHVwZGF0ZSgpOwogCisgICAgICAgIHZv
aWQgc2V0U2NhbGVGYWN0b3IoZG91YmxlIGZhY3RvcikgeyBtX3NjYWxlRmFjdG9yID0gZmFjdG9y
OyB9CisgICAgICAgIGRvdWJsZSBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVG
YWN0b3I7IH0KKwogICAgICAgICAvLyBFdmVudCBjb29yZGluYXRlcyBhcmUgYXNzdW1lZCB0byBi
ZSBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiBhIHdpbmRvdyB0aGF0IGNvbnRhaW5zCiAgICAg
ICAgIC8vIHRoZSBlbnRpcmUgd2lkZ2V0IGhpZXJhcmNoeS4gIEl0IGlzIHVwIHRvIHRoZSBwbGF0
Zm9ybSB0byBkZWNpZGUgd2hhdCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uCiAgICAgICAgIC8vIG9m
IGNvbnRhaW5pbmcgd2luZG93IGlzLiAgKEZvciBleGFtcGxlIG9uIE1hYyBpdCBpcyB0aGUgY29u
dGFpbmluZyBOU1dpbmRvdy4pCkBAIC0xNDYsNiArMTUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBJbnRTaXplIG1heGltdW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgY2xhc3Mg
U2Nyb2xsVmlld1ByaXZhdGU7CiAgICAgICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7Cisg
ICAgICAgIGRvdWJsZSBtX3NjYWxlRmFjdG9yOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHREsp
CkBAIC0xNzMsNiArMTc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGNsYXNz
IFNjcm9sbFZpZXdQcml2YXRlOwogICAgICAgICBTY3JvbGxWaWV3UHJpdmF0ZSogbV9kYXRhOwor
ICAgICAgICBkb3VibGUgbV9zY2FsZUZhY3RvcjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQp
CkBAIC0yMDUsNiArMjExLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRTaXpl
IG1heGltdW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7
CiAgICAgICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CisgICAgICAgIGRvdWJsZSBtX3Nj
YWxlRmFjdG9yOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Rm9udFBsYXRmb3JtRGF0YUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHAJKHJldmlzaW9uIDI1NDkyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw2ICsxMDQsMTEgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdAog
ICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKGZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpLCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CiAgICAg
Y2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CiAgICAgb3B0aW9ucyA9IGNhaXJvX2Zv
bnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHdvcmsgb3V0IGhv
dyB0byBnZXQgdGhlIHRydWUgKGhpbnRlZCkgZXh0ZW50cyBmcm9tIGNhaXJvIGluc3RlYWQgb2YK
KyAgICAvLyBkaXNhYmxpbmcgaGludGluZy4gU2VlIGh0dHA6Ly9saXN0cy5jYWlyb2dyYXBoaWNz
Lm9yZy9hcmNoaXZlcy9jYWlyby8yMDA3LVNlcHRlbWJlci8wMTEzNjYuaHRtbAorICAgIGNhaXJv
X2ZvbnRfb3B0aW9uc19zZXRfaGludF9zdHlsZShvcHRpb25zLCBDQUlST19ISU5UX1NUWUxFX05P
TkUpOworICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKG9wdGlvbnMsIENBSVJP
X0FOVElBTElBU19TVUJQSVhFTCk7CisKICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRf
Zm9udF9jcmVhdGUoZm9udEZhY2UsIGZvbnRNYXRyaXgsICZjdG0sIG9wdGlvbnMpOwogICAgIGNh
aXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZvbnRGYWNlKTsKICAgICBjYWlyb19mb250X29wdGlvbnNf
ZGVzdHJveShvcHRpb25zKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Ny
b2xsQmFyR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9y
bVNjcm9sbEJhckdkay5jcHAJKHJldmlzaW9uIDI1NDkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAj
aW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTIxLDggKzEy
MiwxMCBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQoCiAgICAgQVNT
RVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKIAogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAgIAogICAgIEludFJlY3Qg
d2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2Vv
bWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0gICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdp
bmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LngoKSAqIGZyYW1l
Vmlldy0+c2NhbGVGYWN0b3IoKSksIHN0YXRpY19jYXN0PGludD4od2luZG93UmVjdC55KCkgKiBm
cmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpLCAKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih3aW5k
b3dSZWN0LndpZHRoKCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpLCBzdGF0aWNfY2FzdDxp
bnQ+KHdpbmRvd1JlY3QuaGVpZ2h0KCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpIH07CiAg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9u
IDI1NDkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODAsMTEgKzE4MCwxMSBAQCBib29sIFJlbmRlclRoZW1lR2RrOjpwYWlu
dENoZWNrYm94KFJlbmRlCiB7CiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0
byBkbz8KICAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKLSAgICBJbnRQ
b2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7Cisg
ICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gaS5jb250ZXh0LT50cmFuc2xhdGVSZWN0KHJlY3QpOwog
ICAgIGd0a19wYWludF9jaGVjayhjaGVja2JveC0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2Fi
bGUoKSwKICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNo
YWRvdyhvKSwKICAgICAgICAgICAgICAgICAgICAgTlVMTCwgY2hlY2tib3gsICJjaGVja2J1dHRv
biIsCi0gICAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgIHNjYWxlZFJlY3QueCgpLCBzY2Fs
ZWRSZWN0LnkoKSwgc2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpKTsKIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIxMywyNCArMjEzLDI0IEBAIGJvb2wgUmVuZGVyVGhl
bWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IKIHsgCiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSBy
aWdodCB0aGluZyB0byBkbz8KICAgICBHdGtXaWRnZXQqIHJhZGlvID0gZ3RrUmFkaW9CdXR0b24o
KTsKLSAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9j
YXRpb24oKSk7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gaS5jb250ZXh0LT50cmFuc2xhdGVS
ZWN0KHJlY3QpOwogICAgIGd0a19wYWludF9vcHRpb24ocmFkaW8tPnN0eWxlLCBpLmNvbnRleHQt
Pmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwg
ZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcmFkaW8sICJy
YWRpb2J1dHRvbiIsCi0gICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgc2NhbGVkUmVj
dC54KCksIHNjYWxlZFJlY3QueSgpLCBzY2FsZWRSZWN0LndpZHRoKCksIHNjYWxlZFJlY3QuaGVp
Z2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lR2RrOjpw
YWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KSAKLXsgCit7CiAgICAgLy8gRklYTUU6IHNob3VsZCB1
c2UgdGhlbWUtYXdhcmUgZHJhd2luZy4gVGhpcyBzaG91bGQgaG9ub3IgdGhlIHN0YXRlIGFzIHdl
bGwKICAgICBHdGtXaWRnZXQqIGJ1dHRvbiA9IGd0a0J1dHRvbigpOwotICAgIEludFBvaW50IHBv
cyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRS
ZWN0IHNjYWxlZFJlY3QgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVJlY3QocmVjdCk7CiAgICAgZ3Rr
X3BhaW50X2JveChidXR0b24tPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAg
ICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAg
ICAgICAgICAgICAgICAgTlVMTCwgYnV0dG9uLCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAg
IHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgICBzY2FsZWRSZWN0LngoKSwgc2NhbGVkUmVjdC55KCksIHNjYWxlZFJlY3Qud2lk
dGgoKSwgc2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjU0OTIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKIAorCisjaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0
a3ByaXZhdGUuaCIKKwogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+
CiAKQEAgLTEyOCw4ICsxMzIsMTAgQEAgdm9pZCBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRy
eUNoYW5nZQogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKwog
ICAgIEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250
YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgp
LnNpemUoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0Lngo
KSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQo
KSB9OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgc3RhdGljX2Nhc3Q8aW50Pih3
aW5kb3dSZWN0LngoKSAqIGZyYW1lVmlldy0+c2NhbGVGYWN0b3IoKSksIHN0YXRpY19jYXN0PGlu
dD4od2luZG93UmVjdC55KCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpLCAKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LndpZHRoKCkgKiBmcmFtZVZpZXctPnNjYWxlRmFj
dG9yKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QuaGVpZ2h0KCkgKiBmcmFtZVZpZXct
PnNjYWxlRmFjdG9yKCkpIH07CiAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdl
dCgpLCAmYWxsb2NhdGlvbik7CiB9CiAKQEAgLTI0MSw2ICsyNDcsNyBAQCBJbnRSZWN0IFNjcm9s
bFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp3CiAKIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQog
ICAgIDogbV9kYXRhKG5ldyBTY3JvbGxWaWV3UHJpdmF0ZSh0aGlzKSkKKyAgICAsIG1fc2NhbGVG
YWN0b3IoMS4wKQoge30KIAogU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQpAQCAtMjg3LDE3ICsy
OTQsMjQgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRHdGtBZGp1c3RtZW50cyhHdGtBZAogCiB2b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJv
b2wgbm93KQogeworICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOworCiAgICAgaWYgKHVw
ZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBXZWJLaXRHdGtQYWdl
KiBwYWdlID0gV0VCS0lUX0dUS19QQUdFKGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgV2ViS2l0
R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBh
Z2UpOworCiAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBjb250ZW50c1RvV2luZG93KHVwZGF0
ZVJlY3QubG9jYXRpb24oKSk7CiAgICAgSW50UmVjdCBjb250YWluaW5nV2luZG93UmVjdCA9IHVw
ZGF0ZVJlY3Q7CiAgICAgY29udGFpbmluZ1dpbmRvd1JlY3Quc2V0TG9jYXRpb24od2luZG93UG9p
bnQpOworICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LnNjYWxlKG1fc2NhbGVGYWN0b3IpOwogCiAg
ICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IGNvbnRhaW5pbmdXaW5kb3dSZWN0LngoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRvd1JlY3QueSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC53aWR0aCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC5oZWlnaHQoKSB9OworCiAgICAg
R2RrV2luZG93KiB3aW5kb3cgPSBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRv
dzsKIAogICAgIGlmICh3aW5kb3cpCkBAIC0zMTQsNyArMzI4LDkgQEAgdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGUoKQogewogICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOwogCi0gICAgR2Rr
UmVjdGFuZ2xlIHJlY3QgPSB7IDAsIDAsIG1fZGF0YS0+Y29udGVudHNTaXplLndpZHRoKCksIG1f
ZGF0YS0+Y29udGVudHNTaXplLmhlaWdodCgpIH07CisgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7
IHN0YXRpY19jYXN0PGludD4oZnJhbWVHZW9tZXRyeSgpLngoKSAqIG1fc2NhbGVGYWN0b3IpLCBz
dGF0aWNfY2FzdDxpbnQ+KGZyYW1lR2VvbWV0cnkoKS55KCkgKiBtX3NjYWxlRmFjdG9yKSwgCisg
ICAgICAgIHN0YXRpY19jYXN0PGludD4obV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSAqIG1f
c2NhbGVGYWN0b3IpLCAgc3RhdGljX2Nhc3Q8aW50PihtX2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWln
aHQoKSAqIG1fc2NhbGVGYWN0b3IpIH07CisKICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVj
dChHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgJnJlY3QsIHRydWUpOwog
fQogCkBAIC03MDIsOSArNzE4LDE0IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiAKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBkb2N1bWVudERpcnR5UmVj
dCA9IHJlY3Q7CisgICAgZG9jdW1lbnREaXJ0eVJlY3Quc2NhbGUoMSAvIG1fc2NhbGVGYWN0b3Ip
OwogICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChmcmFtZUdlb21ldHJ5KCkpOwogCisg
ICAgLy8gUGFpbnQgYW4gZXh0cmEgMiBwaXhlbHMgYXJvdW5kIHRvIGFjY29tbW9kYXRlIGFydGlm
YWN0cyBhbmQgcm91bmRpbmcgZXJyb3JzIGluIHRoZSBzY2FsaW5nCisgICAgZG9jdW1lbnREaXJ0
eVJlY3QuaW5mbGF0ZSgyKTsKKwogICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUobV9zY2FsZUZhY3RvciwgbV9zY2FsZUZhY3RvcikpOwogCiAgICAgY29u
dGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC14
KCksIC15KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCShyZXZpc2lvbiAyNTQ5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0R2RrRXhwb3NlRXZlbnQoR2RrRXZlbnRFeHBv
c2UqKTsKICAgICAgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkgY29uc3Q7CiAgICAgICAg
IEdka0V2ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVudCgpIGNvbnN0OwotICAgICAgICBJbnRQb2lu
dCB0cmFuc2xhdGVQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgICAgICBJbnRSZWN0
IHRyYW5zbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogI2VuZGlmCiAKICAgICBwcml2
YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDI1NDkyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwNyw3ICs0MDcsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29u
c3QgSW50UmVjdAogICAgICAgICByZXR1cm47CiAKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y3I7Ci0gICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBkb3VibGUgeCA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4ocmVjdC54KCkpOworICAgIGRvdWJsZSB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0Lnko
KSk7CisgICAgZG91YmxlIHdpZHRoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LndpZHRoKCkp
OworICAgIGRvdWJsZSBoZWlnaHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3QuaGVpZ2h0KCkp
OworCisgICAgY2Fpcm9fdXNlcl90b19kZXZpY2UoY3IsICZ4LCAmeSk7CisgICAgY2Fpcm9fdXNl
cl90b19kZXZpY2VfZGlzdGFuY2UoY3IsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICB4ID0gcm91
bmQoeCk7CisgICAgeSA9IHJvdW5kKHkpOworICAgIHdpZHRoID0gcm91bmQod2lkdGgpOworICAg
IGhlaWdodCA9IHJvdW5kKGhlaWdodCk7CisKKyAgICBjYWlyb19kZXZpY2VfdG9fdXNlcihjciwg
JngsICZ5KTsKKyAgICBjYWlyb19kZXZpY2VfdG9fdXNlcl9kaXN0YW5jZShjciwgJndpZHRoLCAm
aGVpZ2h0KTsKKworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiAgICAgY2Fpcm9fY2xpcChjcik7CiB9CiAKQEAgLTgxOSwxNiArODM2LDIzIEBAIEdka0RyYXdh
YmxlKiBHcmFwaGljc0NvbnRleHQ6Omdka0RyYXdhYmwKICAgICByZXR1cm4gR0RLX0RSQVdBQkxF
KG1fZGF0YS0+ZXhwb3NlLT53aW5kb3cpOwogfQogCi1JbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6
OnRyYW5zbGF0ZVBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFJlY3QgR3Jh
cGhpY3NDb250ZXh0Ojp0cmFuc2xhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7
CiAgICAgY2Fpcm9fbWF0cml4X3QgdG07CiAgICAgY2Fpcm9fZ2V0X21hdHJpeChtX2RhdGEtPmNy
LCAmdG0pOwotICAgIGRvdWJsZSB4ID0gcG9pbnQueCgpOwotICAgIGRvdWJsZSB5ID0gcG9pbnQu
eSgpOworCisKKyAgICBkb3VibGUgeCA9IHJlY3QueCgpOworICAgIGRvdWJsZSB5ID0gcmVjdC55
KCk7CisgICAgZG91YmxlIHdpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGRvdWJsZSBoZWlnaHQg
PSByZWN0LmhlaWdodCgpOwogCiAgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludCgmdG0s
ICZ4LCAmeSk7Ci0gICAgcmV0dXJuIEludFBvaW50KHgsIHkpOworICAgIGNhaXJvX21hdHJpeF90
cmFuc2Zvcm1fZGlzdGFuY2UoJnRtLCAmd2lkdGgsJiBoZWlnaHQpOworCisgICAgcmV0dXJuIElu
dFJlY3Qoc3RhdGljX2Nhc3Q8aW50Pih4KSwgc3RhdGljX2Nhc3Q8aW50Pih5KSwgc3RhdGljX2Nh
c3Q8aW50Pih3aWR0aCksIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSk7CiB9CisKICNlbmRpZgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDI1NDkyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsMTEgKzgxLDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAK
ICAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdCBodHRwOi8vd3d3Lm1leWVyd2ViLmNv
bS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhzcGlyYWwvZGVtby5odG1sCiAgICAgY2Fpcm9fcGF0dGVy
bl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2UoaW1hZ2UpOwog
Ci0gICAgLy8gVG8gYXZvaWQgdGhlIHVud2FudGVkIGdyYWRpZW50IGVmZmVjdCAoIzE0MDE3KSB3
ZSB1c2UKLSAgICAvLyBDQUlST19GSUxURVJfTkVBUkVTVCBub3csIGJ1dCB0aGUgcmVhbCBmaXgg
d2lsbCBiZSB0byBoYXZlCi0gICAgLy8gQ0FJUk9fRVhURU5EX1BBRCBpbXBsZW1lbnRlZCBmb3Ig
c3VyZmFjZXMgaW4gQ2Fpcm8gYWxsb3dpbmcgdXMgdG8gc3RpbGwKLSAgICAvLyB1c2UgYmlsaW5l
YXIgZmlsdGVyaW5nCi0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJP
X0ZJTFRFUl9ORUFSRVNUKTsKKyAgICAvLyBUbyBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQg
ZWZmZWN0ICgjMTQwMTcpIHdlIHVzZSBDQUlST19FWFRFTkRfUkVQRUFUCisgICAgLy8gZm9yIG5v
dyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSdkIGxpa2UgdG8gdXNlIENBSVJPX0VYVEVORF9QQUQgYnV0
IGl0IGlzIG5vdCBhdmFpbGFibGUKKyAgICAvLyBpbiBjYWlybyB5ZXQuIFRoaXMgaXMgc28gdGhh
dCB3ZSBjYW4gdXNlIENBSVJPX0ZJTFRFUl9CRVNUIGluc3RlYWQgb2YgQ0FJUk9fRklMVEVSX05F
QVJFU1QKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5E
X1JFUEVBVCk7CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJ
TFRFUl9CRVNUKTsKIAogICAgIGZsb2F0IHNjYWxlWCA9IHNyY1JlY3Qud2lkdGgoKSAvIGRzdFJl
Y3Qud2lkdGgoKTsKICAgICBmbG9hdCBzY2FsZVkgPSBzcmNSZWN0LmhlaWdodCgpIC8gZHN0UmVj
dC5oZWlnaHQoKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqCiAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENB
SVJPX0VYVEVORF9SRVBFQVQpOwogCiAgICAgLy8gV29ya2Fyb3VuZCB0byBhdm9pZCB0aGUgdW53
YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpCi0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZmls
dGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKKyAgICBjYWlyb19wYXR0ZXJuX3Nl
dF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX0JFU1QpOwogCiAgICAgY2Fpcm9fbWF0cml4
X3QgcGF0dGVybl9tYXRyaXggPSBjYWlyb19tYXRyaXhfdChwYXR0ZXJuVHJhbnNmb3JtKTsKICAg
ICBjYWlyb19tYXRyaXhfdCBwaGFzZV9tYXRyaXggPSB7MSwgMCwgMCwgMSwgcGhhc2UueCgpLCBw
aGFzZS55KCl9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAkocmV2aXNp
b24gMjU0OTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3NCw2ICsxNzQsNyBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OlNjcm9sbFZp
ZXdQcml2YXRlOjp3CiAKIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQogICAgIDogbV9kYXRhKG5l
dyBTY3JvbGxWaWV3UHJpdmF0ZSh0aGlzKSkKKyAgICAsIG1fc2NhbGVGYWN0b3IoMS4wKQogewog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAkocmV2aXNpb24g
MjU0OTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc5LDYgKzE3OSw3IEBAIEludFJlY3QgU2Nyb2xsVmlldzo6U2Nyb2xsVmll
d1ByaXZhdGU6OncKIAogU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiAgICAgOiBtX2RhdGEobmV3
IFNjcm9sbFZpZXdQcml2YXRlKHRoaXMpKQorICAgICwgbV9zY2FsZUZhY3RvcigxLjApCiB7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHJldmlzaW9uIDI1NDky
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiAg
ICAgOiBtX2RhdGEobmV3IFNjcm9sbFZpZXdQcml2YXRlKCkpCisgICAgLCBtX3NjYWxlRmFjdG9y
KDEuMCkKIHsKIH0KIApJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDkyKQorKysgV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwNy0wOS0xMSAgR2Vvcmdl
IFdyaWdodCAgPGdlb3JnZS53cmlnaHRAY29sbGFib3JhLmNvLnVrPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0OTk4CisgICAgICAgIEZ1bGwgcGFnZSB6b29taW5nIHN1cHBvcnQK
KworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHpvb21pbmcgc3VwcG9ydC4KKwor
ICAgICAgICAqIEFwaS93ZWJraXRndGtwYWdlLmNwcDoKKyAgICAgICAgKiBBcGkvd2Via2l0Z3Rr
cGFnZS5oOgorCiAyMDA3LTA5LTEwICBOaWdlbCBUYW8gIDxuaWdlbHRhb0Bnbm9tZS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFn
ZS5jcHAJKHJldmlzaW9uIDI1NDkyKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMyw0ICs1MzMsMjcgQEAgV2ViS2l0R3RrRnJhbWUqIHdl
YmtpdF9ndGtfcGFnZV9nZXRfbWFpbgogICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0
YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKICAgICByZXR1cm4gcGFnZURh
dGEtPm1haW5GcmFtZTsKIH0KKwordm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2ZhY3Rv
cihXZWJLaXRHdGtQYWdlKiBwYWdlLCBkb3VibGUgZmFjdG9yKQoreworICAgIFdlYktpdEd0a1Bh
Z2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsK
KyAgICBXZWJLaXRHdGtGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9HVEtfRlJBTUVf
R0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IGZyYW1lRGF0YS0+ZnJhbWUtPnZpZXcoKTsKKworICAgIGZyYW1lVmlldy0+c2V0U2Nh
bGVGYWN0b3IoZmFjdG9yKTsKKyAgICBmcmFtZVZpZXctPnJlc2l6ZShmcmFtZVZpZXctPmZyYW1l
R2VvbWV0cnkoKS53aWR0aCgpLCBmcmFtZVZpZXctPmZyYW1lR2VvbWV0cnkoKS5oZWlnaHQoKSk7
CisgICAgZnJhbWVWaWV3LT51cGRhdGUoKTsKK30KKworZG91YmxlIHdlYmtpdF9ndGtfcGFnZV9n
ZXRfc2NhbGVfZmFjdG9yKFdlYktpdEd0a1BhZ2UqIHBhZ2UpCit7CisgICAgV2ViS2l0R3RrUGFn
ZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwor
ICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0dUS19GUkFNRV9H
RVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gZnJhbWVEYXRhLT5mcmFtZS0+dmlldygpOworCisgICAgcmV0dXJuIGZyYW1lVmlldy0+
c2NhbGVGYWN0b3IoKTsKK30KKwogfQpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNp
b24gMjU0OTIpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Miw2ICsxNTIsMTIgQEAgd2Via2l0X2d0a19wYWdlX2xvYWRfc3RyaW5nIChXZWJL
aXRHdGtQYQogV0VCS0lUX0dUS19BUEkgdm9pZAogd2Via2l0X2d0a19wYWdlX2xvYWRfaHRtbF9z
dHJpbmcgKFdlYktpdEd0a1BhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBn
Y2hhciogYmFzZV91cmwpOwogCitXRUJLSVRfR1RLX0FQSSB2b2lkCit3ZWJraXRfZ3RrX3BhZ2Vf
c2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0R3RrUGFnZSogcGFnZSwgZG91YmxlIGZhY3Rvcik7CisK
K1dFQktJVF9HVEtfQVBJIGRvdWJsZQord2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3Ig
KFdlYktpdEd0a1BhZ2UqIHBhZ2UpOworCiBXRUJLSVRfR1RLX0FQSSBXZWJLaXRHdGtGcmFtZSoK
IHdlYmtpdF9ndGtfcGFnZV9nZXRfbWFpbl9mcmFtZSAoV2ViS2l0R3RrUGFnZSogcGFnZSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16332</attachid>
            <date>2007-09-20 05:52:37 -0700</date>
            <delta_ts>2007-09-27 06:42:00 -0700</delta_ts>
            <desc>Moved scaleFactor methods into Page</desc>
            <filename>zooming-20070920.patch</filename>
            <type>text/plain</type>
            <size>27433</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTY3MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDctMDktMjAgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0
QGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAor
ICAgICAgICBGdWxsIHBhZ2Ugem9vbWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiB6b29taW5nIHN1cHBvcnQuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVT
VCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2FsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzY2FsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c2V0U2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2NhbGVGYWN0b3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJl
c2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcDoKKyAgICAgICAg
KFBsYXRmb3JtU2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9SZW5kZXJUaGVtZUdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUdk
azo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUdkazo6cGFp
bnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUdkazo6cGFpbnRCdXR0b24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXdTY3JvbGxiYXI6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2NhbGVGYWN0b3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnRyYW5zbGF0ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JvbGxWaWV3UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nh
bGVGYWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjYWxlRmFjdG9yKToKKyAgICAgICAgKiBwbGF0
Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
c2NhbGVGYWN0b3IpOgorCiAyMDA3LTA5LTIwICBSb2IgQnVpcyAgPGJ1aXNAa2RlLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBNaXR6LgpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlz
aW9uIDI1NjcwKQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5OSwxMSArNzk5LDEzIEBAIEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNv
cihjb25zdCAKICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwogfQogCi1ib29sIEV2ZW50SGFu
ZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3Vz
ZUV2ZW50ID0gc2NhbGVNb3VzZUV2ZW50KGV2ZW50KTsKKwogICAgIFJlZlB0cjxGcmFtZVZpZXc+
IHByb3RlY3RvcihtX2ZyYW1lLT52aWV3KCkpOwogCiAgICAgbV9tb3VzZVByZXNzZWQgPSB0cnVl
OwpAQCAtOTE2LDE1ICs5MTgsMTcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRG91
YmxlQ2xpYwogCiBib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2ZW50KQogeworICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2ZW50ID0g
c2NhbGVNb3VzZUV2ZW50KGV2ZW50KTsKKwogICAgIEhpdFRlc3RSZXN1bHQgaG92ZXJlZE5vZGUg
PSBIaXRUZXN0UmVzdWx0KEludFBvaW50KCkpOwotICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91
c2VNb3ZlRXZlbnQoZXZlbnQsICZob3ZlcmVkTm9kZSk7CisgICAgYm9vbCByZXN1bHQgPSBoYW5k
bGVNb3VzZU1vdmVFdmVudChtb3VzZUV2ZW50LCAmaG92ZXJlZE5vZGUpOwogCiAgICAgUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKICAgICBob3ZlcmVkTm9kZS5zZXRUb05vblNoYWRvd0FuY2VzdG9yKCk7Ci0gICAg
cGFnZS0+Y2hyb21lKCktPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGhvdmVyZWROb2RlLCBldmVu
dC5tb2RpZmllckZsYWdzKCkpOworICAgIHBhZ2UtPmNocm9tZSgpLT5tb3VzZURpZE1vdmVPdmVy
RWxlbWVudChob3ZlcmVkTm9kZSwgbW91c2VFdmVudC5tb2RpZmllckZsYWdzKCkpOwogICAgIHBh
Z2UtPmNocm9tZSgpLT5zZXRUb29sVGlwKGhvdmVyZWROb2RlKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMTAyNCwxMyArMTAyOCwxNSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6aW52YWxpZGF0
ZUNsaWNrKCkKICAgICBtX2NsaWNrTm9kZSA9IDA7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZl
bnQpCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3Rv
cihtX2ZyYW1lLT52aWV3KCkpOwogCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNlRXZlbnQg
PSBzY2FsZU1vdXNlRXZlbnQoZXZlbnQpOworCiAgICAgbV9tb3VzZVByZXNzZWQgPSBmYWxzZTsK
ICAgICBtX2N1cnJlbnRNb3VzZVBvc2l0aW9uID0gbW91c2VFdmVudC5wb3MoKTsKIApAQCAtMTI3
NSw3ICsxMjgxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjbwog
ICAgIHJldHVybiBzd2FsbG93RXZlbnQ7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVX
aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCiB7CiAgICAgRG9jdW1lbnQq
IGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2MpCkBAIC0xMjg1LDYgKzEy
OTEsOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChQbGF0CiAgICAgaWYg
KCFkb2NSZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisKKyAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnQgZSA9IHNjYWxlV2hlZWxFdmVudChldmVudCk7CisKICAgICBJbnRQb2ludCB2UG9p
bnQgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZS5wb3MoKSk7CiAKICAgICBI
aXRUZXN0UmVxdWVzdCByZXF1ZXN0KHRydWUsIGZhbHNlKTsKQEAgLTE3NTksNCArMTc2OCwyOSBA
QCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFRhYkV2ZW50SGFuZGxlCiAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCitQbGF0Zm9ybU1vdXNlRXZlbnQgRXZlbnRIYW5k
bGVyOjpzY2FsZU1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50
KQoreworICAgIEFTU0VSVChtX2ZyYW1lLT52aWV3KCkpOworCisgICAgZG91YmxlIHNjYWxlRmFj
dG9yID0gbV9mcmFtZS0+dmlldygpLT5zY2FsZUZhY3RvcigpOworCisgICAgSW50UG9pbnQgc2Nh
bGVkUG9zKHN0YXRpY19jYXN0PGludD4obW91c2VFdmVudC54KCkgLyBzY2FsZUZhY3RvciksIHN0
YXRpY19jYXN0PGludD4obW91c2VFdmVudC55KCkgLyBzY2FsZUZhY3RvcikpOworCisgICAgcmV0
dXJuIFBsYXRmb3JtTW91c2VFdmVudChzY2FsZWRQb3MsIEludFBvaW50KG1vdXNlRXZlbnQuZ2xv
YmFsWCgpLCBtb3VzZUV2ZW50Lmdsb2JhbFkoKSksIG1vdXNlRXZlbnQuYnV0dG9uKCksIG1vdXNl
RXZlbnQuZXZlbnRUeXBlKCksCisgICAgICAgICAgICBtb3VzZUV2ZW50LmNsaWNrQ291bnQoKSwg
bW91c2VFdmVudC5zaGlmdEtleSgpLCBtb3VzZUV2ZW50LmN0cmxLZXkoKSwgbW91c2VFdmVudC5h
bHRLZXkoKSwgbW91c2VFdmVudC5tZXRhS2V5KCksIG1vdXNlRXZlbnQudGltZXN0YW1wKCkpOwor
fQorCitQbGF0Zm9ybVdoZWVsRXZlbnQgRXZlbnRIYW5kbGVyOjpzY2FsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIEFTU0VSVChtX2ZyYW1l
LT52aWV3KCkpOworCisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gbV9mcmFtZS0+dmlldygpLT5z
Y2FsZUZhY3RvcigpOworCisgICAgSW50UG9pbnQgc2NhbGVkUG9zKHN0YXRpY19jYXN0PGludD4o
d2hlZWxFdmVudC54KCkgLyBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4od2hlZWxFdmVu
dC55KCkgLyBzY2FsZUZhY3RvcikpOworCisgICAgcmV0dXJuIFBsYXRmb3JtV2hlZWxFdmVudChz
Y2FsZWRQb3MsIEludFBvaW50KHdoZWVsRXZlbnQuZ2xvYmFsWCgpLCB3aGVlbEV2ZW50Lmdsb2Jh
bFkoKSksIHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCksCisgICAgICAg
ICAgICB3aGVlbEV2ZW50LmNvbnRpbnVvdXNEZWx0YVgoKSwgd2hlZWxFdmVudC5jb250aW51b3Vz
RGVsdGFZKCksIHdoZWVsRXZlbnQuaXNDb250aW51b3VzKCksIHdoZWVsRXZlbnQuaXNBY2NlcHRl
ZCgpLCAKKyAgICAgICAgICAgIHdoZWVsRXZlbnQuc2hpZnRLZXkoKSwgd2hlZWxFdmVudC5jdHJs
S2V5KCksIHdoZWVsRXZlbnQuYWx0S2V5KCksIHdoZWVsRXZlbnQubWV0YUtleSgpKTsKK30KKwog
fQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMjU2NzApCisrKyBXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsOSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZvY3VzRG9jdW1lbnRWaWV3KCk7CiAKKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgc2NhbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIFBsYXRm
b3JtV2hlZWxFdmVudCBzY2FsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgUGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50PiBjdXJy
ZW50S2V5Ym9hcmRFdmVudCgpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAyNTY3MCkKKysr
IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBQ
YWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDCiAgICAgLCBtX2RlZmVyc0xv
YWRpbmcoZmFsc2UpCiAgICAgLCBtX2luTG93UXVhbGl0eUludGVycG9sYXRpb25Nb2RlKGZhbHNl
KQogICAgICwgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKDApCisgICAgLCBtX3NjYWxlRmFj
dG9yKDEuMCkKIHsKICAgICBpZiAoIWFsbFBhZ2VzKSB7CiAgICAgICAgIGFsbFBhZ2VzID0gbmV3
IEhhc2hTZXQ8UGFnZSo+OwpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAyNTY3MCkKKysrIFdlYkNvcmUvcGFnZS9Q
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIGdvQmFjaygpOwogICAgICAgICBib29sIGdvRm9yd2FyZCgpOwogICAg
ICAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CisKKyAgICAg
ICAgdm9pZCBzZXRTY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0b3IpIHsgbV9zY2FsZUZhY3Rv
ciA9IHNjYWxlRmFjdG9yOyB9CisgICAgICAgIGRvdWJsZSBzY2FsZUZhY3RvcigpIHsgcmV0dXJu
IG1fc2NhbGVGYWN0b3I7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0R3JvdXBOYW1lKGNv
bnN0IFN0cmluZyYpOwogICAgICAgICBTdHJpbmcgZ3JvdXBOYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9ncm91cE5hbWU7IH0KQEAgLTEzOCw2ICsxNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogCiAgICAgICAgIGJvb2wgbV9pbkxvd1F1YWxp
dHlJbnRlcnBvbGF0aW9uTW9kZTsKKworICAgICAgICBkb3VibGUgbV9zY2FsZUZhY3RvcjsKICAg
ICAKICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250cm9s
bGVyOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHJldmlzaW9u
IDI1NjcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNiArNTQsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgUGxhdGZvcm1XaGVlbEV2ZW50IHsKICAgICBwdWJsaWM6CisgICAgICAgIFBsYXRmb3JtV2hl
ZWxFdmVudChjb25zdCBJbnRQb2ludCYgcG9zLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zLCBm
bG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgCisgICAgICAgICAgICAgICAgZmxvYXQgY29udGlu
dW91c0RlbHRhWCwgZmxvYXQgY29udGludW91c0RlbHRhWSwgYm9vbCBpc0NvbnRpbnVvdXMsIGJv
b2wgaXNBY2NlcHRlZCwgCisgICAgICAgICAgICAgICAgYm9vbCBzaGlmdCwgYm9vbCBjdHJsLCBi
b29sIGFsdCwgYm9vbCBtZXRhKQorICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKHBvcyksIG1fZ2xv
YmFsUG9zaXRpb24oZ2xvYmFsUG9zKSwgbV9kZWx0YVgoZGVsdGFYKSwgbV9kZWx0YVkoZGVsdGFZ
KQorICAgICAgICAgICAgLCBtX2NvbnRpbnVvdXNEZWx0YVgoY29udGludW91c0RlbHRhWCkKKyAg
ICAgICAgICAgICwgbV9jb250aW51b3VzRGVsdGFZKGNvbnRpbnVvdXNEZWx0YVkpCisgICAgICAg
ICAgICAsIG1faXNDb250aW51b3VzKGlzQ29udGludW91cykKKyAgICAgICAgICAgICwgbV9pc0Fj
Y2VwdGVkKGlzQWNjZXB0ZWQpCisgICAgICAgICAgICAsIG1fc2hpZnRLZXkoc2hpZnQpCisgICAg
ICAgICAgICAsIG1fY3RybEtleShjdHJsKQorICAgICAgICAgICAgLCBtX2FsdEtleShhbHQpCisg
ICAgICAgICAgICAsIG1fbWV0YUtleShtZXRhKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAg
ICAgICBjb25zdCBJbnRQb2ludCYgcG9zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQog
ICAgICAgICBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxQb3NpdGlvbjsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gMjU2NzAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNzgs
MTAgKzc4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhZGRDaGlsZChX
aWRnZXQqKTsKICAgICAgICAgdm9pZCByZW1vdmVDaGlsZChXaWRnZXQqKTsKIAorICAgICAgICB2
b2lkIHJlc2l6ZShpbnQgdywgaW50IGgpIHsgV2lkZ2V0OjpyZXNpemUoc3RhdGljX2Nhc3Q8aW50
Pih3IC8gc2NhbGVGYWN0b3IoKSksIHN0YXRpY19jYXN0PGludD4oaCAvIHNjYWxlRmFjdG9yKCkp
KTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplQ29udGVudHMoaW50IHcsIGludCBoKTsK
ICAgICAgICAgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBm
YWxzZSk7CiAgICAgICAgIHZvaWQgdXBkYXRlKCk7CiAKKyAgICAgICAgZG91YmxlIHNjYWxlRmFj
dG9yKCk7CisKICAgICAgICAgLy8gRXZlbnQgY29vcmRpbmF0ZXMgYXJlIGFzc3VtZWQgdG8gYmUg
aW4gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgYSB3aW5kb3cgdGhhdCBjb250YWlucwogICAgICAg
ICAvLyB0aGUgZW50aXJlIHdpZGdldCBoaWVyYXJjaHkuICBJdCBpcyB1cCB0byB0aGUgcGxhdGZv
cm0gdG8gZGVjaWRlIHdoYXQgdGhlIHByZWNpc2UgZGVmaW5pdGlvbgogICAgICAgICAvLyBvZiBj
b250YWluaW5nIHdpbmRvdyBpcy4gIChGb3IgZXhhbXBsZSBvbiBNYWMgaXQgaXMgdGhlIGNvbnRh
aW5pbmcgTlNXaW5kb3cuKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3Jt
RGF0YUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRm
b3JtRGF0YUdkay5jcHAJKHJldmlzaW9uIDI1NjcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Rm9udFBsYXRmb3JtRGF0YUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMTEg
QEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdAogICAgIGNhaXJvX21h
dHJpeF9pbml0X3NjYWxlKGZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpLCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CiAgICAgY2Fpcm9fbWF0cml4
X2luaXRfaWRlbnRpdHkoJmN0bSk7CiAgICAgb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19j
cmVhdGUoKTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHdvcmsgb3V0IGhvdyB0byBnZXQgdGhl
IHRydWUgKGhpbnRlZCkgZXh0ZW50cyBmcm9tIGNhaXJvIGluc3RlYWQgb2YKKyAgICAvLyBkaXNh
YmxpbmcgaGludGluZy4gU2VlIGh0dHA6Ly9saXN0cy5jYWlyb2dyYXBoaWNzLm9yZy9hcmNoaXZl
cy9jYWlyby8yMDA3LVNlcHRlbWJlci8wMTEzNjYuaHRtbAorICAgIGNhaXJvX2ZvbnRfb3B0aW9u
c19zZXRfaGludF9zdHlsZShvcHRpb25zLCBDQUlST19ISU5UX1NUWUxFX05PTkUpOworICAgIGNh
aXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKG9wdGlvbnMsIENBSVJPX0FOVElBTElBU19T
VUJQSVhFTCk7CisKICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUo
Zm9udEZhY2UsIGZvbnRNYXRyaXgsICZjdG0sIG9wdGlvbnMpOwogICAgIGNhaXJvX2ZvbnRfZmFj
ZV9kZXN0cm95KGZvbnRGYWNlKTsKICAgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJveShvcHRp
b25zKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdk
ay5jcHAJKHJldmlzaW9uIDI1NjcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1T
Y3JvbGxCYXJHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IndlYmtpdGd0a3ByaXZhdGUuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8Y2Fp
cm8vY2Fpcm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTIxLDggKzEyMiwxMCBAQCB2b2lk
IFBsYXRmb3JtU2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQoCiAgICAgQVNTRVJUKHBhcmVudCgp
LT5pc0ZyYW1lVmlldygpKTsKIAogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAgIAogICAgIEludFJlY3Qgd2luZG93UmVjdCA9
IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2Nh
dGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lk
dGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LngoKSAqIGZyYW1lVmlldy0+c2NhbGVG
YWN0b3IoKSksIHN0YXRpY19jYXN0PGludD4od2luZG93UmVjdC55KCkgKiBmcmFtZVZpZXctPnNj
YWxlRmFjdG9yKCkpLCAKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LndpZHRo
KCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1Jl
Y3QuaGVpZ2h0KCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpIH07CiAgICAgZ3RrX3dpZGdl
dF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI1NjcwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODAsMTEgKzE4MCwxMSBAQCBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludENoZWNrYm94KFJl
bmRlCiB7CiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KICAgICBH
dGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKLSAgICBJbnRQb2ludCBwb3MgPSBp
LmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50UmVjdCBz
Y2FsZWRSZWN0ID0gaS5jb250ZXh0LT50cmFuc2xhdGVSZWN0KHJlY3QpOwogICAgIGd0a19wYWlu
dF9jaGVjayhjaGVja2JveC0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAg
ICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwgY2hlY2tib3gsICJjaGVja2J1dHRvbiIsCi0gICAgICAg
ICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CisgICAgICAgICAgICAgICAgICAgIHNjYWxlZFJlY3QueCgpLCBzY2FsZWRSZWN0LnkoKSwg
c2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpKTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTIxMywyNCArMjEzLDI0IEBAIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
UmFkaW8oUmVuZGVyT2IKIHsgCiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0
byBkbz8KICAgICBHdGtXaWRnZXQqIHJhZGlvID0gZ3RrUmFkaW9CdXR0b24oKTsKLSAgICBJbnRQ
b2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7Cisg
ICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gaS5jb250ZXh0LT50cmFuc2xhdGVSZWN0KHJlY3QpOwog
ICAgIGd0a19wYWludF9vcHRpb24ocmFkaW8tPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxl
KCksCiAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hh
ZG93KG8pLAogICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcmFkaW8sICJyYWRpb2J1dHRvbiIs
Ci0gICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgc2NhbGVkUmVjdC54KCksIHNjYWxl
ZFJlY3QueSgpLCBzY2FsZWRSZWN0LndpZHRoKCksIHNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByZWN0KSAKLXsgCit7CiAgICAgLy8gRklYTUU6IHNob3VsZCB1c2UgdGhlbWUtYXdh
cmUgZHJhd2luZy4gVGhpcyBzaG91bGQgaG9ub3IgdGhlIHN0YXRlIGFzIHdlbGwKICAgICBHdGtX
aWRnZXQqIGJ1dHRvbiA9IGd0a0J1dHRvbigpOwotICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4
dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IHNjYWxlZFJl
Y3QgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVJlY3QocmVjdCk7CiAgICAgZ3RrX3BhaW50X2JveChi
dXR0b24tPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAg
ICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAg
ICAgTlVMTCwgYnV0dG9uLCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBv
cy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICBz
Y2FsZWRSZWN0LngoKSwgc2NhbGVkUmVjdC55KCksIHNjYWxlZFJlY3Qud2lkdGgoKSwgc2NhbGVk
UmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjU2NzApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIs
MTAgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAorCisj
aW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIK
KwogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKQEAgLTEyOCw4
ICsxMzIsMTAgQEAgdm9pZCBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZQogICAg
IEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKwogICAgIEludFJlY3Qg
d2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93
KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0g
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVj
dC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0Lngo
KSAqIGZyYW1lVmlldy0+c2NhbGVGYWN0b3IoKSksIHN0YXRpY19jYXN0PGludD4od2luZG93UmVj
dC55KCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpLCAKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50Pih3aW5kb3dSZWN0LndpZHRoKCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9yKCkpLCBzdGF0
aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QuaGVpZ2h0KCkgKiBmcmFtZVZpZXctPnNjYWxlRmFjdG9y
KCkpIH07CiAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2Nh
dGlvbik7CiB9CiAKQEAgLTI4NywxNyArMjkzLDI0IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0R3Rr
QWRqdXN0bWVudHMoR3RrQWQKIAogdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsKKyAgICBBU1NFUlQoY29udGFpbmlu
Z1dpbmRvdygpKTsKKwogICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgV2ViS2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRShjb250YWlu
aW5nV2luZG93KCkpOworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJ
VF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKwogICAgIEludFBvaW50IHdpbmRvd1BvaW50
ID0gY29udGVudHNUb1dpbmRvdyh1cGRhdGVSZWN0LmxvY2F0aW9uKCkpOwogICAgIEludFJlY3Qg
Y29udGFpbmluZ1dpbmRvd1JlY3QgPSB1cGRhdGVSZWN0OwogICAgIGNvbnRhaW5pbmdXaW5kb3dS
ZWN0LnNldExvY2F0aW9uKHdpbmRvd1BvaW50KTsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5z
Y2FsZShzY2FsZUZhY3RvcigpKTsKIAogICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyBjb250YWlu
aW5nV2luZG93UmVjdC54KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRv
d1JlY3Qud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRv
d1JlY3QuaGVpZ2h0KCkgfTsKKwogICAgIEdka1dpbmRvdyogd2luZG93ID0gR1RLX1dJREdFVChj
b250YWluaW5nV2luZG93KCkpLT53aW5kb3c7CiAKICAgICBpZiAod2luZG93KQpAQCAtMzE0LDcg
KzMyNyw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIHsKICAgICBBU1NFUlQoY29udGFp
bmluZ1dpbmRvdygpKTsKIAotICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyAwLCAwLCBtX2RhdGEt
PmNvbnRlbnRzU2l6ZS53aWR0aCgpLCBtX2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKSB9Owor
ICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lR2VvbWV0cnko
KS54KCkgKiBzY2FsZUZhY3RvcigpKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZUdlb21ldHJ5KCku
eSgpICogc2NhbGVGYWN0b3IoKSksIAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS0+
Y29udGVudHNTaXplLndpZHRoKCkgKiBzY2FsZUZhY3RvcigpKSwgIHN0YXRpY19jYXN0PGludD4o
bV9kYXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcigpKSB9OworCiAgICAg
Z2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkp
LT53aW5kb3csICZyZWN0LCB0cnVlKTsKIH0KIApAQCAtNzAyLDEwICs3MTcsMjEgQEAgdm9pZCBT
Y3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogICAgICAgICByZXR1cm47CiAKICAg
ICBJbnRSZWN0IGRvY3VtZW50RGlydHlSZWN0ID0gcmVjdDsKKworICAgIGlmICghcGFyZW50KCkp
CisgICAgICAgIGRvY3VtZW50RGlydHlSZWN0LnNjYWxlKDEgLyBzY2FsZUZhY3RvcigpKTsKKwog
ICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChmcmFtZUdlb21ldHJ5KCkpOwogCisgICAg
Ly8gUGFpbnQgYW4gZXh0cmEgMiBwaXhlbHMgYXJvdW5kIHRvIGFjY29tbW9kYXRlIGFydGlmYWN0
cyBhbmQgcm91bmRpbmcgZXJyb3JzIGluIHRoZSBzY2FsaW5nCisgICAgZG9jdW1lbnREaXJ0eVJl
Y3QuaW5mbGF0ZSgyKTsKKwogICAgIGNvbnRleHQtPnNhdmUoKTsKIAorICAgIC8vIE9ubHkgc2Nh
bGUgdGhlIHJvb3QgU2Nyb2xsVmlldworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIGNvbnRl
eHQtPnNjYWxlKEZsb2F0U2l6ZShzY2FsZUZhY3RvcigpLCBzY2FsZUZhY3RvcigpKSk7CisKICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwogICAgIGRvY3VtZW50RGlydHlSZWN0Lm1v
dmUoLXgoKSwgLXkoKSk7CiAKQEAgLTgwNCw2ICs4MzAsMTUgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1
cGRhdGVCYWNraW5nU3RvcmUoKQogICAgIHBhZ2UtPmNocm9tZSgpLT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKIH0KIAorZG91YmxlIFNjcm9sbFZpZXc6OnNjYWxlRmFjdG9yKCkKK3sKKyAgICBBU1NF
UlQoaXNGcmFtZVZpZXcoKSk7CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0
aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVW
aWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworCisgICAgcmV0
dXJuIHBhZ2UtPnNjYWxlRmFjdG9yKCk7Cit9CisKIEhhc2hTZXQ8V2lkZ2V0Kj4qIFNjcm9sbFZp
ZXc6OmNoaWxkcmVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gJm1fZGF0YS0+Y2hpbGRyZW47Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlz
aW9uIDI1NjcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBzZXRHZGtFeHBvc2VFdmVudChHZGtFdmVudEV4cG9zZSopOwogICAgICAg
ICBHZGtEcmF3YWJsZSogZ2RrRHJhd2FibGUoKSBjb25zdDsKICAgICAgICAgR2RrRXZlbnRFeHBv
c2UqIGdka0V4cG9zZUV2ZW50KCkgY29uc3Q7Ci0gICAgICAgIEludFBvaW50IHRyYW5zbGF0ZVBv
aW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIEludFJlY3QgdHJhbnNsYXRlUmVj
dChjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAkocmV2aXNpb24gMjU2NzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3
LDcgKzQwNywyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRSZWN0CiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLSAgICBjYWly
b19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKKworICAgIGRvdWJsZSB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LngoKSk7
CisgICAgZG91YmxlIHkgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3QueSgpKTsKKyAgICBkb3Vi
bGUgd2lkdGggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3Qud2lkdGgoKSk7CisgICAgZG91Ymxl
IGhlaWdodCA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocmVjdC5oZWlnaHQoKSk7CisKKyAgICBjYWly
b191c2VyX3RvX2RldmljZShjciwgJngsICZ5KTsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZV9k
aXN0YW5jZShjciwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIHggPSByb3VuZCh4KTsKKyAgICB5
ID0gcm91bmQoeSk7CisgICAgd2lkdGggPSByb3VuZCh3aWR0aCk7CisgICAgaGVpZ2h0ID0gcm91
bmQoaGVpZ2h0KTsKKworICAgIGNhaXJvX2RldmljZV90b191c2VyKGNyLCAmeCwgJnkpOworICAg
IGNhaXJvX2RldmljZV90b191c2VyX2Rpc3RhbmNlKGNyLCAmd2lkdGgsICZoZWlnaHQpOworCisg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19j
bGlwKGNyKTsKIH0KIApAQCAtODE5LDE2ICs4MzYsMjMgQEAgR2RrRHJhd2FibGUqIEdyYXBoaWNz
Q29udGV4dDo6Z2RrRHJhd2FibAogICAgIHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBv
c2UtPndpbmRvdyk7CiB9CiAKLUludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6
OnRyYW5zbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjYWlyb19t
YXRyaXhfdCB0bTsKICAgICBjYWlyb19nZXRfbWF0cml4KG1fZGF0YS0+Y3IsICZ0bSk7Ci0gICAg
ZG91YmxlIHggPSBwb2ludC54KCk7Ci0gICAgZG91YmxlIHkgPSBwb2ludC55KCk7CisKKworICAg
IGRvdWJsZSB4ID0gcmVjdC54KCk7CisgICAgZG91YmxlIHkgPSByZWN0LnkoKTsKKyAgICBkb3Vi
bGUgd2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgZG91YmxlIGhlaWdodCA9IHJlY3QuaGVpZ2h0
KCk7CiAKICAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZ0bSwgJngsICZ5KTsKLSAg
ICByZXR1cm4gSW50UG9pbnQoeCwgeSk7CisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0
YW5jZSgmdG0sICZ3aWR0aCwmIGhlaWdodCk7CisKKyAgICByZXR1cm4gSW50UmVjdChzdGF0aWNf
Y2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRo
KSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUNhaXJvLmNwcAkocmV2aXNpb24gMjU2NzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsMTEg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIFRlc3Qg
dXNpbmcgZXhhbXBsZSBzaXRlIGF0IGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2Vk
Z2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4g
PSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShpbWFnZSk7CiAKLSAgICAvLyBUbyBh
dm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZQotICAgIC8v
IENBSVJPX0ZJTFRFUl9ORUFSRVNUIG5vdywgYnV0IHRoZSByZWFsIGZpeCB3aWxsIGJlIHRvIGhh
dmUKLSAgICAvLyBDQUlST19FWFRFTkRfUEFEIGltcGxlbWVudGVkIGZvciBzdXJmYWNlcyBpbiBD
YWlybyBhbGxvd2luZyB1cyB0byBzdGlsbAotICAgIC8vIHVzZSBiaWxpbmVhciBmaWx0ZXJpbmcK
LSAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX05FQVJF
U1QpOworICAgIC8vIFRvIGF2b2lkIHRoZSB1bndhbnRlZCBncmFkaWVudCBlZmZlY3QgKCMxNDAx
Nykgd2UgdXNlIENBSVJPX0VYVEVORF9SRVBFQVQKKyAgICAvLyBmb3Igbm93IGJ1dCBpbiB0aGUg
ZnV0dXJlIHdlJ2QgbGlrZSB0byB1c2UgQ0FJUk9fRVhURU5EX1BBRCBidXQgaXQgaXMgbm90IGF2
YWlsYWJsZQorICAgIC8vIGluIGNhaXJvIHlldC4gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiB1c2Ug
Q0FJUk9fRklMVEVSX0JFU1QgaW5zdGVhZCBvZiBDQUlST19GSUxURVJfTkVBUkVTVAorICAgIGNh
aXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKKyAg
ICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklMVEVSX0JFU1QpOwog
CiAgICAgZmxvYXQgc2NhbGVYID0gc3JjUmVjdC53aWR0aCgpIC8gZHN0UmVjdC53aWR0aCgpOwog
ICAgIGZsb2F0IHNjYWxlWSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkc3RSZWN0LmhlaWdodCgpOwpA
QCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCoKICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JF
UEVBVCk7CiAKICAgICAvLyBXb3JrYXJvdW5kIHRvIGF2b2lkIHRoZSB1bndhbnRlZCBncmFkaWVu
dCBlZmZlY3QgKCMxNDAxNykKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwg
Q0FJUk9fRklMVEVSX05FQVJFU1QpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcihwYXR0
ZXJuLCBDQUlST19GSUxURVJfQkVTVCk7CiAKICAgICBjYWlyb19tYXRyaXhfdCBwYXR0ZXJuX21h
dHJpeCA9IGNhaXJvX21hdHJpeF90KHBhdHRlcm5UcmFuc2Zvcm0pOwogICAgIGNhaXJvX21hdHJp
eF90IHBoYXNlX21hdHJpeCA9IHsxLCAwLCAwLCAxLCBwaGFzZS54KCksIHBoYXNlLnkoKX07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCShyZXZpc2lvbiAyNTY3MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzczLDYgKzc3MywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCiAg
ICAgcGFnZS0+Y2hyb21lKCktPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogfQogCitkb3VibGUgU2Ny
b2xsVmlldzo6c2NhbGVGYWN0b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDEuMDsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAJKHJldmlzaW9uIDI1NjcwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczNiw0ICs3
MzYsMTAgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQogICAgIHBhZ2Ut
PmNocm9tZSgpLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKIH0KIAorZG91YmxlIFNjcm9sbFZpZXc6
OnNjYWxlRmFjdG9yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAxLjA7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gv
U2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9s
bFZpZXdXeC5jcHAJKHJldmlzaW9uIDI1NjcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3Jv
bGxWaWV3V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDExIEBAIHZvaWQgU2Ny
b2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXIKICAgICBzZXRDb250ZW50c1BvcyhyZWN0
LngoKSwgcmVjdC55KCkpOwogfQogCitkb3VibGUgU2Nyb2xsVmlldzo6c2NhbGVGYWN0b3IoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDEuMDsKK30KIAogUGxhdGZvcm1T
Y3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KSAKIHsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTY3MCkKKysrIFdl
YktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDct
MDktMjAgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0QGNvbGxhYm9yYS5jby51az4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAorICAgICAgICBGdWxsIHBhZ2Ugem9v
bWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB6b29taW5n
IHN1cHBvcnQuCisKKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrcGFnZS5jcHA6CisgICAgICAgICog
QXBpL3dlYmtpdGd0a3BhZ2UuaDoKKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrcHJpdmF0ZS5oOgor
CiAyMDA3LTA5LTE3ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtw
YWdlLmNwcAkocmV2aXNpb24gMjU2NzApCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2d0a19wYWdlX3Njcm9sbF9lCiBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6
ZV9hbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikK
IHsKICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5z
aXplX2FsbG9jYXRlKHdpZGdldCxhbGxvY2F0aW9uKTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0
ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdF
KHdpZGdldCkpOworCisgICAgLy8gV2UgY2FjaGUgdGhlIHVuc2NhbGVkIHdpZHRoL2hlaWdodCBh
cyByZWNhbGN1bGF0aW5nIHRoZW0gdXNpbmcgdGhlIHNjYWxlRmFjdG9yIGxlYWRzIHRvCisgICAg
Ly8gcm91bmRpbmcgZXJyb3JzCisgICAgcGFnZURhdGEtPm1fd2lkdGggPSBhbGxvY2F0aW9uLT53
aWR0aDsKKyAgICBwYWdlRGF0YS0+bV9oZWlnaHQgPSBhbGxvY2F0aW9uLT5oZWlnaHQ7CiAKICAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdp
ZGdldCkpKTsKICAgICBmcmFtZS0+dmlldygpLT5yZXNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFs
bG9jYXRpb24tPmhlaWdodCk7CkBAIC01MzMsNCArNTM5LDMwIEBAIFdlYktpdEd0a0ZyYW1lKiB3
ZWJraXRfZ3RrX3BhZ2VfZ2V0X21haW4KICAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURh
dGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAgICAgcmV0dXJuIHBhZ2VE
YXRhLT5tYWluRnJhbWU7CiB9CisKK3ZvaWQgd2Via2l0X2d0a19wYWdlX3NldF9zY2FsZV9mYWN0
b3IoV2ViS2l0R3RrUGFnZSogcGFnZSwgZG91YmxlIGZhY3RvcikKK3sKKyAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UocGFnZSkpOworCisgICAgV2ViS2l0R3RrUGFnZVBy
aXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworICAg
IFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRf
UFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKKworICAgIHBhZ2VEYXRhLT5wYWdlLT5zZXRT
Y2FsZUZhY3RvcihmYWN0b3IpOworCisgICAgZnJhbWUtPnZpZXcoKS0+cmVzaXplKHBhZ2VEYXRh
LT5tX3dpZHRoLCBwYWdlRGF0YS0+bV9oZWlnaHQpOworICAgIGZyYW1lLT5mb3JjZUxheW91dCgp
OworICAgIGZyYW1lLT52aWV3KCktPmFkanVzdFZpZXdTaXplKCk7CisgICAgZnJhbWUtPnNlbmRS
ZXNpemVFdmVudCgpOworfQorCitkb3VibGUgd2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0
b3IoV2ViS2l0R3RrUGFnZSogcGFnZSkKK3sKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFn
ZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisgICAgV2ViS2l0R3Rr
RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKHBh
Z2VEYXRhLT5tYWluRnJhbWUpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZURh
dGEtPmZyYW1lLT52aWV3KCk7CisKKyAgICByZXR1cm4gZnJhbWVWaWV3LT5zY2FsZUZhY3Rvcigp
OworfQorCiB9CkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCShyZXZpc2lvbiAyNTY3MCkKKysr
IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYg
KzE0NCwxMiBAQCB3ZWJraXRfZ3RrX3BhZ2VfbG9hZF9zdHJpbmcgKFdlYktpdEd0a1BhCiBXRUJL
SVRfR1RLX0FQSSB2b2lkCiB3ZWJraXRfZ3RrX3BhZ2VfbG9hZF9odG1sX3N0cmluZyAoV2ViS2l0
R3RrUGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdjaGFyKiBiYXNlX3Vy
bCk7CiAKK1dFQktJVF9HVEtfQVBJIHZvaWQKK3dlYmtpdF9ndGtfcGFnZV9zZXRfc2NhbGVfZmFj
dG9yIChXZWJLaXRHdGtQYWdlKiBwYWdlLCBkb3VibGUgZmFjdG9yKTsKKworV0VCS0lUX0dUS19B
UEkgZG91YmxlCit3ZWJraXRfZ3RrX3BhZ2VfZ2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0R3RrUGFn
ZSogcGFnZSk7CisKIFdFQktJVF9HVEtfQVBJIFdlYktpdEd0a0ZyYW1lKgogd2Via2l0X2d0a19w
YWdlX2dldF9tYWluX2ZyYW1lIChXZWJLaXRHdGtQYWdlKiBwYWdlKTsKIApJbmRleDogV2ViS2l0
L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a3ByaXZhdGUuaAkocmV2aXNpb24gMjU2NzApCisrKyBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgZXh0ZXJu
ICJDIiB7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdl
bnQ7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdXNlckFnZW50OwogCisgICAgICAgIGludCBt
X3dpZHRoLCBtX2hlaWdodDsKKwogICAgICAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVu
OwogICAgIH07CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16412</attachid>
            <date>2007-09-27 06:42:00 -0700</date>
            <delta_ts>2007-09-27 07:07:09 -0700</delta_ts>
            <desc>Changed names from GDK to GTK, more code cleanups</desc>
            <filename>zooming-20070927.patch</filename>
            <type>text/plain</type>
            <size>27080</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTc3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDctMDktMjcgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0
QGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAor
ICAgICAgICBGdWxsIHBhZ2Ugem9vbWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiB6b29taW5nIHN1cHBvcnQuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVT
VCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2FsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzY2FsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3OjpyZXNpemUpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAg
ICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0U2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2NhbGVGYWN0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1X
aGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Q
bGF0Zm9ybVNjcm9sbEJhckd0ay5jcHA6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6Z2Vv
bWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3gpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvU2Nyb2xsVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3U2Nyb2xs
YmFyOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBk
YXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93
eC9TY3JvbGxWaWV3V3guY3BwOgorCiAyMDA3LTA5LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICAtIGZpeCBXaW5kb3dzIGJ1aWxkCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzk5LDExICs3OTksMTMgQEAgQ3Vyc29yIEV2ZW50SGFuZGxl
cjo6c2VsZWN0Q3Vyc29yKGNvbnN0IAogICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiB9CiAK
LWJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJl
c3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghbV9m
cmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgUGxhdGZvcm1N
b3VzZUV2ZW50IG1vdXNlRXZlbnQgPSBzY2FsZU1vdXNlRXZlbnQoZXZlbnQpOworCiAgICAgUmVm
UHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CiAKICAgICBtX21vdXNl
UHJlc3NlZCA9IHRydWU7CkBAIC05MTYsMTUgKzkxOCwxNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VEb3VibGVDbGljCiAKIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50
IG1vdXNlRXZlbnQgPSBzY2FsZU1vdXNlRXZlbnQoZXZlbnQpOworCiAgICAgSGl0VGVzdFJlc3Vs
dCBob3ZlcmVkTm9kZSA9IEhpdFRlc3RSZXN1bHQoSW50UG9pbnQoKSk7Ci0gICAgYm9vbCByZXN1
bHQgPSBoYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCwgJmhvdmVyZWROb2RlKTsKKyAgICBib29s
IHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2ZW50KG1vdXNlRXZlbnQsICZob3ZlcmVkTm9kZSk7
CiAKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGhvdmVyZWROb2RlLnNldFRvTm9uU2hhZG93QW5j
ZXN0b3IoKTsKLSAgICBwYWdlLT5jaHJvbWUoKS0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoaG92
ZXJlZE5vZGUsIGV2ZW50Lm1vZGlmaWVyRmxhZ3MoKSk7CisgICAgcGFnZS0+Y2hyb21lKCktPm1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGhvdmVyZWROb2RlLCBtb3VzZUV2ZW50Lm1vZGlmaWVyRmxh
Z3MoKSk7CiAgICAgcGFnZS0+Y2hyb21lKCktPnNldFRvb2xUaXAoaG92ZXJlZE5vZGUpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDI0LDEzICsxMDI4LDE1IEBAIHZvaWQgRXZlbnRIYW5k
bGVyOjppbnZhbGlkYXRlQ2xpY2soKQogICAgIG1fY2xpY2tOb2RlID0gMDsKIH0KIAotYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgbW91c2VFdmVudCkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghbV9mcmFt
ZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPEZyYW1l
Vmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CiAKKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgbW91c2VFdmVudCA9IHNjYWxlTW91c2VFdmVudChldmVudCk7CisKICAgICBtX21vdXNlUHJl
c3NlZCA9IGZhbHNlOwogICAgIG1fY3VycmVudE1vdXNlUG9zaXRpb24gPSBtb3VzZUV2ZW50LnBv
cygpOwogCkBAIC0xMjc1LDcgKzEyODEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hN
b3VzZUV2ZW50KGNvCiAgICAgcmV0dXJuIHN3YWxsb3dFdmVudDsKIH0KIAotYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQorYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKIHsK
ICAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykK
QEAgLTEyODUsNiArMTI5MSw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50
KFBsYXQKICAgICBpZiAoIWRvY1JlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKwor
ICAgIFBsYXRmb3JtV2hlZWxFdmVudCBlID0gc2NhbGVXaGVlbEV2ZW50KGV2ZW50KTsKKwogICAg
IEludFBvaW50IHZQb2ludCA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhlLnBv
cygpKTsKIAogICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QodHJ1ZSwgZmFsc2UpOwpAQCAtMTc1
OSw0ICsxNzY4LDI1IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0VGFiRXZlbnRIYW5kbGUK
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKK1BsYXRmb3JtTW91c2VF
dmVudCBFdmVudEhhbmRsZXI6OnNjYWxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIG1vdXNlRXZlbnQpCit7CisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gbV9mcmFtZS0+cGFn
ZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgSW50UG9pbnQgc2NhbGVkUG9zKHN0YXRpY19jYXN0
PGludD4obW91c2VFdmVudC54KCkgLyBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4obW91
c2VFdmVudC55KCkgLyBzY2FsZUZhY3RvcikpOworCisgICAgcmV0dXJuIFBsYXRmb3JtTW91c2VF
dmVudChzY2FsZWRQb3MsIEludFBvaW50KG1vdXNlRXZlbnQuZ2xvYmFsWCgpLCBtb3VzZUV2ZW50
Lmdsb2JhbFkoKSksIG1vdXNlRXZlbnQuYnV0dG9uKCksIG1vdXNlRXZlbnQuZXZlbnRUeXBlKCks
CisgICAgICAgICAgICBtb3VzZUV2ZW50LmNsaWNrQ291bnQoKSwgbW91c2VFdmVudC5zaGlmdEtl
eSgpLCBtb3VzZUV2ZW50LmN0cmxLZXkoKSwgbW91c2VFdmVudC5hbHRLZXkoKSwgbW91c2VFdmVu
dC5tZXRhS2V5KCksIG1vdXNlRXZlbnQudGltZXN0YW1wKCkpOworfQorCitQbGF0Zm9ybVdoZWVs
RXZlbnQgRXZlbnRIYW5kbGVyOjpzY2FsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IG1fZnJhbWUtPnBh
Z2UoKS0+c2NhbGVGYWN0b3IoKTsKKworICAgIEludFBvaW50IHNjYWxlZFBvcyhzdGF0aWNfY2Fz
dDxpbnQ+KHdoZWVsRXZlbnQueCgpIC8gc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdo
ZWVsRXZlbnQueSgpIC8gc2NhbGVGYWN0b3IpKTsKKworICAgIHJldHVybiBQbGF0Zm9ybVdoZWVs
RXZlbnQoc2NhbGVkUG9zLCBJbnRQb2ludCh3aGVlbEV2ZW50Lmdsb2JhbFgoKSwgd2hlZWxFdmVu
dC5nbG9iYWxZKCkpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRhWSgpLAor
ICAgICAgICAgICAgd2hlZWxFdmVudC5jb250aW51b3VzRGVsdGFYKCksIHdoZWVsRXZlbnQuY29u
dGludW91c0RlbHRhWSgpLCB3aGVlbEV2ZW50LmlzQ29udGludW91cygpLCB3aGVlbEV2ZW50Lmlz
QWNjZXB0ZWQoKSwKKyAgICAgICAgICAgIHdoZWVsRXZlbnQuc2hpZnRLZXkoKSwgd2hlZWxFdmVu
dC5jdHJsS2V5KCksIHdoZWVsRXZlbnQuYWx0S2V5KCksIHdoZWVsRXZlbnQubWV0YUtleSgpKTsK
K30KKwogfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsOSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZvY3VzRG9jdW1lbnRWaWV3KCk7CiAKKyAgICBQbGF0Zm9ybU1v
dXNlRXZlbnQgc2NhbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAg
IFBsYXRmb3JtV2hlZWxFdmVudCBzY2FsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgUGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50
PiBjdXJyZW50S2V5Ym9hcmRFdmVudCgpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2
aXNpb24gMjU3NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTk2NCw2ICs5NjUsMTMgQEAg
dm9pZCBGcmFtZVZpZXc6OnNldFdhc1Njcm9sbGVkQnlVc2VyKGJvbwogICAgIGQtPm1fd2FzU2Ny
b2xsZWRCeVVzZXIgPSB3YXNTY3JvbGxlZEJ5VXNlcjsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnJl
c2l6ZShpbnQgdywgaW50IGgpCit7CisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gZnJhbWUoKS0+
cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgV2lkZ2V0OjpyZXNpemUoc3RhdGljX2Nhc3Q8
aW50Pih3IC8gc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KGggLyBzY2FsZUZhY3Rvcikp
OworfQorCiAjaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShHVEspCiB2b2lkIEZyYW1lVmll
dzo6bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKQogewpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24g
MjU3NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MCw2ICsxMzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRXaWRnZXRUb1VwZGF0ZShSZW5kZXJQ
YXJ0T2JqZWN0Kik7CiAgICAgdm9pZCByZW1vdmVXaWRnZXRUb1VwZGF0ZShSZW5kZXJQYXJ0T2Jq
ZWN0Kik7CiAKKyAgICB2b2lkIHJlc2l6ZShpbnQsIGludCk7CisKICAgICAvLyBGSVhNRTogVGhp
cyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYnkgYWxsIHBsYXRmb3JtcywgYnV0IGN1cnJlbnRseSBk
ZXBlbmRzIG9uIFNjcm9sbFZpZXc6OmNoaWxkcmVuLAogICAgIC8vIHdoaWNoIG5vdCBhbGwgbWV0
aG9kcyBoYXZlLiBPbmNlIEZyYW1lVmlldyBhbmQgU2Nyb2xsVmlldyBhcmUgbWVyZ2VkLCB0aGlz
ICNpZiBzaG91bGQgYmUgcmVtb3ZlZC4KICNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdU
SykKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAJKHJldmlzaW9uIDI1NzczKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBj
aHJvbWVDbGllbnQsIEMKICAgICAsIG1fZGVmZXJzTG9hZGluZyhmYWxzZSkKICAgICAsIG1faW5M
b3dRdWFsaXR5SW50ZXJwb2xhdGlvbk1vZGUoZmFsc2UpCiAgICAgLCBtX3BhcmVudEluc3BlY3Rv
ckNvbnRyb2xsZXIoMCkKKyAgICAsIG1fc2NhbGVGYWN0b3IoMS4wKQogewogICAgIGlmICghYWxs
UGFnZXMpIHsKICAgICAgICAgYWxsUGFnZXMgPSBuZXcgSGFzaFNldDxQYWdlKj47CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJl
dmlzaW9uIDI1NzczKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNiArNzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgZ29CYWNrKCk7
CiAgICAgICAgIGJvb2wgZ29Gb3J3YXJkKCk7CiAgICAgICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9y
eUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKworICAgICAgICB2b2lkIHNldFNjYWxlRmFjdG9yKGRv
dWJsZSBzY2FsZUZhY3RvcikgeyBtX3NjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KKyAgICAg
ICAgZG91YmxlIHNjYWxlRmFjdG9yKCkgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogICAgICAg
ICAKICAgICAgICAgdm9pZCBzZXRHcm91cE5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIFN0
cmluZyBncm91cE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwTmFtZTsgfQpAQCAtMTM4LDkg
KzE0MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9kZWZlcnNMb2Fk
aW5nOwogCiAgICAgICAgIGJvb2wgbV9pbkxvd1F1YWxpdHlJbnRlcnBvbGF0aW9uTW9kZTsKLSAg
ICAKKwogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX3BhcmVudEluc3BlY3RvckNvbnRy
b2xsZXI7CiAKKyAgICAgICAgZG91YmxlIG1fc2NhbGVGYWN0b3I7CisKICNpZiBQTEFURk9STShX
SU4pCiAgICAgICAgIHN0YXRpYyBISU5TVEFOQ0Ugc19pbnN0YW5jZUhhbmRsZTsKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCShyZXZpc2lvbiAyNTc3MykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDYgKzU0LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFBsYXRm
b3JtV2hlZWxFdmVudCB7CiAgICAgcHVibGljOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQo
Y29uc3QgSW50UG9pbnQmIHBvcywgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvcywgZmxvYXQgZGVs
dGFYLCBmbG9hdCBkZWx0YVksCisgICAgICAgICAgICAgICAgZmxvYXQgY29udGludW91c0RlbHRh
WCwgZmxvYXQgY29udGludW91c0RlbHRhWSwgYm9vbCBpc0NvbnRpbnVvdXMsIGJvb2wgaXNBY2Nl
cHRlZCwKKyAgICAgICAgICAgICAgICBib29sIHNoaWZ0LCBib29sIGN0cmwsIGJvb2wgYWx0LCBi
b29sIG1ldGEpCisgICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zKSwgbV9nbG9iYWxQb3NpdGlv
bihnbG9iYWxQb3MpLCBtX2RlbHRhWChkZWx0YVgpLCBtX2RlbHRhWShkZWx0YVkpCisgICAgICAg
ICAgICAsIG1fY29udGludW91c0RlbHRhWChjb250aW51b3VzRGVsdGFYKQorICAgICAgICAgICAg
LCBtX2NvbnRpbnVvdXNEZWx0YVkoY29udGludW91c0RlbHRhWSkKKyAgICAgICAgICAgICwgbV9p
c0NvbnRpbnVvdXMoaXNDb250aW51b3VzKQorICAgICAgICAgICAgLCBtX2lzQWNjZXB0ZWQoaXNB
Y2NlcHRlZCkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdCkKKyAgICAgICAgICAgICwg
bV9jdHJsS2V5KGN0cmwpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFsdCkKKyAgICAgICAgICAg
ICwgbV9tZXRhS2V5KG1ldGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0
IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAgICAgIGNv
bnN0IEludFBvaW50JiBnbG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9u
OyB9CiAKQEAgLTk2LDE0ICsxMTEsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJ
bnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwogICAgICAgICBmbG9hdCBtX2RlbHRhWDsKICAgICAg
ICAgZmxvYXQgbV9kZWx0YVk7CisgICAgICAgIGZsb2F0IG1fY29udGludW91c0RlbHRhWDsKKyAg
ICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVsdGFZOworICAgICAgICBib29sIG1faXNDb250aW51
b3VzOwogICAgICAgICBib29sIG1faXNBY2NlcHRlZDsKICAgICAgICAgYm9vbCBtX3NoaWZ0S2V5
OwogICAgICAgICBib29sIG1fY3RybEtleTsKICAgICAgICAgYm9vbCBtX2FsdEtleTsKICAgICAg
ICAgYm9vbCBtX21ldGFLZXk7Ci0gICAgICAgIGJvb2wgbV9pc0NvbnRpbnVvdXM7Ci0gICAgICAg
IGZsb2F0IG1fY29udGludW91c0RlbHRhWDsKLSAgICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVs
dGFZOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjU3NzMpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTksNyArMjE5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNl
dEdka0V4cG9zZUV2ZW50KEdka0V2ZW50RXhwb3NlKik7CiAgICAgICAgIEdka0RyYXdhYmxlKiBn
ZGtEcmF3YWJsZSgpIGNvbnN0OwogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZl
bnQoKSBjb25zdDsKLSAgICAgICAgSW50UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9p
bnQmKSBjb25zdDsKKyAgICAgICAgSW50UmVjdCB0cmFuc2xhdGVSZWN0KGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShy
ZXZpc2lvbiAyNTc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDI3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEludFJlY3QKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwotICAgIGNhaXJvX3JlY3RhbmdsZShjciwg
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAg
ZG91YmxlIHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3QueCgpKTsKKyAgICBkb3VibGUgeSA9
IHN0YXRpY19jYXN0PGRvdWJsZT4ocmVjdC55KCkpOworCisgICAgLy8gV2Ugd2FudCB0aGUgbWlu
aW11bSBpbnRlZ2VyIG51bWJlciBvZiBzY2FsZWQgcGl4ZWxzIHdoaWNoIGNvdmVycworICAgIC8v
IHRoZSB3aG9sZSBhcmVhLCBzbyBpbmNyZWFzZSBieSAxCisgICAgZG91YmxlIHdpZHRoID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihyZWN0LndpZHRoKCkpICsgMTsKKyAgICBkb3VibGUgaGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LmhlaWdodCgpKSArIDE7CisKKyAgICBjYWlyb191c2Vy
X3RvX2RldmljZShjciwgJngsICZ5KTsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZV9kaXN0YW5j
ZShjciwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIHggPSByb3VuZCh4KTsKKyAgICB5ID0gcm91
bmQoeSk7CisgICAgd2lkdGggPSByb3VuZCh3aWR0aCk7CisgICAgaGVpZ2h0ID0gcm91bmQoaGVp
Z2h0KTsKKworICAgIGNhaXJvX2RldmljZV90b191c2VyKGNyLCAmeCwgJnkpOworICAgIGNhaXJv
X2RldmljZV90b191c2VyX2Rpc3RhbmNlKGNyLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19jbGlwKGNy
KTsKIH0KIApAQCAtODE5LDE2ICs4MzksMjMgQEAgR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4
dDo6Z2RrRHJhd2FibAogICAgIHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndp
bmRvdyk7CiB9CiAKLUludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29u
c3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OnRyYW5z
bGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjYWlyb19tYXRyaXhf
dCB0bTsKICAgICBjYWlyb19nZXRfbWF0cml4KG1fZGF0YS0+Y3IsICZ0bSk7Ci0gICAgZG91Ymxl
IHggPSBwb2ludC54KCk7Ci0gICAgZG91YmxlIHkgPSBwb2ludC55KCk7CisKKworICAgIGRvdWJs
ZSB4ID0gcmVjdC54KCk7CisgICAgZG91YmxlIHkgPSByZWN0LnkoKTsKKyAgICBkb3VibGUgd2lk
dGggPSByZWN0LndpZHRoKCk7CisgICAgZG91YmxlIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CiAK
ICAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZ0bSwgJngsICZ5KTsKLSAgICByZXR1
cm4gSW50UG9pbnQoeCwgeSk7CisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0YW5jZSgm
dG0sICZ3aWR0aCwmIGhlaWdodCk7CisKKyAgICByZXR1cm4gSW50UmVjdChzdGF0aWNfY2FzdDxp
bnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3Rh
dGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNh
aXJvLmNwcAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIFRlc3QgdXNpbmcg
ZXhhbXBsZSBzaXRlIGF0IGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29t
cGxleHNwaXJhbC9kZW1vLmh0bWwKICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWly
b19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShpbWFnZSk7CiAKLSAgICAvLyBUbyBhdm9pZCB0
aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZQotICAgIC8vIENBSVJP
X0ZJTFRFUl9ORUFSRVNUIG5vdywgYnV0IHRoZSByZWFsIGZpeCB3aWxsIGJlIHRvIGhhdmUKLSAg
ICAvLyBDQUlST19FWFRFTkRfUEFEIGltcGxlbWVudGVkIGZvciBzdXJmYWNlcyBpbiBDYWlybyBh
bGxvd2luZyB1cyB0byBzdGlsbAotICAgIC8vIHVzZSBiaWxpbmVhciBmaWx0ZXJpbmcKKyAgICAv
LyBUbyBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZSBD
QUlST19FWFRFTkRfUkVQRUFUCisgICAgLy8gZm9yIG5vdyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSdk
IGxpa2UgdG8gdXNlIENBSVJPX0VYVEVORF9QQUQgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGUKKyAg
ICAvLyBpbiBjYWlybyB5ZXQuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gdXNlIENBSVJPX0ZJTFRF
Ul9CRVNUIGluc3RlYWQgb2YgQ0FJUk9fRklMVEVSX05FQVJFU1QKKyAgICBjYWlyb19wYXR0ZXJu
X3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CiAgICAgY2Fpcm9fcGF0
dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKIAogICAgIGZs
b2F0IHNjYWxlWCA9IHNyY1JlY3Qud2lkdGgoKSAvIGRzdFJlY3Qud2lkdGgoKTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCShyZXZpc2lvbiAy
NTc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDExIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QKICAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZShmb250TWF0cml4
LCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgbV9mb250RGVzY3JpcHRpb24uY29t
cHV0ZWRTaXplKCkpOwogICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwogICAg
IG9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgLy8gRklYTUU6IHdl
IHNob3VsZCB3b3JrIG91dCBob3cgdG8gZ2V0IHRoZSB0cnVlIChoaW50ZWQpIGV4dGVudHMgZnJv
bSBjYWlybyBpbnN0ZWFkIG9mCisgICAgLy8gZGlzYWJsaW5nIGhpbnRpbmcuIFNlZSBodHRwOi8v
bGlzdHMuY2Fpcm9ncmFwaGljcy5vcmcvYXJjaGl2ZXMvY2Fpcm8vMjAwNy1TZXB0ZW1iZXIvMDEx
MzY2Lmh0bWwKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywg
Q0FJUk9fSElOVF9TVFlMRV9OT05FKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlh
bGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfU1VCUElYRUwpOworCiAgICAgbV9zY2FsZWRG
b250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCBmb250TWF0cml4LCAmY3Rt
LCBvcHRpb25zKTsKICAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShmb250RmFjZSk7CiAgICAg
Y2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JvbGxCYXJHdGsuY3BwCShyZXZpc2lvbiAyNTc3MykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAjaW5j
bHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CiAjaW5jbHVkZSA8c3Rk
aW8uaD4KQEAgLTEyMSw4ICsxMjIsMTIgQEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0
cnlDaGFuZ2VkKAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsK
KyAgICAKKyAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2Uo
KS0+c2NhbGVGYWN0b3IoKTsKKwogICAgIEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJh
bWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJh
bWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3
aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93
UmVjdC5oZWlnaHQoKSB9OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgc3RhdGlj
X2Nhc3Q8aW50Pih3aW5kb3dSZWN0LngoKSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nhc3Q8aW50
Pih3aW5kb3dSZWN0LnkoKSAqIHNjYWxlRmFjdG9yKSwgCisgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4od2luZG93UmVjdC53aWR0aCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdp
bmRvd1JlY3QuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcikgfTsKICAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwx
MSArMTgwLDExIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGUKIHsK
ICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0a1dpZGdl
dCogY2hlY2tib3ggPSBndGtDaGVja2JveCgpOwotICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4
dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IHNjYWxlZFJl
Y3QgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVJlY3QocmVjdCk7CiAgICAgZ3RrX3BhaW50X2NoZWNr
KGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAg
ICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAg
ICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNoZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAg
ICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2NhbGVkUmVjdC54KCksIHNjYWxlZFJlY3QueSgpLCBzY2FsZWRS
ZWN0LndpZHRoKCksIHNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtMjEzLDI0ICsyMTMsMjQgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhS
ZW5kZXJPYgogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwog
ICAgIEd0a1dpZGdldCogcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOwotICAgIEludFBvaW50IHBv
cyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRS
ZWN0IHNjYWxlZFJlY3QgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVJlY3QocmVjdCk7CiAgICAgZ3Rr
X3BhaW50X29wdGlvbihyYWRpby0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAg
ICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyks
CiAgICAgICAgICAgICAgICAgICAgICBOVUxMLCByYWRpbywgInJhZGlvYnV0dG9uIiwKLSAgICAg
ICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CisgICAgICAgICAgICAgICAgICAgICBzY2FsZWRSZWN0LngoKSwgc2NhbGVkUmVjdC55
KCksIHNjYWxlZFJlY3Qud2lkdGgoKSwgc2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpIAoteyAKK3sKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBkcmF3
aW5nLiBUaGlzIHNob3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAogICAgIEd0a1dpZGdldCog
YnV0dG9uID0gZ3RrQnV0dG9uKCk7Ci0gICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFu
c2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGku
Y29udGV4dC0+dHJhbnNsYXRlUmVjdChyZWN0KTsKICAgICBndGtfcGFpbnRfYm94KGJ1dHRvbi0+
c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAgICAgIGRldGVy
bWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAgICAgICAgICAgICAgICAgICBOVUxM
LCBidXR0b24sICJidXR0b24iLAotICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgIHNjYWxlZFJl
Y3QueCgpLCBzY2FsZWRSZWN0LnkoKSwgc2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0Lmhl
aWdodCgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbFZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbFZpZXdHdGsuY3BwCShyZXZpc2lvbiAyNTc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbFZpZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMCBAQAog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCisKKyNpbmNsdWRl
ICJ3ZWJraXRndGtwYWdlLmgiCisjaW5jbHVkZSAid2Via2l0Z3RrcHJpdmF0ZS5oIgorCiAjaW5j
bHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIApAQCAtMTI4LDggKzEzMiwx
MiBAQCB2b2lkIFNjcm9sbFZpZXdTY3JvbGxiYXI6Omdlb21ldHJ5Q2hhbmdlCiAgICAgQVNTRVJU
KHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKIAogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgZG91YmxlIHNjYWxlRmFj
dG9yID0gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisKICAgICBJ
bnRSZWN0IHdpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXpl
KCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgd2luZG93UmVjdC54KCksIHdp
bmRvd1JlY3QueSgpLCB3aW5kb3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkgfTsK
KyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHN0YXRpY19jYXN0PGludD4od2luZG93
UmVjdC54KCkgKiBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4od2luZG93UmVjdC55KCkg
KiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4od2luZG93UmVjdC53aWR0
aCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QuaGVpZ2h0KCkg
KiBzY2FsZUZhY3RvcikgfTsKICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0
KCksICZhbGxvY2F0aW9uKTsKIH0KIApAQCAtMjg3LDE3ICsyOTUsMzAgQEAgdm9pZCBTY3JvbGxW
aWV3OjpzZXRHdGtBZGp1c3RtZW50cyhHdGtBZAogCiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNv
bnRlbnRzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQogeworICAgIEFTU0VS
VChjb250YWluaW5nV2luZG93KCkpOworCiAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpOworCisgICAg
ZG91YmxlIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFj
dG9yKCk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lUX0dUS19QQUdFKGNvbnRh
aW5pbmdXaW5kb3coKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VC
S0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCiAgICAgSW50UG9pbnQgd2luZG93UG9p
bnQgPSBjb250ZW50c1RvV2luZG93KHVwZGF0ZVJlY3QubG9jYXRpb24oKSk7CiAgICAgSW50UmVj
dCBjb250YWluaW5nV2luZG93UmVjdCA9IHVwZGF0ZVJlY3Q7CiAgICAgY29udGFpbmluZ1dpbmRv
d1JlY3Quc2V0TG9jYXRpb24od2luZG93UG9pbnQpOworICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0
LnNjYWxlKHNjYWxlRmFjdG9yKTsKIAogICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyBjb250YWlu
aW5nV2luZG93UmVjdC54KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRv
d1JlY3Qud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRv
d1JlY3QuaGVpZ2h0KCkgfTsKKwogICAgIEdka1dpbmRvdyogd2luZG93ID0gR1RLX1dJREdFVChj
b250YWluaW5nV2luZG93KCkpLT53aW5kb3c7CiAKICAgICBpZiAod2luZG93KQpAQCAtMzEzLDgg
KzMzNCwxNSBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEluCiB2b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZSgpCiB7CiAgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7
CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKKworICAgIGRvdWJsZSBzY2FsZUZhY3Rv
ciA9IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgR2Rr
UmVjdGFuZ2xlIHJlY3QgPSB7IHN0YXRpY19jYXN0PGludD4oZnJhbWVHZW9tZXRyeSgpLngoKSAq
IHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZUdlb21ldHJ5KCkueSgpICogc2Nh
bGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS0+Y29udGVudHNTaXpl
LndpZHRoKCkgKiBzY2FsZUZhY3RvciksICBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS0+Y29udGVu
dHNTaXplLmhlaWdodCgpICogc2NhbGVGYWN0b3IpIH07CiAKLSAgICBHZGtSZWN0YW5nbGUgcmVj
dCA9IHsgMCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9kYXRhLT5jb250ZW50
c1NpemUuaGVpZ2h0KCkgfTsKICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChHVEtfV0lE
R0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgJnJlY3QsIHRydWUpOwogfQogCkBAIC02
OTYsMTYgKzcyNCwzMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8g
Zm9yayBGcmFtZVZpZXcuaC8uY3BwLgogICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91
bGQganVzdCBtZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisKICAgICBBU1NFUlQoaXNGcmFtZVZpZXco
KSk7CiAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHRoaXMpOworCisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFtZSgpLT5w
YWdlKCktPnNjYWxlRmFjdG9yKCk7CisKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGRvY3VtZW50RGlydHlSZWN0ID0g
cmVjdDsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIGRvY3VtZW50RGlydHlSZWN0LnNj
YWxlKDEgLyBzY2FsZUZhY3Rvcik7CisKICAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3Qo
ZnJhbWVHZW9tZXRyeSgpKTsKIAorICAgIC8vIFBhaW50IGFuIGV4dHJhIDIgcGl4ZWxzIGFyb3Vu
ZCB0byBhY2NvbW1vZGF0ZSBhcnRpZmFjdHMgYW5kIHJvdW5kaW5nIGVycm9ycyBpbiB0aGUgc2Nh
bGluZworICAgIGRvY3VtZW50RGlydHlSZWN0LmluZmxhdGUoMik7CisKICAgICBjb250ZXh0LT5z
YXZlKCk7CiAKKyAgICAvLyBPbmx5IHNjYWxlIHRoZSByb290IFNjcm9sbFZpZXcKKyAgICBpZiAo
IXBhcmVudCgpKQorICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3Is
IHNjYWxlRmFjdG9yKSk7CisKICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwogICAg
IGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3d4L1Njcm9sbFZpZXdXeC5jcHAJKHJldmlzaW9uIDI1NzczKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93eC9TY3JvbGxWaWV3V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNyArMzAwLDYgQEAg
dm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cgogICAgIHNldENvbnRlbnRz
UG9zKHJlY3QueCgpLCByZWN0LnkoKSk7CiB9CiAKLQogUGxhdGZvcm1TY3JvbGxiYXIqIFNjcm9s
bFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50KSAKIHsKICAgICAvLyBBRkFJQ1QgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHBsYXRmb3Jt
cyB0aGF0IHByb3ZpZGUgCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJLaXQvZ3RrL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA3LTA5LTI3ICBHZW9y
Z2UgV3JpZ2h0ICA8c2V0IEVNQUlMX0FERFJFU1MgZW52aXJvbm1lbnQgdmFyaWFibGU+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTgKKyAgICAgICAgRnVsbCBwYWdlIHpvb21p
bmcgc3VwcG9ydAorCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2Ygem9vbWluZyBz
dXBwb3J0LgorCisgICAgICAgICogQXBpL3dlYmtpdGd0a3BhZ2UuY3BwOgorICAgICAgICAqIEFw
aS93ZWJraXRndGtwYWdlLmg6CisgICAgICAgICogQXBpL3dlYmtpdGd0a3ByaXZhdGUuaDoKKwog
MjAwNy0wOS0yNiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIEd0ayBi
dWlsZCBmaXguCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkocmV2aXNpb24gMjU3NzMp
CisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI3LDYgKzEyNywxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX3Njcm9sbF9l
CiBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZShHdGtXaWRnZXQqIHdp
ZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKIHsKICAgICBHVEtfV0lER0VUX0NMQVNT
KHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCxhbGxv
Y2F0aW9uKTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RL
X1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpOworCisgICAgLy8gV2Ug
Y2FjaGUgdGhlIHVuc2NhbGVkIHdpZHRoL2hlaWdodCBhcyByZWNhbGN1bGF0aW5nIHRoZW0gdXNp
bmcgdGhlIHNjYWxlRmFjdG9yIGxlYWRzIHRvCisgICAgLy8gcm91bmRpbmcgZXJyb3JzCisgICAg
cGFnZURhdGEtPm1fd2lkdGggPSBhbGxvY2F0aW9uLT53aWR0aDsKKyAgICBwYWdlRGF0YS0+bV9o
ZWlnaHQgPSBhbGxvY2F0aW9uLT5oZWlnaHQ7CiAKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdl
dEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKICAgICBmcmFtZS0+dmll
dygpLT5yZXNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7CkBAIC01
MzMsNCArNTM5LDMwIEBAIFdlYktpdEd0a0ZyYW1lKiB3ZWJraXRfZ3RrX3BhZ2VfZ2V0X21haW4K
ICAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VU
X1BSSVZBVEUocGFnZSk7CiAgICAgcmV0dXJuIHBhZ2VEYXRhLT5tYWluRnJhbWU7CiB9CisKK3Zv
aWQgd2Via2l0X2d0a19wYWdlX3NldF9zY2FsZV9mYWN0b3IoV2ViS2l0R3RrUGFnZSogcGFnZSwg
ZG91YmxlIGZhY3RvcikKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBh
Z2UocGFnZSkpOworCisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lU
X0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSog
ZnJhbWVEYXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZy
YW1lKTsKKworICAgIHBhZ2VEYXRhLT5wYWdlLT5zZXRTY2FsZUZhY3RvcihmYWN0b3IpOworCisg
ICAgZnJhbWUtPnZpZXcoKS0+cmVzaXplKHBhZ2VEYXRhLT5tX3dpZHRoLCBwYWdlRGF0YS0+bV9o
ZWlnaHQpOworICAgIGZyYW1lLT5mb3JjZUxheW91dCgpOworICAgIGZyYW1lLT52aWV3KCktPmFk
anVzdFZpZXdTaXplKCk7CisgICAgZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOworfQorCitkb3Vi
bGUgd2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3IoV2ViS2l0R3RrUGFnZSogcGFnZSkK
K3sKKyAgICAvL1dlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFH
RV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICAvL1dlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVE
YXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsK
KworICAgIC8vRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZURhdGEtPmZyYW1lLT52aWV3KCk7
CisgICAgLy8KKyAgICByZXR1cm4gY29yZShwYWdlKS0+c2NhbGVGYWN0b3IoKTsKK30KKwogfQpJ
bmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJLaXQvZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsMTIgQEAg
d2Via2l0X2d0a19wYWdlX2xvYWRfc3RyaW5nIChXZWJLaXRHdGtQYQogV0VCS0lUX0dUS19BUEkg
dm9pZAogd2Via2l0X2d0a19wYWdlX2xvYWRfaHRtbF9zdHJpbmcgKFdlYktpdEd0a1BhZ2UqIHBh
Z2UsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogYmFzZV91cmwpOwogCitXRUJL
SVRfR1RLX0FQSSB2b2lkCit3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0
R3RrUGFnZSogcGFnZSwgZG91YmxlIGZhY3Rvcik7CisKK1dFQktJVF9HVEtfQVBJIGRvdWJsZQor
d2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3IgKFdlYktpdEd0a1BhZ2UqIHBhZ2UpOwor
CiBXRUJLSVRfR1RLX0FQSSBXZWJLaXRHdGtGcmFtZSoKIHdlYmtpdF9ndGtfcGFnZV9nZXRfbWFp
bl9mcmFtZSAoV2ViS2l0R3RrUGFnZSogcGFnZSk7CiAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dl
YmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtw
cml2YXRlLmgJKHJldmlzaW9uIDI1NzczKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIGV4dGVybiAiQyIgewogICAg
ICAgICBXZWJDb3JlOjpTdHJpbmcgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAg
ICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJBZ2VudDsKIAorICAgICAgICBpbnQgbV93aWR0aCwgbV9o
ZWlnaHQ7CisKICAgICAgICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJlbjsKICAgICB9Owog
ICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16413</attachid>
            <date>2007-09-27 07:07:09 -0700</date>
            <delta_ts>2007-10-04 03:19:34 -0700</delta_ts>
            <desc>Changed Page::scaleFactor to const, fixed broken email address</desc>
            <filename>zooming-20070927-r2.patch</filename>
            <type>text/plain</type>
            <size>27077</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTc3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDctMDktMjcgIEdlb3JnZSBXcmlnaHQgIDxnZW9yZ2Uud3JpZ2h0
QGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5OAor
ICAgICAgICBGdWxsIHBhZ2Ugem9vbWluZyBzdXBwb3J0CisKKyAgICAgICAgSW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiB6b29taW5nIHN1cHBvcnQuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVT
VCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2FsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzY2FsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3OjpyZXNpemUpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAg
ICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0U2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2NhbGVGYWN0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1X
aGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Q
bGF0Zm9ybVNjcm9sbEJhckd0ay5jcHA6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6Z2Vv
bWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3gpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvU2Nyb2xsVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3U2Nyb2xs
YmFyOjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBk
YXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93
eC9TY3JvbGxWaWV3V3guY3BwOgorCiAyMDA3LTA5LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICAtIGZpeCBXaW5kb3dzIGJ1aWxkCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzk5LDExICs3OTksMTMgQEAgQ3Vyc29yIEV2ZW50SGFuZGxl
cjo6c2VsZWN0Q3Vyc29yKGNvbnN0IAogICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiB9CiAK
LWJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJl
c3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghbV9m
cmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgUGxhdGZvcm1N
b3VzZUV2ZW50IG1vdXNlRXZlbnQgPSBzY2FsZU1vdXNlRXZlbnQoZXZlbnQpOworCiAgICAgUmVm
UHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CiAKICAgICBtX21vdXNl
UHJlc3NlZCA9IHRydWU7CkBAIC05MTYsMTUgKzkxOCwxNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VEb3VibGVDbGljCiAKIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50
IG1vdXNlRXZlbnQgPSBzY2FsZU1vdXNlRXZlbnQoZXZlbnQpOworCiAgICAgSGl0VGVzdFJlc3Vs
dCBob3ZlcmVkTm9kZSA9IEhpdFRlc3RSZXN1bHQoSW50UG9pbnQoKSk7Ci0gICAgYm9vbCByZXN1
bHQgPSBoYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCwgJmhvdmVyZWROb2RlKTsKKyAgICBib29s
IHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2ZW50KG1vdXNlRXZlbnQsICZob3ZlcmVkTm9kZSk7
CiAKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGhvdmVyZWROb2RlLnNldFRvTm9uU2hhZG93QW5j
ZXN0b3IoKTsKLSAgICBwYWdlLT5jaHJvbWUoKS0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoaG92
ZXJlZE5vZGUsIGV2ZW50Lm1vZGlmaWVyRmxhZ3MoKSk7CisgICAgcGFnZS0+Y2hyb21lKCktPm1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGhvdmVyZWROb2RlLCBtb3VzZUV2ZW50Lm1vZGlmaWVyRmxh
Z3MoKSk7CiAgICAgcGFnZS0+Y2hyb21lKCktPnNldFRvb2xUaXAoaG92ZXJlZE5vZGUpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDI0LDEzICsxMDI4LDE1IEBAIHZvaWQgRXZlbnRIYW5k
bGVyOjppbnZhbGlkYXRlQ2xpY2soKQogICAgIG1fY2xpY2tOb2RlID0gMDsKIH0KIAotYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgbW91c2VFdmVudCkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghbV9mcmFt
ZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPEZyYW1l
Vmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CiAKKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgbW91c2VFdmVudCA9IHNjYWxlTW91c2VFdmVudChldmVudCk7CisKICAgICBtX21vdXNlUHJl
c3NlZCA9IGZhbHNlOwogICAgIG1fY3VycmVudE1vdXNlUG9zaXRpb24gPSBtb3VzZUV2ZW50LnBv
cygpOwogCkBAIC0xMjc1LDcgKzEyODEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hN
b3VzZUV2ZW50KGNvCiAgICAgcmV0dXJuIHN3YWxsb3dFdmVudDsKIH0KIAotYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQorYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKIHsK
ICAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykK
QEAgLTEyODUsNiArMTI5MSw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50
KFBsYXQKICAgICBpZiAoIWRvY1JlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKwor
ICAgIFBsYXRmb3JtV2hlZWxFdmVudCBlID0gc2NhbGVXaGVlbEV2ZW50KGV2ZW50KTsKKwogICAg
IEludFBvaW50IHZQb2ludCA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhlLnBv
cygpKTsKIAogICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QodHJ1ZSwgZmFsc2UpOwpAQCAtMTc1
OSw0ICsxNzY4LDI1IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0VGFiRXZlbnRIYW5kbGUK
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKK1BsYXRmb3JtTW91c2VF
dmVudCBFdmVudEhhbmRsZXI6OnNjYWxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIG1vdXNlRXZlbnQpCit7CisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gbV9mcmFtZS0+cGFn
ZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgSW50UG9pbnQgc2NhbGVkUG9zKHN0YXRpY19jYXN0
PGludD4obW91c2VFdmVudC54KCkgLyBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4obW91
c2VFdmVudC55KCkgLyBzY2FsZUZhY3RvcikpOworCisgICAgcmV0dXJuIFBsYXRmb3JtTW91c2VF
dmVudChzY2FsZWRQb3MsIEludFBvaW50KG1vdXNlRXZlbnQuZ2xvYmFsWCgpLCBtb3VzZUV2ZW50
Lmdsb2JhbFkoKSksIG1vdXNlRXZlbnQuYnV0dG9uKCksIG1vdXNlRXZlbnQuZXZlbnRUeXBlKCks
CisgICAgICAgICAgICBtb3VzZUV2ZW50LmNsaWNrQ291bnQoKSwgbW91c2VFdmVudC5zaGlmdEtl
eSgpLCBtb3VzZUV2ZW50LmN0cmxLZXkoKSwgbW91c2VFdmVudC5hbHRLZXkoKSwgbW91c2VFdmVu
dC5tZXRhS2V5KCksIG1vdXNlRXZlbnQudGltZXN0YW1wKCkpOworfQorCitQbGF0Zm9ybVdoZWVs
RXZlbnQgRXZlbnRIYW5kbGVyOjpzY2FsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IG1fZnJhbWUtPnBh
Z2UoKS0+c2NhbGVGYWN0b3IoKTsKKworICAgIEludFBvaW50IHNjYWxlZFBvcyhzdGF0aWNfY2Fz
dDxpbnQ+KHdoZWVsRXZlbnQueCgpIC8gc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdo
ZWVsRXZlbnQueSgpIC8gc2NhbGVGYWN0b3IpKTsKKworICAgIHJldHVybiBQbGF0Zm9ybVdoZWVs
RXZlbnQoc2NhbGVkUG9zLCBJbnRQb2ludCh3aGVlbEV2ZW50Lmdsb2JhbFgoKSwgd2hlZWxFdmVu
dC5nbG9iYWxZKCkpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRhWSgpLAor
ICAgICAgICAgICAgd2hlZWxFdmVudC5jb250aW51b3VzRGVsdGFYKCksIHdoZWVsRXZlbnQuY29u
dGludW91c0RlbHRhWSgpLCB3aGVlbEV2ZW50LmlzQ29udGludW91cygpLCB3aGVlbEV2ZW50Lmlz
QWNjZXB0ZWQoKSwKKyAgICAgICAgICAgIHdoZWVsRXZlbnQuc2hpZnRLZXkoKSwgd2hlZWxFdmVu
dC5jdHJsS2V5KCksIHdoZWVsRXZlbnQuYWx0S2V5KCksIHdoZWVsRXZlbnQubWV0YUtleSgpKTsK
K30KKwogfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsOSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZvY3VzRG9jdW1lbnRWaWV3KCk7CiAKKyAgICBQbGF0Zm9ybU1v
dXNlRXZlbnQgc2NhbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAg
IFBsYXRmb3JtV2hlZWxFdmVudCBzY2FsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgUGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50
PiBjdXJyZW50S2V5Ym9hcmRFdmVudCgpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2
aXNpb24gMjU3NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTk2NCw2ICs5NjUsMTMgQEAg
dm9pZCBGcmFtZVZpZXc6OnNldFdhc1Njcm9sbGVkQnlVc2VyKGJvbwogICAgIGQtPm1fd2FzU2Ny
b2xsZWRCeVVzZXIgPSB3YXNTY3JvbGxlZEJ5VXNlcjsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnJl
c2l6ZShpbnQgdywgaW50IGgpCit7CisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gZnJhbWUoKS0+
cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgV2lkZ2V0OjpyZXNpemUoc3RhdGljX2Nhc3Q8
aW50Pih3IC8gc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KGggLyBzY2FsZUZhY3Rvcikp
OworfQorCiAjaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShHVEspCiB2b2lkIEZyYW1lVmll
dzo6bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKQogewpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24g
MjU3NzMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MCw2ICsxMzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRXaWRnZXRUb1VwZGF0ZShSZW5kZXJQ
YXJ0T2JqZWN0Kik7CiAgICAgdm9pZCByZW1vdmVXaWRnZXRUb1VwZGF0ZShSZW5kZXJQYXJ0T2Jq
ZWN0Kik7CiAKKyAgICB2b2lkIHJlc2l6ZShpbnQsIGludCk7CisKICAgICAvLyBGSVhNRTogVGhp
cyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYnkgYWxsIHBsYXRmb3JtcywgYnV0IGN1cnJlbnRseSBk
ZXBlbmRzIG9uIFNjcm9sbFZpZXc6OmNoaWxkcmVuLAogICAgIC8vIHdoaWNoIG5vdCBhbGwgbWV0
aG9kcyBoYXZlLiBPbmNlIEZyYW1lVmlldyBhbmQgU2Nyb2xsVmlldyBhcmUgbWVyZ2VkLCB0aGlz
ICNpZiBzaG91bGQgYmUgcmVtb3ZlZC4KICNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdU
SykKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAJKHJldmlzaW9uIDI1NzczKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBj
aHJvbWVDbGllbnQsIEMKICAgICAsIG1fZGVmZXJzTG9hZGluZyhmYWxzZSkKICAgICAsIG1faW5M
b3dRdWFsaXR5SW50ZXJwb2xhdGlvbk1vZGUoZmFsc2UpCiAgICAgLCBtX3BhcmVudEluc3BlY3Rv
ckNvbnRyb2xsZXIoMCkKKyAgICAsIG1fc2NhbGVGYWN0b3IoMS4wKQogewogICAgIGlmICghYWxs
UGFnZXMpIHsKICAgICAgICAgYWxsUGFnZXMgPSBuZXcgSGFzaFNldDxQYWdlKj47CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJl
dmlzaW9uIDI1NzczKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNiArNzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgZ29CYWNrKCk7
CiAgICAgICAgIGJvb2wgZ29Gb3J3YXJkKCk7CiAgICAgICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9y
eUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKworICAgICAgICB2b2lkIHNldFNjYWxlRmFjdG9yKGRv
dWJsZSBzY2FsZUZhY3RvcikgeyBtX3NjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KKyAgICAg
ICAgZG91YmxlIHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQog
ICAgICAgICAKICAgICAgICAgdm9pZCBzZXRHcm91cE5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAg
ICAgIFN0cmluZyBncm91cE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwTmFtZTsgfQpAQCAt
MTM4LDkgKzE0MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9kZWZl
cnNMb2FkaW5nOwogCiAgICAgICAgIGJvb2wgbV9pbkxvd1F1YWxpdHlJbnRlcnBvbGF0aW9uTW9k
ZTsKLSAgICAKKwogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX3BhcmVudEluc3BlY3Rv
ckNvbnRyb2xsZXI7CiAKKyAgICAgICAgZG91YmxlIG1fc2NhbGVGYWN0b3I7CisKICNpZiBQTEFU
Rk9STShXSU4pCiAgICAgICAgIHN0YXRpYyBISU5TVEFOQ0Ugc19pbnN0YW5jZUhhbmRsZTsKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCShyZXZpc2lvbiAy
NTc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDYgKzU0LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IFBsYXRmb3JtV2hlZWxFdmVudCB7CiAgICAgcHVibGljOgorICAgICAgICBQbGF0Zm9ybVdoZWVs
RXZlbnQoY29uc3QgSW50UG9pbnQmIHBvcywgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvcywgZmxv
YXQgZGVsdGFYLCBmbG9hdCBkZWx0YVksCisgICAgICAgICAgICAgICAgZmxvYXQgY29udGludW91
c0RlbHRhWCwgZmxvYXQgY29udGludW91c0RlbHRhWSwgYm9vbCBpc0NvbnRpbnVvdXMsIGJvb2wg
aXNBY2NlcHRlZCwKKyAgICAgICAgICAgICAgICBib29sIHNoaWZ0LCBib29sIGN0cmwsIGJvb2wg
YWx0LCBib29sIG1ldGEpCisgICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zKSwgbV9nbG9iYWxQ
b3NpdGlvbihnbG9iYWxQb3MpLCBtX2RlbHRhWChkZWx0YVgpLCBtX2RlbHRhWShkZWx0YVkpCisg
ICAgICAgICAgICAsIG1fY29udGludW91c0RlbHRhWChjb250aW51b3VzRGVsdGFYKQorICAgICAg
ICAgICAgLCBtX2NvbnRpbnVvdXNEZWx0YVkoY29udGludW91c0RlbHRhWSkKKyAgICAgICAgICAg
ICwgbV9pc0NvbnRpbnVvdXMoaXNDb250aW51b3VzKQorICAgICAgICAgICAgLCBtX2lzQWNjZXB0
ZWQoaXNBY2NlcHRlZCkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdCkKKyAgICAgICAg
ICAgICwgbV9jdHJsS2V5KGN0cmwpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFsdCkKKyAgICAg
ICAgICAgICwgbV9tZXRhS2V5KG1ldGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAgICAgICAg
IGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAg
ICAgIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBv
c2l0aW9uOyB9CiAKQEAgLTk2LDE0ICsxMTEsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwogICAgICAgICBmbG9hdCBtX2RlbHRhWDsK
ICAgICAgICAgZmxvYXQgbV9kZWx0YVk7CisgICAgICAgIGZsb2F0IG1fY29udGludW91c0RlbHRh
WDsKKyAgICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVsdGFZOworICAgICAgICBib29sIG1faXND
b250aW51b3VzOwogICAgICAgICBib29sIG1faXNBY2NlcHRlZDsKICAgICAgICAgYm9vbCBtX3No
aWZ0S2V5OwogICAgICAgICBib29sIG1fY3RybEtleTsKICAgICAgICAgYm9vbCBtX2FsdEtleTsK
ICAgICAgICAgYm9vbCBtX21ldGFLZXk7Ci0gICAgICAgIGJvb2wgbV9pc0NvbnRpbnVvdXM7Ci0g
ICAgICAgIGZsb2F0IG1fY29udGludW91c0RlbHRhWDsKLSAgICAgICAgZmxvYXQgbV9jb250aW51
b3VzRGVsdGFZOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjU3NzMp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldEdka0V4cG9zZUV2ZW50KEdka0V2ZW50RXhwb3NlKik7CiAgICAgICAgIEdka0RyYXdh
YmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0OwogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhw
b3NlRXZlbnQoKSBjb25zdDsKLSAgICAgICAgSW50UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgSW50UmVjdCB0cmFuc2xhdGVSZWN0KGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCShyZXZpc2lvbiAyNTc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDI3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEludFJlY3QKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwotICAgIGNhaXJvX3JlY3Rhbmds
ZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
CisgICAgZG91YmxlIHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3QueCgpKTsKKyAgICBkb3Vi
bGUgeSA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocmVjdC55KCkpOworCisgICAgLy8gV2Ugd2FudCB0
aGUgbWluaW11bSBpbnRlZ2VyIG51bWJlciBvZiBzY2FsZWQgcGl4ZWxzIHdoaWNoIGNvdmVycwor
ICAgIC8vIHRoZSB3aG9sZSBhcmVhLCBzbyBpbmNyZWFzZSBieSAxCisgICAgZG91YmxlIHdpZHRo
ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LndpZHRoKCkpICsgMTsKKyAgICBkb3VibGUgaGVp
Z2h0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LmhlaWdodCgpKSArIDE7CisKKyAgICBjYWly
b191c2VyX3RvX2RldmljZShjciwgJngsICZ5KTsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZV9k
aXN0YW5jZShjciwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIHggPSByb3VuZCh4KTsKKyAgICB5
ID0gcm91bmQoeSk7CisgICAgd2lkdGggPSByb3VuZCh3aWR0aCk7CisgICAgaGVpZ2h0ID0gcm91
bmQoaGVpZ2h0KTsKKworICAgIGNhaXJvX2RldmljZV90b191c2VyKGNyLCAmeCwgJnkpOworICAg
IGNhaXJvX2RldmljZV90b191c2VyX2Rpc3RhbmNlKGNyLCAmd2lkdGgsICZoZWlnaHQpOworCisg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19j
bGlwKGNyKTsKIH0KIApAQCAtODE5LDE2ICs4MzksMjMgQEAgR2RrRHJhd2FibGUqIEdyYXBoaWNz
Q29udGV4dDo6Z2RrRHJhd2FibAogICAgIHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBv
c2UtPndpbmRvdyk7CiB9CiAKLUludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6
OnRyYW5zbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjYWlyb19t
YXRyaXhfdCB0bTsKICAgICBjYWlyb19nZXRfbWF0cml4KG1fZGF0YS0+Y3IsICZ0bSk7Ci0gICAg
ZG91YmxlIHggPSBwb2ludC54KCk7Ci0gICAgZG91YmxlIHkgPSBwb2ludC55KCk7CisKKworICAg
IGRvdWJsZSB4ID0gcmVjdC54KCk7CisgICAgZG91YmxlIHkgPSByZWN0LnkoKTsKKyAgICBkb3Vi
bGUgd2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgZG91YmxlIGhlaWdodCA9IHJlY3QuaGVpZ2h0
KCk7CiAKICAgICBjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZ0bSwgJngsICZ5KTsKLSAg
ICByZXR1cm4gSW50UG9pbnQoeCwgeSk7CisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0
YW5jZSgmdG0sICZ3aWR0aCwmIGhlaWdodCk7CisKKyAgICByZXR1cm4gSW50UmVjdChzdGF0aWNf
Y2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRo
KSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUNhaXJvLmNwcAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIFRlc3Qg
dXNpbmcgZXhhbXBsZSBzaXRlIGF0IGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2Vk
Z2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4g
PSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShpbWFnZSk7CiAKLSAgICAvLyBUbyBh
dm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZQotICAgIC8v
IENBSVJPX0ZJTFRFUl9ORUFSRVNUIG5vdywgYnV0IHRoZSByZWFsIGZpeCB3aWxsIGJlIHRvIGhh
dmUKLSAgICAvLyBDQUlST19FWFRFTkRfUEFEIGltcGxlbWVudGVkIGZvciBzdXJmYWNlcyBpbiBD
YWlybyBhbGxvd2luZyB1cyB0byBzdGlsbAotICAgIC8vIHVzZSBiaWxpbmVhciBmaWx0ZXJpbmcK
KyAgICAvLyBUbyBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdl
IHVzZSBDQUlST19FWFRFTkRfUkVQRUFUCisgICAgLy8gZm9yIG5vdyBidXQgaW4gdGhlIGZ1dHVy
ZSB3ZSdkIGxpa2UgdG8gdXNlIENBSVJPX0VYVEVORF9QQUQgYnV0IGl0IGlzIG5vdCBhdmFpbGFi
bGUKKyAgICAvLyBpbiBjYWlybyB5ZXQuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gdXNlIENBSVJP
X0ZJTFRFUl9CRVNUIGluc3RlYWQgb2YgQ0FJUk9fRklMVEVSX05FQVJFU1QKKyAgICBjYWlyb19w
YXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CiAgICAgY2Fp
cm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKIAog
ICAgIGZsb2F0IHNjYWxlWCA9IHNyY1JlY3Qud2lkdGgoKSAvIGRzdFJlY3Qud2lkdGgoKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCShyZXZp
c2lvbiAyNTc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDExIEBAIEZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QKICAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZShmb250
TWF0cml4LCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgbV9mb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCkpOwogICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0p
OwogICAgIG9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgLy8gRklY
TUU6IHdlIHNob3VsZCB3b3JrIG91dCBob3cgdG8gZ2V0IHRoZSB0cnVlIChoaW50ZWQpIGV4dGVu
dHMgZnJvbSBjYWlybyBpbnN0ZWFkIG9mCisgICAgLy8gZGlzYWJsaW5nIGhpbnRpbmcuIFNlZSBo
dHRwOi8vbGlzdHMuY2Fpcm9ncmFwaGljcy5vcmcvYXJjaGl2ZXMvY2Fpcm8vMjAwNy1TZXB0ZW1i
ZXIvMDExMzY2Lmh0bWwKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0
aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0
X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfU1VCUElYRUwpOworCiAgICAgbV9z
Y2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCBmb250TWF0cml4
LCAmY3RtLCBvcHRpb25zKTsKICAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShmb250RmFjZSk7
CiAgICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JvbGxCYXJHdGsuY3BwCShyZXZpc2lvbiAyNTc3
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgi
CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CiAjaW5jbHVk
ZSA8c3RkaW8uaD4KQEAgLTEyMSw4ICsxMjIsMTIgQEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6
Z2VvbWV0cnlDaGFuZ2VkKAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAK
ICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVu
dCgpKTsKKyAgICAKKyAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBmcmFtZVZpZXctPmZyYW1lKCkt
PnBhZ2UoKS0+c2NhbGVGYWN0b3IoKTsKKwogICAgIEludFJlY3Qgd2luZG93UmVjdCA9IEludFJl
Y3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigp
KSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwg
d2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsg
c3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LngoKSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nh
c3Q8aW50Pih3aW5kb3dSZWN0LnkoKSAqIHNjYWxlRmFjdG9yKSwgCisgICAgICAgIHN0YXRpY19j
YXN0PGludD4od2luZG93UmVjdC53aWR0aCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxp
bnQ+KHdpbmRvd1JlY3QuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcikgfTsKICAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gMjU3NzMpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MCwxMSArMTgwLDExIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVu
ZGUKIHsKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0
a1dpZGdldCogY2hlY2tib3ggPSBndGtDaGVja2JveCgpOwotICAgIEludFBvaW50IHBvcyA9IGku
Y29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IHNj
YWxlZFJlY3QgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVJlY3QocmVjdCk7CiAgICAgZ3RrX3BhaW50
X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAg
ICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAg
ICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNoZWNrYnV0dG9uIiwKLSAgICAgICAg
ICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgc2NhbGVkUmVjdC54KCksIHNjYWxlZFJlY3QueSgpLCBz
Y2FsZWRSZWN0LndpZHRoKCksIHNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMjEzLDI0ICsyMTMsMjQgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRS
YWRpbyhSZW5kZXJPYgogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRv
IGRvPwogICAgIEd0a1dpZGdldCogcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOwotICAgIEludFBv
aW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAg
ICBJbnRSZWN0IHNjYWxlZFJlY3QgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVJlY3QocmVjdCk7CiAg
ICAgZ3RrX3BhaW50X29wdGlvbihyYWRpby0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUo
KSwKICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFk
b3cobyksCiAgICAgICAgICAgICAgICAgICAgICBOVUxMLCByYWRpbywgInJhZGlvYnV0dG9uIiwK
LSAgICAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICBzY2FsZWRSZWN0LngoKSwgc2NhbGVk
UmVjdC55KCksIHNjYWxlZFJlY3Qud2lkdGgoKSwgc2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHJlY3QpIAoteyAKK3sKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2Fy
ZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAogICAgIEd0a1dp
ZGdldCogYnV0dG9uID0gZ3RrQnV0dG9uKCk7Ci0gICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0
LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIEludFJlY3Qgc2NhbGVkUmVj
dCA9IGkuY29udGV4dC0+dHJhbnNsYXRlUmVjdChyZWN0KTsKICAgICBndGtfcGFpbnRfYm94KGJ1
dHRvbi0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAgICAg
IGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAgICAgICAgICAgICAgICAg
ICBOVUxMLCBidXR0b24sICJidXR0b24iLAotICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9z
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgIHNj
YWxlZFJlY3QueCgpLCBzY2FsZWRSZWN0LnkoKSwgc2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRS
ZWN0LmhlaWdodCgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCShyZXZpc2lvbiAyNTc3MykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miwx
MCBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCisKKyNp
bmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCisjaW5jbHVkZSAid2Via2l0Z3RrcHJpdmF0ZS5oIgor
CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIApAQCAtMTI4LDgg
KzEzMiwxMiBAQCB2b2lkIFNjcm9sbFZpZXdTY3JvbGxiYXI6Omdlb21ldHJ5Q2hhbmdlCiAgICAg
QVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKIAogICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgZG91YmxlIHNj
YWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisK
ICAgICBJbnRSZWN0IHdpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnko
KS5zaXplKCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgd2luZG93UmVjdC54
KCksIHdpbmRvd1JlY3QueSgpLCB3aW5kb3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0
KCkgfTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHN0YXRpY19jYXN0PGludD4o
d2luZG93UmVjdC54KCkgKiBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4od2luZG93UmVj
dC55KCkgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4od2luZG93UmVj
dC53aWR0aCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QuaGVp
Z2h0KCkgKiBzY2FsZUZhY3RvcikgfTsKICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3Rr
V2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIApAQCAtMjg3LDE3ICsyOTUsMzAgQEAgdm9pZCBT
Y3JvbGxWaWV3OjpzZXRHdGtBZGp1c3RtZW50cyhHdGtBZAogCiB2b2lkIFNjcm9sbFZpZXc6OnVw
ZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQogeworICAg
IEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOworCiAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpOwor
CisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCktPnNj
YWxlRmFjdG9yKCk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lUX0dUS19QQUdF
KGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRh
ID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworCiAgICAgSW50UG9pbnQgd2lu
ZG93UG9pbnQgPSBjb250ZW50c1RvV2luZG93KHVwZGF0ZVJlY3QubG9jYXRpb24oKSk7CiAgICAg
SW50UmVjdCBjb250YWluaW5nV2luZG93UmVjdCA9IHVwZGF0ZVJlY3Q7CiAgICAgY29udGFpbmlu
Z1dpbmRvd1JlY3Quc2V0TG9jYXRpb24od2luZG93UG9pbnQpOworICAgIGNvbnRhaW5pbmdXaW5k
b3dSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKIAogICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyBj
b250YWluaW5nV2luZG93UmVjdC54KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5pbmdXaW5kb3dSZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmlu
Z1dpbmRvd1JlY3Qud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmlu
Z1dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKwogICAgIEdka1dpbmRvdyogd2luZG93ID0gR1RLX1dJ
REdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3c7CiAKICAgICBpZiAod2luZG93KQpAQCAt
MzEzLDggKzMzNCwxNSBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IElu
CiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZSgpCiB7CiAgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5k
b3coKSk7CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKKworICAgIGRvdWJsZSBzY2Fs
ZUZhY3RvciA9IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisg
ICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHN0YXRpY19jYXN0PGludD4oZnJhbWVHZW9tZXRyeSgp
LngoKSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZUdlb21ldHJ5KCkueSgp
ICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS0+Y29udGVu
dHNTaXplLndpZHRoKCkgKiBzY2FsZUZhY3RvciksICBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS0+
Y29udGVudHNTaXplLmhlaWdodCgpICogc2NhbGVGYWN0b3IpIH07CiAKLSAgICBHZGtSZWN0YW5n
bGUgcmVjdCA9IHsgMCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9kYXRhLT5j
b250ZW50c1NpemUuaGVpZ2h0KCkgfTsKICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChH
VEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgJnJlY3QsIHRydWUpOwogfQog
CkBAIC02OTYsMTYgKzcyNCwzMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhh
dmUgdG8gZm9yayBGcmFtZVZpZXcuaC8uY3BwLgogICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmll
dyBzaG91bGQganVzdCBtZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisKICAgICBBU1NFUlQoaXNGcmFt
ZVZpZXcoKSk7CiAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHRoaXMpOworCisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFt
ZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGRvY3VtZW50RGlydHlS
ZWN0ID0gcmVjdDsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIGRvY3VtZW50RGlydHlS
ZWN0LnNjYWxlKDEgLyBzY2FsZUZhY3Rvcik7CisKICAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRl
cnNlY3QoZnJhbWVHZW9tZXRyeSgpKTsKIAorICAgIC8vIFBhaW50IGFuIGV4dHJhIDIgcGl4ZWxz
IGFyb3VuZCB0byBhY2NvbW1vZGF0ZSBhcnRpZmFjdHMgYW5kIHJvdW5kaW5nIGVycm9ycyBpbiB0
aGUgc2NhbGluZworICAgIGRvY3VtZW50RGlydHlSZWN0LmluZmxhdGUoMik7CisKICAgICBjb250
ZXh0LT5zYXZlKCk7CiAKKyAgICAvLyBPbmx5IHNjYWxlIHRoZSByb290IFNjcm9sbFZpZXcKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoc2NhbGVG
YWN0b3IsIHNjYWxlRmFjdG9yKSk7CisKICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkp
OwogICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHJldmlzaW9uIDI1NzczKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNyArMzAw
LDYgQEAgdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cgogICAgIHNldENv
bnRlbnRzUG9zKHJlY3QueCgpLCByZWN0LnkoKSk7CiB9CiAKLQogUGxhdGZvcm1TY3JvbGxiYXIq
IFNjcm9sbFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBtb3VzZUV2ZW50KSAKIHsKICAgICAvLyBBRkFJQ1QgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHBs
YXRmb3JtcyB0aGF0IHByb3ZpZGUgCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJLaXQv
Z3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA3LTA5LTI3
ICBHZW9yZ2UgV3JpZ2h0ICA8Z2VvcmdlLndyaWdodEBjb2xsYWJvcmEuY28udWs+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTgKKyAgICAgICAgRnVsbCBwYWdlIHpvb21pbmcg
c3VwcG9ydAorCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2Ygem9vbWluZyBzdXBw
b3J0LgorCisgICAgICAgICogQXBpL3dlYmtpdGd0a3BhZ2UuY3BwOgorICAgICAgICAqIEFwaS93
ZWJraXRndGtwYWdlLmg6CisgICAgICAgICogQXBpL3dlYmtpdGd0a3ByaXZhdGUuaDoKKwogMjAw
Ny0wOS0yNiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIEd0ayBidWls
ZCBmaXguCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkocmV2aXNpb24gMjU3NzMpCisr
KyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3
LDYgKzEyNywxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX3Njcm9sbF9lCiBz
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdl
dCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKIHsKICAgICBHVEtfV0lER0VUX0NMQVNTKHdl
YmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCxhbGxvY2F0
aW9uKTsKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpOworCisgICAgLy8gV2UgY2Fj
aGUgdGhlIHVuc2NhbGVkIHdpZHRoL2hlaWdodCBhcyByZWNhbGN1bGF0aW5nIHRoZW0gdXNpbmcg
dGhlIHNjYWxlRmFjdG9yIGxlYWRzIHRvCisgICAgLy8gcm91bmRpbmcgZXJyb3JzCisgICAgcGFn
ZURhdGEtPm1fd2lkdGggPSBhbGxvY2F0aW9uLT53aWR0aDsKKyAgICBwYWdlRGF0YS0+bV9oZWln
aHQgPSBhbGxvY2F0aW9uLT5oZWlnaHQ7CiAKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZy
YW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKICAgICBmcmFtZS0+dmlldygp
LT5yZXNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7CkBAIC01MzMs
NCArNTM5LDMwIEBAIFdlYktpdEd0a0ZyYW1lKiB3ZWJraXRfZ3RrX3BhZ2VfZ2V0X21haW4KICAg
ICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BS
SVZBVEUocGFnZSk7CiAgICAgcmV0dXJuIHBhZ2VEYXRhLT5tYWluRnJhbWU7CiB9CisKK3ZvaWQg
d2Via2l0X2d0a19wYWdlX3NldF9zY2FsZV9mYWN0b3IoV2ViS2l0R3RrUGFnZSogcGFnZSwgZG91
YmxlIGZhY3RvcikKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2Uo
cGFnZSkpOworCisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX0dU
S19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJh
bWVEYXRhID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1l
KTsKKworICAgIHBhZ2VEYXRhLT5wYWdlLT5zZXRTY2FsZUZhY3RvcihmYWN0b3IpOworCisgICAg
ZnJhbWUtPnZpZXcoKS0+cmVzaXplKHBhZ2VEYXRhLT5tX3dpZHRoLCBwYWdlRGF0YS0+bV9oZWln
aHQpOworICAgIGZyYW1lLT5mb3JjZUxheW91dCgpOworICAgIGZyYW1lLT52aWV3KCktPmFkanVz
dFZpZXdTaXplKCk7CisgICAgZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOworfQorCitkb3VibGUg
d2Via2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3IoV2ViS2l0R3RrUGFnZSogcGFnZSkKK3sK
KyAgICAvL1dlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9H
RVRfUFJJVkFURShwYWdlKTsKKyAgICAvL1dlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVEYXRh
ID0gV0VCS0lUX0dUS19GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKKwor
ICAgIC8vRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZURhdGEtPmZyYW1lLT52aWV3KCk7Cisg
ICAgLy8KKyAgICByZXR1cm4gY29yZShwYWdlKS0+c2NhbGVGYWN0b3IoKTsKK30KKwogfQpJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9n
dGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjU3NzMpCisrKyBXZWJLaXQvZ3RrL0Fw
aS93ZWJraXRndGtwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsMTIgQEAgd2Vi
a2l0X2d0a19wYWdlX2xvYWRfc3RyaW5nIChXZWJLaXRHdGtQYQogV0VCS0lUX0dUS19BUEkgdm9p
ZAogd2Via2l0X2d0a19wYWdlX2xvYWRfaHRtbF9zdHJpbmcgKFdlYktpdEd0a1BhZ2UqIHBhZ2Us
IGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogYmFzZV91cmwpOwogCitXRUJLSVRf
R1RLX0FQSSB2b2lkCit3ZWJraXRfZ3RrX3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0R3Rr
UGFnZSogcGFnZSwgZG91YmxlIGZhY3Rvcik7CisKK1dFQktJVF9HVEtfQVBJIGRvdWJsZQord2Vi
a2l0X2d0a19wYWdlX2dldF9zY2FsZV9mYWN0b3IgKFdlYktpdEd0a1BhZ2UqIHBhZ2UpOworCiBX
RUJLSVRfR1RLX0FQSSBXZWJLaXRHdGtGcmFtZSoKIHdlYmtpdF9ndGtfcGFnZV9nZXRfbWFpbl9m
cmFtZSAoV2ViS2l0R3RrUGFnZSogcGFnZSk7CiAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2
YXRlLmgJKHJldmlzaW9uIDI1NzczKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIGV4dGVybiAiQyIgewogICAgICAg
ICBXZWJDb3JlOjpTdHJpbmcgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAgICBX
ZWJDb3JlOjpTdHJpbmcqIHVzZXJBZ2VudDsKIAorICAgICAgICBpbnQgbV93aWR0aCwgbV9oZWln
aHQ7CisKICAgICAgICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJlbjsKICAgICB9OwogICAg
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16529</attachid>
            <date>2007-10-04 03:19:34 -0700</date>
            <delta_ts>2007-10-08 04:12:47 -0700</delta_ts>
            <desc>Update to reflect WebKitGtk -&gt; WebKit name change</desc>
            <filename>zooming-20071004.patch</filename>
            <type>text/plain</type>
            <size>24671</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyNjA0MSkKKysrIFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTksMTEgKzc5OSwxMyBAQCBD
dXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgCiAgICAgcmV0dXJuIHBvaW50
ZXJDdXJzb3IoKTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCitib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQp
CiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudCA9IHNjYWxlTW91c2VFdmVudChl
dmVudCk7CisKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygp
KTsKIAogICAgIG1fbW91c2VQcmVzc2VkID0gdHJ1ZTsKQEAgLTkxNiwxNSArOTE4LDE3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURvdWJsZUNsaWMKIAogYm9vbCBFdmVudEhhbmRs
ZXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKKyAgICBQ
bGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudCA9IHNjYWxlTW91c2VFdmVudChldmVudCk7CisK
ICAgICBIaXRUZXN0UmVzdWx0IGhvdmVyZWROb2RlID0gSGl0VGVzdFJlc3VsdChJbnRQb2ludCgp
KTsKLSAgICBib29sIHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50LCAmaG92ZXJl
ZE5vZGUpOworICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQobW91c2VFdmVu
dCwgJmhvdmVyZWROb2RlKTsKIAogICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgaG92ZXJlZE5vZGUu
c2V0VG9Ob25TaGFkb3dBbmNlc3RvcigpOwotICAgIHBhZ2UtPmNocm9tZSgpLT5tb3VzZURpZE1v
dmVPdmVyRWxlbWVudChob3ZlcmVkTm9kZSwgZXZlbnQubW9kaWZpZXJGbGFncygpKTsKKyAgICBw
YWdlLT5jaHJvbWUoKS0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoaG92ZXJlZE5vZGUsIG1vdXNl
RXZlbnQubW9kaWZpZXJGbGFncygpKTsKICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0VG9vbFRpcCho
b3ZlcmVkTm9kZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwMjQsMTMgKzEwMjgsMTUg
QEAgdm9pZCBFdmVudEhhbmRsZXI6OmludmFsaWRhdGVDbGljaygpCiAgICAgbV9jbGlja05vZGUg
PSAwOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBFdmVudEhhbmRsZXI6Omhh
bmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7
CiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygpKTsKIAorICAg
IFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2ZW50ID0gc2NhbGVNb3VzZUV2ZW50KGV2ZW50KTsK
KwogICAgIG1fbW91c2VQcmVzc2VkID0gZmFsc2U7CiAgICAgbV9jdXJyZW50TW91c2VQb3NpdGlv
biA9IG1vdXNlRXZlbnQucG9zKCk7CiAKQEAgLTEyNzUsNyArMTI4MSw3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY28KICAgICByZXR1cm4gc3dhbGxvd0V2ZW50Owog
fQogCi1ib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZl
bnQmIGUpCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVs
RXZlbnQmIGV2ZW50KQogewogICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
OwogICAgIGlmICghZG9jKQpAQCAtMTI4NSw2ICsxMjkxLDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZVdoZWVsRXZlbnQoUGxhdAogICAgIGlmICghZG9jUmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IGUgPSBzY2FsZVdoZWVsRXZl
bnQoZXZlbnQpOworCiAgICAgSW50UG9pbnQgdlBvaW50ID0gbV9mcmFtZS0+dmlldygpLT53aW5k
b3dUb0NvbnRlbnRzKGUucG9zKCkpOwogCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCh0cnVl
LCBmYWxzZSk7CkBAIC0xNzU5LDQgKzE3NjgsMjUgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1
bHRUYWJFdmVudEhhbmRsZQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0K
IAorUGxhdGZvcm1Nb3VzZUV2ZW50IEV2ZW50SGFuZGxlcjo6c2NhbGVNb3VzZUV2ZW50KGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKK3sKKyAgICBkb3VibGUgc2NhbGVGYWN0
b3IgPSBtX2ZyYW1lLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisKKyAgICBJbnRQb2ludCBzY2Fs
ZWRQb3Moc3RhdGljX2Nhc3Q8aW50Pihtb3VzZUV2ZW50LngoKSAvIHNjYWxlRmFjdG9yKSwgc3Rh
dGljX2Nhc3Q8aW50Pihtb3VzZUV2ZW50LnkoKSAvIHNjYWxlRmFjdG9yKSk7CisKKyAgICByZXR1
cm4gUGxhdGZvcm1Nb3VzZUV2ZW50KHNjYWxlZFBvcywgSW50UG9pbnQobW91c2VFdmVudC5nbG9i
YWxYKCksIG1vdXNlRXZlbnQuZ2xvYmFsWSgpKSwgbW91c2VFdmVudC5idXR0b24oKSwgbW91c2VF
dmVudC5ldmVudFR5cGUoKSwKKyAgICAgICAgICAgIG1vdXNlRXZlbnQuY2xpY2tDb3VudCgpLCBt
b3VzZUV2ZW50LnNoaWZ0S2V5KCksIG1vdXNlRXZlbnQuY3RybEtleSgpLCBtb3VzZUV2ZW50LmFs
dEtleSgpLCBtb3VzZUV2ZW50Lm1ldGFLZXkoKSwgbW91c2VFdmVudC50aW1lc3RhbXAoKSk7Cit9
CisKK1BsYXRmb3JtV2hlZWxFdmVudCBFdmVudEhhbmRsZXI6OnNjYWxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgZG91YmxlIHNjYWxlRmFj
dG9yID0gbV9mcmFtZS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgSW50UG9pbnQgc2Nh
bGVkUG9zKHN0YXRpY19jYXN0PGludD4od2hlZWxFdmVudC54KCkgLyBzY2FsZUZhY3RvciksIHN0
YXRpY19jYXN0PGludD4od2hlZWxFdmVudC55KCkgLyBzY2FsZUZhY3RvcikpOworCisgICAgcmV0
dXJuIFBsYXRmb3JtV2hlZWxFdmVudChzY2FsZWRQb3MsIEludFBvaW50KHdoZWVsRXZlbnQuZ2xv
YmFsWCgpLCB3aGVlbEV2ZW50Lmdsb2JhbFkoKSksIHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVs
RXZlbnQuZGVsdGFZKCksCisgICAgICAgICAgICB3aGVlbEV2ZW50LmNvbnRpbnVvdXNEZWx0YVgo
KSwgd2hlZWxFdmVudC5jb250aW51b3VzRGVsdGFZKCksIHdoZWVsRXZlbnQuaXNDb250aW51b3Vz
KCksIHdoZWVsRXZlbnQuaXNBY2NlcHRlZCgpLAorICAgICAgICAgICAgd2hlZWxFdmVudC5zaGlm
dEtleSgpLCB3aGVlbEV2ZW50LmN0cmxLZXkoKSwgd2hlZWxFdmVudC5hbHRLZXkoKSwgd2hlZWxF
dmVudC5tZXRhS2V5KCkpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiAy
NjA0MSkKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ2LDYgKzE0Niw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9jdXNEb2N1bWVudFZpZXcoKTsK
IAorICAgIFBsYXRmb3JtTW91c2VFdmVudCBzY2FsZU1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHNjYWxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBQYXNzUmVm
UHRyPEtleWJvYXJkRXZlbnQ+IGN1cnJlbnRLZXlib2FyZEV2ZW50KCkgY29uc3Q7CiAKSW5kZXg6
IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCShyZXZpc2lvbiAyNjA0MSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTEZyYW1l
U2V0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk92ZXJmbG93
RXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclBhcnRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAt
OTY5LDYgKzk3MCwxMyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0V2FzU2Nyb2xsZWRCeVVzZXIoYm9v
CiAgICAgZC0+bV93YXNTY3JvbGxlZEJ5VXNlciA9IHdhc1Njcm9sbGVkQnlVc2VyOwogfQogCit2
b2lkIEZyYW1lVmlldzo6cmVzaXplKGludCB3LCBpbnQgaCkKK3sKKyAgICBkb3VibGUgc2NhbGVG
YWN0b3IgPSBmcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisKKyAgICBXaWRnZXQ6OnJl
c2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHcgLyBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4o
aCAvIHNjYWxlRmFjdG9yKSk7Cit9CisKICNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdU
SykKIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpCiB7CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCShyZXZpc2lvbiAyNjA0MSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFdpZGdl
dFRvVXBkYXRlKFJlbmRlclBhcnRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZVdpZGdldFRvVXBk
YXRlKFJlbmRlclBhcnRPYmplY3QqKTsKIAorICAgIHZvaWQgcmVzaXplKGludCwgaW50KTsKKwog
ICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBieSBhbGwgcGxhdGZvcm1z
LCBidXQgY3VycmVudGx5IGRlcGVuZHMgb24gU2Nyb2xsVmlldzo6Y2hpbGRyZW4sCiAgICAgLy8g
d2hpY2ggbm90IGFsbCBtZXRob2RzIGhhdmUuIE9uY2UgRnJhbWVWaWV3IGFuZCBTY3JvbGxWaWV3
IGFyZSBtZXJnZWQsIHRoaXMgI2lmIHNob3VsZCBiZSByZW1vdmVkLgogI2lmIFBMQVRGT1JNKFdJ
TikgfHwgUExBVEZPUk0oR1RLKQpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMjYwNDEpCisrKyBXZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAgUGFnZTo6UGFn
ZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQwogICAgICwgbV9kZWZlcnNMb2FkaW5nKGZh
bHNlKQogICAgICwgbV9pbkxvd1F1YWxpdHlJbnRlcnBvbGF0aW9uTW9kZShmYWxzZSkKICAgICAs
IG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigwKQorICAgICwgbV9zY2FsZUZhY3RvcigxLjAp
CiB7CiAgICAgaWYgKCFhbGxQYWdlcykgewogICAgICAgICBhbGxQYWdlcyA9IG5ldyBIYXNoU2V0
PFBhZ2UqPjsKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMjYwNDEpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgYm9vbCBnb0JhY2soKTsKICAgICAgICAgYm9vbCBnb0ZvcndhcmQoKTsKICAgICAgICAgdm9p
ZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworCisgICAgICAgIHZvaWQg
c2V0U2NhbGVGYWN0b3IoZG91YmxlIHNjYWxlRmFjdG9yKSB7IG1fc2NhbGVGYWN0b3IgPSBzY2Fs
ZUZhY3RvcjsgfQorICAgICAgICBkb3VibGUgc2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlRmFjdG9yOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldEdyb3VwTmFtZShjb25z
dCBTdHJpbmcmKTsKICAgICAgICAgU3RyaW5nIGdyb3VwTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Z3JvdXBOYW1lOyB9CkBAIC0xMzgsOSArMTQxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBtX2RlZmVyc0xvYWRpbmc7CiAKICAgICAgICAgYm9vbCBtX2luTG93UXVhbGl0
eUludGVycG9sYXRpb25Nb2RlOwotICAgIAorCiAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcjsKIAorICAgICAgICBkb3VibGUgbV9zY2FsZUZh
Y3RvcjsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgc3RhdGljIEhJTlNUQU5DRSBzX2lu
c3RhbmNlSGFuZGxlOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hl
ZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2
ZW50LmgJKHJldmlzaW9uIDI2MDQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMjEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50IHsKICAgICBwdWJsaWM6CisgICAg
ICAgIFBsYXRmb3JtV2hlZWxFdmVudChjb25zdCBJbnRQb2ludCYgcG9zLCBjb25zdCBJbnRQb2lu
dCYgZ2xvYmFsUG9zLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwKKyAgICAgICAgICAgICAg
ICBmbG9hdCBjb250aW51b3VzRGVsdGFYLCBmbG9hdCBjb250aW51b3VzRGVsdGFZLCBib29sIGlz
Q29udGludW91cywgYm9vbCBpc0FjY2VwdGVkLAorICAgICAgICAgICAgICAgIGJvb2wgc2hpZnQs
IGJvb2wgY3RybCwgYm9vbCBhbHQsIGJvb2wgbWV0YSkKKyAgICAgICAgICAgIDogbV9wb3NpdGlv
bihwb3MpLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvcyksIG1fZGVsdGFYKGRlbHRhWCksIG1f
ZGVsdGFZKGRlbHRhWSkKKyAgICAgICAgICAgICwgbV9jb250aW51b3VzRGVsdGFYKGNvbnRpbnVv
dXNEZWx0YVgpCisgICAgICAgICAgICAsIG1fY29udGludW91c0RlbHRhWShjb250aW51b3VzRGVs
dGFZKQorICAgICAgICAgICAgLCBtX2lzQ29udGludW91cyhpc0NvbnRpbnVvdXMpCisgICAgICAg
ICAgICAsIG1faXNBY2NlcHRlZChpc0FjY2VwdGVkKQorICAgICAgICAgICAgLCBtX3NoaWZ0S2V5
KHNoaWZ0KQorICAgICAgICAgICAgLCBtX2N0cmxLZXkoY3RybCkKKyAgICAgICAgICAgICwgbV9h
bHRLZXkoYWx0KQorICAgICAgICAgICAgLCBtX21ldGFLZXkobWV0YSkKKyAgICAgICAgeworICAg
ICAgICB9CisKICAgICAgICAgY29uc3QgSW50UG9pbnQmIHBvcygpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KICAgICAgICAgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvcygpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0KIApAQCAtOTYsMTQgKzExMSwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEludFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CiAgICAgICAg
IGZsb2F0IG1fZGVsdGFYOwogICAgICAgICBmbG9hdCBtX2RlbHRhWTsKKyAgICAgICAgZmxvYXQg
bV9jb250aW51b3VzRGVsdGFYOworICAgICAgICBmbG9hdCBtX2NvbnRpbnVvdXNEZWx0YVk7Cisg
ICAgICAgIGJvb2wgbV9pc0NvbnRpbnVvdXM7CiAgICAgICAgIGJvb2wgbV9pc0FjY2VwdGVkOwog
ICAgICAgICBib29sIG1fc2hpZnRLZXk7CiAgICAgICAgIGJvb2wgbV9jdHJsS2V5OwogICAgICAg
ICBib29sIG1fYWx0S2V5OwogICAgICAgICBib29sIG1fbWV0YUtleTsKLSAgICAgICAgYm9vbCBt
X2lzQ29udGludW91czsKLSAgICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVsdGFYOwotICAgICAg
ICBmbG9hdCBtX2NvbnRpbnVvdXNEZWx0YVk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CShyZXZpc2lvbiAyNjA0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgc2V0R2RrRXhwb3NlRXZlbnQoR2RrRXZlbnRFeHBvc2UqKTsK
ICAgICAgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkgY29uc3Q7CiAgICAgICAgIEdka0V2
ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVudCgpIGNvbnN0OwotICAgICAgICBJbnRQb2ludCB0cmFu
c2xhdGVQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgICAgICBJbnRSZWN0IHRyYW5z
bGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDI2MDQxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwNyw3ICs0MDcsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgSW50
UmVjdAogICAgICAgICByZXR1cm47CiAKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7Ci0g
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisKKyAgICBkb3VibGUgeCA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocmVj
dC54KCkpOworICAgIGRvdWJsZSB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0LnkoKSk7CisK
KyAgICAvLyBXZSB3YW50IHRoZSBtaW5pbXVtIGludGVnZXIgbnVtYmVyIG9mIHNjYWxlZCBwaXhl
bHMgd2hpY2ggY292ZXJzCisgICAgLy8gdGhlIHdob2xlIGFyZWEsIHNvIGluY3JlYXNlIGJ5IDEK
KyAgICBkb3VibGUgd2lkdGggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3Qud2lkdGgoKSkgKyAx
OworICAgIGRvdWJsZSBoZWlnaHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3QuaGVpZ2h0KCkp
ICsgMTsKKworICAgIGNhaXJvX3VzZXJfdG9fZGV2aWNlKGNyLCAmeCwgJnkpOworICAgIGNhaXJv
X3VzZXJfdG9fZGV2aWNlX2Rpc3RhbmNlKGNyLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgeCA9
IHJvdW5kKHgpOworICAgIHkgPSByb3VuZCh5KTsKKyAgICB3aWR0aCA9IHJvdW5kKHdpZHRoKTsK
KyAgICBoZWlnaHQgPSByb3VuZChoZWlnaHQpOworCisgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXIo
Y3IsICZ4LCAmeSk7CisgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXJfZGlzdGFuY2UoY3IsICZ3aWR0
aCwgJmhlaWdodCk7CisKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgsIHksIHdpZHRoLCBoZWln
aHQpOwogICAgIGNhaXJvX2NsaXAoY3IpOwogfQogCkBAIC04MTksMTYgKzgzOSwyMyBAQCBHZGtE
cmF3YWJsZSogR3JhcGhpY3NDb250ZXh0OjpnZGtEcmF3YWJsCiAgICAgcmV0dXJuIEdES19EUkFX
QUJMRShtX2RhdGEtPmV4cG9zZS0+d2luZG93KTsKIH0KIAotSW50UG9pbnQgR3JhcGhpY3NDb250
ZXh0Ojp0cmFuc2xhdGVQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAogewogICAgIGNhaXJvX21hdHJpeF90IHRtOwogICAgIGNhaXJvX2dldF9tYXRyaXgobV9kYXRh
LT5jciwgJnRtKTsKLSAgICBkb3VibGUgeCA9IHBvaW50LngoKTsKLSAgICBkb3VibGUgeSA9IHBv
aW50LnkoKTsKKworCisgICAgZG91YmxlIHggPSByZWN0LngoKTsKKyAgICBkb3VibGUgeSA9IHJl
Y3QueSgpOworICAgIGRvdWJsZSB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBkb3VibGUgaGVp
Z2h0ID0gcmVjdC5oZWlnaHQoKTsKIAogICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQo
JnRtLCAmeCwgJnkpOwotICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKKyAgICBjYWlyb19tYXRy
aXhfdHJhbnNmb3JtX2Rpc3RhbmNlKCZ0bSwgJndpZHRoLCYgaGVpZ2h0KTsKKworICAgIHJldHVy
biBJbnRSZWN0KHN0YXRpY19jYXN0PGludD4oeCksIHN0YXRpY19jYXN0PGludD4oeSksIHN0YXRp
Y19jYXN0PGludD4od2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCkpOwogfQorCiAjZW5k
aWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNjA0MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDEwICs4MSwxMCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogCiAgICAgLy8gVGVzdCB1c2luZyBleGFtcGxlIHNpdGUgYXQgaHR0cDovL3d3dy5tZXllcndl
Yi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRtbAogICAgIGNhaXJvX3Bh
dHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKGltYWdl
KTsKIAotICAgIC8vIFRvIGF2b2lkIHRoZSB1bndhbnRlZCBncmFkaWVudCBlZmZlY3QgKCMxNDAx
Nykgd2UgdXNlCi0gICAgLy8gQ0FJUk9fRklMVEVSX05FQVJFU1Qgbm93LCBidXQgdGhlIHJlYWwg
Zml4IHdpbGwgYmUgdG8gaGF2ZQotICAgIC8vIENBSVJPX0VYVEVORF9QQUQgaW1wbGVtZW50ZWQg
Zm9yIHN1cmZhY2VzIGluIENhaXJvIGFsbG93aW5nIHVzIHRvIHN0aWxsCi0gICAgLy8gdXNlIGJp
bGluZWFyIGZpbHRlcmluZworICAgIC8vIFRvIGF2b2lkIHRoZSB1bndhbnRlZCBncmFkaWVudCBl
ZmZlY3QgKCMxNDAxNykgd2UgdXNlIENBSVJPX0VYVEVORF9SRVBFQVQKKyAgICAvLyBmb3Igbm93
IGJ1dCBpbiB0aGUgZnV0dXJlIHdlJ2QgbGlrZSB0byB1c2UgQ0FJUk9fRVhURU5EX1BBRCBidXQg
aXQgaXMgbm90IGF2YWlsYWJsZQorICAgIC8vIGluIGNhaXJvIHlldC4gVGhpcyBpcyBzbyB0aGF0
IHdlIGNhbiB1c2UgQ0FJUk9fRklMVEVSX0JFU1QgaW5zdGVhZCBvZiBDQUlST19GSUxURVJfTkVB
UkVTVAorICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRf
UkVQRUFUKTsKICAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJUk9fRklM
VEVSX05FQVJFU1QpOwogCiAgICAgZmxvYXQgc2NhbGVYID0gc3JjUmVjdC53aWR0aCgpIC8gZHN0
UmVjdC53aWR0aCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRm9udFBsYXRmb3JtRGF0
YUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRm9udFBsYXRmb3Jt
RGF0YUd0ay5jcHAJKHJldmlzaW9uIDI2MDQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRm9u
dFBsYXRmb3JtRGF0YUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMTEgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdAogICAgIGNhaXJvX21hdHJp
eF9pbml0X3NjYWxlKGZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
LCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CiAgICAgY2Fpcm9fbWF0cml4X2lu
aXRfaWRlbnRpdHkoJmN0bSk7CiAgICAgb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVh
dGUoKTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHdvcmsgb3V0IGhvdyB0byBnZXQgdGhlIHRy
dWUgKGhpbnRlZCkgZXh0ZW50cyBmcm9tIGNhaXJvIGluc3RlYWQgb2YKKyAgICAvLyBkaXNhYmxp
bmcgaGludGluZy4gU2VlIGh0dHA6Ly9saXN0cy5jYWlyb2dyYXBoaWNzLm9yZy9hcmNoaXZlcy9j
YWlyby8yMDA3LVNlcHRlbWJlci8wMTEzNjYuaHRtbAorICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19z
ZXRfaGludF9zdHlsZShvcHRpb25zLCBDQUlST19ISU5UX1NUWUxFX05PTkUpOworICAgIGNhaXJv
X2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKG9wdGlvbnMsIENBSVJPX0FOVElBTElBU19TVUJQ
SVhFTCk7CisKICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9u
dEZhY2UsIGZvbnRNYXRyaXgsICZjdG0sIG9wdGlvbnMpOwogICAgIGNhaXJvX2ZvbnRfZmFjZV9k
ZXN0cm95KGZvbnRGYWNlKTsKICAgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJveShvcHRpb25z
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJhckd0ay5j
cHAJKHJldmlzaW9uIDI2MDQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3Jv
bGxCYXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIndl
YmtpdGd0a3ByaXZhdGUuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8Y2Fpcm8v
Y2Fpcm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTIxLDggKzEyMiwxMiBAQCB2b2lkIFBs
YXRmb3JtU2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQoCiAgICAgQVNTRVJUKHBhcmVudCgpLT5p
c0ZyYW1lVmlldygpKTsKIAogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8
RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAgIAorICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IGZy
YW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCiAgICAgSW50UmVjdCB3
aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9t
ZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKLSAgICBHdGtBbGxv
Y2F0aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2lu
ZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uID0geyBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QueCgpICogc2NhbGVG
YWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QueSgpICogc2NhbGVGYWN0b3IpLCAK
KyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LndpZHRoKCkgKiBzY2FsZUZhY3Rv
ciksIHN0YXRpY19jYXN0PGludD4od2luZG93UmVjdC5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9
OwogICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24p
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZp
c2lvbiAyNjA0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgyLDExICsxODIsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRDaGVja2JveChSZW5kZQogewogICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhp
bmcgdG8gZG8/CiAgICAgR3RrV2lkZ2V0KiBjaGVja2JveCA9IGd0a0NoZWNrYm94KCk7Ci0gICAg
SW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkp
OworICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNsYXRlUmVjdChyZWN0
KTsKICAgICBndGtfcGFpbnRfY2hlY2soY2hlY2tib3gtPnN0eWxlLCBpLmNvbnRleHQtPmdka0Ry
YXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1p
bmVTaGFkb3cobyksCiAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGNoZWNrYm94LCAiY2hlY2ti
dXR0b24iLAotICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBzY2FsZWRSZWN0LngoKSwg
c2NhbGVkUmVjdC55KCksIHNjYWxlZFJlY3Qud2lkdGgoKSwgc2NhbGVkUmVjdC5oZWlnaHQoKSk7
CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMTUsMjQgKzIxNSwyNCBAQCBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRlck9iCiB7IAogICAgIC8vIEZJWE1FOiBpcyBpdCB0
aGUgcmlnaHQgdGhpbmcgdG8gZG8/CiAgICAgR3RrV2lkZ2V0KiByYWRpbyA9IGd0a1JhZGlvQnV0
dG9uKCk7Ci0gICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0
LmxvY2F0aW9uKCkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNs
YXRlUmVjdChyZWN0KTsKICAgICBndGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5zdHlsZSwgaS5jb250
ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUo
byksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHJhZGlv
LCAicmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgIHNjYWxl
ZFJlY3QueCgpLCBzY2FsZWRSZWN0LnkoKSwgc2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0
LmhlaWdodCgpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkgCi17IAorewogICAgIC8vIEZJWE1FOiBzaG91
bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hvdWxkIGhvbm9yIHRoZSBzdGF0ZSBh
cyB3ZWxsCiAgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKLSAgICBJbnRQb2lu
dCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAg
SW50UmVjdCBzY2FsZWRSZWN0ID0gaS5jb250ZXh0LT50cmFuc2xhdGVSZWN0KHJlY3QpOwogICAg
IGd0a19wYWludF9ib3goYnV0dG9uLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAog
ICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwK
ICAgICAgICAgICAgICAgICAgIE5VTEwsIGJ1dHRvbiwgImJ1dHRvbiIsCi0gICAgICAgICAgICAg
ICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgICAgc2NhbGVkUmVjdC54KCksIHNjYWxlZFJlY3QueSgpLCBzY2FsZWRSZWN0
LndpZHRoKCksIHNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMjQ1LDEyICsyNDUsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQo
UmVuZAogewogICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcKICAg
ICBHdGtXaWRnZXQqIGVudHJ5ID0gZ3RrRW50cnkoKTsKLSAgICBJbnRQb2ludCBwb3MgPSBpLmNv
bnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgSW50UmVjdCBzY2Fs
ZWRSZWN0ID0gaS5jb250ZXh0LT50cmFuc2xhdGVSZWN0KHJlY3QpOwogCiAgICAgZ3RrX3BhaW50
X3NoYWRvdyhlbnRyeS0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAg
ICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAgICAg
ICAgICAgICAgICAgICAgICAwLCBlbnRyeSwgImVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAg
IHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgICAgICBzY2FsZWRSZWN0LngoKSwgc2NhbGVkUmVjdC55KCksIHNjYWxlZFJlY3Qu
d2lkdGgoKSwgc2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkocmV2aXNpb24gMjYwNDEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKIAorCisjaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgorI2luY2x1ZGUgIndlYmtp
dGd0a3ByaXZhdGUuaCIKKwogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CiAKQEAgLTEyOCw4ICsxMzIsMTIgQEAgdm9pZCBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9t
ZXRyeUNoYW5nZQogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsK
KworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpLT5z
Y2FsZUZhY3RvcigpOworCiAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZp
ZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkp
LCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3
aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBz
dGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QueCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2Fz
dDxpbnQ+KHdpbmRvd1JlY3QueSgpICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KHdpbmRvd1JlY3Qud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nhc3Q8aW50
Pih3aW5kb3dSZWN0LmhlaWdodCgpICogc2NhbGVGYWN0b3IpIH07CiAgICAgZ3RrX3dpZGdldF9z
aXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiAKQEAgLTI4NywxNyAr
Mjk1LDMwIEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0R3RrQWRqdXN0bWVudHMoR3RrQWQKIAogdm9p
ZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBi
b29sIG5vdykKIHsKKyAgICBBU1NFUlQoY29udGFpbmluZ1dpbmRvdygpKTsKKwogICAgIGlmICh1
cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKGlzRnJh
bWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPih0aGlzKTsKKworICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IGZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgV2ViS2l0UGFnZSogcGFnZSA9IFdF
QktJVF9QQUdFKGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgV2ViS2l0UGFnZVByaXZhdGUqIHBh
Z2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKICAgICBJbnRQb2ludCB3
aW5kb3dQb2ludCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlvbigpKTsKICAg
ICBJbnRSZWN0IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKICAgICBjb250YWlu
aW5nV2luZG93UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisgICAgY29udGFpbmluZ1dp
bmRvd1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogCiAgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7
IGNvbnRhaW5pbmdXaW5kb3dSZWN0LngoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGFpbmluZ1dpbmRvd1JlY3QueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC5oZWlnaHQoKSB9OworCiAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBHVEtf
V0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdzsKIAogICAgIGlmICh3aW5kb3cpCkBA
IC0zMTMsOCArMzM0LDE1IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMoY29uc3Qg
SW4KIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIHsKICAgICBBU1NFUlQoY29udGFpbmluZ1dp
bmRvdygpKTsKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpOworCisgICAgZG91YmxlIHNj
YWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisK
KyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgc3RhdGljX2Nhc3Q8aW50PihmcmFtZUdlb21ldHJ5
KCkueCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lR2VvbWV0cnkoKS55
KCkgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4obV9kYXRhLT5jb250
ZW50c1NpemUud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSwgIHN0YXRpY19jYXN0PGludD4obV9kYXRh
LT5jb250ZW50c1NpemUuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcikgfTsKIAotICAgIEdka1JlY3Rh
bmdsZSByZWN0ID0geyAwLCAwLCBtX2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpLCBtX2RhdGEt
PmNvbnRlbnRzU2l6ZS5oZWlnaHQoKSB9OwogICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWN0
KEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93LCAmcmVjdCwgdHJ1ZSk7CiB9
CiAKQEAgLTY5NiwxNiArNzI0LDMyIEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiAKIHsKICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGhlcmUgc28gd2UgZG9uJ3Qg
aGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCiAgICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVW
aWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xsVmlldy4KKwogICAgIEFTU0VSVChpc0Zy
YW1lVmlldygpKTsKIAorICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4odGhpcyk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBmcmFtZVZpZXctPmZy
YW1lKCktPnBhZ2UoKS0+c2NhbGVGYWN0b3IoKTsKKwogICAgIGlmIChjb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgZG9jdW1lbnREaXJ0
eVJlY3QgPSByZWN0OworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgZG9jdW1lbnREaXJ0
eVJlY3Quc2NhbGUoMSAvIHNjYWxlRmFjdG9yKTsKKwogICAgIGRvY3VtZW50RGlydHlSZWN0Lmlu
dGVyc2VjdChmcmFtZUdlb21ldHJ5KCkpOwogCisgICAgLy8gUGFpbnQgYW4gZXh0cmEgMiBwaXhl
bHMgYXJvdW5kIHRvIGFjY29tbW9kYXRlIGFydGlmYWN0cyBhbmQgcm91bmRpbmcgZXJyb3JzIGlu
IHRoZSBzY2FsaW5nCisgICAgZG9jdW1lbnREaXJ0eVJlY3QuaW5mbGF0ZSgyKTsKKwogICAgIGNv
bnRleHQtPnNhdmUoKTsKIAorICAgIC8vIE9ubHkgc2NhbGUgdGhlIHJvb3QgU2Nyb2xsVmlldwor
ICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShzY2Fs
ZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKKwogICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHko
KSk7CiAgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAkocmV2aXNpb24gMjYwNDEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw3ICsz
MDAsNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbFJlY3RJbnRvVmlld1JlY3VyCiAgICAgc2V0
Q29udGVudHNQb3MocmVjdC54KCksIHJlY3QueSgpKTsKIH0KIAotCiBQbGF0Zm9ybVNjcm9sbGJh
ciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIG1vdXNlRXZlbnQpIAogewogICAgIC8vIEFGQUlDVCB0aGlzIGlzIG9ubHkgdXNlZCBmb3Ig
cGxhdGZvcm1zIHRoYXQgcHJvdmlkZSAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCShy
ZXZpc2lvbiAyNjA0MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFn
ZV9zY3JvbGxfZXZlbnQKIHN0YXRpYyB2b2lkIHdlYmtpdF9wYWdlX3NpemVfYWxsb2NhdGUoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pCiB7CiAgICAgR1RLX1dJ
REdFVF9DTEFTUyh3ZWJraXRfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdl
dCxhbGxvY2F0aW9uKTsKKyAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRf
UEFHRV9HRVRfUFJJVkFURShXRUJLSVRfUEFHRSh3aWRnZXQpKTsKKworICAgIC8vIFdlIGNhY2hl
IHRoZSB1bnNjYWxlZCB3aWR0aC9oZWlnaHQgYXMgcmVjYWxjdWxhdGluZyB0aGVtIHVzaW5nIHRo
ZSBzY2FsZUZhY3RvciBsZWFkcyB0bworICAgIC8vIHJvdW5kaW5nIGVycm9ycworICAgIHBhZ2VE
YXRhLT5tX3dpZHRoID0gYWxsb2NhdGlvbi0+d2lkdGg7CisgICAgcGFnZURhdGEtPm1faGVpZ2h0
ID0gYWxsb2NhdGlvbi0+aGVpZ2h0OwogCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFt
ZUZyb21QYWdlKFdFQktJVF9QQUdFKHdpZGdldCkpKTsKICAgICBmcmFtZS0+dmlldygpLT5yZXNp
emUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7CkBAIC01NDIsNCArNTQ4
LDMwIEBAIHZvaWQgd2Via2l0X3BhZ2VfZXhlY3V0ZV9zY3JpcHQoV2ViS2l0UGEKICAgICBpZiAo
RnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpKQogICAgICAg
ICBsb2FkZXItPmV4ZWN1dGVTY3JpcHQoU3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsK
IH0KKwordm9pZCB3ZWJraXRfcGFnZV9zZXRfc2NhbGVfZmFjdG9yKFdlYktpdFBhZ2UqIHBhZ2Us
IGRvdWJsZSBmYWN0b3IpCit7CisgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21Q
YWdlKHBhZ2UpKTsKKworICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9Q
QUdFX0dFVF9QUklWQVRFKHBhZ2UpOworICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRh
ID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUpOworCisgICAg
cGFnZURhdGEtPnBhZ2UtPnNldFNjYWxlRmFjdG9yKGZhY3Rvcik7CisKKyAgICBmcmFtZS0+dmll
dygpLT5yZXNpemUocGFnZURhdGEtPm1fd2lkdGgsIHBhZ2VEYXRhLT5tX2hlaWdodCk7CisgICAg
ZnJhbWUtPmZvcmNlTGF5b3V0KCk7CisgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUo
KTsKKyAgICBmcmFtZS0+c2VuZFJlc2l6ZUV2ZW50KCk7Cit9CisKK2RvdWJsZSB3ZWJraXRfcGFn
ZV9nZXRfc2NhbGVfZmFjdG9yKFdlYktpdFBhZ2UqIHBhZ2UpCit7CisgICAgLy9XZWJLaXRQYWdl
UHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Cisg
ICAgLy9XZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9HVEtfRlJBTUVfR0VU
X1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7CisKKyAgICAvL0ZyYW1lVmlldyogZnJhbWVW
aWV3ID0gZnJhbWVEYXRhLT5mcmFtZS0+dmlldygpOworICAgIC8vCisgICAgcmV0dXJuIGNvcmUo
cGFnZSktPnNjYWxlRmFjdG9yKCk7Cit9CisKIH0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0a3BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJ
KHJldmlzaW9uIDI2MDQxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDEyIEBAIFdFQktJVF9BUEkgV2ViS2l0RnJhbWUqCiB3
ZWJraXRfcGFnZV9nZXRfbWFpbl9mcmFtZSAoV2ViS2l0UGFnZSogcGFnZSk7CiAKIFdFQktJVF9B
UEkgdm9pZAord2Via2l0X3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0UGFnZSogcGFnZSwg
ZG91YmxlIGZhY3Rvcik7CisKK1dFQktJVF9BUEkgZG91YmxlCit3ZWJraXRfcGFnZV9nZXRfc2Nh
bGVfZmFjdG9yIChXZWJLaXRQYWdlKiBwYWdlKTsKKworV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRf
cGFnZV9leGVjdXRlX3NjcmlwdChXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogc2NyaXB0
KTsKIEdfRU5EX0RFQ0xTCiAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJldmlz
aW9uIDI2MDQxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpT
dHJpbmcgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJp
bmcqIHVzZXJBZ2VudDsKIAorICAgICAgICBpbnQgbV93aWR0aCwgbV9oZWlnaHQ7CisKICAgICAg
ICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJlbjsKICAgICB9OwogICAgIAo=
</data>
<flag name="review"
          id="6982"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16587</attachid>
            <date>2007-10-08 04:12:47 -0700</date>
            <delta_ts>2007-10-22 03:42:28 -0700</delta_ts>
            <desc>Change events instead of duplicating them, various other cleanups</desc>
            <filename>zooming-20071008.patch</filename>
            <type>text/plain</type>
            <size>31159</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyNjEwMykKKysrIFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTksMjMgKzc5OSwyNSBAQCBD
dXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgCiAgICAgcmV0dXJuIHBvaW50
ZXJDdXJzb3IoKTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCitib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQp
CiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBjb25zdF9jYXN0PFBsYXRmb3JtTW91c2VFdmVudCY+KGV2ZW50KS5zY2FsZShzY2Fs
ZUZhY3RvcigpKTsKKwogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLT52
aWV3KCkpOwogCiAgICAgbV9tb3VzZVByZXNzZWQgPSB0cnVlOwotICAgIG1fY3VycmVudE1vdXNl
UG9zaXRpb24gPSBtb3VzZUV2ZW50LnBvcygpOwotICAgIG1fbW91c2VEb3duVGltZXN0YW1wID0g
bW91c2VFdmVudC50aW1lc3RhbXAoKTsKKyAgICBtX2N1cnJlbnRNb3VzZVBvc2l0aW9uID0gZXZl
bnQucG9zKCk7CisgICAgbV9tb3VzZURvd25UaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXAoKTsK
ICAgICBtX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGZhbHNlOwogICAgIG1fbW91c2VEb3duTWF5
U3RhcnRTZWxlY3QgPSBmYWxzZTsKICAgICBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbCA9
IGZhbHNlOwotICAgIG1fbW91c2VEb3duUG9zID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0Nv
bnRlbnRzKG1vdXNlRXZlbnQucG9zKCkpOworICAgIG1fbW91c2VEb3duUG9zID0gbV9mcmFtZS0+
dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvcygpKTsKICAgICBtX21vdXNlRG93bldh
c0luU3ViZnJhbWUgPSBmYWxzZTsKICAgICAKLSAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KEhpdFRlc3RSZXF1ZXN0KGZhbHNlLCB0cnVlKSwg
bW91c2VFdmVudCk7CisgICAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBwcmVw
YXJlTW91c2VFdmVudChIaXRUZXN0UmVxdWVzdChmYWxzZSwgdHJ1ZSksIGV2ZW50KTsKIAogICAg
IGlmICghbWV2LnRhcmdldE5vZGUoKSkgewogICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsKQEAg
LTgzNCwxMSArODM2LDExIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZl
bnQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgbV9jbGlja0NvdW50ID0gbW91
c2VFdmVudC5jbGlja0NvdW50KCk7CisgICAgbV9jbGlja0NvdW50ID0gZXZlbnQuY2xpY2tDb3Vu
dCgpOwogICAgIG1fY2xpY2tOb2RlID0gbWV2LnRhcmdldE5vZGUoKTsKICAgICAKICAgICBSZW5k
ZXJMYXllciogbGF5ZXIgPSBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKSA/IG1fY2xpY2tOb2RlLT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpIDogMDsKLSAgICBJbnRQb2ludCBwID0gbV9mcmFt
ZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKG1vdXNlRXZlbnQucG9zKCkpOworICAgIEludFBv
aW50IHAgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZlbnQucG9zKCkpOwog
ICAgIGlmIChsYXllciAmJiBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChwKSkgewogICAg
ICAgICBsYXllci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOwogICAgICAgICBtX3Jlc2l6ZUxheWVy
ID0gbGF5ZXI7CkBAIC04NDcsMTIgKzg0OSwxMiBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VQcmVzc0V2ZW50CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wg
c3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KG1vdXNlZG93bkV2ZW50LCBtZXYudGFy
Z2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOworICAgIGJv
b2wgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KG1vdXNlZG93bkV2ZW50LCBtZXYu
dGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIGV2ZW50LCB0cnVlKTsKIAogICAgIC8v
IElmIHRoZSBoaXQgdGVzdGluZyBvcmlnaW5hbGx5IGRldGVybWluZWQgdGhlIGV2ZW50IHdhcyBp
biBhIHNjcm9sbGJhciwgcmVmZXRjaCB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cwog
ICAgIC8vIGluIGNhc2UgdGhlIHNjcm9sbGJhciB3aWRnZXQgd2FzIGRlc3Ryb3llZCB3aGVuIHRo
ZSBtb3VzZSBldmVudCB3YXMgaGFuZGxlZC4KICAgICBpZiAobWV2LnNjcm9sbGJhcigpKQotICAg
ICAgICBtZXYgPSBwcmVwYXJlTW91c2VFdmVudChIaXRUZXN0UmVxdWVzdCh0cnVlLCB0cnVlKSwg
bW91c2VFdmVudCk7CisgICAgICAgIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KEhpdFRlc3RSZXF1
ZXN0KHRydWUsIHRydWUpLCBldmVudCk7CiAKICAgICBpZiAoc3dhbGxvd0V2ZW50KSB7CiAgICAg
ICAgIC8vIHNjcm9sbGJhcnMgc2hvdWxkIGdldCBldmVudHMgYW55d2F5LCBldmVuIGRpc2FibGVk
IGNvbnRyb2xzIG1pZ2h0IGJlIHNjcm9sbGFibGUKQEAgLTg2NCw5ICs4NjYsOSBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50CiAgICAgICAgIC8vIHdlJ2QgbGlrZSB0
byBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCB0byBwYXNzIHRoZSBldmVudCB0
byB0aGUgd2lkZ2V0IGFuZCB0aHVzIHRoZQogICAgICAgICAvLyBldmVudCB0YXJnZXQgbm9kZSBj
YW4ndCBzdGlsbCBiZSB0aGUgc2hhZG93IG5vZGUuCiAgICAgICAgIGlmIChtZXYudGFyZ2V0Tm9k
ZSgpLT5pc1NoYWRvd05vZGUoKSAmJiBtZXYudGFyZ2V0Tm9kZSgpLT5zaGFkb3dQYXJlbnROb2Rl
KCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQotICAgICAgICAgICAgbWV2ID0gcHJlcGFyZU1vdXNl
RXZlbnQoSGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSksIG1vdXNlRXZlbnQpOworICAgICAgICAg
ICAgbWV2ID0gcHJlcGFyZU1vdXNlRXZlbnQoSGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSksIGV2
ZW50KTsKIAotICAgICAgICBQbGF0Zm9ybVNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9mcmFtZS0+
dmlldygpLT5zY3JvbGxiYXJVbmRlck1vdXNlKG1vdXNlRXZlbnQpOworICAgICAgICBQbGF0Zm9y
bVNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9mcmFtZS0+dmlldygpLT5zY3JvbGxiYXJVbmRlck1v
dXNlKGV2ZW50KTsKICAgICAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgICAgICBzY3JvbGxi
YXIgPSBtZXYuc2Nyb2xsYmFyKCk7CiAgICAgICAgIGlmIChzY3JvbGxiYXIgJiYgcGFzc01vdXNl
UHJlc3NFdmVudFRvU2Nyb2xsYmFyKG1ldiwgc2Nyb2xsYmFyKSkKQEAgLTkxNiw2ICs5MTgsOSBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVDbGljCiAKIGJvb2wgRXZlbnRI
YW5kbGVyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CisK
KyAgICBjb25zdF9jYXN0PFBsYXRmb3JtTW91c2VFdmVudCY+KGV2ZW50KS5zY2FsZShzY2FsZUZh
Y3RvcigpKTsKKwogICAgIEhpdFRlc3RSZXN1bHQgaG92ZXJlZE5vZGUgPSBIaXRUZXN0UmVzdWx0
KEludFBvaW50KCkpOwogICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZl
bnQsICZob3ZlcmVkTm9kZSk7CiAKQEAgLTEwMjQsMTUgKzEwMjksMTggQEAgdm9pZCBFdmVudEhh
bmRsZXI6OmludmFsaWRhdGVDbGljaygpCiAgICAgbV9jbGlja05vZGUgPSAwOwogfQogCi1ib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFz
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKCFtX2Zy
YW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8RnJh
bWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygpKTsKIAorCisgICAgY29uc3RfY2FzdDxQ
bGF0Zm9ybU1vdXNlRXZlbnQmPihldmVudCkuc2NhbGUoc2NhbGVGYWN0b3IoKSk7CisKICAgICBt
X21vdXNlUHJlc3NlZCA9IGZhbHNlOwotICAgIG1fY3VycmVudE1vdXNlUG9zaXRpb24gPSBtb3Vz
ZUV2ZW50LnBvcygpOworICAgIG1fY3VycmVudE1vdXNlUG9zaXRpb24gPSBldmVudC5wb3MoKTsK
IAogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKG1fc3ZnUGFuKSB7CkBAIC0xMDQyLDE0ICsxMDUw
LDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICNlbmRpZgog
CiAgICAgaWYgKG1fZnJhbWVTZXRCZWluZ1Jlc2l6ZWQpCi0gICAgICAgIHJldHVybiBkaXNwYXRj
aE1vdXNlRXZlbnQobW91c2V1cEV2ZW50LCBtX2ZyYW1lU2V0QmVpbmdSZXNpemVkLmdldCgpLCB0
cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGRp
c3BhdGNoTW91c2VFdmVudChtb3VzZXVwRXZlbnQsIG1fZnJhbWVTZXRCZWluZ1Jlc2l6ZWQuZ2V0
KCksIHRydWUsIG1fY2xpY2tDb3VudCwgZXZlbnQsIGZhbHNlKTsKIAogICAgIGlmIChtX2xhc3RT
Y3JvbGxiYXJVbmRlck1vdXNlKSB7CiAgICAgICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAg
ICByZXR1cm4gbV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZS0+aGFuZGxlTW91c2VSZWxlYXNlRXZl
bnQobW91c2VFdmVudCk7CisgICAgICAgIHJldHVybiBtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNl
LT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChldmVudCk7CiAgICAgfQogCi0gICAgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBwcmVwYXJlTW91c2VFdmVudChIaXRUZXN0UmVxdWVz
dChmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlKSwgbW91c2VFdmVudCk7CisgICAgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBwcmVwYXJlTW91c2VFdmVudChIaXRUZXN0UmVxdWVz
dChmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlKSwgZXZlbnQpOwogICAgIE5vZGUqIHRhcmdldE5v
ZGUgPSBtX2NhcHR1cmluZ01vdXNlRXZlbnRzTm9kZS5nZXQoKSA/IG1fY2FwdHVyaW5nTW91c2VF
dmVudHNOb2RlLmdldCgpIDogbWV2LnRhcmdldE5vZGUoKTsKICAgICBGcmFtZSogc3ViZnJhbWUg
PSBzdWJmcmFtZUZvclRhcmdldE5vZGUodGFyZ2V0Tm9kZSk7CiAgICAgaWYgKHN1YmZyYW1lICYm
IHBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSkpIHsKQEAgLTEw
NTcsMTIgKzEwNjUsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2
ZQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIHN3YWxsb3dNb3VzZVVw
RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQobW91c2V1cEV2ZW50LCBtZXYudGFyZ2V0Tm9kZSgp
LCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNlKTsKKyAgICBib29sIHN3YWxs
b3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQobW91c2V1cEV2ZW50LCBtZXYudGFy
Z2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIGV2ZW50LCBmYWxzZSk7CiAKICAgICAvLyBE
b24ndCBldmVyIGRpc3BhdGNoIGNsaWNrIGV2ZW50cyBmb3IgcmlnaHQgY2xpY2tzCiAgICAgYm9v
bCBzd2FsbG93Q2xpY2tFdmVudCA9IGZhbHNlOwotICAgIGlmIChtX2NsaWNrQ291bnQgPiAwICYm
IG1vdXNlRXZlbnQuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgbWV2LnRhcmdldE5vZGUoKSA9
PSBtX2NsaWNrTm9kZSkKLSAgICAgICAgc3dhbGxvd0NsaWNrRXZlbnQgPSBkaXNwYXRjaE1vdXNl
RXZlbnQoY2xpY2tFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBt
b3VzZUV2ZW50LCB0cnVlKTsKKyAgICBpZiAobV9jbGlja0NvdW50ID4gMCAmJiBldmVudC5idXR0
b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBtZXYudGFyZ2V0Tm9kZSgpID09IG1fY2xpY2tOb2RlKQor
ICAgICAgICBzd2FsbG93Q2xpY2tFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChjbGlja0V2ZW50
LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIGV2ZW50LCB0cnVlKTsKIAog
ICAgIGlmIChtX3Jlc2l6ZUxheWVyKSB7CiAgICAgICAgIG1fcmVzaXplTGF5ZXItPnNldEluUmVz
aXplTW9kZShmYWxzZSk7CkBAIC0xMjc1LDcgKzEyODMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvCiAgICAgcmV0dXJuIHN3YWxsb3dFdmVudDsKIH0KIAotYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQor
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBl
dmVudCkKIHsKICAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBp
ZiAoIWRvYykKQEAgLTEyODUsNyArMTI5Myw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVX
aGVlbEV2ZW50KFBsYXQKICAgICBpZiAoIWRvY1JlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbnRQb2ludCB2UG9pbnQgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29u
dGVudHMoZS5wb3MoKSk7CisgICAgZXZlbnQuc2NhbGUoc2NhbGVGYWN0b3IoKSk7CisKKyAgICBJ
bnRQb2ludCB2UG9pbnQgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZlbnQu
cG9zKCkpOwogCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCh0cnVlLCBmYWxzZSk7CiAgICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQodlBvaW50KTsKQEAgLTEyOTksMzUgKzEzMDksMzUgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdAogICAgICAgICBpZiAodGFyZ2V0
ICYmIHRhcmdldC0+aXNXaWRnZXQoKSkgewogICAgICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSBz
dGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKTsKIAotICAgICAgICAg
ICAgaWYgKHdpZGdldCAmJiBwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGUsIHdpZGdldCkpIHsKLSAg
ICAgICAgICAgICAgICBlLmFjY2VwdCgpOworICAgICAgICAgICAgaWYgKHdpZGdldCAmJiBwYXNz
V2hlZWxFdmVudFRvV2lkZ2V0KGV2ZW50LCB3aWRnZXQpKSB7CisgICAgICAgICAgICAgICAgZXZl
bnQuYWNjZXB0KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICBub2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7
Ci0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9kZSktPmRpc3BhdGNoV2hlZWxFdmVudChl
KTsKLSAgICAgICAgaWYgKGUuaXNBY2NlcHRlZCgpKQorICAgICAgICBFdmVudFRhcmdldE5vZGVD
YXN0KG5vZGUpLT5kaXNwYXRjaFdoZWVsRXZlbnQoZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQu
aXNBY2NlcHRlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAg
ICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIC8vIEp1c3QgYnJlYWsg
dXAgaW50byB0d28gc2Nyb2xscyBpZiB3ZSBuZWVkIHRvLiAgRGlhZ29uYWwgbW92ZW1lbnQgb24g
CiAgICAgICAgICAgICAvLyBhIE1hY0Jvb2sgcHJvIGlzIGFuIGV4YW1wbGUgb2YgYSAyLWRpbWVu
c2lvbmFsIG1vdXNlIHdoZWVsIGV2ZW50ICh3aGVyZSBib3RoIGRlbHRhWCBhbmQgZGVsdGFZIGNh
biBiZSBzZXQpLgotICAgICAgICAgICAgZmxvYXQgZGVsdGFYID0gZS5pc0NvbnRpbnVvdXMoKSA/
IGUuY29udGludW91c0RlbHRhWCgpIDogZS5kZWx0YVgoKTsKLSAgICAgICAgICAgIGZsb2F0IGRl
bHRhWSA9IGUuaXNDb250aW51b3VzKCkgPyBlLmNvbnRpbnVvdXNEZWx0YVkoKSA6IGUuZGVsdGFZ
KCk7Ci0gICAgICAgICAgICBpZiAoZGVsdGFYICYmIG5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbChk
ZWx0YVggPCAwID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxMZWZ0LCBlLmlzQ29udGludW91cygpID8g
U2Nyb2xsQnlQaXhlbCA6IFNjcm9sbEJ5TGluZSwKKyAgICAgICAgICAgIGZsb2F0IGRlbHRhWCA9
IGV2ZW50LmlzQ29udGludW91cygpID8gZXZlbnQuY29udGludW91c0RlbHRhWCgpIDogZXZlbnQu
ZGVsdGFYKCk7CisgICAgICAgICAgICBmbG9hdCBkZWx0YVkgPSBldmVudC5pc0NvbnRpbnVvdXMo
KSA/IGV2ZW50LmNvbnRpbnVvdXNEZWx0YVkoKSA6IGV2ZW50LmRlbHRhWSgpOworICAgICAgICAg
ICAgaWYgKGRlbHRhWCAmJiBub2RlLT5yZW5kZXJlcigpLT5zY3JvbGwoZGVsdGFYIDwgMCA/IFNj
cm9sbFJpZ2h0IDogU2Nyb2xsTGVmdCwgZXZlbnQuaXNDb250aW51b3VzKCkgPyBTY3JvbGxCeVBp
eGVsIDogU2Nyb2xsQnlMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbHRhWCA8IDAgPyAtZGVsdGFYIDogZGVsdGFYKSkKLSAgICAg
ICAgICAgICAgICBlLmFjY2VwdCgpOwotICAgICAgICAgICAgaWYgKGRlbHRhWSAmJiBub2RlLT5y
ZW5kZXJlcigpLT5zY3JvbGwoZGVsdGFZIDwgMCA/IFNjcm9sbERvd24gOiBTY3JvbGxVcCwgZS5p
c0NvbnRpbnVvdXMoKSA/IFNjcm9sbEJ5UGl4ZWwgOiBTY3JvbGxCeUxpbmUsCisgICAgICAgICAg
ICAgICAgZXZlbnQuYWNjZXB0KCk7CisgICAgICAgICAgICBpZiAoZGVsdGFZICYmIG5vZGUtPnJl
bmRlcmVyKCktPnNjcm9sbChkZWx0YVkgPCAwID8gU2Nyb2xsRG93biA6IFNjcm9sbFVwLCBldmVu
dC5pc0NvbnRpbnVvdXMoKSA/IFNjcm9sbEJ5UGl4ZWwgOiBTY3JvbGxCeUxpbmUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFZIDwg
MCA/IC1kZWx0YVkgOiBkZWx0YVkpKQotICAgICAgICAgICAgICAgIGUuYWNjZXB0KCk7CisgICAg
ICAgICAgICAgICAgZXZlbnQuYWNjZXB0KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
IWUuaXNBY2NlcHRlZCgpKQotICAgICAgICBtX2ZyYW1lLT52aWV3KCktPndoZWVsRXZlbnQoZSk7
CisgICAgaWYgKCFldmVudC5pc0FjY2VwdGVkKCkpCisgICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+
d2hlZWxFdmVudChldmVudCk7CiAgICAgCi0gICAgcmV0dXJuIGUuaXNBY2NlcHRlZCgpOworICAg
IHJldHVybiBldmVudC5pc0FjY2VwdGVkKCk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5k
Q29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQpAQCAtMTc1
OSw0ICsxNzY5LDEyIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0VGFiRXZlbnRIYW5kbGUK
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKK2RvdWJsZSBFdmVudEhh
bmRsZXI6OnNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAobV9mcmFtZS0+cGFnZSgpKQor
ICAgICAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuIDEuMDsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNp
b24gMjYxMDMpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0Niw2ICsxNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvY3VzRG9jdW1lbnRWaWV3
KCk7CiAKKyAgICBkb3VibGUgc2NhbGVGYWN0b3IoKSBjb25zdDsKICNpZiBQTEFURk9STShNQUMp
CiAgICAgUGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50PiBjdXJyZW50S2V5Ym9hcmRFdmVudCgpIGNv
bnN0OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMjYxMDMpCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1
ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRl
clBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKQEAgLTk3Miw2ICs5NzMsMTMgQEAgdm9pZCBGcmFtZVZpZXc6OnNldFdhc1Njcm9s
bGVkQnlVc2VyKGJvbwogICAgIGQtPm1fd2FzU2Nyb2xsZWRCeVVzZXIgPSB3YXNTY3JvbGxlZEJ5
VXNlcjsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnJlc2l6ZShpbnQgdywgaW50IGgpCit7CisgICAg
ZG91YmxlIHNjYWxlRmFjdG9yID0gZnJhbWUoKS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisg
ICAgV2lkZ2V0OjpyZXNpemUoc3RhdGljX2Nhc3Q8aW50Pih3IC8gc2NhbGVGYWN0b3IpLCBzdGF0
aWNfY2FzdDxpbnQ+KGggLyBzY2FsZUZhY3RvcikpOworfQorCiAjaWYgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShHVEspCiB2b2lkIEZyYW1lVmlldzo6bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUo
KQogewpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMjYxMDMpCisrKyBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRXaWRnZXRUb1VwZGF0ZShSZW5kZXJQYXJ0T2JqZWN0Kik7CiAgICAgdm9pZCByZW1v
dmVXaWRnZXRUb1VwZGF0ZShSZW5kZXJQYXJ0T2JqZWN0Kik7CiAKKyAgICB2b2lkIHJlc2l6ZShp
bnQsIGludCk7CisKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYnkg
YWxsIHBsYXRmb3JtcywgYnV0IGN1cnJlbnRseSBkZXBlbmRzIG9uIFNjcm9sbFZpZXc6OmNoaWxk
cmVuLAogICAgIC8vIHdoaWNoIG5vdCBhbGwgbWV0aG9kcyBoYXZlLiBPbmNlIEZyYW1lVmlldyBh
bmQgU2Nyb2xsVmlldyBhcmUgbWVyZ2VkLCB0aGlzICNpZiBzaG91bGQgYmUgcmVtb3ZlZC4KICNp
ZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDI2MTAz
KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3
IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIEMKICAgICAsIG1fZGVm
ZXJzTG9hZGluZyhmYWxzZSkKICAgICAsIG1faW5Mb3dRdWFsaXR5SW50ZXJwb2xhdGlvbk1vZGUo
ZmFsc2UpCiAgICAgLCBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoMCkKKyAgICAsIG1fc2Nh
bGVGYWN0b3IoMS4wKQogewogICAgIGlmICghYWxsUGFnZXMpIHsKICAgICAgICAgYWxsUGFnZXMg
PSBuZXcgSGFzaFNldDxQYWdlKj47CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDI2MTAzKQorKysgV2ViQ29yZS9w
YWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgZ29CYWNrKCk7CiAgICAgICAgIGJvb2wgZ29Gb3J3YXJkKCk7
CiAgICAgICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKwor
ICAgICAgICB2b2lkIHNldFNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZUZhY3RvcikgeyBtX3NjYWxl
RmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KKyAgICAgICAgZG91YmxlIHNjYWxlRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRH
cm91cE5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIFN0cmluZyBncm91cE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2dyb3VwTmFtZTsgfQpAQCAtMTM4LDkgKzE0MSwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogCiAgICAgICAgIGJvb2wg
bV9pbkxvd1F1YWxpdHlJbnRlcnBvbGF0aW9uTW9kZTsKLSAgICAKKwogICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyKiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXI7CiAKKyAgICAgICAgZG91
YmxlIG1fc2NhbGVGYWN0b3I7CisKICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIHN0YXRpYyBI
SU5TVEFOQ0Ugc19pbnN0YW5jZUhhbmRsZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtTW91c2VFdmVudC5oCShyZXZpc2lvbiAyNjEwMykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1Nb3VzZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJu
IG1fYWx0S2V5OyB9CiAgICAgICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YUtleTsgfQogICAgICAgICB1bnNpZ25lZCBtb2RpZmllckZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RpZmllckZsYWdzOyB9Ci0gICAgICAgIAorCisgICAgICAgIHZvaWQgc2NhbGUoZG91Ymxl
IHNjYWxlRmFjdG9yKSB7IG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1f
cG9zaXRpb24ueCgpIC8gc2NhbGVGYWN0b3IpLCAKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KG1fcG9zaXRpb24ueSgpIC8gc2NhbGVGYWN0b3IpKTsgfQorCiAgICAgICAgIC8vdGlt
ZSBpbiBzZWNvbmRzCiAgICAgICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBt
X3RpbWVzdGFtcDsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJ
KHJldmlzaW9uIDI2MTAzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGZsb2F0IGNvbnRpbnVvdXNEZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVv
dXNEZWx0YVg7IH0KICAgICAgICAgZmxvYXQgY29udGludW91c0RlbHRhWSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGludW91c0RlbHRhWTsgfQogCisgICAgICAgIHZvaWQgc2NhbGUoZG91YmxlIHNj
YWxlRmFjdG9yKSB7IG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1fcG9z
aXRpb24ueCgpIC8gc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4obV9wb3NpdGlvbi55KCkgLyBzY2FsZUZhY3RvcikpOyB9CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCopOwogI2VuZGlmCkBAIC05NiwxNCAr
OTgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBv
c2l0aW9uOwogICAgICAgICBmbG9hdCBtX2RlbHRhWDsKICAgICAgICAgZmxvYXQgbV9kZWx0YVk7
CisgICAgICAgIGZsb2F0IG1fY29udGludW91c0RlbHRhWDsKKyAgICAgICAgZmxvYXQgbV9jb250
aW51b3VzRGVsdGFZOworICAgICAgICBib29sIG1faXNDb250aW51b3VzOwogICAgICAgICBib29s
IG1faXNBY2NlcHRlZDsKICAgICAgICAgYm9vbCBtX3NoaWZ0S2V5OwogICAgICAgICBib29sIG1f
Y3RybEtleTsKICAgICAgICAgYm9vbCBtX2FsdEtleTsKICAgICAgICAgYm9vbCBtX21ldGFLZXk7
Ci0gICAgICAgIGJvb2wgbV9pc0NvbnRpbnVvdXM7Ci0gICAgICAgIGZsb2F0IG1fY29udGludW91
c0RlbHRhWDsKLSAgICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVsdGFZOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjYxMDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEdka0V4cG9zZUV2ZW50KEdk
a0V2ZW50RXhwb3NlKik7CiAgICAgICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0
OwogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZlbnQoKSBjb25zdDsKLSAgICAg
ICAgSW50UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICAg
ICAgSW50UmVjdCB0cmFuc2Zvcm1SZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKICNlbmRpZgog
CiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjEwMykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwKGNvbnN0IEludFJlY3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3Ig
PSBtX2RhdGEtPmNyOwotICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgZG91YmxlIHggPSBzdGF0aWNf
Y2FzdDxkb3VibGU+KHJlY3QueCgpKTsKKyAgICBkb3VibGUgeSA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4ocmVjdC55KCkpOworCisgICAgLy8gV2Ugd2FudCB0aGUgbWluaW11bSBpbnRlZ2VyIG51bWJl
ciBvZiBzY2FsZWQgcGl4ZWxzIHdoaWNoIGNvdmVycworICAgIC8vIHRoZSB3aG9sZSBhcmVhLCBz
byBpbmNyZWFzZSBieSAxCisgICAgZG91YmxlIHdpZHRoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihy
ZWN0LndpZHRoKCkpICsgMTsKKyAgICBkb3VibGUgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihyZWN0LmhlaWdodCgpKSArIDE7CisKKyAgICBjYWlyb191c2VyX3RvX2RldmljZShjciwgJngs
ICZ5KTsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZV9kaXN0YW5jZShjciwgJndpZHRoLCAmaGVp
Z2h0KTsKKworICAgIHggPSByb3VuZCh4KTsKKyAgICB5ID0gcm91bmQoeSk7CisgICAgd2lkdGgg
PSByb3VuZCh3aWR0aCk7CisgICAgaGVpZ2h0ID0gcm91bmQoaGVpZ2h0KTsKKworICAgIGNhaXJv
X2RldmljZV90b191c2VyKGNyLCAmeCwgJnkpOworICAgIGNhaXJvX2RldmljZV90b191c2VyX2Rp
c3RhbmNlKGNyLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19jbGlwKGNyKTsKIH0KIApAQCAtODE5LDE2
ICs4MzksMjMgQEAgR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRHJhd2FibAogICAg
IHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7CiB9CiAKLUludFBv
aW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zZm9ybVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjYWlyb19tYXRyaXhfdCB0bTsKICAgICBjYWlyb19n
ZXRfbWF0cml4KG1fZGF0YS0+Y3IsICZ0bSk7Ci0gICAgZG91YmxlIHggPSBwb2ludC54KCk7Ci0g
ICAgZG91YmxlIHkgPSBwb2ludC55KCk7CisKKworICAgIGRvdWJsZSB4ID0gcmVjdC54KCk7Cisg
ICAgZG91YmxlIHkgPSByZWN0LnkoKTsKKyAgICBkb3VibGUgd2lkdGggPSByZWN0LndpZHRoKCk7
CisgICAgZG91YmxlIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CiAKICAgICBjYWlyb19tYXRyaXhf
dHJhbnNmb3JtX3BvaW50KCZ0bSwgJngsICZ5KTsKLSAgICByZXR1cm4gSW50UG9pbnQoeCwgeSk7
CisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0YW5jZSgmdG0sICZ3aWR0aCwmIGhlaWdo
dCk7CisKKyAgICByZXR1cm4gSW50UmVjdChzdGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KHkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWln
aHQpKTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24g
MjYxMDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRlIGF0IGh0
dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0
bWwKICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9m
b3Jfc3VyZmFjZShpbWFnZSk7CiAKLSAgICAvLyBUbyBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGll
bnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZQotICAgIC8vIENBSVJPX0ZJTFRFUl9ORUFSRVNUIG5v
dywgYnV0IHRoZSByZWFsIGZpeCB3aWxsIGJlIHRvIGhhdmUKLSAgICAvLyBDQUlST19FWFRFTkRf
UEFEIGltcGxlbWVudGVkIGZvciBzdXJmYWNlcyBpbiBDYWlybyBhbGxvd2luZyB1cyB0byBzdGls
bAotICAgIC8vIHVzZSBiaWxpbmVhciBmaWx0ZXJpbmcKKyAgICAvLyBUbyBhdm9pZCB0aGUgdW53
YW50ZWQgZ3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZSBDQUlST19FWFRFTkRfUkVQRUFU
CisgICAgLy8gZm9yIG5vdyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSdkIGxpa2UgdG8gdXNlIENBSVJP
X0VYVEVORF9QQUQgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGUKKyAgICAvLyBpbiBjYWlybyB5ZXQu
IFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gdXNlIENBSVJPX0ZJTFRFUl9CRVNUIGluc3RlYWQgb2Yg
Q0FJUk9fRklMVEVSX05FQVJFU1QKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVy
biwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CiAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBh
dHRlcm4sIENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKIAogICAgIGZsb2F0IHNjYWxlWCA9IHNyY1Jl
Y3Qud2lkdGgoKSAvIGRzdFJlY3Qud2lkdGgoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCShyZXZpc2lvbiAyNjEwMykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsNiArMTA0LDExIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QK
ICAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZShmb250TWF0cml4LCBtX2ZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSwgbV9mb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwogICAg
IGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwogICAgIG9wdGlvbnMgPSBjYWlyb19m
b250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCB3b3JrIG91dCBo
b3cgdG8gZ2V0IHRoZSB0cnVlIChoaW50ZWQpIGV4dGVudHMgZnJvbSBjYWlybyBpbnN0ZWFkIG9m
CisgICAgLy8gZGlzYWJsaW5nIGhpbnRpbmcuIFNlZSBodHRwOi8vbGlzdHMuY2Fpcm9ncmFwaGlj
cy5vcmcvYXJjaGl2ZXMvY2Fpcm8vMjAwNy1TZXB0ZW1iZXIvMDExMzY2Lmh0bWwKKyAgICBjYWly
b19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9O
T05FKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlS
T19BTlRJQUxJQVNfU1VCUElYRUwpOworCiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVk
X2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCBmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKICAgICBj
YWlyb19mb250X2ZhY2VfZGVzdHJveShmb250RmFjZSk7CiAgICAgY2Fpcm9fZm9udF9vcHRpb25z
X2Rlc3Ryb3kob3B0aW9ucyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNj
cm9sbEJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZv
cm1TY3JvbGxCYXJHdGsuY3BwCShyZXZpc2lvbiAyNjEwMykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgog
I2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEyMSw4ICsx
MjIsMTIgQEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKAogICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICAKKyAgICBkb3VibGUg
c2NhbGVGYWN0b3IgPSBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKS0+c2NhbGVGYWN0b3IoKTsK
KwogICAgIEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1Rv
V2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUo
KSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2lu
ZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9Owor
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dS
ZWN0LngoKSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LnkoKSAq
IHNjYWxlRmFjdG9yKSwgCisgICAgICAgIHN0YXRpY19jYXN0PGludD4od2luZG93UmVjdC53aWR0
aCgpICogc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QuaGVpZ2h0KCkg
KiBzY2FsZUZhY3RvcikgfTsKICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0
KCksICZhbGxvY2F0aW9uKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmNwcAkocmV2aXNpb24gMjYxMDMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MiwxMSArMTgyLDExIEBAIGJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGUKIHsKICAgICAvLyBGSVhNRTogaXMg
aXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0a1dpZGdldCogY2hlY2tib3ggPSBndGtD
aGVja2JveCgpOwotICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQo
cmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSBpLmNvbnRleHQtPnRy
YW5zZm9ybVJlY3QocmVjdCk7CiAgICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwg
aS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVT
dGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBj
aGVja2JveCwgImNoZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9z
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c2NhbGVkUmVjdC54KCksIHNjYWxlZFJlY3QueSgpLCBzY2FsZWRSZWN0LndpZHRoKCksIHNjYWxl
ZFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjE1LDI0ICsyMTUs
MjQgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYgogeyAKICAgICAv
LyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0a1dpZGdldCogcmFk
aW8gPSBndGtSYWRpb0J1dHRvbigpOwotICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJh
bnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSBp
LmNvbnRleHQtPnRyYW5zZm9ybVJlY3QocmVjdCk7CiAgICAgZ3RrX3BhaW50X29wdGlvbihyYWRp
by0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAgICAgICAg
IGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLCByYWRpbywgInJhZGlvYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgIHBv
cy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICAgICAgICAgICBzY2FsZWRSZWN0LngoKSwgc2NhbGVkUmVjdC55KCksIHNjYWxlZFJlY3Qud2lk
dGgoKSwgc2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIAoteyAKK3sKICAg
ICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBo
b25vciB0aGUgc3RhdGUgYXMgd2VsbAogICAgIEd0a1dpZGdldCogYnV0dG9uID0gZ3RrQnV0dG9u
KCk7Ci0gICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0Lmxv
Y2F0aW9uKCkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNmb3Jt
UmVjdChyZWN0KTsKICAgICBndGtfcGFpbnRfYm94KGJ1dHRvbi0+c3R5bGUsIGkuY29udGV4dC0+
Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRl
cm1pbmVTaGFkb3cobyksCiAgICAgICAgICAgICAgICAgICBOVUxMLCBidXR0b24sICJidXR0b24i
LAotICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgIHNjYWxlZFJlY3QueCgpLCBzY2FsZWRSZWN0
LnkoKSwgc2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTI0NSwxMiArMjQ1LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50VGV4dEZpZWxkKFJlbmQKIHsKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1h
d2FyZSBkcmF3aW5nCiAgICAgR3RrV2lkZ2V0KiBlbnRyeSA9IGd0a0VudHJ5KCk7Ci0gICAgSW50
UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOwor
ICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNmb3JtUmVjdChyZWN0KTsK
IAogICAgIGd0a19wYWludF9zaGFkb3coZW50cnktPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdh
YmxlKCksCiAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5l
U2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICAgMCwgZW50cnksICJlbnRyeSIsCi0gICAg
ICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgc2NhbGVkUmVjdC54KCksIHNjYWxlZFJlY3Qu
eSgpLCBzY2FsZWRSZWN0LndpZHRoKCksIHNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAJ
KHJldmlzaW9uIDI2MTAzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEwIEBACiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAKKworI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIK
KyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCisKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAj
aW5jbHVkZSA8Z3RrL2d0ay5oPgogCkBAIC0xMjgsOCArMTMyLDE3IEBAIHZvaWQgU2Nyb2xsVmll
d1Njcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2UKICAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVW
aWV3KCkpOwogCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPihwYXJlbnQoKSk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3I7CisKKyAgICBpZiAoZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3
LT5mcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisgICAgZWxzZQorICAgICAgICBzY2Fs
ZUZhY3RvciA9IDEuMDsKKwogICAgIEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVW
aWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigp
KSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwg
d2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsg
c3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LngoKSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nh
c3Q8aW50Pih3aW5kb3dSZWN0LnkoKSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8aW50Pih3aW5kb3dSZWN0LndpZHRoKCkgKiBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGlu
dD4od2luZG93UmVjdC5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9OwogICAgIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogfQogCkBAIC0yODcsMTcg
KzMwMCwzMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldEd0a0FkanVzdG1lbnRzKEd0a0FkCiAKIHZv
aWQgU2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
Ym9vbCBub3cpCiB7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKICAgICBpZiAo
dXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVChpc0Zy
YW1lVmlldygpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4odGhpcyk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3I7CisKKyAgICBpZiAoZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3
LT5mcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisgICAgZWxzZQorICAgICAgICBzY2Fs
ZUZhY3RvciA9IDEuMDsKKwogICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gY29udGVudHNUb1dp
bmRvdyh1cGRhdGVSZWN0LmxvY2F0aW9uKCkpOwogICAgIEludFJlY3QgY29udGFpbmluZ1dpbmRv
d1JlY3QgPSB1cGRhdGVSZWN0OwogICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LnNldExvY2F0aW9u
KHdpbmRvd1BvaW50KTsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5zY2FsZShzY2FsZUZhY3Rv
cik7CiAKICAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29udGFpbmluZ1dpbmRvd1JlY3QueCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC55KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LndpZHRoKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LmhlaWdodCgpIH07
CisKICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygp
KS0+d2luZG93OwogCiAgICAgaWYgKHdpbmRvdykKQEAgLTMxMyw4ICszNDEsMjAgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbgogdm9pZCBTY3JvbGxWaWV3Ojp1cGRh
dGUoKQogewogICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOworICAgIEFTU0VSVChpc0Zy
YW1lVmlldygpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4odGhpcyk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3I7CisKKyAgICBpZiAoZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3
LT5mcmFtZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisgICAgZWxzZQorICAgICAgICBzY2Fs
ZUZhY3RvciA9IDEuMDsKKworICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyBzdGF0aWNfY2FzdDxp
bnQ+KGZyYW1lR2VvbWV0cnkoKS54KCkgKiBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4o
ZnJhbWVHZW9tZXRyeSgpLnkoKSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtX2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpICogc2NhbGVGYWN0b3IpLCAgc3RhdGlj
X2Nhc3Q8aW50PihtX2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9
OwogCi0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IDAsIDAsIG1fZGF0YS0+Y29udGVudHNTaXpl
LndpZHRoKCksIG1fZGF0YS0+Y29udGVudHNTaXplLmhlaWdodCgpIH07CiAgICAgZ2RrX3dpbmRv
d19pbnZhbGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3cs
ICZyZWN0LCB0cnVlKTsKIH0KIApAQCAtNjk2LDE2ICs3MzYsMzcgQEAgdm9pZCBTY3JvbGxWaWV3
OjpwYWludChHcmFwaGljc0NvbnRleHQqIAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMg
aGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGZvcmsgRnJhbWVWaWV3LmgvLmNwcC4KICAgICAvLyBJ
biB0aGUgZW5kLCBGcmFtZVZpZXcgc2hvdWxkIGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3Lgor
CiAgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwogCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKKworICAgIGRvdWJsZSBzY2FsZUZhY3Rv
cjsKKworICAgIGlmIChmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSkKKyAgICAgICAgc2NhbGVG
YWN0b3IgPSBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKS0+c2NhbGVGYWN0b3IoKTsKKyAgICBl
bHNlCisgICAgICAgIHNjYWxlRmFjdG9yID0gMS4wOworCiAgICAgaWYgKGNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBkb2N1bWVudERp
cnR5UmVjdCA9IHJlY3Q7CisKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICBkb2N1bWVudERp
cnR5UmVjdC5zY2FsZSgxIC8gc2NhbGVGYWN0b3IpOworCiAgICAgZG9jdW1lbnREaXJ0eVJlY3Qu
aW50ZXJzZWN0KGZyYW1lR2VvbWV0cnkoKSk7CiAKKyAgICAvLyBQYWludCBhbiBleHRyYSAyIHBp
eGVscyBhcm91bmQgdG8gYWNjb21tb2RhdGUgYXJ0aWZhY3RzIGFuZCByb3VuZGluZyBlcnJvcnMg
aW4gdGhlIHNjYWxpbmcKKyAgICBkb2N1bWVudERpcnR5UmVjdC5pbmZsYXRlKDIpOworCiAgICAg
Y29udGV4dC0+c2F2ZSgpOwogCisgICAgLy8gT25seSBzY2FsZSB0aGUgcm9vdCBTY3JvbGxWaWV3
CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNj
YWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOworCiAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwg
eSgpKTsKICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOwogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCShyZXZpc2lvbiAyNjEwMykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDcg
KzMwMCw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXIKICAgICBz
ZXRDb250ZW50c1BvcyhyZWN0LngoKSwgcmVjdC55KCkpOwogfQogCi0KIFBsYXRmb3JtU2Nyb2xs
YmFyKiBTY3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgbW91c2VFdmVudCkgCiB7CiAgICAgLy8gQUZBSUNUIHRoaXMgaXMgb25seSB1c2VkIGZv
ciBwbGF0Zm9ybXMgdGhhdCBwcm92aWRlIApJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
cGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJ
KHJldmlzaW9uIDI2MTAzKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsMTIgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9w
YWdlX3Njcm9sbF9ldmVudAogc3RhdGljIHZvaWQgd2Via2l0X3BhZ2Vfc2l6ZV9hbGxvY2F0ZShH
dGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKIHsKICAgICBHVEtf
V0lER0VUX0NMQVNTKHdlYmtpdF9wYWdlX3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUod2lk
Z2V0LGFsbG9jYXRpb24pOworICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJ
VF9QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9QQUdFKHdpZGdldCkpOworCisgICAgLy8gV2UgY2Fj
aGUgdGhlIHVuc2NhbGVkIHdpZHRoL2hlaWdodCBhcyByZWNhbGN1bGF0aW5nIHRoZW0gdXNpbmcg
dGhlIHNjYWxlRmFjdG9yIGxlYWRzIHRvCisgICAgLy8gcm91bmRpbmcgZXJyb3JzCisgICAgcGFn
ZURhdGEtPndpZHRoID0gYWxsb2NhdGlvbi0+d2lkdGg7CisgICAgcGFnZURhdGEtPmhlaWdodCA9
IGFsbG9jYXRpb24tPmhlaWdodDsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVG
cm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQpKSk7CiAgICAgZnJhbWUtPnZpZXcoKS0+cmVzaXpl
KGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOwpAQCAtNTQyLDQgKzU0OCwz
MCBAQCB2b2lkIHdlYmtpdF9wYWdlX2V4ZWN1dGVfc2NyaXB0KFdlYktpdFBhCiAgICAgaWYgKEZy
YW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKSkKICAgICAgICAg
bG9hZGVyLT5leGVjdXRlU2NyaXB0KFN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSwgdHJ1ZSk7CiB9
CisKK3ZvaWQgd2Via2l0X3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvcihXZWJLaXRQYWdlKiBwYWdlLCBk
b3VibGUgZmFjdG9yKQoreworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFn
ZShwYWdlKSk7CisKKyAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfUEFH
RV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9
IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKKworICAgIHBh
Z2VEYXRhLT5wYWdlLT5zZXRTY2FsZUZhY3RvcihmYWN0b3IpOworCisgICAgZnJhbWUtPnZpZXco
KS0+cmVzaXplKHBhZ2VEYXRhLT53aWR0aCwgcGFnZURhdGEtPmhlaWdodCk7CisgICAgZnJhbWUt
PmZvcmNlTGF5b3V0KCk7CisgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKKyAg
ICBmcmFtZS0+c2VuZFJlc2l6ZUV2ZW50KCk7Cit9CisKK2RvdWJsZSB3ZWJraXRfcGFnZV9nZXRf
c2NhbGVfZmFjdG9yKFdlYktpdFBhZ2UqIHBhZ2UpCit7CisgICAgLy9XZWJLaXRQYWdlUHJpdmF0
ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisgICAgLy9X
ZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9HVEtfRlJBTUVfR0VUX1BSSVZB
VEUocGFnZURhdGEtPm1haW5GcmFtZSk7CisKKyAgICAvL0ZyYW1lVmlldyogZnJhbWVWaWV3ID0g
ZnJhbWVEYXRhLT5mcmFtZS0+dmlldygpOworICAgIC8vCisgICAgcmV0dXJuIGNvcmUocGFnZSkt
PnNjYWxlRmFjdG9yKCk7Cit9CisKIH0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJKHJldmlz
aW9uIDI2MTAzKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsNiArMTQ4LDEyIEBAIFdFQktJVF9BUEkgV2ViS2l0RnJhbWUqCiB3ZWJraXRf
cGFnZV9nZXRfbWFpbl9mcmFtZSAoV2ViS2l0UGFnZSogcGFnZSk7CiAKIFdFQktJVF9BUEkgdm9p
ZAord2Via2l0X3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0UGFnZSogcGFnZSwgZG91Ymxl
IGZhY3Rvcik7CisKK1dFQktJVF9BUEkgZG91YmxlCit3ZWJraXRfcGFnZV9nZXRfc2NhbGVfZmFj
dG9yIChXZWJLaXRQYWdlKiBwYWdlKTsKKworV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfcGFnZV9l
eGVjdXRlX3NjcmlwdChXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogc2NyaXB0KTsKIEdf
RU5EX0RFQ0xTCiAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJldmlzaW9uIDI2
MTAzKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw2ICs2OSw4IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpTdHJpbmcg
YXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVz
ZXJBZ2VudDsKIAorICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKKwogICAgICAgICBIYXNoU2V0
PEd0a1dpZGdldCo+IGNoaWxkcmVuOwogICAgIH07CiAgICAgCg==
</data>
<flag name="review"
          id="6998"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16790</attachid>
            <date>2007-10-22 03:42:28 -0700</date>
            <delta_ts>2008-03-18 19:32:07 -0700</delta_ts>
            <desc>Code cleanup</desc>
            <filename>zooming-20071022.patch</filename>
            <type>text/plain</type>
            <size>22603</size>
            <attacher name="George Wright">gwright</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyNjg2NikKKysrIFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDQsNiArODA0LDggQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAogICAgIGlmICghbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY29uc3RfY2FzdDxQbGF0
Zm9ybU1vdXNlRXZlbnQmPihtb3VzZUV2ZW50KS5zY2FsZShzY2FsZUZhY3RvcigpKTsKKwogICAg
IFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLT52aWV3KCkpOwogCiAgICAgbV9t
b3VzZVByZXNzZWQgPSB0cnVlOwpAQCAtOTE2LDYgKzkxOCw4IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZURvdWJsZUNsaWMKIAogYm9vbCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKKyAgICBjb25zdF9jYXN0PFBsYXRm
b3JtTW91c2VFdmVudCY+KGV2ZW50KS5zY2FsZShzY2FsZUZhY3RvcigpKTsKKwogICAgIEhpdFRl
c3RSZXN1bHQgaG92ZXJlZE5vZGUgPSBIaXRUZXN0UmVzdWx0KEludFBvaW50KCkpOwogICAgIGJv
b2wgcmVzdWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQsICZob3ZlcmVkTm9kZSk7CiAK
QEAgLTEwMjksNiArMTAzMyw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVh
c2VFdmUKICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIGNvbnN0X2Nhc3Q8UGxhdGZvcm1Nb3VzZUV2ZW50Jj4obW91c2VFdmVudCkuc2Nh
bGUoc2NhbGVGYWN0b3IoKSk7CisKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9m
cmFtZS0+dmlldygpKTsKIAogICAgIG1fbW91c2VQcmVzc2VkID0gZmFsc2U7CkBAIC0xNzYwLDQg
KzE3NjYsMTEgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRUYWJFdmVudEhhbmRsZQogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAorZG91YmxlIEV2ZW50SGFuZGxl
cjo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCisgICAg
ICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gMS4wOworfQogfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMjY4
NjYpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Niw2ICsxNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvY3VzRG9jdW1lbnRWaWV3KCk7CiAK
KyAgICBkb3VibGUgc2NhbGVGYWN0b3IoKSBjb25zdDsKICNpZiBQTEFURk9STShNQUMpCiAgICAg
UGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50PiBjdXJyZW50S2V5Ym9hcmRFdmVudCgpIGNvbnN0Owog
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMjY4NjYpCisrKyBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhU
TUxGcmFtZVNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJP
dmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQu
aCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKQEAgLTk3Miw2ICs5NzMsMTMgQEAgdm9pZCBGcmFtZVZpZXc6OnNldFdhc1Njcm9sbGVkQnlV
c2VyKGJvbwogICAgIGQtPm1fd2FzU2Nyb2xsZWRCeVVzZXIgPSB3YXNTY3JvbGxlZEJ5VXNlcjsK
IH0KIAordm9pZCBGcmFtZVZpZXc6OnJlc2l6ZShpbnQgdywgaW50IGgpCit7CisgICAgZG91Ymxl
IHNjYWxlRmFjdG9yID0gZnJhbWUoKS0+cGFnZSgpLT5zY2FsZUZhY3RvcigpOworCisgICAgV2lk
Z2V0OjpyZXNpemUoc3RhdGljX2Nhc3Q8aW50Pih3IC8gc2NhbGVGYWN0b3IpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGggLyBzY2FsZUZhY3RvcikpOworfQorCiAjaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFU
Rk9STShHVEspCiB2b2lkIEZyYW1lVmlldzo6bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKQogewpJ
bmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMjY4NjYpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRXaWRnZXRUb1VwZGF0ZShSZW5kZXJQYXJ0T2JqZWN0Kik7CiAgICAgdm9pZCByZW1vdmVXaWRn
ZXRUb1VwZGF0ZShSZW5kZXJQYXJ0T2JqZWN0Kik7CiAKKyAgICB2b2lkIHJlc2l6ZShpbnQsIGlu
dCk7CisKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYnkgYWxsIHBs
YXRmb3JtcywgYnV0IGN1cnJlbnRseSBkZXBlbmRzIG9uIFNjcm9sbFZpZXc6OmNoaWxkcmVuLAog
ICAgIC8vIHdoaWNoIG5vdCBhbGwgbWV0aG9kcyBoYXZlLiBPbmNlIEZyYW1lVmlldyBhbmQgU2Ny
b2xsVmlldyBhcmUgbWVyZ2VkLCB0aGlzICNpZiBzaG91bGQgYmUgcmVtb3ZlZC4KICNpZiBQTEFU
Rk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDI2ODY2KQorKysg
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIFBh
Z2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIEMKICAgICAsIG1fZGVmZXJzTG9h
ZGluZyhmYWxzZSkKICAgICAsIG1faW5Mb3dRdWFsaXR5SW50ZXJwb2xhdGlvbk1vZGUoZmFsc2Up
CiAgICAgLCBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoMCkKKyAgICAsIG1fc2NhbGVGYWN0
b3IoMS4wKQogewogICAgIGlmICghYWxsUGFnZXMpIHsKICAgICAgICAgYWxsUGFnZXMgPSBuZXcg
SGFzaFNldDxQYWdlKj47CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDI2ODY2KQorKysgV2ViQ29yZS9wYWdlL1Bh
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgZ29CYWNrKCk7CiAgICAgICAgIGJvb2wgZ29Gb3J3YXJkKCk7CiAgICAg
ICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKworICAgICAg
ICB2b2lkIHNldFNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZUZhY3RvcikgeyBtX3NjYWxlRmFjdG9y
ID0gc2NhbGVGYWN0b3I7IH0KKyAgICAgICAgZG91YmxlIHNjYWxlRmFjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRHcm91cE5h
bWUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIFN0cmluZyBncm91cE5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2dyb3VwTmFtZTsgfQpAQCAtMTM4LDkgKzE0MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogCiAgICAgICAgIGJvb2wgbV9pbkxv
d1F1YWxpdHlJbnRlcnBvbGF0aW9uTW9kZTsKLSAgICAKKwogICAgICAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXI7CiAKKyAgICAgICAgZG91YmxlIG1f
c2NhbGVGYWN0b3I7CisKICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIHN0YXRpYyBISU5TVEFO
Q0Ugc19pbnN0YW5jZUhhbmRsZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybU1vdXNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
TW91c2VFdmVudC5oCShyZXZpc2lvbiAyNjg2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1Nb3VzZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0
S2V5OyB9CiAgICAgICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YUtleTsg
fQogICAgICAgICB1bnNpZ25lZCBtb2RpZmllckZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rp
ZmllckZsYWdzOyB9Ci0gICAgICAgIAorCisgICAgICAgIHZvaWQgc2NhbGUoZG91YmxlIHNjYWxl
RmFjdG9yKSB7IG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRp
b24ueCgpIC8gc2NhbGVGYWN0b3IpLCAKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG1fcG9zaXRpb24ueSgpIC8gc2NhbGVGYWN0b3IpKTsgfQorCiAgICAgICAgIC8vdGltZSBpbiBz
ZWNvbmRzCiAgICAgICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVz
dGFtcDsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHJldmlz
aW9uIDI2ODY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGZsb2F0IGNvbnRpbnVvdXNEZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVvdXNEZWx0
YVg7IH0KICAgICAgICAgZmxvYXQgY29udGludW91c0RlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGludW91c0RlbHRhWTsgfQogCisgICAgICAgIHZvaWQgc2NhbGUoZG91YmxlIHNjYWxlRmFj
dG9yKSB7IG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24u
eCgpIC8gc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obV9w
b3NpdGlvbi55KCkgLyBzY2FsZUZhY3RvcikpOyB9CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCopOwogI2VuZGlmCkBAIC05NiwxNCArOTgsMTQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9u
OwogICAgICAgICBmbG9hdCBtX2RlbHRhWDsKICAgICAgICAgZmxvYXQgbV9kZWx0YVk7CisgICAg
ICAgIGZsb2F0IG1fY29udGludW91c0RlbHRhWDsKKyAgICAgICAgZmxvYXQgbV9jb250aW51b3Vz
RGVsdGFZOworICAgICAgICBib29sIG1faXNDb250aW51b3VzOwogICAgICAgICBib29sIG1faXNB
Y2NlcHRlZDsKICAgICAgICAgYm9vbCBtX3NoaWZ0S2V5OwogICAgICAgICBib29sIG1fY3RybEtl
eTsKICAgICAgICAgYm9vbCBtX2FsdEtleTsKICAgICAgICAgYm9vbCBtX21ldGFLZXk7Ci0gICAg
ICAgIGJvb2wgbV9pc0NvbnRpbnVvdXM7Ci0gICAgICAgIGZsb2F0IG1fY29udGludW91c0RlbHRh
WDsKLSAgICAgICAgZmxvYXQgbV9jb250aW51b3VzRGVsdGFZOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAkocmV2aXNpb24gMjY4NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEdka0V4cG9zZUV2ZW50KEdka0V2ZW50
RXhwb3NlKik7CiAgICAgICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0OwogICAg
ICAgICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZlbnQoKSBjb25zdDsKLSAgICAgICAgSW50
UG9pbnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgSW50
UmVjdCB0cmFuc2Zvcm1SZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKICNlbmRpZgogCiAgICAg
cHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjg2NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDgsNyArNDA4LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
KGNvbnN0IEludFJlY3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2Rh
dGEtPmNyOwotICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgZG91YmxlIHggPSBzdGF0aWNfY2FzdDxk
b3VibGU+KHJlY3QueCgpKTsKKyAgICBkb3VibGUgeSA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocmVj
dC55KCkpOworCisgICAgLy8gV2Ugd2FudCB0aGUgbWluaW11bSBpbnRlZ2VyIG51bWJlciBvZiBz
Y2FsZWQgcGl4ZWxzIHdoaWNoIGNvdmVycworICAgIC8vIHRoZSB3aG9sZSBhcmVhLCBzbyBpbmNy
ZWFzZSBieSAxCisgICAgZG91YmxlIHdpZHRoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0Lndp
ZHRoKCkpICsgMTsKKyAgICBkb3VibGUgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWN0
LmhlaWdodCgpKSArIDE7CisKKyAgICBjYWlyb191c2VyX3RvX2RldmljZShjciwgJngsICZ5KTsK
KyAgICBjYWlyb191c2VyX3RvX2RldmljZV9kaXN0YW5jZShjciwgJndpZHRoLCAmaGVpZ2h0KTsK
KworICAgIHggPSByb3VuZCh4KTsKKyAgICB5ID0gcm91bmQoeSk7CisgICAgd2lkdGggPSByb3Vu
ZCh3aWR0aCk7CisgICAgaGVpZ2h0ID0gcm91bmQoaGVpZ2h0KTsKKworICAgIGNhaXJvX2Rldmlj
ZV90b191c2VyKGNyLCAmeCwgJnkpOworICAgIGNhaXJvX2RldmljZV90b191c2VyX2Rpc3RhbmNl
KGNyLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19jbGlwKGNyKTsKIH0KIApAQCAtODQwLDE2ICs4NjAs
MjMgQEAgR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRHJhd2FibAogICAgIHJldHVy
biBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7CiB9CiAKLUludFBvaW50IEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dAorSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zZm9ybVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKIHsKICAgICBjYWlyb19tYXRyaXhfdCB0bTsKICAgICBjYWlyb19nZXRfbWF0
cml4KG1fZGF0YS0+Y3IsICZ0bSk7Ci0gICAgZG91YmxlIHggPSBwb2ludC54KCk7Ci0gICAgZG91
YmxlIHkgPSBwb2ludC55KCk7CisKKworICAgIGRvdWJsZSB4ID0gcmVjdC54KCk7CisgICAgZG91
YmxlIHkgPSByZWN0LnkoKTsKKyAgICBkb3VibGUgd2lkdGggPSByZWN0LndpZHRoKCk7CisgICAg
ZG91YmxlIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CiAKICAgICBjYWlyb19tYXRyaXhfdHJhbnNm
b3JtX3BvaW50KCZ0bSwgJngsICZ5KTsKLSAgICByZXR1cm4gSW50UG9pbnQoeCwgeSk7CisgICAg
Y2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0YW5jZSgmdG0sICZ3aWR0aCwmIGhlaWdodCk7CisK
KyAgICByZXR1cm4gSW50UmVjdChzdGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+
KHkpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsK
IH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gMjY4NjYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIAogICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRlIGF0IGh0dHA6Ly93
d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKICAg
ICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3Vy
ZmFjZShpbWFnZSk7CiAKLSAgICAvLyBUbyBhdm9pZCB0aGUgdW53YW50ZWQgZ3JhZGllbnQgZWZm
ZWN0ICgjMTQwMTcpIHdlIHVzZQotICAgIC8vIENBSVJPX0ZJTFRFUl9ORUFSRVNUIG5vdywgYnV0
IHRoZSByZWFsIGZpeCB3aWxsIGJlIHRvIGhhdmUKLSAgICAvLyBDQUlST19FWFRFTkRfUEFEIGlt
cGxlbWVudGVkIGZvciBzdXJmYWNlcyBpbiBDYWlybyBhbGxvd2luZyB1cyB0byBzdGlsbAotICAg
IC8vIHVzZSBiaWxpbmVhciBmaWx0ZXJpbmcKKyAgICAvLyBUbyBhdm9pZCB0aGUgdW53YW50ZWQg
Z3JhZGllbnQgZWZmZWN0ICgjMTQwMTcpIHdlIHVzZSBDQUlST19FWFRFTkRfUkVQRUFUCisgICAg
Ly8gZm9yIG5vdyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSdkIGxpa2UgdG8gdXNlIENBSVJPX0VYVEVO
RF9QQUQgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGUKKyAgICAvLyBpbiBjYWlybyB5ZXQuIFRoaXMg
aXMgc28gdGhhdCB3ZSBjYW4gdXNlIENBSVJPX0ZJTFRFUl9CRVNUIGluc3RlYWQgb2YgQ0FJUk9f
RklMVEVSX05FQVJFU1QKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJ
Uk9fRVhURU5EX1JFUEVBVCk7CiAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKHBhdHRlcm4s
IENBSVJPX0ZJTFRFUl9ORUFSRVNUKTsKIAogICAgIGZsb2F0IHNjYWxlWCA9IHNyY1JlY3Qud2lk
dGgoKSAvIGRzdFJlY3Qud2lkdGgoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZvbnRQ
bGF0Zm9ybURhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0Zv
bnRQbGF0Zm9ybURhdGFHdGsuY3BwCShyZXZpc2lvbiAyNjg2NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiAr
MTAzLDExIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QKICAgICBj
YWlyb19tYXRyaXhfaW5pdF9zY2FsZShmb250TWF0cml4LCBtX2ZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFNpemUoKSwgbV9mb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwogICAgIGNhaXJv
X21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwogICAgIG9wdGlvbnMgPSBjYWlyb19mb250X29w
dGlvbnNfY3JlYXRlKCk7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCB3b3JrIG91dCBob3cgdG8g
Z2V0IHRoZSB0cnVlIChoaW50ZWQpIGV4dGVudHMgZnJvbSBjYWlybyBpbnN0ZWFkIG9mCisgICAg
Ly8gZGlzYWJsaW5nIGhpbnRpbmcuIFNlZSBodHRwOi8vbGlzdHMuY2Fpcm9ncmFwaGljcy5vcmcv
YXJjaGl2ZXMvY2Fpcm8vMjAwNy1TZXB0ZW1iZXIvMDExMzY2Lmh0bWwKKyAgICBjYWlyb19mb250
X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsK
KyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJ
QUxJQVNfU1VCUElYRUwpOworCiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRf
Y3JlYXRlKGZvbnRGYWNlLCBmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKICAgICBjYWlyb19m
b250X2ZhY2VfZGVzdHJveShmb250RmFjZSk7CiAgICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ry
b3kob3B0aW9ucyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJh
ckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3Jv
bGxCYXJHdGsuY3BwCShyZXZpc2lvbiAyNjg2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1
ZGUgPGNhaXJvL2NhaXJvLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEyMSw4ICsxMjIsMTIg
QEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKAogICAgIEFTU0VSVChw
YXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CiAKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0
YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICAKKyAgICBkb3VibGUgc2NhbGVG
YWN0b3IgPSBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKS0+c2NhbGVGYWN0b3IoKTsKKwogICAg
IEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93
KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0g
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVj
dC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0Lngo
KSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dSZWN0LnkoKSAqIHNjYWxl
RmFjdG9yKSwgCisgICAgICAgIHN0YXRpY19jYXN0PGludD4od2luZG93UmVjdC53aWR0aCgpICog
c2NhbGVGYWN0b3IpLCBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd1JlY3QuaGVpZ2h0KCkgKiBzY2Fs
ZUZhY3RvcikgfTsKICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZh
bGxvY2F0aW9uKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
LmNwcAkocmV2aXNpb24gMjY4NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MiwxMSArMTgyLDExIEBAIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGUKIHsKICAgICAvLyBGSVhNRTogaXMgaXQgdGhl
IHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0a1dpZGdldCogY2hlY2tib3ggPSBndGtDaGVja2Jv
eCgpOwotICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5s
b2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSBpLmNvbnRleHQtPnRyYW5zZm9y
bVJlY3QocmVjdCk7CiAgICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250
ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShv
KSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2Jv
eCwgImNoZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2NhbGVk
UmVjdC54KCksIHNjYWxlZFJlY3QueSgpLCBzY2FsZWRSZWN0LndpZHRoKCksIHNjYWxlZFJlY3Qu
aGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjE1LDI0ICsyMTUsMjQgQEAg
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYgogeyAKICAgICAvLyBGSVhN
RTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0a1dpZGdldCogcmFkaW8gPSBn
dGtSYWRpb0J1dHRvbigpOwotICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRl
UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSBpLmNvbnRl
eHQtPnRyYW5zZm9ybVJlY3QocmVjdCk7CiAgICAgZ3RrX3BhaW50X29wdGlvbihyYWRpby0+c3R5
bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKICAgICAgICAgICAgICAgICAgICAgIGRldGVy
bWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCiAgICAgICAgICAgICAgICAgICAgICBO
VUxMLCByYWRpbywgInJhZGlvYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgIHBvcy54KCks
IHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICBzY2FsZWRSZWN0LngoKSwgc2NhbGVkUmVjdC55KCksIHNjYWxlZFJlY3Qud2lkdGgoKSwg
c2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIAoteyAKK3sKICAgICAvLyBG
SVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25vciB0
aGUgc3RhdGUgYXMgd2VsbAogICAgIEd0a1dpZGdldCogYnV0dG9uID0gZ3RrQnV0dG9uKCk7Ci0g
ICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9u
KCkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNmb3JtUmVjdChy
ZWN0KTsKICAgICBndGtfcGFpbnRfYm94KGJ1dHRvbi0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJh
d2FibGUoKSwKICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVT
aGFkb3cobyksCiAgICAgICAgICAgICAgICAgICBOVUxMLCBidXR0b24sICJidXR0b24iLAotICAg
ICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgICAgICAgICAgIHNjYWxlZFJlY3QueCgpLCBzY2FsZWRSZWN0LnkoKSwg
c2NhbGVkUmVjdC53aWR0aCgpLCBzY2FsZWRSZWN0LmhlaWdodCgpKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTI0NSwxMiArMjQ1LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
VGV4dEZpZWxkKFJlbmQKIHsKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBk
cmF3aW5nCiAgICAgR3RrV2lkZ2V0KiBlbnRyeSA9IGd0a0VudHJ5KCk7Ci0gICAgSW50UG9pbnQg
cG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIElu
dFJlY3Qgc2NhbGVkUmVjdCA9IGkuY29udGV4dC0+dHJhbnNmb3JtUmVjdChyZWN0KTsKIAogICAg
IGd0a19wYWludF9zaGFkb3coZW50cnktPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCks
CiAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93
KG8pLAogICAgICAgICAgICAgICAgICAgICAgMCwgZW50cnksICJlbnRyeSIsCi0gICAgICAgICAg
ICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OworICAgICAgICAgICAgICAgICAgICAgc2NhbGVkUmVjdC54KCksIHNjYWxlZFJlY3QueSgpLCBz
Y2FsZWRSZWN0LndpZHRoKCksIHNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAJKHJldmlz
aW9uIDI2ODY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEwIEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAKKworI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKKyNpbmNs
dWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCisKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgogCkBAIC0xMjgsOCArMTMyLDE3IEBAIHZvaWQgU2Nyb2xsVmlld1Njcm9s
bGJhcjo6Z2VvbWV0cnlDaGFuZ2UKICAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkp
OwogCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihw
YXJlbnQoKSk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3I7CisKKyAgICBpZiAoZnJhbWVWaWV3
LT5mcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFt
ZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisgICAgZWxzZQorICAgICAgICBzY2FsZUZhY3Rv
ciA9IDEuMDsKKwogICAgIEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5j
b252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJh
bWVHZW9tZXRyeSgpLnNpemUoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3
aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93
UmVjdC5oZWlnaHQoKSB9OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgc3RhdGlj
X2Nhc3Q8aW50Pih3aW5kb3dSZWN0LngoKSAqIHNjYWxlRmFjdG9yKSwgc3RhdGljX2Nhc3Q8aW50
Pih3aW5kb3dSZWN0LnkoKSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50
Pih3aW5kb3dSZWN0LndpZHRoKCkgKiBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4od2lu
ZG93UmVjdC5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9OwogICAgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogfQogCkBAIC0yODcsMTcgKzMwMCwz
MiBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldEd0a0FkanVzdG1lbnRzKEd0a0FkCiAKIHZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlQ29udGVudHMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBu
b3cpCiB7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKICAgICBpZiAodXBkYXRl
UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVChpc0ZyYW1lVmll
dygpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4odGhpcyk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3I7CisKKyAgICBpZiAoZnJhbWVWaWV3
LT5mcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFt
ZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisgICAgZWxzZQorICAgICAgICBzY2FsZUZhY3Rv
ciA9IDEuMDsKKwogICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gY29udGVudHNUb1dpbmRvdyh1
cGRhdGVSZWN0LmxvY2F0aW9uKCkpOwogICAgIEludFJlY3QgY29udGFpbmluZ1dpbmRvd1JlY3Qg
PSB1cGRhdGVSZWN0OwogICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LnNldExvY2F0aW9uKHdpbmRv
d1BvaW50KTsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAK
ICAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29udGFpbmluZ1dpbmRvd1JlY3QueCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC55KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LndpZHRoKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LmhlaWdodCgpIH07CisKICAg
ICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2lu
ZG93OwogCiAgICAgaWYgKHdpbmRvdykKQEAgLTMxMyw4ICszNDEsMjAgQEAgdm9pZCBTY3JvbGxW
aWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbgogdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGUoKQog
ewogICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOworICAgIEFTU0VSVChpc0ZyYW1lVmll
dygpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4odGhpcyk7CisKKyAgICBkb3VibGUgc2NhbGVGYWN0b3I7CisKKyAgICBpZiAoZnJhbWVWaWV3
LT5mcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHNjYWxlRmFjdG9yID0gZnJhbWVWaWV3LT5mcmFt
ZSgpLT5wYWdlKCktPnNjYWxlRmFjdG9yKCk7CisgICAgZWxzZQorICAgICAgICBzY2FsZUZhY3Rv
ciA9IDEuMDsKKworICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyBzdGF0aWNfY2FzdDxpbnQ+KGZy
YW1lR2VvbWV0cnkoKS54KCkgKiBzY2FsZUZhY3RvciksIHN0YXRpY19jYXN0PGludD4oZnJhbWVH
ZW9tZXRyeSgpLnkoKSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50Piht
X2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpICogc2NhbGVGYWN0b3IpLCAgc3RhdGljX2Nhc3Q8
aW50PihtX2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yKSB9OwogCi0g
ICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IDAsIDAsIG1fZGF0YS0+Y29udGVudHNTaXplLndpZHRo
KCksIG1fZGF0YS0+Y29udGVudHNTaXplLmhlaWdodCgpIH07CiAgICAgZ2RrX3dpbmRvd19pbnZh
bGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3csICZyZWN0
LCB0cnVlKTsKIH0KIApAQCAtNjk2LDE2ICs3MzYsMzcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgaGVyZSBz
byB3ZSBkb24ndCBoYXZlIHRvIGZvcmsgRnJhbWVWaWV3LmgvLmNwcC4KICAgICAvLyBJbiB0aGUg
ZW5kLCBGcmFtZVZpZXcgc2hvdWxkIGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3LgorCiAgICAg
QVNTRVJUKGlzRnJhbWVWaWV3KCkpOwogCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKKworICAgIGRvdWJsZSBzY2FsZUZhY3RvcjsKKwor
ICAgIGlmIChmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSkKKyAgICAgICAgc2NhbGVGYWN0b3Ig
PSBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKS0+c2NhbGVGYWN0b3IoKTsKKyAgICBlbHNlCisg
ICAgICAgIHNjYWxlRmFjdG9yID0gMS4wOworCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBkb2N1bWVudERpcnR5UmVj
dCA9IHJlY3Q7CisKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICBkb2N1bWVudERpcnR5UmVj
dC5zY2FsZSgxIC8gc2NhbGVGYWN0b3IpOworCiAgICAgZG9jdW1lbnREaXJ0eVJlY3QuaW50ZXJz
ZWN0KGZyYW1lR2VvbWV0cnkoKSk7CiAKKyAgICAvLyBQYWludCBhbiBleHRyYSAyIHBpeGVscyBh
cm91bmQgdG8gYWNjb21tb2RhdGUgYXJ0aWZhY3RzIGFuZCByb3VuZGluZyBlcnJvcnMgaW4gdGhl
IHNjYWxpbmcKKyAgICBkb2N1bWVudERpcnR5UmVjdC5pbmZsYXRlKDIpOworCiAgICAgY29udGV4
dC0+c2F2ZSgpOwogCisgICAgLy8gT25seSBzY2FsZSB0aGUgcm9vdCBTY3JvbGxWaWV3CisgICAg
aWYgKCFwYXJlbnQoKSkKKyAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNjYWxlRmFj
dG9yLCBzY2FsZUZhY3RvcikpOworCiAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsK
ICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCShyZXZpc2lvbiAyNjg2NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDcgKzMwMCw2
IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXIKICAgICBzZXRDb250
ZW50c1BvcyhyZWN0LngoKSwgcmVjdC55KCkpOwogfQogCi0KIFBsYXRmb3JtU2Nyb2xsYmFyKiBT
Y3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
bW91c2VFdmVudCkgCiB7CiAgICAgLy8gQUZBSUNUIHRoaXMgaXMgb25seSB1c2VkIGZvciBwbGF0
Zm9ybXMgdGhhdCBwcm92aWRlIApJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlz
aW9uIDI2ODY2KQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNyw2ICsxMjcsMTIgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX3Nj
cm9sbF9ldmVudAogc3RhdGljIHZvaWQgd2Via2l0X3BhZ2Vfc2l6ZV9hbGxvY2F0ZShHdGtXaWRn
ZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKIHsKICAgICBHVEtfV0lER0VU
X0NMQVNTKHdlYmtpdF9wYWdlX3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUod2lkZ2V0LGFs
bG9jYXRpb24pOworICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdF
X0dFVF9QUklWQVRFKFdFQktJVF9QQUdFKHdpZGdldCkpOworCisgICAgLy8gV2UgY2FjaGUgdGhl
IHVuc2NhbGVkIHdpZHRoL2hlaWdodCBhcyByZWNhbGN1bGF0aW5nIHRoZW0gdXNpbmcgdGhlIHNj
YWxlRmFjdG9yIGxlYWRzIHRvCisgICAgLy8gcm91bmRpbmcgZXJyb3JzCisgICAgcGFnZURhdGEt
PndpZHRoID0gYWxsb2NhdGlvbi0+d2lkdGg7CisgICAgcGFnZURhdGEtPmhlaWdodCA9IGFsbG9j
YXRpb24tPmhlaWdodDsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFn
ZShXRUJLSVRfUEFHRSh3aWRnZXQpKSk7CiAgICAgZnJhbWUtPnZpZXcoKS0+cmVzaXplKGFsbG9j
YXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOwpAQCAtNTQyLDQgKzU0OCwzMCBAQCB2
b2lkIHdlYmtpdF9wYWdlX2V4ZWN1dGVfc2NyaXB0KFdlYktpdFBhCiAgICAgaWYgKEZyYW1lTG9h
ZGVyKiBsb2FkZXIgPSBmcmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKSkKICAgICAgICAgbG9hZGVy
LT5leGVjdXRlU2NyaXB0KFN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSwgdHJ1ZSk7CiB9CisKK3Zv
aWQgd2Via2l0X3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvcihXZWJLaXRQYWdlKiBwYWdlLCBkb3VibGUg
ZmFjdG9yKQoreworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShwYWdl
KSk7CisKKyAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRf
UFJJVkFURShwYWdlKTsKKyAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJ
VF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKKworICAgIHBhZ2VEYXRh
LT5wYWdlLT5zZXRTY2FsZUZhY3RvcihmYWN0b3IpOworCisgICAgZnJhbWUtPnZpZXcoKS0+cmVz
aXplKHBhZ2VEYXRhLT53aWR0aCwgcGFnZURhdGEtPmhlaWdodCk7CisgICAgZnJhbWUtPmZvcmNl
TGF5b3V0KCk7CisgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKKyAgICBmcmFt
ZS0+c2VuZFJlc2l6ZUV2ZW50KCk7Cit9CisKK2RvdWJsZSB3ZWJraXRfcGFnZV9nZXRfc2NhbGVf
ZmFjdG9yKFdlYktpdFBhZ2UqIHBhZ2UpCit7CisgICAgLy9XZWJLaXRQYWdlUHJpdmF0ZSogcGFn
ZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisgICAgLy9XZWJLaXRG
cmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9HVEtfRlJBTUVfR0VUX1BSSVZBVEUocGFn
ZURhdGEtPm1haW5GcmFtZSk7CisKKyAgICAvL0ZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWVE
YXRhLT5mcmFtZS0+dmlldygpOworICAgIC8vCisgICAgcmV0dXJuIGNvcmUocGFnZSktPnNjYWxl
RmFjdG9yKCk7Cit9CisKIH0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJKHJldmlzaW9uIDI2
ODY2KQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDgsNiArMTQ4LDEyIEBAIFdFQktJVF9BUEkgV2ViS2l0RnJhbWUqCiB3ZWJraXRfcGFnZV9n
ZXRfbWFpbl9mcmFtZSAoV2ViS2l0UGFnZSogcGFnZSk7CiAKIFdFQktJVF9BUEkgdm9pZAord2Vi
a2l0X3BhZ2Vfc2V0X3NjYWxlX2ZhY3RvciAoV2ViS2l0UGFnZSogcGFnZSwgZG91YmxlIGZhY3Rv
cik7CisKK1dFQktJVF9BUEkgZG91YmxlCit3ZWJraXRfcGFnZV9nZXRfc2NhbGVfZmFjdG9yIChX
ZWJLaXRQYWdlKiBwYWdlKTsKKworV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfcGFnZV9leGVjdXRl
X3NjcmlwdChXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogc2NyaXB0KTsKIEdfRU5EX0RF
Q0xTCiAKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJldmlzaW9uIDI2ODY2KQor
KysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw2ICs2OSw4IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgYXBwbGlj
YXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJBZ2Vu
dDsKIAorICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKKwogICAgICAgICBIYXNoU2V0PEd0a1dp
ZGdldCo+IGNoaWxkcmVuOwogICAgIH07CiAgICAgCg==
</data>
<flag name="review"
          id="7100"
          type_id="1"
          status="-"
          setter="alp"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19878</attachid>
            <date>2008-03-18 19:32:07 -0700</date>
            <delta_ts>2008-03-21 22:18:36 -0700</delta_ts>
            <desc>New approach to full page zoom</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>70033</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMxMTMy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgxIEBACisyMDA4LTAz
LTE4ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgaW1wbGVt
ZW50YXRpb24gb2YgZnVsbCBwYWdlIHpvb20uICBCZWNhdXNlIG9mIGhvdyBtdWNoIGRvZXNuJ3Qg
dHJhbnNmb3JtIHdoZW4gem9vbWluZywgYW5kIGJlY2F1c2UKKyAgICAgICAgb2YgdGhlIG5lZWQg
dG8gb2JleSB2aWV3cG9ydCBjb25zdHJhaW50cywgSSBkZWNpZGVkIHRvIHRha2UgYSBjb21wbGV0
ZWx5IGRpZmZlcmVudCBhcHByb2FjaC4gIE5vdyBDU1MKKyAgICAgICAgbGVuZ3RocyBhbmQgaW50
cmluc2ljIHNpemVzIGFyZSBzaW1wbHkgYWRqdXN0ZWQgYnkgdGhlIHpvb20gZmFjdG9yLiAgVGhp
cyBhcHByb2FjaCB3b3JrcyBtdWNoIGJldHRlciBhbmQKKyAgICAgICAgYXZvaWRzIHBpeGVsIGNy
YWNrcyBtb3JlIHRoYW4gdGhlIG9sZCBhcHByb2FjaC4gICBJbiBhZGRpdGlvbiB3aWRnZXRzICJq
dXN0IHdvcmsiLCBuYW1lbHkgcGx1Z2lucyB6b29tCisgICAgICAgIGFuZCBzY3JvbGxiYXJzIGRv
IG5vdC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW1wbGVtZW50cyB0aGUgSUUgem9vbSBD
U1MgcHJvcGVydHkuICBUaGlzIHByb3BlcnR5IGFsbG93cyBmaW5lLWdyYWluZWQgY29udHJvbCBv
dmVyCisgICAgICAgIHpvb21pbmcgYXQgdGhlIGVsZW1lbnQgbGV2ZWwuICBJdCB0YWtlcyB2YWx1
ZXMgb2Ygbm9ybWFsIHwgPG51bWJlcj4gfCA8cGVyY2VudGFnZT4gdG8gbWF0Y2ggV2luSUUuICBJ
bgorICAgICAgICBhZGRpdGlvbiwgaW4gdGhlIHZlaW4gb2YgdGV4dC1zaXplLWFkanVzdCBmb3Ig
dGV4dCB6b29taW5nLCBJIGhhdmUgZXh0ZW5kZWQgdGhlIHpvb20gcHJvcGVydHkgd2l0aCBhbgor
ICAgICAgICBleHRyYSB2YWx1ZSwgcmVzZXQuICBUaGUgcmVzZXQga2V5d29yZCBjYW4gYmUgdXNl
ZCB0byBwcmV2ZW50IGEgc2VjdGlvbiBvZiB0aGUgcGFnZSBmcm9tIHNjYWxpbmcgYXQgYWxsCisg
ICAgICAgIHdoZW4gYSB6b29tIGlzIGFwcGxpZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICBTdXBwb3J0
IHRoZSBuZXcgJ3pvb20nIHByb3BlcnR5IGZvciBnZXRDb21wdXRlZFN0eWxlLgorCisgICAgICAg
ICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
VmFsdWUpOgorICAgICAgICBDb2RlIHRoYXQgcGFyc2VzIHRoZSAnem9vbScgcHJvcGVydHkuCisK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhTaG9ydCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEZsb2F0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlKToKKyAg
ICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgRXh0ZW5kIGFsbCBvZiB0
aGUgY29tcHV0ZUxlbmd0aCBtZXRob2RzIHRvIHRha2UgYSBtdWx0aXBsaWVyIHNvIHRoYXQgbGVu
Z3RocyBjYW4gYmUgYWRqdXN0ZWQgYnkgdGhlCisgICAgICAgIHpvb20gZmFjdG9yLgorCisgICAg
ICAgICogY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgIEFkZCB0aGUgbmV3IHpvb20g
cHJvcGVydHkgdG8gdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB1bmRlcnN0YW5kLgorCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjptYXBCYWNrZ3JvdW5kU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjptYXBCYWNrZ3JvdW5kWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6Om1hcEJhY2tncm91bmRZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUpOgorICAg
ICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpzZXRTdHlsZSk6CisgICAgICAgIFBhc3MgaW4gdGhlIHpvb20gZmFjdG9yIHdo
ZW4gY29tcHV0aW5nIGFsbCBsZW5ndGhzIGluIENTUy4KKworICAgICAgICAqIGNzcy9DU1NWYWx1
ZUtleXdvcmRzLmluOgorICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlICdyZXNldCcga2V5d29y
ZCBvZiB0aGUgem9vbSBwcm9wZXJ0eS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICBTZXQgdGhl
ICd6b29tJyBDU1MgcHJvcGVydHkgb24gdGhlIFJlbmRlclZpZXcuICBUaGlzIGlzIGhvdyB3ZSBp
bXBsZW1lbnQgZnVsbCBwYWdlIHpvb20uCisKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaXplKToKKyAgICAgICAgTWFrZSBz
dXJlIHRoZSBiYWNrIGVuZCBjYW52YXMgc2l6ZSBpZ25vcmVzIHpvb21pbmcgd2hlbiByZW5kZXJp
bmcgaW1hZ2VzLgorCisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50OjpuYXR1cmFsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVu
dDo6bmF0dXJhbEhlaWdodCk6CisgICAgICAgIFVzZSB0aGUgdW56b29tZWQgd2lkdGgvaGVpZ2h0
IGlmIHdlIGhhdmUgbm8gc3R5bGUgaW5mb3JtYXRpb24gaW4gSFRNTEltYWdlRWxlbWVudC5jcHAu
CisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkSW1hZ2U6OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVJlY3QpOgorICAgICAg
ICAqIGxvYWRlci9DYWNoZWRJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6
OmNhblJlbmRlcik6CisgICAgICAgIEZvcmNlIGFjY2VzcyB0byB0aGUgQ2FjaGVkSW1hZ2UgbWV0
cmljcyB0byB0YWtlIGEgbXVsdGlwbGllciBzbyB0aGF0IHBlb3BsZSBoYXZlIHRvIHRoaW5rIGFi
b3V0CisgICAgICAgIHRoZSB6b29tIGZhY3Rvci4gIFRoZSAiaW50cmluc2ljIHNpemUiIG9mIHRo
ZSBpbWFnZSB0aGVuIHRha2VzIHRoYXQgaW50byBhY2NvdW50LgorCisgICAgICAgICogbG9hZGVy
L0ltYWdlRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUb2tlbml6ZXI6OmZp
bmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpzY2FsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRvRml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRG9jdW1lbnQ6OmltYWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RG9jdW1lbnQ6OmltYWdlRml0c0luV2luZG93KToKKyAgICAgICAgTWFrZSBzdXJlIGltYWdlIGRv
Y3VtZW50cyByZXNwZWN0IHRoZSB6b29tLgorCisgICAgICAgICogcGFnZS9BbmltYXRpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRl
KToKKyAgICAgICAgTWFrZSB0aGUgJ3pvb20nIENTUyBwcm9wZXJ0eSB3b3JrIHdpdGggQ1NTIHRy
YW5zaXRpb25zLgorCisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OnBhZ2Vab29tRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjp0ZXh0Wm9v
bUZhY3Rvcik6CisgICAgICAgIEFkZCBhY2Nlc3NvcnMgZm9yIG9idGFpbmluZyB0aGUgcGFnZVpv
b20gdnMuIHRleHRab29tLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RWaWV3U2l6ZSk6CisgICAgICAgIFJlbW92ZSB0
aGUgb2xkIHpvb20gaW1wbGVtZW50YXRpb24gdGhhdCB1c2VkIHRyYW5zZm9ybXMuCisKKyAgICAg
ICAgKiBwYWdlL21hYy9XZWJDb3JlQVhPYmplY3QubW06CisgICAgICAgICgtW1dlYkNvcmVBWE9i
amVjdCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkXSk6CisgICAgICAgIFBhc3MgaW4gdGhlIHpvb20g
ZmFjdG9yLgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICBQYXNz
IGluIHRoZSB6b29tIGZhY3RvciB3aGVuIHRlc3RpbmcgZm9yIHNpemUuCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2Fs
Y3VsYXRlQmFja2dyb3VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbWFn
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEJhY2tncm91bmRF
eHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNIZWlnaHQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGcmFtZVNldDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENh
bnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpjYW52YXNTaXpl
Q2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySFRNTENhbnZhczo6aW50cmluc2ljU2l6ZUNoYW5nZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFn
ZTo6c2V0SW1hZ2VTaXplRm9yQWx0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFn
ZTo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpjYWxjUmVw
bGFjZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6Y2FsY1JlcGxhY2Vk
SGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjppbnRyaW5zaWNTaXplQ2hhbmdlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dE1hcmtlcjo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6Omlt
YWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxh
dGl2ZU1hcmtlclJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjptdXN0UmVwYWludEJhY2tncm91bmRPckJv
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVyKToKKyAg
ICAgICAgUGFzcyBpbiB0aGUgem9vbSBmYWN0b3Igd2hlbiB0ZXN0aW5nIGZvciBzaXplLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlcGxhY2VkOjpSZW5kZXJSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZXBsYWNlZDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6
OmludHJpbnNpY1NpemVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuaDoKKyAgICAgICAgQWRkZWQgYSBuZXcgY2FsbCB3aGVuIHRoZSB6b29tIGZhY3RvciBjaGFu
Z2VzLCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpLiAgUmVwbGFjZWQgZWxlbWVudCBzdWJjbGFzc2Vz
CisgICAgICAgIHJlc3BvbmQgdG8gdGhpcyB2aWEgb3ZlcnJpZGVzLgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlVmlzdWFsRGF0
YTo6U3R5bGVWaXN1YWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW5oZXJpdGVkRGF0
YTo6U3R5bGVJbmhlcml0ZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW5oZXJpdGVk
RGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6ZGlmZik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVZpc3VhbERhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6Onpvb20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Onpvb21JbkVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0Wm9vbSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTdHlsZTo6c2V0Wm9vbUluRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSk6CisgICAgICAgIFN1cHBvcnQgZm9yICd6b29tJyBpbiB0
aGUgUmVuZGVyU3R5bGUuICAiem9vbUluRWZmZWN0IiByZXByZXNlbnRzIHRoZSBjb21wdXRlZCB6
b29tIHRha2luZyBpbnRvIGFjY291bnQKKyAgICAgICAgYWxsIHRoZSB6b29tcyBzcGVjaWZpZWQg
b24gYW5jZXN0b3JzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjppbWFnZUNoYW5nZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVJvdzo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6aW1h
Z2VDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlkZW8uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZGVvOjppbnRyaW5zaWNTaXplQ2hhbmdlZCk6CisgICAgICAgIFBh
c3MgaW4gdGhlIHpvb20gZmFjdG9yLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2FsY0hlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjYWxjV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnZpZXdIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6dmlld1dpZHRoKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
em9vbUZhY3Rvcik6CisgICAgICAgIEJhY2sgb3V0IHRoZSBvbGQgaW1wbGVtZW50YXRpb24uCisK
IDIwMDgtMDMtMTggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbi4KSW5kZXg6IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCShyZXZpc2lvbiAzMTEzMikKKysrIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgc3RhdGljIGNvbnN0IGlu
dCBjb21wdXRlZFByb3BlcnRpZXNbXSA9IAogICAgIENTU19QUk9QX1dPUkRfU1BBQ0lORywKICAg
ICBDU1NfUFJPUF9XT1JEX1dSQVAsCiAgICAgQ1NTX1BST1BfWl9JTkRFWCwKKyAgICBDU1NfUFJP
UF9aT09NLAogCiAgICAgQ1NTX1BST1BfX1dFQktJVF9BUFBFQVJBTkNFLAogICAgIENTU19QUk9Q
X19XRUJLSVRfQkFDS0dST1VORF9DTElQLApAQCAtNzg3LDYgKzc4OCw4IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgIGlmIChzdHlsZS0+aGFz
QXV0b1pJbmRleCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUoQ1NTX1ZBTF9BVVRPKTsKICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUoc3R5bGUtPnpJbmRleCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAg
ICAgIGNhc2UgQ1NTX1BST1BfWk9PTToKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoc3R5bGUtPnpvb20oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwog
ICAgICAgICBjYXNlIENTU19QUk9QX19XRUJLSVRfQk9YX1NJWklORzoKICAgICAgICAgICAgIGlm
IChzdHlsZS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NfVkFMX0NPTlRFTlRfQk9YKTsKSW5kZXg6IGNz
cy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lv
biAzMTEzMikKKysrIGNzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkwLDYg
KzEwOTAsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBDU1NfUFJPUF9aT09NOiAgICAgICAg
ICAvLyBub3JtYWwgfCByZXNldCB8IDxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAor
ICAgICAgICBpZiAoaWQgPT0gQ1NTX1ZBTF9OT1JNQUwgfHwgaWQgPT0gQ1NTX1ZBTF9SRVNFVCkK
KyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0KHZhbHVlLCBGTnVtYmVy
IHwgRlBlcmNlbnQsIHRydWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgIGNhc2Ug
Q1NTX1BST1BfVEFCTEVfTEFZT1VUOiAgICAgICAgIC8vIGF1dG8gfCBmaXhlZCB8IGluaGVyaXQK
ICAgICAgICAgaWYgKGlkID09IENTU19WQUxfQVVUTyB8fCBpZCA9PSBDU1NfVkFMX0ZJWEVEKQog
ICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKSW5kZXg6IGNzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2
aXNpb24gMzExMzIpCisrKyBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDAsNyArMjQwLDcgQEAgaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3Ro
SW50KAogCiBpbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5
bGUqIHN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKIHsKLSAgICBkb3VibGUgcmVzdWx0ID0gbXVs
dGlwbGllciAqIGNvbXB1dGVMZW5ndGhEb3VibGUoc3R5bGUpOworICAgIGRvdWJsZSByZXN1bHQg
PSBjb21wdXRlTGVuZ3RoRG91YmxlKHN0eWxlLCBtdWx0aXBsaWVyKTsKIAogICAgIC8vIFRoaXMg
Y29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUu
Zy4sIDQ0Ljk5OTk4LiAgV2UKICAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3
ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KQEAgLTI3MSw3ICsy
NzEsNyBAQCBpbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGCiAvLyBMZW5n
dGhzIGV4cGVjdCBhbiBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hl
Y2sgZm9yIGEgZGlmZmVyZW50IG92ZXJmbG93LgogaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKiBzdHlsZSwgZG91YmxlIG11bHRpcGxp
ZXIpCiB7Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRG91
YmxlKHN0eWxlKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aERvdWJsZShzdHls
ZSwgbXVsdGlwbGllcik7CiAKICAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBv
ZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCiAgICAgLy8g
bmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBu
ZXh0IGludGVnZXIgdmFsdWUuCkBAIC0yOTcsNyArMjk3LDcgQEAgc2hvcnQgQ1NTUHJpbWl0aXZl
VmFsdWU6OmNvbXB1dGVMZW5ndGhTaAogCiBzaG9ydCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKiBzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCiB7Ci0g
ICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRG91YmxlKHN0eWxl
KTsKKyAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgbXVsdGlw
bGllcik7CiAKICAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1
bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCiAgICAgLy8gbmVlZCB0byBn
byBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVn
ZXIgdmFsdWUuCkBAIC0zMDgsMjQgKzMwOCwzNyBAQCBzaG9ydCBDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZUxlbmd0aFNoCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PihyZXN1bHQpOwog
fQogCi1mbG9hdCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0
eWxlKiBzdHlsZSwgYm9vbCBhcHBseVpvb21GYWN0b3IpCitmbG9hdCBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBjb21wdXRpbmdG
b250U2l6ZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbXB1dGVMZW5ndGhE
b3VibGUoc3R5bGUsIGFwcGx5Wm9vbUZhY3RvcikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgMS4wLCBjb21wdXRpbmdGb250U2l6ZSkp
OwogfQogCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBib29sIGFwcGx5Wm9vbUZhY3RvcikKK2Zsb2F0IENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqIHN0eWxlLCBkb3VibGUgbXVs
dGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbXB1dGVMZW5ndGhEb3VibGUoc3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGlu
Z0ZvbnRTaXplKSk7Cit9CisKK2RvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0
aERvdWJsZShSZW5kZXJTdHlsZSogc3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyLCBib29sIGNvbXB1
dGluZ0ZvbnRTaXplKQogewogICAgIHVuc2lnbmVkIHNob3J0IHR5cGUgPSBwcmltaXRpdmVUeXBl
KCk7CiAKKyAgICAvLyBXZSBkbyBub3QgYXBwbHkgdGhlIHpvb20gZmFjdG9yIHdoZW4gd2UgYXJl
IGNvbXB1dGluZyB0aGUgdmFsdWUgb2YgdGhlIGZvbnQtc2l6ZSBwcm9wZXJ0eS4gIFRoZSB6b29t
aW5nCisgICAgLy8gZm9yIGZvbnQgc2l6ZXMgaXMgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLCBzaW5j
ZSB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0IGVuZm9yY2luZyB0aGUgbWluaW11bSBmb250IHNpemUg
cHJlZmVyZW5jZQorICAgIC8vIGFzIHdlbGwgYXMgZW5mb3JjaW5nIHRoZSBpbXBsaWNpdCAic21h
cnQgbWluaW11bS4iICBJbiBhZGRpdGlvbiB0aGUgQ1NTIHByb3BlcnR5IHRleHQtc2l6ZS1hZGp1
c3QgaXMgdXNlZCB0bworICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIHpvb21pbmcgYXQgYWxsLiAg
VGhlcmVmb3JlIHdlIHdpbGwgbm90IGFwcGx5IHRoZSB6b29tIGhlcmUgaWYgd2UgYXJlIGNvbXB1
dGluZyBmb250LXNpemUuCisgICAgYm9vbCBhcHBseVpvb21NdWx0aXBsaWVyID0gIWNvbXB1dGlu
Z0ZvbnRTaXplOworCiAgICAgZG91YmxlIGZhY3RvciA9IDEuMDsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBDU1NfRU1TOgotICAgICAgICAgICAgZmFjdG9yID0gYXBwbHlab29t
RmFjdG9yID8gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIDogc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAgIGFwcGx5Wm9v
bU11bHRpcGxpZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGZhY3RvciA9IGNvbXB1dGluZ0ZvbnRT
aXplID8gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKSA6IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU19FWFM6Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBhIGJ1ZyBy
aWdodCBub3cgd2hlcmUgdGhlIHpvb20gd2lsbCBiZSBhcHBsaWVkIG11bHRpcGxlIHRpbWVzIHRv
IEVYIHVuaXRzLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBidWcgcmlnaHQgbm93
IHdoZXJlIHRoZSB6b29tIHdpbGwgYmUgYXBwbGllZCB0d2ljZSB0byBFWCB1bml0cy4KICAgICAg
ICAgICAgIC8vIFdlIHJlYWxseSBuZWVkIHRvIGNvbXB1dGUgRVggdXNpbmcgZm9udE1ldHJpY3Mg
Zm9yIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWRTaXplIGFuZCBub3QgdXNlCiAgICAgICAgICAgICAv
LyBvdXIgYWN0dWFsIGNvbnN0cnVjdGVkIHJlbmRlcmluZyBmb250LgorICAgICAgICAgICAgYXBw
bHlab29tTXVsdGlwbGllciA9IGZhbHNlOwogICAgICAgICAgICAgZmFjdG9yID0gc3R5bGUtPmZv
bnQoKS54SGVpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUFg6
CkBAIC0zNTAsNyArMzYzLDcgQEAgZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoRAogICAgICAgICAgICAgcmV0dXJuIC0xLjA7CiAgICAgfQogCi0gICAgcmV0dXJuIGdldERv
dWJsZVZhbHVlKCkgKiBmYWN0b3I7CisgICAgcmV0dXJuIGdldERvdWJsZVZhbHVlKCkgKiBmYWN0
b3IgKiAoYXBwbHlab29tTXVsdGlwbGllciA/IG11bHRpcGxpZXIgOiAxLjBmKTsKIH0KIAogdm9p
ZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlw
ZSwgZG91YmxlIGZsb2F0VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHJl
dmlzaW9uIDMxMTMyKQorKysgY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCw4ICsxMDQsOSBAQCBwdWJsaWM6CiAgICAgaW50IGNvbXB1dGVMZW5ndGhJbnRGb3JM
ZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7CiAgICAgc2hvcnQgY29tcHV0
ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKik7CiAgICAgc2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0
KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIGZsb2F0IGNvbXB1dGVMZW5n
dGhGbG9hdChSZW5kZXJTdHlsZSosIGJvb2wgYXBwbHlab29tRmFjdG9yID0gdHJ1ZSk7Ci0gICAg
ZG91YmxlIGNvbXB1dGVMZW5ndGhEb3VibGUoUmVuZGVyU3R5bGUqLCBib29sIGFwcGx5Wm9vbUZh
Y3RvciA9IHRydWUpOworICAgIGZsb2F0IGNvbXB1dGVMZW5ndGhGbG9hdChSZW5kZXJTdHlsZSos
IGJvb2wgY29tcHV0aW5nRm9udFNpemUgPSBmYWxzZSk7CisgICAgZmxvYXQgY29tcHV0ZUxlbmd0
aEZsb2F0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9u
dFNpemUgPSBmYWxzZSk7CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhEb3VibGUoUmVuZGVyU3R5
bGUqLCBkb3VibGUgbXVsdGlwbGllciA9IDEuMCwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZh
bHNlKTsKIAogICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKICAgICB2b2lkIHNldFByaW1pdGl2ZVR5
cGUodW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9CkluZGV4OiBjc3MvQ1NT
UHJvcGVydHlOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgko
cmV2aXNpb24gMzExMzIpCisrKyBjc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMTQxLDYgKzE0MSw3IEBAIHdvcmQtYnJlYWsKIHdvcmQtc3BhY2luZwogd29yZC13cmFw
CiB6LWluZGV4Cit6b29tCiAtd2Via2l0LXRyYW5zaXRpb24KIC13ZWJraXQtdHJhbnNpdGlvbi1k
dXJhdGlvbgogLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5CkluZGV4OiBjc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZp
c2lvbiAzMTEzMikKKysrIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE4OCw2ICsyMTg4LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0
aW9ucwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU19QUk9QX19XRUJLSVRfVEVYVF9TSVpFX0FESlVTVDoK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05UX1ZBUklBTlQ6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTX1BST1BfWk9PTToKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRoZXNlIGhhdmUgdG8gYmUgYXBwbGllZCBmaXJzdCwgYmVjYXVzZSBvdGhlciBwcm9wZXJ0
aWVzIHVzZSB0aGUgY29tcHV0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBv
ZiB0aGVzZSBwb3JwZXJ0aWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB0cnVl
OwpAQCAtMjI0Miw2ICsyMjQzLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3Bl
cnR5KGludAogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICBwcmlt
aXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCisg
ICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKwogICAgIExl
bmd0aCBsOwogICAgIGJvb2wgYXBwbHkgPSBmYWxzZTsKIApAQCAtMjI0OSw3ICsyMjUyLDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogCiAgICAgYm9vbCBpc0lu
aGVyaXQgPSBtX3BhcmVudE5vZGUgJiYgdmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJ
VDsKICAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVHlwZSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJ
QUwgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJ
VCk7Ci0KKyAgICAKICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSB1c2VkIHRvIHNldCB0aGUg
Y29ycmVjdCBtYXJnaW5zL3BhZGRpbmcgb24gUlRMIGxpc3RzLgogICAgIGlmIChpZCA9PSBDU1Nf
UFJPUF9fV0VCS0lUX01BUkdJTl9TVEFSVCkKICAgICAgICAgaWQgPSBtX3N0eWxlLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyBDU1NfUFJPUF9NQVJHSU5fTEVGVCA6IENTU19QUk9QX01BUkdJTl9SSUdI
VDsKQEAgLTI2MDgsNyArMjYxMSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoaG9yaXpvbnRhbEJv
cmRlclNwYWNpbmcsIEhvcml6b250YWxCb3JkZXJTcGFjaW5nKQogICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzaG9ydCBzcGFjaW5nID0g
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQobV9zdHlsZSk7CisgICAgICAgIHNo
b3J0IHNwYWNpbmcgPSAgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChtX3N0eWxl
LCB6b29tRmFjdG9yKTsKICAgICAgICAgbV9zdHlsZS0+c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNp
bmcoc3BhY2luZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNjE2LDcgKzI2MTksNyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKHZlcnRpY2FsQm9yZGVyU3BhY2luZywgVmVydGljYWxCb3Jk
ZXJTcGFjaW5nKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBzaG9ydCBzcGFjaW5nID0gIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoU2hvcnQobV9zdHlsZSk7CisgICAgICAgIHNob3J0IHNwYWNpbmcgPSAgcHJpbWl0aXZlVmFs
dWUtPmNvbXB1dGVMZW5ndGhTaG9ydChtX3N0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAgbV9z
dHlsZS0+c2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKHNwYWNpbmcpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjc4Miw3ICsyNzg1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eVByb3BlcnR5KGludAogICAgICAgICAgICAgd2lkdGggPSA1OwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTX1ZBTF9JTlZBTElEOgotICAgICAgICAgICAgd2lkdGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KG1fc3R5bGUpOworICAgICAgICAgICAgd2lk
dGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KG1fc3R5bGUsIHpvb21GYWN0
b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yODM1LDcgKzI4MzgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHdpZHRoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSk7CisgICAgICAgICAgICB3aWR0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3Ip
OwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBDU1NfUFJP
UF9MRVRURVJfU1BBQ0lORzoKQEAgLTI5NzksNyArMjk4Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZl
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlID4gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0RFRykKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgb3VyIHF1aXJreSBtYXJnaW4gdW5pdHMg
aWYgd2UgaGF2ZSB0aGVtLgotICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFs
dWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSksIEZpeGVkLCAKKyAgICAgICAg
ICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVu
Z3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpOwogICAgICAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAg
ICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2Vu
dCk7CkBAIC0zMDc5LDcgKzMwODIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiAhYXBwbHkpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpOwogICAgICAgICAgICAgaWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UgJiYgdHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAgICAgICAgICAg
ICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgo
bV9zdHlsZSksIEZpeGVkKTsKKyAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhl
ZCk7CiAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTMxMzUsNyAr
MzEzOCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAg
ICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAg
ICAgTGVuZ3RoIGw7CiAgICAgICAgICAgaWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BFUkNFTlRBR0UgJiYgdHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAgICAg
ICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0
aChtX3N0eWxlKSwgRml4ZWQpOworICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwgRml4ZWQp
OwogICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJD
RU5UQUdFKQogICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKSwgUGVyY2VudCk7CiAKQEAgLTMxOTksNyArMzIwMiw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyAmJiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAhPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VYUykpOwogICAgICAgICAgICAgaWYgKHR5cGUgPiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgdHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfREVHKQotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aEZsb2F0KG1fcGFyZW50U3R5bGUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzaXpl
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChtX3BhcmVudFN0eWxlLCB0cnVl
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFKQogICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZs
b2F0VmFsdWUoKSAqIG9sZFNpemUpIC8gMTAwLjBmOwogICAgICAgICAgICAgZWxzZQpAQCAtMzI2
MiwxMyArMzI2NSw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQK
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU19WQUxfTk9STUFM
KQogICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgtMTAwLjAsIFBlcmNlbnQpOwogICAg
ICAgICBlbHNlIGlmICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYm
IHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykgewotICAgICAgICAgICAgZG91Ymxl
IG11bHRpcGxpZXIgPSAxLjA7Ci0gICAgICAgICAgICAvLyBTY2FsZSBmb3IgdGhlIGZvbnQgem9v
bSBmYWN0b3Igb25seSBmb3IgdHlwZXMgb3RoZXIgdGhhbiAiZW0iIGFuZCAiZXgiLCBzaW5jZSB0
aG9zZSBhcmUKLSAgICAgICAgICAgIC8vIGFscmVhZHkgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4K
LSAgICAgICAgICAgIGlmICh0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TICYmIHR5
cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFMgJiYgbV9zdHlsZS0+dGV4dFNpemVBZGp1
c3QoKSAmJiAKLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fZG9jdW1l
bnQtPmZyYW1lKCktPnNob3VsZEFwcGx5VGV4dFpvb20oKSkgewotICAgICAgICAgICAgICAgIG11
bHRpcGxpZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT56b29tRmFjdG9yKCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKKyAgICAgICAgICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpICYmIG1fZG9j
dW1lbnQtPmZyYW1lKCkgJiYgbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2hvdWxkQXBwbHlUZXh0Wm9v
bSgpKQorICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgKj0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+
dGV4dFpvb21GYWN0b3IoKTsKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgbXVsdGlwbGllciks
IEZpeGVkKTsKICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKG1fc3R5bGUt
PmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVk
KTsKQEAgLTM1MzksNiArMzUzOCwyOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjYXNlIENTU19QUk9QX1pP
T006CisgICAgeworICAgICAgICAvLyBSZXNldCB0aGUgem9vbSBpbiBlZmZlY3QgYmVmb3JlIHdl
IGRvIGFueXRoaW5nLiAgVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFjY3VyYXRl
bHkgY29tcHV0ZSBhIG5ldworICAgICAgICAvLyB6b29tIGluIGVmZmVjdC4KKyAgICAgICAgbV9z
dHlsZS0+c2V0RWZmZWN0aXZlWm9vbShtX3BhcmVudFN0eWxlID8gbV9wYXJlbnRTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAKKyAg
ICAgICAgLy8gTm93IHdlIGNhbiBoYW5kbGUgaW5oZXJpdCBhbmQgaW5pdGlhbC4KKyAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoem9vbSwgWm9vbSkKKyAgICAgICAgCisgICAgICAg
IC8vIEhhbmRsZSBub3JtYWwvcmVzZXQsIG51bWJlcnMgYW5kIHBlcmNlbnRhZ2VzLgorICAgICAg
ICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NfVkFMX05PUk1BTCkKKyAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NfVkFMX1JFU0VUKSB7
CisgICAgICAgICAgICBtX3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0
aWFsWm9vbSgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNldFpvb20oUmVuZGVyU3R5bGU6Omlu
aXRpYWxab29tKCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0Wm9vbShwcmltaXRp
dmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpIC8gMTAwLjBmKTsKKyAgICAgICAgZWxzZSBpZiAodHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgICAgIG1fc3R5bGUt
PnNldFpvb20ocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAvLyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNhc2UgQ1NTX1BST1BfQkFD
S0dST1VORDoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewpAQCAtMzg3NCw4ICszODk1LDggQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAoIXBh
aXIpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaW50IHdpZHRoID0gcGFpci0+Zmly
c3QoKS0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxlKTsKLSAgICAgICAgaW50IGhlaWdodCA9IHBh
aXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5bGUpOworICAgICAgICBpbnQgd2lk
dGggPSBwYWlyLT5maXJzdCgpLT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICBpbnQgaGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNvbXB1dGVMZW5ndGhJbnQo
bV9zdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzkwNyw3ICszOTI4LDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogCiAgICAgY2FzZSBDU1NfUFJPUF9PVVRM
SU5FX09GRlNFVDoKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwob3V0bGluZU9m
ZnNldCwgT3V0bGluZU9mZnNldCkKLSAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZU9mZnNldChw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxlKSk7CisgICAgICAgIG1fc3R5
bGUtPnNldE91dGxpbmVPZmZzZXQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnQobV9z
dHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIENTU19QUk9Q
X1RFWFRfU0hBRE9XOgpAQCAtMzkyNyw5ICszOTQ4LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIFNoYWRv
d1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihsaXN0LT5pdGVtKGkpKTsK
LSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxlKTsK
LSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxlKTsK
LSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVM
ZW5ndGhJbnQobV9zdHlsZSkgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21w
dXRlTGVuZ3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBp
dGVtLT55LT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAg
ICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aEludCht
X3N0eWxlLCB6b29tRmFjdG9yKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAg
ICAgICAgIGlmIChpdGVtLT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGdldENvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKQEAgLTQwMzksNyArNDA2MCw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAg
IG1fc3R5bGUtPnNldEhhc05vcm1hbENvbHVtbkdhcCgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkdhcChwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUpKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1u
R2FwKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9zdHlsZSwgem9vbUZhY3Rv
cikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTX1BST1BfX1dFQktJVF9D
T0xVTU5fV0lEVEg6IHsKQEAgLTQwNTMsNyArNDA3NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc0F1dG9Db2x1
bW5XaWR0aCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc3R5
bGUtPnNldENvbHVtbldpZHRoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9z
dHlsZSkpOworICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5XaWR0aChwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUsIHpvb21GYWN0b3IpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIENTU19QUk9QX19XRUJLSVRfQ09MVU1OX1JVTEVfU1RZTEU6CkBA
IC00MzE2LDExICs0MzM3LDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0
eShpbnQKICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NfVkFMX1RISUNLKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKICAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSB2YWwocmVzdWx0LCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0VNUyk7Ci0gICAgICAgICAgICAgICAgd2lkdGggPSB2YWwuY29tcHV0ZUxlbmd0
aEZsb2F0KG1fc3R5bGUpOworICAgICAgICAgICAgICAgIHdpZHRoID0gdmFsLmNvbXB1dGVMZW5n
dGhGbG9hdChtX3N0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgd2lkdGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUpOworICAgICAgICAg
ICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChtX3N0eWxl
LCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBtX3N0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwpAQCAtNDQ1OSw3ICs0NDgwLDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBMZW5n
dGggbDsKICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
OwogICAgICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAm
JiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgICAgICBsID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUpLCBG
aXhlZCk7CisgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CiAgICAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAg
ICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2Vu
dCk7CiAgICAgICAgIGVsc2UKQEAgLTQ0NzMsNyArNDQ5NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgTGVuZ3RoIGw7CiAgICAgICAgIGludCB0
eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgaWYgKHR5cGUg
PiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgdHlwZSA8IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfREVHKQotICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlKSwgRml4ZWQpOworICAgICAgICAgICAg
bCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0
eWxlLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgICAgICBlbHNlIGlmKHR5cGUgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAgICAgICAgbCA9IExlbmd0aChwcmlt
aXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAgIGVsc2UKQEAg
LTQ2NjEsMTAgKzQ2ODIsMTIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5k
U2l6ZQogICAgIGludCBmaXJzdFR5cGUgPSBmaXJzdC0+cHJpbWl0aXZlVHlwZSgpOwogICAgIGlu
dCBzZWNvbmRUeXBlID0gc2Vjb25kLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgCisgICAgZmxvYXQg
em9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKwogICAgIGlmIChmaXJzdFR5
cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKQogICAgICAgICBmaXJzdExlbmd0
aCA9IExlbmd0aChBdXRvKTsKICAgICBlbHNlIGlmIChmaXJzdFR5cGUgPiBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgZmlyc3RUeXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19ERUcpCi0gICAgICAgIGZpcnN0TGVuZ3RoID0gTGVuZ3RoKGZpcnN0LT5jb21wdXRlTGVuZ3Ro
SW50Rm9yTGVuZ3RoKG1fc3R5bGUpLCBGaXhlZCk7CisgICAgICAgIGZpcnN0TGVuZ3RoID0gTGVu
Z3RoKGZpcnN0LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3Ip
LCBGaXhlZCk7CiAgICAgZWxzZSBpZiAoZmlyc3RUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSkKICAgICAgICAgZmlyc3RMZW5ndGggPSBMZW5ndGgoZmlyc3QtPmdldERv
dWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKQEAgLTQ2NzMsNyArNDY5Niw3IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dyb3VuZFNpemUKICAgICBpZiAoc2Vjb25kVHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV04pCiAgICAgICAgIHNlY29uZExlbmd0
aCA9IExlbmd0aChBdXRvKTsKICAgICBlbHNlIGlmIChzZWNvbmRUeXBlID4gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHNlY29uZFR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RFRykKLSAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKHNlY29uZC0+Y29tcHV0ZUxl
bmd0aEludEZvckxlbmd0aChtX3N0eWxlKSwgRml4ZWQpOworICAgICAgICBzZWNvbmRMZW5ndGgg
PSBMZW5ndGgoc2Vjb25kLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21G
YWN0b3IpLCBGaXhlZCk7CiAgICAgZWxzZSBpZiAoc2Vjb25kVHlwZSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aChzZWNv
bmQtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKQEAgLTQ2OTQsMTEgKzQ3
MTcsMTMgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5kWFBvcwogICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgZmxv
YXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKwogICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwogICAgIExlbmd0aCBsOwogICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUt
PnByaW1pdGl2ZVR5cGUoKTsKICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSAmJiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAg
IGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9z
dHlsZSksIEZpeGVkKTsKKyAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgIGVs
c2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsK
ICAgICBlbHNlCkBAIC00NzE2LDExICs0NzQxLDEzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwQmFja2dyb3VuZFlQb3MKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3Rp
dmVab29tKCk7CisgICAgCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgTGVuZ3RoIGw7CiAg
ICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgIGlmICh0
eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlKSwgRml4ZWQpOworICAgICAgICBsID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUs
IHpvb21GYWN0b3IpLCBGaXhlZCk7CiAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKQEAgLTQ4ODYsOCArNDkxMywx
MSBAQCBmbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpnZXRDb21wdXRlZFNpemVGCiAgICAgaW50IG1p
blNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7CiAgICAgaW50IG1pbkxvZ2ljYWxT
aXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKIAotICAgIGZsb2F0IHpv
b21QZXJjZW50ID0gbV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2RvY3VtZW50LT5mcmFtZSgpLT5z
aG91bGRBcHBseVRleHRab29tKCkgPyBtX2RvY3VtZW50LT5mcmFtZSgpLT56b29tRmFjdG9yKCkg
OiAxLjBmOwotICAgIGZsb2F0IHpvb21lZFNpemUgPSBzcGVjaWZpZWRTaXplICogem9vbVBlcmNl
bnQ7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2RvY3VtZW50LT5mcmFtZSgpLT5zaG91bGRB
cHBseVRleHRab29tKCkpCisgICAgICAgIHpvb21GYWN0b3IgKj0gbV9kb2N1bWVudC0+ZnJhbWUo
KS0+dGV4dFpvb21GYWN0b3IoKTsKKworICAgIGZsb2F0IHpvb21lZFNpemUgPSBzcGVjaWZpZWRT
aXplICogem9vbUZhY3RvcjsKIAogICAgIC8vIEFwcGx5IHRoZSBoYXJkIG1pbmltdW0gZmlyc3Qu
ICBXZSBvbmx5IGFwcGx5IHRoZSBoYXJkIG1pbmltdW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBz
dGlsbCB0b28gc21hbGwuCiAgICAgaWYgKHpvb21lZFNpemUgPCBtaW5TaXplKQpJbmRleDogY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CShyZXZpc2lvbiAzMTEzMikKKysrIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IHNtYWxsZXJGb250
U2l6ZShmbG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0OwogCiAgICAgcHVibGljOgor
ICAgICAgICB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8v
IFVzZWQgYnkgdGhlIGRvY3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KICAg
ICAgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAog
ICAgIHByaXZhdGU6CkluZGV4OiBjc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBjc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgkocmV2aXNpb24gMzExMzIpCisrKyBjc3MvQ1NTVmFs
dWVLZXl3b3Jkcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTY1LDMgKzU2NSw4IEBAIGxpbmVhcgog
ZWFzZS1pbgogZWFzZS1vdXQKIGVhc2UtaW4tb3V0CisKKyMKKyMgQ1NTX1BST1BfWk9PTQorIwor
cmVzZXQKSW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMzExMzIpCisrKyBkb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDgzLDI0ICsxMDgzLDkgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UgYwogICAgICAgICBfc3R5bGUtPnJlZigpOwogICAgICAgICBfc3R5bGUtPnNldERpc3Bs
YXkoQkxPQ0spOwogICAgICAgICBfc3R5bGUtPnNldFZpc3VhbGx5T3JkZXJlZCh2aXN1YWxseU9y
ZGVyZWQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+c2hvdWxk
QXBwbHlQYWdlWm9vbSgpICYmICFvd25lckVsZW1lbnQoKSkgewotICAgICAgICAgICAgLy8gU2V0
IHVwIG91ciB6b29tIHRyYW5zZm9ybSBvbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgICAgICBfc3R5
bGUtPnNldFRyYW5zZm9ybU9yaWdpblgoTGVuZ3RoKDAsIEZpeGVkKSk7Ci0gICAgICAgICAgICBf
c3R5bGUtPnNldFRyYW5zZm9ybU9yaWdpblkoTGVuZ3RoKDAsIEZpeGVkKSk7Ci0gICAgICAgICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wczsKLSAgICAgICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1P
cGVyYXRpb24+IHRyYW5zZm9ybU9wID0gbmV3IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKGZyYW1l
KCktPnpvb21GYWN0b3IoKSwgZnJhbWUoKS0+em9vbUZhY3RvcigpKTsKLSAgICAgICAgICAgIG9w
cy5hcHBlbmQodHJhbnNmb3JtT3ApOwotICAgICAgICAgICAgX3N0eWxlLT5zZXRUcmFuc2Zvcm0o
b3BzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBp
cyBuZWNlc3NhcnkgYmVjYXVzZSBSZW5kZXJMYXllciBpcyBidWdneSByZWdhcmRpbmcgdHJhbnNm
b3JtIHJlcGFpbnRpbmcgb24gdGhlIHJvb3QgKG5vdCBzdXJlIHdoeSkuCi0gICAgICAgIC8vIFdl
IGNhbiByZW1vdmUgaXQgd2hlbiB0aG9zZSBidWdzIGFyZSByZXNvbHZlZC4KLSAgICAgICAgaWYg
KG9sZFN0eWxlICYmIG9sZFN0eWxlLT50cmFuc2Zvcm0oKSAhPSBfc3R5bGUtPnRyYW5zZm9ybSgp
KSB7Ci0gICAgICAgICAgICBzZXRDaGFuZ2VkKCk7IC8vIE5lY2Vzc2FyeSB0byBmb3JjZSB0aGUg
dmlldyB0byByZWxheW91dC4KLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKLSAg
ICAgICAgfQotCisgICAgICAgIF9zdHlsZS0+c2V0Wm9vbShmcmFtZSgpLT5wYWdlWm9vbUZhY3Rv
cigpKTsKKyAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRTdHlsZShfc3R5bGUpOworICAgIAog
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQocHJpbnRpbmcoKSk7CiAgICAgICAgIGlmIChTZXR0
aW5ncyogc2V0dGluZ3MgPSB0aGlzLT5zZXR0aW5ncygpKSB7CkluZGV4OiBodG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCShyZXZpc2lvbiAzMTEzMikKKysrIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg4LDcgKzg4OCw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjphcHBseVNoYWQKIHN0YXRpYyBJbnRTaXplIHNpemUoSFRNTElt
YWdlRWxlbWVudCogaW1hZ2UpCiB7CiAgICAgaWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IGltYWdlLT5jYWNoZWRJbWFnZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmltYWdl
U2l6ZSgpOworICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZSgxLjBmKTsgLy8g
RklYTUU6IE5vdCBzdXJlIGFib3V0IHRoaXMuCiAgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIApJ
bmRleDogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTEzMikKKysrIGh0bWwvSFRNTEltYWdlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpA
QCAtMjE2LDggKzIxNywxMCBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6d2lkdGgoYm9vbCBpZ25v
cmVQCiAgICAgICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgICAgIAogICAgICAgICAvLyBpZiB0
aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIHdpZHRoCi0gICAgICAgIGlmIChtX2ltYWdl
TG9hZGVyLmltYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgp
LT5pbWFnZVNpemUoKS53aWR0aCgpOworICAgICAgICBpZiAobV9pbWFnZUxvYWRlci5pbWFnZSgp
KSB7CisgICAgICAgICAgICBmbG9hdCB6b29tRmFjdG9yID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSA/
IGRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2Vab29tRmFjdG9yKCkgOiAxLjBmOworICAgICAgICAg
ICAgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKHpvb21GYWN0b3IpLndp
ZHRoKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoaWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKQpAQCAtMjM4LDggKzI0MSwxMCBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KGJv
b2wgaWdub3JlCiAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwogICAgICAgICAKICAgICAgICAg
Ly8gaWYgdGhlIGltYWdlIGlzIGF2YWlsYWJsZSwgdXNlIGl0cyBoZWlnaHQKLSAgICAgICAgaWYg
KG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ltYWdlTG9hZGVy
LmltYWdlKCktPmltYWdlU2l6ZSgpLmhlaWdodCgpOyAgICAgICAgCisgICAgICAgIGlmIChtX2lt
YWdlTG9hZGVyLmltYWdlKCkpIHsKKyAgICAgICAgICAgIGZsb2F0IHpvb21GYWN0b3IgPSBkb2N1
bWVudCgpLT5mcmFtZSgpID8gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZVpvb21GYWN0b3IoKSA6
IDEuMGY7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNp
emUoem9vbUZhY3RvcikuaGVpZ2h0KCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoaWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKQpAQCAtMjU1LDcgKzI2MCw3IEBAIGludCBIVE1MSW1hZ2VF
bGVtZW50OjpuYXR1cmFsV2lkdGgoKSBjb24KICAgICBpZiAoIW1faW1hZ2VMb2FkZXIuaW1hZ2Uo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgp
LT5pbWFnZVNpemUoKS53aWR0aCgpOworICAgIHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCkt
PmltYWdlU2l6ZSgxLjBmKS53aWR0aCgpOwogfQogCiBpbnQgSFRNTEltYWdlRWxlbWVudDo6bmF0
dXJhbEhlaWdodCgpIGNvbnN0CkBAIC0yNjMsNyArMjY4LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1l
bnQ6Om5hdHVyYWxIZWlnaHQoKSBjbwogICAgIGlmICghbV9pbWFnZUxvYWRlci5pbWFnZSgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgp
LT5pbWFnZVNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgp
LT5pbWFnZVNpemUoMS4wZikuaGVpZ2h0KCk7CiB9CiAgICAgCiBib29sIEhUTUxJbWFnZUVsZW1l
bnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKSW5kZXg6IGxvYWRlci9D
YWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2
aXNpb24gMzExMzIpCisrKyBsb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw3ICs3NSw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OnJlZihDYWNoZWRSZXNvdXJjZUNsaWUK
IHsKICAgICBDYWNoZWRSZXNvdXJjZTo6cmVmKGMpOwogCi0gICAgaWYgKCFpbWFnZVJlY3QoKS5p
c0VtcHR5KCkpCisgICAgaWYgKG1faW1hZ2UgJiYgIW1faW1hZ2UtPnJlY3QoKS5pc0VtcHR5KCkp
CiAgICAgICAgIGMtPmltYWdlQ2hhbmdlZCh0aGlzKTsKIAogICAgIGlmICghbV9sb2FkaW5nKQpA
QCAtMTQzLDE0ICsxNDMsMjMgQEAgYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZUhl
aWdodAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50U2l6ZSBDYWNoZWRJbWFnZTo6aW1hZ2VT
aXplKCkgY29uc3QKK0ludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBs
aWVyKSBjb25zdAogewotICAgIHJldHVybiAobV9pbWFnZSA/IG1faW1hZ2UtPnNpemUoKSA6IElu
dFNpemUoKSk7Ci19Ci0KLUludFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIChtX2ltYWdlID8gbV9pbWFnZS0+cmVjdCgpIDogSW50UmVjdCgpKTsKKyAg
ICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgaWYgKG11bHRp
cGxpZXIgPT0gMS4wZikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsKKyAgICByZXR1
cm4gSW50U2l6ZShtX2ltYWdlLT5zaXplKCkud2lkdGgoKSAqIG11bHRpcGxpZXIsIG1faW1hZ2Ut
PnNpemUoKS5oZWlnaHQoKSAqIG11bHRpcGxpZXIpOworfQorCitJbnRSZWN0IENhY2hlZEltYWdl
OjppbWFnZVJlY3QoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK3sKKyAgICBpZiAoIW1faW1hZ2Up
CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKG11bHRpcGxpZXIgPT0gMS4wZikK
KyAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChtX2lt
YWdlLT5yZWN0KCkueCgpICogbXVsdGlwbGllciwgbV9pbWFnZS0+cmVjdCgpLnkoKSAqIG11bHRp
cGxpZXIsCisgICAgICAgICAgICAgICAgICAgbV9pbWFnZS0+cmVjdCgpLndpZHRoKCkgKiBtdWx0
aXBsaWVyLCBtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgKiBtdWx0aXBsaWVyKTsKIH0KIAogdm9p
ZCBDYWNoZWRJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJzKCkKSW5kZXg6IGxvYWRlci9DYWNoZWRJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiAzMTEzMikK
KysrIGxvYWRlci9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTMyLDcgKzMzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBEb2NMb2FkZXI7CiBjbGFzcyBDYWNoZTsKLWNsYXNzIEltYWdlOwogCiBjbGFzcyBDYWNo
ZWRJbWFnZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSwgcHVibGljIEltYWdlT2JzZXJ2ZXIgewog
ICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAg
SW1hZ2UqIGltYWdlKCkgY29uc3Q7CiAKLSAgICBib29sIGNhblJlbmRlcigpIGNvbnN0IHsgcmV0
dXJuICFlcnJvck9jY3VycmVkKCkgJiYgaW1hZ2VTaXplKCkud2lkdGgoKSA+IDAgJiYgaW1hZ2VT
aXplKCkuaGVpZ2h0KCkgPiAwOyB9CisgICAgYm9vbCBjYW5SZW5kZXIoZmxvYXQgbXVsdGlwbGll
cikgY29uc3QgeyByZXR1cm4gIWVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2VTaXplKG11bHRpcGxp
ZXIpLmlzRW1wdHkoKTsgfQogCiAgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgU1ZHSW1h
Z2UgcmlnaHQgbm93CiAgICAgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6
ZSYpOwpAQCAtNTIsOCArNTIsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2
ZVdpZHRoKCkgY29uc3Q7CiAgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7
CiAgICAgCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoKSBjb25zdDsgIC8vIHJldHVybnMgdGhlIHNp
emUgb2YgdGhlIGNvbXBsZXRlIGltYWdlCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoKSBjb25zdDsg
IC8vIFRoZSBzaXplIG9mIHRoZSBpbWFnZS4KKyAgICAvLyBCb3RoIG9mIHRoZXNlIG1ldGhvZHMg
dGFrZSBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBu
YXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZQorICAgIC8vIHpvb20uCisgICAgSW50U2l6
ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7ICAvLyByZXR1cm5zIHRoZSBzaXpl
IG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KKyAgICBJbnRSZWN0IGltYWdlUmVjdChmbG9hdCBtdWx0
aXBsaWVyKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50bHkgZGVjb2RlZCBwb3J0
aW9uIG9mIHRoZSBpbWFnZS4KIAogICAgIHZpcnR1YWwgdm9pZCByZWYoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqKTsKICAgICAKSW5kZXg6IGxvYWRlci9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBsb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDMxMTMyKQorKysgbG9hZGVy
L0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9p
ZCBJbWFnZVRva2VuaXplcjo6ZmluaXNoKCkKIAogICAgICAgICBjYWNoZWRJbWFnZS0+c2V0UmVz
cG9uc2UobV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25z
ZSgpKTsKIAotICAgICAgICBJbnRTaXplIHNpemUgPSBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKCk7
CisgICAgICAgIEludFNpemUgc2l6ZSA9IGNhY2hlZEltYWdlLT5pbWFnZVNpemUobV9kb2MtPmZy
YW1lKCktPnBhZ2Vab29tRmFjdG9yKCkpOwogICAgICAgICBpZiAoc2l6ZS53aWR0aCgpKQogICAg
ICAgICAgICAgbV9kb2MtPnNldFRpdGxlKGltYWdlVGl0bGUoY2FjaGVkSW1hZ2UtPnJlc3BvbnNl
KCkuc3VnZ2VzdGVkRmlsZW5hbWUoKSwgc2l6ZSkpOwogCkBAIC0xODYsNyArMTg2LDcgQEAgZmxv
YXQgSW1hZ2VEb2N1bWVudDo6c2NhbGUoKSBjb25zdAogICAgIGlmICghbV9pbWFnZUVsZW1lbnQp
CiAgICAgICAgIHJldHVybiAxLjBmOwogCi0gICAgSW50U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdl
RWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKCk7CisgICAgSW50U2l6ZSBpbWFnZVNp
emUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKGZyYW1lKCktPnBh
Z2Vab29tRmFjdG9yKCkpOwogICAgIEludFNpemUgd2luZG93U2l6ZSA9IEludFNpemUoZnJhbWUo
KS0+dmlldygpLT53aWR0aCgpLCBmcmFtZSgpLT52aWV3KCktPmhlaWdodCgpKTsKICAgICAKICAg
ICBmbG9hdCB3aWR0aFNjYWxlID0gKGZsb2F0KXdpbmRvd1NpemUud2lkdGgoKSAvIGltYWdlU2l6
ZS53aWR0aCgpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6cmVzaXpl
SW1hZ2VUb0ZpdCgpCiAgICAgaWYgKCFtX2ltYWdlRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+
aW1hZ2VTaXplKCk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlRWxlbWVudC0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2VTaXplKGZyYW1lKCktPnBhZ2Vab29tRmFjdG9yKCkpOwogCiAgICAg
ZmxvYXQgc2NhbGUgPSB0aGlzLT5zY2FsZSgpOwogICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0
aChzdGF0aWNfY2FzdDxpbnQ+KGltYWdlU2l6ZS53aWR0aCgpICogc2NhbGUpKTsKQEAgLTI0MCw3
ICsyNDAsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OmltYWdlQ2hhbmdlZCgpCiAgICAgaWYgKG1f
aW1hZ2VTaXplSXNLbm93bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1hZ2VFbGVt
ZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUoKS5pc0VtcHR5KCkpCisgICAgaWYgKG1faW1h
Z2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUoZnJhbWUoKS0+cGFnZVpvb21GYWN0
b3IoKSkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgbV9pbWFnZVNpemVJ
c0tub3duID0gdHJ1ZTsKQEAgLTI1Niw4ICsyNTYsOCBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJl
c3RvcmVJbWFnZVNpemUoKQogICAgIGlmICghbV9pbWFnZUVsZW1lbnQgfHwgIW1faW1hZ2VTaXpl
SXNLbm93bikKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1faW1hZ2VFbGVtZW50LT5zZXRX
aWR0aChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKCkud2lkdGgoKSk7
Ci0gICAgbV9pbWFnZUVsZW1lbnQtPnNldEhlaWdodChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1h
Z2UoKS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkpOworICAgIG1faW1hZ2VFbGVtZW50LT5zZXRXaWR0
aChtX2ltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VTaXplKGZyYW1lKCktPnBhZ2Va
b29tRmFjdG9yKCkpLndpZHRoKCkpOworICAgIG1faW1hZ2VFbGVtZW50LT5zZXRIZWlnaHQobV9p
bWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShmcmFtZSgpLT5wYWdlWm9vbUZh
Y3RvcigpKS5oZWlnaHQoKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAo
aW1hZ2VGaXRzSW5XaW5kb3coKSkKQEAgLTI3Myw3ICsyNzMsNyBAQCBib29sIEltYWdlRG9jdW1l
bnQ6OmltYWdlRml0c0luV2luZG93KCkgCiAgICAgaWYgKCFtX2ltYWdlRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBJbnRTaXplIGltYWdlU2l6ZSA9IG1faW1hZ2VFbGVtZW50
LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IG1f
aW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUoZnJhbWUoKS0+cGFnZVpvb21G
YWN0b3IoKSk7CiAgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gSW50U2l6ZShmcmFtZSgpLT52aWV3
KCktPndpZHRoKCksIGZyYW1lKCktPnZpZXcoKS0+aGVpZ2h0KCkpOwogICAgIAogICAgIHJldHVy
biBpbWFnZVNpemUud2lkdGgoKSA8PSB3aW5kb3dTaXplLndpZHRoKCkgJiYgaW1hZ2VTaXplLmhl
aWdodCgpIDw9IHdpbmRvd1NpemUuaGVpZ2h0KCk7ICAgIApJbmRleDogcGFnZS9BbmltYXRpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAzMTEzMikKKysrIHBhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyMyw2ICs0MjMsNyBAQCB2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmlt
YXRlKENvbXBvc2l0CiAgICAgQkxFTkQoQ1NTX1BST1BfX1dFQktJVF9CT1JERVJfQk9UVE9NX0xF
RlRfUkFESVVTLCBib3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21MZWZ0UmFk
aXVzKTsKICAgICBCTEVORChDU1NfUFJPUF9fV0VCS0lUX0JPUkRFUl9CT1RUT01fUklHSFRfUkFE
SVVTLCBib3JkZXJCb3R0b21SaWdodFJhZGl1cywgc2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMp
OwogICAgIEJMRU5EKENTU19QUk9QX1ZJU0lCSUxJVFksIHZpc2liaWxpdHksIHNldFZpc2liaWxp
dHkpOworICAgIEJMRU5EKENTU19QUk9QX1pPT00sIHpvb20sIHNldFpvb20pOwogfQogCiBSZW5k
ZXJTdHlsZSogQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKQpJbmRleDogcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuaAko
cmV2aXNpb24gMzExMzIpCisrKyBwYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2
ICsyMDksOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1pvb21GYWN0b3JUZXh0T25seSgpIGNvbnN0
OwogICAgIGJvb2wgc2hvdWxkQXBwbHlUZXh0Wm9vbSgpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxk
QXBwbHlQYWdlWm9vbSgpIGNvbnN0OworICAgIGZsb2F0IHBhZ2Vab29tRmFjdG9yKCkgY29uc3Qg
eyByZXR1cm4gc2hvdWxkQXBwbHlQYWdlWm9vbSgpID8gem9vbUZhY3RvcigpIDogMS4wZjsgfQor
ICAgIGZsb2F0IHRleHRab29tRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gc2hvdWxkQXBwbHlUZXh0
Wm9vbSgpID8gem9vbUZhY3RvcigpIDogMS4wZjsgfQogCiAgICAgYm9vbCBwcm9oaWJpdHNTY3Jv
bGxpbmcoKSBjb25zdDsKICAgICB2b2lkIHNldFByb2hpYml0c1Njcm9sbGluZyhjb25zdCBib29s
KTsKSW5kZXg6IHBhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lVmll
dy5jcHAJKHJldmlzaW9uIDMxMTMyKQorKysgcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTQsMTUgKzI1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RWaWV3U2l6ZSgp
CiAgICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihtX2ZyYW1l
LT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgLy8gQWRqdXN0IGZvciB0aGUgem9vbSBmYWN0b3IuICBUaGUgUmVuZGVyVmlldyBpcyBz
Y2FsZWQgYnkgdGhlIHpvb20sIGJ1dCBvdXIgdmlld3BvcnQgaXMgbm90LgotICAgIGludCB3aWR0
aCA9IHJvb3QtPm92ZXJmbG93V2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gcm9vdC0+b3ZlcmZs
b3dIZWlnaHQoKTsKLSAgICBpZiAobV9mcmFtZS0+c2hvdWxkQXBwbHlQYWdlWm9vbSgpKSB7Ci0g
ICAgICAgIHdpZHRoICo9IG1fZnJhbWUtPnpvb21GYWN0b3IoKTsgLy8gRklYTUU6IFdpbGwgaGF2
ZSByb3VuZGluZyBlcnJvcnMuCi0gICAgICAgIGhlaWdodCAqPSBtX2ZyYW1lLT56b29tRmFjdG9y
KCk7IC8vIEZJWE1FOiBXaWxsIGhhdmUgcm91bmRpbmcgZXJyb3JzLgotICAgIH0KLSAgICByZXNp
emVDb250ZW50cyh3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXNpemVDb250ZW50cyhyb290LT5vdmVy
Zmxvd1dpZHRoKCksIHJvb3QtPm92ZXJmbG93SGVpZ2h0KCkpOwogfQogCiB2b2lkIEZyYW1lVmll
dzo6YXBwbHlPdmVyZmxvd1RvVmlld3BvcnQoUmVuZGVyT2JqZWN0KiBvLCBTY3JvbGxiYXJNb2Rl
JiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUpCkluZGV4OiBwYWdlL21hYy9XZWJDb3JlQVhP
YmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZp
c2lvbiAzMTEzMikKKysrIHBhZ2UvbWFjL1dlYkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtODc1LDcgKzg3NSw3IEBAIHN0YXRpYyBJbnRSZWN0IGJvdW5kaW5nQm94UmVjdChSZW5k
ZXJPYmoKICAgICAgICAgLy8gY2hlY2sgd2hldGhlciByZW5kZXJlZCBpbWFnZSB3YXMgc3RyZXRj
aGVkIGZyb20gb25lLWRpbWVuc2lvbmFsIGZpbGUgaW1hZ2UKICAgICAgICAgUmVuZGVySW1hZ2Uq
IGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihtX3JlbmRlcmVyKTsKICAgICAgICAg
aWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgICAgICBJbnRTaXplIGltYWdlU2l6
ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZVNpemUoKTsKKyAgICAgICAgICAgIEludFNp
emUgaW1hZ2VTaXplID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShpbWFnZS0+dmll
dygpLT56b29tRmFjdG9yKCkpOwogICAgICAgICAgICAgcmV0dXJuIChpbWFnZVNpemUuaGVpZ2h0
KCkgPD0gMSB8fCBpbWFnZVNpemUud2lkdGgoKSA8PSAxKTsKICAgICAgICAgfQogICAgICAgICAK
SW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDMxMTMyKQorKysgcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTksNyArNjU5LDcgQEAgdm9pZCBJbmxp
bmVGbG93Qm94OjpwYWludEJhY2tncm91bmQoR3JhcAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG15LCBpbnQgbWgsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgp
CiB7CiAgICAgQ2FjaGVkSW1hZ2UqIGJnID0gYmdMYXllci0+YmFja2dyb3VuZEltYWdlKCk7Ci0g
ICAgYm9vbCBoYXNCYWNrZ3JvdW5kSW1hZ2UgPSBiZyAmJiBiZy0+Y2FuUmVuZGVyKCk7CisgICAg
Ym9vbCBoYXNCYWNrZ3JvdW5kSW1hZ2UgPSBiZyAmJiBiZy0+Y2FuUmVuZGVyKG9iamVjdCgpLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIGlmICgoIWhhc0JhY2tncm91bmRJbWFnZSAm
JiAhb2JqZWN0KCktPnN0eWxlKCktPmhhc0JvcmRlclJhZGl1cygpKSB8fCAoIXByZXZMaW5lQm94
KCkgJiYgIW5leHRMaW5lQm94KCkpIHx8ICFwYXJlbnQoKSkKICAgICAgICAgb2JqZWN0KCktPnBh
aW50QmFja2dyb3VuZEV4dGVuZGVkKGNvbnRleHQsIGMsIGJnTGF5ZXIsIG15LCBtaCwgdHgsIHR5
LCB3LCBoKTsKICAgICBlbHNlIHsKQEAgLTczMyw3ICs3MzMsNyBAQCB2b2lkIElubGluZUZsb3dC
b3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoCiAgICAgICAgIC8vIG5vbi1maXJzdC1saW5lIHN0eWxl
LgogICAgICAgICBpZiAocGFyZW50KCkgJiYgb2JqZWN0KCktPnN0eWxlKCktPmhhc0JvcmRlcigp
KSB7CiAgICAgICAgICAgICBDYWNoZWRJbWFnZSogYm9yZGVySW1hZ2UgPSBvYmplY3QoKS0+c3R5
bGUoKS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgpOwotICAgICAgICAgICAgYm9vbCBoYXNCb3JkZXJJ
bWFnZSA9IGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLT5jYW5SZW5kZXIoKTsKKyAgICAgICAg
ICAgIGJvb2wgaGFzQm9yZGVySW1hZ2UgPSBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS0+Y2Fu
UmVuZGVyKHN0eWxlVG9Vc2UtPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgICAgICBpZiAoaGFz
Qm9yZGVySW1hZ2UgJiYgIWJvcmRlckltYWdlLT5pc0xvYWRlZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcgd2hpbGUgd2Ugd2FpdCBmb3IgdGhlIGlt
YWdlIHRvIGxvYWQuCiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAzMTEzMikKKysrIHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsOSArNDMxLDkgQEAgSW50U2l6
ZSBSZW5kZXJCb3g6OmNhbGN1bGF0ZUJhY2tncm91bmRTaQogICAgICAgICAgICAgLy8gc2NhbGUg
dG8gbWFpbnRhaW4gb3VyIGFzcGVjdCByYXRpby4KICAgICAgICAgICAgIGlmIChiZ0hlaWdodC5p
c1BlcmNlbnQoKSkgewogICAgICAgICAgICAgICAgIGludCBzY2FsZWRIID0gYmdIZWlnaHQuY2Fs
Y1ZhbHVlKHNjYWxlZEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgdyA9IGJnLT5pbWFnZVNpemUo
KS53aWR0aCgpICogc2NhbGVkSCAvIGJnLT5pbWFnZVNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICB3ID0gYmctPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRo
KCkgKiBzY2FsZWRIIC8gYmctPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLmhl
aWdodCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChiZ0hlaWdodC5pc0ZpeGVkKCkpCi0gICAg
ICAgICAgICAgICAgdyA9IGJnLT5pbWFnZVNpemUoKS53aWR0aCgpICogYmdIZWlnaHQudmFsdWUo
KSAvIGJnLT5pbWFnZVNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICB3ID0gYmctPmlt
YWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRoKCkgKiBiZ0hlaWdodC52YWx1
ZSgpIC8gYmctPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLmhlaWdodCgpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGJnSGVpZ2h0LmlzUGVyY2VudCgpKQpAQCAtNDQ0LDI0
ICs0NDQsMjQgQEAgSW50U2l6ZSBSZW5kZXJCb3g6OmNhbGN1bGF0ZUJhY2tncm91bmRTaQogICAg
ICAgICAgICAgLy8gSWYgdGhlIGhlaWdodCBpcyBhdXRvIGFuZCB0aGUgd2lkdGggaXMgbm90LCB3
ZSBoYXZlIHRvIHVzZSB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAgICAgIC8vIHNjYWxlIHRvIG1h
aW50YWluIG91ciBhc3BlY3QgcmF0aW8uCiAgICAgICAgICAgICBpZiAoYmdXaWR0aC5pc1BlcmNl
bnQoKSkKLSAgICAgICAgICAgICAgICBoID0gYmctPmltYWdlU2l6ZSgpLmhlaWdodCgpICogc2Nh
bGVkV2lkdGggLyBiZy0+aW1hZ2VTaXplKCkud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBoID0g
YmctPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLmhlaWdodCgpICogc2NhbGVk
V2lkdGggLyBiZy0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkud2lkdGgoKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGJnV2lkdGguaXNGaXhlZCgpKQotICAgICAgICAgICAgICAg
IGggPSBiZy0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkgKiBiZ1dpZHRoLnZhbHVlKCkgLyBiZy0+aW1h
Z2VTaXplKCkud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBoID0gYmctPmltYWdlU2l6ZShzdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpLmhlaWdodCgpICogYmdXaWR0aC52YWx1ZSgpIC8gYmctPmlt
YWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRoKCk7CiAgICAgICAgICAgICBl
bHNlIGlmIChiZ1dpZHRoLmlzQXV0bygpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgYm90aCB3
aWR0aCBhbmQgaGVpZ2h0IGFyZSBhdXRvLCB3ZSBqdXN0IHdhbnQgdG8gdXNlIHRoZSBpbWFnZSdz
CiAgICAgICAgICAgICAgICAgLy8gaW50cmluc2ljIHNpemUuCi0gICAgICAgICAgICAgICAgdyA9
IGJnLT5pbWFnZVNpemUoKS53aWR0aCgpOwotICAgICAgICAgICAgICAgIGggPSBiZy0+aW1hZ2VT
aXplKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgdyA9IGJnLT5pbWFnZVNpemUoc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpOworICAgICAgICAgICAgICAgIGggPSBiZy0+aW1h
Z2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0KCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEludFNpemUobWF4KDEsIHcpLCBtYXgoMSwgaCkp
OwogICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gYmctPmltYWdlU2l6ZSgpOworICAgICAgICBy
ZXR1cm4gYmctPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogfQogCiB2b2lk
IFJlbmRlckJveDo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAo
IWltYWdlIHx8ICFpbWFnZS0+Y2FuUmVuZGVyKCkgfHwgIXBhcmVudCgpIHx8ICF2aWV3KCkpCisg
ICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhblJlbmRlcihzdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpIHx8ICFwYXJlbnQoKSB8fCAhdmlldygpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
aXNJbmxpbmVGbG93KCkgfHwgc3R5bGUoKS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgpID09IGltYWdl
KSB7CkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50QmFja2dyb3VuZEV4
dGVuZGVkKAogICAgIH0KIAogICAgIENhY2hlZEltYWdlKiBiZyA9IGJnTGF5ZXItPmJhY2tncm91
bmRJbWFnZSgpOwotICAgIGJvb2wgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kSW1hZ2UgPSBiZyAmJiBi
Zy0+Y2FuUmVuZGVyKCk7CisgICAgYm9vbCBzaG91bGRQYWludEJhY2tncm91bmRJbWFnZSA9IGJn
ICYmIGJnLT5jYW5SZW5kZXIoc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICBDb2xvciBi
Z0NvbG9yID0gYzsKIAogICAgIC8vIFdoZW4gdGhpcyBzdHlsZSBmbGFnIGlzIHNldCwgY2hhbmdl
IGV4aXN0aW5nIGJhY2tncm91bmQgY29sb3JzIGFuZCBpbWFnZXMgdG8gYSBzb2xpZCB3aGl0ZSBi
YWNrZ3JvdW5kLgpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNIZWln
aHQoKQogICAgIC8vIGlzIHNwZWNpZmllZC4KICAgICBpZiAoc3RyZXRjaGVzVG9WaWV3SGVpZ2h0
KCkgJiYgIWRvY3VtZW50KCktPnByaW50aW5nKCkpIHsKICAgICAgICAgaW50IG1hcmdpbnMgPSBj
b2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwotICAgICAgICBp
bnQgdmlzSGVpZ2h0ID0gdmlldygpLT56b29tZWRIZWlnaHQoKTsKKyAgICAgICAgaW50IHZpc0hl
aWdodCA9IHZpZXcoKS0+dmlld0hlaWdodCgpOwogICAgICAgICBpZiAoaXNSb290KCkpCiAgICAg
ICAgICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdodCwgdmlzSGVpZ2h0IC0gbWFyZ2lucyk7CiAg
ICAgICAgIGVsc2UgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAzMTEzMikKKysr
IHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw4ICs0
NTksOCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQogICAgICAgICBvbGRCb3VuZHMg
PSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKIAogICAgIGlmICghcGFyZW50KCktPmlz
RnJhbWVTZXQoKSkgewotICAgICAgICBtX3dpZHRoID0gdmlldygpLT56b29tZWRXaWR0aCgpOwot
ICAgICAgICBtX2hlaWdodCA9IHZpZXcoKS0+em9vbWVkSGVpZ2h0KCk7CisgICAgICAgIG1fd2lk
dGggPSB2aWV3KCktPnZpZXdXaWR0aCgpOworICAgICAgICBtX2hlaWdodCA9IHZpZXcoKS0+dmll
d0hlaWdodCgpOwogICAgIH0KIAogICAgIHNpemVfdCBjb2xzID0gZnJhbWVTZXQoKS0+dG90YWxD
b2xzKCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiAzMTEzMikKKysrIHJl
bmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
OCBAQCB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpCiB2b2lkIFJlbmRl
ckhUTUxDYW52YXM6OmNhbnZhc1NpemVDaGFuZ2VkKCkKIHsKICAgICBJbnRTaXplIHNpemUgPSBz
dGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KG5vZGUoKSktPnNpemUoKTsKKyAgICBJbnRT
aXplIHpvb21lZFNpemUoc2l6ZS53aWR0aCgpICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpLCBz
aXplLmhlaWdodCgpICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKwogICAgIGlmIChzaXpl
ID09IGludHJpbnNpY1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiByZW5kZXJpbmcv
UmVuZGVySFRNTENhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2Fu
dmFzLmgJKHJldmlzaW9uIDMxMTMyKQorKysgcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotICAgIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7
CiAKLSAgICBjbGFzcyBSZW5kZXJIVE1MQ2FudmFzIDogcHVibGljIFJlbmRlclJlcGxhY2VkIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFJlbmRlckhUTUxDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQq
KTsKK2NsYXNzIFJlbmRlckhUTUxDYW52YXMgOiBwdWJsaWMgUmVuZGVyUmVwbGFjZWQgeworcHVi
bGljOgorICAgIFJlbmRlckhUTUxDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQqKTsKIAotICAgICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
SFRNTENhbnZhcyI7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVySFRNTENhbnZhcyI7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpOworICAg
IHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSk7CiAKLSAgICAgICAgdm9pZCBjYW52YXNTaXplQ2hhbmdlZCgpOwotICAgIH07Cisg
ICAgdm9pZCBjYW52YXNTaXplQ2hhbmdlZCgpOworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpIHsgY2FudmFzU2l6ZUNoYW5nZWQoKTsgfQor
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNp
b24gMzExMzIpCisrKyByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NCw4ICs5NCw4IEBAIGJvb2wgUmVuZGVySW1hZ2U6OnNldEltYWdlU2l6ZUZvckFsdFRleHQK
ICAgICB9CiAgIAogICAgIGlmIChuZXdJbWFnZSkgewotICAgICAgICBpbWFnZVdpZHRoICs9IG5l
d0ltYWdlLT5pbWFnZSgpLT53aWR0aCgpOwotICAgICAgICBpbWFnZUhlaWdodCArPSBuZXdJbWFn
ZS0+aW1hZ2UoKS0+aGVpZ2h0KCk7CisgICAgICAgIGltYWdlV2lkdGggKz0gbmV3SW1hZ2UtPmlt
YWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRoKCk7CisgICAgICAgIGltYWdl
SGVpZ2h0ICs9IG5ld0ltYWdlLT5pbWFnZVNpemUoc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS5o
ZWlnaHQoKTsKICAgICB9CiAgIAogICAgIC8vIHdlIGhhdmUgYW4gYWx0IGFuZCB0aGUgdXNlciBt
ZWFudCBpdCAoaXRzIG5vdCBhIHRleHQgd2UgaW52ZW50ZWQpCkBAIC0xMjEsNyArMTIxLDcgQEAg
dm9pZCBSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYQogICAgIGlmIChoYXNCb3hE
ZWNvcmF0aW9ucygpKQogICAgICAgICBSZW5kZXJSZXBsYWNlZDo6aW1hZ2VDaGFuZ2VkKG5ld0lt
YWdlKTsKICAgICAKLSAgICBpZiAobmV3SW1hZ2UgIT0gbV9jYWNoZWRJbWFnZSkKKyAgICBpZiAo
bmV3SW1hZ2UgIT0gbV9jYWNoZWRJbWFnZSB8fCAhbmV3SW1hZ2UpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGJvb2wgaW1hZ2VTaXplQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMTMzLDkgKzEzMyw5IEBA
IHZvaWQgUmVuZGVySW1hZ2U6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWEKICAgICBib29sIHNob3Vs
ZFJlcGFpbnQgPSB0cnVlOwogCiAgICAgLy8gSW1hZ2UgZGltZW5zaW9ucyBoYXZlIGJlZW4gY2hh
bmdlZCwgc2VlIHdoYXQgbmVlZHMgdG8gYmUgZG9uZQotICAgIGlmIChuZXdJbWFnZS0+aW1hZ2VT
aXplKCkgIT0gaW50cmluc2ljU2l6ZSgpIHx8IGltYWdlU2l6ZUNoYW5nZWQpIHsKKyAgICBpZiAo
bmV3SW1hZ2UtPmltYWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpICE9IGludHJpbnNp
Y1NpemUoKSB8fCBpbWFnZVNpemVDaGFuZ2VkKSB7CiAgICAgICAgIGlmICghbmV3SW1hZ2UtPmVy
cm9yT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHNldEludHJpbnNpY1NpemUobmV3SW1hZ2UtPmlt
YWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIHNldEludHJpbnNpY1NpemUobmV3SW1hZ2UtPmltYWdl
U2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKIAogICAgICAgICAvLyBJbiB0aGUgY2Fz
ZSBvZiBnZW5lcmF0ZWQgaW1hZ2UgY29udGVudCB1c2luZyA6YmVmb3JlLzphZnRlciwgd2UgbWln
aHQgbm90IGJlIGluIHRoZQogICAgICAgICAvLyByZW5kZXIgdHJlZSB5ZXQuICBJbiB0aGF0IGNh
c2UsIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgY2hlY2sgZm9yIGxheW91dCwgc2luY2Ug
d2UnbGwgZ2V0IGEKQEAgLTM0Miw3ICszNDIsNyBAQCBpbnQgUmVuZGVySW1hZ2U6OmNhbGNSZXBs
YWNlZFdpZHRoKCkgY29uCiAgICAgaWYgKGlzV2lkdGhTcGVjaWZpZWQoKSkKICAgICAgICAgd2lk
dGggPSBjYWxjUmVwbGFjZWRXaWR0aFVzaW5nKHN0eWxlKCktPndpZHRoKCkpOwogICAgIGVsc2Ug
aWYgKG1fY2FjaGVkSW1hZ2UgJiYgbV9jYWNoZWRJbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6
ZSgpKQotICAgICAgICB3aWR0aCA9IG1fY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZSgpLndpZHRoKCk7
CisgICAgICAgIHdpZHRoID0gbV9jYWNoZWRJbWFnZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkud2lkdGgoKTsKICAgICBlbHNlIGlmIChtX2NhY2hlZEltYWdlICYmIG1fY2Fj
aGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpKQogICAgICAgICB3aWR0aCA9IDA7IC8v
IElmIHRoZSBpbWFnZSBpcyByZWxhdGl2ZWx5LXNpemVkLCBzZXQgdGhlIHdpZHRoIHRvIDAgdW50
aWwgdGhlcmUgaXMgYSBzZXQgY29udGFpbmVyIHNpemUuCiAgICAgZWxzZQpAQCAtMzYwLDcgKzM2
MCw3IEBAIGludCBSZW5kZXJJbWFnZTo6Y2FsY1JlcGxhY2VkSGVpZ2h0KCkgY28KICAgICBpZiAo
aXNIZWlnaHRTcGVjaWZpZWQoKSkKICAgICAgICAgaGVpZ2h0ID0gY2FsY1JlcGxhY2VkSGVpZ2h0
VXNpbmcoc3R5bGUoKS0+aGVpZ2h0KCkpOwogICAgIGVsc2UgaWYgKG1fY2FjaGVkSW1hZ2UgJiYg
bV9jYWNoZWRJbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpKQotICAgICAgICBoZWlnaHQg
PSBtX2NhY2hlZEltYWdlLT5pbWFnZVNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgaGVpZ2h0ID0g
bV9jYWNoZWRJbWFnZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0
KCk7CiAgICAgZWxzZSBpZiAobV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5pbWFnZUhh
c1JlbGF0aXZlSGVpZ2h0KCkpCiAgICAgICAgIGhlaWdodCA9IDA7IC8vIElmIHRoZSBpbWFnZSBp
cyByZWxhdGl2ZWx5LXNpemVkLCBzZXQgdGhlIGhlaWdodCB0byAwIHVudGlsIHRoZXJlIGlzIGEg
c2V0IGNvbnRhaW5lciBzaXplLgogICAgIGVsc2UKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiAzMTEz
MikKKysrIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3
Myw4IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZEltYWdlICYmIG1fY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKTsg
fQogCisgICAgdmlydHVhbCB2b2lkIGludHJpbnNpY1NpemVDaGFuZ2VkKCkgeyBpbWFnZUNoYW5n
ZWQobV9jYWNoZWRJbWFnZSk7IH0KKwogcHJpdmF0ZToKICAgICBpbnQgY2FsY0FzcGVjdFJhdGlv
V2lkdGgoKSBjb25zdDsKICAgICBpbnQgY2FsY0FzcGVjdFJhdGlvSGVpZ2h0KCkgY29uc3Q7Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAzMTEzMikKKysrIHJlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMzLDggKzYzMyw4IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkKICAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0
eSgpKTsKIAogICAgIGlmIChpc0ltYWdlKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG1faW1hZ2Ut
PmltYWdlKCktPndpZHRoKCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9pbWFnZS0+aW1hZ2UoKS0+
aGVpZ2h0KCk7CisgICAgICAgIG1fd2lkdGggPSBtX2ltYWdlLT5pbWFnZVNpemUoc3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpOworICAgICAgICBtX2hlaWdodCA9IG1faW1hZ2UtPmlt
YWdlU2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLmhlaWdodCgpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIG1fd2lkdGggPSBtaW5QcmVmV2lkdGgoKTsKICAgICAgICAgbV9oZWlnaHQgPSBz
dHlsZSgpLT5mb250KCkuaGVpZ2h0KCk7CkBAIC02NTgsNyArNjU4LDcgQEAgdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjppbWFnZUNoYW5nZWQoQ2FjaAogICAgIGlmIChvICE9IG1faW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX3dpZHRoICE9IG1faW1hZ2UtPmltYWdlU2l6ZSgpLndp
ZHRoKCkgfHwgbV9oZWlnaHQgIT0gbV9pbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkgfHwgbV9p
bWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQorICAgIGlmIChtX3dpZHRoICE9IG1faW1hZ2UtPmltYWdl
U2l6ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRoKCkgfHwgbV9oZWlnaHQgIT0gbV9p
bWFnZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0KCkgfHwgbV9p
bWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0
aHNSZWNhbGMoKTsKICAgICBlbHNlCiAgICAgICAgIHJlcGFpbnQoKTsKQEAgLTgyMiw3ICs4MjIs
NyBAQCBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkgY29uc3QKIEludFJlY3QgUmVu
ZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXJrZXJSZWN0KCkKIHsKICAgICBpZiAoaXNJbWFn
ZSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdChtX3gsIG1feSwgbV9pbWFnZS0+aW1hZ2VTaXpl
KCkud2lkdGgoKSwgbV9pbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkpOworICAgICAgICByZXR1
cm4gSW50UmVjdChtX3gsIG1feSwgbV9pbWFnZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkud2lkdGgoKSwgbV9pbWFnZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkuaGVpZ2h0KCkpOwogCiAgICAgc3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBESVNDOgpJbmRleDogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDMxMTMy
KQorKysgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMyw3
ICs4MzMsNyBAQCBib29sIFJlbmRlck9iamVjdDo6bXVzdFJlcGFpbnRCYWNrZ3JvdW5kCiAKICAg
ICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGJhY2tncm91bmQgaW1hZ2UuCiAgICAgQ2Fj
aGVkSW1hZ2UqIGJnID0gYmdMYXllci0+YmFja2dyb3VuZEltYWdlKCk7Ci0gICAgYm9vbCBzaG91
bGRQYWludEJhY2tncm91bmRJbWFnZSA9IGJnICYmIGJnLT5jYW5SZW5kZXIoKTsKKyAgICBib29s
IHNob3VsZFBhaW50QmFja2dyb3VuZEltYWdlID0gYmcgJiYgYmctPmNhblJlbmRlcihzdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gVGhlc2UgYXJlIGFsd2F5cyBwZXJjZW50cyBv
ciBhdXRvLgogICAgIGlmIChzaG91bGRQYWludEJhY2tncm91bmRJbWFnZSAmJgpAQCAtODQ2LDcg
Kzg0Niw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjptdXN0UmVwYWludEJhY2tncm91bmQKICAgICBp
ZiAoc3R5bGUoKS0+aGFzQm9yZGVyKCkpIHsKICAgICAgICAgLy8gQm9yZGVyIGltYWdlcyBhcmUg
bm90IG9rLgogICAgICAgICBDYWNoZWRJbWFnZSogYm9yZGVySW1hZ2UgPSBzdHlsZSgpLT5ib3Jk
ZXJJbWFnZSgpLmltYWdlKCk7Ci0gICAgICAgIGJvb2wgc2hvdWxkUGFpbnRCb3JkZXJJbWFnZSA9
IGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLT5jYW5SZW5kZXIoKTsKKyAgICAgICAgYm9vbCBz
aG91bGRQYWludEJvcmRlckltYWdlID0gYm9yZGVySW1hZ2UgJiYgYm9yZGVySW1hZ2UtPmNhblJl
bmRlcihzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBpbWFn
ZSBoYXNuJ3QgbG9hZGVkLCB3ZSdyZSBzdGlsbCB1c2luZyB0aGUgbm9ybWFsIGJvcmRlciBzdHls
ZS4KICAgICAgICAgaWYgKHNob3VsZFBhaW50Qm9yZGVySW1hZ2UgJiYgYm9yZGVySW1hZ2UtPmlz
TG9hZGVkKCkpCkBAIC0xMjUwLDcgKzEyNTAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRC
b3JkZXIoR3JhcGhpY3NDCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBib29sIGJlZ2luLCBib29sIGVuZCkKIHsKICAgICBDYWNoZWRJbWFn
ZSogYm9yZGVySW1hZ2UgPSBzdHlsZS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgpOwotICAgIGJvb2wg
c2hvdWxkUGFpbnRCYWNrZ3JvdW5kSW1hZ2UgPSBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS0+
Y2FuUmVuZGVyKCk7CisgICAgYm9vbCBzaG91bGRQYWludEJhY2tncm91bmRJbWFnZSA9IGJvcmRl
ckltYWdlICYmIGJvcmRlckltYWdlLT5jYW5SZW5kZXIoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7
CiAgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZEltYWdlKQogICAgICAgICBzaG91bGRQYWlu
dEJhY2tncm91bmRJbWFnZSA9IHBhaW50Qm9yZGVySW1hZ2UoZ3JhcGhpY3NDb250ZXh0LCB0eCwg
dHksIHcsIGgsIHN0eWxlKTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAzMTEz
MikKKysrIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDkgKzM0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPGNv
bnN0IFJlbmRlclJlcGxhY2VkKiwgSW50UmVjdD4gT3ZlcmZsb3dSZWN0TWFwOwogc3RhdGljIE92
ZXJmbG93UmVjdE1hcCogZ092ZXJmbG93UmVjdE1hcCA9IDA7CiAKK2NvbnN0IGludCBjRGVmYXVs
dFdpZHRoID0gMzAwOworY29uc3QgaW50IGNEZWZhdWx0SGVpZ2h0ID0gMTUwOworCiBSZW5kZXJS
ZXBsYWNlZDo6UmVuZGVyUmVwbGFjZWQoTm9kZSogbm9kZSkKICAgICA6IFJlbmRlckJveChub2Rl
KQotICAgICwgbV9pbnRyaW5zaWNTaXplKDMwMCwgMTUwKQorICAgICwgbV9pbnRyaW5zaWNTaXpl
KGNEZWZhdWx0V2lkdGgsIGNEZWZhdWx0SGVpZ2h0KQogICAgICwgbV9zZWxlY3Rpb25TdGF0ZShT
ZWxlY3Rpb25Ob25lKQogICAgICwgbV9oYXNPdmVyZmxvdyhmYWxzZSkKIHsKQEAgLTU3LDcgKzYw
LDE1IEBAIFJlbmRlclJlcGxhY2VkOjp+UmVuZGVyUmVwbGFjZWQoKQogICAgIGlmIChtX2hhc092
ZXJmbG93KQogICAgICAgICBnT3ZlcmZsb3dSZWN0TWFwLT5yZW1vdmUodGhpcyk7CiB9Ci0gICAg
CisKK3ZvaWQgUmVuZGVyUmVwbGFjZWQ6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkK
K3sKKyAgICBmbG9hdCBvbGRab29tID0gc3R5bGUoKSA/IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOworICAgIFJlbmRlckJveDo6c2V0U3R5bGUo
bmV3U3R5bGUpOworICAgIGlmIChuZXdTdHlsZSAmJiBuZXdTdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
ICE9IG9sZFpvb20pCisgICAgICAgIGludHJpbnNpY1NpemVDaGFuZ2VkKCk7Cit9CisKIHZvaWQg
UmVuZGVyUmVwbGFjZWQ6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwpA
QCAtODEsNyArOTIsMTMgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCkKICAgICAKICAg
ICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9Ci0gICAgCisgCit2b2lkIFJlbmRlclJlcGxhY2Vk
OjppbnRyaW5zaWNTaXplQ2hhbmdlZCgpCit7CisgICAgbV9pbnRyaW5zaWNTaXplID0gSW50U2l6
ZShjRGVmYXVsdFdpZHRoICogc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpLCBjRGVmYXVsdEhlaWdo
dCAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7Cit9CisKIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBpZiAoIXNob3VsZFBhaW50KHBh
aW50SW5mbywgdHgsIHR5KSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCShyZXZpc2lvbiAzMTEzMikKKysr
IHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCBpbnQg
bWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCisgICAgdmlydHVh
bCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7CisKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxh
Y2VkKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSB7IH0KIApAQCAtNjcsNiArNjksNyBAQCBw
dWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEludHJpbnNpY1NpemUoY29uc3QgSW50
U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpOwogCiAgICAg
Ym9vbCBzaG91bGRQYWludChQYWludEluZm8mLCBpbnQmIHR4LCBpbnQmIHR5KTsKICAgICB2b2lk
IGFkanVzdE92ZXJmbG93Rm9yQm94U2hhZG93KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9u
IDMxMTMyKQorKysgcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTEsNiArOTEsNyBAQCBTdHlsZVZpc3VhbERhdGE6OlN0eWxlVmlzdWFsRGF0YSgpCiAgICAgLCB0
ZXh0RGVjb3JhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0aW9uKCkpCiAgICAg
LCBjb3VudGVySW5jcmVtZW50KDApCiAgICAgLCBjb3VudGVyUmVzZXQoMCkKKyAgICAsIG1fem9v
bShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSkKIHsKIH0KIApAQCAtMTA1LDYgKzEwNiw3IEBA
IFN0eWxlVmlzdWFsRGF0YTo6U3R5bGVWaXN1YWxEYXRhKGNvbnN0IFMKICAgICAsIHRleHREZWNv
cmF0aW9uKG8udGV4dERlY29yYXRpb24pCiAgICAgLCBjb3VudGVySW5jcmVtZW50KG8uY291bnRl
ckluY3JlbWVudCkKICAgICAsIGNvdW50ZXJSZXNldChvLmNvdW50ZXJSZXNldCkKKyAgICAsIG1f
em9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSkKIHsKIH0KIApAQCAtODM0LDYgKzgzNiw3
IEBAIFN0eWxlSW5oZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZWREYXRhKCkKICAgICAsIGxpbmVf
aGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKQogICAgICwgc3R5bGVfaW1h
Z2UoUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0U3R5bGVJbWFnZSgpKQogICAgICwgY29sb3IoUmVu
ZGVyU3R5bGU6OmluaXRpYWxDb2xvcigpKQorICAgICwgbV9lZmZlY3RpdmVab29tKFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpKQogICAgICwgaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZyhSZW5k
ZXJTdHlsZTo6aW5pdGlhbEhvcml6b250YWxCb3JkZXJTcGFjaW5nKCkpCiAgICAgLCB2ZXJ0aWNh
bF9ib3JkZXJfc3BhY2luZyhSZW5kZXJTdHlsZTo6aW5pdGlhbFZlcnRpY2FsQm9yZGVyU3BhY2lu
ZygpKQogICAgICwgd2lkb3dzKFJlbmRlclN0eWxlOjppbml0aWFsV2lkb3dzKCkpCkBAIC04NTQs
NiArODU3LDcgQEAgU3R5bGVJbmhlcml0ZWREYXRhOjpTdHlsZUluaGVyaXRlZERhdGEoYwogICAg
ICwgY3Vyc29yRGF0YShvLmN1cnNvckRhdGEpCiAgICAgLCBmb250KG8uZm9udCkKICAgICAsIGNv
bG9yKG8uY29sb3IpCisgICAgLCBtX2VmZmVjdGl2ZVpvb20oby5tX2VmZmVjdGl2ZVpvb20pCiAg
ICAgLCBob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nKG8uaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2lu
ZykKICAgICAsIHZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nKG8udmVydGljYWxfYm9yZGVyX3NwYWNp
bmcpCiAgICAgLCB3aWRvd3Moby53aWRvd3MpCkBAIC04ODAsNiArODg0LDcgQEAgYm9vbCBTdHls
ZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29ucwogICAgICAgICBjdXJzb3JEYXRhRXF2dWlh
bGVudChjdXJzb3JEYXRhLmdldCgpLCBvLmN1cnNvckRhdGEuZ2V0KCkpICYmCiAgICAgICAgIGZv
bnQgPT0gby5mb250ICYmCiAgICAgICAgIGNvbG9yID09IG8uY29sb3IgJiYKKyAgICAgICAgbV9l
ZmZlY3RpdmVab29tID09IG8ubV9lZmZlY3RpdmVab29tICYmCiAgICAgICAgIGhvcml6b250YWxf
Ym9yZGVyX3NwYWNpbmcgPT0gby5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nICYmCiAgICAgICAg
IHZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nID09IG8udmVydGljYWxfYm9yZGVyX3NwYWNpbmcgJiYK
ICAgICAgICAgd2lkb3dzID09IG8ud2lkb3dzICYmCkBAIC0xMjc4LDYgKzEyODMsOSBAQCBSZW5k
ZXJTdHlsZTo6RGlmZiBSZW5kZXJTdHlsZTo6ZGlmZihjb25zCiAgICAgICAgIHZpc3VhbC0+Y291
bnRlclJlc2V0ICE9IG90aGVyLT52aXN1YWwtPmNvdW50ZXJSZXNldCkKICAgICAgICAgcmV0dXJu
IExheW91dDsKIAorICAgIGlmIChpbmhlcml0ZWQtPm1fZWZmZWN0aXZlWm9vbSAhPSBvdGhlci0+
aW5oZXJpdGVkLT5tX2VmZmVjdGl2ZVpvb20pCisgICAgICAgIHJldHVybiBMYXlvdXQ7CisKICAg
ICAvLyBNYWtlIHN1cmUgdGhlc2UgbGVmdC90b3AvcmlnaHQvYm90dG9tIGNoZWNrcyBzdGF5IGJl
bG93IGFsbCBsYXlvdXQgY2hlY2tzIGFuZCBhYm92ZQogICAgIC8vIGFsbCB2aXNpYmxlIGNoZWNr
cy4KICAgICBpZiAob3RoZXItPnBvc2l0aW9uKCkgIT0gU3RhdGljUG9zaXRpb24pIHsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJT
dHlsZS5oCShyZXZpc2lvbiAzMTEzMikKKysrIHJlbmRlcmluZy9SZW5kZXJTdHlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjksMTcgKzQyOSwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
IGhhc0NsaXAgPT0gby5oYXNDbGlwICYmCiAgICAgICAgICAgICAgICAgIGNvdW50ZXJJbmNyZW1l
bnQgPT0gby5jb3VudGVySW5jcmVtZW50ICYmCiAgICAgICAgICAgICAgICAgIGNvdW50ZXJSZXNl
dCA9PSBvLmNvdW50ZXJSZXNldCAmJgotICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbiA9
PSBvLnRleHREZWNvcmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb24gPT0g
by50ZXh0RGVjb3JhdGlvbiAmJgorICAgICAgICAgICAgICAgICBtX3pvb20gPT0gby5tX3pvb20p
OwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVWaXN1YWxEYXRhJiBvKSBj
b25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CiAKICAgICBMZW5ndGhCb3ggY2xpcDsKICAg
ICBib29sIGhhc0NsaXAgOiAxOwogICAgIHVuc2lnbmVkIHRleHREZWNvcmF0aW9uIDogNDsgLy8g
VGV4dCBkZWNvcmF0aW9ucyBkZWZpbmVkICpvbmx5KiBieSB0aGlzIGVsZW1lbnQuCi0KKyAgICAK
ICAgICBzaG9ydCBjb3VudGVySW5jcmVtZW50OyAvLyBvaywgc28gdGhlc2UgYXJlIG5vdCB2aXN1
YWwgbW9kZSBzcGVjaWZpYwogICAgIHNob3J0IGNvdW50ZXJSZXNldDsgICAgIC8vIGNhbid0IGdv
IHRvIGluaGVyaXRlZCwgc2luY2UgdGhlc2UgYXJlIG5vdCBpbmhlcml0ZWQKIAorICAgIGZsb2F0
IG1fem9vbTsKKwogcHJpdmF0ZToKICAgICBTdHlsZVZpc3VhbERhdGEoKTsKICAgICBTdHlsZVZp
c3VhbERhdGEoY29uc3QgU3R5bGVWaXN1YWxEYXRhJik7ICAgIApAQCAtMTI4Miw2ICsxMjg1LDgg
QEAgcHVibGljOgogICAgIEZvbnQgZm9udDsKICAgICBDb2xvciBjb2xvcjsKICAgICAKKyAgICBm
bG9hdCBtX2VmZmVjdGl2ZVpvb207CisKICAgICBzaG9ydCBob3Jpem9udGFsX2JvcmRlcl9zcGFj
aW5nOwogICAgIHNob3J0IHZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nOwogICAgIApAQCAtMTcwOCw2
ICsxNzEzLDkgQEAgcHVibGljOgogICAgIGludCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJu
IGluaGVyaXRlZC0+Zm9udC53b3JkU3BhY2luZygpOyB9CiAgICAgaW50IGxldHRlclNwYWNpbmco
KSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3BhY2luZygpOyB9CiAKKyAg
ICBmbG9hdCB6b29tKCkgY29uc3QgeyByZXR1cm4gdmlzdWFsLT5tX3pvb207IH0KKyAgICBmbG9h
dCBlZmZlY3RpdmVab29tKCkgY29uc3QgeyAgcmV0dXJuIGluaGVyaXRlZC0+bV9lZmZlY3RpdmVa
b29tOyB9CisgICAgCiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihpbmhlcml0ZWRfZmxhZ3MuX2RpcmVjdGlvbik7
IH0KICAgICBMZW5ndGggbGluZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+bGlu
ZV9oZWlnaHQ7IH0KIApAQCAtMTk4NCw2ICsxOTkyLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VGV4dERlY29yYXRpb24oaW50IHYpIHsgU0VUX1ZBUih2aXN1YWwsIHRleHREZWNvcmF0aW9uLCB2
KTsgfQogICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gdikgeyBpbmhlcml0ZWRf
ZmxhZ3MuX2RpcmVjdGlvbiA9IHY7IH0KICAgICB2b2lkIHNldExpbmVIZWlnaHQoTGVuZ3RoIHYp
IHsgU0VUX1ZBUihpbmhlcml0ZWQsbGluZV9oZWlnaHQsdikgfQorICAgIHZvaWQgc2V0Wm9vbShm
bG9hdCBmKSB7IFNFVF9WQVIodmlzdWFsLCBtX3pvb20sIGYpOyBzZXRFZmZlY3RpdmVab29tKGVm
ZmVjdGl2ZVpvb20oKSAqIHpvb20oKSk7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQgZikgeyBTRVRfVkFSKGluaGVyaXRlZCwgbV9lZmZlY3RpdmVab29tLCBmKSB9CiAKICAgICB2
b2lkIHNldFdoaXRlU3BhY2UoRVdoaXRlU3BhY2UgdikgeyBpbmhlcml0ZWRfZmxhZ3MuX3doaXRl
X3NwYWNlID0gdjsgfQogCkBAIC0yMjM1LDYgKzIyNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IExlbmd0aCBpbml0aWFsTGluZUhlaWdodCgpIHsgcmV0dXJuIExlbmd0aCgtMTAwLjAsIFBlcmNl
bnQpOyB9CiAgICAgc3RhdGljIEVUZXh0QWxpZ24gaW5pdGlhbFRleHRBbGlnbigpIHsgcmV0dXJu
IFRBQVVUTzsgfQogICAgIHN0YXRpYyBFVGV4dERlY29yYXRpb24gaW5pdGlhbFRleHREZWNvcmF0
aW9uKCkgeyByZXR1cm4gVEROT05FOyB9CisgICAgc3RhdGljIGZsb2F0IGluaXRpYWxab29tKCkg
eyByZXR1cm4gMS4wZjsgfQogICAgIHN0YXRpYyBpbnQgaW5pdGlhbE91dGxpbmVPZmZzZXQoKSB7
IHJldHVybiAwOyB9CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxPcGFjaXR5KCkgeyByZXR1cm4g
MS4wZjsgfQogICAgIHN0YXRpYyBFQm94QWxpZ25tZW50IGluaXRpYWxCb3hBbGlnbigpIHsgcmV0
dXJuIEJTVFJFVENIOyB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAJKHJldmlzaW9uIDMxMTMyKQor
KysgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyAr
ODUsNyBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ29sOjphYnNvbHV0ZUNsaXBwZWRPCiAKIHZvaWQg
UmVuZGVyVGFibGVDb2w6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSogaW1hZ2UpCiB7Ci0gICAg
aWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhblJlbmRlcigpIHx8ICFwYXJlbnQoKSkKKyAgICBpZiAo
IWltYWdlIHx8ICFpbWFnZS0+Y2FuUmVuZGVyKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgfHwg
IXBhcmVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogUmVwYWludCBvbmx5
IHRoZSByZWN0IHRoZSBpbWFnZSBwYWludHMgaW4uCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJl
dmlzaW9uIDMxMTMyKQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50KFBhaW50
SW5mbyYgcGEKIAogdm9pZCBSZW5kZXJUYWJsZVJvdzo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdl
KiBpbWFnZSkKIHsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FuUmVuZGVyKCkgfHwgIXBh
cmVudCgpKQorICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYW5SZW5kZXIoc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKSB8fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAv
LyBGSVhNRTogRXhhbWluZSBjZWxscyBhbmQgcmVwYWludCBvbmx5IHRoZSByZWN0IHRoZSBpbWFn
ZSBwYWludHMgaW4uCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gMzEx
MzIpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcwLDcgKzk3MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludElu
Zm8KIAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSog
aW1hZ2UpCiB7Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhblJlbmRlcigpIHx8ICFwYXJl
bnQoKSkKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FuUmVuZGVyKHN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkgfHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8g
RklYTUU6IEV4YW1pbmUgY2VsbHMgYW5kIHJlcGFpbnQgb25seSB0aGUgcmVjdCB0aGUgaW1hZ2Ug
cGFpbnRzIGluLgpJbmRleDogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlclZpZGVvLmgJKHJldmlzaW9uIDMxMTMyKQorKysgcmVuZGVyaW5nL1Jl
bmRlclZpZGVvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDkgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpIHsgdmlkZW9TaXplQ2hhbmdlZCgpOyB9CisK
IHByaXZhdGU6CiAgICAgaW50IGNhbGNBc3BlY3RSYXRpb1dpZHRoKCkgY29uc3Q7CiAgICAgaW50
IGNhbGNBc3BlY3RSYXRpb0hlaWdodCgpIGNvbnN0OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24g
MzExMzIpCisrKyByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDEzICs3MywxMyBAQCBSZW5kZXJWaWV3Ojp+UmVuZGVyVmlldygpCiB2b2lkIFJlbmRlclZpZXc6
OmNhbGNIZWlnaHQoKQogewogICAgIGlmICghcHJpbnRpbmcoKSAmJiBtX2ZyYW1lVmlldykKLSAg
ICAgICAgbV9oZWlnaHQgPSB6b29tZWRIZWlnaHQoKTsKKyAgICAgICAgbV9oZWlnaHQgPSB2aWV3
SGVpZ2h0KCk7CiB9CiAKIHZvaWQgUmVuZGVyVmlldzo6Y2FsY1dpZHRoKCkKIHsKICAgICBpZiAo
IXByaW50aW5nKCkgJiYgbV9mcmFtZVZpZXcpCi0gICAgICAgIG1fd2lkdGggPSB6b29tZWRXaWR0
aCgpOworICAgICAgICBtX3dpZHRoID0gdmlld1dpZHRoKCk7CiAgICAgbV9tYXJnaW5MZWZ0ID0g
MDsKICAgICBtX21hcmdpblJpZ2h0ID0gMDsKIH0KQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBSZW5k
ZXJWaWV3OjpsYXlvdXQoKQogICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRo
ID0gbV93aWR0aDsKIAogICAgIC8vIFVzZSBjYWxjV2lkdGgvSGVpZ2h0IHRvIGdldCB0aGUgbmV3
IHdpZHRoL2hlaWdodCwgc2luY2UgdGhpcyB3aWxsIHRha2UgdGhlIGZ1bGwgcGFnZSB6b29tIGZh
Y3RvciBpbnRvIGFjY291bnQuCi0gICAgYm9vbCByZWxheW91dENoaWxkcmVuID0gIXByaW50aW5n
KCkgJiYgKCFtX2ZyYW1lVmlldyB8fCBtX3dpZHRoICE9IHpvb21lZFdpZHRoKCkgfHwgbV9oZWln
aHQgIT0gem9vbWVkSGVpZ2h0KCkpOworICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9ICFwcmlu
dGluZygpICYmICghbV9mcmFtZVZpZXcgfHwgbV93aWR0aCAhPSB2aWV3V2lkdGgoKSB8fCBtX2hl
aWdodCAhPSB2aWV3SGVpZ2h0KCkpOwogICAgIGlmIChyZWxheW91dENoaWxkcmVuKQogICAgICAg
ICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAKQEAgLTUwOCwyNSArNTA4
LDE5IEBAIGludCBSZW5kZXJWaWV3Ojpkb2NXaWR0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHc7CiB9
CiAKLWludCBSZW5kZXJWaWV3Ojp6b29tZWRIZWlnaHQoKSBjb25zdAoraW50IFJlbmRlclZpZXc6
OnZpZXdIZWlnaHQoKSBjb25zdAogewogICAgIGludCBoZWlnaHQgPSAwOwotICAgIGlmICghcHJp
bnRpbmcoKSAmJiBtX2ZyYW1lVmlldykgeworICAgIGlmICghcHJpbnRpbmcoKSAmJiBtX2ZyYW1l
VmlldykKICAgICAgICAgaGVpZ2h0ID0gbV9mcmFtZVZpZXctPnZpc2libGVIZWlnaHQoKTsKLSAg
ICAgICAgaWYgKG1fZnJhbWVWaWV3LT5mcmFtZSgpLT5zaG91bGRBcHBseVBhZ2Vab29tKCkpCi0g
ICAgICAgICAgICBoZWlnaHQgLz0gbV9mcmFtZVZpZXctPmZyYW1lKCktPnpvb21GYWN0b3IoKTsg
Ly8gRklYTUU6IFdpbGwgaGF2ZSByb3VuZGluZyBlcnJvcnMuCi0gICAgfQogICAgIHJldHVybiBo
ZWlnaHQ7CiB9CiAKLWludCBSZW5kZXJWaWV3Ojp6b29tZWRXaWR0aCgpIGNvbnN0CitpbnQgUmVu
ZGVyVmlldzo6dmlld1dpZHRoKCkgY29uc3QKIHsKICAgICBpbnQgd2lkdGggPSAwOwotICAgIGlm
ICghcHJpbnRpbmcoKSAmJiBtX2ZyYW1lVmlldykgeworICAgIGlmICghcHJpbnRpbmcoKSAmJiBt
X2ZyYW1lVmlldykKICAgICAgICAgd2lkdGggPSBtX2ZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCk7
Ci0gICAgICAgIGlmIChtX2ZyYW1lVmlldy0+ZnJhbWUoKS0+c2hvdWxkQXBwbHlQYWdlWm9vbSgp
KQotICAgICAgICAgICAgd2lkdGggLz0gbV9mcmFtZVZpZXctPmZyYW1lKCktPnpvb21GYWN0b3Io
KTsgLy8gRklYTUU6IFdpbGwgaGF2ZSByb3VuZGluZyBlcnJvcnMuCi0gICAgfQogICAgIHJldHVy
biB3aWR0aDsKIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiAzMTEzMikKKysrIHJlbmRlcmluZy9S
ZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgUmVu
ZGVyVmlld19oCiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIApAQCAt
NDgsMTAgKzQ5LDEyIEBAIHB1YmxpYzoKICAgICBpbnQgZG9jSGVpZ2h0KCkgY29uc3Q7CiAgICAg
aW50IGRvY1dpZHRoKCkgY29uc3Q7CiAKLSAgICAvLyBUaGUgc2FtZSBhcyB0aGUgRnJhbWVWaWV3
J3MgdmlzaWJsZUhlaWdodC92aXNpYmxlV2lkdGggd2l0aCB0aGUgem9vbSBmYWN0b3IgYXBwbGll
ZC4KLSAgICBpbnQgem9vbWVkSGVpZ2h0KCkgY29uc3Q7Ci0gICAgaW50IHpvb21lZFdpZHRoKCkg
Y29uc3Q7CisgICAgLy8gVGhlIHNhbWUgYXMgdGhlIEZyYW1lVmlldydzIHZpc2libGVIZWlnaHQv
dmlzaWJsZVdpZHRoIGJ1dCB3aXRoIG51bGwgY2hlY2sgZ3VhcmRzLgorICAgIGludCB2aWV3SGVp
Z2h0KCkgY29uc3Q7CisgICAgaW50IHZpZXdXaWR0aCgpIGNvbnN0OwogICAgIAorICAgIGZsb2F0
IHpvb21GYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lVmlldy0+ZnJhbWUoKSAmJiBtX2Zy
YW1lVmlldy0+ZnJhbWUoKS0+c2hvdWxkQXBwbHlQYWdlWm9vbSgpID8gbV9mcmFtZVZpZXctPmZy
YW1lKCktPnpvb21GYWN0b3IoKSA6IDEuMGY7IH0KKwogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXc7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNP
dmVyaGFuZ2luZ0Zsb2F0cygpIHsgcmV0dXJuIGZhbHNlOyB9Cg==
</data>
<flag name="review"
          id="8695"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>