<?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>108062</bug_id>
          
          <creation_ts>2013-01-28 00:59:57 -0800</creation_ts>
          <short_desc>[EFL][WK2] Encapsulate Ewk View evas smart object code inside EwkView class</short_desc>
          <delta_ts>2013-02-06 01:56:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>107657</blocked>
    
    <blocked>107662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>817582</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-28 00:59:57 -0800</bug_when>
    <thetext>SSIA. Part of EwkView refactoring described at https://bugs.webkit.org/show_bug.cgi?id=107662#c1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820528</commentid>
    <comment_count>1</comment_count>
      <attachid>185561</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-30 14:10:54 -0800</bug_when>
    <thetext>Created attachment 185561
WIP patch

WIP as: it is better to be based on bug#107931 patch + there are still some areas to improve</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821230</commentid>
    <comment_count>2</comment_count>
      <attachid>185561</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-31 01:00:08 -0800</bug_when>
    <thetext>Comment on attachment 185561
WIP patch

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:41
&gt; +    return toAPI(view-&gt;evasObject());

I think we should probably ref the returned Evas Object since the is a *Create function.

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:50
&gt; +    return toAPI(view-&gt;evasObject());

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:122
&gt; +template &lt;_Evas_Callback_Type EventType&gt;

I would remove leading &apos;_&apos;. Evas_Callback_Type exists.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:347
&gt; +    Evas_Object* evasObject = evas_object_smart_add(canvas, smart);

Could we use RefPtr here to simplify memory handling?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:352
&gt; +        evas_object_del(evasObject);

Would not be needed if we used a RefPtr.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:360
&gt; +    smartData-&gt;priv = new EwkView(evasObject, context, toImpl(pageGroupRef), behavior);

Would be nice to remove the call to toImpl() here but I guess this is outside the scope of this patch?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:421
&gt; +bool EwkView::isFromEwkView(const Evas_Object* evasObject)

isEwkViewObject()? or isEwkView() ? I find the name a bit confusing.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:447
&gt;  Ewk_View_Smart_Data* EwkView::smartData() const

Feels like this method should not be const.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1206
&gt; +    Ewk_View_Smart_Data* smartData = EwkView::smartData(evasObject);

You should probably take a look at EVAS_SMART_DATA_ALLOC() macro:
http://docs.enlightenment.org/auto/evas/group__Evas__Smart__Group.html#ga4aa4b72aafa0391144fb0171aeff2ccd

It would be 1 line instead of 4.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1209
&gt; +        smartData = new Ewk_View_Smart_Data;

I think we used calloc before because it initialized members to 0 and because it is freed on C side. Switching to new is wrong if this is really freed on C side.
Anyway, using EVAS_SMART_DATA_ALLOC() as I proposed earlier would solve this issue as well.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1338
&gt; +#define CHECK_COLOR(color, alpha) \

static inline function?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:114
&gt; +    Ewk_View_Smart_Data* smartData() const;

non const?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:88
&gt;  Evas_Object* ewk_view_smart_add(Evas* canvas, Evas_Smart* smart, Ewk_Context* context)

I think the behavior is different here. Before, the caller owned the returned Evas_Object, now it doesn&apos;t. I think the previous behavior made more sense. Probably we should ref the returned evas_object.

&gt; Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp:85
&gt; +// FIXME: should have this in some generic place

If the EwkContext::create() factory function took a WKContextRef in argument, we wouldn&apos;t need this function probably. I think it is duplicated now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821241</commentid>
    <comment_count>3</comment_count>
      <attachid>185561</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-31 01:19:33 -0800</bug_when>
    <thetext>Comment on attachment 185561
WIP patch

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:40
&gt; +    EwkView* view = EwkView::create(canvas, ewkContext(contextRef), pageGroupRef, EwkView::LegacyBehavior);
&gt; +    if (!view)
&gt; +        return 0;
&gt; +

why not

if (EwkView* view = ...)
    return toAPI...
return 0;

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:90
&gt; +// Aux functions.

spell out aux

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:92
&gt; +static PageViewMap&amp; pageViewMap()

maybe we should just call it allViews() like other platforms.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:133
&gt; +    static void unsubscribe(Evas_Object* evasObject)
&gt; +    {
&gt; +        evas_object_event_callback_del(evasObject, EventType, onEvent);
&gt; +    }

could/should these be inline?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:342
&gt; +{

FromSmartClass?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:371
&gt; +    if (!isFromEwkView(evasObject))

isOfEwkViewType ?hmm

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:382
&gt; +EwkView* EwkView::fromSmartData(const Ewk_View_Smart_Data* smartData)
&gt; +{
&gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(smartData, 0);
&gt; +
&gt; +    return smartData-&gt;priv;
&gt; +}

why is this EINA... better than just return smartData ? smartData-&gt;priv : 0; ?

The method should probably be inline

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:406
&gt; +    api.sc.data = smartClassName; // It is used by type checking.

s/by/for/

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:413
&gt; +    api.mouse_wheel = onViewSmartMouseWheel;
&gt; +    api.mouse_down = onViewSmartMouseDown;
&gt; +    api.mouse_up = onViewSmartMouseUp;

I would remove the Smart part of the name.

handleViewMouseUpEvent?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1240
&gt; +        ASSERT(smartData-&gt;priv); // smartData-&gt;priv is EwkView instance to delete.

is owned by EwkView ?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1298
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +        view-&gt;setNeedsSurfaceResize();

do we even work without accelerated compositing?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1358
&gt; +    EwkView* self = EwkView::fromSmartData(smartData);
&gt; +    ASSERT(self);

ASSERT inside fromSmartData?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:247
&gt; +    // Ewk_View_Smart_Class functions.

s/functions/interface ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821478</commentid>
    <comment_count>4</comment_count>
      <attachid>185561</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-31 06:27:55 -0800</bug_when>
    <thetext>Comment on attachment 185561
WIP patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:92
&gt;&gt; +static PageViewMap&amp; pageViewMap()
&gt; 
&gt; maybe we should just call it allViews() like other platforms.

I think we can get rid of this HashMap all together. The Map keeps the mapping between a WKPageRef and an Evas_Object. However, you can already get the Evas_object from the page via WebPageProxy::viewWidget(). We probably need a C API for this one though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821483</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 06:34:20 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 185561 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185561&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:92
&gt; &gt;&gt; +static PageViewMap&amp; pageViewMap()
&gt; &gt; 
&gt; &gt; maybe we should just call it allViews() like other platforms.
&gt; 
&gt; I think we can get rid of this HashMap all together. The Map keeps the mapping between a WKPageRef and an Evas_Object. However, you can already get the Evas_object from the page via WebPageProxy::viewWidget(). We probably need a C API for this one though.

Thanks Chris! Great finding :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821790</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 11:57:18 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 185561 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185561&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:41
&gt; &gt; +    return toAPI(view-&gt;evasObject());
&gt; 
&gt; I think we should probably ref the returned Evas Object since the is a *Create function.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:50
&gt; &gt; +    return toAPI(view-&gt;evasObject());
&gt; 
&gt; Ditto.
&gt; 
Right.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:122
&gt; &gt; +template &lt;_Evas_Callback_Type EventType&gt;
&gt; 
&gt; I would remove leading &apos;_&apos;. Evas_Callback_Type exists.
Sure.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:347
&gt; &gt; +    Evas_Object* evasObject = evas_object_smart_add(canvas, smart);
&gt; 
&gt; Could we use RefPtr here to simplify memory handling?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:352
&gt; &gt; +        evas_object_del(evasObject);
&gt; 
&gt; Would not be needed if we used a RefPtr.
Do not fully agree as it would bring another ugliness like:
smartData-&gt;priv = new EwkView(evasObject.release().leakRef(), context, toImpl(pageGroupRef), behavior);

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:360
&gt; &gt; +    smartData-&gt;priv = new EwkView(evasObject, context, toImpl(pageGroupRef), behavior);
&gt; 
&gt; Would be nice to remove the call to toImpl() here but I guess this is outside the scope of this patch?
&gt; 
Yeah let&apos;s do it within another patch

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:421
&gt; &gt; +bool EwkView::isFromEwkView(const Evas_Object* evasObject)
&gt; 
&gt; isEwkViewObject()? or isEwkView() ? I find the name a bit confusing.
thinking of it..

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:447
&gt; &gt;  Ewk_View_Smart_Data* EwkView::smartData() const
&gt; 
&gt; Feels like this method should not be const.
Agree, But this &apos;const&apos; was already there. Removing of it
is leading to further code modifications which are certainly beyond this bug scope.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1206
&gt; &gt; +    Ewk_View_Smart_Data* smartData = EwkView::smartData(evasObject);
&gt; 
&gt; You should probably take a look at EVAS_SMART_DATA_ALLOC() macro:
&gt; http://docs.enlightenment.org/auto/evas/group__Evas__Smart__Group.html#ga4aa4b72aafa0391144fb0171aeff2ccd
&gt; 
&gt; It would be 1 line instead of 4.
Unfortunately EVAS_SMART_DATA_ALLOC() cannot be compiled with C++ compiler:
priv_type * priv;                                      \
  priv = evas_object_smart_data_get(o);                  \

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1209
&gt; &gt; +        smartData = new Ewk_View_Smart_Data;
&gt; 
&gt; I think we used calloc before because it initialized members to 0 and because it is freed on C side. Switching to new is wrong if this is really freed on C side.
&gt; Anyway, using EVAS_SMART_DATA_ALLOC() as I proposed earlier would solve this issue as well.
&gt; 
Ok, will put calloc back

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1338
&gt; &gt; +#define CHECK_COLOR(color, alpha) \
&gt; 
&gt; static inline function?
Well ok, even though I would not touch it in this patch.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:88
&gt; &gt;  Evas_Object* ewk_view_smart_add(Evas* canvas, Evas_Smart* smart, Ewk_Context* context)
&gt; 
&gt; I think the behavior is different here. Before, the caller owned the returned Evas_Object, now it doesn&apos;t. I think the previous behavior made more sense. Probably we should ref the returned evas_object.
&gt; 
It&apos;s not that different as Evas_Object &quot;owns&quot; EwkView in terms of deletion.

&gt; &gt; Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp:85
&gt; &gt; +// FIXME: should have this in some generic place
&gt; 
&gt; If the EwkContext::create() factory function took a WKContextRef in argument, we wouldn&apos;t need this function probably. I think it is duplicated now.
yeah..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821809</commentid>
    <comment_count>7</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 12:08:31 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 185561 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185561&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:40
&gt; &gt; +    EwkView* view = EwkView::create(canvas, ewkContext(contextRef), pageGroupRef, EwkView::LegacyBehavior);
&gt; &gt; +    if (!view)
&gt; &gt; +        return 0;
&gt; &gt; +
&gt; 
&gt; why not
&gt; 
&gt; if (EwkView* view = ...)
&gt;     return toAPI...
&gt; return 0;
ok.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:90
&gt; &gt; +// Aux functions.
&gt; 
&gt; spell out aux
ok.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:92
&gt; &gt; +static PageViewMap&amp; pageViewMap()
&gt; 
&gt; maybe we should just call it allViews() like other platforms.
Removed it at all as proposed by Chris :)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:133
&gt; &gt; +    static void unsubscribe(Evas_Object* evasObject)
&gt; &gt; +    {
&gt; &gt; +        evas_object_event_callback_del(evasObject, EventType, onEvent);
&gt; &gt; +    }
&gt; 
&gt; could/should these be inline?
They are already inline as defined inside class declaration.
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:382
&gt; &gt; +EwkView* EwkView::fromSmartData(const Ewk_View_Smart_Data* smartData)
&gt; &gt; +{
&gt; &gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(smartData, 0);
&gt; &gt; +
&gt; &gt; +    return smartData-&gt;priv;
&gt; &gt; +}
&gt; 
&gt; why is this EINA... better than just return smartData ? smartData-&gt;priv : 0; ?
I was thinking of logging, but Ok.
&gt; 
&gt; The method should probably be inline
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:406
&gt; &gt; +    api.sc.data = smartClassName; // It is used by type checking.
&gt; 
&gt; s/by/for/
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:413
&gt; &gt; +    api.mouse_wheel = onViewSmartMouseWheel;
&gt; &gt; +    api.mouse_down = onViewSmartMouseDown;
&gt; &gt; +    api.mouse_up = onViewSmartMouseUp;
&gt; 
&gt; I would remove the Smart part of the name.
&gt; 
&gt; handleViewMouseUpEvent?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1240
&gt; &gt; +        ASSERT(smartData-&gt;priv); // smartData-&gt;priv is EwkView instance to delete.
&gt; 
&gt; is owned by EwkView ?
Can be deleted only via deleting of its evasObject.
(As API clients still operate with evasObject).

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1298
&gt; &gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; &gt; +        view-&gt;setNeedsSurfaceResize();
&gt; 
&gt; do we even work without accelerated compositing?
not sure, but the patch is not about that :) 
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1358
&gt; &gt; +    EwkView* self = EwkView::fromSmartData(smartData);
&gt; &gt; +    ASSERT(self);
&gt; 
&gt; ASSERT inside fromSmartData?
mmm.. no. smartData-&gt;priv can be 0 in theory.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:247
&gt; &gt; +    // Ewk_View_Smart_Class functions.
&gt; 
&gt; s/functions/interface ?
sure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821895</commentid>
    <comment_count>8</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 13:33:20 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 185561 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185561&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:41
&gt; &gt; &gt; +    return toAPI(view-&gt;evasObject());
&gt; &gt; 
&gt; &gt; I think we should probably ref the returned Evas Object since the is a *Create function.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:50
&gt; &gt; &gt; +    return toAPI(view-&gt;evasObject());
&gt; &gt; 
&gt; &gt; Ditto.
The evas object used to be returned un-refed before and the client code that we have (like WTR-EFL) is adapted to it (does not consider WKRetain WKRelease at all).. 

The main problem is in EFL way of evas object ref-counting: practically evas object has duplicated internal and external ref-counts
http://docs.enlightenment.org/auto/evas/group__Evas__Object__Group__Basic.html

Off course we&apos;ll have to reconsider our WKView API implementation, testing code and maybe RefPtr implementation for EvasObject to fix this mess.
 
However I don&apos;t think this work should be done within this particular patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821897</commentid>
    <comment_count>9</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 13:38:29 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:413
&gt; &gt; +    api.mouse_wheel = onViewSmartMouseWheel;
&gt; &gt; +    api.mouse_down = onViewSmartMouseDown;
&gt; &gt; +    api.mouse_up = onViewSmartMouseUp;
&gt; 
&gt; I would remove the Smart part of the name.
&gt; 
&gt; handleViewMouseUpEvent?
&gt; 

I would keep &apos;smart&apos; in the name as it clarifies that those methods are
smart class API implementation (&apos;smart&apos; here means EFL term - not real smartness :) ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822626</commentid>
    <comment_count>10</comment_count>
      <attachid>186010</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 04:43:53 -0800</bug_when>
    <thetext>Created attachment 186010
WIP 2

Included corrections due to comments from Chris and Kenneth (Thanks for having a look!). Changed the factory methods so that they return evas_object as it is more convenient for the clients. Renamed &apos;evasObjects&apos; to &apos;viewObjects&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822628</commentid>
    <comment_count>11</comment_count>
      <attachid>186010</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 04:46:00 -0800</bug_when>
    <thetext>Comment on attachment 186010
WIP 2

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

&gt; Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp:85
&gt; +// FIXME: should have this in some generic place

ahh.. forgot to delete this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822645</commentid>
    <comment_count>12</comment_count>
      <attachid>186010</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-01 05:05:41 -0800</bug_when>
    <thetext>Comment on attachment 186010
WIP 2

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:90
&gt; +static inline PassRefPtr&lt;EwkContext&gt; defaultIfNull(WKContextRef contextRef)

I wish I could find a better name

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:111
&gt; +    if (EINA_UNLIKELY(!smart)) {

why not use UNLIKELY from WTF. Also I dont see the point, this is not a hotspot code path at all, quite the opposite

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:125
&gt; +    ASSERT(upperLimit);
&gt; +    if (value &lt; 0)
&gt; +        value = 0;
&gt; +    if (value &gt; upperLimit)
&gt; +        value = upperLimit;

why not use one of the min/max methods. Doesnt WTF have a bound method or so?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:236
&gt; +    // This call may look wrong, but we really need to pass ViewIsVisible here.

I dont like that line

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:333
&gt; +    Evas_Object* viewObject = evas_object_smart_add(canvas, smart);

RefPtr?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:360
&gt; +EwkView* EwkView::fromEvasObject(const Evas_Object* evasObject)

WebKit usually does this the other way around: toEwkView(const Evas_... and as a free function. I guess you just need to make the isViewObject a free function

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:412
&gt; +bool EwkView::isViewObject(const Evas_Object* evasObject)
&gt; +{
&gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(evasObject, false);

this should be a free function

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1204
&gt; +        // Allocating with &apos;calloc&apos; as will be deleted with &apos;free&apos;

as the API contract is that it should be deleted with &apos;free()&apos;.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:110
&gt; +    static Evas_Object* createViewObject(Evas* canvas, Evas_Smart* smart, PassRefPtr&lt;EwkContext&gt; context,  WKPageGroupRef pageGroupRef = 0, ViewBehavior behavior = EwkView::DefaultBehavior);
&gt; +    static Evas_Object* createViewObject(Evas* canvas, PassRefPtr&lt;EwkContext&gt; context, WKPageGroupRef pageGroupRef = 0, ViewBehavior behavior = EwkView::DefaultBehavior);
&gt; +    static Evas_Object* createViewObject(Evas* canvas, WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0, ViewBehavior behavior = EwkView::DefaultBehavior);

wow, cant these be consolidates.. or at least have some comments attached!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822750</commentid>
    <comment_count>13</comment_count>
      <attachid>186042</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 07:23:01 -0800</bug_when>
    <thetext>Created attachment 186042
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822778</commentid>
    <comment_count>14</comment_count>
      <attachid>186042</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 07:50:17 -0800</bug_when>
    <thetext>Comment on attachment 186042
patch

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:106
&gt; +    static Ewk_View_Smart_Class api = EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION(&quot;Ewk_View&quot;);

Why aren&apos;t we using smartClassName here?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:-114
&gt; -    : m_evasObject(evasObject)

I think this was clearer before. We have 3 objects for the view: Evas_Object, EwkView and WebView. Calling something viewObject is just confusing IMHO.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:315
&gt; +Evas_Object* EwkView::createViewObject(Evas* canvas, Evas_Smart* smart, PassRefPtr&lt;EwkContext&gt; context, WKPageGroupRef pageGroupRef, ViewBehavior behavior)

viewObject -&gt; EvasObject?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:338
&gt; +Evas_Object* EwkView::createViewObject(Evas* canvas, PassRefPtr&lt;EwkContext&gt; context, WKPageGroupRef pageGroupRef, ViewBehavior behavior)

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:380
&gt; +const Evas_Object* EwkView::viewObjectFromPage(WKPageRef page)

I think Kenneth said he preferred &apos;to&apos; functions instead of &apos;from&apos; ones?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:383
&gt; +    return toImpl(page)-&gt;viewWidget();

So we&apos;ll add the C API for this one later?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1442
&gt; +    return smartData ? smartData-&gt;priv : 0;

Could we replace the if condition with an assertion? ASSERT(smartData); I don&apos;t think it is acceptable to pass NULL to this function.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1445
&gt; +bool isViewObject(const Evas_Object* evasObject)

isViewEvasObject()?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:114
&gt; +    Ewk_View_Smart_Data* smartData() const;

So this one is const? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822810</commentid>
    <comment_count>15</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 08:24:54 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 186042 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186042&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:106
&gt; &gt; +    static Ewk_View_Smart_Class api = EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION(&quot;Ewk_View&quot;);
&gt; 
&gt; Why aren&apos;t we using smartClassName here?
It was not used there before, I mean it&apos;s &apos;Ewk_View&apos; not &apos;Ewk2_View&apos;.
However I also think smartClassName is natural to be used there.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:-114
&gt; &gt; -    : m_evasObject(evasObject)
&gt; 
&gt; I think this was clearer before. We have 3 objects for the view: Evas_Object, EwkView and WebView. Calling something viewObject is just confusing IMHO.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:315
&gt; &gt; +Evas_Object* EwkView::createViewObject(Evas* canvas, Evas_Smart* smart, PassRefPtr&lt;EwkContext&gt; context, WKPageGroupRef pageGroupRef, ViewBehavior behavior)
&gt; 
&gt; viewObject -&gt; EvasObject?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:338
&gt; &gt; +Evas_Object* EwkView::createViewObject(Evas* canvas, PassRefPtr&lt;EwkContext&gt; context, WKPageGroupRef pageGroupRef, ViewBehavior behavior)
&gt; 
&gt; Ditto.
Ok.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:380
&gt; &gt; +const Evas_Object* EwkView::viewObjectFromPage(WKPageRef page)
&gt; 
&gt; I think Kenneth said he preferred &apos;to&apos; functions instead of &apos;from&apos; ones?
static const Evas_Object* toEvasObject(WKPageRef);
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:383
&gt; &gt; +    return toImpl(page)-&gt;viewWidget();
&gt; 
&gt; So we&apos;ll add the C API for this one later?
yep.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1442
&gt; &gt; +    return smartData ? smartData-&gt;priv : 0;
&gt; 
&gt; Could we replace the if condition with an assertion? ASSERT(smartData); I don&apos;t think it is acceptable to pass NULL to this function.
&gt; 
Well, I would leave it like this, as this function is for external usage.
EwkView* view = toEwkView(whatever);
if (view)
and if we have assert we would need extra &apos;if (whatever)&apos; beforehand

Besides another version of toEwkView() does not have assertions and they both should be compliant.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1445
&gt; &gt; +bool isViewObject(const Evas_Object* evasObject)
&gt; 
&gt; isViewEvasObject()?
ok.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:114
&gt; &gt; +    Ewk_View_Smart_Data* smartData() const;
&gt; 
&gt; So this one is const? :)
This &apos;const&apos; was already there. Removing it
is leading to further code modifications which are certainly beyond this bug scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822813</commentid>
    <comment_count>16</comment_count>
      <attachid>186054</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 08:29:08 -0800</bug_when>
    <thetext>Created attachment 186054
patch v2

Took comments from Chris into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822822</commentid>
    <comment_count>17</comment_count>
      <attachid>186054</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 08:45:20 -0800</bug_when>
    <thetext>Comment on attachment 186054
patch v2

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822827</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-01 08:54:06 -0800</bug_when>
    <thetext>LGTM, too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825364</commentid>
    <comment_count>19</comment_count>
      <attachid>186595</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 04:21:45 -0800</bug_when>
    <thetext>Created attachment 186595
patch v3

Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825405</commentid>
    <comment_count>20</comment_count>
      <attachid>186595</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 05:34:53 -0800</bug_when>
    <thetext>Comment on attachment 186595
patch v3

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

&gt; Source/WebKit2/ChangeLog:28
&gt; +
&gt; +        * UIProcess/API/C/efl/WKView.cpp:
&gt; +        (WKViewCreate):
&gt; +        (WKViewCreateWithFixedLayout):
&gt; +        (WKViewGetPage):
&gt; +        (WKViewCreateSnapshot):
&gt; +        * UIProcess/API/efl/EwkView.cpp:
&gt; +        (smartDataChanged):
&gt; +        (defaultSmartClassInstance):
&gt; +        (EwkViewEventHandler):
&gt; +        (EwkViewEventHandler::subscribe):
&gt; +        (EwkViewEventHandler::unsubscribe):
&gt; +        (::onEvent):
&gt; +        (EwkView::EwkView):
&gt; +        (EwkView::~EwkView):
&gt; +        (EwkView::createEvasObject):
&gt; +        (EwkView::initSmartClassInterface):
&gt; +        (EwkView::toEvasObject):
&gt; +        (EwkView::smartData):

could use a few words!

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:33
&gt; -    if (!ewkView)
&gt; +    Evas_Object* evasObject = EwkView::createEvasObject(canvas, contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext(), pageGroupRef, EwkView::LegacyBehavior);
&gt; +    if (!evasObject)

what about default page group if no ref is given?

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:43
&gt; -    if (!ewkView)
&gt; +    Evas_Object* evasObject = EwkView::createEvasObject(canvas, contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext(), pageGroupRef, EwkView::LegacyBehavior);
&gt; +    if (!evasObject)
&gt;          return 0;

Can we make the contextRef code be on a separate line

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:172
&gt; +    EINA_SAFETY_ON_NULL_RETURN(smartData-&gt;api);
&gt; +    EINA_SAFETY_ON_NULL_RETURN(smartData-&gt;api-&gt;focus_in);

is the api ever supposed to be null? I can understand that some might not connect to focus_in on the other hand

Why not just

if (smartData-&gt;api-&gt;focus_in)
    smartData-&gt;api-&gt;focus_in(smartData);

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1241
&gt; +void EwkView::onEvasSmartHide(Evas_Object* evasObject)
&gt; +{
&gt; +    Ewk_View_Smart_Data* smartData = EwkView::smartData(evasObject);
&gt; +    EINA_SAFETY_ON_NULL_RETURN(smartData);
&gt; +
&gt; +    evas_object_hide(smartData-&gt;base.clipper);
&gt; +    evas_object_hide(smartData-&gt;image);
&gt; +}

looks like we could jsut use static methods (it seems Qt is going in that direction)... I guess almost call can when we have some additional C API&apos;s like

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1258
&gt; +    evas_object_image_alpha_set(smartData-&gt;image, alpha &lt; 255);
&gt; +    view-&gt;page()-&gt;setDrawsBackground(red || green || blue);
&gt; +    view-&gt;page()-&gt;setDrawsTransparentBackground(alpha &lt; 255);

WKViewSetDrawsBackground</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825412</commentid>
    <comment_count>21</comment_count>
      <attachid>186595</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-05 05:43:19 -0800</bug_when>
    <thetext>Comment on attachment 186595
patch v3

Attachment 186595 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16368674</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825450</commentid>
    <comment_count>22</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 06:56:58 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 186595 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186595&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:28
&gt; &gt; +
&gt; &gt; +        * UIProcess/API/C/efl/WKView.cpp:
&gt; &gt; +        (WKViewCreate):
&gt; &gt; +        (WKViewCreateWithFixedLayout):
&gt; &gt; +        (WKViewGetPage):
&gt; &gt; +        (WKViewCreateSnapshot):
&gt; &gt; +        * UIProcess/API/efl/EwkView.cpp:
&gt; &gt; +        (smartDataChanged):
&gt; &gt; +        (defaultSmartClassInstance):
&gt; &gt; +        (EwkViewEventHandler):
&gt; &gt; +        (EwkViewEventHandler::subscribe):
&gt; &gt; +        (EwkViewEventHandler::unsubscribe):
&gt; &gt; +        (::onEvent):
&gt; &gt; +        (EwkView::EwkView):
&gt; &gt; +        (EwkView::~EwkView):
&gt; &gt; +        (EwkView::createEvasObject):
&gt; &gt; +        (EwkView::initSmartClassInterface):
&gt; &gt; +        (EwkView::toEvasObject):
&gt; &gt; +        (EwkView::smartData):
&gt; 
&gt; could use a few words!
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:33
&gt; &gt; -    if (!ewkView)
&gt; &gt; +    Evas_Object* evasObject = EwkView::createEvasObject(canvas, contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext(), pageGroupRef, EwkView::LegacyBehavior);
&gt; &gt; +    if (!evasObject)
&gt; 
&gt; what about default page group if no ref is given?

This is handled inside WebContext.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:43
&gt; &gt; -    if (!ewkView)
&gt; &gt; +    Evas_Object* evasObject = EwkView::createEvasObject(canvas, contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext(), pageGroupRef, EwkView::LegacyBehavior);
&gt; &gt; +    if (!evasObject)
&gt; &gt;          return 0;
&gt; 
&gt; Can we make the contextRef code be on a separate line

It could.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:172
&gt; &gt; +    EINA_SAFETY_ON_NULL_RETURN(smartData-&gt;api);
&gt; &gt; +    EINA_SAFETY_ON_NULL_RETURN(smartData-&gt;api-&gt;focus_in);
&gt; 
&gt; is the api ever supposed to be null? 
Actually nope and I think it should be assertion.

I can understand that some might not connect to focus_in on the other hand
&gt; 
&gt; Why not just
&gt; 
&gt; if (smartData-&gt;api-&gt;focus_in)
&gt;     smartData-&gt;api-&gt;focus_in(smartData);
Agree.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1241
&gt; &gt; +void EwkView::onEvasSmartHide(Evas_Object* evasObject)
&gt; &gt; +{
&gt; &gt; +    Ewk_View_Smart_Data* smartData = EwkView::smartData(evasObject);
&gt; &gt; +    EINA_SAFETY_ON_NULL_RETURN(smartData);
&gt; &gt; +
&gt; &gt; +    evas_object_hide(smartData-&gt;base.clipper);
&gt; &gt; +    evas_object_hide(smartData-&gt;image);
&gt; &gt; +}
&gt; 
&gt; looks like we could jsut use static methods (it seems Qt is going in that direction)... I guess almost call can when we have some additional C API&apos;s like

those functions are part of the view behaviour and do not make any sense without view, that is why they are part of the class.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1258
&gt; &gt; +    evas_object_image_alpha_set(smartData-&gt;image, alpha &lt; 255);
&gt; &gt; +    view-&gt;page()-&gt;setDrawsBackground(red || green || blue);
&gt; &gt; +    view-&gt;page()-&gt;setDrawsTransparentBackground(alpha &lt; 255);
&gt; 
&gt; WKViewSetDrawsBackground

Sure, but let&apos;s leave it for the next step. The current patch is already big.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825467</commentid>
    <comment_count>23</comment_count>
      <attachid>186622</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 07:27:07 -0800</bug_when>
    <thetext>Created attachment 186622
patch v4

Took Kenneth&apos;s comments into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825480</commentid>
    <comment_count>24</comment_count>
      <attachid>186622</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 07:40:29 -0800</bug_when>
    <thetext>Comment on attachment 186622
patch v4

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:144
&gt; +    Evas_Event_Mouse_Down* downEvent = static_cast&lt;Evas_Event_Mouse_Down*&gt;(eventInfo);
&gt; +    Ewk_View_Smart_Data* smartData = static_cast&lt;Ewk_View_Smart_Data*&gt;(data);
&gt; +    if (smartData-&gt;api-&gt;mouse_down)
&gt; +        smartData-&gt;api-&gt;mouse_down(smartData, downEvent);
&gt;  }

hmm, you dont need the downEvent if mouse_down doesnt exist 


Ewk_View_Smart_Data* smartData = toSmartData(data); &lt;- with type assert or similar
if (smartData-&gt;api-&gt;mouse_down)
    smartData-&gt;api-&gt;mouse_down(smartData, static_cast&lt;Evas_Event_Mouse_Down*&gt;(event));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825485</commentid>
    <comment_count>25</comment_count>
      <attachid>186622</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 07:48:34 -0800</bug_when>
    <thetext>Comment on attachment 186622
patch v4

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:371
&gt; +Ewk_View_Smart_Data* EwkView::smartData(Evas_Object* evasObject)
&gt; +{
&gt; +    ASSERT(evasObject);
&gt; +
&gt; +    if (!isViewEvasObject(evasObject))
&gt; +        return 0;
&gt; +
&gt; +    return static_cast&lt;Ewk_View_Smart_Data*&gt;(evas_object_smart_data_get(evasObject));
&gt;  }

why isnt this a free function? toSmartData(Evas...

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1129
&gt; +    smartData-&gt;priv = 0;

hmm? comment

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1239
&gt; +    Ewk_View_Smart_Data* smartData = EwkView::smartData(evasObject);
&gt; +    EINA_SAFETY_ON_NULL_RETURN(smartData);

these feels like asserts instead... and the smartData probably already does that

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1416
&gt; +bool isViewEvasObject(const Evas_Object* evasObject)

isEwkEvasObject( ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825509</commentid>
    <comment_count>26</comment_count>
      <attachid>186634</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 08:54:36 -0800</bug_when>
    <thetext>Created attachment 186634
patch v5

Kenneth, thanks for careful review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825515</commentid>
    <comment_count>27</comment_count>
      <attachid>186634</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 09:00:08 -0800</bug_when>
    <thetext>Comment on attachment 186634
patch v5

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:336
&gt; +    api.sc.add = handleEvasAdd;
&gt; +    api.sc.del = handleEvasDelete;

I think we should all these handleEvasObjectAdd, like we use EwkView below.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1120
&gt; +    smartData-&gt;priv = 0;

why no comment

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1227
&gt; +void EwkView::handleEvasColorSet(Evas_Object* evasObject, int red, int green, int blue, int alpha)

unsigned?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:248
&gt; +    // Ewk_View_Smart_Class callback interface.

Replace . with :</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825526</commentid>
    <comment_count>28</comment_count>
      <attachid>186638</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 09:08:06 -0800</bug_when>
    <thetext>Created attachment 186638
patch v6

Fixed comments above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825528</commentid>
    <comment_count>29</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 09:09:43 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 186634 [details])

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1227
&gt; &gt; +void EwkView::handleEvasColorSet(Evas_Object* evasObject, int red, int green, int blue, int alpha)
&gt; 
&gt; unsigned?
&gt; 
This is callback type from EFL, cannot modify function signature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825534</commentid>
    <comment_count>30</comment_count>
      <attachid>186638</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 09:12:17 -0800</bug_when>
    <thetext>Comment on attachment 186638
patch v6

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825876</commentid>
    <comment_count>31</comment_count>
      <attachid>186638</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-05 15:33:33 -0800</bug_when>
    <thetext>Comment on attachment 186638
patch v6

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:32
&gt; +static inline WKViewRef createWKView(Evas* canvas, WKContextRef contextRef, WKPageGroupRef pageGroupRef, EwkView::ViewBehavior behavior)
&gt;  {
&gt; -    EwkView* ewkView = ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior);
&gt; -    if (!ewkView)
&gt; +    RefPtr&lt;EwkContext&gt; context = contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext();

Something bother me about the way you use contextRef.

If you are passing a null WKContextRef to an API, you are using it wrong.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:71
&gt; +#include &lt;wtf/Compiler.h&gt;

This should not be needed.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1238
&gt; +    red = clampTo(red, 0, alpha);
&gt; +    green = clampTo(green, 0, alpha);
&gt; +    blue = clampTo(blue, 0, alpha);

Why do you clamp color value by alpha?
It is a little weird to get colors without color profile. Is that in a default color space?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1425
&gt; +    if (UNLIKELY(!evasSmart)) {
&gt; +        EINA_LOG_CRIT(&quot;%p (%s) is not a smart object!&quot;, evasObject, evasObjectType ? evasObjectType : &quot;(null)&quot;);
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    const Evas_Smart_Class* smartClass = evas_smart_class_get(evasSmart);
&gt; +    if (UNLIKELY(!smartClass)) {
&gt; +        EINA_LOG_CRIT(&quot;%p (%s) is not a smart class object!&quot;, evasObject, evasObjectType ? evasObjectType : &quot;(null)&quot;);
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    if (UNLIKELY(smartClass-&gt;data != smartClassName)) {
&gt; +        EINA_LOG_CRIT(&quot;%p (%s) is not of an ewk_view (need %p, got %p)!&quot;, evasObject, evasObjectType ? evasObjectType : &quot;(null)&quot;,
&gt; +            smartClassName, smartClass-&gt;data);
&gt; +        return false;
&gt; +    }

Unless the branches are creating a hot path, which I highly doubt given the code, UNLIKELY is a bad idea.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:226
&gt; +    ~EwkView(); // Will be deleted when Evas Object is deleted.

This comment is not helping the reader.

If you want to document the object lifecycle, make a complete explanation in a visible place (above the class declaration for example).

&gt; Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp:103
&gt; +    WKContextRef contextRef = toAPI(page()-&gt;process()-&gt;context());
&gt; +    m_inspectorView = EwkView::createEvasObject(ecore_evas_get(m_inspectorWindow), contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext(), toAPI(inspectorPageGroup()), EwkView::LegacyBehavior);

You get null context our of WebProcessProxy-&gt;context()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825878</commentid>
    <comment_count>32</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 15:35:43 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1238
&gt; &gt; +    red = clampTo(red, 0, alpha);
&gt; &gt; +    green = clampTo(green, 0, alpha);
&gt; &gt; +    blue = clampTo(blue, 0, alpha);
&gt; 
&gt; Why do you clamp color value by alpha?
&gt; It is a little weird to get colors without color profile. Is that in a default color space?

This is probably correct. As I remember from EFL times, the color are premultiplied by the alpha or something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825882</commentid>
    <comment_count>33</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 15:39:01 -0800</bug_when>
    <thetext>
&gt; &gt; +    RefPtr&lt;EwkContext&gt; context = contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext();
&gt; 
&gt; Something bother me about the way you use contextRef.
&gt; 
&gt; If you are passing a null WKContextRef to an API, you are using it wrong.

This is temporary till we get the other things cleaned up. This is not exposed in public API.

&gt; Unless the branches are creating a hot path, which I highly doubt given the code, UNLIKELY is a bad idea.

I agree and already voiced this to Mikhail before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825899</commentid>
    <comment_count>34</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-05 15:47:43 -0800</bug_when>
    <thetext>Btw, thanks for the review Benjamin; we are on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825923</commentid>
    <comment_count>35</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 16:22:30 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 186638 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186638&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:32
&gt; &gt; +static inline WKViewRef createWKView(Evas* canvas, WKContextRef contextRef, WKPageGroupRef pageGroupRef, EwkView::ViewBehavior behavior)
&gt; &gt;  {
&gt; &gt; -    EwkView* ewkView = ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior);
&gt; &gt; -    if (!ewkView)
&gt; &gt; +    RefPtr&lt;EwkContext&gt; context = contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext();
&gt; 
&gt; Something bother me about the way you use contextRef.
&gt; 
&gt; If you are passing a null WKContextRef to an API, you are using it wrong.\
I&apos;m not passing null and this is a check for it. 
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:71
&gt; &gt; +#include &lt;wtf/Compiler.h&gt;
&gt; 
&gt; This should not be needed.
yeah, if I remove UNLIKELY 
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1238
&gt; &gt; +    red = clampTo(red, 0, alpha);
&gt; &gt; +    green = clampTo(green, 0, alpha);
&gt; &gt; +    blue = clampTo(blue, 0, alpha);
&gt; 
&gt; Why do you clamp color value by alpha?
&gt; It is a little weird to get colors without color profile. Is that in a default color space?
This code was there before I just refactored it so that it uses &apos;clapTo&apos;
instead of home-brewed analogue.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1425
&gt; &gt; +    if (UNLIKELY(!evasSmart)) {
&gt; &gt; +        EINA_LOG_CRIT(&quot;%p (%s) is not a smart object!&quot;, evasObject, evasObjectType ? evasObjectType : &quot;(null)&quot;);
&gt; &gt; +        return false;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    const Evas_Smart_Class* smartClass = evas_smart_class_get(evasSmart);
&gt; &gt; +    if (UNLIKELY(!smartClass)) {
&gt; &gt; +        EINA_LOG_CRIT(&quot;%p (%s) is not a smart class object!&quot;, evasObject, evasObjectType ? evasObjectType : &quot;(null)&quot;);
&gt; &gt; +        return false;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    if (UNLIKELY(smartClass-&gt;data != smartClassName)) {
&gt; &gt; +        EINA_LOG_CRIT(&quot;%p (%s) is not of an ewk_view (need %p, got %p)!&quot;, evasObject, evasObjectType ? evasObjectType : &quot;(null)&quot;,
&gt; &gt; +            smartClassName, smartClass-&gt;data);
&gt; &gt; +        return false;
&gt; &gt; +    }
&gt; 
&gt; Unless the branches are creating a hot path, which I highly doubt given the code, UNLIKELY is a bad idea.
Well, agree. this was also inherited from the current implementation however.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:226
&gt; &gt; +    ~EwkView(); // Will be deleted when Evas Object is deleted.
&gt; 
&gt; This comment is not helping the reader.
I will elaborate :)
&gt; 
&gt; If you want to document the object lifecycle, make a complete explanation in a visible place (above the class declaration for example).
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp:103
&gt; &gt; +    WKContextRef contextRef = toAPI(page()-&gt;process()-&gt;context());
&gt; &gt; +    m_inspectorView = EwkView::createEvasObject(ecore_evas_get(m_inspectorWindow), contextRef ? EwkContext::create(contextRef) : EwkContext::defaultContext(), toAPI(inspectorPageGroup()), EwkView::LegacyBehavior);
&gt; 
&gt; You get null context our of WebProcessProxy-&gt;context()?
mmm.. right, think it has to be valid context. I&apos;ll check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825934</commentid>
    <comment_count>36</comment_count>
      <attachid>186724</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 16:34:01 -0800</bug_when>
    <thetext>Created attachment 186724
patch v7

Took Benjamin&apos;s comments into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826064</commentid>
    <comment_count>37</comment_count>
      <attachid>186724</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-05 21:23:19 -0800</bug_when>
    <thetext>Comment on attachment 186724
patch v7

That seems to go in a good direction, I sign off on this for WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826168</commentid>
    <comment_count>38</comment_count>
      <attachid>186724</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-06 00:28:13 -0800</bug_when>
    <thetext>Comment on attachment 186724
patch v7

r=me as signed off by Benjamin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826236</commentid>
    <comment_count>39</comment_count>
      <attachid>186724</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-06 01:56:32 -0800</bug_when>
    <thetext>Comment on attachment 186724
patch v7

Clearing flags on attachment: 186724

Committed r141978: &lt;http://trac.webkit.org/changeset/141978&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826237</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-06 01:56:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185561</attachid>
            <date>2013-01-30 14:10:54 -0800</date>
            <delta_ts>2013-02-01 04:43:53 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug108026_WIP</filename>
            <type>text/plain</type>
            <size>58979</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDcxYTZjNTc0ODAxN2M4NmJjOTcxMmE0YjgzOWRlMjAyZTJlYzFhNTEKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IDMyYjlkOGYuLjIx
YzE5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5j
cHAKQEAgLTIyLDE5ICsyMiwzMiBAQAogCiAjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUg
IldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJl
d2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEV3
a0NvbnRleHQ+IGV3a0NvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCit7CisgICAgcmV0
dXJuIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpKSA6
IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7Cit9CisKIFdLVmlld1JlZiBXS1ZpZXdDcmVh
dGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmlld19iYXNlX2FkZChjYW52
YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpKTsK
KyAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6Y3JlYXRlKGNhbnZhcywgZXdrQ29udGV4dChj
b250ZXh0UmVmKSwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7CisgICAg
aWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB0b0FQSSh2aWV3LT5l
dmFzT2JqZWN0KCkpOwogfQogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0
KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFz
LCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikpOwor
ICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3OjpjcmVhdGUoY2FudmFzLCBld2tDb250ZXh0KGNv
bnRleHRSZWYpLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAg
aWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB0b0FQSSh2aWV3LT5l
dmFzT2JqZWN0KCkpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmll
d1JlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKaW5k
ZXggN2YyMzhmOC4uMzQ4ZmU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAKQEAgLTI4LDYgKzI4LDkgQEAKICNpbmNsdWRlICJGb3JtQ2xpZW50RWZs
LmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZl
bnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRE
ZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRMZWdhY3lJbXBsLmgiCkBAIC01Niw3
ICs1OSw2IEBACiAjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCiAjaW5j
bHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgotI2lu
Y2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVz
X3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8RWNvcmVfWC5o
PgpAQCAtODUsMTUgKzg3LDE1NCBAQCBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDdXJzb3JTaXpl
ID0gMTY7CiAKIHR5cGVkZWYgSGFzaE1hcDxXS1BhZ2VSZWYsIEV2YXNfT2JqZWN0Kj4gUGFnZVZp
ZXdNYXA7CiAKLXN0YXRpYyBpbmxpbmUgUGFnZVZpZXdNYXAmIHBhZ2VWaWV3TWFwKCkKKy8vIEF1
eCBmdW5jdGlvbnMuCisKK3N0YXRpYyBQYWdlVmlld01hcCYgcGFnZVZpZXdNYXAoKQogewogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoUGFnZVZpZXdNYXAsIG1hcCwgKCkpOwogICAgIHJldHVybiBt
YXA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWFydERhdGFDaGFuZ2VkKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICBBU1NFUlQoc21hcnREYXRhKTsKKworICAgIGlm
IChzbWFydERhdGEtPmNoYW5nZWQuYW55KQorICAgICAgICByZXR1cm47CisKKyAgICBzbWFydERh
dGEtPmNoYW5nZWQuYW55ID0gdHJ1ZTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHNt
YXJ0RGF0YS0+c2VsZik7Cit9CisKK3N0YXRpYyBFdmFzX1NtYXJ0KiBkZWZhdWx0U21hcnRDbGFz
c0luc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdL
X1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19WaWV3Iik7CisgICAgc3Rh
dGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKKworICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFy
dCkpIHsKKyAgICAgICAgRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoYXBpKTsKKyAg
ICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc21hcnQ7Cit9CisKK3RlbXBsYXRlIDxfRXZhc19DYWxsYmFja19UeXBlIEV2ZW50
VHlwZT4KK2NsYXNzIEV3a1ZpZXdFdmVudEhhbmRsZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIHN1YnNjcmliZShFdmFzX09iamVjdCogZXZhc09iamVjdCkKKyAgICB7CisgICAgICAgIGV2
YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChldmFzT2JqZWN0LCBFdmVudFR5cGUsIG9uRXZl
bnQsIEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgdW5zdWJzY3JpYmUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgeworICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwoZXZhc09iamVjdCwgRXZlbnRUeXBlLCBv
bkV2ZW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBvbkV2ZW50KHZvaWQqIGRhdGEsIEV2
YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Cit9OworCit0ZW1wbGF0ZSA8Pgor
dm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46Om9uRXZl
bnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQorewor
ICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19F
dmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKTsKKyAgICBzbWFy
dERhdGEtPmFwaS0+bW91c2VfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7Cit9CisKK3RlbXBs
YXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9VUD46
Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZv
KQoreworICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFz
X0V2ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV91cCk7CisgICAgc21hcnRE
YXRhLT5hcGktPm1vdXNlX3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7Cit9CisKK3RlbXBsYXRlIDw+
Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6b25F
dmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7
CisgICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFz
X0V2ZW50X01vdXNlX01vdmUqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX21vdmUpOworICAgIHNt
YXJ0RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKHNtYXJ0RGF0YSwgbW92ZUV2ZW50KTsKK30KKwordGVt
cGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0ZPQ1VTX0lO
Pjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBp
LT5mb2N1c19pbik7CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0YSk7Cit9
CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19G
T0NVU19PVVQ+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQq
KQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPmZvY3VzX291dCk7CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX291dChzbWFy
dERhdGEpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNf
Q0FMTEJBQ0tfTU9VU0VfV0hFRUw+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3
aGVlbEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5m
byk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERh
dGEtPmFwaS0+bW91c2Vfd2hlZWwpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbChz
bWFydERhdGEsIHdoZWVsRXZlbnQpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZl
bnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2
YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFdmFzX0V2ZW50X0tl
eV9Eb3duKiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZl
bnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5rZXlfZG93bik7CisgICAgc21hcnREYXRhLT5hcGktPmtleV9kb3duKHNt
YXJ0RGF0YSwgZG93bkV2ZW50KTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50
SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9VUD46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZlbnRfS2V5X1Vw
KiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihldmVudEluZm8pOwor
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGktPmtleV91cCk7CisgICAgc21hcnREYXRhLT5hcGktPmtleV91cChzbWFydERhdGEsIHVwRXZl
bnQpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FM
TEJBQ0tfU0hPVz46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCopCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEV3a1ZpZXc6OmZyb21TbWFydERhdGEo
c21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3
SXNWaXNpYmxlKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxF
VkFTX0NBTExCQUNLX0hJREU+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVj
dCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKworICAgIC8vIFRoaXMgY2FsbCBt
YXkgbG9vayB3cm9uZywgYnV0IHdlIHJlYWxseSBuZWVkIHRvIHBhc3MgVmlld0lzVmlzaWJsZSBo
ZXJlLgorICAgIC8vIHZpZXdTdGF0ZURpZENoYW5nZSgpIGl0c2VsZiBpcyByZXNwb25zaWJsZSBm
b3IgYWN0dWFsbHkgc2V0dGluZyB0aGUgdmlzaWJpbGl0eSB0byBWaXNpYmxlIG9yIEhpZGRlbgor
ICAgIC8vIGRlcGVuZGluZyBvbiB3aGF0IFdlYlBhZ2VQcm94eTo6aXNWaWV3VmlzaWJsZSgpIHJl
dHVybnMsIHRoaXMgc2ltcGx5IHRyaWdnZXJzIHRoZSBwcm9jZXNzLgorICAgIEV3a1ZpZXc6OmZy
b21TbWFydERhdGEoc21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFn
ZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKK30KKworLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4K
IHZvaWQgRXdrVmlldzo6YWRkVG9QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3KQogewotICAgIFBh
Z2VWaWV3TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gcGFnZVZpZXdNYXAoKS5hZGQodmlldy0+d2tQ
YWdlKCksIHZpZXctPnZpZXcoKSk7CisgICAgUGFnZVZpZXdNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBwYWdlVmlld01hcCgpLmFkZCh2aWV3LT53a1BhZ2UoKSwgdmlldy0+ZXZhc09iamVjdCgpKTsK
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQogCkBAIC0x
MDMsNyArMjQ0LDcgQEAgdm9pZCBFd2tWaWV3OjpyZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdrVmll
dyogdmlldykKICAgICBwYWdlVmlld01hcCgpLnJlbW92ZSh2aWV3LT53a1BhZ2UoKSk7CiB9CiAK
LWNvbnN0IEV2YXNfT2JqZWN0KiBFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdL
UGFnZVJlZiBwYWdlKQorY29uc3QgRXZhc19PYmplY3QqIEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZp
ZXdNYXAoV0tQYWdlUmVmIHBhZ2UpCiB7CiAgICAgQVNTRVJUKHBhZ2UpOwogCkBAIC0xODEsNyAr
MzIyLDcgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogICAgIGljb25EYXRhYmFzZS0+d2F0
Y2hDaGFuZ2VzKEljb25DaGFuZ2VDYWxsYmFja0RhdGEoRXdrVmlldzo6b25GYXZpY29uQ2hhbmdl
ZCwgdGhpcykpOwogCi0gICAgRXdrVmlldzo6YWRkVG9QYWdlVmlld01hcCh0aGlzKTsKKyAgICBh
ZGRUb1BhZ2VWaWV3TWFwKHRoaXMpOwogfQogCiBFd2tWaWV3Ojp+RXdrVmlldygpCkBAIC0xOTcs
MTggKzMzOCwxMjUgQEAgRXdrVmlldzo6fkV3a1ZpZXcoKQogICAgIEV3a1ZpZXc6OnJlbW92ZUZy
b21QYWdlVmlld01hcCh0aGlzKTsKIH0KIAorRXdrVmlldyogRXdrVmlldzo6Y3JlYXRlV2l0aFNt
YXJ0Q2xhc3MoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZp
ZXdCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoY2FudmFzLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQs
IDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKKwor
ICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZh
cywgc21hcnQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0
LCAwKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6OnNt
YXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBpZiAoIXNtYXJ0RGF0YSkgeworICAgICAgICBldmFz
X29iamVjdF9kZWwoZXZhc09iamVjdCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IEFTU0VSVCghc21hcnREYXRhLT5wcml2KTsKKworICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3Vw
IGlzIGNyZWF0ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVm
IGlzIDAsCisgICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCisgICAg
c21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcoZXZhc09iamVjdCwgY29udGV4dCwgdG9JbXBs
KHBhZ2VHcm91cFJlZiksIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2Owor
fQorCitFd2tWaWV3KiBFd2tWaWV3OjpjcmVhdGUoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3
a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgVmlld0JlaGF2
aW9yIGJlaGF2aW9yKQoreworICAgIHJldHVybiBjcmVhdGVXaXRoU21hcnRDbGFzcyhjYW52YXMs
IGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSwgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhh
dmlvcik7Cit9CisKK0V3a1ZpZXcqIEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIGlmICghaXNGcm9tRXdrVmlldyhldmFzT2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZnJvbVNtYXJ0RGF0YShzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXZh
c09iamVjdCkpKTsKK30KKworRXdrVmlldyogRXdrVmlldzo6ZnJvbVNtYXJ0RGF0YShjb25zdCBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YSwgMCk7CisKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2
OworfQorCitib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1Nt
YXJ0X0NsYXNzJiBhcGkpCit7CisgICAgaWYgKGFwaS52ZXJzaW9uICE9IEVXS19WSUVXX1NNQVJU
X0NMQVNTX1ZFUlNJT04pIHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgiRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgJXAgaXMgdmVyc2lvbiAlbHUgd2hpbGUgJWx1IHdhcyBleHBlY3RlZC4iLAorICAgICAg
ICAgICAgJmFwaSwgYXBpLnZlcnNpb24sIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKEVJTkFfVU5MSUtFTFkoIXBh
cmVudFNtYXJ0Q2xhc3MuYWRkKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9z
bWFydF9zZXQoJnBhcmVudFNtYXJ0Q2xhc3MpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2xp
cHBlZF9zbWFydF9zZXQoJmFwaS5zYyk7CisKKyAgICAvLyBTZXQgRXZhc19TbWFydF9DbGFzcyBm
dW5jdGlvbnMuCisgICAgYXBpLnNjLmFkZCA9IG9uRXZhc1NtYXJ0QWRkOworICAgIGFwaS5zYy5k
ZWwgPSBvbkV2YXNTbWFydERlbGV0ZTsKKyAgICBhcGkuc2MubW92ZSA9IG9uRXZhc1NtYXJ0TW92
ZTsKKyAgICBhcGkuc2MucmVzaXplID0gb25FdmFzU21hcnRSZXNpemU7CisgICAgYXBpLnNjLnNo
b3cgPSBvbkV2YXNTbWFydFNob3c7CisgICAgYXBpLnNjLmhpZGUgPSBvbkV2YXNTbWFydEhpZGU7
CisgICAgYXBpLnNjLmNvbG9yX3NldCA9IG9uRXZhc1NtYXJ0Q29sb3JTZXQ7CisgICAgYXBpLnNj
LmNhbGN1bGF0ZSA9IG9uRXZhc1NtYXJ0Q2FsY3VsYXRlOworICAgIGFwaS5zYy5kYXRhID0gc21h
cnRDbGFzc05hbWU7IC8vIEl0IGlzIHVzZWQgYnkgdHlwZSBjaGVja2luZy4KKworICAgIC8vIFNl
dCBFd2tfVmlld19TbWFydF9DbGFzcyBmdW5jdGlvbnMuCisgICAgYXBpLmZvY3VzX2luID0gb25W
aWV3U21hcnRGb2N1c0luOworICAgIGFwaS5mb2N1c19vdXQgPSBvblZpZXdTbWFydEZvY3VzT3V0
OworICAgIGFwaS5tb3VzZV93aGVlbCA9IG9uVmlld1NtYXJ0TW91c2VXaGVlbDsKKyAgICBhcGku
bW91c2VfZG93biA9IG9uVmlld1NtYXJ0TW91c2VEb3duOworICAgIGFwaS5tb3VzZV91cCA9IG9u
Vmlld1NtYXJ0TW91c2VVcDsKKyAgICBhcGkubW91c2VfbW92ZSA9IG9uVmlld1NtYXJ0TW91c2VN
b3ZlOworICAgIGFwaS5rZXlfZG93biA9IG9uVmlld1NtYXJ0S2V5RG93bjsKKyAgICBhcGkua2V5
X3VwID0gb25WaWV3U21hcnRLZXlVcDsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEV3
a1ZpZXc6OmlzRnJvbUV3a1ZpZXcoY29uc3QgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXNPYmplY3QsIGZhbHNlKTsKKwor
ICAgIGNvbnN0IGNoYXIqIGV2YXNPYmplY3RUeXBlID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXZh
c09iamVjdCk7CisgICAgY29uc3QgRXZhc19TbWFydCogZXZhc1NtYXJ0ID0gZXZhc19vYmplY3Rf
c21hcnRfc21hcnRfZ2V0KGV2YXNPYmplY3QpOworICAgIGlmIChFSU5BX1VOTElLRUxZKCFldmFz
U21hcnQpKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90IGEgc21hcnQg
b2JqZWN0ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAi
KG51bGwpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBFdmFz
X1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQoZXZhc1NtYXJ0
KTsKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnRDbGFzcykpIHsKKyAgICAgICAgRUlOQV9M
T0dfQ1JJVCgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBjbGFzcyBvYmplY3QhIiwgZXZhc09iamVj
dCwgZXZhc09iamVjdFR5cGUgPyBldmFzT2JqZWN0VHlwZSA6ICIobnVsbCkiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChFSU5BX1VOTElLRUxZKHNtYXJ0Q2xhc3Mt
PmRhdGEgIT0gRXdrVmlldzo6c21hcnRDbGFzc05hbWUpKSB7CisgICAgICAgIEVJTkFfTE9HX0NS
SVQoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a192aWV3IChuZWVkICVwLCBnb3QgJXApISIsIGV2
YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwpIiwKKyAg
ICAgICAgICAgIEV3a1ZpZXc6OnNtYXJ0Q2xhc3NOYW1lLCBzbWFydENsYXNzLT5kYXRhKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBFd2tf
Vmlld19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoKSBjb25zdAogewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0
YV9nZXQobV9ldmFzT2JqZWN0KSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YShtX2V2YXNPYmplY3Qp
OwogfQogCi1Fd2tWaWV3KiBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChjb25zdCBFdmFzX09iamVj
dCogdmlldykKK0V3a19WaWV3X1NtYXJ0X0RhdGEqIEV3a1ZpZXc6OnNtYXJ0RGF0YShFdmFzX09i
amVjdCogZXZhc09iamVjdCkKIHsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmpl
Y3Rfc21hcnRfZGF0YV9nZXQodmlldykpOwotICAgIEFTU0VSVChzZCk7Ci0gICAgQVNTRVJUKHNk
LT5wcml2KTsKLSAgICByZXR1cm4gc2QtPnByaXY7CisgICAgQVNTRVJUKGV2YXNPYmplY3QpOwor
CisgICAgaWYgKCFFd2tWaWV3Ojppc0Zyb21Fd2tWaWV3KGV2YXNPYmplY3QpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXZhc09iamVjdCkpOwogfQogCiAvKioKQEAgLTU3
NywxNCArODI1LDEzIEBAIHZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIAogICAgIG1fbW91c2VFdmVudHNFbmFibGVkID0gZW5hYmxlZDsKICAgICBpZiAo
ZW5hYmxlZCkgewotICAgICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgp
OwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBF
VkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uTW91c2VEb3duLCBzZCk7Ci0gICAgICAgIGV2YXNf
b2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9V
U0VfVVAsIG9uTW91c2VVcCwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFj
a19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uTW91c2VNb3Zl
LCBzZCk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9E
T1dOPjo6c3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRs
ZXI8RVZBU19DQUxMQkFDS19NT1VTRV9VUD46OnN1YnNjcmliZShtX2V2YXNPYmplY3QpOworICAg
ICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRT46OnN1YnNj
cmliZShtX2V2YXNPYmplY3QpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwg
b25Nb3VzZURvd24pOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9l
dmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX1VQLCBvbk1vdXNlVXApOwotICAgICAgICBl
dmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNL
X01PVVNFX01PVkUsIG9uTW91c2VNb3ZlKTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxF
VkFTX0NBTExCQUNLX01PVVNFX0RPV04+Ojp1bnN1YnNjcmliZShtX2V2YXNPYmplY3QpOworICAg
ICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVA+Ojp1bnN1YnNj
cmliZShtX2V2YXNPYmplY3QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FM
TEJBQ0tfTU9VU0VfTU9WRT46OnVuc3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CiAgICAgfQogfQog
CkBAIC05NTAsMzEgKzExOTcsMjQxIEBAIHZvaWQgRXdrVmlldzo6Y2xvc2UoKQogICAgIHNkLT5h
cGktPndpbmRvd19jbG9zZShzZCk7CiB9CiAKLXZvaWQgRXdrVmlldzo6b25Nb3VzZURvd24odm9p
ZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQordm9pZCBFd2tW
aWV3OjpvbkV2YXNTbWFydEFkZChFdmFzX09iamVjdCogZXZhc09iamVjdCkKIHsKLSAgICBFdmFz
X0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91
c2VfRG93bio+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+bW91c2VfZG93bik7Ci0gICAgc2QtPmFwaS0+bW91c2VfZG93bihzZCwgZG93bkV2ZW50
KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0
X2dldChldmFzT2JqZWN0KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNz
ID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQpOworICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0
X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNz
Kj4oc21hcnRDbGFzcyk7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBF
d2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisKKyAgICBpZiAoIXNtYXJ0RGF0YSkgewor
ICAgICAgICBzbWFydERhdGEgPSBuZXcgRXdrX1ZpZXdfU21hcnRfRGF0YTsKKyAgICAgICAgZXZh
c19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXZhc09iamVjdCwgc21hcnREYXRhKTsKKyAgICB9CisK
KyAgICBzbWFydERhdGEtPnNlbGYgPSBldmFzT2JqZWN0OworICAgIHNtYXJ0RGF0YS0+YXBpID0g
YXBpOworCisgICAgcGFyZW50U21hcnRDbGFzcy5hZGQoZXZhc09iamVjdCk7CisKKyAgICBzbWFy
dERhdGEtPnByaXYgPSAwOworCisgICAgLy8gQ3JlYXRlIGV2YXNfb2JqZWN0X2ltYWdlIHRvIGRy
YXcgd2ViIGNvbnRlbnRzLgorICAgIHNtYXJ0RGF0YS0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFn
ZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhh
X3NldChzbWFydERhdGEtPmltYWdlLCBmYWxzZSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZmls
bGVkX3NldChzbWFydERhdGEtPmltYWdlLCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfYWRkKHNtYXJ0RGF0YS0+aW1hZ2UsIGV2YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0
X3Nob3coc21hcnREYXRhLT5pbWFnZSk7CisKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNf
Q0FMTEJBQ0tfRk9DVVNfSU4+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVD46OnN1YnNjcmliZShldmFzT2JqZWN0
KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUw+Ojpz
dWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExC
QUNLX0tFWV9ET1dOPjo6c3Vic2NyaWJlKGV2YXNPYmplY3QpOworICAgIEV3a1ZpZXdFdmVudEhh
bmRsZXI8RVZBU19DQUxMQkFDS19LRVlfVVA+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAg
RXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX1NIT1c+OjpzdWJzY3JpYmUoZXZhc09i
amVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0hJREU+OjpzdWJz
Y3JpYmUoZXZhc09iamVjdCk7CiB9CiAKLXZvaWQgRXdrVmlldzo6b25Nb3VzZVVwKHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6
b25FdmFzU21hcnREZWxldGUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCiB7Ci0gICAgRXZhc19F
dmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAq
PihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1v
dXNlX3VwKTsKLSAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgdXBFdmVudCk7CisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3Qp
OworICAgIGlmIChzbWFydERhdGEpIHsKKyAgICAgICAgQVNTRVJUKHNtYXJ0RGF0YS0+cHJpdik7
IC8vIHNtYXJ0RGF0YS0+cHJpdiBpcyBFd2tWaWV3IGluc3RhbmNlIHRvIGRlbGV0ZS4KKyAgICAg
ICAgZGVsZXRlIHNtYXJ0RGF0YS0+cHJpdjsKKyAgICB9CisKKyAgICBwYXJlbnRTbWFydENsYXNz
LmRlbChldmFzT2JqZWN0KTsKIH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNlTW92ZSh2b2lkKiBk
YXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit2b2lkIEV3a1ZpZXc6
Om9uRXZhc1NtYXJ0UmVzaXplKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBFdmFzX0Nvb3JkIHdp
ZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1v
dmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50SW5mbyk7
Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfbW92ZSk7Ci0g
ICAgc2QtPmFwaS0+bW91c2VfbW92ZShzZCwgbW92ZUV2ZW50KTsKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKworICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVj
dF9pbWFnZV9zaXplX3NldChzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBl
dmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmltYWdlLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKKworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gdHJ1ZTsKKyAgICBzbWFy
dERhdGFDaGFuZ2VkKHNtYXJ0RGF0YSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnRN
b3ZlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBFdmFzX0Nvb3JkIC8qeCovLCBFdmFzX0Nvb3Jk
IC8qeSovKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6
OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gdHJ1ZTsKKyAg
ICBzbWFydERhdGFDaGFuZ2VkKHNtYXJ0RGF0YSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25FdmFz
U21hcnRDYWxjdWxhdGUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CisKKyAgICBFd2tWaWV3
KiB2aWV3ID0gZnJvbVNtYXJ0RGF0YShzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHZpZXcpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IGZhbHNlOwor
CisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV2YXNfb2JqZWN0X2dl
b21ldHJ5X2dldChldmFzT2JqZWN0LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBp
ZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uKSB7CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hh
bmdlZC5wb3NpdGlvbiA9IGZhbHNlOworICAgICAgICBzbWFydERhdGEtPnZpZXcueCA9IHg7Cisg
ICAgICAgIHNtYXJ0RGF0YS0+dmlldy55ID0geTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShz
bWFydERhdGEtPmltYWdlLCB4LCB5KTsKKyAgICB9CisKKyAgICBpZiAoc21hcnREYXRhLT5jaGFu
Z2VkLnNpemUpIHsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSBmYWxzZTsKKyAg
ICAgICAgc21hcnREYXRhLT52aWV3LncgPSB3aWR0aDsKKyAgICAgICAgc21hcnREYXRhLT52aWV3
LmggPSBoZWlnaHQ7CisKKyAgICAgICAgaWYgKHZpZXctPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkK
KyAgICAgICAgICAgIHZpZXctPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpLCBJbnRTaXplKCkpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgICAgICB2aWV3LT5zZXROZWVkc1N1cmZhY2VSZXNpemUoKTsKKyNlbmRpZgor
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICB2aWV3LT5wYWdlQ2xpZW50KCkt
PnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworI2VuZGlmCisgICAgfQorfQorCit2b2lkIEV3a1ZpZXc6
Om9uRXZhc1NtYXJ0U2hvdyhFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKworICAgIGlmIChl
dmFzX29iamVjdF9jbGlwZWVzX2dldChzbWFydERhdGEtPmJhc2UuY2xpcHBlcikpCisgICAgICAg
IGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2Jq
ZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21h
cnRIaWRlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEpOworCisgICAgZXZhc19vYmplY3RfaGlk
ZShzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERh
dGEtPmltYWdlKTsKK30KKwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydENvbG9yU2V0KEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxw
aGEpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21h
cnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YSk7CisKKyAgICBFd2tWaWV3KiB2aWV3ID0gZnJvbVNtYXJ0RGF0YShzbWFydERhdGEpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZpZXcpOworCisgICAgaWYgKGFscGhhIDwg
MCkKKyAgICAgICAgYWxwaGEgPSAwOworICAgIGVsc2UgaWYgKGFscGhhID4gMjU1KQorICAgICAg
ICBhbHBoYSA9IDI1NTsKKworI2RlZmluZSBDSEVDS19DT0xPUihjb2xvciwgYWxwaGEpIFwKKyAg
ICBpZiAoY29sb3IgPCAwKSAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbG9yID0gMDsgICAg
ICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKGNvbG9yID4gYWxwaGEpICAgICAgIFwKKyAgICAg
ICAgY29sb3IgPSBhbHBoYTsKKyAgICBDSEVDS19DT0xPUihyZWQsIGFscGhhKTsKKyAgICBDSEVD
S19DT0xPUihncmVlbiwgYWxwaGEpOworICAgIENIRUNLX0NPTE9SKGJsdWUsIGFscGhhKTsKKyN1
bmRlZiBDSEVDS19DT0xPUgorCisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0
RGF0YS0+aW1hZ2UsIGFscGhhIDwgMjU1KTsKKyAgICB2aWV3LT5wYWdlKCktPnNldERyYXdzQmFj
a2dyb3VuZChyZWQgfHwgZ3JlZW4gfHwgYmx1ZSk7CisgICAgdmlldy0+cGFnZSgpLT5zZXREcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZChhbHBoYSA8IDI1NSk7CisKKyAgICBwYXJlbnRTbWFydENs
YXNzLmNvbG9yX3NldChldmFzT2JqZWN0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisK
K0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEZvY3VzSW4oRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhKQoreworICAgIEV3a1ZpZXcqIHNlbGYgPSBFd2tWaWV3Ojpmcm9tU21hcnRE
YXRhKHNtYXJ0RGF0YSk7CisgICAgQVNTRVJUKHNlbGYpOworCisgICAgc2VsZi0+cGFnZSgpLT52
aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVBy
b3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jv
b2wgRXdrVmlldzo6b25WaWV3U21hcnRGb2N1c091dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEpCit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1ZpZXc6OmZyb21TbWFydERhdGEoc21h
cnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBzZWxmLT5wYWdlKCktPnZpZXdTdGF0
ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZp
ZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tW
aWV3OjpvblZpZXdTbWFydE1vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQoreworICAgIEV3a1Zp
ZXcqIHNlbGYgPSBFd2tWaWV3Ojpmcm9tU21hcnREYXRhKHNtYXJ0RGF0YSk7CisgICAgQVNTRVJU
KHNlbGYpOworCisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldo
ZWVsRXZlbnQod2hlZWxFdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRy
YW5zZm9ybVRvU2NyZWVuKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3
a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VEb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpCit7CisgICAgRXdrVmll
dyogc2VsZiA9IEV3a1ZpZXc6OmZyb21TbWFydERhdGEoc21hcnREYXRhKTsKKyAgICBBU1NFUlQo
c2VsZik7CisKKyAgICBzZWxmLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91
c2VFdmVudChkb3duRXZlbnQsIHNlbGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFu
c2Zvcm1Ub1NjcmVlbigpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tW
aWV3OjpvblZpZXdTbWFydE1vdXNlVXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBj
b25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50KQoreworICAgIEV3a1ZpZXcqIHNlbGYg
PSBFd2tWaWV3Ojpmcm9tU21hcnREYXRhKHNtYXJ0RGF0YSk7CisgICAgQVNTRVJUKHNlbGYpOwor
CisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQo
dXBFdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9ybVRvU2Ny
ZWVuKCkpKTsKKworICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0
ID0gc2VsZi0+aW5wdXRNZXRob2RDb250ZXh0KCk7CisgICAgaWYgKGlucHV0TWV0aG9kQ29udGV4
dCkKKyAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVNb3VzZVVwRXZlbnQodXBFdmVu
dCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1Nt
YXJ0TW91c2VNb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19F
dmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1Zp
ZXc6OmZyb21TbWFydERhdGEoc21hcnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBz
ZWxmLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChtb3ZlRXZl
bnQsIHNlbGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigp
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFy
dEtleURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50
X0tleV9Eb3duKiBkb3duRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1ZpZXc6OmZy
b21TbWFydERhdGEoc21hcnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBib29sIGlz
RmlsdGVyZWQgPSBmYWxzZTsKKyAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9k
Q29udGV4dCA9IHNlbGYtPmlucHV0TWV0aG9kQ29udGV4dCgpOworICAgIGlmIChpbnB1dE1ldGhv
ZENvbnRleHQpCisgICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxlS2V5RG93bkV2ZW50
KGRvd25FdmVudCwgJmlzRmlsdGVyZWQpOworCisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVLZXli
b2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZG93bkV2ZW50LCBpc0ZpbHRlcmVkKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEtl
eVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlf
VXAqIHVwRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1ZpZXc6OmZyb21TbWFydERh
dGEoc21hcnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBzZWxmLT5wYWdlKCktPmhh
bmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh1cEV2ZW50KSk7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMTA1OSwzICsx
NTE2LDYgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hv
dCgpCiAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNlbmRpZgogfQorCitjb25zdCBj
aGFyIEV3a1ZpZXc6OnNtYXJ0Q2xhc3NOYW1lW10gPSAiRVdLMl9WaWV3IjsKK0V2YXNfU21hcnRf
Q2xhc3MgRXdrVmlldzo6cGFyZW50U21hcnRDbGFzcyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9O
VUxMOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGEy
MTNmOTcuLjdlNTk3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmgKQEAgLTk1LDYgKzk1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBF
dmFzX0dMX1N1cmZhY2U7CiAjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRf
RGF0YSBFd2tfVmlld19TbWFydF9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgRXdrX1ZpZXdfU21hcnRfQ2xhc3M7CiAKIGNsYXNzIEV3a1ZpZXcgewogcHVibGljOgpA
QCAtMTAzLDExICsxMDQsMjAgQEAgcHVibGljOgogICAgICAgICBMZWdhY3lCZWhhdmlvciwKICAg
ICAgICAgRGVmYXVsdEJlaGF2aW9yCiAgICAgfTsKLSAgICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2
aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpX
ZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKLSAgICB+RXdrVmlldygpOwog
Ci0gICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2
aWV3KTsKLSAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQor
ICAgIHN0YXRpYyBFd2tWaWV3KiBjcmVhdGVXaXRoU21hcnRDbGFzcyhFdmFzKiBjYW52YXMsIEV2
YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3
OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHN0YXRpYyBFd2tWaWV3KiBjcmVhdGUoRXZhcyogY2Fu
dmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiA9IDAsIFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhh
dmlvcik7CisKKyAgICBzdGF0aWMgRXdrVmlldyogZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19P
YmplY3QqKTsKKyAgICBzdGF0aWMgRXdrVmlldyogZnJvbVNtYXJ0RGF0YShjb25zdCBFd2tfVmll
d19TbWFydF9EYXRhKik7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEoKSBj
b25zdDsKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKEV2YXNfT2Jq
ZWN0KiBldmFzT2JqZWN0KTsKKworICAgIHN0YXRpYyBib29sIGluaXRTbWFydENsYXNzSW50ZXJm
YWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJik7CisgICAgc3RhdGljIGJvb2wgaXNGcm9tRXdrVmll
dyhjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVjdCk7CisKKyAgICBFdmFzX09iamVjdCogZXZh
c09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCiAgICAgV0tQYWdlUmVmIHdrUGFn
ZSgpOwogICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlUHJv
eHkuZ2V0KCk7IH0KQEAgLTE0OSw5ICsxNTksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgpKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGFkZFRvUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldyk7Ci0gICAgc3Rh
dGljIHZvaWQgcmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKEV3a1ZpZXcqIHZpZXcpOwotICAgIHN0YXRp
YyBjb25zdCBFdmFzX09iamVjdCogdmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYp
OworICAgIHN0YXRpYyBjb25zdCBFdmFzX09iamVjdCogdmlld0Zyb21QYWdlVmlld01hcChXS1Bh
Z2VSZWYpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHZvaWQgZW50ZXJGdWxs
U2NyZWVuKCk7CkBAIC0yMTUsNyArMjIzLDkgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiB0YWtlU25hcHNob3QoKTsKIAogcHJpdmF0ZToKLSAgICBpbmxpbmUgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKCkgY29uc3Q7CisgICAgRXdrVmlldyhFdmFzX09i
amVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVm
UHRyPFdlYktpdDo6V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAg
fkV3a1ZpZXcoKTsgLy8gQ2Fubm90IGJlIGRlbGV0ZWQgZnJvbSBvdXRzaWRlLgorCiAgICAgdm9p
ZCBkaXNwbGF5VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxFd2tWaWV3PiopOwogCiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtMjI0LDE3ICsyMzQsMzcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgaW5mb3JtSWNvbkNoYW5nZSgpOwogCi0gICAgc3RhdGljIHZvaWQgb25Nb3VzZURv
d24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKLSAg
ICBzdGF0aWMgdm9pZCBvbk1vdXNlVXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwg
dm9pZCogZXZlbnRJbmZvKTsKLSAgICBzdGF0aWMgdm9pZCBvbk1vdXNlTW92ZSh2b2lkKiBkYXRh
LCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOworICAgIC8vIEV2YXNfU21h
cnRfQ2xhc3MgZnVuY3Rpb25zLgorICAgIHN0YXRpYyB2b2lkIG9uRXZhc1NtYXJ0QWRkKEV2YXNf
T2JqZWN0Kik7CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnREZWxldGUoRXZhc19PYmplY3Qq
KTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydE1vdmUoRXZhc19PYmplY3QqLCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSk7CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnRSZXNpemUo
RXZhc19PYmplY3QqLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCk7CisgICAg
c3RhdGljIHZvaWQgb25FdmFzU21hcnRTaG93KEV2YXNfT2JqZWN0Kik7CisgICAgc3RhdGljIHZv
aWQgb25FdmFzU21hcnRIaWRlKEV2YXNfT2JqZWN0Kik7CisgICAgc3RhdGljIHZvaWQgb25FdmFz
U21hcnRDb2xvclNldChFdmFzX09iamVjdCosIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUs
IGludCBhbHBoYSk7CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnRDYWxjdWxhdGUoRXZhc19P
YmplY3QqKTsKKworICAgIC8vIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGZ1bmN0aW9ucy4KKyAgICBz
dGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0Rm9jdXNJbihFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21hcnRGb2N1c091dChFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3
U21hcnRNb3VzZVdoZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZh
c19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBv
blZpZXdTbWFydE1vdXNlRG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0
IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9Cb29s
IG9uVmlld1NtYXJ0TW91c2VVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0
IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25W
aWV3U21hcnRNb3VzZU1vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBF
dmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBv
blZpZXdTbWFydEtleURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBF
dmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25W
aWV3U21hcnRLZXlVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNf
RXZlbnRfS2V5X1VwKiB1cEV2ZW50KTsKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAg
dm9pZCBmZWVkVG91Y2hFdmVudHMoRXdrX1RvdWNoX0V2ZW50X1R5cGUgdHlwZSk7Ci0gICAgc3Rh
dGljIHZvaWQgb25Ub3VjaERvd24odm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICov
LCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKTsKLSAgICBzdGF0
aWMgdm9pZCBvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICovLCBF
dmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKTsKLSAgICBzdGF0aWMg
dm9pZCBvblRvdWNoTW92ZSh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2
YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOworICAgIHN0YXRpYyB2
b2lkIG9uVG91Y2hEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2
ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaFVwKHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaE1v
dmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKICNl
bmRpZgogICAgIHN0YXRpYyB2b2lkIG9uRmF2aWNvbkNoYW5nZWQoY29uc3QgY2hhciogcGFnZVVS
TCwgdm9pZCogZXZlbnRJbmZvKTsKIAorICAgIHN0YXRpYyB2b2lkIGFkZFRvUGFnZVZpZXdNYXAo
RXdrVmlldyogdmlldyk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKEV3
a1ZpZXcqIHZpZXcpOworcHJpdmF0ZToKICAgICAvLyBOb3RlLCBpbml0aWFsaXphdGlvbiBvcmRl
ciBtYXR0ZXJzLgogICAgIEV2YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7CiAgICAgUmVmUHRyPEV3
a0NvbnRleHQ+IG1fY29udGV4dDsKQEAgLTI4MSw2ICszMTEsOSBAQCBwcml2YXRlOgogI2VuZGlm
CiAgICAgYm9vbCBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZDsKICAgICBib29sIG1fc2V0RHJhd3NC
YWNrZ3JvdW5kOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgc21hcnRDbGFzc05hbWVbXTsKKyAg
ICBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBwYXJlbnRTbWFydENsYXNzOwogfTsKIAogI2VuZGlm
IC8vIEV3a1ZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwCmluZGV4IDcyYTZhZmEuLjQwODdiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlICJl
d2tfaW50ZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a19zZXR0aW5nc19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgog
I2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZUdyb3VwLmg+
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC02OSw0ODIgKzY4LDM3IEBACiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBj
b25zdCBjaGFyIEVXS19WSUVXX1RZUEVfU1RSW10gPSAiRVdLMl9WaWV3IjsKLQotI2RlZmluZSBF
V0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBib29sIHJlc3VsdCA9IHRydWU7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBpZiAoIWV3a1ZpZXcpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NS
SVQoIm51bGwgaXMgbm90IGEgZXdrX3ZpZXciKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGNoYXIqIF90bXBfb3R5cGUgPSBldmFz
X29iamVjdF90eXBlX2dldChld2tWaWV3KTsgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25z
dCBFdmFzX1NtYXJ0KiBfdG1wX3MgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmll
dyk7ICAgICAgIFwKLSAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoIV90bXBfcykpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xP
R19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgZXdrVmlldywg
X3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIF90bXBfc2Mg
PSBldmFzX3NtYXJ0X2NsYXNzX2dldChfdG1wX3MpOyAgICAgICAgXAotICAgICAgICBpZiAoRUlO
QV9VTkxJS0VMWSghX3RtcF9zYykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlcCAo
JXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIo
bnVsbCkiKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYg
KEVJTkFfVU5MSUtFTFkoX3RtcF9zYy0+ZGF0YSAhPSBFV0tfVklFV19UWVBFX1NUUikpIHsgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgi
JXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3ZpZXcgKG5lZWQgJXAsIGdvdCAlcCkhIiwgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICAgZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUg
OiAiKG51bGwpIiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIEVXS19WSUVX
X1RZUEVfU1RSLCBfdG1wX3NjLT5kYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3
aGlsZSAoMCkKLQotI2RlZmluZSBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFV0tfVklFV19UWVBFX0NI
RUNLKGV3a1ZpZXcsIF90bXBfcmVzdWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChfdG1wX3Jlc3VsdCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgc21hcnREYXRhID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2YXNfb2JqZWN0X3NtYXJ0
X2RhdGFfZ2V0KGV3a1ZpZXcpCi0KLSNkZWZpbmUgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIC4uLikgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJ
RVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFzbWFy
dERhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBzbWFydCBkYXRhIGZvciBvYmpl
Y3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgZXdr
VmlldywgZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrVmlldykpOyAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0g
d2hpbGUgKDApCi0KLSNkZWZpbmUgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgaW1wbCwgLi4uKSAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFzbWFydERhdGEp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBFSU5BX0xPR19DUklUKCJzbWFydCBkYXRhIGlzIG51bGwiKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19f
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a1ZpZXcqIGltcGwgPSBzbWFydERhdGEtPnBy
aXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghaW1wbCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlO
QV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICBzbWFydERhdGEtPnNlbGYsIGV2YXNfb2JqZWN0X3R5
cGVfZ2V0KHNtYXJ0RGF0YS0+c2VsZikpOyAgICAgICBcCi0gICAgICAgICAgICByZXR1cm4gX19W
QV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCiAjZGVmaW5lIEVX
S19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAuLi4pICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIEV3a1ZpZXcqIGltcGwgPSAwOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFd2tWaWV3KiBpbXBs
ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgX19WQV9BUkdTX18pOyAgICAgICAgICAgIFwK
LSAgICAgICAgaW1wbCA9IHNtYXJ0RGF0YS0+cHJpdjsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmICghaW1wbCkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIs
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzbWFydERhdGEtPnNlbGYsIGV2YXNf
b2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0YS0+c2VsZikpOyAgICAgICBcCisgICAgICAgICAgICBF
SU5BX0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCIsIGV3a1ZpZXcpOyAg
ICAgICAgICAgXAogICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgfSB3aGlsZSAoMCkKIAotLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19Q
YWdlX0NvbnRlbnRzX0NvbnRleHQuCi10eXBlZGVmIHN0cnVjdCBFd2tfUGFnZV9Db250ZW50c19D
b250ZXh0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQ7Ci0KLS8qCi0gKiBAYnJpZWYgU3RydWN0
dXJlIGNvbnRhaW5pbmcgcGFnZSBjb250ZW50cyBjb250ZXh0IHVzZWQgZm9yIGV3a192aWV3X3Bh
Z2VfY29udGVudHNfZ2V0KCkgQVBJLgotICovCi1zdHJ1Y3QgRXdrX1BhZ2VfQ29udGVudHNfQ29u
dGV4dCB7Ci0gICAgRXdrX1BhZ2VfQ29udGVudHNfVHlwZSB0eXBlOwotICAgIEV3a19QYWdlX0Nv
bnRlbnRzX0NiIGNhbGxiYWNrOwotfTsKLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2No
YW5nZWQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIGlmIChzbWFydERh
dGEtPmNoYW5nZWQuYW55KQotICAgICAgICByZXR1cm47Ci0gICAgc21hcnREYXRhLT5jaGFuZ2Vk
LmFueSA9IHRydWU7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2hhbmdlZChzbWFydERhdGEtPnNl
bGYpOwotfQotCi0vLyBEZWZhdWx0IEV2ZW50IEhhbmRsaW5nLgotc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQot
ewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGws
IGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQ
cm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
Zm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBFV0tfVklF
V19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAg
ICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0Zv
Y3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX3doZWVsKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVl
bCogd2hlZWxFdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4o
c21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZVdoZWVs
RXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9t
U2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9kb3duKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3du
RXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5h
dGl2ZVdlYk1vdXNlRXZlbnQoZG93bkV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwg
aW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV91cChFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCi17Ci0gICAg
RVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2Up
OwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZl
bnQodXBFdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIGltcGwtPnRyYW5zZm9ybVRv
U2NyZWVuKCkpKTsKLQotICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250
ZXh0ID0gaW1wbC0+aW5wdXRNZXRob2RDb250ZXh0KCk7Ci0gICAgaWYgKGlucHV0TWV0aG9kQ29u
dGV4dCkKLSAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVNb3VzZVVwRXZlbnQodXBF
dmVudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfbW91c2VfbW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0
IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExf
R0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwt
PnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KG1vdmVFdmVudCwg
aW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
a2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50
X0tleV9Eb3duKiBkb3duRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgYm9vbCBpc0ZpbHRlcmVkID0g
ZmFsc2U7Ci0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBp
bXBsLT5pbnB1dE1ldGhvZENvbnRleHQoKTsKLSAgICBpZiAoaW5wdXRNZXRob2RDb250ZXh0KQot
ICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRsZUtleURvd25FdmVudChkb3duRXZlbnQs
ICZpc0ZpbHRlcmVkKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChO
YXRpdmVXZWJLZXlib2FyZEV2ZW50KGRvd25FdmVudCwgaXNGaWx0ZXJlZCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9rZXlfdXAoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogdXBF
dmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRh
LCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZUtleWJvYXJkRXZlbnQo
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh1cEV2ZW50KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIEV2ZW50IEhhbmRsaW5nLgotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX2luKHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0g
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aS0+Zm9jdXNfaW4pOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19pbihzbWFydERhdGEpOwot
fQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KHZvaWQqIGRhdGEsIEV2YXMq
LCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRh
dGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsK
LSAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hl
ZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihldmVudEluZm8p
OwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19W
aWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGktPm1vdXNlX3doZWVsKTsKLSAgICBzbWFydERhdGEtPmFwaS0+bW91c2Vfd2hlZWwoc21h
cnREYXRhLCB3aGVlbEV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV9k
b3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsK
LSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2
ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5rZXlfZG93bik7Ci0gICAgc21hcnREYXRh
LT5hcGktPmtleV9kb3duKHNtYXJ0RGF0YSwgZG93bkV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX2tleV91cCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lk
KiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQgPSBzdGF0aWNf
Y2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X3VwKTsKLSAgICBz
bWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIF9ld2tfdmlld19vbl9zaG93KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZv
aWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVXS19WSUVX
X0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwpOwotICAgIGltcGwtPnBh
Z2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlzaWJsZSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9oaWRlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFz
X09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwot
ICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwpOwot
Ci0gICAgLy8gVGhpcyBjYWxsIG1heSBsb29rIHdyb25nLCBidXQgd2UgcmVhbGx5IG5lZWQgdG8g
cGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUuCi0gICAgLy8gdmlld1N0YXRlRGlkQ2hhbmdlKCkgaXRz
ZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZXR0aW5nIHRoZSB2aXNpYmlsaXR5IHRv
IFZpc2libGUgb3IgSGlkZGVuCi0gICAgLy8gZGVwZW5kaW5nIG9uIHdoYXQgV2ViUGFnZVByb3h5
Ojppc1ZpZXdWaXNpYmxlKCkgcmV0dXJucywgdGhpcyBzaW1wbHkgdHJpZ2dlcnMgdGhlIHByb2Nl
c3MuCi0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3SXNWaXNpYmxlKTsKLX0KLQotc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgZ19wYXJlbnRTbWFy
dENsYXNzID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7Ci0KLXN0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgY29uc3QgRXZhc19T
bWFydCogc21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7Ci0gICAg
Y29uc3QgRXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFzcyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0
KHNtYXJ0KTsKLSAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyogYXBpID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+KHNtYXJ0Q2xhc3MpOwotICAgIEVX
S19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgaWYgKCFzbWFydERhdGEp
IHsKLSAgICAgICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKLSAgICAgICAgaWYgKCFz
bWFydERhdGEpIHsKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoImNvdWxkIG5vdCBhbGxvY2F0
ZSBFd2tfVmlld19TbWFydF9EYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVmlldywgc21hcnREYXRhKTsK
LSAgICB9Ci0KLSAgICBzbWFydERhdGEtPnNlbGYgPSBld2tWaWV3OwotICAgIHNtYXJ0RGF0YS0+
YXBpID0gYXBpOwotCi0gICAgZ19wYXJlbnRTbWFydENsYXNzLmFkZChld2tWaWV3KTsKLQotICAg
IHNtYXJ0RGF0YS0+cHJpdiA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgZXZhc19vYmplY3RfaW1hZ2Ug
dG8gZHJhdyB3ZWIgY29udGVudHMuCi0gICAgc21hcnREYXRhLT5pbWFnZSA9IGV2YXNfb2JqZWN0
X2ltYWdlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
YWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9pbWFn
ZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHRydWUpOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5pbWFnZSwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhzbWFydERhdGEtPmltYWdlKTsKLQotI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2YXNf
b2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzbWFydERhdGEpCi0gICAg
Q09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX0lOLCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4pOwot
ICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19PVVQsIF9ld2tfdmlld19vbl9mb2N1c19v
dXQpOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTCwgX2V3a192aWV3X29u
X21vdXNlX3doZWVsKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04sIF9ld2tf
dmlld19vbl9rZXlfZG93bik7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0tFWV9VUCwgX2V3
a192aWV3X29uX2tleV91cCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX1NIT1csIF9ld2tf
dmlld19vbl9zaG93KTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfSElERSwgX2V3a192aWV3
X29uX2hpZGUpOwotI3VuZGVmIENPTk5FQ1QKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3Nt
YXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdr
Vmlldywgc21hcnREYXRhKTsKLSAgICBpZiAoc21hcnREYXRhKQotICAgICAgICBkZWxldGUgc21h
cnREYXRhLT5wcml2OwotCi0gICAgZ19wYXJlbnRTbWFydENsYXNzLmRlbChld2tWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVmll
dywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCi17Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgZXZhc19vYmplY3Rf
cmVzaXplKHNtYXJ0RGF0YS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0
X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOwotCi0gICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSB0cnVlOwotICAgIF9ld2tf
dmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmll
d19zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIC8qeCovLCBFdmFz
X0Nvb3JkIC8qeSovKQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhKTsKLQotICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IHRydWU7Ci0g
ICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKLX0KLQotc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgRVdLX1ZJ
RVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0KLSAgICBzbWFy
dERhdGEtPmNoYW5nZWQuYW55ID0gZmFsc2U7Ci0KLSAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0KTsKLQotICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24p
IHsKLSAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAg
IHNtYXJ0RGF0YS0+dmlldy54ID0geDsKLSAgICAgICAgc21hcnREYXRhLT52aWV3LnkgPSB5Owot
ICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+aW1hZ2UsIHgsIHkpOwotICAgIH0K
LQotICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBzbWFydERhdGEt
PmNoYW5nZWQuc2l6ZSA9IGZhbHNlOwotICAgICAgICBzbWFydERhdGEtPnZpZXcudyA9IHdpZHRo
OwotICAgICAgICBzbWFydERhdGEtPnZpZXcuaCA9IGhlaWdodDsKLQotICAgICAgICBpZiAoaW1w
bC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpKQotICAgICAgICAgICAgaW1wbC0+cGFnZSgpLT5kcmF3
aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCksIEludFNpemUoKSk7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGltcGwtPnNldE5lZWRz
U3VyZmFjZVJlc2l6ZSgpOwotI2VuZGlmCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgICAgIGltcGwtPnBhZ2VDbGllbnQoKS0+dXBkYXRlVmlld3BvcnRTaXplKCk7Ci0jZW5kaWYK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9zaG93KEV2YXNfT2JqZWN0
KiBld2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhKTsKLQotICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzbWFydERhdGEtPmJh
c2UuY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNlLmNs
aXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAg
IGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNfb2Jq
ZWN0X2hpZGUoc21hcnREYXRhLT5pbWFnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQsIGludCBncmVlbiwg
aW50IGJsdWUsIGludCBhbHBoYSkKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgaW1wbCk7Ci0KLSAgICBpZiAoYWxwaGEgPCAwKQotICAgICAgICBhbHBoYSA9
IDA7Ci0gICAgZWxzZSBpZiAoYWxwaGEgPiAyNTUpCi0gICAgICAgIGFscGhhID0gMjU1OwotCi0j
ZGVmaW5lIENIRUNLX0NPTE9SKGNvbG9yLCBhbHBoYSkgXAotICAgIGlmIChjb2xvciA8IDApICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgY29sb3IgPSAwOyAgICAgICAgICAgICAgICBcCi0gICAg
ZWxzZSBpZiAoY29sb3IgPiBhbHBoYSkgICAgICAgXAotICAgICAgICBjb2xvciA9IGFscGhhOwot
ICAgIENIRUNLX0NPTE9SKHJlZCwgYWxwaGEpOwotICAgIENIRUNLX0NPTE9SKGdyZWVuLCBhbHBo
YSk7Ci0gICAgQ0hFQ0tfQ09MT1IoYmx1ZSwgYWxwaGEpOwotI3VuZGVmIENIRUNLX0NPTE9SCi0K
LSAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFnZSwgYWxwaGEg
PCAyNTUpOwotICAgIGltcGwtPnBhZ2UoKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKHJlZCB8fCBncmVl
biB8fCBibHVlKTsKLSAgICBpbXBsLT5wYWdlKCktPnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKGFscGhhIDwgMjU1KTsKLQotICAgIGdfcGFyZW50U21hcnRDbGFzcy5jb2xvcl9zZXQoZXdr
VmlldywgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGFwaSwgZmFsc2UpOwogCi0gICAgaWYgKGFwaS0+dmVy
c2lvbiAhPSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKSB7Ci0gICAgICAgIEVJTkFfTE9H
X0NSSVQoIkV3a19WaWV3X1NtYXJ0X0NsYXNzICVwIGlzIHZlcnNpb24gJWx1IHdoaWxlICVsdSB3
YXMgZXhwZWN0ZWQuIiwKLSAgICAgICAgICAgICBhcGksIGFwaS0+dmVyc2lvbiwgRVdLX1ZJRVdf
U01BUlRfQ0xBU1NfVkVSU0lPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoRUlOQV9VTkxJS0VMWSghZ19wYXJlbnRTbWFydENsYXNzLmFkZCkpCi0gICAgICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZnX3BhcmVudFNtYXJ0Q2xhc3MpOwot
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJmFwaS0+c2MpOwotCi0g
ICAgLy8gU2V0IEV2YXNfU21hcnRfQ2xhc3MgZnVuY3Rpb25zLgotICAgIGFwaS0+c2MuYWRkID0g
X2V3a192aWV3X3NtYXJ0X2FkZDsKLSAgICBhcGktPnNjLmRlbCA9IF9ld2tfdmlld19zbWFydF9k
ZWw7Ci0gICAgYXBpLT5zYy5tb3ZlID0gX2V3a192aWV3X3NtYXJ0X21vdmU7Ci0gICAgYXBpLT5z
Yy5yZXNpemUgPSBfZXdrX3ZpZXdfc21hcnRfcmVzaXplOwotICAgIGFwaS0+c2Muc2hvdyA9IF9l
d2tfdmlld19zbWFydF9zaG93OwotICAgIGFwaS0+c2MuaGlkZSA9IF9ld2tfdmlld19zbWFydF9o
aWRlOwotICAgIGFwaS0+c2MuY29sb3Jfc2V0ID0gX2V3a192aWV3X3NtYXJ0X2NvbG9yX3NldDsK
LSAgICBhcGktPnNjLmNhbGN1bGF0ZSA9IF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGU7Ci0gICAg
YXBpLT5zYy5kYXRhID0gRVdLX1ZJRVdfVFlQRV9TVFI7IC8vIEl0IGlzIHVzZWQgYnkgdHlwZSBj
aGVja2luZy4KLQotICAgIC8vIFNldCBFd2tfVmlld19TbWFydF9DbGFzcyBmdW5jdGlvbnMuCi0g
ICAgYXBpLT5mb2N1c19pbiA9IF9ld2tfdmlld19zbWFydF9mb2N1c19pbjsKLSAgICBhcGktPmZv
Y3VzX291dCA9IF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQ7Ci0gICAgYXBpLT5tb3VzZV93aGVl
bCA9IF9ld2tfdmlld19zbWFydF9tb3VzZV93aGVlbDsKLSAgICBhcGktPm1vdXNlX2Rvd24gPSBf
ZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93bjsKLSAgICBhcGktPm1vdXNlX3VwID0gX2V3a192aWV3
X3NtYXJ0X21vdXNlX3VwOwotICAgIGFwaS0+bW91c2VfbW92ZSA9IF9ld2tfdmlld19zbWFydF9t
b3VzZV9tb3ZlOwotICAgIGFwaS0+a2V5X2Rvd24gPSBfZXdrX3ZpZXdfc21hcnRfa2V5X2Rvd247
Ci0gICAgYXBpLT5rZXlfdXAgPSBfZXdrX3ZpZXdfc21hcnRfa2V5X3VwOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0
Q2xhc3Modm9pZCkKLXsKLSAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdL
X1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19WaWV3Iik7Ci0gICAgc3Rh
dGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFy
dCkpIHsKLSAgICAgICAgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KCZhcGkpOwotICAgICAgICBz
bWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpOwotICAgIH0KLQotICAgIHJldHVy
biBzbWFydDsKLX0KLQotc3RhdGljIGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhF
dmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNv
bnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIEV3a1ZpZXc6OlZpZXdCZWhh
dmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikKLXsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChjb250ZXh0LCAwKTsKLQotICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gZXZhc19vYmpl
Y3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChld2tWaWV3LCAwKTsKLQotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFy
dERhdGEpOwotICAgIGlmICghc21hcnREYXRhKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2RlbChl
d2tWaWV3KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFzbWFydERh
dGEtPnByaXYpOwotCi0gICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBX
ZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKLSAgICAvLyBz
byB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KLSAgICBzbWFydERhdGEtPnByaXYg
PSBuZXcgRXdrVmlldyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVo
YXZpb3IpOwotICAgIHJldHVybiBld2tWaWV3OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICog
Q29uc3RydWN0cyBhIGV3a192aWV3IEV2YXNfT2JqZWN0IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMu
Ci0gKi8KLUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6
OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKLXsKLSAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52
YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0Ojpj
cmVhdGUodG9JbXBsKGNvbnRleHRSZWYpKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCks
IHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIHJldHVybiBFd2tWaWV3Ojppbml0U21hcnRD
bGFzc0ludGVyZmFjZSgqYXBpKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2Fk
ZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nh
c3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6
Y3JlYXRlV2l0aFNtYXJ0Q2xhc3MoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0Nv
bnRleHQqPihjb250ZXh0KSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZp
ZXcsIDApOworCisgICAgcmV0dXJuIHZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAogRXZhc19PYmpl
Y3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfc21hcnRfYWRkKGNhbnZhcywgY3JlYXRl
RXdrVmlld1NtYXJ0Q2xhc3MoKSwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0
KSk7CisgICAgRXdrVmlldyogdmlldyA9IEV3a1ZpZXc6OmNyZWF0ZShjYW52YXMsIGV3a19vYmpl
Y3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh2aWV3LCAwKTsKKworICAgIHJldHVybiB2aWV3LT5ldmFzT2JqZWN0KCk7CiB9
CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQpAQCAtODM5LDggKzM5
Myw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfVG91Y2hfRXZlbnRfVHlwZSB0CiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocG9pbnRzLCBmYWxzZSk7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsK
LSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBm
YWxzZSk7CisgICAgRVdLX1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIGltcGwsIGZh
bHNlKTsKIAogICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3Vj
aEV2ZW50KHR5cGUsIHBvaW50cywgbW9kaWZpZXJzLCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUo
KSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSwgZWNvcmVfdGltZV9nZXQoKSkpOwogCkBAIC05
NTcsNiArNTEwLDE3IEBAIHZvaWQgZXdrX3ZpZXdfZHJhd3NfcGFnZV9iYWNrZ3JvdW5kX3NldChF
dmFzX09iamVjdCAqZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZWQpCiAgICAgaW1wbC0+c2V0RHJh
d3NCYWNrZ3JvdW5kKGVuYWJsZWQpOwogfQogCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3Ig
RXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dC4KK3R5cGVkZWYgc3RydWN0IEV3a19QYWdlX0NvbnRl
bnRzX0NvbnRleHQgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dDsKKworLyoKKyAqIEBicmllZiBT
dHJ1Y3R1cmUgY29udGFpbmluZyBwYWdlIGNvbnRlbnRzIGNvbnRleHQgdXNlZCBmb3IgZXdrX3Zp
ZXdfcGFnZV9jb250ZW50c19nZXQoKSBBUEkuCisgKi8KK3N0cnVjdCBFd2tfUGFnZV9Db250ZW50
c19Db250ZXh0IHsKKyAgICBFd2tfUGFnZV9Db250ZW50c19UeXBlIHR5cGU7CisgICAgRXdrX1Bh
Z2VfQ29udGVudHNfQ2IgY2FsbGJhY2s7Cit9OworCiAvKioKICAqIEBpbnRlcm5hbAogICogQ2Fs
bGJhY2sgZnVuY3Rpb24gdXNlZCBmb3IgZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiNGM5Ny4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1
bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgZXdrX3ZpZXdfcHJpdmF0ZV9oCi0jZGVmaW5lIGV3
a192aWV3X3ByaXZhdGVfaAotCi0jaW5jbHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgPEV2YXMu
aD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgotCi1FdmFzX09iamVjdCogZXdrX3ZpZXdf
YmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tW
aWV3OjpWaWV3QmVoYXZpb3IpOwotCi0jZW5kaWYgLy8gZXdrX3ZpZXdfcHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCmluZGV4IDJl
ZmRiZDAuLjExMTFmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZUNsaWVudEJhc2UuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBQYWdlQ2xpZW50QmFzZTo6
aXNWaWV3SW5XaW5kb3coKQogdm9pZCBQYWdlQ2xpZW50QmFzZTo6cHJvY2Vzc0RpZENyYXNoKCkK
IHsKICAgICAvLyBDaGVjayBpZiBsb2FkaW5nIHdhcyBvbmdvaW5nLCB3aGVuIHdlYiBwcm9jZXNz
IGNyYXNoZWQuCi0gICAgZG91YmxlIGxvYWRQcm9ncmVzcyA9IGV3a192aWV3X2xvYWRfcHJvZ3Jl
c3NfZ2V0KG1fdmlldy0+dmlldygpKTsKKyAgICBkb3VibGUgbG9hZFByb2dyZXNzID0gZXdrX3Zp
ZXdfbG9hZF9wcm9ncmVzc19nZXQobV92aWV3LT5ldmFzT2JqZWN0KCkpOwogICAgIGlmIChsb2Fk
UHJvZ3Jlc3MgPj0gMCAmJiBsb2FkUHJvZ3Jlc3MgPCAxKSB7CiAgICAgICAgIGxvYWRQcm9ncmVz
cyA9IDE7CiAgICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxMb2FkUHJvZ3Jlc3M+KCkuY2Fs
bCgmbG9hZFByb2dyZXNzKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIFBhZ2VDbGllbnRCYXNl
Ojpwcm9jZXNzRGlkQ3Jhc2goKQogICAgICAgICBXQVJOKCJXQVJOSU5HOiBUaGUgd2ViIHByb2Nl
c3MgZXhwZXJpZW5jZWQgYSBjcmFzaCBvbiAnJXMnLlxuIiwgdXJsLmRhdGEoKSk7CiAKICAgICAg
ICAgLy8gRGlzcGxheSBhbiBlcnJvciBwYWdlCi0gICAgICAgIGV3a192aWV3X2h0bWxfc3RyaW5n
X2xvYWQobV92aWV3LT52aWV3KCksICJUaGUgd2ViIHByb2Nlc3MgaGFzIGNyYXNoZWQuIiwgMCwg
dXJsLmRhdGEoKSk7CisgICAgICAgIGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQobV92aWV3LT5l
dmFzT2JqZWN0KCksICJUaGUgd2ViIHByb2Nlc3MgaGFzIGNyYXNoZWQuIiwgMCwgdXJsLmRhdGEo
KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VMb2FkQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZUxvYWRDbGllbnRFZmwuY3BwCmluZGV4IDc0OTUxMTAuLjI4Y2ZhYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwCkBAIC0xNDcs
NyArMTQ3LDcgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRM
aXN0KFdLUGFnZVJlZiwgV0tCYWNrRm9yd2FyZExpc3RJdGUKICAgICBFd2tWaWV3KiB2aWV3ID0g
dG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlldygpOwogICAgIEFTU0VSVCh2aWV3
KTsKIAotICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCA9IGV3a192aWV3X2JhY2tfZm9y
d2FyZF9saXN0X2dldCh2aWV3LT52aWV3KCkpOworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCog
bGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldCh2aWV3LT5ldmFzT2JqZWN0KCkp
OwogICAgIEFTU0VSVChsaXN0KTsKICAgICBsaXN0LT51cGRhdGUoYWRkZWRJdGVtLCByZW1vdmVk
SXRlbXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VV
SUNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVu
dEVmbC5jcHAKaW5kZXggODExZGIwNi4uMWZlOTEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcApAQCAtOTQsMTcgKzk0LDE3IEBAIHZv
aWQgUGFnZVVJQ2xpZW50RWZsOjpjbG9zZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6dGFrZUZvY3VzKFdLUGFnZVJlZiwgV0tGb2N1c0Rp
cmVjdGlvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICAvLyBGSVhNRTogdGhpcyBp
cyBvbmx5IGEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbi4KLSAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBmYWxzZSk7
CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXctPmV2YXNPYmplY3QoKSwgZmFsc2UpOwogfQogCiB2b2lkIFBhZ2VVSUNsaWVudEVm
bDo6Zm9jdXMoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT52
aWV3KCksIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVm
bChjbGllbnRJbmZvKS0+bV92aWV3LT5ldmFzT2JqZWN0KCksIHRydWUpOwogfQogCiB2b2lkIFBh
Z2VVSUNsaWVudEVmbDo6dW5mb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CiB7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXctPnZpZXcoKSwgZmFsc2UpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0
b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT5ldmFzT2JqZWN0KCksIGZhbHNl
KTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRBbGVydChXS1BhZ2VS
ZWYsIFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVj
dG9yUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0
b3JQcm94eUVmbC5jcHAKaW5kZXggNDYyYjI2ZC4uYWIzYzYyNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTMw
LDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdr
X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKLSNpbmNsdWRlICJld2tfdmlld19w
cml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgpAQCAtODIsNiArODIsMTEgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRl
SW5zcGVjdG9yV2luZG93KCkKIAogICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX2luc3BlY3Rv
clZpZXcsIHRydWUpOwogfQorLy8gRklYTUU6IHNob3VsZCBoYXZlIHRoaXMgaW4gc29tZSBnZW5l
cmljIHBsYWNlCitzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gZXdrQ29udGV4
dChXS0NvbnRleHRSZWYgY29udGV4dFJlZikKK3sKKyAgICByZXR1cm4gY29udGV4dFJlZiA/IEV3
a0NvbnRleHQ6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZikpIDogRXdrQ29udGV4dDo6ZGVmYXVs
dENvbnRleHQoKTsKK30KIAogV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKIHsKQEAgLTk4LDggKzEwMywxMSBAQCBXZWJQYWdlUHJv
eHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAg
IGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9pbnNw
ZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JX
aW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEkoaW5zcGVj
dG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgRXdrVmlldyog
aW5zcGVjdG9yVmlld0ltcGwgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3RvclZp
ZXcpOworICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBsID0gRXdrVmlldzo6Y3JlYXRlKGVj
b3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgZXdrQ29udGV4dCh0b0FQSShwYWdlKCkt
PnByb2Nlc3MoKS0+Y29udGV4dCgpKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdr
Vmlldzo6TGVnYWN5QmVoYXZpb3IpOworICAgIGlmICghaW5zcGVjdG9yVmlld0ltcGwpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgbV9pbnNwZWN0b3JWaWV3ID0gaW5zcGVjdG9yVmlld0ltcGwt
PmV2YXNPYmplY3QoKTsKICAgICBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1Rf
VEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKIAogICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3Mg
PSBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0dGluZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcAppbmRleCBhMzMyNzI0Li5kZTcwY2ExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3Bw
CkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBFdmFzX09iamVjdCogV2Vi
UGFnZVByb3h5Ojp2aWV3V2lkZ2V0KCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFnZUNs
aWVudEJhc2UqPihtX3BhZ2VDbGllbnQpLT52aWV3KCktPnZpZXcoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UGFnZUNsaWVudEJhc2UqPihtX3BhZ2VDbGllbnQpLT52aWV3KCktPmV2YXNPYmpl
Y3QoKTsKIH0KIAogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3Qg
U3RyaW5nJiAvKmFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCovKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186010</attachid>
            <date>2013-02-01 04:43:53 -0800</date>
            <delta_ts>2013-02-01 07:23:01 -0800</delta_ts>
            <desc>WIP 2</desc>
            <filename>bug108026_WIP_2</filename>
            <type>text/plain</type>
            <size>68386</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDFiYjkwY2Y0NmMwOWFkYmZiZTI3YjFkNzhlNWUwY2I3NTJhZmUyZWEKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IDMyYjlkOGYuLjk2
NjA4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5j
cHAKQEAgLTIyLDE5ICsyMiwxOSBAQAogCiAjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUg
IldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJl
d2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCi17Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29u
dGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOworeyAgIAor
ICAgIHJldHVybiB0b0FQSShFd2tWaWV3OjpjcmVhdGVWaWV3T2JqZWN0KGNhbnZhcywgY29udGV4
dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOwogfQogCiBXS1Zp
ZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICByZXR1
cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBS
ZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikpOworICAgIHJldHVybiB0b0FQSShFd2tWaWV3
OjpjcmVhdGVWaWV3T2JqZWN0KGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tW
aWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsKIH0KIAogV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tW
aWV3UmVmIHZpZXdSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwCmluZGV4IDViYjQ0NjQuLjJkODgyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVkZSAiRm9y
bUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgogI2luY2x1
ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVX
ZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKICNpbmNsdWRlICJQ
YWdlQ2xpZW50RGVmYXVsdEltcGwuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50TGVnYWN5SW1wbC5o
IgpAQCAtNTYsNyArNTksNiBAQAogI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3Zp
ZXcuaCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3dpbmRv
d19mZWF0dXJlc19wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUg
PEVjb3JlX1guaD4KQEAgLTgzLDM1ICs4NSwxNjQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAogc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6ZSA9IDE2OwogCi10eXBlZGVmIEhh
c2hNYXA8V0tQYWdlUmVmLCBFdmFzX09iamVjdCo+IFBhZ2VWaWV3TWFwOworLy8gQXV4aWxpYXJ5
IGZ1bmN0aW9ucy4KIAotc3RhdGljIGlubGluZSBQYWdlVmlld01hcCYgcGFnZVZpZXdNYXAoKQor
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGRlZmF1bHRJZk51bGwoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYWdlVmlld01h
cCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICByZXR1cm4gY29udGV4dFJlZiA/IEV3
a0NvbnRleHQ6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZikpIDogRXdrQ29udGV4dDo6ZGVmYXVs
dENvbnRleHQoKTsKIH0KIAotdm9pZCBFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFwKEV3a1ZpZXcq
IHZpZXcpCitzdGF0aWMgaW5saW5lIHZvaWQgc21hcnREYXRhQ2hhbmdlZChFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgUGFnZVZpZXdNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBwYWdlVmlld01hcCgpLmFkZCh2aWV3LT53a1BhZ2UoKSwgdmlldy0+dmlldygpKTsKLSAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIEFTU0VSVChzbWFy
dERhdGEpOworCisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkgPSB0cnVlOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhLT5zZWxmKTsKIH0KIAotdm9pZCBFd2tWaWV3OjpyZW1v
dmVGcm9tUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykKK3N0YXRpYyBFdmFzX1NtYXJ0KiBkZWZh
dWx0U21hcnRDbGFzc0luc3RhbmNlKCkKIHsKLSAgICBBU1NFUlQocGFnZVZpZXdNYXAoKS5jb250
YWlucyh2aWV3LT53a1BhZ2UoKSkpOwotICAgIHBhZ2VWaWV3TWFwKCkucmVtb3ZlKHZpZXctPndr
UGFnZSgpKTsKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdf
U01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19WaWV3Iik7CisgICAgc3RhdGljIEV2
YXNfU21hcnQqIHNtYXJ0ID0gMDsKKworICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFydCkpIHsK
KyAgICAgICAgRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoYXBpKTsKKyAgICAgICAg
c21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKKyAgICB9CisKKyAgICByZXR1
cm4gc21hcnQ7CiB9CiAKLWNvbnN0IEV2YXNfT2JqZWN0KiBFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VW
aWV3TWFwKGNvbnN0IFdLUGFnZVJlZiBwYWdlKQorc3RhdGljIGlubGluZSB2b2lkIGNsYW1wUkdC
QVZhbHVlKGludCYgdmFsdWUsIGludCB1cHBlckxpbWl0ID0gMjU1KQogewotICAgIEFTU0VSVChw
YWdlKTsKKyAgICBBU1NFUlQodXBwZXJMaW1pdCk7CisgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAg
ICAgdmFsdWUgPSAwOworICAgIGlmICh2YWx1ZSA+IHVwcGVyTGltaXQpCisgICAgICAgIHZhbHVl
ID0gdXBwZXJMaW1pdDsKK30KKworLy8gRXdrVmlld0V2ZW50SGFuZGxlciBpbXBsZW1lbnRhdGlv
bi4KKwordGVtcGxhdGUgPEV2YXNfQ2FsbGJhY2tfVHlwZSBFdmVudFR5cGU+CitjbGFzcyBFd2tW
aWV3RXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzdWJzY3JpYmUoRXZh
c19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgeworICAgICAgICBldmFzX29iamVjdF9ldmVudF9j
YWxsYmFja19hZGQoZXZhc09iamVjdCwgRXZlbnRUeXBlLCBvbkV2ZW50LCBFd2tWaWV3OjpzbWFy
dERhdGEoZXZhc09iamVjdCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVuc3Vic2NyaWJl
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIHsKKyAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKGV2YXNPYmplY3QsIEV2ZW50VHlwZSwgb25FdmVudCk7CisgICAgfQog
Ci0gICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOworICAgIHN0YXRpYyB2b2lkIG9u
RXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsK
K307CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFD
S19NT1VTRV9ET1dOPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2
b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQg
PSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEt
PmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1v
dXNlX2Rvd24pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKHNtYXJ0RGF0YSwgZG93
bkV2ZW50KTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFT
X0NBTExCQUNLX01PVVNFX1VQPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVu
dCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEt
PmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1v
dXNlX3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfdXAoc21hcnREYXRhLCB1cEV2ZW50
KTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExC
QUNLX01PVVNFX01PVkU+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVFdmVu
dCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50SW5mbyk7CisgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21h
cnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+
bW91c2VfbW92ZSk7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX21vdmUoc21hcnREYXRhLCBt
b3ZlRXZlbnQpOwogfQogCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVW
QVNfQ0FMTEJBQ0tfRk9DVVNfSU4+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGktPmZvY3VzX2luKTsKKyAgICBzbWFydERhdGEtPmFwaS0+Zm9j
dXNfaW4oc21hcnREYXRhKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFu
ZGxlcjxFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVD46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyos
IEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsKKyAgICBzbWFydERhdGEt
PmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1Zp
ZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTD46Om9uRXZlbnQodm9pZCog
ZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNf
RXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01v
dXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbCk7CisgICAgc21hcnREYXRh
LT5hcGktPm1vdXNlX3doZWVsKHNtYXJ0RGF0YSwgd2hlZWxFdmVudCk7Cit9CisKK3RlbXBsYXRl
IDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlfRE9XTj46Om9u
RXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQor
eworICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNf
RXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9kb3duKTsKKyAgICBzbWFydERh
dGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQpOworfQorCit0ZW1wbGF0ZSA8
Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfS0VZX1VQPjo6b25FdmVu
dCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7Cisg
ICAgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tl
eV9VcCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5
X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdF
dmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19TSE9XPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFz
KiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRXdr
Vmlldzo6ZnJvbVNtYXJ0RGF0YShzbWFydERhdGEpLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5n
ZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBF
d2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46Om9uRXZlbnQodm9pZCogZGF0
YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwor
CisgICAgLy8gVGhpcyBjYWxsIG1heSBsb29rIHdyb25nLCBidXQgd2UgcmVhbGx5IG5lZWQgdG8g
cGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUuCisgICAgLy8gdmlld1N0YXRlRGlkQ2hhbmdlKCkgaXRz
ZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZXR0aW5nIHRoZSB2aXNpYmlsaXR5IHRv
IFZpc2libGUgb3IgSGlkZGVuCisgICAgLy8gZGVwZW5kaW5nIG9uIHdoYXQgV2ViUGFnZVByb3h5
Ojppc1ZpZXdWaXNpYmxlKCkgcmV0dXJucywgdGhpcyBzaW1wbHkgdHJpZ2dlcnMgdGhlIHByb2Nl
c3MuCisgICAgRXdrVmlldzo6ZnJvbVNtYXJ0RGF0YShzbWFydERhdGEpLT5wYWdlKCktPnZpZXdT
dGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOworfQorCisvLyBFd2tW
aWV3IGltcGxlbWVudGF0aW9uLgorCiBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViUGFn
ZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKLSAgICA6IG1fZXZhc09i
amVjdChldmFzT2JqZWN0KQorICAgIDogbV92aWV3T2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAg
LCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQpAQCAtMTQyLDcgKzI3Myw3IEBAIEV3a1Zp
ZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4
dD4gY29udGV4dCwgUGFzc1JlCiAgICAgLCBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCh0cnVlKQog
ICAgICwgbV9zZXREcmF3c0JhY2tncm91bmQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKG1fZXZhc09i
amVjdCk7CisgICAgQVNTRVJUKG1fdmlld09iamVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7
CiAgICAgQVNTRVJUKG1fcGFnZVByb3h5KTsKIApAQCAtMTYzLDcgKzI5NCw3IEBAIEV3a1ZpZXc6
OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4g
Y29udGV4dCwgUGFzc1JlCiAgICAgbV9wYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7CiAK
ICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgbV9wYWdlUHJveHktPmZ1bGxTY3JlZW5N
YW5hZ2VyKCktPnNldFdlYlZpZXcobV9ldmFzT2JqZWN0KTsKKyAgICBtX3BhZ2VQcm94eS0+ZnVs
bFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX3ZpZXdPYmplY3QpOwogICAgIG1fcGFnZVBy
b3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQodHJ1
ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCX0FVRElPKQpAQCAtMTgwLDggKzMxMSw2IEBAIEV3
a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29u
dGV4dD4gY29udGV4dCwgUGFzc1JlCiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CiAKICAgICBp
Y29uRGF0YWJhc2UtPndhdGNoQ2hhbmdlcyhJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKEV3a1ZpZXc6
Om9uRmF2aWNvbkNoYW5nZWQsIHRoaXMpKTsKLQotICAgIEV3a1ZpZXc6OmFkZFRvUGFnZVZpZXdN
YXAodGhpcyk7CiB9CiAKIEV3a1ZpZXc6On5Fd2tWaWV3KCkKQEAgLTE5MywyMiArMzIyLDEzNiBA
QCBFd2tWaWV3Ojp+RXdrVmlldygpCiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CiAKICAgICBp
Y29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOwor
fQogCi0gICAgRXdrVmlldzo6cmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKHRoaXMpOworRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OmNyZWF0ZVZpZXdPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBz
bWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnQsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250
ZXh0LCAwKTsKKworICAgIEV2YXNfT2JqZWN0KiB2aWV3T2JqZWN0ID0gZXZhc19vYmplY3Rfc21h
cnRfYWRkKGNhbnZhcywgc21hcnQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh2aWV3T2JqZWN0LCAwKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9
IEV3a1ZpZXc6OnNtYXJ0RGF0YSh2aWV3T2JqZWN0KTsKKyAgICBpZiAoIXNtYXJ0RGF0YSkgewor
ICAgICAgICBldmFzX29iamVjdF9kZWwodmlld09iamVjdCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIEFTU0VSVCghc21hcnREYXRhLT5wcml2KTsKKworICAgIC8vIERlZmF1bHQg
V2ViUGFnZUdyb3VwIGlzIGNyZWF0ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUg
cGFnZUdyb3VwUmVmIGlzIDAsCisgICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0
IGhlcmUuCisgICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcodmlld09iamVjdCwgY29u
dGV4dCwgdG9JbXBsKHBhZ2VHcm91cFJlZiksIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gdmlld09i
amVjdDsKIH0KIAotRXdrX1ZpZXdfU21hcnRfRGF0YSogRXdrVmlldzo6c21hcnREYXRhKCkgY29u
c3QKK0V2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVWaWV3T2JqZWN0KEV2YXMqIGNhbnZhcywg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG1fZXZhc09iamVj
dCkpOworICAgIHJldHVybiBjcmVhdGVWaWV3T2JqZWN0KGNhbnZhcywgZGVmYXVsdFNtYXJ0Q2xh
c3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKIH0KIAotRXdr
VmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpCitF
dmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlVmlld09iamVjdChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhh
dmlvciBiZWhhdmlvcikKIHsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rf
c21hcnRfZGF0YV9nZXQodmlldykpOwotICAgIEFTU0VSVChzZCk7Ci0gICAgQVNTRVJUKHNkLT5w
cml2KTsKLSAgICByZXR1cm4gc2QtPnByaXY7CisgICAgcmV0dXJuIGNyZWF0ZVZpZXdPYmplY3Qo
Y2FudmFzLCBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCksIGRlZmF1bHRJZk51bGwoY29udGV4
dFJlZiksIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworfQorCitFd2tWaWV3KiBFd2tWaWV3Ojpm
cm9tRXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBpZiAo
IWlzVmlld09iamVjdChldmFzT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gZnJvbVNtYXJ0RGF0YShzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19v
YmplY3Rfc21hcnRfZGF0YV9nZXQoZXZhc09iamVjdCkpKTsKK30KKworaW5saW5lIEV3a1ZpZXcq
IEV3a1ZpZXc6OmZyb21TbWFydERhdGEoY29uc3QgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKQoreworICAgIHJldHVybiBzbWFydERhdGEgPyBzbWFydERhdGEtPnByaXYgOiAwOworfQor
Citib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0Ns
YXNzJiBhcGkpCit7CisgICAgaWYgKGFwaS52ZXJzaW9uICE9IEVXS19WSUVXX1NNQVJUX0NMQVNT
X1ZFUlNJT04pIHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgiRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
JXAgaXMgdmVyc2lvbiAlbHUgd2hpbGUgJWx1IHdhcyBleHBlY3RlZC4iLAorICAgICAgICAgICAg
JmFwaSwgYXBpLnZlcnNpb24sIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKEVJTkFfVU5MSUtFTFkoIXBhcmVudFNt
YXJ0Q2xhc3MuYWRkKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9z
ZXQoJnBhcmVudFNtYXJ0Q2xhc3MpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9z
bWFydF9zZXQoJmFwaS5zYyk7CisKKyAgICAvLyBTZXQgRXZhc19TbWFydF9DbGFzcyBpbnRlcmZh
Y2UuCisgICAgYXBpLnNjLmFkZCA9IG9uRXZhc1NtYXJ0QWRkOworICAgIGFwaS5zYy5kZWwgPSBv
bkV2YXNTbWFydERlbGV0ZTsKKyAgICBhcGkuc2MubW92ZSA9IG9uRXZhc1NtYXJ0TW92ZTsKKyAg
ICBhcGkuc2MucmVzaXplID0gb25FdmFzU21hcnRSZXNpemU7CisgICAgYXBpLnNjLnNob3cgPSBv
bkV2YXNTbWFydFNob3c7CisgICAgYXBpLnNjLmhpZGUgPSBvbkV2YXNTbWFydEhpZGU7CisgICAg
YXBpLnNjLmNvbG9yX3NldCA9IG9uRXZhc1NtYXJ0Q29sb3JTZXQ7CisgICAgYXBpLnNjLmNhbGN1
bGF0ZSA9IG9uRXZhc1NtYXJ0Q2FsY3VsYXRlOworICAgIGFwaS5zYy5kYXRhID0gc21hcnRDbGFz
c05hbWU7IC8vIEl0IGlzIHVzZWQgZm9yIHR5cGUgY2hlY2tpbmcuCisKKyAgICAvLyBTZXQgRXdr
X1ZpZXdfU21hcnRfQ2xhc3MgaW50ZXJmYWNlLgorICAgIGFwaS5mb2N1c19pbiA9IG9uVmlld1Nt
YXJ0Rm9jdXNJbjsKKyAgICBhcGkuZm9jdXNfb3V0ID0gb25WaWV3U21hcnRGb2N1c091dDsKKyAg
ICBhcGkubW91c2Vfd2hlZWwgPSBvblZpZXdTbWFydE1vdXNlV2hlZWw7CisgICAgYXBpLm1vdXNl
X2Rvd24gPSBvblZpZXdTbWFydE1vdXNlRG93bjsKKyAgICBhcGkubW91c2VfdXAgPSBvblZpZXdT
bWFydE1vdXNlVXA7CisgICAgYXBpLm1vdXNlX21vdmUgPSBvblZpZXdTbWFydE1vdXNlTW92ZTsK
KyAgICBhcGkua2V5X2Rvd24gPSBvblZpZXdTbWFydEtleURvd247CisgICAgYXBpLmtleV91cCA9
IG9uVmlld1NtYXJ0S2V5VXA7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFd2tWaWV3
Ojppc1ZpZXdPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXNPYmplY3QsIGZhbHNlKTsKKworICAgIGNv
bnN0IGNoYXIqIGV2YXNPYmplY3RUeXBlID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXZhc09iamVj
dCk7CisgICAgY29uc3QgRXZhc19TbWFydCogZXZhc1NtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRf
c21hcnRfZ2V0KGV2YXNPYmplY3QpOworICAgIGlmIChFSU5BX1VOTElLRUxZKCFldmFzU21hcnQp
KSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0
ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwp
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBFdmFzX1NtYXJ0
X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQoZXZhc1NtYXJ0KTsKKyAg
ICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnRDbGFzcykpIHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJ
VCgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBjbGFzcyBvYmplY3QhIiwgZXZhc09iamVjdCwgZXZh
c09iamVjdFR5cGUgPyBldmFzT2JqZWN0VHlwZSA6ICIobnVsbCkiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChFSU5BX1VOTElLRUxZKHNtYXJ0Q2xhc3MtPmRhdGEg
IT0gRXdrVmlldzo6c21hcnRDbGFzc05hbWUpKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVw
ICglcykgaXMgbm90IG9mIGFuIGV3a192aWV3IChuZWVkICVwLCBnb3QgJXApISIsIGV2YXNPYmpl
Y3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwpIiwKKyAgICAgICAg
ICAgIEV3a1ZpZXc6OnNtYXJ0Q2xhc3NOYW1lLCBzbWFydENsYXNzLT5kYXRhKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitjb25zdCBFdmFz
X09iamVjdCogRXdrVmlldzo6dmlld09iamVjdEZyb21QYWdlKFdLUGFnZVJlZiBwYWdlKQorewor
ICAgIEFTU0VSVChwYWdlKTsKKyAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCk7
Cit9CisKK2lubGluZSBFd2tfVmlld19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBzbWFydERhdGEobV92aWV3T2JqZWN0KTsKK30KKworRXdrX1Zp
ZXdfU21hcnRfRGF0YSogRXdrVmlldzo6c21hcnREYXRhKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0
KQoreworICAgIEFTU0VSVChldmFzT2JqZWN0KTsKKworICAgIGlmICghRXdrVmlldzo6aXNWaWV3
T2JqZWN0KGV2YXNPYmplY3QpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQo
ZXZhc09iamVjdCkpOwogfQogCiAvKioKQEAgLTUxMSwxOCArNzU0LDE4IEBAIHZvaWQgRXdrVmll
dzo6c2V0SW1hZ2VEYXRhKHZvaWQqIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIElu
dFNpemUgRXdrVmlldzo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0g
ICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG1fZXZhc09iamVjdCwgMCwgMCwgJndpZHRoLCAm
aGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobV92aWV3T2JqZWN0LCAwLCAw
LCAmd2lkdGgsICZoZWlnaHQpOwogICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwog
fQogCiBib29sIEV3a1ZpZXc6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2YXNf
b2JqZWN0X2ZvY3VzX2dldChtX2V2YXNPYmplY3QpOworICAgIHJldHVybiBldmFzX29iamVjdF9m
b2N1c19nZXQobV92aWV3T2JqZWN0KTsKIH0KIAogYm9vbCBFd2tWaWV3Ojppc1Zpc2libGUoKSBj
b25zdAogewotICAgIHJldHVybiBldmFzX29iamVjdF92aXNpYmxlX2dldChtX2V2YXNPYmplY3Qp
OworICAgIHJldHVybiBldmFzX29iamVjdF92aXNpYmxlX2dldChtX3ZpZXdPYmplY3QpOwogfQog
CiBjb25zdCBjaGFyKiBFd2tWaWV3Ojp0aXRsZSgpIGNvbnN0CkBAIC01NzcsMTQgKzgyMCwxMyBA
QCB2b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCiAKICAg
ICBtX21vdXNlRXZlbnRzRW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgaWYgKGVuYWJsZWQpIHsKLSAg
ICAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICAgICAgZXZh
c19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19N
T1VTRV9ET1dOLCBvbk1vdXNlRG93biwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9j
YWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX1VQLCBvbk1vdXNl
VXAsIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09i
amVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSwgc2QpOworICAgICAg
ICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46OnN1YnNjcmli
ZShtX3ZpZXdPYmplY3QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJB
Q0tfTU9VU0VfVVA+OjpzdWJzY3JpYmUobV92aWV3T2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01PVkU+OjpzdWJzY3JpYmUobV92aWV3T2Jq
ZWN0KTsKICAgICB9IGVsc2UgewotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19k
ZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uTW91c2VEb3duKTsK
LSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZB
U19DQUxMQkFDS19NT1VTRV9VUCwgb25Nb3VzZVVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBv
bk1vdXNlTW92ZSk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19N
T1VTRV9ET1dOPjo6dW5zdWJzY3JpYmUobV92aWV3T2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX1VQPjo6dW5zdWJzY3JpYmUobV92aWV3T2Jq
ZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01P
VkU+Ojp1bnN1YnNjcmliZShtX3ZpZXdPYmplY3QpOwogICAgIH0KIH0KIApAQCAtNjAzLDE5ICs4
NDUsMTkgQEAgdm9pZCBFd2tWaWV3OjpzZXRUb3VjaEV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVk
KQogICAgICAgICAvLyBzdXBwb3J0cyB0aGUgdG91Y2ggZXZlbnRzLgogICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3Nzg1IGZvciBkZXRhaWxz
LgogICAgICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExC
QUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9u
VG91Y2hVcCwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9l
dmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uVG91Y2hNb3ZlLCBzZCk7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNf
Q0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3VjaERvd24sIHNkKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9V
UCwgb25Ub3VjaFVwLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Fk
ZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgb25Ub3VjaE1vdmUsIHNk
KTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fdmlld09iamVjdCwg
RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvblRvdWNoRG93biwgc2QpOworICAgICAgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92aWV3T2JqZWN0LCBFVkFTX0NBTExCQUNLX01P
VVNFX1VQLCBvblRvdWNoVXAsIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJh
Y2tfYWRkKG1fdmlld09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvblRvdWNoTW92
ZSwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92aWV3T2Jq
ZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7CisgICAgICAg
IGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXdPYmplY3QsIEVWQVNfQ0FMTEJB
Q0tfTVVMVElfVVAsIG9uVG91Y2hVcCwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9j
YWxsYmFja19hZGQobV92aWV3T2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX01PVkUsIG9uVG91
Y2hNb3ZlLCBzZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2Fs
bGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvblRvdWNo
RG93bik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmpl
Y3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uVG91Y2hVcCk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0Vf
TU9WRSwgb25Ub3VjaE1vdmUpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19k
ZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duKTsK
LSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZB
U19DQUxMQkFDS19NVUxUSV9VUCwgb25Ub3VjaFVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBv
blRvdWNoTW92ZSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX3Zp
ZXdPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwgb25Ub3VjaERvd24pOworICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3T2JqZWN0LCBFVkFTX0NBTExC
QUNLX01PVVNFX1VQLCBvblRvdWNoVXApOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxs
YmFja19kZWwobV92aWV3T2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uVG91Y2hN
b3ZlKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlld09iamVj
dCwgRVZBU19DQUxMQkFDS19NVUxUSV9ET1dOLCBvblRvdWNoRG93bik7CisgICAgICAgIGV2YXNf
b2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX3ZpZXdPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVM
VElfVVAsIG9uVG91Y2hVcCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Rl
bChtX3ZpZXdPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgb25Ub3VjaE1vdmUpOwog
ICAgIH0KIH0KICNlbmRpZgpAQCAtNjQ0LDcgKzg4Niw3IEBAIGJvb2wgRXdrVmlldzo6Y3JlYXRl
R0xTdXJmYWNlKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmICghbV9ldmFzR0wpIHsKLSAgICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KG1fZXZhc09iamVjdCk7CisgICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVj
dF9ldmFzX2dldChtX3ZpZXdPYmplY3QpOwogICAgICAgICBtX2V2YXNHTCA9IGFkb3B0UHRyKGV2
YXNfZ2xfbmV3KGV2YXMpKTsKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewogICAgICAgICAgICAg
V0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUg
bW9kZS4iKTsKQEAgLTk1MCwzMSArMTE5MiwyMzIgQEAgdm9pZCBFd2tWaWV3OjpjbG9zZSgpCiAg
ICAgc2QtPmFwaS0+d2luZG93X2Nsb3NlKHNkKTsKIH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNl
RG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit2
b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0QWRkKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQogewot
ICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19F
dmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKLSAgICBzZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBk
b3duRXZlbnQpOworICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rfc21h
cnRfc21hcnRfZ2V0KGV2YXNPYmplY3QpOworICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNt
YXJ0Q2xhc3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CisgICAgY29uc3QgRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21h
cnRfQ2xhc3MqPihzbWFydENsYXNzKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKworICAgIGlmICghc21hcnRE
YXRhKSB7CisgICAgICAgIC8vIEFsbG9jYXRpbmcgd2l0aCAnY2FsbG9jJyBhcyB3aWxsIGJlIGRl
bGV0ZWQgd2l0aCAnZnJlZScKKyAgICAgICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsK
KyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXZhc09iamVjdCwgc21hcnREYXRh
KTsKKyAgICB9CisKKyAgICBzbWFydERhdGEtPnNlbGYgPSBldmFzT2JqZWN0OworICAgIHNtYXJ0
RGF0YS0+YXBpID0gYXBpOworCisgICAgcGFyZW50U21hcnRDbGFzcy5hZGQoZXZhc09iamVjdCk7
CisKKyAgICBzbWFydERhdGEtPnByaXYgPSAwOworCisgICAgLy8gQ3JlYXRlIGV2YXNfb2JqZWN0
X2ltYWdlIHRvIGRyYXcgd2ViIGNvbnRlbnRzLgorICAgIHNtYXJ0RGF0YS0+aW1hZ2UgPSBldmFz
X29iamVjdF9pbWFnZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmltYWdlLCBmYWxzZSk7CisgICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZmlsbGVkX3NldChzbWFydERhdGEtPmltYWdlLCB0cnVlKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0YS0+aW1hZ2UsIGV2YXNPYmplY3QpOworICAg
IGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7CisKKyAgICBFd2tWaWV3RXZlbnRI
YW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7Cisg
ICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVD46OnN1YnNjcmli
ZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9V
U0VfV0hFRUw+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxl
cjxFVkFTX0NBTExCQUNLX0tFWV9ET1dOPjo6c3Vic2NyaWJlKGV2YXNPYmplY3QpOworICAgIEV3
a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlfVVA+OjpzdWJzY3JpYmUoZXZhc09i
amVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX1NIT1c+OjpzdWJz
Y3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNL
X0hJREU+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CiB9CiAKLXZvaWQgRXdrVmlldzo6b25Nb3Vz
ZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3Zv
aWQgRXdrVmlldzo6b25FdmFzU21hcnREZWxldGUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCiB7
Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfTW91c2VfVXAqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGktPm1vdXNlX3VwKTsKLSAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgdXBFdmVudCk7
CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRh
KGV2YXNPYmplY3QpOworICAgIGlmIChzbWFydERhdGEpIHsKKyAgICAgICAgQVNTRVJUKHNtYXJ0
RGF0YS0+cHJpdik7IC8vIHNtYXJ0RGF0YS0+cHJpdiBpcyBFd2tWaWV3IGluc3RhbmNlIHRvIGRl
bGV0ZS4KKyAgICAgICAgZGVsZXRlIHNtYXJ0RGF0YS0+cHJpdjsKKyAgICB9CisKKyAgICBwYXJl
bnRTbWFydENsYXNzLmRlbChldmFzT2JqZWN0KTsKIH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNl
TW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit2
b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0UmVzaXplKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBF
dmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFdmFzX0V2ZW50X01v
dXNlX01vdmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+
KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxF
d2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91
c2VfbW92ZSk7Ci0gICAgc2QtPmFwaS0+bW91c2VfbW92ZShzZCwgbW92ZUV2ZW50KTsKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09i
amVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKworICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmltYWdlLCAw
LCAwLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gdHJ1
ZTsKKyAgICBzbWFydERhdGFDaGFuZ2VkKHNtYXJ0RGF0YSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6
b25FdmFzU21hcnRNb3ZlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBFdmFzX0Nvb3JkIC8qeCov
LCBFdmFzX0Nvb3JkIC8qeSovKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzbWFydERhdGEpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9u
ID0gdHJ1ZTsKKyAgICBzbWFydERhdGFDaGFuZ2VkKHNtYXJ0RGF0YSk7Cit9CisKK3ZvaWQgRXdr
Vmlldzo6b25FdmFzU21hcnRDYWxjdWxhdGUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7Cisg
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2
YXNPYmplY3QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CisK
KyAgICBFd2tWaWV3KiB2aWV3ID0gZnJvbVNtYXJ0RGF0YShzbWFydERhdGEpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHZpZXcpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFu
eSA9IGZhbHNlOworCisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChldmFzT2JqZWN0LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCk7CisKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uKSB7CisgICAgICAgIHNt
YXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IGZhbHNlOworICAgICAgICBzbWFydERhdGEtPnZp
ZXcueCA9IHg7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy55ID0geTsKKyAgICAgICAgZXZhc19v
YmplY3RfbW92ZShzbWFydERhdGEtPmltYWdlLCB4LCB5KTsKKyAgICB9CisKKyAgICBpZiAoc21h
cnREYXRhLT5jaGFuZ2VkLnNpemUpIHsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUg
PSBmYWxzZTsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LncgPSB3aWR0aDsKKyAgICAgICAgc21h
cnREYXRhLT52aWV3LmggPSBoZWlnaHQ7CisKKyAgICAgICAgaWYgKHZpZXctPnBhZ2UoKS0+ZHJh
d2luZ0FyZWEoKSkKKyAgICAgICAgICAgIHZpZXctPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+c2V0
U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBJbnRTaXplKCkpOworCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICB2aWV3LT5zZXROZWVkc1N1cmZhY2VSZXNpemUo
KTsKKyNlbmRpZgorI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICB2aWV3LT5w
YWdlQ2xpZW50KCktPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworI2VuZGlmCisgICAgfQorfQorCit2
b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0U2hvdyhFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sK
KyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEo
ZXZhc09iamVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsK
KworICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzbWFydERhdGEtPmJhc2UuY2xpcHBl
cikpCisgICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOwor
ICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7Cit9CisKK3ZvaWQgRXdrVmll
dzo6b25FdmFzU21hcnRIaWRlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEpOworCisgICAgZXZh
c19vYmplY3RfaGlkZShzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3Rf
aGlkZShzbWFydERhdGEtPmltYWdlKTsKK30KKwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydENv
bG9yU2V0KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBi
bHVlLCBpbnQgYWxwaGEpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
RXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNtYXJ0RGF0YSk7CisKKyAgICBFd2tWaWV3KiB2aWV3ID0gZnJvbVNtYXJ0RGF0YShz
bWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZpZXcpOworCisgICAg
Y2xhbXBSR0JBVmFsdWUoYWxwaGEpOworICAgIGNsYW1wUkdCQVZhbHVlKHJlZCwgYWxwaGEpOwor
ICAgIGNsYW1wUkdCQVZhbHVlKGdyZWVuLCBhbHBoYSk7CisgICAgY2xhbXBSR0JBVmFsdWUoYmx1
ZSwgYWxwaGEpOworCisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+
aW1hZ2UsIGFscGhhIDwgMjU1KTsKKyAgICB2aWV3LT5wYWdlKCktPnNldERyYXdzQmFja2dyb3Vu
ZChyZWQgfHwgZ3JlZW4gfHwgYmx1ZSk7CisgICAgdmlldy0+cGFnZSgpLT5zZXREcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZChhbHBoYSA8IDI1NSk7CisKKyAgICBwYXJlbnRTbWFydENsYXNzLmNv
bG9yX3NldChldmFzT2JqZWN0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK0VpbmFf
Qm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEZvY3VzSW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhKQoreworICAgIEV3a1ZpZXcqIHNlbGYgPSBFd2tWaWV3Ojpmcm9tU21hcnREYXRhKHNt
YXJ0RGF0YSk7CisgICAgQVNTRVJUKHNlbGYpOworCisgICAgc2VsZi0+cGFnZSgpLT52aWV3U3Rh
dGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpW
aWV3V2luZG93SXNBY3RpdmUpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdr
Vmlldzo6b25WaWV3U21hcnRGb2N1c091dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEp
Cit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1ZpZXc6OmZyb21TbWFydERhdGEoc21hcnREYXRh
KTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBzZWxmLT5wYWdlKCktPnZpZXdTdGF0ZURpZENo
YW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5k
b3dJc0FjdGl2ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3Ojpv
blZpZXdTbWFydE1vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQoreworICAgIEV3a1ZpZXcqIHNl
bGYgPSBFd2tWaWV3Ojpmcm9tU21hcnREYXRhKHNtYXJ0RGF0YSk7CisgICAgQVNTRVJUKHNlbGYp
OworCisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZl
bnQod2hlZWxFdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9y
bVRvU2NyZWVuKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6
Om9uVmlld1NtYXJ0TW91c2VEb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29u
c3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpCit7CisgICAgRXdrVmlldyogc2Vs
ZiA9IEV3a1ZpZXc6OmZyb21TbWFydERhdGEoc21hcnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7
CisKKyAgICBzZWxmLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVu
dChkb3duRXZlbnQsIHNlbGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1U
b1NjcmVlbigpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3Ojpv
blZpZXdTbWFydE1vdXNlVXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBF
dmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50KQoreworICAgIEV3a1ZpZXcqIHNlbGYgPSBFd2tW
aWV3Ojpmcm9tU21hcnREYXRhKHNtYXJ0RGF0YSk7CisgICAgQVNTRVJUKHNlbGYpOworCisgICAg
c2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQodXBFdmVu
dCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkp
KTsKKworICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gc2Vs
Zi0+aW5wdXRNZXRob2RDb250ZXh0KCk7CisgICAgaWYgKGlucHV0TWV0aG9kQ29udGV4dCkKKyAg
ICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVNb3VzZVVwRXZlbnQodXBFdmVudCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91
c2VNb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9N
b3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1ZpZXc6OmZy
b21TbWFydERhdGEoc21hcnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBzZWxmLT5w
YWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChtb3ZlRXZlbnQsIHNl
bGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEtleURv
d24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9E
b3duKiBkb3duRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1ZpZXc6OmZyb21TbWFy
dERhdGEoc21hcnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBib29sIGlzRmlsdGVy
ZWQgPSBmYWxzZTsKKyAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4
dCA9IHNlbGYtPmlucHV0TWV0aG9kQ29udGV4dCgpOworICAgIGlmIChpbnB1dE1ldGhvZENvbnRl
eHQpCisgICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxlS2V5RG93bkV2ZW50KGRvd25F
dmVudCwgJmlzRmlsdGVyZWQpOworCisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVLZXlib2FyZEV2
ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZG93bkV2ZW50LCBpc0ZpbHRlcmVkKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEtleVVwKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIHVw
RXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IEV3a1ZpZXc6OmZyb21TbWFydERhdGEoc21h
cnREYXRhKTsKKyAgICBBU1NFUlQoc2VsZik7CisKKyAgICBzZWxmLT5wYWdlKCktPmhhbmRsZUtl
eWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh1cEV2ZW50KSk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtOTk1LDcgKzE0MzgsNyBA
QCB2b2lkIEV3a1ZpZXc6OmZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZlbnRfVHlwZSB0eXBl
KQogICAgICAgICBwb2ludHMgPSBlaW5hX2xpc3RfYXBwZW5kKHBvaW50cywgcG9pbnQpOwogICAg
IH0KIAotICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQobV9ldmFzT2JqZWN0LCB0eXBlLCBw
b2ludHMsIGV2YXNfa2V5X21vZGlmaWVyX2dldChzZC0+YmFzZS5ldmFzKSk7CisgICAgZXdrX3Zp
ZXdfZmVlZF90b3VjaF9ldmVudChtX3ZpZXdPYmplY3QsIHR5cGUsIHBvaW50cywgZXZhc19rZXlf
bW9kaWZpZXJfZ2V0KHNkLT5iYXNlLmV2YXMpKTsKIAogICAgIHZvaWQqIGRhdGE7CiAgICAgRUlO
QV9MSVNUX0ZSRUUocG9pbnRzLCBkYXRhKQpAQCAtMTA1OSwzICsxNTAyLDYgQEAgUGFzc1JlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCiAgICAgcmV0dXJuIHNu
YXBzaG90LnJlbGVhc2UoKTsKICNlbmRpZgogfQorCitjb25zdCBjaGFyIEV3a1ZpZXc6OnNtYXJ0
Q2xhc3NOYW1lW10gPSAiRVdLMl9WaWV3IjsKK0V2YXNfU21hcnRfQ2xhc3MgRXdrVmlldzo6cGFy
ZW50U21hcnRDbGFzcyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IDM3YThkMWIuLjI1ZjgwNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTk1LDYgKzk1
LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiAj
ZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfRGF0YSBFd2tfVmlld19TbWFy
dF9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgRXdrX1ZpZXdfU21h
cnRfQ2xhc3M7CiAKIGNsYXNzIEV3a1ZpZXcgewogcHVibGljOgpAQCAtMTAzLDExICsxMDQsMjMg
QEAgcHVibGljOgogICAgICAgICBMZWdhY3lCZWhhdmlvciwKICAgICAgICAgRGVmYXVsdEJlaGF2
aW9yCiAgICAgfTsKLSAgICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3
a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBhZ2VH
cm91cCwgVmlld0JlaGF2aW9yKTsKLSAgICB+RXdrVmlldygpOwogCi0gICAgc3RhdGljIEV3a1Zp
ZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKLSAgICBFdmFzX09i
amVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIHN0YXRpYyBFdmFzX09i
amVjdCogY3JlYXRlVmlld09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQ
YXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3Ip
OworICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlVmlld09iamVjdChFdmFzKiBjYW52YXMs
IFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
UmVmID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9y
KTsKKyAgICBzdGF0aWMgRXZhc19PYmplY3QqIGNyZWF0ZVZpZXdPYmplY3QoRXZhcyogY2FudmFz
LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IDAsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJl
ZiA9IDAsIFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7
CisKKyAgICBzdGF0aWMgRXdrVmlldyogZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3Qq
KTsKKyAgICBzdGF0aWMgRXdrVmlldyogZnJvbVNtYXJ0RGF0YShjb25zdCBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEpOworCisgICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRl
cmZhY2UoRXdrX1ZpZXdfU21hcnRfQ2xhc3MmKTsKKworICAgIHN0YXRpYyBib29sIGlzVmlld09i
amVjdChjb25zdCBFdmFzX09iamVjdCogdmlld09iamVjdCk7CisgICAgc3RhdGljIGNvbnN0IEV2
YXNfT2JqZWN0KiB2aWV3T2JqZWN0RnJvbVBhZ2UoV0tQYWdlUmVmKTsKKworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworICAgIHN0YXRpYyBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEoRXZhc19PYmplY3QqIHZpZXdPYmplY3QpOworCisgICAgRXZhc19P
YmplY3QqIHZpZXdPYmplY3QoKSB7IHJldHVybiBtX3ZpZXdPYmplY3Q7IH0KIAogICAgIFdLUGFn
ZVJlZiB3a1BhZ2UoKTsKICAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fcGFnZVByb3h5LmdldCgpOyB9CkBAIC0xNDcsMTEgKzE2MCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcik7CiAgICAgdm9pZCBz
ZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXpl
KTsKIAotICAgIHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QgPSBXZWJD
b3JlOjpJbnRSZWN0KCkpOwotCi0gICAgc3RhdGljIHZvaWQgYWRkVG9QYWdlVmlld01hcChFd2tW
aWV3KiB2aWV3KTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdrVmll
dyogdmlldyk7Ci0gICAgc3RhdGljIGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3RnJvbVBhZ2VWaWV3
TWFwKGNvbnN0IFdLUGFnZVJlZik7CisgICAgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCA9IFdlYkNvcmU6OkludFJlY3QoKSk7ICAgCiAKICNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCiAgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKQEAgLTE5MSw3ICsyMDAsNyBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8RXdrVmlld0NhbGxiYWNrczo6Q2FsbGJhY2tUeXBlIGNh
bGxiYWNrVHlwZT4KICAgICBFd2tWaWV3Q2FsbGJhY2tzOjpDYWxsQmFjazxjYWxsYmFja1R5cGU+
IHNtYXJ0Q2FsbGJhY2soKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEV3a1ZpZXdDYWxs
YmFja3M6OkNhbGxCYWNrPGNhbGxiYWNrVHlwZT4obV9ldmFzT2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuIEV3a1ZpZXdDYWxsYmFja3M6OkNhbGxCYWNrPGNhbGxiYWNrVHlwZT4obV92aWV3T2JqZWN0
KTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW5mb3JtRGF0YWJhc2VRdW90YVJl
YWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBj
dXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2Fn
ZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UpOwpAQCAtMjE1LDcgKzIyNCwxMCBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgp
OwogCiBwcml2YXRlOgotICAgIGlubGluZSBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEo
KSBjb25zdDsKKyAgICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3T2JqZWN0LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBh
Z2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICAvLyBXaWxsIGJlIGRlbGV0ZWQgd2hlbiBFdmFz
IE9iamVjdCBpcyBkZWxldGVkLgorICAgIH5Fd2tWaWV3KCk7CisKICAgICB2b2lkIGRpc3BsYXlU
aW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPEV3a1ZpZXc+Kik7CiAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCkBAIC0yMjQsMTkgKzIzNiwzNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBp
bmZvcm1JY29uQ2hhbmdlKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBvbk1vdXNlRG93bih2b2lkKiBk
YXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOwotICAgIHN0YXRpYyB2
b2lkIG9uTW91c2VVcCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVu
dEluZm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CisgICAgLy8gRXZhc19TbWFydF9DbGFzcyBp
bnRlcmZhY2UuCisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnRBZGQoRXZhc19PYmplY3QqKTsK
KyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydERlbGV0ZShFdmFzX09iamVjdCopOworICAgIHN0
YXRpYyB2b2lkIG9uRXZhc1NtYXJ0TW92ZShFdmFzX09iamVjdCosIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5KTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydFJlc2l6ZShFdmFzX09iamVj
dCosIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KTsKKyAgICBzdGF0aWMgdm9p
ZCBvbkV2YXNTbWFydFNob3coRXZhc19PYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNT
bWFydEhpZGUoRXZhc19PYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydENvbG9y
U2V0KEV2YXNfT2JqZWN0KiwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhh
KTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydENhbGN1bGF0ZShFdmFzX09iamVjdCopOwor
CisgICAgLy8gRXdrX1ZpZXdfU21hcnRfQ2xhc3MgaW50ZXJmYWNlLgorICAgIHN0YXRpYyBFaW5h
X0Jvb2wgb25WaWV3U21hcnRGb2N1c0luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSk7
CisgICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydEZvY3VzT3V0KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydE1vdXNl
V2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01v
dXNlX1doZWVsKiB3aGVlbEV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0
TW91c2VEb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVu
dF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21h
cnRNb3VzZVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVu
dF9Nb3VzZV9VcCogdXBFdmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydE1v
dXNlTW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRf
TW91c2VfTW92ZSogbW92ZUV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0
S2V5RG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRf
S2V5X0Rvd24qIGRvd25FdmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydEtl
eVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlf
VXAqIHVwRXZlbnQpOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2b2lkIGZlZWRU
b3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZlbnRfVHlwZSB0eXBlKTsKLSAgICBzdGF0aWMgdm9pZCBv
blRvdWNoRG93bih2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9u
VG91Y2hVcCh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0
KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91
Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3Vj
aERvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsK
KyAgICBzdGF0aWMgdm9pZCBvblRvdWNoVXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0
Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBvblRvdWNoTW92ZSh2b2lkKiBk
YXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOwogI2VuZGlmCiAgICAg
c3RhdGljIHZvaWQgb25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBl
dmVudEluZm8pOwogCitwcml2YXRlOgogICAgIC8vIE5vdGUsIGluaXRpYWxpemF0aW9uIG9yZGVy
IG1hdHRlcnMuCi0gICAgRXZhc19PYmplY3QqIG1fZXZhc09iamVjdDsKKyAgICBFdmFzX09iamVj
dCogbV92aWV3T2JqZWN0OwogICAgIFJlZlB0cjxFd2tDb250ZXh0PiBtX2NvbnRleHQ7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIE93blB0cjxFdmFzX0dMPiBtX2V2YXNH
TDsKQEAgLTI4MSw2ICszMTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBtX2lzSGFy
ZHdhcmVBY2NlbGVyYXRlZDsKICAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3JvdW5kOworCisgICAg
c3RhdGljIGNvbnN0IGNoYXIgc21hcnRDbGFzc05hbWVbXTsKKyAgICBzdGF0aWMgRXZhc19TbWFy
dF9DbGFzcyBwYXJlbnRTbWFydENsYXNzOwogfTsKIAogI2VuZGlmIC8vIEV3a1ZpZXdfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDcyYTZh
ZmEuLmJiMGIxMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKQEAgLTI1LDkgKzI1LDYgQEAKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAj
aW5jbHVkZSAiRm9ybUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVm
bC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJOYXRp
dmVXZWJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2lu
Y2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRDbGllbnRFZmwuaCIK
ICNpbmNsdWRlICJQYWdlUG9saWN5Q2xpZW50RWZsLmgiCkBAIC01MSw3ICs0OCw2IEBACiAjaW5j
bHVkZSAiZXdrX2ludGVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKICNp
bmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZh
dGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2VH
cm91cC5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtNjksNDgyICs2NSwzMSBA
QAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1z
dGF0aWMgY29uc3QgY2hhciBFV0tfVklFV19UWVBFX1NUUltdID0gIkVXSzJfVmlldyI7Ci0KLSNk
ZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhld2tWaWV3LCByZXN1bHQpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgYm9vbCByZXN1bHQgPSB0cnVlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFld2tWaWV3KSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5B
X0xPR19DUklUKCJudWxsIGlzIG5vdCBhIGV3a192aWV3Iik7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBl
ID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrVmlldyk7ICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgY29uc3QgRXZhc19TbWFydCogX3RtcF9zID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0
KGV3a1ZpZXcpOyAgICAgICBcCi0gICAgICAgIGlmIChFSU5BX1VOTElLRUxZKCFfdG1wX3MpKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
RUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2Jq
ZWN0ISIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIGV3
a1ZpZXcsIF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBf
dG1wX3NjID0gZXZhc19zbWFydF9jbGFzc19nZXQoX3RtcF9zKTsgICAgICAgIFwKLSAgICAgICAg
aWYgKEVJTkFfVU5MSUtFTFkoIV90bXBfc2MpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5
cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIGlmIChFSU5BX1VOTElLRUxZKF90bXBfc2MtPmRhdGEgIT0gRVdLX1ZJRVdfVFlQRV9TVFIp
KSB7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a192aWV3IChuZWVkICVwLCBnb3QgJXApISIs
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIGV3a1ZpZXcsIF90bXBfb3R5cGUgPyBfdG1w
X290eXBlIDogIihudWxsKSIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBF
V0tfVklFV19UWVBFX1NUUiwgX3RtcF9zYy0+ZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0
RGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJRVdf
VFlQRV9DSEVDSyhld2tWaWV3LCBfdG1wX3Jlc3VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IDA7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoX3RtcF9yZXN1bHQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHNtYXJ0RGF0YSA9IChFd2tfVmlld19TbWFydF9EYXRhKilldmFzX29iamVj
dF9zbWFydF9kYXRhX2dldChld2tWaWV3KQotCi0jZGVmaW5lIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAuLi4pICAgICAgICAgICAgICAgICAgICAgXAotICAg
IEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
ICghc21hcnREYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gc21hcnQgZGF0YSBm
b3Igb2JqZWN0ICVwICglcykiLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ICAgIGV3a1ZpZXcsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcpKTsgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JF
VFVSTihzbWFydERhdGEsIGltcGwsIC4uLikgICAgICAgICAgICAgICAgXAotICAgIGlmICghc21h
cnREYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgRUlOQV9MT0dfQ1JJVCgic21hcnQgZGF0YSBpcyBudWxsIik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBfX1ZB
X0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tWaWV3KiBpbXBsID0gc21hcnRE
YXRhLT5wcml2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIWltcGwpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIEVJTkFfTE9HX0NSSVQoIm5vIHByaXZhdGUgZGF0YSBmb3Igb2JqZWN0ICVwICglcykiLCAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxmLCBldmFzX29i
amVjdF90eXBlX2dldChzbWFydERhdGEtPnNlbGYpKTsgICAgICAgXAotICAgICAgICAgICAgcmV0
dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQogI2Rl
ZmluZSBFV0tfVklFV19JTVBMX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgaW1wbCwgLi4uKSAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tWaWV3KiBpbXBsID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRXdrVmll
dyogaW1wbCA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGV3a1ZpZXcpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIF9fVkFfQVJHU19fKTsgICAgICAg
ICAgICBcCi0gICAgICAgIGltcGwgPSBzbWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIWltcGwpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoIm5vIHByaXZhdGUgZGF0YSBmb3Igb2JqZWN0ICVw
ICglcykiLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxm
LCBldmFzX29iamVjdF90eXBlX2dldChzbWFydERhdGEtPnNlbGYpKTsgICAgICAgXAorICAgICAg
ICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAiLCBld2tW
aWV3KTsgICAgICAgICAgIFwKICAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLS8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZv
ciBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0LgotdHlwZWRlZiBzdHJ1Y3QgRXdrX1BhZ2VfQ29u
dGVudHNfQ29udGV4dCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0OwotCi0vKgotICogQGJyaWVm
IFN0cnVjdHVyZSBjb250YWluaW5nIHBhZ2UgY29udGVudHMgY29udGV4dCB1c2VkIGZvciBld2tf
dmlld19wYWdlX2NvbnRlbnRzX2dldCgpIEFQSS4KLSAqLwotc3RydWN0IEV3a19QYWdlX0NvbnRl
bnRzX0NvbnRleHQgewotICAgIEV3a19QYWdlX0NvbnRlbnRzX1R5cGUgdHlwZTsKLSAgICBFd2tf
UGFnZV9Db250ZW50c19DYiBjYWxsYmFjazsKLX07Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9jaGFuZ2VkKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBpZiAo
c21hcnREYXRhLT5jaGFuZ2VkLmFueSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNtYXJ0RGF0YS0+
Y2hhbmdlZC5hbnkgPSB0cnVlOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQoc21hcnRE
YXRhLT5zZWxmKTsKLX0KLQotLy8gRGVmYXVsdCBFdmVudCBIYW5kbGluZy4KLXN0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRh
LCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShX
ZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0Fj
dGl2ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X2ZvY3VzX291dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAg
RVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2Up
OwotCi0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV93
aGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfV2hlZWwqIHdoZWVsRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5k
bGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQod2hlZWxFdmVudCwgaW1wbC0+dHJhbnNm
b3JtRnJvbVNjZW5lKCksIGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93bihF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93
biogZG93bkV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihz
bWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlTW91c2VF
dmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGRvd25FdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNj
ZW5lKCksIGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfdXAoRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50KQot
ewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGws
IGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJN
b3VzZUV2ZW50KHVwRXZlbnQsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFu
c2Zvcm1Ub1NjcmVlbigpKSk7Ci0KLSAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0
aG9kQ29udGV4dCA9IGltcGwtPmlucHV0TWV0aG9kQ29udGV4dCgpOwotICAgIGlmIChpbnB1dE1l
dGhvZENvbnRleHQpCi0gICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxlTW91c2VVcEV2
ZW50KHVwRXZlbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3NtYXJ0X21vdXNlX21vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCkKLXsKLSAgICBFV0tfVklF
V19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAg
ICBpbXBsLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChtb3Zl
RXZlbnQsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1NjcmVl
bigpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X2tleV9kb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZh
c19FdmVudF9LZXlfRG93biogZG93bkV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZ
X1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGJvb2wgaXNGaWx0
ZXJlZCA9IGZhbHNlOwotICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250
ZXh0ID0gaW1wbC0+aW5wdXRNZXRob2RDb250ZXh0KCk7Ci0gICAgaWYgKGlucHV0TWV0aG9kQ29u
dGV4dCkKLSAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVLZXlEb3duRXZlbnQoZG93
bkV2ZW50LCAmaXNGaWx0ZXJlZCk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZUtleWJvYXJk
RXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChkb3duRXZlbnQsIGlzRmlsdGVyZWQpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfa2V5
X3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlf
VXAqIHVwRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVLZXlib2Fy
ZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQodXBFdmVudCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLyBFdmVudCBIYW5kbGluZy4KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1
c19pbih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiAvKmV2ZW50SW5mbyov
KQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPmZvY3VzX2luKTsKLSAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4oc21hcnRE
YXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRh
LCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiAvKmV2ZW50SW5mbyovKQotewotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmZvY3Vz
X291dCk7Ci0gICAgc21hcnREYXRhLT5hcGktPmZvY3VzX291dChzbWFydERhdGEpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyosIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZl
bnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbCk7Ci0gICAgc21hcnREYXRhLT5hcGktPm1vdXNlX3do
ZWVsKHNtYXJ0RGF0YSwgd2hlZWxFdmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19v
bl9rZXlfZG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pCi17Ci0gICAgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8
RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24pOwotICAgIHNt
YXJ0RGF0YS0+YXBpLT5rZXlfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19vbl9rZXlfdXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0
Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50ID0g
c3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV91cCk7
Ci0gICAgc21hcnREYXRhLT5hcGktPmtleV91cChzbWFydERhdGEsIHVwRXZlbnQpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fc2hvdyh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiAvKmV2ZW50SW5mbyovKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBF
V0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsKTsKLSAgICBp
bXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2li
bGUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25faGlkZSh2b2lkKiBkYXRhLCBFdmFz
KiwgRXZhc19PYmplY3QqLCB2b2lkKiAvKmV2ZW50SW5mbyovKQotewotICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBp
bXBsKTsKLQotICAgIC8vIFRoaXMgY2FsbCBtYXkgbG9vayB3cm9uZywgYnV0IHdlIHJlYWxseSBu
ZWVkIHRvIHBhc3MgVmlld0lzVmlzaWJsZSBoZXJlLgotICAgIC8vIHZpZXdTdGF0ZURpZENoYW5n
ZSgpIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc2V0dGluZyB0aGUgdmlzaWJp
bGl0eSB0byBWaXNpYmxlIG9yIEhpZGRlbgotICAgIC8vIGRlcGVuZGluZyBvbiB3aGF0IFdlYlBh
Z2VQcm94eTo6aXNWaWV3VmlzaWJsZSgpIHJldHVybnMsIHRoaXMgc2ltcGx5IHRyaWdnZXJzIHRo
ZSBwcm9jZXNzLgotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQ
cm94eTo6Vmlld0lzVmlzaWJsZSk7Ci19Ci0KLXN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIGdfcGFy
ZW50U21hcnRDbGFzcyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotCi1zdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIGNvbnN0
IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcp
OwotICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNtYXJ0Q2xhc3MgPSBldmFzX3NtYXJ0X2Ns
YXNzX2dldChzbWFydCk7Ci0gICAgY29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqPihzbWFydENsYXNzKTsK
LSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIGlmICghc21h
cnREYXRhKSB7Ci0gICAgICAgIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAg
IGlmICghc21hcnREYXRhKSB7Ci0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJjb3VsZCBub3Qg
YWxsb2NhdGUgRXdrX1ZpZXdfU21hcnRfRGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7Ci0gICAgfQotCi0gICAgc21hcnREYXRhLT5zZWxmID0gZXdrVmlldzsKLSAgICBzbWFy
dERhdGEtPmFwaSA9IGFwaTsKLQotICAgIGdfcGFyZW50U21hcnRDbGFzcy5hZGQoZXdrVmlldyk7
Ci0KLSAgICBzbWFydERhdGEtPnByaXYgPSAwOwotCi0gICAgLy8gQ3JlYXRlIGV2YXNfb2JqZWN0
X2ltYWdlIHRvIGRyYXcgd2ViIGNvbnRlbnRzLgotICAgIHNtYXJ0RGF0YS0+aW1hZ2UgPSBldmFz
X29iamVjdF9pbWFnZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwotICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmltYWdlLCBmYWxzZSk7Ci0gICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZmlsbGVkX3NldChzbWFydERhdGEtPmltYWdlLCB0cnVlKTsKLSAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0YS0+aW1hZ2UsIGV3a1ZpZXcpOwotICAgIGV2
YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7Ci0KLSNkZWZpbmUgQ09OTkVDVChzLCBj
KSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdrVmlldywgcywgYywgc21hcnREYXRh
KQotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19JTiwgX2V3a192aWV3X29uX2ZvY3Vz
X2luKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VULCBfZXdrX3ZpZXdfb25f
Zm9jdXNfb3V0KTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9ld2tf
dmlld19vbl9tb3VzZV93aGVlbCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0tFWV9ET1dO
LCBfZXdrX3ZpZXdfb25fa2V5X2Rvd24pOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19LRVlf
VVAsIF9ld2tfdmlld19vbl9rZXlfdXApOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19TSE9X
LCBfZXdrX3ZpZXdfb25fc2hvdyk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0hJREUsIF9l
d2tfdmlld19vbl9oaWRlKTsKLSN1bmRlZiBDT05ORUNUCi19Ci0KLXN0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgaWYgKHNtYXJ0RGF0YSkKLSAgICAgICAgZGVs
ZXRlIHNtYXJ0RGF0YS0+cHJpdjsKLQotICAgIGdfcGFyZW50U21hcnRDbGFzcy5kZWwoZXdrVmll
dyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBldmFz
X29iamVjdF9pbWFnZV9zaXplX3NldChzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmltYWdlLCAwLCAwLCB3
aWR0aCwgaGVpZ2h0KTsKLQotICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gdHJ1ZTsKLSAg
ICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCAvKngq
LywgRXZhc19Db29yZCAvKnkqLykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0KLSAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSB0
cnVlOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotICAg
IEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwpOwotCi0g
ICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IGZhbHNlOwotCi0gICAgRXZhc19Db29yZCB4LCB5
LCB3aWR0aCwgaGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAm
eCwgJnksICZ3aWR0aCwgJmhlaWdodCk7Ci0KLSAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBv
c2l0aW9uKSB7Ci0gICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IGZhbHNlOwot
ICAgICAgICBzbWFydERhdGEtPnZpZXcueCA9IHg7Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy55
ID0geTsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERhdGEtPmltYWdlLCB4LCB5KTsK
LSAgICB9Ci0KLSAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnNpemUpIHsKLSAgICAgICAgc21h
cnREYXRhLT5jaGFuZ2VkLnNpemUgPSBmYWxzZTsKLSAgICAgICAgc21hcnREYXRhLT52aWV3Lncg
PSB3aWR0aDsKLSAgICAgICAgc21hcnREYXRhLT52aWV3LmggPSBoZWlnaHQ7Ci0KLSAgICAgICAg
aWYgKGltcGwtPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgICAgIGltcGwtPnBhZ2Uo
KS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBJbnRTaXpl
KCkpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBpbXBsLT5z
ZXROZWVkc1N1cmZhY2VSZXNpemUoKTsKLSNlbmRpZgotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQotICAgICAgICBpbXBsLT5wYWdlQ2xpZW50KCktPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwot
I2VuZGlmCi0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfc2hvdyhFdmFz
X09iamVjdCogZXdrVmlldykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7Ci0KLSAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc21hcnRE
YXRhLT5iYXNlLmNsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+
YmFzZS5jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOwot
fQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlkZShFdmFzX09iamVjdCogZXdrVmll
dykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
Ci0KLSAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKTsKLSAgICBl
dmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+aW1hZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc21hcnRfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQg
Z3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09S
X1JFVFVSTihzbWFydERhdGEsIGltcGwpOwotCi0gICAgaWYgKGFscGhhIDwgMCkKLSAgICAgICAg
YWxwaGEgPSAwOwotICAgIGVsc2UgaWYgKGFscGhhID4gMjU1KQotICAgICAgICBhbHBoYSA9IDI1
NTsKLQotI2RlZmluZSBDSEVDS19DT0xPUihjb2xvciwgYWxwaGEpIFwKLSAgICBpZiAoY29sb3Ig
PCAwKSAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbG9yID0gMDsgICAgICAgICAgICAgICAg
XAotICAgIGVsc2UgaWYgKGNvbG9yID4gYWxwaGEpICAgICAgIFwKLSAgICAgICAgY29sb3IgPSBh
bHBoYTsKLSAgICBDSEVDS19DT0xPUihyZWQsIGFscGhhKTsKLSAgICBDSEVDS19DT0xPUihncmVl
biwgYWxwaGEpOwotICAgIENIRUNLX0NPTE9SKGJsdWUsIGFscGhhKTsKLSN1bmRlZiBDSEVDS19D
T0xPUgotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2Us
IGFscGhhIDwgMjU1KTsKLSAgICBpbXBsLT5wYWdlKCktPnNldERyYXdzQmFja2dyb3VuZChyZWQg
fHwgZ3JlZW4gfHwgYmx1ZSk7Ci0gICAgaW1wbC0+cGFnZSgpLT5zZXREcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZChhbHBoYSA8IDI1NSk7Ci0KLSAgICBnX3BhcmVudFNtYXJ0Q2xhc3MuY29sb3Jf
c2V0KGV3a1ZpZXcsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChhcGksIGZhbHNlKTsKIAotICAgIGlmIChh
cGktPnZlcnNpb24gIT0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTikgewotICAgICAgICBF
SU5BX0xPR19DUklUKCJFd2tfVmlld19TbWFydF9DbGFzcyAlcCBpcyB2ZXJzaW9uICVsdSB3aGls
ZSAlbHUgd2FzIGV4cGVjdGVkLiIsCi0gICAgICAgICAgICAgYXBpLCBhcGktPnZlcnNpb24sIEVX
S19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIWdfcGFyZW50U21hcnRDbGFzcy5hZGQpKQotICAg
ICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmZ19wYXJlbnRTbWFydENs
YXNzKTsKLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZhcGktPnNj
KTsKLQotICAgIC8vIFNldCBFdmFzX1NtYXJ0X0NsYXNzIGZ1bmN0aW9ucy4KLSAgICBhcGktPnNj
LmFkZCA9IF9ld2tfdmlld19zbWFydF9hZGQ7Ci0gICAgYXBpLT5zYy5kZWwgPSBfZXdrX3ZpZXdf
c21hcnRfZGVsOwotICAgIGFwaS0+c2MubW92ZSA9IF9ld2tfdmlld19zbWFydF9tb3ZlOwotICAg
IGFwaS0+c2MucmVzaXplID0gX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZTsKLSAgICBhcGktPnNjLnNo
b3cgPSBfZXdrX3ZpZXdfc21hcnRfc2hvdzsKLSAgICBhcGktPnNjLmhpZGUgPSBfZXdrX3ZpZXdf
c21hcnRfaGlkZTsKLSAgICBhcGktPnNjLmNvbG9yX3NldCA9IF9ld2tfdmlld19zbWFydF9jb2xv
cl9zZXQ7Ci0gICAgYXBpLT5zYy5jYWxjdWxhdGUgPSBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRl
OwotICAgIGFwaS0+c2MuZGF0YSA9IEVXS19WSUVXX1RZUEVfU1RSOyAvLyBJdCBpcyB1c2VkIGJ5
IHR5cGUgY2hlY2tpbmcuCi0KLSAgICAvLyBTZXQgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgZnVuY3Rp
b25zLgotICAgIGFwaS0+Zm9jdXNfaW4gPSBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW47Ci0gICAg
YXBpLT5mb2N1c19vdXQgPSBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0OwotICAgIGFwaS0+bW91
c2Vfd2hlZWwgPSBfZXdrX3ZpZXdfc21hcnRfbW91c2Vfd2hlZWw7Ci0gICAgYXBpLT5tb3VzZV9k
b3duID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX2Rvd247Ci0gICAgYXBpLT5tb3VzZV91cCA9IF9l
d2tfdmlld19zbWFydF9tb3VzZV91cDsKLSAgICBhcGktPm1vdXNlX21vdmUgPSBfZXdrX3ZpZXdf
c21hcnRfbW91c2VfbW92ZTsKLSAgICBhcGktPmtleV9kb3duID0gX2V3a192aWV3X3NtYXJ0X2tl
eV9kb3duOwotICAgIGFwaS0+a2V5X3VwID0gX2V3a192aWV3X3NtYXJ0X2tleV91cDsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIGNyZWF0ZUV3a1Zp
ZXdTbWFydENsYXNzKHZvaWQpCi17Ci0gICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGFw
aSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFd2tfVmlldyIpOwot
ICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VM
WSghc21hcnQpKSB7Ci0gICAgICAgIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldCgmYXBpKTsKLSAg
ICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gc21hcnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3
a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250
ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpW
aWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCi17Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoY29udGV4dCwgMCk7Ci0KLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IGV2
YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZXdrVmlldywgMCk7Ci0KLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc21hcnREYXRhKTsKLSAgICBpZiAoIXNtYXJ0RGF0YSkgewotICAgICAgICBldmFzX29iamVj
dF9kZWwoZXdrVmlldyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEFTU0VSVCgh
c21hcnREYXRhLT5wcml2KTsKLQotICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3VwIGlzIGNyZWF0
ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlzIDAsCi0g
ICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCi0gICAgc21hcnREYXRh
LT5wcml2ID0gbmV3IEV3a1ZpZXcoZXdrVmlldywgY29udGV4dCwgdG9JbXBsKHBhZ2VHcm91cFJl
ZiksIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gZXdrVmlldzsKLX0KLQotLyoqCi0gKiBAaW50ZXJu
YWwKLSAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRoIFdLVHlwZSBwYXJh
bWV0ZXJzLgotICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFz
LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBF
d2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1Zp
ZXcoY2FudmFzLCBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcygpLCBjb250ZXh0UmVmID8gRXdrQ29u
dGV4dDo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSkgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29u
dGV4dCgpLCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gRXdrVmlldzo6aW5p
dFNtYXJ0Q2xhc3NJbnRlcmZhY2UoKmFwaSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19z
bWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRleHQqIGNv
bnRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwgZXdrX29i
amVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgcmV0dXJuIEV3a1ZpZXc6OmNy
ZWF0ZVZpZXdPYmplY3QoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQq
Pihjb250ZXh0KSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0
KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGV3a192
aWV3X3NtYXJ0X2FkZChjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGV3a19vYmpl
Y3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIHJldHVybiBFd2tWaWV3OjpjcmVh
dGVWaWV3T2JqZWN0KGNhbnZhcywgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0
KSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQpAQCAtODM5
LDggKzM4NCw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFd2tfVG91Y2hfRXZlbnRfVHlwZSB0CiB7CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocG9pbnRzLCBmYWxz
ZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIGZh
bHNlKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBp
bXBsLCBmYWxzZSk7CisgICAgRVdLX1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIGlt
cGwsIGZhbHNlKTsKIAogICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVX
ZWJUb3VjaEV2ZW50KHR5cGUsIHBvaW50cywgbW9kaWZpZXJzLCBpbXBsLT50cmFuc2Zvcm1Gcm9t
U2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSwgZWNvcmVfdGltZV9nZXQoKSkpOwog
CkBAIC05NTcsNiArNTAxLDE3IEBAIHZvaWQgZXdrX3ZpZXdfZHJhd3NfcGFnZV9iYWNrZ3JvdW5k
X3NldChFdmFzX09iamVjdCAqZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZWQpCiAgICAgaW1wbC0+
c2V0RHJhd3NCYWNrZ3JvdW5kKGVuYWJsZWQpOwogfQogCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFt
ZSBmb3IgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dC4KK3R5cGVkZWYgc3RydWN0IEV3a19QYWdl
X0NvbnRlbnRzX0NvbnRleHQgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dDsKKworLyoKKyAqIEBi
cmllZiBTdHJ1Y3R1cmUgY29udGFpbmluZyBwYWdlIGNvbnRlbnRzIGNvbnRleHQgdXNlZCBmb3Ig
ZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKSBBUEkuCisgKi8KK3N0cnVjdCBFd2tfUGFnZV9D
b250ZW50c19Db250ZXh0IHsKKyAgICBFd2tfUGFnZV9Db250ZW50c19UeXBlIHR5cGU7CisgICAg
RXdrX1BhZ2VfQ29udGVudHNfQ2IgY2FsbGJhY2s7Cit9OworCiAvKioKICAqIEBpbnRlcm5hbAog
ICogQ2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBmb3IgZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQo
KS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3By
aXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiNGM5Ny4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgZXdrX3ZpZXdfcHJpdmF0ZV9oCi0jZGVm
aW5lIGV3a192aWV3X3ByaXZhdGVfaAotCi0jaW5jbHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUg
PEV2YXMuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgotCi1FdmFzX09iamVjdCogZXdr
X3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
LCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwotCi0jZW5kaWYgLy8gZXdrX3ZpZXdfcHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5
Q2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3Rv
cnlDbGllbnRFZmwuY3BwCmluZGV4IDI1OWU0MTIuLmFjMGQ3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3Bw
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZE5hdmln
YXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLQ29udGV4dFJlZiwgV0tQYWdlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJlZlB0cjxFd2tOYXZpZ2F0aW9uRGF0YT4gbmF2aWdhdGlvbkRhdGFFd2sgPSBF
d2tOYXZpZ2F0aW9uRGF0YTo6Y3JlYXRlKG5hdmlnYXRpb25EYXRhKTsKLSAgICBoaXN0b3J5Q2xp
ZW50LT5tX25hdmlnYXRlKEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIG5hdmln
YXRpb25EYXRhRXdrLmdldCgpLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0
b3J5Q2xpZW50LT5tX25hdmlnYXRlKEV3a1ZpZXc6OnZpZXdPYmplY3RGcm9tUGFnZShwYWdlKSwg
bmF2aWdhdGlvbkRhdGFFd2suZ2V0KCksIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQog
CiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Qo
V0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJl
ZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAg
LTY2LDcgKzY2LDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRT
dHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5n
IGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGll
bnQtPm1fY2xpZW50UmVkaXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwg
c291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91
c2VyRGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC0+bV9jbGllbnRSZWRpcmVjdChFd2tWaWV3Ojp2
aWV3T2JqZWN0RnJvbVBhZ2UocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxT
dHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0
b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1Bh
Z2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwg
V0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTc5LDcgKzc5LDcgQEAgdm9p
ZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29u
dGV4dFJlZiwgV0tQYWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3Ry
aW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3Ry
aW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fc2VydmVyUmVkaXJl
Y3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBk
ZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlz
dG9yeUNsaWVudC0+bV9zZXJ2ZXJSZWRpcmVjdChFd2tWaWV3Ojp2aWV3T2JqZWN0RnJvbVBhZ2Uo
cGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlDbGll
bnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRV
cGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdS
ZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkVXBk
YXRlSGlzdG9yeVRpdGxlKFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UKICAgICBXS0VpbmFT
aGFyZWRTdHJpbmcgdGl0bGVTdHJpbmcodGl0bGUpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBz
dHJpbmdVUkwoVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRhdGVkKEV3a1Zp
ZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhp
c3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRh
dGVkKEV3a1ZpZXc6OnZpZXdPYmplY3RGcm9tUGFnZShwYWdlKSwgdGl0bGVTdHJpbmcsIHN0cmlu
Z1VSTCwgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3Rv
cnlDbGllbnRFZmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudEJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xp
ZW50QmFzZS5jcHAKaW5kZXggMmVmZGJkMC4uMzQ3YjgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBi
b29sIFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCiB2b2lkIFBhZ2VDbGllbnRCYXNl
Ojpwcm9jZXNzRGlkQ3Jhc2goKQogewogICAgIC8vIENoZWNrIGlmIGxvYWRpbmcgd2FzIG9uZ29p
bmcsIHdoZW4gd2ViIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBkb3VibGUgbG9hZFByb2dyZXNzID0g
ZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQobV92aWV3LT52aWV3KCkpOworICAgIGRvdWJsZSBs
b2FkUHJvZ3Jlc3MgPSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX3ZpZXctPnZpZXdPYmpl
Y3QoKSk7CiAgICAgaWYgKGxvYWRQcm9ncmVzcyA+PSAwICYmIGxvYWRQcm9ncmVzcyA8IDEpIHsK
ICAgICAgICAgbG9hZFByb2dyZXNzID0gMTsKICAgICAgICAgbV92aWV3LT5zbWFydENhbGxiYWNr
PExvYWRQcm9ncmVzcz4oKS5jYWxsKCZsb2FkUHJvZ3Jlc3MpOwpAQCAtMTM0LDcgKzEzNCw3IEBA
IHZvaWQgUGFnZUNsaWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCgpCiAgICAgICAgIFdBUk4oIldB
Uk5JTkc6IFRoZSB3ZWIgcHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycuXG4iLCB1
cmwuZGF0YSgpKTsKIAogICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9yIHBhZ2UKLSAgICAgICAg
ZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZChtX3ZpZXctPnZpZXcoKSwgIlRoZSB3ZWIgcHJvY2Vz
cyBoYXMgY3Jhc2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKKyAgICAgICAgZXdrX3ZpZXdfaHRtbF9z
dHJpbmdfbG9hZChtX3ZpZXctPnZpZXdPYmplY3QoKSwgIlRoZSB3ZWIgcHJvY2VzcyBoYXMgY3Jh
c2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggNzQ5NTExMC4uNzU3
ZGI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENs
aWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENs
aWVudEVmbC5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpk
aWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZQog
ICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3
KCk7CiAgICAgQVNTRVJUKHZpZXcpOwogCi0gICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0
ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZpZXcoKSk7CisgICAgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0
KHZpZXctPnZpZXdPYmplY3QoKSk7CiAgICAgQVNTRVJUKGxpc3QpOwogICAgIGxpc3QtPnVwZGF0
ZShhZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAppbmRleCAxZTAwOGM0Li45OTczYjMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBA
IC05NCwxNyArOTQsMTcgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNsb3NlKFdLUGFnZVJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp0YWtlRm9jdXMo
V0tQYWdlUmVmLCBXS0ZvY3VzRGlyZWN0aW9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewog
ICAgIC8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uLgotICAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92
aWV3LT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlld09iamVjdCgpLCBmYWxzZSk7CiB9CiAK
IHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpmb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiB7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNs
aWVudEluZm8pLT5tX3ZpZXctPnZpZXcoKSwgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNf
c2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnZpZXdPYmplY3QoKSwg
dHJ1ZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp1bmZvY3VzKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdl
VUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBmYWxzZSk7CisgICAgZXZh
c19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXct
PnZpZXdPYmplY3QoKSwgZmFsc2UpOwogfQogCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2
YVNjcmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgYWxlcnRUZXh0LCBXS0ZyYW1lUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCA0NjJiMjZkLi4zYmJlYzRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclBy
b3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcApAQCAtMzAsOSArMzAsOSBAQAogCiAjaW5jbHVkZSAiRXdrVmlldy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZh
dGUuaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgot
I2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0VmbEluc3Bl
Y3RvclV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC04Miw2ICs4MiwxMSBAQCB2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpjcmVhdGVJbnNwZWN0b3JXaW5kb3coKQogCiAgICAgZXZhc19vYmplY3Rf
Zm9jdXNfc2V0KG1faW5zcGVjdG9yVmlldywgdHJ1ZSk7CiB9CisvLyBGSVhNRTogc2hvdWxkIGhh
dmUgdGhpcyBpbiBzb21lIGdlbmVyaWMgcGxhY2UKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBld2tDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQoreworICAgIHJl
dHVybiBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSkg
OiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpOworfQogCiBXZWJQYWdlUHJveHkqIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogewpAQCAtOTQsMTIg
Kzk5LDE2IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
SW5zcGVjdG9yUGFnZSgpCiAgICAgLy8gR3JhY2VmdWxseSBmYWxsIGJhY2sgdG8gc29mdHdhcmUg
aWYgZXZhc19nbCBlbmdpbmUgaXMgbm90IGF2YWlsYWJsZS4KICAgICBpZiAoIW1faW5zcGVjdG9y
V2luZG93KQogI2VuZGlmCi0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gZWNvcmVfZXZhc19u
ZXcoMCwgMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LCAwKTsK
KyAgICBtX2luc3BlY3RvcldpbmRvdyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIGluaXRpYWxX
aW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwgMCk7CiAgICAgaWYgKCFtX2luc3BlY3Rv
cldpbmRvdykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX2luc3BlY3RvclZpZXcgPSBld2tf
dmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIHRvQVBJKHBh
Z2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSks
IEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBFd2tWaWV3
OjpjcmVhdGVWaWV3T2JqZWN0KGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9B
UEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91
cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOworICAgIGlmICghbV9pbnNwZWN0b3JWaWV3
KQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBsID0g
RXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKKyAgICBBU1NFUlQoaW5z
cGVjdG9yVmlld0ltcGwpOwogICAgIGluc3BlY3RvclZpZXdJbXBsLT5zZXRUaGVtZVBhdGgoVEVT
VF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwogCiAgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5n
cyA9IGluc3BlY3RvclZpZXdJbXBsLT5zZXR0aW5ncygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwCmluZGV4IGEzMzI3MjQuLmM2OWM1YzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5j
cHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIEV2YXNfT2JqZWN0KiBX
ZWJQYWdlUHJveHk6OnZpZXdXaWRnZXQoKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdl
Q2xpZW50QmFzZSo+KG1fcGFnZUNsaWVudCktPnZpZXcoKS0+dmlldygpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQYWdlQ2xpZW50QmFzZSo+KG1fcGFnZUNsaWVudCktPnZpZXcoKS0+dmlld09i
amVjdCgpOwogfQogCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25z
dCBTdHJpbmcmIC8qYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ki8pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186042</attachid>
            <date>2013-02-01 07:23:01 -0800</date>
            <delta_ts>2013-02-01 08:29:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug108062</filename>
            <type>text/plain</type>
            <size>74442</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDRmNTdmODFmM2ViMTViMWIyMmI5ODYwMDU3YmI1NjZmZTQ3MjQzODQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDczZGU0MzMuLjcwZDhlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw5NiBAQAogMjAxMy0w
Mi0wMSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4K
IAorICAgICAgICBbRUZMXVtXSzJdIEVuY2Fwc3VsYXRlIEV3ayBWaWV3IGV2YXMgc21hcnQgb2Jq
ZWN0IGNvZGUgaW5zaWRlIEV3a1ZpZXcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBFd2sgVmlldyBpbXBsZW1lbnRhdGlvbiBpcyBlbmNh
cHN1bGF0ZWQgd2l0aGluIEV3a1ZpZXcgY2xhc3MuCisgICAgICAgIEJlc2lkZXMgbXVsdGlwbGUg
cmVmYWN0b3Jpbmcgb2YgRXdrIFZpZXcgZXZhcyBzbWFydCBvYmplY3QgY29kZSB3YXMgbWFkZS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgorICAg
ICAgICAoV0tWaWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChzbWFydERh
dGFDaGFuZ2VkKToKKyAgICAgICAgKGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UpOgorICAgICAg
ICAoRXdrVmlld0V2ZW50SGFuZGxlcik6CisgICAgICAgIChFd2tWaWV3RXZlbnRIYW5kbGVyOjpz
dWJzY3JpYmUpOgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcjo6dW5zdWJzY3JpYmUpOgor
ICAgICAgICAoOjpvbkV2ZW50KToKKyAgICAgICAgKEV3a1ZpZXc6OkV3a1ZpZXcpOgorICAgICAg
ICAoRXdrVmlldzo6fkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6Y3JlYXRlVmlld09iamVj
dCk6CisgICAgICAgIChFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVyZmFjZSk6CisgICAgICAg
IChFd2tWaWV3Ojp2aWV3T2JqZWN0RnJvbVBhZ2UpOgorICAgICAgICAoRXdrVmlldzo6c21hcnRE
YXRhKToKKyAgICAgICAgKEV3a1ZpZXc6OnNpemUpOgorICAgICAgICAoRXdrVmlldzo6aXNGb2N1
c2VkKToKKyAgICAgICAgKEV3a1ZpZXc6OmlzVmlzaWJsZSk6CisgICAgICAgIChFd2tWaWV3Ojpz
ZXRNb3VzZUV2ZW50c0VuYWJsZWQpOgorICAgICAgICAoRXdrVmlldzo6c2V0VG91Y2hFdmVudHNF
bmFibGVkKToKKyAgICAgICAgKEV3a1ZpZXc6OmNyZWF0ZUdMU3VyZmFjZSk6CisgICAgICAgIChF
d2tWaWV3OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0QWRk
KToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0RGVsZXRlKToKKyAgICAgICAgKEV3a1Zp
ZXc6Om9uRXZhc1NtYXJ0UmVzaXplKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0TW92
ZSk6CisgICAgICAgIChFd2tWaWV3OjpvbkV2YXNTbWFydENhbGN1bGF0ZSk6CisgICAgICAgIChF
d2tWaWV3OjpvbkV2YXNTbWFydFNob3cpOgorICAgICAgICAoRXdrVmlldzo6b25FdmFzU21hcnRI
aWRlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0Q29sb3JTZXQpOgorICAgICAgICAo
RXdrVmlldzo6b25WaWV3U21hcnRGb2N1c0luKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uVmlld1Nt
YXJ0Rm9jdXNPdXQpOgorICAgICAgICAoRXdrVmlldzo6b25WaWV3U21hcnRNb3VzZVdoZWVsKToK
KyAgICAgICAgKEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VEb3duKToKKyAgICAgICAgKEV3a1Zp
ZXc6Om9uVmlld1NtYXJ0TW91c2VVcCk6CisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydE1v
dXNlTW92ZSk6CisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydEtleURvd24pOgorICAgICAg
ICAoRXdrVmlldzo6b25WaWV3U21hcnRLZXlVcCk6CisgICAgICAgIChFd2tWaWV3OjpmZWVkVG91
Y2hFdmVudHMpOgorICAgICAgICAoRXdrVmlldzo6b25Ub3VjaERvd24pOgorICAgICAgICAoRXdr
Vmlldzo6b25Ub3VjaFVwKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uVG91Y2hNb3ZlKToKKyAgICAg
ICAgKHRvRXdrVmlldyk6CisgICAgICAgIChpc1ZpZXdPYmplY3QpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3a1ZpZXc6OnZpZXdPYmplY3QpOgor
ICAgICAgICAoRXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpzbWFydENhbGxiYWNrKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChld2tfdmll
d19zbWFydF9jbGFzc19zZXQpOgorICAgICAgICAoZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQpOgorICAgICAgICAoZXdrX3ZpZXdfZmVlZF90
b3VjaF9ldmVudCk6CisgICAgICAgIChFd2tfUGFnZV9Db250ZW50c19Db250ZXh0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtQ2xpZW50
UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlk
UGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dEhpc3RvcnlD
bGllbnRFZmw6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgICogVUlQcm9jZXNzL2Vm
bC9QYWdlQ2xpZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlOjpw
cm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRF
ZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbDo6ZGlkQ2hhbmdlQmFj
a0ZvcndhcmRMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dGFrZUZvY3VzKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpmb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6dW5mb2N1cyk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6dmlld1dpZGdldCk6CisKKzIwMTMtMDItMDEgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1p
a2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKICAgICAgICAgW0VGTF1bV0syXSBFd2tDb250
ZXh0IHNob3VsZCBiZSBiYXNlZCBvbiBDIFdLMiBBUEkKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzY2NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKaW5kZXggMzJiOWQ4Zi4uZTUzZjNkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjIsMzEg
KzIyLDMxIEBACiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0Lmgi
Ci0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X3By
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKLXsKLSAg
ICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdl
R3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKSk7Cit7ICAgCisgICAgcmV0dXJuIHRv
QVBJKEV3a1ZpZXc6OmNyZWF0ZVZpZXdPYmplY3QoY2FudmFzLCBjb250ZXh0UmVmID8gRXdrQ29u
dGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKSwg
cGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOwogfQogCiBXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4gdG9B
UEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3
a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikpOworICAgIHJldHVybiB0b0FQSShFd2tWaWV3OjpjcmVh
dGVWaWV3T2JqZWN0KGNhbnZhcywgY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250
ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6RGVmYXVsdEJlaGF2aW9yKSk7CiB9CiAKIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdL
Vmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZh
c09iamVjdCh0b0ltcGwodmlld1JlZikpOworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b0V3a1ZpZXco
dG9JbXBsKHZpZXdSZWYpKTsKIAogICAgIHJldHVybiB2aWV3LT53a1BhZ2UoKTsKIH0KIAogV0tJ
bWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKIHsKLSAgICBF
d2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsK
KyAgICBFd2tWaWV3KiB2aWV3ID0gdG9Fd2tWaWV3KHRvSW1wbCh2aWV3UmVmKSk7CiAKICAgICBy
ZXR1cm4gV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2Uodmlldy0+dGFrZVNuYXBzaG90KCku
Z2V0KCksIDAgLyogb3B0aW9ucyAqLyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDc5NjI2ZTYuLjg1YjMxZjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yNyw2ICsyNyw5IEBACiAj
aW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKICNp
bmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXli
b2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
Ik5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRMZWdh
Y3lJbXBsLmgiCkBAIC01NSw3ICs1OCw2IEBACiAjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdp
bl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKICNpbmNsdWRl
ICJld2tfdmlldy5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlICJl
d2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAj
aW5jbHVkZSA8RWNvcmVfWC5oPgpAQCAtNjQsNiArNjYsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxl
ci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoVklCUkFUSU9O
KQogI2luY2x1ZGUgIlZpYnJhdGlvbkNsaWVudEVmbC5oIgpAQCAtODEsMzcgKzg1LDE1MiBAQCB1
c2luZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RhdGljIGNvbnN0IGNoYXIgc21hcnRDbGFz
c05hbWVbXSA9ICJFV0syX1ZpZXciOwogc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6
ZSA9IDE2OwogCi10eXBlZGVmIEhhc2hNYXA8V0tQYWdlUmVmLCBFdmFzX09iamVjdCo+IFBhZ2VW
aWV3TWFwOworLy8gQXV4aWxpYXJ5IGZ1bmN0aW9ucy4KIAotc3RhdGljIGlubGluZSBQYWdlVmll
d01hcCYgcGFnZVZpZXdNYXAoKQorc3RhdGljIGlubGluZSB2b2lkIHNtYXJ0RGF0YUNoYW5nZWQo
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoUGFnZVZpZXdNYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7CisgICAgQVNTRVJUKHNt
YXJ0RGF0YSk7CisKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLmFueSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IHRydWU7CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2hhbmdlZChzbWFydERhdGEtPnNlbGYpOwogfQogCi12b2lkIEV3a1ZpZXc6OmFk
ZFRvUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykKK3N0YXRpYyBFdmFzX1NtYXJ0KiBkZWZhdWx0
U21hcnRDbGFzc0luc3RhbmNlKCkKIHsKLSAgICBQYWdlVmlld01hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IHBhZ2VWaWV3TWFwKCkuYWRkKHZpZXctPndrUGFnZSgpLCB2aWV3LT52aWV3KCkpOwotICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgc3RhdGljIEV3
a19WaWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9W
RVJTSU9OKCJFd2tfVmlldyIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7CisK
KyAgICBpZiAoIXNtYXJ0KSB7CisgICAgICAgIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJm
YWNlKGFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7
CisgICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OwogfQogCi12b2lkIEV3a1ZpZXc6OnJlbW92ZUZy
b21QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3KQorLy8gRXdrVmlld0V2ZW50SGFuZGxlciBpbXBs
ZW1lbnRhdGlvbi4KKwordGVtcGxhdGUgPEV2YXNfQ2FsbGJhY2tfVHlwZSBFdmVudFR5cGU+Citj
bGFzcyBFd2tWaWV3RXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzdWJz
Y3JpYmUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgeworICAgICAgICBldmFzX29iamVj
dF9ldmVudF9jYWxsYmFja19hZGQoZXZhc09iamVjdCwgRXZlbnRUeXBlLCBvbkV2ZW50LCBFd2tW
aWV3OjpzbWFydERhdGEoZXZhc09iamVjdCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVu
c3Vic2NyaWJlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIHsKKyAgICAgICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKGV2YXNPYmplY3QsIEV2ZW50VHlwZSwgb25FdmVudCk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgb25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZh
c19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOworfTsKKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdr
Vmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX0RPV04+OjpvbkV2ZW50KHZvaWQq
IGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBBU1NF
UlQocGFnZVZpZXdNYXAoKS5jb250YWlucyh2aWV3LT53a1BhZ2UoKSkpOwotICAgIHBhZ2VWaWV3
TWFwKCkucmVtb3ZlKHZpZXctPndrUGFnZSgpKTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24q
IGRvd25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2ZW50SW5m
byk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERh
dGEtPmFwaS0+bW91c2VfZG93bik7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX2Rvd24oc21h
cnREYXRhLCBkb3duRXZlbnQpOwogfQogCi1jb25zdCBFdmFzX09iamVjdCogRXdrVmlldzo6dmll
d0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYgcGFnZSkKK3RlbXBsYXRlIDw+Cit2b2lk
IEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9VUD46Om9uRXZlbnQodm9p
ZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEFT
U0VSVChwYWdlKTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nh
c3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfdXApOworICAg
IHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV91cChzbWFydERhdGEsIHVwRXZlbnQpOworfQogCi0gICAg
cmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmll
d0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01PVkU+OjpvbkV2ZW50KHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFdmFzX0V2
ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2Vf
TW92ZSo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfbW92ZSk7CisgICAgc21hcnREYXRhLT5hcGkt
Pm1vdXNlX21vdmUoc21hcnREYXRhLCBtb3ZlRXZlbnQpOwogfQogCit0ZW1wbGF0ZSA8Pgordm9p
ZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+OjpvbkV2ZW50KHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmZvY3VzX2luKTsK
KyAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4oc21hcnREYXRhKTsKK30KKwordGVtcGxhdGUg
PD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVD46Om9u
RXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9j
dXNfb3V0KTsKKyAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7Cit9CisK
K3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VT
RV9XSEVFTD46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCog
ZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQgPSBz
dGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9E
YXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3Vz
ZV93aGVlbCk7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKHNtYXJ0RGF0YSwgd2hl
ZWxFdmVudCk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZB
U19DQUxMQkFDS19LRVlfRE9XTj46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25F
dmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERh
dGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkt
PmtleV9kb3duKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3du
RXZlbnQpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNf
Q0FMTEJBQ0tfS0VZX1VQPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3Qq
LCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQgPSBz
dGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X3VwKTsK
KyAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7Cit9CisKK3Rl
bXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19TSE9XPjo6
b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7CisgICAgdG9Fd2tWaWV3KHNtYXJ0RGF0YSktPnBhZ2UoKS0+dmlld1N0
YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlzaWJsZSk7Cit9CisKK3RlbXBsYXRl
IDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19ISURFPjo6b25FdmVu
dCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHBhc3MgVmlld0lzVmlzaWJsZSBoZXJlLiB2
aWV3U3RhdGVEaWRDaGFuZ2UoKSBpdHNlbGYgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNl
dHRpbmcgdGhlIHZpc2liaWxpdHkgdG8gVmlzaWJsZSBvciBIaWRkZW4KKyAgICAvLyBkZXBlbmRp
bmcgb24gd2hhdCBXZWJQYWdlUHJveHk6OmlzVmlld1Zpc2libGUoKSByZXR1cm5zLCB0aGlzIHNp
bXBseSB0cmlnZ2VycyB0aGUgcHJvY2Vzcy4KKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFn
ZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKK30K
KworLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4KKwogRXdrVmlldzo6RXdrVmlldyhFdmFzX09i
amVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVm
UHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi0gICAg
OiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkKKyAgICA6IG1fdmlld09iamVjdChldmFzT2JqZWN0
KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKQEAgLTE0Miw3ICsyNjEs
NyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogICAgICwgbV9pc0hhcmR3YXJlQWNjZWxlcmF0
ZWQodHJ1ZSkKICAgICAsIG1fc2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNlKQogewotICAgIEFTU0VS
VChtX2V2YXNPYmplY3QpOworICAgIEFTU0VSVChtX3ZpZXdPYmplY3QpOwogICAgIEFTU0VSVCht
X2NvbnRleHQpOwogICAgIEFTU0VSVChtX3BhZ2VQcm94eSk7CiAKQEAgLTE2Myw3ICsyODIsNyBA
QCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3
a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2Vi
UGFnZSgpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5m
dWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1fZXZhc09iamVjdCk7CisgICAgbV9wYWdl
UHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcobV92aWV3T2JqZWN0KTsKICAg
ICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZ1bGxTY3JlZW5F
bmFibGVkKHRydWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKQEAgLTE4MCw4ICsy
OTksNiBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogICAgIEFTU0VSVChpY29uRGF0YWJhc2Up
OwogCiAgICAgaWNvbkRhdGFiYXNlLT53YXRjaENoYW5nZXMoSWNvbkNoYW5nZUNhbGxiYWNrRGF0
YShFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkLCB0aGlzKSk7Ci0KLSAgICBFd2tWaWV3OjphZGRU
b1BhZ2VWaWV3TWFwKHRoaXMpOwogfQogCiBFd2tWaWV3Ojp+RXdrVmlldygpCkBAIC0xOTMsMjIg
KzMxMCw5MiBAQCBFd2tWaWV3Ojp+RXdrVmlldygpCiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7
CiAKICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3a1ZpZXc6Om9uRmF2aWNvbkNo
YW5nZWQpOworfQorCitFdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlVmlld09iamVjdChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRl
eHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydCwgMCk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGNvbnRleHQsIDApOwogCi0gICAgRXdrVmlldzo6cmVtb3ZlRnJv
bVBhZ2VWaWV3TWFwKHRoaXMpOworICAgIEV2YXNfT2JqZWN0KiB2aWV3T2JqZWN0ID0gZXZhc19v
YmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh2aWV3T2JqZWN0LCAwKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YSh2aWV3T2JqZWN0KTsKKyAgICBpZiAoIXNtYXJ0
RGF0YSkgeworICAgICAgICBldmFzX29iamVjdF9kZWwodmlld09iamVjdCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIEFTU0VSVCghc21hcnREYXRhLT5wcml2KTsKKworICAgIC8v
IERlZmF1bHQgV2ViUGFnZUdyb3VwIGlzIGNyZWF0ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3Rv
ciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlzIDAsCisgICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8g
Y3JlYXRlIGl0IGhlcmUuCisgICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcodmlld09i
amVjdCwgY29udGV4dCwgdG9JbXBsKHBhZ2VHcm91cFJlZiksIGJlaGF2aW9yKTsKKyAgICByZXR1
cm4gdmlld09iamVjdDsKIH0KIAotRXdrX1ZpZXdfU21hcnRfRGF0YSogRXdrVmlldzo6c21hcnRE
YXRhKCkgY29uc3QKK0V2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVWaWV3T2JqZWN0KEV2YXMq
IGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKIHsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG1f
ZXZhc09iamVjdCkpOworICAgIHJldHVybiBjcmVhdGVWaWV3T2JqZWN0KGNhbnZhcywgZGVmYXVs
dFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsK
IH0KIAotRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3Qq
IHZpZXcpCitib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1Nt
YXJ0X0NsYXNzJiBhcGkpCiB7Ci0gICAgQVNTRVJUKHZpZXcpOwotICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0
X3NtYXJ0X2RhdGFfZ2V0KHZpZXcpKTsKLSAgICBBU1NFUlQoc2QpOwotICAgIEFTU0VSVChzZC0+
cHJpdik7Ci0gICAgcmV0dXJuIHNkLT5wcml2OworICAgIGlmIChhcGkudmVyc2lvbiAhPSBFV0tf
VklFV19TTUFSVF9DTEFTU19WRVJTSU9OKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIkV3a19W
aWV3X1NtYXJ0X0NsYXNzICVwIGlzIHZlcnNpb24gJWx1IHdoaWxlICVsdSB3YXMgZXhwZWN0ZWQu
IiwKKyAgICAgICAgICAgICZhcGksIGFwaS52ZXJzaW9uLCBFV0tfVklFV19TTUFSVF9DTEFTU19W
RVJTSU9OKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcGFyZW50
U21hcnRDbGFzcy5hZGQpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRf
c2V0KCZwYXJlbnRTbWFydENsYXNzKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRf
c21hcnRfc2V0KCZhcGkuc2MpOworCisgICAgLy8gU2V0IEV2YXNfU21hcnRfQ2xhc3MgaW50ZXJm
YWNlLgorICAgIGFwaS5zYy5hZGQgPSBvbkV2YXNTbWFydEFkZDsKKyAgICBhcGkuc2MuZGVsID0g
b25FdmFzU21hcnREZWxldGU7CisgICAgYXBpLnNjLm1vdmUgPSBvbkV2YXNTbWFydE1vdmU7Cisg
ICAgYXBpLnNjLnJlc2l6ZSA9IG9uRXZhc1NtYXJ0UmVzaXplOworICAgIGFwaS5zYy5zaG93ID0g
b25FdmFzU21hcnRTaG93OworICAgIGFwaS5zYy5oaWRlID0gb25FdmFzU21hcnRIaWRlOworICAg
IGFwaS5zYy5jb2xvcl9zZXQgPSBvbkV2YXNTbWFydENvbG9yU2V0OworICAgIGFwaS5zYy5jYWxj
dWxhdGUgPSBvbkV2YXNTbWFydENhbGN1bGF0ZTsKKyAgICBhcGkuc2MuZGF0YSA9IHNtYXJ0Q2xh
c3NOYW1lOyAvLyBJdCBpcyB1c2VkIGZvciB0eXBlIGNoZWNraW5nLgorCisgICAgLy8gU2V0IEV3
a19WaWV3X1NtYXJ0X0NsYXNzIGludGVyZmFjZS4KKyAgICBhcGkuZm9jdXNfaW4gPSBvblZpZXdT
bWFydEZvY3VzSW47CisgICAgYXBpLmZvY3VzX291dCA9IG9uVmlld1NtYXJ0Rm9jdXNPdXQ7Cisg
ICAgYXBpLm1vdXNlX3doZWVsID0gb25WaWV3U21hcnRNb3VzZVdoZWVsOworICAgIGFwaS5tb3Vz
ZV9kb3duID0gb25WaWV3U21hcnRNb3VzZURvd247CisgICAgYXBpLm1vdXNlX3VwID0gb25WaWV3
U21hcnRNb3VzZVVwOworICAgIGFwaS5tb3VzZV9tb3ZlID0gb25WaWV3U21hcnRNb3VzZU1vdmU7
CisgICAgYXBpLmtleV9kb3duID0gb25WaWV3U21hcnRLZXlEb3duOworICAgIGFwaS5rZXlfdXAg
PSBvblZpZXdTbWFydEtleVVwOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NvbnN0IEV2YXNf
T2JqZWN0KiBFd2tWaWV3Ojp2aWV3T2JqZWN0RnJvbVBhZ2UoV0tQYWdlUmVmIHBhZ2UpCit7Cisg
ICAgQVNTRVJUKHBhZ2UpOworICAgIHJldHVybiB0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKTsK
K30KKworaW5saW5lIEV3a19WaWV3X1NtYXJ0X0RhdGEqIEV3a1ZpZXc6OnNtYXJ0RGF0YSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHNtYXJ0RGF0YShtX3ZpZXdPYmplY3QpOworfQorCitFd2tfVmll
d19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoRXZhc19PYmplY3QqIGV2YXNPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGV2YXNPYmplY3QpOworCisgICAgaWYgKCFpc1ZpZXdPYmplY3QoZXZh
c09iamVjdCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChldmFzT2JqZWN0
KSk7CiB9CiAKIC8qKgpAQCAtNTExLDE4ICs2OTgsMTggQEAgdm9pZCBFd2tWaWV3OjpzZXRJbWFn
ZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogSW50U2l6ZSBFd2tW
aWV3OjpzaXplKCkgY29uc3QKIHsKICAgICBpbnQgd2lkdGgsIGhlaWdodDsKLSAgICBldmFzX29i
amVjdF9nZW9tZXRyeV9nZXQobV9ldmFzT2JqZWN0LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwor
ICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChtX3ZpZXdPYmplY3QsIDAsIDAsICZ3aWR0aCwg
JmhlaWdodCk7CiAgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7CiB9CiAKIGJvb2wg
RXdrVmlldzo6aXNGb2N1c2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXZhc19vYmplY3RfZm9j
dXNfZ2V0KG1fZXZhc09iamVjdCk7CisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X2ZvY3VzX2dldCht
X3ZpZXdPYmplY3QpOwogfQogCiBib29sIEV3a1ZpZXc6OmlzVmlzaWJsZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KG1fZXZhc09iamVjdCk7CisgICAgcmV0
dXJuIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KG1fdmlld09iamVjdCk7CiB9CiAKIGNvbnN0IGNo
YXIqIEV3a1ZpZXc6OnRpdGxlKCkgY29uc3QKQEAgLTU3NywxNCArNzY0LDEzIEBAIHZvaWQgRXdr
Vmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIAogICAgIG1fbW91c2VF
dmVudHNFbmFibGVkID0gZW5hYmxlZDsKICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgICAgICBldmFzX29iamVjdF9l
dmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04s
IG9uTW91c2VEb3duLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Fk
ZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uTW91c2VVcCwgc2QpOwot
ICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFT
X0NBTExCQUNLX01PVVNFX01PVkUsIG9uTW91c2VNb3ZlLCBzZCk7CisgICAgICAgIEV3a1ZpZXdF
dmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOPjo6c3Vic2NyaWJlKG1fdmlld09i
amVjdCk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9V
UD46OnN1YnNjcmliZShtX3ZpZXdPYmplY3QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVy
PEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRT46OnN1YnNjcmliZShtX3ZpZXdPYmplY3QpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNP
YmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwgb25Nb3VzZURvd24pOwotICAgICAgICBl
dmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNL
X01PVVNFX1VQLCBvbk1vdXNlVXApOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFj
a19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uTW91c2VNb3Zl
KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX0RPV04+
Ojp1bnN1YnNjcmliZShtX3ZpZXdPYmplY3QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVy
PEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVA+Ojp1bnN1YnNjcmliZShtX3ZpZXdPYmplY3QpOworICAg
ICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRT46OnVuc3Vi
c2NyaWJlKG1fdmlld09iamVjdCk7CiAgICAgfQogfQogCkBAIC02MDMsMTkgKzc4OSwxOSBAQCB2
b2lkIEV3a1ZpZXc6OnNldFRvdWNoRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAg
IC8vIHN1cHBvcnRzIHRoZSB0b3VjaCBldmVudHMuCiAgICAgICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc3ODUgZm9yIGRldGFpbHMuCiAgICAgICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0Vf
RE9XTiwgb25Ub3VjaERvd24sIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJh
Y2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgb25Ub3VjaFVwLCBz
ZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3Qs
IEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Ub3VjaE1vdmUsIHNkKTsKLSAgICAgICAgZXZh
c19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19N
VUxUSV9ET1dOLCBvblRvdWNoRG93biwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9j
YWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX1VQLCBvblRvdWNo
VXAsIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09i
amVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBvblRvdWNoTW92ZSwgc2QpOworICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92aWV3T2JqZWN0LCBFVkFTX0NBTExC
QUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXdPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9u
VG91Y2hVcCwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92
aWV3T2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uVG91Y2hNb3ZlLCBzZCk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXdPYmplY3QsIEVWQVNf
Q0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3VjaERvd24sIHNkKTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fdmlld09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9V
UCwgb25Ub3VjaFVwLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Fk
ZChtX3ZpZXdPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgb25Ub3VjaE1vdmUsIHNk
KTsKICAgICB9IGVsc2UgewotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwo
bV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duKTsKLSAg
ICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19D
QUxMQkFDS19NT1VTRV9VUCwgb25Ub3VjaFVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvblRv
dWNoTW92ZSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNP
YmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3VjaERvd24pOwotICAgICAgICBl
dmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNL
X01VTFRJX1VQLCBvblRvdWNoVXApOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFj
a19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX01PVkUsIG9uVG91Y2hNb3Zl
KTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlld09iamVjdCwg
RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvblRvdWNoRG93bik7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX3ZpZXdPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0Vf
VVAsIG9uVG91Y2hVcCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbCht
X3ZpZXdPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Ub3VjaE1vdmUpOworICAg
ICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3T2JqZWN0LCBFVkFTX0NB
TExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKG1fdmlld09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9VUCwgb25U
b3VjaFVwKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlld09i
amVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBvblRvdWNoTW92ZSk7CiAgICAgfQogfQog
I2VuZGlmCkBAIC02NDQsNyArODMwLDcgQEAgYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYg
KCFtX2V2YXNHTCkgewotICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQo
bV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KG1fdmlld09iamVjdCk7CiAgICAgICAgIG1fZXZhc0dMID0gYWRvcHRQdHIoZXZhc19nbF9uZXco
ZXZhcykpOwogICAgICAgICBpZiAoIW1fZXZhc0dMKSB7CiAgICAgICAgICAgICBXQVJOKCJGYWls
ZWQgdG8gY3JlYXRlIEV2YXNfR0wsIGZhbGxpbmcgYmFjayB0byBzb2Z0d2FyZSBtb2RlLiIpOwpA
QCAtOTMxLDcgKzExMTcsNyBAQCBXS1BhZ2VSZWYgRXdrVmlldzo6Y3JlYXRlTmV3UGFnZShQYXNz
UmVmUHRyPEV3a1VybFJlcXVlc3Q+IHJlcXVlc3QsIFdLRGljdGlvbmFyeQogICAgIGlmICghbmV3
RXdrVmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBFd2tWaWV3KiBuZXdWaWV3SW1wbCA9
IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG5ld0V3a1ZpZXcpOworICAgIEV3a1ZpZXcqIG5ld1Zp
ZXdJbXBsID0gdG9Fd2tWaWV3KG5ld0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7
CiAKICAgICBuZXdWaWV3SW1wbC0+bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVz
OwpAQCAtOTUwLDMxICsxMTM2LDIxMyBAQCB2b2lkIEV3a1ZpZXc6OmNsb3NlKCkKICAgICBzZC0+
YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwogfQogCi12b2lkIEV3a1ZpZXc6Om9uTW91c2VEb3duKHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdr
Vmlldzo6b25FdmFzU21hcnRBZGQoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCiB7Ci0gICAgRXZh
c19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01v
dXNlX0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGktPm1vdXNlX2Rvd24pOwotICAgIHNkLT5hcGktPm1vdXNlX2Rvd24oc2QsIGRvd25FdmVu
dCk7CisgICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFy
dF9nZXQoZXZhc09iamVjdCk7CisgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFz
cyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKKyAgICBjb25zdCBFd2tfVmlld19TbWFy
dF9DbGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFz
cyo+KHNtYXJ0Q2xhc3MpOworCisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
RXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworCisgICAgaWYgKCFzbWFydERhdGEpIHsK
KyAgICAgICAgLy8gQWxsb2NhdGluZyB3aXRoICdjYWxsb2MnIGFzIHRoZSBBUEkgY29udHJhY3Qg
aXMgdGhhdCBpdCBzaG91bGQgYmUgZGVsZXRlZCB3aXRoICdmcmVlKCknLgorICAgICAgICBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVv
ZihFd2tfVmlld19TbWFydF9EYXRhKSkpOworICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRh
X3NldChldmFzT2JqZWN0LCBzbWFydERhdGEpOworICAgIH0KKworICAgIHNtYXJ0RGF0YS0+c2Vs
ZiA9IGV2YXNPYmplY3Q7CisgICAgc21hcnREYXRhLT5hcGkgPSBhcGk7CisKKyAgICBwYXJlbnRT
bWFydENsYXNzLmFkZChldmFzT2JqZWN0KTsKKworICAgIHNtYXJ0RGF0YS0+cHJpdiA9IDA7CisK
KyAgICAvLyBDcmVhdGUgZXZhc19vYmplY3RfaW1hZ2UgdG8gZHJhdyB3ZWIgY29udGVudHMuCisg
ICAgc21hcnREYXRhLT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJh
c2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1h
Z2UsIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+
aW1hZ2UsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRh
LT5pbWFnZSwgZXZhc09iamVjdCk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmlt
YWdlKTsKKworICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19GT0NVU19JTj46
OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FM
TEJBQ0tfRk9DVVNfT1VUPjo6c3Vic2NyaWJlKGV2YXNPYmplY3QpOworICAgIEV3a1ZpZXdFdmVu
dEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTD46OnN1YnNjcmliZShldmFzT2JqZWN0
KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04+OjpzdWJz
Y3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNL
X0tFWV9VUD46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVy
PEVWQVNfQ0FMTEJBQ0tfU0hPVz46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3
RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46OnN1YnNjcmliZShldmFzT2JqZWN0KTsK
IH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNlVXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydERlbGV0ZShF
dmFzX09iamVjdCogZXZhc09iamVjdCkKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2
ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfdXApOwotICAgIHNkLT5h
cGktPm1vdXNlX3VwKHNkLCB1cEV2ZW50KTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgaWYgKHNtYXJ0RGF0
YSkgeworICAgICAgICBBU1NFUlQoc21hcnREYXRhLT5wcml2KTsgLy8gc21hcnREYXRhLT5wcml2
IGlzIEV3a1ZpZXcgaW5zdGFuY2UuCisgICAgICAgIGRlbGV0ZSBzbWFydERhdGEtPnByaXY7Cisg
ICAgfQorCisgICAgcGFyZW50U21hcnRDbGFzcy5kZWwoZXZhc09iamVjdCk7CiB9CiAKLXZvaWQg
RXdrVmlldzo6b25Nb3VzZU1vdmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCogZXZlbnRJbmZvKQordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydFJlc2l6ZShFdmFzX09iamVj
dCogZXZhc09iamVjdCwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0g
ICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2
ZW50X01vdXNlX01vdmUqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGktPm1vdXNlX21vdmUpOwotICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIG1v
dmVFdmVudCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6
c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YSk7CisKKyAgICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5pbWFnZSwgd2lk
dGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc21hcnREYXRhLT5p
bWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21h
cnREYXRhLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBzbWFydERhdGEtPmNo
YW5nZWQuc2l6ZSA9IHRydWU7CisgICAgc21hcnREYXRhQ2hhbmdlZChzbWFydERhdGEpOworfQor
Cit2b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0TW92ZShFdmFzX09iamVjdCogZXZhc09iamVjdCwg
RXZhc19Db29yZCAvKngqLywgRXZhc19Db29yZCAvKnkqLykKK3sKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKworICAgIHNtYXJ0RGF0YS0+
Y2hhbmdlZC5wb3NpdGlvbiA9IHRydWU7CisgICAgc21hcnREYXRhQ2hhbmdlZChzbWFydERhdGEp
OworfQorCit2b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0Q2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBl
dmFzT2JqZWN0KQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1Zp
ZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEpOworCisgICAgRXdrVmlldyogdmlldyA9IHRvRXdrVmlldyhzbWFydERhdGEp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZpZXcpOworCisgICAgc21hcnREYXRh
LT5jaGFuZ2VkLmFueSA9IGZhbHNlOworCisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChldmFzT2JqZWN0LCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCk7CisKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uKSB7
CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IGZhbHNlOworICAgICAgICBz
bWFydERhdGEtPnZpZXcueCA9IHg7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy55ID0geTsKKyAg
ICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERhdGEtPmltYWdlLCB4LCB5KTsKKyAgICB9CisK
KyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnNpemUpIHsKKyAgICAgICAgc21hcnREYXRhLT5j
aGFuZ2VkLnNpemUgPSBmYWxzZTsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LncgPSB3aWR0aDsK
KyAgICAgICAgc21hcnREYXRhLT52aWV3LmggPSBoZWlnaHQ7CisKKyAgICAgICAgaWYgKHZpZXct
PnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgICAgIHZpZXctPnBhZ2UoKS0+ZHJhd2lu
Z0FyZWEoKS0+c2V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBJbnRTaXplKCkpOworCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICB2aWV3LT5zZXROZWVkc1N1
cmZhY2VSZXNpemUoKTsKKyNlbmRpZgorI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAg
ICAgICB2aWV3LT5wYWdlQ2xpZW50KCktPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworI2VuZGlmCisg
ICAgfQorfQorCit2b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0U2hvdyhFdmFzX09iamVjdCogZXZh
c09iamVjdCkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3
OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhKTsKKworICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzbWFydERhdGEt
PmJhc2UuY2xpcHBlcikpCisgICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNl
LmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7Cit9CisK
K3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnRIaWRlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQor
eworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0
YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEp
OworCisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAg
ZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmltYWdlKTsKK30KKwordm9pZCBFd2tWaWV3Ojpv
bkV2YXNTbWFydENvbG9yU2V0KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBpbnQgcmVkLCBpbnQg
Z3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CisKKyAgICBFd2tWaWV3KiB2aWV3ID0gdG9F
d2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odmlldyk7
CisKKyAgICBhbHBoYSA9IGNsYW1wVG8oYWxwaGEsIDAsIDI1NSk7CisgICAgcmVkID0gY2xhbXBU
byhyZWQsIDAsIGFscGhhKTsKKyAgICBncmVlbiA9IGNsYW1wVG8oZ3JlZW4sIDAsIGFscGhhKTsK
KyAgICBibHVlID0gY2xhbXBUbyhibHVlLCAwLCBhbHBoYSk7CisKKyAgICBldmFzX29iamVjdF9p
bWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFnZSwgYWxwaGEgPCAyNTUpOworICAgIHZpZXct
PnBhZ2UoKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKHJlZCB8fCBncmVlbiB8fCBibHVlKTsKKyAgICB2
aWV3LT5wYWdlKCktPnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGFscGhhIDwgMjU1KTsK
KworICAgIHBhcmVudFNtYXJ0Q2xhc3MuY29sb3Jfc2V0KGV2YXNPYmplY3QsIHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0Rm9jdXNJ
bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgdG9Fd2tWaWV3KHNtYXJ0
RGF0YSktPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9j
dXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0Rm9jdXNPdXQoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhKQoreworICAgIHRvRXdrVmlldyhzbWFydERhdGEpLT5wYWdl
KCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQ
YWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0Vp
bmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydE1vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQor
eworICAgIEV3a1ZpZXcqIHNlbGYgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5w
YWdlKCktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBz
ZWxmLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgc2VsZi0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6b25WaWV3U21hcnRNb3Vz
ZURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01v
dXNlX0Rvd24qIGRvd25FdmVudCkKK3sKKyAgICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNt
YXJ0RGF0YSk7CisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1v
dXNlRXZlbnQoZG93bkV2ZW50LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgc2VsZi0+dHJh
bnNmb3JtVG9TY3JlZW4oKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdr
Vmlldzo6b25WaWV3U21hcnRNb3VzZVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwg
Y29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCkKK3sKKyAgICBFd2tWaWV3KiBzZWxm
ID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2
ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQodXBFdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5l
KCksIHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKKworICAgIElucHV0TWV0aG9kQ29udGV4
dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gc2VsZi0+aW5wdXRNZXRob2RDb250ZXh0KCk7Cisg
ICAgaWYgKGlucHV0TWV0aG9kQ29udGV4dCkKKyAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5o
YW5kbGVNb3VzZVVwRXZlbnQodXBFdmVudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWlu
YV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VNb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCit7Cisg
ICAgRXdrVmlldyogc2VsZiA9IHRvRXdrVmlldyhzbWFydERhdGEpOworICAgIHNlbGYtPnBhZ2Uo
KS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KG1vdmVFdmVudCwgc2VsZi0+
dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0S2V5RG93bihF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24q
IGRvd25FdmVudCkKK3sKKyAgICBib29sIGlzRmlsdGVyZWQgPSBmYWxzZTsKKyAgICBFd2tWaWV3
KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgSW5wdXRNZXRob2RDb250ZXh0RWZs
KiBpbnB1dE1ldGhvZENvbnRleHQgPSBzZWxmLT5pbnB1dE1ldGhvZENvbnRleHQoKTsKKyAgICBp
ZiAoaW5wdXRNZXRob2RDb250ZXh0KQorICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRs
ZUtleURvd25FdmVudChkb3duRXZlbnQsICZpc0ZpbHRlcmVkKTsKKworICAgIHNlbGYtPnBhZ2Uo
KS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGRvd25FdmVudCwg
aXNGaWx0ZXJlZCkpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6
b25WaWV3U21hcnRLZXlVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2
YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KQoreworICAgIHRvRXdrVmlldyhzbWFydERhdGEpLT5w
YWdlKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh1cEV2ZW50
KSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAt
OTk1LDcgKzEzNjMsNyBAQCB2b2lkIEV3a1ZpZXc6OmZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hf
RXZlbnRfVHlwZSB0eXBlKQogICAgICAgICBwb2ludHMgPSBlaW5hX2xpc3RfYXBwZW5kKHBvaW50
cywgcG9pbnQpOwogICAgIH0KIAotICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQobV9ldmFz
T2JqZWN0LCB0eXBlLCBwb2ludHMsIGV2YXNfa2V5X21vZGlmaWVyX2dldChzZC0+YmFzZS5ldmFz
KSk7CisgICAgZXdrX3ZpZXdfZmVlZF90b3VjaF9ldmVudChtX3ZpZXdPYmplY3QsIHR5cGUsIHBv
aW50cywgZXZhc19rZXlfbW9kaWZpZXJfZ2V0KHNkLT5iYXNlLmV2YXMpKTsKIAogICAgIHZvaWQq
IGRhdGE7CiAgICAgRUlOQV9MSVNUX0ZSRUUocG9pbnRzLCBkYXRhKQpAQCAtMTAwNCwyMCArMTM3
MiwxNyBAQCB2b2lkIEV3a1ZpZXc6OmZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZlbnRfVHlw
ZSB0eXBlKQogCiB2b2lkIEV3a1ZpZXc6Om9uVG91Y2hEb3duKHZvaWQqIC8qIGRhdGEgKi8sIEV2
YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5m
byAqLykKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoZXdr
Vmlldyk7Ci0gICAgdmlldy0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9TVEFSVCk7CisgICAg
dG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX1NUQVJUKTsKIH0K
IAogdm9pZCBFd2tWaWV3OjpvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2Fu
dmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQogewot
ICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3KTsKLSAg
ICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX0VORCk7CisgICAgdG9Fd2tWaWV3KGV3
a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX0VORCk7CiB9CiAKIHZvaWQgRXdrVmll
dzo6b25Ub3VjaE1vdmUodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICovLCBFdmFz
X09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQotewotICAgIEV3a1ZpZXcq
IHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3KTsKLSAgICB2aWV3LT5mZWVk
VG91Y2hFdmVudHMoRVdLX1RPVUNIX01PVkUpOworeyAgICAKKyAgICB0b0V3a1ZpZXcoZXdrVmll
dyktPmZlZWRUb3VjaEV2ZW50cyhFV0tfVE9VQ0hfTU9WRSk7CiB9CiAjZW5kaWYKIApAQCAtMTA1
OSwzICsxNDI0LDQ2IEBAIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3Ojp0YWtl
U25hcHNob3QoKQogICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAjZW5kaWYKIH0KKwor
RXZhc19TbWFydF9DbGFzcyBFd2tWaWV3OjpwYXJlbnRTbWFydENsYXNzID0gRVZBU19TTUFSVF9D
TEFTU19JTklUX05VTEw7CisKKy8vIEZyZWUgRXdrIFZpZXcgZnVuY3Rpb25zLgorCitFd2tWaWV3
KiB0b0V3a1ZpZXcoY29uc3QgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgaWYgKCFp
c1ZpZXdPYmplY3QoZXZhc09iamVjdCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IHRvRXdrVmlldyhzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rf
c21hcnRfZGF0YV9nZXQoZXZhc09iamVjdCkpKTsKK30KKworRXdrVmlldyogdG9Fd2tWaWV3KGNv
bnN0IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICByZXR1cm4gc21hcnRE
YXRhID8gc21hcnREYXRhLT5wcml2IDogMDsKK30KKworYm9vbCBpc1ZpZXdPYmplY3QoY29uc3Qg
RXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGV2YXNPYmplY3QsIGZhbHNlKTsKKworICAgIGNvbnN0IGNoYXIqIGV2YXNPYmplY3RU
eXBlID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXZhc09iamVjdCk7CisgICAgY29uc3QgRXZhc19T
bWFydCogZXZhc1NtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV2YXNPYmplY3Qp
OworICAgIGlmIChVTkxJS0VMWSghZXZhc1NtYXJ0KSkgeworICAgICAgICBFSU5BX0xPR19DUklU
KCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCBldmFzT2JqZWN0LCBldmFzT2JqZWN0
VHlwZSA/IGV2YXNPYmplY3RUeXBlIDogIihudWxsKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFzcyA9IGV2YXNf
c21hcnRfY2xhc3NfZ2V0KGV2YXNTbWFydCk7CisgICAgaWYgKFVOTElLRUxZKCFzbWFydENsYXNz
KSkgeworICAgICAgICBFSU5BX0xPR19DUklUKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IGNsYXNz
IG9iamVjdCEiLCBldmFzT2JqZWN0LCBldmFzT2JqZWN0VHlwZSA/IGV2YXNPYmplY3RUeXBlIDog
IihudWxsKSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKFVOTElL
RUxZKHNtYXJ0Q2xhc3MtPmRhdGEgIT0gc21hcnRDbGFzc05hbWUpKSB7CisgICAgICAgIEVJTkFf
TE9HX0NSSVQoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a192aWV3IChuZWVkICVwLCBnb3QgJXAp
ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwp
IiwKKyAgICAgICAgICAgIHNtYXJ0Q2xhc3NOYW1lLCBzbWFydENsYXNzLT5kYXRhKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IDk5Y2U4ZWQuLjY4Y2M4NzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTk0LDYg
Kzk0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7
CiAjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfRGF0YSBFd2tfVmlld19T
bWFydF9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgRXdrX1ZpZXdf
U21hcnRfQ2xhc3M7CiAKIGNsYXNzIEV3a1ZpZXcgewogcHVibGljOgpAQCAtMTAyLDExICsxMDMs
MTggQEAgcHVibGljOgogICAgICAgICBMZWdhY3lCZWhhdmlvciwKICAgICAgICAgRGVmYXVsdEJl
aGF2aW9yCiAgICAgfTsKLSAgICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBh
Z2VHcm91cCwgVmlld0JlaGF2aW9yKTsKLSAgICB+RXdrVmlldygpOwogCi0gICAgc3RhdGljIEV3
a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKLSAgICBFdmFz
X09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIHN0YXRpYyBFdmFz
X09iamVjdCogY3JlYXRlVmlld09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0
LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZp
b3IpOworICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlVmlld09iamVjdChFdmFzKiBjYW52
YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2
aW9yKTsKKworICAgIHN0YXRpYyBib29sIGluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3
X1NtYXJ0X0NsYXNzJik7CisKKyAgICBzdGF0aWMgY29uc3QgRXZhc19PYmplY3QqIHZpZXdPYmpl
Y3RGcm9tUGFnZShXS1BhZ2VSZWYpOworCisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKCkgY29uc3Q7CisgICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YShF
dmFzX09iamVjdCogdmlld09iamVjdCk7CisKKyAgICBFdmFzX09iamVjdCogdmlld09iamVjdCgp
IHsgcmV0dXJuIG1fdmlld09iamVjdDsgfQogCiAgICAgV0tQYWdlUmVmIHdrUGFnZSgpOwogICAg
IFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7
IH0KQEAgLTE0NiwxMSArMTU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0
IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKTsKICAgICB2b2lkIHNldEltYWdlRGF0YSh2b2lkKiBp
bWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpOwogCi0gICAgdm9pZCB1cGRh
dGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCA9IFdlYkNvcmU6OkludFJlY3QoKSk7Ci0K
LSAgICBzdGF0aWMgdm9pZCBhZGRUb1BhZ2VWaWV3TWFwKEV3a1ZpZXcqIHZpZXcpOwotICAgIHN0
YXRpYyB2b2lkIHJlbW92ZUZyb21QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3KTsKLSAgICBzdGF0
aWMgY29uc3QgRXZhc19PYmplY3QqIHZpZXdGcm9tUGFnZVZpZXdNYXAoY29uc3QgV0tQYWdlUmVm
KTsKKyAgICB2b2lkIHVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0ID0gV2ViQ29y
ZTo6SW50UmVjdCgpKTsgICAKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICB2b2lk
IGVudGVyRnVsbFNjcmVlbigpOwpAQCAtMTkwLDcgKzE5NCw3IEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTxFd2tWaWV3Q2FsbGJhY2tzOjpDYWxsYmFja1R5cGUgY2FsbGJhY2tUeXBlPgogICAgIEV3
a1ZpZXdDYWxsYmFja3M6OkNhbGxCYWNrPGNhbGxiYWNrVHlwZT4gc21hcnRDYWxsYmFjaygpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gRXdrVmlld0NhbGxiYWNrczo6Q2FsbEJhY2s8Y2Fs
bGJhY2tUeXBlPihtX2V2YXNPYmplY3QpOworICAgICAgICByZXR1cm4gRXdrVmlld0NhbGxiYWNr
czo6Q2FsbEJhY2s8Y2FsbGJhY2tUeXBlPihtX3ZpZXdPYmplY3QpOwogICAgIH0KIAogICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBs
b25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwg
dW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxv
bmcgZXhwZWN0ZWRVc2FnZSk7CkBAIC0yMTQsNyArMjE4LDEwIEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0gICAg
aW5saW5lIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworICAgIEV3a1Zp
ZXcoRXZhc19PYmplY3QqIHZpZXdPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCwgUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZp
b3IpOworICAgIC8vIFdpbGwgYmUgZGVsZXRlZCB3aGVuIEV2YXMgT2JqZWN0IGlzIGRlbGV0ZWQu
CisgICAgfkV3a1ZpZXcoKTsKKwogICAgIHZvaWQgZGlzcGxheVRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8RXdrVmlldz4qKTsKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTIy
MywxOSArMjMwLDM3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluZm9ybUljb25DaGFuZ2UoKTsK
IAotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Ci0gICAgc3RhdGljIHZvaWQgb25Nb3VzZVVwKHZvaWQq
IGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Ci0gICAgc3RhdGlj
IHZvaWQgb25Nb3VzZU1vdmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCog
ZXZlbnRJbmZvKTsKKyAgICAvLyBFdmFzX1NtYXJ0X0NsYXNzIGludGVyZmFjZS4KKyAgICBzdGF0
aWMgdm9pZCBvbkV2YXNTbWFydEFkZChFdmFzX09iamVjdCopOworICAgIHN0YXRpYyB2b2lkIG9u
RXZhc1NtYXJ0RGVsZXRlKEV2YXNfT2JqZWN0Kik7CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21h
cnRNb3ZlKEV2YXNfT2JqZWN0KiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpOworICAgIHN0
YXRpYyB2b2lkIG9uRXZhc1NtYXJ0UmVzaXplKEV2YXNfT2JqZWN0KiwgRXZhc19Db29yZCB3aWR0
aCwgRXZhc19Db29yZCBoZWlnaHQpOworICAgIHN0YXRpYyB2b2lkIG9uRXZhc1NtYXJ0U2hvdyhF
dmFzX09iamVjdCopOworICAgIHN0YXRpYyB2b2lkIG9uRXZhc1NtYXJ0SGlkZShFdmFzX09iamVj
dCopOworICAgIHN0YXRpYyB2b2lkIG9uRXZhc1NtYXJ0Q29sb3JTZXQoRXZhc19PYmplY3QqLCBp
bnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpOworICAgIHN0YXRpYyB2b2lk
IG9uRXZhc1NtYXJ0Q2FsY3VsYXRlKEV2YXNfT2JqZWN0Kik7CisKKyAgICAvLyBFd2tfVmlld19T
bWFydF9DbGFzcyBpbnRlcmZhY2UuCisgICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydEZv
Y3VzSW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKTsKKyAgICBzdGF0aWMgRWluYV9C
b29sIG9uVmlld1NtYXJ0Rm9jdXNPdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKTsK
KyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0TW91c2VXaGVlbChFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZl
bnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21hcnRNb3VzZURvd24oRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25F
dmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydE1vdXNlVXAoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50
KTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0TW91c2VNb3ZlKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZl
bnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21hcnRLZXlEb3duKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50
KTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0S2V5VXAoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCk7CisKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQgZmVlZFRvdWNoRXZlbnRzKEV3a19Ub3Vj
aF9FdmVudF9UeXBlIHR5cGUpOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hEb3duKHZvaWQqIC8q
IGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQq
IC8qIGV2ZW50SW5mbyAqLyk7Ci0gICAgc3RhdGljIHZvaWQgb25Ub3VjaFVwKHZvaWQqIC8qIGRh
dGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8q
IGV2ZW50SW5mbyAqLyk7Ci0gICAgc3RhdGljIHZvaWQgb25Ub3VjaE1vdmUodm9pZCogLyogZGF0
YSAqLywgRXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyog
ZXZlbnRJbmZvICovKTsKKyAgICBzdGF0aWMgdm9pZCBvblRvdWNoRG93bih2b2lkKiBkYXRhLCBF
dmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIG9u
VG91Y2hVcCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8p
OworICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9pZCBvbkZhdmlj
b25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbyk7CiAKK3ByaXZh
dGU6CiAgICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4KLSAgICBFdmFz
X09iamVjdCogbV9ldmFzT2JqZWN0OworICAgIEV2YXNfT2JqZWN0KiBtX3ZpZXdPYmplY3Q7CiAg
ICAgUmVmUHRyPEV3a0NvbnRleHQ+IG1fY29udGV4dDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgT3duUHRyPEV2YXNfR0w+IG1fZXZhc0dMOwpAQCAtMjgwLDYgKzMwNSwx
MyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZDsK
ICAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3JvdW5kOworCisgICAgc3RhdGljIEV2YXNfU21hcnRf
Q2xhc3MgcGFyZW50U21hcnRDbGFzczsKIH07CiAKK0V3a1ZpZXcqIHRvRXdrVmlldyhjb25zdCBF
dmFzX09iamVjdCopOworRXdrVmlldyogdG9Fd2tWaWV3KGNvbnN0IEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSk7CisKK2Jvb2wgaXNWaWV3T2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2
aWV3T2JqZWN0KTsKKwogI2VuZGlmIC8vIEV3a1ZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IGYwY2YxZDYuLmJmODU1NGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTI1LDkg
KzI1LDYgQEAKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiRm9ybUNsaWVu
dEVmbC5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgotI2luY2x1ZGUgIk5h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50Lmgi
Ci0jaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRC
YXNlLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRDbGllbnRFZmwuaCIKICNpbmNsdWRlICJQYWdlUG9s
aWN5Q2xpZW50RWZsLmgiCkBAIC01MCw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiZXdrX2Zhdmljb25f
ZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCiAjaW5jbHVkZSAi
ZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAj
aW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlR3JvdXAuaD4K
ICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KQEAgLTY4LDQ4MiArNjQsMzEgQEAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNv
bnN0IGNoYXIgRVdLX1ZJRVdfVFlQRV9TVFJbXSA9ICJFV0syX1ZpZXciOwotCi0jZGVmaW5lIEVX
S19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgcmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmICghZXdrVmlldykgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJ
VCgibnVsbCBpcyBub3QgYSBld2tfdmlldyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgY2hhciogX3RtcF9vdHlwZSA9IGV2YXNf
b2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0
IEV2YXNfU21hcnQqIF90bXBfcyA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChld2tWaWV3
KTsgICAgICAgXAotICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3RtcF9zKSkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9H
X0NSSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBld2tWaWV3LCBf
dG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogX3RtcF9zYyA9
IGV2YXNfc21hcnRfY2xhc3NfZ2V0KF90bXBfcyk7ICAgICAgICBcCi0gICAgICAgIGlmIChFSU5B
X1VOTElLRUxZKCFfdG1wX3NjKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoIiVwICgl
cykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgIGV3a1ZpZXcsIF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihu
dWxsKSIpOyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAo
RUlOQV9VTkxJS0VMWShfdG1wX3NjLT5kYXRhICE9IEVXS19WSUVXX1RZUEVfU1RSKSkgeyAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIl
cCAoJXMpIGlzIG5vdCBvZiBhbiBld2tfdmlldyAobmVlZCAlcCwgZ290ICVwKSEiLCAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6
ICIobnVsbCkiLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgRVdLX1ZJRVdf
VFlQRV9TVFIsIF90bXBfc2MtPmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdo
aWxlICgwKQotCi0jZGVmaW5lIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEVXS19WSUVXX1RZUEVfQ0hF
Q0soZXdrVmlldywgX3RtcF9yZXN1bHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSAwOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKF90bXBfcmVzdWx0KSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBzbWFydERhdGEgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZXZhc19vYmplY3Rfc21hcnRf
ZGF0YV9nZXQoZXdrVmlldykKLQotI2RlZmluZSBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgLi4uKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFV0tfVklF
V19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIXNtYXJ0
RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVj
dCAlcCAoJXMpIiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICBld2tW
aWV3LCBldmFzX29iamVjdF90eXBlX2dldChld2tWaWV3KSk7ICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3
aGlsZSAoMCkKLQotI2RlZmluZSBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21h
cnREYXRhLCBpbXBsLCAuLi4pICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIXNtYXJ0RGF0YSkg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIEVJTkFfTE9HX0NSSVQoInNtYXJ0IGRhdGEgaXMgbnVsbCIpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gX19WQV9BUkdTX187
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrVmlldyogaW1wbCA9IHNtYXJ0RGF0YS0+cHJp
djsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFpbXBsKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5B
X0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgIHNtYXJ0RGF0YS0+c2VsZiwgZXZhc19vYmplY3RfdHlw
ZV9nZXQoc21hcnREYXRhLT5zZWxmKSk7ICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiBfX1ZB
X0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgRVdL
X1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIGltcGwsIC4uLikgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgRXdrVmlldyogaW1wbCA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEV3a1ZpZXcqIGltcGwg
PSB0b0V3a1ZpZXcoZXdrVmlldyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgXAot
ICAgICAgICBpbXBsID0gc21hcnREYXRhLT5wcml2OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFpbXBsKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNtYXJ0RGF0YS0+c2VsZiwgZXZhc19v
YmplY3RfdHlwZV9nZXQoc21hcnREYXRhLT5zZWxmKSk7ICAgICAgIFwKKyAgICAgICAgICAgIEVJ
TkFfTE9HX0NSSVQoIm5vIHByaXZhdGUgZGF0YSBmb3Igb2JqZWN0ICVwIiwgZXdrVmlldyk7ICAg
ICAgICAgICBcCiAgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICB9IHdoaWxlICgwKQogCi0vLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1Bh
Z2VfQ29udGVudHNfQ29udGV4dC4KLXR5cGVkZWYgc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0Nv
bnRleHQgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dDsKLQotLyoKLSAqIEBicmllZiBTdHJ1Y3R1
cmUgY29udGFpbmluZyBwYWdlIGNvbnRlbnRzIGNvbnRleHQgdXNlZCBmb3IgZXdrX3ZpZXdfcGFn
ZV9jb250ZW50c19nZXQoKSBBUEkuCi0gKi8KLXN0cnVjdCBFd2tfUGFnZV9Db250ZW50c19Db250
ZXh0IHsKLSAgICBFd2tfUGFnZV9Db250ZW50c19UeXBlIHR5cGU7Ci0gICAgRXdrX1BhZ2VfQ29u
dGVudHNfQ2IgY2FsbGJhY2s7Ci19OwotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2hh
bmdlZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAgaWYgKHNtYXJ0RGF0
YS0+Y2hhbmdlZC5hbnkpCi0gICAgICAgIHJldHVybjsKLSAgICBzbWFydERhdGEtPmNoYW5nZWQu
YW55ID0gdHJ1ZTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YS0+c2Vs
Zik7Ci19Ci0KLS8vIERlZmF1bHQgRXZlbnQgSGFuZGxpbmcuCi1zdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF9mb2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17
Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwg
ZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVBy
b3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9m
b2N1c19vdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIEVXS19WSUVX
X0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAg
IGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9j
dXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2Vfd2hlZWwoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVs
KiB3aGVlbEV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihz
bWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlV2hlZWxF
dmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHdoZWVsRXZlbnQsIGltcGwtPnRyYW5zZm9ybUZyb21T
Y2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX2Rvd24oRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25F
dmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRh
LCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0
aXZlV2ViTW91c2VFdmVudChkb3duRXZlbnQsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBp
bXBsLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCkKLXsKLSAgICBF
V0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7
Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVu
dCh1cEV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9T
Y3JlZW4oKSkpOwotCi0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRl
eHQgPSBpbXBsLT5pbnB1dE1ldGhvZENvbnRleHQoKTsKLSAgICBpZiAoaW5wdXRNZXRob2RDb250
ZXh0KQotICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRsZU1vdXNlVXBFdmVudCh1cEV2
ZW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d19zbWFydF9tb3VzZV9tb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3Qg
RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9H
RVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+
cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQobW92ZUV2ZW50LCBp
bXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9r
ZXlfZG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRf
S2V5X0Rvd24qIGRvd25FdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9S
RVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBib29sIGlzRmlsdGVyZWQgPSBm
YWxzZTsKLSAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9IGlt
cGwtPmlucHV0TWV0aG9kQ29udGV4dCgpOwotICAgIGlmIChpbnB1dE1ldGhvZENvbnRleHQpCi0g
ICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxlS2V5RG93bkV2ZW50KGRvd25FdmVudCwg
JmlzRmlsdGVyZWQpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQoZG93bkV2ZW50LCBpc0ZpbHRlcmVkKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2tleV91cChFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2
ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEs
IGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChO
YXRpdmVXZWJLZXlib2FyZEV2ZW50KHVwRXZlbnQpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gRXZlbnQgSGFuZGxpbmcuCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9p
ZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsKLSAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBp
LT5mb2N1c19pbik7Ci0gICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0YSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZhcyos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsKLSAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0
YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQpOwot
ICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQoc21hcnREYXRhKTsKLX0KLQotc3RhdGljIHZv
aWQgX2V3a192aWV3X29uX21vdXNlX3doZWVsKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVj
dCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVl
bEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5mbyk7
Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEt
PmFwaS0+bW91c2Vfd2hlZWwpOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbChzbWFy
dERhdGEsIHdoZWVsRXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X2Rv
d24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewot
ICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfS2V5X0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9kb3duKTsKLSAgICBzbWFydERhdGEt
PmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQq
IGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCA9IHN0YXRpY19j
YXN0PEV2YXNfRXZlbnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXApOwotICAgIHNt
YXJ0RGF0YS0+YXBpLT5rZXlfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsKLX0KLQotc3RhdGljIHZv
aWQgX2V3a192aWV3X29uX3Nob3codm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCogLypldmVudEluZm8qLykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRVdLX1ZJRVdf
SU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0gICAgaW1wbC0+cGFn
ZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2hpZGUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNf
T2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0g
ICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0K
LSAgICAvLyBUaGlzIGNhbGwgbWF5IGxvb2sgd3JvbmcsIGJ1dCB3ZSByZWFsbHkgbmVlZCB0byBw
YXNzIFZpZXdJc1Zpc2libGUgaGVyZS4KLSAgICAvLyB2aWV3U3RhdGVEaWRDaGFuZ2UoKSBpdHNl
bGYgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNldHRpbmcgdGhlIHZpc2liaWxpdHkgdG8g
VmlzaWJsZSBvciBIaWRkZW4KLSAgICAvLyBkZXBlbmRpbmcgb24gd2hhdCBXZWJQYWdlUHJveHk6
OmlzVmlld1Zpc2libGUoKSByZXR1cm5zLCB0aGlzIHNpbXBseSB0cmlnZ2VycyB0aGUgcHJvY2Vz
cy4KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZp
ZXdJc1Zpc2libGUpOwotfQotCi1zdGF0aWMgRXZhc19TbWFydF9DbGFzcyBnX3BhcmVudFNtYXJ0
Q2xhc3MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLQotc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBjb25zdCBFdmFzX1Nt
YXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChld2tWaWV3KTsKLSAgICBj
b25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQo
c21hcnQpOwotICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRDbGFzcyk7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0KLSAgICBpZiAoIXNtYXJ0RGF0YSkg
ewotICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
Y2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19TbWFydF9EYXRhKSkpOwotICAgICAgICBpZiAoIXNt
YXJ0RGF0YSkgewotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgiY291bGQgbm90IGFsbG9jYXRl
IEV3a19WaWV3X1NtYXJ0X0RhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tWaWV3LCBzbWFydERhdGEpOwot
ICAgIH0KLQotICAgIHNtYXJ0RGF0YS0+c2VsZiA9IGV3a1ZpZXc7Ci0gICAgc21hcnREYXRhLT5h
cGkgPSBhcGk7Ci0KLSAgICBnX3BhcmVudFNtYXJ0Q2xhc3MuYWRkKGV3a1ZpZXcpOwotCi0gICAg
c21hcnREYXRhLT5wcml2ID0gMDsKLQotICAgIC8vIENyZWF0ZSBldmFzX29iamVjdF9pbWFnZSB0
byBkcmF3IHdlYiBjb250ZW50cy4KLSAgICBzbWFydERhdGEtPmltYWdlID0gZXZhc19vYmplY3Rf
aW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9h
bHBoYV9zZXQoc21hcnREYXRhLT5pbWFnZSwgZmFsc2UpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2ZpbGxlZF9zZXQoc21hcnREYXRhLT5pbWFnZSwgdHJ1ZSk7Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmltYWdlLCBld2tWaWV3KTsKLSAgICBldmFzX29iamVj
dF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOwotCi0jZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMsIHNtYXJ0RGF0YSkKLSAgICBD
T05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4sIF9ld2tfdmlld19vbl9mb2N1c19pbik7Ci0g
ICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVCwgX2V3a192aWV3X29uX2ZvY3VzX291
dCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMLCBfZXdrX3ZpZXdfb25f
bW91c2Vfd2hlZWwpOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19LRVlfRE9XTiwgX2V3a192
aWV3X29uX2tleV9kb3duKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfS0VZX1VQLCBfZXdr
X3ZpZXdfb25fa2V5X3VwKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfU0hPVywgX2V3a192
aWV3X29uX3Nob3cpOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19ISURFLCBfZXdrX3ZpZXdf
b25faGlkZSk7Ci0jdW5kZWYgQ09OTkVDVAotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfZGVsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVChld2tW
aWV3LCBzbWFydERhdGEpOwotICAgIGlmIChzbWFydERhdGEpCi0gICAgICAgIGRlbGV0ZSBzbWFy
dERhdGEtPnByaXY7Ci0KLSAgICBnX3BhcmVudFNtYXJ0Q2xhc3MuZGVsKGV3a1ZpZXcpOwotfQot
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0KLSAgICBldmFzX29iamVjdF9y
ZXNpemUoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZXZhc19vYmplY3Rf
aW1hZ2Vfc2l6ZV9zZXQoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZXZh
c19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21hcnREYXRhLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhl
aWdodCk7Ci0KLSAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IHRydWU7Ci0gICAgX2V3a192
aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3
X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgLyp4Ki8sIEV2YXNf
Q29vcmQgLyp5Ki8pCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEpOwotCi0gICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gdHJ1ZTsKLSAg
ICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBFV0tfVklF
V19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsKTsKLQotICAgIHNtYXJ0
RGF0YS0+Y2hhbmdlZC5hbnkgPSBmYWxzZTsKLQotICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgs
IGhlaWdodDsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAm
d2lkdGgsICZoZWlnaHQpOwotCi0gICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbikg
ewotICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSBmYWxzZTsKLSAgICAgICAg
c21hcnREYXRhLT52aWV3LnggPSB4OwotICAgICAgICBzbWFydERhdGEtPnZpZXcueSA9IHk7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRhLT5pbWFnZSwgeCwgeSk7Ci0gICAgfQot
Ci0gICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplKSB7Ci0gICAgICAgIHNtYXJ0RGF0YS0+
Y2hhbmdlZC5zaXplID0gZmFsc2U7Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lkdGg7
Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy5oID0gaGVpZ2h0OwotCi0gICAgICAgIGlmIChpbXBs
LT5wYWdlKCktPmRyYXdpbmdBcmVhKCkpCi0gICAgICAgICAgICBpbXBsLT5wYWdlKCktPmRyYXdp
bmdBcmVhKCktPnNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgSW50U2l6ZSgpKTsKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgaW1wbC0+c2V0TmVlZHNT
dXJmYWNlUmVzaXplKCk7Ci0jZW5kaWYKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAg
ICAgICAgaW1wbC0+cGFnZUNsaWVudCgpLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKLSNlbmRpZgot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Nob3coRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEpOwotCi0gICAgaWYgKGV2YXNfb2JqZWN0X2NsaXBlZXNfZ2V0KHNtYXJ0RGF0YS0+YmFz
ZS5jbGlwcGVyKSkKLSAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmJhc2UuY2xp
cHBlcik7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmltYWdlKTsKLX0KLQotc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAg
ZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7Ci0gICAgZXZhc19vYmpl
Y3RfaGlkZShzbWFydERhdGEtPmltYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3Nt
YXJ0X2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwgaW50IGdyZWVuLCBp
bnQgYmx1ZSwgaW50IGFscGhhKQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4o
c21hcnREYXRhLCBpbXBsKTsKLQotICAgIGlmIChhbHBoYSA8IDApCi0gICAgICAgIGFscGhhID0g
MDsKLSAgICBlbHNlIGlmIChhbHBoYSA+IDI1NSkKLSAgICAgICAgYWxwaGEgPSAyNTU7Ci0KLSNk
ZWZpbmUgQ0hFQ0tfQ09MT1IoY29sb3IsIGFscGhhKSBcCi0gICAgaWYgKGNvbG9yIDwgMCkgICAg
ICAgICAgICAgICAgXAotICAgICAgICBjb2xvciA9IDA7ICAgICAgICAgICAgICAgIFwKLSAgICBl
bHNlIGlmIChjb2xvciA+IGFscGhhKSAgICAgICBcCi0gICAgICAgIGNvbG9yID0gYWxwaGE7Ci0g
ICAgQ0hFQ0tfQ09MT1IocmVkLCBhbHBoYSk7Ci0gICAgQ0hFQ0tfQ09MT1IoZ3JlZW4sIGFscGhh
KTsKLSAgICBDSEVDS19DT0xPUihibHVlLCBhbHBoYSk7Ci0jdW5kZWYgQ0hFQ0tfQ09MT1IKLQot
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmltYWdlLCBhbHBoYSA8
IDI1NSk7Ci0gICAgaW1wbC0+cGFnZSgpLT5zZXREcmF3c0JhY2tncm91bmQocmVkIHx8IGdyZWVu
IHx8IGJsdWUpOwotICAgIGltcGwtPnBhZ2UoKS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91
bmQoYWxwaGEgPCAyNTUpOwotCi0gICAgZ19wYXJlbnRTbWFydENsYXNzLmNvbG9yX3NldChld2tW
aWV3LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19CiAKIEVpbmFfQm9vbCBld2tfdmlld19z
bWFydF9jbGFzc19zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXBpLCBmYWxzZSk7CiAKLSAgICBpZiAoYXBpLT52ZXJz
aW9uICE9IEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pIHsKLSAgICAgICAgRUlOQV9MT0df
Q1JJVCgiRXdrX1ZpZXdfU21hcnRfQ2xhc3MgJXAgaXMgdmVyc2lvbiAlbHUgd2hpbGUgJWx1IHdh
cyBleHBlY3RlZC4iLAotICAgICAgICAgICAgIGFwaSwgYXBpLT52ZXJzaW9uLCBFV0tfVklFV19T
TUFSVF9DTEFTU19WRVJTSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChFSU5BX1VOTElLRUxZKCFnX3BhcmVudFNtYXJ0Q2xhc3MuYWRkKSkKLSAgICAgICAgZXZh
c19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJmdfcGFyZW50U21hcnRDbGFzcyk7Ci0K
LSAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmYXBpLT5zYyk7Ci0KLSAg
ICAvLyBTZXQgRXZhc19TbWFydF9DbGFzcyBmdW5jdGlvbnMuCi0gICAgYXBpLT5zYy5hZGQgPSBf
ZXdrX3ZpZXdfc21hcnRfYWRkOwotICAgIGFwaS0+c2MuZGVsID0gX2V3a192aWV3X3NtYXJ0X2Rl
bDsKLSAgICBhcGktPnNjLm1vdmUgPSBfZXdrX3ZpZXdfc21hcnRfbW92ZTsKLSAgICBhcGktPnNj
LnJlc2l6ZSA9IF9ld2tfdmlld19zbWFydF9yZXNpemU7Ci0gICAgYXBpLT5zYy5zaG93ID0gX2V3
a192aWV3X3NtYXJ0X3Nob3c7Ci0gICAgYXBpLT5zYy5oaWRlID0gX2V3a192aWV3X3NtYXJ0X2hp
ZGU7Ci0gICAgYXBpLT5zYy5jb2xvcl9zZXQgPSBfZXdrX3ZpZXdfc21hcnRfY29sb3Jfc2V0Owot
ICAgIGFwaS0+c2MuY2FsY3VsYXRlID0gX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZTsKLSAgICBh
cGktPnNjLmRhdGEgPSBFV0tfVklFV19UWVBFX1NUUjsgLy8gSXQgaXMgdXNlZCBieSB0eXBlIGNo
ZWNraW5nLgotCi0gICAgLy8gU2V0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIGZ1bmN0aW9ucy4KLSAg
ICBhcGktPmZvY3VzX2luID0gX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luOwotICAgIGFwaS0+Zm9j
dXNfb3V0ID0gX2V3a192aWV3X3NtYXJ0X2ZvY3VzX291dDsKLSAgICBhcGktPm1vdXNlX3doZWVs
ID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX3doZWVsOwotICAgIGFwaS0+bW91c2VfZG93biA9IF9l
d2tfdmlld19zbWFydF9tb3VzZV9kb3duOwotICAgIGFwaS0+bW91c2VfdXAgPSBfZXdrX3ZpZXdf
c21hcnRfbW91c2VfdXA7Ci0gICAgYXBpLT5tb3VzZV9tb3ZlID0gX2V3a192aWV3X3NtYXJ0X21v
dXNlX21vdmU7Ci0gICAgYXBpLT5rZXlfZG93biA9IF9ld2tfdmlld19zbWFydF9rZXlfZG93bjsK
LSAgICBhcGktPmtleV91cCA9IF9ld2tfdmlld19zbWFydF9rZXlfdXA7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBjcmVhdGVFd2tWaWV3U21hcnRD
bGFzcyh2b2lkKQotewotICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBhcGkgPSBFV0tf
VklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRXdrX1ZpZXciKTsKLSAgICBzdGF0
aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0
KSkgewotICAgICAgICBld2tfdmlld19zbWFydF9jbGFzc19zZXQoJmFwaSk7Ci0gICAgICAgIHNt
YXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHNtYXJ0OwotfQotCi1zdGF0aWMgaW5saW5lIEV2YXNfT2JqZWN0KiBjcmVhdGVFd2tWaWV3KEV2
YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwgRXdrVmlldzo6Vmlld0JlaGF2
aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKQotewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGNvbnRleHQsIDApOwotCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBldmFzX29iamVj
dF9zbWFydF9hZGQoY2FudmFzLCBzbWFydCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGV3a1ZpZXcsIDApOwotCi0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7Ci0gICAgaWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgZXZhc19vYmplY3RfZGVsKGV3
a1ZpZXcpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIXNtYXJ0RGF0
YS0+cHJpdik7Ci0KLSAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVkIGluIFdl
YkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAotICAgIC8vIHNv
IHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgotICAgIHNtYXJ0RGF0YS0+cHJpdiA9
IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNvbnRleHQsIHRvSW1wbChwYWdlR3JvdXBSZWYpLCBiZWhh
dmlvcik7Ci0gICAgcmV0dXJuIGV3a1ZpZXc7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBD
b25zdHJ1Y3RzIGEgZXdrX3ZpZXcgRXZhc19PYmplY3Qgd2l0aCBXS1R5cGUgcGFyYW1ldGVycy4K
LSAqLwotRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6
Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZh
cywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNy
ZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91
cFJlZiwgYmVoYXZpb3IpOworICAgIHJldHVybiBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVy
ZmFjZSgqYXBpKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFzKiBj
YW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29u
dGV4dCo+KGNvbnRleHQpKTsKKyAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlVmlld09iamVjdChj
YW52YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKIH0K
IAogRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBF
d2tfQ29udGV4dCogY29udGV4dCkKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfc21hcnRfYWRkKGNh
bnZhcywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRl
eHQqPihjb250ZXh0KSk7CisgICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZVZpZXdPYmplY3QoY2Fu
dmFzLCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKIH0KIAogRXZhc19P
YmplY3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCkBAIC04MjAsOCArMzY1LDcgQEAgRWlu
YV9Cb29sIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3
a19Ub3VjaF9FdmVudF9UeXBlIHQKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwb2ludHMsIGZhbHNlKTsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwotICAgIEVXS19W
SUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKKyAg
ICBFV0tfVklFV19JTVBMX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgaW1wbCwgZmFsc2UpOwogCiAg
ICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVUb3VjaEV2ZW50KE5hdGl2ZVdlYlRvdWNoRXZlbnQodHlw
ZSwgcG9pbnRzLCBtb2RpZmllcnMsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50
cmFuc2Zvcm1Ub1NjcmVlbigpLCBlY29yZV90aW1lX2dldCgpKSk7CiAKQEAgLTkzOCw2ICs0ODIs
MTcgQEAgdm9pZCBld2tfdmlld19kcmF3c19wYWdlX2JhY2tncm91bmRfc2V0KEV2YXNfT2JqZWN0
ICpld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlZCkKICAgICBpbXBsLT5zZXREcmF3c0JhY2tncm91
bmQoZW5hYmxlZCk7CiB9CiAKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfUGFnZV9D
b250ZW50c19Db250ZXh0LgordHlwZWRlZiBzdHJ1Y3QgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4
dCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0OworCisvKgorICogQGJyaWVmIFN0cnVjdHVyZSBj
b250YWluaW5nIHBhZ2UgY29udGVudHMgY29udGV4dCB1c2VkIGZvciBld2tfdmlld19wYWdlX2Nv
bnRlbnRzX2dldCgpIEFQSS4KKyAqLworc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQg
eworICAgIEV3a19QYWdlX0NvbnRlbnRzX1R5cGUgdHlwZTsKKyAgICBFd2tfUGFnZV9Db250ZW50
c19DYiBjYWxsYmFjazsKK307CisKIC8qKgogICogQGludGVybmFsCiAgKiBDYWxsYmFjayBmdW5j
dGlvbiB1c2VkIGZvciBld2tfdmlld19wYWdlX2NvbnRlbnRzX2dldCgpLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2I0Yzk3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBld2tfdmlld19wcml2YXRlX2gKLSNkZWZpbmUgZXdrX3ZpZXdfcHJp
dmF0ZV9oCi0KLSNpbmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotI2luY2x1
ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0KLUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChF
dmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdC
ZWhhdmlvcik7Ci0KLSNlbmRpZiAvLyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmluZGV4IGVm
ZDZkMzIuLmU0OGRmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWly
by9CYWNraW5nU3RvcmVDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Nh
aXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEJhY2tpbmdT
dG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVw
ZGF0ZUluZm8mCiAKICNpZiBQTEFURk9STShFRkwpCiAgICAgLy8gVXBkYXRlIGV3a192aWV3IHdp
dGggbmV3IGJhY2tpbmdTdG9yZSBpbWFnZS4KLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6
ZnJvbUV2YXNPYmplY3QobV93ZWJQYWdlUHJveHktPnZpZXdXaWRnZXQoKSk7CisgICAgRXdrVmll
dyogdmlldyA9IHRvRXdrVmlldyhtX3dlYlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKICAgICB2
aWV3LT5zZXRJbWFnZURhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2JhY2tpbmdT
dG9yZS0+Y2Fpcm9TdXJmYWNlKCkpLCBtX3NpemUpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3Bw
CmluZGV4IDI1OWU0MTIuLmFjMGQ3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCkBAIC01Myw3ICs1Myw3
IEBAIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRp
b25EYXRhKFdLQ29udGV4dFJlZiwgV0tQYWdlCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0
cjxFd2tOYXZpZ2F0aW9uRGF0YT4gbmF2aWdhdGlvbkRhdGFFd2sgPSBFd2tOYXZpZ2F0aW9uRGF0
YTo6Y3JlYXRlKG5hdmlnYXRpb25EYXRhKTsKLSAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmlnYXRl
KEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIG5hdmlnYXRpb25EYXRhRXdrLmdl
dCgpLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX25h
dmlnYXRlKEV3a1ZpZXc6OnZpZXdPYmplY3RGcm9tUGFnZShwYWdlKSwgbmF2aWdhdGlvbkRhdGFF
d2suZ2V0KCksIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRI
aXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBX
S1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVS
TCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTY2LDcgKzY2LDcgQEAg
dm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdL
Q29udGV4dFJlZiwgV0tQYWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJM
U3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJM
U3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fY2xpZW50UmVk
aXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgc291cmNlVVJMU3RyaW5n
LCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAg
aGlzdG9yeUNsaWVudC0+bV9jbGllbnRSZWRpcmVjdChFd2tWaWV3Ojp2aWV3T2JqZWN0RnJvbVBh
Z2UocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlD
bGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpk
aWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tV
UkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBDb250ZXh0SGlzdG9y
eUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdl
UmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7
CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9u
VVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fc2VydmVyUmVkaXJlY3QoRXdrVmlldzo6dmll
d0Zyb21QYWdlVmlld01hcChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0
cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC0+bV9z
ZXJ2ZXJSZWRpcmVjdChFd2tWaWV3Ojp2aWV3T2JqZWN0RnJvbVBhZ2UocGFnZSksIHNvdXJjZVVS
TFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEp
OwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRVcGRhdGVIaXN0b3J5VGl0
bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJM
UmVmIFVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTkyLDcgKzky
LDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxl
KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdGl0
bGVTdHJpbmcodGl0bGUpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdHJpbmdVUkwoVVJMKTsK
IAotICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRhdGVkKEV3a1ZpZXc6OnZpZXdGcm9tUGFn
ZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhpc3RvcnlDbGllbnQtPm1f
dXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRhdGVkKEV3a1ZpZXc6OnZp
ZXdPYmplY3RGcm9tUGFnZShwYWdlKSwgdGl0bGVTdHJpbmcsIHN0cmluZ1VSTCwgaGlzdG9yeUNs
aWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OnBv
cHVsYXRlVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKaW5k
ZXggNTY4ZTRhZS4uZDg5YTUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlQ2xpZW50QmFzZS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBib29sIFBhZ2VDbGllbnRC
YXNlOjppc1ZpZXdJbldpbmRvdygpCiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpwcm9jZXNzRGlkQ3Jh
c2goKQogewogICAgIC8vIENoZWNrIGlmIGxvYWRpbmcgd2FzIG9uZ29pbmcsIHdoZW4gd2ViIHBy
b2Nlc3MgY3Jhc2hlZC4KLSAgICBkb3VibGUgbG9hZFByb2dyZXNzID0gZXdrX3ZpZXdfbG9hZF9w
cm9ncmVzc19nZXQobV92aWV3LT52aWV3KCkpOworICAgIGRvdWJsZSBsb2FkUHJvZ3Jlc3MgPSBl
d2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX3ZpZXctPnZpZXdPYmplY3QoKSk7CiAgICAgaWYg
KGxvYWRQcm9ncmVzcyA+PSAwICYmIGxvYWRQcm9ncmVzcyA8IDEpIHsKICAgICAgICAgbG9hZFBy
b2dyZXNzID0gMTsKICAgICAgICAgbV92aWV3LT5zbWFydENhbGxiYWNrPExvYWRQcm9ncmVzcz4o
KS5jYWxsKCZsb2FkUHJvZ3Jlc3MpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgUGFnZUNsaWVu
dEJhc2U6OnByb2Nlc3NEaWRDcmFzaCgpCiAgICAgICAgIFdBUk4oIldBUk5JTkc6IFRoZSB3ZWIg
cHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycuXG4iLCB1cmwuZGF0YSgpKTsKIAog
ICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9yIHBhZ2UKLSAgICAgICAgZXdrX3ZpZXdfaHRtbF9z
dHJpbmdfbG9hZChtX3ZpZXctPnZpZXcoKSwgIlRoZSB3ZWIgcHJvY2VzcyBoYXMgY3Jhc2hlZC4i
LCAwLCB1cmwuZGF0YSgpKTsKKyAgICAgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZChtX3Zp
ZXctPnZpZXdPYmplY3QoKSwgIlRoZSB3ZWIgcHJvY2VzcyBoYXMgY3Jhc2hlZC4iLCAwLCB1cmwu
ZGF0YSgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggNTk5YmUzNC4uOGMzZTcxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKQEAg
LTEyNyw3ICsxMjcsNyBAQCB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VCYWNrRm9y
d2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZQogICAgIEV3a1ZpZXcqIHZp
ZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3KCk7CiAgICAgQVNTRVJU
KHZpZXcpOwogCi0gICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZpZXcoKSk7CisgICAgRXdrX0JhY2tfRm9yd2FyZF9M
aXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZpZXdPYmpl
Y3QoKSk7CiAgICAgQVNTRVJUKGxpc3QpOwogICAgIGxpc3QtPnVwZGF0ZShhZGRlZEl0ZW0sIHJl
bW92ZWRJdGVtcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVVJQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJ
Q2xpZW50RWZsLmNwcAppbmRleCAxZTAwOGM0Li45OTczYjMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC05NCwxNyArOTQsMTcg
QEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNsb3NlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp0YWtlRm9jdXMoV0tQYWdlUmVmLCBXS0Zv
Y3VzRGlyZWN0aW9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIC8vIEZJWE1FOiB0
aGlzIGlzIG9ubHkgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uLgotICAgIGV2YXNfb2JqZWN0X2Zv
Y3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT52aWV3KCksIGZh
bHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50
SW5mbyktPm1fdmlldy0+dmlld09iamVjdCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xp
ZW50RWZsOjpmb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAg
ZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3Zp
ZXctPnZpZXcoKSwgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xp
ZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnZpZXdPYmplY3QoKSwgdHJ1ZSk7CiB9CiAKIHZv
aWQgUGFnZVVJQ2xpZW50RWZsOjp1bmZvY3VzKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xp
ZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBmYWxzZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNf
c2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnZpZXdPYmplY3QoKSwg
ZmFsc2UpOwogfQogCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdEFsZXJ0KFdL
UGFnZVJlZiwgV0tTdHJpbmdSZWYgYWxlcnRUZXh0LCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAKaW5kZXggMDA1MDI4My4uZTZlYjU3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgd2lsbEVudGVyRnVsbFNjcmVlbigpOwotICAgIEV3a1ZpZXc6OmZyb21FdmFzT2Jq
ZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOworICAgIHRvRXdrVmlldyhtX3dlYlZp
ZXcpLT5lbnRlckZ1bGxTY3JlZW4oKTsKICAgICBkaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIApA
QCAtNjgsNyArNjgsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxs
U2NyZWVuKCkKIAogCiAgICAgd2lsbEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgRXdrVmlldzo6ZnJv
bUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB0b0V3a1ZpZXco
bV93ZWJWaWV3KS0+ZXhpdEZ1bGxTY3JlZW4oKTsKICAgICBkaWRFeGl0RnVsbFNjcmVlbigpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9y
UHJveHlFZmwuY3BwCmluZGV4IDQ2MmIyNmQuLjFlMjc3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCkBAIC0zMCw5
ICszMCw5IEBACiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19z
ZXR0aW5ncy5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJp
dmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWZsSW5zcGVjdG9yVXRpbGl0aWVzLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KQEAgLTk0LDEyICs5NCwxNyBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAgIC8vIEdyYWNlZnVsbHkgZmFsbCBi
YWNrIHRvIHNvZnR3YXJlIGlmIGV2YXNfZ2wgZW5naW5lIGlzIG5vdCBhdmFpbGFibGUuCiAgICAg
aWYgKCFtX2luc3BlY3RvcldpbmRvdykKICNlbmRpZgotICAgICAgICBtX2luc3BlY3RvcldpbmRv
dyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdp
bmRvd0hlaWdodCwgMCk7CisgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBlY29yZV9ldmFzX25ldygw
LCAwLCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQsIDApOwogICAg
IGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9pbnNw
ZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JX
aW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEkoaW5zcGVj
dG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgRXdrVmlldyog
aW5zcGVjdG9yVmlld0ltcGwgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3RvclZp
ZXcpOworICAgIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmID0gdG9BUEkocGFnZSgpLT5wcm9jZXNz
KCktPmNvbnRleHQoKSk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gRXdrVmlldzo6Y3JlYXRlVmll
d09iamVjdChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIGNvbnRleHRSZWYgPyBF
d2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4
dCgpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9y
KTsKKyAgICBpZiAoIW1faW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBF
d2tWaWV3KiBpbnNwZWN0b3JWaWV3SW1wbCA9IHRvRXdrVmlldyhtX2luc3BlY3RvclZpZXcpOwor
ICAgIEFTU0VSVChpbnNwZWN0b3JWaWV3SW1wbCk7CiAgICAgaW5zcGVjdG9yVmlld0ltcGwtPnNl
dFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIik7CiAKICAgICBFd2tfU2V0
dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlld0ltcGwtPnNldHRpbmdzKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAKaW5kZXggYTMz
MjcyNC4uYzY5YzVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJQYWdlUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
UGFnZVByb3h5RWZsLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
RXZhc19PYmplY3QqIFdlYlBhZ2VQcm94eTo6dmlld1dpZGdldCgpCiB7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+dmlldygpLT52aWV3KCk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+
dmlldygpLT52aWV3T2JqZWN0KCk7CiB9CiAKIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJk
VXNlckFnZW50KGNvbnN0IFN0cmluZyYgLyphcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQqLykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186054</attachid>
            <date>2013-02-01 08:29:08 -0800</date>
            <delta_ts>2013-02-05 04:21:45 -0800</delta_ts>
            <desc>patch v2</desc>
            <filename>bug108062_v2</filename>
            <type>text/plain</type>
            <size>68954</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDU3ZmU0ZTFmMmM0NmI1ODJhNjRhZjg4NDFmNDJmY2ZlNDdjNWJlM2QKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDczZGU0MzMuLjA1YmQxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw4OSBAQAogMjAxMy0w
Mi0wMSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4K
IAorICAgICAgICBbRUZMXVtXSzJdIEVuY2Fwc3VsYXRlIEV3ayBWaWV3IGV2YXMgc21hcnQgb2Jq
ZWN0IGNvZGUgaW5zaWRlIEV3a1ZpZXcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBFd2sgVmlldyBpbXBsZW1lbnRhdGlvbiBpcyBlbmNh
cHN1bGF0ZWQgd2l0aGluIEV3a1ZpZXcgY2xhc3MuCisgICAgICAgIEJlc2lkZXMgbXVsdGlwbGUg
cmVmYWN0b3Jpbmcgb2YgRXdrIFZpZXcgZXZhcyBzbWFydCBvYmplY3QgY29kZSB3YXMgbWFkZS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgorICAg
ICAgICAoV0tWaWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChzbWFydERh
dGFDaGFuZ2VkKToKKyAgICAgICAgKGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UpOgorICAgICAg
ICAoRXdrVmlld0V2ZW50SGFuZGxlcik6CisgICAgICAgIChFd2tWaWV3RXZlbnRIYW5kbGVyOjpz
dWJzY3JpYmUpOgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcjo6dW5zdWJzY3JpYmUpOgor
ICAgICAgICAoOjpvbkV2ZW50KToKKyAgICAgICAgKEV3a1ZpZXc6OkV3a1ZpZXcpOgorICAgICAg
ICAoRXdrVmlldzo6fkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6Y3JlYXRlRXZhc09iamVj
dCk6CisgICAgICAgIChFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVyZmFjZSk6CisgICAgICAg
IChFd2tWaWV3Ojp0b0V2YXNPYmplY3QpOgorICAgICAgICAoRXdrVmlldzo6c21hcnREYXRhKToK
KyAgICAgICAgKEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZCk6CisgICAgICAgIChFd2tW
aWV3OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0QWRkKToK
KyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0RGVsZXRlKToKKyAgICAgICAgKEV3a1ZpZXc6
Om9uRXZhc1NtYXJ0UmVzaXplKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0TW92ZSk6
CisgICAgICAgIChFd2tWaWV3OjpvbkV2YXNTbWFydENhbGN1bGF0ZSk6CisgICAgICAgIChFd2tW
aWV3OjpvbkV2YXNTbWFydFNob3cpOgorICAgICAgICAoRXdrVmlldzo6b25FdmFzU21hcnRIaWRl
KToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0Q29sb3JTZXQpOgorICAgICAgICAoRXdr
Vmlldzo6b25WaWV3U21hcnRGb2N1c0luKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uVmlld1NtYXJ0
Rm9jdXNPdXQpOgorICAgICAgICAoRXdrVmlldzo6b25WaWV3U21hcnRNb3VzZVdoZWVsKToKKyAg
ICAgICAgKEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VEb3duKToKKyAgICAgICAgKEV3a1ZpZXc6
Om9uVmlld1NtYXJ0TW91c2VVcCk6CisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydE1vdXNl
TW92ZSk6CisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydEtleURvd24pOgorICAgICAgICAo
RXdrVmlldzo6b25WaWV3U21hcnRLZXlVcCk6CisgICAgICAgIChFd2tWaWV3OjpvblRvdWNoRG93
bik6CisgICAgICAgIChFd2tWaWV3OjpvblRvdWNoVXApOgorICAgICAgICAoRXdrVmlldzo6b25U
b3VjaE1vdmUpOgorICAgICAgICAodG9Fd2tWaWV3KToKKyAgICAgICAgKGlzVmlld0V2YXNPYmpl
Y3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3
a1ZpZXc6OmV2YXNPYmplY3QpOgorICAgICAgICAoRXdrVmlldyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdfc21hcnRfY2xhc3Nf
c2V0KToKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisgICAgICAgIChld2tfdmlld19h
ZGRfd2l0aF9jb250ZXh0KToKKyAgICAgICAgKGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQpOgor
ICAgICAgICAoRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdT
dG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvQ29udGV4
dEhpc3RvcnlDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlzdG9yeUNs
aWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6Q29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRV
cGRhdGVIaXN0b3J5VGl0bGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJh
c2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6cHJvY2Vzc0RpZENyYXNo
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCk6
CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnRha2VGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6Zm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6
OnVuZm9jdXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6
OmVudGVyRnVsbFNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHk6OmV4aXRGdWxsU2NyZWVuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3Bl
Y3RvclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJQ
YWdlUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZXdXaWRn
ZXQpOgorCisyMDEzLTAyLTAxICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFr
b3ZAaW50ZWwuY29tPgorCiAgICAgICAgIFtFRkxdW1dLMl0gRXdrQ29udGV4dCBzaG91bGQgYmUg
YmFzZWQgb24gQyBXSzIgQVBJCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDc2NjYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwCmluZGV4IDMyYjlkOGYuLjAyYWQyNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTIyLDMxICsyMiwzMSBAQAogCiAj
aW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgImV3
a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgcmV0dXJuIHRvQVBJ
KGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tW
aWV3OjpMZWdhY3lCZWhhdmlvcikpOworeyAgIAorICAgIHJldHVybiB0b0FQSShFd2tWaWV3Ojpj
cmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZShj
b250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwg
RXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpKTsKIH0KIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jh
c2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0
QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gdG9BUEkoRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChj
YW52YXMsIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tD
b250ZXh0OjpkZWZhdWx0Q29udGV4dCgpLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRC
ZWhhdmlvcikpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1Jl
ZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBs
KHZpZXdSZWYpKTsKKyAgICBFd2tWaWV3KiB2aWV3ID0gdG9Fd2tWaWV3KHRvSW1wbCh2aWV3UmVm
KSk7CiAKICAgICByZXR1cm4gdmlldy0+d2tQYWdlKCk7CiB9CiAKIFdLSW1hZ2VSZWYgV0tWaWV3
Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlldyogdmlldyA9
IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAgRXdrVmlldyog
dmlldyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1JlZikpOwogCiAgICAgcmV0dXJuIFdLSW1hZ2VD
cmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKHZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9w
dGlvbnMgKi8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcAppbmRleCA3OTYyNmU2Li5jNjRhMzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjcsNiArMjcsOSBAQAogI2luY2x1ZGUgIkZpbmRD
bGllbnRFZmwuaCIKICNpbmNsdWRlICJGb3JtQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiSW5wdXRN
ZXRob2RDb250ZXh0RWZsLmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgor
I2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJXaGVl
bEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKICNpbmNsdWRlICJQYWdlQ2xp
ZW50RGVmYXVsdEltcGwuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50TGVnYWN5SW1wbC5oIgpAQCAt
NTUsNyArNTgsNiBAQAogI2luY2x1ZGUgImV3a19zZWN1cml0eV9vcmlnaW5fcHJpdmF0ZS5oIgog
I2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIK
LSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0
dXJlc19wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPEVjb3Jl
X1guaD4KQEAgLTY0LDYgKzY2LDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICNpbmNsdWRlICJW
aWJyYXRpb25DbGllbnRFZmwuaCIKQEAgLTgxLDM1ICs4NSwxNTAgQEAgdXNpbmcgbmFtZXNwYWNl
IEV3a1ZpZXdDYWxsYmFja3M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CiAKK3N0YXRpYyBjb25zdCBjaGFyIHNtYXJ0Q2xhc3NOYW1lW10gPSAiRVdL
Ml9WaWV3IjsKIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdEN1cnNvclNpemUgPSAxNjsKIAotdHlw
ZWRlZiBIYXNoTWFwPFdLUGFnZVJlZiwgRXZhc19PYmplY3QqPiBQYWdlVmlld01hcDsKKy8vIEF1
eGlsaWFyeSBmdW5jdGlvbnMuCiAKLXN0YXRpYyBpbmxpbmUgUGFnZVZpZXdNYXAmIHBhZ2VWaWV3
TWFwKCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWFydERhdGFDaGFuZ2VkKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhZ2VWaWV3TWFw
LCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOworICAgIEFTU0VSVChzbWFydERhdGEpOworCisg
ICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkpCisgICAgICAgIHJldHVybjsKKworICAgIHNt
YXJ0RGF0YS0+Y2hhbmdlZC5hbnkgPSB0cnVlOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5n
ZWQoc21hcnREYXRhLT5zZWxmKTsKIH0KIAotdm9pZCBFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFw
KEV3a1ZpZXcqIHZpZXcpCitzdGF0aWMgRXZhc19TbWFydCogZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0
YW5jZSgpCiB7Ci0gICAgUGFnZVZpZXdNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBwYWdlVmlld01h
cCgpLmFkZCh2aWV3LT53a1BhZ2UoKSwgdmlldy0+dmlldygpKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9D
bGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTihzbWFydENs
YXNzTmFtZSk7CisgICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKKworICAgIGlmICgh
c21hcnQpIHsKKyAgICAgICAgRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoYXBpKTsK
KyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKKyAgICB9CisK
KyAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXZvaWQgRXdrVmlldzo6cmVtb3ZlRnJvbVBhZ2VWaWV3
TWFwKEV3a1ZpZXcqIHZpZXcpCisvLyBFd2tWaWV3RXZlbnRIYW5kbGVyIGltcGxlbWVudGF0aW9u
LgorCit0ZW1wbGF0ZSA8RXZhc19DYWxsYmFja19UeXBlIEV2ZW50VHlwZT4KK2NsYXNzIEV3a1Zp
ZXdFdmVudEhhbmRsZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHN1YnNjcmliZShFdmFz
X09iamVjdCogZXZhc09iamVjdCkKKyAgICB7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2Nh
bGxiYWNrX2FkZChldmFzT2JqZWN0LCBFdmVudFR5cGUsIG9uRXZlbnQsIEV3a1ZpZXc6OnNtYXJ0
RGF0YShldmFzT2JqZWN0KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdW5zdWJzY3JpYmUo
RXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgeworICAgICAgICBldmFzX29iamVjdF9ldmVu
dF9jYWxsYmFja19kZWwoZXZhc09iamVjdCwgRXZlbnRUeXBlLCBvbkV2ZW50KTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbyk7Cit9OworCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRI
YW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZh
cyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEFTU0VSVChwYWdlVmll
d01hcCgpLmNvbnRhaW5zKHZpZXctPndrUGFnZSgpKSk7Ci0gICAgcGFnZVZpZXdNYXAoKS5yZW1v
dmUodmlldy0+d2tQYWdlKCkpOworICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50
ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5t
b3VzZV9kb3duKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfZG93bihzbWFydERhdGEsIGRv
d25FdmVudCk7CiB9CiAKLWNvbnN0IEV2YXNfT2JqZWN0KiBFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VW
aWV3TWFwKGNvbnN0IFdLUGFnZVJlZiBwYWdlKQordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX1VQPjo6b25FdmVudCh2b2lkKiBkYXRhLCBF
dmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgQVNTRVJUKHBhZ2Up
OworICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2
ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV91cCk7CisgICAgc21hcnREYXRh
LT5hcGktPm1vdXNlX3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7Cit9CiAKLSAgICByZXR1cm4gcGFn
ZVZpZXdNYXAoKS5nZXQocGFnZSk7Cit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5k
bGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRT46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZlbnRfTW91c2Vf
TW92ZSogbW92ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZl
bnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfbW92
ZShzbWFydERhdGEsIG1vdmVFdmVudCk7CiB9CiAKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdF
dmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19GT0NVU19JTj46Om9uRXZlbnQodm9pZCogZGF0YSwg
RXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4pOworICAgIHNtYXJ0
RGF0YS0+YXBpLT5mb2N1c19pbihzbWFydERhdGEpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBF
d2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VUPjo6b25FdmVudCh2b2lk
KiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0
YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQpOwor
ICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQoc21hcnREYXRhKTsKK30KKwordGVtcGxhdGUg
PD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMPjo6
b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8p
Cit7CisgICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0
PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRh
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsK
KyAgICBzbWFydERhdGEtPmFwaS0+bW91c2Vfd2hlZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsK
K30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNL
X0tFWV9ET1dOPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lk
KiBldmVudEluZm8pCit7CisgICAgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50ID0gc3Rh
dGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24p
OworICAgIHNtYXJ0RGF0YS0+YXBpLT5rZXlfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7Cit9
CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19L
RVlfVVA+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2
ZW50SW5mbykKK3sKKyAgICBFdmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCA9IHN0YXRpY19jYXN0
PEV2YXNfRXZlbnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXApOworICAgIHNtYXJ0
RGF0YS0+YXBpLT5rZXlfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsKK30KKwordGVtcGxhdGUgPD4K
K3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX1NIT1c+OjpvbkV2ZW50KHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFu
Z2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQg
RXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0hJREU+OjpvbkV2ZW50KHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsK
KworICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUuIHZpZXdTdGF0ZURp
ZENoYW5nZSgpIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc2V0dGluZyB0aGUg
dmlzaWJpbGl0eSB0byBWaXNpYmxlIG9yIEhpZGRlbgorICAgIC8vIGRlcGVuZGluZyBvbiB3aGF0
IFdlYlBhZ2VQcm94eTo6aXNWaWV3VmlzaWJsZSgpIHJldHVybnMsIHRoaXMgc2ltcGx5IHRyaWdn
ZXJzIHRoZSBwcm9jZXNzLgorICAgIHRvRXdrVmlldyhzbWFydERhdGEpLT5wYWdlKCktPnZpZXdT
dGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOworfQorCisvLyBFd2tW
aWV3IGltcGxlbWVudGF0aW9uLgorCiBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViUGFn
ZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKICAgICA6IG1fZXZhc09i
amVjdChldmFzT2JqZWN0KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC0xODAsOCArMjk5
LDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKICAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsK
IAogICAgIGljb25EYXRhYmFzZS0+d2F0Y2hDaGFuZ2VzKEljb25DaGFuZ2VDYWxsYmFja0RhdGEo
RXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZCwgdGhpcykpOwotCi0gICAgRXdrVmlldzo6YWRkVG9Q
YWdlVmlld01hcCh0aGlzKTsKIH0KIAogRXdrVmlldzo6fkV3a1ZpZXcoKQpAQCAtMTkzLDIyICsz
MTAsODcgQEAgRXdrVmlldzo6fkV3a1ZpZXcoKQogICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwog
CiAgICAgaWNvbkRhdGFiYXNlLT51bndhdGNoQ2hhbmdlcyhFd2tWaWV3OjpvbkZhdmljb25DaGFu
Z2VkKTsKK30KKworRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyog
Y2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAotICAgIEV3a1ZpZXc6OnJlbW92ZUZyb21Q
YWdlVmlld01hcCh0aGlzKTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2Jq
ZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXZhc09iamVjdCwgMCk7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgaWYgKCFzbWFydERh
dGEpIHsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7CisKKyAgICAvLyBE
ZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3Ig
aWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAorICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNy
ZWF0ZSBpdCBoZXJlLgorICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV2YXNPYmpl
Y3QsIGNvbnRleHQsIHRvSW1wbChwYWdlR3JvdXBSZWYpLCBiZWhhdmlvcik7CisgICAgcmV0dXJu
IGV2YXNPYmplY3Q7CiB9CiAKLUV3a19WaWV3X1NtYXJ0X0RhdGEqIEV3a1ZpZXc6OnNtYXJ0RGF0
YSgpIGNvbnN0CitFdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChFdmFzKiBj
YW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChtX2V2
YXNPYmplY3QpKTsKKyAgICByZXR1cm4gY3JlYXRlRXZhc09iamVjdChjYW52YXMsIGRlZmF1bHRT
bWFydENsYXNzSW5zdGFuY2UoKSwgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CiB9
CiAKLUV3a1ZpZXcqIEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2
aWV3KQorYm9vbCBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmlld19TbWFy
dF9DbGFzcyYgYXBpKQogewotICAgIEFTU0VSVCh2aWV3KTsKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9z
bWFydF9kYXRhX2dldCh2aWV3KSk7Ci0gICAgQVNTRVJUKHNkKTsKLSAgICBBU1NFUlQoc2QtPnBy
aXYpOwotICAgIHJldHVybiBzZC0+cHJpdjsKKyAgICBpZiAoYXBpLnZlcnNpb24gIT0gRVdLX1ZJ
RVdfU01BUlRfQ0xBU1NfVkVSU0lPTikgeworICAgICAgICBFSU5BX0xPR19DUklUKCJFd2tfVmll
d19TbWFydF9DbGFzcyAlcCBpcyB2ZXJzaW9uICVsdSB3aGlsZSAlbHUgd2FzIGV4cGVjdGVkLiIs
CisgICAgICAgICAgICAmYXBpLCBhcGkudmVyc2lvbiwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVS
U0lPTik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXBhcmVudFNt
YXJ0Q2xhc3MuYWRkKQorICAgICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3Nl
dCgmcGFyZW50U21hcnRDbGFzcyk7CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3Nt
YXJ0X3NldCgmYXBpLnNjKTsKKworICAgIC8vIFNldCBFdmFzX1NtYXJ0X0NsYXNzIGludGVyZmFj
ZS4KKyAgICBhcGkuc2MuYWRkID0gb25FdmFzU21hcnRBZGQ7CisgICAgYXBpLnNjLmRlbCA9IG9u
RXZhc1NtYXJ0RGVsZXRlOworICAgIGFwaS5zYy5tb3ZlID0gb25FdmFzU21hcnRNb3ZlOworICAg
IGFwaS5zYy5yZXNpemUgPSBvbkV2YXNTbWFydFJlc2l6ZTsKKyAgICBhcGkuc2Muc2hvdyA9IG9u
RXZhc1NtYXJ0U2hvdzsKKyAgICBhcGkuc2MuaGlkZSA9IG9uRXZhc1NtYXJ0SGlkZTsKKyAgICBh
cGkuc2MuY29sb3Jfc2V0ID0gb25FdmFzU21hcnRDb2xvclNldDsKKyAgICBhcGkuc2MuY2FsY3Vs
YXRlID0gb25FdmFzU21hcnRDYWxjdWxhdGU7CisgICAgYXBpLnNjLmRhdGEgPSBzbWFydENsYXNz
TmFtZTsgLy8gSXQgaXMgdXNlZCBmb3IgdHlwZSBjaGVja2luZy4KKworICAgIC8vIFNldCBFd2tf
Vmlld19TbWFydF9DbGFzcyBpbnRlcmZhY2UuCisgICAgYXBpLmZvY3VzX2luID0gb25WaWV3U21h
cnRGb2N1c0luOworICAgIGFwaS5mb2N1c19vdXQgPSBvblZpZXdTbWFydEZvY3VzT3V0OworICAg
IGFwaS5tb3VzZV93aGVlbCA9IG9uVmlld1NtYXJ0TW91c2VXaGVlbDsKKyAgICBhcGkubW91c2Vf
ZG93biA9IG9uVmlld1NtYXJ0TW91c2VEb3duOworICAgIGFwaS5tb3VzZV91cCA9IG9uVmlld1Nt
YXJ0TW91c2VVcDsKKyAgICBhcGkubW91c2VfbW92ZSA9IG9uVmlld1NtYXJ0TW91c2VNb3ZlOwor
ICAgIGFwaS5rZXlfZG93biA9IG9uVmlld1NtYXJ0S2V5RG93bjsKKyAgICBhcGkua2V5X3VwID0g
b25WaWV3U21hcnRLZXlVcDsKKworICAgIHJldHVybiB0cnVlOworfQorCitjb25zdCBFdmFzX09i
amVjdCogRXdrVmlldzo6dG9FdmFzT2JqZWN0KFdLUGFnZVJlZiBwYWdlKQoreworICAgIEFTU0VS
VChwYWdlKTsKKyAgICByZXR1cm4gdG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCk7Cit9CisKK0V3
a19WaWV3X1NtYXJ0X0RhdGEqIEV3a1ZpZXc6OnNtYXJ0RGF0YShFdmFzX09iamVjdCogZXZhc09i
amVjdCkKK3sKKyAgICBBU1NFUlQoZXZhc09iamVjdCk7CisKKyAgICBpZiAoIWlzVmlld0V2YXNP
YmplY3QoZXZhc09iamVjdCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChl
dmFzT2JqZWN0KSk7CiB9CiAKIC8qKgpAQCAtMzc2LDYgKzU1OCwxMSBAQCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIEV3a1ZpZXc6OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpCiB9CiAjZW5k
aWYKIAoraW5saW5lIEV3a19WaWV3X1NtYXJ0X0RhdGEqIEV3a1ZpZXc6OnNtYXJ0RGF0YSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHNtYXJ0RGF0YShtX2V2YXNPYmplY3QpOworfQorCiB2b2lkIEV3
a1ZpZXc6OmRpc3BsYXlUaW1lckZpcmVkKFRpbWVyPEV3a1ZpZXc+KikKIHsKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCkBAIC01NzcsMTQgKzc2NCwxMyBAQCB2b2lkIEV3a1ZpZXc6OnNl
dE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCiAKICAgICBtX21vdXNlRXZlbnRzRW5h
YmxlZCA9IGVuYWJsZWQ7CiAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2Fs
bGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvbk1vdXNl
RG93biwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFz
T2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX1VQLCBvbk1vdXNlVXAsIHNkKTsKLSAgICAgICAg
ZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFD
S19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSwgc2QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5k
bGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46OnN1YnNjcmliZShtX2V2YXNPYmplY3QpOwor
ICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVA+OjpzdWJz
Y3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NB
TExCQUNLX01PVVNFX01PVkU+OjpzdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBF
VkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uTW91c2VEb3duKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9V
UCwgb25Nb3VzZVVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1f
ZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSk7CisgICAg
ICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOPjo6dW5zdWJz
Y3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NB
TExCQUNLX01PVVNFX1VQPjo6dW5zdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdr
Vmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01PVkU+Ojp1bnN1YnNjcmliZSht
X2V2YXNPYmplY3QpOwogICAgIH0KIH0KIApAQCAtOTMxLDcgKzExMTcsNyBAQCBXS1BhZ2VSZWYg
RXdrVmlldzo6Y3JlYXRlTmV3UGFnZShQYXNzUmVmUHRyPEV3a1VybFJlcXVlc3Q+IHJlcXVlc3Qs
IFdLRGljdGlvbmFyeQogICAgIGlmICghbmV3RXdrVmlldykKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBFd2tWaWV3KiBuZXdWaWV3SW1wbCA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG5ld0V3
a1ZpZXcpOworICAgIEV3a1ZpZXcqIG5ld1ZpZXdJbXBsID0gdG9Fd2tWaWV3KG5ld0V3a1ZpZXcp
OwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKICAgICBuZXdWaWV3SW1wbC0+bV93aW5kb3dG
ZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOwpAQCAtOTUwLDMxICsxMTM2LDIxMyBAQCB2b2lk
IEV3a1ZpZXc6OmNsb3NlKCkKICAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwogfQogCi12
b2lkIEV3a1ZpZXc6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnRBZGQoRXZhc19PYmpl
Y3QqIGV2YXNPYmplY3QpCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQg
PSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOwotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX2Rvd24pOwotICAgIHNkLT5h
cGktPm1vdXNlX2Rvd24oc2QsIGRvd25FdmVudCk7CisgICAgY29uc3QgRXZhc19TbWFydCogc21h
cnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXZhc09iamVjdCk7CisgICAgY29uc3Qg
RXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFzcyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0
KTsKKyAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+KHNtYXJ0Q2xhc3MpOworCisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3Qp
OworCisgICAgaWYgKCFzbWFydERhdGEpIHsKKyAgICAgICAgLy8gQWxsb2NhdGluZyB3aXRoICdj
YWxsb2MnIGFzIHRoZSBBUEkgY29udHJhY3QgaXMgdGhhdCBpdCBzaG91bGQgYmUgZGVsZXRlZCB3
aXRoICdmcmVlKCknLgorICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19TbWFydF9EYXRhKSkpOworICAg
ICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChldmFzT2JqZWN0LCBzbWFydERhdGEpOwor
ICAgIH0KKworICAgIHNtYXJ0RGF0YS0+c2VsZiA9IGV2YXNPYmplY3Q7CisgICAgc21hcnREYXRh
LT5hcGkgPSBhcGk7CisKKyAgICBwYXJlbnRTbWFydENsYXNzLmFkZChldmFzT2JqZWN0KTsKKwor
ICAgIHNtYXJ0RGF0YS0+cHJpdiA9IDA7CisKKyAgICAvLyBDcmVhdGUgZXZhc19vYmplY3RfaW1h
Z2UgdG8gZHJhdyB3ZWIgY29udGVudHMuCisgICAgc21hcnREYXRhLT5pbWFnZSA9IGV2YXNfb2Jq
ZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfaW1h
Z2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9p
bWFnZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHRydWUpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5pbWFnZSwgZXZhc09iamVjdCk7CisgICAgZXZh
c19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmltYWdlKTsKKworICAgIEV3a1ZpZXdFdmVudEhhbmRs
ZXI8RVZBU19DQUxMQkFDS19GT0NVU19JTj46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBF
d2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VUPjo6c3Vic2NyaWJlKGV2
YXNPYmplY3QpOworICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9X
SEVFTD46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVW
QVNfQ0FMTEJBQ0tfS0VZX0RPV04+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmll
d0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9VUD46OnN1YnNjcmliZShldmFzT2JqZWN0
KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfU0hPVz46OnN1YnNjcmli
ZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElE
RT46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKIH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNlVXAo
dm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQordm9pZCBF
d2tWaWV3OjpvbkV2YXNTbWFydERlbGV0ZShFdmFzX09iamVjdCogZXZhc09iamVjdCkKIHsKLSAg
ICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9N
b3VzZV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+bW91c2VfdXApOwotICAgIHNkLT5hcGktPm1vdXNlX3VwKHNkLCB1cEV2ZW50KTsKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZh
c09iamVjdCk7CisgICAgaWYgKHNtYXJ0RGF0YSkgeworICAgICAgICBBU1NFUlQoc21hcnREYXRh
LT5wcml2KTsgLy8gc21hcnREYXRhLT5wcml2IGlzIEV3a1ZpZXcgaW5zdGFuY2UuCisgICAgICAg
IGRlbGV0ZSBzbWFydERhdGEtPnByaXY7CisgICAgfQorCisgICAgcGFyZW50U21hcnRDbGFzcy5k
ZWwoZXZhc09iamVjdCk7CiB9CiAKLXZvaWQgRXdrVmlldzo6b25Nb3VzZU1vdmUodm9pZCogZGF0
YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQordm9pZCBFd2tWaWV3Ojpv
bkV2YXNTbWFydFJlc2l6ZShFdmFzX09iamVjdCogZXZhc09iamVjdCwgRXZhc19Db29yZCB3aWR0
aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3Zl
RXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVudEluZm8pOwot
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX21vdmUpOwotICAg
IHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIG1vdmVFdmVudCk7CisgICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CisKKyAgICBldmFzX29iamVjdF9y
ZXNpemUoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3Rf
aW1hZ2Vfc2l6ZV9zZXQoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZh
c19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21hcnREYXRhLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IHRydWU7CisgICAgc21hcnRE
YXRhQ2hhbmdlZChzbWFydERhdGEpOworfQorCit2b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0TW92
ZShFdmFzX09iamVjdCogZXZhc09iamVjdCwgRXZhc19Db29yZCAvKngqLywgRXZhc19Db29yZCAv
KnkqLykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3Ojpz
bWFydERhdGEoZXZhc09iamVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhKTsKKworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IHRydWU7CisgICAg
c21hcnREYXRhQ2hhbmdlZChzbWFydERhdGEpOworfQorCit2b2lkIEV3a1ZpZXc6Om9uRXZhc1Nt
YXJ0Q2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEpOworCisgICAgRXdrVmlldyog
dmlldyA9IHRvRXdrVmlldyhzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHZpZXcpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IGZhbHNlOworCisgICAg
RXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5
X2dldChldmFzT2JqZWN0LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBpZiAoc21h
cnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uKSB7CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5w
b3NpdGlvbiA9IGZhbHNlOworICAgICAgICBzbWFydERhdGEtPnZpZXcueCA9IHg7CisgICAgICAg
IHNtYXJ0RGF0YS0+dmlldy55ID0geTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERh
dGEtPmltYWdlLCB4LCB5KTsKKyAgICB9CisKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnNp
emUpIHsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSBmYWxzZTsKKyAgICAgICAg
c21hcnREYXRhLT52aWV3LncgPSB3aWR0aDsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LmggPSBo
ZWlnaHQ7CisKKyAgICAgICAgaWYgKHZpZXctPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAg
ICAgICAgIHZpZXctPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShJbnRTaXplKHdpZHRo
LCBoZWlnaHQpLCBJbnRTaXplKCkpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgICAgICB2aWV3LT5zZXROZWVkc1N1cmZhY2VSZXNpemUoKTsKKyNlbmRpZgorI2lmIFVT
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICB2aWV3LT5wYWdlQ2xpZW50KCktPnVwZGF0
ZVZpZXdwb3J0U2l6ZSgpOworI2VuZGlmCisgICAgfQorfQorCit2b2lkIEV3a1ZpZXc6Om9uRXZh
c1NtYXJ0U2hvdyhFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKworICAgIGlmIChldmFzX29i
amVjdF9jbGlwZWVzX2dldChzbWFydERhdGEtPmJhc2UuY2xpcHBlcikpCisgICAgICAgIGV2YXNf
b2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3No
b3coc21hcnREYXRhLT5pbWFnZSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnRIaWRl
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEpOworCisgICAgZXZhc19vYmplY3RfaGlkZShzbWFy
dERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmlt
YWdlKTsKK30KKwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydENvbG9yU2V0KEV2YXNfT2JqZWN0
KiBldmFzT2JqZWN0LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpCit7
CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRh
KGV2YXNPYmplY3QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7
CisKKyAgICBFd2tWaWV3KiB2aWV3ID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odmlldyk7CisKKyAgICBhbHBoYSA9IGNsYW1wVG8oYWxwaGEs
IDAsIDI1NSk7CisgICAgcmVkID0gY2xhbXBUbyhyZWQsIDAsIGFscGhhKTsKKyAgICBncmVlbiA9
IGNsYW1wVG8oZ3JlZW4sIDAsIGFscGhhKTsKKyAgICBibHVlID0gY2xhbXBUbyhibHVlLCAwLCBh
bHBoYSk7CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFn
ZSwgYWxwaGEgPCAyNTUpOworICAgIHZpZXctPnBhZ2UoKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKHJl
ZCB8fCBncmVlbiB8fCBibHVlKTsKKyAgICB2aWV3LT5wYWdlKCktPnNldERyYXdzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKGFscGhhIDwgMjU1KTsKKworICAgIHBhcmVudFNtYXJ0Q2xhc3MuY29sb3Jf
c2V0KGV2YXNPYmplY3QsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKworRWluYV9Cb29s
IEV3a1ZpZXc6Om9uVmlld1NtYXJ0Rm9jdXNJbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEpCit7CisgICAgdG9Fd2tWaWV3KHNtYXJ0RGF0YSktPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hh
bmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRv
d0lzQWN0aXZlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9u
Vmlld1NtYXJ0Rm9jdXNPdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQoreworICAg
IHRvRXdrVmlldyhzbWFydERhdGEpLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdl
UHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydE1v
dXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQoreworICAgIEV3a1ZpZXcqIHNlbGYgPSB0b0V3a1Zp
ZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5wYWdlKCktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZl
V2ViV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgc2Vs
Zi0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jv
b2wgRXdrVmlldzo6b25WaWV3U21hcnRNb3VzZURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkKK3sKKyAgICBF
d2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgc2VsZi0+cGFnZSgpLT5o
YW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZG93bkV2ZW50LCBzZWxmLT50cmFu
c2Zvcm1Gcm9tU2NlbmUoKSwgc2VsZi0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOworICAgIHJldHVy
biB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6b25WaWV3U21hcnRNb3VzZVVwKEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBF
dmVudCkKK3sKKyAgICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAg
c2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQodXBFdmVu
dCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkp
KTsKKworICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gc2Vs
Zi0+aW5wdXRNZXRob2RDb250ZXh0KCk7CisgICAgaWYgKGlucHV0TWV0aG9kQ29udGV4dCkKKyAg
ICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVNb3VzZVVwRXZlbnQodXBFdmVudCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91
c2VNb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9N
b3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IHRvRXdrVmlldyhz
bWFydERhdGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJN
b3VzZUV2ZW50KG1vdmVFdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRy
YW5zZm9ybVRvU2NyZWVuKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3
a1ZpZXc6Om9uVmlld1NtYXJ0S2V5RG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEs
IGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCkKK3sKKyAgICBib29sIGlzRmls
dGVyZWQgPSBmYWxzZTsKKyAgICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7
CisgICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBzZWxmLT5p
bnB1dE1ldGhvZENvbnRleHQoKTsKKyAgICBpZiAoaW5wdXRNZXRob2RDb250ZXh0KQorICAgICAg
ICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRsZUtleURvd25FdmVudChkb3duRXZlbnQsICZpc0Zp
bHRlcmVkKTsKKworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50KGRvd25FdmVudCwgaXNGaWx0ZXJlZCkpOworICAgIHJldHVybiB0cnVl
OworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6b25WaWV3U21hcnRLZXlVcChFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KQorewor
ICAgIHRvRXdrVmlldyhzbWFydERhdGEpLT5wYWdlKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCh1cEV2ZW50KSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMTAwNCwyMCArMTM3MiwxNyBAQCB2b2lkIEV3a1Zp
ZXc6OmZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZlbnRfVHlwZSB0eXBlKQogCiB2b2lkIEV3
a1ZpZXc6Om9uVG91Y2hEb3duKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywg
RXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKIHsKLSAgICBFd2tW
aWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7Ci0gICAgdmlldy0+
ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9TVEFSVCk7CisgICAgdG9Fd2tWaWV3KGV3a1ZpZXcp
LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX1NUQVJUKTsKIH0KIAogdm9pZCBFd2tWaWV3Ojpv
blRvdWNoVXAodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVj
dCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQogewotICAgIEV3a1ZpZXcqIHZpZXcg
PSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3KTsKLSAgICB2aWV3LT5mZWVkVG91Y2hF
dmVudHMoRVdLX1RPVUNIX0VORCk7CisgICAgdG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hF
dmVudHMoRVdLX1RPVUNIX0VORCk7CiB9CiAKIHZvaWQgRXdrVmlldzo6b25Ub3VjaE1vdmUodm9p
ZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywg
dm9pZCogLyogZXZlbnRJbmZvICovKQotewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpm
cm9tRXZhc09iamVjdChld2tWaWV3KTsKLSAgICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RP
VUNIX01PVkUpOworeyAgICAKKyAgICB0b0V3a1ZpZXcoZXdrVmlldyktPmZlZWRUb3VjaEV2ZW50
cyhFV0tfVE9VQ0hfTU9WRSk7CiB9CiAjZW5kaWYKIApAQCAtMTA1OSwzICsxNDI0LDQ2IEBAIFBh
c3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogICAgIHJl
dHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAjZW5kaWYKIH0KKworRXZhc19TbWFydF9DbGFzcyBF
d2tWaWV3OjpwYXJlbnRTbWFydENsYXNzID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CisK
Ky8vIEZyZWUgRXdrIFZpZXcgZnVuY3Rpb25zLgorCitFd2tWaWV3KiB0b0V3a1ZpZXcoY29uc3Qg
RXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgaWYgKCFpc1ZpZXdFdmFzT2JqZWN0KGV2
YXNPYmplY3QpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB0b0V3a1ZpZXcoc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0
KGV2YXNPYmplY3QpKSk7Cit9CisKK0V3a1ZpZXcqIHRvRXdrVmlldyhjb25zdCBFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgcmV0dXJuIHNtYXJ0RGF0YSA/IHNtYXJ0RGF0
YS0+cHJpdiA6IDA7Cit9CisKK2Jvb2wgaXNWaWV3RXZhc09iamVjdChjb25zdCBFdmFzX09iamVj
dCogZXZhc09iamVjdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZh
c09iamVjdCwgZmFsc2UpOworCisgICAgY29uc3QgY2hhciogZXZhc09iamVjdFR5cGUgPSBldmFz
X29iamVjdF90eXBlX2dldChldmFzT2JqZWN0KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBldmFz
U21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXZhc09iamVjdCk7CisgICAgaWYg
KFVOTElLRUxZKCFldmFzU21hcnQpKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykg
aXMgbm90IGEgc21hcnQgb2JqZWN0ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZh
c09iamVjdFR5cGUgOiAiKG51bGwpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFz
c19nZXQoZXZhc1NtYXJ0KTsKKyAgICBpZiAoVU5MSUtFTFkoIXNtYXJ0Q2xhc3MpKSB7CisgICAg
ICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90IGEgc21hcnQgY2xhc3Mgb2JqZWN0ISIs
IGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwpIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkoc21hcnRD
bGFzcy0+ZGF0YSAhPSBzbWFydENsYXNzTmFtZSkpIHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgi
JXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3ZpZXcgKG5lZWQgJXAsIGdvdCAlcCkhIiwgZXZhc09i
amVjdCwgZXZhc09iamVjdFR5cGUgPyBldmFzT2JqZWN0VHlwZSA6ICIobnVsbCkiLAorICAgICAg
ICAgICAgc21hcnRDbGFzc05hbWUsIHNtYXJ0Q2xhc3MtPmRhdGEpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggOTljZThlZC4uMTc3OWU1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtOTQsNiArOTQsNyBAQCB0
eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2YXNfR0xfU3VyZmFjZTsKICNlbmRpZgog
CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7
Cit0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19TbWFydF9DbGFz
czsKIAogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6CkBAIC0xMDIsMTEgKzEwMywxNyBAQCBwdWJs
aWM6CiAgICAgICAgIExlZ2FjeUJlaGF2aW9yLAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAg
ICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4
dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBW
aWV3QmVoYXZpb3IpOwotICAgIH5Fd2tWaWV3KCk7CiAKLSAgICBzdGF0aWMgRXdrVmlldyogZnJv
bUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwotICAgIEV2YXNfT2JqZWN0KiB2
aWV3KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CisgICAgc3RhdGljIEV2YXNfT2JqZWN0KiBj
cmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAs
IFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAg
c3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAw
LCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworCisg
ICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRfQ2xh
c3MmKTsKKworICAgIHN0YXRpYyBjb25zdCBFdmFzX09iamVjdCogdG9FdmFzT2JqZWN0KFdLUGFn
ZVJlZik7CisKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0KTsKKworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KCkgeyBy
ZXR1cm4gbV9ldmFzT2JqZWN0OyB9CiAKICAgICBXS1BhZ2VSZWYgd2tQYWdlKCk7CiAgICAgV2Vi
S2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2VQcm94eS5nZXQoKTsgfQpA
QCAtMTQ2LDExICsxNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2Vi
Q29yZTo6Q3Vyc29yJiBjdXJzb3IpOwogICAgIHZvaWQgc2V0SW1hZ2VEYXRhKHZvaWQqIGltYWdl
RGF0YSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSk7CiAKLSAgICB2b2lkIHVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgpKTsKLQotICAg
IHN0YXRpYyB2b2lkIGFkZFRvUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldyk7Ci0gICAgc3RhdGlj
IHZvaWQgcmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKEV3a1ZpZXcqIHZpZXcpOwotICAgIHN0YXRpYyBj
b25zdCBFdmFzX09iamVjdCogdmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYpOwor
ICAgIHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QgPSBXZWJDb3JlOjpJ
bnRSZWN0KCkpOyAgIAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHZvaWQgZW50
ZXJGdWxsU2NyZWVuKCk7CkBAIC0yMTQsNyArMjE3LDEyIEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0gICAgaW5s
aW5lIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworICAgIEV3a1ZpZXco
RXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwg
UGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3Ip
OworICAgIC8vIFdpbGwgYmUgZGVsZXRlZCB3aGVuIEV2YXMgT2JqZWN0IGlzIGRlbGV0ZWQuCisg
ICAgfkV3a1ZpZXcoKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSgpIGNv
bnN0OworCiAgICAgdm9pZCBkaXNwbGF5VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxFd2tWaWV3
PiopOwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtMjIzLDE3ICsyMzEsMzUg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5mb3JtSWNvbkNoYW5nZSgpOwogCi0gICAgc3RhdGlj
IHZvaWQgb25Nb3VzZURvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCog
ZXZlbnRJbmZvKTsKLSAgICBzdGF0aWMgdm9pZCBvbk1vdXNlVXAodm9pZCogZGF0YSwgRXZhcyos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKLSAgICBzdGF0aWMgdm9pZCBvbk1vdXNl
TW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOwor
ICAgIC8vIEV2YXNfU21hcnRfQ2xhc3MgaW50ZXJmYWNlLgorICAgIHN0YXRpYyB2b2lkIG9uRXZh
c1NtYXJ0QWRkKEV2YXNfT2JqZWN0Kik7CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnREZWxl
dGUoRXZhc19PYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydE1vdmUoRXZhc19P
YmplY3QqLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSk7CisgICAgc3RhdGljIHZvaWQgb25F
dmFzU21hcnRSZXNpemUoRXZhc19PYmplY3QqLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3Jk
IGhlaWdodCk7CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnRTaG93KEV2YXNfT2JqZWN0Kik7
CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnRIaWRlKEV2YXNfT2JqZWN0Kik7CisgICAgc3Rh
dGljIHZvaWQgb25FdmFzU21hcnRDb2xvclNldChFdmFzX09iamVjdCosIGludCByZWQsIGludCBn
cmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSk7CisgICAgc3RhdGljIHZvaWQgb25FdmFzU21hcnRD
YWxjdWxhdGUoRXZhc19PYmplY3QqKTsKKworICAgIC8vIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGlu
dGVyZmFjZS4KKyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0Rm9jdXNJbihFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21h
cnRGb2N1c091dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpOworICAgIHN0YXRpYyBF
aW5hX0Jvb2wgb25WaWV3U21hcnRNb3VzZVdoZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCk7CisgICAgc3Rh
dGljIEVpbmFfQm9vbCBvblZpZXdTbWFydE1vdXNlRG93bihFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KTsKKyAgICBz
dGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0TW91c2VVcChFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpOworICAgIHN0YXRp
YyBFaW5hX0Jvb2wgb25WaWV3U21hcnRNb3VzZU1vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCk7CisgICAgc3Rh
dGljIEVpbmFfQm9vbCBvblZpZXdTbWFydEtleURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpOworICAgIHN0YXRp
YyBFaW5hX0Jvb2wgb25WaWV3U21hcnRLZXlVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KTsKKwogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAgICAgdm9pZCBmZWVkVG91Y2hFdmVudHMoRXdrX1RvdWNoX0V2ZW50X1R5cGUg
dHlwZSk7Ci0gICAgc3RhdGljIHZvaWQgb25Ub3VjaERvd24odm9pZCogLyogZGF0YSAqLywgRXZh
cyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZv
ICovKTsKLSAgICBzdGF0aWMgdm9pZCBvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywgRXZhcyog
LyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICov
KTsKLSAgICBzdGF0aWMgdm9pZCBvblRvdWNoTW92ZSh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAv
KiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8p
OworICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaFVwKHZvaWQq
IGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CisgICAgc3RhdGlj
IHZvaWQgb25Ub3VjaE1vdmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCog
ZXZlbnRJbmZvKTsKICNlbmRpZgogICAgIHN0YXRpYyB2b2lkIG9uRmF2aWNvbkNoYW5nZWQoY29u
c3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKTsKIAorcHJpdmF0ZToKICAgICAvLyBO
b3RlLCBpbml0aWFsaXphdGlvbiBvcmRlciBtYXR0ZXJzLgogICAgIEV2YXNfT2JqZWN0KiBtX2V2
YXNPYmplY3Q7CiAgICAgUmVmUHRyPEV3a0NvbnRleHQ+IG1fY29udGV4dDsKQEAgLTI4MCw2ICsz
MDYsMTMgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIGJvb2wgbV9pc0hhcmR3YXJlQWNjZWxlcmF0
ZWQ7CiAgICAgYm9vbCBtX3NldERyYXdzQmFja2dyb3VuZDsKKworICAgIHN0YXRpYyBFdmFzX1Nt
YXJ0X0NsYXNzIHBhcmVudFNtYXJ0Q2xhc3M7CiB9OwogCitFd2tWaWV3KiB0b0V3a1ZpZXcoY29u
c3QgRXZhc19PYmplY3QqKTsKK0V3a1ZpZXcqIHRvRXdrVmlldyhjb25zdCBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEpOworCitib29sIGlzVmlld0V2YXNPYmplY3QoY29uc3QgRXZhc19P
YmplY3QqIGV2YXNPYmplY3QpOworCiAjZW5kaWYgLy8gRXdrVmlld19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggZjBjZjFkNi4uYzUzZDg0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApA
QCAtMjUsOSArMjUsNiBAQAogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKICNpbmNsdWRlICJG
b3JtQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCi0jaW5j
bHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFn
ZUNsaWVudEJhc2UuaCIKICNpbmNsdWRlICJQYWdlTG9hZENsaWVudEVmbC5oIgogI2luY2x1ZGUg
IlBhZ2VQb2xpY3lDbGllbnRFZmwuaCIKQEAgLTUwLDcgKzQ3LDYgQEAKICNpbmNsdWRlICJld2tf
ZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKICNp
bmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZh
dGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2VH
cm91cC5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtNjgsNDgyICs2NCwzMSBA
QAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1z
dGF0aWMgY29uc3QgY2hhciBFV0tfVklFV19UWVBFX1NUUltdID0gIkVXSzJfVmlldyI7Ci0KLSNk
ZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhld2tWaWV3LCByZXN1bHQpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgYm9vbCByZXN1bHQgPSB0cnVlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFld2tWaWV3KSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5B
X0xPR19DUklUKCJudWxsIGlzIG5vdCBhIGV3a192aWV3Iik7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBl
ID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrVmlldyk7ICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgY29uc3QgRXZhc19TbWFydCogX3RtcF9zID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0
KGV3a1ZpZXcpOyAgICAgICBcCi0gICAgICAgIGlmIChFSU5BX1VOTElLRUxZKCFfdG1wX3MpKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
RUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2Jq
ZWN0ISIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIGV3
a1ZpZXcsIF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBf
dG1wX3NjID0gZXZhc19zbWFydF9jbGFzc19nZXQoX3RtcF9zKTsgICAgICAgIFwKLSAgICAgICAg
aWYgKEVJTkFfVU5MSUtFTFkoIV90bXBfc2MpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5
cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIGlmIChFSU5BX1VOTElLRUxZKF90bXBfc2MtPmRhdGEgIT0gRVdLX1ZJRVdfVFlQRV9TVFIp
KSB7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a192aWV3IChuZWVkICVwLCBnb3QgJXApISIs
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIGV3a1ZpZXcsIF90bXBfb3R5cGUgPyBfdG1w
X290eXBlIDogIihudWxsKSIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBF
V0tfVklFV19UWVBFX1NUUiwgX3RtcF9zYy0+ZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0
RGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJRVdf
VFlQRV9DSEVDSyhld2tWaWV3LCBfdG1wX3Jlc3VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IDA7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoX3RtcF9yZXN1bHQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHNtYXJ0RGF0YSA9IChFd2tfVmlld19TbWFydF9EYXRhKilldmFzX29iamVj
dF9zbWFydF9kYXRhX2dldChld2tWaWV3KQotCi0jZGVmaW5lIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAuLi4pICAgICAgICAgICAgICAgICAgICAgXAotICAg
IEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
ICghc21hcnREYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gc21hcnQgZGF0YSBm
b3Igb2JqZWN0ICVwICglcykiLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ICAgIGV3a1ZpZXcsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcpKTsgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JF
VFVSTihzbWFydERhdGEsIGltcGwsIC4uLikgICAgICAgICAgICAgICAgXAotICAgIGlmICghc21h
cnREYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgRUlOQV9MT0dfQ1JJVCgic21hcnQgZGF0YSBpcyBudWxsIik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBfX1ZB
X0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tWaWV3KiBpbXBsID0gc21hcnRE
YXRhLT5wcml2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIWltcGwpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIEVJTkFfTE9HX0NSSVQoIm5vIHByaXZhdGUgZGF0YSBmb3Igb2JqZWN0ICVwICglcykiLCAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxmLCBldmFzX29i
amVjdF90eXBlX2dldChzbWFydERhdGEtPnNlbGYpKTsgICAgICAgXAotICAgICAgICAgICAgcmV0
dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQogI2Rl
ZmluZSBFV0tfVklFV19JTVBMX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgaW1wbCwgLi4uKSAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tWaWV3KiBpbXBsID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRXdrVmll
dyogaW1wbCA9IHRvRXdrVmlldyhld2tWaWV3KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIF9fVkFfQVJHU19fKTsgICAgICAg
ICAgICBcCi0gICAgICAgIGltcGwgPSBzbWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIWltcGwpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoIm5vIHByaXZhdGUgZGF0YSBmb3Igb2JqZWN0ICVw
ICglcykiLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxm
LCBldmFzX29iamVjdF90eXBlX2dldChzbWFydERhdGEtPnNlbGYpKTsgICAgICAgXAorICAgICAg
ICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAiLCBld2tW
aWV3KTsgICAgICAgICAgIFwKICAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLS8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZv
ciBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0LgotdHlwZWRlZiBzdHJ1Y3QgRXdrX1BhZ2VfQ29u
dGVudHNfQ29udGV4dCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0OwotCi0vKgotICogQGJyaWVm
IFN0cnVjdHVyZSBjb250YWluaW5nIHBhZ2UgY29udGVudHMgY29udGV4dCB1c2VkIGZvciBld2tf
dmlld19wYWdlX2NvbnRlbnRzX2dldCgpIEFQSS4KLSAqLwotc3RydWN0IEV3a19QYWdlX0NvbnRl
bnRzX0NvbnRleHQgewotICAgIEV3a19QYWdlX0NvbnRlbnRzX1R5cGUgdHlwZTsKLSAgICBFd2tf
UGFnZV9Db250ZW50c19DYiBjYWxsYmFjazsKLX07Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9jaGFuZ2VkKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBpZiAo
c21hcnREYXRhLT5jaGFuZ2VkLmFueSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNtYXJ0RGF0YS0+
Y2hhbmdlZC5hbnkgPSB0cnVlOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQoc21hcnRE
YXRhLT5zZWxmKTsKLX0KLQotLy8gRGVmYXVsdCBFdmVudCBIYW5kbGluZy4KLXN0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRh
LCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShX
ZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0Fj
dGl2ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X2ZvY3VzX291dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAg
RVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2Up
OwotCi0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV93
aGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfV2hlZWwqIHdoZWVsRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5k
bGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQod2hlZWxFdmVudCwgaW1wbC0+dHJhbnNm
b3JtRnJvbVNjZW5lKCksIGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93bihF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93
biogZG93bkV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihz
bWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlTW91c2VF
dmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGRvd25FdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNj
ZW5lKCksIGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfdXAoRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50KQot
ewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGws
IGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJN
b3VzZUV2ZW50KHVwRXZlbnQsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFu
c2Zvcm1Ub1NjcmVlbigpKSk7Ci0KLSAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0
aG9kQ29udGV4dCA9IGltcGwtPmlucHV0TWV0aG9kQ29udGV4dCgpOwotICAgIGlmIChpbnB1dE1l
dGhvZENvbnRleHQpCi0gICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxlTW91c2VVcEV2
ZW50KHVwRXZlbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3NtYXJ0X21vdXNlX21vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCkKLXsKLSAgICBFV0tfVklF
V19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAg
ICBpbXBsLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChtb3Zl
RXZlbnQsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1NjcmVl
bigpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X2tleV9kb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZh
c19FdmVudF9LZXlfRG93biogZG93bkV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZ
X1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGJvb2wgaXNGaWx0
ZXJlZCA9IGZhbHNlOwotICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250
ZXh0ID0gaW1wbC0+aW5wdXRNZXRob2RDb250ZXh0KCk7Ci0gICAgaWYgKGlucHV0TWV0aG9kQ29u
dGV4dCkKLSAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVLZXlEb3duRXZlbnQoZG93
bkV2ZW50LCAmaXNGaWx0ZXJlZCk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZUtleWJvYXJk
RXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChkb3duRXZlbnQsIGlzRmlsdGVyZWQpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfa2V5
X3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlf
VXAqIHVwRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVLZXlib2Fy
ZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQodXBFdmVudCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLyBFdmVudCBIYW5kbGluZy4KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1
c19pbih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiAvKmV2ZW50SW5mbyov
KQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPmZvY3VzX2luKTsKLSAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4oc21hcnRE
YXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRh
LCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiAvKmV2ZW50SW5mbyovKQotewotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmZvY3Vz
X291dCk7Ci0gICAgc21hcnREYXRhLT5hcGktPmZvY3VzX291dChzbWFydERhdGEpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyosIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZl
bnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbCk7Ci0gICAgc21hcnREYXRhLT5hcGktPm1vdXNlX3do
ZWVsKHNtYXJ0RGF0YSwgd2hlZWxFdmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19v
bl9rZXlfZG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pCi17Ci0gICAgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8
RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24pOwotICAgIHNt
YXJ0RGF0YS0+YXBpLT5rZXlfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19vbl9rZXlfdXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0
Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50ID0g
c3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV91cCk7
Ci0gICAgc21hcnREYXRhLT5hcGktPmtleV91cChzbWFydERhdGEsIHVwRXZlbnQpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fc2hvdyh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiAvKmV2ZW50SW5mbyovKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBF
V0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsKTsKLSAgICBp
bXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2li
bGUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25faGlkZSh2b2lkKiBkYXRhLCBFdmFz
KiwgRXZhc19PYmplY3QqLCB2b2lkKiAvKmV2ZW50SW5mbyovKQotewotICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBp
bXBsKTsKLQotICAgIC8vIFRoaXMgY2FsbCBtYXkgbG9vayB3cm9uZywgYnV0IHdlIHJlYWxseSBu
ZWVkIHRvIHBhc3MgVmlld0lzVmlzaWJsZSBoZXJlLgotICAgIC8vIHZpZXdTdGF0ZURpZENoYW5n
ZSgpIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc2V0dGluZyB0aGUgdmlzaWJp
bGl0eSB0byBWaXNpYmxlIG9yIEhpZGRlbgotICAgIC8vIGRlcGVuZGluZyBvbiB3aGF0IFdlYlBh
Z2VQcm94eTo6aXNWaWV3VmlzaWJsZSgpIHJldHVybnMsIHRoaXMgc2ltcGx5IHRyaWdnZXJzIHRo
ZSBwcm9jZXNzLgotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQ
cm94eTo6Vmlld0lzVmlzaWJsZSk7Ci19Ci0KLXN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIGdfcGFy
ZW50U21hcnRDbGFzcyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotCi1zdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIGNvbnN0
IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcp
OwotICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNtYXJ0Q2xhc3MgPSBldmFzX3NtYXJ0X2Ns
YXNzX2dldChzbWFydCk7Ci0gICAgY29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqPihzbWFydENsYXNzKTsK
LSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIGlmICghc21h
cnREYXRhKSB7Ci0gICAgICAgIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAg
IGlmICghc21hcnREYXRhKSB7Ci0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJjb3VsZCBub3Qg
YWxsb2NhdGUgRXdrX1ZpZXdfU21hcnRfRGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7Ci0gICAgfQotCi0gICAgc21hcnREYXRhLT5zZWxmID0gZXdrVmlldzsKLSAgICBzbWFy
dERhdGEtPmFwaSA9IGFwaTsKLQotICAgIGdfcGFyZW50U21hcnRDbGFzcy5hZGQoZXdrVmlldyk7
Ci0KLSAgICBzbWFydERhdGEtPnByaXYgPSAwOwotCi0gICAgLy8gQ3JlYXRlIGV2YXNfb2JqZWN0
X2ltYWdlIHRvIGRyYXcgd2ViIGNvbnRlbnRzLgotICAgIHNtYXJ0RGF0YS0+aW1hZ2UgPSBldmFz
X29iamVjdF9pbWFnZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwotICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmltYWdlLCBmYWxzZSk7Ci0gICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZmlsbGVkX3NldChzbWFydERhdGEtPmltYWdlLCB0cnVlKTsKLSAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0YS0+aW1hZ2UsIGV3a1ZpZXcpOwotICAgIGV2
YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7Ci0KLSNkZWZpbmUgQ09OTkVDVChzLCBj
KSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdrVmlldywgcywgYywgc21hcnREYXRh
KQotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19JTiwgX2V3a192aWV3X29uX2ZvY3Vz
X2luKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VULCBfZXdrX3ZpZXdfb25f
Zm9jdXNfb3V0KTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9ld2tf
dmlld19vbl9tb3VzZV93aGVlbCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0tFWV9ET1dO
LCBfZXdrX3ZpZXdfb25fa2V5X2Rvd24pOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19LRVlf
VVAsIF9ld2tfdmlld19vbl9rZXlfdXApOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19TSE9X
LCBfZXdrX3ZpZXdfb25fc2hvdyk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0hJREUsIF9l
d2tfdmlld19vbl9oaWRlKTsKLSN1bmRlZiBDT05ORUNUCi19Ci0KLXN0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgaWYgKHNtYXJ0RGF0YSkKLSAgICAgICAgZGVs
ZXRlIHNtYXJ0RGF0YS0+cHJpdjsKLQotICAgIGdfcGFyZW50U21hcnRDbGFzcy5kZWwoZXdrVmll
dyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBldmFz
X29iamVjdF9pbWFnZV9zaXplX3NldChzbWFydERhdGEtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmltYWdlLCAwLCAwLCB3
aWR0aCwgaGVpZ2h0KTsKLQotICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gdHJ1ZTsKLSAg
ICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCAvKngq
LywgRXZhc19Db29yZCAvKnkqLykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0KLSAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSB0
cnVlOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotICAg
IEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwpOwotCi0g
ICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IGZhbHNlOwotCi0gICAgRXZhc19Db29yZCB4LCB5
LCB3aWR0aCwgaGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAm
eCwgJnksICZ3aWR0aCwgJmhlaWdodCk7Ci0KLSAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBv
c2l0aW9uKSB7Ci0gICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IGZhbHNlOwot
ICAgICAgICBzbWFydERhdGEtPnZpZXcueCA9IHg7Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy55
ID0geTsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERhdGEtPmltYWdlLCB4LCB5KTsK
LSAgICB9Ci0KLSAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnNpemUpIHsKLSAgICAgICAgc21h
cnREYXRhLT5jaGFuZ2VkLnNpemUgPSBmYWxzZTsKLSAgICAgICAgc21hcnREYXRhLT52aWV3Lncg
PSB3aWR0aDsKLSAgICAgICAgc21hcnREYXRhLT52aWV3LmggPSBoZWlnaHQ7Ci0KLSAgICAgICAg
aWYgKGltcGwtPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgICAgIGltcGwtPnBhZ2Uo
KS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBJbnRTaXpl
KCkpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBpbXBsLT5z
ZXROZWVkc1N1cmZhY2VSZXNpemUoKTsKLSNlbmRpZgotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQotICAgICAgICBpbXBsLT5wYWdlQ2xpZW50KCktPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwot
I2VuZGlmCi0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfc2hvdyhFdmFz
X09iamVjdCogZXdrVmlldykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7Ci0KLSAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc21hcnRE
YXRhLT5iYXNlLmNsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+
YmFzZS5jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOwot
fQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlkZShFdmFzX09iamVjdCogZXdrVmll
dykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
Ci0KLSAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKTsKLSAgICBl
dmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+aW1hZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc21hcnRfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQg
Z3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09S
X1JFVFVSTihzbWFydERhdGEsIGltcGwpOwotCi0gICAgaWYgKGFscGhhIDwgMCkKLSAgICAgICAg
YWxwaGEgPSAwOwotICAgIGVsc2UgaWYgKGFscGhhID4gMjU1KQotICAgICAgICBhbHBoYSA9IDI1
NTsKLQotI2RlZmluZSBDSEVDS19DT0xPUihjb2xvciwgYWxwaGEpIFwKLSAgICBpZiAoY29sb3Ig
PCAwKSAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbG9yID0gMDsgICAgICAgICAgICAgICAg
XAotICAgIGVsc2UgaWYgKGNvbG9yID4gYWxwaGEpICAgICAgIFwKLSAgICAgICAgY29sb3IgPSBh
bHBoYTsKLSAgICBDSEVDS19DT0xPUihyZWQsIGFscGhhKTsKLSAgICBDSEVDS19DT0xPUihncmVl
biwgYWxwaGEpOwotICAgIENIRUNLX0NPTE9SKGJsdWUsIGFscGhhKTsKLSN1bmRlZiBDSEVDS19D
T0xPUgotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2Us
IGFscGhhIDwgMjU1KTsKLSAgICBpbXBsLT5wYWdlKCktPnNldERyYXdzQmFja2dyb3VuZChyZWQg
fHwgZ3JlZW4gfHwgYmx1ZSk7Ci0gICAgaW1wbC0+cGFnZSgpLT5zZXREcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZChhbHBoYSA8IDI1NSk7Ci0KLSAgICBnX3BhcmVudFNtYXJ0Q2xhc3MuY29sb3Jf
c2V0KGV3a1ZpZXcsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChhcGksIGZhbHNlKTsKIAotICAgIGlmIChh
cGktPnZlcnNpb24gIT0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTikgewotICAgICAgICBF
SU5BX0xPR19DUklUKCJFd2tfVmlld19TbWFydF9DbGFzcyAlcCBpcyB2ZXJzaW9uICVsdSB3aGls
ZSAlbHUgd2FzIGV4cGVjdGVkLiIsCi0gICAgICAgICAgICAgYXBpLCBhcGktPnZlcnNpb24sIEVX
S19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIWdfcGFyZW50U21hcnRDbGFzcy5hZGQpKQotICAg
ICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmZ19wYXJlbnRTbWFydENs
YXNzKTsKLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZhcGktPnNj
KTsKLQotICAgIC8vIFNldCBFdmFzX1NtYXJ0X0NsYXNzIGZ1bmN0aW9ucy4KLSAgICBhcGktPnNj
LmFkZCA9IF9ld2tfdmlld19zbWFydF9hZGQ7Ci0gICAgYXBpLT5zYy5kZWwgPSBfZXdrX3ZpZXdf
c21hcnRfZGVsOwotICAgIGFwaS0+c2MubW92ZSA9IF9ld2tfdmlld19zbWFydF9tb3ZlOwotICAg
IGFwaS0+c2MucmVzaXplID0gX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZTsKLSAgICBhcGktPnNjLnNo
b3cgPSBfZXdrX3ZpZXdfc21hcnRfc2hvdzsKLSAgICBhcGktPnNjLmhpZGUgPSBfZXdrX3ZpZXdf
c21hcnRfaGlkZTsKLSAgICBhcGktPnNjLmNvbG9yX3NldCA9IF9ld2tfdmlld19zbWFydF9jb2xv
cl9zZXQ7Ci0gICAgYXBpLT5zYy5jYWxjdWxhdGUgPSBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRl
OwotICAgIGFwaS0+c2MuZGF0YSA9IEVXS19WSUVXX1RZUEVfU1RSOyAvLyBJdCBpcyB1c2VkIGJ5
IHR5cGUgY2hlY2tpbmcuCi0KLSAgICAvLyBTZXQgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgZnVuY3Rp
b25zLgotICAgIGFwaS0+Zm9jdXNfaW4gPSBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW47Ci0gICAg
YXBpLT5mb2N1c19vdXQgPSBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0OwotICAgIGFwaS0+bW91
c2Vfd2hlZWwgPSBfZXdrX3ZpZXdfc21hcnRfbW91c2Vfd2hlZWw7Ci0gICAgYXBpLT5tb3VzZV9k
b3duID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX2Rvd247Ci0gICAgYXBpLT5tb3VzZV91cCA9IF9l
d2tfdmlld19zbWFydF9tb3VzZV91cDsKLSAgICBhcGktPm1vdXNlX21vdmUgPSBfZXdrX3ZpZXdf
c21hcnRfbW91c2VfbW92ZTsKLSAgICBhcGktPmtleV9kb3duID0gX2V3a192aWV3X3NtYXJ0X2tl
eV9kb3duOwotICAgIGFwaS0+a2V5X3VwID0gX2V3a192aWV3X3NtYXJ0X2tleV91cDsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIGNyZWF0ZUV3a1Zp
ZXdTbWFydENsYXNzKHZvaWQpCi17Ci0gICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGFw
aSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFd2tfVmlldyIpOwot
ICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VM
WSghc21hcnQpKSB7Ci0gICAgICAgIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldCgmYXBpKTsKLSAg
ICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gc21hcnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3
a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250
ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpW
aWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCi17Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoY29udGV4dCwgMCk7Ci0KLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IGV2
YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZXdrVmlldywgMCk7Ci0KLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc21hcnREYXRhKTsKLSAgICBpZiAoIXNtYXJ0RGF0YSkgewotICAgICAgICBldmFzX29iamVj
dF9kZWwoZXdrVmlldyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEFTU0VSVCgh
c21hcnREYXRhLT5wcml2KTsKLQotICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3VwIGlzIGNyZWF0
ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlzIDAsCi0g
ICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCi0gICAgc21hcnREYXRh
LT5wcml2ID0gbmV3IEV3a1ZpZXcoZXdrVmlldywgY29udGV4dCwgdG9JbXBsKHBhZ2VHcm91cFJl
ZiksIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gZXdrVmlldzsKLX0KLQotLyoqCi0gKiBAaW50ZXJu
YWwKLSAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRoIFdLVHlwZSBwYXJh
bWV0ZXJzLgotICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFz
LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBF
d2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1Zp
ZXcoY2FudmFzLCBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcygpLCBjb250ZXh0UmVmID8gRXdrQ29u
dGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKSwg
cGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CisgICAgcmV0dXJuIEV3a1ZpZXc6OmluaXRTbWFydENs
YXNzSW50ZXJmYWNlKCphcGkpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRk
KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQog
ewotICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2Fz
dDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFz
T2JqZWN0KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4
dCkpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBj
YW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBld2tfdmlld19zbWFy
dF9hZGQoY2FudmFzLCBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcygpLCBld2tfb2JqZWN0X2Nhc3Q8
RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09i
amVjdChjYW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOwogfQog
CiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkKEV2YXMqIGNhbnZhcykKQEAgLTgyMCw4ICszNjUs
NyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfZmVlZF90b3VjaF9ldmVudChFdmFzX09iamVjdCogZXdr
VmlldywgRXdrX1RvdWNoX0V2ZW50X1R5cGUgdAogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBvaW50cywgZmFsc2UpOwotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7Ci0g
ICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFs
c2UpOworICAgIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCBmYWxz
ZSk7CiAKICAgICBpbXBsLT5wYWdlKCktPmhhbmRsZVRvdWNoRXZlbnQoTmF0aXZlV2ViVG91Y2hF
dmVudCh0eXBlLCBwb2ludHMsIG1vZGlmaWVycywgaW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5lKCks
IGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCksIGVjb3JlX3RpbWVfZ2V0KCkpKTsKIApAQCAtOTM4
LDYgKzQ4MiwxNyBAQCB2b2lkIGV3a192aWV3X2RyYXdzX3BhZ2VfYmFja2dyb3VuZF9zZXQoRXZh
c19PYmplY3QgKmV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGVkKQogICAgIGltcGwtPnNldERyYXdz
QmFja2dyb3VuZChlbmFibGVkKTsKIH0KIAorLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3
a19QYWdlX0NvbnRlbnRzX0NvbnRleHQuCit0eXBlZGVmIHN0cnVjdCBFd2tfUGFnZV9Db250ZW50
c19Db250ZXh0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQ7CisKKy8qCisgKiBAYnJpZWYgU3Ry
dWN0dXJlIGNvbnRhaW5pbmcgcGFnZSBjb250ZW50cyBjb250ZXh0IHVzZWQgZm9yIGV3a192aWV3
X3BhZ2VfY29udGVudHNfZ2V0KCkgQVBJLgorICovCitzdHJ1Y3QgRXdrX1BhZ2VfQ29udGVudHNf
Q29udGV4dCB7CisgICAgRXdrX1BhZ2VfQ29udGVudHNfVHlwZSB0eXBlOworICAgIEV3a19QYWdl
X0NvbnRlbnRzX0NiIGNhbGxiYWNrOworfTsKKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIENhbGxi
YWNrIGZ1bmN0aW9uIHVzZWQgZm9yIGV3a192aWV3X3BhZ2VfY29udGVudHNfZ2V0KCkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYjRjOTcuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaWZuZGVmIGV3a192aWV3X3ByaXZhdGVfaAotI2RlZmluZSBld2tf
dmlld19wcml2YXRlX2gKLQotI2luY2x1ZGUgIkV3a1ZpZXcuaCIKLSNpbmNsdWRlIDxFdmFzLmg+
Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KLQotRXZhc19PYmplY3QqIGV3a192aWV3X2Jh
c2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgRXdrVmll
dzo6Vmlld0JlaGF2aW9yKTsKLQotI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAK
aW5kZXggZWZkNmQzMi4uZTQ4ZGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQg
QmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwg
Y29uc3QgVXBkYXRlSW5mbyYKIAogI2lmIFBMQVRGT1JNKEVGTCkKICAgICAvLyBVcGRhdGUgZXdr
X3ZpZXcgd2l0aCBuZXcgYmFja2luZ1N0b3JlIGltYWdlLgotICAgIEV3a1ZpZXcqIHZpZXcgPSBF
d2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX3dlYlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKKyAg
ICBFd2tWaWV3KiB2aWV3ID0gdG9Fd2tWaWV3KG1fd2ViUGFnZVByb3h5LT52aWV3V2lkZ2V0KCkp
OwogICAgIHZpZXctPnNldEltYWdlRGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1f
YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSksIG1fc2l6ZSk7CiAjZW5kaWYKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRF
ZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVu
dEVmbC5jcHAKaW5kZXggMjU5ZTQxMi4uMmNjNGIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHAKQEAgLTUz
LDcgKzUzLDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEoV0tDb250ZXh0UmVmLCBXS1BhZ2UKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmVmUHRyPEV3a05hdmlnYXRpb25EYXRhPiBuYXZpZ2F0aW9uRGF0YUV3ayA9IEV3a05hdmln
YXRpb25EYXRhOjpjcmVhdGUobmF2aWdhdGlvbkRhdGEpOwotICAgIGhpc3RvcnlDbGllbnQtPm1f
bmF2aWdhdGUoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgbmF2aWdhdGlvbkRh
dGFFd2suZ2V0KCksIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGll
bnQtPm1fbmF2aWdhdGUoRXdrVmlldzo6dG9FdmFzT2JqZWN0KHBhZ2UpLCBuYXZpZ2F0aW9uRGF0
YUV3ay5nZXQoKSwgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4
dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS0NvbnRleHRSZWYs
IFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9u
VVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtNjYsNyArNjYsNyBA
QCB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Qo
V0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcAogICAgIFdLRWluYVNoYXJlZFN0cmluZyBzb3VyY2VV
UkxTdHJpbmcoc291cmNlVVJMKTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb25V
UkxTdHJpbmcoZGVzdGluYXRpb25VUkwpOwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV9jbGllbnRS
ZWRpcmVjdChFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKHBhZ2UpLCBzb3VyY2VVUkxTdHJp
bmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAg
ICBoaXN0b3J5Q2xpZW50LT5tX2NsaWVudFJlZGlyZWN0KEV3a1ZpZXc6OnRvRXZhc09iamVjdChw
YWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVu
dC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBl
cmZvcm1TZXJ2ZXJSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJl
ZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQpAQCAtNzksNyArNzksNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5Q2xp
ZW50RWZsOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYg
cAogICAgIFdLRWluYVNoYXJlZFN0cmluZyBzb3VyY2VVUkxTdHJpbmcoc291cmNlVVJMKTsKICAg
ICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb25VUkxTdHJpbmcoZGVzdGluYXRpb25VUkwp
OwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV9zZXJ2ZXJSZWRpcmVjdChFd2tWaWV3Ojp2aWV3RnJv
bVBhZ2VWaWV3TWFwKHBhZ2UpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5n
LCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX3NlcnZl
clJlZGlyZWN0KEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBk
ZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZv
aWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS0NvbnRl
eHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBX
S0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtOTIsNyArOTIsNyBAQCB2b2lk
IENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0
UmVmLCBXS1BhZ2VSZWYgcGFnZQogICAgIFdLRWluYVNoYXJlZFN0cmluZyB0aXRsZVN0cmluZyh0
aXRsZSk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZ1VSTChVUkwpOwogCi0gICAgaGlz
dG9yeUNsaWVudC0+bV90aXRsZVVwZGF0ZWQoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChw
YWdlKSwgdGl0bGVTdHJpbmcsIHN0cmluZ1VSTCwgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7
CisgICAgaGlzdG9yeUNsaWVudC0+bV90aXRsZVVwZGF0ZWQoRXdrVmlldzo6dG9FdmFzT2JqZWN0
KHBhZ2UpLCB0aXRsZVN0cmluZywgc3RyaW5nVVJMLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRh
KTsKIH0KIAogdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6cG9wdWxhdGVWaXNpdGVkTGlu
a3MoV0tDb250ZXh0UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAppbmRleCA1NjhlNGFlLi4yNmI3
ZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRC
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNl
LmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIGJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld0luV2lu
ZG93KCkKIHZvaWQgUGFnZUNsaWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCgpCiB7CiAgICAgLy8g
Q2hlY2sgaWYgbG9hZGluZyB3YXMgb25nb2luZywgd2hlbiB3ZWIgcHJvY2VzcyBjcmFzaGVkLgot
ICAgIGRvdWJsZSBsb2FkUHJvZ3Jlc3MgPSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX3Zp
ZXctPnZpZXcoKSk7CisgICAgZG91YmxlIGxvYWRQcm9ncmVzcyA9IGV3a192aWV3X2xvYWRfcHJv
Z3Jlc3NfZ2V0KG1fdmlldy0+ZXZhc09iamVjdCgpKTsKICAgICBpZiAobG9hZFByb2dyZXNzID49
IDAgJiYgbG9hZFByb2dyZXNzIDwgMSkgewogICAgICAgICBsb2FkUHJvZ3Jlc3MgPSAxOwogICAg
ICAgICBtX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8TG9hZFByb2dyZXNzPigpLmNhbGwoJmxvYWRQcm9n
cmVzcyk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBQYWdlQ2xpZW50QmFzZTo6cHJvY2Vzc0Rp
ZENyYXNoKCkKICAgICAgICAgV0FSTigiV0FSTklORzogVGhlIHdlYiBwcm9jZXNzIGV4cGVyaWVu
Y2VkIGEgY3Jhc2ggb24gJyVzJy5cbiIsIHVybC5kYXRhKCkpOwogCiAgICAgICAgIC8vIERpc3Bs
YXkgYW4gZXJyb3IgcGFnZQotICAgICAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKG1fdmll
dy0+dmlldygpLCAiVGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkp
OworICAgICAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKG1fdmlldy0+ZXZhc09iamVjdCgp
LCAiVGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENs
aWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50
RWZsLmNwcAppbmRleCA1OTliZTM0Li5iODgxNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBA
IHZvaWQgUGFnZUxvYWRDbGllbnRFZmw6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VS
ZWYsIFdLQmFja0ZvcndhcmRMaXN0SXRlCiAgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRD
bGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKICAgICBBU1NFUlQodmlldyk7CiAKLSAgICBF
d2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QgPSBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9n
ZXQodmlldy0+dmlldygpKTsKKyAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QgPSBld2tf
dmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQodmlldy0+ZXZhc09iamVjdCgpKTsKICAgICBBU1NF
UlQobGlzdCk7CiAgICAgbGlzdC0+dXBkYXRlKGFkZGVkSXRlbSwgcmVtb3ZlZEl0ZW1zKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmlu
ZGV4IDFlMDA4YzQuLjg3OTA0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKQEAgLTk0LDE3ICs5NCwxNyBAQCB2b2lkIFBhZ2VVSUNs
aWVudEVmbDo6Y2xvc2UoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogdm9pZCBQ
YWdlVUlDbGllbnRFZmw6OnRha2VGb2N1cyhXS1BhZ2VSZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgaXMgb25seSBhIHBh
cnRpYWwgaW1wbGVtZW50YXRpb24uCi0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnZpZXcoKSwgZmFsc2UpOworICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT5l
dmFzT2JqZWN0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OmZvY3VzKFdL
UGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9mb2N1
c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCB0cnVl
KTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlldy0+ZXZhc09iamVjdCgpLCB0cnVlKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRF
Zmw6OnVuZm9jdXMoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGV2
YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3
LT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGll
bnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+ZXZhc09iamVjdCgpLCBmYWxzZSk7CiB9CiAKIHZv
aWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBXS1N0cmlu
Z1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5RWZsLmNwcAppbmRleCAwMDUwMjgzLi5lNmViNTcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eUVmbC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5OjplbnRlckZ1bGxTY3JlZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICB3aWxsRW50
ZXJGdWxsU2NyZWVuKCk7Ci0gICAgRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+
ZW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdG9Fd2tWaWV3KG1fd2ViVmlldyktPmVudGVyRnVsbFNj
cmVlbigpOwogICAgIGRpZEVudGVyRnVsbFNjcmVlbigpOwogfQogCkBAIC02OCw3ICs2OCw3IEBA
IHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4oKQogCiAKICAg
ICB3aWxsRXhpdEZ1bGxTY3JlZW4oKTsKLSAgICBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX3dl
YlZpZXcpLT5leGl0RnVsbFNjcmVlbigpOworICAgIHRvRXdrVmlldyhtX3dlYlZpZXcpLT5leGl0
RnVsbFNjcmVlbigpOwogICAgIGRpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5k
ZXggNDYyYjI2ZC4uMmIzZjgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2lu
Y2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRl
ICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5j
bHVkZSAiZXdrX3ZpZXcuaCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTQsMTIg
Kzk0LDE3IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
SW5zcGVjdG9yUGFnZSgpCiAgICAgLy8gR3JhY2VmdWxseSBmYWxsIGJhY2sgdG8gc29mdHdhcmUg
aWYgZXZhc19nbCBlbmdpbmUgaXMgbm90IGF2YWlsYWJsZS4KICAgICBpZiAoIW1faW5zcGVjdG9y
V2luZG93KQogI2VuZGlmCi0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gZWNvcmVfZXZhc19u
ZXcoMCwgMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LCAwKTsK
KyAgICBtX2luc3BlY3RvcldpbmRvdyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIGluaXRpYWxX
aW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwgMCk7CiAgICAgaWYgKCFtX2luc3BlY3Rv
cldpbmRvdykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX2luc3BlY3RvclZpZXcgPSBld2tf
dmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIHRvQVBJKHBh
Z2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSks
IEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLSAgICBFd2tWaWV3KiBpbnNwZWN0b3JWaWV3SW1w
bCA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG1faW5zcGVjdG9yVmlldyk7CisgICAgV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsK
KyAgICBtX2luc3BlY3RvclZpZXcgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGVjb3JlX2V2
YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNyZWF0
ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHRvQVBJKGluc3Bl
Y3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOworICAgIGlmICghbV9p
bnNwZWN0b3JWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV3a1ZpZXcqIGluc3BlY3Rv
clZpZXdJbXBsID0gdG9Fd2tWaWV3KG1faW5zcGVjdG9yVmlldyk7CisgICAgQVNTRVJUKGluc3Bl
Y3RvclZpZXdJbXBsKTsKICAgICBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1Rf
VEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKIAogICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3Mg
PSBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0dGluZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcAppbmRleCBhMzMyNzI0Li5kZTcwY2ExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3Bw
CkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBFdmFzX09iamVjdCogV2Vi
UGFnZVByb3h5Ojp2aWV3V2lkZ2V0KCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFnZUNs
aWVudEJhc2UqPihtX3BhZ2VDbGllbnQpLT52aWV3KCktPnZpZXcoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UGFnZUNsaWVudEJhc2UqPihtX3BhZ2VDbGllbnQpLT52aWV3KCktPmV2YXNPYmpl
Y3QoKTsKIH0KIAogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3Qg
U3RyaW5nJiAvKmFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCovKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186595</attachid>
            <date>2013-02-05 04:21:45 -0800</date>
            <delta_ts>2013-02-05 07:27:07 -0800</delta_ts>
            <desc>patch v3</desc>
            <filename>bug108062_v3</filename>
            <type>text/plain</type>
            <size>70110</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDExODZlOWZiZjU0NmE1NWU1NmEwZTBmZjY0ZmJjMjlmNjdkNjIwYmMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGM1NmJmNzUuLjYwNTdhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMy0w
Mi0wMSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXSzJdIEVuY2Fwc3VsYXRlIEV3ayBWaWV3IGV2YXMgc21hcnQgb2Jq
ZWN0IGNvZGUgaW5zaWRlIEV3a1ZpZXcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBFd2sgVmlldyBpbXBsZW1lbnRhdGlvbiBpcyBlbmNh
cHN1bGF0ZWQgd2l0aGluIEV3a1ZpZXcgY2xhc3MuCisgICAgICAgIEJlc2lkZXMgbXVsdGlwbGUg
cmVmYWN0b3Jpbmcgb2YgRXdrIFZpZXcgZXZhcyBzbWFydCBvYmplY3QgY29kZSB3YXMgbWFkZS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgorICAg
ICAgICAoV0tWaWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChzbWFydERh
dGFDaGFuZ2VkKToKKyAgICAgICAgKGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UpOgorICAgICAg
ICAoRXdrVmlld0V2ZW50SGFuZGxlcik6CisgICAgICAgIChFd2tWaWV3RXZlbnRIYW5kbGVyOjpz
dWJzY3JpYmUpOgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcjo6dW5zdWJzY3JpYmUpOgor
ICAgICAgICAoOjpvbkV2ZW50KToKKyAgICAgICAgKEV3a1ZpZXc6OkV3a1ZpZXcpOgorICAgICAg
ICAoRXdrVmlldzo6fkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6Y3JlYXRlRXZhc09iamVj
dCk6CisgICAgICAgIChFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVyZmFjZSk6CisgICAgICAg
IChFd2tWaWV3Ojp0b0V2YXNPYmplY3QpOgorICAgICAgICAoRXdrVmlldzo6c21hcnREYXRhKToK
KyAgICAgICAgKEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZCk6CisgICAgICAgIChFd2tW
aWV3OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0QWRkKToK
KyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0RGVsZXRlKToKKyAgICAgICAgKEV3a1ZpZXc6
Om9uRXZhc1NtYXJ0UmVzaXplKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0TW92ZSk6
CisgICAgICAgIChFd2tWaWV3OjpvbkV2YXNTbWFydENhbGN1bGF0ZSk6CisgICAgICAgIChFd2tW
aWV3OjpvbkV2YXNTbWFydFNob3cpOgorICAgICAgICAoRXdrVmlldzo6b25FdmFzU21hcnRIaWRl
KToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0Q29sb3JTZXQpOgorICAgICAgICAoRXdr
Vmlldzo6b25WaWV3U21hcnRGb2N1c0luKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uVmlld1NtYXJ0
Rm9jdXNPdXQpOgorICAgICAgICAoRXdrVmlldzo6b25WaWV3U21hcnRNb3VzZVdoZWVsKToKKyAg
ICAgICAgKEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VEb3duKToKKyAgICAgICAgKEV3a1ZpZXc6
Om9uVmlld1NtYXJ0TW91c2VVcCk6CisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydE1vdXNl
TW92ZSk6CisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydEtleURvd24pOgorICAgICAgICAo
RXdrVmlldzo6b25WaWV3U21hcnRLZXlVcCk6CisgICAgICAgIChFd2tWaWV3OjpvblRvdWNoRG93
bik6CisgICAgICAgIChFd2tWaWV3OjpvblRvdWNoVXApOgorICAgICAgICAoRXdrVmlldzo6b25U
b3VjaE1vdmUpOgorICAgICAgICAodG9Fd2tWaWV3KToKKyAgICAgICAgKGlzVmlld0V2YXNPYmpl
Y3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3
a1ZpZXc6OmV2YXNPYmplY3QpOgorICAgICAgICAoRXdrVmlldyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdfc21hcnRfY2xhc3Nf
c2V0KToKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisgICAgICAgIChld2tfdmlld19h
ZGRfd2l0aF9jb250ZXh0KToKKyAgICAgICAgKGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQpOgor
ICAgICAgICAoRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdT
dG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvQ29udGV4
dEhpc3RvcnlDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlzdG9yeUNs
aWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6Q29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRV
cGRhdGVIaXN0b3J5VGl0bGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJh
c2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6cHJvY2Vzc0RpZENyYXNo
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCk6
CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnRha2VGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbDo6Zm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6
OnVuZm9jdXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6
OmVudGVyRnVsbFNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHk6OmV4aXRGdWxsU2NyZWVuKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3Bl
Y3RvclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJQ
YWdlUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZXdXaWRn
ZXQpOgorCiAyMDEzLTAyLTA0ICBHd2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAw
Lm5ldD4KIAogICAgICAgICBDb29yZGluYXRlZCBHcmFwaGljcyA6IGRpc2Nvbm5lY3RDdXN0b21G
aWx0ZXJQcm9ncmFtIGRvZXMgbm90IGRvIGFueXRoaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IDljMWQzMWQuLmE5MmVlYjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTIyLDI3
ICsyMiwyNyBAQAogCiAjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5o
IgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9w
cml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0g
ICAgRXdrVmlldyogZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJl
ZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYgKCFld2tW
aWV3KQorICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3JlYXRlRXZhc09i
amVjdChjYW52YXMsIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikg
OiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6Okxl
Z2FjeUJlaGF2aW9yKTsKKyAgICBpZiAoIWV2YXNPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4oZXdrVmlldy0+d2tW
aWV3KCkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3
a1ZpZXcoZXZhc09iamVjdCktPndrVmlldygpKSk7CiB9CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVh
dGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBl
d2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmll
dzo6RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBpZiAoIWV3a1ZpZXcpCisgICAgRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgY29udGV4dFJl
ZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRD
b250ZXh0KCksIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOworICAgIGlm
ICghZXZhc09iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V0tWaWV3UmVmPihXS1JldGFpbihld2tWaWV3LT53a1ZpZXcoKSkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdLUmV0YWluKHRvRXdrVmlldyhldmFzT2JqZWN0KS0+d2tW
aWV3KCkpKTsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQpA
QCAtNzcsNiArNzcsNiBAQCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdS
ZWYgdmlld1JlZikKIAogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYg
dmlld1JlZikKIHsKLSAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmpl
Y3QodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIEV3a1ZpZXcqIGV3a1ZpZXcg
PSB0b0V3a1ZpZXcodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOwogICAgIHJldHVybiBX
S0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQo
KSwgMCAvKiBvcHRpb25zICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAKaW5kZXggMDQ2Njk0ZDcuLmNlYWZhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yNyw2ICsyNyw5IEBACiAjaW5j
bHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKICNpbmNs
dWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50LmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5h
dGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1
ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRMZWdhY3lJ
bXBsLmgiCkBAIC01Nyw3ICs2MCw2IEBACiAjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9w
cml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKICNpbmNsdWRlICJl
d2tfdmlldy5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tf
d2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5j
bHVkZSA8RWNvcmVfWC5oPgpAQCAtNjYsNiArNjgsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNp
bmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoVklCUkFUSU9OKQog
I2luY2x1ZGUgIlZpYnJhdGlvbkNsaWVudEVmbC5oIgpAQCAtODMsNDMgKzg3LDE1OCBAQCB1c2lu
ZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RhdGljIGNvbnN0IGNoYXIgc21hcnRDbGFzc05h
bWVbXSA9ICJFV0syX1ZpZXciOwogc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6ZSA9
IDE2OwogCi10eXBlZGVmIEhhc2hNYXA8V0tQYWdlUmVmLCBFdmFzX09iamVjdCo+IFBhZ2VWaWV3
TWFwOworLy8gQXV4aWxpYXJ5IGZ1bmN0aW9ucy4KIAotc3RhdGljIGlubGluZSBQYWdlVmlld01h
cCYgcGFnZVZpZXdNYXAoKQorc3RhdGljIGlubGluZSB2b2lkIHNtYXJ0RGF0YUNoYW5nZWQoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
UGFnZVZpZXdNYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7CisgICAgQVNTRVJUKHNtYXJ0
RGF0YSk7CisKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLmFueSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IHRydWU7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2hhbmdlZChzbWFydERhdGEtPnNlbGYpOwogfQogCi12b2lkIEV3a1ZpZXc6OmFkZFRv
UGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykKK3N0YXRpYyBFdmFzX1NtYXJ0KiBkZWZhdWx0U21h
cnRDbGFzc0luc3RhbmNlKCkKIHsKLSAgICBQYWdlVmlld01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IHBhZ2VWaWV3TWFwKCkuYWRkKHZpZXctPndrUGFnZSgpLCB2aWV3LT52aWV3KCkpOwotICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgc3RhdGljIEV3a19W
aWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJT
SU9OKHNtYXJ0Q2xhc3NOYW1lKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwor
CisgICAgaWYgKCFzbWFydCkgeworICAgICAgICBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVy
ZmFjZShhcGkpOworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2Mp
OworICAgIH0KKworICAgIHJldHVybiBzbWFydDsKIH0KIAotdm9pZCBFd2tWaWV3OjpyZW1vdmVG
cm9tUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykKKy8vIEV3a1ZpZXdFdmVudEhhbmRsZXIgaW1w
bGVtZW50YXRpb24uCisKK3RlbXBsYXRlIDxFdmFzX0NhbGxiYWNrX1R5cGUgRXZlbnRUeXBlPgor
Y2xhc3MgRXdrVmlld0V2ZW50SGFuZGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc3Vi
c2NyaWJlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIHsKKyAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfYWRkKGV2YXNPYmplY3QsIEV2ZW50VHlwZSwgb25FdmVudCwgRXdr
Vmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1
bnN1YnNjcmliZShFdmFzX09iamVjdCogZXZhc09iamVjdCkKKyAgICB7CisgICAgICAgIGV2YXNf
b2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChldmFzT2JqZWN0LCBFdmVudFR5cGUsIG9uRXZlbnQp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKK307CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3
a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOPjo6b25FdmVudCh2b2lk
KiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgQVNT
RVJUKHBhZ2VWaWV3TWFwKCkuY29udGFpbnModmlldy0+d2tQYWdlKCkpKTsKLSAgICBwYWdlVmll
d01hcCgpLnJlbW92ZSh2aWV3LT53a1BhZ2UoKSk7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Eb3du
KiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudElu
Zm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPm1vdXNlX2Rvd24pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKHNt
YXJ0RGF0YSwgZG93bkV2ZW50KTsKIH0KIAotY29uc3QgRXZhc19PYmplY3QqIEV3a1ZpZXc6OnZp
ZXdGcm9tUGFnZVZpZXdNYXAoY29uc3QgV0tQYWdlUmVmIHBhZ2UpCit0ZW1wbGF0ZSA8Pgordm9p
ZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVA+OjpvbkV2ZW50KHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBB
U1NFUlQocGFnZSk7CisgICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0YXRpY19j
YXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRh
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX3VwKTsKKyAg
ICBzbWFydERhdGEtPmFwaS0+bW91c2VfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsKK30KIAotICAg
IHJldHVybiBwYWdlVmlld01hcCgpLmdldChwYWdlKTsKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1Zp
ZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6b25FdmVudCh2b2lkKiBk
YXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19F
dmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNl
X01vdmUqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX21vdmUpOworICAgIHNtYXJ0RGF0YS0+YXBp
LT5tb3VzZV9tb3ZlKHNtYXJ0RGF0YSwgbW92ZUV2ZW50KTsKIH0KIAotRXdrVmlldzo6RXdrVmll
dyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQ
YWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFz
T2JqZWN0KHZpZXcpCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNf
Q0FMTEJBQ0tfRk9DVVNfSU4+OjpvbkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVj
dCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGktPmZvY3VzX2luKTsKKyAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNf
aW4oc21hcnREYXRhKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxl
cjxFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVD46Om9uRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2
YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsKKyAgICBzbWFydERhdGEtPmFw
aS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdF
dmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTD46Om9uRXZlbnQodm9pZCogZGF0
YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZl
bnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNl
X1doZWVsKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbCk7CisgICAgc21hcnREYXRhLT5h
cGktPm1vdXNlX3doZWVsKHNtYXJ0RGF0YSwgd2hlZWxFdmVudCk7Cit9CisKK3RlbXBsYXRlIDw+
Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlfRE9XTj46Om9uRXZl
bnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQorewor
ICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9kb3duKTsKKyAgICBzbWFydERhdGEt
PmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQpOworfQorCit0ZW1wbGF0ZSA8Pgor
dm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfS0VZX1VQPjo6b25FdmVudCh2
b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAg
RXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9V
cCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaS0+a2V5X3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X3Vw
KHNtYXJ0RGF0YSwgdXBFdmVudCk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVu
dEhhbmRsZXI8RVZBU19DQUxMQkFDS19TSE9XPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwg
RXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgdG9Fd2tW
aWV3KHNtYXJ0RGF0YSktPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6
Vmlld0lzVmlzaWJsZSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRs
ZXI8RVZBU19DQUxMQkFDS19ISURFPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19P
YmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisKKyAgICAvLyBXZSBuZWVk
IHRvIHBhc3MgVmlld0lzVmlzaWJsZSBoZXJlLiB2aWV3U3RhdGVEaWRDaGFuZ2UoKSBpdHNlbGYg
aXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNldHRpbmcgdGhlIHZpc2liaWxpdHkgdG8gVmlz
aWJsZSBvciBIaWRkZW4KKyAgICAvLyBkZXBlbmRpbmcgb24gd2hhdCBXZWJQYWdlUHJveHk6Omlz
Vmlld1Zpc2libGUoKSByZXR1cm5zLCB0aGlzIHNpbXBseSB0cmlnZ2VycyB0aGUgcHJvY2Vzcy4K
KyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2Vi
UGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKK30KKworLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlv
bi4KKworRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhh
dmlvciBiZWhhdmlvcikKKyAgICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQogICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwg
bV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKICNlbmRpZgogICAgICwgbV9wYWdlQ2xpZW50
KGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3Jl
YXRlKHRoaXMpIDogUGFnZUNsaWVudExlZ2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1f
d2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyh0b0ltcGwobV9jb250ZXh0LT53a0NvbnRleHQo
KSksIG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3VwLCB2aWV3KSkpCisgICAgLCBtX3dlYlZp
ZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCBt
X3BhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXApLCBldmFzT2JqZWN0KSkpCiAgICAg
LCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAg
LCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQog
ICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0x
NjcsOCArMjg2LDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3JvdXAKICAgICBBU1NFUlQoaWNvbkRh
dGFiYXNlKTsKIAogICAgIGljb25EYXRhYmFzZS0+d2F0Y2hDaGFuZ2VzKEljb25DaGFuZ2VDYWxs
YmFja0RhdGEoRXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZCwgdGhpcykpOwotCi0gICAgRXdrVmll
dzo6YWRkVG9QYWdlVmlld01hcCh0aGlzKTsKIH0KIAogRXdrVmlldzo6fkV3a1ZpZXcoKQpAQCAt
MTc4LDIyICsyOTUsODcgQEAgRXdrVmlldzo6fkV3a1ZpZXcoKQogICAgIEFTU0VSVChpY29uRGF0
YWJhc2UpOwogCiAgICAgaWNvbkRhdGFiYXNlLT51bndhdGNoQ2hhbmdlcyhFd2tWaWV3OjpvbkZh
dmljb25DaGFuZ2VkKTsKK30KKworRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmpl
Y3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhh
dmlvcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAotICAgIEV3a1ZpZXc6OnJl
bW92ZUZyb21QYWdlVmlld01hcCh0aGlzKTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9
IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXZhc09iamVjdCwgMCk7CisKKyAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgaWYg
KCFzbWFydERhdGEpIHsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7CisK
KyAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29u
c3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAorICAgIC8vIHNvIHdlIGRvIG5vdCBu
ZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgorICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3
KGV2YXNPYmplY3QsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIHJldHVy
biBldmFzT2JqZWN0OwogfQogCi1Fd2tfVmlld19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERh
dGEoKSBjb25zdAorRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyog
Y2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZiwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQogewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobV9l
dmFzT2JqZWN0KSk7CisgICAgcmV0dXJuIGNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBkZWZhdWx0
U21hcnRDbGFzc0luc3RhbmNlKCksIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwog
fQogCi1Fd2tWaWV3KiBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCog
dmlldykKK2Jvb2wgRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21h
cnRfQ2xhc3MmIGFwaSkKIHsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rf
c21hcnRfZGF0YV9nZXQodmlldykpOwotICAgIEFTU0VSVChzZCk7Ci0gICAgQVNTRVJUKHNkLT5w
cml2KTsKLSAgICByZXR1cm4gc2QtPnByaXY7CisgICAgaWYgKGFwaS52ZXJzaW9uICE9IEVXS19W
SUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pIHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgiRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MgJXAgaXMgdmVyc2lvbiAlbHUgd2hpbGUgJWx1IHdhcyBleHBlY3RlZC4i
LAorICAgICAgICAgICAgJmFwaSwgYXBpLnZlcnNpb24sIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZF
UlNJT04pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFwYXJlbnRT
bWFydENsYXNzLmFkZCkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9z
ZXQoJnBhcmVudFNtYXJ0Q2xhc3MpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9z
bWFydF9zZXQoJmFwaS5zYyk7CisKKyAgICAvLyBTZXQgRXZhc19TbWFydF9DbGFzcyBpbnRlcmZh
Y2UuCisgICAgYXBpLnNjLmFkZCA9IG9uRXZhc1NtYXJ0QWRkOworICAgIGFwaS5zYy5kZWwgPSBv
bkV2YXNTbWFydERlbGV0ZTsKKyAgICBhcGkuc2MubW92ZSA9IG9uRXZhc1NtYXJ0TW92ZTsKKyAg
ICBhcGkuc2MucmVzaXplID0gb25FdmFzU21hcnRSZXNpemU7CisgICAgYXBpLnNjLnNob3cgPSBv
bkV2YXNTbWFydFNob3c7CisgICAgYXBpLnNjLmhpZGUgPSBvbkV2YXNTbWFydEhpZGU7CisgICAg
YXBpLnNjLmNvbG9yX3NldCA9IG9uRXZhc1NtYXJ0Q29sb3JTZXQ7CisgICAgYXBpLnNjLmNhbGN1
bGF0ZSA9IG9uRXZhc1NtYXJ0Q2FsY3VsYXRlOworICAgIGFwaS5zYy5kYXRhID0gc21hcnRDbGFz
c05hbWU7IC8vIEl0IGlzIHVzZWQgZm9yIHR5cGUgY2hlY2tpbmcuCisKKyAgICAvLyBTZXQgRXdr
X1ZpZXdfU21hcnRfQ2xhc3MgaW50ZXJmYWNlLgorICAgIGFwaS5mb2N1c19pbiA9IG9uVmlld1Nt
YXJ0Rm9jdXNJbjsKKyAgICBhcGkuZm9jdXNfb3V0ID0gb25WaWV3U21hcnRGb2N1c091dDsKKyAg
ICBhcGkubW91c2Vfd2hlZWwgPSBvblZpZXdTbWFydE1vdXNlV2hlZWw7CisgICAgYXBpLm1vdXNl
X2Rvd24gPSBvblZpZXdTbWFydE1vdXNlRG93bjsKKyAgICBhcGkubW91c2VfdXAgPSBvblZpZXdT
bWFydE1vdXNlVXA7CisgICAgYXBpLm1vdXNlX21vdmUgPSBvblZpZXdTbWFydE1vdXNlTW92ZTsK
KyAgICBhcGkua2V5X2Rvd24gPSBvblZpZXdTbWFydEtleURvd247CisgICAgYXBpLmtleV91cCA9
IG9uVmlld1NtYXJ0S2V5VXA7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgRXZhc19P
YmplY3QqIEV3a1ZpZXc6OnRvRXZhc09iamVjdChXS1BhZ2VSZWYgcGFnZSkKK3sKKyAgICBBU1NF
UlQocGFnZSk7CisgICAgcmV0dXJuIHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpOworfQorCitF
d2tfVmlld19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoRXZhc19PYmplY3QqIGV2YXNP
YmplY3QpCit7CisgICAgQVNTRVJUKGV2YXNPYmplY3QpOworCisgICAgaWYgKCFpc1ZpZXdFdmFz
T2JqZWN0KGV2YXNPYmplY3QpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQo
ZXZhc09iamVjdCkpOwogfQogCiBXS1BhZ2VSZWYgRXdrVmlldzo6d2tQYWdlKCkgY29uc3QKQEAg
LTM1Nyw2ICs1MzksMTEgQEAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBFd2tWaWV3Ojpjb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUoKQogfQogI2VuZGlmCiAKK2lubGluZSBFd2tfVmlld19TbWFy
dF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoKSBjb25zdAoreworICAgIHJldHVybiBzbWFydERh
dGEobV9ldmFzT2JqZWN0KTsKK30KKwogdm9pZCBFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZChU
aW1lcjxFd2tWaWV3PiopCiB7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNTYw
LDE0ICs3NDcsMTMgQEAgdm9pZCBFd2tWaWV3OjpzZXRNb3VzZUV2ZW50c0VuYWJsZWQoYm9vbCBl
bmFibGVkKQogCiAgICAgbV9tb3VzZUV2ZW50c0VuYWJsZWQgPSBlbmFibGVkOwogICAgIGlmIChl
bmFibGVkKSB7Ci0gICAgICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7
Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVW
QVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwgb25Nb3VzZURvd24sIHNkKTsKLSAgICAgICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VT
RV9VUCwgb25Nb3VzZVVwLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNr
X2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Nb3VzZU1vdmUs
IHNkKTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX0RP
V04+OjpzdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxl
cjxFVkFTX0NBTExCQUNLX01PVVNFX1VQPjo6c3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CisgICAg
ICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6c3Vic2Ny
aWJlKG1fZXZhc09iamVjdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBv
bk1vdXNlRG93bik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2
YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uTW91c2VVcCk7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tf
TU9VU0VfTU9WRSwgb25Nb3VzZU1vdmUpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVW
QVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46OnVuc3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CisgICAg
ICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9VUD46OnVuc3Vic2Ny
aWJlKG1fZXZhc09iamVjdCk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxM
QkFDS19NT1VTRV9NT1ZFPjo6dW5zdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKICAgICB9CiB9CiAK
QEAgLTkwOSw3ICsxMDk1LDcgQEAgV0tQYWdlUmVmIEV3a1ZpZXc6OmNyZWF0ZU5ld1BhZ2UoUGFz
c1JlZlB0cjxFd2tVcmxSZXF1ZXN0PiByZXF1ZXN0LCBXS0RpY3Rpb25hcnkKICAgICBpZiAoIW5l
d0V3a1ZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRXdrVmlldyogbmV3Vmlld0ltcGwg
PSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChuZXdFd2tWaWV3KTsKKyAgICBFd2tWaWV3KiBuZXdW
aWV3SW1wbCA9IHRvRXdrVmlldyhuZXdFd2tWaWV3KTsKICAgICBBU1NFUlQobmV3Vmlld0ltcGwp
OwogCiAgICAgbmV3Vmlld0ltcGwtPm1fd2luZG93RmVhdHVyZXMgPSBld2tXaW5kb3dGZWF0dXJl
czsKQEAgLTkyOCwzMSArMTExNCwyMTMgQEAgdm9pZCBFd2tWaWV3OjpjbG9zZSgpCiAgICAgc2Qt
PmFwaS0+d2luZG93X2Nsb3NlKHNkKTsKIH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNlRG93bih2
b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit2b2lkIEV3
a1ZpZXc6Om9uRXZhc1NtYXJ0QWRkKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQogewotICAgIEV2
YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9N
b3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT5tb3VzZV9kb3duKTsKLSAgICBzZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBkb3duRXZl
bnQpOworICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRfc21h
cnRfZ2V0KGV2YXNPYmplY3QpOworICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNtYXJ0Q2xh
c3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CisgICAgY29uc3QgRXdrX1ZpZXdfU21h
cnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MqPihzbWFydENsYXNzKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9
IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKworICAgIGlmICghc21hcnREYXRhKSB7
CisgICAgICAgIC8vIEFsbG9jYXRpbmcgd2l0aCAnY2FsbG9jJyBhcyB0aGUgQVBJIGNvbnRyYWN0
IGlzIHRoYXQgaXQgc2hvdWxkIGJlIGRlbGV0ZWQgd2l0aCAnZnJlZSgpJy4KKyAgICAgICAgc21h
cnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXpl
b2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0
YV9zZXQoZXZhc09iamVjdCwgc21hcnREYXRhKTsKKyAgICB9CisKKyAgICBzbWFydERhdGEtPnNl
bGYgPSBldmFzT2JqZWN0OworICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOworCisgICAgcGFyZW50
U21hcnRDbGFzcy5hZGQoZXZhc09iamVjdCk7CisKKyAgICBzbWFydERhdGEtPnByaXYgPSAwOwor
CisgICAgLy8gQ3JlYXRlIGV2YXNfb2JqZWN0X2ltYWdlIHRvIGRyYXcgd2ViIGNvbnRlbnRzLgor
ICAgIHNtYXJ0RGF0YS0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoc21hcnREYXRhLT5i
YXNlLmV2YXMpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmlt
YWdlLCBmYWxzZSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbGVkX3NldChzbWFydERhdGEt
PmltYWdlLCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0
YS0+aW1hZ2UsIGV2YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5p
bWFnZSk7CisKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+
OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NB
TExCQUNLX0ZPQ1VTX09VVD46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZl
bnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUw+OjpzdWJzY3JpYmUoZXZhc09iamVj
dCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9ET1dOPjo6c3Vi
c2NyaWJlKGV2YXNPYmplY3QpOworICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFD
S19LRVlfVVA+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxl
cjxFVkFTX0NBTExCQUNLX1NIT1c+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmll
d0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0hJREU+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7
CiB9CiAKLXZvaWQgRXdrVmlldzo6b25Nb3VzZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnREZWxldGUo
RXZhc19PYmplY3QqIGV2YXNPYmplY3QpCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBF
dmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOwotICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX3VwKTsKLSAgICBzZC0+
YXBpLT5tb3VzZV91cChzZCwgdXBFdmVudCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIGlmIChzbWFydERh
dGEpIHsKKyAgICAgICAgQVNTRVJUKHNtYXJ0RGF0YS0+cHJpdik7IC8vIHNtYXJ0RGF0YS0+cHJp
diBpcyBFd2tWaWV3IGluc3RhbmNlLgorICAgICAgICBkZWxldGUgc21hcnREYXRhLT5wcml2Owor
ICAgIH0KKworICAgIHBhcmVudFNtYXJ0Q2xhc3MuZGVsKGV2YXNPYmplY3QpOwogfQogCi12b2lk
IEV3a1ZpZXc6Om9uTW91c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZv
aWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnRSZXNpemUoRXZhc19PYmpl
Y3QqIGV2YXNPYmplY3QsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewot
ICAgIEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19F
dmVudF9Nb3VzZV9Nb3ZlKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpLT5tb3VzZV9tb3ZlKTsKLSAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBt
b3ZlRXZlbnQpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6
OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEpOworCisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+aW1hZ2UsIHdp
ZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+
aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNt
YXJ0RGF0YS0+aW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworCisgICAgc21hcnREYXRhLT5j
aGFuZ2VkLnNpemUgPSB0cnVlOworICAgIHNtYXJ0RGF0YUNoYW5nZWQoc21hcnREYXRhKTsKK30K
Kwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydE1vdmUoRXZhc19PYmplY3QqIGV2YXNPYmplY3Qs
IEV2YXNfQ29vcmQgLyp4Ki8sIEV2YXNfQ29vcmQgLyp5Ki8pCit7CisgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CisKKyAgICBzbWFydERhdGEt
PmNoYW5nZWQucG9zaXRpb24gPSB0cnVlOworICAgIHNtYXJ0RGF0YUNoYW5nZWQoc21hcnREYXRh
KTsKK30KKwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydENhbGN1bGF0ZShFdmFzX09iamVjdCog
ZXZhc09iamVjdCkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tW
aWV3OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhKTsKKworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b0V3a1ZpZXcoc21hcnREYXRh
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2aWV3KTsKKworICAgIHNtYXJ0RGF0
YS0+Y2hhbmdlZC5hbnkgPSBmYWxzZTsKKworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhl
aWdodDsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXZhc09iamVjdCwgJngsICZ5LCAm
d2lkdGgsICZoZWlnaHQpOworCisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbikg
eworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAg
c21hcnREYXRhLT52aWV3LnggPSB4OworICAgICAgICBzbWFydERhdGEtPnZpZXcueSA9IHk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRhLT5pbWFnZSwgeCwgeSk7CisgICAgfQor
CisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplKSB7CisgICAgICAgIHNtYXJ0RGF0YS0+
Y2hhbmdlZC5zaXplID0gZmFsc2U7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lkdGg7
CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy5oID0gaGVpZ2h0OworCisgICAgICAgIGlmICh2aWV3
LT5wYWdlKCktPmRyYXdpbmdBcmVhKCkpCisgICAgICAgICAgICB2aWV3LT5wYWdlKCktPmRyYXdp
bmdBcmVhKCktPnNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgSW50U2l6ZSgpKTsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgdmlldy0+c2V0TmVlZHNT
dXJmYWNlUmVzaXplKCk7CisjZW5kaWYKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAg
ICAgICAgdmlldy0+cGFnZUNsaWVudCgpLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKKyNlbmRpZgor
ICAgIH0KK30KKwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydFNob3coRXZhc19PYmplY3QqIGV2
YXNPYmplY3QpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmll
dzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YSk7CisKKyAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc21hcnREYXRh
LT5iYXNlLmNsaXBwZXIpKQorICAgICAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+YmFz
ZS5jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOworfQor
Cit2b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0SGlkZShFdmFzX09iamVjdCogZXZhc09iamVjdCkK
K3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERh
dGEoZXZhc09iamVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
KTsKKworICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAg
IGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5pbWFnZSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6
b25FdmFzU21hcnRDb2xvclNldChFdmFzX09iamVjdCogZXZhc09iamVjdCwgaW50IHJlZCwgaW50
IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEpOworCisgICAgRXdrVmlldyogdmlldyA9IHRv
RXdrVmlldyhzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZpZXcp
OworCisgICAgYWxwaGEgPSBjbGFtcFRvKGFscGhhLCAwLCAyNTUpOworICAgIHJlZCA9IGNsYW1w
VG8ocmVkLCAwLCBhbHBoYSk7CisgICAgZ3JlZW4gPSBjbGFtcFRvKGdyZWVuLCAwLCBhbHBoYSk7
CisgICAgYmx1ZSA9IGNsYW1wVG8oYmx1ZSwgMCwgYWxwaGEpOworCisgICAgZXZhc19vYmplY3Rf
aW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGFscGhhIDwgMjU1KTsKKyAgICB2aWV3
LT5wYWdlKCktPnNldERyYXdzQmFja2dyb3VuZChyZWQgfHwgZ3JlZW4gfHwgYmx1ZSk7CisgICAg
dmlldy0+cGFnZSgpLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChhbHBoYSA8IDI1NSk7
CisKKyAgICBwYXJlbnRTbWFydENsYXNzLmNvbG9yX3NldChldmFzT2JqZWN0LCByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEZvY3Vz
SW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQoreworICAgIHRvRXdrVmlldyhzbWFy
dERhdGEpLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0Zv
Y3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEZvY3VzT3V0KEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFn
ZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2Vi
UGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIHJldHVybiB0cnVlOworfQorCitF
aW5hX0Jvb2wgRXdrVmlldzo6b25WaWV3U21hcnRNb3VzZVdoZWVsKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkK
K3sKKyAgICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgc2VsZi0+
cGFnZSgpLT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQod2hlZWxFdmVudCwg
c2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91
c2VEb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9N
b3VzZV9Eb3duKiBkb3duRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IHRvRXdrVmlldyhz
bWFydERhdGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJN
b3VzZUV2ZW50KGRvd25FdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRy
YW5zZm9ybVRvU2NyZWVuKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3
a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEs
IGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCit7CisgICAgRXdrVmlldyogc2Vs
ZiA9IHRvRXdrVmlldyhzbWFydERhdGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlTW91c2VF
dmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KHVwRXZlbnQsIHNlbGYtPnRyYW5zZm9ybUZyb21TY2Vu
ZSgpLCBzZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7CisKKyAgICBJbnB1dE1ldGhvZENvbnRl
eHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9IHNlbGYtPmlucHV0TWV0aG9kQ29udGV4dCgpOwor
ICAgIGlmIChpbnB1dE1ldGhvZENvbnRleHQpCisgICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+
aGFuZGxlTW91c2VVcEV2ZW50KHVwRXZlbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0Vp
bmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydE1vdXNlTW92ZShFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KQorewor
ICAgIEV3a1ZpZXcqIHNlbGYgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5wYWdl
KCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChtb3ZlRXZlbnQsIHNlbGYt
PnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEtleURvd24o
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3du
KiBkb3duRXZlbnQpCit7CisgICAgYm9vbCBpc0ZpbHRlcmVkID0gZmFsc2U7CisgICAgRXdrVmll
dyogc2VsZiA9IHRvRXdrVmlldyhzbWFydERhdGEpOworICAgIElucHV0TWV0aG9kQ29udGV4dEVm
bCogaW5wdXRNZXRob2RDb250ZXh0ID0gc2VsZi0+aW5wdXRNZXRob2RDb250ZXh0KCk7CisgICAg
aWYgKGlucHV0TWV0aG9kQ29udGV4dCkKKyAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5k
bGVLZXlEb3duRXZlbnQoZG93bkV2ZW50LCAmaXNGaWx0ZXJlZCk7CisKKyAgICBzZWxmLT5wYWdl
KCktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChkb3duRXZlbnQs
IGlzRmlsdGVyZWQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6
Om9uVmlld1NtYXJ0S2V5VXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBF
dmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCkKK3sKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+
cGFnZSgpLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQodXBFdmVu
dCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAg
LTk4MiwyMCArMTM1MCwxNyBAQCB2b2lkIEV3a1ZpZXc6OmZlZWRUb3VjaEV2ZW50cyhFd2tfVG91
Y2hfRXZlbnRfVHlwZSB0eXBlKQogCiB2b2lkIEV3a1ZpZXc6Om9uVG91Y2hEb3duKHZvaWQqIC8q
IGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQq
IC8qIGV2ZW50SW5mbyAqLykKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2
YXNPYmplY3QoZXdrVmlldyk7Ci0gICAgdmlldy0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9T
VEFSVCk7CisgICAgdG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNI
X1NUQVJUKTsKIH0KIAogdm9pZCBFd2tWaWV3OjpvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywg
RXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJ
bmZvICovKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChl
d2tWaWV3KTsKLSAgICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX0VORCk7CisgICAg
dG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX0VORCk7CiB9CiAK
IHZvaWQgRXdrVmlldzo6b25Ub3VjaE1vdmUodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2Fu
dmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQotewot
ICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3KTsKLSAg
ICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX01PVkUpOworeyAgICAKKyAgICB0b0V3
a1ZpZXcoZXdrVmlldyktPmZlZWRUb3VjaEV2ZW50cyhFV0tfVE9VQ0hfTU9WRSk7CiB9CiAjZW5k
aWYKIApAQCAtMTAzNywzICsxNDAyLDQ2IEBAIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBF
d2tWaWV3Ojp0YWtlU25hcHNob3QoKQogICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAj
ZW5kaWYKIH0KKworRXZhc19TbWFydF9DbGFzcyBFd2tWaWV3OjpwYXJlbnRTbWFydENsYXNzID0g
RVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CisKKy8vIEZyZWUgRXdrIFZpZXcgZnVuY3Rpb25z
LgorCitFd2tWaWV3KiB0b0V3a1ZpZXcoY29uc3QgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7
CisgICAgaWYgKCFpc1ZpZXdFdmFzT2JqZWN0KGV2YXNPYmplY3QpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiB0b0V3a1ZpZXcoc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV2YXNPYmplY3QpKSk7Cit9CisKK0V3a1Zp
ZXcqIHRvRXdrVmlldyhjb25zdCBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7Cisg
ICAgcmV0dXJuIHNtYXJ0RGF0YSA/IHNtYXJ0RGF0YS0+cHJpdiA6IDA7Cit9CisKK2Jvb2wgaXNW
aWV3RXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhc09iamVjdCwgZmFsc2UpOworCisgICAgY29u
c3QgY2hhciogZXZhc09iamVjdFR5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChldmFzT2JqZWN0
KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBldmFzU21hcnQgPSBldmFzX29iamVjdF9zbWFydF9z
bWFydF9nZXQoZXZhc09iamVjdCk7CisgICAgaWYgKFVOTElLRUxZKCFldmFzU21hcnQpKSB7Cisg
ICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsIGV2
YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwpIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNz
KiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQoZXZhc1NtYXJ0KTsKKyAgICBpZiAo
VU5MSUtFTFkoIXNtYXJ0Q2xhc3MpKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykg
aXMgbm90IGEgc21hcnQgY2xhc3Mgb2JqZWN0ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBl
ID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoVU5MSUtFTFkoc21hcnRDbGFzcy0+ZGF0YSAhPSBzbWFydENsYXNzTmFt
ZSkpIHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3Zp
ZXcgKG5lZWQgJXAsIGdvdCAlcCkhIiwgZXZhc09iamVjdCwgZXZhc09iamVjdFR5cGUgPyBldmFz
T2JqZWN0VHlwZSA6ICIobnVsbCkiLAorICAgICAgICAgICAgc21hcnRDbGFzc05hbWUsIHNtYXJ0
Q2xhc3MtPmRhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5k
ZXggODcxNjViYy4uOGUzZDcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuaApAQCAtOTksNiArOTksNyBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJm
YWNlIEV2YXNfR0xfU3VyZmFjZTsKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19T
bWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19T
bWFydF9DbGFzcyBFd2tfVmlld19TbWFydF9DbGFzczsKIAogY2xhc3MgRXdrVmlldyB7CiBwdWJs
aWM6CkBAIC0xMDcsMTEgKzEwOCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIExlZ2FjeUJlaGF2aW9y
LAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmpl
Y3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViS2l0OjpXZWJQYWdl
R3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKLSAgICB+RXdrVmlldygpOwogCi0gICAg
c3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsK
LSAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIHN0
YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21h
cnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZh
dWx0QmVoYXZpb3IpOworICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChF
dmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVm
YXVsdEJlaGF2aW9yKTsKKworICAgIHN0YXRpYyBib29sIGluaXRTbWFydENsYXNzSW50ZXJmYWNl
KEV3a19WaWV3X1NtYXJ0X0NsYXNzJik7CisKKyAgICBzdGF0aWMgY29uc3QgRXZhc19PYmplY3Qq
IHRvRXZhc09iamVjdChXS1BhZ2VSZWYpOworCisgICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YShFdmFzX09iamVjdCogZXZhc09iamVjdCk7CisKKyAgICBFdmFzX09iamVj
dCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCiAgICAgV0tWaWV3UmVm
IHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViVmlldy5nZXQoKSk7IH0KICAgICBX
S1BhZ2VSZWYgd2tQYWdlKCkgY29uc3Q7CkBAIC0xNTMsMTEgKzE2MCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcik7CiAgICAgdm9p
ZCBzZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplKTsKIAotICAgIHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QgPSBX
ZWJDb3JlOjpJbnRSZWN0KCkpOwotCi0gICAgc3RhdGljIHZvaWQgYWRkVG9QYWdlVmlld01hcChF
d2tWaWV3KiB2aWV3KTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdr
Vmlldyogdmlldyk7Ci0gICAgc3RhdGljIGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3RnJvbVBhZ2VW
aWV3TWFwKGNvbnN0IFdLUGFnZVJlZik7CisgICAgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgcmVjdCA9IFdlYkNvcmU6OkludFJlY3QoKSk7ICAgCiAKICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCiAgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKQEAgLTIyMSw3ICsyMjQs
MTIgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25hcHNo
b3QoKTsKIAogcHJpdmF0ZToKLSAgICBpbmxpbmUgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKCkgY29uc3Q7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdC
ZWhhdmlvcik7CisgICAgLy8gV2lsbCBiZSBkZWxldGVkIHdoZW4gRXZhcyBPYmplY3QgaXMgZGVs
ZXRlZC4KKyAgICB+RXdrVmlldygpOworCisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKCkgY29uc3Q7CisKICAgICB2b2lkIGRpc3BsYXlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVy
PEV3a1ZpZXc+Kik7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC0yMzAsMTcg
KzIzOCwzNSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbmZvcm1JY29uQ2hhbmdlKCk7CiAKLSAg
ICBzdGF0aWMgdm9pZCBvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3Qq
LCB2b2lkKiBldmVudEluZm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VVcCh2b2lkKiBkYXRh
LCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOwotICAgIHN0YXRpYyB2b2lk
IG9uTW91c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbyk7CisgICAgLy8gRXZhc19TbWFydF9DbGFzcyBpbnRlcmZhY2UuCisgICAgc3RhdGljIHZv
aWQgb25FdmFzU21hcnRBZGQoRXZhc19PYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNT
bWFydERlbGV0ZShFdmFzX09iamVjdCopOworICAgIHN0YXRpYyB2b2lkIG9uRXZhc1NtYXJ0TW92
ZShFdmFzX09iamVjdCosIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KTsKKyAgICBzdGF0aWMg
dm9pZCBvbkV2YXNTbWFydFJlc2l6ZShFdmFzX09iamVjdCosIEV2YXNfQ29vcmQgd2lkdGgsIEV2
YXNfQ29vcmQgaGVpZ2h0KTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydFNob3coRXZhc19P
YmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydEhpZGUoRXZhc19PYmplY3QqKTsK
KyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydENvbG9yU2V0KEV2YXNfT2JqZWN0KiwgaW50IHJl
ZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2
YXNTbWFydENhbGN1bGF0ZShFdmFzX09iamVjdCopOworCisgICAgLy8gRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgaW50ZXJmYWNlLgorICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21hcnRGb2N1c0lu
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBv
blZpZXdTbWFydEZvY3VzT3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisgICAg
c3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydE1vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KTsK
KyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0TW91c2VEb3duKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQp
OworICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21hcnRNb3VzZVVwKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCk7Cisg
ICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydE1vdXNlTW92ZShFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KTsK
KyAgICBzdGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0S2V5RG93bihFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCk7Cisg
ICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdTbWFydEtleVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpOworCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKICAgICB2b2lkIGZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZl
bnRfVHlwZSB0eXBlKTsKLSAgICBzdGF0aWMgdm9pZCBvblRvdWNoRG93bih2b2lkKiAvKiBkYXRh
ICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBl
dmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hVcCh2b2lkKiAvKiBkYXRhICov
LCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVu
dEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8s
IEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50
SW5mbyAqLyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaERvd24odm9pZCogZGF0YSwgRXZhcyos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBvblRvdWNo
VXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCBvblRvdWNoTW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3Qq
LCB2b2lkKiBldmVudEluZm8pOwogI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgb25GYXZpY29uQ2hh
bmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pOwogCitwcml2YXRlOgog
ICAgIC8vIE5vdGUsIGluaXRpYWxpemF0aW9uIG9yZGVyIG1hdHRlcnMuCiAgICAgRXZhc19PYmpl
Y3QqIG1fZXZhc09iamVjdDsKICAgICBSZWZQdHI8RXdrQ29udGV4dD4gbV9jb250ZXh0OwpAQCAt
Mjg3LDYgKzMxMywxMyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBtX2lzSGFyZHdhcmVB
Y2NlbGVyYXRlZDsKICAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3JvdW5kOworCisgICAgc3RhdGlj
IEV2YXNfU21hcnRfQ2xhc3MgcGFyZW50U21hcnRDbGFzczsKIH07CiAKK0V3a1ZpZXcqIHRvRXdr
Vmlldyhjb25zdCBFdmFzX09iamVjdCopOworRXdrVmlldyogdG9Fd2tWaWV3KGNvbnN0IEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisKK2Jvb2wgaXNWaWV3RXZhc09iamVjdChjb25z
dCBFdmFzX09iamVjdCogZXZhc09iamVjdCk7CisKICNlbmRpZiAvLyBFd2tWaWV3X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBkNjE4MWI4
Li5jNTNkODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwCkBAIC0yNSw5ICsyNSw2IEBACiAjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgogI2lu
Y2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwu
aCIKLSNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTmF0aXZl
V2ViTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNs
dWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkQ2xpZW50RWZsLmgiCiAj
aW5jbHVkZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgpAQCAtNTAsNyArNDcsNiBAQAogI2luY2x1
ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3Zp
ZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLUGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC02OCw0ODYg
KzY0LDMxIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLXN0YXRpYyBjb25zdCBjaGFyIEVXS19WSUVXX1RZUEVfU1RSW10gPSAiRVdLMl9WaWV3
IjsKLQotI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIHJlc3VsdCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBib29sIHJlc3VsdCA9IHRydWU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIWV3a1ZpZXcpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIEVJTkFfTE9HX0NSSVQoIm51bGwgaXMgbm90IGEgZXdrX3ZpZXciKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGNoYXIqIF90
bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChld2tWaWV3KTsgICAgICAgICAgICAgICAg
XAotICAgICAgICBjb25zdCBFdmFzX1NtYXJ0KiBfdG1wX3MgPSBldmFzX29iamVjdF9zbWFydF9z
bWFydF9nZXQoZXdrVmlldyk7ICAgICAgIFwKLSAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoIV90
bXBfcykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBz
bWFydCBvYmplY3QhIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IEV2YXNfU21hcnRf
Q2xhc3MqIF90bXBfc2MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChfdG1wX3MpOyAgICAgICAgXAot
ICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3RtcF9zYykpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8g
X3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJl
c3VsdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoX3RtcF9zYy0+ZGF0YSAhPSBFV0tfVklFV19U
WVBFX1NUUikpIHsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3ZpZXcgKG5lZWQgJXAsIGdv
dCAlcCkhIiwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgZXdrVmlldywgX3RtcF9vdHlw
ZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgIEVXS19WSUVXX1RZUEVfU1RSLCBfdG1wX3NjLT5kYXRhKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc21hcnREYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBF
V0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIF90bXBfcmVzdWx0KTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChfdG1w
X3Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgc21hcnREYXRhID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2
YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpCi0KLSNkZWZpbmUgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC4uLikgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgaWYgKCFzbWFydERhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBzbWFy
dCBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAgZXdrVmlldywgZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrVmlldykpOyAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRVdLX1ZJRVdfSU1QTF9HRVRfQllf
U0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgLi4uKSAgICAgICAgICAgICAgICBcCi0gICAg
aWYgKCFzbWFydERhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBFSU5BX0xPR19DUklUKCJzbWFydCBkYXRhIGlz
IG51bGwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0
dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a1ZpZXcqIGltcGwg
PSBzbWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghaW1wbCkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAg
KCVzKSIsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzbWFydERhdGEtPnNlbGYs
IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0YS0+c2VsZikpOyAgICAgICBcCi0gICAgICAg
ICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgw
KQotCiAjZGVmaW5lIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAu
Li4pICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a1ZpZXcqIGltcGwgPSAwOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBFd2tWaWV3KiBpbXBsID0gdG9Fd2tWaWV3KGV3a1ZpZXcpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgX19WQV9BUkdTX18p
OyAgICAgICAgICAgIFwKLSAgICAgICAgaW1wbCA9IHNtYXJ0RGF0YS0+cHJpdjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmICghaW1w
bCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBv
YmplY3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzbWFydERh
dGEtPnNlbGYsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0YS0+c2VsZikpOyAgICAgICBc
CisgICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAl
cCIsIGV3a1ZpZXcpOyAgICAgICAgICAgXAogICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19f
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotLy8vIENyZWF0ZXMgYSB0eXBl
IG5hbWUgZm9yIEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQuCi10eXBlZGVmIHN0cnVjdCBFd2tf
UGFnZV9Db250ZW50c19Db250ZXh0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQ7Ci0KLS8qCi0g
KiBAYnJpZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgcGFnZSBjb250ZW50cyBjb250ZXh0IHVzZWQg
Zm9yIGV3a192aWV3X3BhZ2VfY29udGVudHNfZ2V0KCkgQVBJLgotICovCi1zdHJ1Y3QgRXdrX1Bh
Z2VfQ29udGVudHNfQ29udGV4dCB7Ci0gICAgRXdrX1BhZ2VfQ29udGVudHNfVHlwZSB0eXBlOwot
ICAgIEV3a19QYWdlX0NvbnRlbnRzX0NiIGNhbGxiYWNrOwotfTsKLQotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2NoYW5nZWQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewot
ICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuYW55KQotICAgICAgICByZXR1cm47Ci0gICAgc21h
cnREYXRhLT5jaGFuZ2VkLmFueSA9IHRydWU7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2hhbmdl
ZChzbWFydERhdGEtPnNlbGYpOwotfQotCi0vLyBEZWZhdWx0IEV2ZW50IEhhbmRsaW5nLgotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhKQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihz
bWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlk
Q2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dp
bmRvd0lzQWN0aXZlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkK
LXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBs
LCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdl
UHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0
X21vdXNlX3doZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19F
dmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9C
WV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdl
KCktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBpbXBs
LT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3Vz
ZV9kb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9N
b3VzZV9Eb3duKiBkb3duRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5k
bGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZG93bkV2ZW50LCBpbXBsLT50cmFuc2Zv
cm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV91cChFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVw
RXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5h
dGl2ZVdlYk1vdXNlRXZlbnQodXBFdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIGlt
cGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKLQotICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCog
aW5wdXRNZXRob2RDb250ZXh0ID0gaW1wbC0+aW5wdXRNZXRob2RDb250ZXh0KCk7Ci0gICAgaWYg
KGlucHV0TWV0aG9kQ29udGV4dCkKLSAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVN
b3VzZVVwRXZlbnQodXBFdmVudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfbW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KQotewotICAg
IEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNl
KTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2
ZW50KG1vdmVFdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIGltcGwtPnRyYW5zZm9y
bVRvU2NyZWVuKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfa2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBj
b25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1Q
TF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgYm9v
bCBpc0ZpbHRlcmVkID0gZmFsc2U7Ci0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1l
dGhvZENvbnRleHQgPSBpbXBsLT5pbnB1dE1ldGhvZENvbnRleHQoKTsKLSAgICBpZiAoaW5wdXRN
ZXRob2RDb250ZXh0KQotICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRsZUtleURvd25F
dmVudChkb3duRXZlbnQsICZpc0ZpbHRlcmVkKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxl
S2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGRvd25FdmVudCwgaXNGaWx0ZXJl
ZCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9rZXlfdXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2
ZW50X0tleV9VcCogdXBFdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9S
RVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRs
ZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh1cEV2ZW50KSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIEV2ZW50IEhhbmRsaW5nLgotc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZl
bnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4pOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19p
bihzbWFydERhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0g
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aS0+Zm9jdXNfb3V0KTsKLSAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBF
dmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9N
b3VzZV9XaGVlbCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsKLSAgICBzbWFydERhdGEtPmFwaS0+
bW91c2Vfd2hlZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX2tleV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQq
IGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQgPSBzdGF0
aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5rZXlfZG93bik7
Ci0gICAgc21hcnREYXRhLT5hcGktPmtleV9kb3duKHNtYXJ0RGF0YSwgZG93bkV2ZW50KTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV91cCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZh
c19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9LZXlfVXAqIHVw
RXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21h
cnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+
a2V5X3VwKTsKLSAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9zaG93KHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwp
OwotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmll
d0lzVmlzaWJsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9oaWRlKHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGRhdGEpOwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFy
dERhdGEsIGltcGwpOwotCi0gICAgLy8gVGhpcyBjYWxsIG1heSBsb29rIHdyb25nLCBidXQgd2Ug
cmVhbGx5IG5lZWQgdG8gcGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUuCi0gICAgLy8gdmlld1N0YXRl
RGlkQ2hhbmdlKCkgaXRzZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZXR0aW5nIHRo
ZSB2aXNpYmlsaXR5IHRvIFZpc2libGUgb3IgSGlkZGVuCi0gICAgLy8gZGVwZW5kaW5nIG9uIHdo
YXQgV2ViUGFnZVByb3h5Ojppc1ZpZXdWaXNpYmxlKCkgcmV0dXJucywgdGhpcyBzaW1wbHkgdHJp
Z2dlcnMgdGhlIHByb2Nlc3MuCi0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2Uo
V2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKLX0KLQotc3RhdGljIEV2YXNfU21hcnRfQ2xh
c3MgZ19wYXJlbnRTbWFydENsYXNzID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0g
ICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQo
ZXdrVmlldyk7Ci0gICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFzcyA9IGV2YXNf
c21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKLSAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyog
YXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+KHNtYXJ0
Q2xhc3MpOwotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAg
aWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsK
LSAgICAgICAgaWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoImNv
dWxkIG5vdCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVmll
dywgc21hcnREYXRhKTsKLSAgICB9Ci0KLSAgICBzbWFydERhdGEtPnNlbGYgPSBld2tWaWV3Owot
ICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOwotCi0gICAgZ19wYXJlbnRTbWFydENsYXNzLmFkZChl
d2tWaWV3KTsKLQotICAgIHNtYXJ0RGF0YS0+cHJpdiA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgZXZh
c19vYmplY3RfaW1hZ2UgdG8gZHJhdyB3ZWIgY29udGVudHMuCi0gICAgc21hcnREYXRhLT5pbWFn
ZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7Ci0gICAgZXZh
c19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGZhbHNlKTsKLSAgICBl
dmFzX29iamVjdF9pbWFnZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHRydWUpOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5pbWFnZSwgZXdrVmlldyk7
Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmltYWdlKTsKLQotI2RlZmluZSBDT05O
RUNUKHMsIGMpIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBz
bWFydERhdGEpCi0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX0lOLCBfZXdrX3ZpZXdf
b25fZm9jdXNfaW4pOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19PVVQsIF9ld2tf
dmlld19vbl9mb2N1c19vdXQpOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19NT1VTRV9XSEVF
TCwgX2V3a192aWV3X29uX21vdXNlX3doZWVsKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tf
S0VZX0RPV04sIF9ld2tfdmlld19vbl9rZXlfZG93bik7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExC
QUNLX0tFWV9VUCwgX2V3a192aWV3X29uX2tleV91cCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExC
QUNLX1NIT1csIF9ld2tfdmlld19vbl9zaG93KTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tf
SElERSwgX2V3a192aWV3X29uX2hpZGUpOwotI3VuZGVmIENPTk5FQ1QKLX0KLQotc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBpZiAoc21hcnREYXRhKQotICAg
ICAgICBkZWxldGUgc21hcnREYXRhLT5wcml2OwotCi0gICAgZ19wYXJlbnRTbWFydENsYXNzLmRl
bChld2tWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFz
X09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCi17
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0g
ICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOwot
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHdpZHRoLCBo
ZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+aW1hZ2Us
IDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSB0
cnVlOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nv
b3JkIC8qeCovLCBFdmFzX0Nvb3JkIC8qeSovKQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3Np
dGlvbiA9IHRydWU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdr
VmlldykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1w
bCk7Ci0KLSAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gZmFsc2U7Ci0KLSAgICBFdmFzX0Nv
b3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3
a1ZpZXcsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAgIGlmIChzbWFydERhdGEtPmNo
YW5nZWQucG9zaXRpb24pIHsKLSAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0g
ZmFsc2U7Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy54ID0geDsKLSAgICAgICAgc21hcnREYXRh
LT52aWV3LnkgPSB5OwotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+aW1hZ2Us
IHgsIHkpOwotICAgIH0KLQotICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSkgewotICAg
ICAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IGZhbHNlOwotICAgICAgICBzbWFydERhdGEt
PnZpZXcudyA9IHdpZHRoOwotICAgICAgICBzbWFydERhdGEtPnZpZXcuaCA9IGhlaWdodDsKLQot
ICAgICAgICBpZiAoaW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpKQotICAgICAgICAgICAgaW1w
bC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCks
IEludFNpemUoKSk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAg
IGltcGwtPnNldE5lZWRzU3VyZmFjZVJlc2l6ZSgpOwotI2VuZGlmCi0jaWYgVVNFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCi0gICAgICAgIGltcGwtPnBhZ2VDbGllbnQoKS0+dXBkYXRlVmlld3BvcnRT
aXplKCk7Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9z
aG93KEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dl
dChzbWFydERhdGEtPmJhc2UuY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc21h
cnREYXRhLT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5p
bWFnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhKTsKLQotICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIp
OwotICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5pbWFnZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIF9ld2tfdmlld19zbWFydF9jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBy
ZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKLXsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRf
QllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0KLSAgICBpZiAoYWxwaGEgPCAwKQot
ICAgICAgICBhbHBoYSA9IDA7Ci0gICAgZWxzZSBpZiAoYWxwaGEgPiAyNTUpCi0gICAgICAgIGFs
cGhhID0gMjU1OwotCi0jZGVmaW5lIENIRUNLX0NPTE9SKGNvbG9yLCBhbHBoYSkgXAotICAgIGlm
IChjb2xvciA8IDApICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29sb3IgPSAwOyAgICAgICAg
ICAgICAgICBcCi0gICAgZWxzZSBpZiAoY29sb3IgPiBhbHBoYSkgICAgICAgXAotICAgICAgICBj
b2xvciA9IGFscGhhOwotICAgIENIRUNLX0NPTE9SKHJlZCwgYWxwaGEpOwotICAgIENIRUNLX0NP
TE9SKGdyZWVuLCBhbHBoYSk7Ci0gICAgQ0hFQ0tfQ09MT1IoYmx1ZSwgYWxwaGEpOwotI3VuZGVm
IENIRUNLX0NPTE9SCi0KLSAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRh
LT5pbWFnZSwgYWxwaGEgPCAyNTUpOwotICAgIGltcGwtPnBhZ2UoKS0+c2V0RHJhd3NCYWNrZ3Jv
dW5kKHJlZCB8fCBncmVlbiB8fCBibHVlKTsKLSAgICBpbXBsLT5wYWdlKCktPnNldERyYXdzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kKGFscGhhIDwgMjU1KTsKLQotICAgIGdfcGFyZW50U21hcnRDbGFz
cy5jb2xvcl9zZXQoZXdrVmlldywgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkp
CiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGFwaSwgZmFsc2UpOwogCi0g
ICAgaWYgKGFwaS0+dmVyc2lvbiAhPSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKSB7Ci0g
ICAgICAgIEVJTkFfTE9HX0NSSVQoIkV3a19WaWV3X1NtYXJ0X0NsYXNzICVwIGlzIHZlcnNpb24g
JWx1IHdoaWxlICVsdSB3YXMgZXhwZWN0ZWQuIiwKLSAgICAgICAgICAgICBhcGksIGFwaS0+dmVy
c2lvbiwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VMWSghZ19wYXJlbnRTbWFydENsYXNzLmFk
ZCkpCi0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZnX3BhcmVu
dFNtYXJ0Q2xhc3MpOwotCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQo
JmFwaS0+c2MpOwotCi0gICAgLy8gU2V0IEV2YXNfU21hcnRfQ2xhc3MgZnVuY3Rpb25zLgotICAg
IGFwaS0+c2MuYWRkID0gX2V3a192aWV3X3NtYXJ0X2FkZDsKLSAgICBhcGktPnNjLmRlbCA9IF9l
d2tfdmlld19zbWFydF9kZWw7Ci0gICAgYXBpLT5zYy5tb3ZlID0gX2V3a192aWV3X3NtYXJ0X21v
dmU7Ci0gICAgYXBpLT5zYy5yZXNpemUgPSBfZXdrX3ZpZXdfc21hcnRfcmVzaXplOwotICAgIGFw
aS0+c2Muc2hvdyA9IF9ld2tfdmlld19zbWFydF9zaG93OwotICAgIGFwaS0+c2MuaGlkZSA9IF9l
d2tfdmlld19zbWFydF9oaWRlOwotICAgIGFwaS0+c2MuY29sb3Jfc2V0ID0gX2V3a192aWV3X3Nt
YXJ0X2NvbG9yX3NldDsKLSAgICBhcGktPnNjLmNhbGN1bGF0ZSA9IF9ld2tfdmlld19zbWFydF9j
YWxjdWxhdGU7Ci0gICAgYXBpLT5zYy5kYXRhID0gRVdLX1ZJRVdfVFlQRV9TVFI7IC8vIEl0IGlz
IHVzZWQgYnkgdHlwZSBjaGVja2luZy4KLQotICAgIC8vIFNldCBFd2tfVmlld19TbWFydF9DbGFz
cyBmdW5jdGlvbnMuCi0gICAgYXBpLT5mb2N1c19pbiA9IF9ld2tfdmlld19zbWFydF9mb2N1c19p
bjsKLSAgICBhcGktPmZvY3VzX291dCA9IF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQ7Ci0gICAg
YXBpLT5tb3VzZV93aGVlbCA9IF9ld2tfdmlld19zbWFydF9tb3VzZV93aGVlbDsKLSAgICBhcGkt
Pm1vdXNlX2Rvd24gPSBfZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93bjsKLSAgICBhcGktPm1vdXNl
X3VwID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX3VwOwotICAgIGFwaS0+bW91c2VfbW92ZSA9IF9l
d2tfdmlld19zbWFydF9tb3VzZV9tb3ZlOwotICAgIGFwaS0+a2V5X2Rvd24gPSBfZXdrX3ZpZXdf
c21hcnRfa2V5X2Rvd247Ci0gICAgYXBpLT5rZXlfdXAgPSBfZXdrX3ZpZXdfc21hcnRfa2V5X3Vw
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3Jl
YXRlRXdrVmlld1NtYXJ0Q2xhc3Modm9pZCkKLXsKLSAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19W
aWV3Iik7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKLQotICAgIGlmIChFSU5B
X1VOTElLRUxZKCFzbWFydCkpIHsKLSAgICAgICAgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KCZh
cGkpOwotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpOwotICAg
IH0KLQotICAgIHJldHVybiBzbWFydDsKLX0KLQotc3RhdGljIGlubGluZSBFd2tWaWV3KiBjcmVh
dGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdr
Q29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwgRXdrVmll
dzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKQotewot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGNvbnRleHQsIDApOwotCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcg
PSBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBzbWFydCk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGV3a1ZpZXcsIDApOwotCi0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgaWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgZXZhc19v
YmplY3RfZGVsKGV3a1ZpZXcpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoIXNtYXJ0RGF0YS0+cHJpdik7Ci0KLSAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBj
cmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAw
LAotICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgotICAgIHNtYXJ0
RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNvbnRleHQsIHRvSW1wbChwYWdlR3Jv
dXBSZWYpLCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKLX0KLQotLyoq
Ci0gKiBAaW50ZXJuYWwKLSAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRo
IFdLVHlwZSBwYXJhbWV0ZXJzLgotICovCi1Fd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKLXsKLSAgICByZXR1cm4gY3Jl
YXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGNvbnRleHRSZWYg
PyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29u
dGV4dCgpLCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gRXdrVmlldzo6aW5p
dFNtYXJ0Q2xhc3NJbnRlcmZhY2UoKmFwaSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19z
bWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRleHQqIGNv
bnRleHQpCiB7Ci0gICAgRXdrVmlldyogZXdrVmlldyA9IGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBz
bWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7Ci0gICAgaWYgKCFl
d2tWaWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBld2tWaWV3LT52aWV3KCk7
CisgICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBzbWFydCwgZXdr
X29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBl
d2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRl
eHQpCiB7Ci0gICAgcmV0dXJuIGV3a192aWV3X3NtYXJ0X2FkZChjYW52YXMsIGNyZWF0ZUV3a1Zp
ZXdTbWFydENsYXNzKCksIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOwor
ICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZXdrX29iamVjdF9j
YXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19h
ZGQoRXZhcyogY2FudmFzKQpAQCAtODI0LDggKzM2NSw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19m
ZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfVG91Y2hfRXZlbnRfVHlw
ZSB0CiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwocG9pbnRzLCBmYWxzZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9T
RF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7CisgICAgRVdLX1ZJRVdfSU1QTF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIGltcGwsIGZhbHNlKTsKIAogICAgIGltcGwtPnBhZ2UoKS0+
aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHR5cGUsIHBvaW50cywgbW9kaWZp
ZXJzLCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4o
KSwgZWNvcmVfdGltZV9nZXQoKSkpOwogCkBAIC05NDIsNiArNDgyLDE3IEBAIHZvaWQgZXdrX3Zp
ZXdfZHJhd3NfcGFnZV9iYWNrZ3JvdW5kX3NldChFdmFzX09iamVjdCAqZXdrVmlldywgRWluYV9C
b29sIGVuYWJsZWQpCiAgICAgaW1wbC0+c2V0RHJhd3NCYWNrZ3JvdW5kKGVuYWJsZWQpOwogfQog
CisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dC4K
K3R5cGVkZWYgc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQgRXdrX1BhZ2VfQ29udGVu
dHNfQ29udGV4dDsKKworLyoKKyAqIEBicmllZiBTdHJ1Y3R1cmUgY29udGFpbmluZyBwYWdlIGNv
bnRlbnRzIGNvbnRleHQgdXNlZCBmb3IgZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKSBBUEku
CisgKi8KK3N0cnVjdCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0IHsKKyAgICBFd2tfUGFnZV9D
b250ZW50c19UeXBlIHR5cGU7CisgICAgRXdrX1BhZ2VfQ29udGVudHNfQ2IgY2FsbGJhY2s7Cit9
OworCiAvKioKICAqIEBpbnRlcm5hbAogICogQ2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBmb3IgZXdr
X3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzQ5MTJmZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYg
ZXdrX3ZpZXdfcHJpdmF0ZV9oCi0jZGVmaW5lIGV3a192aWV3X3ByaXZhdGVfaAotCi0jaW5jbHVk
ZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQmFz
ZS5oPgotCi1Fd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4
dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7Ci0KLSNlbmRpZiAv
LyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Y2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmluZGV4IGVmZDZkMzIuLmU0OGRmNzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJv
LmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRh
dGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mCiAKICNpZiBQTEFU
Rk9STShFRkwpCiAgICAgLy8gVXBkYXRlIGV3a192aWV3IHdpdGggbmV3IGJhY2tpbmdTdG9yZSBp
bWFnZS4KLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJQ
YWdlUHJveHktPnZpZXdXaWRnZXQoKSk7CisgICAgRXdrVmlldyogdmlldyA9IHRvRXdrVmlldyht
X3dlYlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKICAgICB2aWV3LT5zZXRJbWFnZURhdGEoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2JhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCkp
LCBtX3NpemUpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL0NvbnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCmluZGV4IDI1OWU0MTIuLjJjYzRi
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3Rv
cnlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4
dEhpc3RvcnlDbGllbnRFZmwuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgQ29udGV4dEhpc3Rv
cnlDbGllbnRFZmw6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLQ29udGV4dFJlZiwg
V0tQYWdlCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxFd2tOYXZpZ2F0aW9uRGF0YT4g
bmF2aWdhdGlvbkRhdGFFd2sgPSBFd2tOYXZpZ2F0aW9uRGF0YTo6Y3JlYXRlKG5hdmlnYXRpb25E
YXRhKTsKLSAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmlnYXRlKEV3a1ZpZXc6OnZpZXdGcm9tUGFn
ZVZpZXdNYXAocGFnZSksIG5hdmlnYXRpb25EYXRhRXdrLmdldCgpLCBoaXN0b3J5Q2xpZW50LT5t
X3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmlnYXRlKEV3a1ZpZXc6OnRvRXZh
c09iamVjdChwYWdlKSwgbmF2aWdhdGlvbkRhdGFFd2suZ2V0KCksIGhpc3RvcnlDbGllbnQtPm1f
dXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291
cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVm
bDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHAKICAg
ICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tF
aW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAot
ICAgIGhpc3RvcnlDbGllbnQtPm1fY2xpZW50UmVkaXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdl
Vmlld01hcChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlz
dG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC0+bV9jbGllbnRSZWRp
cmVjdChFd2tWaWV3Ojp0b0V2YXNPYmplY3QocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGlu
YXRpb25VUkxTdHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENv
bnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0
UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5h
dGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTc5LDcgKzc5
LDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGly
ZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291
cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0
aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fc2Vy
dmVyUmVkaXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgc291cmNlVVJM
U3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7
CisgICAgaGlzdG9yeUNsaWVudC0+bV9zZXJ2ZXJSZWRpcmVjdChFd2tWaWV3Ojp0b0V2YXNPYmpl
Y3QocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlD
bGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpk
aWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tTdHJp
bmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlk
VXBkYXRlSGlzdG9yeVRpdGxlKFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UKICAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgdGl0bGVTdHJpbmcodGl0bGUpOwogICAgIFdLRWluYVNoYXJlZFN0cmlu
ZyBzdHJpbmdVUkwoVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRhdGVkKEV3
a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkws
IGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVV
cGRhdGVkKEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSwgdGl0bGVTdHJpbmcsIHN0cmluZ1VS
TCwgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlD
bGllbnRFZmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZUNsaWVudEJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50
QmFzZS5jcHAKaW5kZXggNTY4ZTRhZS4uMjZiN2U0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBib29s
IFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpw
cm9jZXNzRGlkQ3Jhc2goKQogewogICAgIC8vIENoZWNrIGlmIGxvYWRpbmcgd2FzIG9uZ29pbmcs
IHdoZW4gd2ViIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBkb3VibGUgbG9hZFByb2dyZXNzID0gZXdr
X3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQobV92aWV3LT52aWV3KCkpOworICAgIGRvdWJsZSBsb2Fk
UHJvZ3Jlc3MgPSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX3ZpZXctPmV2YXNPYmplY3Qo
KSk7CiAgICAgaWYgKGxvYWRQcm9ncmVzcyA+PSAwICYmIGxvYWRQcm9ncmVzcyA8IDEpIHsKICAg
ICAgICAgbG9hZFByb2dyZXNzID0gMTsKICAgICAgICAgbV92aWV3LT5zbWFydENhbGxiYWNrPExv
YWRQcm9ncmVzcz4oKS5jYWxsKCZsb2FkUHJvZ3Jlc3MpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZv
aWQgUGFnZUNsaWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCgpCiAgICAgICAgIFdBUk4oIldBUk5J
Tkc6IFRoZSB3ZWIgcHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycuXG4iLCB1cmwu
ZGF0YSgpKTsKIAogICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9yIHBhZ2UKLSAgICAgICAgZXdr
X3ZpZXdfaHRtbF9zdHJpbmdfbG9hZChtX3ZpZXctPnZpZXcoKSwgIlRoZSB3ZWIgcHJvY2VzcyBo
YXMgY3Jhc2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKKyAgICAgICAgZXdrX3ZpZXdfaHRtbF9zdHJp
bmdfbG9hZChtX3ZpZXctPmV2YXNPYmplY3QoKSwgIlRoZSB3ZWIgcHJvY2VzcyBoYXMgY3Jhc2hl
ZC4iLCAwLCB1cmwuZGF0YSgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggNTk5YmUzNC4uYjg4MTY2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVu
dEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVu
dEVmbC5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRD
aGFuZ2VCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZQogICAg
IEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3KCk7
CiAgICAgQVNTRVJUKHZpZXcpOwogCi0gICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0ID0g
ZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZpZXcoKSk7CisgICAgRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZp
ZXctPmV2YXNPYmplY3QoKSk7CiAgICAgQVNTRVJUKGxpc3QpOwogICAgIGxpc3QtPnVwZGF0ZShh
ZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAppbmRleCAzODE0ZWM3Li4yNDIyY2FkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC05
NSwxNyArOTUsMTcgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNsb3NlKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp0YWtlRm9jdXMoV0tQ
YWdlUmVmLCBXS0ZvY3VzRGlyZWN0aW9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAg
IC8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uLgotICAgIGV2
YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3
LT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGll
bnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+ZXZhc09iamVjdCgpLCBmYWxzZSk7CiB9CiAKIHZv
aWQgUGFnZVVJQ2xpZW50RWZsOjpmb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT5tX3ZpZXctPnZpZXcoKSwgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0
KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPmV2YXNPYmplY3QoKSwgdHJ1
ZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp1bmZvY3VzKFdLUGFnZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBmYWxzZSk7CisgICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPmV2
YXNPYmplY3QoKSwgZmFsc2UpOwogfQogCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNj
cmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgYWxlcnRUZXh0LCBXS0ZyYW1lUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAKaW5kZXggMDA1
MDI4My4uZTZlYjU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCkBAIC01Nyw3ICs1Nyw3
IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgd2lsbEVudGVyRnVsbFNjcmVlbigpOwotICAgIEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOworICAgIHRvRXdr
VmlldyhtX3dlYlZpZXcpLT5lbnRlckZ1bGxTY3JlZW4oKTsKICAgICBkaWRFbnRlckZ1bGxTY3Jl
ZW4oKTsKIH0KIApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHk6OmV4aXRGdWxsU2NyZWVuKCkKIAogCiAgICAgd2lsbEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAg
RXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZXhpdEZ1bGxTY3JlZW4oKTsKKyAg
ICB0b0V3a1ZpZXcobV93ZWJWaWV3KS0+ZXhpdEZ1bGxTY3JlZW4oKTsKICAgICBkaWRFeGl0RnVs
bFNjcmVlbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDg1M2Q0N2UuLmZhM2ZhYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwu
Y3BwCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgImV3a19zZXR0aW5ncy5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCi0jaW5jbHVkZSAi
ZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWZsSW5zcGVjdG9yVXRpbGl0
aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk0LDE3ICs5NCwxOCBAQCBXZWJQYWdlUHJveHkqIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAgIC8vIEdyYWNl
ZnVsbHkgZmFsbCBiYWNrIHRvIHNvZnR3YXJlIGlmIGV2YXNfZ2wgZW5naW5lIGlzIG5vdCBhdmFp
bGFibGUuCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICNlbmRpZgotICAgICAgICBtX2lu
c3BlY3RvcldpbmRvdyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIGluaXRpYWxXaW5kb3dXaWR0
aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwgMCk7CisgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBlY29y
ZV9ldmFzX25ldygwLCAwLCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWln
aHQsIDApOwogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgRXdrVmlldyog
ZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2lu
ZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3Rv
clBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIGlmICghZXdrVmll
dykKKyAgICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHRvQVBJKHBhZ2UoKS0+cHJvY2Vzcygp
LT5jb250ZXh0KCkpOworICAgIG1faW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNP
YmplY3QoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCBjb250ZXh0UmVmID8gRXdr
Q29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQo
KSwgdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7
CisgICAgaWYgKCFtX2luc3BlY3RvclZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9p
bnNwZWN0b3JWaWV3ID0gZXdrVmlldy0+dmlldygpOwotCisgICAgRXdrVmlldyogZXdrVmlldyA9
IHRvRXdrVmlldyhtX2luc3BlY3RvclZpZXcpOworICAgIEFTU0VSVChld2tWaWV3KTsKICAgICBl
d2tWaWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwogCiAg
ICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1ZpZXctPnNldHRpbmdzKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAKaW5kZXggYTMz
MjcyNC4uZGU3MGNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJQYWdlUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
UGFnZVByb3h5RWZsLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
RXZhc19PYmplY3QqIFdlYlBhZ2VQcm94eTo6dmlld1dpZGdldCgpCiB7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+dmlldygpLT52aWV3KCk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+
dmlldygpLT5ldmFzT2JqZWN0KCk7CiB9CiAKIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJk
VXNlckFnZW50KGNvbnN0IFN0cmluZyYgLyphcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQqLykK
</data>
<flag name="commit-queue"
          id="206125"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186622</attachid>
            <date>2013-02-05 07:27:07 -0800</date>
            <delta_ts>2013-02-05 08:54:36 -0800</delta_ts>
            <desc>patch v4</desc>
            <filename>bug108062_v4</filename>
            <type>text/plain</type>
            <size>70959</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDJjODQ5YTgyYzgxODhjMmE4Mzg4YzZlOTcyY2FmZWM5OTk2OTVmMDgKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGM1NmJmNzUuLmRiYjE0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MSBAQAorMjAxMy0w
Mi0wNSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXSzJdIEVuY2Fwc3VsYXRlIEV3ayBWaWV3IGV2YXMgc21hcnQgb2Jq
ZWN0IGNvZGUgaW5zaWRlIEV3a1ZpZXcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBFd2sgVmlldyBpbXBsZW1lbnRhdGlvbiBpcyBlbmNh
cHN1bGF0ZWQgd2l0aGluIEV3a1ZpZXcgY2xhc3MuCisgICAgICAgIEJlc2lkZXMgbXVsdGlwbGUg
cmVmYWN0b3Jpbmcgb2YgRXdrIFZpZXcgZXZhcyBzbWFydCBvYmplY3QgY29kZSB3YXMgbWFkZS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAgKGNy
ZWF0ZVdLVmlldyk6IEF1eCBmdW5jdGlvbiB0byBzaGFyZSBXS1ZpZXcgY3JlYXRpb24uCisgICAg
ICAgIChXS1ZpZXdDcmVhdGUpOiBVcGRhdGVkIGR1ZSB0byBjaGFuZ2VzIGluIEV3a1ZpZXcgaW50
ZXJmYWNlLgorICAgICAgICAoV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KTogRGl0dG8uCisg
ICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAoc21hcnREYXRhQ2hhbmdlZCk6CisgICAg
ICAgIChkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKTogUmVuYW1lZCBhbmQgbW92ZWQgaGVyZSBm
cm9tIGV3a192aWV3LgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcik6CisgICAgICAgIEFk
ZGVkIGEgbmV3IGNsYXNzIHRvIGVuY2Fwc3VsYXRlIEV3ayBWaWV3IEV2YXMgZXZlbnRzIGhhbmRs
aW5nLgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcjo6c3Vic2NyaWJlKTogU3Vic2NyaWJl
IHRvIGV2YXMgb2JqZWN0IGV2ZW50cy4KKyAgICAgICAgKEV3a1ZpZXdFdmVudEhhbmRsZXI6OnVu
c3Vic2NyaWJlKTogVW5zdWJzY3JpYmUgZnJvbSBldmFzIG9iamVjdCBldmVudHMuCisgICAgICAg
ICg6Om9uRXZlbnQpOgorICAgICAgICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tW
aWV3Ojp+RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KToKKyAg
ICAgICAgKEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKTogUmVuYW1lZCBhbmQgbW92
ZWQgaGVyZSBmcm9tIGV3a192aWV3LgorICAgICAgICAoRXdrVmlldzo6dG9FdmFzT2JqZWN0KToK
KyAgICAgICAgKEV3a1ZpZXc6OnNtYXJ0RGF0YSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRNb3Vz
ZUV2ZW50c0VuYWJsZWQpOiBOb3cgdXNpbmcgRXdrVmlld0V2ZW50SGFuZGxlci4KKyAgICAgICAg
KEV3a1ZpZXc6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6b25FdmFzU21hcnRB
ZGQpOgorICAgICAgICBFdmFzX1NtYXJ0X0NsYXNzIGludGVyZmFjZSBjYWxsYmFjayBtb3ZlZCBp
bnRvIHRoZSBFd2tWaWV3IGNsYXNzLgorICAgICAgICAoRXdrVmlldzo6b25FdmFzU21hcnREZWxl
dGUpOiBEaXR0by4KKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0UmVzaXplKTogRGl0dG8u
CisgICAgICAgIChFd2tWaWV3OjpvbkV2YXNTbWFydE1vdmUpOiBEaXR0by4KKyAgICAgICAgKEV3
a1ZpZXc6Om9uRXZhc1NtYXJ0Q2FsY3VsYXRlKTogRGl0dG8uCisgICAgICAgIChFd2tWaWV3Ojpv
bkV2YXNTbWFydFNob3cpOiBEaXR0by4KKyAgICAgICAgKEV3a1ZpZXc6Om9uRXZhc1NtYXJ0SGlk
ZSk6IERpdHRvLgorICAgICAgICAoRXdrVmlldzo6b25FdmFzU21hcnRDb2xvclNldCk6IERpdHRv
LgorICAgICAgICAoRXdrVmlldzo6b25WaWV3U21hcnRGb2N1c0luKToKKyAgICAgICAgRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MgaW50ZXJmYWNlIGNhbGxiYWNrIG1vdmVkIGludG8gdGhlIEV3a1ZpZXcg
Y2xhc3MuCisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydEZvY3VzT3V0KTogRGl0dG8uCisg
ICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydE1vdXNlV2hlZWwpOiBEaXR0by4KKyAgICAgICAg
KEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VEb3duKTogRGl0dG8uCisgICAgICAgIChFd2tWaWV3
OjpvblZpZXdTbWFydE1vdXNlVXApOiBEaXR0by4KKyAgICAgICAgKEV3a1ZpZXc6Om9uVmlld1Nt
YXJ0TW91c2VNb3ZlKTogRGl0dG8uCisgICAgICAgIChFd2tWaWV3OjpvblZpZXdTbWFydEtleURv
d24pOiBEaXR0by4KKyAgICAgICAgKEV3a1ZpZXc6Om9uVmlld1NtYXJ0S2V5VXApOiBEaXR0by4K
KyAgICAgICAgKEV3a1ZpZXc6Om9uVG91Y2hEb3duKTogTm93IHVzaW5nIHRvRXdrVmlldygpLgor
ICAgICAgICAoRXdrVmlldzo6b25Ub3VjaFVwKTogRGl0dG8uCisgICAgICAgIChFd2tWaWV3Ojpv
blRvdWNoTW92ZSk6IERpdHRvLgorICAgICAgICAodG9Fd2tWaWV3KToKKyAgICAgICAgQWRkZWQg
bmV3IGZyZWUgZnVuY3Rpb24gZm9yIGNvbnZlcnRpb24gdmlldyBldmFzIG9iamVjdCB0byBFd2tW
aWV3Q2xhc3MuCisgICAgICAgIChpc1ZpZXdFdmFzT2JqZWN0KToKKyAgICAgICAgQWRkZWQgbmV3
IGZyZWUgZnVuY3Rpb24gdGhhdCBzaG93cyB3aGV0aGVyIHRoZSBnaXZlbiBldmFzIG9iamVjdCBp
cyBld2sgdmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAg
ICAgIChFd2tWaWV3OjpldmFzT2JqZWN0KTogUmVuYW1lZCBmdW5jdGlvbiByZXR1cm5pbmcgZXZh
cyBvYmplY3QgZnJvbSBFd2tWaWV3LgorICAgICAgICAoRXdrVmlldyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdfc21hcnRfY2xh
c3Nfc2V0KTogTm93IHVzaW5nIEV3a1ZpZXcgY2xhc3MgaW1wbGVtZW50YXRpb24uCisgICAgICAg
IChld2tfdmlld19zbWFydF9hZGQpOiBEaXR0by4KKyAgICAgICAgKGV3a192aWV3X2FkZF93aXRo
X2NvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQpOiBJ
bWxlbWVudGF0aW9uIGNoYW5nZWQgYWZ0ZXIgZXdrX3ZpZXcgYXV4IG1hY3JvcyByZW1vdmFsLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOiBVcGRhdGVk
IGR1ZSB0byBjaGFuZ2VzIGluIEV3a1ZpZXcgaW50ZXJmYWNlLgorICAgICAgICAoV2ViS2l0OjpC
YWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKTogRGl0dG8uCisgICAgICAgICogVUlQcm9j
ZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHA6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRh
dGEpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRp
ZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0
SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRVcGRhdGVIaXN0b3J5VGl0
bGUpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcDog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlOjpwcm9jZXNzRGlkQ3Jhc2gp
OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcDog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VCYWNr
Rm9yd2FyZExpc3QpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVu
dEVmbC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnRha2VG
b2N1cyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OmZvY3VzKTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dW5mb2N1cyk6IERpdHRv
LgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Ojpl
bnRlckZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOiBEaXR0by4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZXdXaWRnZXQpOiBEaXR0by4KKwogMjAxMy0wMi0w
NCAgR3dhbmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAg
Q29vcmRpbmF0ZWQgR3JhcGhpY3MgOiBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbSBkb2Vz
IG5vdCBkbyBhbnl0aGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwv
V0tWaWV3LmNwcAppbmRleCA5YzFkMzFkLi42N2M5M2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCkBAIC0yMiwyNyArMjIsMjkgQEAKIAogI2lu
Y2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJld2tf
dmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgPFdlYktpdDIvV0tJbWFnZUNhaXJvLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAK
LVdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQorc3RhdGljIGlubGluZSBXS1ZpZXdS
ZWYgY3JlYXRlV0tWaWV3KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9y
KQogewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNv
bnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIGlm
ICghZXdrVmlldykKKyAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9IGNvbnRleHRSZWYg
PyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29u
dGV4dCgpOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3JlYXRlRXZh
c09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIGlm
ICghZXZhc09iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V0tWaWV3UmVmPihXS1JldGFpbihld2tWaWV3LT53a1ZpZXcoKSkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdLUmV0YWluKHRvRXdrVmlldyhldmFzT2JqZWN0KS0+d2tW
aWV3KCkpKTsKIH0KIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCitXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBFd2tWaWV3
KiBld2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7Ci0gICAgaWYgKCFld2tWaWV3KQotICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29udGV4dFJl
ZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Cit9CiAKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbihld2tWaWV3LT53a1ZpZXcoKSkpOwor
V0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVdLVmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmll
d1JlZiB2aWV3UmVmKQpAQCAtNzcsNiArNzksNiBAQCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZh
c09iamVjdChXS1ZpZXdSZWYgdmlld1JlZikKIAogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFw
c2hvdChXS1ZpZXdSZWYgdmlld1JlZikKIHsKLSAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmll
dzo6ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIEV3
a1ZpZXcqIGV3a1ZpZXcgPSB0b0V3a1ZpZXcodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkp
OwogICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtl
U25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKaW5kZXggMDQ2Njk0ZDcuLjI1MDgxOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yNyw2
ICsyNyw5IEBACiAjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1ZGUgIkZvcm1DbGll
bnRFZmwuaCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKKyNpbmNsdWRlICJO
YXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50
QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIlBh
Z2VDbGllbnRMZWdhY3lJbXBsLmgiCkBAIC01Nyw3ICs2MCw2IEBACiAjaW5jbHVkZSAiZXdrX3Nl
Y3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUu
aCIKICNpbmNsdWRlICJld2tfdmlldy5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIK
ICNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFY29y
ZV9FdmFzLmg+CiAjaW5jbHVkZSA8RWNvcmVfWC5oPgpAQCAtNjYsNiArNjgsOCBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgorI2luY2x1ZGUg
PHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBFTkFC
TEUoVklCUkFUSU9OKQogI2luY2x1ZGUgIlZpYnJhdGlvbkNsaWVudEVmbC5oIgpAQCAtODMsNDMg
Kzg3LDE1MCBAQCB1c2luZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RhdGljIGNvbnN0IGNo
YXIgc21hcnRDbGFzc05hbWVbXSA9ICJFV0syX1ZpZXciOwogc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0Q3Vyc29yU2l6ZSA9IDE2OwogCi10eXBlZGVmIEhhc2hNYXA8V0tQYWdlUmVmLCBFdmFzX09i
amVjdCo+IFBhZ2VWaWV3TWFwOworLy8gQXV4aWxpYXJ5IGZ1bmN0aW9ucy4KIAotc3RhdGljIGlu
bGluZSBQYWdlVmlld01hcCYgcGFnZVZpZXdNYXAoKQorc3RhdGljIGlubGluZSB2b2lkIHNtYXJ0
RGF0YUNoYW5nZWQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUGFnZVZpZXdNYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Cisg
ICAgQVNTRVJUKHNtYXJ0RGF0YSk7CisKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLmFueSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IHRydWU7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2hhbmdlZChzbWFydERhdGEtPnNlbGYpOwogfQogCi12b2lk
IEV3a1ZpZXc6OmFkZFRvUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykKK3N0YXRpYyBFdmFzX1Nt
YXJ0KiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCkKIHsKLSAgICBQYWdlVmlld01hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IHBhZ2VWaWV3TWFwKCkuYWRkKHZpZXctPndrUGFnZSgpLCB2aWV3LT52
aWV3KCkpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNT
X0lOSVRfTkFNRV9WRVJTSU9OKHNtYXJ0Q2xhc3NOYW1lKTsKKyAgICBzdGF0aWMgRXZhc19TbWFy
dCogc21hcnQgPSAwOworCisgICAgaWYgKCFzbWFydCkgeworICAgICAgICBFd2tWaWV3Ojppbml0
U21hcnRDbGFzc0ludGVyZmFjZShhcGkpOworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xh
c3NfbmV3KCZhcGkuc2MpOworICAgIH0KKworICAgIHJldHVybiBzbWFydDsKIH0KIAotdm9pZCBF
d2tWaWV3OjpyZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykKKy8vIEV3a1ZpZXdF
dmVudEhhbmRsZXIgaW1wbGVtZW50YXRpb24uCisKK3RlbXBsYXRlIDxFdmFzX0NhbGxiYWNrX1R5
cGUgRXZlbnRUeXBlPgorY2xhc3MgRXdrVmlld0V2ZW50SGFuZGxlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIHZvaWQgc3Vic2NyaWJlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKGV2YXNPYmplY3QsIEV2ZW50VHlw
ZSwgb25FdmVudCwgRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCB1bnN1YnNjcmliZShFdmFzX09iamVjdCogZXZhc09iamVjdCkKKyAgICB7
CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChldmFzT2JqZWN0LCBFdmVu
dFR5cGUsIG9uRXZlbnQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9uRXZlbnQodm9pZCog
ZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKK307CisKK3RlbXBs
YXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9ET1dO
Pjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pCiB7Ci0gICAgQVNTRVJUKHBhZ2VWaWV3TWFwKCkuY29udGFpbnModmlldy0+d2tQYWdlKCkp
KTsKLSAgICBwYWdlVmlld01hcCgpLnJlbW92ZSh2aWV3LT53a1BhZ2UoKSk7CisgICAgRXZhc19F
dmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNl
X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBpZiAoc21hcnRE
YXRhLT5hcGktPm1vdXNlX2Rvd24pCisgICAgICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3du
KHNtYXJ0RGF0YSwgZG93bkV2ZW50KTsKIH0KIAotY29uc3QgRXZhc19PYmplY3QqIEV3a1ZpZXc6
OnZpZXdGcm9tUGFnZVZpZXdNYXAoY29uc3QgV0tQYWdlUmVmIHBhZ2UpCit0ZW1wbGF0ZSA8Pgor
dm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVA+OjpvbkV2ZW50
KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAg
ICBBU1NFUlQocGFnZSk7CisgICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0YXRp
Y19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKKyAgICBpZiAoc21hcnREYXRhLT5hcGktPm1vdXNlX3VwKQorICAgICAgICBzbWFydERh
dGEtPmFwaS0+bW91c2VfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsKK30KIAotICAgIHJldHVybiBw
YWdlVmlld01hcCgpLmdldChwYWdlKTsKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhh
bmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFz
KiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19FdmVudF9Nb3Vz
ZV9Nb3ZlKiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihl
dmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBpZiAoc21hcnREYXRhLT5hcGkt
Pm1vdXNlX21vdmUpCisgICAgICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKHNtYXJ0RGF0
YSwgbW92ZUV2ZW50KTsKIH0KIAotRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogdmlldywg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwg
Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KHZpZXcpCit0ZW1wbGF0
ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+Ojpv
bkV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKKyAgICBpZiAoc21hcnREYXRhLT5hcGktPmZvY3VzX2luKQorICAgICAg
ICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4oc21hcnREYXRhKTsKK30KKwordGVtcGxhdGUgPD4K
K3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVD46Om9uRXZl
bnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGRhdGEpOworICAgIGlmIChzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KQorICAgICAgICBz
bWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2
b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTD46Om9uRXZl
bnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQorewor
ICAgIEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFz
X0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Cisg
ICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbCkKKyAgICAgICAgc21hcnREYXRhLT5h
cGktPm1vdXNlX3doZWVsKHNtYXJ0RGF0YSwgd2hlZWxFdmVudCk7Cit9CisKK3RlbXBsYXRlIDw+
Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlfRE9XTj46Om9uRXZl
bnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQorewor
ICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBpZiAo
c21hcnREYXRhLT5hcGktPmtleV9kb3duKQorICAgICAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rv
d24oc21hcnREYXRhLCBkb3duRXZlbnQpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3
RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfS0VZX1VQPjo6b25FdmVudCh2b2lkKiBkYXRhLCBF
dmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19FdmVudF9L
ZXlfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5m
byk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIGlmIChzbWFydERhdGEtPmFwaS0+a2V5X3Vw
KQorICAgICAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7Cit9
CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19T
SE9XPjo6b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sK
KyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgdG9Fd2tWaWV3KHNtYXJ0RGF0YSktPnBhZ2UoKS0+
dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlzaWJsZSk7Cit9CisKK3Rl
bXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19ISURFPjo6
b25FdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHBhc3MgVmlld0lzVmlzaWJsZSBo
ZXJlLiB2aWV3U3RhdGVEaWRDaGFuZ2UoKSBpdHNlbGYgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVh
bGx5IHNldHRpbmcgdGhlIHZpc2liaWxpdHkgdG8gVmlzaWJsZSBvciBIaWRkZW4KKyAgICAvLyBk
ZXBlbmRpbmcgb24gd2hhdCBXZWJQYWdlUHJveHk6OmlzVmlld1Zpc2libGUoKSByZXR1cm5zLCB0
aGlzIHNpbXBseSB0cmlnZ2VycyB0aGUgcHJvY2Vzcy4KKyAgICB0b0V3a1ZpZXcoc21hcnREYXRh
KS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxl
KTsKK30KKworLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4KKworRXdrVmlldzo6RXdrVmlldyhF
dmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKKyAgICA6IG1f
ZXZhc09iamVjdChldmFzT2JqZWN0KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShm
YWxzZSkKICNlbmRpZgogICAgICwgbV9wYWdlQ2xpZW50KGJlaGF2aW9yID09IERlZmF1bHRCZWhh
dmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRlKHRoaXMpIDogUGFnZUNsaWVudExl
Z2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2Vi
Vmlldyh0b0ltcGwobV9jb250ZXh0LT53a0NvbnRleHQoKSksIG1fcGFnZUNsaWVudC5nZXQoKSwg
cGFnZUdyb3VwLCB2aWV3KSkpCisgICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXco
dG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCBtX3BhZ2VDbGllbnQuZ2V0KCksIHRvSW1w
bChwYWdlR3JvdXApLCBldmFzT2JqZWN0KSkpCiAgICAgLCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VM
b2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFn
ZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlVUlDbGllbnQoUGFn
ZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0xNjcsOCArMjc4LDYgQEAgRXdrVmlldzo6
RXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCBXZWJQYWdlR3JvdXAKICAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsKIAogICAgIGljb25EYXRh
YmFzZS0+d2F0Y2hDaGFuZ2VzKEljb25DaGFuZ2VDYWxsYmFja0RhdGEoRXdrVmlldzo6b25GYXZp
Y29uQ2hhbmdlZCwgdGhpcykpOwotCi0gICAgRXdrVmlldzo6YWRkVG9QYWdlVmlld01hcCh0aGlz
KTsKIH0KIAogRXdrVmlldzo6fkV3a1ZpZXcoKQpAQCAtMTc4LDIyICsyODcsODcgQEAgRXdrVmll
dzo6fkV3a1ZpZXcoKQogICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwogCiAgICAgaWNvbkRhdGFi
YXNlLT51bndhdGNoQ2hhbmdlcyhFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKTsKK30KKworRXZh
c19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1Nt
YXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnQsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChjb250ZXh0LCAwKTsKIAotICAgIEV3a1ZpZXc6OnJlbW92ZUZyb21QYWdlVmlld01hcCh0aGlz
KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChj
YW52YXMsIHNtYXJ0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhc09i
amVjdCwgMCk7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3
OjpzbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgaWYgKCFzbWFydERhdGEpIHsKKyAgICAgICAg
ZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7CisKKyAgICAvLyBEZWZhdWx0IFdlYlBhZ2VH
cm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91
cFJlZiBpcyAwLAorICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgor
ICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV2YXNPYmplY3QsIGNvbnRleHQsIHBh
Z2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIHJldHVybiBldmFzT2JqZWN0OwogfQogCi1Fd2tf
Vmlld19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoKSBjb25zdAorRXZhc19PYmplY3Qq
IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0Nv
bnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgVmlld0JlaGF2aW9y
IGJlaGF2aW9yKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobV9ldmFzT2JqZWN0KSk7CisgICAgcmV0dXJu
IGNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCksIGNv
bnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwogfQogCi1Fd2tWaWV3KiBFd2tWaWV3Ojpm
cm9tRXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCogdmlldykKK2Jvb2wgRXdrVmlldzo6aW5p
dFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRfQ2xhc3MmIGFwaSkKIHsKLSAgICBB
U1NFUlQodmlldyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxF
d2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQodmlldykpOwot
ICAgIEFTU0VSVChzZCk7Ci0gICAgQVNTRVJUKHNkLT5wcml2KTsKLSAgICByZXR1cm4gc2QtPnBy
aXY7CisgICAgaWYgKGFwaS52ZXJzaW9uICE9IEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04p
IHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgiRXdrX1ZpZXdfU21hcnRfQ2xhc3MgJXAgaXMgdmVy
c2lvbiAlbHUgd2hpbGUgJWx1IHdhcyBleHBlY3RlZC4iLAorICAgICAgICAgICAgJmFwaSwgYXBp
LnZlcnNpb24sIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFwYXJlbnRTbWFydENsYXNzLmFkZCkKKyAgICAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJnBhcmVudFNtYXJ0Q2xhc3MpOwor
CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJmFwaS5zYyk7CisKKyAg
ICAvLyBTZXQgRXZhc19TbWFydF9DbGFzcyBpbnRlcmZhY2UuCisgICAgYXBpLnNjLmFkZCA9IG9u
RXZhc1NtYXJ0QWRkOworICAgIGFwaS5zYy5kZWwgPSBvbkV2YXNTbWFydERlbGV0ZTsKKyAgICBh
cGkuc2MubW92ZSA9IG9uRXZhc1NtYXJ0TW92ZTsKKyAgICBhcGkuc2MucmVzaXplID0gb25FdmFz
U21hcnRSZXNpemU7CisgICAgYXBpLnNjLnNob3cgPSBvbkV2YXNTbWFydFNob3c7CisgICAgYXBp
LnNjLmhpZGUgPSBvbkV2YXNTbWFydEhpZGU7CisgICAgYXBpLnNjLmNvbG9yX3NldCA9IG9uRXZh
c1NtYXJ0Q29sb3JTZXQ7CisgICAgYXBpLnNjLmNhbGN1bGF0ZSA9IG9uRXZhc1NtYXJ0Q2FsY3Vs
YXRlOworICAgIGFwaS5zYy5kYXRhID0gc21hcnRDbGFzc05hbWU7IC8vIEl0IGlzIHVzZWQgZm9y
IHR5cGUgY2hlY2tpbmcuCisKKyAgICAvLyBTZXQgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgaW50ZXJm
YWNlLgorICAgIGFwaS5mb2N1c19pbiA9IG9uVmlld1NtYXJ0Rm9jdXNJbjsKKyAgICBhcGkuZm9j
dXNfb3V0ID0gb25WaWV3U21hcnRGb2N1c091dDsKKyAgICBhcGkubW91c2Vfd2hlZWwgPSBvblZp
ZXdTbWFydE1vdXNlV2hlZWw7CisgICAgYXBpLm1vdXNlX2Rvd24gPSBvblZpZXdTbWFydE1vdXNl
RG93bjsKKyAgICBhcGkubW91c2VfdXAgPSBvblZpZXdTbWFydE1vdXNlVXA7CisgICAgYXBpLm1v
dXNlX21vdmUgPSBvblZpZXdTbWFydE1vdXNlTW92ZTsKKyAgICBhcGkua2V5X2Rvd24gPSBvblZp
ZXdTbWFydEtleURvd247CisgICAgYXBpLmtleV91cCA9IG9uVmlld1NtYXJ0S2V5VXA7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgRXZhc19PYmplY3QqIEV3a1ZpZXc6OnRvRXZhc09i
amVjdChXS1BhZ2VSZWYgcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAgcmV0dXJuIHRv
SW1wbChwYWdlKS0+dmlld1dpZGdldCgpOworfQorCitFd2tfVmlld19TbWFydF9EYXRhKiBFd2tW
aWV3OjpzbWFydERhdGEoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgQVNTRVJUKGV2
YXNPYmplY3QpOworCisgICAgaWYgKCFpc1ZpZXdFdmFzT2JqZWN0KGV2YXNPYmplY3QpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9E
YXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXZhc09iamVjdCkpOwogfQogCiBXS1Bh
Z2VSZWYgRXdrVmlldzo6d2tQYWdlKCkgY29uc3QKQEAgLTM1Nyw2ICs1MzEsMTEgQEAgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKiBFd2tWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQog
fQogI2VuZGlmCiAKK2lubGluZSBFd2tfVmlld19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERh
dGEoKSBjb25zdAoreworICAgIHJldHVybiBzbWFydERhdGEobV9ldmFzT2JqZWN0KTsKK30KKwog
dm9pZCBFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZChUaW1lcjxFd2tWaWV3PiopCiB7CiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNTYwLDE0ICs3MzksMTMgQEAgdm9pZCBFd2tW
aWV3OjpzZXRNb3VzZUV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiAgICAgbV9tb3VzZUV2
ZW50c0VuYWJsZWQgPSBlbmFibGVkOwogICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwg
b25Nb3VzZURvd24sIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRk
KG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgb25Nb3VzZVVwLCBzZCk7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNf
Q0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Nb3VzZU1vdmUsIHNkKTsKKyAgICAgICAgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX0RPV04+OjpzdWJzY3JpYmUobV9ldmFzT2Jq
ZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX1VQ
Pjo6c3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8
RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6c3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09i
amVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvbk1vdXNlRG93bik7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tf
TU9VU0VfVVAsIG9uTW91c2VVcCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNr
X2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Nb3VzZU1vdmUp
OworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46
OnVuc3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8
RVZBU19DQUxMQkFDS19NT1VTRV9VUD46OnVuc3Vic2NyaWJlKG1fZXZhc09iamVjdCk7CisgICAg
ICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6dW5zdWJz
Y3JpYmUobV9ldmFzT2JqZWN0KTsKICAgICB9CiB9CiAKQEAgLTkwOSw3ICsxMDg3LDcgQEAgV0tQ
YWdlUmVmIEV3a1ZpZXc6OmNyZWF0ZU5ld1BhZ2UoUGFzc1JlZlB0cjxFd2tVcmxSZXF1ZXN0PiBy
ZXF1ZXN0LCBXS0RpY3Rpb25hcnkKICAgICBpZiAoIW5ld0V3a1ZpZXcpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgRXdrVmlldyogbmV3Vmlld0ltcGwgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVj
dChuZXdFd2tWaWV3KTsKKyAgICBFd2tWaWV3KiBuZXdWaWV3SW1wbCA9IHRvRXdrVmlldyhuZXdF
d2tWaWV3KTsKICAgICBBU1NFUlQobmV3Vmlld0ltcGwpOwogCiAgICAgbmV3Vmlld0ltcGwtPm1f
d2luZG93RmVhdHVyZXMgPSBld2tXaW5kb3dGZWF0dXJlczsKQEAgLTkyOCwzMSArMTEwNiwyMTQg
QEAgdm9pZCBFd2tWaWV3OjpjbG9zZSgpCiAgICAgc2QtPmFwaS0+d2luZG93X2Nsb3NlKHNkKTsK
IH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19P
YmplY3QqLCB2b2lkKiBldmVudEluZm8pCit2b2lkIEV3a1ZpZXc6Om9uRXZhc1NtYXJ0QWRkKEV2
YXNfT2JqZWN0KiBldmFzT2JqZWN0KQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93
bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKLSAg
ICBzZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBkb3duRXZlbnQpOworICAgIGNvbnN0IEV2YXNfU21h
cnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV2YXNPYmplY3QpOworICAg
IGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNtYXJ0Q2xhc3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dl
dChzbWFydCk7CisgICAgY29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqPihzbWFydENsYXNzKTsKKyAgICBB
U1NFUlQoYXBpKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1Zp
ZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKworICAgIGlmICghc21hcnREYXRhKSB7CisgICAg
ICAgIC8vIEFsbG9jYXRpbmcgd2l0aCAnY2FsbG9jJyBhcyB0aGUgQVBJIGNvbnRyYWN0IGlzIHRo
YXQgaXQgc2hvdWxkIGJlIGRlbGV0ZWQgd2l0aCAnZnJlZSgpJy4KKyAgICAgICAgc21hcnREYXRh
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdr
X1ZpZXdfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQo
ZXZhc09iamVjdCwgc21hcnREYXRhKTsKKyAgICB9CisKKyAgICBzbWFydERhdGEtPnNlbGYgPSBl
dmFzT2JqZWN0OworICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOworCisgICAgcGFyZW50U21hcnRD
bGFzcy5hZGQoZXZhc09iamVjdCk7CisKKyAgICBzbWFydERhdGEtPnByaXYgPSAwOworCisgICAg
Ly8gQ3JlYXRlIGV2YXNfb2JqZWN0X2ltYWdlIHRvIGRyYXcgd2ViIGNvbnRlbnRzLgorICAgIHNt
YXJ0RGF0YS0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2
YXMpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmltYWdlLCBm
YWxzZSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbGVkX3NldChzbWFydERhdGEtPmltYWdl
LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0YS0+aW1h
Z2UsIGV2YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7
CisKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+OjpzdWJz
Y3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNL
X0ZPQ1VTX09VVD46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5k
bGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUw+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7Cisg
ICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9ET1dOPjo6c3Vic2NyaWJl
KGV2YXNPYmplY3QpOworICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlf
VVA+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFT
X0NBTExCQUNLX1NIT1c+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50
SGFuZGxlcjxFVkFTX0NBTExCQUNLX0hJREU+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CiB9CiAK
LXZvaWQgRXdrVmlldzo6b25Nb3VzZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnREZWxldGUoRXZhc19P
YmplY3QqIGV2YXNPYmplY3QpCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOwotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRh
dGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX3VwKTsKLSAgICBzZC0+YXBpLT5t
b3VzZV91cChzZCwgdXBFdmVudCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
ID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIGlmIChzbWFydERhdGEpIHsK
KyAgICAgICAgQVNTRVJUKHNtYXJ0RGF0YS0+cHJpdik7IC8vIHNtYXJ0RGF0YS0+cHJpdiBpcyBF
d2tWaWV3IGluc3RhbmNlLgorICAgICAgICBkZWxldGUgc21hcnREYXRhLT5wcml2OworICAgIH0K
KworICAgIHBhcmVudFNtYXJ0Q2xhc3MuZGVsKGV2YXNPYmplY3QpOwogfQogCi12b2lkIEV3a1Zp
ZXc6Om9uTW91c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2
ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6b25FdmFzU21hcnRSZXNpemUoRXZhc19PYmplY3QqIGV2
YXNPYmplY3QsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEV2
YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9N
b3VzZV9Nb3ZlKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT5tb3VzZV9tb3ZlKTsKLSAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBtb3ZlRXZl
bnQpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0
RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERh
dGEpOworCisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+aW1hZ2UsIHdpZHRoLCBo
ZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+aW1hZ2Us
IHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0
YS0+aW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2Vk
LnNpemUgPSB0cnVlOworICAgIHNtYXJ0RGF0YUNoYW5nZWQoc21hcnREYXRhKTsKK30KKwordm9p
ZCBFd2tWaWV3OjpvbkV2YXNTbWFydE1vdmUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIEV2YXNf
Q29vcmQgLyp4Ki8sIEV2YXNfQ29vcmQgLyp5Ki8pCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhID0gRXdrVmlldzo6c21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CisKKyAgICBzbWFydERhdGEtPmNoYW5n
ZWQucG9zaXRpb24gPSB0cnVlOworICAgIHNtYXJ0RGF0YUNoYW5nZWQoc21hcnREYXRhKTsKK30K
Kwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydENhbGN1bGF0ZShFdmFzX09iamVjdCogZXZhc09i
amVjdCkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3Ojpz
bWFydERhdGEoZXZhc09iamVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhKTsKKworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2aWV3KTsKKworICAgIHNtYXJ0RGF0YS0+Y2hh
bmdlZC5hbnkgPSBmYWxzZTsKKworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsK
KyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXZhc09iamVjdCwgJngsICZ5LCAmd2lkdGgs
ICZoZWlnaHQpOworCisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbikgeworICAg
ICAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAgc21hcnRE
YXRhLT52aWV3LnggPSB4OworICAgICAgICBzbWFydERhdGEtPnZpZXcueSA9IHk7CisgICAgICAg
IGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRhLT5pbWFnZSwgeCwgeSk7CisgICAgfQorCisgICAg
aWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplKSB7CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdl
ZC5zaXplID0gZmFsc2U7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lkdGg7CisgICAg
ICAgIHNtYXJ0RGF0YS0+dmlldy5oID0gaGVpZ2h0OworCisgICAgICAgIGlmICh2aWV3LT5wYWdl
KCktPmRyYXdpbmdBcmVhKCkpCisgICAgICAgICAgICB2aWV3LT5wYWdlKCktPmRyYXdpbmdBcmVh
KCktPnNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgSW50U2l6ZSgpKTsKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgdmlldy0+c2V0TmVlZHNTdXJmYWNl
UmVzaXplKCk7CisjZW5kaWYKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAgICAg
dmlldy0+cGFnZUNsaWVudCgpLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKKyNlbmRpZgorICAgIH0K
K30KKwordm9pZCBFd2tWaWV3OjpvbkV2YXNTbWFydFNob3coRXZhc19PYmplY3QqIGV2YXNPYmpl
Y3QpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gRXdrVmlldzo6c21h
cnREYXRhKGV2YXNPYmplY3QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YSk7CisKKyAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc21hcnREYXRhLT5iYXNl
LmNsaXBwZXIpKQorICAgICAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+YmFzZS5jbGlw
cGVyKTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOworfQorCit2b2lk
IEV3a1ZpZXc6Om9uRXZhc1NtYXJ0SGlkZShFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBFd2tWaWV3OjpzbWFydERhdGEoZXZh
c09iamVjdCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKwor
ICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNf
b2JqZWN0X2hpZGUoc21hcnREYXRhLT5pbWFnZSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25FdmFz
U21hcnRDb2xvclNldChFdmFzX09iamVjdCogZXZhc09iamVjdCwgaW50IHJlZCwgaW50IGdyZWVu
LCBpbnQgYmx1ZSwgaW50IGFscGhhKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IEV3a1ZpZXc6OnNtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEpOworCisgICAgRXdrVmlldyogdmlldyA9IHRvRXdrVmll
dyhzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZpZXcpOworCisg
ICAgYWxwaGEgPSBjbGFtcFRvKGFscGhhLCAwLCAyNTUpOworICAgIHJlZCA9IGNsYW1wVG8ocmVk
LCAwLCBhbHBoYSk7CisgICAgZ3JlZW4gPSBjbGFtcFRvKGdyZWVuLCAwLCBhbHBoYSk7CisgICAg
Ymx1ZSA9IGNsYW1wVG8oYmx1ZSwgMCwgYWxwaGEpOworCisgICAgZXZhc19vYmplY3RfaW1hZ2Vf
YWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGFscGhhIDwgMjU1KTsKKyAgICB2aWV3LT5wYWdl
KCktPnNldERyYXdzQmFja2dyb3VuZChyZWQgfHwgZ3JlZW4gfHwgYmx1ZSk7CisgICAgdmlldy0+
cGFnZSgpLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChhbHBoYSA8IDI1NSk7CisKKyAg
ICBwYXJlbnRTbWFydENsYXNzLmNvbG9yX3NldChldmFzT2JqZWN0LCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEZvY3VzSW4oRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQoreworICAgIHRvRXdrVmlldyhzbWFydERhdGEp
LT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQg
fCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEZvY3VzT3V0KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgpLT52
aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVBy
b3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jv
b2wgRXdrVmlldzo6b25WaWV3U21hcnRNb3VzZVdoZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKK3sKKyAg
ICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgc2VsZi0+cGFnZSgp
LT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQod2hlZWxFdmVudCwgc2VsZi0+
dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmlld1NtYXJ0TW91c2VEb3du
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9E
b3duKiBkb3duRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IHRvRXdrVmlldyhzbWFydERh
dGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2
ZW50KGRvd25FdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9y
bVRvU2NyZWVuKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6
Om9uVmlld1NtYXJ0TW91c2VVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0
IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IHRv
RXdrVmlldyhzbWFydERhdGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChO
YXRpdmVXZWJNb3VzZUV2ZW50KHVwRXZlbnQsIHNlbGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBz
ZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7CisKKyAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwq
IGlucHV0TWV0aG9kQ29udGV4dCA9IHNlbGYtPmlucHV0TWV0aG9kQ29udGV4dCgpOworICAgIGlm
IChpbnB1dE1ldGhvZENvbnRleHQpCisgICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxl
TW91c2VVcEV2ZW50KHVwRXZlbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9v
bCBFd2tWaWV3OjpvblZpZXdTbWFydE1vdXNlTW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KQoreworICAgIEV3
a1ZpZXcqIHNlbGYgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5wYWdlKCktPmhh
bmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChtb3ZlRXZlbnQsIHNlbGYtPnRyYW5z
Zm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpvblZpZXdTbWFydEtleURvd24oRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3du
RXZlbnQpCit7CisgICAgYm9vbCBpc0ZpbHRlcmVkID0gZmFsc2U7CisgICAgRXdrVmlldyogc2Vs
ZiA9IHRvRXdrVmlldyhzbWFydERhdGEpOworICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5w
dXRNZXRob2RDb250ZXh0ID0gc2VsZi0+aW5wdXRNZXRob2RDb250ZXh0KCk7CisgICAgaWYgKGlu
cHV0TWV0aG9kQ29udGV4dCkKKyAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVLZXlE
b3duRXZlbnQoZG93bkV2ZW50LCAmaXNGaWx0ZXJlZCk7CisKKyAgICBzZWxmLT5wYWdlKCktPmhh
bmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChkb3duRXZlbnQsIGlzRmls
dGVyZWQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Om9uVmll
d1NtYXJ0S2V5VXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2
ZW50X0tleV9VcCogdXBFdmVudCkKK3sKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgp
LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQodXBFdmVudCkpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTk4Miwy
MCArMTM0MywxNyBAQCB2b2lkIEV3a1ZpZXc6OmZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZl
bnRfVHlwZSB0eXBlKQogCiB2b2lkIEV3a1ZpZXc6Om9uVG91Y2hEb3duKHZvaWQqIC8qIGRhdGEg
Ki8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2
ZW50SW5mbyAqLykKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmpl
Y3QoZXdrVmlldyk7Ci0gICAgdmlldy0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9TVEFSVCk7
CisgICAgdG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX1NUQVJU
KTsKIH0KIAogdm9pZCBFd2tWaWV3OjpvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywgRXZhcyog
LyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICov
KQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3
KTsKLSAgICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX0VORCk7CisgICAgdG9Fd2tW
aWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX0VORCk7CiB9CiAKIHZvaWQg
RXdrVmlldzo6b25Ub3VjaE1vdmUodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICov
LCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQotewotICAgIEV3
a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3KTsKLSAgICB2aWV3
LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX01PVkUpOworeyAgICAKKyAgICB0b0V3a1ZpZXco
ZXdrVmlldyktPmZlZWRUb3VjaEV2ZW50cyhFV0tfVE9VQ0hfTU9WRSk7CiB9CiAjZW5kaWYKIApA
QCAtMTAzNywzICsxMzk1LDQ2IEBAIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3
Ojp0YWtlU25hcHNob3QoKQogICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAjZW5kaWYK
IH0KKworRXZhc19TbWFydF9DbGFzcyBFd2tWaWV3OjpwYXJlbnRTbWFydENsYXNzID0gRVZBU19T
TUFSVF9DTEFTU19JTklUX05VTEw7CisKKy8vIEZyZWUgRXdrIFZpZXcgZnVuY3Rpb25zLgorCitF
d2tWaWV3KiB0b0V3a1ZpZXcoY29uc3QgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAg
aWYgKCFpc1ZpZXdFdmFzT2JqZWN0KGV2YXNPYmplY3QpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiB0b0V3a1ZpZXcoc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2
YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV2YXNPYmplY3QpKSk7Cit9CisKK0V3a1ZpZXcqIHRv
RXdrVmlldyhjb25zdCBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgcmV0
dXJuIHNtYXJ0RGF0YSA/IHNtYXJ0RGF0YS0+cHJpdiA6IDA7Cit9CisKK2Jvb2wgaXNWaWV3RXZh
c09iamVjdChjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhc09iamVjdCwgZmFsc2UpOworCisgICAgY29uc3QgY2hh
ciogZXZhc09iamVjdFR5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChldmFzT2JqZWN0KTsKKyAg
ICBjb25zdCBFdmFzX1NtYXJ0KiBldmFzU21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9n
ZXQoZXZhc09iamVjdCk7CisgICAgaWYgKFVOTElLRUxZKCFldmFzU21hcnQpKSB7CisgICAgICAg
IEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsIGV2YXNPYmpl
Y3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwpIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFy
dENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQoZXZhc1NtYXJ0KTsKKyAgICBpZiAoVU5MSUtF
TFkoIXNtYXJ0Q2xhc3MpKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90
IGEgc21hcnQgY2xhc3Mgb2JqZWN0ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZh
c09iamVjdFR5cGUgOiAiKG51bGwpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoVU5MSUtFTFkoc21hcnRDbGFzcy0+ZGF0YSAhPSBzbWFydENsYXNzTmFtZSkpIHsK
KyAgICAgICAgRUlOQV9MT0dfQ1JJVCgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3ZpZXcgKG5l
ZWQgJXAsIGdvdCAlcCkhIiwgZXZhc09iamVjdCwgZXZhc09iamVjdFR5cGUgPyBldmFzT2JqZWN0
VHlwZSA6ICIobnVsbCkiLAorICAgICAgICAgICAgc21hcnRDbGFzc05hbWUsIHNtYXJ0Q2xhc3Mt
PmRhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggODcx
NjViYy4uOGUzZDcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuaApAQCAtOTksNiArOTksNyBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2
YXNfR0xfU3VyZmFjZTsKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9E
YXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9D
bGFzcyBFd2tfVmlld19TbWFydF9DbGFzczsKIAogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6CkBA
IC0xMDcsMTEgKzEwOCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIExlZ2FjeUJlaGF2aW9yLAogICAg
ICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZp
ZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViS2l0OjpXZWJQYWdlR3JvdXAq
IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKLSAgICB+RXdrVmlldygpOwogCi0gICAgc3RhdGlj
IEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKLSAgICBF
dmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIHN0YXRpYyBF
dmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNt
YXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVo
YXZpb3IpOworICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBj
YW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKTsKKworICAgIHN0YXRpYyBib29sIGluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19W
aWV3X1NtYXJ0X0NsYXNzJik7CisKKyAgICBzdGF0aWMgY29uc3QgRXZhc19PYmplY3QqIHRvRXZh
c09iamVjdChXS1BhZ2VSZWYpOworCisgICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YShFdmFzX09iamVjdCogZXZhc09iamVjdCk7CisKKyAgICBFdmFzX09iamVjdCogZXZh
c09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCiAgICAgV0tWaWV3UmVmIHdrVmll
dygpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViVmlldy5nZXQoKSk7IH0KICAgICBXS1BhZ2VS
ZWYgd2tQYWdlKCkgY29uc3Q7CkBAIC0xNTMsMTEgKzE2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcik7CiAgICAgdm9pZCBzZXRJ
bWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKTsK
IAotICAgIHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QgPSBXZWJDb3Jl
OjpJbnRSZWN0KCkpOwotCi0gICAgc3RhdGljIHZvaWQgYWRkVG9QYWdlVmlld01hcChFd2tWaWV3
KiB2aWV3KTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdrVmlldyog
dmlldyk7Ci0gICAgc3RhdGljIGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3RnJvbVBhZ2VWaWV3TWFw
KGNvbnN0IFdLUGFnZVJlZik7CisgICAgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCA9IFdlYkNvcmU6OkludFJlY3QoKSk7ICAgCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCiAgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKQEAgLTIyMSw3ICsyMjQsMTIgQEAg
cHVibGljOgogICAgIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25hcHNob3QoKTsK
IAogcHJpdmF0ZToKLSAgICBpbmxpbmUgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKCkg
Y29uc3Q7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlv
cik7CisgICAgLy8gV2lsbCBiZSBkZWxldGVkIHdoZW4gRXZhcyBPYmplY3QgaXMgZGVsZXRlZC4K
KyAgICB+RXdrVmlldygpOworCisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKCkg
Y29uc3Q7CisKICAgICB2b2lkIGRpc3BsYXlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPEV3a1Zp
ZXc+Kik7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC0yMzAsMTcgKzIzOCwz
NSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbmZvcm1JY29uQ2hhbmdlKCk7CiAKLSAgICBzdGF0
aWMgdm9pZCBvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lk
KiBldmVudEluZm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VVcCh2b2lkKiBkYXRhLCBFdmFz
KiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91
c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7
CisgICAgLy8gRXZhc19TbWFydF9DbGFzcyBpbnRlcmZhY2UuCisgICAgc3RhdGljIHZvaWQgb25F
dmFzU21hcnRBZGQoRXZhc19PYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydERl
bGV0ZShFdmFzX09iamVjdCopOworICAgIHN0YXRpYyB2b2lkIG9uRXZhc1NtYXJ0TW92ZShFdmFz
X09iamVjdCosIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KTsKKyAgICBzdGF0aWMgdm9pZCBv
bkV2YXNTbWFydFJlc2l6ZShFdmFzX09iamVjdCosIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29v
cmQgaGVpZ2h0KTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydFNob3coRXZhc19PYmplY3Qq
KTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFydEhpZGUoRXZhc19PYmplY3QqKTsKKyAgICBz
dGF0aWMgdm9pZCBvbkV2YXNTbWFydENvbG9yU2V0KEV2YXNfT2JqZWN0KiwgaW50IHJlZCwgaW50
IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKTsKKyAgICBzdGF0aWMgdm9pZCBvbkV2YXNTbWFy
dENhbGN1bGF0ZShFdmFzX09iamVjdCopOworCisgICAgLy8gRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
aW50ZXJmYWNlLgorICAgIHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21hcnRGb2N1c0luKEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBvblZpZXdT
bWFydEZvY3VzT3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisgICAgc3RhdGlj
IEVpbmFfQm9vbCBvblZpZXdTbWFydE1vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KTsKKyAgICBz
dGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0TW91c2VEb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpOworICAg
IHN0YXRpYyBFaW5hX0Jvb2wgb25WaWV3U21hcnRNb3VzZVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCk7CisgICAgc3Rh
dGljIEVpbmFfQm9vbCBvblZpZXdTbWFydE1vdXNlTW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KTsKKyAgICBz
dGF0aWMgRWluYV9Cb29sIG9uVmlld1NtYXJ0S2V5RG93bihFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCk7CisgICAgc3Rh
dGljIEVpbmFfQm9vbCBvblZpZXdTbWFydEtleVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpOworCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKICAgICB2b2lkIGZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZlbnRfVHlw
ZSB0eXBlKTsKLSAgICBzdGF0aWMgdm9pZCBvblRvdWNoRG93bih2b2lkKiAvKiBkYXRhICovLCBF
dmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudElu
Zm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hVcCh2b2lkKiAvKiBkYXRhICovLCBFdmFz
KiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8g
Ki8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMq
IC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAq
Lyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaERvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNf
T2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBvblRvdWNoVXAodm9p
ZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyAgICBzdGF0
aWMgdm9pZCBvblRvdWNoTW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lk
KiBldmVudEluZm8pOwogI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgb25GYXZpY29uQ2hhbmdlZChj
b25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pOwogCitwcml2YXRlOgogICAgIC8v
IE5vdGUsIGluaXRpYWxpemF0aW9uIG9yZGVyIG1hdHRlcnMuCiAgICAgRXZhc19PYmplY3QqIG1f
ZXZhc09iamVjdDsKICAgICBSZWZQdHI8RXdrQ29udGV4dD4gbV9jb250ZXh0OwpAQCAtMjg3LDYg
KzMxMywxMyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBtX2lzSGFyZHdhcmVBY2NlbGVy
YXRlZDsKICAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3JvdW5kOworCisgICAgc3RhdGljIEV2YXNf
U21hcnRfQ2xhc3MgcGFyZW50U21hcnRDbGFzczsKIH07CiAKK0V3a1ZpZXcqIHRvRXdrVmlldyhj
b25zdCBFdmFzX09iamVjdCopOworRXdrVmlldyogdG9Fd2tWaWV3KGNvbnN0IEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisKK2Jvb2wgaXNWaWV3RXZhc09iamVjdChjb25zdCBFdmFz
X09iamVjdCogZXZhc09iamVjdCk7CisKICNlbmRpZiAvLyBFd2tWaWV3X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBkNjE4MWI4Li5jNTNk
ODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CkBAIC0yNSw5ICsyNSw2IEBACiAjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1ZGUg
IkZvcm1DbGllbnRFZmwuaCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKLSNp
bmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2ViTW91
c2VFdmVudC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQ
YWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkQ2xpZW50RWZsLmgiCiAjaW5jbHVk
ZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgpAQCAtNTAsNyArNDcsNiBAQAogI2luY2x1ZGUgImV3
a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgog
I2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJp
dmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUGFn
ZUdyb3VwLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC02OCw0ODYgKzY0LDMx
IEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LXN0YXRpYyBjb25zdCBjaGFyIEVXS19WSUVXX1RZUEVfU1RSW10gPSAiRVdLMl9WaWV3IjsKLQot
I2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIHJlc3VsdCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBib29sIHJlc3VsdCA9IHRydWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIWV3a1ZpZXcpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJ
TkFfTE9HX0NSSVQoIm51bGwgaXMgbm90IGEgZXdrX3ZpZXciKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGNoYXIqIF90bXBfb3R5
cGUgPSBldmFzX29iamVjdF90eXBlX2dldChld2tWaWV3KTsgICAgICAgICAgICAgICAgXAotICAg
ICAgICBjb25zdCBFdmFzX1NtYXJ0KiBfdG1wX3MgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9n
ZXQoZXdrVmlldyk7ICAgICAgIFwKLSAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoIV90bXBfcykp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBv
YmplY3QhIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3Mq
IF90bXBfc2MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChfdG1wX3MpOyAgICAgICAgXAotICAgICAg
ICBpZiAoRUlOQV9VTkxJS0VMWSghX3RtcF9zYykpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8gX3RtcF9v
dHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoX3RtcF9zYy0+ZGF0YSAhPSBFV0tfVklFV19UWVBFX1NU
UikpIHsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3ZpZXcgKG5lZWQgJXAsIGdvdCAlcCkh
IiwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgZXdrVmlldywgX3RtcF9vdHlwZSA/IF90
bXBfb3R5cGUgOiAiKG51bGwpIiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
IEVXS19WSUVXX1RZUEVfU1RSLCBfdG1wX3NjLT5kYXRhKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21h
cnREYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFV0tfVklF
V19UWVBFX0NIRUNLKGV3a1ZpZXcsIF90bXBfcmVzdWx0KTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gMDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChfdG1wX3Jlc3Vs
dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgc21hcnREYXRhID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpCi0KLSNkZWZpbmUgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC4uLikgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
aWYgKCFzbWFydERhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBzbWFydCBkYXRh
IGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgZXdrVmlldywgZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrVmlldykpOyAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgLi4uKSAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFz
bWFydERhdGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBFSU5BX0xPR19DUklUKCJzbWFydCBkYXRhIGlzIG51bGwi
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIF9f
VkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a1ZpZXcqIGltcGwgPSBzbWFy
dERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghaW1wbCkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIs
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzbWFydERhdGEtPnNlbGYsIGV2YXNf
b2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0YS0+c2VsZikpOyAgICAgICBcCi0gICAgICAgICAgICBy
ZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCiAj
ZGVmaW5lIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAuLi4pICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a1ZpZXcqIGltcGwgPSAwOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFd2tW
aWV3KiBpbXBsID0gdG9Fd2tWaWV3KGV3a1ZpZXcpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgX19WQV9BUkdTX18pOyAgICAg
ICAgICAgIFwKLSAgICAgICAgaW1wbCA9IHNtYXJ0RGF0YS0+cHJpdjsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmICghaW1wbCkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3Qg
JXAgKCVzKSIsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzbWFydERhdGEtPnNl
bGYsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0YS0+c2VsZikpOyAgICAgICBcCisgICAg
ICAgICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCIsIGV3
a1ZpZXcpOyAgICAgICAgICAgXAogICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUg
Zm9yIEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQuCi10eXBlZGVmIHN0cnVjdCBFd2tfUGFnZV9D
b250ZW50c19Db250ZXh0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQ7Ci0KLS8qCi0gKiBAYnJp
ZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgcGFnZSBjb250ZW50cyBjb250ZXh0IHVzZWQgZm9yIGV3
a192aWV3X3BhZ2VfY29udGVudHNfZ2V0KCkgQVBJLgotICovCi1zdHJ1Y3QgRXdrX1BhZ2VfQ29u
dGVudHNfQ29udGV4dCB7Ci0gICAgRXdrX1BhZ2VfQ29udGVudHNfVHlwZSB0eXBlOwotICAgIEV3
a19QYWdlX0NvbnRlbnRzX0NiIGNhbGxiYWNrOwotfTsKLQotc3RhdGljIHZvaWQgX2V3a192aWV3
X3NtYXJ0X2NoYW5nZWQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIGlm
IChzbWFydERhdGEtPmNoYW5nZWQuYW55KQotICAgICAgICByZXR1cm47Ci0gICAgc21hcnREYXRh
LT5jaGFuZ2VkLmFueSA9IHRydWU7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2hhbmdlZChzbWFy
dERhdGEtPnNlbGYpOwotfQotCi0vLyBEZWZhdWx0IEV2ZW50IEhhbmRsaW5nLgotc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhKQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERh
dGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdl
KFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lz
QWN0aXZlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAg
ICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxz
ZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6
OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNl
X3doZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9N
b3VzZV9XaGVlbCogd2hlZWxFdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhh
bmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBpbXBsLT50cmFu
c2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9kb3du
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9E
b3duKiBkb3duRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVNb3Vz
ZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZG93bkV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9t
U2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV91cChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQp
Ci17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1w
bCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdl
Yk1vdXNlRXZlbnQodXBFdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIGltcGwtPnRy
YW5zZm9ybVRvU2NyZWVuKCkpKTsKLQotICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRN
ZXRob2RDb250ZXh0ID0gaW1wbC0+aW5wdXRNZXRob2RDb250ZXh0KCk7Ci0gICAgaWYgKGlucHV0
TWV0aG9kQ29udGV4dCkKLSAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVNb3VzZVVw
RXZlbnQodXBFdmVudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfbW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KQotewotICAgIEVXS19W
SUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQot
ICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KG1v
dmVFdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIGltcGwtPnRyYW5zZm9ybVRvU2Ny
ZWVuKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfa2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBF
dmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRf
QllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgYm9vbCBpc0Zp
bHRlcmVkID0gZmFsc2U7Ci0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENv
bnRleHQgPSBpbXBsLT5pbnB1dE1ldGhvZENvbnRleHQoKTsKLSAgICBpZiAoaW5wdXRNZXRob2RD
b250ZXh0KQotICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRsZUtleURvd25FdmVudChk
b3duRXZlbnQsICZpc0ZpbHRlcmVkKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlS2V5Ym9h
cmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGRvd25FdmVudCwgaXNGaWx0ZXJlZCkpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9r
ZXlfdXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tl
eV9VcCogdXBFdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4o
c21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZUtleWJv
YXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh1cEV2ZW50KSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLS8vIEV2ZW50IEhhbmRsaW5nLgotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2Zv
Y3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZv
Ki8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaS0+Zm9jdXNfaW4pOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19pbihzbWFy
dERhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9j
dXNfb3V0KTsKLSAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiwg
RXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9X
aGVlbCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihl
dmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsKLSAgICBzbWFydERhdGEtPmFwaS0+bW91c2Vf
d2hlZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX2tleV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQgPSBzdGF0aWNfY2Fz
dDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5rZXlfZG93bik7Ci0gICAg
c21hcnREYXRhLT5hcGktPmtleV9kb3duKHNtYXJ0RGF0YSwgZG93bkV2ZW50KTsKLX0KLQotc3Rh
dGljIHZvaWQgX2V3a192aWV3X29uX2tleV91cCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQg
PSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBp
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X3Vw
KTsKLSAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9zaG93KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAg
IEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwpOwotICAg
IGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlz
aWJsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9oaWRlKHZvaWQqIGRhdGEsIEV2
YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEs
IGltcGwpOwotCi0gICAgLy8gVGhpcyBjYWxsIG1heSBsb29rIHdyb25nLCBidXQgd2UgcmVhbGx5
IG5lZWQgdG8gcGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUuCi0gICAgLy8gdmlld1N0YXRlRGlkQ2hh
bmdlKCkgaXRzZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZXR0aW5nIHRoZSB2aXNp
YmlsaXR5IHRvIFZpc2libGUgb3IgSGlkZGVuCi0gICAgLy8gZGVwZW5kaW5nIG9uIHdoYXQgV2Vi
UGFnZVByb3h5Ojppc1ZpZXdWaXNpYmxlKCkgcmV0dXJucywgdGhpcyBzaW1wbHkgdHJpZ2dlcnMg
dGhlIHByb2Nlc3MuCi0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFn
ZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKLX0KLQotc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgZ19w
YXJlbnRTbWFydENsYXNzID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7Ci0KLXN0YXRpYyB2
b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgY29u
c3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmll
dyk7Ci0gICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFzcyA9IGV2YXNfc21hcnRf
Y2xhc3NfZ2V0KHNtYXJ0KTsKLSAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyogYXBpID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+KHNtYXJ0Q2xhc3Mp
OwotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgaWYgKCFz
bWFydERhdGEpIHsKLSAgICAgICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21h
cnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKLSAgICAg
ICAgaWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoImNvdWxkIG5v
dCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVmlldywgc21h
cnREYXRhKTsKLSAgICB9Ci0KLSAgICBzbWFydERhdGEtPnNlbGYgPSBld2tWaWV3OwotICAgIHNt
YXJ0RGF0YS0+YXBpID0gYXBpOwotCi0gICAgZ19wYXJlbnRTbWFydENsYXNzLmFkZChld2tWaWV3
KTsKLQotICAgIHNtYXJ0RGF0YS0+cHJpdiA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgZXZhc19vYmpl
Y3RfaW1hZ2UgdG8gZHJhdyB3ZWIgY29udGVudHMuCi0gICAgc21hcnREYXRhLT5pbWFnZSA9IGV2
YXNfb2JqZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmpl
Y3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGZhbHNlKTsKLSAgICBldmFzX29i
amVjdF9pbWFnZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHRydWUpOwotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5pbWFnZSwgZXdrVmlldyk7Ci0gICAg
ZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmltYWdlKTsKLQotI2RlZmluZSBDT05ORUNUKHMs
IGMpIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzbWFydERh
dGEpCi0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX0lOLCBfZXdrX3ZpZXdfb25fZm9j
dXNfaW4pOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19PVVQsIF9ld2tfdmlld19v
bl9mb2N1c19vdXQpOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTCwgX2V3
a192aWV3X29uX21vdXNlX3doZWVsKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfS0VZX0RP
V04sIF9ld2tfdmlld19vbl9rZXlfZG93bik7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0tF
WV9VUCwgX2V3a192aWV3X29uX2tleV91cCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX1NI
T1csIF9ld2tfdmlld19vbl9zaG93KTsKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfSElERSwg
X2V3a192aWV3X29uX2hpZGUpOwotI3VuZGVmIENPTk5FQ1QKLX0KLQotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBFV0tfVklFV19T
RF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBpZiAoc21hcnREYXRhKQotICAgICAgICBk
ZWxldGUgc21hcnREYXRhLT5wcml2OwotCi0gICAgZ19wYXJlbnRTbWFydENsYXNzLmRlbChld2tW
aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVj
dCogZXdrVmlldywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCi17Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgZXZh
c19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIGV2
YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQp
OwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIDAsIDAs
IHdpZHRoLCBoZWlnaHQpOwotCi0gICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSB0cnVlOwot
ICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIC8q
eCovLCBFdmFzX0Nvb3JkIC8qeSovKQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9
IHRydWU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKLX0KLQotc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykK
LXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0g
ICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0K
LSAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gZmFsc2U7Ci0KLSAgICBFdmFzX0Nvb3JkIHgs
IHksIHdpZHRoLCBoZWlnaHQ7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1ZpZXcs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQu
cG9zaXRpb24pIHsKLSAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gZmFsc2U7
Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy54ID0geDsKLSAgICAgICAgc21hcnREYXRhLT52aWV3
LnkgPSB5OwotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+aW1hZ2UsIHgsIHkp
OwotICAgIH0KLQotICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBz
bWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IGZhbHNlOwotICAgICAgICBzbWFydERhdGEtPnZpZXcu
dyA9IHdpZHRoOwotICAgICAgICBzbWFydERhdGEtPnZpZXcuaCA9IGhlaWdodDsKLQotICAgICAg
ICBpZiAoaW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpKQotICAgICAgICAgICAgaW1wbC0+cGFn
ZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCksIEludFNp
emUoKSk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGltcGwt
PnNldE5lZWRzU3VyZmFjZVJlc2l6ZSgpOwotI2VuZGlmCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCi0gICAgICAgIGltcGwtPnBhZ2VDbGllbnQoKS0+dXBkYXRlVmlld3BvcnRTaXplKCk7
Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9zaG93KEV2
YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKLQotICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzbWFy
dERhdGEtPmJhc2UuY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRh
LT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
KTsKLQotICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOwotICAg
IGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5pbWFnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9l
d2tfdmlld19zbWFydF9jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQsIGlu
dCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0Rf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0KLSAgICBpZiAoYWxwaGEgPCAwKQotICAgICAg
ICBhbHBoYSA9IDA7Ci0gICAgZWxzZSBpZiAoYWxwaGEgPiAyNTUpCi0gICAgICAgIGFscGhhID0g
MjU1OwotCi0jZGVmaW5lIENIRUNLX0NPTE9SKGNvbG9yLCBhbHBoYSkgXAotICAgIGlmIChjb2xv
ciA8IDApICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29sb3IgPSAwOyAgICAgICAgICAgICAg
ICBcCi0gICAgZWxzZSBpZiAoY29sb3IgPiBhbHBoYSkgICAgICAgXAotICAgICAgICBjb2xvciA9
IGFscGhhOwotICAgIENIRUNLX0NPTE9SKHJlZCwgYWxwaGEpOwotICAgIENIRUNLX0NPTE9SKGdy
ZWVuLCBhbHBoYSk7Ci0gICAgQ0hFQ0tfQ09MT1IoYmx1ZSwgYWxwaGEpOwotI3VuZGVmIENIRUNL
X0NPTE9SCi0KLSAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFn
ZSwgYWxwaGEgPCAyNTUpOwotICAgIGltcGwtPnBhZ2UoKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKHJl
ZCB8fCBncmVlbiB8fCBibHVlKTsKLSAgICBpbXBsLT5wYWdlKCktPnNldERyYXdzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKGFscGhhIDwgMjU1KTsKLQotICAgIGdfcGFyZW50U21hcnRDbGFzcy5jb2xv
cl9zZXQoZXdrVmlldywgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGFwaSwgZmFsc2UpOwogCi0gICAgaWYg
KGFwaS0+dmVyc2lvbiAhPSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKSB7Ci0gICAgICAg
IEVJTkFfTE9HX0NSSVQoIkV3a19WaWV3X1NtYXJ0X0NsYXNzICVwIGlzIHZlcnNpb24gJWx1IHdo
aWxlICVsdSB3YXMgZXhwZWN0ZWQuIiwKLSAgICAgICAgICAgICBhcGksIGFwaS0+dmVyc2lvbiwg
RVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VMWSghZ19wYXJlbnRTbWFydENsYXNzLmFkZCkpCi0g
ICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZnX3BhcmVudFNtYXJ0
Q2xhc3MpOwotCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJmFwaS0+
c2MpOwotCi0gICAgLy8gU2V0IEV2YXNfU21hcnRfQ2xhc3MgZnVuY3Rpb25zLgotICAgIGFwaS0+
c2MuYWRkID0gX2V3a192aWV3X3NtYXJ0X2FkZDsKLSAgICBhcGktPnNjLmRlbCA9IF9ld2tfdmll
d19zbWFydF9kZWw7Ci0gICAgYXBpLT5zYy5tb3ZlID0gX2V3a192aWV3X3NtYXJ0X21vdmU7Ci0g
ICAgYXBpLT5zYy5yZXNpemUgPSBfZXdrX3ZpZXdfc21hcnRfcmVzaXplOwotICAgIGFwaS0+c2Mu
c2hvdyA9IF9ld2tfdmlld19zbWFydF9zaG93OwotICAgIGFwaS0+c2MuaGlkZSA9IF9ld2tfdmll
d19zbWFydF9oaWRlOwotICAgIGFwaS0+c2MuY29sb3Jfc2V0ID0gX2V3a192aWV3X3NtYXJ0X2Nv
bG9yX3NldDsKLSAgICBhcGktPnNjLmNhbGN1bGF0ZSA9IF9ld2tfdmlld19zbWFydF9jYWxjdWxh
dGU7Ci0gICAgYXBpLT5zYy5kYXRhID0gRVdLX1ZJRVdfVFlQRV9TVFI7IC8vIEl0IGlzIHVzZWQg
YnkgdHlwZSBjaGVja2luZy4KLQotICAgIC8vIFNldCBFd2tfVmlld19TbWFydF9DbGFzcyBmdW5j
dGlvbnMuCi0gICAgYXBpLT5mb2N1c19pbiA9IF9ld2tfdmlld19zbWFydF9mb2N1c19pbjsKLSAg
ICBhcGktPmZvY3VzX291dCA9IF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQ7Ci0gICAgYXBpLT5t
b3VzZV93aGVlbCA9IF9ld2tfdmlld19zbWFydF9tb3VzZV93aGVlbDsKLSAgICBhcGktPm1vdXNl
X2Rvd24gPSBfZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93bjsKLSAgICBhcGktPm1vdXNlX3VwID0g
X2V3a192aWV3X3NtYXJ0X21vdXNlX3VwOwotICAgIGFwaS0+bW91c2VfbW92ZSA9IF9ld2tfdmll
d19zbWFydF9tb3VzZV9tb3ZlOwotICAgIGFwaS0+a2V5X2Rvd24gPSBfZXdrX3ZpZXdfc21hcnRf
a2V5X2Rvd247Ci0gICAgYXBpLT5rZXlfdXAgPSBfZXdrX3ZpZXdfc21hcnRfa2V5X3VwOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdr
Vmlld1NtYXJ0Q2xhc3Modm9pZCkKLXsKLSAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
YXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19WaWV3Iik7
Ci0gICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKLQotICAgIGlmIChFSU5BX1VOTElL
RUxZKCFzbWFydCkpIHsKLSAgICAgICAgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KCZhcGkpOwot
ICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpOwotICAgIH0KLQot
ICAgIHJldHVybiBzbWFydDsKLX0KLQotc3RhdGljIGlubGluZSBFd2tWaWV3KiBjcmVhdGVFd2tW
aWV3KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4
dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwgRXdrVmlldzo6Vmll
d0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKQotewotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGNvbnRleHQsIDApOwotCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBldmFz
X29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBzbWFydCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGV3a1ZpZXcsIDApOwotCi0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNtYXJ0RGF0YSk7Ci0gICAgaWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKGV3a1ZpZXcpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIXNt
YXJ0RGF0YS0+cHJpdik7Ci0KLSAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVk
IGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAotICAg
IC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgotICAgIHNtYXJ0RGF0YS0+
cHJpdiA9IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNvbnRleHQsIHRvSW1wbChwYWdlR3JvdXBSZWYp
LCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKLX0KLQotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRoIFdLVHlw
ZSBwYXJhbWV0ZXJzLgotICovCi1Fd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52
YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYs
IEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKLXsKLSAgICByZXR1cm4gY3JlYXRlRXdr
VmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGNvbnRleHRSZWYgPyBFd2tD
b250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgp
LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gRXdrVmlldzo6aW5pdFNtYXJ0
Q2xhc3NJbnRlcmZhY2UoKmFwaSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19zbWFydF9h
ZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgRXdrVmlldyogZXdrVmlldyA9IGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwg
ZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7Ci0gICAgaWYgKCFld2tWaWV3
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBld2tWaWV3LT52aWV3KCk7CisgICAg
cmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBzbWFydCwgZXdrX29iamVj
dF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmll
d19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgcmV0dXJuIGV3a192aWV3X3NtYXJ0X2FkZChjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFy
dENsYXNzKCksIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIHJl
dHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZXdrX29iamVjdF9jYXN0PEV3
a0NvbnRleHQqPihjb250ZXh0KSk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19hZGQoRXZh
cyogY2FudmFzKQpAQCAtODI0LDggKzM2NSw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19mZWVkX3Rv
dWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfVG91Y2hfRXZlbnRfVHlwZSB0CiB7
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwocG9pbnRzLCBmYWxzZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIGZhbHNlKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9S
RVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7CisgICAgRVdLX1ZJRVdfSU1QTF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIGltcGwsIGZhbHNlKTsKIAogICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxl
VG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHR5cGUsIHBvaW50cywgbW9kaWZpZXJzLCBp
bXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSwgZWNv
cmVfdGltZV9nZXQoKSkpOwogCkBAIC05NDIsNiArNDgyLDE3IEBAIHZvaWQgZXdrX3ZpZXdfZHJh
d3NfcGFnZV9iYWNrZ3JvdW5kX3NldChFdmFzX09iamVjdCAqZXdrVmlldywgRWluYV9Cb29sIGVu
YWJsZWQpCiAgICAgaW1wbC0+c2V0RHJhd3NCYWNrZ3JvdW5kKGVuYWJsZWQpOwogfQogCisvLy8g
Q3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dC4KK3R5cGVk
ZWYgc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQgRXdrX1BhZ2VfQ29udGVudHNfQ29u
dGV4dDsKKworLyoKKyAqIEBicmllZiBTdHJ1Y3R1cmUgY29udGFpbmluZyBwYWdlIGNvbnRlbnRz
IGNvbnRleHQgdXNlZCBmb3IgZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKSBBUEkuCisgKi8K
K3N0cnVjdCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0IHsKKyAgICBFd2tfUGFnZV9Db250ZW50
c19UeXBlIHR5cGU7CisgICAgRXdrX1BhZ2VfQ29udGVudHNfQ2IgY2FsbGJhY2s7Cit9OworCiAv
KioKICAqIEBpbnRlcm5hbAogICogQ2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBmb3IgZXdrX3ZpZXdf
cGFnZV9jb250ZW50c19nZXQoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzQ5MTJmZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlld19wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgZXdrX3Zp
ZXdfcHJpdmF0ZV9oCi0jZGVmaW5lIGV3a192aWV3X3ByaXZhdGVfaAotCi0jaW5jbHVkZSAiRXdr
Vmlldy5oIgotI2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgot
Ci1Fd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7Ci0KLSNlbmRpZiAvLyBld2tf
dmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWly
by9CYWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8v
QmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmluZGV4IGVmZDZkMzIuLmU0OGRmNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApA
QCAtNzEsNyArNzEsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hh
cmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mCiAKICNpZiBQTEFURk9STShF
RkwpCiAgICAgLy8gVXBkYXRlIGV3a192aWV3IHdpdGggbmV3IGJhY2tpbmdTdG9yZSBpbWFnZS4K
LSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJQYWdlUHJv
eHktPnZpZXdXaWRnZXQoKSk7CisgICAgRXdrVmlldyogdmlldyA9IHRvRXdrVmlldyhtX3dlYlBh
Z2VQcm94eS0+dmlld1dpZGdldCgpKTsKICAgICB2aWV3LT5zZXRJbWFnZURhdGEoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShtX2JhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCkpLCBtX3Np
emUpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L0NvbnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCmluZGV4IDI1OWU0MTIuLjJjYzRiMzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGll
bnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3Rv
cnlDbGllbnRFZmwuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgQ29udGV4dEhpc3RvcnlDbGll
bnRFZmw6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLQ29udGV4dFJlZiwgV0tQYWdl
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxFd2tOYXZpZ2F0aW9uRGF0YT4gbmF2aWdh
dGlvbkRhdGFFd2sgPSBFd2tOYXZpZ2F0aW9uRGF0YTo6Y3JlYXRlKG5hdmlnYXRpb25EYXRhKTsK
LSAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmlnYXRlKEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdN
YXAocGFnZSksIG5hdmlnYXRpb25EYXRhRXdrLmdldCgpLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJE
YXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmlnYXRlKEV3a1ZpZXc6OnRvRXZhc09iamVj
dChwYWdlKSwgbmF2aWdhdGlvbkRhdGFFd2suZ2V0KCksIGhpc3RvcnlDbGllbnQtPm1fdXNlckRh
dGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtQ2xpZW50
UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJM
LCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHAKICAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hh
cmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhp
c3RvcnlDbGllbnQtPm1fY2xpZW50UmVkaXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01h
cChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNs
aWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC0+bV9jbGllbnRSZWRpcmVjdChF
d2tWaWV3Ojp0b0V2YXNPYmplY3QocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25V
UkxTdHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRI
aXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBX
S1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVS
TCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTc5LDcgKzc5LDcgQEAg
dm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdL
Q29udGV4dFJlZiwgV0tQYWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJM
U3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJM
U3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fc2VydmVyUmVk
aXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgc291cmNlVVJMU3RyaW5n
LCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAg
aGlzdG9yeUNsaWVudC0+bV9zZXJ2ZXJSZWRpcmVjdChFd2tWaWV3Ojp0b0V2YXNPYmplY3QocGFn
ZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlDbGllbnQt
Pm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRVcGRh
dGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYg
dGl0bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
QEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UKICAgICBXS0VpbmFTaGFy
ZWRTdHJpbmcgdGl0bGVTdHJpbmcodGl0bGUpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdHJp
bmdVUkwoVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRhdGVkKEV3a1ZpZXc6
OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhpc3Rv
cnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRhdGVk
KEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSwgdGl0bGVTdHJpbmcsIHN0cmluZ1VSTCwgaGlz
dG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRF
Zmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVu
dEJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5j
cHAKaW5kZXggNTY4ZTRhZS4uMjZiN2U0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBib29sIFBhZ2VD
bGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpwcm9jZXNz
RGlkQ3Jhc2goKQogewogICAgIC8vIENoZWNrIGlmIGxvYWRpbmcgd2FzIG9uZ29pbmcsIHdoZW4g
d2ViIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBkb3VibGUgbG9hZFByb2dyZXNzID0gZXdrX3ZpZXdf
bG9hZF9wcm9ncmVzc19nZXQobV92aWV3LT52aWV3KCkpOworICAgIGRvdWJsZSBsb2FkUHJvZ3Jl
c3MgPSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX3ZpZXctPmV2YXNPYmplY3QoKSk7CiAg
ICAgaWYgKGxvYWRQcm9ncmVzcyA+PSAwICYmIGxvYWRQcm9ncmVzcyA8IDEpIHsKICAgICAgICAg
bG9hZFByb2dyZXNzID0gMTsKICAgICAgICAgbV92aWV3LT5zbWFydENhbGxiYWNrPExvYWRQcm9n
cmVzcz4oKS5jYWxsKCZsb2FkUHJvZ3Jlc3MpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgUGFn
ZUNsaWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCgpCiAgICAgICAgIFdBUk4oIldBUk5JTkc6IFRo
ZSB3ZWIgcHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycuXG4iLCB1cmwuZGF0YSgp
KTsKIAogICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9yIHBhZ2UKLSAgICAgICAgZXdrX3ZpZXdf
aHRtbF9zdHJpbmdfbG9hZChtX3ZpZXctPnZpZXcoKSwgIlRoZSB3ZWIgcHJvY2VzcyBoYXMgY3Jh
c2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKKyAgICAgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9h
ZChtX3ZpZXctPmV2YXNPYmplY3QoKSwgIlRoZSB3ZWIgcHJvY2VzcyBoYXMgY3Jhc2hlZC4iLCAw
LCB1cmwuZGF0YSgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggNTk5YmUzNC4uYjg4MTY2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5j
cHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZQogICAgIEV3a1Zp
ZXcqIHZpZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3KCk7CiAgICAg
QVNTRVJUKHZpZXcpOwogCi0gICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0ID0gZXdrX3Zp
ZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZpZXcoKSk7CisgICAgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPmV2
YXNPYmplY3QoKSk7CiAgICAgQVNTRVJUKGxpc3QpOwogICAgIGxpc3QtPnVwZGF0ZShhZGRlZEl0
ZW0sIHJlbW92ZWRJdGVtcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVVJQ2xpZW50RWZsLmNwcAppbmRleCAzODE0ZWM3Li4yNDIyY2FkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCkBAIC05NSwxNyAr
OTUsMTcgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNsb3NlKFdLUGFnZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp0YWtlRm9jdXMoV0tQYWdlUmVm
LCBXS0ZvY3VzRGlyZWN0aW9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIC8vIEZJ
WE1FOiB0aGlzIGlzIG9ubHkgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uLgotICAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT52aWV3
KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwo
Y2xpZW50SW5mbyktPm1fdmlldy0+ZXZhc09iamVjdCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFn
ZVVJQ2xpZW50RWZsOjpmb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7
Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXctPnZpZXcoKSwgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPmV2YXNPYmplY3QoKSwgdHJ1ZSk7CiB9
CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp1bmZvY3VzKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRF
ZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBmYWxzZSk7CisgICAgZXZhc19vYmplY3Rf
Zm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPmV2YXNPYmpl
Y3QoKSwgZmFsc2UpOwogfQogCiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdEFs
ZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgYWxlcnRUZXh0LCBXS0ZyYW1lUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAKaW5kZXggMDA1MDI4My4u
ZTZlYjU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZv
aWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgd2lsbEVudGVyRnVsbFNjcmVlbigpOwotICAgIEV3a1ZpZXc6OmZyb21F
dmFzT2JqZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOworICAgIHRvRXdrVmlldyht
X3dlYlZpZXcpLT5lbnRlckZ1bGxTY3JlZW4oKTsKICAgICBkaWRFbnRlckZ1bGxTY3JlZW4oKTsK
IH0KIApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmV4
aXRGdWxsU2NyZWVuKCkKIAogCiAgICAgd2lsbEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgRXdrVmll
dzo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB0b0V3
a1ZpZXcobV93ZWJWaWV3KS0+ZXhpdEZ1bGxTY3JlZW4oKTsKICAgICBkaWRFeGl0RnVsbFNjcmVl
bigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYklu
c3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5z
cGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDg1M2Q0N2UuLmZhM2ZhYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCkBA
IC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a19zZXR0aW5ncy5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCi0jaW5jbHVkZSAiZXdrX3Zp
ZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWZsSW5zcGVjdG9yVXRpbGl0aWVzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KQEAgLTk0LDE3ICs5NCwxOCBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAgIC8vIEdyYWNlZnVsbHkg
ZmFsbCBiYWNrIHRvIHNvZnR3YXJlIGlmIGV2YXNfZ2wgZW5naW5lIGlzIG5vdCBhdmFpbGFibGUu
CiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICNlbmRpZgotICAgICAgICBtX2luc3BlY3Rv
cldpbmRvdyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5p
dGlhbFdpbmRvd0hlaWdodCwgMCk7CisgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBlY29yZV9ldmFz
X25ldygwLCAwLCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQsIDAp
OwogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
Ly8gRklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgRXdrVmlldyogZXdrVmll
dyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwg
dG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VH
cm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIGlmICghZXdrVmlldykKKyAg
ICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250
ZXh0KCkpOworICAgIG1faW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3Qo
ZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCBjb250ZXh0UmVmID8gRXdrQ29udGV4
dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKSwgdG9B
UEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7CisgICAg
aWYgKCFtX2luc3BlY3RvclZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9pbnNwZWN0
b3JWaWV3ID0gZXdrVmlldy0+dmlldygpOwotCisgICAgRXdrVmlldyogZXdrVmlldyA9IHRvRXdr
VmlldyhtX2luc3BlY3RvclZpZXcpOworICAgIEFTU0VSVChld2tWaWV3KTsKICAgICBld2tWaWV3
LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwogCiAgICAgRXdr
X1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1ZpZXctPnNldHRpbmdzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAKaW5kZXggYTMzMjcyNC4u
ZGU3MGNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQYWdl
UHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVBy
b3h5RWZsLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRXZhc19P
YmplY3QqIFdlYlBhZ2VQcm94eTo6dmlld1dpZGdldCgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+dmlldygpLT52aWV3KCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+dmlldygp
LT5ldmFzT2JqZWN0KCk7CiB9CiAKIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFn
ZW50KGNvbnN0IFN0cmluZyYgLyphcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQqLykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186634</attachid>
            <date>2013-02-05 08:54:36 -0800</date>
            <delta_ts>2013-02-05 09:08:06 -0800</delta_ts>
            <desc>patch v5</desc>
            <filename>bug108062_v5</filename>
            <type>text/plain</type>
            <size>73605</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGIwOTI0M2ZlZTdhMjA4NWJiMjljNjM1YzgxZWRlZTgzN2Q5ZDQyMTAKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGM1NmJmNzUuLjRkNDQzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMTMt
MDItMDUgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV0syXSBFbmNhcHN1bGF0ZSBFd2sgVmlldyBldmFzIHNtYXJ0IG9i
amVjdCBjb2RlIGluc2lkZSBFd2tWaWV3IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgRXdrIFZpZXcgaW1wbGVtZW50YXRpb24gaXMgZW5j
YXBzdWxhdGVkIHdpdGhpbiBFd2tWaWV3IGNsYXNzLgorICAgICAgICBCZXNpZGVzIG11bHRpcGxl
IHJlZmFjdG9yaW5nIG9mIEV3ayBWaWV3IGV2YXMgc21hcnQgb2JqZWN0IGNvZGUgd2FzIG1hZGUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHA6CisgICAgICAgIChj
cmVhdGVXS1ZpZXcpOiAKKworICAgICAgICAgICAgQXV4IGZ1bmN0aW9uIHRvIHNoYXJlIFdLVmll
dyBjcmVhdGlvbiBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwOgorICAgICAgICAoc21hcnREYXRhQ2hhbmdlZCk6CisgICAgICAgIChkZWZh
dWx0U21hcnRDbGFzc0luc3RhbmNlKToKKyAgICAgICAgKHRvU21hcnREYXRhKToKKyAgICAgICAg
KEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKToKKyAgICAgICAgKEV3a1ZpZXc6OnRv
RXZhc09iamVjdCk6CisgICAgICAgIChFd2tWaWV3OjpzbWFydERhdGEpOgorCisgICAgICAgICAg
ICBSZW5hbWVkIGFuZCBtb3ZlZCBoZXJlIGZyb20gZXdrX3ZpZXcuCisKKyAgICAgICAgKEV3a1Zp
ZXdFdmVudEhhbmRsZXIpOgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcjo6c3Vic2NyaWJl
KToKKyAgICAgICAgKEV3a1ZpZXdFdmVudEhhbmRsZXI6OnVuc3Vic2NyaWJlKToKKyAgICAgICAg
KDo6aGFuZGxlRXZlbnQpOgorCisgICAgICAgICAgICBBZGRlZCBhIG5ldyB0ZW1wbGF0ZSBjbGFz
cyB0byBlbmNhcHN1bGF0ZSBFd2sgVmlldyBFdmFzIGV2ZW50cyBoYW5kbGluZy4KKworICAgICAg
ICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisKKyAg
ICAgICAgICAgIENvbnN0cnVjdG9yIGFuZCBkZXNjdHJ1Y3RvciBhcmUgcHJpdmF0ZS4KKworICAg
ICAgICAoRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdCk6CisKKyAgICAgICAgICAgIEFkZGVkIGZh
Y3RvcnkgZnVuY3Rpb24gZm9yIGV3ayB2aWV3IGV2YXMgb2JqZWN0cyBjcmVhdGlvbi4KKworICAg
ICAgICAoRXdrVmlldzo6aGFuZGxlRXZhc0FkZCk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVF
dmFzRGVsZXRlKToKKyAgICAgICAgKEV3a1ZpZXc6OmhhbmRsZUV2YXNSZXNpemUpOgorICAgICAg
ICAoRXdrVmlldzo6aGFuZGxlRXZhc01vdmUpOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXZh
c0NhbGN1bGF0ZSk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFdmFzU2hvdyk6CisgICAgICAg
IChFd2tWaWV3OjpoYW5kbGVFdmFzSGlkZSk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFdmFz
Q29sb3JTZXQpOgorCisgICAgICAgICAgICBFdmFzX1NtYXJ0X0NsYXNzIGludGVyZmFjZSBjYWxs
YmFja3MgbW92ZWQgaW50byB0aGUgRXdrVmlldyBjbGFzcy4KKworICAgICAgICAoRXdrVmlldzo6
aGFuZGxlRXdrVmlld0ZvY3VzSW4pOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdrVmlld0Zv
Y3VzT3V0KToKKyAgICAgICAgKEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZVdoZWVsKToKKyAg
ICAgICAgKEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZURvd24pOgorICAgICAgICAoRXdrVmll
dzo6aGFuZGxlRXdrVmlld01vdXNlVXApOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdrVmll
d01vdXNlTW92ZSk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFd2tWaWV3S2V5RG93bik6Cisg
ICAgICAgIChFd2tWaWV3OjpoYW5kbGVFd2tWaWV3S2V5VXApOgorCisgICAgICAgICAgICBFd2tf
Vmlld19TbWFydF9DbGFzcyBpbnRlcmZhY2UgY2FsbGJhY2sgbW92ZWQgaW50byB0aGUgRXdrVmll
dyBjbGFzcy4KKworICAgICAgICAoRXdrVmlldzo6aGFuZGxlVG91Y2hEb3duKToKKyAgICAgICAg
KEV3a1ZpZXc6OmhhbmRsZVRvdWNoVXApOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlVG91Y2hN
b3ZlKToKKworICAgICAgICAgICAgUmVuYW1lZC4KKworICAgICAgICAodG9Fd2tWaWV3KTogCisK
KyAgICAgICAgICAgIEF1eCBmdW5jdGlvbiB0byBnZXQgdGhlIEV3a1ZpZXcgaW5zdGFuY2UgZnJv
bWV2YXMgb2JqZWN0LgorCisgICAgICAgIChpc1ZpZXdFdmFzT2JqZWN0KToKKworICAgICAgICAg
ICAgQXV4IGZ1bmN0aW9uIHRvIGNoZWNrIHRoYXQgZ2l2ZW4gZXZhcyBvYmplY3QgaXMgZXdrIHZp
ZXcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChF
d2tWaWV3OjpldmFzT2JqZWN0KToKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2NsYXNz
X3NldCk6CisgICAgICAgIChld2tfdmlld19zbWFydF9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdf
YWRkX3dpdGhfY29udGV4dCk6CisgICAgICAgIChld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KToK
KyAgICAgICAgKEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQpOgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBSZW1vdmVkLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKyAg
ICAgICAgKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChXS1ZpZXdDcmVh
dGVTbmFwc2hvdCk6CisgICAgICAgICogVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWROYXZpZ2F0ZVdpdGhO
YXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZs
OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlz
dG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdlYktp
dDo6Q29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRCYXNlOjpwcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVu
dEVmbDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L1BhZ2VVSUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6
dGFrZUZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpmb2N1cyk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dW5mb2N1cyk6CisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dmlld1dpZGdldCk6CisKKyAgICAgICAgICAgICBVcGRh
dGVkIGR1ZSB0byBjaGFuZ2VzIGluIEV3a1ZpZXcgaW50ZXJmYWNlLgorCiAyMDEzLTAyLTA0ICBH
d2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29y
ZGluYXRlZCBHcmFwaGljcyA6IGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtIGRvZXMgbm90
IGRvIGFueXRoaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuY3BwCmluZGV4IDljMWQzMWQuLjY3YzkzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTIyLDI3ICsyMiwyOSBAQAogCiAjaW5jbHVk
ZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgImV3a192aWV3
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotV0tW
aWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCitzdGF0aWMgaW5saW5lIFdLVmlld1JlZiBj
cmVhdGVXS1ZpZXcoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiB7
Ci0gICAgRXdrVmlldyogZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4
dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYgKCFl
d2tWaWV3KQorICAgIFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/IEV3
a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0
KCk7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2Jq
ZWN0KGNhbnZhcywgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CisgICAgaWYgKCFl
dmFzT2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
S1ZpZXdSZWY+KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4odG9Fd2tWaWV3KGV2YXNPYmplY3QpLT53a1ZpZXco
KSkpOwogfQogCi1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNh
bnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJl
ZikKK1dLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIEV3a1ZpZXcqIGV3
a1ZpZXcgPSBld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJl
ZiwgRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBpZiAoIWV3a1ZpZXcpCi0gICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBw
YWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKK30KIAotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7CitXS1Zp
ZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK3sKKyAgICByZXR1
cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3
OjpEZWZhdWx0QmVoYXZpb3IpOwogfQogCiB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVm
IHZpZXdSZWYpCkBAIC03Nyw2ICs3OSw2IEBAIEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KFdLVmlld1JlZiB2aWV3UmVmKQogCiBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90
KFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpm
cm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgRXdrVmll
dyogZXdrVmlldyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CiAg
ICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFw
c2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCAwNDY2OTRkNy4uMzY4MGNkOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTI3LDYgKzI3
LDkgQEAKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiRm9ybUNsaWVudEVm
bC5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgorI2luY2x1ZGUgIk5hdGl2
ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNl
LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCiAjaW5jbHVkZSAiUGFnZUNs
aWVudExlZ2FjeUltcGwuaCIKQEAgLTU3LDcgKzYwLDYgQEAKICNpbmNsdWRlICJld2tfc2VjdXJp
dHlfb3JpZ2luX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgog
I2luY2x1ZGUgImV3a192aWV3LmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2
YXMuaD4KICNpbmNsdWRlIDxFY29yZV9YLmg+CkBAIC02Niw2ICs2OCw4IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1
cnNvci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZUNhaXJvLmg+CisjaW5jbHVkZSA8d3Rm
L0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShW
SUJSQVRJT04pCiAjaW5jbHVkZSAiVmlicmF0aW9uQ2xpZW50RWZsLmgiCkBAIC04Myw0MyArODcs
MTUxIEBAIHVzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCitzdGF0aWMgY29uc3QgY2hhciBz
bWFydENsYXNzTmFtZVtdID0gIkVXSzJfVmlldyI7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRD
dXJzb3JTaXplID0gMTY7CiAKLXR5cGVkZWYgSGFzaE1hcDxXS1BhZ2VSZWYsIEV2YXNfT2JqZWN0
Kj4gUGFnZVZpZXdNYXA7CisvLyBBdXhpbGlhcnkgZnVuY3Rpb25zLgogCi1zdGF0aWMgaW5saW5l
IFBhZ2VWaWV3TWFwJiBwYWdlVmlld01hcCgpCitzdGF0aWMgaW5saW5lIHZvaWQgc21hcnREYXRh
Q2hhbmdlZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChQYWdlVmlld01hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBB
U1NFUlQoc21hcnREYXRhKTsKKworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuYW55KQorICAg
ICAgICByZXR1cm47CisKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gdHJ1ZTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YS0+c2VsZik7Cit9CisKK3N0YXRpYyBF
dmFzX1NtYXJ0KiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgRXdr
X1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZF
UlNJT04oc21hcnRDbGFzc05hbWUpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7
CisKKyAgICBpZiAoIXNtYXJ0KSB7CisgICAgICAgIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50
ZXJmYWNlKGFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5z
Yyk7CisgICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OworfQorCitzdGF0aWMgaW5saW5lIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHRvU21hcnREYXRhKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorewor
ICAgIEFTU0VSVChldmFzT2JqZWN0ICYmIGlzVmlld0V2YXNPYmplY3QoZXZhc09iamVjdCkpOwor
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVj
dF9zbWFydF9kYXRhX2dldChldmFzT2JqZWN0KSk7CiB9CiAKLXZvaWQgRXdrVmlldzo6YWRkVG9Q
YWdlVmlld01hcChFd2tWaWV3KiB2aWV3KQorLy8gRXdrVmlld0V2ZW50SGFuZGxlciBpbXBsZW1l
bnRhdGlvbi4KKwordGVtcGxhdGUgPEV2YXNfQ2FsbGJhY2tfVHlwZSBFdmVudFR5cGU+CitjbGFz
cyBFd2tWaWV3RXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzdWJzY3Jp
YmUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgeworICAgICAgICBldmFzX29iamVjdF9l
dmVudF9jYWxsYmFja19hZGQoZXZhc09iamVjdCwgRXZlbnRUeXBlLCBoYW5kbGVFdmVudCwgdG9T
bWFydERhdGEoZXZhc09iamVjdCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVuc3Vic2Ny
aWJlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIHsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZXZlbnRfY2FsbGJhY2tfZGVsKGV2YXNPYmplY3QsIEV2ZW50VHlwZSwgaGFuZGxlRXZlbnQpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Cit9OworCit0ZW1wbGF0ZSA8Pgordm9pZCBF
d2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46OmhhbmRsZUV2ZW50
KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAg
ICBQYWdlVmlld01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHBhZ2VWaWV3TWFwKCkuYWRkKHZpZXct
PndrUGFnZSgpLCB2aWV3LT52aWV3KCkpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIGlmIChzbWFydERhdGEt
PmFwaS0+bW91c2VfZG93bikKKyAgICAgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX2Rvd24oc21h
cnREYXRhLCBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pKTsK
IH0KIAotdm9pZCBFd2tWaWV3OjpyZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykK
K3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VT
RV9VUD46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQq
IGV2ZW50SW5mbykKIHsKLSAgICBBU1NFUlQocGFnZVZpZXdNYXAoKS5jb250YWlucyh2aWV3LT53
a1BhZ2UoKSkpOwotICAgIHBhZ2VWaWV3TWFwKCkucmVtb3ZlKHZpZXctPndrUGFnZSgpKTsKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV91cCkKKyAg
ICAgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX3VwKHNtYXJ0RGF0YSwgc3RhdGljX2Nhc3Q8RXZh
c19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbykpOwogfQogCi1jb25zdCBFdmFzX09iamVjdCog
RXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYgcGFnZSkKK3RlbXBs
YXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZF
Pjo6aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZl
bnRJbmZvKQogewotICAgIEFTU0VSVChwYWdlKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAg
aWYgKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKQorICAgICAgICBzbWFydERhdGEtPmFwaS0+
bW91c2VfbW92ZShzbWFydERhdGEsIHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+
KGV2ZW50SW5mbykpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVy
PEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+OjpoYW5kbGVFdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwg
RXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNt
YXJ0RGF0YS0+YXBpLT5mb2N1c19pbikKKyAgICAgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2lu
KHNtYXJ0RGF0YSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8
RVZBU19DQUxMQkFDS19GT0NVU19PVVQ+OjpoYW5kbGVFdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwg
RXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNt
YXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQpCisgICAgICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19v
dXQoc21hcnREYXRhKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxl
cjxFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMPjo6aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZh
cyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRh
KTsKKyAgICBpZiAoc21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKQorICAgICAgICBzbWFydERh
dGEtPmFwaS0+bW91c2Vfd2hlZWwoc21hcnREYXRhLCBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01v
dXNlX1doZWVsKj4oZXZlbnRJbmZvKSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdF
dmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlfRE9XTj46OmhhbmRsZUV2ZW50KHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5rZXlfZG93bikKKyAgICAgICAgc21h
cnREYXRhLT5hcGktPmtleV9kb3duKHNtYXJ0RGF0YSwgc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9L
ZXlfRG93bio+KGV2ZW50SW5mbykpOworfQogCi0gICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0
KHBhZ2UpOwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExC
QUNLX0tFWV9VUD46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0
RGF0YS0+YXBpLT5rZXlfdXApCisgICAgICAgIHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXAoc21hcnRE
YXRhLCBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbykpOworfQorCit0
ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfU0hPVz46
OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqKQorewor
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgpLT52
aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKIH0KIAotRXdr
Vmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBj
b250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQot
ICAgIDogbV9ldmFzT2JqZWN0KHZpZXcpCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRI
YW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMq
LCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKworICAgIC8v
IFdlIG5lZWQgdG8gcGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUuIHZpZXdTdGF0ZURpZENoYW5nZSgp
IGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc2V0dGluZyB0aGUgdmlzaWJpbGl0
eSB0byBWaXNpYmxlIG9yIEhpZGRlbgorICAgIC8vIGRlcGVuZGluZyBvbiB3aGF0IFdlYlBhZ2VQ
cm94eTo6aXNWaWV3VmlzaWJsZSgpIHJldHVybnMsIHRoaXMgc2ltcGx5IHRyaWdnZXJzIHRoZSBw
cm9jZXNzLgorICAgIHRvRXdrVmlldyhzbWFydERhdGEpLT5wYWdlKCktPnZpZXdTdGF0ZURpZENo
YW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOworfQorCisvLyBFd2tWaWV3IGltcGxl
bWVudGF0aW9uLgorCitFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQ
YXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwg
Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAg
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3Bh
Z2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJ
bXBsOjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQot
ICAgICwgbV93ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KHRvSW1wbChtX2NvbnRleHQtPndr
Q29udGV4dCgpKSwgbV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAsIHZpZXcpKSkKKyAgICAs
IG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyh0b0ltcGwobV9jb250ZXh0LT53a0NvbnRl
eHQoKSksIG1fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cCksIGV2YXNPYmplY3Qp
KSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlz
KSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpjcmVhdGUo
dGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlz
KSkKQEAgLTE2Niw5ICsyNzgsNyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3
LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdlYlBhZ2VHcm91cAogICAgIEV3a0Zh
dmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2Uo
KTsKICAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsKIAotICAgIGljb25EYXRhYmFzZS0+d2F0Y2hD
aGFuZ2VzKEljb25DaGFuZ2VDYWxsYmFja0RhdGEoRXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZCwg
dGhpcykpOwotCi0gICAgRXdrVmlldzo6YWRkVG9QYWdlVmlld01hcCh0aGlzKTsKKyAgICBpY29u
RGF0YWJhc2UtPndhdGNoQ2hhbmdlcyhJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKEV3a1ZpZXc6Omhh
bmRsZUZhdmljb25DaGFuZ2VkLCB0aGlzKSk7CiB9CiAKIEV3a1ZpZXc6On5Fd2tWaWV3KCkKQEAg
LTE3NywyMyArMjg3LDc4IEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBFd2tGYXZpY29uRGF0
YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAg
QVNTRVJUKGljb25EYXRhYmFzZSk7CiAKLSAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2Vz
KEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOworICAgIGljb25EYXRhYmFzZS0+dW53YXRjaENo
YW5nZXMoRXdrVmlldzo6aGFuZGxlRmF2aWNvbkNoYW5nZWQpOworfQogCi0gICAgRXdrVmlldzo6
cmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKHRoaXMpOworRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0
ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhh
dmlvciBiZWhhdmlvcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2Fu
dmFzLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKKworICAgIEV2
YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21h
cnQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0LCAwKTsK
KworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNP
YmplY3QpOworICAgIGlmICghc21hcnREYXRhKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X2RlbChl
dmFzT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQVNTRVJUKCFzbWFy
dERhdGEtPnByaXYpOworCisgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBp
biBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKKyAgICAv
LyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KKyAgICBzbWFydERhdGEtPnBy
aXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2
aW9yKTsKKyAgICByZXR1cm4gZXZhc09iamVjdDsKIH0KIAotRXdrX1ZpZXdfU21hcnRfRGF0YSog
RXdrVmlldzo6c21hcnREYXRhKCkgY29uc3QKK0V2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVF
dmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKIHsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfZ2V0KG1fZXZhc09iamVjdCkpOworICAgIHJldHVybiBjcmVhdGVFdmFzT2JqZWN0
KGNhbnZhcywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXBS
ZWYsIGJlaGF2aW9yKTsKIH0KIAotRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29u
c3QgRXZhc19PYmplY3QqIHZpZXcpCitib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJm
YWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJiBhcGkpCiB7Ci0gICAgQVNTRVJUKHZpZXcpOwotICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KHZpZXcpKTsKLSAgICBBU1NFUlQoc2QpOwot
ICAgIEFTU0VSVChzZC0+cHJpdik7Ci0gICAgcmV0dXJuIHNkLT5wcml2OworICAgIGlmIChhcGku
dmVyc2lvbiAhPSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKSB7CisgICAgICAgIEVJTkFf
TE9HX0NSSVQoIkV3a19WaWV3X1NtYXJ0X0NsYXNzICVwIGlzIHZlcnNpb24gJWx1IHdoaWxlICVs
dSB3YXMgZXhwZWN0ZWQuIiwKKyAgICAgICAgICAgICZhcGksIGFwaS52ZXJzaW9uLCBFV0tfVklF
V19TTUFSVF9DTEFTU19WRVJTSU9OKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghcGFyZW50U21hcnRDbGFzcy5hZGQpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NsaXBwZWRfc21hcnRfc2V0KCZwYXJlbnRTbWFydENsYXNzKTsKKworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZhcGkuc2MpOworCisgICAgLy8gU2V0IEV2YXNfU21h
cnRfQ2xhc3MgY2FsbGJhY2tzLgorICAgIGFwaS5zYy5hZGQgPSBoYW5kbGVFdmFzQWRkOworICAg
IGFwaS5zYy5kZWwgPSBoYW5kbGVFdmFzRGVsZXRlOworICAgIGFwaS5zYy5tb3ZlID0gaGFuZGxl
RXZhc01vdmU7CisgICAgYXBpLnNjLnJlc2l6ZSA9IGhhbmRsZUV2YXNSZXNpemU7CisgICAgYXBp
LnNjLnNob3cgPSBoYW5kbGVFdmFzU2hvdzsKKyAgICBhcGkuc2MuaGlkZSA9IGhhbmRsZUV2YXNI
aWRlOworICAgIGFwaS5zYy5jb2xvcl9zZXQgPSBoYW5kbGVFdmFzQ29sb3JTZXQ7CisgICAgYXBp
LnNjLmNhbGN1bGF0ZSA9IGhhbmRsZUV2YXNDYWxjdWxhdGU7CisgICAgYXBpLnNjLmRhdGEgPSBz
bWFydENsYXNzTmFtZTsgLy8gSXQgaXMgdXNlZCBmb3IgdHlwZSBjaGVja2luZy4KKworICAgIC8v
IFNldCBFd2tfVmlld19TbWFydF9DbGFzcyBjYWxsYmFja3MuCisgICAgYXBpLmZvY3VzX2luID0g
aGFuZGxlRXdrVmlld0ZvY3VzSW47CisgICAgYXBpLmZvY3VzX291dCA9IGhhbmRsZUV3a1ZpZXdG
b2N1c091dDsKKyAgICBhcGkubW91c2Vfd2hlZWwgPSBoYW5kbGVFd2tWaWV3TW91c2VXaGVlbDsK
KyAgICBhcGkubW91c2VfZG93biA9IGhhbmRsZUV3a1ZpZXdNb3VzZURvd247CisgICAgYXBpLm1v
dXNlX3VwID0gaGFuZGxlRXdrVmlld01vdXNlVXA7CisgICAgYXBpLm1vdXNlX21vdmUgPSBoYW5k
bGVFd2tWaWV3TW91c2VNb3ZlOworICAgIGFwaS5rZXlfZG93biA9IGhhbmRsZUV3a1ZpZXdLZXlE
b3duOworICAgIGFwaS5rZXlfdXAgPSBoYW5kbGVFd2tWaWV3S2V5VXA7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworY29uc3QgRXZhc19PYmplY3QqIEV3a1ZpZXc6OnRvRXZhc09iamVjdChXS1Bh
Z2VSZWYgcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAgcmV0dXJuIHRvSW1wbChwYWdl
KS0+dmlld1dpZGdldCgpOwogfQogCiBXS1BhZ2VSZWYgRXdrVmlldzo6d2tQYWdlKCkgY29uc3QK
QEAgLTM1Nyw2ICs1MjIsMTEgQEAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBFd2tWaWV3Ojpj
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQogfQogI2VuZGlmCiAKK2lubGluZSBFd2tfVmlld19T
bWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoKSBjb25zdAoreworICAgIHJldHVybiB0b1Nt
YXJ0RGF0YShtX2V2YXNPYmplY3QpOworfQorCiB2b2lkIEV3a1ZpZXc6OmRpc3BsYXlUaW1lckZp
cmVkKFRpbWVyPEV3a1ZpZXc+KikKIHsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBA
IC01NjAsMTQgKzczMCwxMyBAQCB2b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZChi
b29sIGVuYWJsZWQpCiAKICAgICBtX21vdXNlRXZlbnRzRW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAg
aWYgKGVuYWJsZWQpIHsKLSAgICAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERh
dGEoKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVj
dCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvbk1vdXNlRG93biwgc2QpOwotICAgICAgICBl
dmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNL
X01PVVNFX1VQLCBvbk1vdXNlVXAsIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2Fs
bGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNl
TW92ZSwgc2QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9V
U0VfRE9XTj46OnN1YnNjcmliZShtX2V2YXNPYmplY3QpOworICAgICAgICBFd2tWaWV3RXZlbnRI
YW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVA+OjpzdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsK
KyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01PVkU+Ojpz
dWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKICAgICB9IGVsc2UgewotICAgICAgICBldmFzX29iamVj
dF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX0RP
V04sIG9uTW91c2VEb3duKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVs
KG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgb25Nb3VzZVVwKTsKLSAgICAg
ICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxM
QkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRs
ZXI8RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOPjo6dW5zdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsK
KyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX1VQPjo6dW5z
dWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFT
X0NBTExCQUNLX01PVVNFX01PVkU+Ojp1bnN1YnNjcmliZShtX2V2YXNPYmplY3QpOwogICAgIH0K
IH0KIApAQCAtNTg2LDE5ICs3NTUsMTkgQEAgdm9pZCBFd2tWaWV3OjpzZXRUb3VjaEV2ZW50c0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAvLyBzdXBwb3J0cyB0aGUgdG91Y2ggZXZlbnRz
LgogICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk3Nzg1IGZvciBkZXRhaWxzLgogICAgICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNt
YXJ0RGF0YSgpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFz
T2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FM
TEJBQ0tfTU9VU0VfVVAsIG9uVG91Y2hVcCwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVu
dF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9u
VG91Y2hNb3ZlLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCht
X2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3VjaERvd24sIHNkKTsK
LSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZB
U19DQUxMQkFDS19NVUxUSV9VUCwgb25Ub3VjaFVwLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9W
RSwgb25Ub3VjaE1vdmUsIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tf
YWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBoYW5kbGVUb3VjaERv
d24sIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09i
amVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgaGFuZGxlVG91Y2hVcCwgc2QpOworICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExC
QUNLX01PVVNFX01PVkUsIGhhbmRsZVRvdWNoTW92ZSwgc2QpOworICAgICAgICBldmFzX29iamVj
dF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX0RP
V04sIGhhbmRsZVRvdWNoRG93biwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxs
YmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX1VQLCBoYW5kbGVUb3Vj
aFVwLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNP
YmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgaGFuZGxlVG91Y2hNb3ZlLCBzZCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZh
c09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvblRvdWNoRG93bik7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJB
Q0tfTU9VU0VfVVAsIG9uVG91Y2hVcCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxi
YWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Ub3VjaE1v
dmUpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0
LCBFVkFTX0NBTExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duKTsKLSAgICAgICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxU
SV9VUCwgb25Ub3VjaFVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVs
KG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBvblRvdWNoTW92ZSk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNf
Q0FMTEJBQ0tfTU9VU0VfRE9XTiwgaGFuZGxlVG91Y2hEb3duKTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9V
UCwgaGFuZGxlVG91Y2hVcCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Rl
bChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgaGFuZGxlVG91Y2hNb3Zl
KTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwg
RVZBU19DQUxMQkFDS19NVUxUSV9ET1dOLCBoYW5kbGVUb3VjaERvd24pOworICAgICAgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01V
TFRJX1VQLCBoYW5kbGVUb3VjaFVwKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJh
Y2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBoYW5kbGVUb3Vj
aE1vdmUpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtOTA5LDcgKzEwNzgsNyBAQCBXS1BhZ2VSZWYg
RXdrVmlldzo6Y3JlYXRlTmV3UGFnZShQYXNzUmVmUHRyPEV3a1VybFJlcXVlc3Q+IHJlcXVlc3Qs
IFdLRGljdGlvbmFyeQogICAgIGlmICghbmV3RXdrVmlldykKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBFd2tWaWV3KiBuZXdWaWV3SW1wbCA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG5ld0V3
a1ZpZXcpOworICAgIEV3a1ZpZXcqIG5ld1ZpZXdJbXBsID0gdG9Fd2tWaWV3KG5ld0V3a1ZpZXcp
OwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKICAgICBuZXdWaWV3SW1wbC0+bV93aW5kb3dG
ZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOwpAQCAtOTI4LDMxICsxMDk3LDIxMiBAQCB2b2lk
IEV3a1ZpZXc6OmNsb3NlKCkKICAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwogfQogCi12
b2lkIEV3a1ZpZXc6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc0FkZChFdmFzX09iamVj
dCogZXZhc09iamVjdCkKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2ZW50SW5mbyk7Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfZG93bik7Ci0gICAgc2QtPmFw
aS0+bW91c2VfZG93bihzZCwgZG93bkV2ZW50KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFy
dCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChldmFzT2JqZWN0KTsKKyAgICBjb25zdCBF
dmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQp
OworICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRDbGFzcyk7CisgICAgQVNTRVJUKGFw
aSk7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0RGF0YShl
dmFzT2JqZWN0KTsKKworICAgIGlmICghc21hcnREYXRhKSB7CisgICAgICAgIC8vIEFsbG9jYXRp
bmcgd2l0aCAnY2FsbG9jJyBhcyB0aGUgQVBJIGNvbnRyYWN0IGlzIHRoYXQgaXQgc2hvdWxkIGJl
IGRlbGV0ZWQgd2l0aCAnZnJlZSgpJy4KKyAgICAgICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0
YSkpKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXZhc09iamVjdCwgc21h
cnREYXRhKTsKKyAgICB9CisKKyAgICBzbWFydERhdGEtPnNlbGYgPSBldmFzT2JqZWN0OworICAg
IHNtYXJ0RGF0YS0+YXBpID0gYXBpOworCisgICAgcGFyZW50U21hcnRDbGFzcy5hZGQoZXZhc09i
amVjdCk7CisKKyAgICBzbWFydERhdGEtPnByaXYgPSAwOworCisgICAgLy8gQ3JlYXRlIGV2YXNf
b2JqZWN0X2ltYWdlIHRvIGRyYXcgd2ViIGNvbnRlbnRzLgorICAgIHNtYXJ0RGF0YS0+aW1hZ2Ug
PSBldmFzX29iamVjdF9pbWFnZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAgIGV2YXNf
b2JqZWN0X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmltYWdlLCBmYWxzZSk7CisgICAgZXZh
c19vYmplY3RfaW1hZ2VfZmlsbGVkX3NldChzbWFydERhdGEtPmltYWdlLCB0cnVlKTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0YS0+aW1hZ2UsIGV2YXNPYmplY3Qp
OworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5pbWFnZSk7CisKKyAgICBFd2tWaWV3
RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+OjpzdWJzY3JpYmUoZXZhc09iamVj
dCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVD46OnN1
YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJB
Q0tfTU9VU0VfV0hFRUw+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50
SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9ET1dOPjo6c3Vic2NyaWJlKGV2YXNPYmplY3QpOwor
ICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlfVVA+OjpzdWJzY3JpYmUo
ZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX1NIT1c+
OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NB
TExCQUNLX0hJREU+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CiB9CiAKLXZvaWQgRXdrVmlldzo6
b25Nb3VzZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5m
bykKK3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc0RlbGV0ZShFdmFzX09iamVjdCogZXZhc09iamVj
dCkKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZh
c19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmFwaS0+bW91c2VfdXApOwotICAgIHNkLT5hcGktPm1vdXNlX3VwKHNkLCB1cEV2
ZW50KTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0RGF0YShl
dmFzT2JqZWN0KTsKKyAgICBpZiAoc21hcnREYXRhKSB7CisgICAgICAgIEFTU0VSVChzbWFydERh
dGEtPnByaXYpOyAvLyBzbWFydERhdGEtPnByaXYgaXMgRXdrVmlldyBpbnN0YW5jZS4KKyAgICAg
ICAgZGVsZXRlIHNtYXJ0RGF0YS0+cHJpdjsKKyAgICB9CisKKyAgICBwYXJlbnRTbWFydENsYXNz
LmRlbChldmFzT2JqZWN0KTsKIH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNlTW92ZSh2b2lkKiBk
YXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit2b2lkIEV3a1ZpZXc6
OmhhbmRsZUV2YXNSZXNpemUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92
ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZlbnRJbmZvKTsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9tb3ZlKTsKLSAg
ICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBtb3ZlRXZlbnQpOworICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEFTU0VSVChz
bWFydERhdGEpOworCisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+aW1hZ2UsIHdp
ZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0YS0+
aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNt
YXJ0RGF0YS0+aW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOworCisgICAgc21hcnREYXRhLT5j
aGFuZ2VkLnNpemUgPSB0cnVlOworICAgIHNtYXJ0RGF0YUNoYW5nZWQoc21hcnREYXRhKTsKK30K
Kwordm9pZCBFd2tWaWV3OjpoYW5kbGVFdmFzTW92ZShFdmFzX09iamVjdCogZXZhc09iamVjdCwg
RXZhc19Db29yZCAvKngqLywgRXZhc19Db29yZCAvKnkqLykKK3sKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBBU1NFUlQo
c21hcnREYXRhKTsKKworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IHRydWU7Cisg
ICAgc21hcnREYXRhQ2hhbmdlZChzbWFydERhdGEpOworfQorCit2b2lkIEV3a1ZpZXc6OmhhbmRs
ZUV2YXNDYWxjdWxhdGUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgQVNT
RVJUKHNtYXJ0RGF0YSk7CisKKyAgICBFd2tWaWV3KiB2aWV3ID0gdG9Fd2tWaWV3KHNtYXJ0RGF0
YSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IGZh
bHNlOworCisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIGV2YXNfb2Jq
ZWN0X2dlb21ldHJ5X2dldChldmFzT2JqZWN0LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisK
KyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uKSB7CisgICAgICAgIHNtYXJ0RGF0
YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IGZhbHNlOworICAgICAgICBzbWFydERhdGEtPnZpZXcueCA9
IHg7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy55ID0geTsKKyAgICAgICAgZXZhc19vYmplY3Rf
bW92ZShzbWFydERhdGEtPmltYWdlLCB4LCB5KTsKKyAgICB9CisKKyAgICBpZiAoc21hcnREYXRh
LT5jaGFuZ2VkLnNpemUpIHsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSBmYWxz
ZTsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LncgPSB3aWR0aDsKKyAgICAgICAgc21hcnREYXRh
LT52aWV3LmggPSBoZWlnaHQ7CisKKyAgICAgICAgaWYgKHZpZXctPnBhZ2UoKS0+ZHJhd2luZ0Fy
ZWEoKSkKKyAgICAgICAgICAgIHZpZXctPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpLCBJbnRTaXplKCkpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgICAgICB2aWV3LT5zZXROZWVkc1N1cmZhY2VSZXNpemUoKTsKKyNl
bmRpZgorI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICB2aWV3LT5wYWdlQ2xp
ZW50KCktPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworI2VuZGlmCisgICAgfQorfQorCit2b2lkIEV3
a1ZpZXc6OmhhbmRsZUV2YXNTaG93KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOwor
ICAgIEFTU0VSVChzbWFydERhdGEpOworCisgICAgaWYgKGV2YXNfb2JqZWN0X2NsaXBlZXNfZ2V0
KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFy
dERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmlt
YWdlKTsKK30KKwordm9pZCBFd2tWaWV3OjpoYW5kbGVFdmFzSGlkZShFdmFzX09iamVjdCogZXZh
c09iamVjdCkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0
RGF0YShldmFzT2JqZWN0KTsKKyAgICBBU1NFUlQoc21hcnREYXRhKTsKKworICAgIGV2YXNfb2Jq
ZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X2hpZGUo
c21hcnREYXRhLT5pbWFnZSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc0NvbG9yU2V0
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBp
bnQgYWxwaGEpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFy
dERhdGEoZXZhc09iamVjdCk7CisgICAgQVNTRVJUKHNtYXJ0RGF0YSk7CisKKyAgICBFd2tWaWV3
KiB2aWV3ID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAg
YWxwaGEgPSBjbGFtcFRvKGFscGhhLCAwLCAyNTUpOworICAgIHJlZCA9IGNsYW1wVG8ocmVkLCAw
LCBhbHBoYSk7CisgICAgZ3JlZW4gPSBjbGFtcFRvKGdyZWVuLCAwLCBhbHBoYSk7CisgICAgYmx1
ZSA9IGNsYW1wVG8oYmx1ZSwgMCwgYWxwaGEpOworCisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxw
aGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGFscGhhIDwgMjU1KTsKKyAgICB2aWV3LT5wYWdlKCkt
PnNldERyYXdzQmFja2dyb3VuZChyZWQgfHwgZ3JlZW4gfHwgYmx1ZSk7CisgICAgdmlldy0+cGFn
ZSgpLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChhbHBoYSA8IDI1NSk7CisKKyAgICBw
YXJlbnRTbWFydENsYXNzLmNvbG9yX3NldChldmFzT2JqZWN0LCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpoYW5kbGVFd2tWaWV3Rm9jdXNJbihFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgdG9Fd2tWaWV3KHNtYXJ0RGF0YSkt
PnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8
IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworRWluYV9Cb29sIEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdGb2N1c091dChFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgdG9Fd2tWaWV3KHNtYXJ0RGF0YSktPnBhZ2UoKS0+
dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQ
cm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9C
b29sIEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZVdoZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKK3sK
KyAgICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgc2VsZi0+cGFn
ZSgpLT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQod2hlZWxFdmVudCwgc2Vs
Zi0+dHJhbnNmb3JtRnJvbVNjZW5lKCksIHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3Vz
ZURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01v
dXNlX0Rvd24qIGRvd25FdmVudCkKK3sKKyAgICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNt
YXJ0RGF0YSk7CisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1v
dXNlRXZlbnQoZG93bkV2ZW50LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgc2VsZi0+dHJh
bnNmb3JtVG9TY3JlZW4oKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdr
Vmlldzo6aGFuZGxlRXdrVmlld01vdXNlVXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50KQoreworICAgIEV3a1ZpZXcqIHNl
bGYgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5wYWdlKCktPmhhbmRsZU1vdXNl
RXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudCh1cEV2ZW50LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2Nl
bmUoKSwgc2VsZi0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOworCisgICAgaWYgKElucHV0TWV0aG9k
Q29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gc2VsZi0+aW5wdXRNZXRob2RDb250ZXh0
KCkpCisgICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxlTW91c2VVcEV2ZW50KHVwRXZl
bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpoYW5kbGVF
d2tWaWV3TW91c2VNb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZh
c19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IHRv
RXdrVmlldyhzbWFydERhdGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChO
YXRpdmVXZWJNb3VzZUV2ZW50KG1vdmVFdmVudCwgc2VsZi0+dHJhbnNmb3JtRnJvbVNjZW5lKCks
IHNlbGYtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWlu
YV9Cb29sIEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdLZXlEb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50KQoreworICAg
IGJvb2wgaXNGaWx0ZXJlZCA9IGZhbHNlOworICAgIEV3a1ZpZXcqIHNlbGYgPSB0b0V3a1ZpZXco
c21hcnREYXRhKTsKKyAgICBpZiAoSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENv
bnRleHQgPSBzZWxmLT5pbnB1dE1ldGhvZENvbnRleHQoKSkKKyAgICAgICAgaW5wdXRNZXRob2RD
b250ZXh0LT5oYW5kbGVLZXlEb3duRXZlbnQoZG93bkV2ZW50LCAmaXNGaWx0ZXJlZCk7CisKKyAg
ICBzZWxmLT5wYWdlKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dChkb3duRXZlbnQsIGlzRmlsdGVyZWQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9C
b29sIEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdLZXlVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KQoreworICAgIHRvRXdrVmll
dyhzbWFydERhdGEpLT5wYWdlKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCh1cEV2ZW50KSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQpAQCAtOTgwLDI2ICsxMzMwLDIzIEBAIHZvaWQgRXdrVmlldzo6ZmVlZFRvdWNo
RXZlbnRzKEV3a19Ub3VjaF9FdmVudF9UeXBlIHR5cGUpCiAgICAgICAgIGRlbGV0ZSBzdGF0aWNf
Y2FzdDxFd2tfVG91Y2hfUG9pbnQqPihkYXRhKTsKIH0KIAotdm9pZCBFd2tWaWV3OjpvblRvdWNo
RG93bih2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pCit2b2lkIEV3a1ZpZXc6OmhhbmRsZVRvdWNo
RG93bih2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pCiB7Ci0gICAgRXdrVmlldyogdmlldyA9IEV3
a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGV3a1ZpZXcpOwotICAgIHZpZXctPmZlZWRUb3VjaEV2ZW50
cyhFV0tfVE9VQ0hfU1RBUlQpOworICAgIHRvRXdrVmlldyhld2tWaWV3KS0+ZmVlZFRvdWNoRXZl
bnRzKEVXS19UT1VDSF9TVEFSVCk7CiB9CiAKLXZvaWQgRXdrVmlldzo6b25Ub3VjaFVwKHZvaWQq
IC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZv
aWQqIC8qIGV2ZW50SW5mbyAqLykKK3ZvaWQgRXdrVmlldzo6aGFuZGxlVG91Y2hVcCh2b2lkKiAv
KiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lk
KiAvKiBldmVudEluZm8gKi8pCiB7Ci0gICAgRXdrVmlldyogdmlldyA9IEV3a1ZpZXc6OmZyb21F
dmFzT2JqZWN0KGV3a1ZpZXcpOwotICAgIHZpZXctPmZlZWRUb3VjaEV2ZW50cyhFV0tfVE9VQ0hf
RU5EKTsKKyAgICB0b0V3a1ZpZXcoZXdrVmlldyktPmZlZWRUb3VjaEV2ZW50cyhFV0tfVE9VQ0hf
RU5EKTsKIH0KIAotdm9pZCBFd2tWaWV3OjpvblRvdWNoTW92ZSh2b2lkKiAvKiBkYXRhICovLCBF
dmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudElu
Zm8gKi8pCi17Ci0gICAgRXdrVmlldyogdmlldyA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGV3
a1ZpZXcpOwotICAgIHZpZXctPmZlZWRUb3VjaEV2ZW50cyhFV0tfVE9VQ0hfTU9WRSk7Cit2b2lk
IEV3a1ZpZXc6OmhhbmRsZVRvdWNoTW92ZSh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52
YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pCit7ICAg
IAorICAgIHRvRXdrVmlldyhld2tWaWV3KS0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9NT1ZF
KTsKIH0KICNlbmRpZgogCi12b2lkIEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQoY29uc3QgY2hh
ciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKQordm9pZCBFd2tWaWV3OjpoYW5kbGVGYXZpY29u
Q2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCiB7CiAgICAgRXdr
VmlldyogdmlldyA9IHN0YXRpY19jYXN0PEV3a1ZpZXcqPihldmVudEluZm8pOwogCkBAIC0xMDM3
LDMgKzEzODQsNDUgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VT
bmFwc2hvdCgpCiAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNlbmRpZgogfQorCitF
dmFzX1NtYXJ0X0NsYXNzIEV3a1ZpZXc6OnBhcmVudFNtYXJ0Q2xhc3MgPSBFVkFTX1NNQVJUX0NM
QVNTX0lOSVRfTlVMTDsKKworLy8gRnJlZSBFd2sgVmlldyBmdW5jdGlvbnMuCisKK0V3a1ZpZXcq
IHRvRXdrVmlldyhjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBBU1NFUlQo
ZXZhc09iamVjdCAmJiBpc1ZpZXdFdmFzT2JqZWN0KGV2YXNPYmplY3QpKTsKKyAgICByZXR1cm4g
dG9Fd2tWaWV3KHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9z
bWFydF9kYXRhX2dldChldmFzT2JqZWN0KSkpOworfQorCitFd2tWaWV3KiB0b0V3a1ZpZXcoY29u
c3QgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQoreworICAgIEFTU0VSVChzbWFydERh
dGEgJiYgc21hcnREYXRhLT5wcml2KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OworfQor
Citib29sIGlzVmlld0V2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7
CisgICAgQVNTRVJUKGV2YXNPYmplY3QpOworCisgICAgY29uc3QgY2hhciogZXZhc09iamVjdFR5
cGUgPSBldmFzX29iamVjdF90eXBlX2dldChldmFzT2JqZWN0KTsKKyAgICBjb25zdCBFdmFzX1Nt
YXJ0KiBldmFzU21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXZhc09iamVjdCk7
CisgICAgaWYgKFVOTElLRUxZKCFldmFzU21hcnQpKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQo
IiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RU
eXBlID8gZXZhc09iamVjdFR5cGUgOiAiKG51bGwpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19z
bWFydF9jbGFzc19nZXQoZXZhc1NtYXJ0KTsKKyAgICBpZiAoVU5MSUtFTFkoIXNtYXJ0Q2xhc3Mp
KSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90IGEgc21hcnQgY2xhc3Mg
b2JqZWN0ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZhc09iamVjdFR5cGUgOiAi
KG51bGwpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoVU5MSUtF
TFkoc21hcnRDbGFzcy0+ZGF0YSAhPSBzbWFydENsYXNzTmFtZSkpIHsKKyAgICAgICAgRUlOQV9M
T0dfQ1JJVCgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3ZpZXcgKG5lZWQgJXAsIGdvdCAlcCkh
IiwgZXZhc09iamVjdCwgZXZhc09iamVjdFR5cGUgPyBldmFzT2JqZWN0VHlwZSA6ICIobnVsbCki
LAorICAgICAgICAgICAgc21hcnRDbGFzc05hbWUsIHNtYXJ0Q2xhc3MtPmRhdGEpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggODcxNjViYy4uOWYxYzM4YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtOTksNiAr
OTksNyBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2YXNfR0xfU3VyZmFjZTsK
ICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1Nt
YXJ0X0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19T
bWFydF9DbGFzczsKIAogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6CkBAIC0xMDcsMTEgKzEwOCwx
NSBAQCBwdWJsaWM6CiAgICAgICAgIExlZ2FjeUJlaGF2aW9yLAogICAgICAgICBEZWZhdWx0QmVo
YXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8
RXdrQ29udGV4dD4gY29udGV4dCwgV2ViS2l0OjpXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmll
d0JlaGF2aW9yKTsKLSAgICB+RXdrVmlldygpOwogCi0gICAgc3RhdGljIEV3a1ZpZXcqIGZyb21F
dmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKLSAgICBFdmFzX09iamVjdCogdmll
dygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3Jl
YXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBW
aWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHN0
YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwg
Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKKworICAg
IHN0YXRpYyBib29sIGluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNz
Jik7CisKKyAgICBzdGF0aWMgY29uc3QgRXZhc19PYmplY3QqIHRvRXZhc09iamVjdChXS1BhZ2VS
ZWYpOworCisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QoKSB7IHJldHVybiBtX2V2YXNPYmpl
Y3Q7IH0KIAogICAgIFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dl
YlZpZXcuZ2V0KCkpOyB9CiAgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNvbnN0OwpAQCAtMTUzLDEx
ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vy
c29yJiBjdXJzb3IpOwogICAgIHZvaWQgc2V0SW1hZ2VEYXRhKHZvaWQqIGltYWdlRGF0YSwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSk7CiAKLSAgICB2b2lkIHVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgpKTsKLQotICAgIHN0YXRpYyB2
b2lkIGFkZFRvUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldyk7Ci0gICAgc3RhdGljIHZvaWQgcmVt
b3ZlRnJvbVBhZ2VWaWV3TWFwKEV3a1ZpZXcqIHZpZXcpOwotICAgIHN0YXRpYyBjb25zdCBFdmFz
X09iamVjdCogdmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYpOworICAgIHZvaWQg
dXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KCkp
OyAgIAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHZvaWQgZW50ZXJGdWxsU2Ny
ZWVuKCk7CkBAIC0yMjEsNyArMjIyLDExIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0gICAgaW5saW5lIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworICAgIEV3a1ZpZXcoRXZhc19PYmpl
Y3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIH5Fd2tWaWV3KCk7IC8vIFdpbGwg
YmUgZGVsZXRlZCB3aGVuIEV2YXMgT2JqZWN0IGlzIGRlbGV0ZWQuCisKKyAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEoKSBjb25zdDsKKwogICAgIHZvaWQgZGlzcGxheVRpbWVyRmly
ZWQoV2ViQ29yZTo6VGltZXI8RXdrVmlldz4qKTsKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKQEAgLTIzMCwxNyArMjM1LDM1IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluZm9ybUlj
b25DaGFuZ2UoKTsKIAotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2
YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Ci0gICAgc3RhdGljIHZvaWQgb25N
b3VzZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7
Ci0gICAgc3RhdGljIHZvaWQgb25Nb3VzZU1vdmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyAgICAvLyBFdmFzX1NtYXJ0X0NsYXNzIGNhbGxiYWNr
IGludGVyZmFjZS4KKyAgICBzdGF0aWMgdm9pZCBoYW5kbGVFdmFzQWRkKEV2YXNfT2JqZWN0Kik7
CisgICAgc3RhdGljIHZvaWQgaGFuZGxlRXZhc0RlbGV0ZShFdmFzX09iamVjdCopOworICAgIHN0
YXRpYyB2b2lkIGhhbmRsZUV2YXNNb3ZlKEV2YXNfT2JqZWN0KiwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNSZXNpemUoRXZhc19PYmplY3Qq
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCk7CisgICAgc3RhdGljIHZvaWQg
aGFuZGxlRXZhc1Nob3coRXZhc19PYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBoYW5kbGVFdmFz
SGlkZShFdmFzX09iamVjdCopOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNDb2xvclNldChF
dmFzX09iamVjdCosIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSk7Cisg
ICAgc3RhdGljIHZvaWQgaGFuZGxlRXZhc0NhbGN1bGF0ZShFdmFzX09iamVjdCopOworCisgICAg
Ly8gRXdrX1ZpZXdfU21hcnRfQ2xhc3MgY2FsbGJhY2sgaW50ZXJmYWNlLgorICAgIHN0YXRpYyBF
aW5hX0Jvb2wgaGFuZGxlRXdrVmlld0ZvY3VzSW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIGhhbmRsZUV3a1ZpZXdGb2N1c091dChFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgaGFuZGxlRXdr
Vmlld01vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFz
X0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIGhh
bmRsZUV3a1ZpZXdNb3VzZURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9v
bCBoYW5kbGVFd2tWaWV3TW91c2VVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNv
bnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wg
aGFuZGxlRXdrVmlld01vdXNlTW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNv
bnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9C
b29sIGhhbmRsZUV3a1ZpZXdLZXlEb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwg
Y29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9C
b29sIGhhbmRsZUV3a1ZpZXdLZXlVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNv
bnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KTsKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAgICAgdm9pZCBmZWVkVG91Y2hFdmVudHMoRXdrX1RvdWNoX0V2ZW50X1R5cGUgdHlwZSk7
Ci0gICAgc3RhdGljIHZvaWQgb25Ub3VjaERvd24odm9pZCogLyogZGF0YSAqLywgRXZhcyogLyog
Y2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKTsK
LSAgICBzdGF0aWMgdm9pZCBvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2Fu
dmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKTsKLSAg
ICBzdGF0aWMgdm9pZCBvblRvdWNoTW92ZSh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52
YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOworICAg
IHN0YXRpYyB2b2lkIGhhbmRsZVRvdWNoRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiBldmVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZVRvdWNoVXAodm9p
ZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyAgICBzdGF0
aWMgdm9pZCBoYW5kbGVUb3VjaE1vdmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwg
dm9pZCogZXZlbnRJbmZvKTsKICNlbmRpZgotICAgIHN0YXRpYyB2b2lkIG9uRmF2aWNvbkNoYW5n
ZWQoY29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9p
ZCBoYW5kbGVGYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudElu
Zm8pOwogCitwcml2YXRlOgogICAgIC8vIE5vdGUsIGluaXRpYWxpemF0aW9uIG9yZGVyIG1hdHRl
cnMuCiAgICAgRXZhc19PYmplY3QqIG1fZXZhc09iamVjdDsKICAgICBSZWZQdHI8RXdrQ29udGV4
dD4gbV9jb250ZXh0OwpAQCAtMjg3LDYgKzMxMCwxMyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAg
Ym9vbCBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZDsKICAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3Jv
dW5kOworCisgICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgcGFyZW50U21hcnRDbGFzczsKIH07
CiAKK0V3a1ZpZXcqIHRvRXdrVmlldyhjb25zdCBFdmFzX09iamVjdCopOworRXdrVmlldyogdG9F
d2tWaWV3KGNvbnN0IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisKK2Jvb2wgaXNW
aWV3RXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVjdCk7CisKICNlbmRpZiAv
LyBFd2tWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcAppbmRleCBkNjE4MWI4Li5jNTNkODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0yNSw5ICsyNSw2IEBACiAjaW5jbHVkZSAiRmlu
ZENsaWVudEVmbC5oIgogI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKICNpbmNsdWRlICJJbnB1
dE1ldGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmgi
Ci0jaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYldo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VM
b2FkQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgpAQCAtNTAs
NyArNDcsNiBAQAogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKICNp
bmNsdWRlICJld2tfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5nc19wcml2YXRlLmgi
Ci0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CkBAIC02OCw0ODYgKzY0LDMxIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBjb25zdCBjaGFyIEVXS19WSUVXX1RZUEVf
U1RSW10gPSAiRVdLMl9WaWV3IjsKLQotI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1Zp
ZXcsIHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBib29s
IHJlc3VsdCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIWV3
a1ZpZXcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoIm51bGwgaXMgbm90IGEgZXdrX3Zp
ZXciKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIGNvbnN0IGNoYXIqIF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChld2tWaWV3
KTsgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBFdmFzX1NtYXJ0KiBfdG1wX3MgPSBl
dmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7ICAgICAgIFwKLSAgICAgICAgaWYg
KEVJTkFfVU5MSUtFTFkoIV90bXBfcykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgi
JXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICAgZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUg
OiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxz
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIF90bXBfc2MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChf
dG1wX3MpOyAgICAgICAgXAotICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3RtcF9zYykpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJ
TkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVj
dCEiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBld2tW
aWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoX3RtcF9zYy0+
ZGF0YSAhPSBFV0tfVklFV19UWVBFX1NUUikpIHsgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdr
X3ZpZXcgKG5lZWQgJXAsIGdvdCAlcCkhIiwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIiwgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgIEVXS19WSUVXX1RZUEVfU1RSLCBfdG1wX3NjLT5kYXRh
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIF90bXBfcmVzdWx0
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGlmIChfdG1wX3Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc21hcnREYXRhID0gKEV3a19W
aWV3X1NtYXJ0X0RhdGEqKWV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpCi0KLSNk
ZWZpbmUgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC4uLikg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFzbWFydERhdGEpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5B
X0xPR19DUklUKCJubyBzbWFydCBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgZXdrVmlldywgZXZhc19vYmplY3RfdHlwZV9n
ZXQoZXdrVmlldykpOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiBfX1ZB
X0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRVdL
X1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgLi4uKSAgICAg
ICAgICAgICAgICBcCi0gICAgaWYgKCFzbWFydERhdGEpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBFSU5BX0xPR19D
UklUKCJzbWFydCBkYXRhIGlzIG51bGwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIEV3a1ZpZXcqIGltcGwgPSBzbWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IGlmICghaW1wbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBk
YXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICBzbWFydERhdGEtPnNlbGYsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0YS0+c2VsZikp
OyAgICAgICBcCi0gICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB9IHdoaWxlICgwKQotCiAjZGVmaW5lIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBpbXBsLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a1Zp
ZXcqIGltcGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBFd2tWaWV3KiBpbXBsID0gdG9Fd2tWaWV3KGV3a1ZpZXcpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgX19WQV9BUkdTX18pOyAgICAgICAgICAgIFwKLSAgICAgICAgaW1wbCA9IHNtYXJ0RGF0
YS0+cHJpdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgICAgIGlmICghaW1wbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8g
cHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICBzbWFydERhdGEtPnNlbGYsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0
YS0+c2VsZikpOyAgICAgICBcCisgICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2YXRl
IGRhdGEgZm9yIG9iamVjdCAlcCIsIGV3a1ZpZXcpOyAgICAgICAgICAgXAogICAgICAgICAgICAg
cmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAot
Ly8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQuCi10
eXBlZGVmIHN0cnVjdCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0IEV3a19QYWdlX0NvbnRlbnRz
X0NvbnRleHQ7Ci0KLS8qCi0gKiBAYnJpZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgcGFnZSBjb250
ZW50cyBjb250ZXh0IHVzZWQgZm9yIGV3a192aWV3X3BhZ2VfY29udGVudHNfZ2V0KCkgQVBJLgot
ICovCi1zdHJ1Y3QgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dCB7Ci0gICAgRXdrX1BhZ2VfQ29u
dGVudHNfVHlwZSB0eXBlOwotICAgIEV3a19QYWdlX0NvbnRlbnRzX0NiIGNhbGxiYWNrOwotfTsK
LQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhKQotewotICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuYW55KQotICAgICAg
ICByZXR1cm47Ci0gICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IHRydWU7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2hhbmdlZChzbWFydERhdGEtPnNlbGYpOwotfQotCi0vLyBEZWZhdWx0IEV2
ZW50IEhhbmRsaW5nLgotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4o
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIEVXS19WSUVXX0lNUExfR0VU
X0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBh
Z2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdl
YlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0
ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZp
ZXdXaW5kb3dJc0FjdGl2ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX3doZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKLXsKLSAgICBF
V0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7
Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVu
dCh3aGVlbEV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3Jt
VG9TY3JlZW4oKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF9tb3VzZV9kb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwg
Y29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdf
SU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAg
aW1wbC0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZG93bkV2
ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4o
KSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9tb3VzZV91cChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNf
RXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0Rf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5o
YW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQodXBFdmVudCwgaW1wbC0+dHJhbnNm
b3JtRnJvbVNjZW5lKCksIGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKLQotICAgIElucHV0
TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gaW1wbC0+aW5wdXRNZXRob2RD
b250ZXh0KCk7Ci0gICAgaWYgKGlucHV0TWV0aG9kQ29udGV4dCkKLSAgICAgICAgaW5wdXRNZXRo
b2RDb250ZXh0LT5oYW5kbGVNb3VzZVVwRXZlbnQodXBFdmVudCk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfbW92ZShFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSog
bW92ZUV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFy
dERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVu
dChOYXRpdmVXZWJNb3VzZUV2ZW50KG1vdmVFdmVudCwgaW1wbC0+dHJhbnNmb3JtRnJvbVNjZW5l
KCksIGltcGwtPnRyYW5zZm9ybVRvU2NyZWVuKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfa2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCi17
Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwg
ZmFsc2UpOwotCi0gICAgYm9vbCBpc0ZpbHRlcmVkID0gZmFsc2U7Ci0gICAgSW5wdXRNZXRob2RD
b250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBpbXBsLT5pbnB1dE1ldGhvZENvbnRleHQo
KTsKLSAgICBpZiAoaW5wdXRNZXRob2RDb250ZXh0KQotICAgICAgICBpbnB1dE1ldGhvZENvbnRl
eHQtPmhhbmRsZUtleURvd25FdmVudChkb3duRXZlbnQsICZpc0ZpbHRlcmVkKTsKLQotICAgIGlt
cGwtPnBhZ2UoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGRv
d25FdmVudCwgaXNGaWx0ZXJlZCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9rZXlfdXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCkKLXsKLSAgICBFV0tfVklFV19J
TVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBp
bXBsLT5wYWdlKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh1
cEV2ZW50KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEV2ZW50IEhhbmRsaW5nLgotc3Rh
dGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4pOwotICAgIHNtYXJ0
RGF0YS0+YXBpLT5mb2N1c19pbihzbWFydERhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfb25fZm9jdXNfb3V0KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8q
ZXZlbnRJbmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsKLSAgICBzbWFydERhdGEtPmFwaS0+Zm9j
dXNfb3V0KHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV93
aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17
Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2
YXNfRXZlbnRfTW91c2VfV2hlZWwqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsKLSAg
ICBzbWFydERhdGEtPmFwaS0+bW91c2Vfd2hlZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3du
KiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZv
KTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpLT5rZXlfZG93bik7Ci0gICAgc21hcnREYXRhLT5hcGktPmtleV9kb3duKHNtYXJ0RGF0
YSwgZG93bkV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV91cCh2b2lk
KiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZh
c19FdmVudF9LZXlfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+
KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaS0+a2V5X3VwKTsKLSAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNt
YXJ0RGF0YSwgdXBFdmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9zaG93KHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJbmZvKi8pCi17Ci0g
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVS
TihzbWFydERhdGEsIGltcGwpOwotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdl
KFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlzaWJsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmll
d19vbl9oaWRlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIC8qZXZlbnRJ
bmZvKi8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZ
X1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwpOwotCi0gICAgLy8gVGhpcyBjYWxsIG1heSBs
b29rIHdyb25nLCBidXQgd2UgcmVhbGx5IG5lZWQgdG8gcGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUu
Ci0gICAgLy8gdmlld1N0YXRlRGlkQ2hhbmdlKCkgaXRzZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBh
Y3R1YWxseSBzZXR0aW5nIHRoZSB2aXNpYmlsaXR5IHRvIFZpc2libGUgb3IgSGlkZGVuCi0gICAg
Ly8gZGVwZW5kaW5nIG9uIHdoYXQgV2ViUGFnZVByb3h5Ojppc1ZpZXdWaXNpYmxlKCkgcmV0dXJu
cywgdGhpcyBzaW1wbHkgdHJpZ2dlcnMgdGhlIHByb2Nlc3MuCi0gICAgaW1wbC0+cGFnZSgpLT52
aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKLX0KLQotc3Rh
dGljIEV2YXNfU21hcnRfQ2xhc3MgZ19wYXJlbnRTbWFydENsYXNzID0gRVZBU19TTUFSVF9DTEFT
U19JTklUX05VTEw7Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCi17Ci0gICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVj
dF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7Ci0gICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyog
c21hcnRDbGFzcyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKLSAgICBjb25zdCBFd2tf
Vmlld19TbWFydF9DbGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19T
bWFydF9DbGFzcyo+KHNtYXJ0Q2xhc3MpOwotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBz
bWFydERhdGEpOwotCi0gICAgaWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgc21hcnREYXRhID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1Zp
ZXdfU21hcnRfRGF0YSkpKTsKLSAgICAgICAgaWYgKCFzbWFydERhdGEpIHsKLSAgICAgICAgICAg
IEVJTkFfTE9HX0NSSVQoImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21h
cnRfZGF0YV9zZXQoZXdrVmlldywgc21hcnREYXRhKTsKLSAgICB9Ci0KLSAgICBzbWFydERhdGEt
PnNlbGYgPSBld2tWaWV3OwotICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOwotCi0gICAgZ19wYXJl
bnRTbWFydENsYXNzLmFkZChld2tWaWV3KTsKLQotICAgIHNtYXJ0RGF0YS0+cHJpdiA9IDA7Ci0K
LSAgICAvLyBDcmVhdGUgZXZhc19vYmplY3RfaW1hZ2UgdG8gZHJhdyB3ZWIgY29udGVudHMuCi0g
ICAgc21hcnREYXRhLT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJh
c2UuZXZhcyk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1h
Z2UsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+
aW1hZ2UsIHRydWUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRh
LT5pbWFnZSwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmltYWdl
KTsKLQotI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Fk
ZChld2tWaWV3LCBzLCBjLCBzbWFydERhdGEpCi0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZP
Q1VTX0lOLCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4pOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFD
S19GT0NVU19PVVQsIF9ld2tfdmlld19vbl9mb2N1c19vdXQpOwotICAgIENPTk5FQ1QoRVZBU19D
QUxMQkFDS19NT1VTRV9XSEVFTCwgX2V3a192aWV3X29uX21vdXNlX3doZWVsKTsKLSAgICBDT05O
RUNUKEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04sIF9ld2tfdmlld19vbl9rZXlfZG93bik7Ci0gICAg
Q09OTkVDVChFVkFTX0NBTExCQUNLX0tFWV9VUCwgX2V3a192aWV3X29uX2tleV91cCk7Ci0gICAg
Q09OTkVDVChFVkFTX0NBTExCQUNLX1NIT1csIF9ld2tfdmlld19vbl9zaG93KTsKLSAgICBDT05O
RUNUKEVWQVNfQ0FMTEJBQ0tfSElERSwgX2V3a192aWV3X29uX2hpZGUpOwotI3VuZGVmIENPTk5F
Q1QKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdr
VmlldykKLXsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBp
ZiAoc21hcnREYXRhKQotICAgICAgICBkZWxldGUgc21hcnREYXRhLT5wcml2OwotCi0gICAgZ19w
YXJlbnRTbWFydENsYXNzLmRlbChld2tWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3
X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQpCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEpOwotCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+aW1hZ2Us
IHdpZHRoLCBoZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNtYXJ0RGF0
YS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0
KHNtYXJ0RGF0YS0+aW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgc21hcnREYXRh
LT5jaGFuZ2VkLnNpemUgPSB0cnVlOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0
RGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9tb3ZlKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFdmFzX0Nvb3JkIC8qeCovLCBFdmFzX0Nvb3JkIC8qeSovKQotewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIHNtYXJ0
RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IHRydWU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5n
ZWQoc21hcnREYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0
ZShFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0KLSAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gZmFs
c2U7Ci0KLSAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAg
IGlmIChzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24pIHsKLSAgICAgICAgc21hcnREYXRhLT5j
aGFuZ2VkLnBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy54ID0geDsK
LSAgICAgICAgc21hcnREYXRhLT52aWV3LnkgPSB5OwotICAgICAgICBldmFzX29iamVjdF9tb3Zl
KHNtYXJ0RGF0YS0+aW1hZ2UsIHgsIHkpOwotICAgIH0KLQotICAgIGlmIChzbWFydERhdGEtPmNo
YW5nZWQuc2l6ZSkgewotICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IGZhbHNlOwot
ICAgICAgICBzbWFydERhdGEtPnZpZXcudyA9IHdpZHRoOwotICAgICAgICBzbWFydERhdGEtPnZp
ZXcuaCA9IGhlaWdodDsKLQotICAgICAgICBpZiAoaW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgp
KQotICAgICAgICAgICAgaW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNp
emUod2lkdGgsIGhlaWdodCksIEludFNpemUoKSk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgICAgIGltcGwtPnNldE5lZWRzU3VyZmFjZVJlc2l6ZSgpOwotI2VuZGlm
Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIGltcGwtPnBhZ2VDbGllbnQo
KS0+dXBkYXRlVmlld3BvcnRTaXplKCk7Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9zaG93KEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIGlmIChldmFz
X29iamVjdF9jbGlwZWVzX2dldChzbWFydERhdGEtPmJhc2UuY2xpcHBlcikpCi0gICAgICAgIGV2
YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0
X3Nob3coc21hcnREYXRhLT5pbWFnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9oaWRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLQotICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnRE
YXRhLT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5pbWFn
ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jb2xvcl9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKLXsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAg
RVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0KLSAg
ICBpZiAoYWxwaGEgPCAwKQotICAgICAgICBhbHBoYSA9IDA7Ci0gICAgZWxzZSBpZiAoYWxwaGEg
PiAyNTUpCi0gICAgICAgIGFscGhhID0gMjU1OwotCi0jZGVmaW5lIENIRUNLX0NPTE9SKGNvbG9y
LCBhbHBoYSkgXAotICAgIGlmIChjb2xvciA8IDApICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
Y29sb3IgPSAwOyAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoY29sb3IgPiBhbHBoYSkg
ICAgICAgXAotICAgICAgICBjb2xvciA9IGFscGhhOwotICAgIENIRUNLX0NPTE9SKHJlZCwgYWxw
aGEpOwotICAgIENIRUNLX0NPTE9SKGdyZWVuLCBhbHBoYSk7Ci0gICAgQ0hFQ0tfQ09MT1IoYmx1
ZSwgYWxwaGEpOwotI3VuZGVmIENIRUNLX0NPTE9SCi0KLSAgICBldmFzX29iamVjdF9pbWFnZV9h
bHBoYV9zZXQoc21hcnREYXRhLT5pbWFnZSwgYWxwaGEgPCAyNTUpOwotICAgIGltcGwtPnBhZ2Uo
KS0+c2V0RHJhd3NCYWNrZ3JvdW5kKHJlZCB8fCBncmVlbiB8fCBibHVlKTsKLSAgICBpbXBsLT5w
YWdlKCktPnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGFscGhhIDwgMjU1KTsKLQotICAg
IGdfcGFyZW50U21hcnRDbGFzcy5jb2xvcl9zZXQoZXdrVmlldywgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGkpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGFwaSwgZmFsc2UpOwogCi0gICAgaWYgKGFwaS0+dmVyc2lvbiAhPSBFV0tfVklFV19TTUFSVF9D
TEFTU19WRVJTSU9OKSB7Ci0gICAgICAgIEVJTkFfTE9HX0NSSVQoIkV3a19WaWV3X1NtYXJ0X0Ns
YXNzICVwIGlzIHZlcnNpb24gJWx1IHdoaWxlICVsdSB3YXMgZXhwZWN0ZWQuIiwKLSAgICAgICAg
ICAgICBhcGksIGFwaS0+dmVyc2lvbiwgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfVkVSU0lPTik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VMWSghZ19w
YXJlbnRTbWFydENsYXNzLmFkZCkpCi0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRf
c21hcnRfc2V0KCZnX3BhcmVudFNtYXJ0Q2xhc3MpOwotCi0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2xpcHBlZF9zbWFydF9zZXQoJmFwaS0+c2MpOwotCi0gICAgLy8gU2V0IEV2YXNfU21hcnRfQ2xh
c3MgZnVuY3Rpb25zLgotICAgIGFwaS0+c2MuYWRkID0gX2V3a192aWV3X3NtYXJ0X2FkZDsKLSAg
ICBhcGktPnNjLmRlbCA9IF9ld2tfdmlld19zbWFydF9kZWw7Ci0gICAgYXBpLT5zYy5tb3ZlID0g
X2V3a192aWV3X3NtYXJ0X21vdmU7Ci0gICAgYXBpLT5zYy5yZXNpemUgPSBfZXdrX3ZpZXdfc21h
cnRfcmVzaXplOwotICAgIGFwaS0+c2Muc2hvdyA9IF9ld2tfdmlld19zbWFydF9zaG93OwotICAg
IGFwaS0+c2MuaGlkZSA9IF9ld2tfdmlld19zbWFydF9oaWRlOwotICAgIGFwaS0+c2MuY29sb3Jf
c2V0ID0gX2V3a192aWV3X3NtYXJ0X2NvbG9yX3NldDsKLSAgICBhcGktPnNjLmNhbGN1bGF0ZSA9
IF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGU7Ci0gICAgYXBpLT5zYy5kYXRhID0gRVdLX1ZJRVdf
VFlQRV9TVFI7IC8vIEl0IGlzIHVzZWQgYnkgdHlwZSBjaGVja2luZy4KLQotICAgIC8vIFNldCBF
d2tfVmlld19TbWFydF9DbGFzcyBmdW5jdGlvbnMuCi0gICAgYXBpLT5mb2N1c19pbiA9IF9ld2tf
dmlld19zbWFydF9mb2N1c19pbjsKLSAgICBhcGktPmZvY3VzX291dCA9IF9ld2tfdmlld19zbWFy
dF9mb2N1c19vdXQ7Ci0gICAgYXBpLT5tb3VzZV93aGVlbCA9IF9ld2tfdmlld19zbWFydF9tb3Vz
ZV93aGVlbDsKLSAgICBhcGktPm1vdXNlX2Rvd24gPSBfZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93
bjsKLSAgICBhcGktPm1vdXNlX3VwID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX3VwOwotICAgIGFw
aS0+bW91c2VfbW92ZSA9IF9ld2tfdmlld19zbWFydF9tb3VzZV9tb3ZlOwotICAgIGFwaS0+a2V5
X2Rvd24gPSBfZXdrX3ZpZXdfc21hcnRfa2V5X2Rvd247Ci0gICAgYXBpLT5rZXlfdXAgPSBfZXdr
X3ZpZXdfc21hcnRfa2V5X3VwOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3Modm9pZCkKLXsKLSAgICBzdGF0
aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9O
QU1FX1ZFUlNJT04oIkV3a19WaWV3Iik7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0g
MDsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFydCkpIHsKLSAgICAgICAgZXdrX3ZpZXdf
c21hcnRfY2xhc3Nfc2V0KCZhcGkpOwotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3Nf
bmV3KCZhcGkuc2MpOwotICAgIH0KLQotICAgIHJldHVybiBzbWFydDsKLX0KLQotc3RhdGljIGlu
bGluZSBFd2tWaWV3KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21h
cnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmID0gMCwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVm
YXVsdEJlaGF2aW9yKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52
YXMsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydCwgMCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRleHQsIDApOwotCi0gICAgRXZh
c19PYmplY3QqIGV3a1ZpZXcgPSBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBzbWFydCk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a1ZpZXcsIDApOwotCi0gICAg
RVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0gICAgaWYgKCFzbWFydERhdGEp
IHsKLSAgICAgICAgZXZhc19vYmplY3RfZGVsKGV3a1ZpZXcpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7Ci0KLSAgICAvLyBEZWZhdWx0
IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhl
IHBhZ2VHcm91cFJlZiBpcyAwLAotICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBp
dCBoZXJlLgotICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNvbnRl
eHQsIHRvSW1wbChwYWdlR3JvdXBSZWYpLCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIHNtYXJ0RGF0
YS0+cHJpdjsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIENvbnN0cnVjdHMgYSBld2tfdmll
dyBFdmFzX09iamVjdCB3aXRoIFdLVHlwZSBwYXJhbWV0ZXJzLgotICovCi1Fd2tWaWV3KiBld2tf
dmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikK
LXsKLSAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENs
YXNzKCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tD
b250ZXh0OjpkZWZhdWx0Q29udGV4dCgpLCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAgICBy
ZXR1cm4gRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoKmFwaSk7CiB9CiAKIEV2YXNf
T2JqZWN0KiBld2tfdmlld19zbWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgRXdrX0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgRXdrVmlldyogZXdrVmlldyA9IGNyZWF0
ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250
ZXh0KSk7Ci0gICAgaWYgKCFld2tWaWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBld2tWaWV3LT52aWV3KCk7CisgICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3Qo
Y2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CiB9
CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywg
RXdrX0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGV3a192aWV3X3NtYXJ0X2FkZChj
YW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGV3a19vYmplY3RfY2FzdDxFd2tDb250
ZXh0Kj4oY29udGV4dCkpOworICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNh
bnZhcywgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CiB9CiAKIEV2YXNf
T2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQpAQCAtODI0LDggKzM2NSw3IEBAIEVp
bmFfQm9vbCBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
d2tfVG91Y2hfRXZlbnRfVHlwZSB0CiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocG9pbnRzLCBmYWxzZSk7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsKLSAgICBFV0tf
VklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Cisg
ICAgRVdLX1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIGltcGwsIGZhbHNlKTsKIAog
ICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KHR5
cGUsIHBvaW50cywgbW9kaWZpZXJzLCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+
dHJhbnNmb3JtVG9TY3JlZW4oKSwgZWNvcmVfdGltZV9nZXQoKSkpOwogCkBAIC05NDIsNiArNDgy
LDE3IEBAIHZvaWQgZXdrX3ZpZXdfZHJhd3NfcGFnZV9iYWNrZ3JvdW5kX3NldChFdmFzX09iamVj
dCAqZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZWQpCiAgICAgaW1wbC0+c2V0RHJhd3NCYWNrZ3Jv
dW5kKGVuYWJsZWQpOwogfQogCisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1BhZ2Vf
Q29udGVudHNfQ29udGV4dC4KK3R5cGVkZWYgc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRl
eHQgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dDsKKworLyoKKyAqIEBicmllZiBTdHJ1Y3R1cmUg
Y29udGFpbmluZyBwYWdlIGNvbnRlbnRzIGNvbnRleHQgdXNlZCBmb3IgZXdrX3ZpZXdfcGFnZV9j
b250ZW50c19nZXQoKSBBUEkuCisgKi8KK3N0cnVjdCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0
IHsKKyAgICBFd2tfUGFnZV9Db250ZW50c19UeXBlIHR5cGU7CisgICAgRXdrX1BhZ2VfQ29udGVu
dHNfQ2IgY2FsbGJhY2s7Cit9OworCiAvKioKICAqIEBpbnRlcm5hbAogICogQ2FsbGJhY2sgZnVu
Y3Rpb24gdXNlZCBmb3IgZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5MTJmZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpZm5kZWYgZXdrX3ZpZXdfcHJpdmF0ZV9oCi0jZGVmaW5lIGV3a192aWV3X3By
aXZhdGVfaAotCi0jaW5jbHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNs
dWRlIDxXZWJLaXQyL1dLQmFzZS5oPgotCi1Fd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhh
dmlvcik7Ci0KLSNlbmRpZiAvLyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmluZGV4IGVmZDZk
MzIuLmU0OGRmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9C
YWNraW5nU3RvcmVDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJv
L0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEJhY2tpbmdTdG9y
ZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0
ZUluZm8mCiAKICNpZiBQTEFURk9STShFRkwpCiAgICAgLy8gVXBkYXRlIGV3a192aWV3IHdpdGgg
bmV3IGJhY2tpbmdTdG9yZSBpbWFnZS4KLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJv
bUV2YXNPYmplY3QobV93ZWJQYWdlUHJveHktPnZpZXdXaWRnZXQoKSk7CisgICAgRXdrVmlldyog
dmlldyA9IHRvRXdrVmlldyhtX3dlYlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKICAgICB2aWV3
LT5zZXRJbWFnZURhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2JhY2tpbmdTdG9y
ZS0+Y2Fpcm9TdXJmYWNlKCkpLCBtX3NpemUpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCmlu
ZGV4IDI1OWU0MTIuLjJjYzRiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCkBAIC01Myw3ICs1Myw3IEBA
IHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25E
YXRhKFdLQ29udGV4dFJlZiwgV0tQYWdlCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxF
d2tOYXZpZ2F0aW9uRGF0YT4gbmF2aWdhdGlvbkRhdGFFd2sgPSBFd2tOYXZpZ2F0aW9uRGF0YTo6
Y3JlYXRlKG5hdmlnYXRpb25EYXRhKTsKLSAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmlnYXRlKEV3
a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIG5hdmlnYXRpb25EYXRhRXdrLmdldCgp
LCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmln
YXRlKEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSwgbmF2aWdhdGlvbkRhdGFFd2suZ2V0KCks
IGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xp
ZW50RWZsOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYg
cGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFt
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBDb250
ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJl
ZiwgV0tQYWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNv
dXJjZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRl
c3RpbmF0aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fY2xpZW50UmVkaXJlY3QoRXdr
Vmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5h
dGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlzdG9yeUNs
aWVudC0+bV9jbGllbnRSZWRpcmVjdChFd2tWaWV3Ojp0b0V2YXNPYmplY3QocGFnZSksIHNvdXJj
ZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRh
dGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtU2VydmVy
UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJM
LCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlk
UGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHAKICAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CiAgICAgV0tFaW5hU2hh
cmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKIAotICAgIGhp
c3RvcnlDbGllbnQtPm1fc2VydmVyUmVkaXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01h
cChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNs
aWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC0+bV9zZXJ2ZXJSZWRpcmVjdChF
d2tWaWV3Ojp0b0V2YXNPYmplY3QocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25V
UkxTdHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRI
aXN0b3J5Q2xpZW50RWZsOjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1Bh
Z2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBDb250ZXh0SGlz
dG9yeUNsaWVudEVmbDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdLQ29udGV4dFJlZiwgV0tQYWdl
UmVmIHBhZ2UKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdGl0bGVTdHJpbmcodGl0bGUpOwogICAg
IFdLRWluYVNoYXJlZFN0cmluZyBzdHJpbmdVUkwoVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQt
Pm1fdGl0bGVVcGRhdGVkKEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxl
U3RyaW5nLCBzdHJpbmdVUkwsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3Rv
cnlDbGllbnQtPm1fdGl0bGVVcGRhdGVkKEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSwgdGl0
bGVTdHJpbmcsIHN0cmluZ1VSTCwgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZv
aWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OnBvcHVsYXRlVmlzaXRlZExpbmtzKFdLQ29udGV4
dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKaW5kZXggNTY4ZTRhZS4uMjZiN2U0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKQEAgLTEx
OCw3ICsxMTgsNyBAQCBib29sIFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCiB2b2lk
IFBhZ2VDbGllbnRCYXNlOjpwcm9jZXNzRGlkQ3Jhc2goKQogewogICAgIC8vIENoZWNrIGlmIGxv
YWRpbmcgd2FzIG9uZ29pbmcsIHdoZW4gd2ViIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBkb3VibGUg
bG9hZFByb2dyZXNzID0gZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQobV92aWV3LT52aWV3KCkp
OworICAgIGRvdWJsZSBsb2FkUHJvZ3Jlc3MgPSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldCht
X3ZpZXctPmV2YXNPYmplY3QoKSk7CiAgICAgaWYgKGxvYWRQcm9ncmVzcyA+PSAwICYmIGxvYWRQ
cm9ncmVzcyA8IDEpIHsKICAgICAgICAgbG9hZFByb2dyZXNzID0gMTsKICAgICAgICAgbV92aWV3
LT5zbWFydENhbGxiYWNrPExvYWRQcm9ncmVzcz4oKS5jYWxsKCZsb2FkUHJvZ3Jlc3MpOwpAQCAt
MTM0LDcgKzEzNCw3IEBAIHZvaWQgUGFnZUNsaWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCgpCiAg
ICAgICAgIFdBUk4oIldBUk5JTkc6IFRoZSB3ZWIgcHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNo
IG9uICclcycuXG4iLCB1cmwuZGF0YSgpKTsKIAogICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9y
IHBhZ2UKLSAgICAgICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZChtX3ZpZXctPnZpZXcoKSwg
IlRoZSB3ZWIgcHJvY2VzcyBoYXMgY3Jhc2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKKyAgICAgICAg
ZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZChtX3ZpZXctPmV2YXNPYmplY3QoKSwgIlRoZSB3ZWIg
cHJvY2VzcyBoYXMgY3Jhc2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5k
ZXggNTk5YmUzNC4uYjg4MTY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFBhZ2VM
b2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tG
b3J3YXJkTGlzdEl0ZQogICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNs
aWVudEluZm8pLT52aWV3KCk7CiAgICAgQVNTRVJUKHZpZXcpOwogCi0gICAgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZp
ZXcoKSk7CisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19m
b3J3YXJkX2xpc3RfZ2V0KHZpZXctPmV2YXNPYmplY3QoKSk7CiAgICAgQVNTRVJUKGxpc3QpOwog
ICAgIGxpc3QtPnVwZGF0ZShhZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAppbmRleCAzODE0ZWM3
Li4yNDIyY2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VV
SUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlD
bGllbnRFZmwuY3BwCkBAIC05NSwxNyArOTUsMTcgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OmNs
b3NlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHZvaWQgUGFnZVVJQ2xpZW50
RWZsOjp0YWtlRm9jdXMoV0tQYWdlUmVmLCBXS0ZvY3VzRGlyZWN0aW9uLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewogICAgIC8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgYSBwYXJ0aWFsIGltcGxl
bWVudGF0aW9uLgotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNsaWVudEVmbChj
bGllbnRJbmZvKS0+bV92aWV3LT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1
c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+ZXZhc09iamVjdCgp
LCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpmb2N1cyhXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnZpZXcoKSwgdHJ1ZSk7CisgICAgZXZh
c19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXct
PmV2YXNPYmplY3QoKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjp1bmZvY3Vz
KFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9m
b2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBm
YWxzZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT5tX3ZpZXctPmV2YXNPYmplY3QoKSwgZmFsc2UpOwogfQogCiB2b2lkIFBhZ2VVSUNs
aWVudEVmbDo6cnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgYWxlcnRU
ZXh0LCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eUVmbC5jcHAKaW5kZXggMDA1MDI4My4uZTZlYjU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwu
Y3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50
ZXJGdWxsU2NyZWVuKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgd2lsbEVudGVyRnVsbFNjcmVl
bigpOwotICAgIEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNj
cmVlbigpOworICAgIHRvRXdrVmlldyhtX3dlYlZpZXcpLT5lbnRlckZ1bGxTY3JlZW4oKTsKICAg
ICBkaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFdlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsU2NyZWVuKCkKIAogCiAgICAgd2lsbEV4aXRG
dWxsU2NyZWVuKCk7Ci0gICAgRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZXhp
dEZ1bGxTY3JlZW4oKTsKKyAgICB0b0V3a1ZpZXcobV93ZWJWaWV3KS0+ZXhpdEZ1bGxTY3JlZW4o
KTsKICAgICBkaWRFeGl0RnVsbFNjcmVlbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDg1M2Q0N2Uu
LmZhM2ZhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5z
cGVjdG9yUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
SW5zcGVjdG9yUHJveHlFZmwuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJFd2tW
aWV3LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgogI2luY2x1ZGUgImV3a192
aWV3LmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
RWZsSW5zcGVjdG9yVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk0LDE3ICs5NCwxOCBAQCBX
ZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBh
Z2UoKQogICAgIC8vIEdyYWNlZnVsbHkgZmFsbCBiYWNrIHRvIHNvZnR3YXJlIGlmIGV2YXNfZ2wg
ZW5naW5lIGlzIG5vdCBhdmFpbGFibGUuCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICNl
bmRpZgotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAs
IGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwgMCk7CisgICAgbV9pbnNw
ZWN0b3JXaW5kb3cgPSBlY29yZV9ldmFzX25ldygwLCAwLCAwLCBpbml0aWFsV2luZG93V2lkdGgs
IGluaXRpYWxXaW5kb3dIZWlnaHQsIDApOwogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdS
ZWYuCi0gICAgRXdrVmlldyogZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNf
Z2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQo
KSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3Ip
OwotICAgIGlmICghZXdrVmlldykKKyAgICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHRvQVBJ
KHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpOworICAgIG1faW5zcGVjdG9yVmlldyA9IEV3
a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cp
LCBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29udGV4
dDo6ZGVmYXVsdENvbnRleHQoKSwgdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3
OjpMZWdhY3lCZWhhdmlvcik7CisgICAgaWYgKCFtX2luc3BlY3RvclZpZXcpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrVmlldy0+dmlldygpOwotCisgICAg
RXdrVmlldyogZXdrVmlldyA9IHRvRXdrVmlldyhtX2luc3BlY3RvclZpZXcpOworICAgIEFTU0VS
VChld2tWaWV3KTsKICAgICBld2tWaWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9k
ZWZhdWx0LmVkaiIpOwogCiAgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1ZpZXctPnNl
dHRpbmdzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBh
Z2VQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94
eUVmbC5jcHAKaW5kZXggYTMzMjcyNC4uZGU3MGNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogRXZhc19PYmplY3QqIFdlYlBhZ2VQcm94eTo6dmlld1dpZGdldCgp
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50
KS0+dmlldygpLT52aWV3KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNl
Kj4obV9wYWdlQ2xpZW50KS0+dmlldygpLT5ldmFzT2JqZWN0KCk7CiB9CiAKIFN0cmluZyBXZWJQ
YWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgLyphcHBsaWNhdGlvbk5h
bWVGb3JVc2VyQWdlbnQqLykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186638</attachid>
            <date>2013-02-05 09:08:06 -0800</date>
            <delta_ts>2013-02-05 16:34:01 -0800</delta_ts>
            <desc>patch v6</desc>
            <filename>bug108062_v6</filename>
            <type>text/plain</type>
            <size>73829</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDE5MWYzZGFhZDc2NDRlZWU5YzA5OWI0NjUzZWFjMjQ1NzU3MGIyZjUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGM1NmJmNzUuLjdmYzk5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMTMt
MDItMDUgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV0syXSBFbmNhcHN1bGF0ZSBFd2sgVmlldyBldmFzIHNtYXJ0IG9i
amVjdCBjb2RlIGluc2lkZSBFd2tWaWV3IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgRXdrIFZpZXcgaW1wbGVtZW50YXRpb24gaXMgZW5j
YXBzdWxhdGVkIHdpdGhpbiBFd2tWaWV3IGNsYXNzLgorICAgICAgICBCZXNpZGVzIG11bHRpcGxl
IHJlZmFjdG9yaW5nIG9mIEV3ayBWaWV3IGV2YXMgc21hcnQgb2JqZWN0IGNvZGUgd2FzIG1hZGUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHA6CisgICAgICAgIChj
cmVhdGVXS1ZpZXcpOiAKKworICAgICAgICAgICAgQXV4IGZ1bmN0aW9uIHRvIHNoYXJlIFdLVmll
dyBjcmVhdGlvbiBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwOgorICAgICAgICAoc21hcnREYXRhQ2hhbmdlZCk6CisgICAgICAgIChkZWZh
dWx0U21hcnRDbGFzc0luc3RhbmNlKToKKyAgICAgICAgKHRvU21hcnREYXRhKToKKyAgICAgICAg
KEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKToKKyAgICAgICAgKEV3a1ZpZXc6OnRv
RXZhc09iamVjdCk6CisgICAgICAgIChFd2tWaWV3OjpzbWFydERhdGEpOgorCisgICAgICAgICAg
ICBSZW5hbWVkIGFuZCBtb3ZlZCBoZXJlIGZyb20gZXdrX3ZpZXcuCisKKyAgICAgICAgKEV3a1Zp
ZXdFdmVudEhhbmRsZXIpOgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcjo6c3Vic2NyaWJl
KToKKyAgICAgICAgKEV3a1ZpZXdFdmVudEhhbmRsZXI6OnVuc3Vic2NyaWJlKToKKyAgICAgICAg
KDo6aGFuZGxlRXZlbnQpOgorCisgICAgICAgICAgICBBZGRlZCBhIG5ldyB0ZW1wbGF0ZSBjbGFz
cyB0byBlbmNhcHN1bGF0ZSBFd2sgVmlldyBFdmFzIGV2ZW50cyBoYW5kbGluZy4KKworICAgICAg
ICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisKKyAg
ICAgICAgICAgIENvbnN0cnVjdG9yIGFuZCBkZXNjdHJ1Y3RvciBhcmUgcHJpdmF0ZS4KKworICAg
ICAgICAoRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdCk6CisKKyAgICAgICAgICAgIEFkZGVkIGZh
Y3RvcnkgZnVuY3Rpb24gZm9yIGV3ayB2aWV3IGV2YXMgb2JqZWN0cyBjcmVhdGlvbi4KKworICAg
ICAgICAoRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdEFkZCk6CisgICAgICAgIChFd2tWaWV3Ojpo
YW5kbGVFdmFzT2JqZWN0RGVsZXRlKToKKyAgICAgICAgKEV3a1ZpZXc6OmhhbmRsZUV2YXNPYmpl
Y3RSZXNpemUpOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdE1vdmUpOgorICAg
ICAgICAoRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdENhbGN1bGF0ZSk6CisgICAgICAgIChFd2tW
aWV3OjpoYW5kbGVFdmFzT2JqZWN0U2hvdyk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFdmFz
T2JqZWN0SGlkZSk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFdmFzT2JqZWN0Q29sb3JTZXQp
OgorCisgICAgICAgICAgICBFdmFzX1NtYXJ0X0NsYXNzIGludGVyZmFjZSBjYWxsYmFja3MgbW92
ZWQgaW50byB0aGUgRXdrVmlldyBjbGFzcy4KKworICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdr
Vmlld0ZvY3VzSW4pOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdrVmlld0ZvY3VzT3V0KToK
KyAgICAgICAgKEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZVdoZWVsKToKKyAgICAgICAgKEV3
a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZURvd24pOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxl
RXdrVmlld01vdXNlVXApOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdrVmlld01vdXNlTW92
ZSk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFd2tWaWV3S2V5RG93bik6CisgICAgICAgIChF
d2tWaWV3OjpoYW5kbGVFd2tWaWV3S2V5VXApOgorCisgICAgICAgICAgICBFd2tfVmlld19TbWFy
dF9DbGFzcyBpbnRlcmZhY2UgY2FsbGJhY2sgbW92ZWQgaW50byB0aGUgRXdrVmlldyBjbGFzcy4K
KworICAgICAgICAoRXdrVmlldzo6aGFuZGxlVG91Y2hEb3duKToKKyAgICAgICAgKEV3a1ZpZXc6
OmhhbmRsZVRvdWNoVXApOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlVG91Y2hNb3ZlKToKKwor
ICAgICAgICAgICAgUmVuYW1lZC4KKworICAgICAgICAodG9Fd2tWaWV3KTogCisKKyAgICAgICAg
ICAgIEF1eCBmdW5jdGlvbiB0byBnZXQgdGhlIEV3a1ZpZXcgaW5zdGFuY2UgZnJvbWV2YXMgb2Jq
ZWN0LgorCisgICAgICAgIChpc1ZpZXdFdmFzT2JqZWN0KToKKworICAgICAgICAgICAgQXV4IGZ1
bmN0aW9uIHRvIGNoZWNrIHRoYXQgZ2l2ZW4gZXZhcyBvYmplY3QgaXMgZXdrIHZpZXcuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChFd2tWaWV3Ojpl
dmFzT2JqZWN0KToKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldCk6Cisg
ICAgICAgIChld2tfdmlld19zbWFydF9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfYWRkX3dpdGhf
Y29udGV4dCk6CisgICAgICAgIChld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KToKKyAgICAgICAg
KEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQpOgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBSZW1vdmVkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hv
dCk6CisgICAgICAgICogVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9u
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJm
b3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlzdG9yeUNsaWVu
dEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4
dEhpc3RvcnlDbGllbnRFZmw6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRCYXNlOjpwcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUxv
YWRDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbDo6ZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VVSUNs
aWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dGFrZUZvY3Vz
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpmb2N1cyk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dW5mb2N1cyk6CisgICAgICAgICogVUlQcm9jZXNzL2Vm
bC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6dmlld1dpZGdldCk6CisKKyAgICAgICAgICAgICBVcGRhdGVkIGR1ZSB0
byBjaGFuZ2VzIGluIEV3a1ZpZXcgaW50ZXJmYWNlLgorCiAyMDEzLTAyLTA0ICBHd2FuZyBZb29u
IEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29yZGluYXRlZCBH
cmFwaGljcyA6IGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtIGRvZXMgbm90IGRvIGFueXRo
aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmlu
ZGV4IDljMWQzMWQuLjY3YzkzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKQEAgLTIyLDI3ICsyMiwyOSBAQAogCiAjaW5jbHVkZSAiRXdrVmll
dy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0ltYWdlQ2Fpcm8uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYpCitzdGF0aWMgaW5saW5lIFdLVmlld1JlZiBjcmVhdGVXS1Zp
ZXcoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiB7Ci0gICAgRXdr
VmlldyogZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFn
ZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYgKCFld2tWaWV3KQor
ICAgIFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6
OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7CisgICAg
RXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZh
cywgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CisgICAgaWYgKCFldmFzT2JqZWN0
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+
KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdL
Vmlld1JlZj4oV0tSZXRhaW4odG9Fd2tWaWV3KGV2YXNPYmplY3QpLT53a1ZpZXcoKSkpOwogfQog
Ci1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK1dLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBl
d2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmll
dzo6RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBpZiAoIWV3a1ZpZXcpCi0gICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBS
ZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKK30KIAotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXS1ZpZXdSZWY+KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7CitXS1ZpZXdSZWYgV0tW
aWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK3sKKyAgICByZXR1cm4gY3JlYXRl
V0tWaWV3KGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0
QmVoYXZpb3IpOwogfQogCiB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYp
CkBAIC03Nyw2ICs3OSw2IEBAIEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmll
d1JlZiB2aWV3UmVmKQogCiBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1Jl
ZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09i
amVjdCh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgRXdrVmlldyogZXdrVmll
dyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CiAgICAgcmV0dXJu
IFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdl
dCgpLCAwIC8qIG9wdGlvbnMgKi8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmNwcAppbmRleCAwNDY2OTRkNy4uOGVhYzkzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTI3LDYgKzI3LDkgQEAKICNp
bmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiRm9ybUNsaWVudEVmbC5oIgogI2lu
Y2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJv
YXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
TmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5j
bHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudExlZ2Fj
eUltcGwuaCIKQEAgLTU3LDcgKzYwLDYgQEAKICNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2lu
X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a192aWV3LmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNp
bmNsdWRlIDxFY29yZV9YLmg+CkBAIC02Niw2ICs2OCw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZUNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGVy
Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShWSUJSQVRJT04p
CiAjaW5jbHVkZSAiVmlicmF0aW9uQ2xpZW50RWZsLmgiCkBAIC04Myw0MyArODcsMTUxIEBAIHVz
aW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCitzdGF0aWMgY29uc3QgY2hhciBzbWFydENsYXNz
TmFtZVtdID0gIkVXSzJfVmlldyI7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDdXJzb3JTaXpl
ID0gMTY7CiAKLXR5cGVkZWYgSGFzaE1hcDxXS1BhZ2VSZWYsIEV2YXNfT2JqZWN0Kj4gUGFnZVZp
ZXdNYXA7CisvLyBBdXhpbGlhcnkgZnVuY3Rpb25zLgogCi1zdGF0aWMgaW5saW5lIFBhZ2VWaWV3
TWFwJiBwYWdlVmlld01hcCgpCitzdGF0aWMgaW5saW5lIHZvaWQgc21hcnREYXRhQ2hhbmdlZChF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChQYWdlVmlld01hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBBU1NFUlQoc21h
cnREYXRhKTsKKworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuYW55KQorICAgICAgICByZXR1
cm47CisKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gdHJ1ZTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YS0+c2VsZik7Cit9CisKK3N0YXRpYyBFdmFzX1NtYXJ0
KiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21h
cnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oc21h
cnRDbGFzc05hbWUpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7CisKKyAgICBp
ZiAoIXNtYXJ0KSB7CisgICAgICAgIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKGFw
aSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7CisgICAg
fQorCisgICAgcmV0dXJuIHNtYXJ0OworfQorCitzdGF0aWMgaW5saW5lIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHRvU21hcnREYXRhKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEFTU0VS
VChldmFzT2JqZWN0ICYmIGlzVmlld0V2YXNPYmplY3QoZXZhc09iamVjdCkpOworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9k
YXRhX2dldChldmFzT2JqZWN0KSk7CiB9CiAKLXZvaWQgRXdrVmlldzo6YWRkVG9QYWdlVmlld01h
cChFd2tWaWV3KiB2aWV3KQorLy8gRXdrVmlld0V2ZW50SGFuZGxlciBpbXBsZW1lbnRhdGlvbi4K
KwordGVtcGxhdGUgPEV2YXNfQ2FsbGJhY2tfVHlwZSBFdmVudFR5cGU+CitjbGFzcyBFd2tWaWV3
RXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzdWJzY3JpYmUoRXZhc19P
YmplY3QqIGV2YXNPYmplY3QpCisgICAgeworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxs
YmFja19hZGQoZXZhc09iamVjdCwgRXZlbnRUeXBlLCBoYW5kbGVFdmVudCwgdG9TbWFydERhdGEo
ZXZhc09iamVjdCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVuc3Vic2NyaWJlKEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0KQorICAgIHsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2Fs
bGJhY2tfZGVsKGV2YXNPYmplY3QsIEV2ZW50VHlwZSwgaGFuZGxlRXZlbnQpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVj
dCosIHZvaWQqIGV2ZW50SW5mbyk7Cit9OworCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZl
bnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46OmhhbmRsZUV2ZW50KHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBQYWdlVmll
d01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHBhZ2VWaWV3TWFwKCkuYWRkKHZpZXctPndrUGFnZSgp
LCB2aWV3LT52aWV3KCkpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIGlmIChzbWFydERhdGEtPmFwaS0+bW91
c2VfZG93bikKKyAgICAgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX2Rvd24oc21hcnREYXRhLCBz
dGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pKTsKIH0KIAotdm9p
ZCBFd2tWaWV3OjpyZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldykKK3RlbXBsYXRl
IDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9VUD46Omhh
bmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5m
bykKIHsKLSAgICBBU1NFUlQocGFnZVZpZXdNYXAoKS5jb250YWlucyh2aWV3LT53a1BhZ2UoKSkp
OwotICAgIHBhZ2VWaWV3TWFwKCkucmVtb3ZlKHZpZXctPndrUGFnZSgpKTsKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV91cCkKKyAgICAgICAgc21h
cnREYXRhLT5hcGktPm1vdXNlX3VwKHNtYXJ0RGF0YSwgc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9N
b3VzZV9VcCo+KGV2ZW50SW5mbykpOwogfQogCi1jb25zdCBFdmFzX09iamVjdCogRXdrVmlldzo6
dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYgcGFnZSkKK3RlbXBsYXRlIDw+Cit2
b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6aGFuZGxl
RXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQog
ewotICAgIEFTU0VSVChwYWdlKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0
RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKQorICAgICAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfbW92
ZShzbWFydERhdGEsIHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50SW5m
bykpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FM
TEJBQ0tfRk9DVVNfSU4+OjpoYW5kbGVFdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+
YXBpLT5mb2N1c19pbikKKyAgICAgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0
YSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxM
QkFDS19GT0NVU19PVVQ+OjpoYW5kbGVFdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+
YXBpLT5mb2N1c19vdXQpCisgICAgICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQoc21hcnRE
YXRhKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NB
TExCQUNLX01PVVNFX1dIRUVMPjo6aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNf
T2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBp
ZiAoc21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKQorICAgICAgICBzbWFydERhdGEtPmFwaS0+
bW91c2Vfd2hlZWwoc21hcnREYXRhLCBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVs
Kj4oZXZlbnRJbmZvKSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRs
ZXI8RVZBU19DQUxMQkFDS19LRVlfRE9XTj46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMq
LCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7
CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5rZXlfZG93bikKKyAgICAgICAgc21hcnREYXRhLT5h
cGktPmtleV9kb3duKHNtYXJ0RGF0YSwgc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+
KGV2ZW50SW5mbykpOworfQogCi0gICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOwor
dGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9V
UD46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2
ZW50SW5mbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBp
LT5rZXlfdXApCisgICAgICAgIHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXAoc21hcnREYXRhLCBzdGF0
aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbykpOworfQorCit0ZW1wbGF0ZSA8
Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfU0hPVz46OmhhbmRsZUV2
ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVE
aWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKIH0KIAotRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBX
ZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9l
dmFzT2JqZWN0KHZpZXcpCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVW
QVNfQ0FMTEJBQ0tfSElERT46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKworICAgIC8vIFdlIG5lZWQg
dG8gcGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUuIHZpZXdTdGF0ZURpZENoYW5nZSgpIGl0c2VsZiBp
cyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc2V0dGluZyB0aGUgdmlzaWJpbGl0eSB0byBWaXNp
YmxlIG9yIEhpZGRlbgorICAgIC8vIGRlcGVuZGluZyBvbiB3aGF0IFdlYlBhZ2VQcm94eTo6aXNW
aWV3VmlzaWJsZSgpIHJldHVybnMsIHRoaXMgc2ltcGx5IHRyaWdnZXJzIHRoZSBwcm9jZXNzLgor
ICAgIHRvRXdrVmlldyhzbWFydERhdGEpLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQ
YWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOworfQorCisvLyBFd2tWaWV3IGltcGxlbWVudGF0aW9u
LgorCitFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmlld0JlaGF2
aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2Nv
bnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLCBt
X3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3BhZ2VDbGllbnQo
YmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBsOjpjcmVh
dGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV93
ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KHRvSW1wbChtX2NvbnRleHQtPndrQ29udGV4dCgp
KSwgbV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAsIHZpZXcpKSkKKyAgICAsIG1fd2ViVmll
dyhhZG9wdFJlZihuZXcgV2ViVmlldyh0b0ltcGwobV9jb250ZXh0LT53a0NvbnRleHQoKSksIG1f
cGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cCksIGV2YXNPYmplY3QpKSkKICAgICAs
IG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAs
IG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAg
ICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKQEAgLTE2
Niw5ICsyNzgsNyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdlYlBhZ2VHcm91cAogICAgIEV3a0Zhdmljb25EYXRh
YmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKICAgICBB
U1NFUlQoaWNvbkRhdGFiYXNlKTsKIAotICAgIGljb25EYXRhYmFzZS0+d2F0Y2hDaGFuZ2VzKElj
b25DaGFuZ2VDYWxsYmFja0RhdGEoRXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZCwgdGhpcykpOwot
Ci0gICAgRXdrVmlldzo6YWRkVG9QYWdlVmlld01hcCh0aGlzKTsKKyAgICBpY29uRGF0YWJhc2Ut
PndhdGNoQ2hhbmdlcyhJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKEV3a1ZpZXc6OmhhbmRsZUZhdmlj
b25DaGFuZ2VkLCB0aGlzKSk7CiB9CiAKIEV3a1ZpZXc6On5Fd2tWaWV3KCkKQEAgLTE3NywyMyAr
Mjg3LDc4IEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGlj
b25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGlj
b25EYXRhYmFzZSk7CiAKLSAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3a1ZpZXc6
Om9uRmF2aWNvbkNoYW5nZWQpOworICAgIGljb25EYXRhYmFzZS0+dW53YXRjaENoYW5nZXMoRXdr
Vmlldzo6aGFuZGxlRmF2aWNvbkNoYW5nZWQpOworfQogCi0gICAgRXdrVmlldzo6cmVtb3ZlRnJv
bVBhZ2VWaWV3TWFwKHRoaXMpOworRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmpl
Y3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhh
dmlvcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKKworICAgIEV2YXNfT2JqZWN0
KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0LCAwKTsKKworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOwor
ICAgIGlmICghc21hcnREYXRhKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQVNTRVJUKCFzbWFydERhdGEtPnBy
aXYpOworCisgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250
ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKKyAgICAvLyBzbyB3ZSBk
byBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KKyAgICBzbWFydERhdGEtPnByaXYgPSBuZXcg
RXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAg
ICByZXR1cm4gZXZhc09iamVjdDsKIH0KIAotRXdrX1ZpZXdfU21hcnRfRGF0YSogRXdrVmlldzo6
c21hcnREYXRhKCkgY29uc3QKK0V2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0
KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKIHsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFf
Z2V0KG1fZXZhc09iamVjdCkpOworICAgIHJldHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywg
ZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2
aW9yKTsKIH0KIAotRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19P
YmplY3QqIHZpZXcpCitib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19W
aWV3X1NtYXJ0X0NsYXNzJiBhcGkpCiB7Ci0gICAgQVNTRVJUKHZpZXcpOwotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNf
b2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KHZpZXcpKTsKLSAgICBBU1NFUlQoc2QpOwotICAgIEFTU0VS
VChzZC0+cHJpdik7Ci0gICAgcmV0dXJuIHNkLT5wcml2OworICAgIGlmIChhcGkudmVyc2lvbiAh
PSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQo
IkV3a19WaWV3X1NtYXJ0X0NsYXNzICVwIGlzIHZlcnNpb24gJWx1IHdoaWxlICVsdSB3YXMgZXhw
ZWN0ZWQuIiwKKyAgICAgICAgICAgICZhcGksIGFwaS52ZXJzaW9uLCBFV0tfVklFV19TTUFSVF9D
TEFTU19WRVJTSU9OKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
cGFyZW50U21hcnRDbGFzcy5hZGQpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRf
c21hcnRfc2V0KCZwYXJlbnRTbWFydENsYXNzKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Ns
aXBwZWRfc21hcnRfc2V0KCZhcGkuc2MpOworCisgICAgLy8gU2V0IEV2YXNfU21hcnRfQ2xhc3Mg
Y2FsbGJhY2tzLgorICAgIGFwaS5zYy5hZGQgPSBoYW5kbGVFdmFzT2JqZWN0QWRkOworICAgIGFw
aS5zYy5kZWwgPSBoYW5kbGVFdmFzT2JqZWN0RGVsZXRlOworICAgIGFwaS5zYy5tb3ZlID0gaGFu
ZGxlRXZhc09iamVjdE1vdmU7CisgICAgYXBpLnNjLnJlc2l6ZSA9IGhhbmRsZUV2YXNPYmplY3RS
ZXNpemU7CisgICAgYXBpLnNjLnNob3cgPSBoYW5kbGVFdmFzT2JqZWN0U2hvdzsKKyAgICBhcGku
c2MuaGlkZSA9IGhhbmRsZUV2YXNPYmplY3RIaWRlOworICAgIGFwaS5zYy5jb2xvcl9zZXQgPSBo
YW5kbGVFdmFzT2JqZWN0Q29sb3JTZXQ7CisgICAgYXBpLnNjLmNhbGN1bGF0ZSA9IGhhbmRsZUV2
YXNPYmplY3RDYWxjdWxhdGU7CisgICAgYXBpLnNjLmRhdGEgPSBzbWFydENsYXNzTmFtZTsgLy8g
SXQgaXMgdXNlZCBmb3IgdHlwZSBjaGVja2luZy4KKworICAgIC8vIFNldCBFd2tfVmlld19TbWFy
dF9DbGFzcyBjYWxsYmFja3MuCisgICAgYXBpLmZvY3VzX2luID0gaGFuZGxlRXdrVmlld0ZvY3Vz
SW47CisgICAgYXBpLmZvY3VzX291dCA9IGhhbmRsZUV3a1ZpZXdGb2N1c091dDsKKyAgICBhcGku
bW91c2Vfd2hlZWwgPSBoYW5kbGVFd2tWaWV3TW91c2VXaGVlbDsKKyAgICBhcGkubW91c2VfZG93
biA9IGhhbmRsZUV3a1ZpZXdNb3VzZURvd247CisgICAgYXBpLm1vdXNlX3VwID0gaGFuZGxlRXdr
Vmlld01vdXNlVXA7CisgICAgYXBpLm1vdXNlX21vdmUgPSBoYW5kbGVFd2tWaWV3TW91c2VNb3Zl
OworICAgIGFwaS5rZXlfZG93biA9IGhhbmRsZUV3a1ZpZXdLZXlEb3duOworICAgIGFwaS5rZXlf
dXAgPSBoYW5kbGVFd2tWaWV3S2V5VXA7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3Qg
RXZhc19PYmplY3QqIEV3a1ZpZXc6OnRvRXZhc09iamVjdChXS1BhZ2VSZWYgcGFnZSkKK3sKKyAg
ICBBU1NFUlQocGFnZSk7CisgICAgcmV0dXJuIHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpOwog
fQogCiBXS1BhZ2VSZWYgRXdrVmlldzo6d2tQYWdlKCkgY29uc3QKQEAgLTM1Nyw2ICs1MjIsMTEg
QEAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBFd2tWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUoKQogfQogI2VuZGlmCiAKK2lubGluZSBFd2tfVmlld19TbWFydF9EYXRhKiBFd2tWaWV3
OjpzbWFydERhdGEoKSBjb25zdAoreworICAgIHJldHVybiB0b1NtYXJ0RGF0YShtX2V2YXNPYmpl
Y3QpOworfQorCiB2b2lkIEV3a1ZpZXc6OmRpc3BsYXlUaW1lckZpcmVkKFRpbWVyPEV3a1ZpZXc+
KikKIHsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC01NjAsMTQgKzczMCwxMyBA
QCB2b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCiAKICAg
ICBtX21vdXNlRXZlbnRzRW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgaWYgKGVuYWJsZWQpIHsKLSAg
ICAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICAgICAgZXZh
c19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19N
T1VTRV9ET1dOLCBvbk1vdXNlRG93biwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9j
YWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX1VQLCBvbk1vdXNl
VXAsIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09i
amVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSwgc2QpOworICAgICAg
ICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTj46OnN1YnNjcmli
ZShtX2V2YXNPYmplY3QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJB
Q0tfTU9VU0VfVVA+OjpzdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01PVkU+OjpzdWJzY3JpYmUobV9ldmFzT2Jq
ZWN0KTsKICAgICB9IGVsc2UgewotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19k
ZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uTW91c2VEb3duKTsK
LSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZB
U19DQUxMQkFDS19NT1VTRV9VUCwgb25Nb3VzZVVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBv
bk1vdXNlTW92ZSk7CisgICAgICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19N
T1VTRV9ET1dOPjo6dW5zdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX1VQPjo6dW5zdWJzY3JpYmUobV9ldmFzT2Jq
ZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01P
VkU+Ojp1bnN1YnNjcmliZShtX2V2YXNPYmplY3QpOwogICAgIH0KIH0KIApAQCAtNTg2LDE5ICs3
NTUsMTkgQEAgdm9pZCBFd2tWaWV3OjpzZXRUb3VjaEV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVk
KQogICAgICAgICAvLyBzdXBwb3J0cyB0aGUgdG91Y2ggZXZlbnRzLgogICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3Nzg1IGZvciBkZXRhaWxz
LgogICAgICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExC
QUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9u
VG91Y2hVcCwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9l
dmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uVG91Y2hNb3ZlLCBzZCk7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNf
Q0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3VjaERvd24sIHNkKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9V
UCwgb25Ub3VjaFVwLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Fk
ZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgb25Ub3VjaE1vdmUsIHNk
KTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwg
RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBoYW5kbGVUb3VjaERvd24sIHNkKTsKKyAgICAgICAg
ZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFD
S19NT1VTRV9VUCwgaGFuZGxlVG91Y2hVcCwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVu
dF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIGhh
bmRsZVRvdWNoTW92ZSwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19h
ZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX0RPV04sIGhhbmRsZVRvdWNoRG93
biwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2Jq
ZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX1VQLCBoYW5kbGVUb3VjaFVwLCBzZCk7CisgICAgICAg
IGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJB
Q0tfTVVMVElfTU9WRSwgaGFuZGxlVG91Y2hNb3ZlLCBzZCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxM
QkFDS19NT1VTRV9ET1dOLCBvblRvdWNoRG93bik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50
X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uVG91
Y2hVcCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmpl
Y3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Ub3VjaE1vdmUpOwotICAgICAgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01V
TFRJX0RPV04sIG9uVG91Y2hEb3duKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJh
Y2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9VUCwgb25Ub3VjaFVwKTsK
LSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZB
U19DQUxMQkFDS19NVUxUSV9NT1ZFLCBvblRvdWNoTW92ZSk7CisgICAgICAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9X
TiwgaGFuZGxlVG91Y2hEb3duKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tf
ZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgaGFuZGxlVG91Y2hVcCk7
CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVW
QVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgaGFuZGxlVG91Y2hNb3ZlKTsKKyAgICAgICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxU
SV9ET1dOLCBoYW5kbGVUb3VjaERvd24pOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxs
YmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX1VQLCBoYW5kbGVUb3Vj
aFVwKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVj
dCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBoYW5kbGVUb3VjaE1vdmUpOwogICAgIH0KIH0K
ICNlbmRpZgpAQCAtOTA5LDcgKzEwNzgsNyBAQCBXS1BhZ2VSZWYgRXdrVmlldzo6Y3JlYXRlTmV3
UGFnZShQYXNzUmVmUHRyPEV3a1VybFJlcXVlc3Q+IHJlcXVlc3QsIFdLRGljdGlvbmFyeQogICAg
IGlmICghbmV3RXdrVmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBFd2tWaWV3KiBuZXdW
aWV3SW1wbCA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG5ld0V3a1ZpZXcpOworICAgIEV3a1Zp
ZXcqIG5ld1ZpZXdJbXBsID0gdG9Fd2tWaWV3KG5ld0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdW
aWV3SW1wbCk7CiAKICAgICBuZXdWaWV3SW1wbC0+bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRv
d0ZlYXR1cmVzOwpAQCAtOTI4LDMxICsxMDk3LDIxMiBAQCB2b2lkIEV3a1ZpZXc6OmNsb3NlKCkK
ICAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwogfQogCi12b2lkIEV3a1ZpZXc6Om9uTW91
c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykK
K3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdEFkZChFdmFzX09iamVjdCogZXZhc09iamVj
dCkKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCA9IHN0YXRpY19jYXN0
PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfZG93bik7Ci0gICAgc2QtPmFwaS0+bW91c2VfZG93
bihzZCwgZG93bkV2ZW50KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2Jq
ZWN0X3NtYXJ0X3NtYXJ0X2dldChldmFzT2JqZWN0KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0X0Ns
YXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQpOworICAgIGNvbnN0
IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19W
aWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRDbGFzcyk7CisgICAgQVNTRVJUKGFwaSk7CisKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsK
KworICAgIGlmICghc21hcnREYXRhKSB7CisgICAgICAgIC8vIEFsbG9jYXRpbmcgd2l0aCAnY2Fs
bG9jJyBhcyB0aGUgQVBJIGNvbnRyYWN0IGlzIHRoYXQgaXQgc2hvdWxkIGJlIGRlbGV0ZWQgd2l0
aCAnZnJlZSgpJy4KKyAgICAgICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21h
cnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKKyAgICAg
ICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXZhc09iamVjdCwgc21hcnREYXRhKTsKKyAg
ICB9CisKKyAgICBzbWFydERhdGEtPnNlbGYgPSBldmFzT2JqZWN0OworICAgIHNtYXJ0RGF0YS0+
YXBpID0gYXBpOworCisgICAgcGFyZW50U21hcnRDbGFzcy5hZGQoZXZhc09iamVjdCk7CisKKyAg
ICBzbWFydERhdGEtPnByaXYgPSAwOyAvLyBXaWxsIGJlIGluaXRpYWxpemVkIGZ1cnRoZXIuCisK
KyAgICAvLyBDcmVhdGUgZXZhc19vYmplY3RfaW1hZ2UgdG8gZHJhdyB3ZWIgY29udGVudHMuCisg
ICAgc21hcnREYXRhLT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJh
c2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1h
Z2UsIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+
aW1hZ2UsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRh
LT5pbWFnZSwgZXZhc09iamVjdCk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmlt
YWdlKTsKKworICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19GT0NVU19JTj46
OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FM
TEJBQ0tfRk9DVVNfT1VUPjo6c3Vic2NyaWJlKGV2YXNPYmplY3QpOworICAgIEV3a1ZpZXdFdmVu
dEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTD46OnN1YnNjcmliZShldmFzT2JqZWN0
KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04+OjpzdWJz
Y3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNL
X0tFWV9VUD46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVy
PEVWQVNfQ0FMTEJBQ0tfU0hPVz46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3
RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46OnN1YnNjcmliZShldmFzT2JqZWN0KTsK
IH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNlVXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQordm9pZCBFd2tWaWV3OjpoYW5kbGVFdmFzT2JqZWN0RGVs
ZXRlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfVXAq
IHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV91cCk7Ci0gICAg
c2QtPmFwaS0+bW91c2VfdXAoc2QsIHVwRXZlbnQpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIGlmIChzbWFydERhdGEp
IHsKKyAgICAgICAgQVNTRVJUKHNtYXJ0RGF0YS0+cHJpdik7IC8vIHNtYXJ0RGF0YS0+cHJpdiBp
cyBFd2tWaWV3IGluc3RhbmNlLgorICAgICAgICBkZWxldGUgc21hcnREYXRhLT5wcml2OworICAg
IH0KKworICAgIHBhcmVudFNtYXJ0Q2xhc3MuZGVsKGV2YXNPYmplY3QpOwogfQogCi12b2lkIEV3
a1ZpZXc6Om9uTW91c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQq
IGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdFJlc2l6ZShFdmFzX09i
amVjdCogZXZhc09iamVjdCwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7
Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFz
X0V2ZW50X01vdXNlX01vdmUqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGktPm1vdXNlX21vdmUpOwotICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2Qs
IG1vdmVFdmVudCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFy
dERhdGEoZXZhc09iamVjdCk7CisgICAgQVNTRVJUKHNtYXJ0RGF0YSk7CisKKyAgICBldmFzX29i
amVjdF9yZXNpemUoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19v
YmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21hcnREYXRhLT5pbWFnZSwgMCwgMCwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IHRydWU7CisgICAg
c21hcnREYXRhQ2hhbmdlZChzbWFydERhdGEpOworfQorCit2b2lkIEV3a1ZpZXc6OmhhbmRsZUV2
YXNPYmplY3RNb3ZlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBFdmFzX0Nvb3JkIC8qeCovLCBF
dmFzX0Nvb3JkIC8qeSovKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9
IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEFTU0VSVChzbWFydERhdGEpOworCisgICAg
c21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gdHJ1ZTsKKyAgICBzbWFydERhdGFDaGFuZ2Vk
KHNtYXJ0RGF0YSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdENhbGN1bGF0
ZShFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEgPSB0b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBBU1NFUlQoc21hcnREYXRh
KTsKKworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBBU1NF
UlQodmlldyk7CisKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gZmFsc2U7CisKKyAgICBF
dmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlf
Z2V0KGV2YXNPYmplY3QsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIGlmIChzbWFy
dERhdGEtPmNoYW5nZWQucG9zaXRpb24pIHsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBv
c2l0aW9uID0gZmFsc2U7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy54ID0geDsKKyAgICAgICAg
c21hcnREYXRhLT52aWV3LnkgPSB5OworICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0
YS0+aW1hZ2UsIHgsIHkpOworICAgIH0KKworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuc2l6
ZSkgeworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IGZhbHNlOworICAgICAgICBz
bWFydERhdGEtPnZpZXcudyA9IHdpZHRoOworICAgICAgICBzbWFydERhdGEtPnZpZXcuaCA9IGhl
aWdodDsKKworICAgICAgICBpZiAodmlldy0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpKQorICAgICAg
ICAgICAgdmlldy0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUod2lkdGgs
IGhlaWdodCksIEludFNpemUoKSk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisgICAgICAgIHZpZXctPnNldE5lZWRzU3VyZmFjZVJlc2l6ZSgpOworI2VuZGlmCisjaWYgVVNF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgICAgIHZpZXctPnBhZ2VDbGllbnQoKS0+dXBkYXRl
Vmlld3BvcnRTaXplKCk7CisjZW5kaWYKKyAgICB9Cit9CisKK3ZvaWQgRXdrVmlldzo6aGFuZGxl
RXZhc09iamVjdFNob3coRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCit7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgQVNT
RVJUKHNtYXJ0RGF0YSk7CisKKyAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc21hcnRE
YXRhLT5iYXNlLmNsaXBwZXIpKQorICAgICAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+
YmFzZS5jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOwor
fQorCit2b2lkIEV3a1ZpZXc6OmhhbmRsZUV2YXNPYmplY3RIaWRlKEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0KQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnRE
YXRhKGV2YXNPYmplY3QpOworICAgIEFTU0VSVChzbWFydERhdGEpOworCisgICAgZXZhc19vYmpl
Y3RfaGlkZShzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfaGlkZShz
bWFydERhdGEtPmltYWdlKTsKK30KKwordm9pZCBFd2tWaWV3OjpoYW5kbGVFdmFzT2JqZWN0Q29s
b3JTZXQoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIGludCByZWQsIGludCBncmVlbiwgaW50IGJs
dWUsIGludCBhbHBoYSkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0
b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAgICBBU1NFUlQoc21hcnREYXRhKTsKKworICAgIEV3
a1ZpZXcqIHZpZXcgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBBU1NFUlQodmlldyk7CisK
KyAgICBhbHBoYSA9IGNsYW1wVG8oYWxwaGEsIDAsIDI1NSk7CisgICAgcmVkID0gY2xhbXBUbyhy
ZWQsIDAsIGFscGhhKTsKKyAgICBncmVlbiA9IGNsYW1wVG8oZ3JlZW4sIDAsIGFscGhhKTsKKyAg
ICBibHVlID0gY2xhbXBUbyhibHVlLCAwLCBhbHBoYSk7CisKKyAgICBldmFzX29iamVjdF9pbWFn
ZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFnZSwgYWxwaGEgPCAyNTUpOworICAgIHZpZXctPnBh
Z2UoKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKHJlZCB8fCBncmVlbiB8fCBibHVlKTsKKyAgICB2aWV3
LT5wYWdlKCktPnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGFscGhhIDwgMjU1KTsKKwor
ICAgIHBhcmVudFNtYXJ0Q2xhc3MuY29sb3Jfc2V0KGV2YXNPYmplY3QsIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdGb2N1c0lu
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICB0b0V3a1ZpZXcoc21hcnRE
YXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1
c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIHJldHVybiB0cnVl
OworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdrVmlld0ZvY3VzT3V0KEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFn
ZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2Vi
UGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIHJldHVybiB0cnVlOworfQorCitF
aW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdrVmlld01vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50
KQoreworICAgIEV3a1ZpZXcqIHNlbGYgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBzZWxm
LT5wYWdlKCktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCh3aGVlbEV2ZW50
LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgc2VsZi0+dHJhbnNmb3JtVG9TY3JlZW4oKSkp
OworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdrVmll
d01vdXNlRG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZl
bnRfTW91c2VfRG93biogZG93bkV2ZW50KQoreworICAgIEV3a1ZpZXcqIHNlbGYgPSB0b0V3a1Zp
ZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZl
V2ViTW91c2VFdmVudChkb3duRXZlbnQsIHNlbGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxm
LT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9v
bCBFd2tWaWV3OjpoYW5kbGVFd2tWaWV3TW91c2VVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCit7CisgICAgRXdrVmll
dyogc2VsZiA9IHRvRXdrVmlldyhzbWFydERhdGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxl
TW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KHVwRXZlbnQsIHNlbGYtPnRyYW5zZm9ybUZy
b21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7CisKKyAgICBpZiAoSW5wdXRN
ZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBzZWxmLT5pbnB1dE1ldGhvZENv
bnRleHQoKSkKKyAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT5oYW5kbGVNb3VzZVVwRXZlbnQo
dXBFdmVudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6Omhh
bmRsZUV3a1ZpZXdNb3VzZU1vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCkKK3sKKyAgICBFd2tWaWV3KiBzZWxm
ID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7CisgICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2
ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQobW92ZUV2ZW50LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2Nl
bmUoKSwgc2VsZi0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOworICAgIHJldHVybiB0cnVlOworfQor
CitFaW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdrVmlld0tleURvd24oRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCit7
CisgICAgYm9vbCBpc0ZpbHRlcmVkID0gZmFsc2U7CisgICAgRXdrVmlldyogc2VsZiA9IHRvRXdr
VmlldyhzbWFydERhdGEpOworICAgIGlmIChJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0
aG9kQ29udGV4dCA9IHNlbGYtPmlucHV0TWV0aG9kQ29udGV4dCgpKQorICAgICAgICBpbnB1dE1l
dGhvZENvbnRleHQtPmhhbmRsZUtleURvd25FdmVudChkb3duRXZlbnQsICZpc0ZpbHRlcmVkKTsK
KworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KGRvd25FdmVudCwgaXNGaWx0ZXJlZCkpOworICAgIHJldHVybiB0cnVlOworfQorCitF
aW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdrVmlld0tleVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpCit7CisgICAgdG9F
d2tWaWV3KHNtYXJ0RGF0YSktPnBhZ2UoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50KHVwRXZlbnQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCkBAIC05ODAsMjYgKzEzMzAsMjMgQEAgdm9pZCBFd2tWaWV3OjpmZWVk
VG91Y2hFdmVudHMoRXdrX1RvdWNoX0V2ZW50X1R5cGUgdHlwZSkKICAgICAgICAgZGVsZXRlIHN0
YXRpY19jYXN0PEV3a19Ub3VjaF9Qb2ludCo+KGRhdGEpOwogfQogCi12b2lkIEV3a1ZpZXc6Om9u
VG91Y2hEb3duKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKK3ZvaWQgRXdrVmlldzo6aGFuZGxl
VG91Y2hEb3duKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKIHsKLSAgICBFd2tWaWV3KiB2aWV3
ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7Ci0gICAgdmlldy0+ZmVlZFRvdWNo
RXZlbnRzKEVXS19UT1VDSF9TVEFSVCk7CisgICAgdG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91
Y2hFdmVudHMoRVdLX1RPVUNIX1NUQVJUKTsKIH0KIAotdm9pZCBFd2tWaWV3OjpvblRvdWNoVXAo
dm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmll
dywgdm9pZCogLyogZXZlbnRJbmZvICovKQordm9pZCBFd2tWaWV3OjpoYW5kbGVUb3VjaFVwKHZv
aWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcs
IHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6
ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7Ci0gICAgdmlldy0+ZmVlZFRvdWNoRXZlbnRzKEVXS19U
T1VDSF9FTkQpOworICAgIHRvRXdrVmlldyhld2tWaWV3KS0+ZmVlZFRvdWNoRXZlbnRzKEVXS19U
T1VDSF9FTkQpOwogfQogCi12b2lkIEV3a1ZpZXc6Om9uVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEg
Ki8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2
ZW50SW5mbyAqLykKLXsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmpl
Y3QoZXdrVmlldyk7Ci0gICAgdmlldy0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9NT1ZFKTsK
K3ZvaWQgRXdrVmlldzo6aGFuZGxlVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8q
IGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykK
K3sgICAgCisgICAgdG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNI
X01PVkUpOwogfQogI2VuZGlmCiAKLXZvaWQgRXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZChjb25z
dCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCit2b2lkIEV3a1ZpZXc6OmhhbmRsZUZh
dmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIHsKICAg
ICBFd2tWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RXdrVmlldyo+KGV2ZW50SW5mbyk7CiAKQEAg
LTEwMzcsMyArMTM4NCw0NSBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6
dGFrZVNuYXBzaG90KCkKICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCiB9
CisKK0V2YXNfU21hcnRfQ2xhc3MgRXdrVmlldzo6cGFyZW50U21hcnRDbGFzcyA9IEVWQVNfU01B
UlRfQ0xBU1NfSU5JVF9OVUxMOworCisvLyBGcmVlIEV3ayBWaWV3IGZ1bmN0aW9ucy4KKworRXdr
VmlldyogdG9Fd2tWaWV3KGNvbnN0IEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEFT
U0VSVChldmFzT2JqZWN0ICYmIGlzVmlld0V2YXNPYmplY3QoZXZhc09iamVjdCkpOworICAgIHJl
dHVybiB0b0V3a1ZpZXcoc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfZ2V0KGV2YXNPYmplY3QpKSk7Cit9CisKK0V3a1ZpZXcqIHRvRXdrVmll
dyhjb25zdCBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCit7CisgICAgQVNTRVJUKHNt
YXJ0RGF0YSAmJiBzbWFydERhdGEtPnByaXYpOworICAgIHJldHVybiBzbWFydERhdGEtPnByaXY7
Cit9CisKK2Jvb2wgaXNWaWV3RXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVj
dCkKK3sKKyAgICBBU1NFUlQoZXZhc09iamVjdCk7CisKKyAgICBjb25zdCBjaGFyKiBldmFzT2Jq
ZWN0VHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV2YXNPYmplY3QpOworICAgIGNvbnN0IEV2
YXNfU21hcnQqIGV2YXNTbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChldmFzT2Jq
ZWN0KTsKKyAgICBpZiAoVU5MSUtFTFkoIWV2YXNTbWFydCkpIHsKKyAgICAgICAgRUlOQV9MT0df
Q1JJVCgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgZXZhc09iamVjdCwgZXZhc09i
amVjdFR5cGUgPyBldmFzT2JqZWN0VHlwZSA6ICIobnVsbCkiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNtYXJ0Q2xhc3MgPSBl
dmFzX3NtYXJ0X2NsYXNzX2dldChldmFzU21hcnQpOworICAgIGlmIChVTkxJS0VMWSghc21hcnRD
bGFzcykpIHsKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBj
bGFzcyBvYmplY3QhIiwgZXZhc09iamVjdCwgZXZhc09iamVjdFR5cGUgPyBldmFzT2JqZWN0VHlw
ZSA6ICIobnVsbCkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChV
TkxJS0VMWShzbWFydENsYXNzLT5kYXRhICE9IHNtYXJ0Q2xhc3NOYW1lKSkgeworICAgICAgICBF
SU5BX0xPR19DUklUKCIlcCAoJXMpIGlzIG5vdCBvZiBhbiBld2tfdmlldyAobmVlZCAlcCwgZ290
ICVwKSEiLCBldmFzT2JqZWN0LCBldmFzT2JqZWN0VHlwZSA/IGV2YXNPYmplY3RUeXBlIDogIihu
dWxsKSIsCisgICAgICAgICAgICBzbWFydENsYXNzTmFtZSwgc21hcnRDbGFzcy0+ZGF0YSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCA4NzE2NWJjLi45ZTFj
NGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC05
OSw2ICs5OSw3IEBAIHR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1cmZhY2UgRXZhc19HTF9TdXJm
YWNlOwogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1Zp
ZXdfU21hcnRfRGF0YTsKK3R5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIEV3a19W
aWV3X1NtYXJ0X0NsYXNzOwogCiBjbGFzcyBFd2tWaWV3IHsKIHB1YmxpYzoKQEAgLTEwNywxMSAr
MTA4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgTGVnYWN5QmVoYXZpb3IsCiAgICAgICAgIERlZmF1
bHRCZWhhdmlvcgogICAgIH07Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJLaXQ6OldlYlBhZ2VHcm91cCogcGFnZUdyb3Vw
LCBWaWV3QmVoYXZpb3IpOwotICAgIH5Fd2tWaWV3KCk7CiAKLSAgICBzdGF0aWMgRXdrVmlldyog
ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwotICAgIEV2YXNfT2JqZWN0
KiB2aWV3KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CisgICAgc3RhdGljIEV2YXNfT2JqZWN0
KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9
IDAsIFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7Cisg
ICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFz
c1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYg
PSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOwor
CisgICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRf
Q2xhc3MmKTsKKworICAgIHN0YXRpYyBjb25zdCBFdmFzX09iamVjdCogdG9FdmFzT2JqZWN0KFdL
UGFnZVJlZik7CisKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZh
c09iamVjdDsgfQogCiAgICAgV0tWaWV3UmVmIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIHRvQVBJ
KG1fd2ViVmlldy5nZXQoKSk7IH0KICAgICBXS1BhZ2VSZWYgd2tQYWdlKCkgY29uc3Q7CkBAIC0x
NTMsMTEgKzE1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3Jl
OjpDdXJzb3ImIGN1cnNvcik7CiAgICAgdm9pZCBzZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRh
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKTsKIAotICAgIHZvaWQgdXBkYXRlKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KCkpOwotCi0gICAgc3Rh
dGljIHZvaWQgYWRkVG9QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3KTsKLSAgICBzdGF0aWMgdm9p
ZCByZW1vdmVGcm9tUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldyk7Ci0gICAgc3RhdGljIGNvbnN0
IEV2YXNfT2JqZWN0KiB2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZik7CisgICAg
dm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCA9IFdlYkNvcmU6OkludFJl
Y3QoKSk7ICAgCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgdm9pZCBlbnRlckZ1
bGxTY3JlZW4oKTsKQEAgLTIyMSw3ICsyMjIsMTEgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25hcHNob3QoKTsKIAogcHJpdmF0ZToKLSAgICBpbmxpbmUg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKCkgY29uc3Q7CisgICAgRXdrVmlldyhFdmFz
X09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAgfkV3a1ZpZXcoKTsgLy8g
V2lsbCBiZSBkZWxldGVkIHdoZW4gRXZhcyBPYmplY3QgaXMgZGVsZXRlZC4KKworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworCiAgICAgdm9pZCBkaXNwbGF5VGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxFd2tWaWV3PiopOwogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQpAQCAtMjMwLDE3ICsyMzUsMzUgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5m
b3JtSWNvbkNoYW5nZSgpOwogCi0gICAgc3RhdGljIHZvaWQgb25Nb3VzZURvd24odm9pZCogZGF0
YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKLSAgICBzdGF0aWMgdm9p
ZCBvbk1vdXNlVXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJ
bmZvKTsKLSAgICBzdGF0aWMgdm9pZCBvbk1vdXNlTW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZh
c19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOworICAgIC8vIEV2YXNfU21hcnRfQ2xhc3MgY2Fs
bGJhY2sgaW50ZXJmYWNlOgorICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNPYmplY3RBZGQoRXZh
c19PYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBoYW5kbGVFdmFzT2JqZWN0RGVsZXRlKEV2YXNf
T2JqZWN0Kik7CisgICAgc3RhdGljIHZvaWQgaGFuZGxlRXZhc09iamVjdE1vdmUoRXZhc19PYmpl
Y3QqLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSk7CisgICAgc3RhdGljIHZvaWQgaGFuZGxl
RXZhc09iamVjdFJlc2l6ZShFdmFzX09iamVjdCosIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29v
cmQgaGVpZ2h0KTsKKyAgICBzdGF0aWMgdm9pZCBoYW5kbGVFdmFzT2JqZWN0U2hvdyhFdmFzX09i
amVjdCopOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNPYmplY3RIaWRlKEV2YXNfT2JqZWN0
Kik7CisgICAgc3RhdGljIHZvaWQgaGFuZGxlRXZhc09iamVjdENvbG9yU2V0KEV2YXNfT2JqZWN0
KiwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKTsKKyAgICBzdGF0aWMg
dm9pZCBoYW5kbGVFdmFzT2JqZWN0Q2FsY3VsYXRlKEV2YXNfT2JqZWN0Kik7CisKKyAgICAvLyBF
d2tfVmlld19TbWFydF9DbGFzcyBjYWxsYmFjayBpbnRlcmZhY2U6CisgICAgc3RhdGljIEVpbmFf
Qm9vbCBoYW5kbGVFd2tWaWV3Rm9jdXNJbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEp
OworICAgIHN0YXRpYyBFaW5hX0Jvb2wgaGFuZGxlRXdrVmlld0ZvY3VzT3V0KEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBoYW5kbGVFd2tWaWV3
TW91c2VXaGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZl
bnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgaGFuZGxl
RXdrVmlld01vdXNlRG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2
YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIGhh
bmRsZUV3a1ZpZXdNb3VzZVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3Qg
RXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBoYW5k
bGVFd2tWaWV3TW91c2VNb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3Qg
RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wg
aGFuZGxlRXdrVmlld0tleURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25z
dCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wg
aGFuZGxlRXdrVmlld0tleVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3Qg
RXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
ICAgICB2b2lkIGZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZlbnRfVHlwZSB0eXBlKTsKLSAg
ICBzdGF0aWMgdm9pZCBvblRvdWNoRG93bih2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52
YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOwotICAg
IHN0YXRpYyB2b2lkIG9uVG91Y2hVcCh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMg
Ki8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOwotICAgIHN0
YXRpYyB2b2lkIG9uVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAq
LywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLyk7CisgICAgc3Rh
dGljIHZvaWQgaGFuZGxlVG91Y2hEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgaGFuZGxlVG91Y2hVcCh2b2lkKiBk
YXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOworICAgIHN0YXRpYyB2
b2lkIGhhbmRsZVRvdWNoTW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lk
KiBldmVudEluZm8pOwogI2VuZGlmCi0gICAgc3RhdGljIHZvaWQgb25GYXZpY29uQ2hhbmdlZChj
b25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGhh
bmRsZUZhdmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbyk7
CiAKK3ByaXZhdGU6CiAgICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4K
ICAgICBFdmFzX09iamVjdCogbV9ldmFzT2JqZWN0OwogICAgIFJlZlB0cjxFd2tDb250ZXh0PiBt
X2NvbnRleHQ7CkBAIC0yODcsNiArMzEwLDEzIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29s
IG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkOwogICAgIGJvb2wgbV9zZXREcmF3c0JhY2tncm91bmQ7
CisKKyAgICBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBwYXJlbnRTbWFydENsYXNzOwogfTsKIAor
RXdrVmlldyogdG9Fd2tWaWV3KGNvbnN0IEV2YXNfT2JqZWN0Kik7CitFd2tWaWV3KiB0b0V3a1Zp
ZXcoY29uc3QgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKTsKKworYm9vbCBpc1ZpZXdF
dmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KTsKKwogI2VuZGlmIC8vIEV3
a1ZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CmluZGV4IGQ2MTgxYjguLmM1M2Q4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTI1LDkgKzI1LDYgQEAKICNpbmNsdWRlICJGaW5kQ2xp
ZW50RWZsLmgiCiAjaW5jbHVkZSAiRm9ybUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIklucHV0TWV0
aG9kQ29udGV4dEVmbC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLSNp
bmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxF
dmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRD
bGllbnRFZmwuaCIKICNpbmNsdWRlICJQYWdlUG9saWN5Q2xpZW50RWZsLmgiCkBAIC01MCw3ICs0
Nyw2IEBACiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a19wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKLSNp
bmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tQYWdlR3JvdXAuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KQEAgLTY4LDQ4NiArNjQsMzEgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNvbnN0IGNoYXIgRVdLX1ZJRVdfVFlQRV9TVFJb
XSA9ICJFV0syX1ZpZXciOwotCi0jZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywg
cmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGJvb2wgcmVz
dWx0ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghZXdrVmll
dykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibnVsbCBpcyBub3QgYSBld2tfdmlldyIp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNl
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
Y29uc3QgY2hhciogX3RtcF9vdHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcpOyAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IEV2YXNfU21hcnQqIF90bXBfcyA9IGV2YXNf
b2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChld2tWaWV3KTsgICAgICAgXAotICAgICAgICBpZiAoRUlO
QV9VTkxJS0VMWSghX3RtcF9zKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlcCAo
JXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIo
bnVsbCkiKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29u
c3QgRXZhc19TbWFydF9DbGFzcyogX3RtcF9zYyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KF90bXBf
cyk7ICAgICAgICBcCi0gICAgICAgIGlmIChFSU5BX1VOTElLRUxZKCFfdG1wX3NjKSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9M
T0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIGV3a1ZpZXcs
IF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWShfdG1wX3NjLT5kYXRh
ICE9IEVXS19WSUVXX1RZUEVfU1RSKSkgeyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJ
TkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBvZiBhbiBld2tfdmll
dyAobmVlZCAlcCwgZ290ICVwKSEiLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBld2tW
aWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiLCAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgRVdLX1ZJRVdfVFlQRV9TVFIsIF90bXBfc2MtPmRhdGEpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgX3RtcF9yZXN1bHQpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgaWYgKF90bXBfcmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzbWFydERhdGEgPSAoRXdrX1ZpZXdf
U21hcnRfRGF0YSopZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrVmlldykKLQotI2RlZmlu
ZSBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLi4uKSAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRh
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9H
X0NSSVQoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICBld2tWaWV3LCBldmFzX29iamVjdF90eXBlX2dldChl
d2tWaWV3KSk7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBFV0tfVklF
V19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCAuLi4pICAgICAgICAg
ICAgICAgIFwKLSAgICBpZiAoIXNtYXJ0RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVJTkFfTE9HX0NSSVQo
InNtYXJ0IGRhdGEgaXMgbnVsbCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
RXdrVmlldyogaW1wbCA9IHNtYXJ0RGF0YS0+cHJpdjsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYg
KCFpbXBsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEg
Zm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNt
YXJ0RGF0YS0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc21hcnREYXRhLT5zZWxmKSk7ICAg
ICAgIFwKLSAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgRVdLX1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIGltcGwsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrVmlldyog
aW1wbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIEV3a1ZpZXcqIGltcGwgPSB0b0V3a1ZpZXcoZXdrVmlldyk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgXAotICAgICAgICBpbXBsID0gc21hcnREYXRhLT5w
cml2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgaWYgKCFpbXBsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2
YXRlIGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgIHNtYXJ0RGF0YS0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc21hcnREYXRhLT5z
ZWxmKSk7ICAgICAgIFwKKyAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoIm5vIHByaXZhdGUgZGF0
YSBmb3Igb2JqZWN0ICVwIiwgZXdrVmlldyk7ICAgICAgICAgICBcCiAgICAgICAgICAgICByZXR1
cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0vLy8g
Q3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dC4KLXR5cGVk
ZWYgc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQgRXdrX1BhZ2VfQ29udGVudHNfQ29u
dGV4dDsKLQotLyoKLSAqIEBicmllZiBTdHJ1Y3R1cmUgY29udGFpbmluZyBwYWdlIGNvbnRlbnRz
IGNvbnRleHQgdXNlZCBmb3IgZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKSBBUEkuCi0gKi8K
LXN0cnVjdCBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0IHsKLSAgICBFd2tfUGFnZV9Db250ZW50
c19UeXBlIHR5cGU7Ci0gICAgRXdrX1BhZ2VfQ29udGVudHNfQ2IgY2FsbGJhY2s7Ci19OwotCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEpCi17Ci0gICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gdHJ1ZTsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YS0+c2VsZik7Ci19Ci0KLS8vIERlZmF1bHQgRXZlbnQg
SGFuZGxpbmcuCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9mb2N1c19pbihFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllf
U0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgp
LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFn
ZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhKQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihz
bWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlk
Q2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dp
bmRvd0lzQWN0aXZlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfbW91c2Vfd2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQotewotICAgIEVXS19W
SUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQot
ICAgIGltcGwtPnBhZ2UoKS0+aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHdo
ZWVsRXZlbnQsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1Nj
cmVlbigpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3NtYXJ0X21vdXNlX2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBM
X0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBs
LT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChkb3duRXZlbnQs
IGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0
X21vdXNlX3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVu
dF9Nb3VzZV9VcCogdXBFdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9S
RVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRs
ZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudCh1cEV2ZW50LCBpbXBsLT50cmFuc2Zvcm1G
cm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotCi0gICAgSW5wdXRNZXRo
b2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBpbXBsLT5pbnB1dE1ldGhvZENvbnRl
eHQoKTsKLSAgICBpZiAoaW5wdXRNZXRob2RDb250ZXh0KQotICAgICAgICBpbnB1dE1ldGhvZENv
bnRleHQtPmhhbmRsZU1vdXNlVXBFdmVudCh1cEV2ZW50KTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9tb3ZlKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3Zl
RXZlbnQpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5h
dGl2ZVdlYk1vdXNlRXZlbnQobW92ZUV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwg
aW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9rZXlfZG93bihFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCkKLXsKLSAg
ICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxz
ZSk7Ci0KLSAgICBib29sIGlzRmlsdGVyZWQgPSBmYWxzZTsKLSAgICBJbnB1dE1ldGhvZENvbnRl
eHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9IGltcGwtPmlucHV0TWV0aG9kQ29udGV4dCgpOwot
ICAgIGlmIChpbnB1dE1ldGhvZENvbnRleHQpCi0gICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+
aGFuZGxlS2V5RG93bkV2ZW50KGRvd25FdmVudCwgJmlzRmlsdGVyZWQpOwotCi0gICAgaW1wbC0+
cGFnZSgpLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZG93bkV2
ZW50LCBpc0ZpbHRlcmVkKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3NtYXJ0X2tleV91cChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEs
IGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExf
R0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwt
PnBhZ2UoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHVwRXZl
bnQpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRXZlbnQgSGFuZGxpbmcuCi1zdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0
Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19pbik7Ci0gICAgc21hcnREYXRh
LT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19v
bl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVu
dEluZm8qLykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQpOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19v
dXQoc21hcnREYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3doZWVs
KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAg
ICBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19F
dmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2Vfd2hlZWwpOwotICAgIHNt
YXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbChzbWFydERhdGEsIHdoZWVsRXZlbnQpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNf
T2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRv
d25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOwot
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGktPmtleV9kb3duKTsKLSAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBk
b3duRXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2
ZW50X0tleV9VcCogdXBFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X1VwKj4oZXZl
bnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5rZXlfdXApOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXAoc21hcnRE
YXRhLCB1cEV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX3Nob3codm9pZCog
ZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsKLSAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgaW1wbCk7Ci0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2Vi
UGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29u
X2hpZGUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8q
LykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxF
d2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0Rf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCk7Ci0KLSAgICAvLyBUaGlzIGNhbGwgbWF5IGxvb2sg
d3JvbmcsIGJ1dCB3ZSByZWFsbHkgbmVlZCB0byBwYXNzIFZpZXdJc1Zpc2libGUgaGVyZS4KLSAg
ICAvLyB2aWV3U3RhdGVEaWRDaGFuZ2UoKSBpdHNlbGYgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVh
bGx5IHNldHRpbmcgdGhlIHZpc2liaWxpdHkgdG8gVmlzaWJsZSBvciBIaWRkZW4KLSAgICAvLyBk
ZXBlbmRpbmcgb24gd2hhdCBXZWJQYWdlUHJveHk6OmlzVmlld1Zpc2libGUoKSByZXR1cm5zLCB0
aGlzIHNpbXBseSB0cmlnZ2VycyB0aGUgcHJvY2Vzcy4KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdT
dGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwotfQotCi1zdGF0aWMg
RXZhc19TbWFydF9DbGFzcyBnX3BhcmVudFNtYXJ0Q2xhc3MgPSBFVkFTX1NNQVJUX0NMQVNTX0lO
SVRfTlVMTDsKLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCog
ZXdrVmlldykKLXsKLSAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3Nt
YXJ0X3NtYXJ0X2dldChld2tWaWV3KTsKLSAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFy
dENsYXNzID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQpOwotICAgIGNvbnN0IEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0
X0NsYXNzKj4oc21hcnRDbGFzcyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7Ci0KLSAgICBpZiAoIXNtYXJ0RGF0YSkgewotICAgICAgICBzbWFydERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19T
bWFydF9EYXRhKSkpOwotICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgewotICAgICAgICAgICAgRUlO
QV9MT0dfQ1JJVCgiY291bGQgbm90IGFsbG9jYXRlIEV3a19WaWV3X1NtYXJ0X0RhdGEiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9k
YXRhX3NldChld2tWaWV3LCBzbWFydERhdGEpOwotICAgIH0KLQotICAgIHNtYXJ0RGF0YS0+c2Vs
ZiA9IGV3a1ZpZXc7Ci0gICAgc21hcnREYXRhLT5hcGkgPSBhcGk7Ci0KLSAgICBnX3BhcmVudFNt
YXJ0Q2xhc3MuYWRkKGV3a1ZpZXcpOwotCi0gICAgc21hcnREYXRhLT5wcml2ID0gMDsKLQotICAg
IC8vIENyZWF0ZSBldmFzX29iamVjdF9pbWFnZSB0byBkcmF3IHdlYiBjb250ZW50cy4KLSAgICBz
bWFydERhdGEtPmltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5l
dmFzKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFnZSwg
ZmFsc2UpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxlZF9zZXQoc21hcnREYXRhLT5pbWFn
ZSwgdHJ1ZSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmlt
YWdlLCBld2tWaWV3KTsKLSAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOwot
Ci0jZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKGV3
a1ZpZXcsIHMsIGMsIHNtYXJ0RGF0YSkKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNf
SU4sIF9ld2tfdmlld19vbl9mb2N1c19pbik7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZP
Q1VTX09VVCwgX2V3a192aWV3X29uX2ZvY3VzX291dCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExC
QUNLX01PVVNFX1dIRUVMLCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwpOwotICAgIENPTk5FQ1Qo
RVZBU19DQUxMQkFDS19LRVlfRE9XTiwgX2V3a192aWV3X29uX2tleV9kb3duKTsKLSAgICBDT05O
RUNUKEVWQVNfQ0FMTEJBQ0tfS0VZX1VQLCBfZXdrX3ZpZXdfb25fa2V5X3VwKTsKLSAgICBDT05O
RUNUKEVWQVNfQ0FMTEJBQ0tfU0hPVywgX2V3a192aWV3X29uX3Nob3cpOwotICAgIENPTk5FQ1Qo
RVZBU19DQUxMQkFDS19ISURFLCBfZXdrX3ZpZXdfb25faGlkZSk7Ci0jdW5kZWYgQ09OTkVDVAot
fQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQotewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwotICAgIGlmIChz
bWFydERhdGEpCi0gICAgICAgIGRlbGV0ZSBzbWFydERhdGEtPnByaXY7Ci0KLSAgICBnX3BhcmVu
dFNtYXJ0Q2xhc3MuZGVsKGV3a1ZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCkKLXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSk7Ci0KLSAgICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5pbWFnZSwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc21hcnREYXRhLT5p
bWFnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21h
cnREYXRhLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBzbWFydERhdGEtPmNo
YW5nZWQuc2l6ZSA9IHRydWU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRh
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfQ29vcmQgLyp4Ki8sIEV2YXNfQ29vcmQgLyp5Ki8pCi17Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgc21hcnREYXRh
LT5jaGFuZ2VkLnBvc2l0aW9uID0gdHJ1ZTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChz
bWFydERhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2
YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4o
c21hcnREYXRhLCBpbXBsKTsKLQotICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkgPSBmYWxzZTsK
LQotICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKLSAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgaWYg
KHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbikgewotICAgICAgICBzbWFydERhdGEtPmNoYW5n
ZWQucG9zaXRpb24gPSBmYWxzZTsKLSAgICAgICAgc21hcnREYXRhLT52aWV3LnggPSB4OwotICAg
ICAgICBzbWFydERhdGEtPnZpZXcueSA9IHk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21h
cnREYXRhLT5pbWFnZSwgeCwgeSk7Ci0gICAgfQotCi0gICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdl
ZC5zaXplKSB7Ci0gICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gZmFsc2U7Ci0gICAg
ICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lkdGg7Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy5o
ID0gaGVpZ2h0OwotCi0gICAgICAgIGlmIChpbXBsLT5wYWdlKCktPmRyYXdpbmdBcmVhKCkpCi0g
ICAgICAgICAgICBpbXBsLT5wYWdlKCktPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSwgSW50U2l6ZSgpKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICAgICAgaW1wbC0+c2V0TmVlZHNTdXJmYWNlUmVzaXplKCk7Ci0jZW5kaWYKLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgaW1wbC0+cGFnZUNsaWVudCgpLT51
cGRhdGVWaWV3cG9ydFNpemUoKTsKLSNlbmRpZgotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X3Nob3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgaWYgKGV2YXNfb2Jq
ZWN0X2NsaXBlZXNfZ2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKSkKLSAgICAgICAgZXZhc19v
YmplY3Rfc2hvdyhzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3Rfc2hv
dyhzbWFydERhdGEtPmltYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hp
ZGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEt
PmJhc2UuY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmltYWdlKTsK
LX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NvbG9yX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKQotewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBFV0tf
VklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsKTsKLQotICAgIGlm
IChhbHBoYSA8IDApCi0gICAgICAgIGFscGhhID0gMDsKLSAgICBlbHNlIGlmIChhbHBoYSA+IDI1
NSkKLSAgICAgICAgYWxwaGEgPSAyNTU7Ci0KLSNkZWZpbmUgQ0hFQ0tfQ09MT1IoY29sb3IsIGFs
cGhhKSBcCi0gICAgaWYgKGNvbG9yIDwgMCkgICAgICAgICAgICAgICAgXAotICAgICAgICBjb2xv
ciA9IDA7ICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmIChjb2xvciA+IGFscGhhKSAgICAg
ICBcCi0gICAgICAgIGNvbG9yID0gYWxwaGE7Ci0gICAgQ0hFQ0tfQ09MT1IocmVkLCBhbHBoYSk7
Ci0gICAgQ0hFQ0tfQ09MT1IoZ3JlZW4sIGFscGhhKTsKLSAgICBDSEVDS19DT0xPUihibHVlLCBh
bHBoYSk7Ci0jdW5kZWYgQ0hFQ0tfQ09MT1IKLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhh
X3NldChzbWFydERhdGEtPmltYWdlLCBhbHBoYSA8IDI1NSk7Ci0gICAgaW1wbC0+cGFnZSgpLT5z
ZXREcmF3c0JhY2tncm91bmQocmVkIHx8IGdyZWVuIHx8IGJsdWUpOwotICAgIGltcGwtPnBhZ2Uo
KS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoYWxwaGEgPCAyNTUpOwotCi0gICAgZ19w
YXJlbnRTbWFydENsYXNzLmNvbG9yX3NldChld2tWaWV3LCByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Ci19CiAKIEVpbmFfQm9vbCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdrX1ZpZXdfU21h
cnRfQ2xhc3MqIGFwaSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXBp
LCBmYWxzZSk7CiAKLSAgICBpZiAoYXBpLT52ZXJzaW9uICE9IEVXS19WSUVXX1NNQVJUX0NMQVNT
X1ZFUlNJT04pIHsKLSAgICAgICAgRUlOQV9MT0dfQ1JJVCgiRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
JXAgaXMgdmVyc2lvbiAlbHUgd2hpbGUgJWx1IHdhcyBleHBlY3RlZC4iLAotICAgICAgICAgICAg
IGFwaSwgYXBpLT52ZXJzaW9uLCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFnX3BhcmVu
dFNtYXJ0Q2xhc3MuYWRkKSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFy
dF9zZXQoJmdfcGFyZW50U21hcnRDbGFzcyk7Ci0KLSAgICBldmFzX29iamVjdF9zbWFydF9jbGlw
cGVkX3NtYXJ0X3NldCgmYXBpLT5zYyk7Ci0KLSAgICAvLyBTZXQgRXZhc19TbWFydF9DbGFzcyBm
dW5jdGlvbnMuCi0gICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfc21hcnRfYWRkOwotICAgIGFw
aS0+c2MuZGVsID0gX2V3a192aWV3X3NtYXJ0X2RlbDsKLSAgICBhcGktPnNjLm1vdmUgPSBfZXdr
X3ZpZXdfc21hcnRfbW92ZTsKLSAgICBhcGktPnNjLnJlc2l6ZSA9IF9ld2tfdmlld19zbWFydF9y
ZXNpemU7Ci0gICAgYXBpLT5zYy5zaG93ID0gX2V3a192aWV3X3NtYXJ0X3Nob3c7Ci0gICAgYXBp
LT5zYy5oaWRlID0gX2V3a192aWV3X3NtYXJ0X2hpZGU7Ci0gICAgYXBpLT5zYy5jb2xvcl9zZXQg
PSBfZXdrX3ZpZXdfc21hcnRfY29sb3Jfc2V0OwotICAgIGFwaS0+c2MuY2FsY3VsYXRlID0gX2V3
a192aWV3X3NtYXJ0X2NhbGN1bGF0ZTsKLSAgICBhcGktPnNjLmRhdGEgPSBFV0tfVklFV19UWVBF
X1NUUjsgLy8gSXQgaXMgdXNlZCBieSB0eXBlIGNoZWNraW5nLgotCi0gICAgLy8gU2V0IEV3a19W
aWV3X1NtYXJ0X0NsYXNzIGZ1bmN0aW9ucy4KLSAgICBhcGktPmZvY3VzX2luID0gX2V3a192aWV3
X3NtYXJ0X2ZvY3VzX2luOwotICAgIGFwaS0+Zm9jdXNfb3V0ID0gX2V3a192aWV3X3NtYXJ0X2Zv
Y3VzX291dDsKLSAgICBhcGktPm1vdXNlX3doZWVsID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX3do
ZWVsOwotICAgIGFwaS0+bW91c2VfZG93biA9IF9ld2tfdmlld19zbWFydF9tb3VzZV9kb3duOwot
ICAgIGFwaS0+bW91c2VfdXAgPSBfZXdrX3ZpZXdfc21hcnRfbW91c2VfdXA7Ci0gICAgYXBpLT5t
b3VzZV9tb3ZlID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX21vdmU7Ci0gICAgYXBpLT5rZXlfZG93
biA9IF9ld2tfdmlld19zbWFydF9rZXlfZG93bjsKLSAgICBhcGktPmtleV91cCA9IF9ld2tfdmll
d19zbWFydF9rZXlfdXA7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBF
dmFzX1NtYXJ0KiBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcyh2b2lkKQotewotICAgIHN0YXRpYyBF
d2tfVmlld19TbWFydF9DbGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVf
VkVSU0lPTigiRXdrX1ZpZXciKTsKLSAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwot
Ci0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0KSkgewotICAgICAgICBld2tfdmlld19zbWFy
dF9jbGFzc19zZXQoJmFwaSk7Ci0gICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXco
JmFwaS5zYyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNtYXJ0OwotfQotCi1zdGF0aWMgaW5saW5l
IEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0
QmVoYXZpb3IpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywg
MCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7Ci0KLSAgICBFdmFzX09i
amVjdCogZXdrVmlldyA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrVmlldywgMCk7Ci0KLSAgICBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBpZiAoIXNtYXJ0RGF0YSkgewot
ICAgICAgICBldmFzX29iamVjdF9kZWwoZXdrVmlldyk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIEFTU0VSVCghc21hcnREYXRhLT5wcml2KTsKLQotICAgIC8vIERlZmF1bHQgV2Vi
UGFnZUdyb3VwIGlzIGNyZWF0ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFn
ZUdyb3VwUmVmIGlzIDAsCi0gICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhl
cmUuCi0gICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcoZXdrVmlldywgY29udGV4dCwg
dG9JbXBsKHBhZ2VHcm91cFJlZiksIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gc21hcnREYXRhLT5w
cml2OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogQ29uc3RydWN0cyBhIGV3a192aWV3IEV2
YXNfT2JqZWN0IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMuCi0gKi8KLUV3a1ZpZXcqIGV3a192aWV3
X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQotewot
ICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3Mo
KSwgY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRl
eHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIHJldHVy
biBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVyZmFjZSgqYXBpKTsKIH0KIAogRXZhc19PYmpl
Y3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBF
d2tfQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBFd2tWaWV3KiBld2tWaWV3ID0gY3JlYXRlRXdr
VmlldyhjYW52YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQp
KTsKLSAgICBpZiAoIWV3a1ZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGV3
a1ZpZXctPnZpZXcoKTsKKyAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52
YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKIH0KIAog
RXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tf
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfc21hcnRfYWRkKGNhbnZh
cywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQq
Pihjb250ZXh0KSk7CisgICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFz
LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKIH0KIAogRXZhc19PYmpl
Y3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCkBAIC04MjQsOCArMzY1LDcgQEAgRWluYV9C
b29sIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19U
b3VjaF9FdmVudF9UeXBlIHQKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwb2ludHMsIGZhbHNlKTsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwotICAgIEVXS19WSUVX
X0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKKyAgICBF
V0tfVklFV19JTVBMX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgaW1wbCwgZmFsc2UpOwogCiAgICAg
aW1wbC0+cGFnZSgpLT5oYW5kbGVUb3VjaEV2ZW50KE5hdGl2ZVdlYlRvdWNoRXZlbnQodHlwZSwg
cG9pbnRzLCBtb2RpZmllcnMsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFu
c2Zvcm1Ub1NjcmVlbigpLCBlY29yZV90aW1lX2dldCgpKSk7CiAKQEAgLTk0Miw2ICs0ODIsMTcg
QEAgdm9pZCBld2tfdmlld19kcmF3c19wYWdlX2JhY2tncm91bmRfc2V0KEV2YXNfT2JqZWN0ICpl
d2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlZCkKICAgICBpbXBsLT5zZXREcmF3c0JhY2tncm91bmQo
ZW5hYmxlZCk7CiB9CiAKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfUGFnZV9Db250
ZW50c19Db250ZXh0LgordHlwZWRlZiBzdHJ1Y3QgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dCBF
d2tfUGFnZV9Db250ZW50c19Db250ZXh0OworCisvKgorICogQGJyaWVmIFN0cnVjdHVyZSBjb250
YWluaW5nIHBhZ2UgY29udGVudHMgY29udGV4dCB1c2VkIGZvciBld2tfdmlld19wYWdlX2NvbnRl
bnRzX2dldCgpIEFQSS4KKyAqLworc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQgewor
ICAgIEV3a19QYWdlX0NvbnRlbnRzX1R5cGUgdHlwZTsKKyAgICBFd2tfUGFnZV9Db250ZW50c19D
YiBjYWxsYmFjazsKK307CisKIC8qKgogICogQGludGVybmFsCiAgKiBDYWxsYmFjayBmdW5jdGlv
biB1c2VkIGZvciBld2tfdmlld19wYWdlX2NvbnRlbnRzX2dldCgpLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjNDkxMmZmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0x
LDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0g
Ki8KLQotI2lmbmRlZiBld2tfdmlld19wcml2YXRlX2gKLSNkZWZpbmUgZXdrX3ZpZXdfcHJpdmF0
ZV9oCi0KLSNpbmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotI2luY2x1ZGUg
PFdlYktpdDIvV0tCYXNlLmg+Ci0KLUV3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNh
bnZhcywgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9y
KTsKLQotI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKaW5kZXggZWZkNmQzMi4u
ZTQ4ZGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tp
bmdTdG9yZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFj
a2luZ1N0b3JlQ2Fpcm8uY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgQmFja2luZ1N0b3JlOjpp
bmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRlSW5m
byYKIAogI2lmIFBMQVRGT1JNKEVGTCkKICAgICAvLyBVcGRhdGUgZXdrX3ZpZXcgd2l0aCBuZXcg
YmFja2luZ1N0b3JlIGltYWdlLgotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZh
c09iamVjdChtX3dlYlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKKyAgICBFd2tWaWV3KiB2aWV3
ID0gdG9Fd2tWaWV3KG1fd2ViUGFnZVByb3h5LT52aWV3V2lkZ2V0KCkpOwogICAgIHZpZXctPnNl
dEltYWdlRGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fYmFja2luZ1N0b3JlLT5j
YWlyb1N1cmZhY2UoKSksIG1fc2l6ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHAKaW5kZXgg
MjU5ZTQxMi4uMmNjNGIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9p
ZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEo
V0tDb250ZXh0UmVmLCBXS1BhZ2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEV3a05h
dmlnYXRpb25EYXRhPiBuYXZpZ2F0aW9uRGF0YUV3ayA9IEV3a05hdmlnYXRpb25EYXRhOjpjcmVh
dGUobmF2aWdhdGlvbkRhdGEpOwotICAgIGhpc3RvcnlDbGllbnQtPm1fbmF2aWdhdGUoRXdrVmll
dzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgbmF2aWdhdGlvbkRhdGFFd2suZ2V0KCksIGhp
c3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fbmF2aWdhdGUo
RXdrVmlldzo6dG9FdmFzT2JqZWN0KHBhZ2UpLCBuYXZpZ2F0aW9uRGF0YUV3ay5nZXQoKSwgaGlz
dG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRF
Zmw6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdl
LCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvbnRleHRI
aXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBX
S1BhZ2VSZWYgcAogICAgIFdLRWluYVNoYXJlZFN0cmluZyBzb3VyY2VVUkxTdHJpbmcoc291cmNl
VVJMKTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb25VUkxTdHJpbmcoZGVzdGlu
YXRpb25VUkwpOwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV9jbGllbnRSZWRpcmVjdChFd2tWaWV3
Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKHBhZ2UpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9u
VVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50
LT5tX2NsaWVudFJlZGlyZWN0KEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSwgc291cmNlVVJM
U3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7
CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1TZXJ2ZXJSZWRp
cmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdL
VVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJm
b3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcAogICAgIFdLRWluYVNo
YXJlZFN0cmluZyBzb3VyY2VVUkxTdHJpbmcoc291cmNlVVJMKTsKICAgICBXS0VpbmFTaGFyZWRT
dHJpbmcgZGVzdGluYXRpb25VUkxTdHJpbmcoZGVzdGluYXRpb25VUkwpOwogCi0gICAgaGlzdG9y
eUNsaWVudC0+bV9zZXJ2ZXJSZWRpcmVjdChFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKHBh
Z2UpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50
LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX3NlcnZlclJlZGlyZWN0KEV3a1Zp
ZXc6OnRvRXZhc09iamVjdChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0
cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3Rv
cnlDbGllbnRFZmw6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJl
ZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5
Q2xpZW50RWZsOjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYg
cGFnZQogICAgIFdLRWluYVNoYXJlZFN0cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CiAgICAgV0tF
aW5hU2hhcmVkU3RyaW5nIHN0cmluZ1VSTChVUkwpOwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV90
aXRsZVVwZGF0ZWQoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgdGl0bGVTdHJp
bmcsIHN0cmluZ1VSTCwgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlzdG9yeUNs
aWVudC0+bV90aXRsZVVwZGF0ZWQoRXdrVmlldzo6dG9FdmFzT2JqZWN0KHBhZ2UpLCB0aXRsZVN0
cmluZywgc3RyaW5nVVJMLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKIH0KIAogdm9pZCBD
b250ZXh0SGlzdG9yeUNsaWVudEVmbDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoV0tDb250ZXh0UmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAppbmRleCA1NjhlNGFlLi4yNmI3ZTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApAQCAtMTE4LDcg
KzExOCw3IEBAIGJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld0luV2luZG93KCkKIHZvaWQgUGFn
ZUNsaWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCgpCiB7CiAgICAgLy8gQ2hlY2sgaWYgbG9hZGlu
ZyB3YXMgb25nb2luZywgd2hlbiB3ZWIgcHJvY2VzcyBjcmFzaGVkLgotICAgIGRvdWJsZSBsb2Fk
UHJvZ3Jlc3MgPSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX3ZpZXctPnZpZXcoKSk7Cisg
ICAgZG91YmxlIGxvYWRQcm9ncmVzcyA9IGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KG1fdmll
dy0+ZXZhc09iamVjdCgpKTsKICAgICBpZiAobG9hZFByb2dyZXNzID49IDAgJiYgbG9hZFByb2dy
ZXNzIDwgMSkgewogICAgICAgICBsb2FkUHJvZ3Jlc3MgPSAxOwogICAgICAgICBtX3ZpZXctPnNt
YXJ0Q2FsbGJhY2s8TG9hZFByb2dyZXNzPigpLmNhbGwoJmxvYWRQcm9ncmVzcyk7CkBAIC0xMzQs
NyArMTM0LDcgQEAgdm9pZCBQYWdlQ2xpZW50QmFzZTo6cHJvY2Vzc0RpZENyYXNoKCkKICAgICAg
ICAgV0FSTigiV0FSTklORzogVGhlIHdlYiBwcm9jZXNzIGV4cGVyaWVuY2VkIGEgY3Jhc2ggb24g
JyVzJy5cbiIsIHVybC5kYXRhKCkpOwogCiAgICAgICAgIC8vIERpc3BsYXkgYW4gZXJyb3IgcGFn
ZQotICAgICAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKG1fdmlldy0+dmlldygpLCAiVGhl
IHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOworICAgICAgICBld2tf
dmlld19odG1sX3N0cmluZ19sb2FkKG1fdmlldy0+ZXZhc09iamVjdCgpLCAiVGhlIHdlYiBwcm9j
ZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcAppbmRleCA1
OTliZTM0Li5iODgxNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VMb2FkQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VMb2FkQ2xpZW50RWZsLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgUGFnZUxvYWRD
bGllbnRFZmw6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYsIFdLQmFja0Zvcndh
cmRMaXN0SXRlCiAgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50
SW5mbyktPnZpZXcoKTsKICAgICBBU1NFUlQodmlldyk7CiAKLSAgICBFd2tfQmFja19Gb3J3YXJk
X0xpc3QqIGxpc3QgPSBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQodmlldy0+dmlldygp
KTsKKyAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QgPSBld2tfdmlld19iYWNrX2Zvcndh
cmRfbGlzdF9nZXQodmlldy0+ZXZhc09iamVjdCgpKTsKICAgICBBU1NFUlQobGlzdCk7CiAgICAg
bGlzdC0+dXBkYXRlKGFkZGVkSXRlbSwgcmVtb3ZlZEl0ZW1zKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmluZGV4IDM4MTRlYzcuLjI0
MjJjYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xp
ZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVu
dEVmbC5jcHAKQEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6Y2xvc2Uo
V0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogdm9pZCBQYWdlVUlDbGllbnRFZmw6
OnRha2VGb2N1cyhXS1BhZ2VSZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgaXMgb25seSBhIHBhcnRpYWwgaW1wbGVtZW50
YXRpb24uCi0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT5tX3ZpZXctPnZpZXcoKSwgZmFsc2UpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT5ldmFzT2JqZWN0KCksIGZh
bHNlKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OmZvY3VzKFdLUGFnZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlD
bGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCB0cnVlKTsKKyAgICBldmFzX29i
amVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+ZXZh
c09iamVjdCgpLCB0cnVlKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnVuZm9jdXMoV0tQ
YWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGV2YXNfb2JqZWN0X2ZvY3Vz
X3NldCh0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT52aWV3KCksIGZhbHNl
KTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlldy0+ZXZhc09iamVjdCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50
RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBhbGVydFRleHQs
IFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZs
LmNwcAppbmRleCAwMDUwMjgzLi5lNmViNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAK
QEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1
bGxTY3JlZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICB3aWxsRW50ZXJGdWxsU2NyZWVuKCk7
Ci0gICAgRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZW50ZXJGdWxsU2NyZWVu
KCk7CisgICAgdG9Fd2tWaWV3KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOwogICAgIGRp
ZEVudGVyRnVsbFNjcmVlbigpOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgV2ViRnVsbFNj
cmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4oKQogCiAKICAgICB3aWxsRXhpdEZ1bGxT
Y3JlZW4oKTsKLSAgICBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX3dlYlZpZXcpLT5leGl0RnVs
bFNjcmVlbigpOworICAgIHRvRXdrVmlldyhtX3dlYlZpZXcpLT5leGl0RnVsbFNjcmVlbigpOwog
ICAgIGRpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggODUzZDQ3ZS4uZmEz
ZmFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0
b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNw
ZWN0b3JQcm94eUVmbC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkV3a1ZpZXcu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9w
cml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcu
aCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9FZmxJ
bnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTQsMTcgKzk0LDE4IEBAIFdlYlBh
Z2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgp
CiAgICAgLy8gR3JhY2VmdWxseSBmYWxsIGJhY2sgdG8gc29mdHdhcmUgaWYgZXZhc19nbCBlbmdp
bmUgaXMgbm90IGF2YWlsYWJsZS4KICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQogI2VuZGlm
Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgaW5p
dGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LCAwKTsKKyAgICBtX2luc3BlY3Rv
cldpbmRvdyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5p
dGlhbFdpbmRvd0hlaWdodCwgMCk7CiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4K
LSAgICBFd2tWaWV3KiBld2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQo
bV9pbnNwZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwg
dG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0g
ICAgaWYgKCFld2tWaWV3KQorICAgIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmID0gdG9BUEkocGFn
ZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gRXdrVmll
dzo6Y3JlYXRlRXZhc09iamVjdChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIGNv
bnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0Ojpk
ZWZhdWx0Q29udGV4dCgpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6Okxl
Z2FjeUJlaGF2aW9yKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yVmlldykKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBtX2luc3BlY3RvclZpZXcgPSBld2tWaWV3LT52aWV3KCk7Ci0KKyAgICBFd2tW
aWV3KiBld2tWaWV3ID0gdG9Fd2tWaWV3KG1faW5zcGVjdG9yVmlldyk7CisgICAgQVNTRVJUKGV3
a1ZpZXcpOwogICAgIGV3a1ZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1
bHQuZWRqIik7CiAKICAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gZXdrVmlldy0+c2V0dGlu
Z3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVBy
b3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZs
LmNwcAppbmRleCBhMzMyNzI0Li5kZTcwY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBFdmFzX09iamVjdCogV2ViUGFnZVByb3h5Ojp2aWV3V2lkZ2V0KCkKIHsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEJhc2UqPihtX3BhZ2VDbGllbnQpLT52
aWV3KCktPnZpZXcoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEJhc2UqPiht
X3BhZ2VDbGllbnQpLT52aWV3KCktPmV2YXNPYmplY3QoKTsKIH0KIAogU3RyaW5nIFdlYlBhZ2VQ
cm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiAvKmFwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudCovKQo=
</data>
<flag name="review"
          id="206161"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186724</attachid>
            <date>2013-02-05 16:34:01 -0800</date>
            <delta_ts>2013-02-06 01:56:32 -0800</delta_ts>
            <desc>patch v7</desc>
            <filename>bug108062_v7</filename>
            <type>text/plain</type>
            <size>73773</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDg2MjE1NzYxODYyYTMzMjkyYTJkZjk3Mzk3YmQxMjZlNDM1ZmQyOGUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAzMCAyMjoyODoxNiAyMDEzICswMjAwCgogICAgYnVnMTA4MDYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGM1NmJmNzUuLjdmYzk5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMTMt
MDItMDUgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV0syXSBFbmNhcHN1bGF0ZSBFd2sgVmlldyBldmFzIHNtYXJ0IG9i
amVjdCBjb2RlIGluc2lkZSBFd2tWaWV3IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgRXdrIFZpZXcgaW1wbGVtZW50YXRpb24gaXMgZW5j
YXBzdWxhdGVkIHdpdGhpbiBFd2tWaWV3IGNsYXNzLgorICAgICAgICBCZXNpZGVzIG11bHRpcGxl
IHJlZmFjdG9yaW5nIG9mIEV3ayBWaWV3IGV2YXMgc21hcnQgb2JqZWN0IGNvZGUgd2FzIG1hZGUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHA6CisgICAgICAgIChj
cmVhdGVXS1ZpZXcpOiAKKworICAgICAgICAgICAgQXV4IGZ1bmN0aW9uIHRvIHNoYXJlIFdLVmll
dyBjcmVhdGlvbiBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwOgorICAgICAgICAoc21hcnREYXRhQ2hhbmdlZCk6CisgICAgICAgIChkZWZh
dWx0U21hcnRDbGFzc0luc3RhbmNlKToKKyAgICAgICAgKHRvU21hcnREYXRhKToKKyAgICAgICAg
KEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKToKKyAgICAgICAgKEV3a1ZpZXc6OnRv
RXZhc09iamVjdCk6CisgICAgICAgIChFd2tWaWV3OjpzbWFydERhdGEpOgorCisgICAgICAgICAg
ICBSZW5hbWVkIGFuZCBtb3ZlZCBoZXJlIGZyb20gZXdrX3ZpZXcuCisKKyAgICAgICAgKEV3a1Zp
ZXdFdmVudEhhbmRsZXIpOgorICAgICAgICAoRXdrVmlld0V2ZW50SGFuZGxlcjo6c3Vic2NyaWJl
KToKKyAgICAgICAgKEV3a1ZpZXdFdmVudEhhbmRsZXI6OnVuc3Vic2NyaWJlKToKKyAgICAgICAg
KDo6aGFuZGxlRXZlbnQpOgorCisgICAgICAgICAgICBBZGRlZCBhIG5ldyB0ZW1wbGF0ZSBjbGFz
cyB0byBlbmNhcHN1bGF0ZSBFd2sgVmlldyBFdmFzIGV2ZW50cyBoYW5kbGluZy4KKworICAgICAg
ICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisKKyAg
ICAgICAgICAgIENvbnN0cnVjdG9yIGFuZCBkZXNjdHJ1Y3RvciBhcmUgcHJpdmF0ZS4KKworICAg
ICAgICAoRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdCk6CisKKyAgICAgICAgICAgIEFkZGVkIGZh
Y3RvcnkgZnVuY3Rpb24gZm9yIGV3ayB2aWV3IGV2YXMgb2JqZWN0cyBjcmVhdGlvbi4KKworICAg
ICAgICAoRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdEFkZCk6CisgICAgICAgIChFd2tWaWV3Ojpo
YW5kbGVFdmFzT2JqZWN0RGVsZXRlKToKKyAgICAgICAgKEV3a1ZpZXc6OmhhbmRsZUV2YXNPYmpl
Y3RSZXNpemUpOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdE1vdmUpOgorICAg
ICAgICAoRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdENhbGN1bGF0ZSk6CisgICAgICAgIChFd2tW
aWV3OjpoYW5kbGVFdmFzT2JqZWN0U2hvdyk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFdmFz
T2JqZWN0SGlkZSk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFdmFzT2JqZWN0Q29sb3JTZXQp
OgorCisgICAgICAgICAgICBFdmFzX1NtYXJ0X0NsYXNzIGludGVyZmFjZSBjYWxsYmFja3MgbW92
ZWQgaW50byB0aGUgRXdrVmlldyBjbGFzcy4KKworICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdr
Vmlld0ZvY3VzSW4pOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdrVmlld0ZvY3VzT3V0KToK
KyAgICAgICAgKEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZVdoZWVsKToKKyAgICAgICAgKEV3
a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZURvd24pOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxl
RXdrVmlld01vdXNlVXApOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlRXdrVmlld01vdXNlTW92
ZSk6CisgICAgICAgIChFd2tWaWV3OjpoYW5kbGVFd2tWaWV3S2V5RG93bik6CisgICAgICAgIChF
d2tWaWV3OjpoYW5kbGVFd2tWaWV3S2V5VXApOgorCisgICAgICAgICAgICBFd2tfVmlld19TbWFy
dF9DbGFzcyBpbnRlcmZhY2UgY2FsbGJhY2sgbW92ZWQgaW50byB0aGUgRXdrVmlldyBjbGFzcy4K
KworICAgICAgICAoRXdrVmlldzo6aGFuZGxlVG91Y2hEb3duKToKKyAgICAgICAgKEV3a1ZpZXc6
OmhhbmRsZVRvdWNoVXApOgorICAgICAgICAoRXdrVmlldzo6aGFuZGxlVG91Y2hNb3ZlKToKKwor
ICAgICAgICAgICAgUmVuYW1lZC4KKworICAgICAgICAodG9Fd2tWaWV3KTogCisKKyAgICAgICAg
ICAgIEF1eCBmdW5jdGlvbiB0byBnZXQgdGhlIEV3a1ZpZXcgaW5zdGFuY2UgZnJvbWV2YXMgb2Jq
ZWN0LgorCisgICAgICAgIChpc1ZpZXdFdmFzT2JqZWN0KToKKworICAgICAgICAgICAgQXV4IGZ1
bmN0aW9uIHRvIGNoZWNrIHRoYXQgZ2l2ZW4gZXZhcyBvYmplY3QgaXMgZXdrIHZpZXcuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChFd2tWaWV3Ojpl
dmFzT2JqZWN0KToKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldCk6Cisg
ICAgICAgIChld2tfdmlld19zbWFydF9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfYWRkX3dpdGhf
Y29udGV4dCk6CisgICAgICAgIChld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KToKKyAgICAgICAg
KEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQpOgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBSZW1vdmVkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hv
dCk6CisgICAgICAgICogVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9u
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJm
b3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlzdG9yeUNsaWVu
dEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4
dEhpc3RvcnlDbGllbnRFZmw6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRCYXNlOjpwcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUxv
YWRDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbDo6ZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VVSUNs
aWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dGFrZUZvY3Vz
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpmb2N1cyk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6dW5mb2N1cyk6CisgICAgICAgICogVUlQcm9jZXNzL2Vm
bC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6dmlld1dpZGdldCk6CisKKyAgICAgICAgICAgICBVcGRhdGVkIGR1ZSB0
byBjaGFuZ2VzIGluIEV3a1ZpZXcgaW50ZXJmYWNlLgorCiAyMDEzLTAyLTA0ICBHd2FuZyBZb29u
IEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29yZGluYXRlZCBH
cmFwaGljcyA6IGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtIGRvZXMgbm90IGRvIGFueXRo
aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmlu
ZGV4IDljMWQzMWQuLjY3YzkzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKQEAgLTIyLDI3ICsyMiwyOSBAQAogCiAjaW5jbHVkZSAiRXdrVmll
dy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0ltYWdlQ2Fpcm8uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYpCitzdGF0aWMgaW5saW5lIFdLVmlld1JlZiBjcmVhdGVXS1Zp
ZXcoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiB7Ci0gICAgRXdr
VmlldyogZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFn
ZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYgKCFld2tWaWV3KQor
ICAgIFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6
OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7CisgICAg
RXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZh
cywgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CisgICAgaWYgKCFldmFzT2JqZWN0
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+
KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdL
Vmlld1JlZj4oV0tSZXRhaW4odG9Fd2tWaWV3KGV2YXNPYmplY3QpLT53a1ZpZXcoKSkpOwogfQog
Ci1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK1dLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBl
d2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmll
dzo6RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBpZiAoIWV3a1ZpZXcpCi0gICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBS
ZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKK30KIAotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXS1ZpZXdSZWY+KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7CitXS1ZpZXdSZWYgV0tW
aWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK3sKKyAgICByZXR1cm4gY3JlYXRl
V0tWaWV3KGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0
QmVoYXZpb3IpOwogfQogCiB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYp
CkBAIC03Nyw2ICs3OSw2IEBAIEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmll
d1JlZiB2aWV3UmVmKQogCiBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1Jl
ZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09i
amVjdCh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgRXdrVmlldyogZXdrVmll
dyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CiAgICAgcmV0dXJu
IFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdl
dCgpLCAwIC8qIG9wdGlvbnMgKi8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmNwcAppbmRleCAwNDY2OTRkNy4uMjhkY2FhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTI3LDYgKzI3LDkgQEAKICNp
bmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiRm9ybUNsaWVudEVmbC5oIgogI2lu
Y2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJv
YXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
TmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5j
bHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudExlZ2Fj
eUltcGwuaCIKQEAgLTU3LDcgKzYwLDYgQEAKICNpbmNsdWRlICJld2tfc2VjdXJpdHlfb3JpZ2lu
X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3NfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a192aWV3LmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNp
bmNsdWRlIDxFY29yZV9YLmg+CkBAIC02Niw2ICs2OCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZUNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAogI2lmIEVOQUJMRShWSUJSQVRJT04pCiAjaW5jbHVkZSAiVmlicmF0aW9uQ2xpZW50
RWZsLmgiCkBAIC04Myw0MyArODYsMTUxIEBAIHVzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJh
Y2tzOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
CitzdGF0aWMgY29uc3QgY2hhciBzbWFydENsYXNzTmFtZVtdID0gIkVXSzJfVmlldyI7CiBzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRDdXJzb3JTaXplID0gMTY7CiAKLXR5cGVkZWYgSGFzaE1hcDxX
S1BhZ2VSZWYsIEV2YXNfT2JqZWN0Kj4gUGFnZVZpZXdNYXA7CisvLyBBdXhpbGlhcnkgZnVuY3Rp
b25zLgogCi1zdGF0aWMgaW5saW5lIFBhZ2VWaWV3TWFwJiBwYWdlVmlld01hcCgpCitzdGF0aWMg
aW5saW5lIHZvaWQgc21hcnREYXRhQ2hhbmdlZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYWdlVmlld01hcCwgbWFwLCAoKSk7Ci0g
ICAgcmV0dXJuIG1hcDsKKyAgICBBU1NFUlQoc21hcnREYXRhKTsKKworICAgIGlmIChzbWFydERh
dGEtPmNoYW5nZWQuYW55KQorICAgICAgICByZXR1cm47CisKKyAgICBzbWFydERhdGEtPmNoYW5n
ZWQuYW55ID0gdHJ1ZTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YS0+
c2VsZik7Cit9CisKK3N0YXRpYyBFdmFzX1NtYXJ0KiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNl
KCkKK3sKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oc21hcnRDbGFzc05hbWUpOworICAgIHN0YXRpYyBF
dmFzX1NtYXJ0KiBzbWFydCA9IDA7CisKKyAgICBpZiAoIXNtYXJ0KSB7CisgICAgICAgIEV3a1Zp
ZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKGFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19z
bWFydF9jbGFzc19uZXcoJmFwaS5zYyk7CisgICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OworfQor
CitzdGF0aWMgaW5saW5lIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHRvU21hcnREYXRhKEV2YXNfT2Jq
ZWN0KiBldmFzT2JqZWN0KQoreworICAgIEFTU0VSVChldmFzT2JqZWN0ICYmIGlzVmlld0V2YXNP
YmplY3QoZXZhc09iamVjdCkpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChldmFzT2JqZWN0KSk7CiB9CiAK
LXZvaWQgRXdrVmlldzo6YWRkVG9QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3KQorLy8gRXdrVmll
d0V2ZW50SGFuZGxlciBpbXBsZW1lbnRhdGlvbi4KKwordGVtcGxhdGUgPEV2YXNfQ2FsbGJhY2tf
VHlwZSBFdmVudFR5cGU+CitjbGFzcyBFd2tWaWV3RXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdm9pZCBzdWJzY3JpYmUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgewor
ICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXZhc09iamVjdCwgRXZlbnRU
eXBlLCBoYW5kbGVFdmVudCwgdG9TbWFydERhdGEoZXZhc09iamVjdCkpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHVuc3Vic2NyaWJlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIHsK
KyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKGV2YXNPYmplY3QsIEV2ZW50
VHlwZSwgaGFuZGxlRXZlbnQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2ZW50
KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Cit9Owor
Cit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9V
U0VfRE9XTj46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZv
aWQqIGV2ZW50SW5mbykKIHsKLSAgICBQYWdlVmlld01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHBh
Z2VWaWV3TWFwKCkuYWRkKHZpZXctPndrUGFnZSgpLCB2aWV3LT52aWV3KCkpOwotICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OworICAgIGlmIChzbWFydERhdGEtPmFwaS0+bW91c2VfZG93bikKKyAgICAgICAgc21hcnREYXRh
LT5hcGktPm1vdXNlX2Rvd24oc21hcnREYXRhLCBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNl
X0Rvd24qPihldmVudEluZm8pKTsKIH0KIAotdm9pZCBFd2tWaWV3OjpyZW1vdmVGcm9tUGFnZVZp
ZXdNYXAoRXdrVmlldyogdmlldykKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRs
ZXI8RVZBU19DQUxMQkFDS19NT1VTRV9VUD46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMq
LCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBBU1NFUlQocGFnZVZpZXdN
YXAoKS5jb250YWlucyh2aWV3LT53a1BhZ2UoKSkpOwotICAgIHBhZ2VWaWV3TWFwKCkucmVtb3Zl
KHZpZXctPndrUGFnZSgpKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0
YS0+YXBpLT5tb3VzZV91cCkKKyAgICAgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX3VwKHNtYXJ0
RGF0YSwgc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbykpOwogfQog
Ci1jb25zdCBFdmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBX
S1BhZ2VSZWYgcGFnZSkKK3RlbXBsYXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZB
U19DQUxMQkFDS19NT1VTRV9NT1ZFPjo6aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEFTU0VSVChwYWdlKTsKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKQorICAg
ICAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfbW92ZShzbWFydERhdGEsIHN0YXRpY19jYXN0PEV2
YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50SW5mbykpOworfQorCit0ZW1wbGF0ZSA8Pgordm9p
ZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4+OjpoYW5kbGVFdmVu
dCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19pbikKKyAgICAgICAgc21h
cnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0YSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lk
IEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19GT0NVU19PVVQ+OjpoYW5kbGVFdmVu
dCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQpCisgICAgICAgIHNt
YXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQoc21hcnREYXRhKTsKK30KKwordGVtcGxhdGUgPD4KK3Zv
aWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMPjo6aGFuZGxl
RXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQor
eworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19W
aWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBpZiAoc21hcnREYXRhLT5hcGktPm1vdXNlX3do
ZWVsKQorICAgICAgICBzbWFydERhdGEtPmFwaS0+bW91c2Vfd2hlZWwoc21hcnREYXRhLCBzdGF0
aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKSk7Cit9CisKK3RlbXBs
YXRlIDw+Cit2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19LRVlfRE9XTj46
OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5r
ZXlfZG93bikKKyAgICAgICAgc21hcnREYXRhLT5hcGktPmtleV9kb3duKHNtYXJ0RGF0YSwgc3Rh
dGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbykpOworfQogCi0gICAgcmV0
dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOwordGVtcGxhdGUgPD4KK3ZvaWQgRXdrVmlld0V2
ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9VUD46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEs
IEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZGF0YSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXApCisgICAgICAgIHNtYXJ0RGF0
YS0+YXBpLT5rZXlfdXAoc21hcnREYXRhLCBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+
KGV2ZW50SW5mbykpOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVy
PEVWQVNfQ0FMTEJBQ0tfU0hPVz46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFz
X09iamVjdCosIHZvaWQqKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICB0b0V3a1ZpZXco
c21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3
SXNWaXNpYmxlKTsKIH0KIAotRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFz
c1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KHZpZXcpCit0ZW1wbGF0ZSA8
Pgordm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46OmhhbmRsZUV2
ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKKworICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBWaWV3SXNWaXNpYmxlIGhlcmUu
IHZpZXdTdGF0ZURpZENoYW5nZSgpIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkg
c2V0dGluZyB0aGUgdmlzaWJpbGl0eSB0byBWaXNpYmxlIG9yIEhpZGRlbgorICAgIC8vIGRlcGVu
ZGluZyBvbiB3aGF0IFdlYlBhZ2VQcm94eTo6aXNWaWV3VmlzaWJsZSgpIHJldHVybnMsIHRoaXMg
c2ltcGx5IHRyaWdnZXJzIHRoZSBwcm9jZXNzLgorICAgIHRvRXdrVmlldyhzbWFydERhdGEpLT5w
YWdlKCktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwor
fQorCisvLyBFd2tWaWV3IGltcGxlbWVudGF0aW9uLgorCitFd2tWaWV3OjpFd2tWaWV3KEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFz
T2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNl
KQogI2VuZGlmCiAgICAgLCBtX3BhZ2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9y
ID8gUGFnZUNsaWVudERlZmF1bHRJbXBsOjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5
SW1wbDo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV93ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3
KHRvSW1wbChtX2NvbnRleHQtPndrQ29udGV4dCgpKSwgbV9wYWdlQ2xpZW50LmdldCgpLCBwYWdl
R3JvdXAsIHZpZXcpKSkKKyAgICAsIG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyh0b0lt
cGwobV9jb250ZXh0LT53a0NvbnRleHQoKSksIG1fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBh
Z2VHcm91cCksIGV2YXNPYmplY3QpKSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRD
bGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9s
aWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlD
bGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKQEAgLTE2Niw5ICsyNzcsNyBAQCBFd2tWaWV3OjpFd2tW
aWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdl
YlBhZ2VHcm91cAogICAgIEV3a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250
ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKICAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsKIAotICAg
IGljb25EYXRhYmFzZS0+d2F0Y2hDaGFuZ2VzKEljb25DaGFuZ2VDYWxsYmFja0RhdGEoRXdrVmll
dzo6b25GYXZpY29uQ2hhbmdlZCwgdGhpcykpOwotCi0gICAgRXdrVmlldzo6YWRkVG9QYWdlVmll
d01hcCh0aGlzKTsKKyAgICBpY29uRGF0YWJhc2UtPndhdGNoQ2hhbmdlcyhJY29uQ2hhbmdlQ2Fs
bGJhY2tEYXRhKEV3a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkLCB0aGlzKSk7CiB9CiAKIEV3
a1ZpZXc6On5Fd2tWaWV3KCkKQEAgLTE3NywyMyArMjg2LDc4IEBAIEV3a1ZpZXc6On5Fd2tWaWV3
KCkKICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2
aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CiAKLSAgICBpY29uRGF0
YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOworICAgIGlj
b25EYXRhYmFzZS0+dW53YXRjaENoYW5nZXMoRXdrVmlldzo6aGFuZGxlRmF2aWNvbkNoYW5nZWQp
OworfQogCi0gICAgRXdrVmlldzo6cmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKHRoaXMpOworRXZhc19P
YmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0
KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnQsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChj
b250ZXh0LCAwKTsKKworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rf
c21hcnRfYWRkKGNhbnZhcywgc21hcnQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChldmFzT2JqZWN0LCAwKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIGlmICghc21hcnREYXRhKSB7CisgICAg
ICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgQVNTRVJUKCFzbWFydERhdGEtPnByaXYpOworCisgICAgLy8gRGVmYXVsdCBXZWJQ
YWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdl
R3JvdXBSZWYgaXMgMCwKKyAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVy
ZS4KKyAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0
LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gZXZhc09iamVjdDsKIH0KIAot
RXdrX1ZpZXdfU21hcnRfRGF0YSogRXdrVmlldzo6c21hcnREYXRhKCkgY29uc3QKK0V2YXNfT2Jq
ZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhh
dmlvciBiZWhhdmlvcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG1fZXZhc09iamVjdCkpOworICAgIHJl
dHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgp
LCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKIH0KIAotRXdrVmlldyogRXdrVmll
dzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpCitib29sIEV3a1ZpZXc6
OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJiBhcGkpCiB7Ci0g
ICAgQVNTRVJUKHZpZXcpOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KHZpZXcp
KTsKLSAgICBBU1NFUlQoc2QpOwotICAgIEFTU0VSVChzZC0+cHJpdik7Ci0gICAgcmV0dXJuIHNk
LT5wcml2OworICAgIGlmIChhcGkudmVyc2lvbiAhPSBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJT
SU9OKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIkV3a19WaWV3X1NtYXJ0X0NsYXNzICVwIGlz
IHZlcnNpb24gJWx1IHdoaWxlICVsdSB3YXMgZXhwZWN0ZWQuIiwKKyAgICAgICAgICAgICZhcGks
IGFwaS52ZXJzaW9uLCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcGFyZW50U21hcnRDbGFzcy5hZGQpCisgICAg
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZwYXJlbnRTbWFydENsYXNz
KTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZhcGkuc2MpOwor
CisgICAgLy8gU2V0IEV2YXNfU21hcnRfQ2xhc3MgY2FsbGJhY2tzLgorICAgIGFwaS5zYy5hZGQg
PSBoYW5kbGVFdmFzT2JqZWN0QWRkOworICAgIGFwaS5zYy5kZWwgPSBoYW5kbGVFdmFzT2JqZWN0
RGVsZXRlOworICAgIGFwaS5zYy5tb3ZlID0gaGFuZGxlRXZhc09iamVjdE1vdmU7CisgICAgYXBp
LnNjLnJlc2l6ZSA9IGhhbmRsZUV2YXNPYmplY3RSZXNpemU7CisgICAgYXBpLnNjLnNob3cgPSBo
YW5kbGVFdmFzT2JqZWN0U2hvdzsKKyAgICBhcGkuc2MuaGlkZSA9IGhhbmRsZUV2YXNPYmplY3RI
aWRlOworICAgIGFwaS5zYy5jb2xvcl9zZXQgPSBoYW5kbGVFdmFzT2JqZWN0Q29sb3JTZXQ7Cisg
ICAgYXBpLnNjLmNhbGN1bGF0ZSA9IGhhbmRsZUV2YXNPYmplY3RDYWxjdWxhdGU7CisgICAgYXBp
LnNjLmRhdGEgPSBzbWFydENsYXNzTmFtZTsgLy8gSXQgaXMgdXNlZCBmb3IgdHlwZSBjaGVja2lu
Zy4KKworICAgIC8vIFNldCBFd2tfVmlld19TbWFydF9DbGFzcyBjYWxsYmFja3MuCisgICAgYXBp
LmZvY3VzX2luID0gaGFuZGxlRXdrVmlld0ZvY3VzSW47CisgICAgYXBpLmZvY3VzX291dCA9IGhh
bmRsZUV3a1ZpZXdGb2N1c091dDsKKyAgICBhcGkubW91c2Vfd2hlZWwgPSBoYW5kbGVFd2tWaWV3
TW91c2VXaGVlbDsKKyAgICBhcGkubW91c2VfZG93biA9IGhhbmRsZUV3a1ZpZXdNb3VzZURvd247
CisgICAgYXBpLm1vdXNlX3VwID0gaGFuZGxlRXdrVmlld01vdXNlVXA7CisgICAgYXBpLm1vdXNl
X21vdmUgPSBoYW5kbGVFd2tWaWV3TW91c2VNb3ZlOworICAgIGFwaS5rZXlfZG93biA9IGhhbmRs
ZUV3a1ZpZXdLZXlEb3duOworICAgIGFwaS5rZXlfdXAgPSBoYW5kbGVFd2tWaWV3S2V5VXA7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgRXZhc19PYmplY3QqIEV3a1ZpZXc6OnRvRXZh
c09iamVjdChXS1BhZ2VSZWYgcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisgICAgcmV0dXJu
IHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpOwogfQogCiBXS1BhZ2VSZWYgRXdrVmlldzo6d2tQ
YWdlKCkgY29uc3QKQEAgLTM1Nyw2ICs1MjEsMTEgQEAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KiBFd2tWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQogfQogI2VuZGlmCiAKK2lubGlu
ZSBFd2tfVmlld19TbWFydF9EYXRhKiBFd2tWaWV3OjpzbWFydERhdGEoKSBjb25zdAoreworICAg
IHJldHVybiB0b1NtYXJ0RGF0YShtX2V2YXNPYmplY3QpOworfQorCiB2b2lkIEV3a1ZpZXc6OmRp
c3BsYXlUaW1lckZpcmVkKFRpbWVyPEV3a1ZpZXc+KikKIHsKICNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCkBAIC01NjAsMTQgKzcyOSwxMyBAQCB2b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZl
bnRzRW5hYmxlZChib29sIGVuYWJsZWQpCiAKICAgICBtX21vdXNlRXZlbnRzRW5hYmxlZCA9IGVu
YWJsZWQ7CiAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QgPSBzbWFydERhdGEoKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRk
KG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvbk1vdXNlRG93biwgc2Qp
OwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBF
VkFTX0NBTExCQUNLX01PVVNFX1VQLCBvbk1vdXNlVXAsIHNkKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9N
T1ZFLCBvbk1vdXNlTW92ZSwgc2QpOworICAgICAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNf
Q0FMTEJBQ0tfTU9VU0VfRE9XTj46OnN1YnNjcmliZShtX2V2YXNPYmplY3QpOworICAgICAgICBF
d2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVA+OjpzdWJzY3JpYmUobV9l
dmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01P
VVNFX01PVkU+OjpzdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKICAgICB9IGVsc2UgewotICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExC
QUNLX01PVVNFX0RPV04sIG9uTW91c2VEb3duKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgb25Nb3Vz
ZVVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVj
dCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSk7CisgICAgICAgIEV3a1Zp
ZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VTRV9ET1dOPjo6dW5zdWJzY3JpYmUobV9l
dmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX01P
VVNFX1VQPjo6dW5zdWJzY3JpYmUobV9ldmFzT2JqZWN0KTsKKyAgICAgICAgRXdrVmlld0V2ZW50
SGFuZGxlcjxFVkFTX0NBTExCQUNLX01PVVNFX01PVkU+Ojp1bnN1YnNjcmliZShtX2V2YXNPYmpl
Y3QpOwogICAgIH0KIH0KIApAQCAtNTg2LDE5ICs3NTQsMTkgQEAgdm9pZCBFd2tWaWV3OjpzZXRU
b3VjaEV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAvLyBzdXBwb3J0cyB0aGUg
dG91Y2ggZXZlbnRzLgogICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk3Nzg1IGZvciBkZXRhaWxzLgogICAgICAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFj
a19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3du
LCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmpl
Y3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uVG91Y2hVcCwgc2QpOwotICAgICAgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01P
VVNFX01PVkUsIG9uVG91Y2hNb3ZlLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2Nh
bGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3Vj
aERvd24sIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZh
c09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9VUCwgb25Ub3VjaFVwLCBzZCk7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJB
Q0tfTVVMVElfTU9WRSwgb25Ub3VjaE1vdmUsIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBo
YW5kbGVUb3VjaERvd24sIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tf
YWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgaGFuZGxlVG91Y2hVcCwg
c2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0
LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIGhhbmRsZVRvdWNoTW92ZSwgc2QpOworICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExC
QUNLX01VTFRJX0RPV04sIGhhbmRsZVRvdWNoRG93biwgc2QpOworICAgICAgICBldmFzX29iamVj
dF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX1VQ
LCBoYW5kbGVUb3VjaFVwLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNr
X2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgaGFuZGxlVG91Y2hN
b3ZlLCBzZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJh
Y2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvblRvdWNoRG93
bik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3Qs
IEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uVG91Y2hVcCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9W
RSwgb25Ub3VjaE1vdmUpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwo
bV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duKTsKLSAg
ICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19D
QUxMQkFDS19NVUxUSV9VUCwgb25Ub3VjaFVwKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBvblRv
dWNoTW92ZSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNP
YmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwgaGFuZGxlVG91Y2hEb3duKTsKKyAgICAg
ICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxM
QkFDS19NT1VTRV9VUCwgaGFuZGxlVG91Y2hVcCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50
X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgaGFu
ZGxlVG91Y2hNb3ZlKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1f
ZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9ET1dOLCBoYW5kbGVUb3VjaERvd24pOwor
ICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFT
X0NBTExCQUNLX01VTFRJX1VQLCBoYW5kbGVUb3VjaFVwKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZF
LCBoYW5kbGVUb3VjaE1vdmUpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtOTA5LDcgKzEwNzcsNyBA
QCBXS1BhZ2VSZWYgRXdrVmlldzo6Y3JlYXRlTmV3UGFnZShQYXNzUmVmUHRyPEV3a1VybFJlcXVl
c3Q+IHJlcXVlc3QsIFdLRGljdGlvbmFyeQogICAgIGlmICghbmV3RXdrVmlldykKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBFd2tWaWV3KiBuZXdWaWV3SW1wbCA9IEV3a1ZpZXc6OmZyb21FdmFz
T2JqZWN0KG5ld0V3a1ZpZXcpOworICAgIEV3a1ZpZXcqIG5ld1ZpZXdJbXBsID0gdG9Fd2tWaWV3
KG5ld0V3a1ZpZXcpOwogICAgIEFTU0VSVChuZXdWaWV3SW1wbCk7CiAKICAgICBuZXdWaWV3SW1w
bC0+bV93aW5kb3dGZWF0dXJlcyA9IGV3a1dpbmRvd0ZlYXR1cmVzOwpAQCAtOTI4LDMxICsxMDk2
LDIxMiBAQCB2b2lkIEV3a1ZpZXc6OmNsb3NlKCkKICAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uo
c2QpOwogfQogCi12b2lkIEV3a1ZpZXc6Om9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc09i
amVjdEFkZChFdmFzX09iamVjdCogZXZhc09iamVjdCkKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNl
X0Rvd24qIGRvd25FdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2
ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2Vf
ZG93bik7Ci0gICAgc2QtPmFwaS0+bW91c2VfZG93bihzZCwgZG93bkV2ZW50KTsKKyAgICBjb25z
dCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChldmFzT2Jq
ZWN0KTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFy
dF9jbGFzc19nZXQoc21hcnQpOworICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRDbGFz
cyk7CisgICAgQVNTRVJUKGFwaSk7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEgPSB0b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsKKworICAgIGlmICghc21hcnREYXRhKSB7Cisg
ICAgICAgIC8vIEFsbG9jYXRpbmcgd2l0aCAnY2FsbG9jJyBhcyB0aGUgQVBJIGNvbnRyYWN0IGlz
IHRoYXQgaXQgc2hvdWxkIGJlIGRlbGV0ZWQgd2l0aCAnZnJlZSgpJy4KKyAgICAgICAgc21hcnRE
YXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2Yo
RXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9z
ZXQoZXZhc09iamVjdCwgc21hcnREYXRhKTsKKyAgICB9CisKKyAgICBzbWFydERhdGEtPnNlbGYg
PSBldmFzT2JqZWN0OworICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOworCisgICAgcGFyZW50U21h
cnRDbGFzcy5hZGQoZXZhc09iamVjdCk7CisKKyAgICBzbWFydERhdGEtPnByaXYgPSAwOyAvLyBX
aWxsIGJlIGluaXRpYWxpemVkIGZ1cnRoZXIuCisKKyAgICAvLyBDcmVhdGUgZXZhc19vYmplY3Rf
aW1hZ2UgdG8gZHJhdyB3ZWIgY29udGVudHMuCisgICAgc21hcnREYXRhLT5pbWFnZSA9IGV2YXNf
b2JqZWN0X2ltYWdlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgZXZhc19vYmplY3Rf
aW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIGZhbHNlKTsKKyAgICBldmFzX29iamVj
dF9pbWFnZV9maWxsZWRfc2V0KHNtYXJ0RGF0YS0+aW1hZ2UsIHRydWUpOworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5pbWFnZSwgZXZhc09iamVjdCk7CisgICAg
ZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmltYWdlKTsKKworICAgIEV3a1ZpZXdFdmVudEhh
bmRsZXI8RVZBU19DQUxMQkFDS19GT0NVU19JTj46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAg
ICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VUPjo6c3Vic2NyaWJl
KGV2YXNPYmplY3QpOworICAgIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19NT1VT
RV9XSEVFTD46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVy
PEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04+OjpzdWJzY3JpYmUoZXZhc09iamVjdCk7CisgICAgRXdr
Vmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0tFWV9VUD46OnN1YnNjcmliZShldmFzT2Jq
ZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfU0hPVz46OnN1YnNj
cmliZShldmFzT2JqZWN0KTsKKyAgICBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tf
SElERT46OnN1YnNjcmliZShldmFzT2JqZWN0KTsKIH0KIAotdm9pZCBFd2tWaWV3Ojpvbk1vdXNl
VXAodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQordm9p
ZCBFd2tWaWV3OjpoYW5kbGVFdmFzT2JqZWN0RGVsZXRlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0
KQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFz
X0V2ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpLT5tb3VzZV91cCk7Ci0gICAgc2QtPmFwaS0+bW91c2VfdXAoc2QsIHVwRXZl
bnQpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2
YXNPYmplY3QpOworICAgIGlmIChzbWFydERhdGEpIHsKKyAgICAgICAgQVNTRVJUKHNtYXJ0RGF0
YS0+cHJpdik7IC8vIHNtYXJ0RGF0YS0+cHJpdiBpcyBFd2tWaWV3IGluc3RhbmNlLgorICAgICAg
ICBkZWxldGUgc21hcnREYXRhLT5wcml2OworICAgIH0KKworICAgIHBhcmVudFNtYXJ0Q2xhc3Mu
ZGVsKGV2YXNPYmplY3QpOwogfQogCi12b2lkIEV3a1ZpZXc6Om9uTW91c2VNb3ZlKHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3ZvaWQgRXdrVmlldzo6
aGFuZGxlRXZhc09iamVjdFJlc2l6ZShFdmFzX09iamVjdCogZXZhc09iamVjdCwgRXZhc19Db29y
ZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Nb3Zl
KiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVudElu
Zm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX21vdmUp
OwotICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIG1vdmVFdmVudCk7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CisgICAgQVNT
RVJUKHNtYXJ0RGF0YSk7CisKKyAgICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5pbWFn
ZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc21hcnRE
YXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9z
ZXQoc21hcnREYXRhLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBzbWFydERh
dGEtPmNoYW5nZWQuc2l6ZSA9IHRydWU7CisgICAgc21hcnREYXRhQ2hhbmdlZChzbWFydERhdGEp
OworfQorCit2b2lkIEV3a1ZpZXc6OmhhbmRsZUV2YXNPYmplY3RNb3ZlKEV2YXNfT2JqZWN0KiBl
dmFzT2JqZWN0LCBFdmFzX0Nvb3JkIC8qeCovLCBFdmFzX0Nvb3JkIC8qeSovKQoreworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOwor
ICAgIEFTU0VSVChzbWFydERhdGEpOworCisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9u
ID0gdHJ1ZTsKKyAgICBzbWFydERhdGFDaGFuZ2VkKHNtYXJ0RGF0YSk7Cit9CisKK3ZvaWQgRXdr
Vmlldzo6aGFuZGxlRXZhc09iamVjdENhbGN1bGF0ZShFdmFzX09iamVjdCogZXZhc09iamVjdCkK
K3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0RGF0YShldmFz
T2JqZWN0KTsKKyAgICBBU1NFUlQoc21hcnREYXRhKTsKKworICAgIEV3a1ZpZXcqIHZpZXcgPSB0
b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBzbWFydERhdGEt
PmNoYW5nZWQuYW55ID0gZmFsc2U7CisKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWln
aHQ7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV2YXNPYmplY3QsICZ4LCAmeSwgJndp
ZHRoLCAmaGVpZ2h0KTsKKworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24pIHsK
KyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIHNt
YXJ0RGF0YS0+dmlldy54ID0geDsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LnkgPSB5OworICAg
ICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+aW1hZ2UsIHgsIHkpOworICAgIH0KKwor
ICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSkgeworICAgICAgICBzbWFydERhdGEtPmNo
YW5nZWQuc2l6ZSA9IGZhbHNlOworICAgICAgICBzbWFydERhdGEtPnZpZXcudyA9IHdpZHRoOwor
ICAgICAgICBzbWFydERhdGEtPnZpZXcuaCA9IGhlaWdodDsKKworICAgICAgICBpZiAodmlldy0+
cGFnZSgpLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICAgICAgdmlldy0+cGFnZSgpLT5kcmF3aW5n
QXJlYSgpLT5zZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCksIEludFNpemUoKSk7CisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIHZpZXctPnNldE5lZWRzU3Vy
ZmFjZVJlc2l6ZSgpOworI2VuZGlmCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAg
ICAgIHZpZXctPnBhZ2VDbGllbnQoKS0+dXBkYXRlVmlld3BvcnRTaXplKCk7CisjZW5kaWYKKyAg
ICB9Cit9CisKK3ZvaWQgRXdrVmlldzo6aGFuZGxlRXZhc09iamVjdFNob3coRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gdG9T
bWFydERhdGEoZXZhc09iamVjdCk7CisgICAgQVNTRVJUKHNtYXJ0RGF0YSk7CisKKyAgICBpZiAo
ZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpKQorICAgICAg
ICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKTsKKyAgICBldmFzX29i
amVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOworfQorCit2b2lkIEV3a1ZpZXc6OmhhbmRsZUV2
YXNPYmplY3RIaWRlKEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOworICAgIEFTU0VS
VChzbWFydERhdGEpOworCisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmJhc2UuY2xp
cHBlcik7CisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmltYWdlKTsKK30KKwordm9p
ZCBFd2tWaWV3OjpoYW5kbGVFdmFzT2JqZWN0Q29sb3JTZXQoRXZhc19PYmplY3QqIGV2YXNPYmpl
Y3QsIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKK3sKKyAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsKKyAg
ICBBU1NFUlQoc21hcnREYXRhKTsKKworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b0V3a1ZpZXcoc21h
cnREYXRhKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBhbHBoYSA9IGNsYW1wVG8oYWxwaGEs
IDAsIDI1NSk7CisgICAgcmVkID0gY2xhbXBUbyhyZWQsIDAsIGFscGhhKTsKKyAgICBncmVlbiA9
IGNsYW1wVG8oZ3JlZW4sIDAsIGFscGhhKTsKKyAgICBibHVlID0gY2xhbXBUbyhibHVlLCAwLCBh
bHBoYSk7CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFn
ZSwgYWxwaGEgPCAyNTUpOworICAgIHZpZXctPnBhZ2UoKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKHJl
ZCB8fCBncmVlbiB8fCBibHVlKTsKKyAgICB2aWV3LT5wYWdlKCktPnNldERyYXdzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKGFscGhhIDwgMjU1KTsKKworICAgIHBhcmVudFNtYXJ0Q2xhc3MuY29sb3Jf
c2V0KGV2YXNPYmplY3QsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKworRWluYV9Cb29s
IEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdGb2N1c0luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKK3sKKyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRD
aGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2lu
ZG93SXNBY3RpdmUpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6
aGFuZGxlRXdrVmlld0ZvY3VzT3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKK3sK
KyAgICB0b0V3a1ZpZXcoc21hcnREYXRhKS0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2Vi
UGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3Rp
dmUpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdr
Vmlld01vdXNlV2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFz
X0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQoreworICAgIEV3a1ZpZXcqIHNlbGYgPSB0
b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5wYWdlKCktPmhhbmRsZVdoZWVsRXZlbnQo
TmF0aXZlV2ViV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2NlbmUo
KSwgc2VsZi0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitF
aW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdrVmlld01vdXNlRG93bihFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KQor
eworICAgIEV3a1ZpZXcqIHNlbGYgPSB0b0V3a1ZpZXcoc21hcnREYXRhKTsKKyAgICBzZWxmLT5w
YWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChkb3duRXZlbnQsIHNl
bGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0VpbmFfQm9vbCBFd2tWaWV3OjpoYW5kbGVFd2tWaWV3TW91
c2VVcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfVXAqIHVwRXZlbnQpCit7CisgICAgRXdrVmlldyogc2VsZiA9IHRvRXdrVmlldyhzbWFydERh
dGEpOworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2
ZW50KHVwRXZlbnQsIHNlbGYtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBzZWxmLT50cmFuc2Zvcm1U
b1NjcmVlbigpKSk7CisKKyAgICBpZiAoSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhv
ZENvbnRleHQgPSBzZWxmLT5pbnB1dE1ldGhvZENvbnRleHQoKSkKKyAgICAgICAgaW5wdXRNZXRo
b2RDb250ZXh0LT5oYW5kbGVNb3VzZVVwRXZlbnQodXBFdmVudCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworRWluYV9Cb29sIEV3a1ZpZXc6OmhhbmRsZUV3a1ZpZXdNb3VzZU1vdmUoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1v
dmVFdmVudCkKK3sKKyAgICBFd2tWaWV3KiBzZWxmID0gdG9Fd2tWaWV3KHNtYXJ0RGF0YSk7Cisg
ICAgc2VsZi0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQobW92
ZUV2ZW50LCBzZWxmLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgc2VsZi0+dHJhbnNmb3JtVG9TY3Jl
ZW4oKSkpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxl
RXdrVmlld0tleURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFz
X0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCit7CisgICAgYm9vbCBpc0ZpbHRlcmVkID0gZmFs
c2U7CisgICAgRXdrVmlldyogc2VsZiA9IHRvRXdrVmlldyhzbWFydERhdGEpOworICAgIGlmIChJ
bnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9IHNlbGYtPmlucHV0TWV0
aG9kQ29udGV4dCgpKQorICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRsZUtleURvd25F
dmVudChkb3duRXZlbnQsICZpc0ZpbHRlcmVkKTsKKworICAgIHNlbGYtPnBhZ2UoKS0+aGFuZGxl
S2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGRvd25FdmVudCwgaXNGaWx0ZXJl
ZCkpOworICAgIHJldHVybiB0cnVlOworfQorCitFaW5hX0Jvb2wgRXdrVmlldzo6aGFuZGxlRXdr
Vmlld0tleVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVu
dF9LZXlfVXAqIHVwRXZlbnQpCit7CisgICAgdG9Fd2tWaWV3KHNtYXJ0RGF0YSktPnBhZ2UoKS0+
aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHVwRXZlbnQpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC05ODAsMjYg
KzEzMjksMjMgQEAgdm9pZCBFd2tWaWV3OjpmZWVkVG91Y2hFdmVudHMoRXdrX1RvdWNoX0V2ZW50
X1R5cGUgdHlwZSkKICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PEV3a19Ub3VjaF9Qb2ludCo+
KGRhdGEpOwogfQogCi12b2lkIEV3a1ZpZXc6Om9uVG91Y2hEb3duKHZvaWQqIC8qIGRhdGEgKi8s
IEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50
SW5mbyAqLykKK3ZvaWQgRXdrVmlldzo6aGFuZGxlVG91Y2hEb3duKHZvaWQqIC8qIGRhdGEgKi8s
IEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50
SW5mbyAqLykKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3Qo
ZXdrVmlldyk7Ci0gICAgdmlldy0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9TVEFSVCk7Cisg
ICAgdG9Fd2tWaWV3KGV3a1ZpZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX1NUQVJUKTsK
IH0KIAotdm9pZCBFd2tWaWV3OjpvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyog
Y2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQor
dm9pZCBFd2tWaWV3OjpoYW5kbGVUb3VjaFVwKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNh
bnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKIHsK
LSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7Ci0g
ICAgdmlldy0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9FTkQpOworICAgIHRvRXdrVmlldyhl
d2tWaWV3KS0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9FTkQpOwogfQogCi12b2lkIEV3a1Zp
ZXc6Om9uVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZh
c19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKLXsKLSAgICBFd2tWaWV3
KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7Ci0gICAgdmlldy0+ZmVl
ZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9NT1ZFKTsKK3ZvaWQgRXdrVmlldzo6aGFuZGxlVG91Y2hN
b3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3
a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKK3sgICAgCisgICAgdG9Fd2tWaWV3KGV3a1Zp
ZXcpLT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX01PVkUpOwogfQogI2VuZGlmCiAKLXZvaWQg
RXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVu
dEluZm8pCit2b2lkIEV3a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBh
Z2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBFd2tWaWV3KiB2aWV3ID0gc3RhdGljX2Nh
c3Q8RXdrVmlldyo+KGV2ZW50SW5mbyk7CiAKQEAgLTEwMzcsMyArMTM4Myw0NSBAQCBQYXNzUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICAgICByZXR1cm4g
c25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCiB9CisKK0V2YXNfU21hcnRfQ2xhc3MgRXdrVmll
dzo6cGFyZW50U21hcnRDbGFzcyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOworCisvLyBG
cmVlIEV3ayBWaWV3IGZ1bmN0aW9ucy4KKworRXdrVmlldyogdG9Fd2tWaWV3KGNvbnN0IEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0KQoreworICAgIEFTU0VSVChldmFzT2JqZWN0ICYmIGlzVmlld0V2
YXNPYmplY3QoZXZhc09iamVjdCkpOworICAgIHJldHVybiB0b0V3a1ZpZXcoc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV2YXNPYmpl
Y3QpKSk7Cit9CisKK0V3a1ZpZXcqIHRvRXdrVmlldyhjb25zdCBFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEpCit7CisgICAgQVNTRVJUKHNtYXJ0RGF0YSAmJiBzbWFydERhdGEtPnByaXYp
OworICAgIHJldHVybiBzbWFydERhdGEtPnByaXY7Cit9CisKK2Jvb2wgaXNWaWV3RXZhc09iamVj
dChjb25zdCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKK3sKKyAgICBBU1NFUlQoZXZhc09iamVj
dCk7CisKKyAgICBjb25zdCBjaGFyKiBldmFzT2JqZWN0VHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVf
Z2V0KGV2YXNPYmplY3QpOworICAgIGNvbnN0IEV2YXNfU21hcnQqIGV2YXNTbWFydCA9IGV2YXNf
b2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChldmFzT2JqZWN0KTsKKyAgICBpZiAoIWV2YXNTbWFydCkg
eworICAgICAgICBFSU5BX0xPR19DUklUKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEi
LCBldmFzT2JqZWN0LCBldmFzT2JqZWN0VHlwZSA/IGV2YXNPYmplY3RUeXBlIDogIihudWxsKSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgRXZhc19TbWFydF9D
bGFzcyogc21hcnRDbGFzcyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KGV2YXNTbWFydCk7CisgICAg
aWYgKCFzbWFydENsYXNzKSB7CisgICAgICAgIEVJTkFfTE9HX0NSSVQoIiVwICglcykgaXMgbm90
IGEgc21hcnQgY2xhc3Mgb2JqZWN0ISIsIGV2YXNPYmplY3QsIGV2YXNPYmplY3RUeXBlID8gZXZh
c09iamVjdFR5cGUgOiAiKG51bGwpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoc21hcnRDbGFzcy0+ZGF0YSAhPSBzbWFydENsYXNzTmFtZSkgeworICAgICAgICBF
SU5BX0xPR19DUklUKCIlcCAoJXMpIGlzIG5vdCBvZiBhbiBld2tfdmlldyAobmVlZCAlcCwgZ290
ICVwKSEiLCBldmFzT2JqZWN0LCBldmFzT2JqZWN0VHlwZSA/IGV2YXNPYmplY3RUeXBlIDogIihu
dWxsKSIsCisgICAgICAgICAgICBzbWFydENsYXNzTmFtZSwgc21hcnRDbGFzcy0+ZGF0YSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCA4NzE2NWJjLi4zNjZk
MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC05
OSw3ICs5OSw5IEBAIHR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1cmZhY2UgRXZhc19HTF9TdXJm
YWNlOwogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1Zp
ZXdfU21hcnRfRGF0YTsKK3R5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIEV3a19W
aWV3X1NtYXJ0X0NsYXNzOwogCisvLyBFd2tWaWV3IG9iamVjdCBpcyBvd25lZCBieSB0aGUgZXZh
cyBvYmplY3QsIG9idGFpbmVkIGZyb20gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdCgpLgogY2xh
c3MgRXdrVmlldyB7CiBwdWJsaWM6CiAKQEAgLTEwNywxMSArMTA5LDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgTGVnYWN5QmVoYXZpb3IsCiAgICAgICAgIERlZmF1bHRCZWhhdmlvcgogICAgIH07Ci0g
ICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBXZWJLaXQ6OldlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOwotICAg
IH5Fd2tWaWV3KCk7CiAKLSAgICBzdGF0aWMgRXdrVmlldyogZnJvbUV2YXNPYmplY3QoY29uc3Qg
RXZhc19PYmplY3QqIHZpZXcpOwotICAgIEV2YXNfT2JqZWN0KiB2aWV3KCkgeyByZXR1cm4gbV9l
dmFzT2JqZWN0OyB9CisgICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2
YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIFZpZXdCZWhhdmlvciBiZWhh
dmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgc3RhdGljIEV2YXNfT2JqZWN0
KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBj
b250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVo
YXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworCisgICAgc3RhdGljIGJvb2wgaW5p
dFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRfQ2xhc3MmKTsKKworICAgIHN0YXRp
YyBjb25zdCBFdmFzX09iamVjdCogdG9FdmFzT2JqZWN0KFdLUGFnZVJlZik7CisKKyAgICBFdmFz
X09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCiAgICAgV0tW
aWV3UmVmIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViVmlldy5nZXQoKSk7IH0K
ICAgICBXS1BhZ2VSZWYgd2tQYWdlKCkgY29uc3Q7CkBAIC0xNTMsMTEgKzE1OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcik7CiAg
ICAgdm9pZCBzZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplKTsKIAotICAgIHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QgPSBXZWJDb3JlOjpJbnRSZWN0KCkpOwotCi0gICAgc3RhdGljIHZvaWQgYWRkVG9QYWdlVmll
d01hcChFd2tWaWV3KiB2aWV3KTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmVGcm9tUGFnZVZpZXdN
YXAoRXdrVmlldyogdmlldyk7Ci0gICAgc3RhdGljIGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3RnJv
bVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZik7CisgICAgdm9pZCB1cGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCA9IFdlYkNvcmU6OkludFJlY3QoKSk7ICAgCiAKICNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKQEAgLTIyMSw3
ICsyMjMsMTEgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtl
U25hcHNob3QoKTsKIAogcHJpdmF0ZToKLSAgICBpbmxpbmUgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhKCkgY29uc3Q7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAs
IFZpZXdCZWhhdmlvcik7CisgICAgfkV3a1ZpZXcoKTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworCiAgICAgdm9pZCBkaXNwbGF5VGltZXJGaXJlZChXZWJD
b3JlOjpUaW1lcjxFd2tWaWV3PiopOwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpA
QCAtMjMwLDE3ICsyMzYsMzUgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5mb3JtSWNvbkNoYW5n
ZSgpOwogCi0gICAgc3RhdGljIHZvaWQgb25Nb3VzZURvd24odm9pZCogZGF0YSwgRXZhcyosIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKLSAgICBzdGF0aWMgdm9pZCBvbk1vdXNlVXAo
dm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKLSAgICBz
dGF0aWMgdm9pZCBvbk1vdXNlTW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2
b2lkKiBldmVudEluZm8pOworICAgIC8vIEV2YXNfU21hcnRfQ2xhc3MgY2FsbGJhY2sgaW50ZXJm
YWNlOgorICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNPYmplY3RBZGQoRXZhc19PYmplY3QqKTsK
KyAgICBzdGF0aWMgdm9pZCBoYW5kbGVFdmFzT2JqZWN0RGVsZXRlKEV2YXNfT2JqZWN0Kik7Cisg
ICAgc3RhdGljIHZvaWQgaGFuZGxlRXZhc09iamVjdE1vdmUoRXZhc19PYmplY3QqLCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSk7CisgICAgc3RhdGljIHZvaWQgaGFuZGxlRXZhc09iamVjdFJl
c2l6ZShFdmFzX09iamVjdCosIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KTsK
KyAgICBzdGF0aWMgdm9pZCBoYW5kbGVFdmFzT2JqZWN0U2hvdyhFdmFzX09iamVjdCopOworICAg
IHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNPYmplY3RIaWRlKEV2YXNfT2JqZWN0Kik7CisgICAgc3Rh
dGljIHZvaWQgaGFuZGxlRXZhc09iamVjdENvbG9yU2V0KEV2YXNfT2JqZWN0KiwgaW50IHJlZCwg
aW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKTsKKyAgICBzdGF0aWMgdm9pZCBoYW5kbGVF
dmFzT2JqZWN0Q2FsY3VsYXRlKEV2YXNfT2JqZWN0Kik7CisKKyAgICAvLyBFd2tfVmlld19TbWFy
dF9DbGFzcyBjYWxsYmFjayBpbnRlcmZhY2U6CisgICAgc3RhdGljIEVpbmFfQm9vbCBoYW5kbGVF
d2tWaWV3Rm9jdXNJbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpOworICAgIHN0YXRp
YyBFaW5hX0Jvb2wgaGFuZGxlRXdrVmlld0ZvY3VzT3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBoYW5kbGVFd2tWaWV3TW91c2VXaGVlbChF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqIHdoZWVsRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgaGFuZGxlRXdrVmlld01vdXNl
RG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfRG93biogZG93bkV2ZW50KTsKKyAgICBzdGF0aWMgRWluYV9Cb29sIGhhbmRsZUV3a1ZpZXdN
b3VzZVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9N
b3VzZV9VcCogdXBFdmVudCk7CisgICAgc3RhdGljIEVpbmFfQm9vbCBoYW5kbGVFd2tWaWV3TW91
c2VNb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9N
b3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgaGFuZGxlRXdrVmll
d0tleURvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50
X0tleV9Eb3duKiBkb3duRXZlbnQpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgaGFuZGxlRXdrVmll
d0tleVVwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9L
ZXlfVXAqIHVwRXZlbnQpOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2b2lkIGZl
ZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZlbnRfVHlwZSB0eXBlKTsKLSAgICBzdGF0aWMgdm9p
ZCBvblRvdWNoRG93bih2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNf
T2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lk
IG9uVG91Y2hVcCh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9u
VG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLyk7CisgICAgc3RhdGljIHZvaWQgaGFu
ZGxlVG91Y2hEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbyk7CisgICAgc3RhdGljIHZvaWQgaGFuZGxlVG91Y2hVcCh2b2lkKiBkYXRhLCBFdmFzKiwg
RXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZVRv
dWNoTW92ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8p
OwogI2VuZGlmCi0gICAgc3RhdGljIHZvaWQgb25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBw
YWdlVVJMLCB2b2lkKiBldmVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUZhdmljb25D
aGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbyk7CiAKK3ByaXZhdGU6
CiAgICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4KICAgICBFdmFzX09i
amVjdCogbV9ldmFzT2JqZWN0OwogICAgIFJlZlB0cjxFd2tDb250ZXh0PiBtX2NvbnRleHQ7CkBA
IC0yODcsNiArMzExLDEzIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIG1faXNIYXJkd2Fy
ZUFjY2VsZXJhdGVkOwogICAgIGJvb2wgbV9zZXREcmF3c0JhY2tncm91bmQ7CisKKyAgICBzdGF0
aWMgRXZhc19TbWFydF9DbGFzcyBwYXJlbnRTbWFydENsYXNzOwogfTsKIAorRXdrVmlldyogdG9F
d2tWaWV3KGNvbnN0IEV2YXNfT2JqZWN0Kik7CitFd2tWaWV3KiB0b0V3a1ZpZXcoY29uc3QgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKTsKKworYm9vbCBpc1ZpZXdFdmFzT2JqZWN0KGNv
bnN0IEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KTsKKwogI2VuZGlmIC8vIEV3a1ZpZXdfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IGQ2MTgx
YjguLmM1M2Q4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKQEAgLTI1LDkgKzI1LDYgQEAKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAj
aW5jbHVkZSAiRm9ybUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVm
bC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJOYXRp
dmVXZWJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2lu
Y2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRDbGllbnRFZmwuaCIK
ICNpbmNsdWRlICJQYWdlUG9saWN5Q2xpZW50RWZsLmgiCkBAIC01MCw3ICs0Nyw2IEBACiAjaW5j
bHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tf
dmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPFdlYktp
dDIvV0tQYWdlR3JvdXAuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KQEAgLTY4LDQ4
NiArNjQsMzEgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotc3RhdGljIGNvbnN0IGNoYXIgRVdLX1ZJRVdfVFlQRV9TVFJbXSA9ICJFV0syX1Zp
ZXciOwotCi0jZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgcmVzdWx0KSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghZXdrVmlldykgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgRUlOQV9MT0dfQ1JJVCgibnVsbCBpcyBub3QgYSBld2tfdmlldyIpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgY2hhciog
X3RtcF9vdHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcpOyAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIGNvbnN0IEV2YXNfU21hcnQqIF90bXBfcyA9IGV2YXNfb2JqZWN0X3NtYXJ0
X3NtYXJ0X2dldChld2tWaWV3KTsgICAgICAgXAotICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWSgh
X3RtcF9zKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBh
IHNtYXJ0IG9iamVjdCEiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgRXZhc19TbWFy
dF9DbGFzcyogX3RtcF9zYyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KF90bXBfcyk7ICAgICAgICBc
Ci0gICAgICAgIGlmIChFSU5BX1VOTElLRUxZKCFfdG1wX3NjKSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIGV3a1ZpZXcsIF90bXBfb3R5cGUg
PyBfdG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
cmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWShfdG1wX3NjLT5kYXRhICE9IEVXS19WSUVX
X1RZUEVfU1RSKSkgeyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBvZiBhbiBld2tfdmlldyAobmVlZCAlcCwg
Z290ICVwKSEiLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBld2tWaWV3LCBfdG1wX290
eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAgRVdLX1ZJRVdfVFlQRV9TVFIsIF90bXBfc2MtPmRhdGEpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEVXS19WSUVXX1NEX0dFVChld2tW
aWV3LCBzbWFydERhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgX3RtcF9yZXN1bHQpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEg
PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKF90
bXBfcmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBzbWFydERhdGEgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSop
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrVmlldykKLQotI2RlZmluZSBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLi4uKSAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoIm5vIHNt
YXJ0IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgICAgICBld2tWaWV3LCBldmFzX29iamVjdF90eXBlX2dldChld2tWaWV3KSk7ICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBFV0tfVklFV19JTVBMX0dFVF9C
WV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCAuLi4pICAgICAgICAgICAgICAgIFwKLSAg
ICBpZiAoIXNtYXJ0RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVJTkFfTE9HX0NSSVQoInNtYXJ0IGRhdGEg
aXMgbnVsbCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBy
ZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrVmlldyogaW1w
bCA9IHNtYXJ0RGF0YS0+cHJpdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFpbXBsKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAl
cCAoJXMpIiwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNtYXJ0RGF0YS0+c2Vs
ZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc21hcnREYXRhLT5zZWxmKSk7ICAgICAgIFwKLSAgICAg
ICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUg
KDApCi0KICNkZWZpbmUgRVdLX1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIGltcGws
IC4uLikgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrVmlldyogaW1wbCA9IDA7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEV3a1ZpZXcqIGltcGwgPSB0b0V3a1ZpZXcoZXdrVmlldyk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBfX1ZBX0FSR1Nf
Xyk7ICAgICAgICAgICAgXAotICAgICAgICBpbXBsID0gc21hcnREYXRhLT5wcml2OyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFp
bXBsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBFSU5BX0xPR19DUklUKCJubyBwcml2YXRlIGRhdGEgZm9y
IG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNtYXJ0
RGF0YS0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc21hcnREYXRhLT5zZWxmKSk7ICAgICAg
IFwKKyAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQoIm5vIHByaXZhdGUgZGF0YSBmb3Igb2JqZWN0
ICVwIiwgZXdrVmlldyk7ICAgICAgICAgICBcCiAgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdT
X187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0vLy8gQ3JlYXRlcyBhIHR5
cGUgbmFtZSBmb3IgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dC4KLXR5cGVkZWYgc3RydWN0IEV3
a19QYWdlX0NvbnRlbnRzX0NvbnRleHQgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dDsKLQotLyoK
LSAqIEBicmllZiBTdHJ1Y3R1cmUgY29udGFpbmluZyBwYWdlIGNvbnRlbnRzIGNvbnRleHQgdXNl
ZCBmb3IgZXdrX3ZpZXdfcGFnZV9jb250ZW50c19nZXQoKSBBUEkuCi0gKi8KLXN0cnVjdCBFd2tf
UGFnZV9Db250ZW50c19Db250ZXh0IHsKLSAgICBFd2tfUGFnZV9Db250ZW50c19UeXBlIHR5cGU7
Ci0gICAgRXdrX1BhZ2VfQ29udGVudHNfQ2IgY2FsbGJhY2s7Ci19OwotCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17
Ci0gICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkpCi0gICAgICAgIHJldHVybjsKLSAgICBz
bWFydERhdGEtPmNoYW5nZWQuYW55ID0gdHJ1ZTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jaGFu
Z2VkKHNtYXJ0RGF0YS0+c2VsZik7Ci19Ci0KLS8vIERlZmF1bHQgRXZlbnQgSGFuZGxpbmcuCi1z
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9mb2N1c19pbihFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEpCi17Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgaW1wbCwgZmFsc2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVE
aWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3
V2luZG93SXNBY3RpdmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGlt
cGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBh
Z2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21h
cnRfbW91c2Vfd2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFz
X0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VU
X0JZX1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBh
Z2UoKS0+aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KHdoZWVsRXZlbnQsIGlt
cGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21v
dXNlX2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX0Rvd24qIGRvd25FdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhh
bmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChkb3duRXZlbnQsIGltcGwtPnRyYW5z
Zm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1NjcmVlbigpKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX3VwKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCog
dXBFdmVudCkKLXsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBpbXBsLT5wYWdlKCktPmhhbmRsZU1vdXNlRXZlbnQo
TmF0aXZlV2ViTW91c2VFdmVudCh1cEV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwg
aW1wbC0+dHJhbnNmb3JtVG9TY3JlZW4oKSkpOwotCi0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZs
KiBpbnB1dE1ldGhvZENvbnRleHQgPSBpbXBsLT5pbnB1dE1ldGhvZENvbnRleHQoKTsKLSAgICBp
ZiAoaW5wdXRNZXRob2RDb250ZXh0KQotICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPmhhbmRs
ZU1vdXNlVXBFdmVudCh1cEV2ZW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9tb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCi17Ci0g
ICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1wbCwgZmFs
c2UpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNl
RXZlbnQobW92ZUV2ZW50LCBpbXBsLT50cmFuc2Zvcm1Gcm9tU2NlbmUoKSwgaW1wbC0+dHJhbnNm
b3JtVG9TY3JlZW4oKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld19zbWFydF9rZXlfZG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEs
IGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCkKLXsKLSAgICBFV0tfVklFV19J
TVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsLCBmYWxzZSk7Ci0KLSAgICBi
b29sIGlzRmlsdGVyZWQgPSBmYWxzZTsKLSAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0
TWV0aG9kQ29udGV4dCA9IGltcGwtPmlucHV0TWV0aG9kQ29udGV4dCgpOwotICAgIGlmIChpbnB1
dE1ldGhvZENvbnRleHQpCi0gICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+aGFuZGxlS2V5RG93
bkV2ZW50KGRvd25FdmVudCwgJmlzRmlsdGVyZWQpOwotCi0gICAgaW1wbC0+cGFnZSgpLT5oYW5k
bGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZG93bkV2ZW50LCBpc0ZpbHRl
cmVkKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X2tleV91cChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNf
RXZlbnRfS2V5X1VwKiB1cEV2ZW50KQotewotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZX1NEX09S
X1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKLQotICAgIGltcGwtPnBhZ2UoKS0+aGFu
ZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHVwRXZlbnQpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRXZlbnQgSGFuZGxpbmcuCi1zdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogLypl
dmVudEluZm8qLykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19pbik7Ci0gICAgc21hcnREYXRhLT5hcGktPmZvY3Vz
X2luKHNtYXJ0RGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQo
dm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
YXBpLT5mb2N1c19vdXQpOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQoc21hcnREYXRh
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3doZWVsKHZvaWQqIGRhdGEs
IEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50
X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9X
aGVlbCo+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2Vfd2hlZWwpOwotICAgIHNtYXJ0RGF0YS0+YXBp
LT5tb3VzZV93aGVlbChzbWFydERhdGEsIHdoZWVsRXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfb25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCogZXZlbnRJbmZvKQotewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0
YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9kb3du
KTsKLSAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQpOwot
fQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X0tleV9VcCog
dXBFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKLSAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBp
LT5rZXlfdXApOwotICAgIHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXAoc21hcnREYXRhLCB1cEV2ZW50
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX3Nob3codm9pZCogZGF0YSwgRXZhcyos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsKLSAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0
YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgaW1w
bCk7Ci0gICAgaW1wbC0+cGFnZSgpLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3SXNWaXNpYmxlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2hpZGUodm9pZCog
ZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogLypldmVudEluZm8qLykKLXsKLSAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7Ci0gICAgRVdLX1ZJRVdfSU1QTF9HRVRfQllfU0RfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgaW1wbCk7Ci0KLSAgICAvLyBUaGlzIGNhbGwgbWF5IGxvb2sgd3JvbmcsIGJ1dCB3
ZSByZWFsbHkgbmVlZCB0byBwYXNzIFZpZXdJc1Zpc2libGUgaGVyZS4KLSAgICAvLyB2aWV3U3Rh
dGVEaWRDaGFuZ2UoKSBpdHNlbGYgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNldHRpbmcg
dGhlIHZpc2liaWxpdHkgdG8gVmlzaWJsZSBvciBIaWRkZW4KLSAgICAvLyBkZXBlbmRpbmcgb24g
d2hhdCBXZWJQYWdlUHJveHk6OmlzVmlld1Zpc2libGUoKSByZXR1cm5zLCB0aGlzIHNpbXBseSB0
cmlnZ2VycyB0aGUgcHJvY2Vzcy4KLSAgICBpbXBsLT5wYWdlKCktPnZpZXdTdGF0ZURpZENoYW5n
ZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwotfQotCi1zdGF0aWMgRXZhc19TbWFydF9D
bGFzcyBnX3BhcmVudFNtYXJ0Q2xhc3MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLQot
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKLXsK
LSAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dl
dChld2tWaWV3KTsKLSAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZh
c19zbWFydF9jbGFzc19nZXQoc21hcnQpOwotICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNz
KiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21h
cnRDbGFzcyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0KLSAg
ICBpZiAoIXNtYXJ0RGF0YSkgewotICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19TbWFydF9EYXRhKSkp
OwotICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgewotICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgi
Y291bGQgbm90IGFsbG9jYXRlIEV3a19WaWV3X1NtYXJ0X0RhdGEiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tW
aWV3LCBzbWFydERhdGEpOwotICAgIH0KLQotICAgIHNtYXJ0RGF0YS0+c2VsZiA9IGV3a1ZpZXc7
Ci0gICAgc21hcnREYXRhLT5hcGkgPSBhcGk7Ci0KLSAgICBnX3BhcmVudFNtYXJ0Q2xhc3MuYWRk
KGV3a1ZpZXcpOwotCi0gICAgc21hcnREYXRhLT5wcml2ID0gMDsKLQotICAgIC8vIENyZWF0ZSBl
dmFzX29iamVjdF9pbWFnZSB0byBkcmF3IHdlYiBjb250ZW50cy4KLSAgICBzbWFydERhdGEtPmlt
YWdlID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBl
dmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5pbWFnZSwgZmFsc2UpOwotICAg
IGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxlZF9zZXQoc21hcnREYXRhLT5pbWFnZSwgdHJ1ZSk7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmltYWdlLCBld2tWaWV3
KTsKLSAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+aW1hZ2UpOwotCi0jZGVmaW5lIENP
Tk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMs
IHNtYXJ0RGF0YSkKLSAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4sIF9ld2tfdmll
d19vbl9mb2N1c19pbik7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX09VVCwgX2V3
a192aWV3X29uX2ZvY3VzX291dCk7Ci0gICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX01PVVNFX1dI
RUVMLCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwpOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFD
S19LRVlfRE9XTiwgX2V3a192aWV3X29uX2tleV9kb3duKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FM
TEJBQ0tfS0VZX1VQLCBfZXdrX3ZpZXdfb25fa2V5X3VwKTsKLSAgICBDT05ORUNUKEVWQVNfQ0FM
TEJBQ0tfU0hPVywgX2V3a192aWV3X29uX3Nob3cpOwotICAgIENPTk5FQ1QoRVZBU19DQUxMQkFD
S19ISURFLCBfZXdrX3ZpZXdfb25faGlkZSk7Ci0jdW5kZWYgQ09OTkVDVAotfQotCi1zdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQotewotICAgIEVX
S19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwotICAgIGlmIChzbWFydERhdGEpCi0g
ICAgICAgIGRlbGV0ZSBzbWFydERhdGEtPnByaXY7Ci0KLSAgICBnX3BhcmVudFNtYXJ0Q2xhc3Mu
ZGVsKGV3a1ZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkK
LXsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Ci0K
LSAgICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc21hcnREYXRhLT5pbWFnZSwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21hcnREYXRhLT5pbWFn
ZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9
IHRydWU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKLX0KLQotc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNf
Q29vcmQgLyp4Ki8sIEV2YXNfQ29vcmQgLyp5Ki8pCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgc21hcnREYXRhLT5jaGFuZ2VkLnBv
c2l0aW9uID0gdHJ1ZTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwot
fQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQotewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhKTsKLSAgICBFV0tfVklFV19JTVBMX0dFVF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBp
bXBsKTsKLQotICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkgPSBmYWxzZTsKLQotICAgIEV2YXNf
Q29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
ZXdrVmlldywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgaWYgKHNtYXJ0RGF0YS0+
Y2hhbmdlZC5wb3NpdGlvbikgewotICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24g
PSBmYWxzZTsKLSAgICAgICAgc21hcnREYXRhLT52aWV3LnggPSB4OwotICAgICAgICBzbWFydERh
dGEtPnZpZXcueSA9IHk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRhLT5pbWFn
ZSwgeCwgeSk7Ci0gICAgfQotCi0gICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplKSB7Ci0g
ICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gZmFsc2U7Ci0gICAgICAgIHNtYXJ0RGF0
YS0+dmlldy53ID0gd2lkdGg7Ci0gICAgICAgIHNtYXJ0RGF0YS0+dmlldy5oID0gaGVpZ2h0Owot
Ci0gICAgICAgIGlmIChpbXBsLT5wYWdlKCktPmRyYXdpbmdBcmVhKCkpCi0gICAgICAgICAgICBp
bXBsLT5wYWdlKCktPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KSwgSW50U2l6ZSgpKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAg
ICAgaW1wbC0+c2V0TmVlZHNTdXJmYWNlUmVzaXplKCk7Ci0jZW5kaWYKLSNpZiBVU0UoVElMRURf
QkFDS0lOR19TVE9SRSkKLSAgICAgICAgaW1wbC0+cGFnZUNsaWVudCgpLT51cGRhdGVWaWV3cG9y
dFNpemUoKTsKLSNlbmRpZgotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X3Nob3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotCi0gICAgaWYgKGV2YXNfb2JqZWN0X2NsaXBlZXNf
Z2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKSkKLSAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhz
bWFydERhdGEtPmJhc2UuY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEt
PmltYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCi17Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEpOwotCi0gICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmJhc2UuY2xpcHBl
cik7Ci0gICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmltYWdlKTsKLX0KLQotc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50
IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKQotewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBFV0tfVklFV19JTVBMX0dF
VF9CWV9TRF9PUl9SRVRVUk4oc21hcnREYXRhLCBpbXBsKTsKLQotICAgIGlmIChhbHBoYSA8IDAp
Ci0gICAgICAgIGFscGhhID0gMDsKLSAgICBlbHNlIGlmIChhbHBoYSA+IDI1NSkKLSAgICAgICAg
YWxwaGEgPSAyNTU7Ci0KLSNkZWZpbmUgQ0hFQ0tfQ09MT1IoY29sb3IsIGFscGhhKSBcCi0gICAg
aWYgKGNvbG9yIDwgMCkgICAgICAgICAgICAgICAgXAotICAgICAgICBjb2xvciA9IDA7ICAgICAg
ICAgICAgICAgIFwKLSAgICBlbHNlIGlmIChjb2xvciA+IGFscGhhKSAgICAgICBcCi0gICAgICAg
IGNvbG9yID0gYWxwaGE7Ci0gICAgQ0hFQ0tfQ09MT1IocmVkLCBhbHBoYSk7Ci0gICAgQ0hFQ0tf
Q09MT1IoZ3JlZW4sIGFscGhhKTsKLSAgICBDSEVDS19DT0xPUihibHVlLCBhbHBoYSk7Ci0jdW5k
ZWYgQ0hFQ0tfQ09MT1IKLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzbWFydERh
dGEtPmltYWdlLCBhbHBoYSA8IDI1NSk7Ci0gICAgaW1wbC0+cGFnZSgpLT5zZXREcmF3c0JhY2tn
cm91bmQocmVkIHx8IGdyZWVuIHx8IGJsdWUpOwotICAgIGltcGwtPnBhZ2UoKS0+c2V0RHJhd3NU
cmFuc3BhcmVudEJhY2tncm91bmQoYWxwaGEgPCAyNTUpOwotCi0gICAgZ19wYXJlbnRTbWFydENs
YXNzLmNvbG9yX3NldChld2tWaWV3LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFw
aSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXBpLCBmYWxzZSk7CiAK
LSAgICBpZiAoYXBpLT52ZXJzaW9uICE9IEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04pIHsK
LSAgICAgICAgRUlOQV9MT0dfQ1JJVCgiRXdrX1ZpZXdfU21hcnRfQ2xhc3MgJXAgaXMgdmVyc2lv
biAlbHUgd2hpbGUgJWx1IHdhcyBleHBlY3RlZC4iLAotICAgICAgICAgICAgIGFwaSwgYXBpLT52
ZXJzaW9uLCBFV0tfVklFV19TTUFSVF9DTEFTU19WRVJTSU9OKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFnX3BhcmVudFNtYXJ0Q2xhc3Mu
YWRkKSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJmdfcGFy
ZW50U21hcnRDbGFzcyk7Ci0KLSAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3Nl
dCgmYXBpLT5zYyk7Ci0KLSAgICAvLyBTZXQgRXZhc19TbWFydF9DbGFzcyBmdW5jdGlvbnMuCi0g
ICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfc21hcnRfYWRkOwotICAgIGFwaS0+c2MuZGVsID0g
X2V3a192aWV3X3NtYXJ0X2RlbDsKLSAgICBhcGktPnNjLm1vdmUgPSBfZXdrX3ZpZXdfc21hcnRf
bW92ZTsKLSAgICBhcGktPnNjLnJlc2l6ZSA9IF9ld2tfdmlld19zbWFydF9yZXNpemU7Ci0gICAg
YXBpLT5zYy5zaG93ID0gX2V3a192aWV3X3NtYXJ0X3Nob3c7Ci0gICAgYXBpLT5zYy5oaWRlID0g
X2V3a192aWV3X3NtYXJ0X2hpZGU7Ci0gICAgYXBpLT5zYy5jb2xvcl9zZXQgPSBfZXdrX3ZpZXdf
c21hcnRfY29sb3Jfc2V0OwotICAgIGFwaS0+c2MuY2FsY3VsYXRlID0gX2V3a192aWV3X3NtYXJ0
X2NhbGN1bGF0ZTsKLSAgICBhcGktPnNjLmRhdGEgPSBFV0tfVklFV19UWVBFX1NUUjsgLy8gSXQg
aXMgdXNlZCBieSB0eXBlIGNoZWNraW5nLgotCi0gICAgLy8gU2V0IEV3a19WaWV3X1NtYXJ0X0Ns
YXNzIGZ1bmN0aW9ucy4KLSAgICBhcGktPmZvY3VzX2luID0gX2V3a192aWV3X3NtYXJ0X2ZvY3Vz
X2luOwotICAgIGFwaS0+Zm9jdXNfb3V0ID0gX2V3a192aWV3X3NtYXJ0X2ZvY3VzX291dDsKLSAg
ICBhcGktPm1vdXNlX3doZWVsID0gX2V3a192aWV3X3NtYXJ0X21vdXNlX3doZWVsOwotICAgIGFw
aS0+bW91c2VfZG93biA9IF9ld2tfdmlld19zbWFydF9tb3VzZV9kb3duOwotICAgIGFwaS0+bW91
c2VfdXAgPSBfZXdrX3ZpZXdfc21hcnRfbW91c2VfdXA7Ci0gICAgYXBpLT5tb3VzZV9tb3ZlID0g
X2V3a192aWV3X3NtYXJ0X21vdXNlX21vdmU7Ci0gICAgYXBpLT5rZXlfZG93biA9IF9ld2tfdmll
d19zbWFydF9rZXlfZG93bjsKLSAgICBhcGktPmtleV91cCA9IF9ld2tfdmlld19zbWFydF9rZXlf
dXA7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBj
cmVhdGVFd2tWaWV3U21hcnRDbGFzcyh2b2lkKQotewotICAgIHN0YXRpYyBFd2tfVmlld19TbWFy
dF9DbGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRXdr
X1ZpZXciKTsKLSAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwotCi0gICAgaWYgKEVJ
TkFfVU5MSUtFTFkoIXNtYXJ0KSkgewotICAgICAgICBld2tfdmlld19zbWFydF9jbGFzc19zZXQo
JmFwaSk7Ci0gICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHNtYXJ0OwotfQotCi1zdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNy
ZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tW
aWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCi17
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7Ci0KLSAgICBFdmFzX09iamVjdCogZXdrVmll
dyA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrVmlldywgMCk7Ci0KLSAgICBFV0tfVklFV19TRF9HRVQo
ZXdrVmlldywgc21hcnREYXRhKTsKLSAgICBpZiAoIXNtYXJ0RGF0YSkgewotICAgICAgICBldmFz
X29iamVjdF9kZWwoZXdrVmlldyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEFT
U0VSVCghc21hcnREYXRhLT5wcml2KTsKLQotICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3VwIGlz
IGNyZWF0ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlz
IDAsCi0gICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCi0gICAgc21h
cnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcoZXdrVmlldywgY29udGV4dCwgdG9JbXBsKHBhZ2VH
cm91cFJlZiksIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OwotfQotCi0v
KioKLSAqIEBpbnRlcm5hbAotICogQ29uc3RydWN0cyBhIGV3a192aWV3IEV2YXNfT2JqZWN0IHdp
dGggV0tUeXBlIHBhcmFtZXRlcnMuCi0gKi8KLUV3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2
YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiBj
cmVhdGVFd2tWaWV3KGNhbnZhcywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgY29udGV4dFJl
ZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRD
b250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIHJldHVybiBFd2tWaWV3Ojpp
bml0U21hcnRDbGFzc0ludGVyZmFjZSgqYXBpKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3
X3NtYXJ0X2FkZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBFd2tWaWV3KiBld2tWaWV3ID0gY3JlYXRlRXdrVmlldyhjYW52YXMs
IHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKLSAgICBpZiAo
IWV3a1ZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGV3a1ZpZXctPnZpZXco
KTsKKyAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIHNtYXJ0LCBl
d2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKIH0KIAogRXZhc19PYmplY3Qq
IGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfc21hcnRfYWRkKGNhbnZhcywgY3JlYXRlRXdr
Vmlld1NtYXJ0Q2xhc3MoKSwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7
CisgICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBld2tfb2JqZWN0
X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3
X2FkZChFdmFzKiBjYW52YXMpCkBAIC04MjQsOCArMzY1LDcgQEAgRWluYV9Cb29sIGV3a192aWV3
X2ZlZWRfdG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Ub3VjaF9FdmVudF9U
eXBlIHQKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChwb2ludHMsIGZhbHNlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwotICAgIEVXS19WSUVXX0lNUExfR0VUX0JZ
X1NEX09SX1JFVFVSTihzbWFydERhdGEsIGltcGwsIGZhbHNlKTsKKyAgICBFV0tfVklFV19JTVBM
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgaW1wbCwgZmFsc2UpOwogCiAgICAgaW1wbC0+cGFnZSgp
LT5oYW5kbGVUb3VjaEV2ZW50KE5hdGl2ZVdlYlRvdWNoRXZlbnQodHlwZSwgcG9pbnRzLCBtb2Rp
ZmllcnMsIGltcGwtPnRyYW5zZm9ybUZyb21TY2VuZSgpLCBpbXBsLT50cmFuc2Zvcm1Ub1NjcmVl
bigpLCBlY29yZV90aW1lX2dldCgpKSk7CiAKQEAgLTk0Miw2ICs0ODIsMTcgQEAgdm9pZCBld2tf
dmlld19kcmF3c19wYWdlX2JhY2tncm91bmRfc2V0KEV2YXNfT2JqZWN0ICpld2tWaWV3LCBFaW5h
X0Jvb2wgZW5hYmxlZCkKICAgICBpbXBsLT5zZXREcmF3c0JhY2tncm91bmQoZW5hYmxlZCk7CiB9
CiAKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBFd2tfUGFnZV9Db250ZW50c19Db250ZXh0
LgordHlwZWRlZiBzdHJ1Y3QgRXdrX1BhZ2VfQ29udGVudHNfQ29udGV4dCBFd2tfUGFnZV9Db250
ZW50c19Db250ZXh0OworCisvKgorICogQGJyaWVmIFN0cnVjdHVyZSBjb250YWluaW5nIHBhZ2Ug
Y29udGVudHMgY29udGV4dCB1c2VkIGZvciBld2tfdmlld19wYWdlX2NvbnRlbnRzX2dldCgpIEFQ
SS4KKyAqLworc3RydWN0IEV3a19QYWdlX0NvbnRlbnRzX0NvbnRleHQgeworICAgIEV3a19QYWdl
X0NvbnRlbnRzX1R5cGUgdHlwZTsKKyAgICBFd2tfUGFnZV9Db250ZW50c19DYiBjYWxsYmFjazsK
K307CisKIC8qKgogICogQGludGVybmFsCiAgKiBDYWxsYmFjayBmdW5jdGlvbiB1c2VkIGZvciBl
d2tfdmlld19wYWdlX2NvbnRlbnRzX2dldCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjNDkxMmZmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRl
ZiBld2tfdmlld19wcml2YXRlX2gKLSNkZWZpbmUgZXdrX3ZpZXdfcHJpdmF0ZV9oCi0KLSNpbmNs
dWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tC
YXNlLmg+Ci0KLUV3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yKTsKLQotI2VuZGlm
IC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKaW5kZXggZWZkNmQzMi4uZTQ4ZGY3NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fp
cm8uY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVw
ZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRlSW5mbyYKIAogI2lmIFBM
QVRGT1JNKEVGTCkKICAgICAvLyBVcGRhdGUgZXdrX3ZpZXcgd2l0aCBuZXcgYmFja2luZ1N0b3Jl
IGltYWdlLgotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX3dl
YlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKKyAgICBFd2tWaWV3KiB2aWV3ID0gdG9Fd2tWaWV3
KG1fd2ViUGFnZVByb3h5LT52aWV3V2lkZ2V0KCkpOwogICAgIHZpZXctPnNldEltYWdlRGF0YShj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fYmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2Uo
KSksIG1fc2l6ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9Db250ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHAKaW5kZXggMjU5ZTQxMi4uMmNj
NGIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0SGlz
dG9yeUNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Db250
ZXh0SGlzdG9yeUNsaWVudEVmbC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBDb250ZXh0SGlz
dG9yeUNsaWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV0tDb250ZXh0UmVm
LCBXS1BhZ2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEV3a05hdmlnYXRpb25EYXRh
PiBuYXZpZ2F0aW9uRGF0YUV3ayA9IEV3a05hdmlnYXRpb25EYXRhOjpjcmVhdGUobmF2aWdhdGlv
bkRhdGEpOwotICAgIGhpc3RvcnlDbGllbnQtPm1fbmF2aWdhdGUoRXdrVmlldzo6dmlld0Zyb21Q
YWdlVmlld01hcChwYWdlKSwgbmF2aWdhdGlvbkRhdGFFd2suZ2V0KCksIGhpc3RvcnlDbGllbnQt
Pm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fbmF2aWdhdGUoRXdrVmlldzo6dG9F
dmFzT2JqZWN0KHBhZ2UpLCBuYXZpZ2F0aW9uRGF0YUV3ay5nZXQoKSwgaGlzdG9yeUNsaWVudC0+
bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZv
cm1DbGllbnRSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBz
b3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50
RWZsOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcAog
ICAgIFdLRWluYVNoYXJlZFN0cmluZyBzb3VyY2VVUkxTdHJpbmcoc291cmNlVVJMKTsKICAgICBX
S0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb25VUkxTdHJpbmcoZGVzdGluYXRpb25VUkwpOwog
Ci0gICAgaGlzdG9yeUNsaWVudC0+bV9jbGllbnRSZWRpcmVjdChFd2tWaWV3Ojp2aWV3RnJvbVBh
Z2VWaWV3TWFwKHBhZ2UpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBo
aXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX2NsaWVudFJl
ZGlyZWN0KEV3a1ZpZXc6OnRvRXZhc09iamVjdChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0
aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQg
Q29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXS0NvbnRl
eHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3Rp
bmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtNzksNyAr
NzksNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtU2VydmVyUmVk
aXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcAogICAgIFdLRWluYVNoYXJlZFN0cmluZyBz
b3VyY2VVUkxTdHJpbmcoc291cmNlVVJMKTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGlu
YXRpb25VUkxTdHJpbmcoZGVzdGluYXRpb25VUkwpOwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV9z
ZXJ2ZXJSZWRpcmVjdChFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKHBhZ2UpLCBzb3VyY2VV
UkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRh
KTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX3NlcnZlclJlZGlyZWN0KEV3a1ZpZXc6OnRvRXZhc09i
amVjdChwYWdlKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9y
eUNsaWVudC0+bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6
OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1N0
cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpk
aWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZQogICAgIFdL
RWluYVNoYXJlZFN0cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CiAgICAgV0tFaW5hU2hhcmVkU3Ry
aW5nIHN0cmluZ1VSTChVUkwpOwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV90aXRsZVVwZGF0ZWQo
RXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwgdGl0bGVTdHJpbmcsIHN0cmluZ1VS
TCwgaGlzdG9yeUNsaWVudC0+bV91c2VyRGF0YSk7CisgICAgaGlzdG9yeUNsaWVudC0+bV90aXRs
ZVVwZGF0ZWQoRXdrVmlldzo6dG9FdmFzT2JqZWN0KHBhZ2UpLCB0aXRsZVN0cmluZywgc3RyaW5n
VVJMLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKIH0KIAogdm9pZCBDb250ZXh0SGlzdG9y
eUNsaWVudEVmbDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoV0tDb250ZXh0UmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Q
YWdlQ2xpZW50QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGll
bnRCYXNlLmNwcAppbmRleCA1NjhlNGFlLi4yNmI3ZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIGJv
b2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld0luV2luZG93KCkKIHZvaWQgUGFnZUNsaWVudEJhc2U6
OnByb2Nlc3NEaWRDcmFzaCgpCiB7CiAgICAgLy8gQ2hlY2sgaWYgbG9hZGluZyB3YXMgb25nb2lu
Zywgd2hlbiB3ZWIgcHJvY2VzcyBjcmFzaGVkLgotICAgIGRvdWJsZSBsb2FkUHJvZ3Jlc3MgPSBl
d2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX3ZpZXctPnZpZXcoKSk7CisgICAgZG91YmxlIGxv
YWRQcm9ncmVzcyA9IGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KG1fdmlldy0+ZXZhc09iamVj
dCgpKTsKICAgICBpZiAobG9hZFByb2dyZXNzID49IDAgJiYgbG9hZFByb2dyZXNzIDwgMSkgewog
ICAgICAgICBsb2FkUHJvZ3Jlc3MgPSAxOwogICAgICAgICBtX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8
TG9hZFByb2dyZXNzPigpLmNhbGwoJmxvYWRQcm9ncmVzcyk7CkBAIC0xMzQsNyArMTM0LDcgQEAg
dm9pZCBQYWdlQ2xpZW50QmFzZTo6cHJvY2Vzc0RpZENyYXNoKCkKICAgICAgICAgV0FSTigiV0FS
TklORzogVGhlIHdlYiBwcm9jZXNzIGV4cGVyaWVuY2VkIGEgY3Jhc2ggb24gJyVzJy5cbiIsIHVy
bC5kYXRhKCkpOwogCiAgICAgICAgIC8vIERpc3BsYXkgYW4gZXJyb3IgcGFnZQotICAgICAgICBl
d2tfdmlld19odG1sX3N0cmluZ19sb2FkKG1fdmlldy0+dmlldygpLCAiVGhlIHdlYiBwcm9jZXNz
IGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOworICAgICAgICBld2tfdmlld19odG1sX3N0
cmluZ19sb2FkKG1fdmlldy0+ZXZhc09iamVjdCgpLCAiVGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFz
aGVkLiIsIDAsIHVybC5kYXRhKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcAppbmRleCA1OTliZTM0Li5iODgx
NjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xp
ZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xp
ZW50RWZsLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgUGFnZUxvYWRDbGllbnRFZmw6OmRp
ZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYsIFdLQmFja0ZvcndhcmRMaXN0SXRlCiAg
ICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXco
KTsKICAgICBBU1NFUlQodmlldyk7CiAKLSAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3Qg
PSBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQodmlldy0+dmlldygpKTsKKyAgICBFd2tf
QmFja19Gb3J3YXJkX0xpc3QqIGxpc3QgPSBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQo
dmlldy0+ZXZhc09iamVjdCgpKTsKICAgICBBU1NFUlQobGlzdCk7CiAgICAgbGlzdC0+dXBkYXRl
KGFkZGVkSXRlbSwgcmVtb3ZlZEl0ZW1zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmluZGV4IDM4MTRlYzcuLjI0MjJjYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5jcHAKQEAg
LTk1LDE3ICs5NSwxNyBAQCB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6Y2xvc2UoV0tQYWdlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnRha2VGb2N1cyhX
S1BhZ2VSZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAg
ICAgLy8gRklYTUU6IHRoaXMgaXMgb25seSBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uCi0gICAg
ZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3Zp
ZXctPnZpZXcoKSwgZmFsc2UpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT5ldmFzT2JqZWN0KCksIGZhbHNlKTsKIH0KIAog
dm9pZCBQYWdlVUlDbGllbnRFZmw6OmZvY3VzKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xp
ZW50SW5mbyktPm1fdmlldy0+dmlldygpLCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+ZXZhc09iamVjdCgpLCB0
cnVlKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnVuZm9jdXMoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1BhZ2VV
SUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFz
X29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+
ZXZhc09iamVjdCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZh
U2NyaXB0QWxlcnQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcAppbmRleCAw
MDUwMjgzLi5lNmViNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAKQEAgLTU3LDcgKzU3
LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4oKQog
ICAgICAgICByZXR1cm47CiAKICAgICB3aWxsRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgRXdrVmll
dzo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdG9F
d2tWaWV3KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOwogICAgIGRpZEVudGVyRnVsbFNj
cmVlbigpOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eTo6ZXhpdEZ1bGxTY3JlZW4oKQogCiAKICAgICB3aWxsRXhpdEZ1bGxTY3JlZW4oKTsKLSAg
ICBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX3dlYlZpZXcpLT5leGl0RnVsbFNjcmVlbigpOwor
ICAgIHRvRXdrVmlldyhtX3dlYlZpZXcpLT5leGl0RnVsbFNjcmVlbigpOwogICAgIGRpZEV4aXRG
dWxsU2NyZWVuKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggODUzZDQ3ZS4uYTg5NGY1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVm
bC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKLSNpbmNsdWRl
ICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGls
aXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTQsMTcgKzk0LDE4IEBAIFdlYlBhZ2VQcm94eSogV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCiAgICAgLy8gR3Jh
Y2VmdWxseSBmYWxsIGJhY2sgdG8gc29mdHdhcmUgaWYgZXZhc19nbCBlbmdpbmUgaXMgbm90IGF2
YWlsYWJsZS4KICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQogI2VuZGlmCi0gICAgICAgIG1f
aW5zcGVjdG9yV2luZG93ID0gZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgaW5pdGlhbFdpbmRvd1dp
ZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LCAwKTsKKyAgICBtX2luc3BlY3RvcldpbmRvdyA9IGVj
b3JlX2V2YXNfbmV3KDAsIDAsIDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hl
aWdodCwgMCk7CiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KLSAgICBFd2tWaWV3
KiBld2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JX
aW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEkoaW5zcGVj
dG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYgKCFld2tW
aWV3KQorICAgIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmID0gdG9BUEkocGFnZSgpLT5wcm9jZXNz
KCktPmNvbnRleHQoKSk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gRXdrVmlldzo6Y3JlYXRlRXZh
c09iamVjdChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIEV3a0NvbnRleHQ6OmNy
ZWF0ZShjb250ZXh0UmVmKSwgdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpM
ZWdhY3lCZWhhdmlvcik7CisgICAgaWYgKCFtX2luc3BlY3RvclZpZXcpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrVmlldy0+dmlldygpOwotCisgICAgRXdr
VmlldyogZXdrVmlldyA9IHRvRXdrVmlldyhtX2luc3BlY3RvclZpZXcpOworICAgIEFTU0VSVChl
d2tWaWV3KTsKICAgICBld2tWaWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZh
dWx0LmVkaiIpOwogCiAgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1ZpZXctPnNldHRp
bmdzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQ
cm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVm
bC5jcHAKaW5kZXggYTMzMjcyNC4uZGU3MGNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogRXZhc19PYmplY3QqIFdlYlBhZ2VQcm94eTo6dmlld1dpZGdldCgpCiB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+
dmlldygpLT52aWV3KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VDbGllbnRCYXNlKj4o
bV9wYWdlQ2xpZW50KS0+dmlldygpLT5ldmFzT2JqZWN0KCk7CiB9CiAKIFN0cmluZyBXZWJQYWdl
UHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgLyphcHBsaWNhdGlvbk5hbWVG
b3JVc2VyQWdlbnQqLykK
</data>

          </attachment>
      

    </bug>

</bugzilla>