<?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>212324</bug_id>
          
          <creation_ts>2020-05-24 05:51:18 -0700</creation_ts>
          <short_desc>[GTK4] Add support for touch events</short_desc>
          <delta_ts>2021-05-24 07:06:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>210100</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alicem</cc>
    
    <cc>annulen</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>carlosg</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1655703</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-24 05:51:18 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756220</commentid>
    <comment_count>1</comment_count>
      <attachid>427570</attachid>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2021-05-03 10:20:23 -0700</bug_when>
    <thetext>Created attachment 427570
Patch, rewrite GTK gesture support to work similarly in GTK3/4

Here&apos;s a (somewhat big) patch that rewrites touch and touchpad gesture handling so it&apos;s able to work on both GTK3 and GTK4 with the minimal amount of version-specific code. I believed this is the path of least resistance, rather than introducing a larger maze of &quot;#if USE(GTK4)&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756464</commentid>
    <comment_count>2</comment_count>
    <who name="Alice Mikhaylenko">alicem</who>
    <bug_when>2021-05-04 00:54:48 -0700</bug_when>
    <thetext>Oh awesome! Even the navigation gesture is ported.

I tried to port it at some point and gave up with how touch sequences work with GTK4. I see this indeed required much bigger changes than what I did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756465</commentid>
    <comment_count>3</comment_count>
      <attachid>427570</attachid>
    <who name="Alice Mikhaylenko">alicem</who>
    <bug_when>2021-05-04 00:59:43 -0700</bug_when>
    <thetext>Comment on attachment 427570
Patch, rewrite GTK gesture support to work similarly in GTK3/4

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

&gt; Source/WebKit/UIProcess/gtk/ViewGestureControllerGtk.cpp:417
&gt; +    graphene_point_t translation = { static_cast&lt;float&gt;(swipingLayerOffset), 0 };

Can we use things like &amp;GRAPHENE_POINT_INIT() in WebKit? Then it could be like

`gtk_snapshot_translate(snapshot, &amp;GRAPHENE_POINT_INIT (whatever, 0));`

Also, any reason to use `static_cast&lt;float&gt;` here but `(float)` below?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756466</commentid>
    <comment_count>4</comment_count>
    <who name="Alice Mikhaylenko">alicem</who>
    <bug_when>2021-05-04 01:00:22 -0700</bug_when>
    <thetext>There are things like not using Cairo to draw the old page and the drop shadow, but I can port those myself later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756476</commentid>
    <comment_count>5</comment_count>
      <attachid>427570</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-04 01:59:39 -0700</bug_when>
    <thetext>Comment on attachment 427570
Patch, rewrite GTK gesture support to work similarly in GTK3/4

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

Looks great, I&apos;m adding just a few comments. Patch needs to be rebased to apply on current trunk.

&gt; Source/WebKit/ChangeLog:27
&gt; +        No new tests, existing tests should catch regressions.

Unfortunately we no longer run touch event tests, because touch events are now enabled at runtime depending on the hardware. So, we will some need manual testing here.

&gt; Source/WebKit/PlatformGTK.cmake:39
&gt; +list(APPEND WebKit_SOURCES
&gt; +    UIProcess/ViewGestureController.cpp
&gt;  
&gt; -        UIProcess/gtk/ViewGestureControllerGtk.cpp
&gt; +    UIProcess/gtk/ViewGestureControllerGtk.cpp

I think these are here only because they&apos;re conditionally added to the buil, so they can be moved to SourceGTK.txt

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:756
&gt; +    auto* pageSnapshot = gtk_snapshot_new();
&gt; +    webViewBase-&gt;priv-&gt;acceleratedBackingStore-&gt;snapshot(pageSnapshot);

Can we do this also depending on isShowingNavigationGestureSnapshot? or isn&apos;t it worth it?

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:759
&gt; +    auto* pageRenderNode = gtk_snapshot_free_to_node(pageSnapshot);
&gt; +    if (pageRenderNode) {

if (auto* pageRenderNode = gtk_snapshot_free_to_node(pageSnapshot))

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:766
&gt; +    }

Where&apos;s pageRenderNode freed?

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1497
&gt; +static void appendTouchEvent(WebKitWebViewBase* webViewBase, Vector&lt;WebPlatformTouchPoint&gt;&amp; touchPoints, GdkEvent* event, WebPlatformTouchPoint::TouchPointState state)

Make this receive a GtkWidget* and we avoid two casts below

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1520
&gt; +    GdkEventType type = gdk_event_get_event_type(event);
&gt; +    switch (type) {

switch (gdk_event_get_event_type(event)) {

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1567
&gt; +        if (!priv-&gt;touchEvents.size())

if (priv-&gt;touchEvents.isEmpty())

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1587
&gt; -        break;
&gt; +        return GDK_EVENT_PROPAGATE;

Do we need to chain up in gtk3?

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1843
&gt; +    auto* page = webkitWebViewBaseGetPage(webViewBase);
&gt; +    ASSERT(page);

Use priv-&gt;pageProxy directly here.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1860
&gt; +    auto* page = webkitWebViewBaseGetPage(webViewBase);
&gt; +    ASSERT(page);

Ditto.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1866
&gt; +    double pageScale = priv-&gt;initialZoomScale * scale;
&gt; +    if (pageScale &lt; 1.0)
&gt; +        pageScale = 1.0;
&gt; +    if (pageScale &gt; 3.0)
&gt; +        pageScale = 3.0;

auto pageScale = clampTo&lt;double&gt;(priv-&gt;initialZoomScale * scale, 1, 3);

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1881
&gt; +    WebKitWebViewBasePrivate* priv = webViewBase-&gt;priv;
&gt; +    priv-&gt;isLongPressed = true;

webViewBase-&gt;priv-&gt;isLongPressed = true;

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1887
&gt; +    WebKitWebViewBasePrivate* priv = webViewBase-&gt;priv;
&gt; +    priv-&gt;isLongPressed = false;

Same here, we don&apos;t need the local variable just for a single line

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1890
&gt; +static void webkitWebViewBaseTouchRelease(WebKitWebViewBase* webViewBase, int nPress, double x, double y, GtkGesture*gesture)

GtkGesture*gesture -&gt; GtkGesture* gesture

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1913
&gt; +    GdkModifierType modifiers;
&gt; +#if USE(GTK4)
&gt; +    modifiers = gtk_event_controller_get_current_event_state(GTK_EVENT_CONTROLLER(gesture));
&gt; +#else
&gt; +    gtk_get_current_event_state(&amp;modifiers);
&gt; +#endif

Add gtk_event_controller_get_current_event_state() impl for GTK3 in Source/WebCore/platform/gtk/GtkVersioning.h and we don&apos;t need ifdefs here.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1915
&gt; +    webkitWebViewBaseSynthesizeMouseEvent(webViewBase, MouseEventType::Motion, 0, 0, x, y, modifiers, nPress, &quot;touch&quot;);

Use touchPointerEventType() instead of &quot;touch&quot;

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1944
&gt; +        if (!gtk_drag_check_threshold(GTK_WIDGET(webViewBase), 0, 0, (int)offsetX, (int)offsetY))

Use static_cast&lt;int&gt;()

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1971
&gt; +#if USE(GTK4)
&gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_event_controller_get_current_event_time(GTK_EVENT_CONTROLLER(gesture)));
&gt; +#else
&gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_get_current_event_time());
&gt; +#endif

Add a an implementation of gtk_event_controller_get_current_event_time() for gtk3 too.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2083
&gt; +    priv-&gt;touchGestureGroup = gtk_gesture_zoom_new(viewWidget);

In gtk4 ownership is transferred to GtkWidget, but where is this freed in gtk3?

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2092
&gt; +    auto* gesture = gtk_gesture_long_press_new(viewWidget);

Same for the gesture here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757348</commentid>
    <comment_count>6</comment_count>
      <attachid>427869</attachid>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2021-05-06 04:31:26 -0700</bug_when>
    <thetext>Created attachment 427869
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757356</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2021-05-06 05:04:31 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #5)
&gt; Comment on attachment 427570 [details]
&gt; Patch, rewrite GTK gesture support to work similarly in GTK3/4
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427570&amp;action=review
&gt; 
&gt; Looks great, I&apos;m adding just a few comments. Patch needs to be rebased to
&gt; apply on current trunk.
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:27
&gt; &gt; +        No new tests, existing tests should catch regressions.
&gt; 
&gt; Unfortunately we no longer run touch event tests, because touch events are
&gt; now enabled at runtime depending on the hardware. So, we will some need
&gt; manual testing here.

Oh, unfortunate, reverted that to &quot;oops&quot;.

&gt; 
&gt; &gt; Source/WebKit/PlatformGTK.cmake:39
&gt; &gt; +list(APPEND WebKit_SOURCES
&gt; &gt; +    UIProcess/ViewGestureController.cpp
&gt; &gt;  
&gt; &gt; -        UIProcess/gtk/ViewGestureControllerGtk.cpp
&gt; &gt; +    UIProcess/gtk/ViewGestureControllerGtk.cpp
&gt; 
&gt; I think these are here only because they&apos;re conditionally added to the buil,
&gt; so they can be moved to SourceGTK.txt

That worked :).

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:756
&gt; &gt; +    auto* pageSnapshot = gtk_snapshot_new();
&gt; &gt; +    webViewBase-&gt;priv-&gt;acceleratedBackingStore-&gt;snapshot(pageSnapshot);
&gt; 
&gt; Can we do this also depending on isShowingNavigationGestureSnapshot? or
&gt; isn&apos;t it worth it?

I left it as is so far. We create and throw away a GtkSnapshot this way, but the operation didn&apos;t look expensive, and the resulting render node tree is the same if we&apos;re not mid-gesture.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:759
&gt; &gt; +    auto* pageRenderNode = gtk_snapshot_free_to_node(pageSnapshot);
&gt; &gt; +    if (pageRenderNode) {
&gt; 
&gt; if (auto* pageRenderNode = gtk_snapshot_free_to_node(pageSnapshot))
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:766
&gt; &gt; +    }
&gt; 
&gt; Where&apos;s pageRenderNode freed?

Oops, wrong kind of &quot;auto&quot; :), this is handled now.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1497
&gt; &gt; +static void appendTouchEvent(WebKitWebViewBase* webViewBase, Vector&lt;WebPlatformTouchPoint&gt;&amp; touchPoints, GdkEvent* event, WebPlatformTouchPoint::TouchPointState state)
&gt; 
&gt; Make this receive a GtkWidget* and we avoid two casts below
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1520
&gt; &gt; +    GdkEventType type = gdk_event_get_event_type(event);
&gt; &gt; +    switch (type) {
&gt; 
&gt; switch (gdk_event_get_event_type(event)) {
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1567
&gt; &gt; +        if (!priv-&gt;touchEvents.size())
&gt; 
&gt; if (priv-&gt;touchEvents.isEmpty())
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1587
&gt; &gt; -        break;
&gt; &gt; +        return GDK_EVENT_PROPAGATE;
&gt; 
&gt; Do we need to chain up in gtk3?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1843
&gt; &gt; +    auto* page = webkitWebViewBaseGetPage(webViewBase);
&gt; &gt; +    ASSERT(page);
&gt; 
&gt; Use priv-&gt;pageProxy directly here.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1860
&gt; &gt; +    auto* page = webkitWebViewBaseGetPage(webViewBase);
&gt; &gt; +    ASSERT(page);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1866
&gt; &gt; +    double pageScale = priv-&gt;initialZoomScale * scale;
&gt; &gt; +    if (pageScale &lt; 1.0)
&gt; &gt; +        pageScale = 1.0;
&gt; &gt; +    if (pageScale &gt; 3.0)
&gt; &gt; +        pageScale = 3.0;
&gt; 
&gt; auto pageScale = clampTo&lt;double&gt;(priv-&gt;initialZoomScale * scale, 1, 3);
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1881
&gt; &gt; +    WebKitWebViewBasePrivate* priv = webViewBase-&gt;priv;
&gt; &gt; +    priv-&gt;isLongPressed = true;
&gt; 
&gt; webViewBase-&gt;priv-&gt;isLongPressed = true;
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1887
&gt; &gt; +    WebKitWebViewBasePrivate* priv = webViewBase-&gt;priv;
&gt; &gt; +    priv-&gt;isLongPressed = false;
&gt; 
&gt; Same here, we don&apos;t need the local variable just for a single line
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1890
&gt; &gt; +static void webkitWebViewBaseTouchRelease(WebKitWebViewBase* webViewBase, int nPress, double x, double y, GtkGesture*gesture)
&gt; 
&gt; GtkGesture*gesture -&gt; GtkGesture* gesture
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1913
&gt; &gt; +    GdkModifierType modifiers;
&gt; &gt; +#if USE(GTK4)
&gt; &gt; +    modifiers = gtk_event_controller_get_current_event_state(GTK_EVENT_CONTROLLER(gesture));
&gt; &gt; +#else
&gt; &gt; +    gtk_get_current_event_state(&amp;modifiers);
&gt; &gt; +#endif
&gt; 
&gt; Add gtk_event_controller_get_current_event_state() impl for GTK3 in
&gt; Source/WebCore/platform/gtk/GtkVersioning.h and we don&apos;t need ifdefs here.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1915
&gt; &gt; +    webkitWebViewBaseSynthesizeMouseEvent(webViewBase, MouseEventType::Motion, 0, 0, x, y, modifiers, nPress, &quot;touch&quot;);
&gt; 
&gt; Use touchPointerEventType() instead of &quot;touch&quot;
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1944
&gt; &gt; +        if (!gtk_drag_check_threshold(GTK_WIDGET(webViewBase), 0, 0, (int)offsetX, (int)offsetY))
&gt; 
&gt; Use static_cast&lt;int&gt;()
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1971
&gt; &gt; +#if USE(GTK4)
&gt; &gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_event_controller_get_current_event_time(GTK_EVENT_CONTROLLER(gesture)));
&gt; &gt; +#else
&gt; &gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_get_current_event_time());
&gt; &gt; +#endif
&gt; 
&gt; Add a an implementation of gtk_event_controller_get_current_event_time() for
&gt; gtk3 too.

Did all these.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2083
&gt; &gt; +    priv-&gt;touchGestureGroup = gtk_gesture_zoom_new(viewWidget);
&gt; 
&gt; In gtk4 ownership is transferred to GtkWidget, but where is this freed in
&gt; gtk3?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2092
&gt; &gt; +    auto* gesture = gtk_gesture_long_press_new(viewWidget);
&gt; 
&gt; Same for the gesture here.

Ah good point, seems it was leaked previously too. I made all these gestures dispose with the view via weak refs on GTK3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757357</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-05-06 05:06:17 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757367</commentid>
    <comment_count>9</comment_count>
      <attachid>427876</attachid>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2021-05-06 05:43:26 -0700</bug_when>
    <thetext>Created attachment 427876
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757801</commentid>
    <comment_count>10</comment_count>
      <attachid>427876</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-07 00:18:15 -0700</bug_when>
    <thetext>Comment on attachment 427876
Updated patch.

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

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1593
&gt; -        break;
&gt; +        return GDK_EVENT_PROPAGATE;

Do we need to chain up in gtk3?

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1954
&gt; +#if USE(GTK4)
&gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_event_controller_get_current_event_time(GTK_EVENT_CONTROLLER(gesture)));
&gt; +#else
&gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_get_current_event_time());
&gt; +#endif

We can remove the ifdef here now

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2065
&gt; +    g_object_weak_ref(G_OBJECT(viewWidget), gestureWeakNotify, priv-&gt;touchGestureGroup);

Since we are ignoring the oldLocation parameter, could we use g_object_unref here directly? You probably need a reinterpret_cast. Other solution would be to use g_object_set_data_full</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757817</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2021-05-07 02:38:05 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #10)
&gt; Comment on attachment 427876 [details]
&gt; Updated patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427876&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1593
&gt; &gt; -        break;
&gt; &gt; +        return GDK_EVENT_PROPAGATE;
&gt; 
&gt; Do we need to chain up in gtk3?

Oh, missed replying to that in the previous round. In GTK3 this is the handler of the touch_event vmethod in GtkWidgetClass, it should always receive touch events and it shouldn&apos;t ever fall through this case. Perhaps it should assert there?

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1954
&gt; &gt; +#if USE(GTK4)
&gt; &gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_event_controller_get_current_event_time(GTK_EVENT_CONTROLLER(gesture)));
&gt; &gt; +#else
&gt; &gt; +            eventTime = static_cast&lt;int32_t&gt;(gtk_get_current_event_time());
&gt; &gt; +#endif
&gt; 
&gt; We can remove the ifdef here now

Oops, true.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:2065
&gt; &gt; +    g_object_weak_ref(G_OBJECT(viewWidget), gestureWeakNotify, priv-&gt;touchGestureGroup);
&gt; 
&gt; Since we are ignoring the oldLocation parameter, could we use g_object_unref
&gt; here directly? You probably need a reinterpret_cast. Other solution would be
&gt; to use g_object_set_data_full

Sure, I passed g_object_unref first but wondered about function casts :). Let me try that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757819</commentid>
    <comment_count>12</comment_count>
      <attachid>427876</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-07 02:41:38 -0700</bug_when>
    <thetext>Comment on attachment 427876
Updated patch.

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

&gt;&gt;&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1593
&gt;&gt;&gt; +        return GDK_EVENT_PROPAGATE;
&gt;&gt; 
&gt;&gt; Do we need to chain up in gtk3?
&gt; 
&gt; Oh, missed replying to that in the previous round. In GTK3 this is the handler of the touch_event vmethod in GtkWidgetClass, it should always receive touch events and it shouldn&apos;t ever fall through this case. Perhaps it should assert there?

Yes, add ASSERT_NOT_REACHED();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757825</commentid>
    <comment_count>13</comment_count>
      <attachid>427984</attachid>
    <who name="Carlos Garnacho">carlosg</who>
    <bug_when>2021-05-07 03:08:52 -0700</bug_when>
    <thetext>Created attachment 427984
[fast-cq] Updated patch.

reinterpret_cast still triggered -Wcast-function-type with GWeakNotify, so I went for g_object_set_data_full() instead. This now does the assert and removed the unnecessary #if switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757833</commentid>
    <comment_count>14</comment_count>
      <attachid>427984</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-07 04:15:38 -0700</bug_when>
    <thetext>Comment on attachment 427984
[fast-cq] Updated patch.

This looks good to me. Alexander, can you confirm everything is working for you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757857</commentid>
    <comment_count>15</comment_count>
    <who name="Alice Mikhaylenko">alicem</who>
    <bug_when>2021-05-07 06:59:28 -0700</bug_when>
    <thetext>I don&apos;t have a build right now, I can just file issues later instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757862</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-07 07:55:58 -0700</bug_when>
    <thetext>Committed r277172 (237458@main): &lt;https://commits.webkit.org/237458@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427984.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763112</commentid>
    <comment_count>17</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-05-24 07:06:12 -0700</bug_when>
    <thetext>*** Bug 212325 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427570</attachid>
            <date>2021-05-03 10:20:23 -0700</date>
            <delta_ts>2021-05-06 04:31:26 -0700</delta_ts>
            <desc>Patch, rewrite GTK gesture support to work similarly in GTK3/4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>77478</size>
            <attacher name="Carlos Garnacho">carlosg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggOTY4Mjg0MGNmOTBhLi42ODNhODMwNTIxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTE0IEBACisyMDIxLTA1LTAzICBDYXJsb3MgR2FybmFjaG8gIDxjYXJsb3NnQGdub21lLm9y
Zz4KKworICAgICAgICBSZXdyaXRlIEdUSyBnZXN0dXJlIHN1cHBvcnQgdG8gd29yayBmb3IgYm90
aCAzLnggYW5kIDQueC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMjMyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJld3JpdGUgdGhlIHRvdWNoIGdlc3R1cmUgaGFuZGxpbmcgdG8gYXZvaWQgR2RrRXZl
bnQgYXMgYW4gZXhjaGFuZ2UKKyAgICAgICAgdG9rZW4sIGFuZCBub3QgcmVseSBvbiB0aGUgd2Vi
IHZpZXcgYmVpbmcgYWJsZSB0byBob2xkIGFuZCByZS1yb3V0ZQorICAgICAgICB0aGVzZSBhdCB3
aGltLiBUaGlzIG1ha2VzIHRvdWNoIGFuZCB0b3VjaHBhZCBnZXN0dXJlcyB3b3JrIG9uIEdUSzMK
KyAgICAgICAgYW5kIEdUSzQgaW4gc2ltaWxhciB3YXlzLCBhbmQgc28gdGhhdCBib3RoIHdvcmsu
CisKKyAgICAgICAgRm9yIHRoaXMsIHRvdWNoIGV2ZW50IHByb3BhZ2F0aW9uIGdvdCBzb21lIHN1
YnN0YW50aWFsIGNoYW5nZXMsIGl0CisgICAgICAgIHVzZWQgdG8gd29yayBieSBmaXJzdCBkZWxp
dmVyaW5nIHRoZSB0b3VjaCBldmVudHMgdG8gdGhlIHdlYiBwYWdlLAorICAgICAgICBhbmQgbWFu
dWFsbHkgZmVlZGluZyB0aGUgcmV0dXJuZWQrdW5oYW5kbGVkIG9uZXMgdG8gZ2VzdHVyZSBjb250
cm9sbGVycy4KKyAgICAgICAgTm93IGV2ZW50IGRlbGl2ZXJ5IGlzIGRlbGVnYXRlZCBvbiBHVEss
IGFuZCBoYXBwZW5zIHJpZ2h0IGF3YXkgb24KKyAgICAgICAgZ2VzdHVyZSBjb250cm9sbGVycywg
aXQgaXMgdGhlIFdlYmtpdFdlYlZpZXdCYXNlIHdoaWNoIGNob29zZXMgdG8gbWFrZQorICAgICAg
ICB0aGVtIGVmZmVjdGl2ZSBhZnRlciB0aGUgd2ViIHBhZ2UgKG1heWJlKSBoYW5kbGVkIHRoZSBl
dmVudHMuIEdlc3R1cmVzCisgICAgICAgIGFyZSByZXNldCB3aGVuZXZlciB0aGUgd2ViIHBhZ2Ug
aXMgY29uc2lkZXJlZCB0byBiZSBoYW5kbGluZyB0b3VjaAorICAgICAgICBldmVudHMuCisKKyAg
ICAgICAgQWxzbyBmaXggc29tZSBidWdsZXRzIGFjY3VtdWxhdGVkIGFsb25nIHRoZSB3YXksIHdl
YiB2aWV3IHpvb20gY29uZmxpY3RlZAorICAgICAgICB3aXRoIGluLXBhZ2Ugem9vbSBoYW5kbGlu
ZywgYW5kIFZpZXdHZXN0dXJlQ29udHJvbGxlciBwYWdlIHN3aXRjaGluZworICAgICAgICBjb25m
bGljdGVkIHdpdGggcHJlc3MtZHJhZy1yZWxlYXNlIGVtdWxhdGlvbiBvbiB0aGUgd2ViIHBhZ2Uu
IFRoZXNlIG5vdworICAgICAgICB3b3JrIGJldHRlciBhbmQgY2xvc2VyIHRvIEd0a1Njcm9sbFZp
ZXcgYmVoYXZpb3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBleGlzdGluZyB0ZXN0cyBzaG91
bGQgY2F0Y2ggcmVncmVzc2lvbnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogRHJv
cCBHVEs0IGNvbmRpdGlvbmFscyBhcm91bmQgVmlld0dlc3R1cmVDb250cm9sbGVyCisgICAgICAg
ICogU291cmNlc0dUSy50eHQ6IERyb3AgR2VzdHVyZUNvbnRyb2xsZXIuY3BwCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KTogRGVsZWdhdGUgaGFuZGxpbmcgb24K
KyAgICAgICAgV2ViS2l0V2ViVmlld0Jhc2UuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZSk6IFVzZSBwbGF0Zm9ybQorICAg
ICAgICBpbmRlcGVuZGVudCBzdHJ1Y3QgdG8gZm9yd2FyZCBzY3JvbGwgdG8gVmlld0dlc3R1cmVD
b250cm9sbGVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU25hcHNob3QpOiBJbnZvbHZlIFZpZXdH
ZXN0dXJlQ29udHJvbGxlciBpbiByZW5kZXJpbmcuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUJ1dHRvblByZXNzRXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxl
YXNlRXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc2VkKToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUmVsZWFzZWQpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VNb3Rpb25Ob3RpZnlFdmVudCk6IElnbm9yZSBwb2ludGVyLWVtdWxhdGVkIGV2
ZW50cyBmcm9tCisgICAgICAgIHRvdWNoc2NyZWVucy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlSGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNjcm9sbCk6
ICBVc2UgcGxhdGZvcm0gaW5kZXBlbmRlbnQgc3RydWN0CisgICAgICAgIHRvIGZvcndhcmQgc2Ny
b2xsIHRvIFZpZXdHZXN0dXJlQ29udHJvbGxlci4KKyAgICAgICAgKGFwcGVuZFRvdWNoRXZlbnQp
OgorICAgICAgICAodG91Y2hQb2ludFN0YXRlRm9yRXZlbnRzKToKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlR2V0VG91Y2hQb2ludHNGb3JFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZVRvdWNoRXZlbnQpOgorICAgICAgICBHZW5lcmFsaXplZCB0byB3b3JrIG9uIGJvdGggR1RL
MyBhbmQgR1RLNC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlWm9vbUJlZ2luKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlWm9vbUNoYW5nZWQpOgorICAgICAgICAod2Via2l0V2ViVmll
d0Jhc2VUb3VjaExvbmdQcmVzcyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoUHJl
c3MpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VUb3VjaFJlbGVhc2UpOgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdCZWdpbik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZVRvdWNoRHJhZ1VwZGF0ZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJh
Z0VuZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0NhbmNlbCk6CisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoU3dpcGUpOiBOZXdseSBhZGRlZCB0b3VjaCBnZXN0
dXJlIGltcGxlbWVudGF0aW9uCisgICAgICAgIGNhbGxiYWNrcy4gTm90IGRlbGVnYXRlZCBhbnlt
b3JlIG9uIEdlc3R1cmVDb250cm9sbGVyLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDb25z
dHJ1Y3RlZCk6IENyZWF0ZSB0b3VjaCBnZXN0dXJlcyBpbiB0aGUgYmFzZSB2aWV3CisgICAgICAg
IHdpZGdldCwgbGV0IHRoZW0gaGFuZGxlIGV2ZW50cyBhdXRvbWF0aWNhbGx5IGluc3RlYWQgb2Yg
cmVseWluZyBvbgorICAgICAgICBtYW51YWwgZXZlbnQgZmVlZGluZyB2aWEgZ3RrX2V2ZW50X2Nv
bnRyb2xsZXJfaGFuZGxlX2V2ZW50KCkuIEFsc28gYWRkCisgICAgICAgIGEgR3RrRXZlbnRDb250
cm9sbGVyTGVnYWN5IHRvIGhhbmRsZSBmb3J3YXJkaW5nIG9mIHJhdyB0b3VjaCBldmVudHMgdG8K
KyAgICAgICAgdGhlIHdlYiBwYWdlIGluIEdUSzQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZVNldEVuYWJsZUJhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmUpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIpOgorICAgICAgICAod2Via2l0V2ViVmll
d0Jhc2VCZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VDb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VXaWxsU3dhcFdlYlByb2Nlc3MpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaWRFeGl0
V2ViUHJvY2Vzcyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURpZFJlbGF1bmNoV2ViUHJv
Y2Vzcyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
Rm9yTWFpbkZyYW1lKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkRmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
RGlkRmluaXNoTmF2aWdhdGlvbik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURpZEZhaWxO
YXZpZ2F0aW9uKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkU2FtZURvY3VtZW50TmF2
aWdhdGlvbkZvck1haW5GcmFtZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURpZFJlc3Rv
cmVTY3JvbGxQb3NpdGlvbik6IFJlbW92ZSBjb25kaXRpb25hbHMgYXJvdW5kCisgICAgICAgIFZp
ZXdHZXN0dXJlQ29udHJvbGxlciBmb3IgR1RLNC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
UGFnZUdyYWJiZWRUb3VjaCk6IE5ldyBtZXRob2QgdG8gdGFnIHRvdWNoIGV2ZW50cworICAgICAg
ICBhbHRvZ2V0aGVyIGFzIGhhbmRsZWQgYnkgdGhlIHdlYiBwYWdlLCB0aHVzIHJlc2V0dGluZyBh
bnkgb25nb2luZyB2aWV3LWxldmVsCisgICAgICAgIGdlc3R1cmUgaGFuZGxpbmcuIFRoaXMgaW52
ZXJzaW9uIGlzIG5lY2Vzc2FyeSBhcyBnZXN0dXJlIGNvbnRyb2xsZXJzIGFyZSBub3cKKyAgICAg
ICAgYWx3YXlzIGZlZCBpbnB1dCBldmVudHMgcGFyYWxsZWwgdG8gd2ViIHBhZ2UgdG91Y2ggZXZl
bnQgaGFuZGxpbmcuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VFdmVudCk6IFJlbW92ZWQgd2lkZ2V0X2NsYXNzLT5l
dmVudCB2ZnVuYy4gVG91Y2hwYWQgZ2VzdHVyZQorICAgICAgICBldmVudCBmb3J3YXJkaW5nIHRv
IGV2ZW50IGNvbnRyb2xsZXJzIGlzIGRlbGVnYXRlZCBvbiBHVEsuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2Vz
dHVyZUNvbnRyb2xsZXIuY3BwOiBSZW1vdmVkLiBHZXN0dXJlcyBhcmUgaW1wbGVtZW50ZWQgaW4K
KyAgICAgICAgdGhlIGJhc2Ugdmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojppc0V2ZW50U3RvcCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6
c2Nyb2xsRXZlbnRDYW5TdGFydFN3aXBlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVD
b250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhbkVuZFN3aXBlKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFj
a2VyOjpzY3JvbGxFdmVudENhbkluZmx1ZW5jZVN3aXBlKToKKyAgICAgICAgKFdlYktpdDo6aXNU
b3VjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlU2Nyb2xsRXZlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNrZXI6OnNj
cm9sbEV2ZW50R2V0U2Nyb2xsaW5nRGVsdGFzKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyOjpoYW5kbGVTY3JvbGxXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZVByb2dyZXNzVHJhY2tlcjo6aGFuZGxlRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0
dXJlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblNpbXVs
YXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dl
c3R1cmVDb250cm9sbGVyOjpjb21wbGV0ZVNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0
aW5nKTogRGVjbGFyZQorICAgICAgICBQbGF0Zm9ybUd0a1Njcm9sbERhdGEsIGFuZCB1c2UgaXQg
YXMgInBsYXRmb3JtIHNjcm9sbCBldmVudCIgZm9yIGJvdGggR1RLMyBhbmQgR1RLNC4KKyAgICAg
ICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpzbmFwc2hvdCk6IE5ldyBHVEs0IHNw
ZWNpZmljIG1ldGhvZCB0byByZW5kZXIKKyAgICAgICAgdGhlIHBhZ2Ugc3dpdGNoaW5nIGdlc3R1
cmUgYWN0aW9uLgorCiAyMDIxLTA0LTEyICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV1bR1RLXSBVc2UgZ19vYmplY3Rfbm90aWZ5X2J5
X3BzcGVjKCkgd2hlbmV2ZXIgcG9zc2libGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDBh
YzNmZDIyMmVhYy4uMjZkNGZkZjZjZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTMz
LDIwICszMywxOCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfVU5JRklFRF9TT1VSQ0VfTElTVF9GSUxF
UwogICAgICJTb3VyY2VzR1RLLnR4dCIKICkKIAotaWYgKE5PVCBVU0VfR1RLNCkKLSAgICBsaXN0
KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgICAgICBVSVByb2Nlc3MvVmlld0dlc3R1cmVDb250
cm9sbGVyLmNwcAorbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKKyAgICBVSVByb2Nlc3MvVmll
d0dlc3R1cmVDb250cm9sbGVyLmNwcAogCi0gICAgICAgIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1
cmVDb250cm9sbGVyR3RrLmNwcAorICAgIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9s
bGVyR3RrLmNwcAogCi0gICAgICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yLmNwcAotICAgICkKLSAgICBsaXN0KEFQUEVORCBXZWJLaXRfTUVTU0FHRVNf
SU5fRklMRVMKLSAgICAgICAgVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlcgorICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAorKQorbGlz
dChBUFBFTkQgV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCisgICAgVUlQcm9jZXNzL1ZpZXdHZXN0
dXJlQ29udHJvbGxlcgogCi0gICAgICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yCi0gICAgKQotZW5kaWYgKCkKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3RvcgorKQogCiBsaXN0KEFQUEVORCBXZWJLaXRfREVS
SVZFRF9TT1VSQ0VTCiAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L0luc3Bl
Y3RvckdSZXNvdXJjZUJ1bmRsZS5jCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNH
VEsudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAppbmRleCA4MTY1ZmZlOThhNmIu
LmVjNDU1NTU5ODFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0yNTEsNyArMjUxLDYgQEAgVUlQ
cm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMS5jcHAgQG5vLXVuaWZ5CiBVSVBy
b2Nlc3MvZ3RrL0NsaXBib2FyZC5jcHAKIFVJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAg
QG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwIEBuby11bmlmeQotVUlQ
cm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsvSGFyZHdhcmVB
Y2NlbGVyYXRpb25NYW5hZ2VyLmNwcAogVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRv
ci5jcHAKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAK
aW5kZXggNTcxMzllMmQ5MTBjLi45YjhiYWRmNjE2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC00MDEsNjUgKzQwMSw4
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgSW50UmVj
dCYgLyogaW5pdGlhbEZyYW1lICovLCBjb25zCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIHZv
aWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3Vj
aEV2ZW50JiBldmVudCwgYm9vbCB3YXNFdmVudEhhbmRsZWQpCiB7Ci0jaWYgIVVTRShHVEs0KQot
ICAgIGNvbnN0IEdka0V2ZW50KiB0b3VjaEV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKLSAg
ICBpZiAoIXRvdWNoRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdlc3R1cmVDb250cm9s
bGVyJiBnZXN0dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xs
ZXIoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7Ci0gICAgaWYgKHdhc0V2ZW50
SGFuZGxlZCkgewotICAgICAgICBnZXN0dXJlQ29udHJvbGxlci5yZXNldCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHdhc0V2ZW50SGFuZGxlZCA9IGdlc3R1cmVDb250cm9sbGVyLmhh
bmRsZUV2ZW50KGNvbnN0X2Nhc3Q8R2RrRXZlbnQqPihldmVudC5uYXRpdmVFdmVudCgpKSk7Ci0K
ICAgICBpZiAod2FzRXZlbnRIYW5kbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbXVs
YXRlIHBvaW50ZXIgZXZlbnRzIGlmIHVuaGFuZGxlZC4KLSAgICBpZiAoIXRvdWNoRXZlbnQtPnRv
dWNoLmVtdWxhdGluZ19wb2ludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHVW5pcXVlUHRy
PEdka0V2ZW50PiBwb2ludGVyRXZlbnQ7Ci0KLSAgICBpZiAodG91Y2hFdmVudC0+dHlwZSA9PSBH
REtfVE9VQ0hfVVBEQVRFKSB7Ci0gICAgICAgIHBvaW50ZXJFdmVudC5yZXNldChnZGtfZXZlbnRf
bmV3KEdES19NT1RJT05fTk9USUZZKSk7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnRp
bWUgPSB0b3VjaEV2ZW50LT50b3VjaC50aW1lOwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlv
bi54ID0gdG91Y2hFdmVudC0+dG91Y2gueDsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24u
eSA9IHRvdWNoRXZlbnQtPnRvdWNoLnk7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnhf
cm9vdCA9IHRvdWNoRXZlbnQtPnRvdWNoLnhfcm9vdDsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5t
b3Rpb24ueV9yb290ID0gdG91Y2hFdmVudC0+dG91Y2gueV9yb290OwotICAgICAgICBwb2ludGVy
RXZlbnQtPm1vdGlvbi5zdGF0ZSA9IHRvdWNoRXZlbnQtPnRvdWNoLnN0YXRlIHwgR0RLX0JVVFRP
TjFfTUFTSzsKLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKHRvdWNoRXZlbnQtPnR5cGUp
IHsKLSAgICAgICAgY2FzZSBHREtfVE9VQ0hfQ0FOQ0VMOgotICAgICAgICAgICAgRkFMTFRIUk9V
R0g7Ci0gICAgICAgIGNhc2UgR0RLX1RPVUNIX0VORDoKLSAgICAgICAgICAgIHBvaW50ZXJFdmVu
dC5yZXNldChnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUkVMRUFTRSkpOwotICAgICAgICAgICAg
cG9pbnRlckV2ZW50LT5idXR0b24uc3RhdGUgPSB0b3VjaEV2ZW50LT50b3VjaC5zdGF0ZSB8IEdE
S19CVVRUT04xX01BU0s7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfVE9V
Q0hfQkVHSU46Ci0gICAgICAgICAgICBwb2ludGVyRXZlbnQucmVzZXQoZ2RrX2V2ZW50X25ldyhH
REtfQlVUVE9OX1BSRVNTKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cG9pbnRlckV2ZW50LT5idXR0b24uYnV0dG9uID0gMTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5i
dXR0b24udGltZSA9IHRvdWNoRXZlbnQtPnRvdWNoLnRpbWU7Ci0gICAgICAgIHBvaW50ZXJFdmVu
dC0+YnV0dG9uLnggPSB0b3VjaEV2ZW50LT50b3VjaC54OwotICAgICAgICBwb2ludGVyRXZlbnQt
PmJ1dHRvbi55ID0gdG91Y2hFdmVudC0+dG91Y2gueTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5i
dXR0b24ueF9yb290ID0gdG91Y2hFdmVudC0+dG91Y2gueF9yb290OwotICAgICAgICBwb2ludGVy
RXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB0b3VjaEV2ZW50LT50b3VjaC55X3Jvb3Q7Ci0gICAgfQot
Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRf
Z2V0X2RldmljZSh0b3VjaEV2ZW50KSk7Ci0gICAgZ2RrX2V2ZW50X3NldF9zb3VyY2VfZGV2aWNl
KHBvaW50ZXJFdmVudC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHRvdWNoRXZl
bnQpKTsKLSAgICBwb2ludGVyRXZlbnQtPmFueS53aW5kb3cgPSBHREtfV0lORE9XKGdfb2JqZWN0
X3JlZih0b3VjaEV2ZW50LT5hbnkud2luZG93KSk7Ci0gICAgcG9pbnRlckV2ZW50LT5hbnkuc2Vu
ZF9ldmVudCA9IFRSVUU7Ci0KLSAgICBndGtfd2lkZ2V0X2V2ZW50KG1fdmlld1dpZGdldCwgcG9p
bnRlckV2ZW50LmdldCgpKTsKLSNlbmRpZgorICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVBhZ2VH
cmFiYmVkVG91Y2goV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CiB9CiAjZW5k
aWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKIApAQCAtNDcxLDcgKzQxNCwxMiBAQCB2b2lkIFBh
Z2VDbGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRp
dmVXZWJXaGVlbEV2ZW50JgogI2lmICFVU0UoR1RLNCkKICAgICBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcihX
RUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKICAgICBpZiAoY29udHJvbGxlciAm
JiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkgewotICAgICAgICBjb250cm9s
bGVyLT53aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZSgmZXZlbnQubmF0aXZlRXZlbnQo
KS0+c2Nyb2xsKTsKKyAgICAgICAgZG91YmxlIGRlbHRhWDsKKyAgICAgICAgZ2RrX2V2ZW50X2dl
dF9zY3JvbGxfZGVsdGFzKGV2ZW50Lm5hdGl2ZUV2ZW50KCksICZkZWx0YVgsIG51bGxwdHIpOwor
ICAgICAgICBib29sIGlzRW5kID0gZ2RrX2V2ZW50X2lzX3Njcm9sbF9zdG9wX2V2ZW50KGV2ZW50
Lm5hdGl2ZUV2ZW50KCkpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICBpbnQzMl90IGV2ZW50VGlt
ZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGdka19ldmVudF9nZXRfdGltZShldmVudC5uYXRpdmVF
dmVudCgpKSk7CisgICAgICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSBzY3JvbGxEYXRhID0geyAu
ZGVsdGEgPSBkZWx0YVgsIC5ldmVudFRpbWUgPSBldmVudFRpbWUsIC5pc1RvdWNoID0gZmFsc2Us
IC5pc0VuZCA9IGlzRW5kIH07CisgICAgICAgIGNvbnRyb2xsZXItPndoZWVsRXZlbnRXYXNOb3RI
YW5kbGVkQnlXZWJDb3JlKCZzY3JvbGxEYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcAppbmRleCA2MGUyMzhiMzdmMWQuLjUzMmExYTgxNzFhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAg
LTMxNSwxMSArMzE1LDkgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAg
IHN0ZDo6dW5pcXVlX3B0cjxEcm9wVGFyZ2V0PiBkcm9wVGFyZ2V0OwogI2VuZGlmCiAKLSNpZiAh
VVNFKEdUSzQpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyPiBnZXN0dXJl
Q29udHJvbGxlcjsKKyAgICBHdGtHZXN0dXJlKiB0b3VjaEdlc3R1cmVHcm91cDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Vmlld0dlc3R1cmVDb250cm9sbGVyPiB2aWV3R2VzdHVyZUNvbnRyb2xsZXI7
CiAgICAgYm9vbCBpc0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVFbmFibGVkIHsgZmFsc2Ug
fTsKLSNlbmRpZgogCiAjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjQsIDApCiAgICAgR3RrV2lk
Z2V0KiBlbW9qaUNob29zZXI7CkBAIC0zMjcsNiArMzI1LDE0IEBAIHN0cnVjdCBfV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlIHsKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGU+IHJlbGVhc2VFbW9qaUNob29zZXJUaW1lcjsKICNlbmRpZgogCisgICAgLy8gVG91Y2gg
Z2VzdHVyZXMgc3RhdGUKKyAgICBkb3VibGUgaW5pdGlhbFpvb21TY2FsZTsKKyAgICBJbnRQb2lu
dCBpbml0aWFsWm9vbVBvaW50OworICAgIEZsb2F0UG9pbnQgZHJhZ09mZnNldDsKKyAgICBib29s
IGlzTG9uZ1ByZXNzZWQ7CisgICAgYm9vbCBpc0JlaW5nRHJhZ2dlZDsKKyAgICBib29sIHBhZ2VH
cmFiYmVkVG91Y2g7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9pbnRlckxvY2tNYW5hZ2VyPiBw
b2ludGVyTG9ja01hbmFnZXI7CiB9OwogCkBAIC03NDYsNyArNzUyLDE4IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlU25hcHNob3QoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1NuYXBzaG90
KiBzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGRyYXdpbmdBcmVhLT5p
c0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYt
PmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT5zbmFwc2hvdChzbmFwc2hvdCk7CisgICAgYXV0byog
cGFnZVNuYXBzaG90ID0gZ3RrX3NuYXBzaG90X25ldygpOworICAgIHdlYlZpZXdCYXNlLT5wcml2
LT5hY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS0+c25hcHNob3QocGFnZVNuYXBzaG90KTsKKworICAg
IGF1dG8qIHBhZ2VSZW5kZXJOb2RlID0gZ3RrX3NuYXBzaG90X2ZyZWVfdG9fbm9kZShwYWdlU25h
cHNob3QpOworICAgIGlmIChwYWdlUmVuZGVyTm9kZSkgeworICAgICAgICBib29sIHNob3dpbmdO
YXZpZ2F0aW9uU25hcHNob3QgPSB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5pc1Nob3dp
bmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7CisgICAgICAgIGF1dG8qIGNvbnRyb2xsZXIg
PSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSk7Cisg
ICAgICAgIGlmIChzaG93aW5nTmF2aWdhdGlvblNuYXBzaG90ICYmIGNvbnRyb2xsZXIpCisgICAg
ICAgICAgICBjb250cm9sbGVyLT5zbmFwc2hvdChzbmFwc2hvdCwgcGFnZVJlbmRlck5vZGUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBndGtfc25hcHNob3RfYXBwZW5kX25vZGUoc25hcHNo
b3QsIHBhZ2VSZW5kZXJOb2RlKTsKKyAgICB9CiAKICAgICBpZiAod2ViVmlld0Jhc2UtPnByaXYt
Pmluc3BlY3RvclZpZXcpCiAgICAgICAgIGd0a193aWRnZXRfc25hcHNob3RfY2hpbGQod2lkZ2V0
LCB3ZWJWaWV3QmFzZS0+cHJpdi0+aW5zcGVjdG9yVmlldywgc25hcHNob3QpOwpAQCAtMTE1Miw2
ICsxMTY5LDkgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NF
dmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXQKICAgICBpZiAocHJpdi0+ZGlhbG9n
KQogICAgICAgICByZXR1cm4gR0RLX0VWRU5UX1NUT1A7CiAKKyAgICBpZiAoZ2RrX2RldmljZV9n
ZXRfc291cmNlKGdka19ldmVudF9nZXRfc291cmNlX2RldmljZShyZWludGVycHJldF9jYXN0PEdk
a0V2ZW50Kj4oZXZlbnQpKSkgPT0gR0RLX1NPVVJDRV9UT1VDSFNDUkVFTikKKyAgICAgICAgcmV0
dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+
YnV0dG9uX3ByZXNzX2V2ZW50KHdpZGdldCwgZXZlbnQpOworCiAgICAgd2Via2l0V2ViVmlld0Jh
c2VIYW5kbGVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCByZWludGVycHJldF9jYXN0PEdka0V2ZW50
Kj4oZXZlbnQpKTsKIAogICAgIHJldHVybiBHREtfRVZFTlRfU1RPUDsKQEAgLTExNjQsNiArMTE4
NCw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VFdmVu
dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCCiAKICAgICBpZiAocHJpdi0+ZGlhbG9nKQog
ICAgICAgICByZXR1cm4gR0RLX0VWRU5UX1NUT1A7CisgICAgaWYgKGdka19kZXZpY2VfZ2V0X3Nv
dXJjZShnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2UocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVu
dCo+KGV2ZW50KSkpID09IEdES19TT1VSQ0VfVE9VQ0hTQ1JFRU4pCisgICAgICAgIHJldHVybiBH
VEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmJ1dHRv
bl9yZWxlYXNlX2V2ZW50KHdpZGdldCwgZXZlbnQpOwogCiAgICAgd2Via2l0V2ViVmlld0Jhc2VI
YW5kbGVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCByZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4o
ZXZlbnQpKTsKIApAQCAtMTE3NCw2ICsxMTk2LDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdl
YlZpZXdCYXNlQnV0dG9uUmVsZWFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEIK
ICNpZiBVU0UoR1RLNCkKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3Nl
ZChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGludCBjbGlja0NvdW50LCBkb3VibGUg
eCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCiB7CisgICAgaWYgKGd0a19nZXN0dXJl
X3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkp
KQorICAgICAgICByZXR1cm47CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0g
d2ViVmlld0Jhc2UtPnByaXY7CiAgICAgaWYgKHByaXYtPmRpYWxvZykKICAgICAgICAgcmV0dXJu
OwpAQCAtMTE5Nyw2ICsxMjIxLDggQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VCdXR0
b25QcmVzc2VkKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgaW50IGMKIAogc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlZChXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UsIGludCBjbGlja0NvdW50LCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1
cmUqIGdlc3R1cmUpCiB7CisgICAgaWYgKGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9z
ZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpKQorICAgICAgICByZXR1cm47CiAg
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAg
ICAgaWYgKHByaXYtPmRpYWxvZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTIyOSw4ICsxMjU1LDE1
IEBAIHN0YXRpYyBib29sIHNob3VsZEludmVydERpcmVjdGlvbkZvclNjcm9sbEV2ZW50KFdlYkhp
dFRlc3RSZXN1bHREYXRhOjpJc1Njcm9sbGJhCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHZGtFdmVu
dCogZXZlbnQsIE9wdGlvbmFsPFdlYldoZWVsRXZlbnQ6OlBoYXNlPiBwaGFzZSA9IFdURjo6bnVs
bG9wdCwgT3B0aW9uYWw8V2ViV2hlZWxFdmVudDo6UGhhc2U+IG1vbWVudHVtID0gV1RGOjpudWxs
b3B0KQogewogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdl
YlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKLSAgICBpZiAoY29u
dHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSAmJiBjb250cm9s
bGVyLT5oYW5kbGVTY3JvbGxXaGVlbEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRTY3Jv
bGwqPihldmVudCkpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGNvbnRyb2xsZXIgJiYgY29u
dHJvbGxlci0+aXNTd2lwZUdlc3R1cmVFbmFibGVkKCkpIHsKKyAgICAgICAgZG91YmxlIGRlbHRh
WDsKKyAgICAgICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVsdGFzKGV2ZW50LCAmZGVsdGFYLCBu
dWxscHRyKTsKKyAgICAgICAgYm9vbCBpc0VuZCA9IGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9l
dmVudChldmVudCkgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIGludDMyX3QgZXZlbnRUaW1lID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4oZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CisgICAgICAg
IFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSBzY3JvbGxEYXRhID0geyAuZGVsdGEgPSBkZWx0YVgsIC5l
dmVudFRpbWUgPSBldmVudFRpbWUsIC5pc1RvdWNoID0gZmFsc2UsIC5pc0VuZCA9IGlzRW5kIH07
CisgICAgICAgIGlmIChjb250cm9sbGVyLT5oYW5kbGVTY3JvbGxXaGVlbEV2ZW50KCZzY3JvbGxE
YXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKICAgICBBU1NFUlQoIXByaXYtPmRp
YWxvZyk7CkBAIC0xMjc4LDEzICsxMzExLDIyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QmFzZVNjcm9sbEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCoKICNl
bmRpZgogCiAjaWYgVVNFKEdUSzQpCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VT
Y3JvbGwoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBkb3VibGUgZGVsdGFYLCBkb3Vi
bGUgZGVsdGFZLCBHdGtFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0V2ViVmlld0Jhc2VTY3JvbGwoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNl
LCBkb3VibGUgZGVsdGFYLCBkb3VibGUgZGVsdGFZLCBHdGtFdmVudENvbnRyb2xsZXIqIGV2ZW50
Q29udHJvbGxlcikKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJW
aWV3QmFzZS0+cHJpdjsKICAgICBpZiAocHJpdi0+ZGlhbG9nKQogICAgICAgICByZXR1cm4gR0RL
X0VWRU5UX1BST1BBR0FURTsKIAotICAgIGF1dG8qIGV2ZW50ID0gZ3RrX2V2ZW50X2NvbnRyb2xs
ZXJfZ2V0X2N1cnJlbnRfZXZlbnQoY29udHJvbGxlcik7CisgICAgYXV0byogZXZlbnQgPSBndGtf
ZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudChldmVudENvbnRyb2xsZXIpOworCisg
ICAgVmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VW
aWV3R2VzdHVyZUNvbnRyb2xsZXIod2ViVmlld0Jhc2UpOworICAgIGlmIChjb250cm9sbGVyICYm
IGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7CisgICAgICAgIGJvb2wgaXNF
bmQgPSBnZGtfc2Nyb2xsX2V2ZW50X2lzX3N0b3AoZXZlbnQpID8gdHJ1ZSA6IGZhbHNlOworICAg
ICAgICBpbnQzMl90IGV2ZW50VGltZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGd0a19ldmVudF9j
b250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoZXZlbnRDb250cm9sbGVyKSk7CisgICAg
ICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSBzY3JvbGxEYXRhID0geyAuZGVsdGEgPSBkZWx0YVgs
IC5ldmVudFRpbWUgPSBldmVudFRpbWUsIC5pc1RvdWNoID0gZmFsc2UsIC5pc0VuZCA9IGlzRW5k
IH07CisgICAgICAgIGlmIChjb250cm9sbGVyLT5oYW5kbGVTY3JvbGxXaGVlbEV2ZW50KCZzY3Jv
bGxEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBHREtfRVZFTlRfU1RPUDsKKyAgICB9CiAKICAg
ICBpZiAoc2hvdWxkSW52ZXJ0RGlyZWN0aW9uRm9yU2Nyb2xsRXZlbnQocHJpdi0+bW91c2VJc092
ZXJTY3JvbGxiYXIsIGdka19ldmVudF9nZXRfbW9kaWZpZXJfc3RhdGUoZXZlbnQpICYgR0RLX1NI
SUZUX01BU0spKQogICAgICAgICBzdGQ6OnN3YXAoZGVsdGFYLCBkZWx0YVkpOwpAQCAtMTMyNSw2
ICsxMzY3LDkgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW8KICAgICAgICAgcmV0dXJuIHdpZGdl
dENsYXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50ID8gd2lkZ2V0Q2xhc3MtPm1vdGlvbl9ub3RpZnlf
ZXZlbnQod2lkZ2V0LCBldmVudCkgOiBHREtfRVZFTlRfUFJPUEFHQVRFOwogICAgIH0KIAorICAg
IGlmIChnZGtfZGV2aWNlX2dldF9zb3VyY2UoZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHJl
aW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpKSA9PSBHREtfU09VUkNFX1RPVUNIU0NS
RUVOKQorICAgICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9wYXJlbnRfY2xhc3MpLT5tb3Rpb25fbm90aWZ5X2V2ZW50KHdpZGdldCwgZXZlbnQpOworCiAg
ICAgaWYgKHByaXYtPnBvaW50ZXJMb2NrTWFuYWdlcikgewogICAgICAgICBkb3VibGUgeCwgeTsK
ICAgICAgICAgZ2RrX2V2ZW50X2dldF9yb290X2Nvb3JkcyhyZWludGVycHJldF9jYXN0PEdka0V2
ZW50Kj4oZXZlbnQpLCAmeCwgJnkpOwpAQCAtMTQ0OCwxMSArMTQ5MywxNiBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZUxlYXZlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwg
R2RrQ3Jvc3NpbmdNbwogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAh
VVNFKEdUSzQpCi1zdGF0aWMgdm9pZCBhcHBlbmRUb3VjaEV2ZW50KFZlY3RvcjxXZWJQbGF0Zm9y
bVRvdWNoUG9pbnQ+JiB0b3VjaFBvaW50cywgY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBXZWJQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUG9pbnRTdGF0ZSBzdGF0ZSkKKyNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQorc3RhdGljIHZvaWQgYXBwZW5kVG91Y2hFdmVudChXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UsIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+JiB0b3VjaFBvaW50cywg
R2RrRXZlbnQqIGV2ZW50LCBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUG9pbnRTdGF0ZSBz
dGF0ZSkKIHsKICAgICBnZG91YmxlIHgsIHk7CiAgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZl
bnQsICZ4LCAmeSk7CisjaWYgVVNFKEdUSzQpCisgICAgLy8gRXZlbnRzIGluIEdUSzQgYXJlIGdp
dmVuIGluIG5hdGl2ZSBzdXJmYWNlIGNvb3JkaW5hdGVzCisgICAgZ3RrX3dpZGdldF90cmFuc2xh
dGVfY29vcmRpbmF0ZXMoR1RLX1dJREdFVChndGtfd2lkZ2V0X2dldF9yb290KEdUS19XSURHRVQo
d2ViVmlld0Jhc2UpKSksCisgICAgICAgIEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCB4LCB5LCAm
eCwgJnkpOworI2VuZGlmCiAKICAgICBnZG91YmxlIHhSb290LCB5Um9vdDsKICAgICBnZGtfZXZl
bnRfZ2V0X3Jvb3RfY29vcmRzKGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7CkBAIC0xNDYxLDEyICsx
NTExLDEzIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFRvdWNoRXZlbnQoVmVjdG9yPFdlYlBsYXRmb3Jt
VG91Y2hQb2ludD4mIHRvdWNoUG9pbnRzLCBjb25zdCBHCiAgICAgdG91Y2hQb2ludHMudW5jaGVj
a2VkQXBwZW5kKFdlYlBsYXRmb3JtVG91Y2hQb2ludChpZGVudGlmaWVyLCBzdGF0ZSwgSW50UG9p
bnQoeFJvb3QsIHlSb290KSwgSW50UG9pbnQoeCwgeSkpKTsKIH0KIAotc3RhdGljIGlubGluZSBX
ZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUG9pbnRTdGF0ZSB0b3VjaFBvaW50U3RhdGVGb3JF
dmVudHMoY29uc3QgR2RrRXZlbnQqIGN1cnJlbnQsIGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3N0
YXRpYyBpbmxpbmUgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgdG91Y2hQ
b2ludFN0YXRlRm9yRXZlbnRzKEdka0V2ZW50KiBjdXJyZW50LCBHZGtFdmVudCogZXZlbnQpCiB7
CiAgICAgaWYgKGdka19ldmVudF9nZXRfZXZlbnRfc2VxdWVuY2UoY3VycmVudCkgIT0gZ2RrX2V2
ZW50X2dldF9ldmVudF9zZXF1ZW5jZShldmVudCkpCiAgICAgICAgIHJldHVybiBXZWJQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKIAotICAgIHN3aXRjaCAoY3VycmVudC0+dHlw
ZSkgeworICAgIEdka0V2ZW50VHlwZSB0eXBlID0gZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKGV2
ZW50KTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdES19UT1VDSF9VUERBVEU6CiAg
ICAgICAgIHJldHVybiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQ7CiAgICAgY2Fz
ZSBHREtfVE9VQ0hfQkVHSU46CkBAIC0xNDg4LDE0ICsxNTM5LDE4IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlR2V0VG91Y2hQb2ludHNGb3JFdmVudChXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0JhCiAgICAgdG91Y2hQb2ludHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3VjaEVu
ZCA/IHByaXYtPnRvdWNoRXZlbnRzLnNpemUoKSArIDEgOiBwcml2LT50b3VjaEV2ZW50cy5zaXpl
KCkpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IHByaXYtPnRvdWNoRXZlbnRzKQotICAg
ICAgICBhcHBlbmRUb3VjaEV2ZW50KHRvdWNoUG9pbnRzLCBpdC52YWx1ZS5nZXQoKSwgdG91Y2hQ
b2ludFN0YXRlRm9yRXZlbnRzKGl0LnZhbHVlLmdldCgpLCBldmVudCkpOworICAgICAgICBhcHBl
bmRUb3VjaEV2ZW50KHdlYlZpZXdCYXNlLCB0b3VjaFBvaW50cywgaXQudmFsdWUuZ2V0KCksIHRv
dWNoUG9pbnRTdGF0ZUZvckV2ZW50cyhpdC52YWx1ZS5nZXQoKSwgZXZlbnQpKTsKIAogICAgIC8v
IFRvdWNoIHdhcyBhbHJlYWR5IHJlbW92ZWQgZnJvbSB0aGUgVG91Y2hFdmVudHNNYXAsIGFkZCBp
dCBoZXJlLgogICAgIGlmICh0b3VjaEVuZCkKLSAgICAgICAgYXBwZW5kVG91Y2hFdmVudCh0b3Vj
aFBvaW50cywgZXZlbnQsIFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCk7Cisg
ICAgICAgIGFwcGVuZFRvdWNoRXZlbnQod2ViVmlld0Jhc2UsIHRvdWNoUG9pbnRzLCBldmVudCwg
V2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkKTsKIH0KIAorI2lmIFVTRShHVEs0
KQorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnQqIGV2ZW50KQorI2Vsc2UKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRX
ZWJWaWV3QmFzZVRvdWNoRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50VG91Y2gqIGV2
ZW50KQorI2VuZGlmCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VC
S0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKQEAgLTE1MDksNiArMTU2NCw4IEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50VG91Y2gqIGV2CiAgICAgR2RrRXZlbnRUeXBlIHR5cGUgPSBnZGtfZXZlbnRfZ2V0X2V2
ZW50X3R5cGUodG91Y2hFdmVudCk7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBHREtf
VE9VQ0hfQkVHSU46IHsKKyAgICAgICAgaWYgKCFwcml2LT50b3VjaEV2ZW50cy5zaXplKCkpCisg
ICAgICAgICAgICBwcml2LT5wYWdlR3JhYmJlZFRvdWNoID0gZmFsc2U7CiAgICAgICAgIEFTU0VS
VCghcHJpdi0+dG91Y2hFdmVudHMuY29udGFpbnMoc2VxdWVuY2UpKTsKICAgICAgICAgR1VuaXF1
ZVB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X2NvcHkodG91Y2hFdmVudCkpOwogICAgICAg
ICBwcml2LT50b3VjaEV2ZW50cy5hZGQoc2VxdWVuY2UsIFdURk1vdmUoZXZlbnQpKTsKQEAgLTE1
MjcsMTQ5ICsxNTg0LDIzIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVRvdWNo
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50VG91Y2gqIGV2CiAgICAgICAgIHByaXYt
PnRvdWNoRXZlbnRzLnJlbW92ZShzZXF1ZW5jZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gR0RLX0VWRU5UX1BST1BBR0FURTsK
ICAgICB9CiAKICAgICBWZWN0b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiB0b3VjaFBvaW50czsK
ICAgICB3ZWJraXRXZWJWaWV3QmFzZUdldFRvdWNoUG9pbnRzRm9yRXZlbnQod2ViVmlld0Jhc2Us
IHRvdWNoRXZlbnQsIHRvdWNoUG9pbnRzKTsKICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZVRv
dWNoRXZlbnQoTmF0aXZlV2ViVG91Y2hFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4o
ZXZlbnQpLCBXVEZNb3ZlKHRvdWNoUG9pbnRzKSkpOwogCi0gICAgcmV0dXJuIEdES19FVkVOVF9T
VE9QOworI2lmIFVTRShHVEs0KQorICAgIHJldHVybiBHREtfRVZFTlRfUFJPUEFHQVRFOworI2Vs
c2UKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJl
bnRfY2xhc3MpLT50b3VjaF9ldmVudCh3aWRnZXQsIGV2ZW50KTsKKyNlbmRpZgogfQogI2VuZGlm
IC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKLSNpZiAhVVNFKEdUSzQpCi1jbGFzcyBUb3VjaEdl
c3R1cmVDb250cm9sbGVyIGZpbmFsIDogcHVibGljIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIGV4cGxpY2l0IFRv
dWNoR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQotICAg
ICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3QmFzZSkKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0YXRpYyBHVW5pcXVlUHRyPEdka0V2ZW50PiBjcmVhdGVTY3JvbGxFdmVudChHZGtFdmVu
dFRvdWNoKiBldmVudCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGRlbHRhLCBib29sIGlzU3RvcCA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxH
ZGtFdmVudD4gc2Nyb2xsRXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKSk7Ci0gICAgICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwudGltZSA9IGV2ZW50LT50aW1lOwotICAgICAgICBzY3JvbGxF
dmVudC0+c2Nyb2xsLnggPSBwb2ludC54KCk7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwu
eSA9IHBvaW50LnkoKTsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54X3Jvb3QgPSBldmVu
dC0+eF9yb290OwotICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT55
X3Jvb3Q7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9M
TF9TTU9PVEg7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IGRlbHRhLngo
KTsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gZGVsdGEueSgpOwotICAg
ICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnN0YXRlOwotICAgICAgICBz
Y3JvbGxFdmVudC0+c2Nyb2xsLmlzX3N0b3AgPSBpc1N0b3A7Ci0gICAgICAgIHNjcm9sbEV2ZW50
LT5zY3JvbGwud2luZG93ID0gZXZlbnQtPndpbmRvdyA/IEdES19XSU5ET1coZ19vYmplY3RfcmVm
KGV2ZW50LT53aW5kb3cpKSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8qIHRvdWNoRXZlbnQgPSBy
ZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpOwotICAgICAgICBnZGtfZXZlbnRfc2V0
X3NjcmVlbihzY3JvbGxFdmVudC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9zY3JlZW4odG91Y2hFdmVu
dCkpOwotICAgICAgICBnZGtfZXZlbnRfc2V0X2RldmljZShzY3JvbGxFdmVudC5nZXQoKSwgZ2Rr
X2V2ZW50X2dldF9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICBnZGtfZXZlbnRfc2V0X3Nv
dXJjZV9kZXZpY2Uoc2Nyb2xsRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRfc291cmNlX2Rldmlj
ZSh0b3VjaEV2ZW50KSk7Ci0gICAgICAgIHJldHVybiBzY3JvbGxFdmVudDsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNpbXVsYXRlTW91c2VDbGljayhHZGtFdmVudFRvdWNoKiBldmVudCwgdW5zaWduZWQg
YnV0dG9uKQotICAgIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gcG9pbnRlckV2ZW50
KGdka19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKLSAgICAgICAgcG9pbnRlckV2ZW50
LT5tb3Rpb24udGltZSA9IGV2ZW50LT50aW1lOwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlv
bi54ID0gZXZlbnQtPng7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnkgPSBldmVudC0+
eTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ueF9yb290ID0gZXZlbnQtPnhfcm9vdDsK
LSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ueV9yb290ID0gZXZlbnQtPnlfcm9vdDsKLSAg
ICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24uc3RhdGUgPSBldmVudC0+c3RhdGU7Ci0gICAgICAg
IHBvaW50ZXJFdmVudC0+bW90aW9uLndpbmRvdyA9IGV2ZW50LT53aW5kb3cgPyBHREtfV0lORE9X
KGdfb2JqZWN0X3JlZihldmVudC0+d2luZG93KSkgOiBudWxscHRyOwotICAgICAgICBhdXRvKiB0
b3VjaEV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KTsKLSAgICAgICAg
Z2RrX2V2ZW50X3NldF9zY3JlZW4ocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X3Nj
cmVlbih0b3VjaEV2ZW50KSk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHBvaW50ZXJF
dmVudC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICBn
ZGtfZXZlbnRfc2V0X3NvdXJjZV9kZXZpY2UocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRf
Z2V0X3NvdXJjZV9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICB3ZWJraXRXZWJWaWV3QmFz
ZUhhbmRsZU1vdXNlRXZlbnQobV93ZWJWaWV3LCBwb2ludGVyRXZlbnQuZ2V0KCkpOwotCi0gICAg
ICAgIHBvaW50ZXJFdmVudC5yZXNldChnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUFJFU1MpKTsK
LSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOwotICAgICAgICBw
b2ludGVyRXZlbnQtPmJ1dHRvbi50aW1lID0gZXZlbnQtPnRpbWU7Ci0gICAgICAgIHBvaW50ZXJF
dmVudC0+YnV0dG9uLnggPSBldmVudC0+eDsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0b24u
eSA9IGV2ZW50LT55OwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSBldmVu
dC0+eF9yb290OwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSBldmVudC0+
eV9yb290OwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBldmVudC0+d2lu
ZG93ID8gR0RLX1dJTkRPVyhnX29iamVjdF9yZWYoZXZlbnQtPndpbmRvdykpIDogbnVsbHB0cjsK
LSAgICAgICAgZ2RrX2V2ZW50X3NldF9zY3JlZW4ocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZl
bnRfZ2V0X3NjcmVlbih0b3VjaEV2ZW50KSk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfZGV2aWNl
KHBvaW50ZXJFdmVudC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9kZXZpY2UodG91Y2hFdmVudCkpOwot
ICAgICAgICBnZGtfZXZlbnRfc2V0X3NvdXJjZV9kZXZpY2UocG9pbnRlckV2ZW50LmdldCgpLCBn
ZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICB3ZWJraXRX
ZWJWaWV3QmFzZUhhbmRsZU1vdXNlRXZlbnQobV93ZWJWaWV3LCBwb2ludGVyRXZlbnQuZ2V0KCkp
OwotCi0gICAgICAgIHBvaW50ZXJFdmVudC0+dHlwZSA9IEdES19CVVRUT05fUkVMRUFTRTsKLSAg
ICAgICAgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVNb3VzZUV2ZW50KG1fd2ViVmlldywgcG9pbnRl
ckV2ZW50LmdldCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRhcChHZGtFdmVudFRvdWNoKiBldmVu
dCkgZmluYWwKLSAgICB7Ci0gICAgICAgIHNpbXVsYXRlTW91c2VDbGljayhldmVudCwgR0RLX0JV
VFRPTl9QUklNQVJZKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0RHJhZyhHZGtFdmVudFRvdWNo
KiBldmVudCwgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCkgZmluYWwKLSAgICB7Ci0gICAg
ICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQo
ZXZlbnQsIHN0YXJ0UG9pbnQsIHsgfSk7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxl
V2hlZWxFdmVudChtX3dlYlZpZXcsIHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQ
aGFzZTo6UGhhc2VCZWdhbik7Ci0gICAgfQotCi0gICAgdm9pZCBkcmFnKEdka0V2ZW50VG91Y2gq
IGV2ZW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRQb2ludCYgZGVsdGEp
IGZpbmFsCi0gICAgewotICAgICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9
IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBwb2ludCwgZGVsdGEpOwotICAgICAgICB3ZWJraXRX
ZWJWaWV3QmFzZUhhbmRsZVdoZWVsRXZlbnQobV93ZWJWaWV3LCBzY3JvbGxFdmVudC5nZXQoKSwg
V2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQ2hhbmdlZCk7Ci0gICAgfQotCi0gICAgdm9pZCBj
YW5jZWxEcmFnKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIGlmIChhdXRvKiBjb250cm9sbGVyID0g
d2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIobV93ZWJWaWV3KSkKLSAgICAg
ICAgICAgIGNvbnRyb2xsZXItPmNhbmNlbFN3aXBlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2lw
ZShHZGtFdmVudFRvdWNoKiBldmVudCwgY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpIGZpbmFs
Ci0gICAgewotICAgICAgICBkb3VibGUgeCwgeTsKLSAgICAgICAgZ2RrX2V2ZW50X2dldF9jb29y
ZHMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJngsICZ5KTsKLSAgICAgICAg
R1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVu
dCwgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKHgsIHkpLCB2ZWxvY2l0eSwgdHJ1ZSk7Ci0g
ICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlV2hlZWxFdmVudChtX3dlYlZpZXcsIHNjcm9s
bEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lLCBXZWJXaGVlbEV2
ZW50OjpQaGFzZTo6UGhhc2VCZWdhbik7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydFpvb20oY29u
c3QgSW50UG9pbnQmIGNlbnRlciwgZG91YmxlJiBpbml0aWFsU2NhbGUsIEludFBvaW50JiBpbml0
aWFsUG9pbnQpIGZpbmFsCi0gICAgewotICAgICAgICBhdXRvKiBwYWdlID0gbV93ZWJWaWV3LT5w
cml2LT5wYWdlUHJveHkuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChwYWdlKTsKLSAgICAgICAgaW5p
dGlhbFNjYWxlID0gcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgIHBhZ2UtPmdldENl
bnRlckZvclpvb21HZXN0dXJlKGNlbnRlciwgaW5pdGlhbFBvaW50KTsKLSAgICB9Ci0KLSAgICB2
b2lkIHpvb20oZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKSBmaW5hbAotICAg
IHsKLSAgICAgICAgYXV0byogcGFnZSA9IG1fd2ViVmlldy0+cHJpdi0+cGFnZVByb3h5LmdldCgp
OwotICAgICAgICBBU1NFUlQocGFnZSk7Ci0KLSAgICAgICAgcGFnZS0+c2NhbGVQYWdlKHNjYWxl
LCBvcmlnaW4pOwotICAgIH0KLQotICAgIHZvaWQgbG9uZ1ByZXNzKEdka0V2ZW50VG91Y2gqIGV2
ZW50KSBmaW5hbAotICAgIHsKLSAgICAgICAgc2ltdWxhdGVNb3VzZUNsaWNrKGV2ZW50LCBHREtf
QlVUVE9OX1NFQ09OREFSWSk7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIG1fd2Vi
VmlldzsKLX07Ci0KLUdlc3R1cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVD
b250cm9sbGVyKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKLXsKLSAgICBXZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKLSAgICBpZiAoIXBy
aXYtPmdlc3R1cmVDb250cm9sbGVyKQotICAgICAgICBwcml2LT5nZXN0dXJlQ29udHJvbGxlciA9
IG1ha2VVbmlxdWU8R2VzdHVyZUNvbnRyb2xsZXI+KEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCBt
YWtlVW5pcXVlPFRvdWNoR2VzdHVyZUNvbnRyb2xsZXI+KHdlYlZpZXdCYXNlKSk7Ci0gICAgcmV0
dXJuICpwcml2LT5nZXN0dXJlQ29udHJvbGxlcjsKLX0KLSNlbmRpZgotCiB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlU2V0RW5hYmxlQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZShXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UsIGJvb2wgZW5hYmxlZCkKIHsKLSNpZiAhVVNFKEdUSzQpCiAg
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAg
ICAgcHJpdi0+aXNCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlRW5hYmxlZCA9IGVuYWJsZWQ7
CiAKQEAgLTE2NzcsMzIgKzE2MDgsMjUgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldEVuYWJs
ZUJhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmUoV2ViS2l0V2ViVmlld0Jhc2UqIHcKICAgICAg
ICAgY29udHJvbGxlci0+c2V0U3dpcGVHZXN0dXJlRW5hYmxlZChlbmFibGVkKTsKIAogICAgIHBy
aXYtPnBhZ2VQcm94eS0+c2V0U2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90cyhlbmFibGVk
KTsKLSNlbmRpZgogfQogCi0jaWYgIVVTRShHVEs0KQogVmlld0dlc3R1cmVDb250cm9sbGVyKiB3
ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UpCiB7CiAgICAgcmV0dXJuIHdlYlZpZXdCYXNlLT5wcml2LT52aWV3R2VzdHVy
ZUNvbnRyb2xsZXIuZ2V0KCk7CiB9Ci0jZW5kaWYKIAogYm9vbCB3ZWJraXRXZWJWaWV3QmFzZUJl
Z2luQmFja1N3aXBlRm9yVGVzdGluZyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCiB7
Ci0jaWYgIVVTRShHVEs0KQogICAgIGlmIChhdXRvKiBnZXN0dXJlQ29udHJvbGxlciA9IHdlYmtp
dFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKSkKICAgICAgICAg
cmV0dXJuIGdlc3R1cmVDb250cm9sbGVyLT5iZWdpblNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25G
b3JUZXN0aW5nKFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJhY2spOwot
I2VuZGlmCiAKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKIGJvb2wgd2Via2l0V2ViVmlld0Jhc2VD
b21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNl
KQogewotI2lmICFVU0UoR1RLNCkKICAgICBpZiAoYXV0byogZ2VzdHVyZUNvbnRyb2xsZXIgPSB3
ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSkpCiAgICAg
ICAgIHJldHVybiBnZXN0dXJlQ29udHJvbGxlci0+Y29tcGxldGVTaW11bGF0ZWRTd2lwZUluRGly
ZWN0aW9uRm9yVGVzdGluZyhWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpC
YWNrKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtMTczMSwxMyArMTY1NSw2
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRn
ZXQqIHdpZGdldCwgZ2ludCAvKiB4ICovLCBnCiB9CiAKICNpZiAhVVNFKEdUSzQpCi1zdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZl
bnQqIGV2ZW50KQotewotICAgIGlmIChnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpID09
IEdES19UT1VDSFBBRF9QSU5DSCkKLSAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VHZXN0dXJlQ29u
dHJvbGxlcihXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpKS5oYW5kbGVFdmVudChldmVudCk7
Ci0gICAgcmV0dXJuIEdES19FVkVOVF9QUk9QQUdBVEU7Ci19Ci0KIHN0YXRpYyBBdGtPYmplY3Qq
IHdlYmtpdFdlYlZpZXdCYXNlR2V0QWNjZXNzaWJsZShHdGtXaWRnZXQqIHdpZGdldCkKIHsKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3
aWRnZXQpLT5wcml2OwpAQCAtMTkxOSw2ICsxODM2LDE5NSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld0Jhc2VGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGlyZWN0aW9uVHlwZSBk
aXJlYwogICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3Bh
cmVudF9jbGFzcyktPmZvY3VzKHdpZGdldCwgZGlyZWN0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2Vab29tQmVnaW4oV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNl
LCBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAg
ICBhdXRvKiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKTsKKyAg
ICBBU1NFUlQocGFnZSk7CisgICAgcHJpdi0+aW5pdGlhbFpvb21TY2FsZSA9IHBhZ2UtPnBhZ2VT
Y2FsZUZhY3RvcigpOworCisgICAgZG91YmxlIHgsIHk7CisgICAgZ3RrX2dlc3R1cmVfZ2V0X2Jv
dW5kaW5nX2JveF9jZW50ZXIoZ2VzdHVyZSwgJngsICZ5KTsKKyAgICBwYWdlLT5nZXRDZW50ZXJG
b3Jab29tR2VzdHVyZShJbnRQb2ludCh4LCB5KSwgcHJpdi0+aW5pdGlhbFpvb21Qb2ludCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlWm9vbUNoYW5nZWQoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlLCBnZG91YmxlIHNjYWxlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2
OworICAgIGlmIChwcml2LT5wYWdlR3JhYmJlZFRvdWNoKQorICAgICAgICByZXR1cm47CisKKyAg
ICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlN
RUQpOworCisgICAgYXV0byogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZSh3ZWJWaWV3
QmFzZSk7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgZG91YmxlIHBhZ2VTY2FsZSA9IHByaXYt
PmluaXRpYWxab29tU2NhbGUgKiBzY2FsZTsKKyAgICBpZiAocGFnZVNjYWxlIDwgMS4wKQorICAg
ICAgICBwYWdlU2NhbGUgPSAxLjA7CisgICAgaWYgKHBhZ2VTY2FsZSA+IDMuMCkKKyAgICAgICAg
cGFnZVNjYWxlID0gMy4wOworCisgICAgRmxvYXRQb2ludCBzY2FsZWRab29tQ2VudGVyKHByaXYt
PmluaXRpYWxab29tUG9pbnQpOworICAgIHNjYWxlZFpvb21DZW50ZXIuc2NhbGUocGFnZVNjYWxl
KTsKKworICAgIGRvdWJsZSB4LCB5OworICAgIGd0a19nZXN0dXJlX2dldF9ib3VuZGluZ19ib3hf
Y2VudGVyKGdlc3R1cmUsICZ4LCAmeSk7CisgICAgRmxvYXRQb2ludCB2aWV3UG9pbnQgPSBGbG9h
dFBvaW50KHgsIHkpOworCisgICAgcGFnZS0+c2NhbGVQYWdlKHBhZ2VTY2FsZSwgV2ViQ29yZTo6
cm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoc2NhbGVkWm9vbUNlbnRlciAtIHZpZXdQb2ludCkp
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaExvbmdQcmVzcyhXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGdkb3VibGUgeCwgZ2RvdWJsZSB5LCBHdGtHZXN0
dXJlKikKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFz
ZS0+cHJpdjsKKyAgICBwcml2LT5pc0xvbmdQcmVzc2VkID0gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaFByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3
QmFzZSwgaW50IG5QcmVzcywgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKikKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAg
ICBwcml2LT5pc0xvbmdQcmVzc2VkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlVG91Y2hSZWxlYXNlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgaW50
IG5QcmVzcywgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKmdlc3R1cmUpCit7CisgICAg
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAg
aWYgKHByaXYtPnBhZ2VHcmFiYmVkVG91Y2gpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocHJp
di0+aXNCZWluZ0RyYWdnZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGJ1dHRv
bjsKKyAgICB1bnNpZ25lZCBidXR0b25zOworICAgIGlmIChwcml2LT5pc0xvbmdQcmVzc2VkKSB7
CisgICAgICAgIGJ1dHRvbiA9IEdES19CVVRUT05fU0VDT05EQVJZOworICAgICAgICBidXR0b25z
ID0gR0RLX0JVVFRPTjNfTUFTSzsKKyAgICB9IGVsc2UgeworICAgICAgICBidXR0b24gPSBHREtf
QlVUVE9OX1BSSU1BUlk7CisgICAgICAgIGJ1dHRvbnMgPSBHREtfQlVUVE9OMV9NQVNLOworICAg
IH0KKworICAgIEdka01vZGlmaWVyVHlwZSBtb2RpZmllcnM7CisjaWYgVVNFKEdUSzQpCisgICAg
bW9kaWZpZXJzID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfc3RhdGUo
R1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworI2Vsc2UKKyAgICBndGtfZ2V0X2N1cnJl
bnRfZXZlbnRfc3RhdGUoJm1vZGlmaWVycyk7CisjZW5kaWYKKworICAgIHdlYmtpdFdlYlZpZXdC
YXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQod2ViVmlld0Jhc2UsIE1vdXNlRXZlbnRUeXBlOjpNb3Rp
b24sIDAsIDAsIHgsIHksIG1vZGlmaWVycywgblByZXNzLCAidG91Y2giKTsKKyAgICB3ZWJraXRX
ZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlw
ZTo6UHJlc3MsIGJ1dHRvbiwgMCwgeCwgeSwgbW9kaWZpZXJzLCBuUHJlc3MsICJ0b3VjaCIpOwor
ICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQod2ViVmlld0Jhc2UsIE1v
dXNlRXZlbnRUeXBlOjpSZWxlYXNlLCBidXR0b24sIGJ1dHRvbnMsIHgsIHksIG1vZGlmaWVycywg
blByZXNzLCAidG91Y2giKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3Vj
aERyYWdCZWdpbihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGdkb3VibGUgc3RhcnRY
LCBnZG91YmxlIHN0YXJ0WSwgR3RrR2VzdHVyZSopCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgcHJpdi0+ZHJhZ09mZnNldC5z
ZXQoMCwgMCk7CisgICAgcHJpdi0+aXNCZWluZ0RyYWdnZWQgPSBmYWxzZTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdVcGRhdGUoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYlZpZXdCYXNlLCBkb3VibGUgb2Zmc2V0WCwgZG91YmxlIG9mZnNldFksIEd0a0dlc3R1cmUq
IGdlc3R1cmUpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7CisgICAgaWYgKHByaXYtPnBhZ2VHcmFiYmVkVG91Y2gpCisgICAgICAgIHJl
dHVybjsKKworICAgIGRvdWJsZSB4LCB5OworICAgIGd0a19nZXN0dXJlX2RyYWdfZ2V0X3N0YXJ0
X3BvaW50KEdUS19HRVNUVVJFX0RSQUcoZ2VzdHVyZSksICZ4LCAmeSk7CisKKyAgICBHZGtNb2Rp
ZmllclR5cGUgbW9kaWZpZXJzOworI2lmIFVTRShHVEs0KQorICAgIG1vZGlmaWVycyA9IGd0a19l
dmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50X3N0YXRlKEdUS19FVkVOVF9DT05UUk9M
TEVSKGdlc3R1cmUpKTsKKyNlbHNlCisgICAgZ3RrX2dldF9jdXJyZW50X2V2ZW50X3N0YXRlKCZt
b2RpZmllcnMpOworI2VuZGlmCisKKyAgICBpZiAoIXByaXYtPmlzQmVpbmdEcmFnZ2VkKSB7Cisg
ICAgICAgIGlmICghZ3RrX2RyYWdfY2hlY2tfdGhyZXNob2xkKEdUS19XSURHRVQod2ViVmlld0Jh
c2UpLCAwLCAwLCAoaW50KW9mZnNldFgsIChpbnQpb2Zmc2V0WSkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHByaXYtPmlzQmVpbmdEcmFnZ2VkID0gdHJ1ZTsKKyAgICAgICAgZ3RrX2dl
c3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKwor
ICAgICAgICBpZiAocHJpdi0+aXNMb25nUHJlc3NlZCkgeworICAgICAgICAgICAgLy8gRHJhZyBh
ZnRlciBsb25nIHByZXNzIGZvcndhcmRzIGVtdWxhdGVkIG1vdXNlIGV2ZW50cyAoZm9yIGUuZy4g
dGV4dCBzZWxlY3Rpb24pCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVN
b3VzZUV2ZW50KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6TW90aW9uLCAwLCAwLCB4LCB5
LCBtb2RpZmllcnMsIDEsICJ0b3VjaCIpOworICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VT
eW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgTW91c2VFdmVudFR5cGU6OlByZXNzLCBH
REtfQlVUVE9OX1BSSU1BUlksIDAsIHgsIHksIG1vZGlmaWVycywgMCwgInRvdWNoIik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxF
dmVudCh3ZWJWaWV3QmFzZSwgMCwgMCwgeCwgeSwgV2hlZWxFdmVudFBoYXNlOjpCZWdhbiwgV2hl
ZWxFdmVudFBoYXNlOjpOb1BoYXNlKTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+aXNMb25nUHJl
c3NlZCkKKyAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJW
aWV3QmFzZSwgTW91c2VFdmVudFR5cGU6Ok1vdGlvbiwgR0RLX0JVVFRPTl9QUklNQVJZLCBHREtf
QlVUVE9OMV9NQVNLLCB4ICsgb2Zmc2V0WCwgeSArIG9mZnNldFksIG1vZGlmaWVycywgMCwgInRv
dWNoIik7CisgICAgZWxzZSB7CisgICAgICAgIGRvdWJsZSBkZWx0YVggPSAocHJpdi0+ZHJhZ09m
ZnNldC54KCkgLSBvZmZzZXRYKSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAg
ICAgICAgZG91YmxlIGRlbHRhWSA9IChwcml2LT5kcmFnT2Zmc2V0LnkoKSAtIG9mZnNldFkpIC8g
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICBwcml2LT5kcmFnT2Zmc2V0
LnNldChvZmZzZXRYLCBvZmZzZXRZKTsKKworICAgICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJW
aWV3QmFzZSk7CisgICAgICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVH
ZXN0dXJlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBpbnQzMl90IGV2ZW50VGltZTsKKyNpZiBV
U0UoR1RLNCkKKyAgICAgICAgICAgIGV2ZW50VGltZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGd0
a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoR1RLX0VWRU5UX0NPTlRS
T0xMRVIoZ2VzdHVyZSkpKTsKKyNlbHNlCisgICAgICAgICAgICBldmVudFRpbWUgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZSgpKTsKKyNlbmRpZgorICAg
ICAgICAgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRhIHNjcm9sbERhdGEgPSB7IC5kZWx0YSA9IGRl
bHRhWCwgLmV2ZW50VGltZSA9IGV2ZW50VGltZSwgLmlzVG91Y2ggPSB0cnVlLCAuaXNFbmQgPSBm
YWxzZSB9OworICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXItPmhhbmRsZVNjcm9sbFdoZWVsRXZl
bnQoJnNjcm9sbERhdGEpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZVdoZWVsRXZlbnQod2ViVmlld0Jhc2Us
IC1kZWx0YVgsIC1kZWx0YVksIHgsIHksIFdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZCwgV2hlZWxF
dmVudFBoYXNlOjpOb1BoYXNlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdCYXNlVG91Y2hEcmFnRW5kKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZ2RvdWJs
ZSBvZmZzZXRYLCBnZG91YmxlIG9mZnNldFksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAg
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAg
aWYgKHByaXYtPnBhZ2VHcmFiYmVkVG91Y2gpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChw
cml2LT5pc0xvbmdQcmVzc2VkKSB7CisgICAgICAgIGRvdWJsZSB4LCB5OworICAgICAgICBndGtf
Z2VzdHVyZV9kcmFnX2dldF9zdGFydF9wb2ludChHVEtfR0VTVFVSRV9EUkFHKGdlc3R1cmUpLCAm
eCwgJnkpOworICAgICAgICBHZGtNb2RpZmllclR5cGUgbW9kaWZpZXJzOworI2lmIFVTRShHVEs0
KQorICAgICAgICBtb2RpZmllcnMgPSBndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9l
dmVudF9zdGF0ZShHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7CisjZWxzZQorICAgICAg
ICBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfc3RhdGUoJm1vZGlmaWVycyk7CisjZW5kaWYKKyAgICAg
ICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgTW91
c2VFdmVudFR5cGU6OlJlbGVhc2UsIEdES19CVVRUT05fUFJJTUFSWSwgR0RLX0JVVFRPTjFfTUFT
SywgeCArIG9mZnNldFgsIHkgKyBvZmZzZXRZLCBtb2RpZmllcnMsIDAsICJ0b3VjaCIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdl
YmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAgICAg
ICAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdlc3R1cmVFbmFibGVkKCkp
IHsKKyNpZiBVU0UoR1RLNCkKKyAgICAgICAgICAgIGludDMyX3QgZXZlbnRUaW1lID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfdGlt
ZShHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSkpOworI2Vsc2UKKyAgICAgICAgICAgIGlu
dDMyX3QgZXZlbnRUaW1lID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oZ3RrX2dldF9jdXJyZW50X2V2
ZW50X3RpbWUoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSBz
Y3JvbGxEYXRhID0geyAuZGVsdGEgPSAwLCAuZXZlbnRUaW1lID0gZXZlbnRUaW1lLCAuaXNUb3Vj
aCA9IGZhbHNlLCAuaXNFbmQgPSB0cnVlIH07CisgICAgICAgICAgICBjb250cm9sbGVyLT5oYW5k
bGVTY3JvbGxXaGVlbEV2ZW50KCZzY3JvbGxEYXRhKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdDYW5jZWwoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopCit7Cisg
ICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29u
dHJvbGxlcih3ZWJWaWV3QmFzZSkpCisgICAgICAgIGNvbnRyb2xsZXItPmNhbmNlbFN3aXBlKCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hTd2lwZShXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UsIGdkb3VibGUgdmVsb2NpdHlYLCBnZG91YmxlIHZlbG9jaXR5
WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBpZiAocHJpdi0+cGFnZUdyYWJiZWRUb3Vj
aCB8fCAhcHJpdi0+aXNCZWluZ0RyYWdnZWQgfHwgcHJpdi0+aXNMb25nUHJlc3NlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZG91YmxlIHgsIHk7CisgICAgaWYgKGd0a19nZXN0dXJlX2dldF9w
b2ludChnZXN0dXJlLCBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RL
X0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKSwgJngsICZ5KSkKKyAgICAgICAgd2Via2l0V2ViVmll
d0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCh3ZWJWaWV3QmFzZSwgLXZlbG9jaXR5WCwgLXZlbG9j
aXR5WSwgeCwgeSwgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlLCBXaGVlbEV2ZW50UGhhc2U6OkJl
Z2FuKTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2Vf
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKQEAgLTE5NTYsMTIgKzIwNjIsNzIg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmpl
Y3QpCiAgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoY29udHJvbGxlciwgImtleS1yZWxlYXNl
ZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VLZXlSZWxlYXNlZCksIHZpZXdXaWRnZXQs
IEdfQ09OTkVDVF9TV0FQUEVEKTsKICAgICBndGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdX
aWRnZXQsIGNvbnRyb2xsZXIpOwogCisgICAgY29udHJvbGxlciA9IGd0a19ldmVudF9jb250cm9s
bGVyX2xlZ2FjeV9uZXcoKTsKKyAgICBndGtfZXZlbnRfY29udHJvbGxlcl9zZXRfcHJvcGFnYXRp
b25fcGhhc2UoR1RLX0VWRU5UX0NPTlRST0xMRVIoY29udHJvbGxlciksIEdUS19QSEFTRV9UQVJH
RVQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGNvbnRyb2xsZXIsICJldmVudCIsIEdf
Q0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50KSwgdmlld1dpZGdldCwgR19DT05O
RUNUX1NXQVBQRUQpOworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmlld1dpZGdldCwg
R1RLX0VWRU5UX0NPTlRST0xMRVIoY29udHJvbGxlcikpOworCiAgICAgYXV0byogZ2VzdHVyZSA9
IGd0a19nZXN0dXJlX2NsaWNrX25ldygpOwogICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfYnV0
dG9uKEdUS19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSwgMCk7CisgICAgZ3RrX2dlc3R1cmVfc2lu
Z2xlX3NldF9leGNsdXNpdmUoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKICAg
ICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChnZXN0dXJlLCAicHJlc3NlZCIsIEdfQ0FMTEJBQ0so
d2Via2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc2VkKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NX
QVBQRUQpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJyZWxlYXNlZCIs
IEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlZCksIHZpZXdXaWRnZXQs
IEdfQ09OTkVDVF9TV0FQUEVEKTsKICAgICBndGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdX
aWRnZXQsIEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKICNlbmRpZgorCisgICAgLy8g
VG91Y2ggZ2VzdHVyZXMKKyNpZiBVU0UoR1RLNCkKKyAgICBwcml2LT50b3VjaEdlc3R1cmVHcm91
cCA9IGd0a19nZXN0dXJlX3pvb21fbmV3KCk7CisgICAgZ3RrX3dpZGdldF9hZGRfY29udHJvbGxl
cih2aWV3V2lkZ2V0LCBHVEtfRVZFTlRfQ09OVFJPTExFUihwcml2LT50b3VjaEdlc3R1cmVHcm91
cCkpOworI2Vsc2UKKyAgICBwcml2LT50b3VjaEdlc3R1cmVHcm91cCA9IGd0a19nZXN0dXJlX3pv
b21fbmV3KHZpZXdXaWRnZXQpOworI2VuZGlmCisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3Qo
cHJpdi0+dG91Y2hHZXN0dXJlR3JvdXAsICJiZWdpbiIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmll
d0Jhc2Vab29tQmVnaW4pLCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CisgICAgZ19z
aWduYWxfY29ubmVjdF9vYmplY3QocHJpdi0+dG91Y2hHZXN0dXJlR3JvdXAsICJzY2FsZS1jaGFu
Z2VkIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVpvb21DaGFuZ2VkKSwgdmlld1dpZGdl
dCwgR19DT05ORUNUX1NXQVBQRUQpOworCisjaWYgVVNFKEdUSzQpCisgICAgZ2VzdHVyZSA9IGd0
a19nZXN0dXJlX2xvbmdfcHJlc3NfbmV3KCk7CisgICAgZ3RrX3dpZGdldF9hZGRfY29udHJvbGxl
cih2aWV3V2lkZ2V0LCBHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7CisjZWxzZQorICAg
IGF1dG8qIGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9sb25nX3ByZXNzX25ldyh2aWV3V2lkZ2V0KTsK
KyNlbmRpZgorICAgIGd0a19nZXN0dXJlX2dyb3VwKGdlc3R1cmUsIHByaXYtPnRvdWNoR2VzdHVy
ZUdyb3VwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RV
UkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChn
ZXN0dXJlLCAicHJlc3NlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VUb3VjaExvbmdQ
cmVzcyksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKworI2lmIFVTRShHVEs0KQor
ICAgIGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9jbGlja19uZXcoKTsKKyAgICBndGtfd2lkZ2V0X2Fk
ZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsK
KyNlbHNlCisgICAgZ2VzdHVyZSA9IGd0a19nZXN0dXJlX211bHRpX3ByZXNzX25ldyh2aWV3V2lk
Z2V0KTsKKyNlbmRpZgorICAgIGd0a19nZXN0dXJlX2dyb3VwKGdlc3R1cmUsIHByaXYtPnRvdWNo
R2VzdHVyZUdyb3VwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RL
X0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29i
amVjdChnZXN0dXJlLCAicHJlc3NlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VUb3Vj
aFByZXNzKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJyZWxlYXNlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmll
d0Jhc2VUb3VjaFJlbGVhc2UpLCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CisKKyNp
ZiBVU0UoR1RLNCkKKyAgICBnZXN0dXJlID0gZ3RrX2dlc3R1cmVfZHJhZ19uZXcoKTsKKyAgICBn
dGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19FVkVOVF9DT05UUk9MTEVS
KGdlc3R1cmUpKTsKKyNlbHNlCisgICAgZ2VzdHVyZSA9IGd0a19nZXN0dXJlX2RyYWdfbmV3KHZp
ZXdXaWRnZXQpOworI2VuZGlmCisgICAgZ3RrX2dlc3R1cmVfZ3JvdXAoZ2VzdHVyZSwgcHJpdi0+
dG91Y2hHZXN0dXJlR3JvdXApOworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25s
eShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfb2JqZWN0KGdlc3R1cmUsICJkcmFnLWJlZ2luIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3
QmFzZVRvdWNoRHJhZ0JlZ2luKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJkcmFnLXVwZGF0ZSIsIEdfQ0FMTEJB
Q0sod2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdVcGRhdGUpLCB2aWV3V2lkZ2V0LCBHX0NPTk5F
Q1RfU1dBUFBFRCk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwgImRyYWct
ZW5kIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0VuZCksIHZpZXdXaWRn
ZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChnZXN0
dXJlLCAiY2FuY2VsIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0NhbmNl
bCksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKworI2lmIFVTRShHVEs0KQorICAg
IGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9zd2lwZV9uZXcoKTsKKyAgICBndGtfd2lkZ2V0X2FkZF9j
b250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKKyNl
bHNlCisgICAgZ2VzdHVyZSA9IGd0a19nZXN0dXJlX3N3aXBlX25ldyh2aWV3V2lkZ2V0KTsKKyNl
bmRpZgorICAgIGd0a19nZXN0dXJlX2dyb3VwKGdlc3R1cmUsIHByaXYtPnRvdWNoR2VzdHVyZUdy
b3VwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RVUkVf
U0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChnZXN0
dXJlLCAic3dpcGUiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hTd2lwZSksIHZp
ZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJW
aWV3QmFzZUNsYXNzKQpAQCAtMjAwNCw3ICsyMTcwLDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJW
aWUKICNlbmRpZgogICAgIHdpZGdldENsYXNzLT5xdWVyeV90b29sdGlwID0gd2Via2l0V2ViVmll
d0Jhc2VRdWVyeVRvb2x0aXA7CiAjaWYgIVVTRShHVEs0KQotICAgIHdpZGdldENsYXNzLT5ldmVu
dCA9IHdlYmtpdFdlYlZpZXdCYXNlRXZlbnQ7CiAgICAgd2lkZ2V0Q2xhc3MtPmdldF9hY2Nlc3Np
YmxlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlOwogI2VuZGlmCiAjaWYgVVNFKEdU
SzQpCkBAIC0yMjkzLDE4ICsyNDU4LDE0IEBAIGJvb2wgd2Via2l0V2ViVmlld0Jhc2VNYWtlR0xD
b250ZXh0Q3VycmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiAKIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VXaWxsU3dhcFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYmtpdFdlYlZpZXdCYXNlKQogewotI2lmICFVU0UoR1RLNCkKICAgICBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdjsKICAgICBpZiAocHJp
di0+dmlld0dlc3R1cmVDb250cm9sbGVyKQogICAgICAgICBwcml2LT52aWV3R2VzdHVyZUNvbnRy
b2xsZXItPmRpc2Nvbm5lY3RGcm9tUHJvY2VzcygpOwotI2VuZGlmCiB9CiAKIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VEaWRFeGl0V2ViUHJvY2VzcyhXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2Vi
Vmlld0Jhc2UpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2
LT52aWV3R2VzdHVyZUNvbnRyb2xsZXIgPSBudWxscHRyOwotI2VuZGlmCiB9CiAKIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YmtpdFdlYlZpZXdCYXNlKQpAQCAtMjMxNywxNCArMjQ3OCwxMiBAQCB2b2lkIHdlYmtpdFdlYlZp
ZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJW
aWV3QmFzZQogICAgICAgICBhdXRvKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdB
cmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzKj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJl
YSgpKTsKICAgICAgICAgcHJpdi0+YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUtPnVwZGF0ZShkcmF3
aW5nQXJlYS0+bGF5ZXJUcmVlQ29udGV4dCgpKTsKICAgICB9Ci0jaWYgIVVTRShHVEs0KQogICAg
IGlmIChwcml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXIpCiAgICAgICAgIHByaXYtPnZpZXdHZXN0
dXJlQ29udHJvbGxlci0+Y29ubmVjdFRvUHJvY2VzcygpOwogICAgIGVsc2UgewogICAgICAgICBw
cml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyPigqcHJpdi0+cGFnZVByb3h5KTsKICAgICAgICAgcHJpdi0+dmlld0dlc3R1
cmVDb250cm9sbGVyLT5zZXRTd2lwZUdlc3R1cmVFbmFibGVkKHByaXYtPmlzQmFja0ZvcndhcmRO
YXZpZ2F0aW9uR2VzdHVyZUVuYWJsZWQpOwogICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlUGFnZUNsb3NlZChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UpCkBAIC0yMzU5LDU2ICsyNTE4LDQ0IEBAIFJlZlB0cjxXZWJLaXQ6OlZpZXdTbmFwc2hvdD4g
d2Via2l0V2ViVmlld0Jhc2VUYWtlVmlld1NuYXBzaG90KFdlYktpdFdlYlZpZXdCYXNlCiAKIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZShX
ZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0jaWYgIVVTRShHVEs0KQog
ICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNl
Vmlld0dlc3R1cmVDb250cm9sbGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBpZiAoY29udHJv
bGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkKICAgICAgICAgY29u
dHJvbGxlci0+ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUoKTsKLSNlbmRpZgog
fQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
Rm9yTWFpbkZyYW1lKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKLSNp
ZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Vi
a2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwog
ICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgp
KQogICAgICAgICBjb250cm9sbGVyLT5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JN
YWluRnJhbWUoKTsKLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkRmluaXNo
TmF2aWdhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIEFQSTo6TmF2
aWdhdGlvbiogbmF2aWdhdGlvbikKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1cmVD
b250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRy
b2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xs
ZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKQogICAgICAgICBjb250cm9sbGVyLT5kaWRGaW5p
c2hOYXZpZ2F0aW9uKG5hdmlnYXRpb24pOwotI2VuZGlmCiB9CiAKIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VEaWRGYWlsTmF2aWdhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbikKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAg
Vmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3
R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVy
ICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKQogICAgICAgICBjb250cm9s
bGVyLT5kaWRGYWlsTmF2aWdhdGlvbihuYXZpZ2F0aW9uKTsKLSNlbmRpZgogfQogCiB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlRGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZShXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIFNhbWVEb2N1bWVudE5hdmlnYXRpb25U
eXBlIHR5cGUpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciog
Y29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYmtp
dFdlYlZpZXdCYXNlKTsKICAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBl
R2VzdHVyZUVuYWJsZWQoKSkKICAgICAgICAgY29udHJvbGxlci0+ZGlkU2FtZURvY3VtZW50TmF2
aWdhdGlvbkZvck1haW5GcmFtZSh0eXBlKTsKLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdlYlZp
ZXdCYXNlRGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRX
ZWJWaWV3QmFzZSkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVy
KiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIod2Vi
a2l0V2ViVmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dp
cGVHZXN0dXJlRW5hYmxlZCgpKQogICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+dmll
d0dlc3R1cmVDb250cm9sbGVyLT5kaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKLSNlbmRpZgog
fQogCiAjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjQsIDApCkBAIC0yNzc3LDMgKzI5MjQsMTAg
QEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50KFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZG91YmwKICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZVdo
ZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCh7IHgsIHkgfSwgd2lkZ2V0Um9vdENvb3JkcyhH
VEtfV0lER0VUKHdlYlZpZXdCYXNlKSwgeCwgeSksCiAgICAgICAgIGRlbHRhLCB3aGVlbFRpY2tz
LCB0b1dlYktpdFdoZWVsRXZlbnRQaGFzZShwaGFzZSksIHRvV2ViS2l0V2hlZWxFdmVudFBoYXNl
KG1vbWVudHVtUGhhc2UpKSk7CiB9CisKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VQYWdlR3JhYmJl
ZFRvdWNoKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBwcml2LT5wYWdl
R3JhYmJlZFRvdWNoID0gdHJ1ZTsKKyAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUocHJpdi0+dG91
Y2hHZXN0dXJlR3JvdXAsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgKaW5kZXggMGI0MzhkYWE0NDFlLi4wOGI3MGFjYzkzYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUuaApAQCAtMjgsNyArMjgsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElQ
YWdlQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIkdlc3R1cmVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiSW5wdXRNZXRob2RTdGF0ZS5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5hdmlnYXRp
b25UeXBlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCkBAIC04OCwxNSArODcsOSBA
QCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNlKiwgV2Vi
Q29yZTo6U2VsZWN0aW9uRGF0YSYmLCBPcAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbihXZWJLaXRXZWJWaWV3QmFzZSopOwogI2VuZGlmCiAKLSNp
ZiAhVVNFKEdUSzQpCi1XZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFz
ZUdlc3R1cmVDb250cm9sbGVyKFdlYktpdFdlYlZpZXdCYXNlKik7Ci0jZW5kaWYKLQogUmVmUHRy
PFdlYktpdDo6Vmlld1NuYXBzaG90PiB3ZWJraXRXZWJWaWV3QmFzZVRha2VWaWV3U25hcHNob3Qo
V2ViS2l0V2ViVmlld0Jhc2UqLCBPcHRpb25hbDxXZWJDb3JlOjpJbnRSZWN0PiYmKTsKIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VTZXRFbmFibGVCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlKFdl
YktpdFdlYlZpZXdCYXNlKiwgYm9vbCBlbmFibGVkKTsKLSNpZiAhVVNFKEdUSzQpCiBXZWJLaXQ6
OlZpZXdHZXN0dXJlQ29udHJvbGxlciogd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRy
b2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqKTsKLSNlbmRpZgogCiBib29sIHdlYmtpdFdlYlZpZXdC
YXNlQmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nKFdlYktpdFdlYlZpZXdCYXNlKik7CiBib29sIHdl
YmtpdFdlYlZpZXdCYXNlQ29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nKFdlYktpdFdlYlZpZXdC
YXNlKik7CkBAIC0xMjAsMyArMTEzLDUgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZExvc2VQ
b2ludGVyTG9jayhXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNl
dElucHV0TWV0aG9kQ29udGV4dChXZWJLaXRXZWJWaWV3QmFzZSosIFdlYktpdElucHV0TWV0aG9k
Q29udGV4dCopOwogV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiB3ZWJraXRXZWJWaWV3QmFzZUdl
dElucHV0TWV0aG9kQ29udGV4dChXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVN5bnRoZXNpemVDb21wb3NpdGlvbktleVByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25V
bmRlcmxpbmU+PiYmLCBPcHRpb25hbDxXZWJLaXQ6OkVkaXRpbmdSYW5nZT4mJik7CisKK3ZvaWQg
d2Via2l0V2ViVmlld0Jhc2VQYWdlR3JhYmJlZFRvdWNoKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJr
aXRXZWJWaWV3QmFzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3
R2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdHZXN0dXJl
Q29udHJvbGxlci5oCmluZGV4IGYyNWU3OTIzZDNhZi4uYjg2ZTAwYjZjMjlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtNzQsOCAr
NzQsMTMgQEAgY2xhc3MgTmF2aWdhdGlvbjsKICNpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIE5T
RXZlbnQqIFBsYXRmb3JtU2Nyb2xsRXZlbnQ7CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVm
IHN0cnVjdCBfR2RrRXZlbnRTY3JvbGwgR2RrRXZlbnRTY3JvbGw7Ci10eXBlZGVmIEdka0V2ZW50
U2Nyb2xsKiBQbGF0Zm9ybVNjcm9sbEV2ZW50OwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGRvdWJs
ZSBkZWx0YTsKKyAgICBpbnQzMl90IGV2ZW50VGltZTsKKyAgICBib29sIGlzVG91Y2g7CisgICAg
Ym9vbCBpc0VuZDsKK30gUGxhdGZvcm1HdGtTY3JvbGxEYXRhOwordHlwZWRlZiBQbGF0Zm9ybUd0
a1Njcm9sbERhdGEqIFBsYXRmb3JtU2Nyb2xsRXZlbnQ7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC0xNzMsNyArMTc4LDExIEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKEdUSykK
ICAgICB2b2lkIGNhbmNlbFN3aXBlKCk7CisjaWYgVVNFKEdUSzQpCisgICAgdm9pZCBzbmFwc2hv
dChHdGtTbmFwc2hvdCosIEdza1JlbmRlck5vZGUqKTsKKyNlbHNlCiAgICAgdm9pZCBkcmF3KGNh
aXJvX3QqLCBjYWlyb19wYXR0ZXJuX3QqKTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICAvLyBUZXN0
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJjNDUxY2Y1YzQyLi4wMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHZXN0dXJlQ29udHJvbGxlci5oIgotCi0jaWYgIVVTRShHVEs0KQotCi0jaW5jbHVkZSA8
V2ViQ29yZS9TY3JvbGxiYXIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUg
bWF4aW11bVpvb20gPSAzLjA7Ci0KLUdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxl
cihHdGtXaWRnZXQqIHdpZGdldCwgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyQ2xp
ZW50PiYmIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KFdURk1vdmUoY2xpZW50KSkKLSAgICAsIG1f
ZHJhZ0dlc3R1cmUod2lkZ2V0LCAqbV9jbGllbnQpCi0gICAgLCBtX3N3aXBlR2VzdHVyZSh3aWRn
ZXQsICptX2NsaWVudCkKLSAgICAsIG1fem9vbUdlc3R1cmUod2lkZ2V0LCAqbV9jbGllbnQpCi0g
ICAgLCBtX2xvbmdwcmVzc0dlc3R1cmUod2lkZ2V0LCAqbV9jbGllbnQpCi17Ci19Ci0KLWJvb2wg
R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBi
b29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7Ci0gICAg
Ym9vbCB0b3VjaEVuZDsKLSAgICBtX2RyYWdHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKLSAg
ICBtX3N3aXBlR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7Ci0gICAgbV96b29tR2VzdHVyZS5o
YW5kbGVFdmVudChldmVudCk7Ci0gICAgbV9sb25ncHJlc3NHZXN0dXJlLmhhbmRsZUV2ZW50KGV2
ZW50KTsKLSAgICB0b3VjaEVuZCA9IChnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpID09
IEdES19UT1VDSF9FTkQpIHx8IChnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpID09IEdE
S19UT1VDSF9DQU5DRUwpOwotICAgIHJldHVybiB0b3VjaEVuZCA/IHdhc1Byb2Nlc3NpbmdHZXN0
dXJlcyA6IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7Ci19Ci0KLWJvb2wgR2VzdHVyZUNvbnRyb2xs
ZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kcmFnR2Vz
dHVyZS5pc0FjdGl2ZSgpIHx8IG1fc3dpcGVHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2Vz
dHVyZS5pc0FjdGl2ZSgpIHx8IG1fbG9uZ3ByZXNzR2VzdHVyZS5pc0FjdGl2ZSgpOwotfQotCi1H
ZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6R2VzdHVyZShHdGtHZXN0dXJlKiBnZXN0dXJlLCBH
ZXN0dXJlQ29udHJvbGxlckNsaWVudCYgY2xpZW50KQotICAgIDogbV9nZXN0dXJlKGFkb3B0R1Jl
ZihnZXN0dXJlKSkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLXsKLSAgICBndGtfZXZlbnRfY29u
dHJvbGxlcl9zZXRfcHJvcGFnYXRpb25fcGhhc2UoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0
dXJlLmdldCgpKSwgR1RLX1BIQVNFX05PTkUpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVy
OjpHZXN0dXJlOjpyZXNldCgpCi17Ci0gICAgZ3RrX2V2ZW50X2NvbnRyb2xsZXJfcmVzZXQoR1RL
X0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSk7Ci19Ci0KLWJvb2wgR2VzdHVyZUNv
bnRyb2xsZXI6Okdlc3R1cmU6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ3RrX2dl
c3R1cmVfaXNfYWN0aXZlKG1fZ2VzdHVyZS5nZXQoKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRy
b2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBndGtf
ZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0
dXJlLmdldCgpKSwgZXZlbnQpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2Vz
dHVyZTo6c3RhcnREcmFnKEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQoIW1faW5EcmFn
KTsKLSAgICBtX2NsaWVudC5zdGFydERyYWcocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudFRvdWNo
Kj4oZXZlbnQpLCBtX3N0YXJ0KTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dl
c3R1cmU6OmhhbmRsZURyYWcoR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkpCi17
Ci0gICAgQVNTRVJUKG1faW5EcmFnKTsKLSAgICBtX2NsaWVudC5kcmFnKHJlaW50ZXJwcmV0X2Nh
c3Q8R2RrRXZlbnRUb3VjaCo+KGV2ZW50KSwgbV9zdGFydCwKLSAgICAgICAgRmxvYXRQb2ludDo6
bmFycm93UHJlY2lzaW9uKChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpjYW5j
ZWxEcmFnKCkKLXsKLSAgICBBU1NFUlQobV9pbkRyYWcpOwotICAgIG1fY2xpZW50LmNhbmNlbERy
YWcoKTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZVRh
cChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFtX2luRHJhZyk7Ci0gICAgbV9jbGll
bnQudGFwKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRUb3VjaCo+KGV2ZW50KSk7Ci19Ci0KLXZv
aWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSogZHJh
Z0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAg
ICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3Vy
cmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOwotICAgIGd0a19nZXN0
dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVF
TkNFX0NMQUlNRUQpOwotICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IGZhbHNlOwotICAgIGRy
YWdHZXN0dXJlLT5tX3N0YXJ0LnNldCh4LCB5KTsKLSAgICBkcmFnR2VzdHVyZS0+bV9vZmZzZXQu
c2V0KDAsIDApOwotCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtfZXZlbnRfY29udHJvbGxl
cl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKLSAgICB1bnNpZ25l
ZCBkZWxheTsKLSAgICBnX29iamVjdF9nZXQoZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3Mod2lkZ2V0
KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAmZGVsYXksIG51bGxwdHIpOwotICAgIGRyYWdHZXN0
dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RhcnRPbmVTaG90KDFfbXMgKiBkZWxheSk7Ci0gICAg
ZHJhZ0dlc3R1cmUtPnN0YXJ0RHJhZyhjb25zdF9jYXN0PEdka0V2ZW50Kj4oZ3RrX2dlc3R1cmVf
Z2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBk
b3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAgR2RrRXZlbnRT
ZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVu
Y2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKLSAgICBndGtfZ2VzdHVyZV9zZXRfc2Vx
dWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVE
KTsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X3dp
ZGdldChHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7Ci0gICAgaWYgKCFkcmFnR2VzdHVy
ZS0+bV9pbkRyYWcgJiYgZ3RrX2RyYWdfY2hlY2tfdGhyZXNob2xkKHdpZGdldCwgZHJhZ0dlc3R1
cmUtPm1fc3RhcnQueCgpLCBkcmFnR2VzdHVyZS0+bV9zdGFydC55KCksIGRyYWdHZXN0dXJlLT5t
X3N0YXJ0LngoKSArIHgsIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LnkoKSArIHkpKSB7Ci0gICAgICAg
IGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IHRydWU7Ci0gICAgICAgIGRyYWdHZXN0dXJlLT5tX2xv
bmdQcmVzc1RpbWVvdXQuc3RvcCgpOwotICAgIH0KLQotICAgIGlmIChkcmFnR2VzdHVyZS0+bV9p
bkRyYWcpCi0gICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVEcmFnKGNvbnN0X2Nhc3Q8R2RrRXZl
bnQqPihndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpLCB4LCB5
KTsKLSAgICBkcmFnR2VzdHVyZS0+bV9vZmZzZXQuc2V0KHgsIHkpOwotfQotCi12b2lkIEdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5kKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwg
R2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UsIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAg
ZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5zdG9wKCk7Ci0gICAgaWYgKCFndGtfZ2Vz
dHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkgewotICAgICAgICBndGtf
Z2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcpIHsK
LSAgICAgICAgZHJhZ0dlc3R1cmUtPmhhbmRsZVRhcChjb25zdF9jYXN0PEdka0V2ZW50Kj4oZ3Rr
X2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKSk7Ci0gICAgICAgIGd0
a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsK
LSAgICB9Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpjYW5jZWwo
RHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSwgR3Rr
R2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0
LnN0b3AoKTsKLSAgICBkcmFnR2VzdHVyZS0+Y2FuY2VsRHJhZygpOwotfQotCi12b2lkIEdlc3R1
cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9uZ1ByZXNzRmlyZWQoKQotewotICAgIG1faW5E
cmFnID0gdHJ1ZTsKLX0KLQotR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFnR2Vz
dHVyZShHdGtXaWRnZXQqIHdpZGdldCwgR2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkK
LSAgICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVfZHJhZ19uZXcod2lkZ2V0KSwgY2xpZW50KQotICAg
ICwgbV9sb25nUHJlc3NUaW1lb3V0KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkdlc3R1cmVDb250
cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9uZ1ByZXNzRmlyZWQpCi17Ci0gICAgZ3RrX2dlc3R1cmVf
c2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkp
LCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAi
ZHJhZy1iZWdpbiIsIEdfQ0FMTEJBQ0soYmVnaW4pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZHJhZy11cGRhdGUiLCBHX0NBTExCQUNLKHVw
ZGF0ZSksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0
KCksICJlbmQiLCBHX0NBTExCQUNLKGVuZCksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJjYW5jZWwiLCBHX0NBTExCQUNLKGNhbmNlbCksIHRo
aXMpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9t
ZW50dW1TY3JvbGwoR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVs
b2NpdHlZKQotewotICAgIG1fY2xpZW50LnN3aXBlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRU
b3VjaCo+KGV2ZW50KSwgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKHZlbG9jaXR5WCwgdmVs
b2NpdHlZKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dp
cGUoU3dpcGVHZXN0dXJlKiBzd2lwZUdlc3R1cmUsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2
ZWxvY2l0eVksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAgR2RrRXZlbnRTZXF1ZW5jZSog
c2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dF
U1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKLSAgICBpZiAoIWd0a19nZXN0dXJlX2hhbmRsZXNfc2Vx
dWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBndGtfZ2Vz
dHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9TRVFV
RU5DRV9DTEFJTUVEKTsKLQotICAgIHN3aXBlR2VzdHVyZS0+c3RhcnRNb21lbnR1bVNjcm9sbChj
b25zdF9jYXN0PEdka0V2ZW50Kj4oZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwg
c2VxdWVuY2UpKSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVkpOwotfQotCi1HZXN0dXJlQ29udHJvbGxl
cjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1cmVD
b250cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3N3aXBl
X25ldyh3aWRnZXQpLCBjbGllbnQpCi17Ci0gICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3Vj
aF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic3dpcGUiLCBHX0NBTExC
QUNLKHN3aXBlKSwgdGhpcyk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0
dXJlOjpiZWdpbihab29tR2VzdHVyZSogem9vbUdlc3R1cmUsIEdka0V2ZW50U2VxdWVuY2UqLCBH
dGtHZXN0dXJlKiBnZXN0dXJlKQotewotICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJl
LCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7Ci0gICAgem9vbUdlc3R1cmUtPnN0YXJ0Wm9v
bSgpOwotfQotCi1JbnRQb2ludCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNlbnRl
cigpIGNvbnN0Ci17Ci0gICAgZG91YmxlIHgsIHk7Ci0gICAgZ3RrX2dlc3R1cmVfZ2V0X2JvdW5k
aW5nX2JveF9jZW50ZXIobV9nZXN0dXJlLmdldCgpLCAmeCwgJnkpOwotICAgIHJldHVybiBJbnRQ
b2ludCh4LCB5KTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OnN0
YXJ0Wm9vbSgpCi17Ci0gICAgbV9jbGllbnQuc3RhcnRab29tKGNlbnRlcigpLCBtX2luaXRpYWxT
Y2FsZSwgbV9pbml0aWFsUG9pbnQpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpab29t
R2VzdHVyZTo6aGFuZGxlWm9vbSgpCi17Ci0gICAgRmxvYXRQb2ludCBzY2FsZWRab29tQ2VudGVy
KG1faW5pdGlhbFBvaW50KTsKLSAgICBzY2FsZWRab29tQ2VudGVyLnNjYWxlKG1fc2NhbGUpOwot
Ci0gICAgbV9jbGllbnQuem9vbShtX3NjYWxlLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoRmxv
YXRQb2ludChzY2FsZWRab29tQ2VudGVyIC0gbV92aWV3UG9pbnQpKSk7Ci19Ci0KLXZvaWQgR2Vz
dHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpzY2FsZUNoYW5nZWQoWm9vbUdlc3R1cmUqIHpv
b21HZXN0dXJlLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUqKQotewotICAgIHpvb21HZXN0dXJl
LT5tX3NjYWxlID0gem9vbUdlc3R1cmUtPm1faW5pdGlhbFNjYWxlICogc2NhbGU7Ci0gICAgaWYg
KHpvb21HZXN0dXJlLT5tX3NjYWxlIDwgMS4wKQotICAgICAgICB6b29tR2VzdHVyZS0+bV9zY2Fs
ZSA9IDEuMDsKLSAgICBpZiAoem9vbUdlc3R1cmUtPm1fc2NhbGUgPiBtYXhpbXVtWm9vbSkKLSAg
ICAgICAgem9vbUdlc3R1cmUtPm1fc2NhbGUgPSBtYXhpbXVtWm9vbTsKLQotICAgIHpvb21HZXN0
dXJlLT5tX3ZpZXdQb2ludCA9IHpvb21HZXN0dXJlLT5jZW50ZXIoKTsKLQotICAgIGlmICh6b29t
R2VzdHVyZS0+bV9pZGxlLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHpvb21H
ZXN0dXJlLT5tX2lkbGUuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLUdlc3R1cmVDb250cm9sbGVy
Ojpab29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1cmVDb250
cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3pvb21fbmV3
KHdpZGdldCksIGNsaWVudCkKLSAgICAsIG1faWRsZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZH
ZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmhhbmRsZVpvb20pCi17Ci0gICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImJlZ2luIiwgR19DQUxMQkFDSyhi
ZWdpbiksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0
KCksICJzY2FsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyhzY2FsZUNoYW5nZWQpLCB0aGlzKTsKLX0K
LQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6TG9uZ1ByZXNzR2VzdHVyZTo6bG9uZ1ByZXNzZWQo
R2RrRXZlbnQqIGV2ZW50KQotewotICAgIG1fY2xpZW50LmxvbmdQcmVzcyhyZWludGVycHJldF9j
YXN0PEdka0V2ZW50VG91Y2gqPihldmVudCkpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVy
OjpMb25nUHJlc3NHZXN0dXJlOjpwcmVzc2VkKExvbmdQcmVzc0dlc3R1cmUqIGxvbmdwcmVzc0dl
c3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAgICBH
ZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVu
dF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOwotICAgIGlmICghZ3RrX2dl
c3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5j
ZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOwotCi0gICAgbG9uZ3ByZXNzR2VzdHVyZS0+
bG9uZ1ByZXNzZWQoY29uc3RfY2FzdDxHZGtFdmVudCo+KGd0a19nZXN0dXJlX2dldF9sYXN0X2V2
ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSkpOwotfQotCi1HZXN0dXJlQ29udHJvbGxlcjo6TG9uZ1By
ZXNzR2VzdHVyZTo6TG9uZ1ByZXNzR2VzdHVyZShHdGtXaWRnZXQqIHdpZGdldCwgR2VzdHVyZUNv
bnRyb2xsZXJDbGllbnQmIGNsaWVudCkKLSAgICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVfbG9uZ19w
cmVzc19uZXcod2lkZ2V0KSwgY2xpZW50KQotewotICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRf
dG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInByZXNzZWQiLCBH
X0NBTExCQUNLKHByZXNzZWQpLCB0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xs
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0NmQ0NTg0ZTYxLi4wMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmICFVU0UoR1RL
NCkKLQotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIv
R1JlZlB0ci5oPgotCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKLXR5cGVkZWYg
c3RydWN0IF9HZGtFdmVudFRvdWNoIEdka0V2ZW50VG91Y2g7Ci10eXBlZGVmIHN0cnVjdCBfR2Rr
RXZlbnRTZXF1ZW5jZSBHZGtFdmVudFNlcXVlbmNlOwotdHlwZWRlZiBzdHJ1Y3QgX0d0a0dlc3R1
cmUgR3RrR2VzdHVyZTsKLQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgR2VzdHVyZUNv
bnRyb2xsZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkdlc3R1cmVDb250cm9sbGVy
Q2xpZW50KCkgPSBkZWZhdWx0OwotCi0gICAgdmlydHVhbCB2b2lkIHRhcChHZGtFdmVudFRvdWNo
KikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhHZGtFdmVudFRvdWNoKiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhZyhHZGtF
dmVudFRvdWNoKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbERyYWcoKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc3dpcGUoR2RrRXZlbnRUb3VjaCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRab29tKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBjZW50ZXIsIGRvdWJsZSYgaW5pdGlhbFNjYWxlLCBXZWJDb3JlOjpJbnRQb2lu
dCYgaW5pdGlhbFBvaW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHpvb20oZG91YmxlIHNjYWxl
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb3JpZ2luKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgbG9uZ1ByZXNzKEdka0V2ZW50VG91Y2gqKSA9IDA7Ci19OwotCi1jbGFzcyBHZXN0dXJlQ29u
dHJvbGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2VzdHVyZUNvbnRyb2xsZXIpOwot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgR2VzdHVyZUNvbnRy
b2xsZXIoR3RrV2lkZ2V0Kiwgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyQ2xpZW50
PiYmKTsKLQotICAgIGJvb2wgaXNQcm9jZXNzaW5nR2VzdHVyZXMoKSBjb25zdDsKLSAgICBib29s
IGhhbmRsZUV2ZW50KEdka0V2ZW50Kik7Ci0KLSAgICB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAg
ICAgIG1fZHJhZ0dlc3R1cmUucmVzZXQoKTsKLSAgICAgICAgbV9zd2lwZUdlc3R1cmUucmVzZXQo
KTsKLSAgICAgICAgbV96b29tR2VzdHVyZS5yZXNldCgpOwotICAgICAgICBtX2xvbmdwcmVzc0dl
c3R1cmUucmVzZXQoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgR2VzdHVyZSB7Ci0g
ICAgcHVibGljOgotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgICAgIGJvb2wgaXNBY3RpdmUo
KSBjb25zdDsKLSAgICAgICAgdm9pZCBoYW5kbGVFdmVudChHZGtFdmVudCopOwotCi0gICAgcHJv
dGVjdGVkOgotICAgICAgICBHZXN0dXJlKEd0a0dlc3R1cmUqLCBHZXN0dXJlQ29udHJvbGxlckNs
aWVudCYpOwotCi0gICAgICAgIEdSZWZQdHI8R3RrR2VzdHVyZT4gbV9nZXN0dXJlOwotICAgICAg
ICBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYgbV9jbGllbnQ7Ci0gICAgfTsKLQotICAgIGNsYXNz
IERyYWdHZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgRHJhZ0dlc3R1cmUoR3RrV2lkZ2V0KiwgR2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmKTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBzdGFydGVkLCBhbGxv
d2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgotICAgICAgICB2b2lkIHN0YXJ0RHJh
ZyhHZGtFdmVudCopOwotICAgICAgICB2b2lkIGhhbmRsZURyYWcoR2RrRXZlbnQqLCBkb3VibGUg
eCwgZG91YmxlIHkpOwotICAgICAgICB2b2lkIGNhbmNlbERyYWcoKTsKLSAgICAgICAgdm9pZCBo
YW5kbGVUYXAoR2RrRXZlbnQqKTsKLSAgICAgICAgdm9pZCBsb25nUHJlc3NGaXJlZCgpOwotCi0g
ICAgICAgIHN0YXRpYyB2b2lkIGJlZ2luKERyYWdHZXN0dXJlKiwgZG91YmxlIHgsIGRvdWJsZSB5
LCBHdGtHZXN0dXJlKik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHVwZGF0ZShEcmFnR2VzdHVyZSos
IGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBl
bmQoRHJhZ0dlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopOwotICAgICAg
ICBzdGF0aWMgdm9pZCBjYW5jZWwoRHJhZ0dlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwgR3Rr
R2VzdHVyZSopOwotCi0gICAgICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9zdGFydDsKLSAgICAg
ICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX29mZnNldDsKLSAgICAgICAgUnVuTG9vcDo6VGltZXI8
RHJhZ0dlc3R1cmU+IG1fbG9uZ1ByZXNzVGltZW91dDsKLSAgICAgICAgR1JlZlB0cjxHdGtHZXN0
dXJlPiBtX2xvbmdQcmVzczsKLSAgICAgICAgYm9vbCBtX2luRHJhZyB7IGZhbHNlIH07Ci0gICAg
fTsKLQotICAgIGNsYXNzIFN3aXBlR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFN3aXBlR2VzdHVyZShHdGtXaWRnZXQqLCBHZXN0dXJlQ29udHJv
bGxlckNsaWVudCYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzdGFydE1vbWVudHVt
U2Nyb2xsKEdka0V2ZW50KiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSk7Ci0K
LSAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUoU3dpcGVHZXN0dXJlKiwgZG91YmxlIHZlbG9jaXR5
WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSopOwotICAgIH07Ci0KLSAgICBjbGFzcyBa
b29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFpvb21HZXN0dXJlKEd0a1dpZGdldCosIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50Jik7Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBjZW50ZXIoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzdGFydFpvb20oKTsKLSAgICAgICAgdm9pZCBoYW5kbGVab29tKCk7Ci0KLSAg
ICAgICAgc3RhdGljIHZvaWQgYmVnaW4oWm9vbUdlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwg
R3RrR2VzdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBzY2FsZUNoYW5nZWQoWm9vbUdlc3R1
cmUqLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUqKTsKLQotICAgICAgICBkb3VibGUgbV9pbml0
aWFsU2NhbGUgeyAwIH07Ci0gICAgICAgIGRvdWJsZSBtX3NjYWxlIHsgMCB9OwotICAgICAgICBX
ZWJDb3JlOjpJbnRQb2ludCBtX2luaXRpYWxQb2ludDsKLSAgICAgICAgV2ViQ29yZTo6SW50UG9p
bnQgbV92aWV3UG9pbnQ7Ci0gICAgICAgIFJ1bkxvb3A6OlRpbWVyPFpvb21HZXN0dXJlPiBtX2lk
bGU7Ci0gICAgfTsKLQotICAgIGNsYXNzIExvbmdQcmVzc0dlc3R1cmUgZmluYWwgOiBwdWJsaWMg
R2VzdHVyZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMb25nUHJlc3NHZXN0dXJlKEd0a1dpZGdl
dCosIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2
b2lkIGxvbmdQcmVzc2VkKEdka0V2ZW50Kik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgcHJlc3Nl
ZChMb25nUHJlc3NHZXN0dXJlKiwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7Ci0g
ICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlckNsaWVudD4gbV9j
bGllbnQ7Ci0gICAgRHJhZ0dlc3R1cmUgbV9kcmFnR2VzdHVyZTsKLSAgICBTd2lwZUdlc3R1cmUg
bV9zd2lwZUdlc3R1cmU7Ci0gICAgWm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKLSAgICBMb25n
UHJlc3NHZXN0dXJlIG1fbG9uZ3ByZXNzR2VzdHVyZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9W
aWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3Rr
L1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKaW5kZXggMzVhNzlhNWY3OWQ4Li5kNGNjY2Qz
YmMyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3
R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCkBAIC00OCw5ICs0OCw5IEBAIHN0YXRpYyBjb25zdCBk
b3VibGUgc3dpcGVBbmltYXRpb25EdXJhdGlvbk11bHRpcGxpZXIgPSAzOwogc3RhdGljIGNvbnN0
IGRvdWJsZSBzd2lwZUNhbmNlbEFyZWEgPSAwLjU7CiBzdGF0aWMgY29uc3QgZG91YmxlIHN3aXBl
Q2FuY2VsVmVsb2NpdHlUaHJlc2hvbGQgPSAwLjQ7CiAKLXN0YXRpYyBib29sIGlzRXZlbnRTdG9w
KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3N0YXRpYyBib29sIGlzRXZlbnRTdG9wKFBsYXRmb3Jt
R3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGdka19ldmVudF9pc19zY3JvbGxf
c3RvcF9ldmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKyAgICByZXR1
cm4gZXZlbnQtPmlzRW5kOwogfQogCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cGxhdGZv
cm1UZWFyZG93bigpCkBAIC01OCw0NSArNTgsMzQgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OnBsYXRmb3JtVGVhcmRvd24oKQogICAgIGNhbmNlbFN3aXBlKCk7CiB9CiAKLWJvb2wgVmll
d0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhblN0
YXJ0U3dpcGUoR2RrRXZlbnRTY3JvbGwqKQorYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBl
bmRpbmdTd2lwZVRyYWNrZXI6OnNjcm9sbEV2ZW50Q2FuU3RhcnRTd2lwZShQbGF0Zm9ybUd0a1Nj
cm9sbERhdGEqKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5FbmRTd2lwZShHZGtF
dmVudFNjcm9sbCogZXZlbnQpCitib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3
aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5FbmRTd2lwZShQbGF0Zm9ybUd0a1Njcm9sbERhdGEq
IGV2ZW50KQogewogICAgIHJldHVybiBpc0V2ZW50U3RvcChldmVudCk7CiB9CiAKLWJvb2wgVmll
d0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhbklu
Zmx1ZW5jZVN3aXBlKEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK2Jvb2wgVmlld0dlc3R1cmVDb250
cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhbkluZmx1ZW5jZVN3aXBl
KFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7Ci0gICAgR2RrRGV2aWNlKiBkZXZpY2Ug
PSBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2UocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSk7Ci0gICAgR2RrSW5wdXRTb3VyY2Ugc291cmNlID0gZ2RrX2RldmljZV9nZXRfc291
cmNlKGRldmljZSk7Ci0KLSAgICBib29sIGlzRGV2aWNlQWxsb3dlZCA9IHNvdXJjZSA9PSBHREtf
U09VUkNFX1RPVUNIUEFEIHx8IHNvdXJjZSA9PSBHREtfU09VUkNFX1RPVUNIU0NSRUVOIHx8IG1f
dmlld0dlc3R1cmVDb250cm9sbGVyLm1faXNTaW11bGF0ZWRTd2lwZTsKLQotICAgIHJldHVybiBn
ZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KSwgbnVsbHB0ciwgbnVsbHB0cikgJiYgaXNEZXZpY2VBbGxvd2VkOworICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgYm9vbCBpc1RvdWNoRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50
KQorc3RhdGljIGJvb2wgaXNUb3VjaEV2ZW50KFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQp
CiB7Ci0gICAgR2RrRGV2aWNlKiBkZXZpY2UgPSBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2Uo
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7Ci0gICAgR2RrSW5wdXRTb3VyY2Ug
c291cmNlID0gZ2RrX2RldmljZV9nZXRfc291cmNlKGRldmljZSk7Ci0KLSAgICByZXR1cm4gc291
cmNlID09IEdES19TT1VSQ0VfVE9VQ0hTQ1JFRU47CisgICAgcmV0dXJuIGV2ZW50LT5pc1RvdWNo
OwogfQogCi1GbG9hdFNpemUgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFj
a2VyOjpzY3JvbGxFdmVudEdldFNjcm9sbGluZ0RlbHRhcyhHZGtFdmVudFNjcm9sbCogZXZlbnQp
CitGbG9hdFNpemUgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpz
Y3JvbGxFdmVudEdldFNjcm9sbGluZ0RlbHRhcyhQbGF0Zm9ybUd0a1Njcm9sbERhdGEqIGV2ZW50
KQogewogICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gaXNUb3VjaEV2ZW50KGV2ZW50KSA/IFNjcm9s
bGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSA6IGd0a1Njcm9sbERlbHRhTXVsdGlwbGllcjsKLSAg
ICBkb3VibGUgeERlbHRhLCB5RGVsdGE7Ci0gICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVsdGFz
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksICZ4RGVsdGEsICZ5RGVsdGEpOwot
Ci0gICAgLy8gR2RrRXZlbnRTY3JvbGwgZGVsdGFzIGFyZSBpbnZlcnRlZCBjb21wYXJlZCB0byBO
U0V2ZW50LCBzbyBpbnZlcnQgdGhlbSBhZ2FpbgotICAgIHJldHVybiAtRmxvYXRTaXplKHhEZWx0
YSwgeURlbHRhKSAqIG11bHRpcGxpZXI7CisgICAgLy8gR1RLIGRlbHRhcyBhcmUgaW52ZXJ0ZWQg
Y29tcGFyZWQgdG8gTlNFdmVudCwgc28gaW52ZXJ0IHRoZW0gYWdhaW4KKyAgICByZXR1cm4gLUZs
b2F0U2l6ZShldmVudC0+ZGVsdGEsIDApICogbXVsdGlwbGllcjsKIH0KIAotYm9vbCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2
ZW50KQorYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQo
UGxhdGZvcm1HdGtTY3JvbGxEYXRhKiBldmVudCkKIHsKICAgICByZXR1cm4gbV9zd2lwZVByb2dy
ZXNzVHJhY2tlci5oYW5kbGVFdmVudChldmVudCkgfHwgbV9wZW5kaW5nU3dpcGVUcmFja2VyLmhh
bmRsZUV2ZW50KGV2ZW50KTsKIH0KQEAgLTE0Niw3ICsxMzUsNyBAQCB2b2lkIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OnJlc2V0KCkKICAgICBtX2NhbmNlbGxl
ZCA9IGZhbHNlOwogfQogCi1ib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVz
c1RyYWNrZXI6OmhhbmRsZUV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK2Jvb2wgVmlld0dl
c3R1cmVDb250cm9sbGVyOjpTd2lwZVByb2dyZXNzVHJhY2tlcjo6aGFuZGxlRXZlbnQoUGxhdGZv
cm1HdGtTY3JvbGxEYXRhKiBldmVudCkKIHsKICAgICAvLyBEb24ndCBhbGxvdyBzY3JvbGxpbmcg
d2hpbGUgdGhlIG5leHQgcGFnZSBpcyBsb2FkaW5nCiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6
OkZpbmlzaGluZykKQEAgLTE3NSw5ICsxNjQsOCBAQCBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OmhhbmRsZUV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdWludDMyX3QgZXZlbnRUaW1lID0g
Z2RrX2V2ZW50X2dldF90aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpOwot
ICAgIGRvdWJsZSBldmVudERlbHRhWDsKLSAgICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMo
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmV2ZW50RGVsdGFYLCBudWxscHRy
KTsKKyAgICB1aW50MzJfdCBldmVudFRpbWUgPSBldmVudC0+ZXZlbnRUaW1lOworICAgIGRvdWJs
ZSBldmVudERlbHRhWCA9IGV2ZW50LT5kZWx0YTsKIAogICAgIGRvdWJsZSBkZWx0YVggPSAtZXZl
bnREZWx0YVg7CiAgICAgaWYgKGlzVG91Y2hFdmVudChldmVudCkpIHsKQEAgLTI4MSw2ICsyNjks
NyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OmVu
ZEFuaW1hdGlvbigpCiAgICAgbV92aWV3R2VzdHVyZUNvbnRyb2xsZXIuZW5kU3dpcGVHZXN0dXJl
KG1fdGFyZ2V0SXRlbS5nZXQoKSwgbV9jYW5jZWxsZWQpOwogfQogCisjaWYgIVVTRShHVEs0KQog
R1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y3JlYXRlU3R5
bGVDb250ZXh0KGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgYm9vbCBpc1JUTCA9IG1fd2ViUGFn
ZVByb3h5LnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpSVEw7CkBAIC0zMjAsNiArMzA5LDcgQEAgc3RhdGljIGlu
dCBlbGVtZW50V2lkdGgoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0KQogCiAgICAgcmV0dXJuIHdp
ZHRoOwogfQorI2VuZGlmCiAKIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBl
R2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBTd2lwZURpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CkBAIC0zNDYsNiArMzM2LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0
ZW0KICAgICAgICAgfQogICAgIH0KIAorI2lmICFVU0UoR1RLNCkKICAgICBpZiAoIW1fY3VycmVu
dFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7CiAgICAgICAgIEdka1JHQkEgY29sb3I7CiAgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KG1fd2ViUGFnZVBy
b3h5LnZpZXdXaWRnZXQoKSk7CkBAIC0zODIsNiArMzczLDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdl
dEl0ZW0KICAgICBtX3N3aXBlT3V0bGluZVNpemUgPSBlbGVtZW50V2lkdGgoY29udGV4dC5nZXQo
KSk7CiAgICAgaWYgKG1fc3dpcGVPdXRsaW5lU2l6ZSkKICAgICAgICAgbV9zd2lwZU91dGxpbmVQ
YXR0ZXJuID0gY3JlYXRlRWxlbWVudFBhdHRlcm4oY29udGV4dC5nZXQoKSwgbV9zd2lwZU91dGxp
bmVTaXplLCBzaXplLmhlaWdodCgpLCBzY2FsZSk7CisjZW5kaWYKIH0KIAogdm9pZCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmhhbmRsZVN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVt
KiwgZG91YmxlLCBTd2lwZURpcmVjdGlvbikKQEAgLTM5OSw2ICszOTEsNDkgQEAgdm9pZCBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmNhbmNlbFN3aXBlKCkKICAgICB9CiB9CiAKKyNpZiBVU0UoR1RL
NCkKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpzbmFwc2hvdChHdGtTbmFwc2hvdCogc25h
cHNob3QsIEdza1JlbmRlck5vZGUqIHBhZ2VSZW5kZXJOb2RlKQoreworICAgIGJvb2wgc3dpcGlu
Z0xlZnQgPSBpc1BoeXNpY2FsbHlTd2lwaW5nTGVmdChtX3N3aXBlUHJvZ3Jlc3NUcmFja2VyLmRp
cmVjdGlvbigpKTsKKyAgICBib29sIHN3aXBpbmdCYWNrID0gbV9zd2lwZVByb2dyZXNzVHJhY2tl
ci5kaXJlY3Rpb24oKSA9PSBTd2lwZURpcmVjdGlvbjo6QmFjazsKKyAgICBib29sIGlzUlRMID0g
bV93ZWJQYWdlUHJveHkudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpID09IFdlYkNvcmU6
OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OlJUTDsKKyAgICBmbG9hdCBwcm9ncmVzcyA9
IG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIucHJvZ3Jlc3MoKTsKKworICAgIGF1dG8gc2l6ZSA9IG1f
d2ViUGFnZVByb3h5LmRyYXdpbmdBcmVhKCktPnNpemUoKTsKKyAgICBpbnQgd2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgZG91YmxlIHNj
YWxlID0gbV93ZWJQYWdlUHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIGRvdWJsZSBz
d2lwaW5nTGF5ZXJPZmZzZXQgPSAoc3dpcGluZ0xlZnQgPyAwIDogd2lkdGgpICsgZmxvb3Iod2lk
dGggKiBwcm9ncmVzcyAqIHNjYWxlKSAvIHNjYWxlOworCisgICAgZG91YmxlIGRpbW1pbmdQcm9n
cmVzcyA9IHN3aXBpbmdMZWZ0ID8gMSAtIHByb2dyZXNzIDogLXByb2dyZXNzOworICAgIGlmIChp
c1JUTCkgeworICAgICAgICBkaW1taW5nUHJvZ3Jlc3MgPSAxIC0gZGltbWluZ1Byb2dyZXNzOwor
ICAgICAgICBzd2lwaW5nTGF5ZXJPZmZzZXQgPSAtKHdpZHRoIC0gc3dpcGluZ0xheWVyT2Zmc2V0
KTsKKyAgICB9CisKKyAgICBndGtfc25hcHNob3Rfc2F2ZShzbmFwc2hvdCk7CisKKyAgICBncmFw
aGVuZV9wb2ludF90IHRyYW5zbGF0aW9uID0geyBzdGF0aWNfY2FzdDxmbG9hdD4oc3dpcGluZ0xh
eWVyT2Zmc2V0KSwgMCB9OworICAgIGlmICghc3dpcGluZ0JhY2spIHsKKyAgICAgICAgZ3RrX3Nu
YXBzaG90X2FwcGVuZF9ub2RlKHNuYXBzaG90LCBwYWdlUmVuZGVyTm9kZSk7CisgICAgICAgIGd0
a19zbmFwc2hvdF90cmFuc2xhdGUoc25hcHNob3QsICZ0cmFuc2xhdGlvbik7CisgICAgfQorCisg
ICAgZ3JhcGhlbmVfcmVjdF90IHJlY3QgPSB7IDAsIDAsIChmbG9hdCl3aWR0aCwgKGZsb2F0KWhl
aWdodCB9OworICAgIGF1dG8qIGNyID0gZ3RrX3NuYXBzaG90X2FwcGVuZF9jYWlybyhzbmFwc2hv
dCwgJnJlY3QpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY3VycmVudFN3aXBlU25hcHNo
b3RQYXR0ZXJuLmdldCgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgaWYgKHN3aXBpbmdCYWNrKSB7Cisg
ICAgICAgIGd0a19zbmFwc2hvdF90cmFuc2xhdGUoc25hcHNob3QsICZ0cmFuc2xhdGlvbik7Cisg
ICAgICAgIGd0a19zbmFwc2hvdF9hcHBlbmRfbm9kZShzbmFwc2hvdCwgcGFnZVJlbmRlck5vZGUp
OworICAgIH0KKworICAgIGd0a19zbmFwc2hvdF9yZXN0b3JlKHNuYXBzaG90KTsKK30KKyNlbHNl
CiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZHJhdyhjYWlyb190KiBjciwgY2Fpcm9fcGF0
dGVybl90KiBwYWdlR3JvdXApCiB7CiAgICAgYm9vbCBzd2lwaW5nTGVmdCA9IGlzUGh5c2ljYWxs
eVN3aXBpbmdMZWZ0KG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIuZGlyZWN0aW9uKCkpOwpAQCAtNDg5
LDYgKzUyNCw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkcmF3KGNhaXJvX3QqIGNy
LCBjYWlyb19wYXR0ZXJuX3QqIHBhZ2VHcm91cCkKIAogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwog
fQorI2VuZGlmCiAKIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNuYXBz
aG90KCkKIHsKQEAgLTUxOCwzNyArNTU0LDYgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OnJlbW92ZVN3aXBlU25hcHNob3QoKQogICAgIG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIucmVzZXQo
KTsKIH0KIAotc3RhdGljIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVNjcm9sbEV2ZW50KEd0
a1dpZGdldCogd2lkZ2V0LCBkb3VibGUgeERlbHRhLCBkb3VibGUgeURlbHRhKQotewotICAgIEdk
a1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7Ci0KLSAgICBp
bnQgeCwgeTsKLSAgICBnZGtfd2luZG93X2dldF9yb290X29yaWdpbih3aW5kb3csICZ4LCAmeSk7
Ci0KLSAgICBpbnQgd2lkdGggPSBnZGtfd2luZG93X2dldF93aWR0aCh3aW5kb3cpOwotICAgIGlu
dCBoZWlnaHQgPSBnZGtfd2luZG93X2dldF9oZWlnaHQod2luZG93KTsKLQotICAgIEdVbmlxdWVQ
dHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkpOwotICAgIGV2ZW50
LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPnNjcm9sbC54ID0g
d2lkdGggLyAyOwotICAgIGV2ZW50LT5zY3JvbGwueSA9IGhlaWdodCAvIDI7Ci0gICAgZXZlbnQt
PnNjcm9sbC54X3Jvb3QgPSB4ICsgd2lkdGggLyAyOwotICAgIGV2ZW50LT5zY3JvbGwueV9yb290
ID0geSArIGhlaWdodCAvIDI7Ci0gICAgZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NS
T0xMX1NNT09USDsKLSAgICBldmVudC0+c2Nyb2xsLmRlbHRhX3ggPSB4RGVsdGE7Ci0gICAgZXZl
bnQtPnNjcm9sbC5kZWx0YV95ID0geURlbHRhOwotICAgIGV2ZW50LT5zY3JvbGwuc3RhdGUgPSAw
OwotICAgIGV2ZW50LT5zY3JvbGwuaXNfc3RvcCA9ICF4RGVsdGEgJiYgIXlEZWx0YTsKLSAgICBl
dmVudC0+c2Nyb2xsLndpbmRvdyA9IEdES19XSU5ET1coZ19vYmplY3RfcmVmKHdpbmRvdykpOwot
ICAgIGdka19ldmVudF9zZXRfc2NyZWVuKGV2ZW50LmdldCgpLCBnZGtfd2luZG93X2dldF9zY3Jl
ZW4od2luZG93KSk7Ci0KLSAgICBHZGtEZXZpY2UqIHBvaW50ZXIgPSBnZGtfc2VhdF9nZXRfcG9p
bnRlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9zZWF0KGdka193aW5kb3dfZ2V0X2Rpc3BsYXko
d2luZG93KSkpOwotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50LmdldCgpLCBwb2ludGVy
KTsKLSAgICBnZGtfZXZlbnRfc2V0X3NvdXJjZV9kZXZpY2UoZXZlbnQuZ2V0KCksIHBvaW50ZXIp
OwotCi0gICAgcmV0dXJuIGV2ZW50OwotfQotCiBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhTd2lwZURpcmVjdGlvbiBk
aXJlY3Rpb24pCiB7CiAgICAgaWYgKCFjYW5Td2lwZUluRGlyZWN0aW9uKGRpcmVjdGlvbikpCkBA
IC01NjEsMTcgKzU2NiwxNiBAQCBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5TaW11
bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhTd2lwZURpcmVjdAogICAgIGlmIChpc1Bo
eXNpY2FsbHlTd2lwaW5nTGVmdChkaXJlY3Rpb24pKQogICAgICAgICBkZWx0YSA9IC1kZWx0YTsK
IAotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQobV93
ZWJQYWdlUHJveHkudmlld1dpZGdldCgpLCBkZWx0YSwgMCk7Ci0gICAgZ3RrX3dpZGdldF9ldmVu
dChtX3dlYlBhZ2VQcm94eS52aWV3V2lkZ2V0KCksIGV2ZW50LmdldCgpKTsKKyAgICBQbGF0Zm9y
bUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9IHsgLmRlbHRhID0gZGVsdGEsIC5ldmVudFRpbWUg
PSBHREtfQ1VSUkVOVF9USU1FLCAuaXNUb3VjaCA9IGZhbHNlLCAuaXNFbmQgPSBmYWxzZSB9Owor
ICAgIGhhbmRsZVNjcm9sbFdoZWVsRXZlbnQoJnNjcm9sbERhdGEpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpjb21wbGV0ZVNpbXVsYXRlZFN3
aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFN3aXBlRGlyZWN0aW9uKQogewotICAgIEdVbmlxdWVQ
dHI8R2RrRXZlbnQ+IGV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQobV93ZWJQYWdlUHJveHkudmll
d1dpZGdldCgpLCAwLCAwKTsKLSAgICBndGtfd2lkZ2V0X2V2ZW50KG1fd2ViUGFnZVByb3h5LnZp
ZXdXaWRnZXQoKSwgZXZlbnQuZ2V0KCkpOwotCisgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRhIHNj
cm9sbERhdGEgPSB7IC5kZWx0YSA9IDAsIC5ldmVudFRpbWUgPSBHREtfQ1VSUkVOVF9USU1FLCAu
aXNUb3VjaCA9IGZhbHNlLCAuaXNFbmQgPSB0cnVlIH07CisgICAgaGFuZGxlU2Nyb2xsV2hlZWxF
dmVudCgmc2Nyb2xsRGF0YSk7CiAgICAgbV9pc1NpbXVsYXRlZFN3aXBlID0gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427869</attachid>
            <date>2021-05-06 04:31:26 -0700</date>
            <delta_ts>2021-05-06 05:43:26 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>79560</size>
            <attacher name="Carlos Garnacho">carlosg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc1YzVjYzE0NTMuLjY1N2ZjMWMxOTgwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDIxLTA1LTA1ICBDYXJsb3MgR2FybmFjaG8gIDxjYXJsb3NnQGdub21l
Lm9yZz4KKworICAgICAgICBbR1RLNF0gUmV3cml0ZSBHVEsgZ2VzdHVyZSBzdXBwb3J0IHRvIHdv
cmsgZm9yIGJvdGggMy54IGFuZCA0LnguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIzMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2d0ay9HdGtWZXJzaW9uaW5nLmg6CisgICAgICAgIChndGtfZXZlbnRfY29udHJvbGxlcl9n
ZXRfY3VycmVudF9ldmVudF9zdGF0ZSk6CisgICAgICAgIChndGtfZXZlbnRfY29udHJvbGxlcl9n
ZXRfY3VycmVudF9ldmVudF90aW1lKTogTmV3IEdUSzQgcG9ydGFiaWxpdHkKKyAgICAgICAgaGVs
cGVyIG1ldGhvZHMuCisKIDIwMjEtMDUtMDMgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEJ1aWxkIHdpdGggVklERU89T0ZGIGZhaWxzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaAppbmRleCA3MjljZDI3
NmVkZjAuLjc5NDFlOTExYzYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a1ZlcnNpb25pbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
VmVyc2lvbmluZy5oCkBAIC0yNzYsNCArMjc2LDE4IEBAIGd0a19zY3JvbGxlZF93aW5kb3dfbmV3
KCkKICAgICByZXR1cm4gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcobnVsbHB0ciwgbnVsbHB0cik7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgR2RrTW9kaWZpZXJUeXBlCitndGtfZXZlbnRfY29udHJvbGxl
cl9nZXRfY3VycmVudF9ldmVudF9zdGF0ZShHdGtFdmVudENvbnRyb2xsZXIqKQoreworICAgIEdk
a01vZGlmaWVyVHlwZSBtb2RpZmllcnM7CisgICAgZ3RrX2dldF9jdXJyZW50X2V2ZW50X3N0YXRl
KCZtb2RpZmllcnMpOworICAgIHJldHVybiBtb2RpZmllcnM7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dWludDMyX3QKK2d0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoR3Rr
RXZlbnRDb250cm9sbGVyKikKK3sKKyAgICByZXR1cm4gZ3RrX2dldF9jdXJyZW50X2V2ZW50X3Rp
bWUoKTsKK30KKwogI2VuZGlmIC8vIFVTRShHVEs0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjYTU3ZGE0NGFhZWIu
LjAyZjg2YjRmYWU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUgQEAKKzIwMjEtMDUtMDUgIENh
cmxvcyBHYXJuYWNobyAgPGNhcmxvc2dAZ25vbWUub3JnPgorCisgICAgICAgIFtHVEs0XSBSZXdy
aXRlIEdUSyBnZXN0dXJlIHN1cHBvcnQgdG8gd29yayBmb3IgYm90aCAzLnggYW5kIDQueC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMyNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld3JpdGUgdGhl
IHRvdWNoIGdlc3R1cmUgaGFuZGxpbmcgdG8gYXZvaWQgR2RrRXZlbnQgYXMgYW4gZXhjaGFuZ2UK
KyAgICAgICAgdG9rZW4sIGFuZCBub3QgcmVseSBvbiB0aGUgd2ViIHZpZXcgYmVpbmcgYWJsZSB0
byBob2xkIGFuZCByZS1yb3V0ZQorICAgICAgICB0aGVzZSBhdCB3aGltLiBUaGlzIG1ha2VzIHRv
dWNoIGFuZCB0b3VjaHBhZCBnZXN0dXJlcyB3b3JrIG9uIEdUSzMKKyAgICAgICAgYW5kIEdUSzQg
aW4gc2ltaWxhciB3YXlzLCBhbmQgc28gdGhhdCBib3RoIHdvcmsuCisKKyAgICAgICAgRm9yIHRo
aXMsIHRvdWNoIGV2ZW50IHByb3BhZ2F0aW9uIGdvdCBzb21lIHN1YnN0YW50aWFsIGNoYW5nZXMs
IGl0CisgICAgICAgIHVzZWQgdG8gd29yayBieSBmaXJzdCBkZWxpdmVyaW5nIHRoZSB0b3VjaCBl
dmVudHMgdG8gdGhlIHdlYiBwYWdlLAorICAgICAgICBhbmQgbWFudWFsbHkgZmVlZGluZyB0aGUg
cmV0dXJuZWQrdW5oYW5kbGVkIG9uZXMgdG8gZ2VzdHVyZSBjb250cm9sbGVycy4KKyAgICAgICAg
Tm93IGV2ZW50IGRlbGl2ZXJ5IGlzIGRlbGVnYXRlZCBvbiBHVEssIGFuZCBoYXBwZW5zIHJpZ2h0
IGF3YXkgb24KKyAgICAgICAgZ2VzdHVyZSBjb250cm9sbGVycywgaXQgaXMgdGhlIFdlYmtpdFdl
YlZpZXdCYXNlIHdoaWNoIGNob29zZXMgdG8gbWFrZQorICAgICAgICB0aGVtIGVmZmVjdGl2ZSBh
ZnRlciB0aGUgd2ViIHBhZ2UgKG1heWJlKSBoYW5kbGVkIHRoZSBldmVudHMuIEdlc3R1cmVzCisg
ICAgICAgIGFyZSByZXNldCB3aGVuZXZlciB0aGUgd2ViIHBhZ2UgaXMgY29uc2lkZXJlZCB0byBi
ZSBoYW5kbGluZyB0b3VjaAorICAgICAgICBldmVudHMuCisKKyAgICAgICAgQWxzbyBmaXggc29t
ZSBidWdsZXRzIGFjY3VtdWxhdGVkIGFsb25nIHRoZSB3YXksIHdlYiB2aWV3IHpvb20gY29uZmxp
Y3RlZAorICAgICAgICB3aXRoIGluLXBhZ2Ugem9vbSBoYW5kbGluZywgYW5kIFZpZXdHZXN0dXJl
Q29udHJvbGxlciBwYWdlIHN3aXRjaGluZworICAgICAgICBjb25mbGljdGVkIHdpdGggcHJlc3Mt
ZHJhZy1yZWxlYXNlIGVtdWxhdGlvbiBvbiB0aGUgd2ViIHBhZ2UuIFRoZXNlIG5vdworICAgICAg
ICB3b3JrIGJldHRlciBhbmQgY2xvc2VyIHRvIEd0a1Njcm9sbGVkV2luZG93IGJlaGF2aW9yLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6IERyb3AgR1RLNCBjb25kaXRpb25hbHMgYXJvdW5kIFZpZXdHZXN0dXJlQ29udHJvbGxl
cgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OiBEcm9wIEdlc3R1cmVDb250cm9sbGVyLmNwcC4g
QnVpbGQgVmlld0dlc3R1cmVDb250cm9sbGVyCisgICAgICAgIGNvZGUgZmlsZXMgdW5jb25kaXRp
b25hbGx5LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudCk6IERl
bGVnYXRlIGhhbmRsaW5nIG9uCisgICAgICAgIFdlYktpdFdlYlZpZXdCYXNlLgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUp
OiBVc2UgcGxhdGZvcm0KKyAgICAgICAgaW5kZXBlbmRlbnQgc3RydWN0IHRvIGZvcndhcmQgc2Ny
b2xsIHRvIFZpZXdHZXN0dXJlQ29udHJvbGxlci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNuYXBz
aG90KTogSW52b2x2ZSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgaW4gcmVuZGVyaW5nLgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc0V2ZW50KToKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlQnV0dG9uUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
QnV0dG9uUHJlc3NlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2Vk
KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5RXZlbnQpOiBJZ25vcmUg
cG9pbnRlci1lbXVsYXRlZCBldmVudHMgZnJvbQorICAgICAgICB0b3VjaHNjcmVlbnMuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VTY3JvbGwpOiAgVXNlIHBsYXRmb3JtIGluZGVwZW5kZW50IHN0cnVjdAorICAg
ICAgICB0byBmb3J3YXJkIHNjcm9sbCB0byBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuCisgICAgICAg
IChhcHBlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKHRvdWNoUG9pbnRTdGF0ZUZvckV2ZW50cyk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUdldFRvdWNoUG9pbnRzRm9yRXZlbnQpOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50KToKKyAgICAgICAgR2VuZXJhbGl6ZWQg
dG8gd29yayBvbiBib3RoIEdUSzMgYW5kIEdUSzQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZVpvb21CZWdpbik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVpvb21DaGFuZ2VkKToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hMb25nUHJlc3MpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VUb3VjaFByZXNzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hS
ZWxlYXNlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnQmVnaW4pOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdVcGRhdGUpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VUb3VjaERyYWdFbmQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VUb3Vj
aERyYWdDYW5jZWwpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VUb3VjaFN3aXBlKTogTmV3
bHkgYWRkZWQgdG91Y2ggZ2VzdHVyZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBjYWxsYmFja3Mu
IE5vdCBkZWxlZ2F0ZWQgYW55bW9yZSBvbiBHZXN0dXJlQ29udHJvbGxlci4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlQ29uc3RydWN0ZWQpOiBDcmVhdGUgdG91Y2ggZ2VzdHVyZXMgaW4gdGhl
IGJhc2UgdmlldworICAgICAgICB3aWRnZXQsIGxldCB0aGVtIGhhbmRsZSBldmVudHMgYXV0b21h
dGljYWxseSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24KKyAgICAgICAgbWFudWFsIGV2ZW50IGZlZWRp
bmcgdmlhIGd0a19ldmVudF9jb250cm9sbGVyX2hhbmRsZV9ldmVudCgpLiBBbHNvIGFkZAorICAg
ICAgICBhIEd0a0V2ZW50Q29udHJvbGxlckxlZ2FjeSB0byBoYW5kbGUgZm9yd2FyZGluZyBvZiBy
YXcgdG91Y2ggZXZlbnRzIHRvCisgICAgICAgIHRoZSB3ZWIgcGFnZSBpbiBHVEs0LgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VTZXRFbmFibGVCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJl
KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlQ29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlV2lsbFN3YXBXZWJQcm9jZXNzKToKKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlRGlkRXhpdFdlYlByb2Nlc3MpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZURpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZURpZEZpbmlzaE5hdmlnYXRpb24pOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VEaWRGYWlsTmF2aWdhdGlvbik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZURpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VEaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24pOiBSZW1vdmUgY29uZGl0aW9uYWxz
IGFyb3VuZAorICAgICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgZm9yIEdUSzQuCisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZVBhZ2VHcmFiYmVkVG91Y2gpOiBOZXcgbWV0aG9kIHRvIHRhZyB0
b3VjaCBldmVudHMKKyAgICAgICAgYWx0b2dldGhlciBhcyBoYW5kbGVkIGJ5IHRoZSB3ZWIgcGFn
ZSwgdGh1cyByZXNldHRpbmcgYW55IG9uZ29pbmcgdmlldy1sZXZlbAorICAgICAgICBnZXN0dXJl
IGhhbmRsaW5nLiBUaGlzIGludmVyc2lvbiBpcyBuZWNlc3NhcnkgYXMgZ2VzdHVyZSBjb250cm9s
bGVycyBhcmUgbm93CisgICAgICAgIGFsd2F5cyBmZWQgaW5wdXQgZXZlbnRzIHBhcmFsbGVsIHRv
IHdlYiBwYWdlIHRvdWNoIGV2ZW50IGhhbmRsaW5nLgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VHZXN0dXJlQ29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
YmFzZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRXZlbnQpOiBSZW1v
dmVkIHdpZGdldF9jbGFzcy0+ZXZlbnQgdmZ1bmMuIFRvdWNocGFkIGdlc3R1cmUKKyAgICAgICAg
ZXZlbnQgZm9yd2FyZGluZyB0byBldmVudCBjb250cm9sbGVycyBpcyBkZWxlZ2F0ZWQgb24gR1RL
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcDogUmVtb3ZlZC4gR2VzdHVyZXMg
YXJlIGltcGxlbWVudGVkIGluCisgICAgICAgIHRoZSBiYXNlIHZpZXcuCisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
aXNFdmVudFN0b3ApOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBl
bmRpbmdTd2lwZVRyYWNrZXI6OnNjcm9sbEV2ZW50Q2FuU3RhcnRTd2lwZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xs
RXZlbnRDYW5FbmRTd2lwZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5JbmZsdWVuY2VTd2lwZSk6Cisg
ICAgICAgIChXZWJLaXQ6OmlzVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVNj
cm9sbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5k
aW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudEdldFNjcm9sbGluZ0RlbHRhcyk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlU2Nyb2xsV2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1Ry
YWNrZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjpiZWdpblN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y29tcGxldGVTaW11bGF0ZWRTd2lw
ZUluRGlyZWN0aW9uRm9yVGVzdGluZyk6IERlY2xhcmUKKyAgICAgICAgUGxhdGZvcm1HdGtTY3Jv
bGxEYXRhLCBhbmQgdXNlIGl0IGFzICJwbGF0Zm9ybSBzY3JvbGwgZXZlbnQiIGZvciBib3RoIEdU
SzMgYW5kIEdUSzQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c25h
cHNob3QpOiBOZXcgR1RLNCBzcGVjaWZpYyBtZXRob2QgdG8gcmVuZGVyCisgICAgICAgIHRoZSBw
YWdlIHN3aXRjaGluZyBnZXN0dXJlIGFjdGlvbi4KKwogMjAyMS0wNS0wMyAgQWRpdHlhIEtlZXJ0
aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQ3Jhc2ggd2hlbiB0YXBw
aW5nIGZpZWxkcyBvbiBjeWNsZS50cmF2ZWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGIw
MTQ0N2JhNGY2Yy4uNmNmYWYyODgyYTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTMz
LDIwICszMywxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfVU5JRklFRF9TT1VSQ0VfTElTVF9GSUxF
UwogICAgICJTb3VyY2VzR1RLLnR4dCIKICkKIAotaWYgKE5PVCBVU0VfR1RLNCkKLSAgICBsaXN0
KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgICAgICBVSVByb2Nlc3MvVmlld0dlc3R1cmVDb250
cm9sbGVyLmNwcAotCi0gICAgICAgIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVy
R3RrLmNwcAotCi0gICAgICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5
Q29sbGVjdG9yLmNwcAotICAgICkKLSAgICBsaXN0KEFQUEVORCBXZWJLaXRfTUVTU0FHRVNfSU5f
RklMRVMKLSAgICAgICAgVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlcgorbGlzdChBUFBF
TkQgV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCisgICAgVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlcgogCi0gICAgICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5
Q29sbGVjdG9yCi0gICAgKQotZW5kaWYgKCkKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dl
c3R1cmVHZW9tZXRyeUNvbGxlY3RvcgorKQogCiBsaXN0KEFQUEVORCBXZWJLaXRfREVSSVZFRF9T
T1VSQ0VTCiAgICAgJHtXZWJLaXQyR3RrX0RFUklWRURfU09VUkNFU19ESVJ9L0luc3BlY3RvckdS
ZXNvdXJjZUJ1bmRsZS5jCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAppbmRleCBjODVmNWNlMmE4ZjQuLjg5NGU1
ZDRkMzI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0xMDUsNiArMTA1LDcgQEAgU2hhcmVkL3Vu
aXgvQXV4aWxpYXJ5UHJvY2Vzc01haW4uY3BwCiBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAog
VUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmdOb25lLmNwcAorVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5j
cHAKIFVJUHJvY2Vzcy9WaWV3U25hcHNob3RTdG9yZS5jcHAKIFVJUHJvY2Vzcy9XZWJHcmFtbWFy
RGV0YWlsLmNwcAogVUlQcm9jZXNzL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKQEAgLTI1
Miw3ICsyNTMsNiBAQCBVSVByb2Nlc3MvZ3RrL0NsaXBib2FyZC5jcHAKIFVJUHJvY2Vzcy9ndGsv
Q2xpcGJvYXJkR3RrMy5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQu
Y3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJEYXRlVGltZVBpY2tlckd0ay5jcHAKLVVJ
UHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwCiBVSVByb2Nlc3MvZ3RrL0hhcmR3YXJl
QWNjZWxlcmF0aW9uTWFuYWdlci5jcHAKIFVJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5zbGF0
b3IuY3BwCiBVSVByb2Nlc3MvZ3RrL1BvaW50ZXJMb2NrTWFuYWdlci5jcHAgQG5vLXVuaWZ5CkBA
IC0yNjAsNiArMjYwLDcgQEAgVUlQcm9jZXNzL2d0ay9Qb2ludGVyTG9ja01hbmFnZXJXYXlsYW5k
LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyWDExLmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL2d0ay9WaWV3U25hcHNob3RTdG9yZUd0ay5jcHAKK1VJUHJvY2Vzcy9ndGsvVmlld0dl
c3R1cmVDb250cm9sbGVyR3RrLmNwcAogVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5j
cHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1dlYkNvbG9yUGlja2VyR3RrLmNwcAogVUlQcm9j
ZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcApAQCAtNDE1LDYgKzQxNiw3IEBAIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAog
CiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWRTdXJmYWNlLmNwcAorV2ViUHJvY2Vzcy9X
ZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwCiAKIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuY3BwCmluZGV4IDJjZjRmNDMzZDgyZC4uMmZiY2IzMjc0MGRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApA
QCAtNDEyLDY1ICs0MTIsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdhbkV4aXRGdWxsU2Ny
ZWVuKGNvbnN0IEludFJlY3QmIC8qIGluaXRpYWxGcmFtZSAqLywgY29ucwogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29u
c3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKQogewot
I2lmICFVU0UoR1RLNCkKLSAgICBjb25zdCBHZGtFdmVudCogdG91Y2hFdmVudCA9IGV2ZW50Lm5h
dGl2ZUV2ZW50KCk7Ci0gICAgaWYgKCF0b3VjaEV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHZXN0dXJlQ29udHJvbGxlciYgZ2VzdHVyZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFz
ZUdlc3R1cmVDb250cm9sbGVyKFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOwot
ICAgIGlmICh3YXNFdmVudEhhbmRsZWQpIHsKLSAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXIucmVz
ZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3YXNFdmVudEhhbmRsZWQgPSBnZXN0
dXJlQ29udHJvbGxlci5oYW5kbGVFdmVudChjb25zdF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQubmF0
aXZlRXZlbnQoKSkpOwotCiAgICAgaWYgKHdhc0V2ZW50SGFuZGxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRW11bGF0ZSBwb2ludGVyIGV2ZW50cyBpZiB1bmhhbmRsZWQuCi0gICAgaWYg
KCF0b3VjaEV2ZW50LT50b3VjaC5lbXVsYXRpbmdfcG9pbnRlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gcG9pbnRlckV2ZW50OwotCi0gICAgaWYgKHRvdWNo
RXZlbnQtPnR5cGUgPT0gR0RLX1RPVUNIX1VQREFURSkgewotICAgICAgICBwb2ludGVyRXZlbnQu
cmVzZXQoZ2RrX2V2ZW50X25ldyhHREtfTU9USU9OX05PVElGWSkpOwotICAgICAgICBwb2ludGVy
RXZlbnQtPm1vdGlvbi50aW1lID0gdG91Y2hFdmVudC0+dG91Y2gudGltZTsKLSAgICAgICAgcG9p
bnRlckV2ZW50LT5tb3Rpb24ueCA9IHRvdWNoRXZlbnQtPnRvdWNoLng7Ci0gICAgICAgIHBvaW50
ZXJFdmVudC0+bW90aW9uLnkgPSB0b3VjaEV2ZW50LT50b3VjaC55OwotICAgICAgICBwb2ludGVy
RXZlbnQtPm1vdGlvbi54X3Jvb3QgPSB0b3VjaEV2ZW50LT50b3VjaC54X3Jvb3Q7Ci0gICAgICAg
IHBvaW50ZXJFdmVudC0+bW90aW9uLnlfcm9vdCA9IHRvdWNoRXZlbnQtPnRvdWNoLnlfcm9vdDsK
LSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24uc3RhdGUgPSB0b3VjaEV2ZW50LT50b3VjaC5z
dGF0ZSB8IEdES19CVVRUT04xX01BU0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoICh0
b3VjaEV2ZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgR0RLX1RPVUNIX0NBTkNFTDoKLSAgICAg
ICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICBjYXNlIEdES19UT1VDSF9FTkQ6Ci0gICAgICAg
ICAgICBwb2ludGVyRXZlbnQucmVzZXQoZ2RrX2V2ZW50X25ldyhHREtfQlVUVE9OX1JFTEVBU0Up
KTsKLSAgICAgICAgICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnN0YXRlID0gdG91Y2hFdmVudC0+
dG91Y2guc3RhdGUgfCBHREtfQlVUVE9OMV9NQVNLOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR0RLX1RPVUNIX0JFR0lOOgotICAgICAgICAgICAgcG9pbnRlckV2ZW50LnJlc2V0
KGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUykpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLmJ1dHRvbiA9IDE7Ci0gICAgICAg
IHBvaW50ZXJFdmVudC0+YnV0dG9uLnRpbWUgPSB0b3VjaEV2ZW50LT50b3VjaC50aW1lOwotICAg
ICAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi54ID0gdG91Y2hFdmVudC0+dG91Y2gueDsKLSAgICAg
ICAgcG9pbnRlckV2ZW50LT5idXR0b24ueSA9IHRvdWNoRXZlbnQtPnRvdWNoLnk7Ci0gICAgICAg
IHBvaW50ZXJFdmVudC0+YnV0dG9uLnhfcm9vdCA9IHRvdWNoRXZlbnQtPnRvdWNoLnhfcm9vdDsK
LSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0b24ueV9yb290ID0gdG91Y2hFdmVudC0+dG91Y2gu
eV9yb290OwotICAgIH0KLQotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHBvaW50ZXJFdmVudC5n
ZXQoKSwgZ2RrX2V2ZW50X2dldF9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgIGdka19ldmVudF9z
ZXRfc291cmNlX2RldmljZShwb2ludGVyRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRfc291cmNl
X2RldmljZSh0b3VjaEV2ZW50KSk7Ci0gICAgcG9pbnRlckV2ZW50LT5hbnkud2luZG93ID0gR0RL
X1dJTkRPVyhnX29iamVjdF9yZWYodG91Y2hFdmVudC0+YW55LndpbmRvdykpOwotICAgIHBvaW50
ZXJFdmVudC0+YW55LnNlbmRfZXZlbnQgPSBUUlVFOwotCi0gICAgZ3RrX3dpZGdldF9ldmVudCht
X3ZpZXdXaWRnZXQsIHBvaW50ZXJFdmVudC5nZXQoKSk7Ci0jZW5kaWYKKyAgICAgICAgd2Via2l0
V2ViVmlld0Jhc2VQYWdlR3JhYmJlZFRvdWNoKFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dp
ZGdldCkpOwogfQogI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKQEAgLTQ4Miw3ICs0
MjUsMTIgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdl
YkNvcmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYKICNpZiAhVVNFKEdUSzQpCiAgICAgVmll
d0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CiAgICAg
aWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdlc3R1cmVFbmFibGVkKCkpIHsK
LSAgICAgICAgY29udHJvbGxlci0+d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoJmV2
ZW50Lm5hdGl2ZUV2ZW50KCktPnNjcm9sbCk7CisgICAgICAgIGRvdWJsZSBkZWx0YVg7CisgICAg
ICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhldmVudC5uYXRpdmVFdmVudCgpLCAmZGVs
dGFYLCBudWxscHRyKTsKKyAgICAgICAgYm9vbCBpc0VuZCA9IGdka19ldmVudF9pc19zY3JvbGxf
c3RvcF9ldmVudChldmVudC5uYXRpdmVFdmVudCgpKSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAg
aW50MzJfdCBldmVudFRpbWUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihnZGtfZXZlbnRfZ2V0X3Rp
bWUoZXZlbnQubmF0aXZlRXZlbnQoKSkpOworICAgICAgICBQbGF0Zm9ybUd0a1Njcm9sbERhdGEg
c2Nyb2xsRGF0YSA9IHsgLmRlbHRhID0gZGVsdGFYLCAuZXZlbnRUaW1lID0gZXZlbnRUaW1lLCAu
aXNUb3VjaCA9IGZhbHNlLCAuaXNFbmQgPSBpc0VuZCB9OworICAgICAgICBjb250cm9sbGVyLT53
aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZSgmc2Nyb2xsRGF0YSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggNTc4YmY5ODI3OGJhLi5jM2JkZWIzNGM3MzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2UuY3BwCkBAIC0zMTYsMTEgKzMxNiw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJvcFRhcmdldD4gZHJvcFRhcmdldDsK
ICNlbmRpZgogCi0jaWYgIVVTRShHVEs0KQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29u
dHJvbGxlcj4gZ2VzdHVyZUNvbnRyb2xsZXI7CisgICAgR3RrR2VzdHVyZSogdG91Y2hHZXN0dXJl
R3JvdXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4gdmlld0dl
c3R1cmVDb250cm9sbGVyOwogICAgIGJvb2wgaXNCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJl
RW5hYmxlZCB7IGZhbHNlIH07Ci0jZW5kaWYKIAogI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDI0
LCAwKQogICAgIEd0a1dpZGdldCogZW1vamlDaG9vc2VyOwpAQCAtMzI4LDYgKzMyNiwxNCBAQCBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAgUnVuTG9vcDo6VGltZXI8V2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlPiByZWxlYXNlRW1vamlDaG9vc2VyVGltZXI7CiAjZW5kaWYK
IAorICAgIC8vIFRvdWNoIGdlc3R1cmVzIHN0YXRlCisgICAgZG91YmxlIGluaXRpYWxab29tU2Nh
bGU7CisgICAgSW50UG9pbnQgaW5pdGlhbFpvb21Qb2ludDsKKyAgICBGbG9hdFBvaW50IGRyYWdP
ZmZzZXQ7CisgICAgYm9vbCBpc0xvbmdQcmVzc2VkOworICAgIGJvb2wgaXNCZWluZ0RyYWdnZWQ7
CisgICAgYm9vbCBwYWdlR3JhYmJlZFRvdWNoOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBvaW50
ZXJMb2NrTWFuYWdlcj4gcG9pbnRlckxvY2tNYW5hZ2VyOwogfTsKIApAQCAtNzQ2LDkgKzc1Miwy
MSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNuYXBzaG90KEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtTbmFwc2hvdCogc25hcHNob3QpCiAgICAgaWYgKCFkcmF3aW5nQXJlYSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgYXV0byogcGFnZVNuYXBzaG90ID0gZ3RrX3NuYXBzaG90X25ldygp
OwogICAgIGlmICghd2ViVmlld0Jhc2UtPnByaXYtPmlzQmxhbmspIHsKICAgICAgICAgQVNTRVJU
KGRyYXdpbmdBcmVhLT5pc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7Ci0gICAgICAg
IHdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS0+c25hcHNob3Qoc25h
cHNob3QpOworICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+YWNjZWxlcmF0ZWRCYWNraW5nU3Rv
cmUtPnNuYXBzaG90KHBhZ2VTbmFwc2hvdCk7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHBhZ2VS
ZW5kZXJOb2RlID0gZ3RrX3NuYXBzaG90X2ZyZWVfdG9fbm9kZShwYWdlU25hcHNob3QpKSB7Cisg
ICAgICAgIGJvb2wgc2hvd2luZ05hdmlnYXRpb25TbmFwc2hvdCA9IHdlYlZpZXdCYXNlLT5wcml2
LT5wYWdlUHJveHktPmlzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNob3QoKTsKKyAgICAg
ICAgYXV0byogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9s
bGVyKHdlYlZpZXdCYXNlKTsKKyAgICAgICAgaWYgKHNob3dpbmdOYXZpZ2F0aW9uU25hcHNob3Qg
JiYgY29udHJvbGxlcikKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPnNuYXBzaG90KHNuYXBzaG90
LCBwYWdlUmVuZGVyTm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGd0a19zbmFwc2hv
dF9hcHBlbmRfbm9kZShzbmFwc2hvdCwgcGFnZVJlbmRlck5vZGUpOworCisgICAgICAgIGdza19y
ZW5kZXJfbm9kZV91bnJlZihwYWdlUmVuZGVyTm9kZSk7CiAgICAgfQogCiAgICAgaWYgKHdlYlZp
ZXdCYXNlLT5wcml2LT5pbnNwZWN0b3JWaWV3KQpAQCAtMTE1Nyw2ICsxMTc1LDkgQEAgc3RhdGlj
IGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRCdXQKICAgICBpZiAocHJpdi0+ZGlhbG9nKQogICAgICAgICByZXR1cm4g
R0RLX0VWRU5UX1NUT1A7CiAKKyAgICBpZiAoZ2RrX2RldmljZV9nZXRfc291cmNlKGdka19ldmVu
dF9nZXRfc291cmNlX2RldmljZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSkg
PT0gR0RLX1NPVVJDRV9UT1VDSFNDUkVFTikKKyAgICAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xB
U1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+YnV0dG9uX3ByZXNzX2V2ZW50
KHdpZGdldCwgZXZlbnQpOworCiAgICAgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVNb3VzZUV2ZW50
KHdlYlZpZXdCYXNlLCByZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKIAogICAg
IHJldHVybiBHREtfRVZFTlRfU1RPUDsKQEAgLTExNjksNiArMTE5MCw4IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRCCiAKICAgICBpZiAocHJpdi0+ZGlhbG9nKQogICAgICAgICByZXR1cm4gR0RL
X0VWRU5UX1NUT1A7CisgICAgaWYgKGdka19kZXZpY2VfZ2V0X3NvdXJjZShnZGtfZXZlbnRfZ2V0
X3NvdXJjZV9kZXZpY2UocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkpID09IEdE
S19TT1VSQ0VfVE9VQ0hTQ1JFRU4pCisgICAgICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdl
YmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmJ1dHRvbl9yZWxlYXNlX2V2ZW50KHdp
ZGdldCwgZXZlbnQpOwogCiAgICAgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVNb3VzZUV2ZW50KHdl
YlZpZXdCYXNlLCByZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKIApAQCAtMTE3
OSw2ICsxMjAyLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUmVs
ZWFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEIKICNpZiBVU0UoR1RLNCkKIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NlZChXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlld0Jhc2UsIGludCBjbGlja0NvdW50LCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dl
c3R1cmUqIGdlc3R1cmUpCiB7CisgICAgaWYgKGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVu
dF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpKQorICAgICAgICByZXR1cm47
CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7
CiAgICAgaWYgKHByaXYtPmRpYWxvZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTIwMiw2ICsxMjI3
LDggQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc2VkKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgaW50IGMKIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VCdXR0b25SZWxlYXNlZChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGludCBj
bGlja0NvdW50LCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCiB7Cisg
ICAgaWYgKGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVS
RV9TSU5HTEUoZ2VzdHVyZSkpKQorICAgICAgICByZXR1cm47CiAgICAgV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAgICAgaWYgKHByaXYtPmRpYWxv
ZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTIzNCw4ICsxMjYxLDE1IEBAIHN0YXRpYyBib29sIHNo
b3VsZEludmVydERpcmVjdGlvbkZvclNjcm9sbEV2ZW50KFdlYkhpdFRlc3RSZXN1bHREYXRhOjpJ
c1Njcm9sbGJhCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZVdoZWVsRXZlbnQo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHZGtFdmVudCogZXZlbnQsIE9wdGlvbmFs
PFdlYldoZWVsRXZlbnQ6OlBoYXNlPiBwaGFzZSA9IFdURjo6bnVsbG9wdCwgT3B0aW9uYWw8V2Vi
V2hlZWxFdmVudDo6UGhhc2U+IG1vbWVudHVtID0gV1RGOjpudWxsb3B0KQogewogICAgIFZpZXdH
ZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1
cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKLSAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9s
bGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSAmJiBjb250cm9sbGVyLT5oYW5kbGVTY3JvbGxX
aGVlbEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRTY3JvbGwqPihldmVudCkpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdl
c3R1cmVFbmFibGVkKCkpIHsKKyAgICAgICAgZG91YmxlIGRlbHRhWDsKKyAgICAgICAgZ2RrX2V2
ZW50X2dldF9zY3JvbGxfZGVsdGFzKGV2ZW50LCAmZGVsdGFYLCBudWxscHRyKTsKKyAgICAgICAg
Ym9vbCBpc0VuZCA9IGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9ldmVudChldmVudCkgPyB0cnVl
IDogZmFsc2U7CisgICAgICAgIGludDMyX3QgZXZlbnRUaW1lID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4oZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CisgICAgICAgIFBsYXRmb3JtR3RrU2Nyb2xs
RGF0YSBzY3JvbGxEYXRhID0geyAuZGVsdGEgPSBkZWx0YVgsIC5ldmVudFRpbWUgPSBldmVudFRp
bWUsIC5pc1RvdWNoID0gZmFsc2UsIC5pc0VuZCA9IGlzRW5kIH07CisgICAgICAgIGlmIChjb250
cm9sbGVyLT5oYW5kbGVTY3JvbGxXaGVlbEV2ZW50KCZzY3JvbGxEYXRhKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3
ZWJWaWV3QmFzZS0+cHJpdjsKICAgICBBU1NFUlQoIXByaXYtPmRpYWxvZyk7CkBAIC0xMjgzLDEz
ICsxMzE3LDIyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVNjcm9sbEV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCoKICNlbmRpZgogCiAjaWYgVVNFKEdU
SzQpCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VTY3JvbGwoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlLCBkb3VibGUgZGVsdGFYLCBkb3VibGUgZGVsdGFZLCBHdGtFdmVu
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VTY3JvbGwoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBkb3VibGUgZGVsdGFYLCBk
b3VibGUgZGVsdGFZLCBHdGtFdmVudENvbnRyb2xsZXIqIGV2ZW50Q29udHJvbGxlcikKIHsKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKICAg
ICBpZiAocHJpdi0+ZGlhbG9nKQogICAgICAgICByZXR1cm4gR0RLX0VWRU5UX1BST1BBR0FURTsK
IAotICAgIGF1dG8qIGV2ZW50ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZl
bnQoY29udHJvbGxlcik7CisgICAgYXV0byogZXZlbnQgPSBndGtfZXZlbnRfY29udHJvbGxlcl9n
ZXRfY3VycmVudF9ldmVudChldmVudENvbnRyb2xsZXIpOworCisgICAgVmlld0dlc3R1cmVDb250
cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIod2ViVmlld0Jhc2UpOworICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dp
cGVHZXN0dXJlRW5hYmxlZCgpKSB7CisgICAgICAgIGJvb2wgaXNFbmQgPSBnZGtfc2Nyb2xsX2V2
ZW50X2lzX3N0b3AoZXZlbnQpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICBpbnQzMl90IGV2ZW50
VGltZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGd0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJy
ZW50X2V2ZW50X3RpbWUoZXZlbnRDb250cm9sbGVyKSk7CisgICAgICAgIFBsYXRmb3JtR3RrU2Ny
b2xsRGF0YSBzY3JvbGxEYXRhID0geyAuZGVsdGEgPSBkZWx0YVgsIC5ldmVudFRpbWUgPSBldmVu
dFRpbWUsIC5pc1RvdWNoID0gZmFsc2UsIC5pc0VuZCA9IGlzRW5kIH07CisgICAgICAgIGlmIChj
b250cm9sbGVyLT5oYW5kbGVTY3JvbGxXaGVlbEV2ZW50KCZzY3JvbGxEYXRhKSkKKyAgICAgICAg
ICAgIHJldHVybiBHREtfRVZFTlRfU1RPUDsKKyAgICB9CiAKICAgICBpZiAoc2hvdWxkSW52ZXJ0
RGlyZWN0aW9uRm9yU2Nyb2xsRXZlbnQocHJpdi0+bW91c2VJc092ZXJTY3JvbGxiYXIsIGdka19l
dmVudF9nZXRfbW9kaWZpZXJfc3RhdGUoZXZlbnQpICYgR0RLX1NISUZUX01BU0spKQogICAgICAg
ICBzdGQ6OnN3YXAoZGVsdGFYLCBkZWx0YVkpOwpAQCAtMTMzMCw2ICsxMzczLDkgQEAgc3RhdGlj
IGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0V2ZW50TW8KICAgICAgICAgcmV0dXJuIHdpZGdldENsYXNzLT5tb3Rpb25fbm90
aWZ5X2V2ZW50ID8gd2lkZ2V0Q2xhc3MtPm1vdGlvbl9ub3RpZnlfZXZlbnQod2lkZ2V0LCBldmVu
dCkgOiBHREtfRVZFTlRfUFJPUEFHQVRFOwogICAgIH0KIAorICAgIGlmIChnZGtfZGV2aWNlX2dl
dF9zb3VyY2UoZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHJlaW50ZXJwcmV0X2Nhc3Q8R2Rr
RXZlbnQqPihldmVudCkpKSA9PSBHREtfU09VUkNFX1RPVUNIU0NSRUVOKQorICAgICAgICByZXR1
cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5t
b3Rpb25fbm90aWZ5X2V2ZW50KHdpZGdldCwgZXZlbnQpOworCiAgICAgaWYgKHByaXYtPnBvaW50
ZXJMb2NrTWFuYWdlcikgewogICAgICAgICBkb3VibGUgeCwgeTsKICAgICAgICAgZ2RrX2V2ZW50
X2dldF9yb290X2Nvb3JkcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmeCwg
JnkpOwpAQCAtMTQ1MywxMSArMTQ5OSwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUxlYXZlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR2RrQ3Jvc3NpbmdNbwogfQog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhVVNFKEdUSzQpCi1zdGF0aWMg
dm9pZCBhcHBlbmRUb3VjaEV2ZW50KFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+JiB0b3Vj
aFBvaW50cywgY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRv
dWNoUG9pbnRTdGF0ZSBzdGF0ZSkKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorc3RhdGljIHZv
aWQgYXBwZW5kVG91Y2hFdmVudChHdGtXaWRnZXQqIHdlYlZpZXdCYXNlLCBWZWN0b3I8V2ViUGxh
dGZvcm1Ub3VjaFBvaW50PiYgdG91Y2hQb2ludHMsIEdka0V2ZW50KiBldmVudCwgV2ViUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgc3RhdGUpCiB7CiAgICAgZ2RvdWJsZSB4LCB5
OwogICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOworI2lmIFVTRShHVEs0
KQorICAgIC8vIEV2ZW50cyBpbiBHVEs0IGFyZSBnaXZlbiBpbiBuYXRpdmUgc3VyZmFjZSBjb29y
ZGluYXRlcworICAgIGd0a193aWRnZXRfdHJhbnNsYXRlX2Nvb3JkaW5hdGVzKEdUS19XSURHRVQo
Z3RrX3dpZGdldF9nZXRfbmF0aXZlKHdlYlZpZXdCYXNlKSksCisgICAgICAgIHdlYlZpZXdCYXNl
LCB4LCB5LCAmeCwgJnkpOworI2VuZGlmCiAKICAgICBnZG91YmxlIHhSb290LCB5Um9vdDsKICAg
ICBnZGtfZXZlbnRfZ2V0X3Jvb3RfY29vcmRzKGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7CkBAIC0x
NDY2LDEyICsxNTE3LDEyIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFRvdWNoRXZlbnQoVmVjdG9yPFdl
YlBsYXRmb3JtVG91Y2hQb2ludD4mIHRvdWNoUG9pbnRzLCBjb25zdCBHCiAgICAgdG91Y2hQb2lu
dHMudW5jaGVja2VkQXBwZW5kKFdlYlBsYXRmb3JtVG91Y2hQb2ludChpZGVudGlmaWVyLCBzdGF0
ZSwgSW50UG9pbnQoeFJvb3QsIHlSb290KSwgSW50UG9pbnQoeCwgeSkpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUG9pbnRTdGF0ZSB0b3VjaFBvaW50
U3RhdGVGb3JFdmVudHMoY29uc3QgR2RrRXZlbnQqIGN1cnJlbnQsIGNvbnN0IEdka0V2ZW50KiBl
dmVudCkKK3N0YXRpYyBpbmxpbmUgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3Rh
dGUgdG91Y2hQb2ludFN0YXRlRm9yRXZlbnRzKEdka0V2ZW50KiBjdXJyZW50LCBHZGtFdmVudCog
ZXZlbnQpCiB7CiAgICAgaWYgKGdka19ldmVudF9nZXRfZXZlbnRfc2VxdWVuY2UoY3VycmVudCkg
IT0gZ2RrX2V2ZW50X2dldF9ldmVudF9zZXF1ZW5jZShldmVudCkpCiAgICAgICAgIHJldHVybiBX
ZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKIAotICAgIHN3aXRjaCAoY3Vy
cmVudC0+dHlwZSkgeworICAgIHN3aXRjaCAoZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKGV2ZW50
KSkgewogICAgIGNhc2UgR0RLX1RPVUNIX1VQREFURToKICAgICAgICAgcmV0dXJuIFdlYlBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZDsKICAgICBjYXNlIEdES19UT1VDSF9CRUdJTjoKQEAg
LTE0OTIsMTUgKzE1NDMsMjAgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRUb3Vj
aFBvaW50c0ZvckV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmEKICAgICBib29sIHRv
dWNoRW5kID0gKHR5cGUgPT0gR0RLX1RPVUNIX0VORCkgfHwgKHR5cGUgPT0gR0RLX1RPVUNIX0NB
TkNFTCk7CiAgICAgdG91Y2hQb2ludHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3VjaEVuZCA/
IHByaXYtPnRvdWNoRXZlbnRzLnNpemUoKSArIDEgOiBwcml2LT50b3VjaEV2ZW50cy5zaXplKCkp
OwogCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBHVEtfV0lER0VUKHdlYlZpZXdCYXNlKTsKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogcHJpdi0+dG91Y2hFdmVudHMpCi0gICAgICAgIGFwcGVu
ZFRvdWNoRXZlbnQodG91Y2hQb2ludHMsIGl0LnZhbHVlLmdldCgpLCB0b3VjaFBvaW50U3RhdGVG
b3JFdmVudHMoaXQudmFsdWUuZ2V0KCksIGV2ZW50KSk7CisgICAgICAgIGFwcGVuZFRvdWNoRXZl
bnQod2lkZ2V0LCB0b3VjaFBvaW50cywgaXQudmFsdWUuZ2V0KCksIHRvdWNoUG9pbnRTdGF0ZUZv
ckV2ZW50cyhpdC52YWx1ZS5nZXQoKSwgZXZlbnQpKTsKIAogICAgIC8vIFRvdWNoIHdhcyBhbHJl
YWR5IHJlbW92ZWQgZnJvbSB0aGUgVG91Y2hFdmVudHNNYXAsIGFkZCBpdCBoZXJlLgogICAgIGlm
ICh0b3VjaEVuZCkKLSAgICAgICAgYXBwZW5kVG91Y2hFdmVudCh0b3VjaFBvaW50cywgZXZlbnQs
IFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCk7CisgICAgICAgIGFwcGVuZFRv
dWNoRXZlbnQod2lkZ2V0LCB0b3VjaFBvaW50cywgZXZlbnQsIFdlYlBsYXRmb3JtVG91Y2hQb2lu
dDo6VG91Y2hSZWxlYXNlZCk7CiB9CiAKKyNpZiBVU0UoR1RLNCkKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRXZWJWaWV3QmFzZVRvdWNoRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiBl
dmVudCkKKyNlbHNlCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFRvdWNoKiBldmVudCkKKyNlbmRpZgogewogICAg
IFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdp
ZGdldCk7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2Ut
PnByaXY7CkBAIC0xNTE0LDYgKzE1NzAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmll
d0Jhc2VUb3VjaEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFRvdWNoKiBldgogICAg
IEdka0V2ZW50VHlwZSB0eXBlID0gZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKHRvdWNoRXZlbnQp
OwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR0RLX1RPVUNIX0JFR0lOOiB7CisgICAg
ICAgIGlmIChwcml2LT50b3VjaEV2ZW50cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBwcml2LT5w
YWdlR3JhYmJlZFRvdWNoID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVCghcHJpdi0+dG91Y2hFdmVu
dHMuY29udGFpbnMoc2VxdWVuY2UpKTsKICAgICAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gZXZl
bnQoZ2RrX2V2ZW50X2NvcHkodG91Y2hFdmVudCkpOwogICAgICAgICBwcml2LT50b3VjaEV2ZW50
cy5hZGQoc2VxdWVuY2UsIFdURk1vdmUoZXZlbnQpKTsKQEAgLTE1MzIsMTQ5ICsxNTkwLDIzIEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRXZlbnQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0V2ZW50VG91Y2gqIGV2CiAgICAgICAgIHByaXYtPnRvdWNoRXZlbnRzLnJlbW92
ZShzZXF1ZW5jZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gR0RLX0VWRU5UX1BST1BBR0FURTsKICAgICB9CiAKICAgICBWZWN0
b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiB0b3VjaFBvaW50czsKICAgICB3ZWJraXRXZWJWaWV3
QmFzZUdldFRvdWNoUG9pbnRzRm9yRXZlbnQod2ViVmlld0Jhc2UsIHRvdWNoRXZlbnQsIHRvdWNo
UG9pbnRzKTsKICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZVRvdWNoRXZlbnQoTmF0aXZlV2Vi
VG91Y2hFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCBXVEZNb3ZlKHRv
dWNoUG9pbnRzKSkpOwogCi0gICAgcmV0dXJuIEdES19FVkVOVF9TVE9QOworI2lmIFVTRShHVEs0
KQorICAgIHJldHVybiBHREtfRVZFTlRfUFJPUEFHQVRFOworI2Vsc2UKKyAgICByZXR1cm4gR1RL
X1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT50b3VjaF9l
dmVudCh3aWRnZXQsIGV2ZW50KTsKKyNlbmRpZgogfQogI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiAKLSNpZiAhVVNFKEdUSzQpCi1jbGFzcyBUb3VjaEdlc3R1cmVDb250cm9sbGVyIGZp
bmFsIDogcHVibGljIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIGV4cGxpY2l0IFRvdWNoR2VzdHVyZUNvbnRyb2xs
ZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQotICAgICAgICA6IG1fd2ViVmlldyh3
ZWJWaWV3QmFzZSkKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBHVW5pcXVl
UHRyPEdka0V2ZW50PiBjcmVhdGVTY3JvbGxFdmVudChHZGtFdmVudFRvdWNoKiBldmVudCwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIGRlbHRhLCBib29sIGlzU3Rv
cCA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZl
bnQoZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKSk7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3Jv
bGwudGltZSA9IGV2ZW50LT50aW1lOwotICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnggPSBw
b2ludC54KCk7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueSA9IHBvaW50LnkoKTsKLSAg
ICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54X3Jvb3QgPSBldmVudC0+eF9yb290OwotICAgICAg
ICBzY3JvbGxFdmVudC0+c2Nyb2xsLnlfcm9vdCA9IGV2ZW50LT55X3Jvb3Q7Ci0gICAgICAgIHNj
cm9sbEV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7Ci0gICAgICAg
IHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFfeCA9IGRlbHRhLngoKTsKLSAgICAgICAgc2Nyb2xs
RXZlbnQtPnNjcm9sbC5kZWx0YV95ID0gZGVsdGEueSgpOwotICAgICAgICBzY3JvbGxFdmVudC0+
c2Nyb2xsLnN0YXRlID0gZXZlbnQtPnN0YXRlOwotICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xs
LmlzX3N0b3AgPSBpc1N0b3A7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwud2luZG93ID0g
ZXZlbnQtPndpbmRvdyA/IEdES19XSU5ET1coZ19vYmplY3RfcmVmKGV2ZW50LT53aW5kb3cpKSA6
IG51bGxwdHI7Ci0gICAgICAgIGF1dG8qIHRvdWNoRXZlbnQgPSByZWludGVycHJldF9jYXN0PEdk
a0V2ZW50Kj4oZXZlbnQpOwotICAgICAgICBnZGtfZXZlbnRfc2V0X3NjcmVlbihzY3JvbGxFdmVu
dC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9zY3JlZW4odG91Y2hFdmVudCkpOwotICAgICAgICBnZGtf
ZXZlbnRfc2V0X2RldmljZShzY3JvbGxFdmVudC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9kZXZpY2Uo
dG91Y2hFdmVudCkpOwotICAgICAgICBnZGtfZXZlbnRfc2V0X3NvdXJjZV9kZXZpY2Uoc2Nyb2xs
RXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRfc291cmNlX2RldmljZSh0b3VjaEV2ZW50KSk7Ci0g
ICAgICAgIHJldHVybiBzY3JvbGxFdmVudDsKLSAgICB9Ci0KLSAgICB2b2lkIHNpbXVsYXRlTW91
c2VDbGljayhHZGtFdmVudFRvdWNoKiBldmVudCwgdW5zaWduZWQgYnV0dG9uKQotICAgIHsKLSAg
ICAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gcG9pbnRlckV2ZW50KGdka19ldmVudF9uZXcoR0RL
X01PVElPTl9OT1RJRlkpKTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24udGltZSA9IGV2
ZW50LT50aW1lOwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi54ID0gZXZlbnQtPng7Ci0g
ICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnkgPSBldmVudC0+eTsKLSAgICAgICAgcG9pbnRl
ckV2ZW50LT5tb3Rpb24ueF9yb290ID0gZXZlbnQtPnhfcm9vdDsKLSAgICAgICAgcG9pbnRlckV2
ZW50LT5tb3Rpb24ueV9yb290ID0gZXZlbnQtPnlfcm9vdDsKLSAgICAgICAgcG9pbnRlckV2ZW50
LT5tb3Rpb24uc3RhdGUgPSBldmVudC0+c3RhdGU7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90
aW9uLndpbmRvdyA9IGV2ZW50LT53aW5kb3cgPyBHREtfV0lORE9XKGdfb2JqZWN0X3JlZihldmVu
dC0+d2luZG93KSkgOiBudWxscHRyOwotICAgICAgICBhdXRvKiB0b3VjaEV2ZW50ID0gcmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgZ2RrX2V2ZW50X3NldF9zY3Jl
ZW4ocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X3NjcmVlbih0b3VjaEV2ZW50KSk7
Ci0gICAgICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHBvaW50ZXJFdmVudC5nZXQoKSwgZ2RrX2V2
ZW50X2dldF9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICBnZGtfZXZlbnRfc2V0X3NvdXJj
ZV9kZXZpY2UocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2Uo
dG91Y2hFdmVudCkpOwotICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZU1vdXNlRXZlbnQo
bV93ZWJWaWV3LCBwb2ludGVyRXZlbnQuZ2V0KCkpOwotCi0gICAgICAgIHBvaW50ZXJFdmVudC5y
ZXNldChnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUFJFU1MpKTsKLSAgICAgICAgcG9pbnRlckV2
ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRv
bi50aW1lID0gZXZlbnQtPnRpbWU7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnggPSBl
dmVudC0+eDsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0b24ueSA9IGV2ZW50LT55OwotICAg
ICAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSBldmVudC0+eF9yb290OwotICAgICAg
ICBwb2ludGVyRXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSBldmVudC0+eV9yb290OwotICAgICAgICBw
b2ludGVyRXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBldmVudC0+d2luZG93ID8gR0RLX1dJTkRPVyhn
X29iamVjdF9yZWYoZXZlbnQtPndpbmRvdykpIDogbnVsbHB0cjsKLSAgICAgICAgZ2RrX2V2ZW50
X3NldF9zY3JlZW4ocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X3NjcmVlbih0b3Vj
aEV2ZW50KSk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHBvaW50ZXJFdmVudC5nZXQo
KSwgZ2RrX2V2ZW50X2dldF9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICBnZGtfZXZlbnRf
c2V0X3NvdXJjZV9kZXZpY2UocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X3NvdXJj
ZV9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZU1v
dXNlRXZlbnQobV93ZWJWaWV3LCBwb2ludGVyRXZlbnQuZ2V0KCkpOwotCi0gICAgICAgIHBvaW50
ZXJFdmVudC0+dHlwZSA9IEdES19CVVRUT05fUkVMRUFTRTsKLSAgICAgICAgd2Via2l0V2ViVmll
d0Jhc2VIYW5kbGVNb3VzZUV2ZW50KG1fd2ViVmlldywgcG9pbnRlckV2ZW50LmdldCgpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHRhcChHZGtFdmVudFRvdWNoKiBldmVudCkgZmluYWwKLSAgICB7Ci0g
ICAgICAgIHNpbXVsYXRlTW91c2VDbGljayhldmVudCwgR0RLX0JVVFRPTl9QUklNQVJZKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHN0YXJ0RHJhZyhHZGtFdmVudFRvdWNoKiBldmVudCwgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCkgZmluYWwKLSAgICB7Ci0gICAgICAgIEdVbmlxdWVQdHI8R2Rr
RXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQsIHN0YXJ0UG9pbnQs
IHsgfSk7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlV2hlZWxFdmVudChtX3dlYlZp
ZXcsIHNjcm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VCZWdhbik7
Ci0gICAgfQotCi0gICAgdm9pZCBkcmFnKEdka0V2ZW50VG91Y2gqIGV2ZW50LCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRQb2ludCYgZGVsdGEpIGZpbmFsCi0gICAgewotICAg
ICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9IGNyZWF0ZVNjcm9sbEV2ZW50
KGV2ZW50LCBwb2ludCwgZGVsdGEpOwotICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZVdo
ZWVsRXZlbnQobV93ZWJWaWV3LCBzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhh
c2U6OlBoYXNlQ2hhbmdlZCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWxEcmFnKCkgZmluYWwK
LSAgICB7Ci0gICAgICAgIGlmIChhdXRvKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VW
aWV3R2VzdHVyZUNvbnRyb2xsZXIobV93ZWJWaWV3KSkKLSAgICAgICAgICAgIGNvbnRyb2xsZXIt
PmNhbmNlbFN3aXBlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2lwZShHZGtFdmVudFRvdWNoKiBl
dmVudCwgY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHkpIGZpbmFsCi0gICAgewotICAgICAgICBk
b3VibGUgeCwgeTsKLSAgICAgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMocmVpbnRlcnByZXRfY2Fz
dDxHZGtFdmVudCo+KGV2ZW50KSwgJngsICZ5KTsKLSAgICAgICAgR1VuaXF1ZVB0cjxHZGtFdmVu
dD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwgRmxvYXRQb2ludDo6bmFy
cm93UHJlY2lzaW9uKHgsIHkpLCB2ZWxvY2l0eSwgdHJ1ZSk7Ci0gICAgICAgIHdlYmtpdFdlYlZp
ZXdCYXNlSGFuZGxlV2hlZWxFdmVudChtX3dlYlZpZXcsIHNjcm9sbEV2ZW50LmdldCgpLCBXZWJX
aGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VOb25lLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VC
ZWdhbik7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydFpvb20oY29uc3QgSW50UG9pbnQmIGNlbnRl
ciwgZG91YmxlJiBpbml0aWFsU2NhbGUsIEludFBvaW50JiBpbml0aWFsUG9pbnQpIGZpbmFsCi0g
ICAgewotICAgICAgICBhdXRvKiBwYWdlID0gbV93ZWJWaWV3LT5wcml2LT5wYWdlUHJveHkuZ2V0
KCk7Ci0gICAgICAgIEFTU0VSVChwYWdlKTsKLSAgICAgICAgaW5pdGlhbFNjYWxlID0gcGFnZS0+
cGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgIHBhZ2UtPmdldENlbnRlckZvclpvb21HZXN0dXJl
KGNlbnRlciwgaW5pdGlhbFBvaW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIHpvb20oZG91YmxlIHNj
YWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKSBmaW5hbAotICAgIHsKLSAgICAgICAgYXV0byog
cGFnZSA9IG1fd2ViVmlldy0+cHJpdi0+cGFnZVByb3h5LmdldCgpOwotICAgICAgICBBU1NFUlQo
cGFnZSk7Ci0KLSAgICAgICAgcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBvcmlnaW4pOwotICAgIH0K
LQotICAgIHZvaWQgbG9uZ1ByZXNzKEdka0V2ZW50VG91Y2gqIGV2ZW50KSBmaW5hbAotICAgIHsK
LSAgICAgICAgc2ltdWxhdGVNb3VzZUNsaWNrKGV2ZW50LCBHREtfQlVUVE9OX1NFQ09OREFSWSk7
Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIG1fd2ViVmlldzsKLX07Ci0KLUdlc3R1
cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKLSAgICBpZiAoIXByaXYtPmdlc3R1cmVDb250cm9s
bGVyKQotICAgICAgICBwcml2LT5nZXN0dXJlQ29udHJvbGxlciA9IG1ha2VVbmlxdWU8R2VzdHVy
ZUNvbnRyb2xsZXI+KEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCBtYWtlVW5pcXVlPFRvdWNoR2Vz
dHVyZUNvbnRyb2xsZXI+KHdlYlZpZXdCYXNlKSk7Ci0gICAgcmV0dXJuICpwcml2LT5nZXN0dXJl
Q29udHJvbGxlcjsKLX0KLSNlbmRpZgotCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0RW5hYmxl
QmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZShXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UsIGJvb2wgZW5hYmxlZCkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAgICAgcHJpdi0+aXNCYWNrRm9y
d2FyZE5hdmlnYXRpb25HZXN0dXJlRW5hYmxlZCA9IGVuYWJsZWQ7CiAKQEAgLTE2ODIsMzIgKzE2
MTQsMjUgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldEVuYWJsZUJhY2tGb3J3YXJkTmF2aWdh
dGlvbkdlc3R1cmUoV2ViS2l0V2ViVmlld0Jhc2UqIHcKICAgICAgICAgY29udHJvbGxlci0+c2V0
U3dpcGVHZXN0dXJlRW5hYmxlZChlbmFibGVkKTsKIAogICAgIHByaXYtPnBhZ2VQcm94eS0+c2V0
U2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90cyhlbmFibGVkKTsKLSNlbmRpZgogfQogCi0j
aWYgIVVTRShHVEs0KQogVmlld0dlc3R1cmVDb250cm9sbGVyKiB3ZWJraXRXZWJWaWV3QmFzZVZp
ZXdHZXN0dXJlQ29udHJvbGxlcihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCiB7CiAg
ICAgcmV0dXJuIHdlYlZpZXdCYXNlLT5wcml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXIuZ2V0KCk7
CiB9Ci0jZW5kaWYKIAogYm9vbCB3ZWJraXRXZWJWaWV3QmFzZUJlZ2luQmFja1N3aXBlRm9yVGVz
dGluZyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCiB7Ci0jaWYgIVVTRShHVEs0KQog
ICAgIGlmIChhdXRvKiBnZXN0dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dl
c3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKSkKICAgICAgICAgcmV0dXJuIGdlc3R1cmVDb250
cm9sbGVyLT5iZWdpblNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJhY2spOwotI2VuZGlmCiAKICAgICByZXR1
cm4gRkFMU0U7CiB9CiAKIGJvb2wgd2Via2l0V2ViVmlld0Jhc2VDb21wbGV0ZUJhY2tTd2lwZUZv
clRlc3RpbmcoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQogewotI2lmICFVU0UoR1RL
NCkKICAgICBpZiAoYXV0byogZ2VzdHVyZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZp
ZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSkpCiAgICAgICAgIHJldHVybiBnZXN0dXJl
Q29udHJvbGxlci0+Y29tcGxldGVTaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsKLSNlbmRpZgogCiAg
ICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtMTczNiwxMyArMTY2MSw2IEBAIHN0YXRpYyBnYm9vbGVh
biB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRnZXQqIHdpZGdldCwgZ2ludCAv
KiB4ICovLCBnCiB9CiAKICNpZiAhVVNFKEdUSzQpCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2Vi
Vmlld0Jhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnQqIGV2ZW50KQotewotICAg
IGlmIChnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpID09IEdES19UT1VDSFBBRF9QSU5D
SCkKLSAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VHZXN0dXJlQ29udHJvbGxlcihXRUJLSVRfV0VC
X1ZJRVdfQkFTRSh3aWRnZXQpKS5oYW5kbGVFdmVudChldmVudCk7Ci0gICAgcmV0dXJuIEdES19F
VkVOVF9QUk9QQUdBVEU7Ci19Ci0KIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdFdlYlZpZXdCYXNl
R2V0QWNjZXNzaWJsZShHdGtXaWRnZXQqIHdpZGdldCkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OwpAQCAt
MTkyNCw2ICsxODQyLDE3MCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VGb2N1
cyhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGlyZWN0aW9uVHlwZSBkaXJlYwogICAgIHJldHVybiBH
VEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmZvY3Vz
KHdpZGdldCwgZGlyZWN0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2Va
b29tQmVnaW4oV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHZGtFdmVudFNlcXVlbmNl
KiBzZXF1ZW5jZSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBwcml2LT5pbml0aWFsWm9v
bVNjYWxlID0gcHJpdi0+cGFnZVByb3h5LT5wYWdlU2NhbGVGYWN0b3IoKTsKKworICAgIGRvdWJs
ZSB4LCB5OworICAgIGd0a19nZXN0dXJlX2dldF9ib3VuZGluZ19ib3hfY2VudGVyKGdlc3R1cmUs
ICZ4LCAmeSk7CisgICAgcHJpdi0+cGFnZVByb3h5LT5nZXRDZW50ZXJGb3Jab29tR2VzdHVyZShJ
bnRQb2ludCh4LCB5KSwgcHJpdi0+aW5pdGlhbFpvb21Qb2ludCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlWm9vbUNoYW5nZWQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlLCBnZG91YmxlIHNjYWxlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGlmIChwcml2
LT5wYWdlR3JhYmJlZFRvdWNoKQorICAgICAgICByZXR1cm47CisKKyAgICBndGtfZ2VzdHVyZV9z
ZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisgICAgYXV0
byBwYWdlU2NhbGUgPSBjbGFtcFRvPGRvdWJsZT4ocHJpdi0+aW5pdGlhbFpvb21TY2FsZSAqIHNj
YWxlLCAxLCAzKTsKKworICAgIEZsb2F0UG9pbnQgc2NhbGVkWm9vbUNlbnRlcihwcml2LT5pbml0
aWFsWm9vbVBvaW50KTsKKyAgICBzY2FsZWRab29tQ2VudGVyLnNjYWxlKHBhZ2VTY2FsZSk7CisK
KyAgICBkb3VibGUgeCwgeTsKKyAgICBndGtfZ2VzdHVyZV9nZXRfYm91bmRpbmdfYm94X2NlbnRl
cihnZXN0dXJlLCAmeCwgJnkpOworICAgIEZsb2F0UG9pbnQgdmlld1BvaW50ID0gRmxvYXRQb2lu
dCh4LCB5KTsKKworICAgIHByaXYtPnBhZ2VQcm94eS0+c2NhbGVQYWdlKHBhZ2VTY2FsZSwgV2Vi
Q29yZTo6cm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoc2NhbGVkWm9vbUNlbnRlciAtIHZpZXdQ
b2ludCkpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaExvbmdQcmVz
cyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGdkb3VibGUgeCwgZ2RvdWJsZSB5LCBH
dGtHZXN0dXJlKikKK3sKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+aXNMb25nUHJlc3NlZCA9IHRy
dWU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hQcmVzcyhXZWJLaXRX
ZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGludCBuUHJlc3MsIGRvdWJsZSB4LCBkb3VibGUgeSwg
R3RrR2VzdHVyZSopCit7CisgICAgd2ViVmlld0Jhc2UtPnByaXYtPmlzTG9uZ1ByZXNzZWQgPSBm
YWxzZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaFJlbGVhc2UoV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBpbnQgblByZXNzLCBkb3VibGUgeCwgZG91Ymxl
IHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
KiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgaWYgKHByaXYtPnBhZ2VHcmFiYmVkVG91
Y2gpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocHJpdi0+aXNCZWluZ0RyYWdnZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGJ1dHRvbjsKKyAgICB1bnNpZ25lZCBidXR0b25z
OworICAgIGlmIChwcml2LT5pc0xvbmdQcmVzc2VkKSB7CisgICAgICAgIGJ1dHRvbiA9IEdES19C
VVRUT05fU0VDT05EQVJZOworICAgICAgICBidXR0b25zID0gR0RLX0JVVFRPTjNfTUFTSzsKKyAg
ICB9IGVsc2UgeworICAgICAgICBidXR0b24gPSBHREtfQlVUVE9OX1BSSU1BUlk7CisgICAgICAg
IGJ1dHRvbnMgPSBHREtfQlVUVE9OMV9NQVNLOworICAgIH0KKworICAgIHVuc2lnbmVkIG1vZGlm
aWVycyA9IGd0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50X3N0YXRlKEdUS19F
VkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNp
emVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6TW90aW9uLCAwLCAwLCB4
LCB5LCBtb2RpZmllcnMsIG5QcmVzcywgdG91Y2hQb2ludGVyRXZlbnRUeXBlKCkpOworICAgIHdl
YmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQod2ViVmlld0Jhc2UsIE1vdXNlRXZl
bnRUeXBlOjpQcmVzcywgYnV0dG9uLCAwLCB4LCB5LCBtb2RpZmllcnMsIG5QcmVzcywgdG91Y2hQ
b2ludGVyRXZlbnRUeXBlKCkpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNl
RXZlbnQod2ViVmlld0Jhc2UsIE1vdXNlRXZlbnRUeXBlOjpSZWxlYXNlLCBidXR0b24sIGJ1dHRv
bnMsIHgsIHksIG1vZGlmaWVycywgblByZXNzLCB0b3VjaFBvaW50ZXJFdmVudFR5cGUoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnQmVnaW4oV2ViS2l0V2Vi
Vmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBnZG91YmxlIHN0YXJ0WCwgZ2RvdWJsZSBzdGFydFksIEd0
a0dlc3R1cmUqKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXdCYXNlLT5wcml2OworICAgIHByaXYtPmRyYWdPZmZzZXQuc2V0KDAsIDApOworICAgIHByaXYt
PmlzQmVpbmdEcmFnZ2VkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlVG91Y2hEcmFnVXBkYXRlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZG91Ymxl
IG9mZnNldFgsIGRvdWJsZSBvZmZzZXRZLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGlm
IChwcml2LT5wYWdlR3JhYmJlZFRvdWNoKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUg
eCwgeTsKKyAgICBndGtfZ2VzdHVyZV9kcmFnX2dldF9zdGFydF9wb2ludChHVEtfR0VTVFVSRV9E
UkFHKGdlc3R1cmUpLCAmeCwgJnkpOworCisgICAgdW5zaWduZWQgbW9kaWZpZXJzID0gZ3RrX2V2
ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfc3RhdGUoR1RLX0VWRU5UX0NPTlRST0xM
RVIoZ2VzdHVyZSkpOworICAgIGlmICghcHJpdi0+aXNCZWluZ0RyYWdnZWQpIHsKKyAgICAgICAg
aWYgKCFndGtfZHJhZ19jaGVja190aHJlc2hvbGQoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSksIDAs
IDAsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0WCksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0WSkp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcml2LT5pc0JlaW5nRHJhZ2dlZCA9IHRy
dWU7CisgICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VR
VUVOQ0VfQ0xBSU1FRCk7CisKKyAgICAgICAgaWYgKHByaXYtPmlzTG9uZ1ByZXNzZWQpIHsKKyAg
ICAgICAgICAgIC8vIERyYWcgYWZ0ZXIgbG9uZyBwcmVzcyBmb3J3YXJkcyBlbXVsYXRlZCBtb3Vz
ZSBldmVudHMgKGZvciBlLmcuIHRleHQgc2VsZWN0aW9uKQorICAgICAgICAgICAgd2Via2l0V2Vi
Vmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgTW91c2VFdmVudFR5cGU6
Ok1vdGlvbiwgMCwgMCwgeCwgeSwgbW9kaWZpZXJzLCAxLCB0b3VjaFBvaW50ZXJFdmVudFR5cGUo
KSk7CisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KHdl
YlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6UHJlc3MsIEdES19CVVRUT05fUFJJTUFSWSwgMCwg
eCwgeSwgbW9kaWZpZXJzLCAwLCB0b3VjaFBvaW50ZXJFdmVudFR5cGUoKSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCh3
ZWJWaWV3QmFzZSwgMCwgMCwgeCwgeSwgV2hlZWxFdmVudFBoYXNlOjpCZWdhbiwgV2hlZWxFdmVu
dFBoYXNlOjpOb1BoYXNlKTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+aXNMb25nUHJlc3NlZCkK
KyAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3QmFz
ZSwgTW91c2VFdmVudFR5cGU6Ok1vdGlvbiwgR0RLX0JVVFRPTl9QUklNQVJZLCBHREtfQlVUVE9O
MV9NQVNLLCB4ICsgb2Zmc2V0WCwgeSArIG9mZnNldFksIG1vZGlmaWVycywgMCwgdG91Y2hQb2lu
dGVyRXZlbnRUeXBlKCkpOworICAgIGVsc2UgeworICAgICAgICBkb3VibGUgZGVsdGFYID0gKHBy
aXYtPmRyYWdPZmZzZXQueCgpIC0gb2Zmc2V0WCkgLyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCk7CisgICAgICAgIGRvdWJsZSBkZWx0YVkgPSAocHJpdi0+ZHJhZ09mZnNldC55KCkgLSBv
ZmZzZXRZKSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgcHJpdi0+
ZHJhZ09mZnNldC5zZXQob2Zmc2V0WCwgb2Zmc2V0WSk7CisKKyAgICAgICAgVmlld0dlc3R1cmVD
b250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRy
b2xsZXIod2ViVmlld0Jhc2UpOworICAgICAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVy
LT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgaW50MzJfdCBldmVudFRp
bWU7CisjaWYgVVNFKEdUSzQpCisgICAgICAgICAgICBldmVudFRpbWUgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF90aW1lKEdUS19F
VkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKSk7CisjZWxzZQorICAgICAgICAgICAgZXZlbnRUaW1l
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oZ3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSBzY3JvbGxEYXRhID0geyAu
ZGVsdGEgPSBkZWx0YVgsIC5ldmVudFRpbWUgPSBldmVudFRpbWUsIC5pc1RvdWNoID0gdHJ1ZSwg
LmlzRW5kID0gZmFsc2UgfTsKKyAgICAgICAgICAgIGlmIChjb250cm9sbGVyLT5oYW5kbGVTY3Jv
bGxXaGVlbEV2ZW50KCZzY3JvbGxEYXRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50KHdl
YlZpZXdCYXNlLCAtZGVsdGFYLCAtZGVsdGFZLCB4LCB5LCBXaGVlbEV2ZW50UGhhc2U6OkNoYW5n
ZWQsIFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0VuZChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UsIGdkb3VibGUgb2Zmc2V0WCwgZ2RvdWJsZSBvZmZzZXRZLCBHdGtHZXN0dXJlKiBnZXN0dXJl
KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5w
cml2OworICAgIGlmIChwcml2LT5wYWdlR3JhYmJlZFRvdWNoKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAocHJpdi0+aXNMb25nUHJlc3NlZCkgeworICAgICAgICBkb3VibGUgeCwgeTsKKyAg
ICAgICAgZ3RrX2dlc3R1cmVfZHJhZ19nZXRfc3RhcnRfcG9pbnQoR1RLX0dFU1RVUkVfRFJBRyhn
ZXN0dXJlKSwgJngsICZ5KTsKKyAgICAgICAgdW5zaWduZWQgbW9kaWZpZXJzID0gZ3RrX2V2ZW50
X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfc3RhdGUoR1RLX0VWRU5UX0NPTlRST0xMRVIo
Z2VzdHVyZSkpOworICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50
KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6UmVsZWFzZSwgR0RLX0JVVFRPTl9QUklNQVJZ
LCBHREtfQlVUVE9OMV9NQVNLLCB4ICsgb2Zmc2V0WCwgeSArIG9mZnNldFksIG1vZGlmaWVycywg
MCwgdG91Y2hQb2ludGVyRXZlbnRUeXBlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFZpZXdH
ZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1
cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAgICAgICAgaWYgKGNvbnRyb2xsZXIgJiYgY29u
dHJvbGxlci0+aXNTd2lwZUdlc3R1cmVFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIGludDMyX3Qg
ZXZlbnRUaW1lID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0
X2N1cnJlbnRfZXZlbnRfdGltZShHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSkpOworICAg
ICAgICAgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRhIHNjcm9sbERhdGEgPSB7IC5kZWx0YSA9IDAs
IC5ldmVudFRpbWUgPSBldmVudFRpbWUsIC5pc1RvdWNoID0gZmFsc2UsIC5pc0VuZCA9IHRydWUg
fTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQoJnNjcm9s
bERhdGEpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
QmFzZVRvdWNoRHJhZ0NhbmNlbChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIEdka0V2
ZW50U2VxdWVuY2UqLCBHdGtHZXN0dXJlKikKK3sKKyAgICBpZiAoYXV0byogY29udHJvbGxlciA9
IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKSkKKyAg
ICAgICAgY29udHJvbGxlci0+Y2FuY2VsU3dpcGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VUb3VjaFN3aXBlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZ2Rv
dWJsZSB2ZWxvY2l0eVgsIGdkb3VibGUgdmVsb2NpdHlZLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2
OworICAgIGlmIChwcml2LT5wYWdlR3JhYmJlZFRvdWNoIHx8ICFwcml2LT5pc0JlaW5nRHJhZ2dl
ZCB8fCBwcml2LT5pc0xvbmdQcmVzc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUg
eCwgeTsKKyAgICBpZiAoZ3RrX2dlc3R1cmVfZ2V0X3BvaW50KGdlc3R1cmUsIGd0a19nZXN0dXJl
X3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkp
LCAmeCwgJnkpKQorICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50
KHdlYlZpZXdCYXNlLCAtdmVsb2NpdHlYLCAtdmVsb2NpdHlZLCB4LCB5LCBXaGVlbEV2ZW50UGhh
c2U6Ok5vUGhhc2UsIFdoZWVsRXZlbnRQaGFzZTo6QmVnYW4pOworfQorCisjaWYgIVVTRShHVEs0
KQorc3RhdGljIHZvaWQgZ2VzdHVyZVdlYWtOb3RpZnkoZ3BvaW50ZXIgZGF0YSwgR09iamVjdCog
b2xkTG9jYXRpb24pCit7CisgICAgZ19vYmplY3RfdW5yZWYoZGF0YSk7Cit9CisjZW5kaWYKKwog
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3Qp
CiB7CiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKQEAgLTE5NjEsMTIgKzIwNDMsNzcgQEAgc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgZ19z
aWduYWxfY29ubmVjdF9vYmplY3QoY29udHJvbGxlciwgImtleS1yZWxlYXNlZCIsIEdfQ0FMTEJB
Q0sod2Via2l0V2ViVmlld0Jhc2VLZXlSZWxlYXNlZCksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9T
V0FQUEVEKTsKICAgICBndGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIGNvbnRy
b2xsZXIpOwogCisgICAgY29udHJvbGxlciA9IGd0a19ldmVudF9jb250cm9sbGVyX2xlZ2FjeV9u
ZXcoKTsKKyAgICBndGtfZXZlbnRfY29udHJvbGxlcl9zZXRfcHJvcGFnYXRpb25fcGhhc2UoR1RL
X0VWRU5UX0NPTlRST0xMRVIoY29udHJvbGxlciksIEdUS19QSEFTRV9UQVJHRVQpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGNvbnRyb2xsZXIsICJldmVudCIsIEdfQ0FMTEJBQ0sod2Vi
a2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50KSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQp
OworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmlld1dpZGdldCwgR1RLX0VWRU5UX0NP
TlRST0xMRVIoY29udHJvbGxlcikpOworCiAgICAgYXV0byogZ2VzdHVyZSA9IGd0a19nZXN0dXJl
X2NsaWNrX25ldygpOwogICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfYnV0dG9uKEdUS19HRVNU
VVJFX1NJTkdMRShnZXN0dXJlKSwgMCk7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF9leGNs
dXNpdmUoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKICAgICBnX3NpZ25hbF9j
b25uZWN0X29iamVjdChnZXN0dXJlLCAicHJlc3NlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmll
d0Jhc2VCdXR0b25QcmVzc2VkKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOwogICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJyZWxlYXNlZCIsIEdfQ0FMTEJBQ0so
d2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlZCksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9T
V0FQUEVEKTsKICAgICBndGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19F
VkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKICNlbmRpZgorCisgICAgLy8gVG91Y2ggZ2VzdHVy
ZXMKKyNpZiBVU0UoR1RLNCkKKyAgICBwcml2LT50b3VjaEdlc3R1cmVHcm91cCA9IGd0a19nZXN0
dXJlX3pvb21fbmV3KCk7CisgICAgZ3RrX3dpZGdldF9hZGRfY29udHJvbGxlcih2aWV3V2lkZ2V0
LCBHVEtfRVZFTlRfQ09OVFJPTExFUihwcml2LT50b3VjaEdlc3R1cmVHcm91cCkpOworI2Vsc2UK
KyAgICBwcml2LT50b3VjaEdlc3R1cmVHcm91cCA9IGd0a19nZXN0dXJlX3pvb21fbmV3KHZpZXdX
aWRnZXQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKHZpZXdXaWRnZXQsIGdlc3R1cmVXZWFrTm90
aWZ5LCBwcml2LT50b3VjaEdlc3R1cmVHcm91cCk7CisjZW5kaWYKKyAgICBnX3NpZ25hbF9jb25u
ZWN0X29iamVjdChwcml2LT50b3VjaEdlc3R1cmVHcm91cCwgImJlZ2luIiwgR19DQUxMQkFDSyh3
ZWJraXRXZWJWaWV3QmFzZVpvb21CZWdpbiksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVE
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChwcml2LT50b3VjaEdlc3R1cmVHcm91cCwg
InNjYWxlLWNoYW5nZWQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlWm9vbUNoYW5nZWQp
LCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CisKKyNpZiBVU0UoR1RLNCkKKyAgICBn
ZXN0dXJlID0gZ3RrX2dlc3R1cmVfbG9uZ19wcmVzc19uZXcoKTsKKyAgICBndGtfd2lkZ2V0X2Fk
ZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsK
KyNlbHNlCisgICAgYXV0byogZ2VzdHVyZSA9IGd0a19nZXN0dXJlX2xvbmdfcHJlc3NfbmV3KHZp
ZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKHZpZXdXaWRnZXQsIGdlc3R1cmVXZWFr
Tm90aWZ5LCBnZXN0dXJlKTsKKyNlbmRpZgorICAgIGd0a19nZXN0dXJlX2dyb3VwKGdlc3R1cmUs
IHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3Rv
dWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X29iamVjdChnZXN0dXJlLCAicHJlc3NlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2Vi
Vmlld0Jhc2VUb3VjaExvbmdQcmVzcyksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsK
KworI2lmIFVTRShHVEs0KQorICAgIGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9jbGlja19uZXcoKTsK
KyAgICBndGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19FVkVOVF9DT05U
Uk9MTEVSKGdlc3R1cmUpKTsKKyNlbHNlCisgICAgZ2VzdHVyZSA9IGd0a19nZXN0dXJlX211bHRp
X3ByZXNzX25ldyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZih2aWV3V2lkZ2V0
LCBnZXN0dXJlV2Vha05vdGlmeSwgZ2VzdHVyZSk7CisjZW5kaWYKKyAgICBndGtfZ2VzdHVyZV9n
cm91cChnZXN0dXJlLCBwcml2LT50b3VjaEdlc3R1cmVHcm91cCk7CisgICAgZ3RrX2dlc3R1cmVf
c2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSwgVFJVRSk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwgInByZXNzZWQiLCBHX0NBTExC
QUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hQcmVzcyksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9T
V0FQUEVEKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChnZXN0dXJlLCAicmVsZWFzZWQi
LCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hSZWxlYXNlKSwgdmlld1dpZGdldCwg
R19DT05ORUNUX1NXQVBQRUQpOworCisjaWYgVVNFKEdUSzQpCisgICAgZ2VzdHVyZSA9IGd0a19n
ZXN0dXJlX2RyYWdfbmV3KCk7CisgICAgZ3RrX3dpZGdldF9hZGRfY29udHJvbGxlcih2aWV3V2lk
Z2V0LCBHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7CisjZWxzZQorICAgIGdlc3R1cmUg
PSBndGtfZ2VzdHVyZV9kcmFnX25ldyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF93ZWFrX3Jl
Zih2aWV3V2lkZ2V0LCBnZXN0dXJlV2Vha05vdGlmeSwgZ2VzdHVyZSk7CisjZW5kaWYKKyAgICBn
dGtfZ2VzdHVyZV9ncm91cChnZXN0dXJlLCBwcml2LT50b3VjaEdlc3R1cmVHcm91cCk7CisgICAg
Z3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShnZXN0
dXJlKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwgImRyYWct
YmVnaW4iLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnQmVnaW4pLCB2aWV3
V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3Qo
Z2VzdHVyZSwgImRyYWctdXBkYXRlIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNo
RHJhZ1VwZGF0ZSksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X29iamVjdChnZXN0dXJlLCAiZHJhZy1lbmQiLCBHX0NBTExCQUNLKHdlYmtpdFdl
YlZpZXdCYXNlVG91Y2hEcmFnRW5kKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJjYW5jZWwiLCBHX0NBTExCQUNL
KHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnQ2FuY2VsKSwgdmlld1dpZGdldCwgR19DT05ORUNU
X1NXQVBQRUQpOworCisjaWYgVVNFKEdUSzQpCisgICAgZ2VzdHVyZSA9IGd0a19nZXN0dXJlX3N3
aXBlX25ldygpOworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmlld1dpZGdldCwgR1RL
X0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworI2Vsc2UKKyAgICBnZXN0dXJlID0gZ3RrX2dl
c3R1cmVfc3dpcGVfbmV3KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKHZpZXdX
aWRnZXQsIGdlc3R1cmVXZWFrTm90aWZ5LCBnZXN0dXJlKTsKKyNlbmRpZgorICAgIGd0a19nZXN0
dXJlX2dyb3VwKGdlc3R1cmUsIHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwKTsKKyAgICBndGtfZ2Vz
dHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBU
UlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChnZXN0dXJlLCAic3dpcGUiLCBHX0NB
TExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hTd2lwZSksIHZpZXdXaWRnZXQsIEdfQ09OTkVD
VF9TV0FQUEVEKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3Nf
aW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKQpAQCAt
MjAwOSw3ICsyMTU2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3Nf
aW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJWaWUKICNlbmRpZgogICAgIHdp
ZGdldENsYXNzLT5xdWVyeV90b29sdGlwID0gd2Via2l0V2ViVmlld0Jhc2VRdWVyeVRvb2x0aXA7
CiAjaWYgIVVTRShHVEs0KQotICAgIHdpZGdldENsYXNzLT5ldmVudCA9IHdlYmtpdFdlYlZpZXdC
YXNlRXZlbnQ7CiAgICAgd2lkZ2V0Q2xhc3MtPmdldF9hY2Nlc3NpYmxlID0gd2Via2l0V2ViVmll
d0Jhc2VHZXRBY2Nlc3NpYmxlOwogI2VuZGlmCiAjaWYgVVNFKEdUSzQpCkBAIC0yMjk4LDE4ICsy
NDQ0LDE0IEBAIGJvb2wgd2Via2l0V2ViVmlld0Jhc2VNYWtlR0xDb250ZXh0Q3VycmVudChXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiAKIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VXaWxsU3dhcFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNl
KQogewotI2lmICFVU0UoR1RLNCkKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYg
PSB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdjsKICAgICBpZiAocHJpdi0+dmlld0dlc3R1cmVDb250
cm9sbGVyKQogICAgICAgICBwcml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXItPmRpc2Nvbm5lY3RG
cm9tUHJvY2VzcygpOwotI2VuZGlmCiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRFeGl0
V2ViUHJvY2VzcyhXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0jaWYg
IVVTRShHVEs0KQogICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT52aWV3R2VzdHVyZUNvbnRy
b2xsZXIgPSBudWxscHRyOwotI2VuZGlmCiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRS
ZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQpA
QCAtMjMyMiwxNCArMjQ2NCwxMiBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hX
ZWJQcm9jZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZQogICAgICAgICBh
dXRvKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlDb29yZGluYXRl
ZEdyYXBoaWNzKj4ocHJpdi0+cGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKICAgICAgICAgcHJp
di0+YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUtPnVwZGF0ZShkcmF3aW5nQXJlYS0+bGF5ZXJUcmVl
Q29udGV4dCgpKTsKICAgICB9Ci0jaWYgIVVTRShHVEs0KQogICAgIGlmIChwcml2LT52aWV3R2Vz
dHVyZUNvbnRyb2xsZXIpCiAgICAgICAgIHByaXYtPnZpZXdHZXN0dXJlQ29udHJvbGxlci0+Y29u
bmVjdFRvUHJvY2VzcygpOwogICAgIGVsc2UgewogICAgICAgICBwcml2LT52aWV3R2VzdHVyZUNv
bnRyb2xsZXIgPSBtYWtlVW5pcXVlPFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyPigqcHJp
di0+cGFnZVByb3h5KTsKICAgICAgICAgcHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyLT5zZXRT
d2lwZUdlc3R1cmVFbmFibGVkKHByaXYtPmlzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZUVu
YWJsZWQpOwogICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUGFnZUNs
b3NlZChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCkBAIC0yMzY0LDU2ICsy
NTA0LDQ0IEBAIFJlZlB0cjxXZWJLaXQ6OlZpZXdTbmFwc2hvdD4gd2Via2l0V2ViVmlld0Jhc2VU
YWtlVmlld1NuYXBzaG90KFdlYktpdFdlYlZpZXdCYXNlCiAKIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZShXZWJLaXRXZWJWaWV3QmFzZSog
d2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9s
bGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVy
LT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkKICAgICAgICAgY29udHJvbGxlci0+ZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUoKTsKLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAg
Vmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3
R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVy
ICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKQogICAgICAgICBjb250cm9s
bGVyLT5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKTsKLSNlbmRp
ZgogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkRmluaXNoTmF2aWdhdGlvbihXZWJLaXRX
ZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlv
bikKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9s
bGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2ViVmll
d0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJl
RW5hYmxlZCgpKQogICAgICAgICBjb250cm9sbGVyLT5kaWRGaW5pc2hOYXZpZ2F0aW9uKG5hdmln
YXRpb24pOwotI2VuZGlmCiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRGYWlsTmF2aWdh
dGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIEFQSTo6TmF2aWdhdGlv
biogbmF2aWdhdGlvbikKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1cmVDb250cm9s
bGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIo
d2Via2l0V2ViVmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlz
U3dpcGVHZXN0dXJlRW5hYmxlZCgpKQogICAgICAgICBjb250cm9sbGVyLT5kaWRGYWlsTmF2aWdh
dGlvbihuYXZpZ2F0aW9uKTsKLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlk
U2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZShXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlld0Jhc2UsIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlIHR5cGUpCiB7Ci0jaWYg
IVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtp
dFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAg
ICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkK
ICAgICAgICAgY29udHJvbGxlci0+ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFt
ZSh0eXBlKTsKLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVzdG9yZVNj
cm9sbFBvc2l0aW9uKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKLSNp
ZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Vi
a2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwog
ICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgp
KQogICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVy
LT5kaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKLSNlbmRpZgogfQogCiAjaWYgR1RLX0NIRUNL
X1ZFUlNJT04oMywgMjQsIDApCkBAIC0yNzkyLDMgKzI5MjAsMTAgQEAgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZU1ha2VCbGFuayhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGJvb2wgbWFr
ZUJsYW5rKQogICAgIHByaXYtPmlzQmxhbmsgPSBtYWtlQmxhbms7CiAgICAgZ3RrX3dpZGdldF9x
dWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKIH0KKwordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVBhZ2VHcmFiYmVkVG91Y2goV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2
OworICAgIHByaXYtPnBhZ2VHcmFiYmVkVG91Y2ggPSB0cnVlOworICAgIGd0a19nZXN0dXJlX3Nl
dF9zdGF0ZShwcml2LT50b3VjaEdlc3R1cmVHcm91cCwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklF
RCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCBlZDI2OTlkYmUwZGIuLjdlNzhhNmE0Y2M0
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC0yOCw3ICsyOCw2IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiR2VzdHVyZUNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZFN0YXRlLmgiCiAjaW5jbHVkZSAiU2Ft
ZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIK
QEAgLTg4LDE1ICs4Nyw5IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV2ViS2l0
V2ViVmlld0Jhc2UqLCBXZWJDb3JlOjpTZWxlY3Rpb25EYXRhJiYsIE9wCiB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlRGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKFdlYktpdFdlYlZpZXdCYXNl
Kik7CiAjZW5kaWYKIAotI2lmICFVU0UoR1RLNCkKLVdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXIm
IHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqKTsK
LSNlbmRpZgotCiBSZWZQdHI8V2ViS2l0OjpWaWV3U25hcHNob3Q+IHdlYmtpdFdlYlZpZXdCYXNl
VGFrZVZpZXdTbmFwc2hvdChXZWJLaXRXZWJWaWV3QmFzZSosIE9wdGlvbmFsPFdlYkNvcmU6Oklu
dFJlY3Q+JiYpOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldEVuYWJsZUJhY2tGb3J3YXJkTmF2
aWdhdGlvbkdlc3R1cmUoV2ViS2l0V2ViVmlld0Jhc2UqLCBib29sIGVuYWJsZWQpOwotI2lmICFV
U0UoR1RLNCkKIFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyKiB3ZWJraXRXZWJWaWV3QmFz
ZVZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJLaXRXZWJWaWV3QmFzZSopOwotI2VuZGlmCiAKIGJv
b2wgd2Via2l0V2ViVmlld0Jhc2VCZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcoV2ViS2l0V2ViVmll
d0Jhc2UqKTsKIGJvb2wgd2Via2l0V2ViVmlld0Jhc2VDb21wbGV0ZUJhY2tTd2lwZUZvclRlc3Rp
bmcoV2ViS2l0V2ViVmlld0Jhc2UqKTsKQEAgLTEyMiwzICsxMTUsNCBAQCBXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQqIHdlYmtpdFdlYlZpZXdCYXNlR2V0SW5wdXRNZXRob2RDb250ZXh0KFdlYktp
dFdlYlZpZXdCYQogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVDb21wb3NpdGlvbktl
eVByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25hbDxW
ZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+PiYmLCBPcHRpb25hbDxXZWJLaXQ6
OkVkaXRpbmdSYW5nZT4mJik7CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VNYWtlQmxhbmsoV2Vi
S2l0V2ViVmlld0Jhc2UqLCBib29sKTsKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VQYWdlR3JhYmJl
ZFRvdWNoKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oCmluZGV4IGYyNWU3OTIz
ZDNhZi4uYjg2ZTAwYjZjMjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9W
aWV3R2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3
R2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtNzQsOCArNzQsMTMgQEAgY2xhc3MgTmF2aWdhdGlvbjsK
ICNpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIE5TRXZlbnQqIFBsYXRmb3JtU2Nyb2xsRXZlbnQ7
CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRTY3JvbGwgR2Rr
RXZlbnRTY3JvbGw7Ci10eXBlZGVmIEdka0V2ZW50U2Nyb2xsKiBQbGF0Zm9ybVNjcm9sbEV2ZW50
OwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGRvdWJsZSBkZWx0YTsKKyAgICBpbnQzMl90IGV2ZW50
VGltZTsKKyAgICBib29sIGlzVG91Y2g7CisgICAgYm9vbCBpc0VuZDsKK30gUGxhdGZvcm1HdGtT
Y3JvbGxEYXRhOwordHlwZWRlZiBQbGF0Zm9ybUd0a1Njcm9sbERhdGEqIFBsYXRmb3JtU2Nyb2xs
RXZlbnQ7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xNzMsNyArMTc4LDExIEBA
IHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2b2lkIGNhbmNlbFN3aXBlKCk7Cisj
aWYgVVNFKEdUSzQpCisgICAgdm9pZCBzbmFwc2hvdChHdGtTbmFwc2hvdCosIEdza1JlbmRlck5v
ZGUqKTsKKyNlbHNlCiAgICAgdm9pZCBkcmF3KGNhaXJvX3QqLCBjYWlyb19wYXR0ZXJuX3QqKTsK
KyNlbmRpZgogI2VuZGlmCiAKICAgICAvLyBUZXN0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjJjNDUxY2Y1YzQyLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHZXN0dXJlQ29udHJvbGxlci5oIgot
Ci0jaWYgIVVTRShHVEs0KQotCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KLSNpbmNs
dWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgbWF4aW11bVpvb20gPSAzLjA7Ci0KLUdlc3R1
cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJvbGxlcihHdGtXaWRnZXQqIHdpZGdldCwgc3RkOjp1
bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyQ2xpZW50PiYmIGNsaWVudCkKLSAgICA6IG1fY2xp
ZW50KFdURk1vdmUoY2xpZW50KSkKLSAgICAsIG1fZHJhZ0dlc3R1cmUod2lkZ2V0LCAqbV9jbGll
bnQpCi0gICAgLCBtX3N3aXBlR2VzdHVyZSh3aWRnZXQsICptX2NsaWVudCkKLSAgICAsIG1fem9v
bUdlc3R1cmUod2lkZ2V0LCAqbV9jbGllbnQpCi0gICAgLCBtX2xvbmdwcmVzc0dlc3R1cmUod2lk
Z2V0LCAqbV9jbGllbnQpCi17Ci19Ci0KLWJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2
ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBib29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9
IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7Ci0gICAgYm9vbCB0b3VjaEVuZDsKLSAgICBtX2RyYWdH
ZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKLSAgICBtX3N3aXBlR2VzdHVyZS5oYW5kbGVFdmVu
dChldmVudCk7Ci0gICAgbV96b29tR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7Ci0gICAgbV9s
b25ncHJlc3NHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsKLSAgICB0b3VjaEVuZCA9IChnZGtf
ZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpID09IEdES19UT1VDSF9FTkQpIHx8IChnZGtfZXZl
bnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpID09IEdES19UT1VDSF9DQU5DRUwpOwotICAgIHJldHVy
biB0b3VjaEVuZCA/IHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA6IGlzUHJvY2Vzc2luZ0dlc3R1cmVz
KCk7Ci19Ci0KLWJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kcmFnR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fc3dpcGVH
ZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29tR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fbG9uZ3By
ZXNzR2VzdHVyZS5pc0FjdGl2ZSgpOwotfQotCi1HZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6
R2VzdHVyZShHdGtHZXN0dXJlKiBnZXN0dXJlLCBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYgY2xp
ZW50KQotICAgIDogbV9nZXN0dXJlKGFkb3B0R1JlZihnZXN0dXJlKSkKLSAgICAsIG1fY2xpZW50
KGNsaWVudCkKLXsKLSAgICBndGtfZXZlbnRfY29udHJvbGxlcl9zZXRfcHJvcGFnYXRpb25fcGhh
c2UoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgR1RLX1BIQVNFX05PTkUp
OwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlOjpyZXNldCgpCi17Ci0gICAg
Z3RrX2V2ZW50X2NvbnRyb2xsZXJfcmVzZXQoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJl
LmdldCgpKSk7Ci19Ci0KLWJvb2wgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmlzQWN0aXZl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ3RrX2dlc3R1cmVfaXNfYWN0aXZlKG1fZ2VzdHVyZS5n
ZXQoKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50
KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBndGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZl
bnQoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSwgZXZlbnQpOwotfQotCi12
b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6c3RhcnREcmFnKEdka0V2ZW50KiBl
dmVudCkKLXsKLSAgICBBU1NFUlQoIW1faW5EcmFnKTsKLSAgICBtX2NsaWVudC5zdGFydERyYWco
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudFRvdWNoKj4oZXZlbnQpLCBtX3N0YXJ0KTsKLX0KLQot
dm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZURyYWcoR2RrRXZlbnQq
IGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0gICAgQVNTRVJUKG1faW5EcmFnKTsKLSAg
ICBtX2NsaWVudC5kcmFnKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRUb3VjaCo+KGV2ZW50KSwg
bV9zdGFydCwKLSAgICAgICAgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKChtX29mZnNldC54
KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgKG1fb2Zmc2V0LnkoKSAt
IHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKSk7Ci19Ci0KLXZvaWQgR2VzdHVy
ZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpjYW5jZWxEcmFnKCkKLXsKLSAgICBBU1NFUlQobV9p
bkRyYWcpOwotICAgIG1fY2xpZW50LmNhbmNlbERyYWcoKTsKLX0KLQotdm9pZCBHZXN0dXJlQ29u
dHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRsZVRhcChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAg
QVNTRVJUKCFtX2luRHJhZyk7Ci0gICAgbV9jbGllbnQudGFwKHJlaW50ZXJwcmV0X2Nhc3Q8R2Rr
RXZlbnRUb3VjaCo+KGV2ZW50KSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdH
ZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUg
eSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5j
ZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9T
SU5HTEUoZ2VzdHVyZSkpOwotICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0
dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOwotICAgIGRyYWdHZXN0
dXJlLT5tX2luRHJhZyA9IGZhbHNlOwotICAgIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LnNldCh4LCB5
KTsKLSAgICBkcmFnR2VzdHVyZS0+bV9vZmZzZXQuc2V0KDAsIDApOwotCi0gICAgR3RrV2lkZ2V0
KiB3aWRnZXQgPSBndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05U
Uk9MTEVSKGdlc3R1cmUpKTsKLSAgICB1bnNpZ25lZCBkZWxheTsKLSAgICBnX29iamVjdF9nZXQo
Z3RrX3dpZGdldF9nZXRfc2V0dGluZ3Mod2lkZ2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAm
ZGVsYXksIG51bGxwdHIpOwotICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3Rh
cnRPbmVTaG90KDFfbXMgKiBkZWxheSk7Ci0gICAgZHJhZ0dlc3R1cmUtPnN0YXJ0RHJhZyhjb25z
dF9jYXN0PEdka0V2ZW50Kj4oZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2Vx
dWVuY2UpKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRh
dGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1
cmUqIGdlc3R1cmUpCi17Ci0gICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2Vz
dHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1
cmUpKTsKLSAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVu
Y2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0
ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X3dpZGdldChHVEtfRVZFTlRfQ09OVFJPTExFUihn
ZXN0dXJlKSk7Ci0gICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcgJiYgZ3RrX2RyYWdfY2hl
Y2tfdGhyZXNob2xkKHdpZGdldCwgZHJhZ0dlc3R1cmUtPm1fc3RhcnQueCgpLCBkcmFnR2VzdHVy
ZS0+bV9zdGFydC55KCksIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LngoKSArIHgsIGRyYWdHZXN0dXJl
LT5tX3N0YXJ0LnkoKSArIHkpKSB7Ci0gICAgICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IHRy
dWU7Ci0gICAgICAgIGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RvcCgpOwotICAg
IH0KLQotICAgIGlmIChkcmFnR2VzdHVyZS0+bV9pbkRyYWcpCi0gICAgICAgIGRyYWdHZXN0dXJl
LT5oYW5kbGVEcmFnKGNvbnN0X2Nhc3Q8R2RrRXZlbnQqPihndGtfZ2VzdHVyZV9nZXRfbGFzdF9l
dmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpLCB4LCB5KTsKLSAgICBkcmFnR2VzdHVyZS0+bV9vZmZz
ZXQuc2V0KHgsIHkpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6
ZW5kKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2Us
IEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGlt
ZW91dC5zdG9wKCk7Ci0gICAgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1
cmUsIHNlcXVlbmNlKSkgewotICAgICAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwg
R1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcpIHsKLSAgICAgICAgZHJhZ0dlc3R1cmUtPmhhbmRs
ZVRhcChjb25zdF9jYXN0PEdka0V2ZW50Kj4oZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2Vz
dHVyZSwgc2VxdWVuY2UpKSk7Ci0gICAgICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJl
LCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVEKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpjYW5jZWwoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBH
ZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAgICBk
cmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LnN0b3AoKTsKLSAgICBkcmFnR2VzdHVyZS0+
Y2FuY2VsRHJhZygpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6
bG9uZ1ByZXNzRmlyZWQoKQotewotICAgIG1faW5EcmFnID0gdHJ1ZTsKLX0KLQotR2VzdHVyZUNv
bnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFnR2VzdHVyZShHdGtXaWRnZXQqIHdpZGdldCwgR2Vz
dHVyZUNvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkKLSAgICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVf
ZHJhZ19uZXcod2lkZ2V0KSwgY2xpZW50KQotICAgICwgbV9sb25nUHJlc3NUaW1lb3V0KFJ1bkxv
b3A6Om1haW4oKSwgdGhpcywgJkdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9uZ1By
ZXNzRmlyZWQpCi17Ci0gICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19H
RVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZHJhZy1iZWdpbiIsIEdfQ0FMTEJBQ0soYmVn
aW4pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgp
LCAiZHJhZy11cGRhdGUiLCBHX0NBTExCQUNLKHVwZGF0ZSksIHRoaXMpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJlbmQiLCBHX0NBTExCQUNLKGVuZCks
IHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJj
YW5jZWwiLCBHX0NBTExCQUNLKGNhbmNlbCksIHRoaXMpOwotfQotCi12b2lkIEdlc3R1cmVDb250
cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0TW9tZW50dW1TY3JvbGwoR2RrRXZlbnQqIGV2ZW50
LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUgdmVsb2NpdHlZKQotewotICAgIG1fY2xpZW50LnN3
aXBlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRUb3VjaCo+KGV2ZW50KSwgRmxvYXRQb2ludDo6
bmFycm93UHJlY2lzaW9uKHZlbG9jaXR5WCwgdmVsb2NpdHlZKSk7Ci19Ci0KLXZvaWQgR2VzdHVy
ZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6c3dpcGUoU3dpcGVHZXN0dXJlKiBzd2lwZUdlc3R1
cmUsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dlc3R1cmUqIGdlc3R1
cmUpCi17Ci0gICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5n
bGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKLSAg
ICBpZiAoIWd0a19nZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2Vz
dHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKLQotICAgIHN3aXBl
R2VzdHVyZS0+c3RhcnRNb21lbnR1bVNjcm9sbChjb25zdF9jYXN0PEdka0V2ZW50Kj4oZ3RrX2dl
c3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKSwgdmVsb2NpdHlYLCB2ZWxv
Y2l0eVkpOwotfQotCi1HZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1
cmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0g
ICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3N3aXBlX25ldyh3aWRnZXQpLCBjbGllbnQpCi17Ci0g
ICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRSht
X2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9n
ZXN0dXJlLmdldCgpLCAic3dpcGUiLCBHX0NBTExCQUNLKHN3aXBlKSwgdGhpcyk7Ci19Ci0KLXZv
aWQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpiZWdpbihab29tR2VzdHVyZSogem9v
bUdlc3R1cmUsIEdka0V2ZW50U2VxdWVuY2UqLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQotewotICAg
IGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1F
RCk7Ci0gICAgem9vbUdlc3R1cmUtPnN0YXJ0Wm9vbSgpOwotfQotCi1JbnRQb2ludCBHZXN0dXJl
Q29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNlbnRlcigpIGNvbnN0Ci17Ci0gICAgZG91YmxlIHgs
IHk7Ci0gICAgZ3RrX2dlc3R1cmVfZ2V0X2JvdW5kaW5nX2JveF9jZW50ZXIobV9nZXN0dXJlLmdl
dCgpLCAmeCwgJnkpOwotICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKLX0KLQotdm9pZCBHZXN0
dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OnN0YXJ0Wm9vbSgpCi17Ci0gICAgbV9jbGllbnQu
c3RhcnRab29tKGNlbnRlcigpLCBtX2luaXRpYWxTY2FsZSwgbV9pbml0aWFsUG9pbnQpOwotfQot
Ci12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6aGFuZGxlWm9vbSgpCi17Ci0g
ICAgRmxvYXRQb2ludCBzY2FsZWRab29tQ2VudGVyKG1faW5pdGlhbFBvaW50KTsKLSAgICBzY2Fs
ZWRab29tQ2VudGVyLnNjYWxlKG1fc2NhbGUpOwotCi0gICAgbV9jbGllbnQuem9vbShtX3NjYWxl
LCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludChzY2FsZWRab29tQ2VudGVyIC0g
bV92aWV3UG9pbnQpKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJl
OjpzY2FsZUNoYW5nZWQoWm9vbUdlc3R1cmUqIHpvb21HZXN0dXJlLCBkb3VibGUgc2NhbGUsIEd0
a0dlc3R1cmUqKQotewotICAgIHpvb21HZXN0dXJlLT5tX3NjYWxlID0gem9vbUdlc3R1cmUtPm1f
aW5pdGlhbFNjYWxlICogc2NhbGU7Ci0gICAgaWYgKHpvb21HZXN0dXJlLT5tX3NjYWxlIDwgMS4w
KQotICAgICAgICB6b29tR2VzdHVyZS0+bV9zY2FsZSA9IDEuMDsKLSAgICBpZiAoem9vbUdlc3R1
cmUtPm1fc2NhbGUgPiBtYXhpbXVtWm9vbSkKLSAgICAgICAgem9vbUdlc3R1cmUtPm1fc2NhbGUg
PSBtYXhpbXVtWm9vbTsKLQotICAgIHpvb21HZXN0dXJlLT5tX3ZpZXdQb2ludCA9IHpvb21HZXN0
dXJlLT5jZW50ZXIoKTsKLQotICAgIGlmICh6b29tR2VzdHVyZS0+bV9pZGxlLmlzQWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHpvb21HZXN0dXJlLT5tX2lkbGUuc3RhcnRPbmVTaG90
KDBfcyk7Ci19Ci0KLUdlc3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0gICAg
OiBHZXN0dXJlKGd0a19nZXN0dXJlX3pvb21fbmV3KHdpZGdldCksIGNsaWVudCkKLSAgICAsIG1f
aWRsZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1
cmU6OmhhbmRsZVpvb20pCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVy
ZS5nZXQoKSwgImJlZ2luIiwgR19DQUxMQkFDSyhiZWdpbiksIHRoaXMpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJzY2FsZS1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhzY2FsZUNoYW5nZWQpLCB0aGlzKTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6
TG9uZ1ByZXNzR2VzdHVyZTo6bG9uZ1ByZXNzZWQoR2RrRXZlbnQqIGV2ZW50KQotewotICAgIG1f
Y2xpZW50LmxvbmdQcmVzcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50VG91Y2gqPihldmVudCkp
OwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpMb25nUHJlc3NHZXN0dXJlOjpwcmVzc2Vk
KExvbmdQcmVzc0dlc3R1cmUqIGxvbmdwcmVzc0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwg
R3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9
IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5H
TEUoZ2VzdHVyZSkpOwotICAgIGlmICghZ3RrX2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0
dXJlLCBzZXF1ZW5jZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGd0a19nZXN0dXJlX3NldF9z
ZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlN
RUQpOwotCi0gICAgbG9uZ3ByZXNzR2VzdHVyZS0+bG9uZ1ByZXNzZWQoY29uc3RfY2FzdDxHZGtF
dmVudCo+KGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSkpOwot
fQotCi1HZXN0dXJlQ29udHJvbGxlcjo6TG9uZ1ByZXNzR2VzdHVyZTo6TG9uZ1ByZXNzR2VzdHVy
ZShHdGtXaWRnZXQqIHdpZGdldCwgR2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkKLSAg
ICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVfbG9uZ19wcmVzc19uZXcod2lkZ2V0KSwgY2xpZW50KQot
ewotICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5H
TEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fZ2VzdHVyZS5nZXQoKSwgInByZXNzZWQiLCBHX0NBTExCQUNLKHByZXNzZWQpLCB0aGlzKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTE0NmQ0NTg0ZTYxLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmICFVU0UoR1RLNCkKLQotI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRQb2ludC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotCi10eXBlZGVmIHVuaW9u
IF9HZGtFdmVudCBHZGtFdmVudDsKLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudFRvdWNoIEdka0V2
ZW50VG91Y2g7Ci10eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRTZXF1ZW5jZSBHZGtFdmVudFNlcXVl
bmNlOwotdHlwZWRlZiBzdHJ1Y3QgX0d0a0dlc3R1cmUgR3RrR2VzdHVyZTsKLQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgR2VzdHVyZUNvbnRyb2xsZXJDbGllbnQgewotcHVibGljOgot
ICAgIHZpcnR1YWwgfkdlc3R1cmVDb250cm9sbGVyQ2xpZW50KCkgPSBkZWZhdWx0OwotCi0gICAg
dmlydHVhbCB2b2lkIHRhcChHZGtFdmVudFRvdWNoKikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IHN0YXJ0RHJhZyhHZGtFdmVudFRvdWNoKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhZyhHZGtFdmVudFRvdWNoKiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNhbmNlbERyYWcoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3dpcGUoR2RrRXZl
bnRUb3VjaCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc3RhcnRab29tKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjZW50ZXIsIGRvdWJsZSYg
aW5pdGlhbFNjYWxlLCBXZWJDb3JlOjpJbnRQb2ludCYgaW5pdGlhbFBvaW50KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHpvb20oZG91YmxlIHNjYWxlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
b3JpZ2luKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9uZ1ByZXNzKEdka0V2ZW50VG91Y2gq
KSA9IDA7Ci19OwotCi1jbGFzcyBHZXN0dXJlQ29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoR2VzdHVyZUNvbnRyb2xsZXIpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotCi1wdWJsaWM6Ci0gICAgR2VzdHVyZUNvbnRyb2xsZXIoR3RrV2lkZ2V0Kiwgc3RkOjp1bmlx
dWVfcHRyPEdlc3R1cmVDb250cm9sbGVyQ2xpZW50PiYmKTsKLQotICAgIGJvb2wgaXNQcm9jZXNz
aW5nR2VzdHVyZXMoKSBjb25zdDsKLSAgICBib29sIGhhbmRsZUV2ZW50KEdka0V2ZW50Kik7Ci0K
LSAgICB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1fZHJhZ0dlc3R1cmUucmVzZXQoKTsK
LSAgICAgICAgbV9zd2lwZUdlc3R1cmUucmVzZXQoKTsKLSAgICAgICAgbV96b29tR2VzdHVyZS5y
ZXNldCgpOwotICAgICAgICBtX2xvbmdwcmVzc0dlc3R1cmUucmVzZXQoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgY2xhc3MgR2VzdHVyZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2b2lkIHJl
c2V0KCk7Ci0gICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBoYW5k
bGVFdmVudChHZGtFdmVudCopOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBHZXN0dXJlKEd0
a0dlc3R1cmUqLCBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYpOwotCi0gICAgICAgIEdSZWZQdHI8
R3RrR2VzdHVyZT4gbV9nZXN0dXJlOwotICAgICAgICBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYg
bV9jbGllbnQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIERyYWdHZXN0dXJlIGZpbmFsIDogcHVibGlj
IEdlc3R1cmUgewotICAgIHB1YmxpYzoKLSAgICAgICAgRHJhZ0dlc3R1cmUoR3RrV2lkZ2V0Kiwg
R2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIE5v
dGlmeSB0aGF0IGEgZHJhZyBzdGFydGVkLCBhbGxvd2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxl
cmF0aW9uLgotICAgICAgICB2b2lkIHN0YXJ0RHJhZyhHZGtFdmVudCopOwotICAgICAgICB2b2lk
IGhhbmRsZURyYWcoR2RrRXZlbnQqLCBkb3VibGUgeCwgZG91YmxlIHkpOwotICAgICAgICB2b2lk
IGNhbmNlbERyYWcoKTsKLSAgICAgICAgdm9pZCBoYW5kbGVUYXAoR2RrRXZlbnQqKTsKLSAgICAg
ICAgdm9pZCBsb25nUHJlc3NGaXJlZCgpOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIGJlZ2luKERy
YWdHZXN0dXJlKiwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZShEcmFnR2VzdHVyZSosIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2Vz
dHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBlbmQoRHJhZ0dlc3R1cmUqLCBHZGtFdmVudFNl
cXVlbmNlKiwgR3RrR2VzdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBjYW5jZWwoRHJhZ0dl
c3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopOwotCi0gICAgICAgIFdlYkNv
cmU6OkZsb2F0UG9pbnQgbV9zdGFydDsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX29m
ZnNldDsKLSAgICAgICAgUnVuTG9vcDo6VGltZXI8RHJhZ0dlc3R1cmU+IG1fbG9uZ1ByZXNzVGlt
ZW91dDsKLSAgICAgICAgR1JlZlB0cjxHdGtHZXN0dXJlPiBtX2xvbmdQcmVzczsKLSAgICAgICAg
Ym9vbCBtX2luRHJhZyB7IGZhbHNlIH07Ci0gICAgfTsKLQotICAgIGNsYXNzIFN3aXBlR2VzdHVy
ZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN3aXBlR2Vz
dHVyZShHdGtXaWRnZXQqLCBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYpOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgdm9pZCBzdGFydE1vbWVudHVtU2Nyb2xsKEdka0V2ZW50KiwgZG91YmxlIHZl
bG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSk7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUo
U3dpcGVHZXN0dXJlKiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2Vz
dHVyZSopOwotICAgIH07Ci0KLSAgICBjbGFzcyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBH
ZXN0dXJlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFpvb21HZXN0dXJlKEd0a1dpZGdldCosIEdl
c3R1cmVDb250cm9sbGVyQ2xpZW50Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBjZW50ZXIoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzdGFydFpvb20oKTsKLSAg
ICAgICAgdm9pZCBoYW5kbGVab29tKCk7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgYmVnaW4oWm9v
bUdlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopOwotICAgICAgICBzdGF0
aWMgdm9pZCBzY2FsZUNoYW5nZWQoWm9vbUdlc3R1cmUqLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1
cmUqKTsKLQotICAgICAgICBkb3VibGUgbV9pbml0aWFsU2NhbGUgeyAwIH07Ci0gICAgICAgIGRv
dWJsZSBtX3NjYWxlIHsgMCB9OwotICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2luaXRpYWxQ
b2ludDsKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV92aWV3UG9pbnQ7Ci0gICAgICAgIFJ1
bkxvb3A6OlRpbWVyPFpvb21HZXN0dXJlPiBtX2lkbGU7Ci0gICAgfTsKLQotICAgIGNsYXNzIExv
bmdQcmVzc0dlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBMb25nUHJlc3NHZXN0dXJlKEd0a1dpZGdldCosIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50
Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGxvbmdQcmVzc2VkKEdka0V2ZW50Kik7
Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgcHJlc3NlZChMb25nUHJlc3NHZXN0dXJlKiwgZG91Ymxl
IHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7Ci0gICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxHZXN0dXJlQ29udHJvbGxlckNsaWVudD4gbV9jbGllbnQ7Ci0gICAgRHJhZ0dlc3R1cmUgbV9k
cmFnR2VzdHVyZTsKLSAgICBTd2lwZUdlc3R1cmUgbV9zd2lwZUdlc3R1cmU7Ci0gICAgWm9vbUdl
c3R1cmUgbV96b29tR2VzdHVyZTsKLSAgICBMb25nUHJlc3NHZXN0dXJlIG1fbG9uZ3ByZXNzR2Vz
dHVyZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5j
cHAKaW5kZXggMzVhNzlhNWY3OWQ4Li5kNGNjY2QzYmMyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCkBA
IC00OCw5ICs0OCw5IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgc3dpcGVBbmltYXRpb25EdXJhdGlv
bk11bHRpcGxpZXIgPSAzOwogc3RhdGljIGNvbnN0IGRvdWJsZSBzd2lwZUNhbmNlbEFyZWEgPSAw
LjU7CiBzdGF0aWMgY29uc3QgZG91YmxlIHN3aXBlQ2FuY2VsVmVsb2NpdHlUaHJlc2hvbGQgPSAw
LjQ7CiAKLXN0YXRpYyBib29sIGlzRXZlbnRTdG9wKEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3N0
YXRpYyBib29sIGlzRXZlbnRTdG9wKFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7Ci0g
ICAgcmV0dXJuIGdka19ldmVudF9pc19zY3JvbGxfc3RvcF9ldmVudChyZWludGVycHJldF9jYXN0
PEdka0V2ZW50Kj4oZXZlbnQpKTsKKyAgICByZXR1cm4gZXZlbnQtPmlzRW5kOwogfQogCiB2b2lk
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cGxhdGZvcm1UZWFyZG93bigpCkBAIC01OCw0NSArNTgs
MzQgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnBsYXRmb3JtVGVhcmRvd24oKQogICAg
IGNhbmNlbFN3aXBlKCk7CiB9CiAKLWJvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5n
U3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhblN0YXJ0U3dpcGUoR2RrRXZlbnRTY3JvbGwqKQor
Ym9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNrZXI6OnNjcm9sbEV2
ZW50Q2FuU3RhcnRTd2lwZShQbGF0Zm9ybUd0a1Njcm9sbERhdGEqKQogewogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tl
cjo6c2Nyb2xsRXZlbnRDYW5FbmRTd2lwZShHZGtFdmVudFNjcm9sbCogZXZlbnQpCitib29sIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5F
bmRTd2lwZShQbGF0Zm9ybUd0a1Njcm9sbERhdGEqIGV2ZW50KQogewogICAgIHJldHVybiBpc0V2
ZW50U3RvcChldmVudCk7CiB9CiAKLWJvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5n
U3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhbkluZmx1ZW5jZVN3aXBlKEdka0V2ZW50U2Nyb2xs
KiBldmVudCkKK2Jvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2Vy
OjpzY3JvbGxFdmVudENhbkluZmx1ZW5jZVN3aXBlKFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZl
bnQpCiB7Ci0gICAgR2RrRGV2aWNlKiBkZXZpY2UgPSBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZp
Y2UocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7Ci0gICAgR2RrSW5wdXRTb3Vy
Y2Ugc291cmNlID0gZ2RrX2RldmljZV9nZXRfc291cmNlKGRldmljZSk7Ci0KLSAgICBib29sIGlz
RGV2aWNlQWxsb3dlZCA9IHNvdXJjZSA9PSBHREtfU09VUkNFX1RPVUNIUEFEIHx8IHNvdXJjZSA9
PSBHREtfU09VUkNFX1RPVUNIU0NSRUVOIHx8IG1fdmlld0dlc3R1cmVDb250cm9sbGVyLm1faXNT
aW11bGF0ZWRTd2lwZTsKLQotICAgIHJldHVybiBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMo
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgbnVsbHB0ciwgbnVsbHB0cikgJiYg
aXNEZXZpY2VBbGxvd2VkOworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBpc1Rv
dWNoRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQorc3RhdGljIGJvb2wgaXNUb3VjaEV2ZW50
KFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7Ci0gICAgR2RrRGV2aWNlKiBkZXZpY2Ug
PSBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2UocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSk7Ci0gICAgR2RrSW5wdXRTb3VyY2Ugc291cmNlID0gZ2RrX2RldmljZV9nZXRfc291
cmNlKGRldmljZSk7Ci0KLSAgICByZXR1cm4gc291cmNlID09IEdES19TT1VSQ0VfVE9VQ0hTQ1JF
RU47CisgICAgcmV0dXJuIGV2ZW50LT5pc1RvdWNoOwogfQogCi1GbG9hdFNpemUgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudEdldFNjcm9sbGlu
Z0RlbHRhcyhHZGtFdmVudFNjcm9sbCogZXZlbnQpCitGbG9hdFNpemUgVmlld0dlc3R1cmVDb250
cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudEdldFNjcm9sbGluZ0RlbHRh
cyhQbGF0Zm9ybUd0a1Njcm9sbERhdGEqIGV2ZW50KQogewogICAgIGRvdWJsZSBtdWx0aXBsaWVy
ID0gaXNUb3VjaEV2ZW50KGV2ZW50KSA/IFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSA6
IGd0a1Njcm9sbERlbHRhTXVsdGlwbGllcjsKLSAgICBkb3VibGUgeERlbHRhLCB5RGVsdGE7Ci0g
ICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVsdGFzKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQq
PihldmVudCksICZ4RGVsdGEsICZ5RGVsdGEpOwotCi0gICAgLy8gR2RrRXZlbnRTY3JvbGwgZGVs
dGFzIGFyZSBpbnZlcnRlZCBjb21wYXJlZCB0byBOU0V2ZW50LCBzbyBpbnZlcnQgdGhlbSBhZ2Fp
bgotICAgIHJldHVybiAtRmxvYXRTaXplKHhEZWx0YSwgeURlbHRhKSAqIG11bHRpcGxpZXI7Cisg
ICAgLy8gR1RLIGRlbHRhcyBhcmUgaW52ZXJ0ZWQgY29tcGFyZWQgdG8gTlNFdmVudCwgc28gaW52
ZXJ0IHRoZW0gYWdhaW4KKyAgICByZXR1cm4gLUZsb2F0U2l6ZShldmVudC0+ZGVsdGEsIDApICog
bXVsdGlwbGllcjsKIH0KIAotYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9s
bFdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQorYm9vbCBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQoUGxhdGZvcm1HdGtTY3JvbGxEYXRhKiBldmVu
dCkKIHsKICAgICByZXR1cm4gbV9zd2lwZVByb2dyZXNzVHJhY2tlci5oYW5kbGVFdmVudChldmVu
dCkgfHwgbV9wZW5kaW5nU3dpcGVUcmFja2VyLmhhbmRsZUV2ZW50KGV2ZW50KTsKIH0KQEAgLTE0
Niw3ICsxMzUsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1Ry
YWNrZXI6OnJlc2V0KCkKICAgICBtX2NhbmNlbGxlZCA9IGZhbHNlOwogfQogCi1ib29sIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OmhhbmRsZUV2ZW50KEdka0V2
ZW50U2Nyb2xsKiBldmVudCkKK2Jvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZVByb2dy
ZXNzVHJhY2tlcjo6aGFuZGxlRXZlbnQoUGxhdGZvcm1HdGtTY3JvbGxEYXRhKiBldmVudCkKIHsK
ICAgICAvLyBEb24ndCBhbGxvdyBzY3JvbGxpbmcgd2hpbGUgdGhlIG5leHQgcGFnZSBpcyBsb2Fk
aW5nCiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkZpbmlzaGluZykKQEAgLTE3NSw5ICsxNjQs
OCBAQCBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6Omhh
bmRsZUV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgdWludDMyX3QgZXZlbnRUaW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKHJlaW50ZXJw
cmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpOwotICAgIGRvdWJsZSBldmVudERlbHRhWDsKLSAg
ICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSwgJmV2ZW50RGVsdGFYLCBudWxscHRyKTsKKyAgICB1aW50MzJfdCBldmVudFRpbWUg
PSBldmVudC0+ZXZlbnRUaW1lOworICAgIGRvdWJsZSBldmVudERlbHRhWCA9IGV2ZW50LT5kZWx0
YTsKIAogICAgIGRvdWJsZSBkZWx0YVggPSAtZXZlbnREZWx0YVg7CiAgICAgaWYgKGlzVG91Y2hF
dmVudChldmVudCkpIHsKQEAgLTI4MSw2ICsyNjksNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OmVuZEFuaW1hdGlvbigpCiAgICAgbV92aWV3R2Vz
dHVyZUNvbnRyb2xsZXIuZW5kU3dpcGVHZXN0dXJlKG1fdGFyZ2V0SXRlbS5nZXQoKSwgbV9jYW5j
ZWxsZWQpOwogfQogCisjaWYgIVVTRShHVEs0KQogR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6Y3JlYXRlU3R5bGVDb250ZXh0KGNvbnN0IGNoYXIqIG5hbWUp
CiB7CiAgICAgYm9vbCBpc1JUTCA9IG1fd2ViUGFnZVByb3h5LnVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpSVEw7
CkBAIC0zMjAsNiArMzA5LDcgQEAgc3RhdGljIGludCBlbGVtZW50V2lkdGgoR3RrU3R5bGVDb250
ZXh0KiBjb250ZXh0KQogCiAgICAgcmV0dXJuIHdpZHRoOwogfQorI2VuZGlmCiAKIHZvaWQgVmll
d0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiB0YXJnZXRJdGVtLCBTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CkBAIC0zNDYsNiAr
MzM2LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0KICAgICAgICAgfQogICAgIH0KIAorI2lm
ICFVU0UoR1RLNCkKICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7CiAg
ICAgICAgIEdka1JHQkEgY29sb3I7CiAgICAgICAgIGF1dG8qIGNvbnRleHQgPSBndGtfd2lkZ2V0
X2dldF9zdHlsZV9jb250ZXh0KG1fd2ViUGFnZVByb3h5LnZpZXdXaWRnZXQoKSk7CkBAIC0zODIs
NiArMzczLDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJl
KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0KICAgICBtX3N3aXBlT3V0bGluZVNp
emUgPSBlbGVtZW50V2lkdGgoY29udGV4dC5nZXQoKSk7CiAgICAgaWYgKG1fc3dpcGVPdXRsaW5l
U2l6ZSkKICAgICAgICAgbV9zd2lwZU91dGxpbmVQYXR0ZXJuID0gY3JlYXRlRWxlbWVudFBhdHRl
cm4oY29udGV4dC5nZXQoKSwgbV9zd2lwZU91dGxpbmVTaXplLCBzaXplLmhlaWdodCgpLCBzY2Fs
ZSk7CisjZW5kaWYKIH0KIAogdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZVN3aXBl
R2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiwgZG91YmxlLCBTd2lwZURpcmVjdGlvbikK
QEAgLTM5OSw2ICszOTEsNDkgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmNhbmNlbFN3
aXBlKCkKICAgICB9CiB9CiAKKyNpZiBVU0UoR1RLNCkKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpzbmFwc2hvdChHdGtTbmFwc2hvdCogc25hcHNob3QsIEdza1JlbmRlck5vZGUqIHBhZ2VS
ZW5kZXJOb2RlKQoreworICAgIGJvb2wgc3dpcGluZ0xlZnQgPSBpc1BoeXNpY2FsbHlTd2lwaW5n
TGVmdChtX3N3aXBlUHJvZ3Jlc3NUcmFja2VyLmRpcmVjdGlvbigpKTsKKyAgICBib29sIHN3aXBp
bmdCYWNrID0gbV9zd2lwZVByb2dyZXNzVHJhY2tlci5kaXJlY3Rpb24oKSA9PSBTd2lwZURpcmVj
dGlvbjo6QmFjazsKKyAgICBib29sIGlzUlRMID0gbV93ZWJQYWdlUHJveHkudXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbigpID09IFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b246OlJUTDsKKyAgICBmbG9hdCBwcm9ncmVzcyA9IG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIucHJv
Z3Jlc3MoKTsKKworICAgIGF1dG8gc2l6ZSA9IG1fd2ViUGFnZVByb3h5LmRyYXdpbmdBcmVhKCkt
PnNpemUoKTsKKyAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9
IHNpemUuaGVpZ2h0KCk7CisgICAgZG91YmxlIHNjYWxlID0gbV93ZWJQYWdlUHJveHkuZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKworICAgIGRvdWJsZSBzd2lwaW5nTGF5ZXJPZmZzZXQgPSAoc3dpcGlu
Z0xlZnQgPyAwIDogd2lkdGgpICsgZmxvb3Iod2lkdGggKiBwcm9ncmVzcyAqIHNjYWxlKSAvIHNj
YWxlOworCisgICAgZG91YmxlIGRpbW1pbmdQcm9ncmVzcyA9IHN3aXBpbmdMZWZ0ID8gMSAtIHBy
b2dyZXNzIDogLXByb2dyZXNzOworICAgIGlmIChpc1JUTCkgeworICAgICAgICBkaW1taW5nUHJv
Z3Jlc3MgPSAxIC0gZGltbWluZ1Byb2dyZXNzOworICAgICAgICBzd2lwaW5nTGF5ZXJPZmZzZXQg
PSAtKHdpZHRoIC0gc3dpcGluZ0xheWVyT2Zmc2V0KTsKKyAgICB9CisKKyAgICBndGtfc25hcHNo
b3Rfc2F2ZShzbmFwc2hvdCk7CisKKyAgICBncmFwaGVuZV9wb2ludF90IHRyYW5zbGF0aW9uID0g
eyBzdGF0aWNfY2FzdDxmbG9hdD4oc3dpcGluZ0xheWVyT2Zmc2V0KSwgMCB9OworICAgIGlmICgh
c3dpcGluZ0JhY2spIHsKKyAgICAgICAgZ3RrX3NuYXBzaG90X2FwcGVuZF9ub2RlKHNuYXBzaG90
LCBwYWdlUmVuZGVyTm9kZSk7CisgICAgICAgIGd0a19zbmFwc2hvdF90cmFuc2xhdGUoc25hcHNo
b3QsICZ0cmFuc2xhdGlvbik7CisgICAgfQorCisgICAgZ3JhcGhlbmVfcmVjdF90IHJlY3QgPSB7
IDAsIDAsIChmbG9hdCl3aWR0aCwgKGZsb2F0KWhlaWdodCB9OworICAgIGF1dG8qIGNyID0gZ3Rr
X3NuYXBzaG90X2FwcGVuZF9jYWlybyhzbmFwc2hvdCwgJnJlY3QpOworICAgIGNhaXJvX3NldF9z
b3VyY2UoY3IsIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuLmdldCgpKTsKKyAgICBjYWly
b19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIGNhaXJvX2ZpbGwoY3Ip
OworCisgICAgaWYgKHN3aXBpbmdCYWNrKSB7CisgICAgICAgIGd0a19zbmFwc2hvdF90cmFuc2xh
dGUoc25hcHNob3QsICZ0cmFuc2xhdGlvbik7CisgICAgICAgIGd0a19zbmFwc2hvdF9hcHBlbmRf
bm9kZShzbmFwc2hvdCwgcGFnZVJlbmRlck5vZGUpOworICAgIH0KKworICAgIGd0a19zbmFwc2hv
dF9yZXN0b3JlKHNuYXBzaG90KTsKK30KKyNlbHNlCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6ZHJhdyhjYWlyb190KiBjciwgY2Fpcm9fcGF0dGVybl90KiBwYWdlR3JvdXApCiB7CiAgICAg
Ym9vbCBzd2lwaW5nTGVmdCA9IGlzUGh5c2ljYWxseVN3aXBpbmdMZWZ0KG1fc3dpcGVQcm9ncmVz
c1RyYWNrZXIuZGlyZWN0aW9uKCkpOwpAQCAtNDg5LDYgKzUyNCw3IEBAIHZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpkcmF3KGNhaXJvX3QqIGNyLCBjYWlyb19wYXR0ZXJuX3QqIHBhZ2VHcm91
cCkKIAogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQorI2VuZGlmCiAKIHZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNuYXBzaG90KCkKIHsKQEAgLTUxOCwzNyArNTU0LDYg
QEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3QoKQogICAg
IG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIucmVzZXQoKTsKIH0KIAotc3RhdGljIEdVbmlxdWVQdHI8
R2RrRXZlbnQ+IGNyZWF0ZVNjcm9sbEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBkb3VibGUgeERl
bHRhLCBkb3VibGUgeURlbHRhKQotewotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdl
dF9nZXRfd2luZG93KHdpZGdldCk7Ci0KLSAgICBpbnQgeCwgeTsKLSAgICBnZGtfd2luZG93X2dl
dF9yb290X29yaWdpbih3aW5kb3csICZ4LCAmeSk7Ci0KLSAgICBpbnQgd2lkdGggPSBnZGtfd2lu
ZG93X2dldF93aWR0aCh3aW5kb3cpOwotICAgIGludCBoZWlnaHQgPSBnZGtfd2luZG93X2dldF9o
ZWlnaHQod2luZG93KTsKLQotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVu
dF9uZXcoR0RLX1NDUk9MTCkpOwotICAgIGV2ZW50LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5U
X1RJTUU7Ci0gICAgZXZlbnQtPnNjcm9sbC54ID0gd2lkdGggLyAyOwotICAgIGV2ZW50LT5zY3Jv
bGwueSA9IGhlaWdodCAvIDI7Ci0gICAgZXZlbnQtPnNjcm9sbC54X3Jvb3QgPSB4ICsgd2lkdGgg
LyAyOwotICAgIGV2ZW50LT5zY3JvbGwueV9yb290ID0geSArIGhlaWdodCAvIDI7Ci0gICAgZXZl
bnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKLSAgICBldmVudC0+c2Ny
b2xsLmRlbHRhX3ggPSB4RGVsdGE7Ci0gICAgZXZlbnQtPnNjcm9sbC5kZWx0YV95ID0geURlbHRh
OwotICAgIGV2ZW50LT5zY3JvbGwuc3RhdGUgPSAwOwotICAgIGV2ZW50LT5zY3JvbGwuaXNfc3Rv
cCA9ICF4RGVsdGEgJiYgIXlEZWx0YTsKLSAgICBldmVudC0+c2Nyb2xsLndpbmRvdyA9IEdES19X
SU5ET1coZ19vYmplY3RfcmVmKHdpbmRvdykpOwotICAgIGdka19ldmVudF9zZXRfc2NyZWVuKGV2
ZW50LmdldCgpLCBnZGtfd2luZG93X2dldF9zY3JlZW4od2luZG93KSk7Ci0KLSAgICBHZGtEZXZp
Y2UqIHBvaW50ZXIgPSBnZGtfc2VhdF9nZXRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dF9zZWF0KGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2luZG93KSkpOwotICAgIGdka19ldmVudF9z
ZXRfZGV2aWNlKGV2ZW50LmdldCgpLCBwb2ludGVyKTsKLSAgICBnZGtfZXZlbnRfc2V0X3NvdXJj
ZV9kZXZpY2UoZXZlbnQuZ2V0KCksIHBvaW50ZXIpOwotCi0gICAgcmV0dXJuIGV2ZW50OwotfQot
CiBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0
aW9uRm9yVGVzdGluZyhTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYgKCFjYW5T
d2lwZUluRGlyZWN0aW9uKGRpcmVjdGlvbikpCkBAIC01NjEsMTcgKzU2NiwxNiBAQCBib29sIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVz
dGluZyhTd2lwZURpcmVjdAogICAgIGlmIChpc1BoeXNpY2FsbHlTd2lwaW5nTGVmdChkaXJlY3Rp
b24pKQogICAgICAgICBkZWx0YSA9IC1kZWx0YTsKIAotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+
IGV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQobV93ZWJQYWdlUHJveHkudmlld1dpZGdldCgpLCBk
ZWx0YSwgMCk7Ci0gICAgZ3RrX3dpZGdldF9ldmVudChtX3dlYlBhZ2VQcm94eS52aWV3V2lkZ2V0
KCksIGV2ZW50LmdldCgpKTsKKyAgICBQbGF0Zm9ybUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9
IHsgLmRlbHRhID0gZGVsdGEsIC5ldmVudFRpbWUgPSBHREtfQ1VSUkVOVF9USU1FLCAuaXNUb3Vj
aCA9IGZhbHNlLCAuaXNFbmQgPSBmYWxzZSB9OworICAgIGhhbmRsZVNjcm9sbFdoZWVsRXZlbnQo
JnNjcm9sbERhdGEpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpjb21wbGV0ZVNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFN3
aXBlRGlyZWN0aW9uKQogewotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50ID0gY3JlYXRl
U2Nyb2xsRXZlbnQobV93ZWJQYWdlUHJveHkudmlld1dpZGdldCgpLCAwLCAwKTsKLSAgICBndGtf
d2lkZ2V0X2V2ZW50KG1fd2ViUGFnZVByb3h5LnZpZXdXaWRnZXQoKSwgZXZlbnQuZ2V0KCkpOwot
CisgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRhIHNjcm9sbERhdGEgPSB7IC5kZWx0YSA9IDAsIC5l
dmVudFRpbWUgPSBHREtfQ1VSUkVOVF9USU1FLCAuaXNUb3VjaCA9IGZhbHNlLCAuaXNFbmQgPSB0
cnVlIH07CisgICAgaGFuZGxlU2Nyb2xsV2hlZWxFdmVudCgmc2Nyb2xsRGF0YSk7CiAgICAgbV9p
c1NpbXVsYXRlZFN3aXBlID0gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsK
</data>
<flag name="commit-queue"
          id="448627"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427876</attachid>
            <date>2021-05-06 05:43:26 -0700</date>
            <delta_ts>2021-05-07 03:08:52 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>79704</size>
            <attacher name="Carlos Garnacho">carlosg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc1YzVjYzE0NTMuLjExZmZkNmVmN2M3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDIxLTA1LTA1ICBDYXJsb3MgR2FybmFjaG8gIDxjYXJsb3NnQGdub21l
Lm9yZz4KKworICAgICAgICBbR1RLNF0gUmV3cml0ZSBHVEsgZ2VzdHVyZSBzdXBwb3J0IHRvIHdv
cmsgZm9yIGJvdGggMy54IGFuZCA0LnguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIzMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmg6CisgICAgICAg
IChndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF9zdGF0ZSk6CisgICAgICAg
IChndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF90aW1lKTogTmV3IEdUSzQg
cG9ydGFiaWxpdHkKKyAgICAgICAgaGVscGVyIG1ldGhvZHMuCisKIDIwMjEtMDUtMDMgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEJ1aWxk
IHdpdGggVklERU89T0ZGIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrVmVyc2lvbmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1Zl
cnNpb25pbmcuaAppbmRleCA3MjljZDI3NmVkZjAuLjc5NDFlOTExYzYyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCkBAIC0yNzYsNCArMjc2LDE4IEBA
IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KCkKICAgICByZXR1cm4gZ3RrX3Njcm9sbGVkX3dpbmRv
d19uZXcobnVsbHB0ciwgbnVsbHB0cik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgR2RrTW9kaWZpZXJU
eXBlCitndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF9zdGF0ZShHdGtFdmVu
dENvbnRyb2xsZXIqKQoreworICAgIEdka01vZGlmaWVyVHlwZSBtb2RpZmllcnM7CisgICAgZ3Rr
X2dldF9jdXJyZW50X2V2ZW50X3N0YXRlKCZtb2RpZmllcnMpOworICAgIHJldHVybiBtb2RpZmll
cnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK2d0a19ldmVudF9jb250cm9sbGVyX2dl
dF9jdXJyZW50X2V2ZW50X3RpbWUoR3RrRXZlbnRDb250cm9sbGVyKikKK3sKKyAgICByZXR1cm4g
Z3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKTsKK30KKwogI2VuZGlmIC8vIFVTRShHVEs0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBjYTU3ZGE0NGFhZWIuLmMwNTcwNTkxYmUxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMTYgQEAKKzIwMjEtMDUtMDUgIENhcmxvcyBHYXJuYWNobyAgPGNhcmxvc2dAZ25vbWUub3Jn
PgorCisgICAgICAgIFtHVEs0XSBSZXdyaXRlIEdUSyBnZXN0dXJlIHN1cHBvcnQgdG8gd29yayBm
b3IgYm90aCAzLnggYW5kIDQueC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjMyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJld3JpdGUgdGhlIHRvdWNoIGdlc3R1cmUgaGFuZGxpbmcgdG8gYXZvaWQg
R2RrRXZlbnQgYXMgYW4gZXhjaGFuZ2UKKyAgICAgICAgdG9rZW4sIGFuZCBub3QgcmVseSBvbiB0
aGUgd2ViIHZpZXcgYmVpbmcgYWJsZSB0byBob2xkIGFuZCByZS1yb3V0ZQorICAgICAgICB0aGVz
ZSBhdCB3aGltLiBUaGlzIG1ha2VzIHRvdWNoIGFuZCB0b3VjaHBhZCBnZXN0dXJlcyB3b3JrIG9u
IEdUSzMKKyAgICAgICAgYW5kIEdUSzQgaW4gc2ltaWxhciB3YXlzLCBhbmQgc28gdGhhdCBib3Ro
IHdvcmsuCisKKyAgICAgICAgRm9yIHRoaXMsIHRvdWNoIGV2ZW50IHByb3BhZ2F0aW9uIGdvdCBz
b21lIHN1YnN0YW50aWFsIGNoYW5nZXMsIGl0CisgICAgICAgIHVzZWQgdG8gd29yayBieSBmaXJz
dCBkZWxpdmVyaW5nIHRoZSB0b3VjaCBldmVudHMgdG8gdGhlIHdlYiBwYWdlLAorICAgICAgICBh
bmQgbWFudWFsbHkgZmVlZGluZyB0aGUgcmV0dXJuZWQrdW5oYW5kbGVkIG9uZXMgdG8gZ2VzdHVy
ZSBjb250cm9sbGVycy4KKyAgICAgICAgTm93IGV2ZW50IGRlbGl2ZXJ5IGlzIGRlbGVnYXRlZCBv
biBHVEssIGFuZCBoYXBwZW5zIHJpZ2h0IGF3YXkgb24KKyAgICAgICAgZ2VzdHVyZSBjb250cm9s
bGVycywgaXQgaXMgdGhlIFdlYmtpdFdlYlZpZXdCYXNlIHdoaWNoIGNob29zZXMgdG8gbWFrZQor
ICAgICAgICB0aGVtIGVmZmVjdGl2ZSBhZnRlciB0aGUgd2ViIHBhZ2UgKG1heWJlKSBoYW5kbGVk
IHRoZSBldmVudHMuIEdlc3R1cmVzCisgICAgICAgIGFyZSByZXNldCB3aGVuZXZlciB0aGUgd2Vi
IHBhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBoYW5kbGluZyB0b3VjaAorICAgICAgICBldmVudHMu
CisKKyAgICAgICAgQWxzbyBmaXggc29tZSBidWdsZXRzIGFjY3VtdWxhdGVkIGFsb25nIHRoZSB3
YXksIHdlYiB2aWV3IHpvb20gY29uZmxpY3RlZAorICAgICAgICB3aXRoIGluLXBhZ2Ugem9vbSBo
YW5kbGluZywgYW5kIFZpZXdHZXN0dXJlQ29udHJvbGxlciBwYWdlIHN3aXRjaGluZworICAgICAg
ICBjb25mbGljdGVkIHdpdGggcHJlc3MtZHJhZy1yZWxlYXNlIGVtdWxhdGlvbiBvbiB0aGUgd2Vi
IHBhZ2UuIFRoZXNlIG5vdworICAgICAgICB3b3JrIGJldHRlciBhbmQgY2xvc2VyIHRvIEd0a1Nj
cm9sbGVkV2luZG93IGJlaGF2aW9yLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhlIEdUSyB0
b3VjaCB0ZXN0cyB0aGF0IHNob3VsZCBjYXRjaCB0aGlzIHdlcmUgZGlzYWJsZWQKKyAgICAgICAg
aW4gdGhlIHBhc3QgYW5kIG5lZWQgZml4aW5nLiBUaGlzIHBhdGNoIHdpbGwgcmVxdWlyZSBtYW51
YWwgdGVzdGluZy4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBEcm9wIEdUSzQgY29u
ZGl0aW9uYWxzIGFyb3VuZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXIKKyAgICAgICAgKiBTb3VyY2Vz
R1RLLnR4dDogRHJvcCBHZXN0dXJlQ29udHJvbGxlci5jcHAuIEJ1aWxkIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcgorICAgICAgICBjb2RlIGZpbGVzIHVuY29uZGl0aW9uYWxseS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQpOiBEZWxlZ2F0ZSBoYW5kbGluZyBvbgor
ICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZS4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKTogVXNlIHBsYXRmb3JtCisgICAg
ICAgIGluZGVwZW5kZW50IHN0cnVjdCB0byBmb3J3YXJkIHNjcm9sbCB0byBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTbmFwc2hvdCk6IEludm9sdmUgVmlld0dl
c3R1cmVDb250cm9sbGVyIGluIHJlbmRlcmluZy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
QnV0dG9uUHJlc3NFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVh
c2VFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblByZXNzZWQpOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlZCk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50KTogSWdub3JlIHBvaW50ZXItZW11bGF0ZWQgZXZl
bnRzIGZyb20KKyAgICAgICAgdG91Y2hzY3JlZW5zLgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VIYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsKTog
IFVzZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBzdHJ1Y3QKKyAgICAgICAgdG8gZm9yd2FyZCBzY3Jv
bGwgdG8gVmlld0dlc3R1cmVDb250cm9sbGVyLgorICAgICAgICAoYXBwZW5kVG91Y2hFdmVudCk6
CisgICAgICAgICh0b3VjaFBvaW50U3RhdGVGb3JFdmVudHMpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VHZXRUb3VjaFBvaW50c0ZvckV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlVG91Y2hFdmVudCk6CisgICAgICAgIEdlbmVyYWxpemVkIHRvIHdvcmsgb24gYm90aCBHVEsz
IGFuZCBHVEs0LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2Vab29tQmVnaW4pOgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2Vab29tQ2hhbmdlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZVRvdWNoTG9uZ1ByZXNzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hQcmVz
cyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoUmVsZWFzZSk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0JlZ2luKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlVG91Y2hEcmFnVXBkYXRlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFn
RW5kKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnQ2FuY2VsKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hTd2lwZSk6IE5ld2x5IGFkZGVkIHRvdWNoIGdlc3R1
cmUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgY2FsbGJhY2tzLiBOb3QgZGVsZWdhdGVkIGFueW1v
cmUgb24gR2VzdHVyZUNvbnRyb2xsZXIuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNvbnN0
cnVjdGVkKTogQ3JlYXRlIHRvdWNoIGdlc3R1cmVzIGluIHRoZSBiYXNlIHZpZXcKKyAgICAgICAg
d2lkZ2V0LCBsZXQgdGhlbSBoYW5kbGUgZXZlbnRzIGF1dG9tYXRpY2FsbHkgaW5zdGVhZCBvZiBy
ZWx5aW5nIG9uCisgICAgICAgIG1hbnVhbCBldmVudCBmZWVkaW5nIHZpYSBndGtfZXZlbnRfY29u
dHJvbGxlcl9oYW5kbGVfZXZlbnQoKS4gQWxzbyBhZGQKKyAgICAgICAgYSBHdGtFdmVudENvbnRy
b2xsZXJMZWdhY3kgdG8gaGFuZGxlIGZvcndhcmRpbmcgb2YgcmF3IHRvdWNoIGV2ZW50cyB0bwor
ICAgICAgICB0aGUgd2ViIHBhZ2UgaW4gR1RLNC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
U2V0RW5hYmxlQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZSk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUJlZ2luQmFja1N3aXBlRm9yVGVzdGluZyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUNvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZVdpbGxTd2FwV2ViUHJvY2Vzcyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURpZEV4aXRX
ZWJQcm9jZXNzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9j
ZXNzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkU3RhcnRQcm92aXNpb25hbExvYWRG
b3JNYWluRnJhbWUpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VE
aWRGaW5pc2hOYXZpZ2F0aW9uKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkRmFpbE5h
dmlnYXRpb24pOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVzdG9y
ZVNjcm9sbFBvc2l0aW9uKTogUmVtb3ZlIGNvbmRpdGlvbmFscyBhcm91bmQKKyAgICAgICAgVmll
d0dlc3R1cmVDb250cm9sbGVyIGZvciBHVEs0LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VQ
YWdlR3JhYmJlZFRvdWNoKTogTmV3IG1ldGhvZCB0byB0YWcgdG91Y2ggZXZlbnRzCisgICAgICAg
IGFsdG9nZXRoZXIgYXMgaGFuZGxlZCBieSB0aGUgd2ViIHBhZ2UsIHRodXMgcmVzZXR0aW5nIGFu
eSBvbmdvaW5nIHZpZXctbGV2ZWwKKyAgICAgICAgZ2VzdHVyZSBoYW5kbGluZy4gVGhpcyBpbnZl
cnNpb24gaXMgbmVjZXNzYXJ5IGFzIGdlc3R1cmUgY29udHJvbGxlcnMgYXJlIG5vdworICAgICAg
ICBhbHdheXMgZmVkIGlucHV0IGV2ZW50cyBwYXJhbGxlbCB0byB3ZWIgcGFnZSB0b3VjaCBldmVu
dCBoYW5kbGluZy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIp
OiBEZWxldGVkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUV2ZW50KTogUmVtb3ZlZCB3aWRnZXRfY2xhc3MtPmV2
ZW50IHZmdW5jLiBUb3VjaHBhZCBnZXN0dXJlCisgICAgICAgIGV2ZW50IGZvcndhcmRpbmcgdG8g
ZXZlbnQgY29udHJvbGxlcnMgaXMgZGVsZWdhdGVkIG9uIEdUSy4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9HZXN0
dXJlQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuIEdlc3R1cmVzIGFyZSBpbXBsZW1lbnRlZCBpbgor
ICAgICAgICB0aGUgYmFzZSB2aWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNv
bnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJl
Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmlzRXZlbnRTdG9wKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpz
Y3JvbGxFdmVudENhblN0YXJ0U3dpcGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNrZXI6OnNjcm9sbEV2ZW50Q2FuRW5kU3dpcGUpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNr
ZXI6OnNjcm9sbEV2ZW50Q2FuSW5mbHVlbmNlU3dpcGUpOgorICAgICAgICAoV2ViS2l0Ojppc1Rv
dWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTY3JvbGxFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Ny
b2xsRXZlbnRHZXRTY3JvbGxpbmdEZWx0YXMpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlUHJvZ3Jlc3NUcmFja2VyOjpoYW5kbGVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1
cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU2ltdWxh
dGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmNvbXBsZXRlU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3Rp
bmcpOiBEZWNsYXJlCisgICAgICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSwgYW5kIHVzZSBpdCBh
cyAicGxhdGZvcm0gc2Nyb2xsIGV2ZW50IiBmb3IgYm90aCBHVEszIGFuZCBHVEs0LgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnNuYXBzaG90KTogTmV3IEdUSzQgc3Bl
Y2lmaWMgbWV0aG9kIHRvIHJlbmRlcgorICAgICAgICB0aGUgcGFnZSBzd2l0Y2hpbmcgZ2VzdHVy
ZSBhY3Rpb24uCisKIDIwMjEtMDUtMDMgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtpT1NdIENyYXNoIHdoZW4gdGFwcGluZyBmaWVsZHMgb24gY3ljbGUu
dHJhdmVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBiMDE0NDdiYTRmNmMuLjZjZmFmMjg4
MmE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zMywyMCArMzMsMTEgQEAgbGlzdChB
UFBFTkQgV2ViS2l0X1VOSUZJRURfU09VUkNFX0xJU1RfRklMRVMKICAgICAiU291cmNlc0dUSy50
eHQiCiApCiAKLWlmIChOT1QgVVNFX0dUSzQpCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJD
RVMKLSAgICAgICAgVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAKLQotICAgICAg
ICBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKLQotICAgICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKLSAgICAp
Ci0gICAgbGlzdChBUFBFTkQgV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCi0gICAgICAgIFVJUHJv
Y2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIKK2xpc3QoQVBQRU5EIFdlYktpdF9NRVNTQUdFU19J
Tl9GSUxFUworICAgIFVJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIKIAotICAgICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3RvcgotICAgICkKLWVu
ZGlmICgpCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0
b3IKKykKIAogbGlzdChBUFBFTkQgV2ViS2l0X0RFUklWRURfU09VUkNFUwogICAgICR7V2ViS2l0
Mkd0a19ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUuYwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0dUSy50eHQKaW5kZXggYzg1ZjVjZTJhOGY0Li44OTRlNWQ0ZDMyNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dApAQCAtMTA1LDYgKzEwNSw3IEBAIFNoYXJlZC91bml4L0F1eGlsaWFyeVByb2Nlc3NN
YWluLmNwcAogVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKIFVJUHJvY2Vzcy9EZWZhdWx0VW5k
b0NvbnRyb2xsZXIuY3BwCiBVSVByb2Nlc3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5j
cHAKK1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwCiBVSVByb2Nlc3MvVmlld1Nu
YXBzaG90U3RvcmUuY3BwCiBVSVByb2Nlc3MvV2ViR3JhbW1hckRldGFpbC5jcHAKIFVJUHJvY2Vz
cy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCkBAIC0yNTIsNyArMjUzLDYgQEAgVUlQcm9j
ZXNzL2d0ay9DbGlwYm9hcmQuY3BwCiBVSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azMuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9ndGsvV2ViRGF0ZVRpbWVQaWNrZXJHdGsuY3BwCi1VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmNwcAogVUlQcm9jZXNzL2d0ay9IYXJkd2FyZUFjY2VsZXJhdGlvbk1hbmFnZXIu
Y3BwCiBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAogVUlQcm9jZXNzL2d0
ay9Qb2ludGVyTG9ja01hbmFnZXIuY3BwIEBuby11bmlmeQpAQCAtMjYwLDYgKzI2MCw3IEBAIFVJ
UHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBVSVBy
b2Nlc3MvZ3RrL1BvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
Z3RrL1RleHRDaGVja2VyR3RrLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvVmlld1NuYXBz
aG90U3RvcmVHdGsuY3BwCitVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5j
cHAKIFVJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwIEBuby11bmlmeQogVUlQcm9j
ZXNzL2d0ay9XZWJDb2xvclBpY2tlckd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1l
bnVQcm94eUd0ay5jcHAKQEAgLTQxNSw2ICs0MTYsNyBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKIAogV2ViUHJvY2Vzcy9XZWJQYWdl
L0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKK1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yLmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRl
eCAyY2Y0ZjQzM2Q4MmQuLjJmYmNiMzI3NDBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTQxMiw2NSArNDEyLDggQEAg
dm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiAv
KiBpbml0aWFsRnJhbWUgKi8sIGNvbnMKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZl
bnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKIHsKLSNpZiAhVVNFKEdUSzQpCi0gICAg
Y29uc3QgR2RrRXZlbnQqIHRvdWNoRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudCgpOwotICAgIGlm
ICghdG91Y2hFdmVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2VzdHVyZUNvbnRyb2xsZXIm
IGdlc3R1cmVDb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VHZXN0dXJlQ29udHJvbGxlcihX
RUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKLSAgICBpZiAod2FzRXZlbnRIYW5k
bGVkKSB7Ci0gICAgICAgIGdlc3R1cmVDb250cm9sbGVyLnJlc2V0KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgd2FzRXZlbnRIYW5kbGVkID0gZ2VzdHVyZUNvbnRyb2xsZXIuaGFuZGxl
RXZlbnQoY29uc3RfY2FzdDxHZGtFdmVudCo+KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKTsKLQogICAg
IGlmICh3YXNFdmVudEhhbmRsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVtdWxhdGUg
cG9pbnRlciBldmVudHMgaWYgdW5oYW5kbGVkLgotICAgIGlmICghdG91Y2hFdmVudC0+dG91Y2gu
ZW11bGF0aW5nX3BvaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdVbmlxdWVQdHI8R2Rr
RXZlbnQ+IHBvaW50ZXJFdmVudDsKLQotICAgIGlmICh0b3VjaEV2ZW50LT50eXBlID09IEdES19U
T1VDSF9VUERBVEUpIHsKLSAgICAgICAgcG9pbnRlckV2ZW50LnJlc2V0KGdka19ldmVudF9uZXco
R0RLX01PVElPTl9OT1RJRlkpKTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24udGltZSA9
IHRvdWNoRXZlbnQtPnRvdWNoLnRpbWU7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLngg
PSB0b3VjaEV2ZW50LT50b3VjaC54OwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi55ID0g
dG91Y2hFdmVudC0+dG91Y2gueTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ueF9yb290
ID0gdG91Y2hFdmVudC0+dG91Y2gueF9yb290OwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlv
bi55X3Jvb3QgPSB0b3VjaEV2ZW50LT50b3VjaC55X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVu
dC0+bW90aW9uLnN0YXRlID0gdG91Y2hFdmVudC0+dG91Y2guc3RhdGUgfCBHREtfQlVUVE9OMV9N
QVNLOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAodG91Y2hFdmVudC0+dHlwZSkgewot
ICAgICAgICBjYXNlIEdES19UT1VDSF9DQU5DRUw6Ci0gICAgICAgICAgICBGQUxMVEhST1VHSDsK
LSAgICAgICAgY2FzZSBHREtfVE9VQ0hfRU5EOgotICAgICAgICAgICAgcG9pbnRlckV2ZW50LnJl
c2V0KGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9SRUxFQVNFKSk7Ci0gICAgICAgICAgICBwb2lu
dGVyRXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IHRvdWNoRXZlbnQtPnRvdWNoLnN0YXRlIHwgR0RLX0JV
VFRPTjFfTUFTSzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19UT1VDSF9C
RUdJTjoKLSAgICAgICAgICAgIHBvaW50ZXJFdmVudC5yZXNldChnZGtfZXZlbnRfbmV3KEdES19C
VVRUT05fUFJFU1MpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwb2lu
dGVyRXZlbnQtPmJ1dHRvbi5idXR0b24gPSAxOwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRv
bi50aW1lID0gdG91Y2hFdmVudC0+dG91Y2gudGltZTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5i
dXR0b24ueCA9IHRvdWNoRXZlbnQtPnRvdWNoLng7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0
dG9uLnkgPSB0b3VjaEV2ZW50LT50b3VjaC55OwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRv
bi54X3Jvb3QgPSB0b3VjaEV2ZW50LT50b3VjaC54X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVu
dC0+YnV0dG9uLnlfcm9vdCA9IHRvdWNoRXZlbnQtPnRvdWNoLnlfcm9vdDsKLSAgICB9Ci0KLSAg
ICBnZGtfZXZlbnRfc2V0X2RldmljZShwb2ludGVyRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRf
ZGV2aWNlKHRvdWNoRXZlbnQpKTsKLSAgICBnZGtfZXZlbnRfc2V0X3NvdXJjZV9kZXZpY2UocG9p
bnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2UodG91Y2hFdmVudCkp
OwotICAgIHBvaW50ZXJFdmVudC0+YW55LndpbmRvdyA9IEdES19XSU5ET1coZ19vYmplY3RfcmVm
KHRvdWNoRXZlbnQtPmFueS53aW5kb3cpKTsKLSAgICBwb2ludGVyRXZlbnQtPmFueS5zZW5kX2V2
ZW50ID0gVFJVRTsKLQotICAgIGd0a193aWRnZXRfZXZlbnQobV92aWV3V2lkZ2V0LCBwb2ludGVy
RXZlbnQuZ2V0KCkpOwotI2VuZGlmCisgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlUGFnZUdyYWJi
ZWRUb3VjaChXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKIH0KICNlbmRpZiAv
LyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCkBAIC00ODIsNyArNDI1LDEyIEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdl
YldoZWVsRXZlbnQmCiAjaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciog
Y29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKFdFQktJ
VF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNv
bnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7Ci0gICAgICAgIGNvbnRyb2xsZXIt
PndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKCZldmVudC5uYXRpdmVFdmVudCgpLT5z
Y3JvbGwpOworICAgICAgICBkb3VibGUgZGVsdGFYOworICAgICAgICBnZGtfZXZlbnRfZ2V0X3Nj
cm9sbF9kZWx0YXMoZXZlbnQubmF0aXZlRXZlbnQoKSwgJmRlbHRhWCwgbnVsbHB0cik7CisgICAg
ICAgIGJvb2wgaXNFbmQgPSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQubmF0
aXZlRXZlbnQoKSkgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIGludDMyX3QgZXZlbnRUaW1lID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4oZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50Lm5hdGl2ZUV2ZW50
KCkpKTsKKyAgICAgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRhIHNjcm9sbERhdGEgPSB7IC5kZWx0
YSA9IGRlbHRhWCwgLmV2ZW50VGltZSA9IGV2ZW50VGltZSwgLmlzVG91Y2ggPSBmYWxzZSwgLmlz
RW5kID0gaXNFbmQgfTsKKyAgICAgICAgY29udHJvbGxlci0+d2hlZWxFdmVudFdhc05vdEhhbmRs
ZWRCeVdlYkNvcmUoJnNjcm9sbERhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCmluZGV4IDU3OGJmOTgyNzhiYS4uNGM3ZTZjY2Q5YjMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMzE2
LDExICszMTYsOSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPERyb3BUYXJnZXQ+IGRyb3BUYXJnZXQ7CiAjZW5kaWYKIAotI2lmICFVU0Uo
R1RLNCkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXI+IGdlc3R1cmVDb250
cm9sbGVyOworICAgIEd0a0dlc3R1cmUqIHRvdWNoR2VzdHVyZUdyb3VwOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IHZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAg
ICBib29sIGlzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZUVuYWJsZWQgeyBmYWxzZSB9Owot
I2VuZGlmCiAKICNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyNCwgMCkKICAgICBHdGtXaWRnZXQq
IGVtb2ppQ2hvb3NlcjsKQEAgLTMyOCw2ICszMjYsMTQgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUgewogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZT4gcmVsZWFzZUVtb2ppQ2hvb3NlclRpbWVyOwogI2VuZGlmCiAKKyAgICAvLyBUb3VjaCBnZXN0
dXJlcyBzdGF0ZQorICAgIGRvdWJsZSBpbml0aWFsWm9vbVNjYWxlOworICAgIEludFBvaW50IGlu
aXRpYWxab29tUG9pbnQ7CisgICAgRmxvYXRQb2ludCBkcmFnT2Zmc2V0OworICAgIGJvb2wgaXNM
b25nUHJlc3NlZDsKKyAgICBib29sIGlzQmVpbmdEcmFnZ2VkOworICAgIGJvb2wgcGFnZUdyYWJi
ZWRUb3VjaDsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2ludGVyTG9ja01hbmFnZXI+IHBvaW50
ZXJMb2NrTWFuYWdlcjsKIH07CiAKQEAgLTc0Niw5ICs3NTIsMjEgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VTbmFwc2hvdChHdGtXaWRnZXQqIHdpZGdldCwgR3RrU25hcHNob3QqIHNu
YXBzaG90KQogICAgIGlmICghZHJhd2luZ0FyZWEpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8qIHBhZ2VTbmFwc2hvdCA9IGd0a19zbmFwc2hvdF9uZXcoKTsKICAgICBpZiAoIXdlYlZpZXdC
YXNlLT5wcml2LT5pc0JsYW5rKSB7CiAgICAgICAgIEFTU0VSVChkcmF3aW5nQXJlYS0+aXNJbkFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+
YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUtPnNuYXBzaG90KHNuYXBzaG90KTsKKyAgICAgICAgd2Vi
Vmlld0Jhc2UtPnByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT5zbmFwc2hvdChwYWdlU25h
cHNob3QpOworICAgIH0KKworICAgIGlmIChhdXRvKiBwYWdlUmVuZGVyTm9kZSA9IGd0a19zbmFw
c2hvdF9mcmVlX3RvX25vZGUocGFnZVNuYXBzaG90KSkgeworICAgICAgICBib29sIHNob3dpbmdO
YXZpZ2F0aW9uU25hcHNob3QgPSB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5pc1Nob3dp
bmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7CisgICAgICAgIGF1dG8qIGNvbnRyb2xsZXIg
PSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSk7Cisg
ICAgICAgIGlmIChzaG93aW5nTmF2aWdhdGlvblNuYXBzaG90ICYmIGNvbnRyb2xsZXIpCisgICAg
ICAgICAgICBjb250cm9sbGVyLT5zbmFwc2hvdChzbmFwc2hvdCwgcGFnZVJlbmRlck5vZGUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBndGtfc25hcHNob3RfYXBwZW5kX25vZGUoc25hcHNo
b3QsIHBhZ2VSZW5kZXJOb2RlKTsKKworICAgICAgICBnc2tfcmVuZGVyX25vZGVfdW5yZWYocGFn
ZVJlbmRlck5vZGUpOwogICAgIH0KIAogICAgIGlmICh3ZWJWaWV3QmFzZS0+cHJpdi0+aW5zcGVj
dG9yVmlldykKQEAgLTExNTcsNiArMTE3NSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QmFzZUJ1dHRvblByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0CiAg
ICAgaWYgKHByaXYtPmRpYWxvZykKICAgICAgICAgcmV0dXJuIEdES19FVkVOVF9TVE9QOwogCisg
ICAgaWYgKGdka19kZXZpY2VfZ2V0X3NvdXJjZShnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2Uo
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkpID09IEdES19TT1VSQ0VfVE9VQ0hT
Q1JFRU4pCisgICAgICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19i
YXNlX3BhcmVudF9jbGFzcyktPmJ1dHRvbl9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKKwog
ICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgcmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CiAKICAgICByZXR1cm4gR0RLX0VWRU5UX1NU
T1A7CkBAIC0xMTY5LDYgKzExOTAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VCdXR0b25SZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QgogCiAgICAg
aWYgKHByaXYtPmRpYWxvZykKICAgICAgICAgcmV0dXJuIEdES19FVkVOVF9TVE9QOworICAgIGlm
IChnZGtfZGV2aWNlX2dldF9zb3VyY2UoZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHJlaW50
ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpKSA9PSBHREtfU09VUkNFX1RPVUNIU0NSRUVO
KQorICAgICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9w
YXJlbnRfY2xhc3MpLT5idXR0b25fcmVsZWFzZV9ldmVudCh3aWRnZXQsIGV2ZW50KTsKIAogICAg
IHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgcmVpbnRlcnBy
ZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CiAKQEAgLTExNzksNiArMTIwMiw4IEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VFdmVudChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnRCCiAjaWYgVVNFKEdUSzQpCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUJ1dHRvblByZXNzZWQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBpbnQg
Y2xpY2tDb3VudCwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQogewor
ICAgIGlmIChndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RV
UkVfU0lOR0xFKGdlc3R1cmUpKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogICAgIGlmIChwcml2LT5kaWFs
b2cpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMDIsNiArMTIyNyw4IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NlZChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UsIGludCBjCiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUmVsZWFzZWQo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBpbnQgY2xpY2tDb3VudCwgZG91YmxlIHgs
IGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQogeworICAgIGlmIChndGtfZ2VzdHVyZV9z
aW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKSkK
KyAgICAgICAgcmV0dXJuOwogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXdCYXNlLT5wcml2OwogICAgIGlmIChwcml2LT5kaWFsb2cpCiAgICAgICAgIHJldHVybjsK
QEAgLTEyMzQsOCArMTI2MSwxNSBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnZlcnREaXJlY3Rpb25G
b3JTY3JvbGxFdmVudChXZWJIaXRUZXN0UmVzdWx0RGF0YTo6SXNTY3JvbGxiYQogc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVXaGVlbEV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmFzZSwgR2RrRXZlbnQqIGV2ZW50LCBPcHRpb25hbDxXZWJXaGVlbEV2ZW50OjpQaGFz
ZT4gcGhhc2UgPSBXVEY6Om51bGxvcHQsIE9wdGlvbmFsPFdlYldoZWVsRXZlbnQ6OlBoYXNlPiBt
b21lbnR1bSA9IFdURjo6bnVsbG9wdCkKIHsKICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3
QmFzZSk7Ci0gICAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdlc3R1cmVF
bmFibGVkKCkgJiYgY29udHJvbGxlci0+aGFuZGxlU2Nyb2xsV2hlZWxFdmVudChyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50U2Nyb2xsKj4oZXZlbnQpKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGRvdWJsZSBkZWx0YVg7CisgICAgICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRh
cyhldmVudCwgJmRlbHRhWCwgbnVsbHB0cik7CisgICAgICAgIGJvb2wgaXNFbmQgPSBnZGtfZXZl
bnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICBp
bnQzMl90IGV2ZW50VGltZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGdka19ldmVudF9nZXRfdGlt
ZShldmVudCkpOworICAgICAgICBQbGF0Zm9ybUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9IHsg
LmRlbHRhID0gZGVsdGFYLCAuZXZlbnRUaW1lID0gZXZlbnRUaW1lLCAuaXNUb3VjaCA9IGZhbHNl
LCAuaXNFbmQgPSBpc0VuZCB9OworICAgICAgICBpZiAoY29udHJvbGxlci0+aGFuZGxlU2Nyb2xs
V2hlZWxFdmVudCgmc2Nyb2xsRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCiAg
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAg
ICAgQVNTRVJUKCFwcml2LT5kaWFsb2cpOwpAQCAtMTI4MywxMyArMTMxNywyMiBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VTY3JvbGxFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRTY3JvbGwqCiAjZW5kaWYKIAogI2lmIFVTRShHVEs0KQotc3RhdGljIGdib29sZWFu
IHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwg
ZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgR3RrRXZlbnRDb250cm9sbGVyKiBjb250cm9s
bGVyKQorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgR3RrRXZl
bnRDb250cm9sbGVyKiBldmVudENvbnRyb2xsZXIpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAgICAgaWYgKHByaXYtPmRpYWxvZykK
ICAgICAgICAgcmV0dXJuIEdES19FVkVOVF9QUk9QQUdBVEU7CiAKLSAgICBhdXRvKiBldmVudCA9
IGd0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50KGNvbnRyb2xsZXIpOworICAg
IGF1dG8qIGV2ZW50ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnQoZXZl
bnRDb250cm9sbGVyKTsKKworICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9
IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAg
ICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkg
eworICAgICAgICBib29sIGlzRW5kID0gZ2RrX3Njcm9sbF9ldmVudF9pc19zdG9wKGV2ZW50KSA/
IHRydWUgOiBmYWxzZTsKKyAgICAgICAgaW50MzJfdCBldmVudFRpbWUgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF90aW1lKGV2ZW50
Q29udHJvbGxlcikpOworICAgICAgICBQbGF0Zm9ybUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9
IHsgLmRlbHRhID0gZGVsdGFYLCAuZXZlbnRUaW1lID0gZXZlbnRUaW1lLCAuaXNUb3VjaCA9IGZh
bHNlLCAuaXNFbmQgPSBpc0VuZCB9OworICAgICAgICBpZiAoY29udHJvbGxlci0+aGFuZGxlU2Ny
b2xsV2hlZWxFdmVudCgmc2Nyb2xsRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gR0RLX0VWRU5U
X1NUT1A7CisgICAgfQogCiAgICAgaWYgKHNob3VsZEludmVydERpcmVjdGlvbkZvclNjcm9sbEV2
ZW50KHByaXYtPm1vdXNlSXNPdmVyU2Nyb2xsYmFyLCBnZGtfZXZlbnRfZ2V0X21vZGlmaWVyX3N0
YXRlKGV2ZW50KSAmIEdES19TSElGVF9NQVNLKSkKICAgICAgICAgc3RkOjpzd2FwKGRlbHRhWCwg
ZGVsdGFZKTsKQEAgLTEzMzAsNiArMTM3Myw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vCiAg
ICAgICAgIHJldHVybiB3aWRnZXRDbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA/IHdpZGdldENs
YXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50KHdpZGdldCwgZXZlbnQpIDogR0RLX0VWRU5UX1BST1BB
R0FURTsKICAgICB9CiAKKyAgICBpZiAoZ2RrX2RldmljZV9nZXRfc291cmNlKGdka19ldmVudF9n
ZXRfc291cmNlX2RldmljZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSkgPT0g
R0RLX1NPVVJDRV9UT1VDSFNDUkVFTikKKyAgICAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mo
d2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+bW90aW9uX25vdGlmeV9ldmVudCh3
aWRnZXQsIGV2ZW50KTsKKwogICAgIGlmIChwcml2LT5wb2ludGVyTG9ja01hbmFnZXIpIHsKICAg
ICAgICAgZG91YmxlIHgsIHk7CiAgICAgICAgIGdka19ldmVudF9nZXRfcm9vdF9jb29yZHMocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJngsICZ5KTsKQEAgLTE0NTMsMTEgKzE0
OTksMTYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VMZWF2ZShXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UsIEdka0Nyb3NzaW5nTW8KIH0KICNlbmRpZgogCi0jaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykgJiYgIVVTRShHVEs0KQotc3RhdGljIHZvaWQgYXBwZW5kVG91Y2hFdmVu
dChWZWN0b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiYgdG91Y2hQb2ludHMsIGNvbnN0IEdka0V2
ZW50KiBldmVudCwgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgc3RhdGUp
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3N0YXRpYyB2b2lkIGFwcGVuZFRvdWNoRXZlbnQo
R3RrV2lkZ2V0KiB3ZWJWaWV3QmFzZSwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQb2ludD4mIHRv
dWNoUG9pbnRzLCBHZGtFdmVudCogZXZlbnQsIFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQ
b2ludFN0YXRlIHN0YXRlKQogewogICAgIGdkb3VibGUgeCwgeTsKICAgICBnZGtfZXZlbnRfZ2V0
X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKKyNpZiBVU0UoR1RLNCkKKyAgICAvLyBFdmVudHMgaW4g
R1RLNCBhcmUgZ2l2ZW4gaW4gbmF0aXZlIHN1cmZhY2UgY29vcmRpbmF0ZXMKKyAgICBndGtfd2lk
Z2V0X3RyYW5zbGF0ZV9jb29yZGluYXRlcyhHVEtfV0lER0VUKGd0a193aWRnZXRfZ2V0X25hdGl2
ZSh3ZWJWaWV3QmFzZSkpLAorICAgICAgICB3ZWJWaWV3QmFzZSwgeCwgeSwgJngsICZ5KTsKKyNl
bmRpZgogCiAgICAgZ2RvdWJsZSB4Um9vdCwgeVJvb3Q7CiAgICAgZ2RrX2V2ZW50X2dldF9yb290
X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3QpOwpAQCAtMTQ2NiwxMiArMTUxNywxMiBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRUb3VjaEV2ZW50KFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+
JiB0b3VjaFBvaW50cywgY29uc3QgRwogICAgIHRvdWNoUG9pbnRzLnVuY2hlY2tlZEFwcGVuZChX
ZWJQbGF0Zm9ybVRvdWNoUG9pbnQoaWRlbnRpZmllciwgc3RhdGUsIEludFBvaW50KHhSb290LCB5
Um9vdCksIEludFBvaW50KHgsIHkpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgV2ViUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgdG91Y2hQb2ludFN0YXRlRm9yRXZlbnRzKGNvbnN0
IEdka0V2ZW50KiBjdXJyZW50LCBjb25zdCBHZGtFdmVudCogZXZlbnQpCitzdGF0aWMgaW5saW5l
IFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQb2ludFN0YXRlIHRvdWNoUG9pbnRTdGF0ZUZv
ckV2ZW50cyhHZGtFdmVudCogY3VycmVudCwgR2RrRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChn
ZGtfZXZlbnRfZ2V0X2V2ZW50X3NlcXVlbmNlKGN1cnJlbnQpICE9IGdka19ldmVudF9nZXRfZXZl
bnRfc2VxdWVuY2UoZXZlbnQpKQogICAgICAgICByZXR1cm4gV2ViUGxhdGZvcm1Ub3VjaFBvaW50
OjpUb3VjaFN0YXRpb25hcnk7CiAKLSAgICBzd2l0Y2ggKGN1cnJlbnQtPnR5cGUpIHsKKyAgICBz
d2l0Y2ggKGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShldmVudCkpIHsKICAgICBjYXNlIEdES19U
T1VDSF9VUERBVEU6CiAgICAgICAgIHJldHVybiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
TW92ZWQ7CiAgICAgY2FzZSBHREtfVE9VQ0hfQkVHSU46CkBAIC0xNDkyLDE1ICsxNTQzLDIwIEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlR2V0VG91Y2hQb2ludHNGb3JFdmVudChXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0JhCiAgICAgYm9vbCB0b3VjaEVuZCA9ICh0eXBlID09IEdE
S19UT1VDSF9FTkQpIHx8ICh0eXBlID09IEdES19UT1VDSF9DQU5DRUwpOwogICAgIHRvdWNoUG9p
bnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodG91Y2hFbmQgPyBwcml2LT50b3VjaEV2ZW50cy5z
aXplKCkgKyAxIDogcHJpdi0+dG91Y2hFdmVudHMuc2l6ZSgpKTsKIAorICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBp
dCA6IHByaXYtPnRvdWNoRXZlbnRzKQotICAgICAgICBhcHBlbmRUb3VjaEV2ZW50KHRvdWNoUG9p
bnRzLCBpdC52YWx1ZS5nZXQoKSwgdG91Y2hQb2ludFN0YXRlRm9yRXZlbnRzKGl0LnZhbHVlLmdl
dCgpLCBldmVudCkpOworICAgICAgICBhcHBlbmRUb3VjaEV2ZW50KHdpZGdldCwgdG91Y2hQb2lu
dHMsIGl0LnZhbHVlLmdldCgpLCB0b3VjaFBvaW50U3RhdGVGb3JFdmVudHMoaXQudmFsdWUuZ2V0
KCksIGV2ZW50KSk7CiAKICAgICAvLyBUb3VjaCB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhl
IFRvdWNoRXZlbnRzTWFwLCBhZGQgaXQgaGVyZS4KICAgICBpZiAodG91Y2hFbmQpCi0gICAgICAg
IGFwcGVuZFRvdWNoRXZlbnQodG91Y2hQb2ludHMsIGV2ZW50LCBXZWJQbGF0Zm9ybVRvdWNoUG9p
bnQ6OlRvdWNoUmVsZWFzZWQpOworICAgICAgICBhcHBlbmRUb3VjaEV2ZW50KHdpZGdldCwgdG91
Y2hQb2ludHMsIGV2ZW50LCBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQpOwog
fQogCisjaWYgVVNFKEdUSzQpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VUb3Vj
aEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQpCisjZWxzZQogc3RhdGlj
IGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRUb3VjaCogZXZlbnQpCisjZW5kaWYKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwogICAgIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwpAQCAtMTUxNCw2ICsx
NTcwLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUb3VjaCogZXYKICAgICBHZGtFdmVudFR5cGUgdHlwZSA9
IGdka19ldmVudF9nZXRfZXZlbnRfdHlwZSh0b3VjaEV2ZW50KTsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIEdES19UT1VDSF9CRUdJTjogeworICAgICAgICBpZiAocHJpdi0+dG91Y2hF
dmVudHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcHJpdi0+cGFnZUdyYWJiZWRUb3VjaCA9IGZh
bHNlOwogICAgICAgICBBU1NFUlQoIXByaXYtPnRvdWNoRXZlbnRzLmNvbnRhaW5zKHNlcXVlbmNl
KSk7CiAgICAgICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9jb3B5KHRv
dWNoRXZlbnQpKTsKICAgICAgICAgcHJpdi0+dG91Y2hFdmVudHMuYWRkKHNlcXVlbmNlLCBXVEZN
b3ZlKGV2ZW50KSk7CkBAIC0xNTMyLDE0OSArMTU5MCwyMyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFRvdWNo
KiBldgogICAgICAgICBwcml2LT50b3VjaEV2ZW50cy5yZW1vdmUoc2VxdWVuY2UpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEdE
S19FVkVOVF9QUk9QQUdBVEU7CiAgICAgfQogCiAgICAgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQ
b2ludD4gdG91Y2hQb2ludHM7CiAgICAgd2Via2l0V2ViVmlld0Jhc2VHZXRUb3VjaFBvaW50c0Zv
ckV2ZW50KHdlYlZpZXdCYXNlLCB0b3VjaEV2ZW50LCB0b3VjaFBvaW50cyk7CiAgICAgcHJpdi0+
cGFnZVByb3h5LT5oYW5kbGVUb3VjaEV2ZW50KE5hdGl2ZVdlYlRvdWNoRXZlbnQocmVpbnRlcnBy
ZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgV1RGTW92ZSh0b3VjaFBvaW50cykpKTsKIAotICAg
IHJldHVybiBHREtfRVZFTlRfU1RPUDsKKyNpZiBVU0UoR1RLNCkKKyAgICByZXR1cm4gR0RLX0VW
RU5UX1BST1BBR0FURTsKKyNlbHNlCisgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0
X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+dG91Y2hfZXZlbnQod2lkZ2V0LCBldmVudCk7
CisjZW5kaWYKIH0KICNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCi0jaWYgIVVTRShH
VEs0KQotY2xhc3MgVG91Y2hHZXN0dXJlQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBHZXN0dXJl
Q29udHJvbGxlckNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBUb3VjaEdlc3R1cmVDb250cm9sbGVyKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSkKLSAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlld0Jhc2UpCi0gICAgewot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3JlYXRl
U2Nyb2xsRXZlbnQoR2RrRXZlbnRUb3VjaCogZXZlbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGbG9hdFBvaW50JiBkZWx0YSwgYm9vbCBpc1N0b3AgPSBmYWxzZSkKLSAgICB7Ci0g
ICAgICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50KGdka19ldmVudF9uZXcoR0RL
X1NDUk9MTCkpOwotICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLnRpbWUgPSBldmVudC0+dGlt
ZTsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC54ID0gcG9pbnQueCgpOwotICAgICAgICBz
Y3JvbGxFdmVudC0+c2Nyb2xsLnkgPSBwb2ludC55KCk7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5z
Y3JvbGwueF9yb290ID0gZXZlbnQtPnhfcm9vdDsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9s
bC55X3Jvb3QgPSBldmVudC0+eV9yb290OwotICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRp
cmVjdGlvbiA9IEdES19TQ1JPTExfU01PT1RIOwotICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xs
LmRlbHRhX3ggPSBkZWx0YS54KCk7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuZGVsdGFf
eSA9IGRlbHRhLnkoKTsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5zdGF0ZSA9IGV2ZW50
LT5zdGF0ZTsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5pc19zdG9wID0gaXNTdG9wOwot
ICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLndpbmRvdyA9IGV2ZW50LT53aW5kb3cgPyBHREtf
V0lORE9XKGdfb2JqZWN0X3JlZihldmVudC0+d2luZG93KSkgOiBudWxscHRyOwotICAgICAgICBh
dXRvKiB0b3VjaEV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KTsKLSAg
ICAgICAgZ2RrX2V2ZW50X3NldF9zY3JlZW4oc2Nyb2xsRXZlbnQuZ2V0KCksIGdka19ldmVudF9n
ZXRfc2NyZWVuKHRvdWNoRXZlbnQpKTsKLSAgICAgICAgZ2RrX2V2ZW50X3NldF9kZXZpY2Uoc2Ny
b2xsRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRfZGV2aWNlKHRvdWNoRXZlbnQpKTsKLSAgICAg
ICAgZ2RrX2V2ZW50X3NldF9zb3VyY2VfZGV2aWNlKHNjcm9sbEV2ZW50LmdldCgpLCBnZGtfZXZl
bnRfZ2V0X3NvdXJjZV9kZXZpY2UodG91Y2hFdmVudCkpOwotICAgICAgICByZXR1cm4gc2Nyb2xs
RXZlbnQ7Ci0gICAgfQotCi0gICAgdm9pZCBzaW11bGF0ZU1vdXNlQ2xpY2soR2RrRXZlbnRUb3Vj
aCogZXZlbnQsIHVuc2lnbmVkIGJ1dHRvbikKLSAgICB7Ci0gICAgICAgIEdVbmlxdWVQdHI8R2Rr
RXZlbnQ+IHBvaW50ZXJFdmVudChnZGtfZXZlbnRfbmV3KEdES19NT1RJT05fTk9USUZZKSk7Ci0g
ICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnRpbWUgPSBldmVudC0+dGltZTsKLSAgICAgICAg
cG9pbnRlckV2ZW50LT5tb3Rpb24ueCA9IGV2ZW50LT54OwotICAgICAgICBwb2ludGVyRXZlbnQt
Pm1vdGlvbi55ID0gZXZlbnQtPnk7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnhfcm9v
dCA9IGV2ZW50LT54X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnlfcm9vdCA9
IGV2ZW50LT55X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLnN0YXRlID0gZXZl
bnQtPnN0YXRlOwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi53aW5kb3cgPSBldmVudC0+
d2luZG93ID8gR0RLX1dJTkRPVyhnX29iamVjdF9yZWYoZXZlbnQtPndpbmRvdykpIDogbnVsbHB0
cjsKLSAgICAgICAgYXV0byogdG91Y2hFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQq
PihldmVudCk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfc2NyZWVuKHBvaW50ZXJFdmVudC5nZXQo
KSwgZ2RrX2V2ZW50X2dldF9zY3JlZW4odG91Y2hFdmVudCkpOwotICAgICAgICBnZGtfZXZlbnRf
c2V0X2RldmljZShwb2ludGVyRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRfZGV2aWNlKHRvdWNo
RXZlbnQpKTsKLSAgICAgICAgZ2RrX2V2ZW50X3NldF9zb3VyY2VfZGV2aWNlKHBvaW50ZXJFdmVu
dC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHRvdWNoRXZlbnQpKTsKLSAgICAg
ICAgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVNb3VzZUV2ZW50KG1fd2ViVmlldywgcG9pbnRlckV2
ZW50LmdldCgpKTsKLQotICAgICAgICBwb2ludGVyRXZlbnQucmVzZXQoZ2RrX2V2ZW50X25ldyhH
REtfQlVUVE9OX1BSRVNTKSk7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLmJ1dHRvbiA9
IGJ1dHRvbjsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0b24udGltZSA9IGV2ZW50LT50aW1l
OwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi54ID0gZXZlbnQtPng7Ci0gICAgICAgIHBv
aW50ZXJFdmVudC0+YnV0dG9uLnkgPSBldmVudC0+eTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5i
dXR0b24ueF9yb290ID0gZXZlbnQtPnhfcm9vdDsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0
b24ueV9yb290ID0gZXZlbnQtPnlfcm9vdDsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0b24u
d2luZG93ID0gZXZlbnQtPndpbmRvdyA/IEdES19XSU5ET1coZ19vYmplY3RfcmVmKGV2ZW50LT53
aW5kb3cpKSA6IG51bGxwdHI7Ci0gICAgICAgIGdka19ldmVudF9zZXRfc2NyZWVuKHBvaW50ZXJF
dmVudC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9zY3JlZW4odG91Y2hFdmVudCkpOwotICAgICAgICBn
ZGtfZXZlbnRfc2V0X2RldmljZShwb2ludGVyRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRfZGV2
aWNlKHRvdWNoRXZlbnQpKTsKLSAgICAgICAgZ2RrX2V2ZW50X3NldF9zb3VyY2VfZGV2aWNlKHBv
aW50ZXJFdmVudC5nZXQoKSwgZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHRvdWNoRXZlbnQp
KTsKLSAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVNb3VzZUV2ZW50KG1fd2ViVmlldywg
cG9pbnRlckV2ZW50LmdldCgpKTsKLQotICAgICAgICBwb2ludGVyRXZlbnQtPnR5cGUgPSBHREtf
QlVUVE9OX1JFTEVBU0U7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVu
dChtX3dlYlZpZXcsIHBvaW50ZXJFdmVudC5nZXQoKSk7Ci0gICAgfQotCi0gICAgdm9pZCB0YXAo
R2RrRXZlbnRUb3VjaCogZXZlbnQpIGZpbmFsCi0gICAgewotICAgICAgICBzaW11bGF0ZU1vdXNl
Q2xpY2soZXZlbnQsIEdES19CVVRUT05fUFJJTUFSWSk7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFy
dERyYWcoR2RrRXZlbnRUb3VjaCogZXZlbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQp
IGZpbmFsCi0gICAgewotICAgICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9
IGNyZWF0ZVNjcm9sbEV2ZW50KGV2ZW50LCBzdGFydFBvaW50LCB7IH0pOwotICAgICAgICB3ZWJr
aXRXZWJWaWV3QmFzZUhhbmRsZVdoZWVsRXZlbnQobV93ZWJWaWV3LCBzY3JvbGxFdmVudC5nZXQo
KSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVnYW4pOwotICAgIH0KLQotICAgIHZvaWQg
ZHJhZyhHZGtFdmVudFRvdWNoKiBldmVudCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlbHRhKSBmaW5hbAotICAgIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxHZGtF
dmVudD4gc2Nyb2xsRXZlbnQgPSBjcmVhdGVTY3JvbGxFdmVudChldmVudCwgcG9pbnQsIGRlbHRh
KTsKLSAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVXaGVlbEV2ZW50KG1fd2ViVmlldywg
c2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUNoYW5nZWQpOwot
ICAgIH0KLQotICAgIHZvaWQgY2FuY2VsRHJhZygpIGZpbmFsCi0gICAgewotICAgICAgICBpZiAo
YXV0byogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVy
KG1fd2ViVmlldykpCi0gICAgICAgICAgICBjb250cm9sbGVyLT5jYW5jZWxTd2lwZSgpOwotICAg
IH0KLQotICAgIHZvaWQgc3dpcGUoR2RrRXZlbnRUb3VjaCogZXZlbnQsIGNvbnN0IEZsb2F0UG9p
bnQmIHZlbG9jaXR5KSBmaW5hbAotICAgIHsKLSAgICAgICAgZG91YmxlIHgsIHk7Ci0gICAgICAg
IGdka19ldmVudF9nZXRfY29vcmRzKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCks
ICZ4LCAmeSk7Ci0gICAgICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IHNjcm9sbEV2ZW50ID0gY3Jl
YXRlU2Nyb2xsRXZlbnQoZXZlbnQsIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbih4LCB5KSwg
dmVsb2NpdHksIHRydWUpOwotICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZVdoZWVsRXZl
bnQobV93ZWJWaWV3LCBzY3JvbGxFdmVudC5nZXQoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBo
YXNlTm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlQmVnYW4pOwotICAgIH0KLQotICAg
IHZvaWQgc3RhcnRab29tKGNvbnN0IEludFBvaW50JiBjZW50ZXIsIGRvdWJsZSYgaW5pdGlhbFNj
YWxlLCBJbnRQb2ludCYgaW5pdGlhbFBvaW50KSBmaW5hbAotICAgIHsKLSAgICAgICAgYXV0byog
cGFnZSA9IG1fd2ViVmlldy0+cHJpdi0+cGFnZVByb3h5LmdldCgpOwotICAgICAgICBBU1NFUlQo
cGFnZSk7Ci0gICAgICAgIGluaXRpYWxTY2FsZSA9IHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwot
ICAgICAgICBwYWdlLT5nZXRDZW50ZXJGb3Jab29tR2VzdHVyZShjZW50ZXIsIGluaXRpYWxQb2lu
dCk7Ci0gICAgfQotCi0gICAgdm9pZCB6b29tKGRvdWJsZSBzY2FsZSwgY29uc3QgSW50UG9pbnQm
IG9yaWdpbikgZmluYWwKLSAgICB7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBtX3dlYlZpZXctPnBy
aXYtPnBhZ2VQcm94eS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKHBhZ2UpOwotCi0gICAgICAgIHBh
Z2UtPnNjYWxlUGFnZShzY2FsZSwgb3JpZ2luKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvbmdQcmVz
cyhHZGtFdmVudFRvdWNoKiBldmVudCkgZmluYWwKLSAgICB7Ci0gICAgICAgIHNpbXVsYXRlTW91
c2VDbGljayhldmVudCwgR0RLX0JVVFRPTl9TRUNPTkRBUlkpOwotICAgIH0KLQotICAgIFdlYktp
dFdlYlZpZXdCYXNlKiBtX3dlYlZpZXc7Ci19OwotCi1HZXN0dXJlQ29udHJvbGxlciYgd2Via2l0
V2ViVmlld0Jhc2VHZXN0dXJlQ29udHJvbGxlcihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UpCi17Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2Ut
PnByaXY7Ci0gICAgaWYgKCFwcml2LT5nZXN0dXJlQ29udHJvbGxlcikKLSAgICAgICAgcHJpdi0+
Z2VzdHVyZUNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPEdlc3R1cmVDb250cm9sbGVyPihHVEtfV0lE
R0VUKHdlYlZpZXdCYXNlKSwgbWFrZVVuaXF1ZTxUb3VjaEdlc3R1cmVDb250cm9sbGVyPih3ZWJW
aWV3QmFzZSkpOwotICAgIHJldHVybiAqcHJpdi0+Z2VzdHVyZUNvbnRyb2xsZXI7Ci19Ci0jZW5k
aWYKLQogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldEVuYWJsZUJhY2tGb3J3YXJkTmF2aWdhdGlv
bkdlc3R1cmUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBib29sIGVuYWJsZWQpCiB7
Ci0jaWYgIVVTRShHVEs0KQogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXdCYXNlLT5wcml2OwogICAgIHByaXYtPmlzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVy
ZUVuYWJsZWQgPSBlbmFibGVkOwogCkBAIC0xNjgyLDMyICsxNjE0LDI1IEBAIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VTZXRFbmFibGVCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlKFdlYktpdFdl
YlZpZXdCYXNlKiB3CiAgICAgICAgIGNvbnRyb2xsZXItPnNldFN3aXBlR2VzdHVyZUVuYWJsZWQo
ZW5hYmxlZCk7CiAKICAgICBwcml2LT5wYWdlUHJveHktPnNldFNob3VsZFJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdHMoZW5hYmxlZCk7Ci0jZW5kaWYKIH0KIAotI2lmICFVU0UoR1RLNCkKIFZpZXdH
ZXN0dXJlQ29udHJvbGxlciogd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQogewogICAgIHJldHVybiB3ZWJWaWV3QmFz
ZS0+cHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyLmdldCgpOwogfQotI2VuZGlmCiAKIGJvb2wg
d2Via2l0V2ViVmlld0Jhc2VCZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYlZpZXdCYXNlKQogewotI2lmICFVU0UoR1RLNCkKICAgICBpZiAoYXV0byogZ2VzdHVy
ZUNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJW
aWV3QmFzZSkpCiAgICAgICAgIHJldHVybiBnZXN0dXJlQ29udHJvbGxlci0+YmVnaW5TaW11bGF0
ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBl
RGlyZWN0aW9uOjpCYWNrKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCiBib29s
IHdlYmtpdFdlYlZpZXdCYXNlQ29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgaWYgKGF1dG8qIGdl
c3R1cmVDb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIo
d2ViVmlld0Jhc2UpKQogICAgICAgICByZXR1cm4gZ2VzdHVyZUNvbnRyb2xsZXItPmNvbXBsZXRl
U2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoVmlld0dlc3R1cmVDb250cm9sbGVy
OjpTd2lwZURpcmVjdGlvbjo6QmFjayk7Ci0jZW5kaWYKIAogICAgIHJldHVybiBGQUxTRTsKIH0K
QEAgLTE3MzYsMTMgKzE2NjEsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VR
dWVyeVRvb2x0aXAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdpbnQgLyogeCAqLywgZwogfQogCiAjaWYg
IVVTRShHVEs0KQotc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRXZlbnQoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZ2RrX2V2ZW50X2dldF9l
dmVudF90eXBlKGV2ZW50KSA9PSBHREtfVE9VQ0hQQURfUElOQ0gpCi0gICAgICAgIHdlYmtpdFdl
YlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSku
aGFuZGxlRXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBHREtfRVZFTlRfUFJPUEFHQVRFOwotfQot
CiBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRXZWJWaWV3QmFzZUdldEFjY2Vzc2libGUoR3RrV2lk
Z2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKQEAgLTE5MjQsNiArMTg0MiwxNzAgQEAg
c3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRm9jdXMoR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a0RpcmVjdGlvblR5cGUgZGlyZWMKICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJr
aXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5mb2N1cyh3aWRnZXQsIGRpcmVjdGlvbik7
CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlWm9vbUJlZ2luKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UsIEd0a0dlc3R1
cmUqIGdlc3R1cmUpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2Vi
Vmlld0Jhc2UtPnByaXY7CisgICAgcHJpdi0+aW5pdGlhbFpvb21TY2FsZSA9IHByaXYtPnBhZ2VQ
cm94eS0+cGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICBkb3VibGUgeCwgeTsKKyAgICBndGtfZ2Vz
dHVyZV9nZXRfYm91bmRpbmdfYm94X2NlbnRlcihnZXN0dXJlLCAmeCwgJnkpOworICAgIHByaXYt
PnBhZ2VQcm94eS0+Z2V0Q2VudGVyRm9yWm9vbUdlc3R1cmUoSW50UG9pbnQoeCwgeSksIHByaXYt
PmluaXRpYWxab29tUG9pbnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVpv
b21DaGFuZ2VkKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZ2RvdWJsZSBzY2FsZSwg
R3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHBy
aXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBpZiAocHJpdi0+cGFnZUdyYWJiZWRUb3VjaCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ3RrX2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdU
S19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAgIGF1dG8gcGFnZVNjYWxlID0gY2xhbXBU
bzxkb3VibGU+KHByaXYtPmluaXRpYWxab29tU2NhbGUgKiBzY2FsZSwgMSwgMyk7CisKKyAgICBG
bG9hdFBvaW50IHNjYWxlZFpvb21DZW50ZXIocHJpdi0+aW5pdGlhbFpvb21Qb2ludCk7CisgICAg
c2NhbGVkWm9vbUNlbnRlci5zY2FsZShwYWdlU2NhbGUpOworCisgICAgZG91YmxlIHgsIHk7Cisg
ICAgZ3RrX2dlc3R1cmVfZ2V0X2JvdW5kaW5nX2JveF9jZW50ZXIoZ2VzdHVyZSwgJngsICZ5KTsK
KyAgICBGbG9hdFBvaW50IHZpZXdQb2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisKKyAgICBwcml2
LT5wYWdlUHJveHktPnNjYWxlUGFnZShwYWdlU2NhbGUsIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2lu
dChGbG9hdFBvaW50KHNjYWxlZFpvb21DZW50ZXIgLSB2aWV3UG9pbnQpKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hMb25nUHJlc3MoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYlZpZXdCYXNlLCBnZG91YmxlIHgsIGdkb3VibGUgeSwgR3RrR2VzdHVyZSopCit7CisgICAg
d2ViVmlld0Jhc2UtPnByaXYtPmlzTG9uZ1ByZXNzZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoUHJlc3MoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlLCBpbnQgblByZXNzLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqKQoreworICAg
IHdlYlZpZXdCYXNlLT5wcml2LT5pc0xvbmdQcmVzc2VkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hSZWxlYXNlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSwgaW50IG5QcmVzcywgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0
dXJlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNl
LT5wcml2OworICAgIGlmIChwcml2LT5wYWdlR3JhYmJlZFRvdWNoKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKHByaXYtPmlzQmVpbmdEcmFnZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICB1
bnNpZ25lZCBidXR0b247CisgICAgdW5zaWduZWQgYnV0dG9uczsKKyAgICBpZiAocHJpdi0+aXNM
b25nUHJlc3NlZCkgeworICAgICAgICBidXR0b24gPSBHREtfQlVUVE9OX1NFQ09OREFSWTsKKyAg
ICAgICAgYnV0dG9ucyA9IEdES19CVVRUT04zX01BU0s7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
YnV0dG9uID0gR0RLX0JVVFRPTl9QUklNQVJZOworICAgICAgICBidXR0b25zID0gR0RLX0JVVFRP
TjFfTUFTSzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSBndGtfZXZlbnRfY29u
dHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF9zdGF0ZShHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0
dXJlKSk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3
QmFzZSwgTW91c2VFdmVudFR5cGU6Ok1vdGlvbiwgMCwgMCwgeCwgeSwgbW9kaWZpZXJzLCBuUHJl
c3MsIHRvdWNoUG9pbnRlckV2ZW50VHlwZSgpKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRo
ZXNpemVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6UHJlc3MsIGJ1dHRv
biwgMCwgeCwgeSwgbW9kaWZpZXJzLCBuUHJlc3MsIHRvdWNoUG9pbnRlckV2ZW50VHlwZSgpKTsK
KyAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCBN
b3VzZUV2ZW50VHlwZTo6UmVsZWFzZSwgYnV0dG9uLCBidXR0b25zLCB4LCB5LCBtb2RpZmllcnMs
IG5QcmVzcywgdG91Y2hQb2ludGVyRXZlbnRUeXBlKCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0JlZ2luKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFz
ZSwgZ2RvdWJsZSBzdGFydFgsIGdkb3VibGUgc3RhcnRZLCBHdGtHZXN0dXJlKikKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBw
cml2LT5kcmFnT2Zmc2V0LnNldCgwLCAwKTsKKyAgICBwcml2LT5pc0JlaW5nRHJhZ2dlZCA9IGZh
bHNlOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ1VwZGF0ZShX
ZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGRvdWJsZSBvZmZzZXRYLCBkb3VibGUgb2Zm
c2V0WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBpZiAocHJpdi0+cGFnZUdyYWJiZWRU
b3VjaCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIHgsIHk7CisgICAgZ3RrX2dlc3R1
cmVfZHJhZ19nZXRfc3RhcnRfcG9pbnQoR1RLX0dFU1RVUkVfRFJBRyhnZXN0dXJlKSwgJngsICZ5
KTsKKworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IGd0a19ldmVudF9jb250cm9sbGVyX2dldF9j
dXJyZW50X2V2ZW50X3N0YXRlKEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKKyAgICBp
ZiAoIXByaXYtPmlzQmVpbmdEcmFnZ2VkKSB7CisgICAgICAgIGlmICghZ3RrX2RyYWdfY2hlY2tf
dGhyZXNob2xkKEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCAwLCAwLCBzdGF0aWNfY2FzdDxpbnQ+
KG9mZnNldFgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldFkpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgcHJpdi0+aXNCZWluZ0RyYWdnZWQgPSB0cnVlOworICAgICAgICBndGtfZ2Vz
dHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOworCisg
ICAgICAgIGlmIChwcml2LT5pc0xvbmdQcmVzc2VkKSB7CisgICAgICAgICAgICAvLyBEcmFnIGFm
dGVyIGxvbmcgcHJlc3MgZm9yd2FyZHMgZW11bGF0ZWQgbW91c2UgZXZlbnRzIChmb3IgZS5nLiB0
ZXh0IHNlbGVjdGlvbikKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1v
dXNlRXZlbnQod2ViVmlld0Jhc2UsIE1vdXNlRXZlbnRUeXBlOjpNb3Rpb24sIDAsIDAsIHgsIHks
IG1vZGlmaWVycywgMSwgdG91Y2hQb2ludGVyRXZlbnRUeXBlKCkpOworICAgICAgICAgICAgd2Vi
a2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgTW91c2VFdmVu
dFR5cGU6OlByZXNzLCBHREtfQlVUVE9OX1BSSU1BUlksIDAsIHgsIHksIG1vZGlmaWVycywgMCwg
dG91Y2hQb2ludGVyRXZlbnRUeXBlKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHdl
YmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZVdoZWVsRXZlbnQod2ViVmlld0Jhc2UsIDAsIDAsIHgs
IHksIFdoZWVsRXZlbnRQaGFzZTo6QmVnYW4sIFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZSk7Cisg
ICAgfQorCisgICAgaWYgKHByaXYtPmlzTG9uZ1ByZXNzZWQpCisgICAgICAgIHdlYmtpdFdlYlZp
ZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQod2ViVmlld0Jhc2UsIE1vdXNlRXZlbnRUeXBlOjpN
b3Rpb24sIEdES19CVVRUT05fUFJJTUFSWSwgR0RLX0JVVFRPTjFfTUFTSywgeCArIG9mZnNldFgs
IHkgKyBvZmZzZXRZLCBtb2RpZmllcnMsIDAsIHRvdWNoUG9pbnRlckV2ZW50VHlwZSgpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgZG91YmxlIGRlbHRhWCA9IChwcml2LT5kcmFnT2Zmc2V0LngoKSAt
IG9mZnNldFgpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICBkb3Vi
bGUgZGVsdGFZID0gKHByaXYtPmRyYWdPZmZzZXQueSgpIC0gb2Zmc2V0WSkgLyBTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgIHByaXYtPmRyYWdPZmZzZXQuc2V0KG9mZnNl
dFgsIG9mZnNldFkpOworCisgICAgICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxl
ciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsK
KyAgICAgICAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdlc3R1cmVFbmFi
bGVkKCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgZXZlbnRUaW1lOworI2lmIFVTRShHVEs0KQor
ICAgICAgICAgICAgZXZlbnRUaW1lID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oZ3RrX2V2ZW50X2Nv
bnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZShHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0
dXJlKSkpOworI2Vsc2UKKyAgICAgICAgICAgIGV2ZW50VGltZSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KGd0a19nZXRfY3VycmVudF9ldmVudF90aW1lKCkpOworI2VuZGlmCisgICAgICAgICAgICBQ
bGF0Zm9ybUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9IHsgLmRlbHRhID0gZGVsdGFYLCAuZXZl
bnRUaW1lID0gZXZlbnRUaW1lLCAuaXNUb3VjaCA9IHRydWUsIC5pc0VuZCA9IGZhbHNlIH07Cisg
ICAgICAgICAgICBpZiAoY29udHJvbGxlci0+aGFuZGxlU2Nyb2xsV2hlZWxFdmVudCgmc2Nyb2xs
RGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgd2Vi
a2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCh3ZWJWaWV3QmFzZSwgLWRlbHRhWCwg
LWRlbHRhWSwgeCwgeSwgV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkLCBXaGVlbEV2ZW50UGhhc2U6
Ok5vUGhhc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3Vj
aERyYWdFbmQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBnZG91YmxlIG9mZnNldFgs
IGdkb3VibGUgb2Zmc2V0WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBpZiAocHJpdi0+
cGFnZUdyYWJiZWRUb3VjaCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPmlzTG9u
Z1ByZXNzZWQpIHsKKyAgICAgICAgZG91YmxlIHgsIHk7CisgICAgICAgIGd0a19nZXN0dXJlX2Ry
YWdfZ2V0X3N0YXJ0X3BvaW50KEdUS19HRVNUVVJFX0RSQUcoZ2VzdHVyZSksICZ4LCAmeSk7Cisg
ICAgICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IGd0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJy
ZW50X2V2ZW50X3N0YXRlKEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKKyAgICAgICAg
d2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgTW91c2VF
dmVudFR5cGU6OlJlbGVhc2UsIEdES19CVVRUT05fUFJJTUFSWSwgR0RLX0JVVFRPTjFfTUFTSywg
eCArIG9mZnNldFgsIHkgKyBvZmZzZXRZLCBtb2RpZmllcnMsIDAsIHRvdWNoUG9pbnRlckV2ZW50
VHlwZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3
QmFzZSk7CisgICAgICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0
dXJlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBpbnQzMl90IGV2ZW50VGltZSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KGd0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50X3RpbWUo
R1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpKTsKKyAgICAgICAgICAgIFBsYXRmb3JtR3Rr
U2Nyb2xsRGF0YSBzY3JvbGxEYXRhID0geyAuZGVsdGEgPSAwLCAuZXZlbnRUaW1lID0gZXZlbnRU
aW1lLCAuaXNUb3VjaCA9IGZhbHNlLCAuaXNFbmQgPSB0cnVlIH07CisgICAgICAgICAgICBjb250
cm9sbGVyLT5oYW5kbGVTY3JvbGxXaGVlbEV2ZW50KCZzY3JvbGxEYXRhKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdDYW5jZWwo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2Vz
dHVyZSopCit7CisgICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZp
ZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSkpCisgICAgICAgIGNvbnRyb2xsZXItPmNh
bmNlbFN3aXBlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hTd2lw
ZShXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGdkb3VibGUgdmVsb2NpdHlYLCBnZG91
YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBpZiAocHJpdi0+cGFn
ZUdyYWJiZWRUb3VjaCB8fCAhcHJpdi0+aXNCZWluZ0RyYWdnZWQgfHwgcHJpdi0+aXNMb25nUHJl
c3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIHgsIHk7CisgICAgaWYgKGd0a19n
ZXN0dXJlX2dldF9wb2ludChnZXN0dXJlLCBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRf
c2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKSwgJngsICZ5KSkKKyAgICAgICAg
d2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplV2hlZWxFdmVudCh3ZWJWaWV3QmFzZSwgLXZlbG9j
aXR5WCwgLXZlbG9jaXR5WSwgeCwgeSwgV2hlZWxFdmVudFBoYXNlOjpOb1BoYXNlLCBXaGVlbEV2
ZW50UGhhc2U6OkJlZ2FuKTsKK30KKworI2lmICFVU0UoR1RLNCkKK3N0YXRpYyB2b2lkIGdlc3R1
cmVXZWFrTm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIG9sZExvY2F0aW9uKQoreworICAg
IGdfb2JqZWN0X3VucmVmKGRhdGEpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVj
dCk7CkBAIC0xOTYxLDEyICsyMDQzLDc3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0
KGNvbnRyb2xsZXIsICJrZXktcmVsZWFzZWQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNl
S2V5UmVsZWFzZWQpLCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CiAgICAgZ3RrX3dp
ZGdldF9hZGRfY29udHJvbGxlcih2aWV3V2lkZ2V0LCBjb250cm9sbGVyKTsKIAorICAgIGNvbnRy
b2xsZXIgPSBndGtfZXZlbnRfY29udHJvbGxlcl9sZWdhY3lfbmV3KCk7CisgICAgZ3RrX2V2ZW50
X2NvbnRyb2xsZXJfc2V0X3Byb3BhZ2F0aW9uX3BoYXNlKEdUS19FVkVOVF9DT05UUk9MTEVSKGNv
bnRyb2xsZXIpLCBHVEtfUEhBU0VfVEFSR0VUKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVj
dChjb250cm9sbGVyLCAiZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hF
dmVudCksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBndGtfd2lkZ2V0X2Fk
ZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19FVkVOVF9DT05UUk9MTEVSKGNvbnRyb2xsZXIp
KTsKKwogICAgIGF1dG8qIGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9jbGlja19uZXcoKTsKICAgICBn
dGtfZ2VzdHVyZV9zaW5nbGVfc2V0X2J1dHRvbihHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSks
IDApOworICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfZXhjbHVzaXZlKEdUS19HRVNUVVJFX1NJ
TkdMRShnZXN0dXJlKSwgVFJVRSk7CiAgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVy
ZSwgInByZXNzZWQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NlZCks
IHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKICAgICBnX3NpZ25hbF9jb25uZWN0X29i
amVjdChnZXN0dXJlLCAicmVsZWFzZWQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlQnV0
dG9uUmVsZWFzZWQpLCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CiAgICAgZ3RrX3dp
ZGdldF9hZGRfY29udHJvbGxlcih2aWV3V2lkZ2V0LCBHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0
dXJlKSk7CiAjZW5kaWYKKworICAgIC8vIFRvdWNoIGdlc3R1cmVzCisjaWYgVVNFKEdUSzQpCisg
ICAgcHJpdi0+dG91Y2hHZXN0dXJlR3JvdXAgPSBndGtfZ2VzdHVyZV96b29tX25ldygpOworICAg
IGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmlld1dpZGdldCwgR1RLX0VWRU5UX0NPTlRST0xM
RVIocHJpdi0+dG91Y2hHZXN0dXJlR3JvdXApKTsKKyNlbHNlCisgICAgcHJpdi0+dG91Y2hHZXN0
dXJlR3JvdXAgPSBndGtfZ2VzdHVyZV96b29tX25ldyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVj
dF93ZWFrX3JlZihHX09CSkVDVCh2aWV3V2lkZ2V0KSwgZ2VzdHVyZVdlYWtOb3RpZnksIHByaXYt
PnRvdWNoR2VzdHVyZUdyb3VwKTsKKyNlbmRpZgorICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0
KHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwLCAiYmVnaW4iLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZp
ZXdCYXNlWm9vbUJlZ2luKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwLCAic2NhbGUtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2Vab29tQ2hhbmdlZCksIHZpZXdXaWRn
ZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKworI2lmIFVTRShHVEs0KQorICAgIGdlc3R1cmUgPSBn
dGtfZ2VzdHVyZV9sb25nX3ByZXNzX25ldygpOworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xs
ZXIodmlld1dpZGdldCwgR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworI2Vsc2UKKyAg
ICBhdXRvKiBnZXN0dXJlID0gZ3RrX2dlc3R1cmVfbG9uZ19wcmVzc19uZXcodmlld1dpZGdldCk7
CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1Qodmlld1dpZGdldCksIGdlc3R1cmVXZWFr
Tm90aWZ5LCBnZXN0dXJlKTsKKyNlbmRpZgorICAgIGd0a19nZXN0dXJlX2dyb3VwKGdlc3R1cmUs
IHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3Rv
dWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X29iamVjdChnZXN0dXJlLCAicHJlc3NlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2Vi
Vmlld0Jhc2VUb3VjaExvbmdQcmVzcyksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsK
KworI2lmIFVTRShHVEs0KQorICAgIGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9jbGlja19uZXcoKTsK
KyAgICBndGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdXaWRnZXQsIEdUS19FVkVOVF9DT05U
Uk9MTEVSKGdlc3R1cmUpKTsKKyNlbHNlCisgICAgZ2VzdHVyZSA9IGd0a19nZXN0dXJlX211bHRp
X3ByZXNzX25ldyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVCh2
aWV3V2lkZ2V0KSwgZ2VzdHVyZVdlYWtOb3RpZnksIGdlc3R1cmUpOworI2VuZGlmCisgICAgZ3Rr
X2dlc3R1cmVfZ3JvdXAoZ2VzdHVyZSwgcHJpdi0+dG91Y2hHZXN0dXJlR3JvdXApOworICAgIGd0
a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVy
ZSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJwcmVzc2Vk
IiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoUHJlc3MpLCB2aWV3V2lkZ2V0LCBH
X0NPTk5FQ1RfU1dBUFBFRCk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwg
InJlbGVhc2VkIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoUmVsZWFzZSksIHZp
ZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKworI2lmIFVTRShHVEs0KQorICAgIGdlc3R1
cmUgPSBndGtfZ2VzdHVyZV9kcmFnX25ldygpOworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xs
ZXIodmlld1dpZGdldCwgR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworI2Vsc2UKKyAg
ICBnZXN0dXJlID0gZ3RrX2dlc3R1cmVfZHJhZ19uZXcodmlld1dpZGdldCk7CisgICAgZ19vYmpl
Y3Rfd2Vha19yZWYoR19PQkpFQ1Qodmlld1dpZGdldCksIGdlc3R1cmVXZWFrTm90aWZ5LCBnZXN0
dXJlKTsKKyNlbmRpZgorICAgIGd0a19nZXN0dXJlX2dyb3VwKGdlc3R1cmUsIHByaXYtPnRvdWNo
R2VzdHVyZUdyb3VwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHkoR1RL
X0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29i
amVjdChnZXN0dXJlLCAiZHJhZy1iZWdpbiIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VU
b3VjaERyYWdCZWdpbiksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0X29iamVjdChnZXN0dXJlLCAiZHJhZy11cGRhdGUiLCBHX0NBTExCQUNLKHdl
YmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnVXBkYXRlKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NX
QVBQRUQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJkcmFnLWVuZCIs
IEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdFbmQpLCB2aWV3V2lkZ2V0LCBH
X0NPTk5FQ1RfU1dBUFBFRCk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwg
ImNhbmNlbCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdDYW5jZWwpLCB2
aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CisKKyNpZiBVU0UoR1RLNCkKKyAgICBnZXN0
dXJlID0gZ3RrX2dlc3R1cmVfc3dpcGVfbmV3KCk7CisgICAgZ3RrX3dpZGdldF9hZGRfY29udHJv
bGxlcih2aWV3V2lkZ2V0LCBHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7CisjZWxzZQor
ICAgIGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9zd2lwZV9uZXcodmlld1dpZGdldCk7CisgICAgZ19v
YmplY3Rfd2Vha19yZWYoR19PQkpFQ1Qodmlld1dpZGdldCksIGdlc3R1cmVXZWFrTm90aWZ5LCBn
ZXN0dXJlKTsKKyNlbmRpZgorICAgIGd0a19nZXN0dXJlX2dyb3VwKGdlc3R1cmUsIHByaXYtPnRv
dWNoR2VzdHVyZUdyb3VwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X3RvdWNoX29ubHko
R1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
X29iamVjdChnZXN0dXJlLCAic3dpcGUiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91
Y2hTd2lwZSksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKIH0KIAogc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNz
KiB3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKQpAQCAtMjAwOSw3ICsyMTU2LDYgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNz
KiB3ZWJraXRXZWJWaWUKICNlbmRpZgogICAgIHdpZGdldENsYXNzLT5xdWVyeV90b29sdGlwID0g
d2Via2l0V2ViVmlld0Jhc2VRdWVyeVRvb2x0aXA7CiAjaWYgIVVTRShHVEs0KQotICAgIHdpZGdl
dENsYXNzLT5ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlRXZlbnQ7CiAgICAgd2lkZ2V0Q2xhc3Mt
PmdldF9hY2Nlc3NpYmxlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlOwogI2VuZGlm
CiAjaWYgVVNFKEdUSzQpCkBAIC0yMjk4LDE4ICsyNDQ0LDE0IEBAIGJvb2wgd2Via2l0V2ViVmll
d0Jhc2VNYWtlR0xDb250ZXh0Q3VycmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmll
d0Jhc2UpCiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VXaWxsU3dhcFdlYlByb2Nlc3MoV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogewotI2lmICFVU0UoR1RLNCkKICAgICBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdjsK
ICAgICBpZiAocHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyKQogICAgICAgICBwcml2LT52aWV3
R2VzdHVyZUNvbnRyb2xsZXItPmRpc2Nvbm5lY3RGcm9tUHJvY2VzcygpOwotI2VuZGlmCiB9CiAK
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRFeGl0V2ViUHJvY2VzcyhXZWJLaXRXZWJWaWV3QmFz
ZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIHdlYmtpdFdlYlZp
ZXdCYXNlLT5wcml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXIgPSBudWxscHRyOwotI2VuZGlmCiB9
CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2Vi
Vmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQpAQCAtMjMyMiwxNCArMjQ2NCwxMiBAQCB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZQogICAgICAgICBhdXRvKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19j
YXN0PERyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzKj4ocHJpdi0+cGFnZVByb3h5
LT5kcmF3aW5nQXJlYSgpKTsKICAgICAgICAgcHJpdi0+YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUt
PnVwZGF0ZShkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlQ29udGV4dCgpKTsKICAgICB9Ci0jaWYgIVVT
RShHVEs0KQogICAgIGlmIChwcml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXIpCiAgICAgICAgIHBy
aXYtPnZpZXdHZXN0dXJlQ29udHJvbGxlci0+Y29ubmVjdFRvUHJvY2VzcygpOwogICAgIGVsc2Ug
ewogICAgICAgICBwcml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPFdlYktp
dDo6Vmlld0dlc3R1cmVDb250cm9sbGVyPigqcHJpdi0+cGFnZVByb3h5KTsKICAgICAgICAgcHJp
di0+dmlld0dlc3R1cmVDb250cm9sbGVyLT5zZXRTd2lwZUdlc3R1cmVFbmFibGVkKHByaXYtPmlz
QmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZUVuYWJsZWQpOwogICAgIH0KLSNlbmRpZgogfQog
CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUGFnZUNsb3NlZChXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlld0Jhc2UpCkBAIC0yMzY0LDU2ICsyNTA0LDQ0IEBAIFJlZlB0cjxXZWJLaXQ6OlZp
ZXdTbmFwc2hvdD4gd2Via2l0V2ViVmlld0Jhc2VUYWtlVmlld1NuYXBzaG90KFdlYktpdFdlYlZp
ZXdCYXNlCiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZv
ck1haW5GcmFtZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0jaWYg
IVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtp
dFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAg
ICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkK
ICAgICAgICAgY29udHJvbGxlci0+ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUo
KTsKLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkRmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3
QmFzZSkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250
cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2Vi
Vmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0
dXJlRW5hYmxlZCgpKQogICAgICAgICBjb250cm9sbGVyLT5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JNYWluRnJhbWUoKTsKLSNlbmRpZgogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlRGlkRmluaXNoTmF2aWdhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbikKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAg
Vmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3
R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVy
ICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKQogICAgICAgICBjb250cm9s
bGVyLT5kaWRGaW5pc2hOYXZpZ2F0aW9uKG5hdmlnYXRpb24pOwotI2VuZGlmCiB9CiAKIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VEaWRGYWlsTmF2aWdhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlld0Jhc2UsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbikKIHsKLSNpZiAhVVNF
KEdUSzQpCiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2Vi
Vmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwogICAgIGlm
IChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKQogICAg
ICAgICBjb250cm9sbGVyLT5kaWRGYWlsTmF2aWdhdGlvbihuYXZpZ2F0aW9uKTsKLSNlbmRpZgog
fQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1h
aW5GcmFtZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIFNhbWVEb2N1bWVu
dE5hdmlnYXRpb25UeXBlIHR5cGUpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJl
Q29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250
cm9sbGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9s
bGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkKICAgICAgICAgY29udHJvbGxlci0+ZGlkU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZSh0eXBlKTsKLSNlbmRpZgogfQogCiB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgVmlld0dlc3R1
cmVDb250cm9sbGVyKiBjb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNv
bnRyb2xsZXIod2Via2l0V2ViVmlld0Jhc2UpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRy
b2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKQogICAgICAgICB3ZWJraXRXZWJWaWV3QmFz
ZS0+cHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyLT5kaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24o
KTsKLSNlbmRpZgogfQogCiAjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjQsIDApCkBAIC0yNzky
LDMgKzI5MjAsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZU1ha2VCbGFuayhXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UsIGJvb2wgbWFrZUJsYW5rKQogICAgIHByaXYtPmlzQmxhbmsg
PSBtYWtlQmxhbms7CiAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmll
d0Jhc2UpKTsKIH0KKwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVBhZ2VHcmFiYmVkVG91Y2goV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIHByaXYtPnBhZ2VHcmFiYmVkVG91
Y2ggPSB0cnVlOworICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShwcml2LT50b3VjaEdlc3R1cmVH
cm91cCwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApp
bmRleCBlZDI2OTlkYmUwZGIuLjdlNzhhNmE0Y2M0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBA
IC0yOCw3ICsyOCw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1
cmF0aW9uLmgiCi0jaW5jbHVkZSAiR2VzdHVyZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnB1
dE1ldGhvZFN0YXRlLmgiCiAjaW5jbHVkZSAiU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCIK
ICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKQEAgLTg4LDE1ICs4Nyw5IEBAIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWJDb3JlOjpTZWxl
Y3Rpb25EYXRhJiYsIE9wCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUGVyZm9ybURyYWdDb250
cm9sbGVyQWN0aW9uKFdlYktpdFdlYlZpZXdCYXNlKik7CiAjZW5kaWYKIAotI2lmICFVU0UoR1RL
NCkKLVdlYktpdDo6R2VzdHVyZUNvbnRyb2xsZXImIHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNv
bnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqKTsKLSNlbmRpZgotCiBSZWZQdHI8V2ViS2l0OjpW
aWV3U25hcHNob3Q+IHdlYmtpdFdlYlZpZXdCYXNlVGFrZVZpZXdTbmFwc2hvdChXZWJLaXRXZWJW
aWV3QmFzZSosIE9wdGlvbmFsPFdlYkNvcmU6OkludFJlY3Q+JiYpOwogdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVNldEVuYWJsZUJhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmUoV2ViS2l0V2ViVmll
d0Jhc2UqLCBib29sIGVuYWJsZWQpOwotI2lmICFVU0UoR1RLNCkKIFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyKiB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJL
aXRXZWJWaWV3QmFzZSopOwotI2VuZGlmCiAKIGJvb2wgd2Via2l0V2ViVmlld0Jhc2VCZWdpbkJh
Y2tTd2lwZUZvclRlc3RpbmcoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIGJvb2wgd2Via2l0V2ViVmll
d0Jhc2VDb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcoV2ViS2l0V2ViVmlld0Jhc2UqKTsKQEAg
LTEyMiwzICsxMTUsNCBAQCBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIHdlYmtpdFdlYlZpZXdC
YXNlR2V0SW5wdXRNZXRob2RDb250ZXh0KFdlYktpdFdlYlZpZXdCYQogdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZVN5bnRoZXNpemVDb21wb3NpdGlvbktleVByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25V
bmRlcmxpbmU+PiYmLCBPcHRpb25hbDxXZWJLaXQ6OkVkaXRpbmdSYW5nZT4mJik7CiAKIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VNYWtlQmxhbmsoV2ViS2l0V2ViVmlld0Jhc2UqLCBib29sKTsKK3Zv
aWQgd2Via2l0V2ViVmlld0Jhc2VQYWdlR3JhYmJlZFRvdWNoKFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJraXRXZWJWaWV3QmFzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9W
aWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdHZXN0
dXJlQ29udHJvbGxlci5oCmluZGV4IGYyNWU3OTIzZDNhZi4uYjg2ZTAwYjZjMjlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaApAQCAtNzQs
OCArNzQsMTMgQEAgY2xhc3MgTmF2aWdhdGlvbjsKICNpZiBQTEFURk9STShNQUMpCiB0eXBlZGVm
IE5TRXZlbnQqIFBsYXRmb3JtU2Nyb2xsRXZlbnQ7CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBl
ZGVmIHN0cnVjdCBfR2RrRXZlbnRTY3JvbGwgR2RrRXZlbnRTY3JvbGw7Ci10eXBlZGVmIEdka0V2
ZW50U2Nyb2xsKiBQbGF0Zm9ybVNjcm9sbEV2ZW50OwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGRv
dWJsZSBkZWx0YTsKKyAgICBpbnQzMl90IGV2ZW50VGltZTsKKyAgICBib29sIGlzVG91Y2g7Cisg
ICAgYm9vbCBpc0VuZDsKK30gUGxhdGZvcm1HdGtTY3JvbGxEYXRhOwordHlwZWRlZiBQbGF0Zm9y
bUd0a1Njcm9sbERhdGEqIFBsYXRmb3JtU2Nyb2xsRXZlbnQ7CiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC0xNzMsNyArMTc4LDExIEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKEdU
SykKICAgICB2b2lkIGNhbmNlbFN3aXBlKCk7CisjaWYgVVNFKEdUSzQpCisgICAgdm9pZCBzbmFw
c2hvdChHdGtTbmFwc2hvdCosIEdza1JlbmRlck5vZGUqKTsKKyNlbHNlCiAgICAgdm9pZCBkcmF3
KGNhaXJvX3QqLCBjYWlyb19wYXR0ZXJuX3QqKTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICAvLyBU
ZXN0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJjNDUxY2Y1YzQyLi4wMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHZXN0dXJlQ29udHJvbGxlci5oIgotCi0jaWYgIVVTRShHVEs0KQotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBjb25zdCBkb3Vi
bGUgbWF4aW11bVpvb20gPSAzLjA7Ci0KLUdlc3R1cmVDb250cm9sbGVyOjpHZXN0dXJlQ29udHJv
bGxlcihHdGtXaWRnZXQqIHdpZGdldCwgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVy
Q2xpZW50PiYmIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KFdURk1vdmUoY2xpZW50KSkKLSAgICAs
IG1fZHJhZ0dlc3R1cmUod2lkZ2V0LCAqbV9jbGllbnQpCi0gICAgLCBtX3N3aXBlR2VzdHVyZSh3
aWRnZXQsICptX2NsaWVudCkKLSAgICAsIG1fem9vbUdlc3R1cmUod2lkZ2V0LCAqbV9jbGllbnQp
Ci0gICAgLCBtX2xvbmdwcmVzc0dlc3R1cmUod2lkZ2V0LCAqbV9jbGllbnQpCi17Ci19Ci0KLWJv
b2wgR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAg
ICBib29sIHdhc1Byb2Nlc3NpbmdHZXN0dXJlcyA9IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7Ci0g
ICAgYm9vbCB0b3VjaEVuZDsKLSAgICBtX2RyYWdHZXN0dXJlLmhhbmRsZUV2ZW50KGV2ZW50KTsK
LSAgICBtX3N3aXBlR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7Ci0gICAgbV96b29tR2VzdHVy
ZS5oYW5kbGVFdmVudChldmVudCk7Ci0gICAgbV9sb25ncHJlc3NHZXN0dXJlLmhhbmRsZUV2ZW50
KGV2ZW50KTsKLSAgICB0b3VjaEVuZCA9IChnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQp
ID09IEdES19UT1VDSF9FTkQpIHx8IChnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUoZXZlbnQpID09
IEdES19UT1VDSF9DQU5DRUwpOwotICAgIHJldHVybiB0b3VjaEVuZCA/IHdhc1Byb2Nlc3NpbmdH
ZXN0dXJlcyA6IGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCk7Ci19Ci0KLWJvb2wgR2VzdHVyZUNvbnRy
b2xsZXI6OmlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kcmFn
R2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fc3dpcGVHZXN0dXJlLmlzQWN0aXZlKCkgfHwgbV96b29t
R2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fbG9uZ3ByZXNzR2VzdHVyZS5pc0FjdGl2ZSgpOwotfQot
Ci1HZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZTo6R2VzdHVyZShHdGtHZXN0dXJlKiBnZXN0dXJl
LCBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYgY2xpZW50KQotICAgIDogbV9nZXN0dXJlKGFkb3B0
R1JlZihnZXN0dXJlKSkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLXsKLSAgICBndGtfZXZlbnRf
Y29udHJvbGxlcl9zZXRfcHJvcGFnYXRpb25fcGhhc2UoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9n
ZXN0dXJlLmdldCgpKSwgR1RLX1BIQVNFX05PTkUpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9s
bGVyOjpHZXN0dXJlOjpyZXNldCgpCi17Ci0gICAgZ3RrX2V2ZW50X2NvbnRyb2xsZXJfcmVzZXQo
R1RLX0VWRU5UX0NPTlRST0xMRVIobV9nZXN0dXJlLmdldCgpKSk7Ci19Ci0KLWJvb2wgR2VzdHVy
ZUNvbnRyb2xsZXI6Okdlc3R1cmU6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ3Rr
X2dlc3R1cmVfaXNfYWN0aXZlKG1fZ2VzdHVyZS5nZXQoKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNv
bnRyb2xsZXI6Okdlc3R1cmU6OmhhbmRsZUV2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBn
dGtfZXZlbnRfY29udHJvbGxlcl9oYW5kbGVfZXZlbnQoR1RLX0VWRU5UX0NPTlRST0xMRVIobV9n
ZXN0dXJlLmdldCgpKSwgZXZlbnQpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFn
R2VzdHVyZTo6c3RhcnREcmFnKEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQoIW1faW5E
cmFnKTsKLSAgICBtX2NsaWVudC5zdGFydERyYWcocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudFRv
dWNoKj4oZXZlbnQpLCBtX3N0YXJ0KTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJh
Z0dlc3R1cmU6OmhhbmRsZURyYWcoR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgeCwgZG91YmxlIHkp
Ci17Ci0gICAgQVNTRVJUKG1faW5EcmFnKTsKLSAgICBtX2NsaWVudC5kcmFnKHJlaW50ZXJwcmV0
X2Nhc3Q8R2RrRXZlbnRUb3VjaCo+KGV2ZW50KSwgbV9zdGFydCwKLSAgICAgICAgRmxvYXRQb2lu
dDo6bmFycm93UHJlY2lzaW9uKChtX29mZnNldC54KCkgLSB4KSAvIFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSwgKG1fb2Zmc2V0LnkoKSAtIHkpIC8gU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpj
YW5jZWxEcmFnKCkKLXsKLSAgICBBU1NFUlQobV9pbkRyYWcpOwotICAgIG1fY2xpZW50LmNhbmNl
bERyYWcoKTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmhhbmRs
ZVRhcChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFtX2luRHJhZyk7Ci0gICAgbV9j
bGllbnQudGFwKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRUb3VjaCo+KGV2ZW50KSk7Ci19Ci0K
LXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpiZWdpbihEcmFnR2VzdHVyZSog
ZHJhZ0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsK
LSAgICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRf
Y3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOwotICAgIGd0a19n
ZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1ZW5jZSwgR1RLX0VWRU5UX1NF
UVVFTkNFX0NMQUlNRUQpOwotICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IGZhbHNlOwotICAg
IGRyYWdHZXN0dXJlLT5tX3N0YXJ0LnNldCh4LCB5KTsKLSAgICBkcmFnR2VzdHVyZS0+bV9vZmZz
ZXQuc2V0KDAsIDApOwotCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtfZXZlbnRfY29udHJv
bGxlcl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKTsKLSAgICB1bnNp
Z25lZCBkZWxheTsKLSAgICBnX29iamVjdF9nZXQoZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3Mod2lk
Z2V0KSwgImd0ay1sb25nLXByZXNzLXRpbWUiLCAmZGVsYXksIG51bGxwdHIpOwotICAgIGRyYWdH
ZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RhcnRPbmVTaG90KDFfbXMgKiBkZWxheSk7Ci0g
ICAgZHJhZ0dlc3R1cmUtPnN0YXJ0RHJhZyhjb25zdF9jYXN0PEdka0V2ZW50Kj4oZ3RrX2dlc3R1
cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKSk7Ci19Ci0KLXZvaWQgR2VzdHVy
ZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjp1cGRhdGUoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJl
LCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAgR2RrRXZl
bnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2Vx
dWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKLSAgICBndGtfZ2VzdHVyZV9zZXRf
c2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJ
TUVEKTsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0
X3dpZGdldChHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7Ci0gICAgaWYgKCFkcmFnR2Vz
dHVyZS0+bV9pbkRyYWcgJiYgZ3RrX2RyYWdfY2hlY2tfdGhyZXNob2xkKHdpZGdldCwgZHJhZ0dl
c3R1cmUtPm1fc3RhcnQueCgpLCBkcmFnR2VzdHVyZS0+bV9zdGFydC55KCksIGRyYWdHZXN0dXJl
LT5tX3N0YXJ0LngoKSArIHgsIGRyYWdHZXN0dXJlLT5tX3N0YXJ0LnkoKSArIHkpKSB7Ci0gICAg
ICAgIGRyYWdHZXN0dXJlLT5tX2luRHJhZyA9IHRydWU7Ci0gICAgICAgIGRyYWdHZXN0dXJlLT5t
X2xvbmdQcmVzc1RpbWVvdXQuc3RvcCgpOwotICAgIH0KLQotICAgIGlmIChkcmFnR2VzdHVyZS0+
bV9pbkRyYWcpCi0gICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVEcmFnKGNvbnN0X2Nhc3Q8R2Rr
RXZlbnQqPihndGtfZ2VzdHVyZV9nZXRfbGFzdF9ldmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpLCB4
LCB5KTsKLSAgICBkcmFnR2VzdHVyZS0+bV9vZmZzZXQuc2V0KHgsIHkpOwotfQotCi12b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6ZW5kKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVy
ZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UsIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0g
ICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91dC5zdG9wKCk7Ci0gICAgaWYgKCFndGtf
Z2VzdHVyZV9oYW5kbGVzX3NlcXVlbmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkgewotICAgICAgICBn
dGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFkcmFnR2VzdHVyZS0+bV9pbkRyYWcp
IHsKLSAgICAgICAgZHJhZ0dlc3R1cmUtPmhhbmRsZVRhcChjb25zdF9jYXN0PEdka0V2ZW50Kj4o
Z3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKSk7Ci0gICAgICAg
IGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfREVOSUVE
KTsKLSAgICB9Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpjYW5j
ZWwoRHJhZ0dlc3R1cmUqIGRyYWdHZXN0dXJlLCBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSwg
R3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAgICBkcmFnR2VzdHVyZS0+bV9sb25nUHJlc3NUaW1l
b3V0LnN0b3AoKTsKLSAgICBkcmFnR2VzdHVyZS0+Y2FuY2VsRHJhZygpOwotfQotCi12b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9uZ1ByZXNzRmlyZWQoKQotewotICAgIG1f
aW5EcmFnID0gdHJ1ZTsKLX0KLQotR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpEcmFn
R2VzdHVyZShHdGtXaWRnZXQqIHdpZGdldCwgR2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmIGNsaWVu
dCkKLSAgICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVfZHJhZ19uZXcod2lkZ2V0KSwgY2xpZW50KQot
ICAgICwgbV9sb25nUHJlc3NUaW1lb3V0KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6bG9uZ1ByZXNzRmlyZWQpCi17Ci0gICAgZ3RrX2dlc3R1
cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0
KCkpLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgp
LCAiZHJhZy1iZWdpbiIsIEdfQ0FMTEJBQ0soYmVnaW4pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiZHJhZy11cGRhdGUiLCBHX0NBTExCQUNL
KHVwZGF0ZSksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUu
Z2V0KCksICJlbmQiLCBHX0NBTExCQUNLKGVuZCksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJjYW5jZWwiLCBHX0NBTExCQUNLKGNhbmNlbCks
IHRoaXMpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN0YXJ0
TW9tZW50dW1TY3JvbGwoR2RrRXZlbnQqIGV2ZW50LCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUg
dmVsb2NpdHlZKQotewotICAgIG1fY2xpZW50LnN3aXBlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZl
bnRUb3VjaCo+KGV2ZW50KSwgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKHZlbG9jaXR5WCwg
dmVsb2NpdHlZKSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlR2VzdHVyZTo6
c3dpcGUoU3dpcGVHZXN0dXJlKiBzd2lwZUdlc3R1cmUsIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJs
ZSB2ZWxvY2l0eVksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAgR2RrRXZlbnRTZXF1ZW5j
ZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RL
X0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKLSAgICBpZiAoIWd0a19nZXN0dXJlX2hhbmRsZXNf
c2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBndGtf
Z2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9T
RVFVRU5DRV9DTEFJTUVEKTsKLQotICAgIHN3aXBlR2VzdHVyZS0+c3RhcnRNb21lbnR1bVNjcm9s
bChjb25zdF9jYXN0PEdka0V2ZW50Kj4oZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVy
ZSwgc2VxdWVuY2UpKSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVkpOwotfQotCi1HZXN0dXJlQ29udHJv
bGxlcjo6U3dpcGVHZXN0dXJlOjpTd2lwZUdlc3R1cmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1
cmVDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3N3
aXBlX25ldyh3aWRnZXQpLCBjbGllbnQpCi17Ci0gICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90
b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShtX2dlc3R1cmUuZ2V0KCkpLCBUUlVFKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAic3dpcGUiLCBHX0NB
TExCQUNLKHN3aXBlKSwgdGhpcyk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21H
ZXN0dXJlOjpiZWdpbihab29tR2VzdHVyZSogem9vbUdlc3R1cmUsIEdka0V2ZW50U2VxdWVuY2Uq
LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQotewotICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0
dXJlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7Ci0gICAgem9vbUdlc3R1cmUtPnN0YXJ0
Wm9vbSgpOwotfQotCi1JbnRQb2ludCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmNl
bnRlcigpIGNvbnN0Ci17Ci0gICAgZG91YmxlIHgsIHk7Ci0gICAgZ3RrX2dlc3R1cmVfZ2V0X2Jv
dW5kaW5nX2JveF9jZW50ZXIobV9nZXN0dXJlLmdldCgpLCAmeCwgJnkpOwotICAgIHJldHVybiBJ
bnRQb2ludCh4LCB5KTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6
OnN0YXJ0Wm9vbSgpCi17Ci0gICAgbV9jbGllbnQuc3RhcnRab29tKGNlbnRlcigpLCBtX2luaXRp
YWxTY2FsZSwgbV9pbml0aWFsUG9pbnQpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpa
b29tR2VzdHVyZTo6aGFuZGxlWm9vbSgpCi17Ci0gICAgRmxvYXRQb2ludCBzY2FsZWRab29tQ2Vu
dGVyKG1faW5pdGlhbFBvaW50KTsKLSAgICBzY2FsZWRab29tQ2VudGVyLnNjYWxlKG1fc2NhbGUp
OwotCi0gICAgbV9jbGllbnQuem9vbShtX3NjYWxlLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQo
RmxvYXRQb2ludChzY2FsZWRab29tQ2VudGVyIC0gbV92aWV3UG9pbnQpKSk7Ci19Ci0KLXZvaWQg
R2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpzY2FsZUNoYW5nZWQoWm9vbUdlc3R1cmUq
IHpvb21HZXN0dXJlLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUqKQotewotICAgIHpvb21HZXN0
dXJlLT5tX3NjYWxlID0gem9vbUdlc3R1cmUtPm1faW5pdGlhbFNjYWxlICogc2NhbGU7Ci0gICAg
aWYgKHpvb21HZXN0dXJlLT5tX3NjYWxlIDwgMS4wKQotICAgICAgICB6b29tR2VzdHVyZS0+bV9z
Y2FsZSA9IDEuMDsKLSAgICBpZiAoem9vbUdlc3R1cmUtPm1fc2NhbGUgPiBtYXhpbXVtWm9vbSkK
LSAgICAgICAgem9vbUdlc3R1cmUtPm1fc2NhbGUgPSBtYXhpbXVtWm9vbTsKLQotICAgIHpvb21H
ZXN0dXJlLT5tX3ZpZXdQb2ludCA9IHpvb21HZXN0dXJlLT5jZW50ZXIoKTsKLQotICAgIGlmICh6
b29tR2VzdHVyZS0+bV9pZGxlLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHpv
b21HZXN0dXJlLT5tX2lkbGUuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLUdlc3R1cmVDb250cm9s
bGVyOjpab29tR2VzdHVyZTo6Wm9vbUdlc3R1cmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1cmVD
b250cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX3pvb21f
bmV3KHdpZGdldCksIGNsaWVudCkKLSAgICAsIG1faWRsZShSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZHZXN0dXJlQ29udHJvbGxlcjo6Wm9vbUdlc3R1cmU6OmhhbmRsZVpvb20pCi17Ci0gICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImJlZ2luIiwgR19DQUxMQkFD
SyhiZWdpbiksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUu
Z2V0KCksICJzY2FsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyhzY2FsZUNoYW5nZWQpLCB0aGlzKTsK
LX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6TG9uZ1ByZXNzR2VzdHVyZTo6bG9uZ1ByZXNz
ZWQoR2RrRXZlbnQqIGV2ZW50KQotewotICAgIG1fY2xpZW50LmxvbmdQcmVzcyhyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50VG91Y2gqPihldmVudCkpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9s
bGVyOjpMb25nUHJlc3NHZXN0dXJlOjpwcmVzc2VkKExvbmdQcmVzc0dlc3R1cmUqIGxvbmdwcmVz
c0dlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAg
ICBHZGtFdmVudFNlcXVlbmNlKiBzZXF1ZW5jZSA9IGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3Vy
cmVudF9zZXF1ZW5jZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSkpOwotICAgIGlmICghZ3Rr
X2dlc3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGd0a19nZXN0dXJlX3NldF9zZXF1ZW5jZV9zdGF0ZShnZXN0dXJlLCBzZXF1
ZW5jZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOwotCi0gICAgbG9uZ3ByZXNzR2VzdHVy
ZS0+bG9uZ1ByZXNzZWQoY29uc3RfY2FzdDxHZGtFdmVudCo+KGd0a19nZXN0dXJlX2dldF9sYXN0
X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSkpOwotfQotCi1HZXN0dXJlQ29udHJvbGxlcjo6TG9u
Z1ByZXNzR2VzdHVyZTo6TG9uZ1ByZXNzR2VzdHVyZShHdGtXaWRnZXQqIHdpZGdldCwgR2VzdHVy
ZUNvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkKLSAgICA6IEdlc3R1cmUoZ3RrX2dlc3R1cmVfbG9u
Z19wcmVzc19uZXcod2lkZ2V0KSwgY2xpZW50KQotewotICAgIGd0a19nZXN0dXJlX3NpbmdsZV9z
ZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInByZXNzZWQi
LCBHX0NBTExCQUNLKHByZXNzZWQpLCB0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1
cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvR2VzdHVyZUNvbnRy
b2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0NmQ0NTg0ZTYxLi4wMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmICFVU0Uo
R1RLNCkKLQotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL2ds
aWIvR1JlZlB0ci5oPgotCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKLXR5cGVk
ZWYgc3RydWN0IF9HZGtFdmVudFRvdWNoIEdka0V2ZW50VG91Y2g7Ci10eXBlZGVmIHN0cnVjdCBf
R2RrRXZlbnRTZXF1ZW5jZSBHZGtFdmVudFNlcXVlbmNlOwotdHlwZWRlZiBzdHJ1Y3QgX0d0a0dl
c3R1cmUgR3RrR2VzdHVyZTsKLQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgR2VzdHVy
ZUNvbnRyb2xsZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkdlc3R1cmVDb250cm9s
bGVyQ2xpZW50KCkgPSBkZWZhdWx0OwotCi0gICAgdmlydHVhbCB2b2lkIHRhcChHZGtFdmVudFRv
dWNoKikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhHZGtFdmVudFRvdWNoKiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhZyhH
ZGtFdmVudFRvdWNoKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbERyYWcoKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc3dpcGUoR2RrRXZlbnRUb3VjaCosIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRab29tKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBjZW50ZXIsIGRvdWJsZSYgaW5pdGlhbFNjYWxlLCBXZWJDb3JlOjpJbnRQ
b2ludCYgaW5pdGlhbFBvaW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHpvb20oZG91YmxlIHNj
YWxlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb3JpZ2luKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgbG9uZ1ByZXNzKEdka0V2ZW50VG91Y2gqKSA9IDA7Ci19OwotCi1jbGFzcyBHZXN0dXJl
Q29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2VzdHVyZUNvbnRyb2xsZXIp
OwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgR2VzdHVyZUNv
bnRyb2xsZXIoR3RrV2lkZ2V0Kiwgc3RkOjp1bmlxdWVfcHRyPEdlc3R1cmVDb250cm9sbGVyQ2xp
ZW50PiYmKTsKLQotICAgIGJvb2wgaXNQcm9jZXNzaW5nR2VzdHVyZXMoKSBjb25zdDsKLSAgICBi
b29sIGhhbmRsZUV2ZW50KEdka0V2ZW50Kik7Ci0KLSAgICB2b2lkIHJlc2V0KCkKLSAgICB7Ci0g
ICAgICAgIG1fZHJhZ0dlc3R1cmUucmVzZXQoKTsKLSAgICAgICAgbV9zd2lwZUdlc3R1cmUucmVz
ZXQoKTsKLSAgICAgICAgbV96b29tR2VzdHVyZS5yZXNldCgpOwotICAgICAgICBtX2xvbmdwcmVz
c0dlc3R1cmUucmVzZXQoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgR2VzdHVyZSB7
Ci0gICAgcHVibGljOgotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgICAgIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBoYW5kbGVFdmVudChHZGtFdmVudCopOwotCi0gICAg
cHJvdGVjdGVkOgotICAgICAgICBHZXN0dXJlKEd0a0dlc3R1cmUqLCBHZXN0dXJlQ29udHJvbGxl
ckNsaWVudCYpOwotCi0gICAgICAgIEdSZWZQdHI8R3RrR2VzdHVyZT4gbV9nZXN0dXJlOwotICAg
ICAgICBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYgbV9jbGllbnQ7Ci0gICAgfTsKLQotICAgIGNs
YXNzIERyYWdHZXN0dXJlIGZpbmFsIDogcHVibGljIEdlc3R1cmUgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgRHJhZ0dlc3R1cmUoR3RrV2lkZ2V0KiwgR2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgZHJhZyBzdGFydGVkLCBh
bGxvd2luZyB0byBzdG9wIGtpbmV0aWMgZGVjZWxlcmF0aW9uLgotICAgICAgICB2b2lkIHN0YXJ0
RHJhZyhHZGtFdmVudCopOwotICAgICAgICB2b2lkIGhhbmRsZURyYWcoR2RrRXZlbnQqLCBkb3Vi
bGUgeCwgZG91YmxlIHkpOwotICAgICAgICB2b2lkIGNhbmNlbERyYWcoKTsKLSAgICAgICAgdm9p
ZCBoYW5kbGVUYXAoR2RrRXZlbnQqKTsKLSAgICAgICAgdm9pZCBsb25nUHJlc3NGaXJlZCgpOwot
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGJlZ2luKERyYWdHZXN0dXJlKiwgZG91YmxlIHgsIGRvdWJs
ZSB5LCBHdGtHZXN0dXJlKik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHVwZGF0ZShEcmFnR2VzdHVy
ZSosIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9p
ZCBlbmQoRHJhZ0dlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwgR3RrR2VzdHVyZSopOwotICAg
ICAgICBzdGF0aWMgdm9pZCBjYW5jZWwoRHJhZ0dlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNlKiwg
R3RrR2VzdHVyZSopOwotCi0gICAgICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9zdGFydDsKLSAg
ICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX29mZnNldDsKLSAgICAgICAgUnVuTG9vcDo6VGlt
ZXI8RHJhZ0dlc3R1cmU+IG1fbG9uZ1ByZXNzVGltZW91dDsKLSAgICAgICAgR1JlZlB0cjxHdGtH
ZXN0dXJlPiBtX2xvbmdQcmVzczsKLSAgICAgICAgYm9vbCBtX2luRHJhZyB7IGZhbHNlIH07Ci0g
ICAgfTsKLQotICAgIGNsYXNzIFN3aXBlR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFN3aXBlR2VzdHVyZShHdGtXaWRnZXQqLCBHZXN0dXJlQ29u
dHJvbGxlckNsaWVudCYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzdGFydE1vbWVu
dHVtU2Nyb2xsKEdka0V2ZW50KiwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZlbG9jaXR5WSk7
Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc3dpcGUoU3dpcGVHZXN0dXJlKiwgZG91YmxlIHZlbG9j
aXR5WCwgZG91YmxlIHZlbG9jaXR5WSwgR3RrR2VzdHVyZSopOwotICAgIH07Ci0KLSAgICBjbGFz
cyBab29tR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFpvb21HZXN0dXJlKEd0a1dpZGdldCosIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50Jik7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBjZW50ZXIoKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzdGFydFpvb20oKTsKLSAgICAgICAgdm9pZCBoYW5kbGVab29tKCk7Ci0K
LSAgICAgICAgc3RhdGljIHZvaWQgYmVnaW4oWm9vbUdlc3R1cmUqLCBHZGtFdmVudFNlcXVlbmNl
KiwgR3RrR2VzdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBzY2FsZUNoYW5nZWQoWm9vbUdl
c3R1cmUqLCBkb3VibGUgc2NhbGUsIEd0a0dlc3R1cmUqKTsKLQotICAgICAgICBkb3VibGUgbV9p
bml0aWFsU2NhbGUgeyAwIH07Ci0gICAgICAgIGRvdWJsZSBtX3NjYWxlIHsgMCB9OwotICAgICAg
ICBXZWJDb3JlOjpJbnRQb2ludCBtX2luaXRpYWxQb2ludDsKLSAgICAgICAgV2ViQ29yZTo6SW50
UG9pbnQgbV92aWV3UG9pbnQ7Ci0gICAgICAgIFJ1bkxvb3A6OlRpbWVyPFpvb21HZXN0dXJlPiBt
X2lkbGU7Ci0gICAgfTsKLQotICAgIGNsYXNzIExvbmdQcmVzc0dlc3R1cmUgZmluYWwgOiBwdWJs
aWMgR2VzdHVyZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMb25nUHJlc3NHZXN0dXJlKEd0a1dp
ZGdldCosIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICB2b2lkIGxvbmdQcmVzc2VkKEdka0V2ZW50Kik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgcHJl
c3NlZChMb25nUHJlc3NHZXN0dXJlKiwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKik7
Ci0gICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlckNsaWVudD4g
bV9jbGllbnQ7Ci0gICAgRHJhZ0dlc3R1cmUgbV9kcmFnR2VzdHVyZTsKLSAgICBTd2lwZUdlc3R1
cmUgbV9zd2lwZUdlc3R1cmU7Ci0gICAgWm9vbUdlc3R1cmUgbV96b29tR2VzdHVyZTsKLSAgICBM
b25nUHJlc3NHZXN0dXJlIG1fbG9uZ3ByZXNzR2VzdHVyZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKaW5kZXggMzVhNzlhNWY3OWQ4Li5kNGNj
Y2QzYmMyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2Vz
dHVyZUNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9W
aWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCkBAIC00OCw5ICs0OCw5IEBAIHN0YXRpYyBjb25z
dCBkb3VibGUgc3dpcGVBbmltYXRpb25EdXJhdGlvbk11bHRpcGxpZXIgPSAzOwogc3RhdGljIGNv
bnN0IGRvdWJsZSBzd2lwZUNhbmNlbEFyZWEgPSAwLjU7CiBzdGF0aWMgY29uc3QgZG91YmxlIHN3
aXBlQ2FuY2VsVmVsb2NpdHlUaHJlc2hvbGQgPSAwLjQ7CiAKLXN0YXRpYyBib29sIGlzRXZlbnRT
dG9wKEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3N0YXRpYyBib29sIGlzRXZlbnRTdG9wKFBsYXRm
b3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGdka19ldmVudF9pc19zY3Jv
bGxfc3RvcF9ldmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKyAgICBy
ZXR1cm4gZXZlbnQtPmlzRW5kOwogfQogCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cGxh
dGZvcm1UZWFyZG93bigpCkBAIC01OCw0NSArNTgsMzQgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OnBsYXRmb3JtVGVhcmRvd24oKQogICAgIGNhbmNlbFN3aXBlKCk7CiB9CiAKLWJvb2wg
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENh
blN0YXJ0U3dpcGUoR2RrRXZlbnRTY3JvbGwqKQorYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OlBlbmRpbmdTd2lwZVRyYWNrZXI6OnNjcm9sbEV2ZW50Q2FuU3RhcnRTd2lwZShQbGF0Zm9ybUd0
a1Njcm9sbERhdGEqKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5FbmRTd2lwZShH
ZGtFdmVudFNjcm9sbCogZXZlbnQpCitib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGlu
Z1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5FbmRTd2lwZShQbGF0Zm9ybUd0a1Njcm9sbERh
dGEqIGV2ZW50KQogewogICAgIHJldHVybiBpc0V2ZW50U3RvcChldmVudCk7CiB9CiAKLWJvb2wg
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENh
bkluZmx1ZW5jZVN3aXBlKEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK2Jvb2wgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhbkluZmx1ZW5jZVN3
aXBlKFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7Ci0gICAgR2RrRGV2aWNlKiBkZXZp
Y2UgPSBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2UocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVu
dCo+KGV2ZW50KSk7Ci0gICAgR2RrSW5wdXRTb3VyY2Ugc291cmNlID0gZ2RrX2RldmljZV9nZXRf
c291cmNlKGRldmljZSk7Ci0KLSAgICBib29sIGlzRGV2aWNlQWxsb3dlZCA9IHNvdXJjZSA9PSBH
REtfU09VUkNFX1RPVUNIUEFEIHx8IHNvdXJjZSA9PSBHREtfU09VUkNFX1RPVUNIU0NSRUVOIHx8
IG1fdmlld0dlc3R1cmVDb250cm9sbGVyLm1faXNTaW11bGF0ZWRTd2lwZTsKLQotICAgIHJldHVy
biBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSwgbnVsbHB0ciwgbnVsbHB0cikgJiYgaXNEZXZpY2VBbGxvd2VkOworICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBpc1RvdWNoRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2
ZW50KQorc3RhdGljIGJvb2wgaXNUb3VjaEV2ZW50KFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZl
bnQpCiB7Ci0gICAgR2RrRGV2aWNlKiBkZXZpY2UgPSBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZp
Y2UocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7Ci0gICAgR2RrSW5wdXRTb3Vy
Y2Ugc291cmNlID0gZ2RrX2RldmljZV9nZXRfc291cmNlKGRldmljZSk7Ci0KLSAgICByZXR1cm4g
c291cmNlID09IEdES19TT1VSQ0VfVE9VQ0hTQ1JFRU47CisgICAgcmV0dXJuIGV2ZW50LT5pc1Rv
dWNoOwogfQogCi1GbG9hdFNpemUgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVU
cmFja2VyOjpzY3JvbGxFdmVudEdldFNjcm9sbGluZ0RlbHRhcyhHZGtFdmVudFNjcm9sbCogZXZl
bnQpCitGbG9hdFNpemUgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2Vy
OjpzY3JvbGxFdmVudEdldFNjcm9sbGluZ0RlbHRhcyhQbGF0Zm9ybUd0a1Njcm9sbERhdGEqIGV2
ZW50KQogewogICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gaXNUb3VjaEV2ZW50KGV2ZW50KSA/IFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSA6IGd0a1Njcm9sbERlbHRhTXVsdGlwbGllcjsK
LSAgICBkb3VibGUgeERlbHRhLCB5RGVsdGE7Ci0gICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVs
dGFzKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksICZ4RGVsdGEsICZ5RGVsdGEp
OwotCi0gICAgLy8gR2RrRXZlbnRTY3JvbGwgZGVsdGFzIGFyZSBpbnZlcnRlZCBjb21wYXJlZCB0
byBOU0V2ZW50LCBzbyBpbnZlcnQgdGhlbSBhZ2FpbgotICAgIHJldHVybiAtRmxvYXRTaXplKHhE
ZWx0YSwgeURlbHRhKSAqIG11bHRpcGxpZXI7CisgICAgLy8gR1RLIGRlbHRhcyBhcmUgaW52ZXJ0
ZWQgY29tcGFyZWQgdG8gTlNFdmVudCwgc28gaW52ZXJ0IHRoZW0gYWdhaW4KKyAgICByZXR1cm4g
LUZsb2F0U2l6ZShldmVudC0+ZGVsdGEsIDApICogbXVsdGlwbGllcjsKIH0KIAotYm9vbCBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwq
IGV2ZW50KQorYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZl
bnQoUGxhdGZvcm1HdGtTY3JvbGxEYXRhKiBldmVudCkKIHsKICAgICByZXR1cm4gbV9zd2lwZVBy
b2dyZXNzVHJhY2tlci5oYW5kbGVFdmVudChldmVudCkgfHwgbV9wZW5kaW5nU3dpcGVUcmFja2Vy
LmhhbmRsZUV2ZW50KGV2ZW50KTsKIH0KQEAgLTE0Niw3ICsxMzUsNyBAQCB2b2lkIFZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OnJlc2V0KCkKICAgICBtX2NhbmNl
bGxlZCA9IGZhbHNlOwogfQogCi1ib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9n
cmVzc1RyYWNrZXI6OmhhbmRsZUV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK2Jvb2wgVmll
d0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZVByb2dyZXNzVHJhY2tlcjo6aGFuZGxlRXZlbnQoUGxh
dGZvcm1HdGtTY3JvbGxEYXRhKiBldmVudCkKIHsKICAgICAvLyBEb24ndCBhbGxvdyBzY3JvbGxp
bmcgd2hpbGUgdGhlIG5leHQgcGFnZSBpcyBsb2FkaW5nCiAgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OkZpbmlzaGluZykKQEAgLTE3NSw5ICsxNjQsOCBAQCBib29sIFZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OmhhbmRsZUV2ZW50KEdka0V2ZW50U2Nyb2xsKiBl
dgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdWludDMyX3QgZXZlbnRUaW1l
ID0gZ2RrX2V2ZW50X2dldF90aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkp
OwotICAgIGRvdWJsZSBldmVudERlbHRhWDsKLSAgICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0
YXMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmV2ZW50RGVsdGFYLCBudWxs
cHRyKTsKKyAgICB1aW50MzJfdCBldmVudFRpbWUgPSBldmVudC0+ZXZlbnRUaW1lOworICAgIGRv
dWJsZSBldmVudERlbHRhWCA9IGV2ZW50LT5kZWx0YTsKIAogICAgIGRvdWJsZSBkZWx0YVggPSAt
ZXZlbnREZWx0YVg7CiAgICAgaWYgKGlzVG91Y2hFdmVudChldmVudCkpIHsKQEAgLTI4MSw2ICsy
NjksNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6
OmVuZEFuaW1hdGlvbigpCiAgICAgbV92aWV3R2VzdHVyZUNvbnRyb2xsZXIuZW5kU3dpcGVHZXN0
dXJlKG1fdGFyZ2V0SXRlbS5nZXQoKSwgbV9jYW5jZWxsZWQpOwogfQogCisjaWYgIVVTRShHVEs0
KQogR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y3JlYXRl
U3R5bGVDb250ZXh0KGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgYm9vbCBpc1JUTCA9IG1fd2Vi
UGFnZVByb3h5LnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpSVEw7CkBAIC0zMjAsNiArMzA5LDcgQEAgc3RhdGlj
IGludCBlbGVtZW50V2lkdGgoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0KQogCiAgICAgcmV0dXJu
IHdpZHRoOwogfQorI2VuZGlmCiAKIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3
aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBTd2lwZURpcmVj
dGlvbiBkaXJlY3Rpb24pCiB7CkBAIC0zNDYsNiArMzM2LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdl
dEl0ZW0KICAgICAgICAgfQogICAgIH0KIAorI2lmICFVU0UoR1RLNCkKICAgICBpZiAoIW1fY3Vy
cmVudFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7CiAgICAgICAgIEdka1JHQkEgY29sb3I7CiAgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KG1fd2ViUGFn
ZVByb3h5LnZpZXdXaWRnZXQoKSk7CkBAIC0zODIsNiArMzczLDcgQEAgdm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRh
cmdldEl0ZW0KICAgICBtX3N3aXBlT3V0bGluZVNpemUgPSBlbGVtZW50V2lkdGgoY29udGV4dC5n
ZXQoKSk7CiAgICAgaWYgKG1fc3dpcGVPdXRsaW5lU2l6ZSkKICAgICAgICAgbV9zd2lwZU91dGxp
bmVQYXR0ZXJuID0gY3JlYXRlRWxlbWVudFBhdHRlcm4oY29udGV4dC5nZXQoKSwgbV9zd2lwZU91
dGxpbmVTaXplLCBzaXplLmhlaWdodCgpLCBzY2FsZSk7CisjZW5kaWYKIH0KIAogdm9pZCBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZVN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiwgZG91YmxlLCBTd2lwZURpcmVjdGlvbikKQEAgLTM5OSw2ICszOTEsNDkgQEAgdm9pZCBW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OmNhbmNlbFN3aXBlKCkKICAgICB9CiB9CiAKKyNpZiBVU0Uo
R1RLNCkKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpzbmFwc2hvdChHdGtTbmFwc2hvdCog
c25hcHNob3QsIEdza1JlbmRlck5vZGUqIHBhZ2VSZW5kZXJOb2RlKQoreworICAgIGJvb2wgc3dp
cGluZ0xlZnQgPSBpc1BoeXNpY2FsbHlTd2lwaW5nTGVmdChtX3N3aXBlUHJvZ3Jlc3NUcmFja2Vy
LmRpcmVjdGlvbigpKTsKKyAgICBib29sIHN3aXBpbmdCYWNrID0gbV9zd2lwZVByb2dyZXNzVHJh
Y2tlci5kaXJlY3Rpb24oKSA9PSBTd2lwZURpcmVjdGlvbjo6QmFjazsKKyAgICBib29sIGlzUlRM
ID0gbV93ZWJQYWdlUHJveHkudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpID09IFdlYkNv
cmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OlJUTDsKKyAgICBmbG9hdCBwcm9ncmVz
cyA9IG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIucHJvZ3Jlc3MoKTsKKworICAgIGF1dG8gc2l6ZSA9
IG1fd2ViUGFnZVByb3h5LmRyYXdpbmdBcmVhKCktPnNpemUoKTsKKyAgICBpbnQgd2lkdGggPSBz
aXplLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgZG91Ymxl
IHNjYWxlID0gbV93ZWJQYWdlUHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIGRvdWJs
ZSBzd2lwaW5nTGF5ZXJPZmZzZXQgPSAoc3dpcGluZ0xlZnQgPyAwIDogd2lkdGgpICsgZmxvb3Io
d2lkdGggKiBwcm9ncmVzcyAqIHNjYWxlKSAvIHNjYWxlOworCisgICAgZG91YmxlIGRpbW1pbmdQ
cm9ncmVzcyA9IHN3aXBpbmdMZWZ0ID8gMSAtIHByb2dyZXNzIDogLXByb2dyZXNzOworICAgIGlm
IChpc1JUTCkgeworICAgICAgICBkaW1taW5nUHJvZ3Jlc3MgPSAxIC0gZGltbWluZ1Byb2dyZXNz
OworICAgICAgICBzd2lwaW5nTGF5ZXJPZmZzZXQgPSAtKHdpZHRoIC0gc3dpcGluZ0xheWVyT2Zm
c2V0KTsKKyAgICB9CisKKyAgICBndGtfc25hcHNob3Rfc2F2ZShzbmFwc2hvdCk7CisKKyAgICBn
cmFwaGVuZV9wb2ludF90IHRyYW5zbGF0aW9uID0geyBzdGF0aWNfY2FzdDxmbG9hdD4oc3dpcGlu
Z0xheWVyT2Zmc2V0KSwgMCB9OworICAgIGlmICghc3dpcGluZ0JhY2spIHsKKyAgICAgICAgZ3Rr
X3NuYXBzaG90X2FwcGVuZF9ub2RlKHNuYXBzaG90LCBwYWdlUmVuZGVyTm9kZSk7CisgICAgICAg
IGd0a19zbmFwc2hvdF90cmFuc2xhdGUoc25hcHNob3QsICZ0cmFuc2xhdGlvbik7CisgICAgfQor
CisgICAgZ3JhcGhlbmVfcmVjdF90IHJlY3QgPSB7IDAsIDAsIChmbG9hdCl3aWR0aCwgKGZsb2F0
KWhlaWdodCB9OworICAgIGF1dG8qIGNyID0gZ3RrX3NuYXBzaG90X2FwcGVuZF9jYWlybyhzbmFw
c2hvdCwgJnJlY3QpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY3VycmVudFN3aXBlU25h
cHNob3RQYXR0ZXJuLmdldCgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRo
LCBoZWlnaHQpOworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgaWYgKHN3aXBpbmdCYWNrKSB7
CisgICAgICAgIGd0a19zbmFwc2hvdF90cmFuc2xhdGUoc25hcHNob3QsICZ0cmFuc2xhdGlvbik7
CisgICAgICAgIGd0a19zbmFwc2hvdF9hcHBlbmRfbm9kZShzbmFwc2hvdCwgcGFnZVJlbmRlck5v
ZGUpOworICAgIH0KKworICAgIGd0a19zbmFwc2hvdF9yZXN0b3JlKHNuYXBzaG90KTsKK30KKyNl
bHNlCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZHJhdyhjYWlyb190KiBjciwgY2Fpcm9f
cGF0dGVybl90KiBwYWdlR3JvdXApCiB7CiAgICAgYm9vbCBzd2lwaW5nTGVmdCA9IGlzUGh5c2lj
YWxseVN3aXBpbmdMZWZ0KG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIuZGlyZWN0aW9uKCkpOwpAQCAt
NDg5LDYgKzUyNCw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkcmF3KGNhaXJvX3Qq
IGNyLCBjYWlyb19wYXR0ZXJuX3QqIHBhZ2VHcm91cCkKIAogICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OwogfQorI2VuZGlmCiAKIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNu
YXBzaG90KCkKIHsKQEAgLTUxOCwzNyArNTU0LDYgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OnJlbW92ZVN3aXBlU25hcHNob3QoKQogICAgIG1fc3dpcGVQcm9ncmVzc1RyYWNrZXIucmVz
ZXQoKTsKIH0KIAotc3RhdGljIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVNjcm9sbEV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBkb3VibGUgeERlbHRhLCBkb3VibGUgeURlbHRhKQotewotICAg
IEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7Ci0KLSAg
ICBpbnQgeCwgeTsKLSAgICBnZGtfd2luZG93X2dldF9yb290X29yaWdpbih3aW5kb3csICZ4LCAm
eSk7Ci0KLSAgICBpbnQgd2lkdGggPSBnZGtfd2luZG93X2dldF93aWR0aCh3aW5kb3cpOwotICAg
IGludCBoZWlnaHQgPSBnZGtfd2luZG93X2dldF9oZWlnaHQod2luZG93KTsKLQotICAgIEdVbmlx
dWVQdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX1NDUk9MTCkpOwotICAgIGV2
ZW50LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPnNjcm9sbC54
ID0gd2lkdGggLyAyOwotICAgIGV2ZW50LT5zY3JvbGwueSA9IGhlaWdodCAvIDI7Ci0gICAgZXZl
bnQtPnNjcm9sbC54X3Jvb3QgPSB4ICsgd2lkdGggLyAyOwotICAgIGV2ZW50LT5zY3JvbGwueV9y
b290ID0geSArIGhlaWdodCAvIDI7Ci0gICAgZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtf
U0NST0xMX1NNT09USDsKLSAgICBldmVudC0+c2Nyb2xsLmRlbHRhX3ggPSB4RGVsdGE7Ci0gICAg
ZXZlbnQtPnNjcm9sbC5kZWx0YV95ID0geURlbHRhOwotICAgIGV2ZW50LT5zY3JvbGwuc3RhdGUg
PSAwOwotICAgIGV2ZW50LT5zY3JvbGwuaXNfc3RvcCA9ICF4RGVsdGEgJiYgIXlEZWx0YTsKLSAg
ICBldmVudC0+c2Nyb2xsLndpbmRvdyA9IEdES19XSU5ET1coZ19vYmplY3RfcmVmKHdpbmRvdykp
OwotICAgIGdka19ldmVudF9zZXRfc2NyZWVuKGV2ZW50LmdldCgpLCBnZGtfd2luZG93X2dldF9z
Y3JlZW4od2luZG93KSk7Ci0KLSAgICBHZGtEZXZpY2UqIHBvaW50ZXIgPSBnZGtfc2VhdF9nZXRf
cG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9zZWF0KGdka193aW5kb3dfZ2V0X2Rpc3Bs
YXkod2luZG93KSkpOwotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50LmdldCgpLCBwb2lu
dGVyKTsKLSAgICBnZGtfZXZlbnRfc2V0X3NvdXJjZV9kZXZpY2UoZXZlbnQuZ2V0KCksIHBvaW50
ZXIpOwotCi0gICAgcmV0dXJuIGV2ZW50OwotfQotCiBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhTd2lwZURpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CiAgICAgaWYgKCFjYW5Td2lwZUluRGlyZWN0aW9uKGRpcmVjdGlvbikp
CkBAIC01NjEsMTcgKzU2NiwxNiBAQCBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5T
aW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhTd2lwZURpcmVjdAogICAgIGlmIChp
c1BoeXNpY2FsbHlTd2lwaW5nTGVmdChkaXJlY3Rpb24pKQogICAgICAgICBkZWx0YSA9IC1kZWx0
YTsKIAotICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQo
bV93ZWJQYWdlUHJveHkudmlld1dpZGdldCgpLCBkZWx0YSwgMCk7Ci0gICAgZ3RrX3dpZGdldF9l
dmVudChtX3dlYlBhZ2VQcm94eS52aWV3V2lkZ2V0KCksIGV2ZW50LmdldCgpKTsKKyAgICBQbGF0
Zm9ybUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9IHsgLmRlbHRhID0gZGVsdGEsIC5ldmVudFRp
bWUgPSBHREtfQ1VSUkVOVF9USU1FLCAuaXNUb3VjaCA9IGZhbHNlLCAuaXNFbmQgPSBmYWxzZSB9
OworICAgIGhhbmRsZVNjcm9sbFdoZWVsRXZlbnQoJnNjcm9sbERhdGEpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpjb21wbGV0ZVNpbXVsYXRl
ZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFN3aXBlRGlyZWN0aW9uKQogewotICAgIEdVbmlx
dWVQdHI8R2RrRXZlbnQ+IGV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQobV93ZWJQYWdlUHJveHku
dmlld1dpZGdldCgpLCAwLCAwKTsKLSAgICBndGtfd2lkZ2V0X2V2ZW50KG1fd2ViUGFnZVByb3h5
LnZpZXdXaWRnZXQoKSwgZXZlbnQuZ2V0KCkpOwotCisgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRh
IHNjcm9sbERhdGEgPSB7IC5kZWx0YSA9IDAsIC5ldmVudFRpbWUgPSBHREtfQ1VSUkVOVF9USU1F
LCAuaXNUb3VjaCA9IGZhbHNlLCAuaXNFbmQgPSB0cnVlIH07CisgICAgaGFuZGxlU2Nyb2xsV2hl
ZWxFdmVudCgmc2Nyb2xsRGF0YSk7CiAgICAgbV9pc1NpbXVsYXRlZFN3aXBlID0gZmFsc2U7CiAK
ICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427984</attachid>
            <date>2021-05-07 03:08:52 -0700</date>
            <delta_ts>2021-05-07 07:56:00 -0700</delta_ts>
            <desc>[fast-cq] Updated patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>79645</size>
            <attacher name="Carlos Garnacho">carlosg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc1YzVjYzE0NTMuLjExZmZkNmVmN2M3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDIxLTA1LTA1ICBDYXJsb3MgR2FybmFjaG8gIDxjYXJsb3NnQGdub21l
Lm9yZz4KKworICAgICAgICBbR1RLNF0gUmV3cml0ZSBHVEsgZ2VzdHVyZSBzdXBwb3J0IHRvIHdv
cmsgZm9yIGJvdGggMy54IGFuZCA0LnguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIzMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmg6CisgICAgICAg
IChndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF9zdGF0ZSk6CisgICAgICAg
IChndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF90aW1lKTogTmV3IEdUSzQg
cG9ydGFiaWxpdHkKKyAgICAgICAgaGVscGVyIG1ldGhvZHMuCisKIDIwMjEtMDUtMDMgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEJ1aWxk
IHdpdGggVklERU89T0ZGIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrVmVyc2lvbmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1Zl
cnNpb25pbmcuaAppbmRleCA3MjljZDI3NmVkZjAuLjc5NDFlOTExYzYyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCkBAIC0yNzYsNCArMjc2LDE4IEBA
IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KCkKICAgICByZXR1cm4gZ3RrX3Njcm9sbGVkX3dpbmRv
d19uZXcobnVsbHB0ciwgbnVsbHB0cik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgR2RrTW9kaWZpZXJU
eXBlCitndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF9zdGF0ZShHdGtFdmVu
dENvbnRyb2xsZXIqKQoreworICAgIEdka01vZGlmaWVyVHlwZSBtb2RpZmllcnM7CisgICAgZ3Rr
X2dldF9jdXJyZW50X2V2ZW50X3N0YXRlKCZtb2RpZmllcnMpOworICAgIHJldHVybiBtb2RpZmll
cnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK2d0a19ldmVudF9jb250cm9sbGVyX2dl
dF9jdXJyZW50X2V2ZW50X3RpbWUoR3RrRXZlbnRDb250cm9sbGVyKikKK3sKKyAgICByZXR1cm4g
Z3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKTsKK30KKwogI2VuZGlmIC8vIFVTRShHVEs0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBjYTU3ZGE0NGFhZWIuLmMwNTcwNTkxYmUxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMTYgQEAKKzIwMjEtMDUtMDUgIENhcmxvcyBHYXJuYWNobyAgPGNhcmxvc2dAZ25vbWUub3Jn
PgorCisgICAgICAgIFtHVEs0XSBSZXdyaXRlIEdUSyBnZXN0dXJlIHN1cHBvcnQgdG8gd29yayBm
b3IgYm90aCAzLnggYW5kIDQueC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjMyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJld3JpdGUgdGhlIHRvdWNoIGdlc3R1cmUgaGFuZGxpbmcgdG8gYXZvaWQg
R2RrRXZlbnQgYXMgYW4gZXhjaGFuZ2UKKyAgICAgICAgdG9rZW4sIGFuZCBub3QgcmVseSBvbiB0
aGUgd2ViIHZpZXcgYmVpbmcgYWJsZSB0byBob2xkIGFuZCByZS1yb3V0ZQorICAgICAgICB0aGVz
ZSBhdCB3aGltLiBUaGlzIG1ha2VzIHRvdWNoIGFuZCB0b3VjaHBhZCBnZXN0dXJlcyB3b3JrIG9u
IEdUSzMKKyAgICAgICAgYW5kIEdUSzQgaW4gc2ltaWxhciB3YXlzLCBhbmQgc28gdGhhdCBib3Ro
IHdvcmsuCisKKyAgICAgICAgRm9yIHRoaXMsIHRvdWNoIGV2ZW50IHByb3BhZ2F0aW9uIGdvdCBz
b21lIHN1YnN0YW50aWFsIGNoYW5nZXMsIGl0CisgICAgICAgIHVzZWQgdG8gd29yayBieSBmaXJz
dCBkZWxpdmVyaW5nIHRoZSB0b3VjaCBldmVudHMgdG8gdGhlIHdlYiBwYWdlLAorICAgICAgICBh
bmQgbWFudWFsbHkgZmVlZGluZyB0aGUgcmV0dXJuZWQrdW5oYW5kbGVkIG9uZXMgdG8gZ2VzdHVy
ZSBjb250cm9sbGVycy4KKyAgICAgICAgTm93IGV2ZW50IGRlbGl2ZXJ5IGlzIGRlbGVnYXRlZCBv
biBHVEssIGFuZCBoYXBwZW5zIHJpZ2h0IGF3YXkgb24KKyAgICAgICAgZ2VzdHVyZSBjb250cm9s
bGVycywgaXQgaXMgdGhlIFdlYmtpdFdlYlZpZXdCYXNlIHdoaWNoIGNob29zZXMgdG8gbWFrZQor
ICAgICAgICB0aGVtIGVmZmVjdGl2ZSBhZnRlciB0aGUgd2ViIHBhZ2UgKG1heWJlKSBoYW5kbGVk
IHRoZSBldmVudHMuIEdlc3R1cmVzCisgICAgICAgIGFyZSByZXNldCB3aGVuZXZlciB0aGUgd2Vi
IHBhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBoYW5kbGluZyB0b3VjaAorICAgICAgICBldmVudHMu
CisKKyAgICAgICAgQWxzbyBmaXggc29tZSBidWdsZXRzIGFjY3VtdWxhdGVkIGFsb25nIHRoZSB3
YXksIHdlYiB2aWV3IHpvb20gY29uZmxpY3RlZAorICAgICAgICB3aXRoIGluLXBhZ2Ugem9vbSBo
YW5kbGluZywgYW5kIFZpZXdHZXN0dXJlQ29udHJvbGxlciBwYWdlIHN3aXRjaGluZworICAgICAg
ICBjb25mbGljdGVkIHdpdGggcHJlc3MtZHJhZy1yZWxlYXNlIGVtdWxhdGlvbiBvbiB0aGUgd2Vi
IHBhZ2UuIFRoZXNlIG5vdworICAgICAgICB3b3JrIGJldHRlciBhbmQgY2xvc2VyIHRvIEd0a1Nj
cm9sbGVkV2luZG93IGJlaGF2aW9yLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhlIEdUSyB0
b3VjaCB0ZXN0cyB0aGF0IHNob3VsZCBjYXRjaCB0aGlzIHdlcmUgZGlzYWJsZWQKKyAgICAgICAg
aW4gdGhlIHBhc3QgYW5kIG5lZWQgZml4aW5nLiBUaGlzIHBhdGNoIHdpbGwgcmVxdWlyZSBtYW51
YWwgdGVzdGluZy4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBEcm9wIEdUSzQgY29u
ZGl0aW9uYWxzIGFyb3VuZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXIKKyAgICAgICAgKiBTb3VyY2Vz
R1RLLnR4dDogRHJvcCBHZXN0dXJlQ29udHJvbGxlci5jcHAuIEJ1aWxkIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcgorICAgICAgICBjb2RlIGZpbGVzIHVuY29uZGl0aW9uYWxseS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQpOiBEZWxlZ2F0ZSBoYW5kbGluZyBvbgor
ICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZS4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKTogVXNlIHBsYXRmb3JtCisgICAg
ICAgIGluZGVwZW5kZW50IHN0cnVjdCB0byBmb3J3YXJkIHNjcm9sbCB0byBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTbmFwc2hvdCk6IEludm9sdmUgVmlld0dl
c3R1cmVDb250cm9sbGVyIGluIHJlbmRlcmluZy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
QnV0dG9uUHJlc3NFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVh
c2VFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblByZXNzZWQpOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlZCk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50KTogSWdub3JlIHBvaW50ZXItZW11bGF0ZWQgZXZl
bnRzIGZyb20KKyAgICAgICAgdG91Y2hzY3JlZW5zLgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VIYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsKTog
IFVzZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBzdHJ1Y3QKKyAgICAgICAgdG8gZm9yd2FyZCBzY3Jv
bGwgdG8gVmlld0dlc3R1cmVDb250cm9sbGVyLgorICAgICAgICAoYXBwZW5kVG91Y2hFdmVudCk6
CisgICAgICAgICh0b3VjaFBvaW50U3RhdGVGb3JFdmVudHMpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VHZXRUb3VjaFBvaW50c0ZvckV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlVG91Y2hFdmVudCk6CisgICAgICAgIEdlbmVyYWxpemVkIHRvIHdvcmsgb24gYm90aCBHVEsz
IGFuZCBHVEs0LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2Vab29tQmVnaW4pOgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2Vab29tQ2hhbmdlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZVRvdWNoTG9uZ1ByZXNzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hQcmVz
cyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoUmVsZWFzZSk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0JlZ2luKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlVG91Y2hEcmFnVXBkYXRlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFn
RW5kKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnQ2FuY2VsKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hTd2lwZSk6IE5ld2x5IGFkZGVkIHRvdWNoIGdlc3R1
cmUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgY2FsbGJhY2tzLiBOb3QgZGVsZWdhdGVkIGFueW1v
cmUgb24gR2VzdHVyZUNvbnRyb2xsZXIuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNvbnN0
cnVjdGVkKTogQ3JlYXRlIHRvdWNoIGdlc3R1cmVzIGluIHRoZSBiYXNlIHZpZXcKKyAgICAgICAg
d2lkZ2V0LCBsZXQgdGhlbSBoYW5kbGUgZXZlbnRzIGF1dG9tYXRpY2FsbHkgaW5zdGVhZCBvZiBy
ZWx5aW5nIG9uCisgICAgICAgIG1hbnVhbCBldmVudCBmZWVkaW5nIHZpYSBndGtfZXZlbnRfY29u
dHJvbGxlcl9oYW5kbGVfZXZlbnQoKS4gQWxzbyBhZGQKKyAgICAgICAgYSBHdGtFdmVudENvbnRy
b2xsZXJMZWdhY3kgdG8gaGFuZGxlIGZvcndhcmRpbmcgb2YgcmF3IHRvdWNoIGV2ZW50cyB0bwor
ICAgICAgICB0aGUgd2ViIHBhZ2UgaW4gR1RLNC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
U2V0RW5hYmxlQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZSk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUJlZ2luQmFja1N3aXBlRm9yVGVzdGluZyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUNvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZVdpbGxTd2FwV2ViUHJvY2Vzcyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURpZEV4aXRX
ZWJQcm9jZXNzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9j
ZXNzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkU3RhcnRQcm92aXNpb25hbExvYWRG
b3JNYWluRnJhbWUpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VE
aWRGaW5pc2hOYXZpZ2F0aW9uKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkRmFpbE5h
dmlnYXRpb24pOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVzdG9y
ZVNjcm9sbFBvc2l0aW9uKTogUmVtb3ZlIGNvbmRpdGlvbmFscyBhcm91bmQKKyAgICAgICAgVmll
d0dlc3R1cmVDb250cm9sbGVyIGZvciBHVEs0LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VQ
YWdlR3JhYmJlZFRvdWNoKTogTmV3IG1ldGhvZCB0byB0YWcgdG91Y2ggZXZlbnRzCisgICAgICAg
IGFsdG9nZXRoZXIgYXMgaGFuZGxlZCBieSB0aGUgd2ViIHBhZ2UsIHRodXMgcmVzZXR0aW5nIGFu
eSBvbmdvaW5nIHZpZXctbGV2ZWwKKyAgICAgICAgZ2VzdHVyZSBoYW5kbGluZy4gVGhpcyBpbnZl
cnNpb24gaXMgbmVjZXNzYXJ5IGFzIGdlc3R1cmUgY29udHJvbGxlcnMgYXJlIG5vdworICAgICAg
ICBhbHdheXMgZmVkIGlucHV0IGV2ZW50cyBwYXJhbGxlbCB0byB3ZWIgcGFnZSB0b3VjaCBldmVu
dCBoYW5kbGluZy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIp
OiBEZWxldGVkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUV2ZW50KTogUmVtb3ZlZCB3aWRnZXRfY2xhc3MtPmV2
ZW50IHZmdW5jLiBUb3VjaHBhZCBnZXN0dXJlCisgICAgICAgIGV2ZW50IGZvcndhcmRpbmcgdG8g
ZXZlbnQgY29udHJvbGxlcnMgaXMgZGVsZWdhdGVkIG9uIEdUSy4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9HZXN0
dXJlQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuIEdlc3R1cmVzIGFyZSBpbXBsZW1lbnRlZCBpbgor
ICAgICAgICB0aGUgYmFzZSB2aWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvR2VzdHVyZUNv
bnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJl
Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmlzRXZlbnRTdG9wKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpz
Y3JvbGxFdmVudENhblN0YXJ0U3dpcGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNrZXI6OnNjcm9sbEV2ZW50Q2FuRW5kU3dpcGUpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNr
ZXI6OnNjcm9sbEV2ZW50Q2FuSW5mbHVlbmNlU3dpcGUpOgorICAgICAgICAoV2ViS2l0Ojppc1Rv
dWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTY3JvbGxFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Ny
b2xsRXZlbnRHZXRTY3JvbGxpbmdEZWx0YXMpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlUHJvZ3Jlc3NUcmFja2VyOjpoYW5kbGVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1
cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU2ltdWxh
dGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmNvbXBsZXRlU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3Rp
bmcpOiBEZWNsYXJlCisgICAgICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSwgYW5kIHVzZSBpdCBh
cyAicGxhdGZvcm0gc2Nyb2xsIGV2ZW50IiBmb3IgYm90aCBHVEszIGFuZCBHVEs0LgorICAgICAg
ICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnNuYXBzaG90KTogTmV3IEdUSzQgc3Bl
Y2lmaWMgbWV0aG9kIHRvIHJlbmRlcgorICAgICAgICB0aGUgcGFnZSBzd2l0Y2hpbmcgZ2VzdHVy
ZSBhY3Rpb24uCisKIDIwMjEtMDUtMDMgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtpT1NdIENyYXNoIHdoZW4gdGFwcGluZyBmaWVsZHMgb24gY3ljbGUu
dHJhdmVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBiMDE0NDdiYTRmNmMuLjZjZmFmMjg4
MmE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zMywyMCArMzMsMTEgQEAgbGlzdChB
UFBFTkQgV2ViS2l0X1VOSUZJRURfU09VUkNFX0xJU1RfRklMRVMKICAgICAiU291cmNlc0dUSy50
eHQiCiApCiAKLWlmIChOT1QgVVNFX0dUSzQpCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJD
RVMKLSAgICAgICAgVUlQcm9jZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAKLQotICAgICAg
ICBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKLQotICAgICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKLSAgICAp
Ci0gICAgbGlzdChBUFBFTkQgV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCi0gICAgICAgIFVJUHJv
Y2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIKK2xpc3QoQVBQRU5EIFdlYktpdF9NRVNTQUdFU19J
Tl9GSUxFUworICAgIFVJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIKIAotICAgICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3RvcgotICAgICkKLWVu
ZGlmICgpCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0
b3IKKykKIAogbGlzdChBUFBFTkQgV2ViS2l0X0RFUklWRURfU09VUkNFUwogICAgICR7V2ViS2l0
Mkd0a19ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUuYwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0dUSy50eHQKaW5kZXggYzg1ZjVjZTJhOGY0Li44OTRlNWQ0ZDMyNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dApAQCAtMTA1LDYgKzEwNSw3IEBAIFNoYXJlZC91bml4L0F1eGlsaWFyeVByb2Nlc3NN
YWluLmNwcAogVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKIFVJUHJvY2Vzcy9EZWZhdWx0VW5k
b0NvbnRyb2xsZXIuY3BwCiBVSVByb2Nlc3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5j
cHAKK1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwCiBVSVByb2Nlc3MvVmlld1Nu
YXBzaG90U3RvcmUuY3BwCiBVSVByb2Nlc3MvV2ViR3JhbW1hckRldGFpbC5jcHAKIFVJUHJvY2Vz
cy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCkBAIC0yNTIsNyArMjUzLDYgQEAgVUlQcm9j
ZXNzL2d0ay9DbGlwYm9hcmQuY3BwCiBVSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azMuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9ndGsvV2ViRGF0ZVRpbWVQaWNrZXJHdGsuY3BwCi1VSVByb2Nlc3MvZ3RrL0dlc3R1cmVD
b250cm9sbGVyLmNwcAogVUlQcm9jZXNzL2d0ay9IYXJkd2FyZUFjY2VsZXJhdGlvbk1hbmFnZXIu
Y3BwCiBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAogVUlQcm9jZXNzL2d0
ay9Qb2ludGVyTG9ja01hbmFnZXIuY3BwIEBuby11bmlmeQpAQCAtMjYwLDYgKzI2MCw3IEBAIFVJ
UHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBVSVBy
b2Nlc3MvZ3RrL1BvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
Z3RrL1RleHRDaGVja2VyR3RrLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvVmlld1NuYXBz
aG90U3RvcmVHdGsuY3BwCitVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5j
cHAKIFVJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwIEBuby11bmlmeQogVUlQcm9j
ZXNzL2d0ay9XZWJDb2xvclBpY2tlckd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1l
bnVQcm94eUd0ay5jcHAKQEAgLTQxNSw2ICs0MTYsNyBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKIAogV2ViUHJvY2Vzcy9XZWJQYWdl
L0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKK1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yLmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRl
eCAyY2Y0ZjQzM2Q4MmQuLjJmYmNiMzI3NDBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTQxMiw2NSArNDEyLDggQEAg
dm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiAv
KiBpbml0aWFsRnJhbWUgKi8sIGNvbnMKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZl
bnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKIHsKLSNpZiAhVVNFKEdUSzQpCi0gICAg
Y29uc3QgR2RrRXZlbnQqIHRvdWNoRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudCgpOwotICAgIGlm
ICghdG91Y2hFdmVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2VzdHVyZUNvbnRyb2xsZXIm
IGdlc3R1cmVDb250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VHZXN0dXJlQ29udHJvbGxlcihX
RUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKLSAgICBpZiAod2FzRXZlbnRIYW5k
bGVkKSB7Ci0gICAgICAgIGdlc3R1cmVDb250cm9sbGVyLnJlc2V0KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgd2FzRXZlbnRIYW5kbGVkID0gZ2VzdHVyZUNvbnRyb2xsZXIuaGFuZGxl
RXZlbnQoY29uc3RfY2FzdDxHZGtFdmVudCo+KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKTsKLQogICAg
IGlmICh3YXNFdmVudEhhbmRsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVtdWxhdGUg
cG9pbnRlciBldmVudHMgaWYgdW5oYW5kbGVkLgotICAgIGlmICghdG91Y2hFdmVudC0+dG91Y2gu
ZW11bGF0aW5nX3BvaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdVbmlxdWVQdHI8R2Rr
RXZlbnQ+IHBvaW50ZXJFdmVudDsKLQotICAgIGlmICh0b3VjaEV2ZW50LT50eXBlID09IEdES19U
T1VDSF9VUERBVEUpIHsKLSAgICAgICAgcG9pbnRlckV2ZW50LnJlc2V0KGdka19ldmVudF9uZXco
R0RLX01PVElPTl9OT1RJRlkpKTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24udGltZSA9
IHRvdWNoRXZlbnQtPnRvdWNoLnRpbWU7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+bW90aW9uLngg
PSB0b3VjaEV2ZW50LT50b3VjaC54OwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi55ID0g
dG91Y2hFdmVudC0+dG91Y2gueTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ueF9yb290
ID0gdG91Y2hFdmVudC0+dG91Y2gueF9yb290OwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlv
bi55X3Jvb3QgPSB0b3VjaEV2ZW50LT50b3VjaC55X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVu
dC0+bW90aW9uLnN0YXRlID0gdG91Y2hFdmVudC0+dG91Y2guc3RhdGUgfCBHREtfQlVUVE9OMV9N
QVNLOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAodG91Y2hFdmVudC0+dHlwZSkgewot
ICAgICAgICBjYXNlIEdES19UT1VDSF9DQU5DRUw6Ci0gICAgICAgICAgICBGQUxMVEhST1VHSDsK
LSAgICAgICAgY2FzZSBHREtfVE9VQ0hfRU5EOgotICAgICAgICAgICAgcG9pbnRlckV2ZW50LnJl
c2V0KGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9SRUxFQVNFKSk7Ci0gICAgICAgICAgICBwb2lu
dGVyRXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IHRvdWNoRXZlbnQtPnRvdWNoLnN0YXRlIHwgR0RLX0JV
VFRPTjFfTUFTSzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19UT1VDSF9C
RUdJTjoKLSAgICAgICAgICAgIHBvaW50ZXJFdmVudC5yZXNldChnZGtfZXZlbnRfbmV3KEdES19C
VVRUT05fUFJFU1MpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwb2lu
dGVyRXZlbnQtPmJ1dHRvbi5idXR0b24gPSAxOwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRv
bi50aW1lID0gdG91Y2hFdmVudC0+dG91Y2gudGltZTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5i
dXR0b24ueCA9IHRvdWNoRXZlbnQtPnRvdWNoLng7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0
dG9uLnkgPSB0b3VjaEV2ZW50LT50b3VjaC55OwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRv
bi54X3Jvb3QgPSB0b3VjaEV2ZW50LT50b3VjaC54X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVu
dC0+YnV0dG9uLnlfcm9vdCA9IHRvdWNoRXZlbnQtPnRvdWNoLnlfcm9vdDsKLSAgICB9Ci0KLSAg
ICBnZGtfZXZlbnRfc2V0X2RldmljZShwb2ludGVyRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRf
ZGV2aWNlKHRvdWNoRXZlbnQpKTsKLSAgICBnZGtfZXZlbnRfc2V0X3NvdXJjZV9kZXZpY2UocG9p
bnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2UodG91Y2hFdmVudCkp
OwotICAgIHBvaW50ZXJFdmVudC0+YW55LndpbmRvdyA9IEdES19XSU5ET1coZ19vYmplY3RfcmVm
KHRvdWNoRXZlbnQtPmFueS53aW5kb3cpKTsKLSAgICBwb2ludGVyRXZlbnQtPmFueS5zZW5kX2V2
ZW50ID0gVFJVRTsKLQotICAgIGd0a193aWRnZXRfZXZlbnQobV92aWV3V2lkZ2V0LCBwb2ludGVy
RXZlbnQuZ2V0KCkpOwotI2VuZGlmCisgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlUGFnZUdyYWJi
ZWRUb3VjaChXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpKTsKIH0KICNlbmRpZiAv
LyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCkBAIC00ODIsNyArNDI1LDEyIEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdl
YldoZWVsRXZlbnQmCiAjaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciog
Y29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKFdFQktJ
VF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOwogICAgIGlmIChjb250cm9sbGVyICYmIGNv
bnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7Ci0gICAgICAgIGNvbnRyb2xsZXIt
PndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKCZldmVudC5uYXRpdmVFdmVudCgpLT5z
Y3JvbGwpOworICAgICAgICBkb3VibGUgZGVsdGFYOworICAgICAgICBnZGtfZXZlbnRfZ2V0X3Nj
cm9sbF9kZWx0YXMoZXZlbnQubmF0aXZlRXZlbnQoKSwgJmRlbHRhWCwgbnVsbHB0cik7CisgICAg
ICAgIGJvb2wgaXNFbmQgPSBnZGtfZXZlbnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQubmF0
aXZlRXZlbnQoKSkgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIGludDMyX3QgZXZlbnRUaW1lID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4oZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50Lm5hdGl2ZUV2ZW50
KCkpKTsKKyAgICAgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRhIHNjcm9sbERhdGEgPSB7IC5kZWx0
YSA9IGRlbHRhWCwgLmV2ZW50VGltZSA9IGV2ZW50VGltZSwgLmlzVG91Y2ggPSBmYWxzZSwgLmlz
RW5kID0gaXNFbmQgfTsKKyAgICAgICAgY29udHJvbGxlci0+d2hlZWxFdmVudFdhc05vdEhhbmRs
ZWRCeVdlYkNvcmUoJnNjcm9sbERhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCmluZGV4IDU3OGJmOTgyNzhiYS4uNmI1OTdlNTExMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMzE2
LDExICszMTYsOSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPERyb3BUYXJnZXQ+IGRyb3BUYXJnZXQ7CiAjZW5kaWYKIAotI2lmICFVU0Uo
R1RLNCkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXI+IGdlc3R1cmVDb250
cm9sbGVyOworICAgIEd0a0dlc3R1cmUqIHRvdWNoR2VzdHVyZUdyb3VwOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IHZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAg
ICBib29sIGlzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZUVuYWJsZWQgeyBmYWxzZSB9Owot
I2VuZGlmCiAKICNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyNCwgMCkKICAgICBHdGtXaWRnZXQq
IGVtb2ppQ2hvb3NlcjsKQEAgLTMyOCw2ICszMjYsMTQgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUgewogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZT4gcmVsZWFzZUVtb2ppQ2hvb3NlclRpbWVyOwogI2VuZGlmCiAKKyAgICAvLyBUb3VjaCBnZXN0
dXJlcyBzdGF0ZQorICAgIGRvdWJsZSBpbml0aWFsWm9vbVNjYWxlOworICAgIEludFBvaW50IGlu
aXRpYWxab29tUG9pbnQ7CisgICAgRmxvYXRQb2ludCBkcmFnT2Zmc2V0OworICAgIGJvb2wgaXNM
b25nUHJlc3NlZDsKKyAgICBib29sIGlzQmVpbmdEcmFnZ2VkOworICAgIGJvb2wgcGFnZUdyYWJi
ZWRUb3VjaDsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2ludGVyTG9ja01hbmFnZXI+IHBvaW50
ZXJMb2NrTWFuYWdlcjsKIH07CiAKQEAgLTc0Niw5ICs3NTIsMjEgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VTbmFwc2hvdChHdGtXaWRnZXQqIHdpZGdldCwgR3RrU25hcHNob3QqIHNu
YXBzaG90KQogICAgIGlmICghZHJhd2luZ0FyZWEpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8qIHBhZ2VTbmFwc2hvdCA9IGd0a19zbmFwc2hvdF9uZXcoKTsKICAgICBpZiAoIXdlYlZpZXdC
YXNlLT5wcml2LT5pc0JsYW5rKSB7CiAgICAgICAgIEFTU0VSVChkcmF3aW5nQXJlYS0+aXNJbkFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+
YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUtPnNuYXBzaG90KHNuYXBzaG90KTsKKyAgICAgICAgd2Vi
Vmlld0Jhc2UtPnByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT5zbmFwc2hvdChwYWdlU25h
cHNob3QpOworICAgIH0KKworICAgIGlmIChhdXRvKiBwYWdlUmVuZGVyTm9kZSA9IGd0a19zbmFw
c2hvdF9mcmVlX3RvX25vZGUocGFnZVNuYXBzaG90KSkgeworICAgICAgICBib29sIHNob3dpbmdO
YXZpZ2F0aW9uU25hcHNob3QgPSB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5pc1Nob3dp
bmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7CisgICAgICAgIGF1dG8qIGNvbnRyb2xsZXIg
PSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSk7Cisg
ICAgICAgIGlmIChzaG93aW5nTmF2aWdhdGlvblNuYXBzaG90ICYmIGNvbnRyb2xsZXIpCisgICAg
ICAgICAgICBjb250cm9sbGVyLT5zbmFwc2hvdChzbmFwc2hvdCwgcGFnZVJlbmRlck5vZGUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBndGtfc25hcHNob3RfYXBwZW5kX25vZGUoc25hcHNo
b3QsIHBhZ2VSZW5kZXJOb2RlKTsKKworICAgICAgICBnc2tfcmVuZGVyX25vZGVfdW5yZWYocGFn
ZVJlbmRlck5vZGUpOwogICAgIH0KIAogICAgIGlmICh3ZWJWaWV3QmFzZS0+cHJpdi0+aW5zcGVj
dG9yVmlldykKQEAgLTExNTcsNiArMTE3NSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QmFzZUJ1dHRvblByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0CiAg
ICAgaWYgKHByaXYtPmRpYWxvZykKICAgICAgICAgcmV0dXJuIEdES19FVkVOVF9TVE9QOwogCisg
ICAgaWYgKGdka19kZXZpY2VfZ2V0X3NvdXJjZShnZGtfZXZlbnRfZ2V0X3NvdXJjZV9kZXZpY2Uo
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkpID09IEdES19TT1VSQ0VfVE9VQ0hT
Q1JFRU4pCisgICAgICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19i
YXNlX3BhcmVudF9jbGFzcyktPmJ1dHRvbl9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKKwog
ICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgcmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CiAKICAgICByZXR1cm4gR0RLX0VWRU5UX1NU
T1A7CkBAIC0xMTY5LDYgKzExOTAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VCdXR0b25SZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QgogCiAgICAg
aWYgKHByaXYtPmRpYWxvZykKICAgICAgICAgcmV0dXJuIEdES19FVkVOVF9TVE9QOworICAgIGlm
IChnZGtfZGV2aWNlX2dldF9zb3VyY2UoZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHJlaW50
ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpKSA9PSBHREtfU09VUkNFX1RPVUNIU0NSRUVO
KQorICAgICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9w
YXJlbnRfY2xhc3MpLT5idXR0b25fcmVsZWFzZV9ldmVudCh3aWRnZXQsIGV2ZW50KTsKIAogICAg
IHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgcmVpbnRlcnBy
ZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CiAKQEAgLTExNzksNiArMTIwMiw4IEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VFdmVudChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnRCCiAjaWYgVVNFKEdUSzQpCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUJ1dHRvblByZXNzZWQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBpbnQg
Y2xpY2tDb3VudCwgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQogewor
ICAgIGlmIChndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RV
UkVfU0lOR0xFKGdlc3R1cmUpKSkKKyAgICAgICAgcmV0dXJuOwogICAgIFdlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogICAgIGlmIChwcml2LT5kaWFs
b2cpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMDIsNiArMTIyNyw4IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NlZChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UsIGludCBjCiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUmVsZWFzZWQo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBpbnQgY2xpY2tDb3VudCwgZG91YmxlIHgs
IGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQogeworICAgIGlmIChndGtfZ2VzdHVyZV9z
aW5nbGVfZ2V0X2N1cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKSkK
KyAgICAgICAgcmV0dXJuOwogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXdCYXNlLT5wcml2OwogICAgIGlmIChwcml2LT5kaWFsb2cpCiAgICAgICAgIHJldHVybjsK
QEAgLTEyMzQsOCArMTI2MSwxNSBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnZlcnREaXJlY3Rpb25G
b3JTY3JvbGxFdmVudChXZWJIaXRUZXN0UmVzdWx0RGF0YTo6SXNTY3JvbGxiYQogc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVXaGVlbEV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmFzZSwgR2RrRXZlbnQqIGV2ZW50LCBPcHRpb25hbDxXZWJXaGVlbEV2ZW50OjpQaGFz
ZT4gcGhhc2UgPSBXVEY6Om51bGxvcHQsIE9wdGlvbmFsPFdlYldoZWVsRXZlbnQ6OlBoYXNlPiBt
b21lbnR1bSA9IFdURjo6bnVsbG9wdCkKIHsKICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3
QmFzZSk7Ci0gICAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdlc3R1cmVF
bmFibGVkKCkgJiYgY29udHJvbGxlci0+aGFuZGxlU2Nyb2xsV2hlZWxFdmVudChyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50U2Nyb2xsKj4oZXZlbnQpKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGRvdWJsZSBkZWx0YVg7CisgICAgICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRh
cyhldmVudCwgJmRlbHRhWCwgbnVsbHB0cik7CisgICAgICAgIGJvb2wgaXNFbmQgPSBnZGtfZXZl
bnRfaXNfc2Nyb2xsX3N0b3BfZXZlbnQoZXZlbnQpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICBp
bnQzMl90IGV2ZW50VGltZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGdka19ldmVudF9nZXRfdGlt
ZShldmVudCkpOworICAgICAgICBQbGF0Zm9ybUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9IHsg
LmRlbHRhID0gZGVsdGFYLCAuZXZlbnRUaW1lID0gZXZlbnRUaW1lLCAuaXNUb3VjaCA9IGZhbHNl
LCAuaXNFbmQgPSBpc0VuZCB9OworICAgICAgICBpZiAoY29udHJvbGxlci0+aGFuZGxlU2Nyb2xs
V2hlZWxFdmVudCgmc2Nyb2xsRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCiAg
ICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAg
ICAgQVNTRVJUKCFwcml2LT5kaWFsb2cpOwpAQCAtMTI4MywxMyArMTMxNywyMiBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VTY3JvbGxFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRTY3JvbGwqCiAjZW5kaWYKIAogI2lmIFVTRShHVEs0KQotc3RhdGljIGdib29sZWFu
IHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwg
ZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgR3RrRXZlbnRDb250cm9sbGVyKiBjb250cm9s
bGVyKQorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSwgZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSwgR3RrRXZl
bnRDb250cm9sbGVyKiBldmVudENvbnRyb2xsZXIpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAgICAgaWYgKHByaXYtPmRpYWxvZykK
ICAgICAgICAgcmV0dXJuIEdES19FVkVOVF9QUk9QQUdBVEU7CiAKLSAgICBhdXRvKiBldmVudCA9
IGd0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50KGNvbnRyb2xsZXIpOworICAg
IGF1dG8qIGV2ZW50ID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnQoZXZl
bnRDb250cm9sbGVyKTsKKworICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9
IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAg
ICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkg
eworICAgICAgICBib29sIGlzRW5kID0gZ2RrX3Njcm9sbF9ldmVudF9pc19zdG9wKGV2ZW50KSA/
IHRydWUgOiBmYWxzZTsKKyAgICAgICAgaW50MzJfdCBldmVudFRpbWUgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3VycmVudF9ldmVudF90aW1lKGV2ZW50
Q29udHJvbGxlcikpOworICAgICAgICBQbGF0Zm9ybUd0a1Njcm9sbERhdGEgc2Nyb2xsRGF0YSA9
IHsgLmRlbHRhID0gZGVsdGFYLCAuZXZlbnRUaW1lID0gZXZlbnRUaW1lLCAuaXNUb3VjaCA9IGZh
bHNlLCAuaXNFbmQgPSBpc0VuZCB9OworICAgICAgICBpZiAoY29udHJvbGxlci0+aGFuZGxlU2Ny
b2xsV2hlZWxFdmVudCgmc2Nyb2xsRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gR0RLX0VWRU5U
X1NUT1A7CisgICAgfQogCiAgICAgaWYgKHNob3VsZEludmVydERpcmVjdGlvbkZvclNjcm9sbEV2
ZW50KHByaXYtPm1vdXNlSXNPdmVyU2Nyb2xsYmFyLCBnZGtfZXZlbnRfZ2V0X21vZGlmaWVyX3N0
YXRlKGV2ZW50KSAmIEdES19TSElGVF9NQVNLKSkKICAgICAgICAgc3RkOjpzd2FwKGRlbHRhWCwg
ZGVsdGFZKTsKQEAgLTEzMzAsNiArMTM3Myw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vCiAg
ICAgICAgIHJldHVybiB3aWRnZXRDbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA/IHdpZGdldENs
YXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50KHdpZGdldCwgZXZlbnQpIDogR0RLX0VWRU5UX1BST1BB
R0FURTsKICAgICB9CiAKKyAgICBpZiAoZ2RrX2RldmljZV9nZXRfc291cmNlKGdka19ldmVudF9n
ZXRfc291cmNlX2RldmljZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSkgPT0g
R0RLX1NPVVJDRV9UT1VDSFNDUkVFTikKKyAgICAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mo
d2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+bW90aW9uX25vdGlmeV9ldmVudCh3
aWRnZXQsIGV2ZW50KTsKKwogICAgIGlmIChwcml2LT5wb2ludGVyTG9ja01hbmFnZXIpIHsKICAg
ICAgICAgZG91YmxlIHgsIHk7CiAgICAgICAgIGdka19ldmVudF9nZXRfcm9vdF9jb29yZHMocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJngsICZ5KTsKQEAgLTE0NTMsMTEgKzE0
OTksMTYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VMZWF2ZShXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UsIEdka0Nyb3NzaW5nTW8KIH0KICNlbmRpZgogCi0jaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykgJiYgIVVTRShHVEs0KQotc3RhdGljIHZvaWQgYXBwZW5kVG91Y2hFdmVu
dChWZWN0b3I8V2ViUGxhdGZvcm1Ub3VjaFBvaW50PiYgdG91Y2hQb2ludHMsIGNvbnN0IEdka0V2
ZW50KiBldmVudCwgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgc3RhdGUp
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3N0YXRpYyB2b2lkIGFwcGVuZFRvdWNoRXZlbnQo
R3RrV2lkZ2V0KiB3ZWJWaWV3QmFzZSwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQb2ludD4mIHRv
dWNoUG9pbnRzLCBHZGtFdmVudCogZXZlbnQsIFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQ
b2ludFN0YXRlIHN0YXRlKQogewogICAgIGdkb3VibGUgeCwgeTsKICAgICBnZGtfZXZlbnRfZ2V0
X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKKyNpZiBVU0UoR1RLNCkKKyAgICAvLyBFdmVudHMgaW4g
R1RLNCBhcmUgZ2l2ZW4gaW4gbmF0aXZlIHN1cmZhY2UgY29vcmRpbmF0ZXMKKyAgICBndGtfd2lk
Z2V0X3RyYW5zbGF0ZV9jb29yZGluYXRlcyhHVEtfV0lER0VUKGd0a193aWRnZXRfZ2V0X25hdGl2
ZSh3ZWJWaWV3QmFzZSkpLAorICAgICAgICB3ZWJWaWV3QmFzZSwgeCwgeSwgJngsICZ5KTsKKyNl
bmRpZgogCiAgICAgZ2RvdWJsZSB4Um9vdCwgeVJvb3Q7CiAgICAgZ2RrX2V2ZW50X2dldF9yb290
X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3QpOwpAQCAtMTQ2NiwxMiArMTUxNywxMiBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRUb3VjaEV2ZW50KFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ+
JiB0b3VjaFBvaW50cywgY29uc3QgRwogICAgIHRvdWNoUG9pbnRzLnVuY2hlY2tlZEFwcGVuZChX
ZWJQbGF0Zm9ybVRvdWNoUG9pbnQoaWRlbnRpZmllciwgc3RhdGUsIEludFBvaW50KHhSb290LCB5
Um9vdCksIEludFBvaW50KHgsIHkpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgV2ViUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaFBvaW50U3RhdGUgdG91Y2hQb2ludFN0YXRlRm9yRXZlbnRzKGNvbnN0
IEdka0V2ZW50KiBjdXJyZW50LCBjb25zdCBHZGtFdmVudCogZXZlbnQpCitzdGF0aWMgaW5saW5l
IFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQb2ludFN0YXRlIHRvdWNoUG9pbnRTdGF0ZUZv
ckV2ZW50cyhHZGtFdmVudCogY3VycmVudCwgR2RrRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChn
ZGtfZXZlbnRfZ2V0X2V2ZW50X3NlcXVlbmNlKGN1cnJlbnQpICE9IGdka19ldmVudF9nZXRfZXZl
bnRfc2VxdWVuY2UoZXZlbnQpKQogICAgICAgICByZXR1cm4gV2ViUGxhdGZvcm1Ub3VjaFBvaW50
OjpUb3VjaFN0YXRpb25hcnk7CiAKLSAgICBzd2l0Y2ggKGN1cnJlbnQtPnR5cGUpIHsKKyAgICBz
d2l0Y2ggKGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShldmVudCkpIHsKICAgICBjYXNlIEdES19U
T1VDSF9VUERBVEU6CiAgICAgICAgIHJldHVybiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
TW92ZWQ7CiAgICAgY2FzZSBHREtfVE9VQ0hfQkVHSU46CkBAIC0xNDkyLDE1ICsxNTQzLDIwIEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlR2V0VG91Y2hQb2ludHNGb3JFdmVudChXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0JhCiAgICAgYm9vbCB0b3VjaEVuZCA9ICh0eXBlID09IEdE
S19UT1VDSF9FTkQpIHx8ICh0eXBlID09IEdES19UT1VDSF9DQU5DRUwpOwogICAgIHRvdWNoUG9p
bnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodG91Y2hFbmQgPyBwcml2LT50b3VjaEV2ZW50cy5z
aXplKCkgKyAxIDogcHJpdi0+dG91Y2hFdmVudHMuc2l6ZSgpKTsKIAorICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBp
dCA6IHByaXYtPnRvdWNoRXZlbnRzKQotICAgICAgICBhcHBlbmRUb3VjaEV2ZW50KHRvdWNoUG9p
bnRzLCBpdC52YWx1ZS5nZXQoKSwgdG91Y2hQb2ludFN0YXRlRm9yRXZlbnRzKGl0LnZhbHVlLmdl
dCgpLCBldmVudCkpOworICAgICAgICBhcHBlbmRUb3VjaEV2ZW50KHdpZGdldCwgdG91Y2hQb2lu
dHMsIGl0LnZhbHVlLmdldCgpLCB0b3VjaFBvaW50U3RhdGVGb3JFdmVudHMoaXQudmFsdWUuZ2V0
KCksIGV2ZW50KSk7CiAKICAgICAvLyBUb3VjaCB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhl
IFRvdWNoRXZlbnRzTWFwLCBhZGQgaXQgaGVyZS4KICAgICBpZiAodG91Y2hFbmQpCi0gICAgICAg
IGFwcGVuZFRvdWNoRXZlbnQodG91Y2hQb2ludHMsIGV2ZW50LCBXZWJQbGF0Zm9ybVRvdWNoUG9p
bnQ6OlRvdWNoUmVsZWFzZWQpOworICAgICAgICBhcHBlbmRUb3VjaEV2ZW50KHdpZGdldCwgdG91
Y2hQb2ludHMsIGV2ZW50LCBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQpOwog
fQogCisjaWYgVVNFKEdUSzQpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VUb3Vj
aEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQpCisjZWxzZQogc3RhdGlj
IGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRUb3VjaCogZXZlbnQpCisjZW5kaWYKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwogICAgIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwpAQCAtMTUxNCw2ICsx
NTcwLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUb3VjaCogZXYKICAgICBHZGtFdmVudFR5cGUgdHlwZSA9
IGdka19ldmVudF9nZXRfZXZlbnRfdHlwZSh0b3VjaEV2ZW50KTsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIEdES19UT1VDSF9CRUdJTjogeworICAgICAgICBpZiAocHJpdi0+dG91Y2hF
dmVudHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcHJpdi0+cGFnZUdyYWJiZWRUb3VjaCA9IGZh
bHNlOwogICAgICAgICBBU1NFUlQoIXByaXYtPnRvdWNoRXZlbnRzLmNvbnRhaW5zKHNlcXVlbmNl
KSk7CiAgICAgICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9jb3B5KHRv
dWNoRXZlbnQpKTsKICAgICAgICAgcHJpdi0+dG91Y2hFdmVudHMuYWRkKHNlcXVlbmNlLCBXVEZN
b3ZlKGV2ZW50KSk7CkBAIC0xNTMyLDE0OSArMTU5MCwyNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFRvdWNo
KiBldgogICAgICAgICBwcml2LT50b3VjaEV2ZW50cy5yZW1vdmUoc2VxdWVuY2UpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyNpZiAhVVNFKEdUSzQpCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIHJldHVybiBHREtf
RVZFTlRfUFJPUEFHQVRFOwogICAgIH0KIAogICAgIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9p
bnQ+IHRvdWNoUG9pbnRzOwogICAgIHdlYmtpdFdlYlZpZXdCYXNlR2V0VG91Y2hQb2ludHNGb3JF
dmVudCh3ZWJWaWV3QmFzZSwgdG91Y2hFdmVudCwgdG91Y2hQb2ludHMpOwogICAgIHByaXYtPnBh
Z2VQcm94eS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHJlaW50ZXJwcmV0
X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIFdURk1vdmUodG91Y2hQb2ludHMpKSk7CiAKLSAgICBy
ZXR1cm4gR0RLX0VWRU5UX1NUT1A7CisjaWYgVVNFKEdUSzQpCisgICAgcmV0dXJuIEdES19FVkVO
VF9QUk9QQUdBVEU7CisjZWxzZQorICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93
ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPnRvdWNoX2V2ZW50KHdpZGdldCwgZXZlbnQpOwor
I2VuZGlmCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKIAotI2lmICFVU0UoR1RL
NCkKLWNsYXNzIFRvdWNoR2VzdHVyZUNvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgR2VzdHVyZUNv
bnRyb2xsZXJDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgVG91Y2hHZXN0dXJlQ29udHJvbGxlcihXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UpCi0gICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXdCYXNlKQotICAgIHsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGNyZWF0ZVNj
cm9sbEV2ZW50KEdka0V2ZW50VG91Y2gqIGV2ZW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRmxvYXRQb2ludCYgZGVsdGEsIGJvb2wgaXNTdG9wID0gZmFsc2UpCi0gICAgewotICAg
ICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudChnZGtfZXZlbnRfbmV3KEdES19T
Q1JPTEwpKTsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC50aW1lID0gZXZlbnQtPnRpbWU7
Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwueCA9IHBvaW50LngoKTsKLSAgICAgICAgc2Ny
b2xsRXZlbnQtPnNjcm9sbC55ID0gcG9pbnQueSgpOwotICAgICAgICBzY3JvbGxFdmVudC0+c2Ny
b2xsLnhfcm9vdCA9IGV2ZW50LT54X3Jvb3Q7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwu
eV9yb290ID0gZXZlbnQtPnlfcm9vdDsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5kaXJl
Y3Rpb24gPSBHREtfU0NST0xMX1NNT09USDsKLSAgICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC5k
ZWx0YV94ID0gZGVsdGEueCgpOwotICAgICAgICBzY3JvbGxFdmVudC0+c2Nyb2xsLmRlbHRhX3kg
PSBkZWx0YS55KCk7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuc3RhdGUgPSBldmVudC0+
c3RhdGU7Ci0gICAgICAgIHNjcm9sbEV2ZW50LT5zY3JvbGwuaXNfc3RvcCA9IGlzU3RvcDsKLSAg
ICAgICAgc2Nyb2xsRXZlbnQtPnNjcm9sbC53aW5kb3cgPSBldmVudC0+d2luZG93ID8gR0RLX1dJ
TkRPVyhnX29iamVjdF9yZWYoZXZlbnQtPndpbmRvdykpIDogbnVsbHB0cjsKLSAgICAgICAgYXV0
byogdG91Y2hFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCk7Ci0gICAg
ICAgIGdka19ldmVudF9zZXRfc2NyZWVuKHNjcm9sbEV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0
X3NjcmVlbih0b3VjaEV2ZW50KSk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHNjcm9s
bEV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X2RldmljZSh0b3VjaEV2ZW50KSk7Ci0gICAgICAg
IGdka19ldmVudF9zZXRfc291cmNlX2RldmljZShzY3JvbGxFdmVudC5nZXQoKSwgZ2RrX2V2ZW50
X2dldF9zb3VyY2VfZGV2aWNlKHRvdWNoRXZlbnQpKTsKLSAgICAgICAgcmV0dXJuIHNjcm9sbEV2
ZW50OwotICAgIH0KLQotICAgIHZvaWQgc2ltdWxhdGVNb3VzZUNsaWNrKEdka0V2ZW50VG91Y2gq
IGV2ZW50LCB1bnNpZ25lZCBidXR0b24pCi0gICAgewotICAgICAgICBHVW5pcXVlUHRyPEdka0V2
ZW50PiBwb2ludGVyRXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfTU9USU9OX05PVElGWSkpOwotICAg
ICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi50aW1lID0gZXZlbnQtPnRpbWU7Ci0gICAgICAgIHBv
aW50ZXJFdmVudC0+bW90aW9uLnggPSBldmVudC0+eDsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5t
b3Rpb24ueSA9IGV2ZW50LT55OwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi54X3Jvb3Qg
PSBldmVudC0+eF9yb290OwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi55X3Jvb3QgPSBl
dmVudC0+eV9yb290OwotICAgICAgICBwb2ludGVyRXZlbnQtPm1vdGlvbi5zdGF0ZSA9IGV2ZW50
LT5zdGF0ZTsKLSAgICAgICAgcG9pbnRlckV2ZW50LT5tb3Rpb24ud2luZG93ID0gZXZlbnQtPndp
bmRvdyA/IEdES19XSU5ET1coZ19vYmplY3RfcmVmKGV2ZW50LT53aW5kb3cpKSA6IG51bGxwdHI7
Ci0gICAgICAgIGF1dG8qIHRvdWNoRXZlbnQgPSByZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4o
ZXZlbnQpOwotICAgICAgICBnZGtfZXZlbnRfc2V0X3NjcmVlbihwb2ludGVyRXZlbnQuZ2V0KCks
IGdka19ldmVudF9nZXRfc2NyZWVuKHRvdWNoRXZlbnQpKTsKLSAgICAgICAgZ2RrX2V2ZW50X3Nl
dF9kZXZpY2UocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X2RldmljZSh0b3VjaEV2
ZW50KSk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfc291cmNlX2RldmljZShwb2ludGVyRXZlbnQu
Z2V0KCksIGdka19ldmVudF9nZXRfc291cmNlX2RldmljZSh0b3VjaEV2ZW50KSk7Ci0gICAgICAg
IHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudChtX3dlYlZpZXcsIHBvaW50ZXJFdmVu
dC5nZXQoKSk7Ci0KLSAgICAgICAgcG9pbnRlckV2ZW50LnJlc2V0KGdka19ldmVudF9uZXcoR0RL
X0JVVFRPTl9QUkVTUykpOwotICAgICAgICBwb2ludGVyRXZlbnQtPmJ1dHRvbi5idXR0b24gPSBi
dXR0b247Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLnRpbWUgPSBldmVudC0+dGltZTsK
LSAgICAgICAgcG9pbnRlckV2ZW50LT5idXR0b24ueCA9IGV2ZW50LT54OwotICAgICAgICBwb2lu
dGVyRXZlbnQtPmJ1dHRvbi55ID0gZXZlbnQtPnk7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0
dG9uLnhfcm9vdCA9IGV2ZW50LT54X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0dG9u
Lnlfcm9vdCA9IGV2ZW50LT55X3Jvb3Q7Ci0gICAgICAgIHBvaW50ZXJFdmVudC0+YnV0dG9uLndp
bmRvdyA9IGV2ZW50LT53aW5kb3cgPyBHREtfV0lORE9XKGdfb2JqZWN0X3JlZihldmVudC0+d2lu
ZG93KSkgOiBudWxscHRyOwotICAgICAgICBnZGtfZXZlbnRfc2V0X3NjcmVlbihwb2ludGVyRXZl
bnQuZ2V0KCksIGdka19ldmVudF9nZXRfc2NyZWVuKHRvdWNoRXZlbnQpKTsKLSAgICAgICAgZ2Rr
X2V2ZW50X3NldF9kZXZpY2UocG9pbnRlckV2ZW50LmdldCgpLCBnZGtfZXZlbnRfZ2V0X2Rldmlj
ZSh0b3VjaEV2ZW50KSk7Ci0gICAgICAgIGdka19ldmVudF9zZXRfc291cmNlX2RldmljZShwb2lu
dGVyRXZlbnQuZ2V0KCksIGdka19ldmVudF9nZXRfc291cmNlX2RldmljZSh0b3VjaEV2ZW50KSk7
Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlTW91c2VFdmVudChtX3dlYlZpZXcsIHBv
aW50ZXJFdmVudC5nZXQoKSk7Ci0KLSAgICAgICAgcG9pbnRlckV2ZW50LT50eXBlID0gR0RLX0JV
VFRPTl9SRUxFQVNFOwotICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZU1vdXNlRXZlbnQo
bV93ZWJWaWV3LCBwb2ludGVyRXZlbnQuZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgdGFwKEdk
a0V2ZW50VG91Y2gqIGV2ZW50KSBmaW5hbAotICAgIHsKLSAgICAgICAgc2ltdWxhdGVNb3VzZUNs
aWNrKGV2ZW50LCBHREtfQlVUVE9OX1BSSU1BUlkpOwotICAgIH0KLQotICAgIHZvaWQgc3RhcnRE
cmFnKEdka0V2ZW50VG91Y2gqIGV2ZW50LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50KSBm
aW5hbAotICAgIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gc2Nyb2xsRXZlbnQgPSBj
cmVhdGVTY3JvbGxFdmVudChldmVudCwgc3RhcnRQb2ludCwgeyB9KTsKLSAgICAgICAgd2Via2l0
V2ViVmlld0Jhc2VIYW5kbGVXaGVlbEV2ZW50KG1fd2ViVmlldywgc2Nyb2xsRXZlbnQuZ2V0KCks
IFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRy
YWcoR2RrRXZlbnRUb3VjaCogZXZlbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBG
bG9hdFBvaW50JiBkZWx0YSkgZmluYWwKLSAgICB7Ci0gICAgICAgIEdVbmlxdWVQdHI8R2RrRXZl
bnQ+IHNjcm9sbEV2ZW50ID0gY3JlYXRlU2Nyb2xsRXZlbnQoZXZlbnQsIHBvaW50LCBkZWx0YSk7
Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlSGFuZGxlV2hlZWxFdmVudChtX3dlYlZpZXcsIHNj
cm9sbEV2ZW50LmdldCgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZTo6UGhhc2VDaGFuZ2VkKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNhbmNlbERyYWcoKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlciht
X3dlYlZpZXcpKQotICAgICAgICAgICAgY29udHJvbGxlci0+Y2FuY2VsU3dpcGUoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHN3aXBlKEdka0V2ZW50VG91Y2gqIGV2ZW50LCBjb25zdCBGbG9hdFBvaW50
JiB2ZWxvY2l0eSkgZmluYWwKLSAgICB7Ci0gICAgICAgIGRvdWJsZSB4LCB5OwotICAgICAgICBn
ZGtfZXZlbnRfZ2V0X2Nvb3JkcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAm
eCwgJnkpOwotICAgICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBzY3JvbGxFdmVudCA9IGNyZWF0
ZVNjcm9sbEV2ZW50KGV2ZW50LCBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oeCwgeSksIHZl
bG9jaXR5LCB0cnVlKTsKLSAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VIYW5kbGVXaGVlbEV2ZW50
KG1fd2ViVmlldywgc2Nyb2xsRXZlbnQuZ2V0KCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFz
ZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZUJlZ2FuKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHN0YXJ0Wm9vbShjb25zdCBJbnRQb2ludCYgY2VudGVyLCBkb3VibGUmIGluaXRpYWxTY2Fs
ZSwgSW50UG9pbnQmIGluaXRpYWxQb2ludCkgZmluYWwKLSAgICB7Ci0gICAgICAgIGF1dG8qIHBh
Z2UgPSBtX3dlYlZpZXctPnByaXYtPnBhZ2VQcm94eS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKHBh
Z2UpOwotICAgICAgICBpbml0aWFsU2NhbGUgPSBwYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKLSAg
ICAgICAgcGFnZS0+Z2V0Q2VudGVyRm9yWm9vbUdlc3R1cmUoY2VudGVyLCBpbml0aWFsUG9pbnQp
OwotICAgIH0KLQotICAgIHZvaWQgem9vbShkb3VibGUgc2NhbGUsIGNvbnN0IEludFBvaW50JiBv
cmlnaW4pIGZpbmFsCi0gICAgewotICAgICAgICBhdXRvKiBwYWdlID0gbV93ZWJWaWV3LT5wcml2
LT5wYWdlUHJveHkuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChwYWdlKTsKLQotICAgICAgICBwYWdl
LT5zY2FsZVBhZ2Uoc2NhbGUsIG9yaWdpbik7Ci0gICAgfQotCi0gICAgdm9pZCBsb25nUHJlc3Mo
R2RrRXZlbnRUb3VjaCogZXZlbnQpIGZpbmFsCi0gICAgewotICAgICAgICBzaW11bGF0ZU1vdXNl
Q2xpY2soZXZlbnQsIEdES19CVVRUT05fU0VDT05EQVJZKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRX
ZWJWaWV3QmFzZSogbV93ZWJWaWV3OwotfTsKLQotR2VzdHVyZUNvbnRyb2xsZXImIHdlYmtpdFdl
YlZpZXdCYXNlR2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNl
KQotewotICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5w
cml2OwotICAgIGlmICghcHJpdi0+Z2VzdHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIHByaXYtPmdl
c3R1cmVDb250cm9sbGVyID0gbWFrZVVuaXF1ZTxHZXN0dXJlQ29udHJvbGxlcj4oR1RLX1dJREdF
VCh3ZWJWaWV3QmFzZSksIG1ha2VVbmlxdWU8VG91Y2hHZXN0dXJlQ29udHJvbGxlcj4od2ViVmll
d0Jhc2UpKTsKLSAgICByZXR1cm4gKnByaXYtPmdlc3R1cmVDb250cm9sbGVyOwotfQotI2VuZGlm
Ci0KIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRFbmFibGVCYWNrRm9yd2FyZE5hdmlnYXRpb25H
ZXN0dXJlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgYm9vbCBlbmFibGVkKQogewot
I2lmICFVU0UoR1RLNCkKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJW
aWV3QmFzZS0+cHJpdjsKICAgICBwcml2LT5pc0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVF
bmFibGVkID0gZW5hYmxlZDsKIApAQCAtMTY4MiwzMiArMTYxNywyNSBAQCB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlU2V0RW5hYmxlQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZShXZWJLaXRXZWJW
aWV3QmFzZSogdwogICAgICAgICBjb250cm9sbGVyLT5zZXRTd2lwZUdlc3R1cmVFbmFibGVkKGVu
YWJsZWQpOwogCiAgICAgcHJpdi0+cGFnZVByb3h5LT5zZXRTaG91bGRSZWNvcmROYXZpZ2F0aW9u
U25hcHNob3RzKGVuYWJsZWQpOwotI2VuZGlmCiB9CiAKLSNpZiAhVVNFKEdUSzQpCiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIqIHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKIHsKICAgICByZXR1cm4gd2ViVmlld0Jhc2Ut
PnByaXYtPnZpZXdHZXN0dXJlQ29udHJvbGxlci5nZXQoKTsKIH0KLSNlbmRpZgogCiBib29sIHdl
YmtpdFdlYlZpZXdCYXNlQmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgaWYgKGF1dG8qIGdlc3R1cmVD
b250cm9sbGVyID0gd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIod2ViVmll
d0Jhc2UpKQogICAgICAgICByZXR1cm4gZ2VzdHVyZUNvbnRyb2xsZXItPmJlZ2luU2ltdWxhdGVk
U3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoVmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURp
cmVjdGlvbjo6QmFjayk7Ci0jZW5kaWYKIAogICAgIHJldHVybiBGQUxTRTsKIH0KIAogYm9vbCB3
ZWJraXRXZWJWaWV3QmFzZUNvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZyhXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIGlmIChhdXRvKiBnZXN0
dXJlQ29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdl
YlZpZXdCYXNlKSkKICAgICAgICAgcmV0dXJuIGdlc3R1cmVDb250cm9sbGVyLT5jb21wbGV0ZVNp
bXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U3dpcGVEaXJlY3Rpb246OkJhY2spOwotI2VuZGlmCiAKICAgICByZXR1cm4gRkFMU0U7CiB9CkBA
IC0xNzM2LDEzICsxNjY0LDYgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlUXVl
cnlUb29sdGlwKEd0a1dpZGdldCogd2lkZ2V0LCBnaW50IC8qIHggKi8sIGcKIH0KIAogI2lmICFV
U0UoR1RLNCkKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUV2ZW50KEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGdka19ldmVudF9nZXRfZXZl
bnRfdHlwZShldmVudCkgPT0gR0RLX1RPVUNIUEFEX1BJTkNIKQotICAgICAgICB3ZWJraXRXZWJW
aWV3QmFzZUdlc3R1cmVDb250cm9sbGVyKFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCkpLmhh
bmRsZUV2ZW50KGV2ZW50KTsKLSAgICByZXR1cm4gR0RLX0VWRU5UX1BST1BBR0FURTsKLX0KLQog
c3RhdGljIEF0a09iamVjdCogd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKEd0a1dpZGdl
dCogd2lkZ2V0KQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXY7CkBAIC0xOTI0LDYgKzE4NDUsMTU4IEBAIHN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtEaXJlY3Rpb25UeXBlIGRpcmVjCiAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0
X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+Zm9jdXMod2lkZ2V0LCBkaXJlY3Rpb24pOwog
fQogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVpvb21CZWdpbihXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UsIEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJl
KiBnZXN0dXJlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXdCYXNlLT5wcml2OworICAgIHByaXYtPmluaXRpYWxab29tU2NhbGUgPSBwcml2LT5wYWdlUHJv
eHktPnBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgZG91YmxlIHgsIHk7CisgICAgZ3RrX2dlc3R1
cmVfZ2V0X2JvdW5kaW5nX2JveF9jZW50ZXIoZ2VzdHVyZSwgJngsICZ5KTsKKyAgICBwcml2LT5w
YWdlUHJveHktPmdldENlbnRlckZvclpvb21HZXN0dXJlKEludFBvaW50KHgsIHkpLCBwcml2LT5p
bml0aWFsWm9vbVBvaW50KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2Vab29t
Q2hhbmdlZChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGdkb3VibGUgc2NhbGUsIEd0
a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2
ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgaWYgKHByaXYtPnBhZ2VHcmFiYmVkVG91Y2gpCisg
ICAgICAgIHJldHVybjsKKworICAgIGd0a19nZXN0dXJlX3NldF9zdGF0ZShnZXN0dXJlLCBHVEtf
RVZFTlRfU0VRVUVOQ0VfQ0xBSU1FRCk7CisKKyAgICBhdXRvIHBhZ2VTY2FsZSA9IGNsYW1wVG88
ZG91YmxlPihwcml2LT5pbml0aWFsWm9vbVNjYWxlICogc2NhbGUsIDEsIDMpOworCisgICAgRmxv
YXRQb2ludCBzY2FsZWRab29tQ2VudGVyKHByaXYtPmluaXRpYWxab29tUG9pbnQpOworICAgIHNj
YWxlZFpvb21DZW50ZXIuc2NhbGUocGFnZVNjYWxlKTsKKworICAgIGRvdWJsZSB4LCB5OworICAg
IGd0a19nZXN0dXJlX2dldF9ib3VuZGluZ19ib3hfY2VudGVyKGdlc3R1cmUsICZ4LCAmeSk7Cisg
ICAgRmxvYXRQb2ludCB2aWV3UG9pbnQgPSBGbG9hdFBvaW50KHgsIHkpOworCisgICAgcHJpdi0+
cGFnZVByb3h5LT5zY2FsZVBhZ2UocGFnZVNjYWxlLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQo
RmxvYXRQb2ludChzY2FsZWRab29tQ2VudGVyIC0gdmlld1BvaW50KSkpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoTG9uZ1ByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmFzZSwgZ2RvdWJsZSB4LCBnZG91YmxlIHksIEd0a0dlc3R1cmUqKQoreworICAgIHdl
YlZpZXdCYXNlLT5wcml2LT5pc0xvbmdQcmVzc2VkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VUb3VjaFByZXNzKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFz
ZSwgaW50IG5QcmVzcywgZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKikKK3sKKyAgICB3
ZWJWaWV3QmFzZS0+cHJpdi0+aXNMb25nUHJlc3NlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoUmVsZWFzZShXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmll
d0Jhc2UsIGludCBuUHJlc3MsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSogZ2VzdHVy
ZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+
cHJpdjsKKyAgICBpZiAocHJpdi0+cGFnZUdyYWJiZWRUb3VjaCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChwcml2LT5pc0JlaW5nRHJhZ2dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgYnV0dG9uOworICAgIHVuc2lnbmVkIGJ1dHRvbnM7CisgICAgaWYgKHByaXYtPmlzTG9u
Z1ByZXNzZWQpIHsKKyAgICAgICAgYnV0dG9uID0gR0RLX0JVVFRPTl9TRUNPTkRBUlk7CisgICAg
ICAgIGJ1dHRvbnMgPSBHREtfQlVUVE9OM19NQVNLOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1
dHRvbiA9IEdES19CVVRUT05fUFJJTUFSWTsKKyAgICAgICAgYnV0dG9ucyA9IEdES19CVVRUT04x
X01BU0s7CisgICAgfQorCisgICAgdW5zaWduZWQgbW9kaWZpZXJzID0gZ3RrX2V2ZW50X2NvbnRy
b2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfc3RhdGUoR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVy
ZSkpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQod2ViVmlld0Jh
c2UsIE1vdXNlRXZlbnRUeXBlOjpNb3Rpb24sIDAsIDAsIHgsIHksIG1vZGlmaWVycywgblByZXNz
LCB0b3VjaFBvaW50ZXJFdmVudFR5cGUoKSk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVz
aXplTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgTW91c2VFdmVudFR5cGU6OlByZXNzLCBidXR0b24s
IDAsIHgsIHksIG1vZGlmaWVycywgblByZXNzLCB0b3VjaFBvaW50ZXJFdmVudFR5cGUoKSk7Cisg
ICAgd2Via2l0V2ViVmlld0Jhc2VTeW50aGVzaXplTW91c2VFdmVudCh3ZWJWaWV3QmFzZSwgTW91
c2VFdmVudFR5cGU6OlJlbGVhc2UsIGJ1dHRvbiwgYnV0dG9ucywgeCwgeSwgbW9kaWZpZXJzLCBu
UHJlc3MsIHRvdWNoUG9pbnRlckV2ZW50VHlwZSgpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VUb3VjaERyYWdCZWdpbihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2Us
IGdkb3VibGUgc3RhcnRYLCBnZG91YmxlIHN0YXJ0WSwgR3RrR2VzdHVyZSopCit7CisgICAgV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgcHJp
di0+ZHJhZ09mZnNldC5zZXQoMCwgMCk7CisgICAgcHJpdi0+aXNCZWluZ0RyYWdnZWQgPSBmYWxz
ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaERyYWdVcGRhdGUoV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBkb3VibGUgb2Zmc2V0WCwgZG91YmxlIG9mZnNl
dFksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
KiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgaWYgKHByaXYtPnBhZ2VHcmFiYmVkVG91
Y2gpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSB4LCB5OworICAgIGd0a19nZXN0dXJl
X2RyYWdfZ2V0X3N0YXJ0X3BvaW50KEdUS19HRVNUVVJFX0RSQUcoZ2VzdHVyZSksICZ4LCAmeSk7
CisKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSBndGtfZXZlbnRfY29udHJvbGxlcl9nZXRfY3Vy
cmVudF9ldmVudF9zdGF0ZShHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7CisgICAgaWYg
KCFwcml2LT5pc0JlaW5nRHJhZ2dlZCkgeworICAgICAgICBpZiAoIWd0a19kcmFnX2NoZWNrX3Ro
cmVzaG9sZChHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSwgMCwgMCwgc3RhdGljX2Nhc3Q8aW50Pihv
ZmZzZXRYKSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXRZKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHByaXYtPmlzQmVpbmdEcmFnZ2VkID0gdHJ1ZTsKKyAgICAgICAgZ3RrX2dlc3R1
cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKKworICAg
ICAgICBpZiAocHJpdi0+aXNMb25nUHJlc3NlZCkgeworICAgICAgICAgICAgLy8gRHJhZyBhZnRl
ciBsb25nIHByZXNzIGZvcndhcmRzIGVtdWxhdGVkIG1vdXNlIGV2ZW50cyAoZm9yIGUuZy4gdGV4
dCBzZWxlY3Rpb24pCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRoZXNpemVNb3Vz
ZUV2ZW50KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6TW90aW9uLCAwLCAwLCB4LCB5LCBt
b2RpZmllcnMsIDEsIHRvdWNoUG9pbnRlckV2ZW50VHlwZSgpKTsKKyAgICAgICAgICAgIHdlYmtp
dFdlYlZpZXdCYXNlU3ludGhlc2l6ZU1vdXNlRXZlbnQod2ViVmlld0Jhc2UsIE1vdXNlRXZlbnRU
eXBlOjpQcmVzcywgR0RLX0JVVFRPTl9QUklNQVJZLCAwLCB4LCB5LCBtb2RpZmllcnMsIDAsIHRv
dWNoUG9pbnRlckV2ZW50VHlwZSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB3ZWJr
aXRXZWJWaWV3QmFzZVN5bnRoZXNpemVXaGVlbEV2ZW50KHdlYlZpZXdCYXNlLCAwLCAwLCB4LCB5
LCBXaGVlbEV2ZW50UGhhc2U6OkJlZ2FuLCBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2UpOworICAg
IH0KKworICAgIGlmIChwcml2LT5pc0xvbmdQcmVzc2VkKQorICAgICAgICB3ZWJraXRXZWJWaWV3
QmFzZVN5bnRoZXNpemVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6TW90
aW9uLCBHREtfQlVUVE9OX1BSSU1BUlksIEdES19CVVRUT04xX01BU0ssIHggKyBvZmZzZXRYLCB5
ICsgb2Zmc2V0WSwgbW9kaWZpZXJzLCAwLCB0b3VjaFBvaW50ZXJFdmVudFR5cGUoKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIGRvdWJsZSBkZWx0YVggPSAocHJpdi0+ZHJhZ09mZnNldC54KCkgLSBv
ZmZzZXRYKSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgZG91Ymxl
IGRlbHRhWSA9IChwcml2LT5kcmFnT2Zmc2V0LnkoKSAtIG9mZnNldFkpIC8gU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICBwcml2LT5kcmFnT2Zmc2V0LnNldChvZmZzZXRY
LCBvZmZzZXRZKTsKKworICAgICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJWaWV3QmFzZSk7Cisg
ICAgICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5hYmxl
ZCgpKSB7CisgICAgICAgICAgICBpbnQzMl90IGV2ZW50VGltZSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KGd0a19ldmVudF9jb250cm9sbGVyX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoR1RLX0VWRU5U
X0NPTlRST0xMRVIoZ2VzdHVyZSkpKTsKKyAgICAgICAgICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0
YSBzY3JvbGxEYXRhID0geyAuZGVsdGEgPSBkZWx0YVgsIC5ldmVudFRpbWUgPSBldmVudFRpbWUs
IC5pc1RvdWNoID0gdHJ1ZSwgLmlzRW5kID0gZmFsc2UgfTsKKyAgICAgICAgICAgIGlmIChjb250
cm9sbGVyLT5oYW5kbGVTY3JvbGxXaGVlbEV2ZW50KCZzY3JvbGxEYXRhKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5bnRo
ZXNpemVXaGVlbEV2ZW50KHdlYlZpZXdCYXNlLCAtZGVsdGFYLCAtZGVsdGFZLCB4LCB5LCBXaGVl
bEV2ZW50UGhhc2U6OkNoYW5nZWQsIFdoZWVsRXZlbnRQaGFzZTo6Tm9QaGFzZSk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0VuZChXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UsIGdkb3VibGUgb2Zmc2V0WCwgZ2RvdWJsZSBvZmZzZXRZLCBH
dGtHZXN0dXJlKiBnZXN0dXJlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJp
diA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGlmIChwcml2LT5wYWdlR3JhYmJlZFRvdWNoKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJpdi0+aXNMb25nUHJlc3NlZCkgeworICAgICAg
ICBkb3VibGUgeCwgeTsKKyAgICAgICAgZ3RrX2dlc3R1cmVfZHJhZ19nZXRfc3RhcnRfcG9pbnQo
R1RLX0dFU1RVUkVfRFJBRyhnZXN0dXJlKSwgJngsICZ5KTsKKyAgICAgICAgdW5zaWduZWQgbW9k
aWZpZXJzID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfc3RhdGUoR1RL
X0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5
bnRoZXNpemVNb3VzZUV2ZW50KHdlYlZpZXdCYXNlLCBNb3VzZUV2ZW50VHlwZTo6UmVsZWFzZSwg
R0RLX0JVVFRPTl9QUklNQVJZLCBHREtfQlVUVE9OMV9NQVNLLCB4ICsgb2Zmc2V0WCwgeSArIG9m
ZnNldFksIG1vZGlmaWVycywgMCwgdG91Y2hQb2ludGVyRXZlbnRUeXBlKCkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdl
YlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYlZpZXdCYXNlKTsKKyAgICAgICAgaWYg
KGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdlc3R1cmVFbmFibGVkKCkpIHsKKyAg
ICAgICAgICAgIGludDMyX3QgZXZlbnRUaW1lID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oZ3RrX2V2
ZW50X2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZShHVEtfRVZFTlRfQ09OVFJPTExF
UihnZXN0dXJlKSkpOworICAgICAgICAgICAgUGxhdGZvcm1HdGtTY3JvbGxEYXRhIHNjcm9sbERh
dGEgPSB7IC5kZWx0YSA9IDAsIC5ldmVudFRpbWUgPSBldmVudFRpbWUsIC5pc1RvdWNoID0gZmFs
c2UsIC5pc0VuZCA9IHRydWUgfTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPmhhbmRsZVNjcm9s
bFdoZWVsRXZlbnQoJnNjcm9sbERhdGEpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ0NhbmNlbChXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UsIEdka0V2ZW50U2VxdWVuY2UqLCBHdGtHZXN0dXJlKikKK3sKKyAgICBpZiAo
YXV0byogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVy
KHdlYlZpZXdCYXNlKSkKKyAgICAgICAgY29udHJvbGxlci0+Y2FuY2VsU3dpcGUoKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VUb3VjaFN3aXBlKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSwgZ2RvdWJsZSB2ZWxvY2l0eVgsIGdkb3VibGUgdmVsb2NpdHlZLCBHdGtH
ZXN0dXJlKiBnZXN0dXJlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9
IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGlmIChwcml2LT5wYWdlR3JhYmJlZFRvdWNoIHx8ICFw
cml2LT5pc0JlaW5nRHJhZ2dlZCB8fCBwcml2LT5pc0xvbmdQcmVzc2VkKQorICAgICAgICByZXR1
cm47CisKKyAgICBkb3VibGUgeCwgeTsKKyAgICBpZiAoZ3RrX2dlc3R1cmVfZ2V0X3BvaW50KGdl
c3R1cmUsIGd0a19nZXN0dXJlX3NpbmdsZV9nZXRfY3VycmVudF9zZXF1ZW5jZShHVEtfR0VTVFVS
RV9TSU5HTEUoZ2VzdHVyZSkpLCAmeCwgJnkpKQorICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN5
bnRoZXNpemVXaGVlbEV2ZW50KHdlYlZpZXdCYXNlLCAtdmVsb2NpdHlYLCAtdmVsb2NpdHlZLCB4
LCB5LCBXaGVlbEV2ZW50UGhhc2U6Ok5vUGhhc2UsIFdoZWVsRXZlbnRQaGFzZTo6QmVnYW4pOwor
fQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnN0cnVjdGVkKEdPYmplY3QqIG9i
amVjdCkKIHsKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOwpAQCAtMTk2MSwxMiArMjAzNCw3NyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAg
ICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChjb250cm9sbGVyLCAia2V5LXJlbGVhc2VkIiwgR19D
QUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZUtleVJlbGVhc2VkKSwgdmlld1dpZGdldCwgR19DT05O
RUNUX1NXQVBQRUQpOwogICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmlld1dpZGdldCwg
Y29udHJvbGxlcik7CiAKKyAgICBjb250cm9sbGVyID0gZ3RrX2V2ZW50X2NvbnRyb2xsZXJfbGVn
YWN5X25ldygpOworICAgIGd0a19ldmVudF9jb250cm9sbGVyX3NldF9wcm9wYWdhdGlvbl9waGFz
ZShHVEtfRVZFTlRfQ09OVFJPTExFUihjb250cm9sbGVyKSwgR1RLX1BIQVNFX1RBUkdFVCk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoY29udHJvbGxlciwgImV2ZW50IiwgR19DQUxMQkFD
Syh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRXZlbnQpLCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dB
UFBFRCk7CisgICAgZ3RrX3dpZGdldF9hZGRfY29udHJvbGxlcih2aWV3V2lkZ2V0LCBHVEtfRVZF
TlRfQ09OVFJPTExFUihjb250cm9sbGVyKSk7CisKICAgICBhdXRvKiBnZXN0dXJlID0gZ3RrX2dl
c3R1cmVfY2xpY2tfbmV3KCk7CiAgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF9idXR0b24oR1RL
X0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpLCAwKTsKKyAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0
X2V4Y2x1c2l2ZShHVEtfR0VTVFVSRV9TSU5HTEUoZ2VzdHVyZSksIFRSVUUpOwogICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJwcmVzc2VkIiwgR19DQUxMQkFDSyh3ZWJraXRX
ZWJWaWV3QmFzZUJ1dHRvblByZXNzZWQpLCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7
CiAgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwgInJlbGVhc2VkIiwgR19DQUxM
QkFDSyh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VkKSwgdmlld1dpZGdldCwgR19DT05O
RUNUX1NXQVBQRUQpOwogICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmlld1dpZGdldCwg
R1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOwogI2VuZGlmCisKKyAgICAvLyBUb3VjaCBn
ZXN0dXJlcworI2lmIFVTRShHVEs0KQorICAgIHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwID0gZ3Rr
X2dlc3R1cmVfem9vbV9uZXcoKTsKKyAgICBndGtfd2lkZ2V0X2FkZF9jb250cm9sbGVyKHZpZXdX
aWRnZXQsIEdUS19FVkVOVF9DT05UUk9MTEVSKHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwKSk7Cisj
ZWxzZQorICAgIHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwID0gZ3RrX2dlc3R1cmVfem9vbV9uZXco
dmlld1dpZGdldCk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVCh2aWV3V2lk
Z2V0KSwgIndrLXZpZXctem9vbS1nZXN0dXJlIiwgcHJpdi0+dG91Y2hHZXN0dXJlR3JvdXAsIGdf
b2JqZWN0X3VucmVmKTsKKyNlbmRpZgorICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KHByaXYt
PnRvdWNoR2VzdHVyZUdyb3VwLCAiYmVnaW4iLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNl
Wm9vbUJlZ2luKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfb2JqZWN0KHByaXYtPnRvdWNoR2VzdHVyZUdyb3VwLCAic2NhbGUtY2hhbmdlZCIs
IEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2Vab29tQ2hhbmdlZCksIHZpZXdXaWRnZXQsIEdf
Q09OTkVDVF9TV0FQUEVEKTsKKworI2lmIFVTRShHVEs0KQorICAgIGdlc3R1cmUgPSBndGtfZ2Vz
dHVyZV9sb25nX3ByZXNzX25ldygpOworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmll
d1dpZGdldCwgR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworI2Vsc2UKKyAgICBhdXRv
KiBnZXN0dXJlID0gZ3RrX2dlc3R1cmVfbG9uZ19wcmVzc19uZXcodmlld1dpZGdldCk7CisgICAg
Z19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVCh2aWV3V2lkZ2V0KSwgIndrLXZpZXctbG9u
Zy1wcmVzcy1nZXN0dXJlIiwgZ2VzdHVyZSwgZ19vYmplY3RfdW5yZWYpOworI2VuZGlmCisgICAg
Z3RrX2dlc3R1cmVfZ3JvdXAoZ2VzdHVyZSwgcHJpdi0+dG91Y2hHZXN0dXJlR3JvdXApOworICAg
IGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUoZ2Vz
dHVyZSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJwcmVz
c2VkIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoTG9uZ1ByZXNzKSwgdmlld1dp
ZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOworCisjaWYgVVNFKEdUSzQpCisgICAgZ2VzdHVyZSA9
IGd0a19nZXN0dXJlX2NsaWNrX25ldygpOworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIo
dmlld1dpZGdldCwgR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOworI2Vsc2UKKyAgICBn
ZXN0dXJlID0gZ3RrX2dlc3R1cmVfbXVsdGlfcHJlc3NfbmV3KHZpZXdXaWRnZXQpOworICAgIGdf
b2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1Qodmlld1dpZGdldCksICJ3ay12aWV3LW11bHRp
LXByZXNzLWdlc3R1cmUiLCBnZXN0dXJlLCBnX29iamVjdF91bnJlZik7CisjZW5kaWYKKyAgICBn
dGtfZ2VzdHVyZV9ncm91cChnZXN0dXJlLCBwcml2LT50b3VjaEdlc3R1cmVHcm91cCk7CisgICAg
Z3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShnZXN0
dXJlKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwgInByZXNz
ZWQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hQcmVzcyksIHZpZXdXaWRnZXQs
IEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChnZXN0dXJl
LCAicmVsZWFzZWQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hSZWxlYXNlKSwg
dmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOworCisjaWYgVVNFKEdUSzQpCisgICAgZ2Vz
dHVyZSA9IGd0a19nZXN0dXJlX2RyYWdfbmV3KCk7CisgICAgZ3RrX3dpZGdldF9hZGRfY29udHJv
bGxlcih2aWV3V2lkZ2V0LCBHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7CisjZWxzZQor
ICAgIGdlc3R1cmUgPSBndGtfZ2VzdHVyZV9kcmFnX25ldyh2aWV3V2lkZ2V0KTsKKyAgICBnX29i
amVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHZpZXdXaWRnZXQpLCAid2stdmlldy1kcmFnLWdl
c3R1cmUiLCBnZXN0dXJlLCBnX29iamVjdF91bnJlZik7CisjZW5kaWYKKyAgICBndGtfZ2VzdHVy
ZV9ncm91cChnZXN0dXJlLCBwcml2LT50b3VjaEdlc3R1cmVHcm91cCk7CisgICAgZ3RrX2dlc3R1
cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdUS19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSwgVFJV
RSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwgImRyYWctYmVnaW4iLCBH
X0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNlVG91Y2hEcmFnQmVnaW4pLCB2aWV3V2lkZ2V0LCBH
X0NPTk5FQ1RfU1dBUFBFRCk7CisgICAgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoZ2VzdHVyZSwg
ImRyYWctdXBkYXRlIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNoRHJhZ1VwZGF0
ZSksIHZpZXdXaWRnZXQsIEdfQ09OTkVDVF9TV0FQUEVEKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
X29iamVjdChnZXN0dXJlLCAiZHJhZy1lbmQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdCYXNl
VG91Y2hEcmFnRW5kKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfb2JqZWN0KGdlc3R1cmUsICJjYW5jZWwiLCBHX0NBTExCQUNLKHdlYmtpdFdl
YlZpZXdCYXNlVG91Y2hEcmFnQ2FuY2VsKSwgdmlld1dpZGdldCwgR19DT05ORUNUX1NXQVBQRUQp
OworCisjaWYgVVNFKEdUSzQpCisgICAgZ2VzdHVyZSA9IGd0a19nZXN0dXJlX3N3aXBlX25ldygp
OworICAgIGd0a193aWRnZXRfYWRkX2NvbnRyb2xsZXIodmlld1dpZGdldCwgR1RLX0VWRU5UX0NP
TlRST0xMRVIoZ2VzdHVyZSkpOworI2Vsc2UKKyAgICBnZXN0dXJlID0gZ3RrX2dlc3R1cmVfc3dp
cGVfbmV3KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1Qo
dmlld1dpZGdldCksICJ3ay12aWV3LXN3aXBlLWdlc3R1cmUiLCBnZXN0dXJlLCBnX29iamVjdF91
bnJlZik7CisjZW5kaWYKKyAgICBndGtfZ2VzdHVyZV9ncm91cChnZXN0dXJlLCBwcml2LT50b3Vj
aEdlc3R1cmVHcm91cCk7CisgICAgZ3RrX2dlc3R1cmVfc2luZ2xlX3NldF90b3VjaF9vbmx5KEdU
S19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9v
YmplY3QoZ2VzdHVyZSwgInN3aXBlIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZVRvdWNo
U3dpcGUpLCB2aWV3V2lkZ2V0LCBHX0NPTk5FQ1RfU1dBUFBFRCk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyog
d2Via2l0V2ViVmlld0Jhc2VDbGFzcykKQEAgLTIwMDksNyArMjE0Nyw2IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyog
d2Via2l0V2ViVmllCiAjZW5kaWYKICAgICB3aWRnZXRDbGFzcy0+cXVlcnlfdG9vbHRpcCA9IHdl
YmtpdFdlYlZpZXdCYXNlUXVlcnlUb29sdGlwOwogI2lmICFVU0UoR1RLNCkKLSAgICB3aWRnZXRD
bGFzcy0+ZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUV2ZW50OwogICAgIHdpZGdldENsYXNzLT5n
ZXRfYWNjZXNzaWJsZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0QWNjZXNzaWJsZTsKICNlbmRpZgog
I2lmIFVTRShHVEs0KQpAQCAtMjI5OCwxOCArMjQzNSwxNCBAQCBib29sIHdlYmtpdFdlYlZpZXdC
YXNlTWFrZUdMQ29udGV4dEN1cnJlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdC
YXNlKQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlV2lsbFN3YXBXZWJQcm9jZXNzKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKLSNpZiAhVVNFKEdUSzQpCiAgICAgV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2Via2l0V2ViVmlld0Jhc2UtPnByaXY7CiAg
ICAgaWYgKHByaXYtPnZpZXdHZXN0dXJlQ29udHJvbGxlcikKICAgICAgICAgcHJpdi0+dmlld0dl
c3R1cmVDb250cm9sbGVyLT5kaXNjb25uZWN0RnJvbVByb2Nlc3MoKTsKLSNlbmRpZgogfQogCiB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkRXhpdFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYmtpdFdlYlZpZXdCYXNlKQogewotI2lmICFVU0UoR1RLNCkKICAgICB3ZWJraXRXZWJWaWV3
QmFzZS0+cHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyID0gbnVsbHB0cjsKLSNlbmRpZgogfQog
CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKQEAgLTIzMjIsMTQgKzI0NTUsMTIgQEAgdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZURpZFJlbGF1bmNoV2ViUHJvY2VzcyhXZWJLaXRXZWJWaWV3QmFzZSog
d2Via2l0V2ViVmlld0Jhc2UKICAgICAgICAgYXV0byogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2Fz
dDxEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcyo+KHByaXYtPnBhZ2VQcm94eS0+
ZHJhd2luZ0FyZWEoKSk7CiAgICAgICAgIHByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlLT51
cGRhdGUoZHJhd2luZ0FyZWEtPmxheWVyVHJlZUNvbnRleHQoKSk7CiAgICAgfQotI2lmICFVU0Uo
R1RLNCkKICAgICBpZiAocHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyKQogICAgICAgICBwcml2
LT52aWV3R2VzdHVyZUNvbnRyb2xsZXItPmNvbm5lY3RUb1Byb2Nlc3MoKTsKICAgICBlbHNlIHsK
ICAgICAgICAgcHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyID0gbWFrZVVuaXF1ZTxXZWJLaXQ6
OlZpZXdHZXN0dXJlQ29udHJvbGxlcj4oKnByaXYtPnBhZ2VQcm94eSk7CiAgICAgICAgIHByaXYt
PnZpZXdHZXN0dXJlQ29udHJvbGxlci0+c2V0U3dpcGVHZXN0dXJlRW5hYmxlZChwcml2LT5pc0Jh
Y2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVFbmFibGVkKTsKICAgICB9Ci0jZW5kaWYKIH0KIAog
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZVBhZ2VDbG9zZWQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtp
dFdlYlZpZXdCYXNlKQpAQCAtMjM2NCw1NiArMjQ5NSw0NCBAQCBSZWZQdHI8V2ViS2l0OjpWaWV3
U25hcHNob3Q+IHdlYmtpdFdlYlZpZXdCYXNlVGFrZVZpZXdTbmFwc2hvdChXZWJLaXRXZWJWaWV3
QmFzZQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JN
YWluRnJhbWUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogewotI2lmICFV
U0UoR1RLNCkKICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJraXRX
ZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJvbGxlcih3ZWJraXRXZWJWaWV3QmFzZSk7CiAgICAg
aWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci0+aXNTd2lwZUdlc3R1cmVFbmFibGVkKCkpCiAg
ICAgICAgIGNvbnRyb2xsZXItPmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZvck1haW5GcmFtZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJv
bGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYmtpdFdlYlZp
ZXdCYXNlKTsKICAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVy
ZUVuYWJsZWQoKSkKICAgICAgICAgY29udHJvbGxlci0+ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9yTWFpbkZyYW1lKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZURpZEZpbmlzaE5hdmlnYXRpb24oV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNl
LCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24pCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIFZp
ZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dl
c3R1cmVDb250cm9sbGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBpZiAoY29udHJvbGxlciAm
JiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkKICAgICAgICAgY29udHJvbGxl
ci0+ZGlkRmluaXNoTmF2aWdhdGlvbihuYXZpZ2F0aW9uKTsKLSNlbmRpZgogfQogCiB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlRGlkRmFpbE5hdmlnYXRpb24oV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtp
dFdlYlZpZXdCYXNlLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24pCiB7Ci0jaWYgIVVTRShH
VEs0KQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZp
ZXdCYXNlVmlld0dlc3R1cmVDb250cm9sbGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBpZiAo
Y29udHJvbGxlciAmJiBjb250cm9sbGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkKICAgICAg
ICAgY29udHJvbGxlci0+ZGlkRmFpbE5hdmlnYXRpb24obmF2aWdhdGlvbik7Ci0jZW5kaWYKIH0K
IAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWlu
RnJhbWUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uVHlwZSB0eXBlKQogewotI2lmICFVU0UoR1RLNCkKICAgICBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJraXRXZWJWaWV3QmFzZVZpZXdHZXN0dXJlQ29udHJv
bGxlcih3ZWJraXRXZWJWaWV3QmFzZSk7CiAgICAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxl
ci0+aXNTd2lwZUdlc3R1cmVFbmFibGVkKCkpCiAgICAgICAgIGNvbnRyb2xsZXItPmRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUodHlwZSk7Ci0jZW5kaWYKIH0KIAogdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZURpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbihXZWJLaXRXZWJWaWV3QmFz
ZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0jaWYgIVVTRShHVEs0KQogICAgIFZpZXdHZXN0dXJl
Q29udHJvbGxlciogY29udHJvbGxlciA9IHdlYmtpdFdlYlZpZXdCYXNlVmlld0dlc3R1cmVDb250
cm9sbGVyKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9s
bGVyLT5pc1N3aXBlR2VzdHVyZUVuYWJsZWQoKSkKICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2Ut
PnByaXYtPnZpZXdHZXN0dXJlQ29udHJvbGxlci0+ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7
Ci0jZW5kaWYKIH0KIAogI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDI0LCAwKQpAQCAtMjc5Miwz
ICsyOTExLDEwIEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VNYWtlQmxhbmsoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlLCBib29sIG1ha2VCbGFuaykKICAgICBwcml2LT5pc0JsYW5rID0g
bWFrZUJsYW5rOwogICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKHdlYlZpZXdC
YXNlKSk7CiB9CisKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VQYWdlR3JhYmJlZFRvdWNoKFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBwcml2LT5wYWdlR3JhYmJlZFRvdWNo
ID0gdHJ1ZTsKKyAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUocHJpdi0+dG91Y2hHZXN0dXJlR3Jv
dXAsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5k
ZXggZWQyNjk5ZGJlMGRiLi43ZTc4YTZhNGNjNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApAQCAt
MjgsNyArMjgsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJh
dGlvbi5oIgotI2luY2x1ZGUgIkdlc3R1cmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5wdXRN
ZXRob2RTdGF0ZS5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCkBAIC04OCwxNSArODcsOSBAQCB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNlKiwgV2ViQ29yZTo6U2VsZWN0
aW9uRGF0YSYmLCBPcAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbihXZWJLaXRXZWJWaWV3QmFzZSopOwogI2VuZGlmCiAKLSNpZiAhVVNFKEdUSzQp
Ci1XZWJLaXQ6Okdlc3R1cmVDb250cm9sbGVyJiB3ZWJraXRXZWJWaWV3QmFzZUdlc3R1cmVDb250
cm9sbGVyKFdlYktpdFdlYlZpZXdCYXNlKik7Ci0jZW5kaWYKLQogUmVmUHRyPFdlYktpdDo6Vmll
d1NuYXBzaG90PiB3ZWJraXRXZWJWaWV3QmFzZVRha2VWaWV3U25hcHNob3QoV2ViS2l0V2ViVmll
d0Jhc2UqLCBPcHRpb25hbDxXZWJDb3JlOjpJbnRSZWN0PiYmKTsKIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VTZXRFbmFibGVCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlKFdlYktpdFdlYlZpZXdC
YXNlKiwgYm9vbCBlbmFibGVkKTsKLSNpZiAhVVNFKEdUSzQpCiBXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlciogd2Via2l0V2ViVmlld0Jhc2VWaWV3R2VzdHVyZUNvbnRyb2xsZXIoV2ViS2l0
V2ViVmlld0Jhc2UqKTsKLSNlbmRpZgogCiBib29sIHdlYmtpdFdlYlZpZXdCYXNlQmVnaW5CYWNr
U3dpcGVGb3JUZXN0aW5nKFdlYktpdFdlYlZpZXdCYXNlKik7CiBib29sIHdlYmtpdFdlYlZpZXdC
YXNlQ29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nKFdlYktpdFdlYlZpZXdCYXNlKik7CkBAIC0x
MjIsMyArMTE1LDQgQEAgV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiB3ZWJraXRXZWJWaWV3QmFz
ZUdldElucHV0TWV0aG9kQ29udGV4dChXZWJLaXRXZWJWaWV3QmEKIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VTeW50aGVzaXplQ29tcG9zaXRpb25LZXlQcmVzcyhXZWJLaXRXZWJWaWV3QmFzZSosIGNv
bnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPj4mJiwgT3B0aW9uYWw8V2ViS2l0OjpFZGl0aW5nUmFuZ2U+JiYpOwogCiB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlTWFrZUJsYW5rKFdlYktpdFdlYlZpZXdCYXNlKiwgYm9vbCk7Cit2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlUGFnZUdyYWJiZWRUb3VjaChXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlld0Jhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmll
d0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXIuaAppbmRleCBmMjVlNzkyM2QzYWYuLmI4NmUwMGI2YzI5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmgKQEAgLTc0LDgg
Kzc0LDEzIEBAIGNsYXNzIE5hdmlnYXRpb247CiAjaWYgUExBVEZPUk0oTUFDKQogdHlwZWRlZiBO
U0V2ZW50KiBQbGF0Zm9ybVNjcm9sbEV2ZW50OwogI2VsaWYgUExBVEZPUk0oR1RLKQotdHlwZWRl
ZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xsIEdka0V2ZW50U2Nyb2xsOwotdHlwZWRlZiBHZGtFdmVu
dFNjcm9sbCogUGxhdGZvcm1TY3JvbGxFdmVudDsKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBkb3Vi
bGUgZGVsdGE7CisgICAgaW50MzJfdCBldmVudFRpbWU7CisgICAgYm9vbCBpc1RvdWNoOworICAg
IGJvb2wgaXNFbmQ7Cit9IFBsYXRmb3JtR3RrU2Nyb2xsRGF0YTsKK3R5cGVkZWYgUGxhdGZvcm1H
dGtTY3JvbGxEYXRhKiBQbGF0Zm9ybVNjcm9sbEV2ZW50OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtMTczLDcgKzE3OCwxMSBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEsp
CiAgICAgdm9pZCBjYW5jZWxTd2lwZSgpOworI2lmIFVTRShHVEs0KQorICAgIHZvaWQgc25hcHNo
b3QoR3RrU25hcHNob3QqLCBHc2tSZW5kZXJOb2RlKik7CisjZWxzZQogICAgIHZvaWQgZHJhdyhj
YWlyb190KiwgY2Fpcm9fcGF0dGVybl90Kik7CisjZW5kaWYKICNlbmRpZgogCiAgICAgLy8gVGVz
dGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYzQ1MWNmNWM0Mi4uMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiR2VzdHVyZUNvbnRyb2xsZXIuaCIKLQotI2lmICFVU0UoR1RLNCkKLQotI2luY2x1ZGUg
PFdlYkNvcmUvU2Nyb2xsYmFyLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgY29uc3QgZG91Ymxl
IG1heGltdW1ab29tID0gMy4wOwotCi1HZXN0dXJlQ29udHJvbGxlcjo6R2VzdHVyZUNvbnRyb2xs
ZXIoR3RrV2lkZ2V0KiB3aWRnZXQsIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlckNs
aWVudD4mJiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChXVEZNb3ZlKGNsaWVudCkpCi0gICAgLCBt
X2RyYWdHZXN0dXJlKHdpZGdldCwgKm1fY2xpZW50KQotICAgICwgbV9zd2lwZUdlc3R1cmUod2lk
Z2V0LCAqbV9jbGllbnQpCi0gICAgLCBtX3pvb21HZXN0dXJlKHdpZGdldCwgKm1fY2xpZW50KQot
ICAgICwgbV9sb25ncHJlc3NHZXN0dXJlKHdpZGdldCwgKm1fY2xpZW50KQotewotfQotCi1ib29s
IEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAg
Ym9vbCB3YXNQcm9jZXNzaW5nR2VzdHVyZXMgPSBpc1Byb2Nlc3NpbmdHZXN0dXJlcygpOwotICAg
IGJvb2wgdG91Y2hFbmQ7Ci0gICAgbV9kcmFnR2VzdHVyZS5oYW5kbGVFdmVudChldmVudCk7Ci0g
ICAgbV9zd2lwZUdlc3R1cmUuaGFuZGxlRXZlbnQoZXZlbnQpOwotICAgIG1fem9vbUdlc3R1cmUu
aGFuZGxlRXZlbnQoZXZlbnQpOwotICAgIG1fbG9uZ3ByZXNzR2VzdHVyZS5oYW5kbGVFdmVudChl
dmVudCk7Ci0gICAgdG91Y2hFbmQgPSAoZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKGV2ZW50KSA9
PSBHREtfVE9VQ0hfRU5EKSB8fCAoZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKGV2ZW50KSA9PSBH
REtfVE9VQ0hfQ0FOQ0VMKTsKLSAgICByZXR1cm4gdG91Y2hFbmQgPyB3YXNQcm9jZXNzaW5nR2Vz
dHVyZXMgOiBpc1Byb2Nlc3NpbmdHZXN0dXJlcygpOwotfQotCi1ib29sIEdlc3R1cmVDb250cm9s
bGVyOjppc1Byb2Nlc3NpbmdHZXN0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHJhZ0dl
c3R1cmUuaXNBY3RpdmUoKSB8fCBtX3N3aXBlR2VzdHVyZS5pc0FjdGl2ZSgpIHx8IG1fem9vbUdl
c3R1cmUuaXNBY3RpdmUoKSB8fCBtX2xvbmdwcmVzc0dlc3R1cmUuaXNBY3RpdmUoKTsKLX0KLQot
R2VzdHVyZUNvbnRyb2xsZXI6Okdlc3R1cmU6Okdlc3R1cmUoR3RrR2VzdHVyZSogZ2VzdHVyZSwg
R2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkKLSAgICA6IG1fZ2VzdHVyZShhZG9wdEdS
ZWYoZ2VzdHVyZSkpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi17Ci0gICAgZ3RrX2V2ZW50X2Nv
bnRyb2xsZXJfc2V0X3Byb3BhZ2F0aW9uX3BoYXNlKEdUS19FVkVOVF9DT05UUk9MTEVSKG1fZ2Vz
dHVyZS5nZXQoKSksIEdUS19QSEFTRV9OT05FKTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxl
cjo6R2VzdHVyZTo6cmVzZXQoKQotewotICAgIGd0a19ldmVudF9jb250cm9sbGVyX3Jlc2V0KEdU
S19FVkVOVF9DT05UUk9MTEVSKG1fZ2VzdHVyZS5nZXQoKSkpOwotfQotCi1ib29sIEdlc3R1cmVD
b250cm9sbGVyOjpHZXN0dXJlOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGd0a19n
ZXN0dXJlX2lzX2FjdGl2ZShtX2dlc3R1cmUuZ2V0KCkpOwotfQotCi12b2lkIEdlc3R1cmVDb250
cm9sbGVyOjpHZXN0dXJlOjpoYW5kbGVFdmVudChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgZ3Rr
X2V2ZW50X2NvbnRyb2xsZXJfaGFuZGxlX2V2ZW50KEdUS19FVkVOVF9DT05UUk9MTEVSKG1fZ2Vz
dHVyZS5nZXQoKSksIGV2ZW50KTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6RHJhZ0dl
c3R1cmU6OnN0YXJ0RHJhZyhHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFtX2luRHJh
Zyk7Ci0gICAgbV9jbGllbnQuc3RhcnREcmFnKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRUb3Vj
aCo+KGV2ZW50KSwgbV9zdGFydCk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdH
ZXN0dXJlOjpoYW5kbGVEcmFnKEdka0V2ZW50KiBldmVudCwgZG91YmxlIHgsIGRvdWJsZSB5KQot
ewotICAgIEFTU0VSVChtX2luRHJhZyk7Ci0gICAgbV9jbGllbnQuZHJhZyhyZWludGVycHJldF9j
YXN0PEdka0V2ZW50VG91Y2gqPihldmVudCksIG1fc3RhcnQsCi0gICAgICAgIEZsb2F0UG9pbnQ6
Om5hcnJvd1ByZWNpc2lvbigobV9vZmZzZXQueCgpIC0geCkgLyBTY3JvbGxiYXI6OnBpeGVsc1Bl
ckxpbmVTdGVwKCksIChtX29mZnNldC55KCkgLSB5KSAvIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSkpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6Y2Fu
Y2VsRHJhZygpCi17Ci0gICAgQVNTRVJUKG1faW5EcmFnKTsKLSAgICBtX2NsaWVudC5jYW5jZWxE
cmFnKCk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkRyYWdHZXN0dXJlOjpoYW5kbGVU
YXAoR2RrRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVCghbV9pbkRyYWcpOwotICAgIG1fY2xp
ZW50LnRhcChyZWludGVycHJldF9jYXN0PEdka0V2ZW50VG91Y2gqPihldmVudCkpOwotfQotCi12
b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6YmVnaW4oRHJhZ0dlc3R1cmUqIGRy
YWdHZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0g
ICAgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1
cnJlbnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKLSAgICBndGtfZ2Vz
dHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVuY2UsIEdUS19FVkVOVF9TRVFV
RU5DRV9DTEFJTUVEKTsKLSAgICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcgPSBmYWxzZTsKLSAgICBk
cmFnR2VzdHVyZS0+bV9zdGFydC5zZXQoeCwgeSk7Ci0gICAgZHJhZ0dlc3R1cmUtPm1fb2Zmc2V0
LnNldCgwLCAwKTsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrX2V2ZW50X2NvbnRyb2xs
ZXJfZ2V0X3dpZGdldChHVEtfRVZFTlRfQ09OVFJPTExFUihnZXN0dXJlKSk7Ci0gICAgdW5zaWdu
ZWQgZGVsYXk7Ci0gICAgZ19vYmplY3RfZ2V0KGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKHdpZGdl
dCksICJndGstbG9uZy1wcmVzcy10aW1lIiwgJmRlbGF5LCBudWxscHRyKTsKLSAgICBkcmFnR2Vz
dHVyZS0+bV9sb25nUHJlc3NUaW1lb3V0LnN0YXJ0T25lU2hvdCgxX21zICogZGVsYXkpOwotICAg
IGRyYWdHZXN0dXJlLT5zdGFydERyYWcoY29uc3RfY2FzdDxHZGtFdmVudCo+KGd0a19nZXN0dXJl
X2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSkpOwotfQotCi12b2lkIEdlc3R1cmVD
b250cm9sbGVyOjpEcmFnR2VzdHVyZTo6dXBkYXRlKERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwg
ZG91YmxlIHgsIGRvdWJsZSB5LCBHdGtHZXN0dXJlKiBnZXN0dXJlKQotewotICAgIEdka0V2ZW50
U2VxdWVuY2UqIHNlcXVlbmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVl
bmNlKEdUS19HRVNUVVJFX1NJTkdMRShnZXN0dXJlKSk7Ci0gICAgZ3RrX2dlc3R1cmVfc2V0X3Nl
cXVlbmNlX3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VRVUVOQ0VfQ0xBSU1F
RCk7Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a19ldmVudF9jb250cm9sbGVyX2dldF93
aWRnZXQoR1RLX0VWRU5UX0NPTlRST0xMRVIoZ2VzdHVyZSkpOwotICAgIGlmICghZHJhZ0dlc3R1
cmUtPm1faW5EcmFnICYmIGd0a19kcmFnX2NoZWNrX3RocmVzaG9sZCh3aWRnZXQsIGRyYWdHZXN0
dXJlLT5tX3N0YXJ0LngoKSwgZHJhZ0dlc3R1cmUtPm1fc3RhcnQueSgpLCBkcmFnR2VzdHVyZS0+
bV9zdGFydC54KCkgKyB4LCBkcmFnR2VzdHVyZS0+bV9zdGFydC55KCkgKyB5KSkgewotICAgICAg
ICBkcmFnR2VzdHVyZS0+bV9pbkRyYWcgPSB0cnVlOwotICAgICAgICBkcmFnR2VzdHVyZS0+bV9s
b25nUHJlc3NUaW1lb3V0LnN0b3AoKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhZ0dlc3R1cmUtPm1f
aW5EcmFnKQotICAgICAgICBkcmFnR2VzdHVyZS0+aGFuZGxlRHJhZyhjb25zdF9jYXN0PEdka0V2
ZW50Kj4oZ3RrX2dlc3R1cmVfZ2V0X2xhc3RfZXZlbnQoZ2VzdHVyZSwgc2VxdWVuY2UpKSwgeCwg
eSk7Ci0gICAgZHJhZ0dlc3R1cmUtPm1fb2Zmc2V0LnNldCh4LCB5KTsKLX0KLQotdm9pZCBHZXN0
dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmVuZChEcmFnR2VzdHVyZSogZHJhZ0dlc3R1cmUs
IEdka0V2ZW50U2VxdWVuY2UqIHNlcXVlbmNlLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQotewotICAg
IGRyYWdHZXN0dXJlLT5tX2xvbmdQcmVzc1RpbWVvdXQuc3RvcCgpOwotICAgIGlmICghZ3RrX2dl
c3R1cmVfaGFuZGxlc19zZXF1ZW5jZShnZXN0dXJlLCBzZXF1ZW5jZSkpIHsKLSAgICAgICAgZ3Rr
X2dlc3R1cmVfc2V0X3N0YXRlKGdlc3R1cmUsIEdUS19FVkVOVF9TRVFVRU5DRV9ERU5JRUQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZHJhZ0dlc3R1cmUtPm1faW5EcmFnKSB7
Ci0gICAgICAgIGRyYWdHZXN0dXJlLT5oYW5kbGVUYXAoY29uc3RfY2FzdDxHZGtFdmVudCo+KGd0
a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUsIHNlcXVlbmNlKSkpOwotICAgICAgICBn
dGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVyZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0RFTklFRCk7
Ci0gICAgfQotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6Y2FuY2Vs
KERyYWdHZXN0dXJlKiBkcmFnR2VzdHVyZSwgR2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UsIEd0
a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAgZHJhZ0dlc3R1cmUtPm1fbG9uZ1ByZXNzVGltZW91
dC5zdG9wKCk7Ci0gICAgZHJhZ0dlc3R1cmUtPmNhbmNlbERyYWcoKTsKLX0KLQotdm9pZCBHZXN0
dXJlQ29udHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmxvbmdQcmVzc0ZpcmVkKCkKLXsKLSAgICBtX2lu
RHJhZyA9IHRydWU7Ci19Ci0KLUdlc3R1cmVDb250cm9sbGVyOjpEcmFnR2VzdHVyZTo6RHJhZ0dl
c3R1cmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50JiBjbGllbnQp
Ci0gICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX2RyYWdfbmV3KHdpZGdldCksIGNsaWVudCkKLSAg
ICAsIG1fbG9uZ1ByZXNzVGltZW91dChSdW5Mb29wOjptYWluKCksIHRoaXMsICZHZXN0dXJlQ29u
dHJvbGxlcjo6RHJhZ0dlc3R1cmU6OmxvbmdQcmVzc0ZpcmVkKQotewotICAgIGd0a19nZXN0dXJl
X3NpbmdsZV9zZXRfdG91Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgp
KSwgVFJVRSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwg
ImRyYWctYmVnaW4iLCBHX0NBTExCQUNLKGJlZ2luKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgImRyYWctdXBkYXRlIiwgR19DQUxMQkFDSyh1
cGRhdGUpLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdl
dCgpLCAiZW5kIiwgR19DQUxMQkFDSyhlbmQpLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV9nZXN0dXJlLmdldCgpLCAiY2FuY2VsIiwgR19DQUxMQkFDSyhjYW5jZWwpLCB0
aGlzKTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVHZXN0dXJlOjpzdGFydE1v
bWVudHVtU2Nyb2xsKEdka0V2ZW50KiBldmVudCwgZG91YmxlIHZlbG9jaXR5WCwgZG91YmxlIHZl
bG9jaXR5WSkKLXsKLSAgICBtX2NsaWVudC5zd2lwZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50
VG91Y2gqPihldmVudCksIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbih2ZWxvY2l0eVgsIHZl
bG9jaXR5WSkpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpTd2lwZUdlc3R1cmU6OnN3
aXBlKFN3aXBlR2VzdHVyZSogc3dpcGVHZXN0dXJlLCBkb3VibGUgdmVsb2NpdHlYLCBkb3VibGUg
dmVsb2NpdHlZLCBHdGtHZXN0dXJlKiBnZXN0dXJlKQotewotICAgIEdka0V2ZW50U2VxdWVuY2Uq
IHNlcXVlbmNlID0gZ3RrX2dlc3R1cmVfc2luZ2xlX2dldF9jdXJyZW50X3NlcXVlbmNlKEdUS19H
RVNUVVJFX1NJTkdMRShnZXN0dXJlKSk7Ci0gICAgaWYgKCFndGtfZ2VzdHVyZV9oYW5kbGVzX3Nl
cXVlbmNlKGdlc3R1cmUsIHNlcXVlbmNlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ3RrX2dl
c3R1cmVfc2V0X3NlcXVlbmNlX3N0YXRlKGdlc3R1cmUsIHNlcXVlbmNlLCBHVEtfRVZFTlRfU0VR
VUVOQ0VfQ0xBSU1FRCk7Ci0KLSAgICBzd2lwZUdlc3R1cmUtPnN0YXJ0TW9tZW50dW1TY3JvbGwo
Y29uc3RfY2FzdDxHZGtFdmVudCo+KGd0a19nZXN0dXJlX2dldF9sYXN0X2V2ZW50KGdlc3R1cmUs
IHNlcXVlbmNlKSksIHZlbG9jaXR5WCwgdmVsb2NpdHlZKTsKLX0KLQotR2VzdHVyZUNvbnRyb2xs
ZXI6OlN3aXBlR2VzdHVyZTo6U3dpcGVHZXN0dXJlKEd0a1dpZGdldCogd2lkZ2V0LCBHZXN0dXJl
Q29udHJvbGxlckNsaWVudCYgY2xpZW50KQotICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV9zd2lw
ZV9uZXcod2lkZ2V0KSwgY2xpZW50KQotewotICAgIGd0a19nZXN0dXJlX3NpbmdsZV9zZXRfdG91
Y2hfb25seShHVEtfR0VTVFVSRV9TSU5HTEUobV9nZXN0dXJlLmdldCgpKSwgVFJVRSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZ2VzdHVyZS5nZXQoKSwgInN3aXBlIiwgR19DQUxM
QkFDSyhzd2lwZSksIHRoaXMpOwotfQotCi12b2lkIEdlc3R1cmVDb250cm9sbGVyOjpab29tR2Vz
dHVyZTo6YmVnaW4oWm9vbUdlc3R1cmUqIHpvb21HZXN0dXJlLCBHZGtFdmVudFNlcXVlbmNlKiwg
R3RrR2VzdHVyZSogZ2VzdHVyZSkKLXsKLSAgICBndGtfZ2VzdHVyZV9zZXRfc3RhdGUoZ2VzdHVy
ZSwgR1RLX0VWRU5UX1NFUVVFTkNFX0NMQUlNRUQpOwotICAgIHpvb21HZXN0dXJlLT5zdGFydFpv
b20oKTsKLX0KLQotSW50UG9pbnQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpjZW50
ZXIoKSBjb25zdAotewotICAgIGRvdWJsZSB4LCB5OwotICAgIGd0a19nZXN0dXJlX2dldF9ib3Vu
ZGluZ19ib3hfY2VudGVyKG1fZ2VzdHVyZS5nZXQoKSwgJngsICZ5KTsKLSAgICByZXR1cm4gSW50
UG9pbnQoeCwgeSk7Ci19Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpz
dGFydFpvb20oKQotewotICAgIG1fY2xpZW50LnN0YXJ0Wm9vbShjZW50ZXIoKSwgbV9pbml0aWFs
U2NhbGUsIG1faW5pdGlhbFBvaW50KTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxlcjo6Wm9v
bUdlc3R1cmU6OmhhbmRsZVpvb20oKQotewotICAgIEZsb2F0UG9pbnQgc2NhbGVkWm9vbUNlbnRl
cihtX2luaXRpYWxQb2ludCk7Ci0gICAgc2NhbGVkWm9vbUNlbnRlci5zY2FsZShtX3NjYWxlKTsK
LQotICAgIG1fY2xpZW50Lnpvb20obV9zY2FsZSwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KEZs
b2F0UG9pbnQoc2NhbGVkWm9vbUNlbnRlciAtIG1fdmlld1BvaW50KSkpOwotfQotCi12b2lkIEdl
c3R1cmVDb250cm9sbGVyOjpab29tR2VzdHVyZTo6c2NhbGVDaGFuZ2VkKFpvb21HZXN0dXJlKiB6
b29tR2VzdHVyZSwgZG91YmxlIHNjYWxlLCBHdGtHZXN0dXJlKikKLXsKLSAgICB6b29tR2VzdHVy
ZS0+bV9zY2FsZSA9IHpvb21HZXN0dXJlLT5tX2luaXRpYWxTY2FsZSAqIHNjYWxlOwotICAgIGlm
ICh6b29tR2VzdHVyZS0+bV9zY2FsZSA8IDEuMCkKLSAgICAgICAgem9vbUdlc3R1cmUtPm1fc2Nh
bGUgPSAxLjA7Ci0gICAgaWYgKHpvb21HZXN0dXJlLT5tX3NjYWxlID4gbWF4aW11bVpvb20pCi0g
ICAgICAgIHpvb21HZXN0dXJlLT5tX3NjYWxlID0gbWF4aW11bVpvb207Ci0KLSAgICB6b29tR2Vz
dHVyZS0+bV92aWV3UG9pbnQgPSB6b29tR2VzdHVyZS0+Y2VudGVyKCk7Ci0KLSAgICBpZiAoem9v
bUdlc3R1cmUtPm1faWRsZS5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB6b29t
R2VzdHVyZS0+bV9pZGxlLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi1HZXN0dXJlQ29udHJvbGxl
cjo6Wm9vbUdlc3R1cmU6Olpvb21HZXN0dXJlKEd0a1dpZGdldCogd2lkZ2V0LCBHZXN0dXJlQ29u
dHJvbGxlckNsaWVudCYgY2xpZW50KQotICAgIDogR2VzdHVyZShndGtfZ2VzdHVyZV96b29tX25l
dyh3aWRnZXQpLCBjbGllbnQpCi0gICAgLCBtX2lkbGUoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAm
R2VzdHVyZUNvbnRyb2xsZXI6Olpvb21HZXN0dXJlOjpoYW5kbGVab29tKQotewotICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJiZWdpbiIsIEdfQ0FMTEJBQ0so
YmVnaW4pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9nZXN0dXJlLmdl
dCgpLCAic2NhbGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soc2NhbGVDaGFuZ2VkKSwgdGhpcyk7Ci19
Ci0KLXZvaWQgR2VzdHVyZUNvbnRyb2xsZXI6OkxvbmdQcmVzc0dlc3R1cmU6OmxvbmdQcmVzc2Vk
KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBtX2NsaWVudC5sb25nUHJlc3MocmVpbnRlcnByZXRf
Y2FzdDxHZGtFdmVudFRvdWNoKj4oZXZlbnQpKTsKLX0KLQotdm9pZCBHZXN0dXJlQ29udHJvbGxl
cjo6TG9uZ1ByZXNzR2VzdHVyZTo6cHJlc3NlZChMb25nUHJlc3NHZXN0dXJlKiBsb25ncHJlc3NH
ZXN0dXJlLCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqIGdlc3R1cmUpCi17Ci0gICAg
R2RrRXZlbnRTZXF1ZW5jZSogc2VxdWVuY2UgPSBndGtfZ2VzdHVyZV9zaW5nbGVfZ2V0X2N1cnJl
bnRfc2VxdWVuY2UoR1RLX0dFU1RVUkVfU0lOR0xFKGdlc3R1cmUpKTsKLSAgICBpZiAoIWd0a19n
ZXN0dXJlX2hhbmRsZXNfc2VxdWVuY2UoZ2VzdHVyZSwgc2VxdWVuY2UpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBndGtfZ2VzdHVyZV9zZXRfc2VxdWVuY2Vfc3RhdGUoZ2VzdHVyZSwgc2VxdWVu
Y2UsIEdUS19FVkVOVF9TRVFVRU5DRV9DTEFJTUVEKTsKLQotICAgIGxvbmdwcmVzc0dlc3R1cmUt
PmxvbmdQcmVzc2VkKGNvbnN0X2Nhc3Q8R2RrRXZlbnQqPihndGtfZ2VzdHVyZV9nZXRfbGFzdF9l
dmVudChnZXN0dXJlLCBzZXF1ZW5jZSkpKTsKLX0KLQotR2VzdHVyZUNvbnRyb2xsZXI6OkxvbmdQ
cmVzc0dlc3R1cmU6OkxvbmdQcmVzc0dlc3R1cmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdlc3R1cmVD
b250cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBHZXN0dXJlKGd0a19nZXN0dXJlX2xvbmdf
cHJlc3NfbmV3KHdpZGdldCksIGNsaWVudCkKLXsKLSAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0
X3RvdWNoX29ubHkoR1RLX0dFU1RVUkVfU0lOR0xFKG1fZ2VzdHVyZS5nZXQoKSksIFRSVUUpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2dlc3R1cmUuZ2V0KCksICJwcmVzc2VkIiwg
R19DQUxMQkFDSyhwcmVzc2VkKSwgdGhpcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9HZXN0dXJl
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9s
bGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNDZkNDU4NGU2MS4uMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiAhVVNFKEdU
SzQpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGli
L0dSZWZQdHIuaD4KLQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7Ci10eXBlZGVm
IHN0cnVjdCBfR2RrRXZlbnRUb3VjaCBHZGtFdmVudFRvdWNoOwotdHlwZWRlZiBzdHJ1Y3QgX0dk
a0V2ZW50U2VxdWVuY2UgR2RrRXZlbnRTZXF1ZW5jZTsKLXR5cGVkZWYgc3RydWN0IF9HdGtHZXN0
dXJlIEd0a0dlc3R1cmU7Ci0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEdlc3R1cmVD
b250cm9sbGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5HZXN0dXJlQ29udHJvbGxl
ckNsaWVudCgpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdm9pZCB0YXAoR2RrRXZlbnRUb3Vj
aCopID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoR2RrRXZlbnRUb3VjaCosIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYWcoR2Rr
RXZlbnRUb3VjaCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxEcmFnKCkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIHN3aXBlKEdka0V2ZW50VG91Y2gqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0Wm9vbShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgY2VudGVyLCBkb3VibGUmIGluaXRpYWxTY2FsZSwgV2ViQ29yZTo6SW50UG9p
bnQmIGluaXRpYWxQb2ludCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB6b29tKGRvdWJsZSBzY2Fs
ZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9yaWdpbikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIGxvbmdQcmVzcyhHZGtFdmVudFRvdWNoKikgPSAwOwotfTsKLQotY2xhc3MgR2VzdHVyZUNv
bnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdlc3R1cmVDb250cm9sbGVyKTsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIEdlc3R1cmVDb250
cm9sbGVyKEd0a1dpZGdldCosIHN0ZDo6dW5pcXVlX3B0cjxHZXN0dXJlQ29udHJvbGxlckNsaWVu
dD4mJik7Ci0KLSAgICBib29sIGlzUHJvY2Vzc2luZ0dlc3R1cmVzKCkgY29uc3Q7Ci0gICAgYm9v
bCBoYW5kbGVFdmVudChHZGtFdmVudCopOwotCi0gICAgdm9pZCByZXNldCgpCi0gICAgewotICAg
ICAgICBtX2RyYWdHZXN0dXJlLnJlc2V0KCk7Ci0gICAgICAgIG1fc3dpcGVHZXN0dXJlLnJlc2V0
KCk7Ci0gICAgICAgIG1fem9vbUdlc3R1cmUucmVzZXQoKTsKLSAgICAgICAgbV9sb25ncHJlc3NH
ZXN0dXJlLnJlc2V0KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNsYXNzIEdlc3R1cmUgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCByZXNldCgpOwotICAgICAgICBib29sIGlzQWN0aXZl
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgaGFuZGxlRXZlbnQoR2RrRXZlbnQqKTsKLQotICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgR2VzdHVyZShHdGtHZXN0dXJlKiwgR2VzdHVyZUNvbnRyb2xsZXJD
bGllbnQmKTsKLQotICAgICAgICBHUmVmUHRyPEd0a0dlc3R1cmU+IG1fZ2VzdHVyZTsKLSAgICAg
ICAgR2VzdHVyZUNvbnRyb2xsZXJDbGllbnQmIG1fY2xpZW50OwotICAgIH07Ci0KLSAgICBjbGFz
cyBEcmFnR2VzdHVyZSBmaW5hbCA6IHB1YmxpYyBHZXN0dXJlIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIERyYWdHZXN0dXJlKEd0a1dpZGdldCosIEdlc3R1cmVDb250cm9sbGVyQ2xpZW50Jik7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIGRyYWcgc3RhcnRlZCwgYWxs
b3dpbmcgdG8gc3RvcCBraW5ldGljIGRlY2VsZXJhdGlvbi4KLSAgICAgICAgdm9pZCBzdGFydERy
YWcoR2RrRXZlbnQqKTsKLSAgICAgICAgdm9pZCBoYW5kbGVEcmFnKEdka0V2ZW50KiwgZG91Ymxl
IHgsIGRvdWJsZSB5KTsKLSAgICAgICAgdm9pZCBjYW5jZWxEcmFnKCk7Ci0gICAgICAgIHZvaWQg
aGFuZGxlVGFwKEdka0V2ZW50Kik7Ci0gICAgICAgIHZvaWQgbG9uZ1ByZXNzRmlyZWQoKTsKLQot
ICAgICAgICBzdGF0aWMgdm9pZCBiZWdpbihEcmFnR2VzdHVyZSosIGRvdWJsZSB4LCBkb3VibGUg
eSwgR3RrR2VzdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCB1cGRhdGUoRHJhZ0dlc3R1cmUq
LCBkb3VibGUgeCwgZG91YmxlIHksIEd0a0dlc3R1cmUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
ZW5kKERyYWdHZXN0dXJlKiwgR2RrRXZlbnRTZXF1ZW5jZSosIEd0a0dlc3R1cmUqKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgY2FuY2VsKERyYWdHZXN0dXJlKiwgR2RrRXZlbnRTZXF1ZW5jZSosIEd0
a0dlc3R1cmUqKTsKLQotICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fc3RhcnQ7Ci0gICAg
ICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9vZmZzZXQ7Ci0gICAgICAgIFJ1bkxvb3A6OlRpbWVy
PERyYWdHZXN0dXJlPiBtX2xvbmdQcmVzc1RpbWVvdXQ7Ci0gICAgICAgIEdSZWZQdHI8R3RrR2Vz
dHVyZT4gbV9sb25nUHJlc3M7Ci0gICAgICAgIGJvb2wgbV9pbkRyYWcgeyBmYWxzZSB9OwotICAg
IH07Ci0KLSAgICBjbGFzcyBTd2lwZUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7Ci0g
ICAgcHVibGljOgotICAgICAgICBTd2lwZUdlc3R1cmUoR3RrV2lkZ2V0KiwgR2VzdHVyZUNvbnRy
b2xsZXJDbGllbnQmKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgc3RhcnRNb21lbnR1
bVNjcm9sbChHZGtFdmVudCosIGRvdWJsZSB2ZWxvY2l0eVgsIGRvdWJsZSB2ZWxvY2l0eVkpOwot
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHN3aXBlKFN3aXBlR2VzdHVyZSosIGRvdWJsZSB2ZWxvY2l0
eVgsIGRvdWJsZSB2ZWxvY2l0eVksIEd0a0dlc3R1cmUqKTsKLSAgICB9OwotCi0gICAgY2xhc3Mg
Wm9vbUdlc3R1cmUgZmluYWwgOiBwdWJsaWMgR2VzdHVyZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBab29tR2VzdHVyZShHdGtXaWRnZXQqLCBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYpOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgY2VudGVyKCkgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgc3RhcnRab29tKCk7Ci0gICAgICAgIHZvaWQgaGFuZGxlWm9vbSgpOwotCi0g
ICAgICAgIHN0YXRpYyB2b2lkIGJlZ2luKFpvb21HZXN0dXJlKiwgR2RrRXZlbnRTZXF1ZW5jZSos
IEd0a0dlc3R1cmUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2NhbGVDaGFuZ2VkKFpvb21HZXN0
dXJlKiwgZG91YmxlIHNjYWxlLCBHdGtHZXN0dXJlKik7Ci0KLSAgICAgICAgZG91YmxlIG1faW5p
dGlhbFNjYWxlIHsgMCB9OwotICAgICAgICBkb3VibGUgbV9zY2FsZSB7IDAgfTsKLSAgICAgICAg
V2ViQ29yZTo6SW50UG9pbnQgbV9pbml0aWFsUG9pbnQ7Ci0gICAgICAgIFdlYkNvcmU6OkludFBv
aW50IG1fdmlld1BvaW50OwotICAgICAgICBSdW5Mb29wOjpUaW1lcjxab29tR2VzdHVyZT4gbV9p
ZGxlOwotICAgIH07Ci0KLSAgICBjbGFzcyBMb25nUHJlc3NHZXN0dXJlIGZpbmFsIDogcHVibGlj
IEdlc3R1cmUgewotICAgIHB1YmxpYzoKLSAgICAgICAgTG9uZ1ByZXNzR2VzdHVyZShHdGtXaWRn
ZXQqLCBHZXN0dXJlQ29udHJvbGxlckNsaWVudCYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
dm9pZCBsb25nUHJlc3NlZChHZGtFdmVudCopOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHByZXNz
ZWQoTG9uZ1ByZXNzR2VzdHVyZSosIGRvdWJsZSB4LCBkb3VibGUgeSwgR3RrR2VzdHVyZSopOwot
ICAgIH07Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R2VzdHVyZUNvbnRyb2xsZXJDbGllbnQ+IG1f
Y2xpZW50OwotICAgIERyYWdHZXN0dXJlIG1fZHJhZ0dlc3R1cmU7Ci0gICAgU3dpcGVHZXN0dXJl
IG1fc3dpcGVHZXN0dXJlOwotICAgIFpvb21HZXN0dXJlIG1fem9vbUdlc3R1cmU7Ci0gICAgTG9u
Z1ByZXNzR2VzdHVyZSBtX2xvbmdwcmVzc0dlc3R1cmU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
Vmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCmluZGV4IDM1YTc5YTVmNzlkOC4uZDRjY2Nk
M2JjMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1
cmVDb250cm9sbGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmll
d0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcApAQCAtNDgsOSArNDgsOSBAQCBzdGF0aWMgY29uc3Qg
ZG91YmxlIHN3aXBlQW5pbWF0aW9uRHVyYXRpb25NdWx0aXBsaWVyID0gMzsKIHN0YXRpYyBjb25z
dCBkb3VibGUgc3dpcGVDYW5jZWxBcmVhID0gMC41Owogc3RhdGljIGNvbnN0IGRvdWJsZSBzd2lw
ZUNhbmNlbFZlbG9jaXR5VGhyZXNob2xkID0gMC40OwogCi1zdGF0aWMgYm9vbCBpc0V2ZW50U3Rv
cChHZGtFdmVudFNjcm9sbCogZXZlbnQpCitzdGF0aWMgYm9vbCBpc0V2ZW50U3RvcChQbGF0Zm9y
bUd0a1Njcm9sbERhdGEqIGV2ZW50KQogewotICAgIHJldHVybiBnZGtfZXZlbnRfaXNfc2Nyb2xs
X3N0b3BfZXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CisgICAgcmV0
dXJuIGV2ZW50LT5pc0VuZDsKIH0KIAogdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnBsYXRm
b3JtVGVhcmRvd24oKQpAQCAtNTgsNDUgKzU4LDM0IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpwbGF0Zm9ybVRlYXJkb3duKCkKICAgICBjYW5jZWxTd2lwZSgpOwogfQogCi1ib29sIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5T
dGFydFN3aXBlKEdka0V2ZW50U2Nyb2xsKikKK2Jvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpQ
ZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhblN0YXJ0U3dpcGUoUGxhdGZvcm1HdGtT
Y3JvbGxEYXRhKikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNrZXI6OnNjcm9sbEV2ZW50Q2FuRW5kU3dpcGUoR2Rr
RXZlbnRTY3JvbGwqIGV2ZW50KQorYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdT
d2lwZVRyYWNrZXI6OnNjcm9sbEV2ZW50Q2FuRW5kU3dpcGUoUGxhdGZvcm1HdGtTY3JvbGxEYXRh
KiBldmVudCkKIHsKICAgICByZXR1cm4gaXNFdmVudFN0b3AoZXZlbnQpOwogfQogCi1ib29sIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5J
bmZsdWVuY2VTd2lwZShHZGtFdmVudFNjcm9sbCogZXZlbnQpCitib29sIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2Nyb2xsRXZlbnRDYW5JbmZsdWVuY2VTd2lw
ZShQbGF0Zm9ybUd0a1Njcm9sbERhdGEqIGV2ZW50KQogewotICAgIEdka0RldmljZSogZGV2aWNl
ID0gZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQq
PihldmVudCkpOwotICAgIEdka0lucHV0U291cmNlIHNvdXJjZSA9IGdka19kZXZpY2VfZ2V0X3Nv
dXJjZShkZXZpY2UpOwotCi0gICAgYm9vbCBpc0RldmljZUFsbG93ZWQgPSBzb3VyY2UgPT0gR0RL
X1NPVVJDRV9UT1VDSFBBRCB8fCBzb3VyY2UgPT0gR0RLX1NPVVJDRV9UT1VDSFNDUkVFTiB8fCBt
X3ZpZXdHZXN0dXJlQ29udHJvbGxlci5tX2lzU2ltdWxhdGVkU3dpcGU7Ci0KLSAgICByZXR1cm4g
Z2RrX2V2ZW50X2dldF9zY3JvbGxfZGVsdGFzKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihl
dmVudCksIG51bGxwdHIsIG51bGxwdHIpICYmIGlzRGV2aWNlQWxsb3dlZDsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgaXNUb3VjaEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVu
dCkKK3N0YXRpYyBib29sIGlzVG91Y2hFdmVudChQbGF0Zm9ybUd0a1Njcm9sbERhdGEqIGV2ZW50
KQogewotICAgIEdka0RldmljZSogZGV2aWNlID0gZ2RrX2V2ZW50X2dldF9zb3VyY2VfZGV2aWNl
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpOwotICAgIEdka0lucHV0U291cmNl
IHNvdXJjZSA9IGdka19kZXZpY2VfZ2V0X3NvdXJjZShkZXZpY2UpOwotCi0gICAgcmV0dXJuIHNv
dXJjZSA9PSBHREtfU09VUkNFX1RPVUNIU0NSRUVOOworICAgIHJldHVybiBldmVudC0+aXNUb3Vj
aDsKIH0KIAotRmxvYXRTaXplIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJh
Y2tlcjo6c2Nyb2xsRXZlbnRHZXRTY3JvbGxpbmdEZWx0YXMoR2RrRXZlbnRTY3JvbGwqIGV2ZW50
KQorRmxvYXRTaXplIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6
c2Nyb2xsRXZlbnRHZXRTY3JvbGxpbmdEZWx0YXMoUGxhdGZvcm1HdGtTY3JvbGxEYXRhKiBldmVu
dCkKIHsKICAgICBkb3VibGUgbXVsdGlwbGllciA9IGlzVG91Y2hFdmVudChldmVudCkgPyBTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkgOiBndGtTY3JvbGxEZWx0YU11bHRpcGxpZXI7Ci0g
ICAgZG91YmxlIHhEZWx0YSwgeURlbHRhOwotICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRh
cyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmeERlbHRhLCAmeURlbHRhKTsK
LQotICAgIC8vIEdka0V2ZW50U2Nyb2xsIGRlbHRhcyBhcmUgaW52ZXJ0ZWQgY29tcGFyZWQgdG8g
TlNFdmVudCwgc28gaW52ZXJ0IHRoZW0gYWdhaW4KLSAgICByZXR1cm4gLUZsb2F0U2l6ZSh4RGVs
dGEsIHlEZWx0YSkgKiBtdWx0aXBsaWVyOworICAgIC8vIEdUSyBkZWx0YXMgYXJlIGludmVydGVk
IGNvbXBhcmVkIHRvIE5TRXZlbnQsIHNvIGludmVydCB0aGVtIGFnYWluCisgICAgcmV0dXJuIC1G
bG9hdFNpemUoZXZlbnQtPmRlbHRhLCAwKSAqIG11bHRpcGxpZXI7CiB9CiAKLWJvb2wgVmlld0dl
c3R1cmVDb250cm9sbGVyOjpoYW5kbGVTY3JvbGxXaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBl
dmVudCkKK2Jvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVTY3JvbGxXaGVlbEV2ZW50
KFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7CiAgICAgcmV0dXJuIG1fc3dpcGVQcm9n
cmVzc1RyYWNrZXIuaGFuZGxlRXZlbnQoZXZlbnQpIHx8IG1fcGVuZGluZ1N3aXBlVHJhY2tlci5o
YW5kbGVFdmVudChldmVudCk7CiB9CkBAIC0xNDYsNyArMTM1LDcgQEAgdm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OlN3aXBlUHJvZ3Jlc3NUcmFja2VyOjpyZXNldCgpCiAgICAgbV9jYW5jZWxs
ZWQgPSBmYWxzZTsKIH0KIAotYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlUHJvZ3Jl
c3NUcmFja2VyOjpoYW5kbGVFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCitib29sIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVQcm9ncmVzc1RyYWNrZXI6OmhhbmRsZUV2ZW50KFBsYXRm
b3JtR3RrU2Nyb2xsRGF0YSogZXZlbnQpCiB7CiAgICAgLy8gRG9uJ3QgYWxsb3cgc2Nyb2xsaW5n
IHdoaWxlIHRoZSBuZXh0IHBhZ2UgaXMgbG9hZGluZwogICAgIGlmIChtX3N0YXRlID09IFN0YXRl
OjpGaW5pc2hpbmcpCkBAIC0xNzUsOSArMTY0LDggQEAgYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OlN3aXBlUHJvZ3Jlc3NUcmFja2VyOjpoYW5kbGVFdmVudChHZGtFdmVudFNjcm9sbCogZXYK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHVpbnQzMl90IGV2ZW50VGltZSA9
IGdka19ldmVudF9nZXRfdGltZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsK
LSAgICBkb3VibGUgZXZlbnREZWx0YVg7Ci0gICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVsdGFz
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksICZldmVudERlbHRhWCwgbnVsbHB0
cik7CisgICAgdWludDMyX3QgZXZlbnRUaW1lID0gZXZlbnQtPmV2ZW50VGltZTsKKyAgICBkb3Vi
bGUgZXZlbnREZWx0YVggPSBldmVudC0+ZGVsdGE7CiAKICAgICBkb3VibGUgZGVsdGFYID0gLWV2
ZW50RGVsdGFYOwogICAgIGlmIChpc1RvdWNoRXZlbnQoZXZlbnQpKSB7CkBAIC0yODEsNiArMjY5
LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlUHJvZ3Jlc3NUcmFja2VyOjpl
bmRBbmltYXRpb24oKQogICAgIG1fdmlld0dlc3R1cmVDb250cm9sbGVyLmVuZFN3aXBlR2VzdHVy
ZShtX3RhcmdldEl0ZW0uZ2V0KCksIG1fY2FuY2VsbGVkKTsKIH0KIAorI2lmICFVU0UoR1RLNCkK
IEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmNyZWF0ZVN0
eWxlQ29udGV4dChjb25zdCBjaGFyKiBuYW1lKQogewogICAgIGJvb2wgaXNSVEwgPSBtX3dlYlBh
Z2VQcm94eS51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6VXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbjo6UlRMOwpAQCAtMzIwLDYgKzMwOSw3IEBAIHN0YXRpYyBp
bnQgZWxlbWVudFdpZHRoKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCkKIAogICAgIHJldHVybiB3
aWR0aDsKIH0KKyNlbmRpZgogCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lw
ZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwgU3dpcGVEaXJlY3Rp
b24gZGlyZWN0aW9uKQogewpAQCAtMzQ2LDYgKzMzNiw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250
cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJ
dGVtCiAgICAgICAgIH0KICAgICB9CiAKKyNpZiAhVVNFKEdUSzQpCiAgICAgaWYgKCFtX2N1cnJl
bnRTd2lwZVNuYXBzaG90UGF0dGVybikgewogICAgICAgICBHZGtSR0JBIGNvbG9yOwogICAgICAg
ICBhdXRvKiBjb250ZXh0ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGVfY29udGV4dChtX3dlYlBhZ2VQ
cm94eS52aWV3V2lkZ2V0KCkpOwpAQCAtMzgyLDYgKzM3Myw3IEBAIHZvaWQgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJn
ZXRJdGVtCiAgICAgbV9zd2lwZU91dGxpbmVTaXplID0gZWxlbWVudFdpZHRoKGNvbnRleHQuZ2V0
KCkpOwogICAgIGlmIChtX3N3aXBlT3V0bGluZVNpemUpCiAgICAgICAgIG1fc3dpcGVPdXRsaW5l
UGF0dGVybiA9IGNyZWF0ZUVsZW1lbnRQYXR0ZXJuKGNvbnRleHQuZ2V0KCksIG1fc3dpcGVPdXRs
aW5lU2l6ZSwgc2l6ZS5oZWlnaHQoKSwgc2NhbGUpOworI2VuZGlmCiB9CiAKIHZvaWQgVmlld0dl
c3R1cmVDb250cm9sbGVyOjpoYW5kbGVTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSosIGRvdWJsZSwgU3dpcGVEaXJlY3Rpb24pCkBAIC0zOTksNiArMzkxLDQ5IEBAIHZvaWQgVmll
d0dlc3R1cmVDb250cm9sbGVyOjpjYW5jZWxTd2lwZSgpCiAgICAgfQogfQogCisjaWYgVVNFKEdU
SzQpCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c25hcHNob3QoR3RrU25hcHNob3QqIHNu
YXBzaG90LCBHc2tSZW5kZXJOb2RlKiBwYWdlUmVuZGVyTm9kZSkKK3sKKyAgICBib29sIHN3aXBp
bmdMZWZ0ID0gaXNQaHlzaWNhbGx5U3dpcGluZ0xlZnQobV9zd2lwZVByb2dyZXNzVHJhY2tlci5k
aXJlY3Rpb24oKSk7CisgICAgYm9vbCBzd2lwaW5nQmFjayA9IG1fc3dpcGVQcm9ncmVzc1RyYWNr
ZXIuZGlyZWN0aW9uKCkgPT0gU3dpcGVEaXJlY3Rpb246OkJhY2s7CisgICAgYm9vbCBpc1JUTCA9
IG1fd2ViUGFnZVByb3h5LnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSA9PSBXZWJDb3Jl
OjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpSVEw7CisgICAgZmxvYXQgcHJvZ3Jlc3Mg
PSBtX3N3aXBlUHJvZ3Jlc3NUcmFja2VyLnByb2dyZXNzKCk7CisKKyAgICBhdXRvIHNpemUgPSBt
X3dlYlBhZ2VQcm94eS5kcmF3aW5nQXJlYSgpLT5zaXplKCk7CisgICAgaW50IHdpZHRoID0gc2l6
ZS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIGRvdWJsZSBz
Y2FsZSA9IG1fd2ViUGFnZVByb3h5LmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICBkb3VibGUg
c3dpcGluZ0xheWVyT2Zmc2V0ID0gKHN3aXBpbmdMZWZ0ID8gMCA6IHdpZHRoKSArIGZsb29yKHdp
ZHRoICogcHJvZ3Jlc3MgKiBzY2FsZSkgLyBzY2FsZTsKKworICAgIGRvdWJsZSBkaW1taW5nUHJv
Z3Jlc3MgPSBzd2lwaW5nTGVmdCA/IDEgLSBwcm9ncmVzcyA6IC1wcm9ncmVzczsKKyAgICBpZiAo
aXNSVEwpIHsKKyAgICAgICAgZGltbWluZ1Byb2dyZXNzID0gMSAtIGRpbW1pbmdQcm9ncmVzczsK
KyAgICAgICAgc3dpcGluZ0xheWVyT2Zmc2V0ID0gLSh3aWR0aCAtIHN3aXBpbmdMYXllck9mZnNl
dCk7CisgICAgfQorCisgICAgZ3RrX3NuYXBzaG90X3NhdmUoc25hcHNob3QpOworCisgICAgZ3Jh
cGhlbmVfcG9pbnRfdCB0cmFuc2xhdGlvbiA9IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN3aXBpbmdM
YXllck9mZnNldCksIDAgfTsKKyAgICBpZiAoIXN3aXBpbmdCYWNrKSB7CisgICAgICAgIGd0a19z
bmFwc2hvdF9hcHBlbmRfbm9kZShzbmFwc2hvdCwgcGFnZVJlbmRlck5vZGUpOworICAgICAgICBn
dGtfc25hcHNob3RfdHJhbnNsYXRlKHNuYXBzaG90LCAmdHJhbnNsYXRpb24pOworICAgIH0KKwor
ICAgIGdyYXBoZW5lX3JlY3RfdCByZWN0ID0geyAwLCAwLCAoZmxvYXQpd2lkdGgsIChmbG9hdClo
ZWlnaHQgfTsKKyAgICBhdXRvKiBjciA9IGd0a19zbmFwc2hvdF9hcHBlbmRfY2Fpcm8oc25hcHNo
b3QsICZyZWN0KTsKKyAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2N1cnJlbnRTd2lwZVNuYXBz
aG90UGF0dGVybi5nZXQoKSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBjYWlyb19maWxsKGNyKTsKKworICAgIGlmIChzd2lwaW5nQmFjaykgewor
ICAgICAgICBndGtfc25hcHNob3RfdHJhbnNsYXRlKHNuYXBzaG90LCAmdHJhbnNsYXRpb24pOwor
ICAgICAgICBndGtfc25hcHNob3RfYXBwZW5kX25vZGUoc25hcHNob3QsIHBhZ2VSZW5kZXJOb2Rl
KTsKKyAgICB9CisKKyAgICBndGtfc25hcHNob3RfcmVzdG9yZShzbmFwc2hvdCk7Cit9CisjZWxz
ZQogdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRyYXcoY2Fpcm9fdCogY3IsIGNhaXJvX3Bh
dHRlcm5fdCogcGFnZUdyb3VwKQogewogICAgIGJvb2wgc3dpcGluZ0xlZnQgPSBpc1BoeXNpY2Fs
bHlTd2lwaW5nTGVmdChtX3N3aXBlUHJvZ3Jlc3NUcmFja2VyLmRpcmVjdGlvbigpKTsKQEAgLTQ4
OSw2ICs1MjQsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZHJhdyhjYWlyb190KiBj
ciwgY2Fpcm9fcGF0dGVybl90KiBwYWdlR3JvdXApCiAKICAgICBjYWlyb19yZXN0b3JlKGNyKTsK
IH0KKyNlbmRpZgogCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cmVtb3ZlU3dpcGVTbmFw
c2hvdCgpCiB7CkBAIC01MTgsMzcgKzU1NCw2IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVy
OjpyZW1vdmVTd2lwZVNuYXBzaG90KCkKICAgICBtX3N3aXBlUHJvZ3Jlc3NUcmFja2VyLnJlc2V0
KCk7CiB9CiAKLXN0YXRpYyBHVW5pcXVlUHRyPEdka0V2ZW50PiBjcmVhdGVTY3JvbGxFdmVudChH
dGtXaWRnZXQqIHdpZGdldCwgZG91YmxlIHhEZWx0YSwgZG91YmxlIHlEZWx0YSkKLXsKLSAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwotCi0gICAg
aW50IHgsIHk7Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9vcmlnaW4od2luZG93LCAmeCwgJnkp
OwotCi0gICAgaW50IHdpZHRoID0gZ2RrX3dpbmRvd19nZXRfd2lkdGgod2luZG93KTsKLSAgICBp
bnQgaGVpZ2h0ID0gZ2RrX3dpbmRvd19nZXRfaGVpZ2h0KHdpbmRvdyk7Ci0KLSAgICBHVW5pcXVl
UHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19TQ1JPTEwpKTsKLSAgICBldmVu
dC0+c2Nyb2xsLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2ZW50LT5zY3JvbGwueCA9
IHdpZHRoIC8gMjsKLSAgICBldmVudC0+c2Nyb2xsLnkgPSBoZWlnaHQgLyAyOwotICAgIGV2ZW50
LT5zY3JvbGwueF9yb290ID0geCArIHdpZHRoIC8gMjsKLSAgICBldmVudC0+c2Nyb2xsLnlfcm9v
dCA9IHkgKyBoZWlnaHQgLyAyOwotICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1ND
Uk9MTF9TTU9PVEg7Ci0gICAgZXZlbnQtPnNjcm9sbC5kZWx0YV94ID0geERlbHRhOwotICAgIGV2
ZW50LT5zY3JvbGwuZGVsdGFfeSA9IHlEZWx0YTsKLSAgICBldmVudC0+c2Nyb2xsLnN0YXRlID0g
MDsKLSAgICBldmVudC0+c2Nyb2xsLmlzX3N0b3AgPSAheERlbHRhICYmICF5RGVsdGE7Ci0gICAg
ZXZlbnQtPnNjcm9sbC53aW5kb3cgPSBHREtfV0lORE9XKGdfb2JqZWN0X3JlZih3aW5kb3cpKTsK
LSAgICBnZGtfZXZlbnRfc2V0X3NjcmVlbihldmVudC5nZXQoKSwgZ2RrX3dpbmRvd19nZXRfc2Ny
ZWVuKHdpbmRvdykpOwotCi0gICAgR2RrRGV2aWNlKiBwb2ludGVyID0gZ2RrX3NlYXRfZ2V0X3Bv
aW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHRfc2VhdChnZGtfd2luZG93X2dldF9kaXNwbGF5
KHdpbmRvdykpKTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudC5nZXQoKSwgcG9pbnRl
cik7Ci0gICAgZ2RrX2V2ZW50X3NldF9zb3VyY2VfZGV2aWNlKGV2ZW50LmdldCgpLCBwb2ludGVy
KTsKLQotICAgIHJldHVybiBldmVudDsKLX0KLQogYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OmJlZ2luU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoU3dpcGVEaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogICAgIGlmICghY2FuU3dpcGVJbkRpcmVjdGlvbihkaXJlY3Rpb24pKQpA
QCAtNTYxLDE3ICs1NjYsMTYgQEAgYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU2lt
dWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoU3dpcGVEaXJlY3QKICAgICBpZiAoaXNQ
aHlzaWNhbGx5U3dpcGluZ0xlZnQoZGlyZWN0aW9uKSkKICAgICAgICAgZGVsdGEgPSAtZGVsdGE7
CiAKLSAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBldmVudCA9IGNyZWF0ZVNjcm9sbEV2ZW50KG1f
d2ViUGFnZVByb3h5LnZpZXdXaWRnZXQoKSwgZGVsdGEsIDApOwotICAgIGd0a193aWRnZXRfZXZl
bnQobV93ZWJQYWdlUHJveHkudmlld1dpZGdldCgpLCBldmVudC5nZXQoKSk7CisgICAgUGxhdGZv
cm1HdGtTY3JvbGxEYXRhIHNjcm9sbERhdGEgPSB7IC5kZWx0YSA9IGRlbHRhLCAuZXZlbnRUaW1l
ID0gR0RLX0NVUlJFTlRfVElNRSwgLmlzVG91Y2ggPSBmYWxzZSwgLmlzRW5kID0gZmFsc2UgfTsK
KyAgICBoYW5kbGVTY3JvbGxXaGVlbEV2ZW50KCZzY3JvbGxEYXRhKTsKIAogICAgIHJldHVybiB0
cnVlOwogfQogCiBib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y29tcGxldGVTaW11bGF0ZWRT
d2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhTd2lwZURpcmVjdGlvbikKIHsKLSAgICBHVW5pcXVl
UHRyPEdka0V2ZW50PiBldmVudCA9IGNyZWF0ZVNjcm9sbEV2ZW50KG1fd2ViUGFnZVByb3h5LnZp
ZXdXaWRnZXQoKSwgMCwgMCk7Ci0gICAgZ3RrX3dpZGdldF9ldmVudChtX3dlYlBhZ2VQcm94eS52
aWV3V2lkZ2V0KCksIGV2ZW50LmdldCgpKTsKLQorICAgIFBsYXRmb3JtR3RrU2Nyb2xsRGF0YSBz
Y3JvbGxEYXRhID0geyAuZGVsdGEgPSAwLCAuZXZlbnRUaW1lID0gR0RLX0NVUlJFTlRfVElNRSwg
LmlzVG91Y2ggPSBmYWxzZSwgLmlzRW5kID0gdHJ1ZSB9OworICAgIGhhbmRsZVNjcm9sbFdoZWVs
RXZlbnQoJnNjcm9sbERhdGEpOwogICAgIG1faXNTaW11bGF0ZWRTd2lwZSA9IGZhbHNlOwogCiAg
ICAgcmV0dXJuIHRydWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>